@vellumai/assistant 0.7.3 → 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/ARCHITECTURE.md +29 -28
- package/Dockerfile +6 -4
- package/README.md +2 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +236 -9
- package/bun.lock +3 -0
- 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 +3 -1
- package/node_modules/@vellumai/ipc-server-utils/bun.lock +24 -0
- package/node_modules/@vellumai/ipc-server-utils/package.json +18 -0
- package/node_modules/@vellumai/ipc-server-utils/src/index.ts +6 -0
- package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.test.ts +430 -0
- package/node_modules/@vellumai/ipc-server-utils/src/socket-watchdog.ts +221 -0
- package/node_modules/@vellumai/ipc-server-utils/tsconfig.json +20 -0
- package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
- package/openapi.yaml +4126 -959
- package/package.json +5 -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__/annotate-risk-options.test.ts +291 -0
- package/src/__tests__/anthropic-provider.test.ts +92 -2
- package/src/__tests__/app-control-flow.test.ts +7 -0
- package/src/__tests__/approval-cascade.test.ts +8 -16
- package/src/__tests__/approval-routes-http.test.ts +6 -0
- package/src/__tests__/assistant-events-sse-shed.test.ts +232 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +12 -25
- 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-constants.test.ts +10 -1
- package/src/__tests__/call-controller.test.ts +127 -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 +88 -30
- 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 +345 -8
- 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-source.test.ts +3 -26
- 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-abort-tool-results.test.ts +1 -6
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -1
- package/src/__tests__/conversation-agent-loop.test.ts +3 -3
- package/src/__tests__/conversation-confirmation-signals.test.ts +5 -13
- 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 +2 -1
- 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 +22 -7
- package/src/__tests__/conversation-provider-retry-repair.test.ts +1 -6
- package/src/__tests__/conversation-runtime-assembly.test.ts +19 -10
- package/src/__tests__/conversation-slash-commands.test.ts +194 -2
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -6
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +170 -9
- package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +73 -1
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +59 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +1 -7
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -7
- 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 +25 -22
- 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 +10 -34
- 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__/injector-chain.test.ts +24 -16
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +10 -7
- 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 +169 -67
- 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-decision-fallback.test.ts +91 -0
- package/src/__tests__/notification-decision-strategy.test.ts +22 -0
- package/src/__tests__/notification-platform-adapter.test.ts +229 -0
- package/src/__tests__/oauth-cli.test.ts +38 -1888
- 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 +164 -2
- 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-prompt-log-hygiene.test.ts +7 -5
- package/src/__tests__/secret-prompter-channel-fallback.test.ts +7 -5
- package/src/__tests__/secret-response-routing.test.ts +7 -5
- package/src/__tests__/secret-routes-managed-proxy.test.ts +12 -4
- package/src/__tests__/server-history-render.test.ts +82 -0
- 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-include-graph.test.ts +31 -0
- package/src/__tests__/skill-load-feature-flag.test.ts +1 -0
- package/src/__tests__/skill-load-tool.test.ts +42 -16
- package/src/__tests__/skills.test.ts +39 -0
- 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__/tool-execution-pipeline.benchmark.test.ts +0 -42
- package/src/__tests__/tool-executor.test.ts +155 -0
- 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__/voice-session-bridge.test.ts +3 -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 +153 -0
- package/src/__tests__/workspace-migration-071-remove-safe-storage-release-note.test.ts +206 -0
- 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-safe-storage-limits-release.test.ts +15 -27
- 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/agent/loop.ts +11 -0
- package/src/approvals/guardian-decision-primitive.ts +0 -13
- package/src/approvals/guardian-request-resolvers.ts +19 -102
- package/src/calls/call-constants.ts +5 -8
- package/src/calls/call-controller.ts +130 -67
- package/src/calls/relay-server.ts +42 -1
- package/src/calls/relay-setup-router.ts +36 -0
- package/src/calls/types.ts +1 -0
- package/src/calls/voice-session-bridge.ts +24 -5
- 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 +163 -517
- package/src/cli/commands/notifications.ts +33 -7
- package/src/cli/commands/oauth/apps.ts +292 -261
- package/src/cli/commands/oauth/connect.ts +182 -345
- 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-builder/SKILL.md +1 -3
- 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 +17 -17
- package/src/config/llm-resolver.ts +16 -1
- package/src/config/loader.ts +148 -33
- 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 +33 -2
- 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 +111 -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 +56 -0
- package/src/daemon/conversation-agent-loop.ts +140 -107
- package/src/daemon/conversation-error.ts +21 -0
- package/src/daemon/conversation-lifecycle.ts +68 -13
- 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 +92 -26
- package/src/daemon/conversation-tool-setup.ts +33 -19
- package/src/daemon/conversation.ts +49 -10
- 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/shared.ts +26 -0
- 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 +97 -36
- package/src/daemon/host-cu-proxy.ts +1 -1
- package/src/daemon/host-file-proxy.ts +1 -1
- package/src/daemon/host-proxy-base.ts +13 -1
- package/src/daemon/host-proxy-preactivation.ts +25 -1
- package/src/daemon/host-transfer-proxy.ts +2 -2
- package/src/daemon/identity-helpers.ts +19 -0
- package/src/daemon/lifecycle.ts +128 -114
- package/src/daemon/meet-host-supervisor.ts +15 -15
- package/src/daemon/memory-v2-startup.ts +62 -14
- 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 +28 -2
- 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/documents/document-store.ts +35 -1
- package/src/export/transcript-formatter.ts +61 -2
- package/src/filing/filing-service.ts +42 -56
- 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 +149 -128
- 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 +148 -42
- 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/ipc/skill-server.ts +99 -42
- 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__/jobs-worker-v2-schedule.test.ts +10 -57
- 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 +40 -31
- package/src/memory/context-search/sources/memory.ts +9 -2
- 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__/conversation-graph-memory-v2-routing.test.ts +104 -61
- package/src/memory/graph/__tests__/handle-remember-v2.test.ts +11 -26
- package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
- package/src/memory/graph/conversation-graph-memory.ts +108 -14
- package/src/memory/graph/extraction.ts +4 -0
- package/src/memory/graph/graph-memory-state-store.ts +16 -3
- package/src/memory/graph/graph-search.test.ts +6 -5
- package/src/memory/graph/graph-search.ts +3 -4
- package/src/memory/graph/retriever.test.ts +12 -7
- package/src/memory/graph/retriever.ts +4 -5
- package/src/memory/graph/tool-handlers.ts +20 -11
- package/src/memory/graph/tools.ts +48 -9
- package/src/memory/indexer.ts +18 -2
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +120 -6
- package/src/memory/jobs/embed-concept-page.ts +261 -89
- package/src/memory/jobs-store.ts +51 -1
- package/src/memory/jobs-worker.ts +60 -7
- 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/pkb/pkb-search.test.ts +6 -5
- package/src/memory/pkb/pkb-search.ts +4 -5
- package/src/memory/published-pages-store.ts +16 -0
- package/src/memory/qdrant-client.ts +3 -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 +5 -9
- 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 +46 -9
- package/src/memory/v2/__tests__/backfill-jobs.test.ts +38 -21
- package/src/memory/v2/__tests__/consolidation-job.test.ts +140 -163
- 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 +768 -33
- 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 +382 -9
- 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 +163 -8
- package/src/memory/v2/__tests__/skill-store.test.ts +58 -3
- package/src/memory/v2/__tests__/static-context.test.ts +8 -35
- package/src/memory/v2/__tests__/sweep-job.test.ts +114 -33
- 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 +92 -86
- package/src/memory/v2/frontmatter-sweep.ts +91 -0
- package/src/memory/v2/injection.ts +466 -115
- package/src/memory/v2/migration.ts +117 -20
- package/src/memory/v2/page-index.ts +191 -0
- package/src/memory/v2/page-store.ts +42 -0
- package/src/memory/v2/prompts/consolidation.ts +14 -7
- package/src/memory/v2/prompts/router.ts +192 -0
- package/src/memory/v2/qdrant.ts +307 -133
- package/src/memory/v2/reranker.ts +14 -7
- package/src/memory/v2/router.ts +322 -0
- package/src/memory/v2/sim.ts +88 -34
- package/src/memory/v2/skill-store.ts +118 -29
- package/src/memory/v2/static-context.ts +20 -17
- package/src/memory/v2/sweep-job.ts +127 -102
- package/src/memory/v2/types.ts +16 -5
- 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 +61 -12
- package/src/notifications/decision-engine.ts +46 -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/gateway-threshold-reader.ts +116 -8
- package/src/permissions/ipc-risk-types.ts +2 -0
- package/src/permissions/prompter.ts +86 -96
- package/src/permissions/secret-prompter.ts +31 -31
- 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 +20 -5
- 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 +63 -8
- package/src/proactive-artifact/job.ts +20 -2
- package/src/proactive-artifact/message-copy.ts +18 -1
- 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/templates/SOUL.md +13 -28
- 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 +304 -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/channel-approvals.ts +3 -2
- package/src/runtime/guardian-reply-router.ts +0 -10
- 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/pending-interactions.ts +19 -15
- 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 +147 -0
- 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 +7 -21
- 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/consolidation-routes.ts +8 -9
- 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 +373 -82
- 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-bash-routes.ts +2 -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/filing-routes.ts +2 -3
- 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 -7
- 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-item-routes.test.ts +3 -9
- package/src/runtime/routes/memory-item-routes.ts +5 -6
- package/src/runtime/routes/memory-v2-routes.ts +105 -404
- 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/skills/include-graph.ts +35 -13
- 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/document/document-tool.ts +20 -0
- package/src/tools/executor.ts +18 -2
- package/src/tools/memory/register.test.ts +10 -8
- 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 +28 -5
- package/src/tools/skills/load.ts +24 -20
- package/src/tools/subagent/spawn.ts +3 -3
- package/src/tools/terminal/shell.ts +44 -0
- package/src/tools/tool-name-aliases.ts +19 -0
- package/src/tools/types.ts +19 -1
- 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/067-release-notes-safe-storage-limits.ts +4 -62
- package/src/workspace/migrations/069-seed-onboarding-threads.ts +34 -0
- package/src/workspace/migrations/070-memory-v2-summary-schema-rebuild.ts +31 -0
- package/src/workspace/migrations/071-remove-safe-storage-release-note.ts +111 -0
- 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 +28 -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 -492
- 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 -1201
- 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 -477
- package/src/memory/graph/compaction.ts +0 -299
- /package/src/cli/{commands → lib}/cache-fs.ts +0 -0
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -7,10 +7,7 @@ import { reconcileCallsOnStartup } from "../calls/call-recovery.js";
|
|
|
7
7
|
import { setRelayBroadcast } from "../calls/relay-server.js";
|
|
8
8
|
import { TwilioConversationRelayProvider } from "../calls/twilio-provider.js";
|
|
9
9
|
import { setVoiceBridgeDeps } from "../calls/voice-session-bridge.js";
|
|
10
|
-
import {
|
|
11
|
-
initFeatureFlagOverrides,
|
|
12
|
-
isAssistantFeatureFlagEnabled,
|
|
13
|
-
} from "../config/assistant-feature-flags.js";
|
|
10
|
+
import { initFeatureFlagOverrides } from "../config/assistant-feature-flags.js";
|
|
14
11
|
import {
|
|
15
12
|
getPlatformAssistantId,
|
|
16
13
|
getRuntimeHttpHost,
|
|
@@ -34,10 +31,6 @@ import {
|
|
|
34
31
|
} from "../credential-execution/startup-timeout.js";
|
|
35
32
|
import { FilingService } from "../filing/filing-service.js";
|
|
36
33
|
import { HeartbeatService } from "../heartbeat/heartbeat-service.js";
|
|
37
|
-
import {
|
|
38
|
-
type FeedSchedulerHandle,
|
|
39
|
-
startFeedScheduler,
|
|
40
|
-
} from "../home/feed-scheduler.js";
|
|
41
34
|
import { backfillRelationshipStateIfMissing } from "../home/relationship-state-writer.js";
|
|
42
35
|
import { closeSentry, initSentry, setSentryDeviceId } from "../instrument.js";
|
|
43
36
|
import { getMcpServerManager } from "../mcp/manager.js";
|
|
@@ -47,6 +40,7 @@ import {
|
|
|
47
40
|
} from "../memory/attachments-store.js";
|
|
48
41
|
import { expireAllPendingCanonicalRequests } from "../memory/canonical-guardian-store.js";
|
|
49
42
|
import { deleteMessageById, getMessages } from "../memory/conversation-crud.js";
|
|
43
|
+
import { getDb } from "../memory/db-connection.js";
|
|
50
44
|
import { initializeDb } from "../memory/db-init.js";
|
|
51
45
|
import { selectEmbeddingBackend } from "../memory/embedding-backend.js";
|
|
52
46
|
import { enqueueMemoryJob } from "../memory/jobs-store.js";
|
|
@@ -63,6 +57,7 @@ import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
|
63
57
|
import { loadUserPlugins } from "../plugins/user-loader.js";
|
|
64
58
|
import { backfillGuardIfNeeded } from "../proactive-artifact/index.js";
|
|
65
59
|
import { ensurePromptFiles } from "../prompts/system-prompt.js";
|
|
60
|
+
import { runProviderConnectionsBackfill } from "../providers/inference/backfill.js";
|
|
66
61
|
import { resolveManagedProxyContext } from "../providers/managed-proxy/context.js";
|
|
67
62
|
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
68
63
|
import {
|
|
@@ -117,7 +112,10 @@ import {
|
|
|
117
112
|
} from "./guardian-action-generators.js";
|
|
118
113
|
import { backfillSlackInjectionTemplates } from "./handlers/config-slack-channel.js";
|
|
119
114
|
import { installAssistantSymlink } from "./install-symlink.js";
|
|
120
|
-
import {
|
|
115
|
+
import {
|
|
116
|
+
maybeRebuildMemoryV2Concepts,
|
|
117
|
+
maybeSeedMemoryV2Skills,
|
|
118
|
+
} from "./memory-v2-startup.js";
|
|
121
119
|
import { processMessage } from "./process-message.js";
|
|
122
120
|
import { runProfilerSweep } from "./profiler-run-store.js";
|
|
123
121
|
import {
|
|
@@ -318,21 +316,14 @@ export async function runDaemon(): Promise<void> {
|
|
|
318
316
|
const signingKey = resolveSigningKey();
|
|
319
317
|
initAuthSigningKey(signingKey);
|
|
320
318
|
|
|
321
|
-
// Pre-populate
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
//
|
|
325
|
-
//
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
// before the gateway has populated overrides, so a cold-boot race
|
|
330
|
-
// can leave the v2 skill collection unseeded for the lifetime of
|
|
331
|
-
// the daemon. seedV2SkillEntries is idempotent, so re-running after
|
|
332
|
-
// overrides land is safe.
|
|
333
|
-
void initFeatureFlagOverrides()
|
|
334
|
-
.then(() => maybeSeedMemoryV2Skills(loadConfig()))
|
|
335
|
-
.catch((err) => log.warn({ err }, "Background feature flag init failed"));
|
|
319
|
+
// Pre-populate feature flag overrides so subsequent sync
|
|
320
|
+
// isAssistantFeatureFlagEnabled() calls have data. Fired non-blocking
|
|
321
|
+
// so a slow or unreachable gateway doesn't delay daemon startup (the
|
|
322
|
+
// IPC call has a 3s connect + 5s call timeout that would otherwise
|
|
323
|
+
// stall the critical path).
|
|
324
|
+
void initFeatureFlagOverrides().catch((err) =>
|
|
325
|
+
log.warn({ err }, "Background feature flag init failed"),
|
|
326
|
+
);
|
|
336
327
|
|
|
337
328
|
seedInterfaceFiles();
|
|
338
329
|
|
|
@@ -375,6 +366,20 @@ export async function runDaemon(): Promise<void> {
|
|
|
375
366
|
await runWorkspaceMigrations(getWorkspaceDir(), WORKSPACE_MIGRATIONS);
|
|
376
367
|
log.info("Daemon startup: workspace migrations complete");
|
|
377
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
|
+
|
|
378
383
|
// Profiler retention sweep — prune completed profiler runs to stay
|
|
379
384
|
// within configured byte-count, run-count, and free-space budgets.
|
|
380
385
|
// Runs on every startup and is safe to call from explicit cleanup routes.
|
|
@@ -505,15 +510,16 @@ export async function runDaemon(): Promise<void> {
|
|
|
505
510
|
// seeder and persisted alongside schema defaults.
|
|
506
511
|
const defaultConfigMerge = mergeDefaultWorkspaceConfig();
|
|
507
512
|
|
|
508
|
-
// Seed
|
|
509
|
-
//
|
|
510
|
-
//
|
|
511
|
-
//
|
|
512
|
-
// 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.
|
|
513
517
|
try {
|
|
514
518
|
seedInferenceProfiles({
|
|
515
519
|
preserveProfileNames: defaultConfigMerge.providedLlmProfileNames,
|
|
516
520
|
preserveActiveProfile: defaultConfigMerge.providedLlmActiveProfile,
|
|
521
|
+
isHatch: defaultConfigMerge.hadOverlay,
|
|
522
|
+
db: dbReady ? getDb() : undefined,
|
|
517
523
|
});
|
|
518
524
|
log.info("Inference profile seeding complete");
|
|
519
525
|
} catch (err) {
|
|
@@ -741,64 +747,87 @@ export async function runDaemon(): Promise<void> {
|
|
|
741
747
|
}
|
|
742
748
|
|
|
743
749
|
if (qdrantStarted) {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
collection
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
750
|
+
// Skip the v1 Qdrant collection lifecycle when memory v2 is active —
|
|
751
|
+
// the v1 collection has no writers (handleRemember returns early) or
|
|
752
|
+
// readers (graph search is bypassed) under v2, so ensuring/migrating
|
|
753
|
+
// it just maintains a dead-on-arrival collection. Existing on-disk
|
|
754
|
+
// collections are left intact so flipping v2 off restores v1 cleanly.
|
|
755
|
+
if (!config.memory.v2.enabled) {
|
|
756
|
+
try {
|
|
757
|
+
const embeddingSelection = await selectEmbeddingBackend(config);
|
|
758
|
+
// Sentinel only encodes the dense provider+model identity; sparse
|
|
759
|
+
// encoder changes never require collection recreation, so they
|
|
760
|
+
// intentionally do not contribute to the v1 collection identity.
|
|
761
|
+
const embeddingModel = embeddingSelection.backend
|
|
762
|
+
? `${embeddingSelection.backend.provider}:${embeddingSelection.backend.model}`
|
|
763
|
+
: undefined;
|
|
764
|
+
const qdrantClient = initQdrantClient({
|
|
765
|
+
url: qdrantUrl,
|
|
766
|
+
collection: config.memory.qdrant.collection,
|
|
767
|
+
vectorSize: config.memory.qdrant.vectorSize,
|
|
768
|
+
onDisk: config.memory.qdrant.onDisk,
|
|
769
|
+
quantization: config.memory.qdrant.quantization,
|
|
770
|
+
embeddingModel,
|
|
771
|
+
});
|
|
760
772
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
773
|
+
// Eagerly ensure the collection exists so we detect migrations
|
|
774
|
+
// (unnamed→named vectors, dimension/model changes) at startup.
|
|
775
|
+
// If a destructive migration occurred, enqueue a rebuild_index job
|
|
776
|
+
// to re-embed all memory items from the SQLite cache.
|
|
777
|
+
const { migrated } = await qdrantClient.ensureCollection();
|
|
778
|
+
if (migrated) {
|
|
779
|
+
enqueueMemoryJob("rebuild_index", {});
|
|
780
|
+
log.info(
|
|
781
|
+
"Qdrant collection was migrated — enqueued rebuild_index job",
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
log.info("Qdrant vector store initialized");
|
|
786
|
+
} catch (err) {
|
|
787
|
+
log.warn(
|
|
788
|
+
{ err },
|
|
789
|
+
"Qdrant client initialization failed — memory features will be degraded",
|
|
770
790
|
);
|
|
771
791
|
}
|
|
792
|
+
}
|
|
772
793
|
|
|
773
|
-
|
|
794
|
+
// Detect schema drift on the v2 concept-page collection (e.g.
|
|
795
|
+
// pre-#29823 collections lacking summary_dense / summary_sparse) and
|
|
796
|
+
// recreate + enqueue a reembed when needed. Awaited inline so the
|
|
797
|
+
// reembed enqueue happens before the memory worker drains its first
|
|
798
|
+
// batch; the call's own try/catch keeps any v2-side failure from
|
|
799
|
+
// blocking the v1 PKB reconcile or BM25 build below.
|
|
800
|
+
try {
|
|
801
|
+
await maybeRebuildMemoryV2Concepts(config);
|
|
774
802
|
} catch (err) {
|
|
775
803
|
log.warn(
|
|
776
804
|
{ err },
|
|
777
|
-
"
|
|
805
|
+
"Memory v2 collection schema check threw — continuing startup",
|
|
778
806
|
);
|
|
779
807
|
}
|
|
780
808
|
|
|
781
|
-
// Reconcile the PKB Qdrant index against the on-disk tree.
|
|
782
|
-
//
|
|
783
|
-
// `getQdrantClient()`
|
|
784
|
-
//
|
|
785
|
-
//
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
809
|
+
// Reconcile the PKB Qdrant index against the on-disk tree. Gated on
|
|
810
|
+
// !v2 because PKB is the v1 storage layer; under v2 the v1 collection
|
|
811
|
+
// is not initialized, so calling `getQdrantClient()` here would throw.
|
|
812
|
+
// Fire-and-forget so enqueued re-index jobs drain in the background
|
|
813
|
+
// and first-turn latency stays unaffected.
|
|
814
|
+
if (!config.memory.v2.enabled) {
|
|
815
|
+
void (async () => {
|
|
816
|
+
try {
|
|
817
|
+
const { reconcilePkbIndex } =
|
|
818
|
+
await import("../memory/pkb/pkb-reconcile.js");
|
|
819
|
+
const { PKB_WORKSPACE_SCOPE } =
|
|
820
|
+
await import("../memory/pkb/types.js");
|
|
821
|
+
const pkbRoot = join(getWorkspaceDir(), "pkb");
|
|
822
|
+
await reconcilePkbIndex(pkbRoot, PKB_WORKSPACE_SCOPE);
|
|
823
|
+
} catch (err) {
|
|
824
|
+
log.warn(
|
|
825
|
+
{ err },
|
|
826
|
+
"PKB index reconciliation failed — continuing startup",
|
|
827
|
+
);
|
|
828
|
+
}
|
|
829
|
+
})();
|
|
830
|
+
}
|
|
802
831
|
|
|
803
832
|
// Build the BM25 corpus stats (per-token document frequencies and
|
|
804
833
|
// average document length) used by the v2 sparse channel. Without
|
|
@@ -820,6 +849,26 @@ export async function runDaemon(): Promise<void> {
|
|
|
820
849
|
);
|
|
821
850
|
}
|
|
822
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
|
+
})();
|
|
823
872
|
}
|
|
824
873
|
|
|
825
874
|
log.info("Daemon startup: starting memory worker");
|
|
@@ -940,24 +989,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
940
989
|
dedupeKey: `watcher:notification:${crypto.randomUUID()}`,
|
|
941
990
|
});
|
|
942
991
|
},
|
|
943
|
-
(params) => {
|
|
944
|
-
void emitNotificationSignal({
|
|
945
|
-
sourceEventName: "watcher.escalation",
|
|
946
|
-
sourceChannel: "watcher",
|
|
947
|
-
sourceContextId: `watcher-escalation-${Date.now()}`,
|
|
948
|
-
attentionHints: {
|
|
949
|
-
requiresAction: true,
|
|
950
|
-
urgency: "high",
|
|
951
|
-
isAsyncBackground: false,
|
|
952
|
-
visibleInSourceNow: false,
|
|
953
|
-
},
|
|
954
|
-
contextPayload: {
|
|
955
|
-
title: params.title,
|
|
956
|
-
body: params.body,
|
|
957
|
-
},
|
|
958
|
-
dedupeKey: `watcher:escalation:${crypto.randomUUID()}`,
|
|
959
|
-
});
|
|
960
|
-
},
|
|
961
992
|
(info) => {
|
|
962
993
|
broadcastMessage({
|
|
963
994
|
type: "schedule_conversation_created",
|
|
@@ -968,19 +999,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
968
999
|
},
|
|
969
1000
|
);
|
|
970
1001
|
|
|
971
|
-
// Home activity feed scheduler — drives the assistant reflection
|
|
972
|
-
// loop + the platform Gmail digest. Fire-and-forget; a startup
|
|
973
|
-
// failure must never block the rest of daemon boot (CLAUDE.md).
|
|
974
|
-
let feedScheduler: FeedSchedulerHandle | null = null;
|
|
975
|
-
try {
|
|
976
|
-
feedScheduler = startFeedScheduler();
|
|
977
|
-
} catch (err) {
|
|
978
|
-
log.warn(
|
|
979
|
-
{ err },
|
|
980
|
-
"Failed to start home feed scheduler — continuing startup",
|
|
981
|
-
);
|
|
982
|
-
}
|
|
983
|
-
|
|
984
1002
|
// Start the runtime HTTP server for optional REST API access.
|
|
985
1003
|
// Defaults to port 7821.
|
|
986
1004
|
let runtimeHttp: RuntimeHttpServer | null = null;
|
|
@@ -1283,14 +1301,11 @@ export async function runDaemon(): Promise<void> {
|
|
|
1283
1301
|
log.warn({ err }, "Proactive artifact backfill failed");
|
|
1284
1302
|
}
|
|
1285
1303
|
|
|
1286
|
-
// Filing yields to the memory v2 consolidation job when
|
|
1304
|
+
// Filing yields to the memory v2 consolidation job when v2 is enabled —
|
|
1287
1305
|
// both serve the same role (periodic background memory processing) and
|
|
1288
1306
|
// running both is redundant. The consolidation job runs through the
|
|
1289
1307
|
// memory jobs worker (see `maybeEnqueueGraphMaintenanceJobs`).
|
|
1290
|
-
const memoryV2Enabled =
|
|
1291
|
-
"memory-v2-enabled",
|
|
1292
|
-
config,
|
|
1293
|
-
);
|
|
1308
|
+
const memoryV2Enabled = config.memory.v2.enabled;
|
|
1294
1309
|
let filing: FilingService | null = null;
|
|
1295
1310
|
if (!memoryV2Enabled) {
|
|
1296
1311
|
const filingConfig = config.filing;
|
|
@@ -1323,7 +1338,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
1323
1338
|
filing,
|
|
1324
1339
|
runtimeHttp,
|
|
1325
1340
|
scheduler,
|
|
1326
|
-
feedScheduler,
|
|
1327
1341
|
getMemoryWorker: () => bgRefs.memoryWorker,
|
|
1328
1342
|
getQdrantManager: () => bgRefs.qdrantManager,
|
|
1329
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
|
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
// startup work invoked from `lifecycle.ts`. Lives in its own file so the unit
|
|
7
7
|
// test for the gate does not have to mount the entire lifecycle import graph.
|
|
8
8
|
|
|
9
|
-
import { isAssistantFeatureFlagEnabled } from "../config/assistant-feature-flags.js";
|
|
10
9
|
import type { AssistantConfig } from "../config/schema.js";
|
|
11
10
|
import { getLogger } from "../util/logger.js";
|
|
11
|
+
import { getWorkspaceDir } from "../util/platform.js";
|
|
12
12
|
|
|
13
13
|
const log = getLogger("memory-v2-startup");
|
|
14
14
|
|
|
@@ -16,21 +16,12 @@ const log = getLogger("memory-v2-startup");
|
|
|
16
16
|
* Fire-and-forget seed of the v2 skill entries (now indexed alongside concept
|
|
17
17
|
* pages in `memory_v2_concept_pages` under the `skills/<id>` slug prefix), and
|
|
18
18
|
* a one-shot best-effort cleanup of the legacy `memory_v2_skills` Qdrant
|
|
19
|
-
* collection.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* Uses a dynamic import so v2 code does not load unless the gate passes.
|
|
24
|
-
* Never awaits — startup must not block on this (see `assistant/CLAUDE.md`
|
|
25
|
-
* daemon startup philosophy).
|
|
19
|
+
* collection. Uses a dynamic import so v2 code does not load unless the gate
|
|
20
|
+
* passes. Never awaits — startup must not block on this (see
|
|
21
|
+
* `assistant/CLAUDE.md` daemon startup philosophy).
|
|
26
22
|
*/
|
|
27
23
|
export function maybeSeedMemoryV2Skills(config: AssistantConfig): void {
|
|
28
|
-
if (
|
|
29
|
-
!isAssistantFeatureFlagEnabled("memory-v2-enabled", config) ||
|
|
30
|
-
!config.memory.v2.enabled
|
|
31
|
-
) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
24
|
+
if (!config.memory.v2.enabled) return;
|
|
34
25
|
void import("../memory/v2/skill-store.js")
|
|
35
26
|
.then(({ seedV2SkillEntries }) => seedV2SkillEntries())
|
|
36
27
|
.catch((err) => log.warn({ err }, "Failed to seed v2 skill entries"));
|
|
@@ -43,3 +34,60 @@ export function maybeSeedMemoryV2Skills(config: AssistantConfig): void {
|
|
|
43
34
|
),
|
|
44
35
|
);
|
|
45
36
|
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Reconcile the v2 concept-page Qdrant collection with the expected schema
|
|
40
|
+
* and enqueue `memory_v2_reembed` when the collection is missing data.
|
|
41
|
+
* Triggers reembed in two cases:
|
|
42
|
+
* - Drift: `ensureConceptPageCollection` returned `{ migrated: true }`
|
|
43
|
+
* after destructively recreating the collection (e.g. pre-#29823
|
|
44
|
+
* schemas lacking `summary_*` named vectors).
|
|
45
|
+
* - Empty-after-create: the collection has zero points but pages exist on
|
|
46
|
+
* disk — covers crash-mid-rebuild and external Qdrant wipes.
|
|
47
|
+
*
|
|
48
|
+
* Awaited inline by `lifecycle.ts` so the enqueue happens before the memory
|
|
49
|
+
* worker drains its first batch; the body is wrapped in try/catch so a v2
|
|
50
|
+
* failure never blocks startup.
|
|
51
|
+
*/
|
|
52
|
+
export async function maybeRebuildMemoryV2Concepts(
|
|
53
|
+
config: AssistantConfig,
|
|
54
|
+
): Promise<void> {
|
|
55
|
+
if (!config.memory.v2.enabled) return;
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const {
|
|
59
|
+
ensureConceptPageCollection,
|
|
60
|
+
countConceptPagePoints,
|
|
61
|
+
clearReembedSentinel,
|
|
62
|
+
} = await import("../memory/v2/qdrant.js");
|
|
63
|
+
const { hasConceptPages } = await import("../memory/v2/page-store.js");
|
|
64
|
+
const { enqueueMemoryJob } = await import("../memory/jobs-store.js");
|
|
65
|
+
|
|
66
|
+
const { migrated } = await ensureConceptPageCollection();
|
|
67
|
+
|
|
68
|
+
let shouldReembed = migrated;
|
|
69
|
+
if (!shouldReembed) {
|
|
70
|
+
const points = await countConceptPagePoints();
|
|
71
|
+
if (points === 0 && (await hasConceptPages(getWorkspaceDir()))) {
|
|
72
|
+
shouldReembed = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (shouldReembed) {
|
|
77
|
+
const jobId = enqueueMemoryJob("memory_v2_reembed", {});
|
|
78
|
+
log.info(
|
|
79
|
+
{ jobId, collectionMigrated: migrated },
|
|
80
|
+
"Memory v2 collection rebuild required — enqueued reembed job",
|
|
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();
|
|
86
|
+
}
|
|
87
|
+
} catch (err) {
|
|
88
|
+
log.warn(
|
|
89
|
+
{ err },
|
|
90
|
+
"Memory v2 collection schema check failed — continuing startup; v2 retrieval may be degraded",
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -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
|