clay-server 5.2.0-beta.1 → 5.2.0-beta.11
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/README.md +0 -4
- 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 +52 -0
- package/lib/clay-product-control.js +250 -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-vendor-usage.js +44 -0
- 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/github-star-count.js +147 -0
- 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 +92 -0
- package/lib/notes.js +51 -4
- 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 +40 -11
- 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 +160 -290
- package/lib/project-shared-browser.js +78 -17
- package/lib/project-start-protocol.js +29 -0
- package/lib/project-studio-presentation.js +58 -0
- package/lib/project-user-message.js +67 -1
- package/lib/project-vendor-login.js +8 -36
- package/lib/project-workspace-operations.js +126 -0
- package/lib/project-workspace-query.js +19 -2
- package/lib/project.js +181 -45
- package/lib/public/app.js +71 -17
- 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/filebrowser.css +1 -1
- 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/mate-loading-scene.css +21 -0
- package/lib/public/css/messages.css +6 -2
- package/lib/public/css/overlays.css +68 -258
- package/lib/public/css/project-admin-overview.css +13 -0
- package/lib/public/css/project-mate-creation.css +5 -6
- package/lib/public/css/project-start.css +108 -0
- package/lib/public/css/projects-hub.css +53 -14
- package/lib/public/css/session-folders.css +11 -0
- package/lib/public/css/session-github.css +46 -1
- package/lib/public/css/settings-shell.css +103 -0
- package/lib/public/css/shared-browser.css +35 -1
- package/lib/public/css/sidebar.css +7 -0
- package/lib/public/css/sticky-notes.css +87 -1
- package/lib/public/css/title-bar.css +79 -0
- package/lib/public/index.html +61 -68
- 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-invitations.js +2 -2
- package/lib/public/modules/admin-settings-projects.js +8 -4
- package/lib/public/modules/admin-settings-ui.js +20 -4
- package/lib/public/modules/admin-settings-users.js +4 -4
- 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-home-hub.js +2 -1
- 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 +125 -19
- 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 +14 -407
- package/lib/public/modules/app-rate-limit.js +19 -28
- 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 +343 -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 +252 -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/github-star.js +66 -0
- 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-loading-scene.js +17 -0
- 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 +12 -241
- 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-creation-workspace.js +13 -4
- package/lib/public/modules/project-mate-navigation.js +144 -22
- package/lib/public/modules/project-session-visibility-settings.js +19 -16
- package/lib/public/modules/project-settings.js +119 -129
- package/lib/public/modules/project-start-dialog.js +130 -0
- package/lib/public/modules/project-start-folder-state.js +78 -0
- package/lib/public/modules/project-start-folder-view.js +190 -0
- package/lib/public/modules/project-start-forms.js +66 -0
- package/lib/public/modules/project-start-path.js +60 -0
- package/lib/public/modules/project-start-state.js +54 -0
- package/lib/public/modules/project-start-submit.js +67 -0
- package/lib/public/modules/projects-hub-view.js +33 -14
- package/lib/public/modules/projects-hub.js +10 -6
- 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/server-settings.js +36 -91
- 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/settings-project-target.js +56 -0
- package/lib/public/modules/settings-select.js +1 -1
- package/lib/public/modules/settings-shell-registry.js +88 -0
- package/lib/public/modules/settings-shell-view.js +104 -0
- package/lib/public/modules/settings-shell.js +342 -0
- 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 +12 -33
- package/lib/public/modules/sidebar-projects.js +3 -1
- 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 +18 -3
- 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 +14 -30
- package/lib/public/modules/user-settings-preferences.js +6 -2
- package/lib/public/modules/user-settings-profile.js +13 -3
- package/lib/public/modules/user-settings.js +18 -84
- 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/vendor-usage-format.js +93 -0
- package/lib/public/modules/vendor-usage-list.js +45 -0
- package/lib/public/modules/vendor-usage-model.js +215 -0
- package/lib/public/modules/vendor-usage-overview.js +312 -0
- package/lib/public/modules/wireframe-workbench.js +5 -2
- package/lib/public/muse-avatar.svg +4 -0
- package/lib/public/style.css +14 -6
- package/lib/public/sw.js +3 -1
- package/lib/public/welcome-art/conversation-desk.png +0 -0
- package/lib/public/welcome-art/mate-clay.png +0 -0
- package/lib/public/welcome-art/project-clay.png +0 -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 +348 -402
- package/lib/sdk-foreground-admission.js +16 -0
- package/lib/sdk-mcp-descriptors.js +2 -37
- package/lib/sdk-message-processor.js +61 -18
- package/lib/sdk-quota-snapshot.js +21 -3
- 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-github-stars.js +39 -0
- package/lib/server-global-ws.js +26 -32
- 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 +167 -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-notes-mcp-server.js +26 -4
- package/lib/session-notes-writes.js +88 -0
- package/lib/session-permission-mode.js +4 -3
- package/lib/session-skill-scope.js +11 -0
- package/lib/session-visibility.js +25 -10
- package/lib/session-work-primary.js +50 -0
- package/lib/sessions.js +66 -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/vendor-usage-acp-readers.js +97 -0
- package/lib/vendor-usage-capabilities.js +88 -0
- package/lib/vendor-usage-http-readers.js +214 -0
- package/lib/vendor-usage-metrics.js +47 -0
- package/lib/vendor-usage-native-readers.js +106 -0
- package/lib/vendor-usage-overview.js +406 -0
- package/lib/vendor-usage-service.js +281 -0
- 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 +22 -4
- 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 +66 -50
- package/lib/yoke/adapters/codex-query-contract.js +25 -0
- package/lib/yoke/adapters/codex.js +98 -123
- 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 +272 -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-dynamic-tool-names.js +80 -0
- package/lib/yoke/codex-idle-recovery.js +81 -1
- package/lib/yoke/codex-model-catalog.js +37 -3
- 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 +92 -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 +34 -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 +87 -3
- package/package.json +11 -4
- package/lib/public/modules/server-settings-navigation.js +0 -39
|
@@ -5,8 +5,9 @@ import { refreshIcons } from './icons.js';
|
|
|
5
5
|
import { store } from './store.js';
|
|
6
6
|
import { getSendBtn, getStatusDot } from './dom-refs.js';
|
|
7
7
|
import { onThemeChange } from './theme.js';
|
|
8
|
-
import { getActivityEl, setActivityEl, addToMessages, scrollToBottom
|
|
8
|
+
import { getActivityEl, setActivityEl, addToMessages, scrollToBottom } from './app-rendering.js';
|
|
9
9
|
import { escapeHtml } from './utils.js';
|
|
10
|
+
import { resolveProjectAssistantIdentity, applyProjectAssistantIdentity } from './project-chat-identity.js';
|
|
10
11
|
|
|
11
12
|
// --- Module-owned state ---
|
|
12
13
|
var faviconLink, faviconOrigHref, faviconCanvas, faviconCtx, faviconImg, faviconImgReady;
|
|
@@ -197,7 +198,7 @@ export function stopUrgentBlink() {
|
|
|
197
198
|
|
|
198
199
|
export function setActivity(text) {
|
|
199
200
|
var thinkingState = store.get('thinkingState');
|
|
200
|
-
if (text === "thinking" && thinkingState && thinkingState.active) {
|
|
201
|
+
if ((text === "thinking" || text === "running") && thinkingState && thinkingState.active) {
|
|
201
202
|
// Live Thinking already owns the tail progress UI. Compaction and tool
|
|
202
203
|
// activity intentionally continue through so their distinct states show.
|
|
203
204
|
if (getActivityEl()) {
|
|
@@ -210,14 +211,12 @@ export function setActivity(text) {
|
|
|
210
211
|
if (!getActivityEl()) {
|
|
211
212
|
var _actEl = document.createElement("div");
|
|
212
213
|
_actEl.className = "activity-inline";
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
// animating. DM mode handles its own avatar via mate-thinking
|
|
216
|
-
// elements and shouldn't pick up a vendor avatar here.
|
|
214
|
+
// The same session-bound identity owns waiting, thoughts and replies.
|
|
215
|
+
// DM mode retains its own Mate-thinking row.
|
|
217
216
|
var _isDm = !!(store.get('dmMode') && store.get('dmTargetUser') && store.get('dmTargetUser').isMate);
|
|
218
217
|
if (!_isDm) {
|
|
219
|
-
var
|
|
220
|
-
var _avatarUrl =
|
|
218
|
+
var _identity = resolveProjectAssistantIdentity(store.snap(), store.get('currentVendor'));
|
|
219
|
+
var _avatarUrl = _identity.avatarUrl;
|
|
221
220
|
_actEl.innerHTML =
|
|
222
221
|
'<img class="activity-inline-avatar" src="' + escapeHtml(_avatarUrl) + '" alt="">' +
|
|
223
222
|
'<div class="mate-thinking-dots"><span></span><span></span><span></span></div>';
|
|
@@ -225,9 +224,19 @@ export function setActivity(text) {
|
|
|
225
224
|
_actEl.innerHTML =
|
|
226
225
|
'<div class="mate-thinking-dots"><span></span><span></span><span></span></div>';
|
|
227
226
|
}
|
|
227
|
+
_actEl.setAttribute("role", "status");
|
|
228
|
+
_actEl.setAttribute("aria-live", "polite");
|
|
228
229
|
setActivityEl(_actEl);
|
|
229
|
-
addToMessages(_actEl);
|
|
230
230
|
}
|
|
231
|
+
var activity = getActivityEl();
|
|
232
|
+
var labels = { waiting: "Waiting for provider", running: "Working", background: "Background work pending" };
|
|
233
|
+
var label = activity.querySelector(".activity-state-label");
|
|
234
|
+
if (labels[text]) {
|
|
235
|
+
if (!label) { label = document.createElement("span"); label.className = "activity-state-label activity-text"; activity.appendChild(label); }
|
|
236
|
+
label.textContent = labels[text];
|
|
237
|
+
} else if (label) label.remove();
|
|
238
|
+
applyProjectAssistantIdentity(activity, resolveProjectAssistantIdentity(store.snap(), store.get('currentVendor')));
|
|
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);
|
|
@@ -350,6 +352,7 @@ export function prependOlderHistory(items, meta) {
|
|
|
350
352
|
|
|
351
353
|
// Save current rendering state
|
|
352
354
|
var savedMsgEl = store.get('currentMsgEl');
|
|
355
|
+
var savedReplayingHistory = store.get('replayingHistory');
|
|
353
356
|
var savedActivity = getActivityEl();
|
|
354
357
|
var savedFullText = store.get('currentFullText');
|
|
355
358
|
var savedTurnCounter = getTurnCounter();
|
|
@@ -359,7 +362,7 @@ export function prependOlderHistory(items, meta) {
|
|
|
359
362
|
var savedUsage = JSON.parse(JSON.stringify(getSessionUsage()));
|
|
360
363
|
|
|
361
364
|
// Reset to initial values for clean rendering
|
|
362
|
-
store.set({ currentMsgEl: null, currentFullText: "" });
|
|
365
|
+
store.set({ currentMsgEl: null, currentFullText: "", replayingHistory: true });
|
|
363
366
|
setActivityEl(null);
|
|
364
367
|
setTurnCounter(0);
|
|
365
368
|
resetToolState();
|
|
@@ -387,7 +390,7 @@ export function prependOlderHistory(items, meta) {
|
|
|
387
390
|
setPrependAnchor(null);
|
|
388
391
|
|
|
389
392
|
// Restore saved state
|
|
390
|
-
store.set({ currentMsgEl: savedMsgEl, currentFullText: savedFullText });
|
|
393
|
+
store.set({ currentMsgEl: savedMsgEl, currentFullText: savedFullText, replayingHistory: savedReplayingHistory });
|
|
391
394
|
setActivityEl(savedActivity);
|
|
392
395
|
setTurnCounter(savedTurnCounter);
|
|
393
396
|
restoreToolState(savedToolsState);
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
import { showProjectsHub, hideProjectsHub } from './projects-hub.js';
|
|
4
4
|
import { store } from './store.js';
|
|
5
5
|
import { getWs } from './ws-ref.js';
|
|
6
|
-
import { getCachedProjects,
|
|
6
|
+
import { getCachedProjects, switchProject } from './app-projects.js';
|
|
7
|
+
import { openAddProjectModal } from './project-start-dialog.js';
|
|
7
8
|
import { chooseProjectActivationTarget, homeProjectCreationState } from './project-activation.js';
|
|
8
9
|
import { mateAvatarUrl } from './avatar.js';
|
|
9
10
|
import { exitDmMode } from './app-dm.js';
|
|
@@ -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",
|
|
@@ -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';
|
|
@@ -55,17 +65,17 @@ import { showDoneNotification, playDoneSound, isNotifAlertEnabled, isNotifSoundE
|
|
|
55
65
|
import { handleFsList, handleFsRead, handleFileChanged, handleDirChanged, handleFileHistory, handleGitDiff, handleFileAt, refreshIfOpen, getPendingNavigate, handleFsSearch, presentMarkdownEdit } from './filebrowser.js';
|
|
56
66
|
import { beginMarkdownTurn, finishMarkdownTurn, markdownPathFromToolInput } from './markdown-live-edit.js';
|
|
57
67
|
import { forwardPaneMarkdownPresentation } from './pane-bridge.js';
|
|
58
|
-
import { handleProjectOwnerChanged } from './project-settings.js';
|
|
68
|
+
import { handleProjectOwnerChanged, handleProjectSettingsEditResult } 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';
|
|
@@ -90,13 +100,15 @@ import { markProjectSessionListHydrated, applyProjectSplitGroups, clearProjectSp
|
|
|
90
100
|
import { selectDefaultVendorForBlankSession } from './vendor-selection.js';
|
|
91
101
|
import { getModelInfoUpdate, modelEntryValue, modelEntryMatches, handleModelSelectionResult, requestVendorModels } from './model-picker.js';
|
|
92
102
|
import { getModelEffortLevels, accumulateUsage, updateUsagePanel, accumulateContext, updateContextPanel, renderCtxPopover, updateStatusPanel, markContextUnavailable } from './app-panels.js';
|
|
93
|
-
import { updateProjectList, resetClientState, showUpdateAvailable, handleRemoveProjectCheckResult, handleRemoveProjectResult,
|
|
103
|
+
import { updateProjectList, resetClientState, showUpdateAvailable, handleRemoveProjectCheckResult, handleRemoveProjectResult, finishProjectSessionActivation } from './app-projects.js';
|
|
104
|
+
import { handleBrowseDirResult, handleAddProjectResult, handleCloneProgress } from './project-start-dialog.js';
|
|
94
105
|
import { updateHistorySentinel, prependOlderHistory } from './app-header.js';
|
|
95
106
|
import { handleToolsState, handleToolInstalled, handleToolRemoved, handleToolStorageResult, handleToolLlmResult, handleToolsError, handleToolControlRequest, handleToolServerState, handleToolServerEvent, handleCapsuleGameSession } from './home-tools.js';
|
|
96
107
|
import { handleHomeDockState } from './home-dock.js';
|
|
97
108
|
import { handleToolFrameUrlState } from './home-tool-frame.js';
|
|
98
109
|
import { enterDmMode, exitDmMode, handleMateCreatedInApp, updateMateIconStatus, appendDmMessage, showDmTypingIndicator, buildMateInterviewPrompt } from './app-dm.js';
|
|
99
110
|
import { handleRateLimitEvent, updateRateLimitUsage, handleFastModeState } from './app-rate-limit.js';
|
|
111
|
+
import { handleVendorUsageOverview } from './vendor-usage-overview.js';
|
|
100
112
|
import { handleRemoteCursorMove, handleRemoteCursorLeave, handleRemoteSelection, clearRemoteCursors } from './app-cursors.js';
|
|
101
113
|
import { showLoopBanner, updateLoopBanner, updateLoopInputVisibility, showRalphApprovalBar, updateRalphApprovalStatus, openRalphPreviewModal, showExecModal, updateExecModalStatus } from './app-loop-ui.js';
|
|
102
114
|
import { handleAutonomousRunMessage, syncAutonomousRunForSession } from './autonomous-run.js';
|
|
@@ -118,6 +130,9 @@ var connectOverlay = document.getElementById("connect-overlay");
|
|
|
118
130
|
initMessageDeliveryUi();
|
|
119
131
|
|
|
120
132
|
export function processMessage(msg) {
|
|
133
|
+
if (handleStudioDocumentMessage(msg)) return;
|
|
134
|
+
if (handleClayControlActivity(msg)) return;
|
|
135
|
+
if (handleOwnerNavigation(msg)) return;
|
|
121
136
|
if (["update_available", "up_to_date", "update_started", "update_check_failed"].indexOf(msg.type) !== -1) handleServerUpdate(msg);
|
|
122
137
|
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
138
|
if (handleProjectDebateMessage(msg)) return;
|
|
@@ -145,7 +160,7 @@ export function processMessage(msg) {
|
|
|
145
160
|
return;
|
|
146
161
|
}
|
|
147
162
|
if (msg.type === "access_revoked") {
|
|
148
|
-
|
|
163
|
+
leaveRevokedProject("/");
|
|
149
164
|
return;
|
|
150
165
|
}
|
|
151
166
|
// Preserve original timestamp from history replay
|
|
@@ -204,7 +219,7 @@ export function processMessage(msg) {
|
|
|
204
219
|
if (readyMatch) {
|
|
205
220
|
var newName = readyMatch[1].trim();
|
|
206
221
|
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 } });
|
|
222
|
+
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
223
|
if (getWs() && getWs().readyState === 1) {
|
|
209
224
|
getWs().send(JSON.stringify({
|
|
210
225
|
type: "mate_update",
|
|
@@ -224,6 +239,10 @@ export function processMessage(msg) {
|
|
|
224
239
|
}
|
|
225
240
|
}
|
|
226
241
|
|
|
242
|
+
store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null,
|
|
243
|
+
currentHistoryIndexes: Array.isArray(msg._historyIndexes) ? msg._historyIndexes : null });
|
|
244
|
+
if (handleContextualSessionMessage(msg)) return;
|
|
245
|
+
handleContextualWorkspaceMessage(msg);
|
|
227
246
|
switch (msg.type) {
|
|
228
247
|
case "message_ack":
|
|
229
248
|
var acknowledgedEntry = acknowledgeMessage(msg.clientMessageId);
|
|
@@ -250,9 +269,12 @@ export function processMessage(msg) {
|
|
|
250
269
|
|
|
251
270
|
case "history_prepend":
|
|
252
271
|
prependOlderHistory(msg.items, msg.meta);
|
|
272
|
+
handlePaletteHistoryPrepended();
|
|
253
273
|
break;
|
|
254
274
|
|
|
255
275
|
case "history_done":
|
|
276
|
+
var historyPaintEpoch = store.get('sessionActionEpoch') || 0;
|
|
277
|
+
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
278
|
store.set({ replayingHistory: false });
|
|
257
279
|
resumeThinkingAfterReplay(store.get('sessionIsProcessing'));
|
|
258
280
|
// Batched syntax highlight + mermaid pass for the entire replayed
|
|
@@ -275,7 +297,7 @@ export function processMessage(msg) {
|
|
|
275
297
|
|
|
276
298
|
// Restore accurate context data from the last result in full history
|
|
277
299
|
if (msg.lastUsage || msg.lastModelUsage) {
|
|
278
|
-
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens);
|
|
300
|
+
accumulateContext(msg.lastCost, msg.lastUsage, msg.lastModelUsage, msg.lastStreamInputTokens, msg.context);
|
|
279
301
|
}
|
|
280
302
|
updateContextPanel();
|
|
281
303
|
updateUsagePanel();
|
|
@@ -283,6 +305,7 @@ export function processMessage(msg) {
|
|
|
283
305
|
// the restored turn instead of starting a second answer bubble.
|
|
284
306
|
if (store.get('sessionIsProcessing')) {
|
|
285
307
|
flushStreamBuffer();
|
|
308
|
+
if (store.get('turnActivity')) setActivity(store.get('turnActivity').phase);
|
|
286
309
|
} else {
|
|
287
310
|
markAllToolsDone();
|
|
288
311
|
finalizeAssistantBlock();
|
|
@@ -311,11 +334,16 @@ export function processMessage(msg) {
|
|
|
311
334
|
// re-pins on every height change while armed. Disarms early on
|
|
312
335
|
// any real user scroll input.
|
|
313
336
|
// 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
|
|
337
|
+
// target (file-edit or Session-entry deeplink) — the navigate block
|
|
338
|
+
// below scrolls that element into view, and sticky-bottom would
|
|
339
|
+
// fight it.
|
|
316
340
|
var nav = getPendingNavigate();
|
|
317
341
|
var hasNavTarget = nav && (nav.toolId || nav.assistantUuid);
|
|
318
|
-
|
|
342
|
+
var sessionEntryNav = store.get('pendingSessionEntryNavigation');
|
|
343
|
+
var hasSessionEntryNav = sessionEntryNav
|
|
344
|
+
&& String(sessionEntryNav.projectSlug) === String(store.get('currentSlug'))
|
|
345
|
+
&& String(sessionEntryNav.sessionId) === String(store.get('activeSessionId'));
|
|
346
|
+
if (hasNavTarget || hasSessionEntryNav) {
|
|
319
347
|
// Navigate block below will scrollIntoView on the target — don't
|
|
320
348
|
// arm sticky-bottom or it would fight that scroll.
|
|
321
349
|
scrollToBottom();
|
|
@@ -328,6 +356,7 @@ export function processMessage(msg) {
|
|
|
328
356
|
// Scroll to tool element if navigating from file edit history
|
|
329
357
|
if (hasNavTarget) {
|
|
330
358
|
requestAnimationFrame(function() {
|
|
359
|
+
if (historyPaintEpoch !== (store.get('sessionActionEpoch') || 0) || !paneCallbackCurrent(msg.paneActivation)) return;
|
|
331
360
|
// Prefer scrolling to the exact tool element
|
|
332
361
|
var target = nav.toolId ? messagesEl.querySelector('[data-tool-id="' + nav.toolId + '"]') : null;
|
|
333
362
|
if (!target && nav.assistantUuid) {
|
|
@@ -343,6 +372,7 @@ export function processMessage(msg) {
|
|
|
343
372
|
}
|
|
344
373
|
});
|
|
345
374
|
}
|
|
375
|
+
requestAnimationFrame(function () { if (historyPaintEpoch === (store.get('sessionActionEpoch') || 0) && paneCallbackCurrent(msg.paneActivation)) handlePaletteHistoryDone(); });
|
|
346
376
|
break;
|
|
347
377
|
|
|
348
378
|
case "restore_mate_dm":
|
|
@@ -363,6 +393,7 @@ export function processMessage(msg) {
|
|
|
363
393
|
break;
|
|
364
394
|
|
|
365
395
|
case "info":
|
|
396
|
+
store.set({ controlRuntimeId: msg.controlRuntimeId || null });
|
|
366
397
|
if (msg.text && !msg.project && !msg.cwd) {
|
|
367
398
|
addSystemMessage(msg.text, false);
|
|
368
399
|
break;
|
|
@@ -753,9 +784,11 @@ export function processMessage(msg) {
|
|
|
753
784
|
markProjectSessionListHydrated();
|
|
754
785
|
renderMateSessionList(msg.sessions || []);
|
|
755
786
|
renderSessionList(msg.sessions || []);
|
|
787
|
+
store.set({ paneBindingSessions: msg.sessions || [] });
|
|
788
|
+
refreshPaneActivation();
|
|
756
789
|
syncGithubSessions(msg.sessions || []);
|
|
757
790
|
syncPaneTitles();
|
|
758
|
-
var panePin = resolvePaneSession(store.get('paneMode'), store.get('panePinPending'), store.get('paneSessionId'), msg.sessions);
|
|
791
|
+
var panePin = resolvePaneSession(store.get('paneMode') && !primePaneSession(), store.get('panePinPending'), store.get('paneSessionId'), msg.sessions);
|
|
759
792
|
if (panePin.consumed) {
|
|
760
793
|
store.set({ panePinPending: false });
|
|
761
794
|
if (panePin.sessionId && getWs() && getWs().readyState === 1) {
|
|
@@ -765,6 +798,9 @@ export function processMessage(msg) {
|
|
|
765
798
|
handlePaletteSessionSwitch();
|
|
766
799
|
maybeRestoreSplitGroup();
|
|
767
800
|
break;
|
|
801
|
+
case "session_github_status":
|
|
802
|
+
applyGithubPersonalReviewStatus(msg);
|
|
803
|
+
break;
|
|
768
804
|
|
|
769
805
|
case "split_groups":
|
|
770
806
|
applyProjectSplitGroups(msg.groups || []);
|
|
@@ -850,6 +886,9 @@ export function processMessage(msg) {
|
|
|
850
886
|
handleRemoteSelection(msg);
|
|
851
887
|
break;
|
|
852
888
|
|
|
889
|
+
case "session_work_primary_result":
|
|
890
|
+
handlePrimaryWorkResult(msg);
|
|
891
|
+
break;
|
|
853
892
|
case "linear_result":
|
|
854
893
|
handleLinearResult(msg);
|
|
855
894
|
break;
|
|
@@ -876,6 +915,8 @@ export function processMessage(msg) {
|
|
|
876
915
|
break;
|
|
877
916
|
|
|
878
917
|
case "session_switched":
|
|
918
|
+
saveSessionRichDraft();
|
|
919
|
+
store.set({ sessionActionEpoch: (store.get('sessionActionEpoch') || 0) + 1 });
|
|
879
920
|
clearPairResultStatus();
|
|
880
921
|
resetStreamBuffer();
|
|
881
922
|
syncAutonomousRunForSession(msg.autonomousRun || null);
|
|
@@ -893,7 +934,7 @@ export function processMessage(msg) {
|
|
|
893
934
|
? msg.runtimeTerminalId
|
|
894
935
|
: (typeof msg.terminalId === "number" ? msg.terminalId : null);
|
|
895
936
|
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 ||
|
|
937
|
+
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
938
|
handleScheduledTaskSessionSwitched(msg);
|
|
898
939
|
requestLoopInterviewState();
|
|
899
940
|
activateDeliverySession(msg.id, msg.cliSessionId || null, msg.sessionOriginId || null);
|
|
@@ -968,14 +1009,19 @@ export function processMessage(msg) {
|
|
|
968
1009
|
// Restore draft for incoming session
|
|
969
1010
|
var draft = store.get('sessionDrafts')[store.get('activeSessionId')] || "";
|
|
970
1011
|
inputEl.value = draft;
|
|
1012
|
+
restoreSessionRichDraft();
|
|
971
1013
|
autoResize();
|
|
972
1014
|
if (!("ontouchstart" in window)) {
|
|
973
1015
|
inputEl.focus();
|
|
974
1016
|
}
|
|
975
1017
|
// Reload survival: a restored active session that is a split-group
|
|
976
1018
|
// member reopens its group (no-op when a split is already open).
|
|
977
|
-
|
|
978
|
-
|
|
1019
|
+
var deferredSwitch = store.get('deferredSessionSwitch');
|
|
1020
|
+
if (!deferredSwitch || !deferredSwitch.draining || deferredSwitch.finalSwitch === msg) {
|
|
1021
|
+
finishProjectSessionActivation();
|
|
1022
|
+
maybeRestoreSplitGroup();
|
|
1023
|
+
handlePaletteSessionSwitch(true);
|
|
1024
|
+
}
|
|
979
1025
|
break;
|
|
980
1026
|
|
|
981
1027
|
case "session_full_access_changed":
|
|
@@ -1020,7 +1066,11 @@ export function processMessage(msg) {
|
|
|
1020
1066
|
// running session, where history_done keeps current tools active.
|
|
1021
1067
|
// Question answers, plan feedback and Driver delegations are injected
|
|
1022
1068
|
// mid-turn, so tools before them may still be running.
|
|
1023
|
-
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated)
|
|
1069
|
+
else if (!msg.askUserAnswer && !msg.planFeedback && !msg.delegated) {
|
|
1070
|
+
markAllToolsDone();
|
|
1071
|
+
// Older histories predate explicit foreground presentation boundaries.
|
|
1072
|
+
finalizeAssistantBlock();
|
|
1073
|
+
}
|
|
1024
1074
|
resetThinkingGroup();
|
|
1025
1075
|
if (msg.planContent) {
|
|
1026
1076
|
setPlanContent(msg.planContent);
|
|
@@ -1117,7 +1167,7 @@ export function processMessage(msg) {
|
|
|
1117
1167
|
// events make it through.
|
|
1118
1168
|
removeMatePreThinking();
|
|
1119
1169
|
if (!(store.get('dmMode') && store.get('dmTargetUser') && store.get('dmTargetUser').isMate) && !store.get('matePreThinkingEl')) {
|
|
1120
|
-
setActivity("thinking");
|
|
1170
|
+
setActivity((store.get("turnActivity") || {}).phase || "thinking");
|
|
1121
1171
|
}
|
|
1122
1172
|
}
|
|
1123
1173
|
break;
|
|
@@ -1153,8 +1203,24 @@ export function processMessage(msg) {
|
|
|
1153
1203
|
}
|
|
1154
1204
|
break;
|
|
1155
1205
|
|
|
1206
|
+
case "turn_activity":
|
|
1207
|
+
if (["waiting", "running", "background"].indexOf(msg.phase) === -1) break;
|
|
1208
|
+
store.set({ turnActivity: { phase: msg.phase, turnId: msg.turnId || null, disposition: msg.disposition || null } });
|
|
1209
|
+
if (!store.get('replayingHistory') && store.get('sessionIsProcessing')) {
|
|
1210
|
+
removeMatePreThinking();
|
|
1211
|
+
setActivity(msg.phase);
|
|
1212
|
+
}
|
|
1213
|
+
break;
|
|
1214
|
+
|
|
1215
|
+
case "assistant_boundary":
|
|
1216
|
+
// Foreground presentation ended; background work still owns its real
|
|
1217
|
+
// terminal. Flush pending animation text without finishing tools/Stop.
|
|
1218
|
+
finalizeAssistantBlock();
|
|
1219
|
+
break;
|
|
1220
|
+
|
|
1156
1221
|
case "delta":
|
|
1157
1222
|
if (typeof msg.text !== "string") break;
|
|
1223
|
+
store.set({ turnActivity: null });
|
|
1158
1224
|
removeMatePreThinking();
|
|
1159
1225
|
stopThinking();
|
|
1160
1226
|
setActivity(null);
|
|
@@ -1202,6 +1268,8 @@ export function processMessage(msg) {
|
|
|
1202
1268
|
renderMcpDebateProposal(msg.id, msg.input);
|
|
1203
1269
|
startUrgentBlink();
|
|
1204
1270
|
} else if (msg.name === "AskUserQuestion" && msg.input && msg.input.questions) {
|
|
1271
|
+
store.set({ turnActivity: null });
|
|
1272
|
+
setActivity(null);
|
|
1205
1273
|
var askTool = getTools()[msg.id];
|
|
1206
1274
|
if (askTool) {
|
|
1207
1275
|
if (askTool.el) askTool.el.style.display = "none";
|
|
@@ -1266,12 +1334,23 @@ export function processMessage(msg) {
|
|
|
1266
1334
|
renderGeneratedImage(msg);
|
|
1267
1335
|
break;
|
|
1268
1336
|
|
|
1337
|
+
case 'mate_schedule_question_expired':
|
|
1338
|
+
markAskUserAnswered(msg.toolId, { 0: msg.error || 'This schedule review expired.' });
|
|
1339
|
+
stopUrgentBlink();
|
|
1340
|
+
break;
|
|
1341
|
+
|
|
1342
|
+
case 'mcp_import_consent_expired':
|
|
1343
|
+
markAskUserAnswered(msg.toolId, { 0: msg.error || 'No import was approved.' });
|
|
1344
|
+
stopUrgentBlink();
|
|
1345
|
+
break;
|
|
1346
|
+
|
|
1269
1347
|
case "ask_user_answered":
|
|
1270
1348
|
markAskUserAnswered(msg.toolId, msg.answers);
|
|
1271
1349
|
stopUrgentBlink();
|
|
1272
1350
|
break;
|
|
1273
1351
|
|
|
1274
1352
|
case "permission_request":
|
|
1353
|
+
store.set({ turnActivity: null });
|
|
1275
1354
|
setActivity(null);
|
|
1276
1355
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1277
1356
|
startUrgentBlink();
|
|
@@ -1287,13 +1366,21 @@ export function processMessage(msg) {
|
|
|
1287
1366
|
stopUrgentBlink();
|
|
1288
1367
|
break;
|
|
1289
1368
|
|
|
1369
|
+
case "ask_user_pending":
|
|
1370
|
+
renderAskUserQuestion(msg.toolId, msg.input);
|
|
1371
|
+
startUrgentBlink();
|
|
1372
|
+
break;
|
|
1373
|
+
|
|
1290
1374
|
case "permission_request_pending":
|
|
1375
|
+
store.set({ turnActivity: null });
|
|
1291
1376
|
setActivity(null);
|
|
1292
1377
|
renderPermissionRequest(msg.requestId, msg.toolName, msg.toolInput, msg.decisionReason, msg.mateId, msg.vendor, msg);
|
|
1293
1378
|
startUrgentBlink();
|
|
1294
1379
|
break;
|
|
1295
1380
|
|
|
1296
1381
|
case "elicitation_request":
|
|
1382
|
+
store.set({ turnActivity: null });
|
|
1383
|
+
setActivity(null);
|
|
1297
1384
|
renderElicitationRequest(msg);
|
|
1298
1385
|
startUrgentBlink();
|
|
1299
1386
|
break;
|
|
@@ -1308,6 +1395,8 @@ export function processMessage(msg) {
|
|
|
1308
1395
|
break;
|
|
1309
1396
|
|
|
1310
1397
|
case "user_dialog_request":
|
|
1398
|
+
store.set({ turnActivity: null });
|
|
1399
|
+
setActivity(null);
|
|
1311
1400
|
renderUserDialogRequest(msg);
|
|
1312
1401
|
startUrgentBlink();
|
|
1313
1402
|
break;
|
|
@@ -1373,7 +1462,7 @@ export function processMessage(msg) {
|
|
|
1373
1462
|
finalizeAssistantBlock();
|
|
1374
1463
|
addTurnMeta(msg.cost, msg.duration);
|
|
1375
1464
|
accumulateUsage(msg.cost, msg.usage);
|
|
1376
|
-
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens);
|
|
1465
|
+
accumulateContext(msg.cost, msg.usage, msg.modelUsage, msg.lastStreamInputTokens, msg.context);
|
|
1377
1466
|
break;
|
|
1378
1467
|
|
|
1379
1468
|
case "context_usage":
|
|
@@ -1386,6 +1475,7 @@ export function processMessage(msg) {
|
|
|
1386
1475
|
break;
|
|
1387
1476
|
|
|
1388
1477
|
case "done":
|
|
1478
|
+
store.set({ turnActivity: null });
|
|
1389
1479
|
removeMatePreThinking();
|
|
1390
1480
|
setActivity(null);
|
|
1391
1481
|
finishThinkingTurn();
|
|
@@ -1409,6 +1499,7 @@ export function processMessage(msg) {
|
|
|
1409
1499
|
break;
|
|
1410
1500
|
|
|
1411
1501
|
case "error":
|
|
1502
|
+
store.set({ turnActivity: null });
|
|
1412
1503
|
removeMatePreThinking();
|
|
1413
1504
|
setActivity(null);
|
|
1414
1505
|
finishThinkingTurn();
|
|
@@ -1526,6 +1617,10 @@ export function processMessage(msg) {
|
|
|
1526
1617
|
updateRateLimitUsage(msg);
|
|
1527
1618
|
break;
|
|
1528
1619
|
|
|
1620
|
+
case "vendor_usage_overview":
|
|
1621
|
+
handleVendorUsageOverview(msg);
|
|
1622
|
+
break;
|
|
1623
|
+
|
|
1529
1624
|
case "auto_continue_scheduled":
|
|
1530
1625
|
// Scheduler auto-continue, just show info
|
|
1531
1626
|
break;
|
|
@@ -1633,6 +1728,9 @@ export function processMessage(msg) {
|
|
|
1633
1728
|
handleFileAt(msg);
|
|
1634
1729
|
break;
|
|
1635
1730
|
|
|
1731
|
+
case "term_control_projection":
|
|
1732
|
+
handleTerminalProjection(msg);
|
|
1733
|
+
break;
|
|
1636
1734
|
case "term_list":
|
|
1637
1735
|
handleTermList(msg);
|
|
1638
1736
|
updateTerminalList(msg.terminals);
|
|
@@ -1697,6 +1795,7 @@ export function processMessage(msg) {
|
|
|
1697
1795
|
store.set({ pendingTermCommand: null });
|
|
1698
1796
|
// Small delay to let terminal initialize
|
|
1699
1797
|
setTimeout(function() {
|
|
1798
|
+
if (!paneCallbackCurrent(msg.paneActivation)) return;
|
|
1700
1799
|
sendTerminalCommand(cmd);
|
|
1701
1800
|
}, 300);
|
|
1702
1801
|
}
|
|
@@ -1737,6 +1836,10 @@ export function processMessage(msg) {
|
|
|
1737
1836
|
handleNoteUpdated(msg);
|
|
1738
1837
|
break;
|
|
1739
1838
|
|
|
1839
|
+
case "note_update_result":
|
|
1840
|
+
handleNoteUpdateResult(msg);
|
|
1841
|
+
break;
|
|
1842
|
+
|
|
1740
1843
|
case "note_written":
|
|
1741
1844
|
showToast((msg.byTitle || "Agent") + ' left a note: "' + (msg.preview || "") + '"');
|
|
1742
1845
|
handleNoteWritten(msg);
|
|
@@ -1825,12 +1928,14 @@ export function processMessage(msg) {
|
|
|
1825
1928
|
break;
|
|
1826
1929
|
|
|
1827
1930
|
case "set_project_title_result":
|
|
1931
|
+
handleProjectSettingsEditResult(msg);
|
|
1828
1932
|
if (!msg.ok) {
|
|
1829
1933
|
showToast(msg.error || "Failed to rename project", "error");
|
|
1830
1934
|
}
|
|
1831
1935
|
break;
|
|
1832
1936
|
|
|
1833
1937
|
case "set_project_icon_result":
|
|
1938
|
+
handleProjectSettingsEditResult(msg);
|
|
1834
1939
|
if (!msg.ok) {
|
|
1835
1940
|
showToast(msg.error || "Failed to set icon", "error");
|
|
1836
1941
|
}
|
|
@@ -1951,6 +2056,7 @@ export function processMessage(msg) {
|
|
|
1951
2056
|
// Sync dmTargetUser so subsequent renders use fresh data
|
|
1952
2057
|
var mp2 = msg.mate.profile || {};
|
|
1953
2058
|
store.get('dmTargetUser').displayName = mp2.displayName || msg.mate.name || store.get('dmTargetUser').displayName;
|
|
2059
|
+
store.get('dmTargetUser').avatarCatalogId = mp2.avatarCatalogId || '';
|
|
1954
2060
|
store.get('dmTargetUser').avatarStyle = mp2.avatarStyle || store.get('dmTargetUser').avatarStyle;
|
|
1955
2061
|
store.get('dmTargetUser').avatarSeed = mp2.avatarSeed || store.get('dmTargetUser').avatarSeed;
|
|
1956
2062
|
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");
|