clay-server 5.1.1-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-policy.js +21 -0
- package/lib/account-auth-socket.js +30 -0
- package/lib/account-auth-throttle.js +44 -0
- package/lib/account-auth-transport.js +48 -0
- package/lib/account-login-page.js +28 -0
- package/lib/account-passkey-challenges.js +31 -0
- package/lib/account-passkey-page.js +89 -0
- package/lib/account-passkey-policy.js +39 -0
- package/lib/account-password-page.js +69 -0
- package/lib/account-passwords.js +36 -0
- package/lib/account-remembered.js +77 -0
- package/lib/account-session-page.js +51 -0
- package/lib/account-session-store.js +82 -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 +80 -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/migrate-single-user.js +3 -23
- 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-server-settings.js +1 -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-knowledge.js +2 -1
- 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/auth/account-login.css +98 -0
- package/lib/public/auth/account-login.js +104 -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/css/user-settings-sessions.css +42 -0
- package/lib/public/index.html +28 -10
- 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/account-auth-settings.js +71 -0
- package/lib/public/modules/account-transport-settings.js +51 -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 +119 -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/passkey-browser.js +69 -0
- package/lib/public/modules/passkey-server-settings.js +57 -0
- 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 +6 -2
- 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/server-settings-controls.js +10 -0
- package/lib/public/modules/server-settings.js +7 -2
- 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-account.js +14 -1
- 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-sessions.js +120 -0
- package/lib/public/modules/user-settings.js +6 -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/modules/you-activity.js +3 -1
- package/lib/public/modules/you.js +91 -6
- package/lib/public/muse-avatar.svg +4 -0
- package/lib/public/style.css +6 -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-account-passkeys.js +186 -0
- package/lib/server-account-passwords.js +127 -0
- package/lib/server-account-security.js +53 -0
- package/lib/server-admin.js +63 -16
- package/lib/server-appearance-settings.js +13 -1
- package/lib/server-auth.js +107 -79
- 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 +8 -2
- package/lib/server.js +165 -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/user-knowledge-service.js +23 -1
- package/lib/users-auth.js +38 -3
- package/lib/users-contextual-clay-preferences.js +31 -0
- package/lib/users-create.js +97 -0
- package/lib/users-permissions.js +2 -8
- package/lib/users-server-pin.js +37 -0
- package/lib/users.js +18 -84
- 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 +11 -4
package/lib/project.js
CHANGED
|
@@ -46,6 +46,8 @@ var { attachShellCommand } = require("./project-shell-command");
|
|
|
46
46
|
var { attachVendorLogin } = require("./project-vendor-login");
|
|
47
47
|
var { attachConnection } = require("./project-connection");
|
|
48
48
|
var { attachProjectScheduledMessages } = require("./project-scheduled-messages");
|
|
49
|
+
var { attachMateScheduling } = require("./mate-scheduling");
|
|
50
|
+
var { attachMateScheduleLifecycle } = require("./mate-schedule-lifecycle");
|
|
49
51
|
var { attachMcp } = require("./project-mcp");
|
|
50
52
|
var { createSessionSkillCatalog } = require("./yoke/session-skill-catalog");
|
|
51
53
|
var { attachEmail: attachEmailModule } = require("./project-email");
|
|
@@ -229,6 +231,8 @@ function createProjectContext(opts) {
|
|
|
229
231
|
var getScheduleCount = opts.getScheduleCount || function () { return 0; };
|
|
230
232
|
var notifyProcessingChanged = opts.onProcessingChanged || function () {};
|
|
231
233
|
var _scheduledMessages = null;
|
|
234
|
+
var _mateScheduling = null;
|
|
235
|
+
var _mateLifecycle = null;
|
|
232
236
|
var _scheduledTasks = null;
|
|
233
237
|
var _scheduledTaskExecution = null;
|
|
234
238
|
function onProcessingChanged() {
|
|
@@ -348,6 +352,10 @@ function createProjectContext(opts) {
|
|
|
348
352
|
function getRuntimeEnvForSession(session) {
|
|
349
353
|
var linuxUser = (session && session.linuxUser) || getLinuxUserForSession(session);
|
|
350
354
|
var osUserInfo = getOsUserInfoForLinuxUser(linuxUser);
|
|
355
|
+
return resolveOwnerRuntimeEnv(osUserInfo);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function resolveOwnerRuntimeEnv(osUserInfo) {
|
|
351
359
|
var baseEnv = osUserInfo ? buildUserEnv(osUserInfo) : process.env;
|
|
352
360
|
var shared = typeof opts.onGetSharedEnv === "function" ? opts.onGetSharedEnv() : null;
|
|
353
361
|
var projectEnv = typeof opts.onGetProjectEnv === "function" ? opts.onGetProjectEnv(slug) : null;
|
|
@@ -451,7 +459,8 @@ function createProjectContext(opts) {
|
|
|
451
459
|
if (obj.type === "loop_registry_updated") payload.records = getHubSchedules(userId);
|
|
452
460
|
else payload.schedules = getHubSchedules(userId);
|
|
453
461
|
}
|
|
454
|
-
|
|
462
|
+
payload = require('./pane-session-transport').outbound(ws, payload);
|
|
463
|
+
if (payload) ws.send(JSON.stringify(payload));
|
|
455
464
|
}
|
|
456
465
|
|
|
457
466
|
function sendToAdmins(obj) {
|
|
@@ -543,24 +552,27 @@ function createProjectContext(opts) {
|
|
|
543
552
|
|| !!(ws._clayUser && ws._clayUser.id === session.userKnowledgeOwnerId);
|
|
544
553
|
}
|
|
545
554
|
|
|
546
|
-
function sendToSession(sessionId, obj) {
|
|
547
|
-
var data = JSON.stringify(obj);
|
|
555
|
+
function sendToSession(sessionId, obj, onSent) {
|
|
556
|
+
var data = JSON.stringify(obj), delivered = 0;
|
|
548
557
|
for (var ws of clients) {
|
|
549
558
|
if (ws.readyState === 1 && canReceiveMate(ws) && canReceiveYou(ws, sessionId) && ws._clayActiveSession === sessionId) {
|
|
550
|
-
|
|
559
|
+
var panePayload = require('./pane-session-transport').outbound(ws, obj, sessionId);
|
|
560
|
+
if (panePayload) { ws.send(JSON.stringify(panePayload)); delivered++; if (onSent) onSent(ws); }
|
|
551
561
|
}
|
|
552
562
|
}
|
|
553
563
|
homeDebateClients.forEach(function (ws) {
|
|
554
564
|
if (ws.readyState !== 1) { homeDebateClients.delete(ws); return; }
|
|
555
|
-
if (canReceiveMate(ws) && canReceiveYou(ws, sessionId) && !clients.has(ws) && ws._clayHomeDebateSlug === slug && ws._clayActiveSession === sessionId) ws.send(data);
|
|
565
|
+
if (canReceiveMate(ws) && canReceiveYou(ws, sessionId) && !clients.has(ws) && ws._clayHomeDebateSlug === slug && ws._clayActiveSession === sessionId) { ws.send(data); delivered++; if (onSent) onSent(ws); }
|
|
556
566
|
});
|
|
567
|
+
return delivered;
|
|
557
568
|
}
|
|
558
569
|
|
|
559
570
|
function sendToSessionOthers(sender, sessionId, obj) {
|
|
560
571
|
var data = JSON.stringify(obj);
|
|
561
572
|
for (var ws of clients) {
|
|
562
573
|
if (ws !== sender && ws.readyState === 1 && canReceiveMate(ws) && canReceiveYou(ws, sessionId) && ws._clayActiveSession === sessionId) {
|
|
563
|
-
|
|
574
|
+
var panePayload = require('./pane-session-transport').outbound(ws, obj, sessionId);
|
|
575
|
+
if (panePayload) ws.send(JSON.stringify(panePayload));
|
|
564
576
|
}
|
|
565
577
|
}
|
|
566
578
|
}
|
|
@@ -646,7 +658,8 @@ function createProjectContext(opts) {
|
|
|
646
658
|
var access = opts.getProjectAccess ? opts.getProjectAccess() : { visibility: "public", ownerId: projectOwnerId || null };
|
|
647
659
|
if (!viewer || (opts.canAccessProjectSlug && !opts.canAccessProjectSlug(viewer.id, slug)) || !usersModule.canAccessSession(viewer.id, session, access)) return;
|
|
648
660
|
}
|
|
649
|
-
ws.
|
|
661
|
+
var panePayload = ws._clayPaneActivation ? require('./pane-session-transport').outbound(ws, message, session.localId) : message;
|
|
662
|
+
if (panePayload) ws.send(panePayload === message ? data : JSON.stringify(panePayload));
|
|
650
663
|
});
|
|
651
664
|
},
|
|
652
665
|
authorize: function (session, actor) {
|
|
@@ -709,7 +722,22 @@ function createProjectContext(opts) {
|
|
|
709
722
|
|
|
710
723
|
// Personal computer tools use the extension; remote URLs are owner-bound.
|
|
711
724
|
var _mcp = attachMcp({
|
|
712
|
-
sendTo: sendTo, slug: slug, clients: clients,
|
|
725
|
+
sendTo: sendTo, slug: slug, clients: clients, cwd: cwd,
|
|
726
|
+
userInput: function (session) { return _askUser.createHandler(session); },
|
|
727
|
+
runtimeEnvForSession: getRuntimeEnvForSession,
|
|
728
|
+
canDiscoverSession: function (session) { var scope = _requestAccess.fileScope({ _clayUser: session.ownerId && usersModule.findUserById(session.ownerId) }); return !!scope.identity || !scope.projectBound; },
|
|
729
|
+
sessionVendor: function (session) { return session.vendor || sm.defaultVendor || "claude"; },
|
|
730
|
+
runtimeEnv: function (owner, ws) { return resolveOwnerRuntimeEnv(_requestAccess.fileScope(ws).identity); },
|
|
731
|
+
canDiscover: function (ws) { var scope = _requestAccess.fileScope(ws); return !!scope.identity || !scope.projectBound; },
|
|
732
|
+
ownerIdentity: function (owner) {
|
|
733
|
+
if (!osUsers) {
|
|
734
|
+
if (usersModule.isMultiUser() && (usersModule.getAllUsers().length !== 1 || !usersModule.findUserById(owner))) throw new Error('Local MCP requires OS user mapping in a shared installation.');
|
|
735
|
+
return null;
|
|
736
|
+
}
|
|
737
|
+
var user = usersModule.findUserById(owner);
|
|
738
|
+
if (!user || !user.linuxUser) throw new Error('OS user identity is unavailable.');
|
|
739
|
+
return getOsUserInfoForWs({ _clayUser: user });
|
|
740
|
+
},
|
|
713
741
|
root: require("./config").CONFIG_DIR,
|
|
714
742
|
isMultiUser: function () { return usersModule.isMultiUser(); },
|
|
715
743
|
canAccess: function (ws) { return _requestAccess.canAccessProject(ws, slug); },
|
|
@@ -768,8 +796,15 @@ function createProjectContext(opts) {
|
|
|
768
796
|
}
|
|
769
797
|
},
|
|
770
798
|
});
|
|
799
|
+
var _studioPresentation = require('./project-studio-presentation').attachStudioPresentation({
|
|
800
|
+
getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
|
|
801
|
+
getSessionForWs: getSessionForWs,
|
|
802
|
+
});
|
|
771
803
|
var _sharedBrowser = attachSharedBrowser({
|
|
772
|
-
|
|
804
|
+
studioPresentation: _studioPresentation,
|
|
805
|
+
sendToSession: sendToSession,
|
|
806
|
+
getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
|
|
807
|
+
slug: slug, isMate: isMate, ownerId: projectOwnerId, sm: sm, clients: clients, sendTo: sendTo,
|
|
773
808
|
usersModule: usersModule, requestAccess: _requestAccess, osUsers: osUsers,
|
|
774
809
|
getSessionForWs: getSessionForWs,
|
|
775
810
|
getIdentity: function (session) {
|
|
@@ -778,8 +813,11 @@ function createProjectContext(opts) {
|
|
|
778
813
|
},
|
|
779
814
|
});
|
|
780
815
|
var _sessionDocument = attachSessionDocument({
|
|
816
|
+
studioPresentation: _studioPresentation,
|
|
817
|
+
getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
|
|
781
818
|
cwd: cwd,
|
|
782
819
|
isMate: isMate,
|
|
820
|
+
canUseSession: _sessionNotes.canUseSession,
|
|
783
821
|
sendToSession: sendToSession,
|
|
784
822
|
FS_MAX_SIZE: FS_MAX_SIZE,
|
|
785
823
|
getOsUserInfoForSession: function (session) {
|
|
@@ -799,6 +837,8 @@ function createProjectContext(opts) {
|
|
|
799
837
|
});
|
|
800
838
|
var _workspaceQuery = attachProjectWorkspaceQuery({
|
|
801
839
|
service: opts.workspaceQueryService || null,
|
|
840
|
+
controlService: opts.clayProductControl || null,
|
|
841
|
+
contextService: opts.mateContextService || null,
|
|
802
842
|
sm: sm,
|
|
803
843
|
projectSlug: slug,
|
|
804
844
|
getProjectOwnerId: function () { return projectOwnerId; },
|
|
@@ -839,7 +879,12 @@ function createProjectContext(opts) {
|
|
|
839
879
|
sendTo: sendTo, getClients: function () { return clients; }, startWork: _issueWork,
|
|
840
880
|
});
|
|
841
881
|
var _sessionGithub = require("./project-session-github").attachSessionGithub({
|
|
842
|
-
cwd: cwd, sm: sm, isMate: isMate, osUsers: osUsers,
|
|
882
|
+
cwd: cwd, sm: sm, isMate: isMate, osUsers: osUsers, projectSlug: slug, sendTo: sendTo,
|
|
883
|
+
userInput: function (session) { return _askUser.createHandler(session); },
|
|
884
|
+
canAccess: function (ws) {
|
|
885
|
+
return !isMate && clients.has(ws) && ws.readyState === 1 && (!usersModule.isMultiUser() ||
|
|
886
|
+
!!(ws._clayUser && usersModule.findUserById(ws._clayUser.id) && opts.canAccessProjectSlug(ws._clayUser.id, slug)));
|
|
887
|
+
},
|
|
843
888
|
canUse: function (session) {
|
|
844
889
|
if (session.hidden || session.delegated || session._pairDelegation || session._delegatedBy || require("./session-provenance").isWorker(session)) return false;
|
|
845
890
|
if (!usersModule.isMultiUser()) return true;
|
|
@@ -858,9 +903,10 @@ function createProjectContext(opts) {
|
|
|
858
903
|
});
|
|
859
904
|
var _sessionLinear = require("./project-session-linear").attachSessionLinear({
|
|
860
905
|
sm: sm, isMate: isMate, storage: opts.linearStorage, projectSlug: slug,
|
|
906
|
+
userInput: function (session) { return _askUser.createHandler(session); },
|
|
861
907
|
isMultiUser: usersModule.isMultiUser, sendTo: sendTo,
|
|
862
908
|
canAccess: function (ws) {
|
|
863
|
-
return
|
|
909
|
+
return clients.has(ws) && ws.readyState === 1 && (!usersModule.isMultiUser() ||
|
|
864
910
|
!!(ws._clayUser && usersModule.findUserById(ws._clayUser.id) && opts.canAccessProjectSlug(ws._clayUser.id, slug)));
|
|
865
911
|
},
|
|
866
912
|
startWork: require('./project-linear-launch').attachLinearLaunch({
|
|
@@ -1021,6 +1067,7 @@ function createProjectContext(opts) {
|
|
|
1021
1067
|
persistSession: function (session) { return sm.saveSessionFile(session); },
|
|
1022
1068
|
getVendorModelCatalog: function (ws, vendor) { return _models.getVendorCatalog(ws, vendor); },
|
|
1023
1069
|
createReadyMate: opts.createReadyMate,
|
|
1070
|
+
isLive: function (session) { return sm.sessions.get(session.localId) === session; },
|
|
1024
1071
|
});
|
|
1025
1072
|
var _askUser = attachAskUser({
|
|
1026
1073
|
record: function (session, event) { sm.sendAndRecord(session, event); },
|
|
@@ -1055,14 +1102,12 @@ function createProjectContext(opts) {
|
|
|
1055
1102
|
}
|
|
1056
1103
|
}
|
|
1057
1104
|
|
|
1058
|
-
// Shared sticky-note memory
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
console.error("[project] Failed to create session notes MCP server:", e.message);
|
|
1065
|
-
}
|
|
1105
|
+
// Shared sticky-note memory is available in both owner-private projects and Mates.
|
|
1106
|
+
try {
|
|
1107
|
+
var sessionNotesMcpConfig = _sessionNotes.createMcpServer(adapter);
|
|
1108
|
+
if (sessionNotesMcpConfig) servers[sessionNotesMcpConfig.name || "clay-notes"] = sessionNotesMcpConfig;
|
|
1109
|
+
} catch (e) {
|
|
1110
|
+
console.error("[project] Failed to create session notes MCP server:", e.message);
|
|
1066
1111
|
}
|
|
1067
1112
|
|
|
1068
1113
|
// Project Logs. Project sessions get the project-scoped set; Mate projects
|
|
@@ -1107,13 +1152,11 @@ function createProjectContext(opts) {
|
|
|
1107
1152
|
if (sharedBrowserConfig) servers["clay-shared-browser"] = sharedBrowserConfig;
|
|
1108
1153
|
|
|
1109
1154
|
// Explicit agent signal for user-requested Markdown presentation.
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
console.error("[project] Failed to create session document MCP server:", e.message);
|
|
1116
|
-
}
|
|
1155
|
+
try {
|
|
1156
|
+
var sessionDocumentMcpConfig = _sessionDocument.createMcpServer(adapter);
|
|
1157
|
+
if (sessionDocumentMcpConfig) servers[sessionDocumentMcpConfig.name || "clay-documents"] = sessionDocumentMcpConfig;
|
|
1158
|
+
} catch (e) {
|
|
1159
|
+
console.error("[project] Failed to create session document MCP server:", e.message);
|
|
1117
1160
|
}
|
|
1118
1161
|
|
|
1119
1162
|
// Debate MCP server (available to both mates and main project)
|
|
@@ -1383,6 +1426,7 @@ function createProjectContext(opts) {
|
|
|
1383
1426
|
|
|
1384
1427
|
// --- SDK bridge ---
|
|
1385
1428
|
sdk = createSDKBridge({
|
|
1429
|
+
isLifecycleExecutionPaused: function () { return !!(opts.getProjectAccess && opts.getProjectAccess().lifecycleExecutionPaused); },
|
|
1386
1430
|
cwd: cwd,
|
|
1387
1431
|
slug: slug,
|
|
1388
1432
|
sessionManager: sm,
|
|
@@ -1458,6 +1502,7 @@ function createProjectContext(opts) {
|
|
|
1458
1502
|
_sessionGithub.getSystemPrompt(session),
|
|
1459
1503
|
_sessionLinear.getSystemPrompt(session),
|
|
1460
1504
|
_scheduledTasks ? _scheduledTasks.getSystemPrompt(session) : "",
|
|
1505
|
+
_mateScheduling ? _mateScheduling.getSystemPrompt(session) : "",
|
|
1461
1506
|
_mateKnowledge.getSystemPrompt(session),
|
|
1462
1507
|
_userKnowledge.getSystemPrompt(session),
|
|
1463
1508
|
_autonomousRun ? _autonomousRun.getSystemPrompt(session) : "",
|
|
@@ -1487,6 +1532,7 @@ function createProjectContext(opts) {
|
|
|
1487
1532
|
.concat(opts.userKnowledgeService ? _userKnowledge.getDynamicToolDefs(session) : [])
|
|
1488
1533
|
.concat(_loopInterview ? _loopInterview.getToolDefs(session) : [])
|
|
1489
1534
|
.concat(_scheduledTasks ? _scheduledTasks.getToolDefs(session) : [])
|
|
1535
|
+
.concat(_mateScheduling ? _mateScheduling.getToolDefs(session) : [])
|
|
1490
1536
|
.concat(_scheduledTaskExecution ? _scheduledTaskExecution.getToolDefs(session) : [])
|
|
1491
1537
|
.concat(_autonomousRun ? _autonomousRun.getToolDefs(session) : []);
|
|
1492
1538
|
},
|
|
@@ -1542,6 +1588,8 @@ function createProjectContext(opts) {
|
|
|
1542
1588
|
|
|
1543
1589
|
_scheduledMessages = attachProjectScheduledMessages({
|
|
1544
1590
|
scheduler: opts.durableScheduler,
|
|
1591
|
+
mateLifecycle: function () { return _mateLifecycle; },
|
|
1592
|
+
deferRehydrate: isMate,
|
|
1545
1593
|
slug: slug,
|
|
1546
1594
|
isMate: isMate,
|
|
1547
1595
|
osUsers: osUsers,
|
|
@@ -1564,6 +1612,32 @@ function createProjectContext(opts) {
|
|
|
1564
1612
|
consumePendingMessage: function (session) { return _userMessage && _userMessage.consumePendingMessage(session); },
|
|
1565
1613
|
});
|
|
1566
1614
|
|
|
1615
|
+
var _schedulingAccess = require('./project-scheduling-access').attachSchedulingAccess({ osUsers: osUsers, getLinuxUser: getLinuxUserForSession, resolveLinuxUser: getOsUserInfoForLinuxUser });
|
|
1616
|
+
_mateLifecycle = attachMateScheduleLifecycle({
|
|
1617
|
+
sm: sm, scheduler: opts.durableScheduler, slug: slug,
|
|
1618
|
+
owner: function (session) { return _mateScheduling.owner(session); },
|
|
1619
|
+
authorize: function (session, control) { return control ? _mateScheduling.authorizeControl(session, control) : _mateScheduling.authorize(session); },
|
|
1620
|
+
authorizeRuntime: function (session) { return _mateScheduling.authorizeLifecycle(session); },
|
|
1621
|
+
schedule: function () { return _scheduledMessages.schedule.apply(null, arguments); },
|
|
1622
|
+
queueItem: function (session, job) { return _scheduledMessages.queueItem(session, job); },
|
|
1623
|
+
cancelJob: function (session, job) {
|
|
1624
|
+
return _scheduledMessages.cancel(session, { id: job.ownerId }, null, "cancelled_by_mate", { jobId: job.id, revision: job.payload.revision });
|
|
1625
|
+
},
|
|
1626
|
+
});
|
|
1627
|
+
_mateScheduling = attachMateScheduling({
|
|
1628
|
+
isMate: isMate, isHostAgent: isHostAgent, projectOwnerId: projectOwnerId, slug: slug, mateId: opts.mateId,
|
|
1629
|
+
sm: sm, users: usersModule, lifecycle: _mateLifecycle,
|
|
1630
|
+
authorizeAccess: function (session, ownerId) { _schedulingAccess.ownerIdentity(session); return _scheduledMessages.authorize(session, ownerId); },
|
|
1631
|
+
userInput: function (session) { return _askUser.createHandler(session); },
|
|
1632
|
+
});
|
|
1633
|
+
if (isMate) {
|
|
1634
|
+
sm.sessions.forEach(function (session) {
|
|
1635
|
+
try { _mateLifecycle.reconcile(session); }
|
|
1636
|
+
catch (error) { console.error("[mate-schedules] Recovery failed:", error.message); }
|
|
1637
|
+
});
|
|
1638
|
+
_scheduledMessages.rehydrate();
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1567
1641
|
// --- Loop engine (delegated to project-loop.js) ---
|
|
1568
1642
|
// --- Notification center (global singleton from server.js) ---
|
|
1569
1643
|
var _notifications = opts.notificationsModule || null;
|
|
@@ -1645,6 +1719,7 @@ function createProjectContext(opts) {
|
|
|
1645
1719
|
cwd: cwd,
|
|
1646
1720
|
projectSlug: slug,
|
|
1647
1721
|
projectTitle: title || project,
|
|
1722
|
+
validateOwnerIdentity: _schedulingAccess.ownerIdentity,
|
|
1648
1723
|
isMate: isMate,
|
|
1649
1724
|
sm: sm,
|
|
1650
1725
|
sdk: sdk,
|
|
@@ -1743,8 +1818,8 @@ function createProjectContext(opts) {
|
|
|
1743
1818
|
}
|
|
1744
1819
|
|
|
1745
1820
|
// --- Schedule / cancel a message (used by WS handler and auto-continue) ---
|
|
1746
|
-
function scheduleMessage(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId) {
|
|
1747
|
-
return _scheduledMessages ? _scheduledMessages.schedule(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId) : null;
|
|
1821
|
+
function scheduleMessage(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId, options) {
|
|
1822
|
+
return _scheduledMessages ? _scheduledMessages.schedule(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId, options) : null;
|
|
1748
1823
|
}
|
|
1749
1824
|
|
|
1750
1825
|
function cancelScheduledMessage(session, actorUser, targetWs, correlation) {
|
|
@@ -1756,6 +1831,10 @@ function createProjectContext(opts) {
|
|
|
1756
1831
|
}
|
|
1757
1832
|
|
|
1758
1833
|
function handleMessage(ws, msg) {
|
|
1834
|
+
return require('./pane-session-transport').run(ws, msg, dispatchMessage);
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
function dispatchMessage(ws, msg) {
|
|
1759
1838
|
if (!_requestAccess.permitMessage(ws, msg)) return;
|
|
1760
1839
|
// --- Keep-alive (delegated to project-connection.js) ---
|
|
1761
1840
|
// Answered before any routing so a ping can never be forwarded elsewhere.
|
|
@@ -1777,8 +1856,10 @@ function createProjectContext(opts) {
|
|
|
1777
1856
|
}
|
|
1778
1857
|
}
|
|
1779
1858
|
|
|
1859
|
+
if (_studioPresentation.handleMessage(ws, msg)) return;
|
|
1860
|
+
|
|
1780
1861
|
// --- DM messages (delegated to server-level handler) ---
|
|
1781
|
-
if (msg.type === "home_debate_question_response" || msg.type === "home_debate_control" || msg.type === "home_mate_creation_question_response" || msg.type === "default_ai_get" || msg.type === "default_ai_catalog_get" || msg.type === "default_ai_set" || msg.type === "default_vendor_get" || msg.type === "default_vendor_set" || msg.type === "context_view_get" || msg.type === "context_view_set" || msg.type === "cursor_sharing_get" || msg.type === "cursor_sharing_set") {
|
|
1862
|
+
if (msg.type === "home_mate_question_response" || msg.type === "mate_context_prepare" || msg.type === "clay_ui_ready" || msg.type === "clay_navigation_claim" || msg.type === "clay_navigation_ack" || msg.type === "clay_navigation_rendered" || msg.type === "home_debate_question_response" || msg.type === "home_debate_control" || msg.type === "home_mate_creation_question_response" || msg.type === "default_ai_get" || msg.type === "default_ai_catalog_get" || msg.type === "default_ai_set" || msg.type === "default_vendor_get" || msg.type === "default_vendor_set" || msg.type === "context_view_get" || msg.type === "context_view_set" || msg.type === "cursor_sharing_get" || msg.type === "cursor_sharing_set") {
|
|
1782
1863
|
if (typeof opts.onDmMessage === "function") opts.onDmMessage(ws, msg, slug);
|
|
1783
1864
|
return;
|
|
1784
1865
|
}
|
|
@@ -2074,6 +2155,9 @@ function createProjectContext(opts) {
|
|
|
2074
2155
|
});
|
|
2075
2156
|
sm.setSessionHydrator(_sessionSkillCatalog.hydrate);
|
|
2076
2157
|
var _sessions = attachSessions({
|
|
2158
|
+
splitStore: _splitGroups.store,
|
|
2159
|
+
adapters: adapters,
|
|
2160
|
+
isPendingQueuePaused: function (session) { return _pendingMessageQueue.isPaused(session); },
|
|
2077
2161
|
cwd: cwd,
|
|
2078
2162
|
slug: slug,
|
|
2079
2163
|
isMate: isMate,
|
|
@@ -2147,6 +2231,26 @@ function createProjectContext(opts) {
|
|
|
2147
2231
|
_notifications: _notifications,
|
|
2148
2232
|
_projectLogs: _projectLogs,
|
|
2149
2233
|
});
|
|
2234
|
+
var _productControl = require("./project-product-control").attachProjectProductControl({
|
|
2235
|
+
sm: sm, users: usersModule, clients: clients, slug: slug, isMate: isMate, osUsers: osUsers,
|
|
2236
|
+
getProjectAccess: opts.getProjectAccess || function () { return { visibility: "public", ownerId: projectOwnerId || null }; },
|
|
2237
|
+
userInput: function (session) { return _askUser.createHandler(session); },
|
|
2238
|
+
actions: _sessions.sessionActions, history: _sessions.sessionHistoryActions, selectModel: function (session, model, options) { return _models.selectSessionModel(session, model, null, options); },
|
|
2239
|
+
isDriverOperatedSession: function (session) { return _sessionPair.workerPermission.isDriverOperated(session); },
|
|
2240
|
+
deletePlan: _sessions.deleteProductControlPlan,
|
|
2241
|
+
queue: _pendingMessageQueue,
|
|
2242
|
+
requestQueueDrain: function (session) { if (_userMessage) _userMessage.consumePendingMessage(session); },
|
|
2243
|
+
vendor: _sessions.sessionVendorActions,
|
|
2244
|
+
runtime: _sessions.sessionRuntimeActions,
|
|
2245
|
+
});
|
|
2246
|
+
var _mateChatControl = require('./project-mate-chat-control').attachMateChatControl({
|
|
2247
|
+
sm: sm, sdk: sdk, isMate: isMate, osUsers: osUsers, getLinuxUser: getLinuxUserForSession,
|
|
2248
|
+
users: usersModule, getAccess: opts.getProjectAccess || function () { return { isMate: isMate, ownerId: projectOwnerId || null, visibility: 'private' }; },
|
|
2249
|
+
actions: _sessions.sessionActions, vendor: _sessions.sessionVendorActions,
|
|
2250
|
+
selectModel: function (session, model, options) { return _models.selectSessionModel(session, model, null, options); },
|
|
2251
|
+
});
|
|
2252
|
+
|
|
2253
|
+
|
|
2150
2254
|
|
|
2151
2255
|
var _models = attachModels({
|
|
2152
2256
|
cwd: cwd,
|
|
@@ -2193,6 +2297,7 @@ function createProjectContext(opts) {
|
|
|
2193
2297
|
});
|
|
2194
2298
|
var _delegatedFollowUp = attachDelegatedFollowUp({
|
|
2195
2299
|
sm: sm,
|
|
2300
|
+
isPendingQueuePaused: function (session) { return _pendingMessageQueue.isPaused(session); },
|
|
2196
2301
|
getSdk: function () { return sdk; },
|
|
2197
2302
|
getLinuxUserForSession: getLinuxUserForSession,
|
|
2198
2303
|
onProcessingChanged: onProcessingChanged,
|
|
@@ -2207,6 +2312,12 @@ function createProjectContext(opts) {
|
|
|
2207
2312
|
|
|
2208
2313
|
// --- User message handler (delegated to project-user-message.js) ---
|
|
2209
2314
|
var _userMessage = attachUserMessage({
|
|
2315
|
+
isLifecycleExecutionPaused: function () { return !!(opts.getProjectAccess && opts.getProjectAccess().lifecycleExecutionPaused); },
|
|
2316
|
+
resumeLifecycleProject: function (ws) {
|
|
2317
|
+
if (!opts.getProjectAccess || !opts.getProjectAccess().lifecycleExecutionPaused) return true;
|
|
2318
|
+
if (!clients.has(ws) || !ws._clayUser || !opts.resumeLifecycleProject) throw new Error('The current owner must explicitly resume recovered project execution.');
|
|
2319
|
+
return opts.resumeLifecycleProject(ws._clayUser.id);
|
|
2320
|
+
},
|
|
2210
2321
|
// Exact live pair state decides whether a session is Driver-operated; the
|
|
2211
2322
|
// handler never infers the role from the message.
|
|
2212
2323
|
isDriverOperatedSession: function (session) {
|
|
@@ -2234,6 +2345,7 @@ function createProjectContext(opts) {
|
|
|
2234
2345
|
cwd: cwd,
|
|
2235
2346
|
slug: slug,
|
|
2236
2347
|
isMate: isMate,
|
|
2348
|
+
mateId: mateId,
|
|
2237
2349
|
osUsers: osUsers,
|
|
2238
2350
|
sm: sm,
|
|
2239
2351
|
sdk: sdk,
|
|
@@ -2329,6 +2441,13 @@ function createProjectContext(opts) {
|
|
|
2329
2441
|
FS_MAX_SIZE: FS_VIEWER_MAX_SIZE,
|
|
2330
2442
|
});
|
|
2331
2443
|
|
|
2444
|
+
var _workspaceOperations = require('./project-workspace-operations').attachWorkspaceOperations({
|
|
2445
|
+
cwd: cwd, isMate: isMate, osUsers: osUsers, users: usersModule, tm: tm,
|
|
2446
|
+
getAccess: opts.getProjectAccess || function () { return { ownerId: projectOwnerId || null, visibility: 'private' }; },
|
|
2447
|
+
files: function () { return _filesystem.productOperations; },
|
|
2448
|
+
publishTerminals: function () { send({ type: 'term_list', terminals: tm.list(true) }); },
|
|
2449
|
+
});
|
|
2450
|
+
|
|
2332
2451
|
// --- MCP bridge handler for Codex and session-bound Kiro tools ---
|
|
2333
2452
|
// Provides list_tools and call_tool operations over HTTP for mcp-bridge-server.js.
|
|
2334
2453
|
// The normal Codex bridge excludes local MCP servers it manages natively;
|
|
@@ -2336,6 +2455,8 @@ function createProjectContext(opts) {
|
|
|
2336
2455
|
function getMcpBridgeHandler(sessionId, sessionOnly, queryGeneration) {
|
|
2337
2456
|
var boundSession = Number.isInteger(sessionId) ? sm.sessions.get(sessionId) : null;
|
|
2338
2457
|
var queryToolBridge = createSessionQueryToolBridge({ session: boundSession, sdk: sdk });
|
|
2458
|
+
var externalQueryBridge = require('./mcp-query-bridge').createQueryBridge({ valid: sessionQueryValid,
|
|
2459
|
+
getServers: function () { return _mcp.getMcpServers(boundSession, sessionQueryValid()); } });
|
|
2339
2460
|
function sessionQueryValid() {
|
|
2340
2461
|
return !!boundSession
|
|
2341
2462
|
&& Number.isInteger(queryGeneration)
|
|
@@ -2460,7 +2581,7 @@ function createProjectContext(opts) {
|
|
|
2460
2581
|
}
|
|
2461
2582
|
}
|
|
2462
2583
|
|
|
2463
|
-
if (sessionOnly) return Promise.resolve(tools);
|
|
2584
|
+
if (sessionOnly) return Promise.resolve(tools.concat(externalQueryBridge.list()));
|
|
2464
2585
|
|
|
2465
2586
|
// In-app MCP servers (debate, browser, email).
|
|
2466
2587
|
// Use getLocalMcpServers() so clay-browser is hidden unless the
|
|
@@ -2480,7 +2601,7 @@ function createProjectContext(opts) {
|
|
|
2480
2601
|
}
|
|
2481
2602
|
|
|
2482
2603
|
// Personal computer and remote URL connections.
|
|
2483
|
-
var remoteServers = _mcp.getMcpServers(boundSession);
|
|
2604
|
+
var remoteServers = sessionQueryValid() ? _mcp.getMcpServers(boundSession, sessionQueryValid()) : {};
|
|
2484
2605
|
if (remoteServers) {
|
|
2485
2606
|
var remoteNames = Object.keys(remoteServers);
|
|
2486
2607
|
for (var ri = 0; ri < remoteNames.length; ri++) {
|
|
@@ -2578,7 +2699,7 @@ function createProjectContext(opts) {
|
|
|
2578
2699
|
if (serverName === "clay-sessions" || serverName === "clay-notes" || serverName === "clay-handoff" || serverName === "clay-documents" || serverName === "clay-shared-browser" || serverName === "clay-debate" || serverName === "clay-mate-creation" || serverName === "clay-workspace" || serverName === "clay-history" || serverName === "clay-github" || serverName === "clay-linear" || serverName === "clay-issues" || serverName === "clay-logs" || serverName === "clay-knowledge" || serverName === "clay-you") {
|
|
2579
2700
|
return Promise.reject(new Error("Session-bound tool requires a valid Clay session: " + serverName + "/" + toolName));
|
|
2580
2701
|
}
|
|
2581
|
-
if (sessionOnly) return
|
|
2702
|
+
if (sessionOnly) return externalQueryBridge.call(serverName, toolName, args);
|
|
2582
2703
|
// Try in-app servers first (gated by extension connectivity for clay-browser).
|
|
2583
2704
|
var localMcp = getLocalMcpServers(boundSession);
|
|
2584
2705
|
if (localMcp && localMcp[serverName]) {
|
|
@@ -2590,17 +2711,7 @@ function createProjectContext(opts) {
|
|
|
2590
2711
|
}
|
|
2591
2712
|
}
|
|
2592
2713
|
}
|
|
2593
|
-
|
|
2594
|
-
var remoteServers = _mcp.getMcpServers(boundSession);
|
|
2595
|
-
if (remoteServers && remoteServers[serverName]) {
|
|
2596
|
-
var rServer = remoteServers[serverName];
|
|
2597
|
-
if (rServer.instance && rServer.instance._registeredTools && rServer.instance._registeredTools[toolName]) {
|
|
2598
|
-
var rHandler = rServer.instance._registeredTools[toolName].handler;
|
|
2599
|
-
if (typeof rHandler === "function") {
|
|
2600
|
-
return Promise.resolve(rHandler(args));
|
|
2601
|
-
}
|
|
2602
|
-
}
|
|
2603
|
-
}
|
|
2714
|
+
if (externalQueryBridge.list().some(function (tool) { return tool.server === serverName && tool.name === toolName; })) return externalQueryBridge.call(serverName, toolName, args);
|
|
2604
2715
|
return Promise.reject(new Error("Tool not found: " + serverName + "/" + toolName));
|
|
2605
2716
|
},
|
|
2606
2717
|
};
|
|
@@ -2608,6 +2719,8 @@ function createProjectContext(opts) {
|
|
|
2608
2719
|
|
|
2609
2720
|
// --- HTTP handler (delegated to project-http.js) ---
|
|
2610
2721
|
var _http = attachHTTP({
|
|
2722
|
+
workspaceOperations: _workspaceOperations,
|
|
2723
|
+
getProjectOwnerId: function () { return projectOwnerId; },
|
|
2611
2724
|
requestAccess: _requestAccess,
|
|
2612
2725
|
cwd: cwd,
|
|
2613
2726
|
slug: slug,
|
|
@@ -2766,6 +2879,7 @@ function createProjectContext(opts) {
|
|
|
2766
2879
|
return false;
|
|
2767
2880
|
}));
|
|
2768
2881
|
} catch (err) {
|
|
2882
|
+
shutdowns.push(Promise.resolve(false));
|
|
2769
2883
|
console.error("[project] " + vendor + " shutdown threw for " + slug + ":", err && err.message ? err.message : err);
|
|
2770
2884
|
}
|
|
2771
2885
|
});
|
|
@@ -2788,6 +2902,7 @@ function createProjectContext(opts) {
|
|
|
2788
2902
|
}
|
|
2789
2903
|
});
|
|
2790
2904
|
var status = {
|
|
2905
|
+
controlRuntimeId: require('./clay-control-target-projection').runtime(sm),
|
|
2791
2906
|
slug: slug,
|
|
2792
2907
|
path: cwd,
|
|
2793
2908
|
project: project,
|
|
@@ -2838,7 +2953,7 @@ function createProjectContext(opts) {
|
|
|
2838
2953
|
|
|
2839
2954
|
function setTitle(newTitle) {
|
|
2840
2955
|
title = newTitle || null;
|
|
2841
|
-
send({ type: "info", cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, osUsers: osUsers, lanHost: lanHost, projectCount: getProjectCount(), projects: getProjectList(), projectOwnerId: projectOwnerId, isMate: isMate, mateId: isMate ? mateId : null, mateDisplayName: isMate ? (opts.mateDisplayName || title || project || "Mate") : "" });
|
|
2956
|
+
send({ type: "info", controlRuntimeId: require("./clay-control-target-projection").runtime(sm), cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, osUsers: osUsers, lanHost: lanHost, projectCount: getProjectCount(), projects: getProjectList(), projectOwnerId: projectOwnerId, isMate: isMate, mateId: isMate ? mateId : null, mateDisplayName: isMate ? (opts.mateDisplayName || title || project || "Mate") : "" });
|
|
2842
2957
|
}
|
|
2843
2958
|
|
|
2844
2959
|
function setIcon(newIcon) {
|
|
@@ -2909,15 +3024,32 @@ function createProjectContext(opts) {
|
|
|
2909
3024
|
},
|
|
2910
3025
|
getYouLinuxUser: getLinuxUserForSession,
|
|
2911
3026
|
getStatus: getStatus,
|
|
3027
|
+
bindMateSchedule: function (session, intent, id) {
|
|
3028
|
+
return _mateLifecycle.create(session, require("./mate-schedule-input").normalize(intent), id);
|
|
3029
|
+
},
|
|
3030
|
+
cancelMateSchedule: function (session, record) { return _mateLifecycle.cancel(session, record); },
|
|
2912
3031
|
getSessionManager: function () { return sm; },
|
|
2913
3032
|
createDelegatedSession: _delegatedSession.createDelegatedSession,
|
|
3033
|
+
refreshEnvironmentRuntime: function () { return sdk.refreshEnvironmentRuntime(); },
|
|
3034
|
+
getWorkspaceProductOperations: function () { return isMate ? null : _workspaceOperations; },
|
|
3035
|
+
getMateChatControl: function () { return isMate ? _mateChatControl : null; },
|
|
3036
|
+
getMateScheduleControl: function () { return isMate ? _mateLifecycle : null; },
|
|
3037
|
+
getScheduledTaskControl: function () { return _scheduledTasks.productControl; },
|
|
3038
|
+
notifyIssueUpdate: _issues.notify,
|
|
3039
|
+
notifyLogUpdate: _projectLogs.broadcastUpdate,
|
|
3040
|
+
requestProductControlReview: _productControl.requestProductControlReview,
|
|
3041
|
+
applyProductSessionAction: _productControl.applyProductSessionAction,
|
|
3042
|
+
inspectProductSessionQueue: _productControl.inspectProductSessionQueue,
|
|
3043
|
+
inspectProductSessionRuntime: _sessions.sessionRuntimeActions.inspect,
|
|
3044
|
+
inspectMateLifecycleRuntime: _sessions.sessionRuntimeActions.inspectLifecycle,
|
|
2914
3045
|
inspectDelegatedFollowUp: _delegatedFollowUp.inspectDelegatedFollowUp,
|
|
2915
3046
|
dispatchDelegatedFollowUp: _delegatedFollowUp.dispatchDelegatedFollowUp,
|
|
2916
3047
|
deliverCapsuleTurn: _capsuleTurn.deliverCapsuleTurn,
|
|
2917
3048
|
unregisterHomeDebateClient: function (ws) { homeDebateClients.delete(ws); },
|
|
2918
3049
|
handleHomeDebateProposalResponse: function (ws, msg, session) { return _debateProposal.handleHomeMessage(ws, msg, session); },
|
|
2919
3050
|
handleHomeMateCreationProposalResponse: function (ws, msg, session) { return _mateCreationProposal.handleHomeMessage(ws, msg, session); },
|
|
2920
|
-
|
|
3051
|
+
registerMcpConsentViewer: _mcp.registerConsentViewer,
|
|
3052
|
+
handleHomeAskUserResponse: function (msg, session, ws) { return _sessions.respondToAskUser(session, msg, ws); },
|
|
2921
3053
|
handleHomePermissionResponse: function (ws, msg, session) { return _sessions.respondToHomePermission(ws, msg, session); },
|
|
2922
3054
|
stopHomeSession: function (session) { return _sessions.stopHomeSession(session); },
|
|
2923
3055
|
handleHomeDebateControl: function (ws, msg, session) { return _debate.handleHomeControl(ws, msg, session); },
|
|
@@ -2926,6 +3058,7 @@ function createProjectContext(opts) {
|
|
|
2926
3058
|
getMemoryState: _memory.readMemoryState,
|
|
2927
3059
|
listKnowledgeFiles: _knowledge.listKnowledgeFiles,
|
|
2928
3060
|
getKnowledgeDbService: function () { return _knowledge.databases; },
|
|
3061
|
+
getKnowledgeProductOperations: function () { return _knowledge.productOperations; },
|
|
2929
3062
|
refreshCapsuleCatalog: _capsuleCatalog.refreshSessions,
|
|
2930
3063
|
getNotificationsModule: function () { return _notifications; },
|
|
2931
3064
|
refreshVendorAuth: _vendorLogin.refreshVendorAuth,
|
package/lib/public/app.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { initStudioBridge } from './modules/clay-studio-bridge.js';
|
|
1
2
|
import { initSharedBrowser } from './modules/shared-browser.js';
|
|
2
3
|
import { initGenerationStop } from './modules/generation-stop.js';
|
|
3
4
|
import { initIssueLinks } from './modules/clay-issue-links.js';
|
|
@@ -34,6 +35,7 @@ import { initQrCode, triggerShare } from './modules/qrcode.js';
|
|
|
34
35
|
import { initFileBrowser, loadRootDirectory, reopenFileViewer, refreshTree, handleFsList, handleFsRead, handleDirChanged, refreshIfOpen, handleFileChanged, handleFileHistory, handleGitDiff, handleFileAt, getPendingNavigate, closeFileViewer, resetFileBrowser } from './modules/filebrowser.js';
|
|
35
36
|
import { initGitPanel } from './modules/git-panel.js';
|
|
36
37
|
import { initWorkerPaneLock } from './modules/worker-pane-lock.js';
|
|
38
|
+
import { initPaneActivation } from './modules/pane-activation.js';
|
|
37
39
|
import { initAutonomousRun } from './modules/autonomous-run.js';
|
|
38
40
|
import { initLoopInterview } from './modules/loop-interview.js';
|
|
39
41
|
import { initTerminal, openTerminal, closeTerminal, resetTerminals, handleTermList, handleTermCreated, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed, sendTerminalCommand } from './modules/terminal.js';
|
|
@@ -115,6 +117,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
115
117
|
if (paneMode) {
|
|
116
118
|
wsPath += "?pane=1";
|
|
117
119
|
if (paneSessionId) wsPath += "&session=" + paneSessionId;
|
|
120
|
+
if (bootParams.get("contextual") === "1") wsPath += "&contextual=1";
|
|
118
121
|
}
|
|
119
122
|
|
|
120
123
|
// --- DOM refs ---
|
|
@@ -285,12 +288,24 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
285
288
|
mcpConnections: { screen: "list", servers: [], search: "", loaded: false },
|
|
286
289
|
sharedBrowserOpen: false,
|
|
287
290
|
sharedBrowserUi: {},
|
|
291
|
+
sharedBrowserSettings: {},
|
|
292
|
+
browserLinksBound: false,
|
|
288
293
|
// session / routing
|
|
289
294
|
basePath: basePath,
|
|
290
295
|
wsPath: wsPath,
|
|
291
296
|
paneMode: paneMode,
|
|
292
297
|
paneSessionId: paneSessionId,
|
|
293
298
|
panePinPending: paneMode && !!paneSessionId,
|
|
299
|
+
paneCommittedBinding: null, panePendingBinding: null, paneReady: false, paneSuspended: false,
|
|
300
|
+
paneActivationGeneration: 0, paneActivationTimer: null, panePointerBinding: null, paneRichDrafts: {},
|
|
301
|
+
sessionRichDrafts: {},
|
|
302
|
+
sessionActionEpoch: 0, composerUploadingCount: 0, deferredSessionSwitch: null,
|
|
303
|
+
paneCallbackBinding: null, paneActionEvents: [], paneHeldKeys: {}, rewindAction: null, handoffAction: null,
|
|
304
|
+
authIdentityLoaded: false,
|
|
305
|
+
splitIdentityBlockedSocket: null,
|
|
306
|
+
splitIdentityHydrated: false,
|
|
307
|
+
paneActivationUnsupported: false,
|
|
308
|
+
paneBindingSessions: [],
|
|
294
309
|
splitPanes: null,
|
|
295
310
|
splitGroups: [],
|
|
296
311
|
sessionFolders: null,
|
|
@@ -315,6 +330,9 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
315
330
|
historyTotal: 0,
|
|
316
331
|
replayingHistory: false,
|
|
317
332
|
historyReplayBatch: null,
|
|
333
|
+
pendingSessionEntryNavigation: null,
|
|
334
|
+
sessionEntryHighlight: null,
|
|
335
|
+
sessionNavigationRequestId: null,
|
|
318
336
|
projectName: projectName,
|
|
319
337
|
cwd: "",
|
|
320
338
|
currentSlug: currentSlug,
|
|
@@ -322,9 +340,33 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
322
340
|
githubWorkSessions: [],
|
|
323
341
|
githubWorkProject: null,
|
|
324
342
|
githubWorkRefresh: null,
|
|
343
|
+
workPrimaryPending: null,
|
|
325
344
|
activeProjectSlug: null,
|
|
326
345
|
activeProjectMateId: null,
|
|
327
346
|
activeProjectMateName: '',
|
|
347
|
+
clayReturnTarget: null,
|
|
348
|
+
contextualPrepared: null,
|
|
349
|
+
contextualSubmitted: {},
|
|
350
|
+
contextualClay: { mode: "closed", mateId: null },
|
|
351
|
+
contextualConversationHistory: null,
|
|
352
|
+
contextualConversationRequest: null,
|
|
353
|
+
clayControlActivity: null,
|
|
354
|
+
clayControlOrder: 0,
|
|
355
|
+
clayControlReceipts: [],
|
|
356
|
+
clayControlForwarded: null,
|
|
357
|
+
controlRuntimeId: null,
|
|
358
|
+
studioDocumentSource: null, studioDocumentView: null,
|
|
359
|
+
clayStudioRelays: {}, clayStudioForwarded: {}, clayStudioSurfaces: {},
|
|
360
|
+
clayControlNotifications: [],
|
|
361
|
+
clayControlFileView: null,
|
|
362
|
+
clayControlTerminalViews: [],
|
|
363
|
+
clayControlGitView: null,
|
|
364
|
+
clayNavigationRendering: null,
|
|
365
|
+
clayControlViewerRef: null,
|
|
366
|
+
contextualSessionReady: false,
|
|
367
|
+
contextualSessionReceived: false,
|
|
368
|
+
contextualSessionUnavailable: false,
|
|
369
|
+
clayReturnPendingProjectSlug: null,
|
|
328
370
|
activeSessionMateId: null,
|
|
329
371
|
activeSessionMateName: '',
|
|
330
372
|
sessionActivatedProjectSlug: null,
|
|
@@ -576,6 +618,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
576
618
|
// rendering
|
|
577
619
|
currentMsgTs: null,
|
|
578
620
|
richContextUsage: null,
|
|
621
|
+
contextMeasurement: "unavailable",
|
|
579
622
|
currentMsgEl: null,
|
|
580
623
|
currentFullText: "",
|
|
581
624
|
matePreThinkingEl: null,
|
|
@@ -1138,6 +1181,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
1138
1181
|
if (document.body) document.body.classList.add('is-multi-user');
|
|
1139
1182
|
}
|
|
1140
1183
|
if (d.user && d.user.id) { store.set({ myUserId: d.user.id }); requestDefaultVendor(); }
|
|
1184
|
+
store.set({ authIdentityLoaded: true });
|
|
1141
1185
|
store.set({ permissions: d.permissions || null, projectsAccessLoaded: true });
|
|
1142
1186
|
if (d.mustChangePin) showForceChangePinOverlay();
|
|
1143
1187
|
// Single-user mode: clear user strip skeletons immediately (no presence message will arrive)
|
|
@@ -1233,7 +1277,9 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
|
|
|
1233
1277
|
});
|
|
1234
1278
|
initGitPanel();
|
|
1235
1279
|
initSharedBrowser();
|
|
1280
|
+
initStudioBridge();
|
|
1236
1281
|
initWorkerPaneLock();
|
|
1282
|
+
initPaneActivation();
|
|
1237
1283
|
|
|
1238
1284
|
// --- Terminal ---
|
|
1239
1285
|
initTerminal({
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
(function () {
|
|
2
|
+
var root = document.documentElement;
|
|
3
|
+
var params = new URLSearchParams(window.location.search);
|
|
4
|
+
if (window.parent !== window && params.get('pane') === '1' && params.get('contextual') === '1') root.classList.add('contextual-pane-boot');
|
|
5
|
+
var light = window.matchMedia && window.matchMedia("(prefers-color-scheme: light)").matches;
|
|
6
|
+
var seed = window.__clayAppearanceSeed;
|
|
7
|
+
|
|
8
|
+
function applyMode(mode) {
|
|
9
|
+
if (mode !== "light" && mode !== "dark") return;
|
|
10
|
+
root.classList.toggle("light-theme", mode === "light");
|
|
11
|
+
root.classList.toggle("dark-theme", mode !== "light");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
var savedMode = seed && seed.configured && (seed.mode === "light" || seed.mode === "dark") ? seed.mode : null;
|
|
15
|
+
applyMode(savedMode || (light ? "light" : "dark"));
|
|
16
|
+
}());
|