@vellumai/assistant 0.8.0 → 0.8.1
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/AGENTS.md +11 -0
- package/Dockerfile +5 -4
- package/README.md +2 -2
- package/docker-entrypoint.sh +16 -0
- package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +420 -0
- package/eslint-rules/cli-no-daemon-internals.js +283 -0
- package/eslint.config.mjs +12 -0
- package/knip.json +2 -1
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
- package/openapi.yaml +4847 -1698
- package/package.json +3 -1
- package/scripts/generate-openapi.ts +52 -4
- package/scripts/sync-llm-catalog.ts +165 -0
- package/scripts/sync-web-search-catalog.ts +107 -0
- package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +169 -0
- package/src/__tests__/agent-loop-override-profile.test.ts +26 -1
- package/src/__tests__/anthropic-provider.test.ts +92 -2
- package/src/__tests__/app-control-flow.test.ts +7 -0
- package/src/__tests__/assistant-events-sse-shed.test.ts +232 -0
- package/src/__tests__/avatar-identity-sync.test.ts +87 -0
- package/src/__tests__/background-workers-disk-pressure.test.ts +11 -22
- package/src/__tests__/btw-routes.test.ts +1 -0
- package/src/__tests__/call-site-routing-provider.test.ts +172 -45
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +44 -3
- package/src/__tests__/channel-policy.test.ts +12 -0
- package/src/__tests__/checker.test.ts +89 -0
- package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +35 -7
- package/src/__tests__/compact-event-conversation-id-guard.test.ts +33 -5
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +26 -1
- package/src/__tests__/config-loader-backfill.test.ts +526 -102
- package/src/__tests__/config-loader-corrupt.test.ts +68 -0
- package/src/__tests__/config-loader-platform-defaults.test.ts +77 -23
- package/src/__tests__/config-schema-cmd.test.ts +63 -29
- package/src/__tests__/config-schema.test.ts +14 -3
- package/src/__tests__/config-set-platform-guard.test.ts +75 -152
- package/src/__tests__/config-set-route.test.ts +198 -0
- package/src/__tests__/config-watcher.test.ts +6 -0
- package/src/__tests__/contacts-tools.test.ts +51 -199
- package/src/__tests__/context-search-agent-protocol.test.ts +21 -2
- package/src/__tests__/context-search-agent-runner.test.ts +22 -138
- package/src/__tests__/context-search-conversations-source.test.ts +42 -16
- package/src/__tests__/context-search-fanout.test.ts +20 -157
- package/src/__tests__/context-search-memory-v2-source.test.ts +3 -3
- package/src/__tests__/context-search-types.test.ts +7 -2
- package/src/__tests__/context-window-manager.test.ts +389 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
- package/src/__tests__/conversation-crud-inference-profile.test.ts +100 -0
- package/src/__tests__/conversation-error.test.ts +38 -0
- package/src/__tests__/conversation-fork-crud.test.ts +241 -1
- package/src/__tests__/conversation-inference-profile-route.test.ts +14 -14
- package/src/__tests__/conversation-init.benchmark.test.ts +1 -0
- package/src/__tests__/conversation-lifecycle.test.ts +124 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +100 -1
- package/src/__tests__/conversation-process-callsite.test.ts +21 -1
- package/src/__tests__/conversation-runtime-assembly.test.ts +4 -4
- package/src/__tests__/conversation-slash-commands.test.ts +194 -2
- package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
- package/src/__tests__/credential-security-invariants.test.ts +5 -6
- package/src/__tests__/daemon-credential-client.test.ts +56 -1
- package/src/__tests__/db-activation-state-fk-cascade.test.ts +132 -0
- package/src/__tests__/db-conversation-inference-profile-migration.test.ts +37 -0
- package/src/__tests__/db-memory-graph-event-date-repair.test.ts +43 -20
- package/src/__tests__/db-proxy-transaction.test.ts +206 -0
- package/src/__tests__/external-plugin-loader.test.ts +458 -0
- package/src/__tests__/filing-service.test.ts +23 -3
- package/src/__tests__/fixtures/mock-chrome-extension.ts +5 -0
- package/src/__tests__/gateway-only-guard.test.ts +0 -1
- package/src/__tests__/graph-extraction-event-date.test.ts +34 -0
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -8
- package/src/__tests__/heartbeat-disk-pressure.test.ts +21 -8
- package/src/__tests__/heartbeat-service.test.ts +50 -233
- package/src/__tests__/history-repair.test.ts +89 -0
- package/src/__tests__/host-app-control-proxy.test.ts +109 -1
- package/src/__tests__/host-app-control-routes.test.ts +247 -1
- package/src/__tests__/host-browser-proxy.test.ts +416 -20
- package/src/__tests__/host-browser-routes.test.ts +325 -33
- package/src/__tests__/host-proxy-preactivation.test.ts +211 -0
- package/src/__tests__/inference-no-mode-boot-e2e.test.ts +246 -0
- package/src/__tests__/inference-profile-reaper.test.ts +154 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +398 -0
- package/src/__tests__/inference-profile-session-ipc.test.ts +236 -0
- package/src/__tests__/inline-skill-load-permissions.test.ts +6 -1
- package/src/__tests__/install-skill-routing.test.ts +2 -2
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +15 -0
- package/src/__tests__/llm-callsite-catalog.test.ts +20 -1
- package/src/__tests__/llm-catalog-parity.test.ts +146 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +188 -0
- package/src/__tests__/llm-request-log-source-factory.test.ts +124 -0
- package/src/__tests__/llm-resolver.test.ts +46 -0
- package/src/__tests__/managed-profile-guard.test.ts +131 -2
- package/src/__tests__/mcp-auth-routes.test.ts +1 -0
- package/src/__tests__/mcp-cli.test.ts +182 -220
- package/src/__tests__/mcp-health-check.test.ts +56 -27
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +18 -11
- package/src/__tests__/message-complete-display-id.test.ts +175 -0
- package/src/__tests__/notification-platform-adapter.test.ts +229 -0
- package/src/__tests__/oauth-cli.test.ts +38 -2009
- package/src/__tests__/oauth-commands-routes.test.ts +711 -0
- package/src/__tests__/oauth-connect-routes.test.ts +174 -11
- package/src/__tests__/oauth-providers-routes.test.ts +14 -10
- package/src/__tests__/openai-responses-cutover-guard.test.ts +33 -12
- package/src/__tests__/openai-responses-provider.test.ts +17 -0
- package/src/__tests__/plugin-bootstrap.test.ts +31 -2
- package/src/__tests__/plugin-route-contribution.test.ts +31 -3
- package/src/__tests__/plugin-tool-contribution.test.ts +31 -3
- package/src/__tests__/plugin-types.test.ts +13 -11
- package/src/__tests__/process-message-background-slack.test.ts +46 -0
- package/src/__tests__/profile-entry-status.test.ts +43 -0
- package/src/__tests__/provider-managed-proxy-integration.test.ts +12 -4
- package/src/__tests__/provider-registry-ollama.test.ts +12 -4
- package/src/__tests__/provider-send-message-override-profile.test.ts +10 -4
- package/src/__tests__/relay-server.test.ts +118 -0
- package/src/__tests__/retry-thinking-tool-choice.test.ts +15 -0
- package/src/__tests__/schedule-retry.test.ts +56 -4
- package/src/__tests__/schedule-routes.test.ts +104 -0
- package/src/__tests__/scheduler-disk-pressure.test.ts +0 -4
- package/src/__tests__/scheduler-recurrence.test.ts +87 -34
- package/src/__tests__/scheduler-reuse-conversation.test.ts +161 -5
- package/src/__tests__/scheduler-wake.test.ts +0 -63
- package/src/__tests__/secret-allowlist.test.ts +1 -0
- package/src/__tests__/secret-routes-managed-proxy.test.ts +12 -4
- package/src/__tests__/shell-credential-ref.test.ts +95 -3
- package/src/__tests__/shell-tool-proxy-mode.test.ts +14 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -0
- package/src/__tests__/skill-load-tool.test.ts +2 -4
- package/src/__tests__/subagent-call-site-routing.test.ts +78 -16
- package/src/__tests__/suggestion-routes.test.ts +3 -3
- package/src/__tests__/sync-message-contract.test.ts +63 -0
- package/src/__tests__/task-scheduler.test.ts +88 -23
- package/src/__tests__/update-bulletin-job.test.ts +96 -193
- package/src/__tests__/usage-cli.test.ts +11 -73
- package/src/__tests__/user-plugin-loader.test.ts +145 -0
- package/src/__tests__/vercel-config.test.ts +168 -0
- package/src/__tests__/web-search-catalog-parity.test.ts +86 -0
- package/src/__tests__/web-search.test.ts +303 -2
- package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +1 -21
- package/src/__tests__/workspace-migration-057-repair-stale-gemini-model-ids.test.ts +58 -0
- package/src/__tests__/workspace-migration-069-seed-onboarding-threads.test.ts +53 -20
- package/src/__tests__/workspace-migration-072-seed-reply-suggestion-callsite.test.ts +191 -0
- package/src/__tests__/workspace-migration-076-drop-services-inference-mode.test.ts +211 -0
- package/src/__tests__/workspace-migration-077-seed-memory-router-callsite.test.ts +174 -0
- package/src/__tests__/workspace-migration-079-home-feed-notification-only.test.ts +323 -0
- package/src/__tests__/workspace-migration-080-restrict-vercel-api-token-metadata.test.ts +299 -0
- package/src/__tests__/workspace-migration-081-backfill-bash-allowed-tools.test.ts +410 -0
- package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +268 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +3 -3
- package/src/__tests__/workspace-release-notes-feature-flag-guard.test.ts +115 -0
- package/src/acp/__tests__/helpers/which-stub.ts +4 -2
- package/src/acp/resolve-agent.test.ts +25 -0
- package/src/acp/resolve-agent.ts +13 -2
- package/src/acp/session-manager.ts +14 -0
- package/src/approvals/guardian-request-resolvers.ts +32 -87
- package/src/calls/relay-server.ts +35 -0
- package/src/calls/relay-setup-router.ts +36 -0
- package/src/calls/types.ts +1 -0
- package/src/calls/voice-session-bridge.ts +23 -4
- package/src/channels/config.ts +14 -1
- package/src/channels/types.ts +1 -0
- package/src/cli/AGENTS.md +164 -4
- package/src/cli/__tests__/notifications.test.ts +54 -0
- package/src/cli/commands/__tests__/avatar.test.ts +540 -0
- package/src/cli/commands/__tests__/backup.test.ts +236 -776
- package/src/cli/commands/__tests__/cache.test.ts +1 -1
- package/src/cli/commands/__tests__/changelog.test.ts +593 -0
- package/src/cli/commands/__tests__/channel-verification-sessions.test.ts +503 -0
- package/src/cli/commands/__tests__/conversations-import.test.ts +515 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +140 -167
- package/src/cli/commands/__tests__/domain-status.test.ts +137 -76
- package/src/cli/commands/__tests__/email-attachment.test.ts +314 -337
- package/src/cli/commands/__tests__/email-core.test.ts +579 -0
- package/src/cli/commands/__tests__/image-generation.test.ts +87 -824
- package/src/cli/commands/__tests__/inference-send.test.ts +30 -266
- package/src/cli/commands/__tests__/inference-session.test.ts +423 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +81 -110
- package/src/cli/commands/__tests__/skills.test.ts +563 -0
- package/src/cli/commands/__tests__/status.test.ts +249 -0
- package/src/cli/commands/__tests__/stt.test.ts +320 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +4 -603
- package/src/cli/commands/__tests__/tts.test.ts +321 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +86 -511
- package/src/cli/commands/attachment.ts +8 -3
- package/src/cli/commands/audit.ts +95 -64
- package/src/cli/commands/auth.ts +61 -58
- package/src/cli/commands/avatar.ts +276 -390
- package/src/cli/commands/backup.ts +409 -505
- package/src/cli/commands/bash.ts +9 -5
- package/src/cli/commands/browser.ts +28 -9
- package/src/cli/commands/cache.ts +9 -4
- package/src/cli/commands/changelog.ts +414 -0
- package/src/cli/commands/channel-verification-sessions.ts +238 -317
- package/src/cli/commands/clients.ts +8 -3
- package/src/cli/commands/completions.ts +9 -9
- package/src/cli/commands/config.ts +102 -72
- package/src/cli/commands/contacts.ts +575 -696
- package/src/cli/commands/conversations-defer.ts +17 -69
- package/src/cli/commands/conversations-import.ts +90 -253
- package/src/cli/commands/conversations.ts +346 -436
- package/src/cli/commands/credential-execution.ts +9 -6
- package/src/cli/commands/credentials.ts +456 -736
- package/src/cli/commands/domain.ts +128 -206
- package/src/cli/commands/email.ts +606 -794
- package/src/cli/commands/gateway.ts +8 -1
- package/src/cli/commands/image-generation.ts +157 -205
- package/src/cli/commands/inference-providers.ts +352 -0
- package/src/cli/commands/inference-session.ts +415 -0
- package/src/cli/commands/inference.ts +87 -65
- package/src/cli/commands/keys.ts +8 -3
- package/src/cli/commands/mcp.ts +103 -287
- package/src/cli/commands/memory-v2.ts +162 -516
- package/src/cli/commands/notifications.ts +33 -7
- package/src/cli/commands/oauth/apps.ts +292 -261
- package/src/cli/commands/oauth/connect.ts +176 -297
- package/src/cli/commands/oauth/disconnect.ts +16 -215
- package/src/cli/commands/oauth/index.ts +49 -45
- package/src/cli/commands/oauth/mode.ts +43 -199
- package/src/cli/commands/oauth/ping.ts +17 -125
- package/src/cli/commands/oauth/providers.ts +732 -921
- package/src/cli/commands/oauth/request.ts +60 -350
- package/src/cli/commands/oauth/shared.ts +11 -121
- package/src/cli/commands/oauth/status.ts +31 -121
- package/src/cli/commands/oauth/token.ts +13 -55
- package/src/cli/commands/pending.ts +19 -10
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +133 -183
- package/src/cli/commands/platform/__tests__/connect.test.ts +66 -181
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +71 -227
- package/src/cli/commands/platform/__tests__/status.test.ts +169 -287
- package/src/cli/commands/platform/connect.ts +16 -80
- package/src/cli/commands/platform/disconnect.ts +14 -112
- package/src/cli/commands/platform/index.ts +177 -246
- package/src/cli/commands/routes.ts +153 -336
- package/src/cli/commands/sequence.ts +316 -360
- package/src/cli/commands/skills.ts +449 -671
- package/src/cli/commands/status.ts +58 -37
- package/src/cli/commands/stt.ts +94 -262
- package/src/cli/commands/task.ts +14 -40
- package/src/cli/commands/trust.ts +8 -3
- package/src/cli/commands/tts.ts +162 -167
- package/src/cli/commands/ui.ts +35 -42
- package/src/cli/commands/usage.ts +188 -126
- package/src/cli/commands/watchers.ts +8 -3
- package/src/cli/commands/webhooks.ts +99 -193
- package/src/cli/lib/__tests__/register-command.test.ts +85 -0
- package/src/cli/lib/daemon-credential-client.ts +4 -5
- package/src/cli/lib/nested-value.ts +44 -0
- package/src/cli/lib/open-browser.ts +36 -0
- package/src/cli/lib/register-command.ts +19 -0
- package/src/cli/lib/time-ago.ts +34 -0
- package/src/cli/program.ts +2 -4
- package/src/cli/utils/__tests__/conversation-id.test.ts +66 -0
- package/src/cli/utils/__tests__/parse-duration.test.ts +49 -0
- package/src/cli/utils/conversation-id.ts +30 -0
- package/src/cli/utils/parse-duration.ts +41 -0
- package/src/config/acp-defaults.test.ts +5 -1
- package/src/config/acp-defaults.ts +11 -4
- package/src/config/bundled-skills/acp/TOOLS.json +2 -2
- package/src/config/bundled-skills/app-control/TOOLS.json +32 -0
- package/src/config/bundled-skills/contacts/SKILL.md +12 -45
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -57
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +0 -12
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -58
- package/src/config/bundled-tool-registry.ts +0 -2
- package/src/config/feature-flag-registry.json +16 -0
- package/src/config/llm-resolver.ts +16 -1
- package/src/config/loader.ts +76 -14
- package/src/config/raw-config-utils.ts +2 -30
- package/src/config/schema.ts +4 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +49 -0
- package/src/config/schemas/call-site-catalog.ts +29 -7
- package/src/config/schemas/llm-request-logs.ts +57 -0
- package/src/config/schemas/llm.ts +52 -2
- package/src/config/schemas/memory-retrospective.ts +48 -0
- package/src/config/schemas/memory-v2.ts +32 -1
- package/src/config/schemas/memory.ts +4 -0
- package/src/config/schemas/services.ts +15 -12
- package/src/config/seed-inference-profiles.ts +195 -134
- package/src/contacts/contact-store.ts +0 -61
- package/src/context/window-manager.ts +191 -5
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +79 -0
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +109 -4
- package/src/daemon/__tests__/daemon-skill-host.test.ts +10 -4
- package/src/daemon/approval-generators.ts +23 -29
- package/src/daemon/config-watcher.ts +2 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +24 -0
- package/src/daemon/conversation-agent-loop.ts +127 -97
- package/src/daemon/conversation-error.ts +21 -0
- package/src/daemon/conversation-lifecycle.ts +46 -5
- package/src/daemon/conversation-process.ts +36 -19
- package/src/daemon/conversation-runtime-assembly.ts +14 -5
- package/src/daemon/conversation-slash.ts +175 -23
- package/src/daemon/conversation-store.ts +17 -10
- package/src/daemon/conversation-surfaces.ts +76 -12
- package/src/daemon/conversation-tool-setup.ts +24 -14
- package/src/daemon/conversation.ts +48 -9
- package/src/daemon/external-plugins-bootstrap.ts +18 -8
- package/src/daemon/guardian-action-generators.ts +7 -22
- package/src/daemon/handlers/config-model.ts +8 -126
- package/src/daemon/handlers/config-slack-channel.ts +10 -7
- package/src/daemon/handlers/config-vercel.ts +3 -1
- package/src/daemon/handlers/skills.ts +84 -5
- package/src/daemon/history-repair.ts +33 -6
- package/src/daemon/host-app-control-proxy.ts +44 -19
- package/src/daemon/host-bash-proxy.ts +85 -158
- package/src/daemon/host-browser-proxy.ts +96 -35
- package/src/daemon/host-proxy-base.ts +13 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -1
- package/src/daemon/identity-helpers.ts +19 -0
- package/src/daemon/lifecycle.ts +42 -43
- package/src/daemon/meet-host-supervisor.ts +15 -15
- package/src/daemon/memory-v2-startup.ts +9 -2
- package/src/daemon/message-protocol.ts +6 -0
- package/src/daemon/message-types/bookmarks.ts +18 -0
- package/src/daemon/message-types/conversations.ts +12 -9
- package/src/daemon/message-types/messages.ts +9 -1
- package/src/daemon/message-types/sync.ts +60 -0
- package/src/daemon/pkb-reminder-builder.test.ts +54 -13
- package/src/daemon/pkb-reminder-builder.ts +21 -7
- package/src/daemon/process-message.ts +56 -23
- package/src/daemon/server.ts +23 -18
- package/src/daemon/shutdown-handlers.ts +0 -2
- package/src/daemon/tool-setup-types.ts +9 -0
- package/src/daemon/tool-side-effects.ts +6 -4
- package/src/daemon/wake-target-adapter.ts +11 -0
- package/src/export/transcript-formatter.ts +61 -2
- package/src/filing/filing-service.ts +40 -53
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +359 -0
- package/src/heartbeat/heartbeat-run-store.ts +2 -1
- package/src/heartbeat/heartbeat-service.ts +148 -127
- package/src/home/__tests__/feed-types.test.ts +63 -131
- package/src/home/__tests__/feed-writer.test.ts +77 -278
- package/src/home/__tests__/post-connect-feed.test.ts +9 -12
- package/src/home/feed-types.ts +19 -73
- package/src/home/feed-writer.ts +25 -156
- package/src/home/post-connect-feed.ts +1 -3
- package/src/ipc/__tests__/cli-ipc.test.ts +2 -0
- package/src/ipc/__tests__/email-ipc.test.ts +506 -0
- package/src/ipc/__tests__/exit-helper.test.ts +104 -0
- package/src/ipc/__tests__/streaming-client.test.ts +237 -0
- package/src/ipc/__tests__/streaming-framing.test.ts +142 -0
- package/src/ipc/assistant-server.ts +55 -6
- package/src/ipc/cli-client.ts +370 -50
- package/src/ipc/routes/db-proxy-transaction.ts +151 -0
- package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +60 -0
- package/src/ipc/skill-routes/events.ts +30 -3
- package/src/live-voice/__tests__/live-voice-session-manager.test.ts +46 -0
- package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +1 -0
- package/src/live-voice/live-voice-session-manager.ts +11 -4
- package/src/live-voice/live-voice-session.ts +14 -6
- package/src/memory/__tests__/bookmark-crud.test.ts +258 -0
- package/src/memory/__tests__/bookmark-schema.test.ts +181 -0
- package/src/memory/__tests__/conversation-types.test.ts +36 -0
- package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +130 -0
- package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +177 -0
- package/src/memory/__tests__/memory-retrospective-job.test.ts +328 -0
- package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +213 -0
- package/src/memory/__tests__/memory-retrospective-trigger-check.test.ts +90 -0
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +69 -0
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +3 -0
- package/src/memory/bookmark-crud.ts +179 -0
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +31 -9
- package/src/memory/context-search/agent-protocol.ts +5 -1
- package/src/memory/context-search/agent-runner.ts +60 -85
- package/src/memory/context-search/limits.ts +1 -4
- package/src/memory/context-search/search.ts +23 -113
- package/src/memory/context-search/sources/conversations.ts +18 -6
- package/src/memory/context-search/sources/memory-v2.ts +39 -14
- package/src/memory/context-search/sources/memory.ts +7 -0
- package/src/memory/context-search/sources/workspace.ts +13 -10
- package/src/memory/context-search/types.ts +1 -1
- package/src/memory/conversation-bootstrap.ts +11 -0
- package/src/memory/conversation-crud.ts +312 -10
- package/src/memory/conversation-queries.ts +9 -5
- package/src/memory/conversation-title-service.ts +1 -0
- package/src/memory/conversation-types.ts +16 -0
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.ts +2 -1
- package/src/memory/embedding-runtime-manager.ts +1 -2
- package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
- package/src/memory/graph/conversation-graph-memory.ts +76 -5
- package/src/memory/graph/extraction.ts +4 -0
- package/src/memory/graph/graph-memory-state-store.ts +16 -3
- package/src/memory/graph/tool-handlers.ts +17 -7
- package/src/memory/graph/tools.ts +44 -5
- package/src/memory/indexer.ts +17 -0
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +13 -15
- package/src/memory/jobs/embed-concept-page.ts +45 -9
- package/src/memory/jobs-store.ts +51 -1
- package/src/memory/jobs-worker.ts +52 -3
- package/src/memory/llm-request-log-source-clickhouse.ts +317 -0
- package/src/memory/llm-request-log-source-local.ts +26 -0
- package/src/memory/llm-request-log-source.ts +97 -0
- package/src/memory/llm-request-log-store.ts +1 -1
- package/src/memory/memory-retrospective-constants.ts +13 -0
- package/src/memory/memory-retrospective-enqueue.ts +114 -0
- package/src/memory/memory-retrospective-job.ts +351 -0
- package/src/memory/memory-retrospective-startup-cleanup.ts +108 -0
- package/src/memory/memory-retrospective-state.ts +162 -0
- package/src/memory/memory-retrospective-trigger-check.ts +91 -0
- package/src/memory/memory-v2-activation-log-store.ts +49 -5
- package/src/memory/memory-v2-concept-frequency.ts +4 -0
- package/src/memory/message-content.ts +38 -1
- package/src/memory/migrations/227-add-conversation-inference-profile.ts +6 -1
- package/src/memory/migrations/228-rename-inference-profile-snake-case.ts +20 -7
- package/src/memory/migrations/229-delete-private-conversations.test.ts +70 -1
- package/src/memory/migrations/229-delete-private-conversations.ts +12 -0
- package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +16 -2
- package/src/memory/migrations/240-conversation-inference-profile-session.ts +25 -0
- package/src/memory/migrations/241-activation-state-fk-cascade.ts +50 -0
- package/src/memory/migrations/242-message-bookmarks.ts +38 -0
- package/src/memory/migrations/243-provider-connections.ts +68 -0
- package/src/memory/migrations/244-provider-connection-status-label.ts +23 -0
- package/src/memory/migrations/245-memory-retrospective-state.ts +36 -0
- package/src/memory/migrations/246-backfill-provider-connection-label.ts +81 -0
- package/src/memory/migrations/__tests__/244-provider-connection-status-label.test.ts +84 -0
- package/src/memory/migrations/__tests__/245-memory-retrospective-state.test.ts +125 -0
- package/src/memory/migrations/__tests__/246-backfill-provider-connection-label.test.ts +192 -0
- package/src/memory/migrations/index.ts +7 -0
- package/src/memory/published-pages-store.ts +16 -0
- package/src/memory/schema/bookmarks.ts +38 -0
- package/src/memory/schema/conversations.ts +2 -0
- package/src/memory/schema/index.ts +2 -0
- package/src/memory/schema/inference.ts +29 -0
- package/src/memory/schema/memory-core.ts +9 -0
- package/src/memory/search/semantic.ts +1 -4
- package/src/memory/v2/__tests__/__snapshots__/prompts-router.test.ts.snap +27 -0
- package/src/memory/v2/__tests__/activation-store.test.ts +5 -5
- package/src/memory/v2/__tests__/activation.test.ts +11 -4
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +38 -21
- package/src/memory/v2/__tests__/consolidation-job.test.ts +123 -135
- package/src/memory/v2/__tests__/edge-index.test.ts +1 -1
- package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +111 -0
- package/src/memory/v2/__tests__/injection.test.ts +628 -10
- package/src/memory/v2/__tests__/migration.test.ts +7 -3
- package/src/memory/v2/__tests__/page-index.test.ts +277 -0
- package/src/memory/v2/__tests__/page-store.test.ts +14 -1
- package/src/memory/v2/__tests__/prompts-router.test.ts +257 -0
- package/src/memory/v2/__tests__/qdrant.test.ts +72 -0
- package/src/memory/v2/__tests__/reranker.test.ts +4 -4
- package/src/memory/v2/__tests__/router.test.ts +516 -0
- package/src/memory/v2/__tests__/sim.test.ts +45 -1
- package/src/memory/v2/__tests__/skill-store.test.ts +58 -3
- package/src/memory/v2/__tests__/static-context.test.ts +7 -22
- package/src/memory/v2/__tests__/sweep-job.test.ts +95 -0
- package/src/memory/v2/activation-store.ts +34 -5
- package/src/memory/v2/activation.ts +40 -27
- package/src/memory/v2/backfill-jobs.ts +17 -84
- package/src/memory/v2/consolidation-job.ts +85 -78
- package/src/memory/v2/frontmatter-sweep.ts +91 -0
- package/src/memory/v2/injection.ts +440 -109
- package/src/memory/v2/migration.ts +117 -20
- package/src/memory/v2/page-index.ts +191 -0
- package/src/memory/v2/page-store.ts +3 -0
- package/src/memory/v2/prompts/consolidation.ts +9 -7
- package/src/memory/v2/prompts/router.ts +192 -0
- package/src/memory/v2/qdrant.ts +100 -87
- package/src/memory/v2/reranker.ts +14 -7
- package/src/memory/v2/router.ts +322 -0
- package/src/memory/v2/sim.ts +25 -12
- package/src/memory/v2/skill-store.ts +118 -29
- package/src/memory/v2/static-context.ts +16 -9
- package/src/memory/v2/sweep-job.ts +122 -96
- package/src/memory/v2/types.ts +10 -6
- package/src/memory/validation.ts +13 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +182 -0
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +199 -0
- package/src/notifications/__tests__/signal-registry.test.ts +17 -0
- package/src/notifications/adapters/platform.ts +171 -0
- package/src/notifications/conversation-pairing.ts +2 -2
- package/src/notifications/copy-composer.ts +15 -0
- package/src/notifications/destination-resolver.ts +21 -0
- package/src/notifications/emit-signal.ts +28 -1
- package/src/notifications/home-feed-side-effect.ts +111 -0
- package/src/notifications/signal.ts +5 -0
- package/src/permissions/checker.ts +12 -0
- package/src/permissions/ipc-risk-types.ts +2 -0
- package/src/plugin-api/index.ts +13 -0
- package/src/plugin-api/package.json +12 -0
- package/src/plugin-api/types.ts +62 -0
- package/src/plugins/defaults/injectors.ts +19 -3
- package/src/plugins/external-plugin-loader.ts +294 -0
- package/src/plugins/types.ts +46 -30
- package/src/plugins/user-loader.ts +64 -41
- package/src/proactive-artifact/job.test.ts +12 -4
- package/src/proactive-artifact/job.ts +4 -0
- package/src/proactive-artifact/trigger-state.test.ts +9 -0
- package/src/proactive-artifact/trigger-state.ts +4 -0
- package/src/prompts/__tests__/system-prompt.test.ts +105 -0
- package/src/prompts/system-prompt.ts +22 -1
- package/src/prompts/update-bulletin-job.ts +61 -73
- package/src/providers/__tests__/dispatch-connection-routing.test.ts +279 -0
- package/src/providers/__tests__/inference.test.ts +288 -0
- package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
- package/src/providers/__tests__/provider-secret-catalog.test.ts +6 -0
- package/src/providers/__tests__/retry-callsite.test.ts +14 -32
- package/src/providers/__tests__/satellite-connection-routing.test.ts +510 -0
- package/src/providers/__tests__/search-provider-catalog.test.ts +80 -0
- package/src/providers/anthropic/client.ts +95 -26
- package/src/providers/call-site-routing.ts +94 -16
- package/src/providers/connection-resolution.ts +163 -0
- package/src/providers/inference/__tests__/connections-status-label.test.ts +250 -0
- package/src/providers/inference/adapter-factory.ts +173 -0
- package/src/providers/inference/auth.ts +112 -0
- package/src/providers/inference/backfill.ts +196 -0
- package/src/providers/inference/connections.ts +356 -0
- package/src/providers/inference/resolve-auth.ts +65 -0
- package/src/providers/model-catalog.ts +104 -6
- package/src/providers/openai/responses-provider.ts +4 -2
- package/src/providers/provider-env-vars.ts +17 -7
- package/src/providers/provider-secret-catalog.ts +49 -30
- package/src/providers/provider-send-message.ts +41 -20
- package/src/providers/registry.ts +143 -159
- package/src/providers/retry.ts +18 -10
- package/src/providers/search-provider-catalog.ts +121 -0
- package/src/runtime/AGENTS.md +18 -5
- package/src/runtime/__tests__/background-job-runner.test.ts +357 -0
- package/src/runtime/__tests__/pre-first-message-gate.test.ts +82 -0
- package/src/runtime/actor-trust-resolver.ts +32 -10
- package/src/runtime/agent-wake.ts +35 -6
- package/src/runtime/assistant-event-hub.ts +3 -85
- package/src/runtime/auth/route-policy.ts +303 -8
- package/src/runtime/auth/same-actor.ts +2 -0
- package/src/runtime/background-job-runner.ts +339 -0
- package/src/runtime/btw-sidechain.ts +1 -0
- package/src/runtime/http-router.ts +36 -1
- package/src/runtime/http-server.ts +31 -5
- package/src/runtime/http-types.ts +2 -0
- package/src/runtime/middleware/__tests__/request-logger.test.ts +162 -0
- package/src/runtime/middleware/request-logger.ts +62 -1
- package/src/runtime/pre-first-message-gate.ts +83 -0
- package/src/runtime/routes/__tests__/backup-routes.test.ts +8 -1
- package/src/runtime/routes/__tests__/bookmark-routes.test.ts +251 -0
- package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +142 -0
- package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +315 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +189 -0
- package/src/runtime/routes/__tests__/home-feed-routes.test.ts +15 -136
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +736 -0
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +4 -4
- package/src/runtime/routes/__tests__/stt-routes.test.ts +5 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +384 -0
- package/src/runtime/routes/__tests__/tts-routes.test.ts +6 -2
- package/src/runtime/routes/acp-routes.ts +10 -8
- package/src/runtime/routes/app-management-routes.ts +228 -3
- package/src/runtime/routes/approval-routes.ts +0 -18
- package/src/runtime/routes/audit-routes.ts +43 -0
- package/src/runtime/routes/auth-routes.ts +72 -0
- package/src/runtime/routes/avatar-routes.ts +273 -20
- package/src/runtime/routes/backup-routes.ts +406 -2
- package/src/runtime/routes/bookmark-routes.ts +154 -0
- package/src/runtime/routes/channel-verification-routes.ts +2 -1
- package/src/runtime/routes/contact-routes.ts +0 -160
- package/src/runtime/routes/conversation-cli-routes.ts +192 -0
- package/src/runtime/routes/conversation-management-routes.ts +30 -43
- package/src/runtime/routes/conversation-query-routes.ts +334 -86
- package/src/runtime/routes/conversation-routes.ts +31 -10
- package/src/runtime/routes/conversations-import-routes.ts +229 -0
- package/src/runtime/routes/credential-routes.ts +540 -0
- package/src/runtime/routes/debug-routes.ts +2 -2
- package/src/runtime/routes/document-pdf-renderer.ts +5 -1
- package/src/runtime/routes/domain-routes.ts +167 -0
- package/src/runtime/routes/email-routes.ts +603 -0
- package/src/runtime/routes/errors.ts +2 -2
- package/src/runtime/routes/events-routes.ts +192 -0
- package/src/runtime/routes/home-feed-routes.ts +6 -78
- package/src/runtime/routes/host-app-control-routes.ts +44 -2
- package/src/runtime/routes/host-browser-routes.ts +103 -22
- package/src/runtime/routes/http-adapter.ts +2 -0
- package/src/runtime/routes/identity-routes.ts +5 -0
- package/src/runtime/routes/image-generation-routes.ts +99 -0
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +137 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +87 -7
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +156 -0
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +22 -4
- package/src/runtime/routes/index.ts +36 -0
- package/src/runtime/routes/inference-profile-session-handler.ts +312 -0
- package/src/runtime/routes/inference-profile-session-reaper.ts +98 -0
- package/src/runtime/routes/inference-profile-session-routes.ts +146 -0
- package/src/runtime/routes/inference-provider-connection-routes.ts +317 -0
- package/src/runtime/routes/inference-send-routes.ts +115 -0
- package/src/runtime/routes/integrations/twilio.ts +1 -0
- package/src/runtime/routes/mcp-auth-routes.ts +283 -9
- package/src/runtime/routes/memory-v2-routes.ts +13 -398
- package/src/runtime/routes/notification-routes.ts +2 -0
- package/src/runtime/routes/oauth-apps.ts +112 -7
- package/src/runtime/routes/oauth-commands-routes.ts +1007 -0
- package/src/runtime/routes/oauth-connect-routes.ts +67 -5
- package/src/runtime/routes/oauth-providers.ts +298 -8
- package/src/runtime/routes/platform-routes.ts +336 -0
- package/src/runtime/routes/playground/inject-failures.ts +2 -1
- package/src/runtime/routes/playground/reset-circuit.ts +2 -1
- package/src/runtime/routes/playground/state.ts +2 -1
- package/src/runtime/routes/publish-routes.ts +221 -0
- package/src/runtime/routes/schedule-routes.ts +82 -0
- package/src/runtime/routes/sequence-routes.ts +291 -0
- package/src/runtime/routes/settings-routes.ts +2 -10
- package/src/runtime/routes/skills-routes.ts +31 -1
- package/src/runtime/routes/stt-routes.ts +240 -3
- package/src/runtime/routes/surface-action-routes.ts +43 -7
- package/src/runtime/routes/tts-routes.ts +67 -0
- package/src/runtime/routes/types.ts +32 -0
- package/src/runtime/routes/user-routes-cli.ts +243 -0
- package/src/runtime/routes/webhook-routes.ts +165 -0
- package/src/runtime/sync/resource-sync-events.ts +25 -0
- package/src/runtime/sync/sync-publisher.test.ts +105 -0
- package/src/runtime/sync/sync-publisher.ts +21 -0
- package/src/schedule/scheduler.ts +200 -123
- package/src/security/__tests__/provider-key-env-fallback.test.ts +12 -6
- package/src/security/secret-patterns.ts +3 -0
- package/src/sequence/engine.ts +38 -40
- package/src/subagent/manager.ts +20 -15
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +206 -0
- package/src/tools/browser/browser-execution.ts +15 -4
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +174 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +16 -13
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +24 -1
- package/src/tools/browser/cdp-client/factory.ts +66 -5
- package/src/tools/browser/runtime-check.ts +77 -0
- package/src/tools/memory/register.test.ts +3 -3
- package/src/tools/memory/register.ts +9 -1
- package/src/tools/network/__tests__/web-search.test.ts +156 -0
- package/src/tools/network/web-search.ts +280 -37
- package/src/tools/permission-checker.ts +13 -5
- package/src/tools/subagent/spawn.ts +3 -3
- package/src/tools/terminal/shell.ts +44 -0
- package/src/usage/attribution.ts +3 -2
- package/src/util/pricing.ts +86 -160
- package/src/watcher/__tests__/engine.test.ts +301 -0
- package/src/watcher/constants.ts +7 -0
- package/src/watcher/engine.ts +90 -90
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +6 -9
- package/src/workspace/migrations/054-seed-recall-callsite.ts +10 -1
- package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +28 -4
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +8 -2
- package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +104 -0
- package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +93 -0
- package/src/workspace/migrations/074-drop-deprecated-secret-detection-keys.ts +117 -0
- package/src/workspace/migrations/075-memory-v2-bm25-b-default-reembed.ts +61 -0
- package/src/workspace/migrations/076-drop-services-inference-mode.ts +62 -0
- package/src/workspace/migrations/077-seed-memory-router-callsite.ts +89 -0
- package/src/workspace/migrations/078-release-notes-tavily-web-search.ts +66 -0
- package/src/workspace/migrations/079-home-feed-notification-only.ts +197 -0
- package/src/workspace/migrations/080-restrict-vercel-api-token-metadata.ts +182 -0
- package/src/workspace/migrations/081-backfill-bash-allowed-tools-for-injection-credentials.ts +160 -0
- package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +154 -0
- package/src/workspace/migrations/registry.ts +22 -0
- package/src/workspace/migrations/runner.ts +13 -2
- package/src/workspace/migrations/types.ts +13 -3
- package/src/workspace/provider-commit-message-generator.ts +3 -2
- package/src/__tests__/context-search-pkb-source.test.ts +0 -498
- package/src/__tests__/credentials-cli.test.ts +0 -1225
- package/src/__tests__/memory-admin-recall.test.ts +0 -213
- package/src/approvals/__tests__/guardian-feed-event.test.ts +0 -303
- package/src/cli/commands/__tests__/email-download.test.ts +0 -260
- package/src/cli/commands/__tests__/email-list.test.ts +0 -216
- package/src/cli/commands/__tests__/email-register.test.ts +0 -186
- package/src/cli/commands/__tests__/email-send.test.ts +0 -416
- package/src/cli/commands/__tests__/email-status.test.ts +0 -185
- package/src/cli/commands/__tests__/email-unregister.test.ts +0 -168
- package/src/cli/commands/__tests__/routes.test.ts +0 -562
- package/src/cli/commands/__tests__/stt-transcribe.test.ts +0 -454
- package/src/cli/commands/autonomy.ts +0 -365
- package/src/cli/commands/memory.ts +0 -424
- package/src/cli/commands/oauth/__tests__/connect.test.ts +0 -947
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +0 -686
- package/src/cli/commands/oauth/__tests__/mode.test.ts +0 -632
- package/src/cli/commands/oauth/__tests__/ping.test.ts +0 -631
- package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +0 -573
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +0 -330
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +0 -521
- package/src/cli/commands/oauth/__tests__/status.test.ts +0 -551
- package/src/cli/commands/oauth/__tests__/token.test.ts +0 -420
- package/src/cli/lib/daemon-avatar-client.ts +0 -37
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -87
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +0 -207
- package/src/daemon/__tests__/conversation-feed-event.test.ts +0 -304
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +0 -233
- package/src/home/__tests__/assistant-feed-authoring.test.ts +0 -156
- package/src/home/__tests__/emit-feed-event.test.ts +0 -169
- package/src/home/__tests__/feed-population-integration.test.ts +0 -312
- package/src/home/__tests__/feed-scheduler.test.ts +0 -222
- package/src/home/__tests__/phase5-exit-criteria.test.ts +0 -229
- package/src/home/__tests__/platform-gmail-digest.test.ts +0 -222
- package/src/home/__tests__/rollup-producer.test.ts +0 -507
- package/src/home/assistant-feed-authoring.ts +0 -135
- package/src/home/emit-feed-event.ts +0 -169
- package/src/home/feed-scheduler.ts +0 -281
- package/src/home/platform-gmail-digest.ts +0 -163
- package/src/home/rewrite-command-preview.ts +0 -66
- package/src/home/rewrite-feed-title.ts +0 -58
- package/src/home/rollup-producer.ts +0 -426
- package/src/memory/admin.ts +0 -326
- package/src/memory/context-search/sources/pkb.ts +0 -476
- package/src/memory/graph/compaction.ts +0 -299
- /package/src/cli/{commands → lib}/cache-fs.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { v4 as uuid } from "uuid";
|
|
2
2
|
|
|
3
|
-
import type { InterfaceId } from "../channels/types.js";
|
|
4
3
|
import {
|
|
5
4
|
assistantEventHub,
|
|
6
5
|
broadcastMessage,
|
|
7
6
|
} from "../runtime/assistant-event-hub.js";
|
|
7
|
+
import { enforceSameActorOrErrorResult } from "../runtime/auth/same-actor.js";
|
|
8
8
|
import * as pendingInteractions from "../runtime/pending-interactions.js";
|
|
9
9
|
import type { ToolExecutionResult } from "../tools/types.js";
|
|
10
10
|
import { AssistantError, ErrorCode } from "../util/errors.js";
|
|
@@ -24,11 +24,49 @@ export type HostBrowserInput = DistributiveOmit<
|
|
|
24
24
|
|
|
25
25
|
const log = getLogger("host-browser-proxy");
|
|
26
26
|
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Pick the host_browser-capable client to dispatch to.
|
|
29
|
+
*
|
|
30
|
+
* When `targetClientId` is supplied, the client with that id is looked
|
|
31
|
+
* up directly in the `host_browser`-capable roster. The same-actor check
|
|
32
|
+
* in `request()` still runs on the returned client when
|
|
33
|
+
* `sourceActorPrincipalId` is present.
|
|
34
|
+
*
|
|
35
|
+
* When `sourceActorPrincipalId` is supplied (and no explicit target),
|
|
36
|
+
* candidate clients are filtered down to those owned by the same actor.
|
|
37
|
+
* Returns `undefined` when no same-actor client is connected; the
|
|
38
|
+
* caller surfaces this as the existing "no active extension connection"
|
|
39
|
+
* rejection.
|
|
40
|
+
*
|
|
41
|
+
* When neither is supplied (legacy callers without a resolved actor
|
|
42
|
+
* identity), falls through to the most-recently-active host_browser
|
|
43
|
+
* client so the registry singleton continues to work for single-client
|
|
44
|
+
* setups.
|
|
45
|
+
*
|
|
46
|
+
* Within each branch, ties are broken by `lastActiveAt` descending —
|
|
47
|
+
* the natural order returned by `listClientsByCapability`. Callers that
|
|
48
|
+
* need a specific transport (e.g. Chrome Extension's `chrome.debugger`
|
|
49
|
+
* over the macOS CDP bridge) must pass `targetClientId` explicitly via
|
|
50
|
+
* the LLM-facing param added in #30066.
|
|
51
|
+
*/
|
|
52
|
+
function resolveTargetClient(
|
|
53
|
+
sourceActorPrincipalId: string | undefined,
|
|
54
|
+
targetClientId?: string,
|
|
55
|
+
) {
|
|
56
|
+
if (targetClientId != null) {
|
|
57
|
+
const clients = assistantEventHub.listClientsByCapability("host_browser");
|
|
58
|
+
return clients.find((c) => c.clientId === targetClientId);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const candidates =
|
|
62
|
+
assistantEventHub.listClientsByCapability("host_browser");
|
|
63
|
+
if (sourceActorPrincipalId == null) {
|
|
64
|
+
return candidates[0];
|
|
65
|
+
}
|
|
66
|
+
return candidates.find(
|
|
67
|
+
(c) => c.actorPrincipalId === sourceActorPrincipalId,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
32
70
|
|
|
33
71
|
export class HostBrowserProxy {
|
|
34
72
|
private static _instance: HostBrowserProxy | null = null;
|
|
@@ -67,10 +105,7 @@ export class HostBrowserProxy {
|
|
|
67
105
|
*/
|
|
68
106
|
isAvailable(): boolean {
|
|
69
107
|
return (
|
|
70
|
-
assistantEventHub.
|
|
71
|
-
"host_browser",
|
|
72
|
-
HOST_BROWSER_INTERFACE_PREFERENCE,
|
|
73
|
-
) != null
|
|
108
|
+
assistantEventHub.getMostRecentClientByCapability("host_browser") != null
|
|
74
109
|
);
|
|
75
110
|
}
|
|
76
111
|
|
|
@@ -84,15 +119,64 @@ export class HostBrowserProxy {
|
|
|
84
119
|
return assistantEventHub.listClientsByInterface("chrome-extension").length > 0;
|
|
85
120
|
}
|
|
86
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Send a host_browser request to the connected extension/macOS bridge.
|
|
124
|
+
*
|
|
125
|
+
* When `targetClientId` is supplied, the proxy dispatches to that specific
|
|
126
|
+
* client (subject to the `host_browser` capability check and the same-actor
|
|
127
|
+
* gate below). This mirrors the `target_client_id` pattern on `host_bash`,
|
|
128
|
+
* `host_file_*`, and `host_cu`.
|
|
129
|
+
*
|
|
130
|
+
* When `sourceActorPrincipalId` is supplied, the proxy refuses to dispatch
|
|
131
|
+
* to a client owned by a different actor — same-user enforcement is the
|
|
132
|
+
* authoritative gate against routing one actor's CDP request onto another
|
|
133
|
+
* actor's connected extension. The resolved target's `clientId` and
|
|
134
|
+
* `actorPrincipalId` are then persisted alongside the pending interaction
|
|
135
|
+
* so that the result-route's same-actor check can verify the submitting
|
|
136
|
+
* client at result time.
|
|
137
|
+
*
|
|
138
|
+
* When `sourceActorPrincipalId` is undefined (legacy/internal flows
|
|
139
|
+
* with no resolved actor identity), falls back to the most-recently-
|
|
140
|
+
* active host_browser client without an actor filter so the registry
|
|
141
|
+
* singleton continues to work for single-client setups.
|
|
142
|
+
*/
|
|
87
143
|
request(
|
|
88
144
|
input: HostBrowserInput,
|
|
89
145
|
conversationId: string,
|
|
90
146
|
signal?: AbortSignal,
|
|
147
|
+
sourceActorPrincipalId?: string,
|
|
148
|
+
targetClientId?: string,
|
|
91
149
|
): Promise<ToolExecutionResult> {
|
|
92
150
|
if (signal?.aborted) {
|
|
93
151
|
return Promise.resolve({ content: "Aborted", isError: true });
|
|
94
152
|
}
|
|
95
153
|
|
|
154
|
+
// Resolve the target client up front so we can persist the actor binding
|
|
155
|
+
// alongside the pending interaction registration. Same shape as
|
|
156
|
+
// host-cu-proxy: the result-route same-actor check compares the
|
|
157
|
+
// submitting client's actor against this captured value.
|
|
158
|
+
const preferredClient = resolveTargetClient(sourceActorPrincipalId, targetClientId);
|
|
159
|
+
|
|
160
|
+
// Same-user enforcement: when the caller's actor is known, refuse to
|
|
161
|
+
// dispatch to a client owned by a different actor. This covers the
|
|
162
|
+
// cross-client exposure case where a web/iOS turn for actor A would
|
|
163
|
+
// otherwise auto-resolve to actor B's connected extension.
|
|
164
|
+
if (
|
|
165
|
+
sourceActorPrincipalId != null &&
|
|
166
|
+
preferredClient != null &&
|
|
167
|
+
preferredClient.actorPrincipalId !== sourceActorPrincipalId
|
|
168
|
+
) {
|
|
169
|
+
const rejection = enforceSameActorOrErrorResult({
|
|
170
|
+
hub: assistantEventHub,
|
|
171
|
+
sourceActorPrincipalId,
|
|
172
|
+
targetClientId: preferredClient.clientId,
|
|
173
|
+
op: "host_browser",
|
|
174
|
+
});
|
|
175
|
+
if (rejection) return Promise.resolve(rejection);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const resolvedClientId = preferredClient?.clientId;
|
|
179
|
+
const targetActorPrincipalId = preferredClient?.actorPrincipalId;
|
|
96
180
|
const requestId = uuid();
|
|
97
181
|
|
|
98
182
|
return new Promise<ToolExecutionResult>((resolve, reject) => {
|
|
@@ -135,6 +219,8 @@ export class HostBrowserProxy {
|
|
|
135
219
|
pendingInteractions.register(requestId, {
|
|
136
220
|
conversationId,
|
|
137
221
|
kind: "host_browser",
|
|
222
|
+
targetClientId: resolvedClientId,
|
|
223
|
+
targetActorPrincipalId,
|
|
138
224
|
rpcResolve: resolve as (v: unknown) => void,
|
|
139
225
|
rpcReject: reject,
|
|
140
226
|
timer,
|
|
@@ -142,10 +228,6 @@ export class HostBrowserProxy {
|
|
|
142
228
|
});
|
|
143
229
|
|
|
144
230
|
try {
|
|
145
|
-
const preferredClient = assistantEventHub.getPreferredClientByCapability(
|
|
146
|
-
"host_browser",
|
|
147
|
-
HOST_BROWSER_INTERFACE_PREFERENCE,
|
|
148
|
-
);
|
|
149
231
|
if (!preferredClient) {
|
|
150
232
|
pendingInteractions.resolve(requestId);
|
|
151
233
|
reject(
|
|
@@ -172,27 +254,6 @@ export class HostBrowserProxy {
|
|
|
172
254
|
});
|
|
173
255
|
}
|
|
174
256
|
|
|
175
|
-
/**
|
|
176
|
-
* Process a client result and resolve the RPC. Called by route handlers.
|
|
177
|
-
*/
|
|
178
|
-
resolveResult(
|
|
179
|
-
requestId: string,
|
|
180
|
-
response: { content: string; isError: boolean },
|
|
181
|
-
): void {
|
|
182
|
-
const interaction = pendingInteractions.resolve(requestId);
|
|
183
|
-
if (!interaction?.rpcResolve) {
|
|
184
|
-
log.debug(
|
|
185
|
-
{ requestId },
|
|
186
|
-
"Ignoring host_browser_result for unknown or already-resolved request",
|
|
187
|
-
);
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
interaction.rpcResolve({
|
|
191
|
-
content: response.content,
|
|
192
|
-
isError: response.isError,
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
|
|
196
257
|
dispose(): void {
|
|
197
258
|
for (const entry of pendingInteractions.getByKind("host_browser")) {
|
|
198
259
|
pendingInteractions.resolve(entry.requestId);
|
|
@@ -141,8 +141,10 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
141
141
|
signal?: AbortSignal,
|
|
142
142
|
extraFields?: Record<string, unknown>,
|
|
143
143
|
targetClientId?: string,
|
|
144
|
+
timeoutMsOverride?: number,
|
|
144
145
|
): Promise<TResultPayload> {
|
|
145
146
|
const requestId = uuid();
|
|
147
|
+
const effectiveTimeoutMs = timeoutMsOverride ?? this.timeoutMs;
|
|
146
148
|
|
|
147
149
|
return new Promise<TResultPayload>((resolve, reject) => {
|
|
148
150
|
// Declared up-front so onAbort can close over a stable reference once
|
|
@@ -158,7 +160,7 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
158
160
|
"Host proxy request timed out",
|
|
159
161
|
);
|
|
160
162
|
reject(new HostProxyRequestError("timeout", "timeout"));
|
|
161
|
-
},
|
|
163
|
+
}, effectiveTimeoutMs);
|
|
162
164
|
|
|
163
165
|
if (signal) {
|
|
164
166
|
const onAbort = () => {
|
|
@@ -204,10 +206,20 @@ export abstract class HostProxyBase<TRequest, TResultPayload> {
|
|
|
204
206
|
// (HostCuProxy bypasses dispatchRequest entirely with its own inline
|
|
205
207
|
// request method that registers directly, which is why CU works
|
|
206
208
|
// without this base-level fix.)
|
|
209
|
+
// Snapshot the target's actorPrincipalId at registration time so the
|
|
210
|
+
// result-route same-actor check has a stable value to compare against —
|
|
211
|
+
// the target client's SSE subscription may briefly disconnect between
|
|
212
|
+
// dispatch and result submission, which would make a live hub lookup
|
|
213
|
+
// falsely 403 a legitimate result.
|
|
214
|
+
const targetActorPrincipalId =
|
|
215
|
+
targetClientId != null
|
|
216
|
+
? assistantEventHub.getActorPrincipalIdForClient(targetClientId)
|
|
217
|
+
: undefined;
|
|
207
218
|
pendingInteractions.register(requestId, {
|
|
208
219
|
conversationId,
|
|
209
220
|
kind: this.resultPendingKind,
|
|
210
221
|
...(targetClientId != null ? { targetClientId } : {}),
|
|
222
|
+
...(targetActorPrincipalId != null ? { targetActorPrincipalId } : {}),
|
|
211
223
|
});
|
|
212
224
|
|
|
213
225
|
try {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
import type { HostProxyCapability, InterfaceId } from "../channels/types.js";
|
|
30
30
|
import { supportsHostProxy } from "../channels/types.js";
|
|
31
|
+
import { assistantEventHub } from "../runtime/assistant-event-hub.js";
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* Subset of Conversation/ProcessConversationContext that
|
|
@@ -60,6 +61,29 @@ export const HOST_PROXY_SKILL_PREACTIVATIONS: ReadonlyArray<{
|
|
|
60
61
|
{ capability: "host_app_control", skillId: "app-control" },
|
|
61
62
|
];
|
|
62
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Returns true when a host-proxy for the given capability should be attached
|
|
66
|
+
* (instantiated and preactivated) for the current turn. Two cases qualify:
|
|
67
|
+
*
|
|
68
|
+
* 1. The source interface natively supports the capability (e.g. macOS → host_cu).
|
|
69
|
+
* 2. The source interface doesn't support the capability natively but at least
|
|
70
|
+
* one connected client does — cross-client routing. `chrome-extension` is
|
|
71
|
+
* excluded as a security boundary: it is its own executor context and cannot
|
|
72
|
+
* broker cross-client routing to a macOS client.
|
|
73
|
+
*
|
|
74
|
+
* This is the single source of truth for both preactivation and proxy
|
|
75
|
+
* instantiation, so the two decisions stay in sync.
|
|
76
|
+
*/
|
|
77
|
+
export function shouldAttachHostProxyForCapability(
|
|
78
|
+
capability: HostProxyCapability,
|
|
79
|
+
sourceInterface: InterfaceId | undefined,
|
|
80
|
+
): boolean {
|
|
81
|
+
if (!sourceInterface) return false;
|
|
82
|
+
if (supportsHostProxy(sourceInterface, capability)) return true;
|
|
83
|
+
if (sourceInterface === "chrome-extension") return false;
|
|
84
|
+
return assistantEventHub.listClientsByCapability(capability).length > 0;
|
|
85
|
+
}
|
|
86
|
+
|
|
63
87
|
/**
|
|
64
88
|
* Preactivate every host-proxy-backed skill that the given source interface
|
|
65
89
|
* supports. No-op when `sourceInterface` is undefined.
|
|
@@ -75,7 +99,7 @@ export function preactivateHostProxySkills(
|
|
|
75
99
|
): void {
|
|
76
100
|
if (!sourceInterface) return;
|
|
77
101
|
for (const { capability, skillId } of HOST_PROXY_SKILL_PREACTIVATIONS) {
|
|
78
|
-
if (
|
|
102
|
+
if (shouldAttachHostProxyForCapability(capability, sourceInterface)) {
|
|
79
103
|
conversation.addPreactivatedSkillId(skillId);
|
|
80
104
|
}
|
|
81
105
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
2
3
|
|
|
3
4
|
import { getWorkspacePromptPath } from "../util/platform.js";
|
|
4
5
|
|
|
@@ -14,3 +15,21 @@ export function getAssistantName(): string | null {
|
|
|
14
15
|
return null;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Read the guardian's display name from `users/default.md`. We look for the
|
|
21
|
+
* markdown-bold "Name" label (matching the IDENTITY.md convention) and fall
|
|
22
|
+
* back to `null` on any miss; callers substitute a generic label.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveUserName(workspaceDir: string): string | null {
|
|
25
|
+
try {
|
|
26
|
+
const content = readFileSync(
|
|
27
|
+
join(workspaceDir, "users", "default.md"),
|
|
28
|
+
"utf-8",
|
|
29
|
+
);
|
|
30
|
+
const match = content.match(/\*\*Name:\*\*\s*(.+)/);
|
|
31
|
+
return match?.[1]?.trim() || null;
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -31,10 +31,6 @@ import {
|
|
|
31
31
|
} from "../credential-execution/startup-timeout.js";
|
|
32
32
|
import { FilingService } from "../filing/filing-service.js";
|
|
33
33
|
import { HeartbeatService } from "../heartbeat/heartbeat-service.js";
|
|
34
|
-
import {
|
|
35
|
-
type FeedSchedulerHandle,
|
|
36
|
-
startFeedScheduler,
|
|
37
|
-
} from "../home/feed-scheduler.js";
|
|
38
34
|
import { backfillRelationshipStateIfMissing } from "../home/relationship-state-writer.js";
|
|
39
35
|
import { closeSentry, initSentry, setSentryDeviceId } from "../instrument.js";
|
|
40
36
|
import { getMcpServerManager } from "../mcp/manager.js";
|
|
@@ -44,6 +40,7 @@ import {
|
|
|
44
40
|
} from "../memory/attachments-store.js";
|
|
45
41
|
import { expireAllPendingCanonicalRequests } from "../memory/canonical-guardian-store.js";
|
|
46
42
|
import { deleteMessageById, getMessages } from "../memory/conversation-crud.js";
|
|
43
|
+
import { getDb } from "../memory/db-connection.js";
|
|
47
44
|
import { initializeDb } from "../memory/db-init.js";
|
|
48
45
|
import { selectEmbeddingBackend } from "../memory/embedding-backend.js";
|
|
49
46
|
import { enqueueMemoryJob } from "../memory/jobs-store.js";
|
|
@@ -60,6 +57,7 @@ import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
|
60
57
|
import { loadUserPlugins } from "../plugins/user-loader.js";
|
|
61
58
|
import { backfillGuardIfNeeded } from "../proactive-artifact/index.js";
|
|
62
59
|
import { ensurePromptFiles } from "../prompts/system-prompt.js";
|
|
60
|
+
import { runProviderConnectionsBackfill } from "../providers/inference/backfill.js";
|
|
63
61
|
import { resolveManagedProxyContext } from "../providers/managed-proxy/context.js";
|
|
64
62
|
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
65
63
|
import {
|
|
@@ -327,8 +325,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
327
325
|
log.warn({ err }, "Background feature flag init failed"),
|
|
328
326
|
);
|
|
329
327
|
|
|
330
|
-
maybeSeedMemoryV2Skills(loadConfig());
|
|
331
|
-
|
|
332
328
|
seedInterfaceFiles();
|
|
333
329
|
|
|
334
330
|
log.info("Daemon startup: initializing DB");
|
|
@@ -370,6 +366,20 @@ export async function runDaemon(): Promise<void> {
|
|
|
370
366
|
await runWorkspaceMigrations(getWorkspaceDir(), WORKSPACE_MIGRATIONS);
|
|
371
367
|
log.info("Daemon startup: workspace migrations complete");
|
|
372
368
|
|
|
369
|
+
// Seed canonical inference provider_connections and backfill any legacy
|
|
370
|
+
// profiles that pre-date the connection field. Runs after workspace
|
|
371
|
+
// migrations so migration 076 has already stripped services.inference.mode
|
|
372
|
+
// before backfill reads config. Idempotent — runs every boot so new
|
|
373
|
+
// canonicals propagate and manual config.json edits self-heal.
|
|
374
|
+
try {
|
|
375
|
+
runProviderConnectionsBackfill(getDb());
|
|
376
|
+
} catch (err) {
|
|
377
|
+
log.warn(
|
|
378
|
+
{ err },
|
|
379
|
+
"provider_connections backfill failed — continuing startup",
|
|
380
|
+
);
|
|
381
|
+
}
|
|
382
|
+
|
|
373
383
|
// Profiler retention sweep — prune completed profiler runs to stay
|
|
374
384
|
// within configured byte-count, run-count, and free-space budgets.
|
|
375
385
|
// Runs on every startup and is safe to call from explicit cleanup routes.
|
|
@@ -500,15 +510,16 @@ export async function runDaemon(): Promise<void> {
|
|
|
500
510
|
// seeder and persisted alongside schema defaults.
|
|
501
511
|
const defaultConfigMerge = mergeDefaultWorkspaceConfig();
|
|
502
512
|
|
|
503
|
-
// Seed
|
|
504
|
-
//
|
|
505
|
-
//
|
|
506
|
-
//
|
|
507
|
-
// authoritative for this startup.
|
|
513
|
+
// Seed inference profiles into the workspace config. Managed Anthropic
|
|
514
|
+
// profiles are overwritten on every boot so Vellum can push updates.
|
|
515
|
+
// Off-platform hatches additionally create user profiles + a personal
|
|
516
|
+
// provider connection for the hatch provider.
|
|
508
517
|
try {
|
|
509
518
|
seedInferenceProfiles({
|
|
510
519
|
preserveProfileNames: defaultConfigMerge.providedLlmProfileNames,
|
|
511
520
|
preserveActiveProfile: defaultConfigMerge.providedLlmActiveProfile,
|
|
521
|
+
isHatch: defaultConfigMerge.hadOverlay,
|
|
522
|
+
db: dbReady ? getDb() : undefined,
|
|
512
523
|
});
|
|
513
524
|
log.info("Inference profile seeding complete");
|
|
514
525
|
} catch (err) {
|
|
@@ -838,6 +849,26 @@ export async function runDaemon(): Promise<void> {
|
|
|
838
849
|
);
|
|
839
850
|
}
|
|
840
851
|
})();
|
|
852
|
+
|
|
853
|
+
// Validate every concept page's frontmatter against the strict
|
|
854
|
+
// schema and emit a `warn` per offender. Surfaces schema drift
|
|
855
|
+
// (unknown keys, type mismatches) at boot time instead of waiting
|
|
856
|
+
// for the failure to manifest as a silent V2 retrieval no-op when
|
|
857
|
+
// a bad page first lands in a conversation's top-K. Fire-and-forget
|
|
858
|
+
// and the sweep itself never throws — defense in depth via the
|
|
859
|
+
// outer try/catch.
|
|
860
|
+
void (async () => {
|
|
861
|
+
try {
|
|
862
|
+
const { sweepConceptPageFrontmatter } =
|
|
863
|
+
await import("../memory/v2/frontmatter-sweep.js");
|
|
864
|
+
await sweepConceptPageFrontmatter(getWorkspaceDir());
|
|
865
|
+
} catch (err) {
|
|
866
|
+
log.warn(
|
|
867
|
+
{ err },
|
|
868
|
+
"Concept page frontmatter sweep threw — continuing startup",
|
|
869
|
+
);
|
|
870
|
+
}
|
|
871
|
+
})();
|
|
841
872
|
}
|
|
842
873
|
|
|
843
874
|
log.info("Daemon startup: starting memory worker");
|
|
@@ -958,24 +989,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
958
989
|
dedupeKey: `watcher:notification:${crypto.randomUUID()}`,
|
|
959
990
|
});
|
|
960
991
|
},
|
|
961
|
-
(params) => {
|
|
962
|
-
void emitNotificationSignal({
|
|
963
|
-
sourceEventName: "watcher.escalation",
|
|
964
|
-
sourceChannel: "watcher",
|
|
965
|
-
sourceContextId: `watcher-escalation-${Date.now()}`,
|
|
966
|
-
attentionHints: {
|
|
967
|
-
requiresAction: true,
|
|
968
|
-
urgency: "high",
|
|
969
|
-
isAsyncBackground: false,
|
|
970
|
-
visibleInSourceNow: false,
|
|
971
|
-
},
|
|
972
|
-
contextPayload: {
|
|
973
|
-
title: params.title,
|
|
974
|
-
body: params.body,
|
|
975
|
-
},
|
|
976
|
-
dedupeKey: `watcher:escalation:${crypto.randomUUID()}`,
|
|
977
|
-
});
|
|
978
|
-
},
|
|
979
992
|
(info) => {
|
|
980
993
|
broadcastMessage({
|
|
981
994
|
type: "schedule_conversation_created",
|
|
@@ -986,19 +999,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
986
999
|
},
|
|
987
1000
|
);
|
|
988
1001
|
|
|
989
|
-
// Home activity feed scheduler — drives the assistant reflection
|
|
990
|
-
// loop + the platform Gmail digest. Fire-and-forget; a startup
|
|
991
|
-
// failure must never block the rest of daemon boot (CLAUDE.md).
|
|
992
|
-
let feedScheduler: FeedSchedulerHandle | null = null;
|
|
993
|
-
try {
|
|
994
|
-
feedScheduler = startFeedScheduler();
|
|
995
|
-
} catch (err) {
|
|
996
|
-
log.warn(
|
|
997
|
-
{ err },
|
|
998
|
-
"Failed to start home feed scheduler — continuing startup",
|
|
999
|
-
);
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
1002
|
// Start the runtime HTTP server for optional REST API access.
|
|
1003
1003
|
// Defaults to port 7821.
|
|
1004
1004
|
let runtimeHttp: RuntimeHttpServer | null = null;
|
|
@@ -1338,7 +1338,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
1338
1338
|
filing,
|
|
1339
1339
|
runtimeHttp,
|
|
1340
1340
|
scheduler,
|
|
1341
|
-
feedScheduler,
|
|
1342
1341
|
getMemoryWorker: () => bgRefs.memoryWorker,
|
|
1343
1342
|
getQdrantManager: () => bgRefs.qdrantManager,
|
|
1344
1343
|
mcpManager,
|
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
* - `ensureRunning()` — idempotent. First caller triggers
|
|
15
15
|
* `child_process.spawn`, subsequent concurrent callers await the
|
|
16
16
|
* same in-flight promise. Resolves once the child dials
|
|
17
|
-
* `assistant-skill.sock` and
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* a
|
|
17
|
+
* `assistant-skill.sock` and the first `host.registries.register_*`
|
|
18
|
+
* frame lands (which calls {@link setActiveConnection}). Source-hash
|
|
19
|
+
* drift is not validated on this path — `notifyHandshake` exists for
|
|
20
|
+
* a future explicit handshake frame that ships the skill's
|
|
21
|
+
* runtime-computed hash, but no production caller invokes it today.
|
|
21
22
|
*
|
|
22
23
|
* - `reportSessionStarted(id)` / `reportSessionEnded(id)` — mutate
|
|
23
24
|
* the active-session counter, called by the
|
|
@@ -278,15 +279,14 @@ export class MeetHostSupervisor {
|
|
|
278
279
|
}
|
|
279
280
|
|
|
280
281
|
/**
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
* supervisor owning any socket state itself.
|
|
282
|
+
* Validate a handshake payload's reported source hash against the
|
|
283
|
+
* shipped manifest and resolve or reject the in-flight
|
|
284
|
+
* `ensureRunning()` promise accordingly. Currently dormant on the
|
|
285
|
+
* production path — readiness is signalled by the first
|
|
286
|
+
* `host.registries.register_*` frame (see {@link setActiveConnection})
|
|
287
|
+
* which carries no hash. This method is preserved as the integration
|
|
288
|
+
* point for a future explicit handshake frame whose payload ships the
|
|
289
|
+
* skill's runtime-computed hash; only tests exercise it today.
|
|
290
290
|
*/
|
|
291
291
|
notifyHandshake(payload: MeetHostHandshakePayload): void {
|
|
292
292
|
if (!this.handshakeResolve || !this.handshakeReject) {
|
|
@@ -374,8 +374,8 @@ export class MeetHostSupervisor {
|
|
|
374
374
|
// The first `host.registries.register_*` frame doubles as the
|
|
375
375
|
// readiness signal: it means `register(client)` ran to completion and
|
|
376
376
|
// the IPC socket is healthy. Resolve any in-flight handshake so
|
|
377
|
-
// `ensureRunning()` unblocks.
|
|
378
|
-
//
|
|
377
|
+
// `ensureRunning()` unblocks. No source-hash check happens here —
|
|
378
|
+
// see {@link notifyHandshake} for the dormant validation path.
|
|
379
379
|
this.handshakeResolve?.();
|
|
380
380
|
}
|
|
381
381
|
|
|
@@ -55,8 +55,11 @@ export async function maybeRebuildMemoryV2Concepts(
|
|
|
55
55
|
if (!config.memory.v2.enabled) return;
|
|
56
56
|
|
|
57
57
|
try {
|
|
58
|
-
const {
|
|
59
|
-
|
|
58
|
+
const {
|
|
59
|
+
ensureConceptPageCollection,
|
|
60
|
+
countConceptPagePoints,
|
|
61
|
+
clearReembedSentinel,
|
|
62
|
+
} = await import("../memory/v2/qdrant.js");
|
|
60
63
|
const { hasConceptPages } = await import("../memory/v2/page-store.js");
|
|
61
64
|
const { enqueueMemoryJob } = await import("../memory/jobs-store.js");
|
|
62
65
|
|
|
@@ -76,6 +79,10 @@ export async function maybeRebuildMemoryV2Concepts(
|
|
|
76
79
|
{ jobId, collectionMigrated: migrated },
|
|
77
80
|
"Memory v2 collection rebuild required — enqueued reembed job",
|
|
78
81
|
);
|
|
82
|
+
// Clear the on-disk sentinel that the qdrant ensure-path writes before
|
|
83
|
+
// delete: now that reembed is queued, the cross-call signal can retire.
|
|
84
|
+
// If the sentinel never existed this is a no-op.
|
|
85
|
+
await clearReembedSentinel();
|
|
79
86
|
}
|
|
80
87
|
} catch (err) {
|
|
81
88
|
log.warn(
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// Re-export domain modules (all individual types remain importable)
|
|
16
16
|
export * from "./message-types/acp.js";
|
|
17
17
|
export * from "./message-types/apps.js";
|
|
18
|
+
export * from "./message-types/bookmarks.js";
|
|
18
19
|
export * from "./message-types/browser.js";
|
|
19
20
|
export * from "./message-types/computer-use.js";
|
|
20
21
|
export * from "./message-types/contacts.js";
|
|
@@ -42,6 +43,7 @@ export * from "./message-types/shared.js";
|
|
|
42
43
|
export * from "./message-types/skills.js";
|
|
43
44
|
export * from "./message-types/subagents.js";
|
|
44
45
|
export * from "./message-types/surfaces.js";
|
|
46
|
+
export * from "./message-types/sync.js";
|
|
45
47
|
export * from "./message-types/upgrades.js";
|
|
46
48
|
export * from "./message-types/work-items.js";
|
|
47
49
|
export * from "./message-types/workspace.js";
|
|
@@ -52,6 +54,7 @@ import type {
|
|
|
52
54
|
_AppsClientMessages,
|
|
53
55
|
_AppsServerMessages,
|
|
54
56
|
} from "./message-types/apps.js";
|
|
57
|
+
import type { _BookmarksServerMessages } from "./message-types/bookmarks.js";
|
|
55
58
|
import type {
|
|
56
59
|
_BrowserClientMessages,
|
|
57
60
|
_BrowserServerMessages,
|
|
@@ -129,6 +132,7 @@ import type {
|
|
|
129
132
|
_SurfacesClientMessages,
|
|
130
133
|
_SurfacesServerMessages,
|
|
131
134
|
} from "./message-types/surfaces.js";
|
|
135
|
+
import type { _SyncInvalidationServerMessages } from "./message-types/sync.js";
|
|
132
136
|
import type { _UpgradesServerMessages } from "./message-types/upgrades.js";
|
|
133
137
|
import type {
|
|
134
138
|
_WorkItemsClientMessages,
|
|
@@ -188,6 +192,7 @@ export type ServerMessage =
|
|
|
188
192
|
| _SubagentsServerMessages
|
|
189
193
|
| _DocumentsServerMessages
|
|
190
194
|
| _GuardianActionsServerMessages
|
|
195
|
+
| _SyncInvalidationServerMessages
|
|
191
196
|
| _HomeServerMessages
|
|
192
197
|
| _HostAppControlServerMessages
|
|
193
198
|
| _HostBashServerMessages
|
|
@@ -205,6 +210,7 @@ export type ServerMessage =
|
|
|
205
210
|
| _NotificationsServerMessages
|
|
206
211
|
| _UpgradesServerMessages
|
|
207
212
|
| _AcpServerMessages
|
|
213
|
+
| _BookmarksServerMessages
|
|
208
214
|
| _DiskPressureServerMessages
|
|
209
215
|
| SubagentEvent;
|
|
210
216
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Bookmark events. Surfaced over SSE so a `BookmarkStore` instance in any
|
|
2
|
+
// connected client can stay in sync when another window mutates the list.
|
|
3
|
+
|
|
4
|
+
import type { BookmarkSummary } from "../../memory/bookmark-crud.js";
|
|
5
|
+
|
|
6
|
+
export interface BookmarkCreated {
|
|
7
|
+
type: "bookmark.created";
|
|
8
|
+
bookmark: BookmarkSummary;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface BookmarkDeleted {
|
|
12
|
+
type: "bookmark.deleted";
|
|
13
|
+
messageId: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// --- Domain-level union aliases (consumed by the barrel file) ---
|
|
17
|
+
|
|
18
|
+
export type _BookmarksServerMessages = BookmarkCreated | BookmarkDeleted;
|
|
@@ -138,12 +138,6 @@ export interface ModelGetRequest {
|
|
|
138
138
|
type: "model_get";
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
export interface ModelSetRequest {
|
|
142
|
-
type: "model_set";
|
|
143
|
-
model: string;
|
|
144
|
-
provider?: string;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
141
|
export interface ImageGenModelSetRequest {
|
|
148
142
|
type: "image_gen_model_set";
|
|
149
143
|
model: string;
|
|
@@ -310,8 +304,14 @@ export interface GenerationHandoff {
|
|
|
310
304
|
queuedCount: number;
|
|
311
305
|
attachments?: UserMessageAttachment[];
|
|
312
306
|
attachmentWarnings?: string[];
|
|
313
|
-
/** Database ID of the persisted assistant
|
|
307
|
+
/** Database ID of the final persisted assistant row, if any. */
|
|
314
308
|
messageId?: string;
|
|
309
|
+
/**
|
|
310
|
+
* Database ID used by clients for the rendered assistant bubble. Tool turns
|
|
311
|
+
* may persist multiple assistant rows; this matches the history row that
|
|
312
|
+
* survives query-time merging.
|
|
313
|
+
*/
|
|
314
|
+
displayMessageId?: string;
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
export interface ModelInfo {
|
|
@@ -387,7 +387,10 @@ export interface HistoryResponse {
|
|
|
387
387
|
type: "history_response";
|
|
388
388
|
conversationId: string;
|
|
389
389
|
messages: Array<{
|
|
390
|
-
|
|
390
|
+
/** Database ID used by clients for the rendered message bubble. */
|
|
391
|
+
id?: string;
|
|
392
|
+
/** Concrete persisted row ID for row-scoped actions such as TTS/fork. */
|
|
393
|
+
daemonMessageId?: string;
|
|
391
394
|
role: string;
|
|
392
395
|
text: string;
|
|
393
396
|
timestamp: number;
|
|
@@ -527,6 +530,7 @@ export type ConversationErrorCode =
|
|
|
527
530
|
| "MANAGED_USAGE_LIMIT"
|
|
528
531
|
| "PROVIDER_OVERLOADED"
|
|
529
532
|
| "PROVIDER_API"
|
|
533
|
+
| "IMAGE_TOO_LARGE"
|
|
530
534
|
| "PROVIDER_BILLING"
|
|
531
535
|
| "PROVIDER_ORDERING"
|
|
532
536
|
| "PROVIDER_WEB_SEARCH"
|
|
@@ -597,7 +601,6 @@ export type _ConversationsClientMessages =
|
|
|
597
601
|
| CancelRequest
|
|
598
602
|
| DeleteQueuedMessage
|
|
599
603
|
| ModelGetRequest
|
|
600
|
-
| ModelSetRequest
|
|
601
604
|
| ImageGenModelSetRequest
|
|
602
605
|
| UndoRequest
|
|
603
606
|
| UsageRequest
|