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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// One next-message admission window, bound to the exact live provider query.
|
|
2
|
+
// This is not turn completion: processing and pending terminal counts survive.
|
|
3
|
+
function available(session) {
|
|
4
|
+
var credit = session && session._foregroundAdmission;
|
|
5
|
+
return !!(credit && session.queryInstance === credit.query
|
|
6
|
+
&& Number(session._sdkQueryGeneration || 0) === credit.generation
|
|
7
|
+
&& !session.taskStopRequested && !session._pendingMessageDrainPaused
|
|
8
|
+
&& !(session.abortController && session.abortController.signal.aborted));
|
|
9
|
+
}
|
|
10
|
+
function offer(session) {
|
|
11
|
+
if (!session.queryInstance || session.taskStopRequested || session.abortController && session.abortController.signal.aborted) return false;
|
|
12
|
+
session._foregroundAdmission = { query: session.queryInstance, generation: Number(session._sdkQueryGeneration || 0) };
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
function take(session) { delete session._foregroundAdmission; }
|
|
16
|
+
module.exports = { available: available, offer: offer, take: take };
|
|
@@ -1,37 +1,2 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
function extractMcpDescriptors(mcpServers) {
|
|
4
|
-
if (!mcpServers) return null;
|
|
5
|
-
// Claude's adapter uses Zod v3 for JSON Schema tools; other servers use v4.
|
|
6
|
-
// Use the MCP SDK's version-aware converter for both kinds of registered tool.
|
|
7
|
-
var toJSONSchema = require("@modelcontextprotocol/sdk/server/zod-json-schema-compat.js").toJsonSchemaCompat;
|
|
8
|
-
var descriptors = [];
|
|
9
|
-
var names = Object.keys(mcpServers);
|
|
10
|
-
for (var i = 0; i < names.length; i++) {
|
|
11
|
-
var serverName = names[i];
|
|
12
|
-
var server = mcpServers[serverName];
|
|
13
|
-
if (!server || !server.instance || !server.instance._registeredTools) continue;
|
|
14
|
-
var tools = [];
|
|
15
|
-
var toolNames = Object.keys(server.instance._registeredTools);
|
|
16
|
-
for (var j = 0; j < toolNames.length; j++) {
|
|
17
|
-
var toolName = toolNames[j];
|
|
18
|
-
var toolDef = server.instance._registeredTools[toolName];
|
|
19
|
-
var inputSchema = { type: "object", properties: {} };
|
|
20
|
-
try {
|
|
21
|
-
if (toolDef._clayInputSchema) inputSchema = toolDef._clayInputSchema;
|
|
22
|
-
else if (toolDef.inputSchema) inputSchema = toJSONSchema(toolDef.inputSchema);
|
|
23
|
-
} catch (e) {
|
|
24
|
-
throw new Error("Cannot serialize MCP tool schema " + serverName + "/" + toolName + ": " + e.message);
|
|
25
|
-
}
|
|
26
|
-
tools.push({
|
|
27
|
-
name: toolName,
|
|
28
|
-
description: toolDef.description || toolName,
|
|
29
|
-
inputSchema: inputSchema,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
if (tools.length > 0) descriptors.push({ serverName: serverName, tools: tools });
|
|
33
|
-
}
|
|
34
|
-
return descriptors.length > 0 ? descriptors : null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
module.exports = { extractMcpDescriptors: extractMcpDescriptors };
|
|
1
|
+
// Compatibility export; SDK serialization is owned by YOKE.
|
|
2
|
+
module.exports = require("./yoke/sdk-mcp-descriptors");
|
|
@@ -42,9 +42,24 @@ function attachMessageProcessor(ctx) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function sendAndRecord(session, obj, clientObj) {
|
|
45
|
+
obj = require("./yoke/usage").clientEvent(obj, session.vendor || "claude");
|
|
45
46
|
sm.sendAndRecord(session, obj, clientObj);
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
function observeQuota(session, message, observedAtMs) {
|
|
50
|
+
if (typeof sm.notifyQuotaObserved === "function") sm.notifyQuotaObserved(session, message, observedAtMs);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function recordTurnActivity(session, activity) {
|
|
54
|
+
// An authoritative input card owns progress until its request settles.
|
|
55
|
+
var awaitingInput = ["pendingPermissions", "pendingAskUser", "pendingElicitations", "pendingUserDialogs"].some(function (key) {
|
|
56
|
+
return Object.keys(session[key] || {}).length > 0;
|
|
57
|
+
});
|
|
58
|
+
if (!awaitingInput && ["waiting", "running", "background"].indexOf(activity.phase) !== -1) sendAndRecord(session, {
|
|
59
|
+
type: "turn_activity", phase: activity.phase, turnId: activity.turnId || null, disposition: activity.disposition || null
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
48
63
|
function parseGeneratedImage(parsed) {
|
|
49
64
|
var data = parsed.data || "";
|
|
50
65
|
var mediaType = parsed.mediaType || "image/png";
|
|
@@ -77,8 +92,8 @@ function attachMessageProcessor(ctx) {
|
|
|
77
92
|
|| !!authLinuxUser
|
|
78
93
|
|| (authUser && authUser.role === "admin");
|
|
79
94
|
var vendorInfo = yoke.getVendorInfo(session.vendor);
|
|
80
|
-
var authTitle = ((vendorInfo && vendorInfo.displayName) || "
|
|
81
|
-
var loginCommand = (vendorInfo && vendorInfo.loginCommand) || "
|
|
95
|
+
var authTitle = ((vendorInfo && vendorInfo.displayName) || "The provider") + " is not logged in.";
|
|
96
|
+
var loginCommand = (vendorInfo && vendorInfo.loginCommand) || "";
|
|
82
97
|
var _nmLogin = getNotificationsModule();
|
|
83
98
|
// Authentication recovery is transient UI state, not transcript content.
|
|
84
99
|
// Recording it makes history replay look like a fresh auth failure and
|
|
@@ -163,6 +178,7 @@ function attachMessageProcessor(ctx) {
|
|
|
163
178
|
}
|
|
164
179
|
|
|
165
180
|
function processSDKMessage(session, parsed) {
|
|
181
|
+
parsed = require("./yoke/auth-events").normalize(parsed, session.responsePreview, session.vendor || "claude");
|
|
166
182
|
// Timing: log key SDK milestones relative to query start
|
|
167
183
|
if (session._queryStartTs) {
|
|
168
184
|
var _elapsed = Date.now() - session._queryStartTs;
|
|
@@ -378,7 +394,7 @@ function attachMessageProcessor(ctx) {
|
|
|
378
394
|
}) : [];
|
|
379
395
|
sendAndRecord(session, {
|
|
380
396
|
type: "tool_executing",
|
|
381
|
-
id: parsed.turnId || "
|
|
397
|
+
id: parsed.turnId || "provider-plan",
|
|
382
398
|
name: "TodoWrite",
|
|
383
399
|
input: {
|
|
384
400
|
todos: todos,
|
|
@@ -430,6 +446,7 @@ function attachMessageProcessor(ctx) {
|
|
|
430
446
|
if (pushModule && block.name === "AskUserQuestion" && input.questions) {
|
|
431
447
|
var q = input.questions[0];
|
|
432
448
|
pushModule.sendPush({
|
|
449
|
+
sessionId: session.localId,
|
|
433
450
|
type: "ask_user",
|
|
434
451
|
slug: slug,
|
|
435
452
|
title: (mateDisplayName || "Claude") + " has a question",
|
|
@@ -545,7 +562,32 @@ function attachMessageProcessor(ctx) {
|
|
|
545
562
|
}
|
|
546
563
|
}
|
|
547
564
|
|
|
565
|
+
} else if (parsed.yokeType === "turn_activity") {
|
|
566
|
+
recordTurnActivity(session, parsed);
|
|
567
|
+
} else if (parsed.yokeType === "foreground_available") {
|
|
568
|
+
// A provider observed an admission boundary while background work still
|
|
569
|
+
// owns its terminal. Do not synthesize success or clear processing/tasks.
|
|
570
|
+
// Persist the presentation boundary before a synchronous next admission.
|
|
571
|
+
sendAndRecord(session, { type: "assistant_boundary" });
|
|
572
|
+
recordTurnActivity(session, { phase: "background" });
|
|
573
|
+
if (require('./sdk-foreground-admission').offer(session) && opts && typeof opts.onSessionAvailable === 'function') opts.onSessionAvailable(session);
|
|
548
574
|
} else if (parsed.yokeType === "result") {
|
|
575
|
+
if (parsed.backgroundOnly === true) {
|
|
576
|
+
// Observed terminal of an older foreground turn. Account for the
|
|
577
|
+
// outstanding send without settling a newer turn's reviews/callbacks.
|
|
578
|
+
session._queuedTurnCount = turnQueue.pendingSends(session, parsed);
|
|
579
|
+
if (session._queuedTurnCount > 0) session._queuedTurnCount--;
|
|
580
|
+
else {
|
|
581
|
+
session.isProcessing = false;
|
|
582
|
+
session._awaitingTurnResult = false;
|
|
583
|
+
onProcessingChanged();
|
|
584
|
+
sendAndRecord(session, { type: "done", code: 0 });
|
|
585
|
+
}
|
|
586
|
+
sendAndRecord(session, { type: "background_result", usage: require('./yoke/usage').accounting(parsed.usage), cost: parsed.cost, duration: parsed.duration });
|
|
587
|
+
sm.broadcastSessionList();
|
|
588
|
+
if (opts && typeof opts.onSessionAvailable === 'function') opts.onSessionAvailable(session);
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
549
591
|
// SDK 0.3.274 batches queued background-task completion wakes into one
|
|
550
592
|
// model call. Every wake still emits a result, but all results before
|
|
551
593
|
// the final wake are successful task-notification-origin placeholders
|
|
@@ -615,7 +657,7 @@ function attachMessageProcessor(ctx) {
|
|
|
615
657
|
session._queuedTurnCount = 0;
|
|
616
658
|
taskLifecycle.clearAll(session);
|
|
617
659
|
onProcessingChanged();
|
|
618
|
-
sendAndRecord(session, { type: "error", text: "
|
|
660
|
+
sendAndRecord(session, { type: "error", text: "The provider failed to start: " + parsed.startupFailureReason });
|
|
619
661
|
sendAndRecord(session, { type: "done", code: 1 });
|
|
620
662
|
sm.broadcastSessionList();
|
|
621
663
|
return;
|
|
@@ -656,12 +698,6 @@ function attachMessageProcessor(ctx) {
|
|
|
656
698
|
onProcessingChanged();
|
|
657
699
|
}
|
|
658
700
|
// Recognize only short, zero-cost CLI login responses, not ordinary prose.
|
|
659
|
-
var previewTrimmed = (session.responsePreview || "").trim();
|
|
660
|
-
var isZeroCost = !parsed.cost || parsed.cost === 0;
|
|
661
|
-
var isLoginPrompt = isZeroCost && previewTrimmed.length < 100
|
|
662
|
-
&& ((/not logged in/i.test(previewTrimmed) && /\/login/i.test(previewTrimmed))
|
|
663
|
-
|| ((session.vendor || "claude") === "claude"
|
|
664
|
-
&& /^Failed to authenticate: OAuth session expired and could not be refreshed\.?$/i.test(previewTrimmed)));
|
|
665
701
|
// Fetch rich context usage breakdown (fire-and-forget, non-blocking)
|
|
666
702
|
if (session.queryInstance && typeof session.queryInstance.getContextUsage === "function") {
|
|
667
703
|
var contextQuery = session.queryInstance;
|
|
@@ -683,7 +719,8 @@ function attachMessageProcessor(ctx) {
|
|
|
683
719
|
type: "result",
|
|
684
720
|
cost: parsed.cost,
|
|
685
721
|
duration: parsed.duration,
|
|
686
|
-
usage: parsed.usage
|
|
722
|
+
usage: require("./yoke/usage").accounting(parsed.usage),
|
|
723
|
+
context: require("./yoke/usage").turnContext(Object.assign({}, parsed, { lastStreamInputTokens: lastStreamInput })),
|
|
687
724
|
modelUsage: parsed.modelUsage || null,
|
|
688
725
|
sessionId: parsed.sessionId,
|
|
689
726
|
lastStreamInputTokens: lastStreamInput,
|
|
@@ -698,7 +735,7 @@ function attachMessageProcessor(ctx) {
|
|
|
698
735
|
}
|
|
699
736
|
// Recover both missing login and expired OAuth sessions from the SDK.
|
|
700
737
|
// This is a short canned response with zero cost, not actual AI output.
|
|
701
|
-
if (
|
|
738
|
+
if (parsed.authenticationRequired === true) {
|
|
702
739
|
emitAuthRequired(session);
|
|
703
740
|
}
|
|
704
741
|
sendAndRecord(session, { type: "done", code: 0 });
|
|
@@ -715,6 +752,7 @@ function attachMessageProcessor(ctx) {
|
|
|
715
752
|
|
|
716
753
|
if (pushModule && !session._delegatedBy && !_suppressResponseNotification) {
|
|
717
754
|
pushModule.sendPush({
|
|
755
|
+
sessionId: session.localId,
|
|
718
756
|
type: "done",
|
|
719
757
|
slug: slug,
|
|
720
758
|
title: _doneTitle,
|
|
@@ -858,7 +896,7 @@ function attachMessageProcessor(ctx) {
|
|
|
858
896
|
} else if (parsed.yokeType === "rate_limit") {
|
|
859
897
|
var info = parsed.rateLimitInfo;
|
|
860
898
|
if (info.source === "account_snapshot") {
|
|
861
|
-
quotaSnapshots.recordQuotaSnapshot(session, info, sendAndRecord);
|
|
899
|
+
quotaSnapshots.recordQuotaSnapshot(session, info, sendAndRecord, observeQuota);
|
|
862
900
|
return;
|
|
863
901
|
}
|
|
864
902
|
console.log("[sdk-bridge] rate_limit_event for session " + session.localId + ": status=" + info.status + " resetsAt=" + info.resetsAt + " isUsingOverage=" + info.isUsingOverage + " isProcessing=" + session.isProcessing);
|
|
@@ -873,6 +911,7 @@ function attachMessageProcessor(ctx) {
|
|
|
873
911
|
resetsAt: info.resetsAt * 1000,
|
|
874
912
|
status: info.status,
|
|
875
913
|
});
|
|
914
|
+
observeQuota(session, { type: "rate_limit_usage", vendor: session.vendor || "claude", rateLimitType: info.rateLimitType, resetsAt: info.resetsAt * 1000, status: info.status }, Date.now());
|
|
876
915
|
}
|
|
877
916
|
|
|
878
917
|
// Warning/rejection handling (existing behavior)
|
|
@@ -885,12 +924,15 @@ function attachMessageProcessor(ctx) {
|
|
|
885
924
|
resetsAt: info.resetsAt ? info.resetsAt * 1000 : null,
|
|
886
925
|
rateLimitType: info.rateLimitType || null,
|
|
887
926
|
utilization: info.utilization || null,
|
|
888
|
-
isUsingOverage: info.isUsingOverage === true
|
|
927
|
+
isUsingOverage: info.isUsingOverage === true,
|
|
889
928
|
overageEnabled: typeof info.overageEnabled === "boolean" ? info.overageEnabled : null,
|
|
890
929
|
overageStatus: info.overageStatus || null,
|
|
891
930
|
overageResetsAt: info.overageResetsAt ? info.overageResetsAt * 1000 : null,
|
|
892
931
|
overageDisabledReason: info.overageDisabledReason || null,
|
|
893
932
|
});
|
|
933
|
+
if (info.rateLimitType && info.utilization) {
|
|
934
|
+
observeQuota(session, { type: "rate_limit", vendor: session.vendor || "claude", rateLimitType: info.rateLimitType, utilization: info.utilization }, Date.now());
|
|
935
|
+
}
|
|
894
936
|
// Track rejection for auto-continue / scheduled message support
|
|
895
937
|
if (info.status === "rejected" && info.resetsAt) {
|
|
896
938
|
session.rateLimitResetsAt = info.resetsAt * 1000;
|
|
@@ -977,6 +1019,7 @@ function attachMessageProcessor(ctx) {
|
|
|
977
1019
|
}
|
|
978
1020
|
|
|
979
1021
|
} else if (parsed.yokeType === "commands_changed") {
|
|
1022
|
+
if (Array.isArray(parsed.skills)) session.skillNames = parsed.skills.slice();
|
|
980
1023
|
// Mid-session command list change: rebuild the union with skills (same as
|
|
981
1024
|
// init) and push a full replacement to the client.
|
|
982
1025
|
var cmdSeen = new Set();
|
|
@@ -1051,12 +1094,12 @@ function attachMessageProcessor(ctx) {
|
|
|
1051
1094
|
// processQueryStream can finish the turn when the iterator closes.
|
|
1052
1095
|
var adapterErrorText = parsed.text || parsed.message || parsed.error || "Agent runtime error";
|
|
1053
1096
|
session._lastAdapterError = adapterErrorText;
|
|
1054
|
-
var
|
|
1055
|
-
if (
|
|
1097
|
+
var classifiedError = require("./yoke/errors").classify(session.vendor || "claude", adapterErrorText);
|
|
1098
|
+
if (classifiedError && classifiedError.kind === "session_writer_conflict") {
|
|
1056
1099
|
sendAndRecord(session, {
|
|
1057
1100
|
type: "session_writer_conflict",
|
|
1058
|
-
vendor: session.vendor || "
|
|
1059
|
-
text:
|
|
1101
|
+
vendor: session.vendor || "claude",
|
|
1102
|
+
text: classifiedError.text,
|
|
1060
1103
|
});
|
|
1061
1104
|
} else {
|
|
1062
1105
|
sendAndRecord(session, { type: "error", text: adapterErrorText });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function recordQuotaSnapshot(session, info, sendAndRecord) {
|
|
1
|
+
function recordQuotaSnapshot(session, info, sendAndRecord, observe) {
|
|
2
2
|
var message = {
|
|
3
3
|
type: "rate_limit_usage",
|
|
4
4
|
sessionId: session.localId,
|
|
@@ -9,6 +9,10 @@ function recordQuotaSnapshot(session, info, sendAndRecord) {
|
|
|
9
9
|
return Object.assign({}, window, { resetsAt: window.resetsAt ? window.resetsAt * 1000 : null });
|
|
10
10
|
}),
|
|
11
11
|
};
|
|
12
|
+
if (Number.isFinite(info.observedAtMs)) message.observedAtMs = info.observedAtMs;
|
|
13
|
+
// The overview records every live observation, including an unchanged one:
|
|
14
|
+
// deduplication below only avoids re-recording identical history.
|
|
15
|
+
if (typeof observe === "function") observe(session, message, Number.isFinite(info.observedAtMs) ? info.observedAtMs : Date.now());
|
|
12
16
|
var snapshots = session._quotaSnapshots || (session._quotaSnapshots = Object.create(null));
|
|
13
17
|
var key = JSON.stringify([session.ownerId, session.vendor, info.limitId]);
|
|
14
18
|
var serialized = JSON.stringify(message);
|
|
@@ -17,10 +21,24 @@ function recordQuotaSnapshot(session, info, sendAndRecord) {
|
|
|
17
21
|
sendAndRecord(session, message);
|
|
18
22
|
}
|
|
19
23
|
|
|
24
|
+
// Observation listeners feed the owner-scoped vendor overview. They never
|
|
25
|
+
// influence rejection handling or scheduling.
|
|
26
|
+
function attachQuotaObservers(sm) {
|
|
27
|
+
// Idempotent: the processor and the overview may attach in either order.
|
|
28
|
+
if (typeof sm.addOnQuotaObserved === "function") return;
|
|
29
|
+
var listeners = [];
|
|
30
|
+
sm.addOnQuotaObserved = function (fn) { if (typeof fn === "function") listeners.push(fn); };
|
|
31
|
+
sm.notifyQuotaObserved = function (session, message, observedAtMs) {
|
|
32
|
+
for (var i = 0; i < listeners.length; i++) {
|
|
33
|
+
try { listeners[i](session, message, observedAtMs); } catch (e) { /* the overview is optional */ }
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
20
38
|
function attachQuotaSnapshots(sm) {
|
|
39
|
+
attachQuotaObservers(sm);
|
|
21
40
|
if (typeof sm.addOnSessionViewed !== "function") return;
|
|
22
41
|
sm.addOnSessionViewed(function (session, ws, send) {
|
|
23
|
-
if (session.vendor !== "codex") return;
|
|
24
42
|
var seen = Object.create(null);
|
|
25
43
|
var history = session.history || [];
|
|
26
44
|
// A deduplicated snapshot may precede the initial page of chat history.
|
|
@@ -34,4 +52,4 @@ function attachQuotaSnapshots(sm) {
|
|
|
34
52
|
});
|
|
35
53
|
}
|
|
36
54
|
|
|
37
|
-
module.exports = { recordQuotaSnapshot: recordQuotaSnapshot, attachQuotaSnapshots: attachQuotaSnapshots };
|
|
55
|
+
module.exports = { recordQuotaSnapshot: recordQuotaSnapshot, attachQuotaSnapshots: attachQuotaSnapshots, attachQuotaObservers: attachQuotaObservers };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require("./yoke/claude-response-recovery");
|