clay-server 5.2.0-beta.1 → 5.2.0-beta.10
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 +19 -16
- package/lib/bundled-skills/clay-agent-browser/SKILL.md +6 -2
- 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-control-presentation-binding.js +96 -0
- package/lib/clay-control-presentation.js +128 -0
- package/lib/clay-control-target-projection.js +26 -0
- package/lib/clay-mate-chat-receipts.js +26 -0
- package/lib/clay-mate-chat.js +88 -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 +247 -0
- package/lib/clay-project-lifecycle.js +154 -0
- package/lib/clay-project-record-input.js +44 -0
- package/lib/clay-project-records.js +84 -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 +104 -0
- package/lib/clay-skill-install.js +1 -33
- package/lib/clay-workspace-controls.js +84 -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/contextual-screen-snapshot.js +38 -0
- 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/dm-digest-cursor.js +120 -0
- 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-validation.js +46 -0
- package/lib/knowledge-db-import.js +99 -0
- package/lib/knowledge-db-service.js +24 -33
- package/lib/knowledge-db-storage-nedb-maintenance.js +99 -0
- package/lib/knowledge-db-storage-nedb.js +66 -0
- package/lib/knowledge-db-storage.js +72 -0
- package/lib/knowledge-db-validation.js +0 -0
- package/lib/knowledge-document-index.js +2 -1
- package/lib/knowledge-file-store.js +7 -1
- package/lib/knowledge-product-operations.js +46 -0
- package/lib/mate-avatar-catalog.js +12 -0
- package/lib/mate-avatar-migration.js +41 -0
- package/lib/mate-context-service.js +138 -0
- package/lib/mate-context-tools.js +21 -0
- package/lib/mate-creation-mcp-server.js +2 -0
- package/lib/mate-knowledge-canonical-access.js +10 -0
- package/lib/mate-knowledge-mate-bound.js +53 -0
- package/lib/mate-knowledge-mcp-server.js +55 -8
- package/lib/mate-knowledge-service.js +16 -34
- package/lib/mate-knowledge-text-tools.js +106 -0
- 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 +18 -6
- package/lib/mcp-agent-tools.js +117 -0
- package/lib/mcp-connection-store.js +119 -15
- package/lib/mcp-import-credentials.js +31 -0
- package/lib/mcp-local-transport.js +13 -0
- package/lib/mcp-oauth.js +8 -6
- package/lib/mcp-proxy.js +2 -32
- package/lib/mcp-query-bridge.js +30 -0
- package/lib/mcp-remote-connections.js +74 -20
- package/lib/mcp-source-adapters.js +1 -0
- package/lib/mcp-source-context.js +1 -0
- package/lib/mcp-source-discovery.js +1 -0
- package/lib/mcp-source-plugins.js +1 -0
- package/lib/mcp-source-restrictions.js +1 -0
- package/lib/mcp-tool-policy.js +9 -0
- 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/pane-pending-interactions.js +20 -0
- package/lib/pane-session-activation.js +114 -0
- package/lib/pane-session-transport.js +26 -0
- package/lib/project-admin-overview.js +51 -0
- package/lib/project-ask-user.js +8 -4
- package/lib/project-connection.js +14 -10
- package/lib/project-control-git-view.js +12 -0
- package/lib/project-debate.js +1 -0
- 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 +15 -85
- package/lib/project-full-access.js +23 -2
- package/lib/project-http.js +7 -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-mate-interaction.js +40 -62
- package/lib/project-mcp.js +54 -16
- package/lib/project-models.js +14 -31
- package/lib/project-notifications.js +76 -17
- 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 +89 -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 +67 -68
- 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-document.js +27 -7
- package/lib/project-session-github.js +63 -19
- package/lib/project-session-history-actions.js +167 -0
- package/lib/project-session-linear.js +14 -6
- package/lib/project-session-notes.js +7 -3
- 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 +103 -272
- package/lib/project-shared-browser.js +78 -17
- package/lib/project-studio-presentation.js +58 -0
- package/lib/project-user-message.js +67 -1
- package/lib/project-vendor-login.js +6 -36
- package/lib/project-workspace-operations.js +126 -0
- package/lib/project-workspace-query.js +19 -2
- package/lib/project.js +178 -45
- package/lib/public/app.js +46 -0
- package/lib/public/appearance-bootstrap.js +16 -0
- package/lib/public/css/clay-tool-activity.css +51 -0
- package/lib/public/css/clay-workspace.css +29 -0
- package/lib/public/css/command-palette.css +12 -33
- package/lib/public/css/contextual-clay.css +240 -0
- package/lib/public/css/home-debate-planning.css +2 -0
- package/lib/public/css/home-mate-creation.css +5 -0
- package/lib/public/css/input.css +6 -0
- package/lib/public/css/mate-avatar-gallery.css +12 -0
- package/lib/public/css/mate-conversation.css +10 -5
- 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 +46 -1
- package/lib/public/css/shared-browser.css +35 -1
- package/lib/public/css/sticky-notes.css +87 -1
- package/lib/public/index.html +11 -5
- package/lib/public/mate-avatars/B01.png +0 -0
- package/lib/public/mate-avatars/B02.png +0 -0
- package/lib/public/mate-avatars/B03.png +0 -0
- package/lib/public/mate-avatars/B04.png +0 -0
- package/lib/public/mate-avatars/B05.png +0 -0
- package/lib/public/mate-avatars/B06.png +0 -0
- package/lib/public/mate-avatars/B07.png +0 -0
- package/lib/public/mate-avatars/B08.png +0 -0
- package/lib/public/mate-avatars/B09.png +0 -0
- package/lib/public/mate-avatars/B10.png +0 -0
- package/lib/public/mate-avatars/B11.png +0 -0
- package/lib/public/mate-avatars/B12.png +0 -0
- package/lib/public/mate-avatars/B13.png +0 -0
- package/lib/public/mate-avatars/B14.png +0 -0
- package/lib/public/mate-avatars/B15.png +0 -0
- package/lib/public/mate-avatars/B16.png +0 -0
- package/lib/public/mate-avatars/B17.png +0 -0
- package/lib/public/mate-avatars/B18.png +0 -0
- package/lib/public/mate-avatars/B19.png +0 -0
- package/lib/public/mate-avatars/B20.png +0 -0
- package/lib/public/mate-avatars/B21.png +0 -0
- package/lib/public/mate-avatars/B22.png +0 -0
- package/lib/public/mate-avatars/B23.png +0 -0
- package/lib/public/mate-avatars/B24.png +0 -0
- package/lib/public/mate-avatars/B25.png +0 -0
- package/lib/public/mate-avatars/B26.png +0 -0
- package/lib/public/mate-avatars/B27.png +0 -0
- package/lib/public/mate-avatars/B28.png +0 -0
- package/lib/public/mate-avatars/B29.png +0 -0
- package/lib/public/mate-avatars/B30.png +0 -0
- package/lib/public/mate-avatars/B31.png +0 -0
- package/lib/public/mate-avatars/B32.png +0 -0
- package/lib/public/mate-avatars/B33.png +0 -0
- package/lib/public/mate-avatars/B34.png +0 -0
- package/lib/public/mate-avatars/B35.png +0 -0
- package/lib/public/mate-avatars/B36.png +0 -0
- package/lib/public/mate-avatars/B37.png +0 -0
- package/lib/public/mate-avatars/B38.png +0 -0
- package/lib/public/mate-avatars/B39.png +0 -0
- package/lib/public/mate-avatars/B40.png +0 -0
- package/lib/public/mate-avatars/B41.png +0 -0
- package/lib/public/mate-avatars/B42.png +0 -0
- package/lib/public/mate-avatars/B43.png +0 -0
- package/lib/public/mate-avatars/B44.png +0 -0
- package/lib/public/mate-avatars/B45.png +0 -0
- package/lib/public/mate-avatars/B46.png +0 -0
- package/lib/public/mate-avatars/B47.png +0 -0
- package/lib/public/mate-avatars/B48.png +0 -0
- package/lib/public/mate-avatars/C01.png +0 -0
- package/lib/public/mate-avatars/C02.png +0 -0
- package/lib/public/mate-avatars/C03.png +0 -0
- package/lib/public/mate-avatars/C04.png +0 -0
- package/lib/public/mate-avatars/C05.png +0 -0
- package/lib/public/mate-avatars/C06.png +0 -0
- package/lib/public/mate-avatars/C07.png +0 -0
- package/lib/public/mate-avatars/C08.png +0 -0
- package/lib/public/mate-avatars/C09.png +0 -0
- package/lib/public/mate-avatars/C10.png +0 -0
- package/lib/public/mate-avatars/C11.png +0 -0
- package/lib/public/mate-avatars/C12.png +0 -0
- package/lib/public/mate-avatars/C13.png +0 -0
- package/lib/public/mate-avatars/C14.png +0 -0
- package/lib/public/mate-avatars/C15.png +0 -0
- package/lib/public/mate-avatars/C16.png +0 -0
- package/lib/public/mate-avatars/C17.png +0 -0
- package/lib/public/mate-avatars/C18.png +0 -0
- package/lib/public/mate-avatars/C19.png +0 -0
- package/lib/public/mate-avatars/C20.png +0 -0
- package/lib/public/mate-avatars/C21.png +0 -0
- package/lib/public/mate-avatars/C22.png +0 -0
- package/lib/public/mate-avatars/C23.png +0 -0
- package/lib/public/mate-avatars/C24.png +0 -0
- package/lib/public/mate-avatars/C25.png +0 -0
- package/lib/public/mate-avatars/C26.png +0 -0
- package/lib/public/mate-avatars/C27.png +0 -0
- package/lib/public/mate-avatars/C28.png +0 -0
- package/lib/public/mate-avatars/C29.png +0 -0
- package/lib/public/mate-avatars/C30.png +0 -0
- package/lib/public/mate-avatars/C31.png +0 -0
- package/lib/public/mate-avatars/C32.png +0 -0
- package/lib/public/mate-avatars/C33.png +0 -0
- package/lib/public/mate-avatars/C34.png +0 -0
- package/lib/public/mate-avatars/C35.png +0 -0
- package/lib/public/mate-avatars/C36.png +0 -0
- package/lib/public/mate-avatars/C37.png +0 -0
- package/lib/public/mate-avatars/C38.png +0 -0
- package/lib/public/mate-avatars/C39.png +0 -0
- package/lib/public/mate-avatars/C40.png +0 -0
- package/lib/public/mate-avatars/C41.png +0 -0
- package/lib/public/mate-avatars/C42.png +0 -0
- package/lib/public/mate-avatars/C43.png +0 -0
- package/lib/public/mate-avatars/C44.png +0 -0
- package/lib/public/mate-avatars/C45.png +0 -0
- package/lib/public/mate-avatars/C46.png +0 -0
- package/lib/public/mate-avatars/C47.png +0 -0
- package/lib/public/mate-avatars/C48.png +0 -0
- package/lib/public/mate-avatars/catalog.json +482 -0
- package/lib/public/mate-avatars/lead-clay.png +0 -0
- package/lib/public/modules/admin-settings-projects.js +6 -2
- package/lib/public/modules/app-connection.js +11 -1
- package/lib/public/modules/app-favicon.js +18 -9
- package/lib/public/modules/app-header.js +7 -4
- package/lib/public/modules/app-loop-ui.js +2 -0
- package/lib/public/modules/app-message-router.js +22 -1
- package/lib/public/modules/app-messages.js +115 -17
- package/lib/public/modules/app-misc.js +3 -1
- package/lib/public/modules/app-notifications.js +11 -5
- package/lib/public/modules/app-panels.js +61 -123
- package/lib/public/modules/app-projects.js +13 -0
- package/lib/public/modules/app-rate-limit.js +7 -27
- package/lib/public/modules/app-rendering.js +4 -3
- package/lib/public/modules/avatar.js +15 -41
- package/lib/public/modules/chat-render-runtime.js +20 -0
- package/lib/public/modules/clay-browser-links.js +47 -0
- package/lib/public/modules/clay-control-activity.js +214 -0
- package/lib/public/modules/clay-control-copy.js +36 -0
- package/lib/public/modules/clay-control-detail-targets.js +44 -0
- package/lib/public/modules/clay-control-object-targets.js +52 -0
- package/lib/public/modules/clay-control-target-visibility.js +12 -0
- package/lib/public/modules/clay-control-targets.js +44 -0
- package/lib/public/modules/clay-log-links.js +23 -0
- package/lib/public/modules/clay-navigation-render.js +52 -0
- package/lib/public/modules/clay-owner-navigation.js +33 -0
- package/lib/public/modules/clay-session-links.js +31 -0
- package/lib/public/modules/clay-studio-bridge.js +20 -0
- package/lib/public/modules/clay-studio-document.js +67 -0
- package/lib/public/modules/clay-studio-render.js +146 -0
- package/lib/public/modules/clay-tool-activity.js +140 -0
- package/lib/public/modules/clay-tool-presentation.js +342 -0
- package/lib/public/modules/command-palette.js +162 -40
- package/lib/public/modules/contextual-ask-session.js +26 -0
- package/lib/public/modules/contextual-clay-geometry.js +155 -0
- package/lib/public/modules/contextual-clay-session.js +130 -0
- package/lib/public/modules/contextual-clay-workspace.js +169 -0
- package/lib/public/modules/contextual-clay.js +250 -0
- package/lib/public/modules/contextual-composer.js +91 -0
- package/lib/public/modules/contextual-mate-context.js +117 -0
- package/lib/public/modules/contextual-mate-hint.js +40 -0
- package/lib/public/modules/contextual-mate-identity.js +23 -0
- package/lib/public/modules/contextual-mate-sessions.js +134 -0
- package/lib/public/modules/contextual-search.js +137 -0
- package/lib/public/modules/contextual-session-citations.js +58 -0
- package/lib/public/modules/debate.js +1 -0
- package/lib/public/modules/default-ai.js +11 -3
- package/lib/public/modules/elicitation-form.js +5 -0
- package/lib/public/modules/filebrowser.js +20 -1
- package/lib/public/modules/generation-stop.js +8 -5
- package/lib/public/modules/git-panel.js +3 -1
- package/lib/public/modules/history-replay-batch.js +13 -1
- package/lib/public/modules/home-debate-live.js +2 -0
- package/lib/public/modules/home-debate-planning.js +7 -7
- package/lib/public/modules/home-mate-avatar-editor.js +127 -208
- package/lib/public/modules/home-mate-chat.js +8 -6
- package/lib/public/modules/home-mate-creation.js +73 -1
- package/lib/public/modules/home-mate-settings.js +19 -12
- package/lib/public/modules/icon-strip-tooltip.js +2 -1
- package/lib/public/modules/input.js +88 -10
- package/lib/public/modules/issues-render.js +3 -2
- package/lib/public/modules/knowledge-db-workbench.js +4 -4
- package/lib/public/modules/markdown.js +6 -34
- package/lib/public/modules/mate-avatar-catalog.js +97 -0
- package/lib/public/modules/mate-knowledge-workbench.js +1 -1
- package/lib/public/modules/mate-management.js +40 -7
- package/lib/public/modules/mcp-connection-view.js +31 -13
- package/lib/public/modules/mcp-discovery-view.js +31 -0
- package/lib/public/modules/mcp-ui.js +23 -4
- package/lib/public/modules/mention.js +3 -0
- package/lib/public/modules/message-delivery.js +20 -2
- package/lib/public/modules/model-picker.js +2 -0
- package/lib/public/modules/pane-activation.js +214 -0
- package/lib/public/modules/pane-binding.js +82 -0
- package/lib/public/modules/pane-bridge.js +7 -4
- package/lib/public/modules/pane-browser-bridge.js +22 -0
- package/lib/public/modules/pane-file-bridge.js +4 -0
- package/lib/public/modules/pane-issue-bridge.js +4 -1
- package/lib/public/modules/pending-message-queue.js +1 -0
- package/lib/public/modules/permission-control.js +5 -4
- package/lib/public/modules/personal-settings-dialog.js +7 -1
- package/lib/public/modules/product-review.js +26 -0
- package/lib/public/modules/profile.js +1 -238
- package/lib/public/modules/project-access-recovery.js +17 -0
- package/lib/public/modules/project-admin-overview.js +21 -0
- package/lib/public/modules/project-chat-identity.js +13 -4
- package/lib/public/modules/project-logs-render.js +3 -0
- package/lib/public/modules/project-mate-navigation.js +144 -22
- package/lib/public/modules/rewind.js +5 -0
- package/lib/public/modules/scheduled-tasks.js +2 -0
- package/lib/public/modules/scheduler.js +2 -0
- package/lib/public/modules/search-clay-chat.js +5 -440
- package/lib/public/modules/session-actions.js +5 -2
- package/lib/public/modules/session-context-menu.js +5 -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 +85 -14
- package/lib/public/modules/session-rich-drafts.js +21 -0
- package/lib/public/modules/session-switch-defer.js +67 -0
- package/lib/public/modules/session-work-primary.js +51 -0
- package/lib/public/modules/settings-defaults.js +27 -28
- package/lib/public/modules/shared-browser-settings.js +112 -0
- package/lib/public/modules/shared-browser-tabs.js +13 -3
- package/lib/public/modules/shared-browser.js +29 -6
- package/lib/public/modules/sidebar-mobile.js +4 -3
- package/lib/public/modules/sidebar-projects.js +1 -0
- package/lib/public/modules/sidebar-session-folders-ui.js +1 -1
- package/lib/public/modules/sidebar-sessions.js +1 -0
- package/lib/public/modules/split-group-restore.js +68 -0
- package/lib/public/modules/split-pair-ui.js +1 -0
- package/lib/public/modules/split-pane-reconciler.js +15 -0
- package/lib/public/modules/split-pane-renderer.js +87 -6
- package/lib/public/modules/split-session-boundary.js +1 -1
- package/lib/public/modules/split-view.js +60 -68
- 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 +116 -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/stt-controller.js +4 -1
- package/lib/public/modules/stt-recording.js +1 -1
- package/lib/public/modules/stt.js +7 -2
- package/lib/public/modules/terminal.js +9 -0
- package/lib/public/modules/theme.js +8 -1
- package/lib/public/modules/thinking-lifecycle.js +33 -3
- package/lib/public/modules/thinking-view.js +23 -1
- package/lib/public/modules/tools.js +60 -11
- 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/modules/wireframe-workbench.js +5 -2
- package/lib/public/muse-avatar.svg +4 -0
- package/lib/public/style.css +5 -0
- package/lib/public/sw.js +3 -1
- 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 +342 -401
- 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-appearance-settings.js +13 -1
- package/lib/server-contextual-clay-settings.js +40 -0
- package/lib/server-contextual-mate-sessions.js +70 -0
- package/lib/server-dm.js +2 -1
- package/lib/server-global-ws.js +10 -20
- package/lib/server-home-chat-events.js +18 -4
- package/lib/server-home-chat.js +22 -20
- package/lib/server-home-clay-entry.js +23 -4
- package/lib/server-home-clay-session-links.js +29 -9
- package/lib/server-home-mate-creation.js +1 -0
- package/lib/server-home-mcp-consent.js +14 -0
- package/lib/server-mates.js +25 -62
- package/lib/server-owner-ui.js +118 -0
- package/lib/server-path-access.js +38 -0
- package/lib/server-project-removal.js +22 -0
- package/lib/server-settings.js +6 -1
- package/lib/server.js +163 -43
- 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/session-work-primary.js +50 -0
- package/lib/sessions.js +64 -99
- package/lib/shared-browser-cookie-sync.js +32 -0
- package/lib/shared-browser-cookies.js +79 -0
- package/lib/shared-browser-runtime.js +25 -9
- package/lib/shared-browser-storage-sync.js +43 -0
- package/lib/shared-browser-storage.js +101 -0
- package/lib/shared-browser-tools.js +2 -1
- package/lib/shared-browser-worker.js +46 -10
- package/lib/terminal-manager.js +65 -6
- package/lib/tool-llm.js +1 -1
- package/lib/tui-transcript-index.js +1 -132
- package/lib/users-contextual-clay-preferences.js +31 -0
- package/lib/users-permissions.js +2 -8
- package/lib/users.js +7 -0
- package/lib/vendor-login-browser.js +1 -11
- package/lib/workspace-assignment-service.js +25 -0
- package/lib/workspace-query-access.js +4 -1
- package/lib/workspace-query-mcp-server.js +1 -1
- package/lib/workspace-query-service.js +13 -2
- package/lib/ws-request.js +1 -0
- package/lib/ws-schema.js +18 -2
- package/lib/yoke/acp-agent-profiles.js +7 -5
- 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 +271 -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 +10 -4
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { handleContextualConversations } from './contextual-mate-sessions.js';
|
|
2
|
+
import { handleMateContextMessage } from './contextual-mate-context.js';
|
|
1
3
|
import { handleIssueReference } from './clay-issue-links.js';
|
|
2
4
|
// Narrow pre-router for Home and Capsule protocol responses kept out of the legacy router.
|
|
3
5
|
|
|
@@ -15,10 +17,14 @@ import { handleDefaultAiMessage } from './default-ai.js';
|
|
|
15
17
|
import { handleCursorSharingMessage } from './cursor-sharing-preference.js';
|
|
16
18
|
import { handlePendingMessageQueueMessage } from './pending-message-queue.js';
|
|
17
19
|
import { receiveHistoryReplay } from './history-replay-batch.js';
|
|
20
|
+
import { filterPaneActivation } from './pane-activation.js';
|
|
21
|
+
import { deferSessionSwitch } from './session-switch-defer.js';
|
|
18
22
|
import { handleProjectMateCreationMessage } from './project-mate-creation-workspace.js';
|
|
19
23
|
import { handleProjectDebatePlanningMessage } from './project-debate-planning-workspace.js';
|
|
20
24
|
|
|
21
25
|
export function handleHomeProtocolMessage(msg) {
|
|
26
|
+
if (handleContextualConversations(msg)) return true;
|
|
27
|
+
if (handleMateContextMessage(msg)) return true;
|
|
22
28
|
if (handleIssueReference(msg)) return true;
|
|
23
29
|
if (handleClaySessionTarget(msg)) return true;
|
|
24
30
|
if (isHomeWorkspaceAssignmentMessage(msg)) {
|
|
@@ -58,6 +64,10 @@ export function handleHomeProtocolMessage(msg) {
|
|
|
58
64
|
handleHomeDebateTranscript(msg);
|
|
59
65
|
return true;
|
|
60
66
|
}
|
|
67
|
+
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") {
|
|
68
|
+
if (!handleSearchClayMessage(msg)) handleHomeDebateTranscript(msg);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
61
71
|
if (msg.type === "home_debate_question" || msg.type === "home_debate_question_resolved" || msg.type === "home_debate_event") {
|
|
62
72
|
handleHomeDebateTranscript(msg);
|
|
63
73
|
return true;
|
|
@@ -86,6 +96,17 @@ export function handleHomeProtocolMessage(msg) {
|
|
|
86
96
|
}
|
|
87
97
|
|
|
88
98
|
export function processMessage(msg) {
|
|
99
|
+
if (filterPaneActivation(msg)) return;
|
|
100
|
+
if (deferSessionSwitch(msg)) return;
|
|
101
|
+
if (msg.type === 'pane_history_batch') {
|
|
102
|
+
if (!msg.paneActivation || !Array.isArray(msg.items) || msg.items.length > 100) return;
|
|
103
|
+
msg.items.forEach(function (item) {
|
|
104
|
+
// Every original event keeps its order/index and goes through the same
|
|
105
|
+
// stale-binding filter and replay handler as an individual socket event.
|
|
106
|
+
if (item && item.type !== 'pane_history_batch') processMessage(Object.assign({}, item, { paneActivation: msg.paneActivation }));
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
89
110
|
receiveHistoryReplay(msg, dispatchMessage);
|
|
90
111
|
}
|
|
91
112
|
|
|
@@ -100,7 +121,7 @@ function dispatchMessage(msg) {
|
|
|
100
121
|
if (handleDefaultAiMessage(msg)) return;
|
|
101
122
|
if (handleCursorSharingMessage(msg)) return;
|
|
102
123
|
var searchHandled = handleSearchClayMessage(msg);
|
|
103
|
-
if (searchHandled
|
|
124
|
+
if (searchHandled) return;
|
|
104
125
|
if (handleHomeProtocolMessage(msg)) return;
|
|
105
126
|
processAppMessage(msg);
|
|
106
127
|
}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { handleStudioDocumentMessage } from './clay-studio-document.js';
|
|
2
|
+
import { saveSessionRichDraft, restoreSessionRichDraft } from './session-rich-drafts.js';
|
|
3
|
+
import { refreshPaneActivation, primePaneSession } from './pane-activation.js';
|
|
4
|
+
import { paneCallbackCurrent } from './pane-binding.js';
|
|
5
|
+
import { handleClayControlActivity } from './clay-control-activity.js';
|
|
6
|
+
import { handleContextualWorkspaceMessage } from './contextual-clay-workspace.js';
|
|
7
|
+
import { handleContextualSessionMessage } from './contextual-clay-session.js';
|
|
8
|
+
import { handleOwnerNavigation } from './clay-owner-navigation.js';
|
|
9
|
+
import { leaveRevokedProject } from './project-access-recovery.js';
|
|
1
10
|
import { handlePersonalSettingsMessage } from './user-settings-preferences.js';
|
|
2
11
|
import { handleServerUpdate } from './server-settings-controls.js';
|
|
3
12
|
import { handleYouMessage } from './you.js';
|
|
@@ -8,7 +17,8 @@ import { refreshProjectAssistantIdentities } from './project-chat-identity.js';
|
|
|
8
17
|
import { handleLinearResult } from './linear-panel.js';
|
|
9
18
|
import { handleSharedBrowserMessage } from './shared-browser.js';
|
|
10
19
|
import { openWireframe } from './wireframe-workbench.js';
|
|
11
|
-
import {
|
|
20
|
+
import { handlePrimaryWorkResult } from './session-work-primary.js';
|
|
21
|
+
import { syncGithubSessions, applyGithubPersonalReviewStatus } from './session-github.js';
|
|
12
22
|
import { handleIssuesMessageInContext as handleIssuesMessage } from './issues-context.js';
|
|
13
23
|
// app-messages.js - WebSocket message router
|
|
14
24
|
// Extracted from app.js (PR-23)
|
|
@@ -40,7 +50,7 @@ import { handleHomeMateMemoryState, handleHomeMateKnowledgeState, syncHomeMateSe
|
|
|
40
50
|
import { renderKnowledgeList, handleKnowledgeContent, handleKnowledgeMutation } from './mate-knowledge.js';
|
|
41
51
|
import { handleKnowledgeWorkbenchMessage } from './mate-knowledge-workbench.js';
|
|
42
52
|
import { renderMemoryList } from './mate-memory.js';
|
|
43
|
-
import { handlePaletteSessionSwitch, setPaletteVersion } from './command-palette.js';
|
|
53
|
+
import { handlePaletteSessionSwitch, handlePaletteHistoryDone, handlePaletteHistoryPrepended, setPaletteVersion } from './command-palette.js';
|
|
44
54
|
import { handleFindInSessionResults } from './session-search.js';
|
|
45
55
|
import { syncPaneTitles, maybeRestoreSplitGroup, openGroup } from './split-view.js';
|
|
46
56
|
import { showPairDialog, handlePairCreated, handleSplitDelegation, showWorkerDelegationNotice, hideWorkerDelegationNotice } from './split-pair-ui.js';
|
|
@@ -59,13 +69,13 @@ import { handleProjectOwnerChanged } from './project-settings.js';
|
|
|
59
69
|
import { handleProjectEnv, handleProjectEnvSaved } from './project-settings-environment.js';
|
|
60
70
|
import { handleProjectSessionVisibilityDefault, refreshProjectSessionVisibilitySettings } from './project-session-visibility-settings.js';
|
|
61
71
|
import { updateSettingsStats, updateDaemonConfig, handleSetPinResult, handleKeepAwakeChanged, handleAutoContinueChanged, handleRestartResult, handleShutdownResult, handleSharedEnv, handleSharedEnvSaved, handleServerSettingResult } from './server-settings.js';
|
|
62
|
-
import { handleTermList, handleTermCreated, sendTerminalCommand, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed } from './terminal.js';
|
|
72
|
+
import { handleTerminalProjection, handleTermList, handleTermCreated, sendTerminalCommand, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed } from './terminal.js';
|
|
63
73
|
import { attachTuiView, detachTuiView, setTuiSuspendedView, tuiHandleTermOutput, tuiHandleTermResized, tuiHandleTermExited, tuiHandleTermClosed } from './session-tui-view.js';
|
|
64
74
|
import { handleTuiTranscriptState } from './tui-grab.js';
|
|
65
75
|
import { tuiModalHandleTermOutput, tuiModalHandleTermResized, tuiModalHandleTermExited, tuiModalHandleTermClosed } from './tui-attention.js';
|
|
66
76
|
import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult } from './context-sources.js';
|
|
67
77
|
import { refreshEmailSettings } from './user-settings.js';
|
|
68
|
-
import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
|
|
78
|
+
import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteUpdateResult, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
|
|
69
79
|
import { handleNoteDeleteResult } from './sticky-notes-browser.js';
|
|
70
80
|
import { handleProjectLogsState, handleProjectLogEntry, handleProjectLogCommented, handleProjectLogCommentReviewed, handleProjectLogDeleted, handleProjectLogUpdated, handleProjectLogsError, handleScheduledTaskResultsState, handleScheduledTaskResultCreated, handleScheduledTaskResultSession } from './project-logs.js';
|
|
71
81
|
import { handleSkillInstalled, handleSkillUninstalled } from './skills.js';
|
|
@@ -118,6 +128,9 @@ var connectOverlay = document.getElementById("connect-overlay");
|
|
|
118
128
|
initMessageDeliveryUi();
|
|
119
129
|
|
|
120
130
|
export function processMessage(msg) {
|
|
131
|
+
if (handleStudioDocumentMessage(msg)) return;
|
|
132
|
+
if (handleClayControlActivity(msg)) return;
|
|
133
|
+
if (handleOwnerNavigation(msg)) return;
|
|
121
134
|
if (["update_available", "up_to_date", "update_started", "update_check_failed"].indexOf(msg.type) !== -1) handleServerUpdate(msg);
|
|
122
135
|
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);
|
|
123
136
|
if (handleProjectDebateMessage(msg)) return;
|
|
@@ -145,7 +158,7 @@ export function processMessage(msg) {
|
|
|
145
158
|
return;
|
|
146
159
|
}
|
|
147
160
|
if (msg.type === "access_revoked") {
|
|
148
|
-
|
|
161
|
+
leaveRevokedProject("/");
|
|
149
162
|
return;
|
|
150
163
|
}
|
|
151
164
|
// Preserve original timestamp from history replay
|
|
@@ -204,7 +217,7 @@ export function processMessage(msg) {
|
|
|
204
217
|
if (readyMatch) {
|
|
205
218
|
var newName = readyMatch[1].trim();
|
|
206
219
|
store.get('dmTargetUser').displayName = newName;
|
|
207
|
-
updateMateSidebarProfile({ profile: { displayName: newName, avatarColor: store.get('dmTargetUser').avatarColor, avatarStyle: store.get('dmTargetUser').avatarStyle, avatarSeed: store.get('dmTargetUser').avatarSeed } });
|
|
220
|
+
updateMateSidebarProfile({ profile: { displayName: newName, avatarCatalogId: store.get('dmTargetUser').avatarCatalogId, avatarColor: store.get('dmTargetUser').avatarColor, avatarStyle: store.get('dmTargetUser').avatarStyle, avatarSeed: store.get('dmTargetUser').avatarSeed } });
|
|
208
221
|
if (getWs() && getWs().readyState === 1) {
|
|
209
222
|
getWs().send(JSON.stringify({
|
|
210
223
|
type: "mate_update",
|
|
@@ -224,6 +237,10 @@ export function processMessage(msg) {
|
|
|
224
237
|
}
|
|
225
238
|
}
|
|
226
239
|
|
|
240
|
+
store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null,
|
|
241
|
+
currentHistoryIndexes: Array.isArray(msg._historyIndexes) ? msg._historyIndexes : null });
|
|
242
|
+
if (handleContextualSessionMessage(msg)) return;
|
|
243
|
+
handleContextualWorkspaceMessage(msg);
|
|
227
244
|
switch (msg.type) {
|
|
228
245
|
case "message_ack":
|
|
229
246
|
var acknowledgedEntry = acknowledgeMessage(msg.clientMessageId);
|
|
@@ -250,9 +267,12 @@ export function processMessage(msg) {
|
|
|
250
267
|
|
|
251
268
|
case "history_prepend":
|
|
252
269
|
prependOlderHistory(msg.items, msg.meta);
|
|
270
|
+
handlePaletteHistoryPrepended();
|
|
253
271
|
break;
|
|
254
272
|
|
|
255
273
|
case "history_done":
|
|
274
|
+
var historyPaintEpoch = store.get('sessionActionEpoch') || 0;
|
|
275
|
+
if (messagesEl && msg.sessionId === store.get("activeSessionId") && msg.sessionOriginId === store.get("sessionOriginId")) { messagesEl.dataset.controlSessionId = String(msg.sessionId); messagesEl.dataset.controlSessionOrigin = msg.sessionOriginId; messagesEl.dataset.controlHistoryRevision = msg.controlHistoryRevision || ""; }
|
|
256
276
|
store.set({ replayingHistory: false });
|
|
257
277
|
resumeThinkingAfterReplay(store.get('sessionIsProcessing'));
|
|
258
278
|
// Batched syntax highlight + mermaid pass for the entire replayed
|
|
@@ -275,7 +295,7 @@ export function processMessage(msg) {
|
|
|
275
295
|
|
|
276
296
|
// Restore accurate context data from the last result in full history
|
|
277
297
|
if (msg.lastUsage || msg.lastModelUsage) {
|
|
278
|
-
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens);
|
|
298
|
+
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens, msg.context);
|
|
279
299
|
}
|
|
280
300
|
updateContextPanel();
|
|
281
301
|
updateUsagePanel();
|
|
@@ -283,6 +303,7 @@ export function processMessage(msg) {
|
|
|
283
303
|
// the restored turn instead of starting a second answer bubble.
|
|
284
304
|
if (store.get('sessionIsProcessing')) {
|
|
285
305
|
flushStreamBuffer();
|
|
306
|
+
if (store.get('turnActivity')) setActivity(store.get('turnActivity').phase);
|
|
286
307
|
} else {
|
|
287
308
|
markAllToolsDone();
|
|
288
309
|
finalizeAssistantBlock();
|
|
@@ -311,11 +332,16 @@ export function processMessage(msg) {
|
|
|
311
332
|
// re-pins on every height change while armed. Disarms early on
|
|
312
333
|
// any real user scroll input.
|
|
313
334
|
// Skip arming when we have a pending in-conversation navigate
|
|
314
|
-
// target (file-edit deeplink) — the navigate block
|
|
315
|
-
// that element into view, and sticky-bottom would
|
|
335
|
+
// target (file-edit or Session-entry deeplink) — the navigate block
|
|
336
|
+
// below scrolls that element into view, and sticky-bottom would
|
|
337
|
+
// fight it.
|
|
316
338
|
var nav = getPendingNavigate();
|
|
317
339
|
var hasNavTarget = nav && (nav.toolId || nav.assistantUuid);
|
|
318
|
-
|
|
340
|
+
var sessionEntryNav = store.get('pendingSessionEntryNavigation');
|
|
341
|
+
var hasSessionEntryNav = sessionEntryNav
|
|
342
|
+
&& String(sessionEntryNav.projectSlug) === String(store.get('currentSlug'))
|
|
343
|
+
&& String(sessionEntryNav.sessionId) === String(store.get('activeSessionId'));
|
|
344
|
+
if (hasNavTarget || hasSessionEntryNav) {
|
|
319
345
|
// Navigate block below will scrollIntoView on the target — don't
|
|
320
346
|
// arm sticky-bottom or it would fight that scroll.
|
|
321
347
|
scrollToBottom();
|
|
@@ -328,6 +354,7 @@ export function processMessage(msg) {
|
|
|
328
354
|
// Scroll to tool element if navigating from file edit history
|
|
329
355
|
if (hasNavTarget) {
|
|
330
356
|
requestAnimationFrame(function() {
|
|
357
|
+
if (historyPaintEpoch !== (store.get('sessionActionEpoch') || 0) || !paneCallbackCurrent(msg.paneActivation)) return;
|
|
331
358
|
// Prefer scrolling to the exact tool element
|
|
332
359
|
var target = nav.toolId ? messagesEl.querySelector('[data-tool-id="' + nav.toolId + '"]') : null;
|
|
333
360
|
if (!target && nav.assistantUuid) {
|
|
@@ -343,6 +370,7 @@ export function processMessage(msg) {
|
|
|
343
370
|
}
|
|
344
371
|
});
|
|
345
372
|
}
|
|
373
|
+
requestAnimationFrame(function () { if (historyPaintEpoch === (store.get('sessionActionEpoch') || 0) && paneCallbackCurrent(msg.paneActivation)) handlePaletteHistoryDone(); });
|
|
346
374
|
break;
|
|
347
375
|
|
|
348
376
|
case "restore_mate_dm":
|
|
@@ -363,6 +391,7 @@ export function processMessage(msg) {
|
|
|
363
391
|
break;
|
|
364
392
|
|
|
365
393
|
case "info":
|
|
394
|
+
store.set({ controlRuntimeId: msg.controlRuntimeId || null });
|
|
366
395
|
if (msg.text && !msg.project && !msg.cwd) {
|
|
367
396
|
addSystemMessage(msg.text, false);
|
|
368
397
|
break;
|
|
@@ -753,9 +782,11 @@ export function processMessage(msg) {
|
|
|
753
782
|
markProjectSessionListHydrated();
|
|
754
783
|
renderMateSessionList(msg.sessions || []);
|
|
755
784
|
renderSessionList(msg.sessions || []);
|
|
785
|
+
store.set({ paneBindingSessions: msg.sessions || [] });
|
|
786
|
+
refreshPaneActivation();
|
|
756
787
|
syncGithubSessions(msg.sessions || []);
|
|
757
788
|
syncPaneTitles();
|
|
758
|
-
var panePin = resolvePaneSession(store.get('paneMode'), store.get('panePinPending'), store.get('paneSessionId'), msg.sessions);
|
|
789
|
+
var panePin = resolvePaneSession(store.get('paneMode') && !primePaneSession(), store.get('panePinPending'), store.get('paneSessionId'), msg.sessions);
|
|
759
790
|
if (panePin.consumed) {
|
|
760
791
|
store.set({ panePinPending: false });
|
|
761
792
|
if (panePin.sessionId && getWs() && getWs().readyState === 1) {
|
|
@@ -765,6 +796,9 @@ export function processMessage(msg) {
|
|
|
765
796
|
handlePaletteSessionSwitch();
|
|
766
797
|
maybeRestoreSplitGroup();
|
|
767
798
|
break;
|
|
799
|
+
case "session_github_status":
|
|
800
|
+
applyGithubPersonalReviewStatus(msg);
|
|
801
|
+
break;
|
|
768
802
|
|
|
769
803
|
case "split_groups":
|
|
770
804
|
applyProjectSplitGroups(msg.groups || []);
|
|
@@ -850,6 +884,9 @@ export function processMessage(msg) {
|
|
|
850
884
|
handleRemoteSelection(msg);
|
|
851
885
|
break;
|
|
852
886
|
|
|
887
|
+
case "session_work_primary_result":
|
|
888
|
+
handlePrimaryWorkResult(msg);
|
|
889
|
+
break;
|
|
853
890
|
case "linear_result":
|
|
854
891
|
handleLinearResult(msg);
|
|
855
892
|
break;
|
|
@@ -876,6 +913,8 @@ export function processMessage(msg) {
|
|
|
876
913
|
break;
|
|
877
914
|
|
|
878
915
|
case "session_switched":
|
|
916
|
+
saveSessionRichDraft();
|
|
917
|
+
store.set({ sessionActionEpoch: (store.get('sessionActionEpoch') || 0) + 1 });
|
|
879
918
|
clearPairResultStatus();
|
|
880
919
|
resetStreamBuffer();
|
|
881
920
|
syncAutonomousRunForSession(msg.autonomousRun || null);
|
|
@@ -893,7 +932,7 @@ export function processMessage(msg) {
|
|
|
893
932
|
? msg.runtimeTerminalId
|
|
894
933
|
: (typeof msg.terminalId === "number" ? msg.terminalId : null);
|
|
895
934
|
var _sessionRole = msg.sessionRole === "worker" ? "worker" : "driver";
|
|
896
|
-
store.set({ activeSessionId: msg.id, sessionOriginId: msg.sessionOriginId || null, cliSessionId: msg.cliSessionId || null, currentModel: msg.model || "", currentEffort: msg.effort ||
|
|
935
|
+
store.set({ activeSessionId: msg.id, sessionOriginId: msg.sessionOriginId || null, cliSessionId: msg.cliSessionId || null, currentModel: msg.model || "", currentEffort: msg.effort || '', 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 || 'default', 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') || "") });
|
|
897
936
|
handleScheduledTaskSessionSwitched(msg);
|
|
898
937
|
requestLoopInterviewState();
|
|
899
938
|
activateDeliverySession(msg.id, msg.cliSessionId || null, msg.sessionOriginId || null);
|
|
@@ -968,14 +1007,19 @@ export function processMessage(msg) {
|
|
|
968
1007
|
// Restore draft for incoming session
|
|
969
1008
|
var draft = store.get('sessionDrafts')[store.get('activeSessionId')] || "";
|
|
970
1009
|
inputEl.value = draft;
|
|
1010
|
+
restoreSessionRichDraft();
|
|
971
1011
|
autoResize();
|
|
972
1012
|
if (!("ontouchstart" in window)) {
|
|
973
1013
|
inputEl.focus();
|
|
974
1014
|
}
|
|
975
1015
|
// Reload survival: a restored active session that is a split-group
|
|
976
1016
|
// member reopens its group (no-op when a split is already open).
|
|
977
|
-
|
|
978
|
-
|
|
1017
|
+
var deferredSwitch = store.get('deferredSessionSwitch');
|
|
1018
|
+
if (!deferredSwitch || !deferredSwitch.draining || deferredSwitch.finalSwitch === msg) {
|
|
1019
|
+
finishProjectSessionActivation();
|
|
1020
|
+
maybeRestoreSplitGroup();
|
|
1021
|
+
handlePaletteSessionSwitch(true);
|
|
1022
|
+
}
|
|
979
1023
|
break;
|
|
980
1024
|
|
|
981
1025
|
case "session_full_access_changed":
|
|
@@ -1020,7 +1064,11 @@ export function processMessage(msg) {
|
|
|
1020
1064
|
// running session, where history_done keeps current tools active.
|
|
1021
1065
|
// Question answers, plan feedback and Driver delegations are injected
|
|
1022
1066
|
// mid-turn, so tools before them may still be running.
|
|
1023
|
-
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated)
|
|
1067
|
+
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated) {
|
|
1068
|
+
markAllToolsDone();
|
|
1069
|
+
// Older histories predate explicit foreground presentation boundaries.
|
|
1070
|
+
finalizeAssistantBlock();
|
|
1071
|
+
}
|
|
1024
1072
|
resetThinkingGroup();
|
|
1025
1073
|
if (msg.planContent) {
|
|
1026
1074
|
setPlanContent(msg.planContent);
|
|
@@ -1117,7 +1165,7 @@ export function processMessage(msg) {
|
|
|
1117
1165
|
// events make it through.
|
|
1118
1166
|
removeMatePreThinking();
|
|
1119
1167
|
if (!(store.get('dmMode') && store.get('dmTargetUser') && store.get('dmTargetUser').isMate) && !store.get('matePreThinkingEl')) {
|
|
1120
|
-
setActivity("thinking");
|
|
1168
|
+
setActivity((store.get("turnActivity") || {}).phase || "thinking");
|
|
1121
1169
|
}
|
|
1122
1170
|
}
|
|
1123
1171
|
break;
|
|
@@ -1153,8 +1201,24 @@ export function processMessage(msg) {
|
|
|
1153
1201
|
}
|
|
1154
1202
|
break;
|
|
1155
1203
|
|
|
1204
|
+
case "turn_activity":
|
|
1205
|
+
if (["waiting", "running", "background"].indexOf(msg.phase) === -1) break;
|
|
1206
|
+
store.set({ turnActivity: { phase: msg.phase, turnId: msg.turnId || null, disposition: msg.disposition || null } });
|
|
1207
|
+
if (!store.get('replayingHistory') && store.get('sessionIsProcessing')) {
|
|
1208
|
+
removeMatePreThinking();
|
|
1209
|
+
setActivity(msg.phase);
|
|
1210
|
+
}
|
|
1211
|
+
break;
|
|
1212
|
+
|
|
1213
|
+
case "assistant_boundary":
|
|
1214
|
+
// Foreground presentation ended; background work still owns its real
|
|
1215
|
+
// terminal. Flush pending animation text without finishing tools/Stop.
|
|
1216
|
+
finalizeAssistantBlock();
|
|
1217
|
+
break;
|
|
1218
|
+
|
|
1156
1219
|
case "delta":
|
|
1157
1220
|
if (typeof msg.text !== "string") break;
|
|
1221
|
+
store.set({ turnActivity: null });
|
|
1158
1222
|
removeMatePreThinking();
|
|
1159
1223
|
stopThinking();
|
|
1160
1224
|
setActivity(null);
|
|
@@ -1202,6 +1266,8 @@ export function processMessage(msg) {
|
|
|
1202
1266
|
renderMcpDebateProposal(msg.id, msg.input);
|
|
1203
1267
|
startUrgentBlink();
|
|
1204
1268
|
} else if (msg.name === "AskUserQuestion" && msg.input && msg.input.questions) {
|
|
1269
|
+
store.set({ turnActivity: null });
|
|
1270
|
+
setActivity(null);
|
|
1205
1271
|
var askTool = getTools()[msg.id];
|
|
1206
1272
|
if (askTool) {
|
|
1207
1273
|
if (askTool.el) askTool.el.style.display = "none";
|
|
@@ -1266,12 +1332,23 @@ export function processMessage(msg) {
|
|
|
1266
1332
|
renderGeneratedImage(msg);
|
|
1267
1333
|
break;
|
|
1268
1334
|
|
|
1335
|
+
case 'mate_schedule_question_expired':
|
|
1336
|
+
markAskUserAnswered(msg.toolId, { 0: msg.error || 'This schedule review expired.' });
|
|
1337
|
+
stopUrgentBlink();
|
|
1338
|
+
break;
|
|
1339
|
+
|
|
1340
|
+
case 'mcp_import_consent_expired':
|
|
1341
|
+
markAskUserAnswered(msg.toolId, { 0: msg.error || 'No import was approved.' });
|
|
1342
|
+
stopUrgentBlink();
|
|
1343
|
+
break;
|
|
1344
|
+
|
|
1269
1345
|
case "ask_user_answered":
|
|
1270
1346
|
markAskUserAnswered(msg.toolId, msg.answers);
|
|
1271
1347
|
stopUrgentBlink();
|
|
1272
1348
|
break;
|
|
1273
1349
|
|
|
1274
1350
|
case "permission_request":
|
|
1351
|
+
store.set({ turnActivity: null });
|
|
1275
1352
|
setActivity(null);
|
|
1276
1353
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1277
1354
|
startUrgentBlink();
|
|
@@ -1287,13 +1364,21 @@ export function processMessage(msg) {
|
|
|
1287
1364
|
stopUrgentBlink();
|
|
1288
1365
|
break;
|
|
1289
1366
|
|
|
1367
|
+
case "ask_user_pending":
|
|
1368
|
+
renderAskUserQuestion(msg.toolId, msg.input);
|
|
1369
|
+
startUrgentBlink();
|
|
1370
|
+
break;
|
|
1371
|
+
|
|
1290
1372
|
case "permission_request_pending":
|
|
1373
|
+
store.set({ turnActivity: null });
|
|
1291
1374
|
setActivity(null);
|
|
1292
1375
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1293
1376
|
startUrgentBlink();
|
|
1294
1377
|
break;
|
|
1295
1378
|
|
|
1296
1379
|
case "elicitation_request":
|
|
1380
|
+
store.set({ turnActivity: null });
|
|
1381
|
+
setActivity(null);
|
|
1297
1382
|
renderElicitationRequest(msg);
|
|
1298
1383
|
startUrgentBlink();
|
|
1299
1384
|
break;
|
|
@@ -1308,6 +1393,8 @@ export function processMessage(msg) {
|
|
|
1308
1393
|
break;
|
|
1309
1394
|
|
|
1310
1395
|
case "user_dialog_request":
|
|
1396
|
+
store.set({ turnActivity: null });
|
|
1397
|
+
setActivity(null);
|
|
1311
1398
|
renderUserDialogRequest(msg);
|
|
1312
1399
|
startUrgentBlink();
|
|
1313
1400
|
break;
|
|
@@ -1373,7 +1460,7 @@ export function processMessage(msg) {
|
|
|
1373
1460
|
finalizeAssistantBlock();
|
|
1374
1461
|
addTurnMeta(msg.cost, msg.duration);
|
|
1375
1462
|
accumulateUsage(msg.cost, msg.usage);
|
|
1376
|
-
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens);
|
|
1463
|
+
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens, msg.context);
|
|
1377
1464
|
break;
|
|
1378
1465
|
|
|
1379
1466
|
case "context_usage":
|
|
@@ -1386,6 +1473,7 @@ export function processMessage(msg) {
|
|
|
1386
1473
|
break;
|
|
1387
1474
|
|
|
1388
1475
|
case "done":
|
|
1476
|
+
store.set({ turnActivity: null });
|
|
1389
1477
|
removeMatePreThinking();
|
|
1390
1478
|
setActivity(null);
|
|
1391
1479
|
finishThinkingTurn();
|
|
@@ -1409,6 +1497,7 @@ export function processMessage(msg) {
|
|
|
1409
1497
|
break;
|
|
1410
1498
|
|
|
1411
1499
|
case "error":
|
|
1500
|
+
store.set({ turnActivity: null });
|
|
1412
1501
|
removeMatePreThinking();
|
|
1413
1502
|
setActivity(null);
|
|
1414
1503
|
finishThinkingTurn();
|
|
@@ -1633,6 +1722,9 @@ export function processMessage(msg) {
|
|
|
1633
1722
|
handleFileAt(msg);
|
|
1634
1723
|
break;
|
|
1635
1724
|
|
|
1725
|
+
case "term_control_projection":
|
|
1726
|
+
handleTerminalProjection(msg);
|
|
1727
|
+
break;
|
|
1636
1728
|
case "term_list":
|
|
1637
1729
|
handleTermList(msg);
|
|
1638
1730
|
updateTerminalList(msg.terminals);
|
|
@@ -1697,6 +1789,7 @@ export function processMessage(msg) {
|
|
|
1697
1789
|
store.set({ pendingTermCommand: null });
|
|
1698
1790
|
// Small delay to let terminal initialize
|
|
1699
1791
|
setTimeout(function() {
|
|
1792
|
+
if (!paneCallbackCurrent(msg.paneActivation)) return;
|
|
1700
1793
|
sendTerminalCommand(cmd);
|
|
1701
1794
|
}, 300);
|
|
1702
1795
|
}
|
|
@@ -1737,6 +1830,10 @@ export function processMessage(msg) {
|
|
|
1737
1830
|
handleNoteUpdated(msg);
|
|
1738
1831
|
break;
|
|
1739
1832
|
|
|
1833
|
+
case "note_update_result":
|
|
1834
|
+
handleNoteUpdateResult(msg);
|
|
1835
|
+
break;
|
|
1836
|
+
|
|
1740
1837
|
case "note_written":
|
|
1741
1838
|
showToast((msg.byTitle || "Agent") + ' left a note: "' + (msg.preview || "") + '"');
|
|
1742
1839
|
handleNoteWritten(msg);
|
|
@@ -1951,6 +2048,7 @@ export function processMessage(msg) {
|
|
|
1951
2048
|
// Sync dmTargetUser so subsequent renders use fresh data
|
|
1952
2049
|
var mp2 = msg.mate.profile || {};
|
|
1953
2050
|
store.get('dmTargetUser').displayName = mp2.displayName || msg.mate.name || store.get('dmTargetUser').displayName;
|
|
2051
|
+
store.get('dmTargetUser').avatarCatalogId = mp2.avatarCatalogId || '';
|
|
1954
2052
|
store.get('dmTargetUser').avatarStyle = mp2.avatarStyle || store.get('dmTargetUser').avatarStyle;
|
|
1955
2053
|
store.get('dmTargetUser').avatarSeed = mp2.avatarSeed || store.get('dmTargetUser').avatarSeed;
|
|
1956
2054
|
store.get('dmTargetUser').avatarColor = mp2.avatarColor || store.get('dmTargetUser').avatarColor;
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { refreshIcons, iconHtml } from './icons.js';
|
|
5
5
|
import { getWs } from './ws-ref.js';
|
|
6
|
+
import { store } from './store.js';
|
|
7
|
+
import { sessionCallback } from './pane-binding.js';
|
|
6
8
|
import { updateBrowserTabList } from './context-sources.js';
|
|
7
9
|
import { setExtensionConnected } from './mcp-ui.js';
|
|
8
10
|
import { initPasteModal } from './paste-modal.js';
|
|
@@ -270,7 +272,7 @@ export function showConfirm(text, onConfirm, okLabel, destructive, onCancel) {
|
|
|
270
272
|
confirmCancelCallback = null;
|
|
271
273
|
if (replaced) replaced();
|
|
272
274
|
confirmText.textContent = text;
|
|
273
|
-
confirmCallback = onConfirm;
|
|
275
|
+
confirmCallback = store.get('paneCommittedBinding') ? sessionCallback(onConfirm) : onConfirm;
|
|
274
276
|
confirmCancelCallback = onCancel || null;
|
|
275
277
|
confirmOk.textContent = okLabel || "Delete";
|
|
276
278
|
confirmOk.className = "confirm-btn " + (destructive === false ? "confirm-ok" : "confirm-delete");
|
|
@@ -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 ---
|
|
@@ -135,7 +134,7 @@ function showBanner(notif, autoDismissMs) {
|
|
|
135
134
|
|
|
136
135
|
var banner = document.createElement("div");
|
|
137
136
|
banner.className = "notif-banner" + (isAuthRequired ? " notif-banner-update notif-banner-auth" : isPermission ? " notif-banner-permission" : isUserMention ? " notif-banner-user-mention" : "");
|
|
138
|
-
if (!isEmpty) banner.setAttribute("data-notif-id", notif.id);
|
|
137
|
+
if (!isEmpty) { banner.setAttribute("data-notif-id", notif.id); banner.dataset.controlRevision = notif.controlRevision || ""; }
|
|
139
138
|
if (isAuthRequired) banner.setAttribute("data-auth-banner", "true");
|
|
140
139
|
|
|
141
140
|
var iconHtmlStr = userMentionAvatarSrc
|
|
@@ -470,7 +469,12 @@ export function getPendingTuiAttention(slug) {
|
|
|
470
469
|
}
|
|
471
470
|
|
|
472
471
|
export function handleNotificationsState(msg) {
|
|
473
|
-
notifications = msg.notifications || [];
|
|
472
|
+
notifications = msg.notifications || []; store.set({ clayControlNotifications: notifications });
|
|
473
|
+
// Authoritative snapshots also withdraw banners removed by reviewed canonical actions.
|
|
474
|
+
if (bannerContainer) Array.from(bannerContainer.querySelectorAll('[data-notif-id]')).forEach(function (banner) {
|
|
475
|
+
var id = banner.dataset.notifId;
|
|
476
|
+
if (id.charAt(0) !== '_' && !notifications.some(function (item) { return item.id === id; })) removeBanner(banner);
|
|
477
|
+
});
|
|
474
478
|
unreadCount = msg.unreadCount || 0;
|
|
475
479
|
updateBadge();
|
|
476
480
|
|
|
@@ -501,6 +505,7 @@ export function handleNotificationsState(msg) {
|
|
|
501
505
|
|
|
502
506
|
export function handleNotificationCreated(msg) {
|
|
503
507
|
var notif = msg.notification;
|
|
508
|
+
store.set({ clayControlNotifications: [notif].concat((store.get("clayControlNotifications") || []).filter(function (item) { return item.id !== notif.id; })) });
|
|
504
509
|
|
|
505
510
|
// Auto-dismiss if it's for the session the user is currently viewing
|
|
506
511
|
var activeSession = store.get('activeSessionId') || null;
|
|
@@ -511,6 +516,7 @@ export function handleNotificationCreated(msg) {
|
|
|
511
516
|
}
|
|
512
517
|
|
|
513
518
|
notifications.unshift(notif);
|
|
519
|
+
store.set({ clayControlNotifications: notifications });
|
|
514
520
|
unreadCount = msg.unreadCount;
|
|
515
521
|
updateBadge();
|
|
516
522
|
|
|
@@ -568,7 +574,7 @@ export function handleNotificationDismissed(msg) {
|
|
|
568
574
|
}
|
|
569
575
|
|
|
570
576
|
export function handleNotificationDismissedAll() {
|
|
571
|
-
notifications = [];
|
|
577
|
+
notifications = []; store.set({ clayControlNotifications: [] });
|
|
572
578
|
unreadCount = 0;
|
|
573
579
|
updateBadge();
|
|
574
580
|
if (bannerContainer) bannerContainer.innerHTML = "";
|