clay-server 5.2.0-beta.4 → 5.2.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/account-auth-socket.js +1 -0
- package/lib/builtin-mates.js +17 -14
- package/lib/canonical-clay-record-authority.js +15 -0
- package/lib/canonical-clay-scheduling-authority.js +19 -0
- package/lib/claude-hook-installer.js +1 -239
- package/lib/claude-jsonl-watcher.js +1 -204
- package/lib/clay-mate-chat-receipts.js +26 -0
- package/lib/clay-mate-chat.js +87 -0
- package/lib/clay-mate-knowledge-input.js +26 -0
- package/lib/clay-mate-knowledge.js +95 -0
- package/lib/clay-mate-lifecycle.js +95 -0
- package/lib/clay-product-control-input.js +33 -0
- package/lib/clay-product-control-tools.js +51 -0
- package/lib/clay-product-control.js +237 -0
- package/lib/clay-project-lifecycle.js +154 -0
- package/lib/clay-project-record-input.js +44 -0
- package/lib/clay-project-records.js +83 -0
- package/lib/clay-scheduling-input.js +21 -0
- package/lib/clay-scheduling-receipts.js +26 -0
- package/lib/clay-scheduling.js +119 -0
- package/lib/clay-screen-controls.js +96 -0
- package/lib/clay-skill-install.js +1 -33
- package/lib/clay-workspace-controls.js +83 -0
- package/lib/clay-workspace-input.js +17 -0
- package/lib/clay-workspace-receipts.js +26 -0
- package/lib/cli-sessions.js +1 -300
- package/lib/codex-defaults.js +1 -28
- package/lib/context-usage.js +3 -2
- package/lib/daemon-project-access.js +11 -0
- package/lib/daemon-project-lifecycle-callbacks.js +15 -0
- package/lib/daemon-project-lifecycle.js +262 -0
- package/lib/daemon-projects.js +1 -1
- package/lib/daemon.js +78 -276
- package/lib/default-ai-runtime.js +4 -8
- package/lib/email-mcp-server.js +1 -1
- package/lib/issues-service.js +29 -15
- package/lib/kiro-defaults.js +1 -22
- package/lib/knowledge-db-import.js +5 -4
- package/lib/knowledge-db-service.js +9 -6
- package/lib/knowledge-document-index.js +2 -1
- package/lib/knowledge-product-operations.js +46 -0
- package/lib/mate-creation-mcp-server.js +2 -0
- package/lib/mate-knowledge-canonical-access.js +10 -0
- package/lib/mate-knowledge-service.js +7 -4
- package/lib/mate-lifecycle-service.js +94 -0
- package/lib/mate-message-delivery.js +43 -0
- package/lib/mate-ready-creation.js +9 -1
- package/lib/mate-schedule-input.js +29 -0
- package/lib/mate-schedule-lifecycle.js +151 -0
- package/lib/mate-scheduling.js +103 -0
- package/lib/mates.js +4 -3
- package/lib/mcp-proxy.js +2 -32
- package/lib/mcp-query-bridge.js +1 -1
- package/lib/mcp-source-adapters.js +1 -91
- package/lib/mcp-source-context.js +1 -42
- package/lib/mcp-source-discovery.js +1 -169
- package/lib/mcp-source-plugins.js +1 -68
- package/lib/mcp-source-restrictions.js +1 -47
- package/lib/mcp-tool-policy.js +1 -26
- package/lib/notes-checklist.js +50 -0
- package/lib/notes.js +49 -3
- package/lib/os-user-diagnostics.js +2 -4
- package/lib/os-users.js +24 -70
- package/lib/project-admin-overview.js +51 -0
- package/lib/project-ask-user.js +4 -2
- package/lib/project-connection.js +8 -7
- package/lib/project-delegated-follow-up.js +2 -1
- package/lib/project-directory-claim.js +65 -0
- package/lib/project-file-operations.js +61 -0
- package/lib/project-filesystem.js +13 -87
- package/lib/project-full-access.js +23 -2
- package/lib/project-http.js +4 -4
- package/lib/project-knowledge.js +32 -18
- package/lib/project-lifecycle-operations.js +98 -0
- package/lib/project-lifecycle-process-witness.js +32 -0
- package/lib/project-lifecycle-runtime.js +50 -0
- package/lib/project-linux-access.js +22 -0
- package/lib/project-logs-canonical-clay.js +27 -0
- package/lib/project-logs-clay-query.js +16 -0
- package/lib/project-logs-schema.js +4 -2
- package/lib/project-logs-service.js +8 -7
- package/lib/project-logs.js +1 -0
- package/lib/project-loop.js +1 -0
- package/lib/project-mate-chat-control.js +55 -0
- package/lib/project-mate-creation-proposal.js +18 -3
- package/lib/project-mcp.js +2 -2
- package/lib/project-models.js +14 -31
- package/lib/project-notifications.js +74 -16
- package/lib/project-ownership.js +77 -0
- package/lib/project-pair-result-delivery.js +14 -3
- package/lib/project-pair-usage.js +12 -13
- package/lib/project-pending-message-queue.js +4 -1
- package/lib/project-product-control.js +87 -0
- package/lib/project-product-session-queue.js +46 -0
- package/lib/project-push-access.js +28 -0
- package/lib/project-scheduled-message-queue.js +30 -0
- package/lib/project-scheduled-messages.js +63 -64
- package/lib/project-scheduled-task-control.js +83 -0
- package/lib/project-scheduled-tasks.js +13 -2
- package/lib/project-scheduling-access.js +10 -0
- package/lib/project-session-actions.js +65 -0
- package/lib/project-session-delete.js +8 -1
- package/lib/project-session-github.js +47 -12
- package/lib/project-session-history-actions.js +167 -0
- package/lib/project-session-pair.js +1 -1
- package/lib/project-session-runtime-actions.js +64 -0
- package/lib/project-session-spawn.js +2 -3
- package/lib/project-session-vendor.js +55 -0
- package/lib/project-sessions.js +82 -267
- package/lib/project-user-message.js +31 -1
- package/lib/project-vendor-login.js +6 -36
- package/lib/project-workspace-operations.js +126 -0
- package/lib/project-workspace-query.js +9 -2
- package/lib/project.js +95 -3
- package/lib/public/app.js +1 -0
- package/lib/public/css/clay-tool-activity.css +51 -0
- package/lib/public/css/home-mate-creation.css +5 -0
- package/lib/public/css/messages.css +6 -2
- package/lib/public/css/overlays.css +4 -2
- package/lib/public/css/project-admin-overview.css +13 -0
- package/lib/public/css/session-folders.css +11 -0
- package/lib/public/css/session-github.css +3 -0
- package/lib/public/css/sticky-notes.css +61 -1
- package/lib/public/index.html +1 -1
- package/lib/public/modules/admin-settings-projects.js +6 -2
- package/lib/public/modules/app-connection.js +8 -1
- package/lib/public/modules/app-favicon.js +11 -2
- package/lib/public/modules/app-header.js +4 -2
- package/lib/public/modules/app-loop-ui.js +2 -0
- package/lib/public/modules/app-message-router.js +1 -1
- package/lib/public/modules/app-messages.js +54 -8
- package/lib/public/modules/app-notifications.js +1 -2
- package/lib/public/modules/app-panels.js +61 -123
- package/lib/public/modules/app-projects.js +5 -0
- package/lib/public/modules/app-rate-limit.js +7 -27
- package/lib/public/modules/chat-render-runtime.js +3 -0
- package/lib/public/modules/clay-owner-navigation.js +27 -0
- package/lib/public/modules/clay-tool-activity.js +140 -0
- package/lib/public/modules/clay-tool-presentation.js +338 -0
- package/lib/public/modules/command-palette.js +1 -1
- package/lib/public/modules/default-ai.js +11 -3
- package/lib/public/modules/home-debate-planning.js +5 -5
- package/lib/public/modules/home-mate-chat.js +8 -6
- package/lib/public/modules/home-mate-creation.js +73 -1
- package/lib/public/modules/mcp-connection-view.js +1 -1
- package/lib/public/modules/permission-control.js +5 -4
- package/lib/public/modules/personal-settings-dialog.js +7 -1
- package/lib/public/modules/project-access-recovery.js +17 -0
- package/lib/public/modules/project-admin-overview.js +21 -0
- package/lib/public/modules/scheduler.js +2 -0
- package/lib/public/modules/session-create-form.js +10 -10
- package/lib/public/modules/session-folder-layout.js +1 -1
- package/lib/public/modules/session-folder-view-menu.js +9 -0
- package/lib/public/modules/session-github.js +65 -8
- package/lib/public/modules/settings-defaults.js +27 -28
- package/lib/public/modules/sidebar-session-folders-ui.js +1 -1
- package/lib/public/modules/sticky-note-markdown.js +72 -6
- package/lib/public/modules/sticky-notes-actions.js +30 -0
- package/lib/public/modules/sticky-notes-browser.js +9 -2
- package/lib/public/modules/sticky-notes-card.js +23 -7
- package/lib/public/modules/sticky-notes-checklist.js +71 -0
- package/lib/public/modules/sticky-notes-editor.js +108 -44
- package/lib/public/modules/sticky-notes-shared.js +50 -2
- package/lib/public/modules/sticky-notes-state.js +66 -0
- package/lib/public/modules/sticky-notes.js +34 -51
- package/lib/public/modules/thinking-lifecycle.js +33 -3
- package/lib/public/modules/thinking-view.js +23 -1
- package/lib/public/modules/tools.js +36 -7
- package/lib/public/modules/tui-grab.js +1 -2
- package/lib/public/modules/user-settings-appearance.js +10 -3
- package/lib/public/modules/user-settings-editors.js +1 -1
- package/lib/public/modules/user-settings-layout.js +11 -2
- package/lib/public/modules/user-settings-preferences.js +6 -2
- package/lib/public/modules/user-settings-profile.js +12 -2
- package/lib/public/modules/user-settings.js +3 -2
- package/lib/public/modules/vendor-login-browser.js +5 -3
- package/lib/public/modules/vendor-login.js +2 -2
- package/lib/public/modules/vendor-priority.js +15 -1
- package/lib/public/muse-avatar.svg +4 -0
- package/lib/public/style.css +2 -0
- package/lib/safe-bash-commands.js +3 -45
- package/lib/scheduled-task-records.js +3 -1
- package/lib/scheduler.js +2 -0
- package/lib/sdk-bridge.js +334 -403
- package/lib/sdk-foreground-admission.js +16 -0
- package/lib/sdk-mcp-descriptors.js +2 -37
- package/lib/sdk-message-processor.js +52 -17
- package/lib/sdk-quota-snapshot.js +1 -1
- package/lib/sdk-response-recovery.js +1 -0
- package/lib/sdk-worker.js +2 -677
- package/lib/server-admin.js +63 -16
- package/lib/server-dm.js +1 -1
- package/lib/server-global-ws.js +10 -20
- package/lib/server-home-chat-events.js +7 -3
- package/lib/server-home-chat.js +4 -16
- package/lib/server-home-mate-creation.js +1 -0
- package/lib/server-home-mcp-consent.js +3 -3
- package/lib/server-mates.js +25 -67
- package/lib/server-owner-ui.js +77 -0
- package/lib/server-path-access.js +38 -0
- package/lib/server-project-removal.js +22 -0
- package/lib/server.js +100 -30
- package/lib/session-config-transition.js +45 -0
- package/lib/session-folders.js +7 -2
- package/lib/session-fork-history.js +21 -0
- package/lib/session-github.js +9 -2
- package/lib/session-hygiene.js +3 -35
- package/lib/session-permission-mode.js +4 -3
- package/lib/session-skill-scope.js +11 -0
- package/lib/session-visibility.js +5 -2
- package/lib/sessions.js +27 -89
- package/lib/terminal-manager.js +52 -0
- package/lib/tool-llm.js +1 -1
- package/lib/tui-transcript-index.js +1 -132
- package/lib/users-permissions.js +2 -8
- package/lib/users.js +4 -0
- package/lib/vendor-login-browser.js +1 -11
- package/lib/workspace-query-access.js +4 -1
- package/lib/ws-schema.js +8 -2
- package/lib/yoke/acp-agent-profiles.js +5 -3
- package/lib/yoke/adapters/antigravity.js +3 -14
- package/lib/yoke/adapters/claude-query-contract.js +9 -0
- package/lib/yoke/adapters/claude.js +54 -50
- package/lib/yoke/adapters/codex-query-contract.js +24 -0
- package/lib/yoke/adapters/codex.js +53 -111
- package/lib/yoke/adapters/kiro.js +3 -1
- package/lib/yoke/adapters/muse-query-contract.js +7 -0
- package/lib/yoke/adapters/muse.js +122 -0
- package/lib/yoke/auth-events.js +17 -0
- package/lib/yoke/claude-hook-installer.js +267 -0
- package/lib/yoke/claude-jsonl-watcher.js +204 -0
- package/lib/yoke/claude-maintenance.js +55 -0
- package/lib/yoke/claude-permission-patterns.js +53 -0
- package/lib/yoke/claude-response-recovery.js +155 -0
- package/lib/yoke/claude-transcript-hygiene.js +34 -0
- package/lib/yoke/claude-worker-startup.js +28 -0
- package/lib/yoke/clay-skill-install.js +33 -0
- package/lib/yoke/cli-sessions.js +300 -0
- package/lib/yoke/codex-app-server.js +7 -12
- package/lib/yoke/codex-idle-recovery.js +81 -1
- package/lib/yoke/codex-recovery-admission.js +164 -0
- package/lib/yoke/configuration.js +13 -0
- package/lib/yoke/discovery.js +70 -0
- package/lib/yoke/errors.js +8 -0
- package/lib/yoke/host-environment.js +7 -0
- package/lib/yoke/index.js +9 -51
- package/lib/yoke/interface.js +116 -0
- package/lib/yoke/kiro-acp-server.js +5 -5
- package/lib/yoke/legacy-sessions.js +89 -0
- package/lib/yoke/login-protocol.js +25 -0
- package/lib/yoke/maintenance.js +12 -0
- package/lib/yoke/mcp-proxy.js +32 -0
- package/lib/yoke/mcp-source-adapters.js +91 -0
- package/lib/yoke/mcp-source-context.js +42 -0
- package/lib/yoke/mcp-source-discovery.js +169 -0
- package/lib/yoke/mcp-source-plugins.js +68 -0
- package/lib/yoke/mcp-source-restrictions.js +47 -0
- package/lib/yoke/mcp-tool-policy-normalize.js +28 -0
- package/lib/yoke/model-preferences.js +6 -0
- package/lib/yoke/muse-artifacts.js +36 -0
- package/lib/yoke/muse-controls.js +50 -0
- package/lib/yoke/muse-input.js +64 -0
- package/lib/yoke/muse-items.js +157 -0
- package/lib/yoke/muse-policy.js +52 -0
- package/lib/yoke/muse-query.js +428 -0
- package/lib/yoke/muse-runtime.js +211 -0
- package/lib/yoke/muse-services.js +79 -0
- package/lib/yoke/muse-skills.js +79 -0
- package/lib/yoke/muse-turns.js +71 -0
- package/lib/yoke/options/acp.js +2 -0
- package/lib/yoke/options/antigravity.js +2 -0
- package/lib/yoke/options/claude.js +21 -0
- package/lib/yoke/options/codex-defaults.js +29 -0
- package/lib/yoke/options/codex-settings.js +21 -0
- package/lib/yoke/options/codex.js +6 -0
- package/lib/yoke/options/kiro-defaults.js +22 -0
- package/lib/yoke/options/kiro.js +5 -0
- package/lib/yoke/options/muse.js +5 -0
- package/lib/yoke/provider-contract.js +5 -0
- package/lib/yoke/providers/antigravity-executable.js +8 -0
- package/lib/yoke/providers/claude-executable.js +40 -0
- package/lib/yoke/providers/claude-model-descriptions.js +14 -0
- package/lib/yoke/providers/claude-process.js +97 -0
- package/lib/yoke/providers/claude-provision.js +75 -0
- package/lib/yoke/providers/codex-errors.js +8 -0
- package/lib/yoke/providers/muse-executable.js +17 -0
- package/lib/yoke/provisioning.js +6 -0
- package/lib/yoke/query-options.js +10 -0
- package/lib/yoke/response-recovery.js +41 -0
- package/lib/yoke/sdk-mcp-descriptors.js +37 -0
- package/lib/yoke/sdk-server-factory.js +7 -0
- package/lib/yoke/session-history.js +8 -0
- package/lib/yoke/session-tool-transport.js +34 -13
- package/lib/yoke/settings.js +23 -0
- package/lib/yoke/source-locations.js +4 -0
- package/lib/yoke/title-query.js +18 -7
- package/lib/yoke/tui-transcript-index.js +132 -0
- package/lib/yoke/usage.js +48 -0
- package/lib/yoke/user-input.js +13 -0
- package/lib/yoke/vendor-registry.js +81 -1
- package/package.json +3 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
.project-admin-overview { overflow: auto; padding: 8px; }
|
|
2
|
+
.project-admin-canvas { width: 100%; min-height: 100%; padding: 24px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); }
|
|
3
|
+
.project-admin-canvas h1 { font-size: 20px; margin: 0 0 16px; }
|
|
4
|
+
.project-admin-canvas h2 { font-size: 16px; }
|
|
5
|
+
.project-admin-canvas [role="tablist"] { display: flex; gap: 4px; border-bottom: 1px solid var(--border); padding-bottom: 8px; }
|
|
6
|
+
.project-admin-canvas [role="tab"] { height: 32px; padding: 0 12px; border: 1px solid var(--border); border-radius: 8px; color: inherit; background: transparent; cursor: pointer; }
|
|
7
|
+
.project-admin-canvas [aria-selected="true"] { background: #5857fc; color: white; }
|
|
8
|
+
.project-admin-canvas :focus-visible { outline: 2px solid #5857fc; outline-offset: 2px; }
|
|
9
|
+
.project-admin-canvas dl { display: grid; grid-template-columns: 110px 1fr; gap: 12px; margin: 24px 0; font-size: 13px; }
|
|
10
|
+
.project-admin-canvas dd { margin: 0; }
|
|
11
|
+
.project-admin-canvas p { max-width: 640px; line-height: 1.6; font-size: 14px; }
|
|
12
|
+
.project-admin-secondary { opacity: .65; }
|
|
13
|
+
@media (max-width: 600px) { .project-admin-canvas { padding: 16px; } }
|
|
@@ -158,6 +158,16 @@
|
|
|
158
158
|
.session-folder-viewmenu .session-folder-radio-dot { width: 12px; height: 12px; }
|
|
159
159
|
.session-folder-viewmenu .session-folder-radio-legend { margin: 2px 0 1px 6px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.4px; }
|
|
160
160
|
.session-folder-viewmenu .session-folder-view-note { padding: 2px 6px 4px; font-size: 11px; line-height: 1.35; }
|
|
161
|
+
.session-folder-view-toggle {
|
|
162
|
+
display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; min-height: 30px; padding: 0 6px;
|
|
163
|
+
border: 0; border-radius: 6px; background: transparent; color: var(--text); font: inherit; font-size: 12.5px; text-align: left; cursor: pointer;
|
|
164
|
+
}
|
|
165
|
+
.session-folder-view-toggle:hover { background: rgba(var(--overlay-rgb), 0.08); }
|
|
166
|
+
.session-folder-view-toggle-track { position: relative; flex: none; width: 28px; height: 16px; border-radius: 999px; background: var(--text-dimmer); transition: background 0.15s ease; }
|
|
167
|
+
.session-folder-view-toggle-thumb { position: absolute; top: 2px; left: 2px; width: 12px; height: 12px; border-radius: 50%; background: var(--sidebar-bg); transition: transform 0.15s ease; }
|
|
168
|
+
.session-folder-view-toggle[aria-checked="true"] .session-folder-view-toggle-track { background: var(--accent); }
|
|
169
|
+
.session-folder-view-toggle[aria-checked="true"] .session-folder-view-toggle-thumb { transform: translateX(12px); }
|
|
170
|
+
.session-folder-view-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
161
171
|
.session-folder-viewmenu .session-folder-radio-group.segmented {
|
|
162
172
|
display: flex; gap: 2px; padding: 2px; margin-top: 2px; border-radius: 8px; background: rgba(var(--overlay-rgb), 0.05);
|
|
163
173
|
}
|
|
@@ -167,6 +177,7 @@
|
|
|
167
177
|
.session-folder-viewmenu.is-mobile { padding: 6px; }
|
|
168
178
|
.session-folder-viewmenu.is-mobile .session-folder-radio { min-height: 40px; font-size: 14px; }
|
|
169
179
|
.session-folder-viewmenu.is-mobile .session-folder-radio-dot { width: 14px; height: 14px; }
|
|
180
|
+
.session-folder-viewmenu.is-mobile .session-folder-view-toggle { min-height: 40px; font-size: 14px; }
|
|
170
181
|
@media (pointer: coarse) {
|
|
171
182
|
.session-folder-viewmenu .session-folder-radio { min-height: 40px; font-size: 14px; }
|
|
172
183
|
}
|
|
@@ -168,6 +168,9 @@
|
|
|
168
168
|
.session-item:has(.session-work-column) > .session-work-links-slot { grid-column: 1 / 3; grid-row: 2; }
|
|
169
169
|
|
|
170
170
|
.github-kind-pr.github-state-closed .github-work-status svg { color: #f85149; }
|
|
171
|
+
.github-kind-pr.github-state-open .github-review-changes svg { color: var(--error); }
|
|
172
|
+
.github-kind-pr.github-state-open .github-review-requested svg { color: var(--warning); }
|
|
173
|
+
.github-kind-pr.github-state-open .github-review-approved svg { color: var(--success); }
|
|
171
174
|
@media (max-width: 600px) {
|
|
172
175
|
#header-github-links { flex: 0 0 auto; }
|
|
173
176
|
#header-github-links .session-github-link { display: none; }
|
|
@@ -514,6 +514,20 @@
|
|
|
514
514
|
background: color-mix(in srgb, var(--note-ink) 12%, transparent) !important;
|
|
515
515
|
border-radius: 4px;
|
|
516
516
|
}
|
|
517
|
+
.sticky-note-checklist-btn.active {
|
|
518
|
+
opacity: 1 !important;
|
|
519
|
+
background: color-mix(in srgb, var(--note-ink) 12%, transparent) !important;
|
|
520
|
+
border-radius: 4px;
|
|
521
|
+
}
|
|
522
|
+
.sticky-note-checklist-btn .lucide { width: 13px; height: 13px; }
|
|
523
|
+
.sticky-note-save-status {
|
|
524
|
+
color: var(--danger, #b42318);
|
|
525
|
+
font-size: 10px;
|
|
526
|
+
max-width: 90px;
|
|
527
|
+
overflow: hidden;
|
|
528
|
+
text-overflow: ellipsis;
|
|
529
|
+
white-space: nowrap;
|
|
530
|
+
}
|
|
517
531
|
|
|
518
532
|
.sn-fmt-bold { font-weight: 800; }
|
|
519
533
|
.sn-fmt-italic { font-style: italic; }
|
|
@@ -692,6 +706,7 @@
|
|
|
692
706
|
overflow-y: auto;
|
|
693
707
|
display: grid;
|
|
694
708
|
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
709
|
+
grid-auto-rows: max-content;
|
|
695
710
|
gap: 10px;
|
|
696
711
|
padding: 12px 12px 28px;
|
|
697
712
|
align-content: start;
|
|
@@ -715,8 +730,23 @@
|
|
|
715
730
|
.notes-browser-card:hover { box-shadow: 0 2px 10px rgba(var(--shadow-rgb), 0.12); }
|
|
716
731
|
.notes-browser-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
717
732
|
/* A closed note is calm, not crossed out: still fully readable. */
|
|
718
|
-
.notes-browser-card.closed {
|
|
733
|
+
.notes-browser-card.closed {
|
|
734
|
+
min-height: 150px;
|
|
735
|
+
align-self: start;
|
|
736
|
+
opacity: 0.88;
|
|
737
|
+
cursor: default;
|
|
738
|
+
}
|
|
719
739
|
.notes-browser-card.closed:hover { box-shadow: none; }
|
|
740
|
+
.notes-browser-card.closed .notes-browser-card-header {
|
|
741
|
+
display: flex;
|
|
742
|
+
flex-wrap: wrap;
|
|
743
|
+
align-items: start;
|
|
744
|
+
}
|
|
745
|
+
.notes-browser-card.closed .notes-browser-card-title {
|
|
746
|
+
flex: 0 0 100%;
|
|
747
|
+
display: block;
|
|
748
|
+
overflow-wrap: anywhere;
|
|
749
|
+
}
|
|
720
750
|
|
|
721
751
|
.notes-browser-card-title { color: var(--note-ink); }
|
|
722
752
|
.notes-browser-card-body { color: var(--note-ink); }
|
|
@@ -791,6 +821,23 @@
|
|
|
791
821
|
-webkit-line-clamp: 5;
|
|
792
822
|
-webkit-box-orient: vertical;
|
|
793
823
|
}
|
|
824
|
+
.notes-browser-card.closed .notes-browser-card-body {
|
|
825
|
+
flex: 0 0 auto;
|
|
826
|
+
display: block;
|
|
827
|
+
min-width: 0;
|
|
828
|
+
overflow: visible;
|
|
829
|
+
overflow-wrap: anywhere;
|
|
830
|
+
word-break: break-word;
|
|
831
|
+
}
|
|
832
|
+
.notes-browser-card.closed .notes-browser-card-body a,
|
|
833
|
+
.notes-browser-card.closed .notes-browser-card-body code,
|
|
834
|
+
.notes-browser-card.closed .notes-browser-card-body pre {
|
|
835
|
+
overflow-wrap: anywhere;
|
|
836
|
+
word-break: break-word;
|
|
837
|
+
}
|
|
838
|
+
.notes-browser-card.closed .notes-browser-card-body pre {
|
|
839
|
+
white-space: pre-wrap;
|
|
840
|
+
}
|
|
794
841
|
.notes-browser-card-body code {
|
|
795
842
|
padding: 1px 3px;
|
|
796
843
|
border-radius: 3px;
|
|
@@ -879,3 +926,16 @@
|
|
|
879
926
|
.sticky-note.sticky-note-flight-away,
|
|
880
927
|
.sticky-note:not(.sticky-note-flight-away) { transition-duration: 0ms; }
|
|
881
928
|
}
|
|
929
|
+
|
|
930
|
+
/* Checklist inputs retain the card's compact reading rhythm. */
|
|
931
|
+
.sn-task-form { display: grid; gap: 6px; }
|
|
932
|
+
.sn-task-row { display: flex; align-items: center; gap: 6px; }
|
|
933
|
+
.sn-task-form input { min-width: 0; width: 100%; box-sizing: border-box; border: 1px solid transparent; border-radius: 4px; background: transparent; color: inherit; font: inherit; padding: 3px 4px; }
|
|
934
|
+
.sn-task-form input:hover, .sn-task-form input:focus { border-color: color-mix(in srgb, var(--note-ink) 25%, transparent); }
|
|
935
|
+
.sn-task-title { font-weight: 600 !important; }
|
|
936
|
+
.sn-task-form button { color: inherit; background: transparent; border: 0; font: inherit; cursor: pointer; }
|
|
937
|
+
.sn-task-form .sn-check { flex-shrink: 0; }
|
|
938
|
+
.sn-task-form .sn-task-save { justify-self: start; padding: 4px 8px; border: 1px solid color-mix(in srgb, var(--note-ink) 25%, transparent); border-radius: 4px; }
|
|
939
|
+
.sn-task-form button:focus-visible, .sn-task-form input:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
940
|
+
.sticky-note-header .sticky-note-md-btn[hidden] { display: none !important; }
|
|
941
|
+
.sn-task-remove .lucide { width: 13px; height: 13px; }
|
package/lib/public/index.html
CHANGED
|
@@ -332,7 +332,7 @@ body { background: transparent; color: inherit; }
|
|
|
332
332
|
<div id="connect-overlay">
|
|
333
333
|
<div class="connect-brand">
|
|
334
334
|
<img class="connect-symbol" src="clay-studio-symbol.png" alt="">
|
|
335
|
-
<
|
|
335
|
+
<span class="connect-wordmark" role="img" aria-label="Clay Studio"></span>
|
|
336
336
|
</div>
|
|
337
337
|
<p id="connect-overlay-msg">Connecting…</p>
|
|
338
338
|
</div>
|
|
@@ -16,7 +16,7 @@ export function loadProjectsTab(body) {
|
|
|
16
16
|
|
|
17
17
|
var accessPromises = projectList.map(function (p) {
|
|
18
18
|
return apiGet("/api/admin/projects/" + p.slug + "/access").then(function (access) {
|
|
19
|
-
return { slug: p.slug, title: p.title || p.project || p.slug, projectOwnerId: p.projectOwnerId || null, visibility: access.visibility || "public", allowedUsers: access.allowedUsers || [] };
|
|
19
|
+
return { slug: p.slug, title: p.title || p.project || p.slug, projectOwnerId: p.projectOwnerId || null, visibility: access.visibility || "public", allowedUsers: access.allowedUsers || [], readOnly: access.contentAccess === false || p.projectOwnerId !== store.get("myUserId") };
|
|
20
20
|
});
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -39,9 +39,13 @@ function renderProjectsTab(body, projectAccessList, allUsers) {
|
|
|
39
39
|
html += '<div class="admin-project-slug">' + escapeHtml(p.slug) + '</div>';
|
|
40
40
|
html += '</div>';
|
|
41
41
|
html += '<div class="admin-project-controls">';
|
|
42
|
+
if (p.readOnly) {
|
|
43
|
+
html += '<span class="admin-project-access-readonly">Administrative metadata only</span></div></div>';
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
42
46
|
// Owner select
|
|
43
47
|
html += '<select aria-label="Project owner" class="admin-owner-select" data-slug="' + escapeHtml(p.slug) + '">';
|
|
44
|
-
html += '<option value=""
|
|
48
|
+
if (!p.projectOwnerId) html += '<option value="" selected disabled>Ownership needs recovery</option>';
|
|
45
49
|
for (var u = 0; u < allUsers.length; u++) {
|
|
46
50
|
var user = allUsers[u];
|
|
47
51
|
var sel = p.projectOwnerId === user.id ? ' selected' : '';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { leaveRevokedProject, reconnectDestination } from './project-access-recovery.js';
|
|
1
2
|
// app-connection.js - WebSocket connection, reconnect, status
|
|
2
3
|
// Extracted from app.js (PR-22)
|
|
3
4
|
|
|
@@ -355,6 +356,7 @@ export function connect() {
|
|
|
355
356
|
console.log("[clay] WebSocket reconnected after " + (Date.now() - disconnectedAt) + "ms");
|
|
356
357
|
}
|
|
357
358
|
disconnectedAt = 0;
|
|
359
|
+
newWs.send(JSON.stringify({ type: "clay_ui_ready", version: 1 }));
|
|
358
360
|
setStatus("connected");
|
|
359
361
|
startHeartbeat(newWs, attemptEpoch);
|
|
360
362
|
lifecycle.clearRetry();
|
|
@@ -460,7 +462,12 @@ export function scheduleReconnect(reason) {
|
|
|
460
462
|
location.reload();
|
|
461
463
|
return;
|
|
462
464
|
}
|
|
463
|
-
|
|
465
|
+
return res.json().then(function (info) {
|
|
466
|
+
if (!lifecycle.canProceed(authEpoch)) return;
|
|
467
|
+
var destination = reconnectDestination(info, store.get('currentSlug'));
|
|
468
|
+
if (destination) { leaveRevokedProject(destination); return; }
|
|
469
|
+
connect();
|
|
470
|
+
});
|
|
464
471
|
}).catch(function () {
|
|
465
472
|
var authFinished = lifecycle.finishAuth(authEpoch, authToken);
|
|
466
473
|
if (authFinished && lifecycle.canProceed(authEpoch)) connect();
|
|
@@ -197,7 +197,7 @@ export function stopUrgentBlink() {
|
|
|
197
197
|
|
|
198
198
|
export function setActivity(text) {
|
|
199
199
|
var thinkingState = store.get('thinkingState');
|
|
200
|
-
if (text === "thinking" && thinkingState && thinkingState.active) {
|
|
200
|
+
if ((text === "thinking" || text === "running") && thinkingState && thinkingState.active) {
|
|
201
201
|
// Live Thinking already owns the tail progress UI. Compaction and tool
|
|
202
202
|
// activity intentionally continue through so their distinct states show.
|
|
203
203
|
if (getActivityEl()) {
|
|
@@ -225,9 +225,18 @@ export function setActivity(text) {
|
|
|
225
225
|
_actEl.innerHTML =
|
|
226
226
|
'<div class="mate-thinking-dots"><span></span><span></span><span></span></div>';
|
|
227
227
|
}
|
|
228
|
+
_actEl.setAttribute("role", "status");
|
|
229
|
+
_actEl.setAttribute("aria-live", "polite");
|
|
228
230
|
setActivityEl(_actEl);
|
|
229
|
-
addToMessages(_actEl);
|
|
230
231
|
}
|
|
232
|
+
var activity = getActivityEl();
|
|
233
|
+
var labels = { waiting: "Waiting for provider", running: "Working", background: "Background work pending" };
|
|
234
|
+
var label = activity.querySelector(".activity-state-label");
|
|
235
|
+
if (labels[text]) {
|
|
236
|
+
if (!label) { label = document.createElement("span"); label.className = "activity-state-label activity-text"; activity.appendChild(label); }
|
|
237
|
+
label.textContent = labels[text];
|
|
238
|
+
} else if (label) label.remove();
|
|
239
|
+
addToMessages(activity);
|
|
231
240
|
scrollToBottom();
|
|
232
241
|
} else {
|
|
233
242
|
if (getActivityEl()) {
|
|
@@ -267,14 +267,16 @@ export function initHeader() {
|
|
|
267
267
|
addRow("Local ID", split.panes[pi].sessionId);
|
|
268
268
|
if (member && member.cliSessionId) {
|
|
269
269
|
addRow("Session ID", member.cliSessionId);
|
|
270
|
-
|
|
270
|
+
var memberResume = ((store.get("vendorInfo") || {})[member.vendor || "claude"] || {}).terminalResumeCommand;
|
|
271
|
+
if (memberResume) addRow("Resume", memberResume + " " + member.cliSessionId);
|
|
271
272
|
}
|
|
272
273
|
}
|
|
273
274
|
} else {
|
|
274
275
|
var s = store.snap();
|
|
275
276
|
if (s.cliSessionId) addRow("Session ID", s.cliSessionId);
|
|
276
277
|
if (s.activeSessionId) addRow("Local ID", s.activeSessionId);
|
|
277
|
-
|
|
278
|
+
var resume = ((s.vendorInfo || {})[s.currentVendor] || {}).terminalResumeCommand;
|
|
279
|
+
if (s.cliSessionId && resume) addRow("Resume", resume + " " + s.cliSessionId);
|
|
278
280
|
}
|
|
279
281
|
|
|
280
282
|
document.body.appendChild(pop);
|
|
@@ -657,6 +657,8 @@ function renderPreviewModelTab(bodyEl) {
|
|
|
657
657
|
}
|
|
658
658
|
|
|
659
659
|
var opts = {
|
|
660
|
+
effortLevels: ((store.get("vendorInfo") || {})[store.get("currentVendor")] || {}).effortLevels || [],
|
|
661
|
+
configuration: ((store.get("vendorInfo") || {})[store.get("currentVendor")] || {}).configuration || {},
|
|
660
662
|
models: s.currentModels || [],
|
|
661
663
|
currentModel: _previewLoopSettings.model || "",
|
|
662
664
|
currentMode: _previewLoopSettings.permissionMode || "default",
|
|
@@ -58,7 +58,7 @@ export function handleHomeProtocolMessage(msg) {
|
|
|
58
58
|
handleHomeDebateTranscript(msg);
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
|
-
if (msg.type === "home_mcp_import_question" || msg.type === "home_mcp_import_question_resolved") {
|
|
61
|
+
if (msg.type === "home_mcp_import_question" || msg.type === "home_mcp_import_question_resolved" || msg.type === "home_mate_question" || msg.type === "home_mate_question_resolved") {
|
|
62
62
|
if (!handleSearchClayMessage(msg)) handleHomeDebateTranscript(msg);
|
|
63
63
|
return true;
|
|
64
64
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { handleOwnerNavigation } from './clay-owner-navigation.js';
|
|
2
|
+
import { leaveRevokedProject } from './project-access-recovery.js';
|
|
1
3
|
import { handlePersonalSettingsMessage } from './user-settings-preferences.js';
|
|
2
4
|
import { handleServerUpdate } from './server-settings-controls.js';
|
|
3
5
|
import { handleYouMessage } from './you.js';
|
|
@@ -9,7 +11,7 @@ import { handleLinearResult } from './linear-panel.js';
|
|
|
9
11
|
import { handleSharedBrowserMessage } from './shared-browser.js';
|
|
10
12
|
import { openWireframe } from './wireframe-workbench.js';
|
|
11
13
|
import { handlePrimaryWorkResult } from './session-work-primary.js';
|
|
12
|
-
import { syncGithubSessions } from './session-github.js';
|
|
14
|
+
import { syncGithubSessions, applyGithubPersonalReviewStatus } from './session-github.js';
|
|
13
15
|
import { handleIssuesMessageInContext as handleIssuesMessage } from './issues-context.js';
|
|
14
16
|
// app-messages.js - WebSocket message router
|
|
15
17
|
// Extracted from app.js (PR-23)
|
|
@@ -66,7 +68,7 @@ import { handleTuiTranscriptState } from './tui-grab.js';
|
|
|
66
68
|
import { tuiModalHandleTermOutput, tuiModalHandleTermResized, tuiModalHandleTermExited, tuiModalHandleTermClosed } from './tui-attention.js';
|
|
67
69
|
import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult } from './context-sources.js';
|
|
68
70
|
import { refreshEmailSettings } from './user-settings.js';
|
|
69
|
-
import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
|
|
71
|
+
import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteUpdateResult, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
|
|
70
72
|
import { handleNoteDeleteResult } from './sticky-notes-browser.js';
|
|
71
73
|
import { handleProjectLogsState, handleProjectLogEntry, handleProjectLogCommented, handleProjectLogCommentReviewed, handleProjectLogDeleted, handleProjectLogUpdated, handleProjectLogsError, handleScheduledTaskResultsState, handleScheduledTaskResultCreated, handleScheduledTaskResultSession } from './project-logs.js';
|
|
72
74
|
import { handleSkillInstalled, handleSkillUninstalled } from './skills.js';
|
|
@@ -119,6 +121,7 @@ var connectOverlay = document.getElementById("connect-overlay");
|
|
|
119
121
|
initMessageDeliveryUi();
|
|
120
122
|
|
|
121
123
|
export function processMessage(msg) {
|
|
124
|
+
if (handleOwnerNavigation(msg)) return;
|
|
122
125
|
if (["update_available", "up_to_date", "update_started", "update_check_failed"].indexOf(msg.type) !== -1) handleServerUpdate(msg);
|
|
123
126
|
if (/^(set_pin|set_keep_awake|set_inherit_groups|set_image_retention|set_update_channel|restart_server|shutdown_server)_result$/.test(msg.type)) handleServerSettingResult(msg);
|
|
124
127
|
if (handleProjectDebateMessage(msg)) return;
|
|
@@ -146,7 +149,7 @@ export function processMessage(msg) {
|
|
|
146
149
|
return;
|
|
147
150
|
}
|
|
148
151
|
if (msg.type === "access_revoked") {
|
|
149
|
-
|
|
152
|
+
leaveRevokedProject("/");
|
|
150
153
|
return;
|
|
151
154
|
}
|
|
152
155
|
// Preserve original timestamp from history replay
|
|
@@ -279,7 +282,7 @@ export function processMessage(msg) {
|
|
|
279
282
|
|
|
280
283
|
// Restore accurate context data from the last result in full history
|
|
281
284
|
if (msg.lastUsage || msg.lastModelUsage) {
|
|
282
|
-
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens);
|
|
285
|
+
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens, msg.context);
|
|
283
286
|
}
|
|
284
287
|
updateContextPanel();
|
|
285
288
|
updateUsagePanel();
|
|
@@ -287,6 +290,7 @@ export function processMessage(msg) {
|
|
|
287
290
|
// the restored turn instead of starting a second answer bubble.
|
|
288
291
|
if (store.get('sessionIsProcessing')) {
|
|
289
292
|
flushStreamBuffer();
|
|
293
|
+
if (store.get('turnActivity')) setActivity(store.get('turnActivity').phase);
|
|
290
294
|
} else {
|
|
291
295
|
markAllToolsDone();
|
|
292
296
|
finalizeAssistantBlock();
|
|
@@ -775,6 +779,9 @@ export function processMessage(msg) {
|
|
|
775
779
|
handlePaletteSessionSwitch();
|
|
776
780
|
maybeRestoreSplitGroup();
|
|
777
781
|
break;
|
|
782
|
+
case "session_github_status":
|
|
783
|
+
applyGithubPersonalReviewStatus(msg);
|
|
784
|
+
break;
|
|
778
785
|
|
|
779
786
|
case "split_groups":
|
|
780
787
|
applyProjectSplitGroups(msg.groups || []);
|
|
@@ -906,7 +913,7 @@ export function processMessage(msg) {
|
|
|
906
913
|
? msg.runtimeTerminalId
|
|
907
914
|
: (typeof msg.terminalId === "number" ? msg.terminalId : null);
|
|
908
915
|
var _sessionRole = msg.sessionRole === "worker" ? "worker" : "driver";
|
|
909
|
-
store.set({ activeSessionId: msg.id, sessionOriginId: msg.sessionOriginId || null, cliSessionId: msg.cliSessionId || null, currentModel: msg.model || "", currentEffort: msg.effort || store.get('currentEffort'), vendorCapabilities: msg.capabilities || {}, sessionIsProcessing: !!msg.isProcessing, activeSessionMode: _effectiveMode, activeTerminalId: _effectiveTerminalId, sessionHasHistory: !!msg.hasHistory, sessionVendorBound: !!msg.vendor || !!msg.hasHistory, sessionFullAccess: msg.permissionMode === "bypassPermissions", currentMode: msg.permissionMode || store.get('currentMode'), effectivePermissionMode: msg.effectivePermissionMode || null, permissionCapabilities: msg.permissionCapabilities || { auto: false, mcpOverride: false }, mcpPermissionModeOverrides: msg.mcpPermissionModeOverrides || {}, activeSessionMateId: _sessionRole === "worker" ? null : (store.get('activeProjectMateId') || null), activeSessionMateName: _sessionRole === "worker" ? "" : (store.get('activeProjectMateName') || "") });
|
|
916
|
+
store.set({ activeSessionId: msg.id, sessionOriginId: msg.sessionOriginId || null, cliSessionId: msg.cliSessionId || null, currentModel: msg.model || "", currentEffort: msg.effort || store.get('currentEffort'), vendorCapabilities: msg.capabilities || {}, sessionIsProcessing: !!msg.isProcessing, turnActivity: null, activeSessionMode: _effectiveMode, activeTerminalId: _effectiveTerminalId, sessionHasHistory: !!msg.hasHistory, sessionVendorBound: !!msg.vendor || !!msg.hasHistory, sessionFullAccess: msg.permissionMode === "bypassPermissions", currentMode: msg.permissionMode || store.get('currentMode'), effectivePermissionMode: msg.effectivePermissionMode || null, permissionCapabilities: msg.permissionCapabilities || { auto: false, mcpOverride: false }, mcpPermissionModeOverrides: msg.mcpPermissionModeOverrides || {}, activeSessionMateId: _sessionRole === "worker" ? null : (store.get('activeProjectMateId') || null), activeSessionMateName: _sessionRole === "worker" ? "" : (store.get('activeProjectMateName') || "") });
|
|
910
917
|
handleScheduledTaskSessionSwitched(msg);
|
|
911
918
|
requestLoopInterviewState();
|
|
912
919
|
activateDeliverySession(msg.id, msg.cliSessionId || null, msg.sessionOriginId || null);
|
|
@@ -1033,7 +1040,11 @@ export function processMessage(msg) {
|
|
|
1033
1040
|
// running session, where history_done keeps current tools active.
|
|
1034
1041
|
// Question answers, plan feedback and Driver delegations are injected
|
|
1035
1042
|
// mid-turn, so tools before them may still be running.
|
|
1036
|
-
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated)
|
|
1043
|
+
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated) {
|
|
1044
|
+
markAllToolsDone();
|
|
1045
|
+
// Older histories predate explicit foreground presentation boundaries.
|
|
1046
|
+
finalizeAssistantBlock();
|
|
1047
|
+
}
|
|
1037
1048
|
resetThinkingGroup();
|
|
1038
1049
|
if (msg.planContent) {
|
|
1039
1050
|
setPlanContent(msg.planContent);
|
|
@@ -1130,7 +1141,7 @@ export function processMessage(msg) {
|
|
|
1130
1141
|
// events make it through.
|
|
1131
1142
|
removeMatePreThinking();
|
|
1132
1143
|
if (!(store.get('dmMode') && store.get('dmTargetUser') && store.get('dmTargetUser').isMate) && !store.get('matePreThinkingEl')) {
|
|
1133
|
-
setActivity("thinking");
|
|
1144
|
+
setActivity((store.get("turnActivity") || {}).phase || "thinking");
|
|
1134
1145
|
}
|
|
1135
1146
|
}
|
|
1136
1147
|
break;
|
|
@@ -1166,8 +1177,24 @@ export function processMessage(msg) {
|
|
|
1166
1177
|
}
|
|
1167
1178
|
break;
|
|
1168
1179
|
|
|
1180
|
+
case "turn_activity":
|
|
1181
|
+
if (["waiting", "running", "background"].indexOf(msg.phase) === -1) break;
|
|
1182
|
+
store.set({ turnActivity: { phase: msg.phase, turnId: msg.turnId || null, disposition: msg.disposition || null } });
|
|
1183
|
+
if (!store.get('replayingHistory') && store.get('sessionIsProcessing')) {
|
|
1184
|
+
removeMatePreThinking();
|
|
1185
|
+
setActivity(msg.phase);
|
|
1186
|
+
}
|
|
1187
|
+
break;
|
|
1188
|
+
|
|
1189
|
+
case "assistant_boundary":
|
|
1190
|
+
// Foreground presentation ended; background work still owns its real
|
|
1191
|
+
// terminal. Flush pending animation text without finishing tools/Stop.
|
|
1192
|
+
finalizeAssistantBlock();
|
|
1193
|
+
break;
|
|
1194
|
+
|
|
1169
1195
|
case "delta":
|
|
1170
1196
|
if (typeof msg.text !== "string") break;
|
|
1197
|
+
store.set({ turnActivity: null });
|
|
1171
1198
|
removeMatePreThinking();
|
|
1172
1199
|
stopThinking();
|
|
1173
1200
|
setActivity(null);
|
|
@@ -1215,6 +1242,8 @@ export function processMessage(msg) {
|
|
|
1215
1242
|
renderMcpDebateProposal(msg.id, msg.input);
|
|
1216
1243
|
startUrgentBlink();
|
|
1217
1244
|
} else if (msg.name === "AskUserQuestion" && msg.input && msg.input.questions) {
|
|
1245
|
+
store.set({ turnActivity: null });
|
|
1246
|
+
setActivity(null);
|
|
1218
1247
|
var askTool = getTools()[msg.id];
|
|
1219
1248
|
if (askTool) {
|
|
1220
1249
|
if (askTool.el) askTool.el.style.display = "none";
|
|
@@ -1279,6 +1308,11 @@ export function processMessage(msg) {
|
|
|
1279
1308
|
renderGeneratedImage(msg);
|
|
1280
1309
|
break;
|
|
1281
1310
|
|
|
1311
|
+
case 'mate_schedule_question_expired':
|
|
1312
|
+
markAskUserAnswered(msg.toolId, { 0: msg.error || 'This schedule review expired.' });
|
|
1313
|
+
stopUrgentBlink();
|
|
1314
|
+
break;
|
|
1315
|
+
|
|
1282
1316
|
case 'mcp_import_consent_expired':
|
|
1283
1317
|
markAskUserAnswered(msg.toolId, { 0: msg.error || 'No import was approved.' });
|
|
1284
1318
|
stopUrgentBlink();
|
|
@@ -1290,6 +1324,7 @@ export function processMessage(msg) {
|
|
|
1290
1324
|
break;
|
|
1291
1325
|
|
|
1292
1326
|
case "permission_request":
|
|
1327
|
+
store.set({ turnActivity: null });
|
|
1293
1328
|
setActivity(null);
|
|
1294
1329
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1295
1330
|
startUrgentBlink();
|
|
@@ -1306,12 +1341,15 @@ export function processMessage(msg) {
|
|
|
1306
1341
|
break;
|
|
1307
1342
|
|
|
1308
1343
|
case "permission_request_pending":
|
|
1344
|
+
store.set({ turnActivity: null });
|
|
1309
1345
|
setActivity(null);
|
|
1310
1346
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1311
1347
|
startUrgentBlink();
|
|
1312
1348
|
break;
|
|
1313
1349
|
|
|
1314
1350
|
case "elicitation_request":
|
|
1351
|
+
store.set({ turnActivity: null });
|
|
1352
|
+
setActivity(null);
|
|
1315
1353
|
renderElicitationRequest(msg);
|
|
1316
1354
|
startUrgentBlink();
|
|
1317
1355
|
break;
|
|
@@ -1326,6 +1364,8 @@ export function processMessage(msg) {
|
|
|
1326
1364
|
break;
|
|
1327
1365
|
|
|
1328
1366
|
case "user_dialog_request":
|
|
1367
|
+
store.set({ turnActivity: null });
|
|
1368
|
+
setActivity(null);
|
|
1329
1369
|
renderUserDialogRequest(msg);
|
|
1330
1370
|
startUrgentBlink();
|
|
1331
1371
|
break;
|
|
@@ -1391,7 +1431,7 @@ export function processMessage(msg) {
|
|
|
1391
1431
|
finalizeAssistantBlock();
|
|
1392
1432
|
addTurnMeta(msg.cost, msg.duration);
|
|
1393
1433
|
accumulateUsage(msg.cost, msg.usage);
|
|
1394
|
-
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens);
|
|
1434
|
+
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens, msg.context);
|
|
1395
1435
|
break;
|
|
1396
1436
|
|
|
1397
1437
|
case "context_usage":
|
|
@@ -1404,6 +1444,7 @@ export function processMessage(msg) {
|
|
|
1404
1444
|
break;
|
|
1405
1445
|
|
|
1406
1446
|
case "done":
|
|
1447
|
+
store.set({ turnActivity: null });
|
|
1407
1448
|
removeMatePreThinking();
|
|
1408
1449
|
setActivity(null);
|
|
1409
1450
|
finishThinkingTurn();
|
|
@@ -1427,6 +1468,7 @@ export function processMessage(msg) {
|
|
|
1427
1468
|
break;
|
|
1428
1469
|
|
|
1429
1470
|
case "error":
|
|
1471
|
+
store.set({ turnActivity: null });
|
|
1430
1472
|
removeMatePreThinking();
|
|
1431
1473
|
setActivity(null);
|
|
1432
1474
|
finishThinkingTurn();
|
|
@@ -1755,6 +1797,10 @@ export function processMessage(msg) {
|
|
|
1755
1797
|
handleNoteUpdated(msg);
|
|
1756
1798
|
break;
|
|
1757
1799
|
|
|
1800
|
+
case "note_update_result":
|
|
1801
|
+
handleNoteUpdateResult(msg);
|
|
1802
|
+
break;
|
|
1803
|
+
|
|
1758
1804
|
case "note_written":
|
|
1759
1805
|
showToast((msg.byTitle || "Agent") + ' left a note: "' + (msg.preview || "") + '"');
|
|
1760
1806
|
handleNoteWritten(msg);
|
|
@@ -26,8 +26,7 @@ function getVendorLoginCommand(vendor) {
|
|
|
26
26
|
var vendors = store.get('vendorInfo') || {};
|
|
27
27
|
var info = vendors[vendor];
|
|
28
28
|
if (info && info.loginCommand) return info.loginCommand;
|
|
29
|
-
|
|
30
|
-
return fallbacks[vendor] || fallbacks.claude;
|
|
29
|
+
return "";
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
// --- Pending TUI attention tracking ---
|