diff --git a/apps/desktop/preload.cjs b/apps/desktop/preload.cjs index 46f97933..a0f2d11c 100644 --- a/apps/desktop/preload.cjs +++ b/apps/desktop/preload.cjs @@ -224,14 +224,10 @@ function updateOpenCodeIntegration(snapshot, selected) { const opencode = snapshot.opencodeStatus; const preview = snapshot.opencodePreview; if (!opencode || !preview) return; - const card = document.querySelector('[data-integration-card="opencode"]'); - if (card instanceof HTMLElement) card.classList.toggle("needs-attention", opencode.state === "not_detected" || opencode.state === "error"); - const summary = document.getElementById("integration-opencode-summary"); - if (summary) summary.textContent = integrationSummaryFor("OpenCode", opencode.state, opencode.details, snapshot.commandPaths.opencode); const cardStatus = document.getElementById("integration-opencode-status"); if (cardStatus) { cardStatus.textContent = opencode.label; - cardStatus.className = `agent-status-pill ${statusClassFor(opencode.state)}`; + cardStatus.className = `agent-status-pill ${cardStatusClassFor(opencode.state)}`; } const installCard = document.getElementById("integration-opencode-install"); if (installCard instanceof HTMLButtonElement) { @@ -273,14 +269,10 @@ function updateOpenCodeIntegration(snapshot, selected) { } function updateClaudeIntegrationCard(snapshot) { - const card = document.querySelector('[data-integration-card="claude"]'); - if (card instanceof HTMLElement) card.classList.toggle("needs-attention", snapshot.status.state === "not_detected" || snapshot.status.state === "error"); - const summary = document.getElementById("integration-claude-summary"); - if (summary) summary.textContent = integrationSummaryFor("Claude Code", snapshot.status.state, snapshot.status.details, snapshot.commandPaths.claude); const status = document.getElementById("integration-claude-status"); if (status) { status.textContent = snapshot.status.state === "configured" ? "Installed" : snapshot.status.canConfigure ? "Ready" : snapshot.status.label; - status.className = `agent-status-pill ${statusClassFor(snapshot.status.state)}`; + status.className = `agent-status-pill ${cardStatusClassFor(snapshot.status.state)}`; } const install = document.getElementById("integration-claude-install"); @@ -310,11 +302,9 @@ function updateClaudeIntegrationCard(snapshot) { } } -function integrationSummaryFor(label, state, details, overridePath) { - if (state === "not_detected") return overridePath ? `${label} was not found at the saved path. Open Configure to update it.` : `${label} was not found. Open Configure to paste the full command path.`; - if (state === "error") return details || `${label} needs attention. Open Configure for details.`; - if (state === "configured") return `${label} is connected to OpenPets.`; - return details || `${label} is ready to configure.`; +function cardStatusClassFor(state) { + if (state === "not_detected" || state === "error") return "error"; + return statusClassFor(state); } function bindIntegrationHubButtons(snapshot, select) { diff --git a/apps/desktop/src/windows.ts b/apps/desktop/src/windows.ts index 6528a063..b0affb0e 100644 --- a/apps/desktop/src/windows.ts +++ b/apps/desktop/src/windows.ts @@ -515,7 +515,6 @@ function createAgentSetupHtml(definition: TaskWindowDefinition): string {

Claude Code

Connect Claude Code to your OpenPets companion.

-

Checking Claude Code…

@@ -863,14 +862,11 @@ function createTaskWindowStyles(): string { body[data-openpets-view="agent-setup"] .integration-card { min-height: 248px; box-sizing: border-box; display: flex; flex-direction: column; gap: 9px; border: 1px solid rgba(126, 161, 210, 0.44); border-radius: 20px; background: rgba(255,255,255,0.76); box-shadow: 0 16px 38px rgba(61, 99, 160, 0.1), inset 0 1px 0 rgba(255,255,255,0.94); padding: 16px; } body[data-openpets-view="agent-setup"] .integration-card.featured { border-color: rgba(37, 99, 235, 0.36); background: linear-gradient(180deg, rgba(239, 247, 255, 0.92), rgba(255,255,255,0.78)); } body[data-openpets-view="agent-setup"] .integration-card.disabled { opacity: 0.74; } - body[data-openpets-view="agent-setup"] .integration-card.needs-attention { border-color: rgba(239, 68, 68, 0.38); background: linear-gradient(180deg, rgba(254, 242, 242, 0.82), rgba(255,255,255,0.78)); } body[data-openpets-view="agent-setup"] .integration-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } body[data-openpets-view="agent-setup"] .integration-icon { width: 48px; height: 48px; display: grid; place-items: center; border: 1px solid rgba(126, 161, 210, 0.34); border-radius: 16px; background: rgba(255,255,255,0.76); box-shadow: inset 0 1px 0 rgba(255,255,255,0.9), 0 10px 20px rgba(61, 99, 160, 0.08); } body[data-openpets-view="agent-setup"] .integration-icon img { width: 28px; height: 28px; object-fit: contain; } body[data-openpets-view="agent-setup"] .integration-card h2 { margin: 0; font-size: 20px; color: #102149; } body[data-openpets-view="agent-setup"] .integration-card p { flex: 1 1 auto; margin: 0; color: #526483; line-height: 1.35; font-size: 14px; } - body[data-openpets-view="agent-setup"] .integration-card .integration-summary { flex: 0 0 auto; padding: 10px 11px; border-radius: 12px; background: rgba(239, 246, 255, 0.72); border: 1px solid rgba(37, 99, 235, 0.14); color: #36547d; font-size: 13px; } - body[data-openpets-view="agent-setup"] .integration-card.needs-attention .integration-summary { background: rgba(254, 242, 242, 0.78); border-color: rgba(239, 68, 68, 0.22); color: #991b1b; } body[data-openpets-view="agent-setup"] .integration-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: auto; } body[data-openpets-view="agent-setup"] .integration-actions.stacked { grid-template-columns: 1fr; gap: 8px; } body[data-openpets-view="agent-setup"] .integration-actions .agent-action:only-child { grid-column: 1 / -1; }