@vellumai/assistant 0.7.1 → 0.7.3
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/ARCHITECTURE.md +48 -50
- package/Dockerfile +1 -0
- package/README.md +1 -2
- package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
- package/bun.lock +26 -26
- package/docs/architecture/memory.md +5 -2
- package/docs/architecture/security.md +20 -0
- package/docs/plugins.md +7 -9
- package/knip.json +1 -0
- package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +52 -5
- package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
- package/node_modules/@vellumai/service-contracts/package.json +2 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
- package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
- package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
- package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
- package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
- package/node_modules/@vellumai/slack-text/src/index.test.ts +18 -35
- package/node_modules/@vellumai/slack-text/src/index.ts +2 -48
- package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
- package/node_modules/@vellumai/twilio-client/package.json +18 -0
- package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
- package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
- package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
- package/openapi.yaml +1020 -40
- package/package.json +6 -3
- package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
- package/src/__tests__/app-bundler.test.ts +170 -1
- package/src/__tests__/app-control-flow.test.ts +384 -0
- package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
- package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
- package/src/__tests__/app-executors.test.ts +30 -43
- package/src/__tests__/approval-routes-http.test.ts +23 -6
- package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
- package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
- package/src/__tests__/assistant-event-hub.test.ts +157 -2
- package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -7
- package/src/__tests__/auto-analysis-end-to-end.test.ts +62 -1
- package/src/__tests__/background-shell-host-bash.test.ts +14 -15
- package/src/__tests__/background-workers-disk-pressure.test.ts +268 -0
- package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
- package/src/__tests__/btw-routes.test.ts +13 -4
- package/src/__tests__/call-controller.test.ts +49 -1
- package/src/__tests__/call-conversation-messages.test.ts +8 -2
- package/src/__tests__/call-domain.test.ts +0 -2
- package/src/__tests__/call-routes-http.test.ts +0 -2
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +537 -0
- package/src/__tests__/channel-readiness-service.test.ts +62 -2
- package/src/__tests__/checker.test.ts +3 -4
- package/src/__tests__/config-loader-backfill.test.ts +461 -147
- package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
- package/src/__tests__/config-schema-cmd.test.ts +0 -1
- package/src/__tests__/config-schema.test.ts +1 -0
- package/src/__tests__/config-set-platform-guard.test.ts +48 -4
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +20 -11
- package/src/__tests__/config-watcher.test.ts +142 -71
- package/src/__tests__/context-search-agent-runner.test.ts +61 -3
- package/src/__tests__/context-search-conversations-source.test.ts +0 -24
- package/src/__tests__/context-search-fanout.test.ts +0 -1
- package/src/__tests__/context-search-memory-source.test.ts +3 -7
- package/src/__tests__/context-search-memory-v2-source.test.ts +0 -2
- package/src/__tests__/context-search-pkb-source.test.ts +0 -1
- package/src/__tests__/context-search-workspace-source.test.ts +0 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +223 -0
- package/src/__tests__/conversation-agent-loop.test.ts +454 -5
- package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
- package/src/__tests__/conversation-error.test.ts +150 -3
- package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
- package/src/__tests__/conversation-lifecycle.test.ts +36 -0
- package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
- package/src/__tests__/conversation-process-callsite.test.ts +43 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +65 -0
- package/src/__tests__/conversation-slash-commands.test.ts +0 -4
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-store.test.ts +0 -18
- package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +328 -0
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +404 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +2 -5
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
- package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
- package/src/__tests__/credentials-cli.test.ts +12 -12
- package/src/__tests__/cu-unified-flow.test.ts +351 -23
- package/src/__tests__/daemon-credential-client.test.ts +101 -19
- package/src/__tests__/date-context.test.ts +164 -2
- package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
- package/src/__tests__/disk-pressure-guard.test.ts +262 -0
- package/src/__tests__/disk-pressure-lifecycle.test.ts +168 -0
- package/src/__tests__/disk-pressure-policy.test.ts +241 -0
- package/src/__tests__/disk-pressure-routes.test.ts +379 -0
- package/src/__tests__/disk-pressure-tools.test.ts +277 -0
- package/src/__tests__/disk-usage.test.ts +150 -0
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
- package/src/__tests__/events-client-registration.test.ts +52 -0
- package/src/__tests__/events-dev-bypass-actor.test.ts +162 -0
- package/src/__tests__/file-write-tool.test.ts +4 -10
- package/src/__tests__/filing-service.test.ts +3 -4
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
- package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
- package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +183 -0
- package/src/__tests__/heartbeat-service.test.ts +968 -2
- package/src/__tests__/helpers/call-route-handler.ts +7 -1
- package/src/__tests__/host-app-control-proxy.test.ts +772 -0
- package/src/__tests__/host-app-control-routes.test.ts +263 -0
- package/src/__tests__/host-bash-proxy.test.ts +439 -47
- package/src/__tests__/host-bash-routes.test.ts +459 -0
- package/src/__tests__/host-browser-proxy.test.ts +24 -22
- package/src/__tests__/host-browser-routes.test.ts +39 -13
- package/src/__tests__/host-cu-proxy.test.ts +248 -52
- package/src/__tests__/host-cu-routes-targeted.test.ts +429 -0
- package/src/__tests__/host-file-edit-tool.test.ts +47 -1
- package/src/__tests__/host-file-proxy-targeted.test.ts +378 -0
- package/src/__tests__/host-file-proxy.test.ts +301 -45
- package/src/__tests__/host-file-read-tool.test.ts +17 -0
- package/src/__tests__/host-file-routes-targeted.test.ts +420 -0
- package/src/__tests__/host-file-write-tool.test.ts +42 -1
- package/src/__tests__/host-proxy-base.test.ts +312 -0
- package/src/__tests__/host-shell-tool.test.ts +22 -4
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +932 -0
- package/src/__tests__/host-transfer-proxy.test.ts +121 -22
- package/src/__tests__/host-transfer-routes-targeted.test.ts +662 -0
- package/src/__tests__/http-user-message-parity.test.ts +108 -1
- package/src/__tests__/identity-intro-cache.test.ts +29 -0
- package/src/__tests__/identity-routes.test.ts +103 -1
- package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
- package/src/__tests__/injector-chain.test.ts +18 -6
- package/src/__tests__/injector-disk-pressure.test.ts +224 -0
- package/src/__tests__/inline-command-runner.test.ts +0 -1
- package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
- package/src/__tests__/integration-status.test.ts +85 -5
- package/src/__tests__/intent-routing.test.ts +0 -1
- package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
- package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
- package/src/__tests__/managed-profile-guard.test.ts +18 -0
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
- package/src/__tests__/mcp-abort-signal.test.ts +130 -0
- package/src/__tests__/mcp-auth-routes.test.ts +197 -0
- package/src/__tests__/mcp-cli.test.ts +338 -2
- package/src/__tests__/memory-admin-recall.test.ts +3 -11
- package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
- package/src/__tests__/memory-retrieval-pipeline.test.ts +22 -1
- package/src/__tests__/migration-import-commit-http.test.ts +108 -2
- package/src/__tests__/mock-gateway-ipc.ts +1 -0
- package/src/__tests__/normalize-onboarding.test.ts +180 -0
- package/src/__tests__/oauth-cli.test.ts +0 -2
- package/src/__tests__/oauth-connect-routes.test.ts +316 -0
- package/src/__tests__/oauth-provider-seed-logos.test.ts +24 -2
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
- package/src/__tests__/onboarding-persona-write.test.ts +308 -0
- package/src/__tests__/openai-provider.test.ts +45 -8
- package/src/__tests__/persist-onboarding-artifacts.test.ts +44 -64
- package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
- package/src/__tests__/platform-callback-registration.test.ts +21 -4
- package/src/__tests__/platform.test.ts +2 -1
- package/src/__tests__/playbook-execution.test.ts +0 -43
- package/src/__tests__/plugin-tool-contribution.test.ts +47 -0
- package/src/__tests__/prechat-onboarding-contract.test.ts +214 -25
- package/src/__tests__/process-message-background-slack.test.ts +2 -0
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
- package/src/__tests__/provider-tool-name.test.ts +23 -0
- package/src/__tests__/public-ingress-urls.test.ts +97 -0
- package/src/__tests__/relay-server.test.ts +15 -4
- package/src/__tests__/require-fresh-approval.test.ts +0 -1
- package/src/__tests__/retry-backoff.test.ts +87 -0
- package/src/__tests__/runtime-events-sse.test.ts +2 -2
- package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
- package/src/__tests__/schedule-retry.test.ts +715 -0
- package/src/__tests__/scheduler-disk-pressure.test.ts +148 -0
- package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
- package/src/__tests__/secret-ingress-http.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
- package/src/__tests__/skill-feature-flags.test.ts +43 -41
- package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
- package/src/__tests__/skill-load-inline-command.test.ts +0 -51
- package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -1
- package/src/__tests__/slack-channel-config.test.ts +9 -14
- package/src/__tests__/suggestion-routes.test.ts +46 -0
- package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
- package/src/__tests__/system-prompt.test.ts +0 -1
- package/src/__tests__/telegram-config.test.ts +0 -1
- package/src/__tests__/test-preload.ts +8 -0
- package/src/__tests__/tool-approval-handler.test.ts +3 -4
- package/src/__tests__/tool-audit-listener.test.ts +48 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
- package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/twilio-config.test.ts +3 -16
- package/src/__tests__/twilio-routes.test.ts +3 -5
- package/src/__tests__/twilio-validation.test.ts +93 -0
- package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -4
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
- package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
- package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
- package/src/__tests__/workspace-migration-065-bump-stale-heartbeat-interval.test.ts +122 -0
- package/src/__tests__/workspace-migration-066-seed-heartbeat-callsite-cost-default.test.ts +285 -0
- package/src/__tests__/workspace-migration-068-release-notes-local-timezone.test.ts +90 -0
- package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
- package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
- package/src/__tests__/workspace-migration-safe-storage-limits-release.test.ts +90 -0
- package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
- package/src/approvals/guardian-decision-primitive.ts +13 -0
- package/src/approvals/guardian-request-resolvers.ts +16 -17
- package/src/backup/__tests__/paths.test.ts +0 -22
- package/src/backup/__tests__/restore.test.ts +51 -151
- package/src/backup/paths.ts +2 -18
- package/src/backup/restore.ts +107 -231
- package/src/backup/snapshot-lock.ts +2 -27
- package/src/bundler/app-bundler.ts +51 -3
- package/src/bundler/compiler-tools.ts +3 -2
- package/src/calls/call-conversation-messages.ts +46 -10
- package/src/calls/relay-server.ts +4 -44
- package/src/calls/twilio-config.ts +2 -17
- package/src/calls/twilio-rest.ts +33 -105
- package/src/calls/twilio-routes.ts +11 -12
- package/src/channels/types.ts +8 -7
- package/src/cli/commands/__tests__/backup.test.ts +6 -277
- package/src/cli/commands/__tests__/gateway.test.ts +288 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -5
- package/src/cli/commands/backup.ts +6 -331
- package/src/cli/commands/bash.ts +35 -108
- package/src/cli/commands/clients.ts +36 -37
- package/src/cli/commands/contacts.ts +137 -25
- package/src/cli/commands/conversations.ts +2 -5
- package/src/cli/commands/credentials.ts +71 -7
- package/src/cli/commands/domain.ts +66 -15
- package/src/cli/commands/gateway.ts +183 -0
- package/src/cli/commands/keys.ts +9 -6
- package/src/cli/commands/mcp.ts +116 -156
- package/src/cli/commands/memory-v2.ts +303 -7
- package/src/cli/commands/oauth/__tests__/connect.test.ts +437 -1
- package/src/cli/commands/oauth/connect.ts +127 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -4
- package/src/cli/commands/platform/__tests__/connect.test.ts +7 -3
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -3
- package/src/cli/commands/platform/__tests__/status.test.ts +116 -21
- package/src/cli/commands/platform/disconnect.ts +5 -4
- package/src/cli/commands/platform/index.ts +16 -25
- package/src/cli/commands/status.ts +57 -0
- package/src/cli/lib/daemon-credential-client.ts +110 -28
- package/src/cli/program.ts +6 -2
- package/src/config/assistant-feature-flags.ts +79 -12
- package/src/config/bundled-skills/acp/SKILL.md +6 -0
- package/src/config/bundled-skills/acp/TOOLS.json +1 -22
- package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
- package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
- package/src/config/bundled-skills/app-control/SKILL.md +75 -0
- package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
- package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
- package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
- package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
- package/src/config/bundled-skills/document/TOOLS.json +0 -8
- package/src/config/bundled-skills/followups/TOOLS.json +0 -12
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
- package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -40
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -3
- package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +25 -4
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +2 -2
- package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
- package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
- package/src/config/bundled-skills/settings/SKILL.md +4 -0
- package/src/config/bundled-skills/settings/TOOLS.json +0 -12
- package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
- package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
- package/src/config/bundled-skills/subagent/SKILL.md +6 -2
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
- package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
- package/src/config/bundled-tool-registry.ts +21 -0
- package/src/config/env-registry.ts +0 -2
- package/src/config/env.ts +19 -20
- package/src/config/feature-flag-registry.json +47 -135
- package/src/config/loader.ts +197 -104
- package/src/config/sanitize-for-transfer.ts +2 -0
- package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +17 -9
- package/src/config/schemas/call-site-catalog.ts +14 -0
- package/src/config/schemas/calls.ts +0 -9
- package/src/config/schemas/channels.ts +0 -5
- package/src/config/schemas/heartbeat.ts +64 -1
- package/src/config/schemas/ingress.ts +10 -6
- package/src/config/schemas/llm.ts +7 -10
- package/src/config/schemas/memory-lifecycle.ts +90 -24
- package/src/config/schemas/memory-v2.ts +121 -13
- package/src/config/schemas/platform.ts +49 -3
- package/src/config/schemas/services.ts +29 -15
- package/src/config/schemas/skills.ts +0 -6
- package/src/config/seed-inference-profiles.ts +230 -33
- package/src/contacts/contact-store.ts +0 -55
- package/src/contacts/contacts-write.ts +0 -27
- package/src/context/window-manager.ts +1 -2
- package/src/credential-execution/feature-gates.ts +10 -10
- package/src/credential-execution/process-manager.ts +12 -41
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +187 -5
- package/src/daemon/assistant-attachments.ts +4 -4
- package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
- package/src/daemon/config-watcher.ts +89 -60
- package/src/daemon/conversation-agent-loop-handlers.ts +27 -3
- package/src/daemon/conversation-agent-loop.ts +202 -61
- package/src/daemon/conversation-error.ts +87 -15
- package/src/daemon/conversation-lifecycle.ts +9 -4
- package/src/daemon/conversation-process.ts +24 -11
- package/src/daemon/conversation-runtime-assembly.ts +28 -2
- package/src/daemon/conversation-store.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +305 -4
- package/src/daemon/conversation-tool-setup.ts +66 -62
- package/src/daemon/conversation.ts +38 -24
- package/src/daemon/date-context.ts +71 -22
- package/src/daemon/disk-pressure-background-gate.ts +73 -0
- package/src/daemon/disk-pressure-guard.ts +343 -0
- package/src/daemon/disk-pressure-policy.ts +163 -0
- package/src/daemon/doordash-steps.ts +1 -1
- package/src/daemon/handlers/shared.ts +4 -2
- package/src/daemon/handlers/skills.ts +3 -4
- package/src/daemon/host-app-control-proxy.ts +389 -0
- package/src/daemon/host-bash-proxy.ts +117 -82
- package/src/daemon/host-browser-proxy.ts +67 -82
- package/src/daemon/host-cu-proxy.ts +127 -86
- package/src/daemon/host-file-proxy.ts +129 -69
- package/src/daemon/host-proxy-base.ts +294 -0
- package/src/daemon/host-proxy-preactivation.ts +82 -0
- package/src/daemon/host-transfer-proxy.ts +338 -129
- package/src/daemon/lifecycle.ts +194 -145
- package/src/daemon/meet-host-supervisor.ts +4 -4
- package/src/daemon/meet-manifest-loader.ts +0 -1
- package/src/daemon/memory-v2-startup.ts +14 -4
- package/src/daemon/message-protocol.ts +6 -8
- package/src/daemon/message-types/contacts.ts +23 -1
- package/src/daemon/message-types/conversations.ts +15 -8
- package/src/daemon/message-types/disk-pressure.ts +9 -0
- package/src/daemon/message-types/host-app-control.ts +150 -0
- package/src/daemon/message-types/host-bash.ts +4 -0
- package/src/daemon/message-types/host-cu.ts +2 -0
- package/src/daemon/message-types/host-file.ts +4 -0
- package/src/daemon/message-types/host-transfer.ts +3 -0
- package/src/daemon/message-types/messages.ts +3 -0
- package/src/daemon/message-types/schedules.ts +8 -3
- package/src/daemon/message-types/skills.ts +2 -2
- package/src/daemon/process-message.ts +18 -1
- package/src/daemon/profiler-run-store.ts +5 -5
- package/src/daemon/shutdown-handlers.ts +0 -3
- package/src/daemon/tool-setup-types.ts +51 -0
- package/src/daemon/tool-side-effects.ts +1 -1
- package/src/documents/document-store.ts +85 -0
- package/src/events/tool-audit-listener.ts +2 -1
- package/src/filing/filing-service.ts +30 -5
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +24 -23
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +252 -0
- package/src/heartbeat/heartbeat-run-store.ts +249 -0
- package/src/heartbeat/heartbeat-service.ts +459 -54
- package/src/home/__tests__/post-connect-feed.test.ts +99 -0
- package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
- package/src/home/__tests__/suggested-prompts.test.ts +89 -0
- package/src/home/feed-scheduler.ts +18 -0
- package/src/home/post-connect-feed.ts +68 -0
- package/src/home/relationship-state-writer.ts +17 -92
- package/src/home/suggested-prompts.ts +46 -10
- package/src/inbound/platform-callback-registration.ts +8 -15
- package/src/inbound/public-ingress-urls.ts +32 -34
- package/src/ipc/__tests__/clients-list-ipc.test.ts +169 -0
- package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
- package/src/ipc/assistant-server.ts +70 -3
- package/src/ipc/cli-client.ts +32 -1
- package/src/ipc/gateway-client.ts +37 -3
- package/src/live-voice/live-voice-archive.ts +4 -4
- package/src/live-voice/live-voice-metrics.ts +10 -10
- package/src/live-voice/protocol.ts +5 -7
- package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
- package/src/mcp/mcp-auth-orchestrator.ts +213 -0
- package/src/mcp/mcp-auth-state.ts +133 -0
- package/src/mcp/mcp-oauth-provider.ts +19 -0
- package/src/media/image-service.ts +1 -7
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +21 -13
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +52 -22
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -6
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +272 -0
- package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
- package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
- package/src/memory/admin.ts +5 -9
- package/src/memory/anisotropy.test.ts +247 -0
- package/src/memory/anisotropy.ts +443 -0
- package/src/memory/auto-analysis-constants.ts +17 -0
- package/src/memory/auto-analysis-guard.ts +5 -15
- package/src/memory/canonical-guardian-store.ts +7 -7
- package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
- package/src/memory/context-search/agent-protocol.ts +6 -6
- package/src/memory/context-search/agent-runner.ts +51 -9
- package/src/memory/context-search/sources/conversations.ts +2 -11
- package/src/memory/context-search/sources/memory-v2.ts +22 -9
- package/src/memory/context-search/sources/memory.ts +0 -1
- package/src/memory/context-search/types.ts +0 -1
- package/src/memory/conversation-crud.ts +5 -13
- package/src/memory/conversation-key-store.ts +2 -15
- package/src/memory/db-init.ts +6 -0
- package/src/memory/embedding-backend.ts +9 -21
- package/src/memory/embedding-runtime-manager.ts +119 -5
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +81 -25
- package/src/memory/graph/conversation-graph-memory.ts +43 -78
- package/src/memory/graph/extraction.ts +1 -3
- package/src/memory/graph/graph-search.test.ts +10 -67
- package/src/memory/graph/graph-search.ts +9 -20
- package/src/memory/graph/retriever.test.ts +6 -0
- package/src/memory/graph/retriever.ts +34 -10
- package/src/memory/graph/tools.ts +1 -1
- package/src/memory/indexer.ts +54 -45
- package/src/memory/job-handlers/backfill.ts +2 -11
- package/src/memory/job-handlers/cleanup.ts +43 -0
- package/src/memory/job-handlers/embedding.ts +6 -8
- package/src/memory/job-handlers/summarization.ts +2 -7
- package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
- package/src/memory/jobs/embed-concept-page.ts +28 -2
- package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
- package/src/memory/jobs-store.ts +114 -22
- package/src/memory/jobs-worker.ts +193 -106
- package/src/memory/memory-v2-activation-log-store.ts +33 -15
- package/src/memory/memory-v2-concept-frequency.ts +169 -0
- package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
- package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
- package/src/memory/migrations/239-trace-events-created-at-index.ts +18 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/pkb/pkb-search.test.ts +6 -0
- package/src/memory/pkb/pkb-search.ts +7 -0
- package/src/memory/qdrant-client.ts +49 -32
- package/src/memory/rerank-local.ts +374 -0
- package/src/memory/schema/infrastructure.ts +15 -0
- package/src/memory/search/semantic.ts +13 -67
- package/src/memory/sparse-tokenize.ts +49 -0
- package/src/memory/trace-event-store.ts +1 -17
- package/src/memory/v2/__tests__/activation.test.ts +387 -344
- package/src/memory/v2/__tests__/consolidation-job.test.ts +40 -8
- package/src/memory/v2/__tests__/injection.test.ts +181 -169
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +61 -2
- package/src/memory/v2/__tests__/qdrant.test.ts +16 -0
- package/src/memory/v2/__tests__/reranker.test.ts +338 -0
- package/src/memory/v2/__tests__/sim.test.ts +154 -188
- package/src/memory/v2/__tests__/skill-store.test.ts +71 -65
- package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
- package/src/memory/v2/__tests__/static-context.test.ts +76 -2
- package/src/memory/v2/activation.ts +213 -239
- package/src/memory/v2/consolidation-job.ts +65 -17
- package/src/memory/v2/constants.ts +7 -0
- package/src/memory/v2/injection.ts +123 -103
- package/src/memory/v2/prompts/consolidation.ts +348 -92
- package/src/memory/v2/qdrant.ts +198 -1
- package/src/memory/v2/reranker.ts +177 -0
- package/src/memory/v2/sim.ts +113 -77
- package/src/memory/v2/skill-content.ts +4 -3
- package/src/memory/v2/skill-store.ts +91 -53
- package/src/memory/v2/sparse-bm25.ts +245 -0
- package/src/memory/v2/static-context.ts +28 -5
- package/src/memory/v2/types.ts +10 -10
- package/src/messaging/providers/gmail/types.ts +0 -49
- package/src/messaging/providers/slack/adapter.ts +1 -31
- package/src/messaging/providers/slack/types.ts +0 -32
- package/src/notifications/README.md +10 -10
- package/src/notifications/broadcaster.ts +1 -1
- package/src/notifications/copy-composer.ts +13 -0
- package/src/notifications/guardian-question-mode.ts +5 -5
- package/src/notifications/signal.ts +4 -0
- package/src/oauth/AGENTS.md +3 -1
- package/src/oauth/__tests__/oauth-connect-state.test.ts +137 -0
- package/src/oauth/connect-orchestrator.ts +6 -0
- package/src/oauth/connection-resolver.test.ts +66 -1
- package/src/oauth/connection-resolver.ts +55 -1
- package/src/oauth/credential-token-resolver.ts +1 -3
- package/src/oauth/manual-token-connection.ts +0 -4
- package/src/oauth/oauth-connect-state.ts +77 -0
- package/src/oauth/seed-providers.ts +58 -1
- package/src/outbound-proxy/index.ts +1 -37
- package/src/outbound-proxy/logging.ts +1 -1
- package/src/outbound-proxy/policy.ts +6 -5
- package/src/outbound-proxy/router.ts +2 -1
- package/src/permissions/approval-policy.test.ts +6 -275
- package/src/permissions/approval-policy.ts +0 -51
- package/src/permissions/checker.test.ts +0 -1
- package/src/permissions/checker.ts +3 -17
- package/src/permissions/gateway-threshold-reader.ts +2 -0
- package/src/permissions/prompter.ts +34 -1
- package/src/permissions/secret-prompter.ts +6 -2
- package/src/plugins/defaults/injectors.ts +35 -2
- package/src/plugins/defaults/memory-retrieval.ts +5 -6
- package/src/plugins/types.ts +7 -0
- package/src/proactive-artifact/aux-message-injector.ts +74 -0
- package/src/proactive-artifact/decision.test.ts +226 -0
- package/src/proactive-artifact/decision.ts +165 -0
- package/src/proactive-artifact/index.ts +7 -0
- package/src/proactive-artifact/job.test.ts +867 -0
- package/src/proactive-artifact/job.ts +352 -0
- package/src/proactive-artifact/message-copy.ts +41 -0
- package/src/proactive-artifact/trigger-state.test.ts +277 -0
- package/src/proactive-artifact/trigger-state.ts +119 -0
- package/src/prompts/bootstrap-cleanup.ts +27 -0
- package/src/prompts/normalize-onboarding.ts +80 -0
- package/src/prompts/persona-resolver.ts +101 -9
- package/src/prompts/system-prompt.ts +23 -24
- package/src/prompts/templates/BOOTSTRAP.md +13 -5
- package/src/prompts/templates/SOUL.md +13 -1
- package/src/providers/__tests__/retry-callsite.test.ts +222 -1
- package/src/providers/model-intents.ts +7 -0
- package/src/providers/openrouter/client.ts +8 -0
- package/src/providers/retry.ts +50 -0
- package/src/providers/speech-to-text/provider-catalog.ts +7 -8
- package/src/providers/types.ts +1 -0
- package/src/runtime/__tests__/agent-wake.test.ts +456 -3
- package/src/runtime/agent-wake.ts +238 -100
- package/src/runtime/assistant-event-hub.ts +151 -99
- package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
- package/src/runtime/auth/__tests__/route-policy.test.ts +64 -0
- package/src/runtime/auth/middleware.ts +0 -96
- package/src/runtime/auth/route-policy.ts +32 -0
- package/src/runtime/auth/same-actor.ts +216 -0
- package/src/runtime/btw-sidechain.ts +2 -3
- package/src/runtime/channel-invite-transport.ts +2 -48
- package/src/runtime/channel-invite-transports/email.ts +1 -1
- package/src/runtime/channel-invite-transports/slack.ts +1 -1
- package/src/runtime/channel-invite-transports/telegram.ts +1 -1
- package/src/runtime/channel-invite-transports/voice.ts +1 -1
- package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
- package/src/runtime/channel-invite-types.ts +54 -0
- package/src/runtime/channel-readiness-service.ts +32 -13
- package/src/runtime/channel-retry-sweep.ts +65 -1
- package/src/runtime/guardian-reply-router.ts +10 -0
- package/src/runtime/http-server.ts +3 -329
- package/src/runtime/http-types.ts +0 -5
- package/src/runtime/local-actor-identity.ts +52 -11
- package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
- package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
- package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +153 -1
- package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
- package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
- package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +51 -1
- package/src/runtime/migrations/migration-transport.ts +7 -7
- package/src/runtime/migrations/vbundle-builder.ts +327 -60
- package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
- package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
- package/src/runtime/migrations/vbundle-importer.ts +245 -68
- package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
- package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
- package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
- package/src/runtime/migrations/vbundle-validator.ts +114 -0
- package/src/runtime/pending-interactions.ts +43 -9
- package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
- package/src/runtime/routes/__tests__/client-routes.test.ts +155 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -5
- package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
- package/src/runtime/routes/approval-interception-types.ts +13 -0
- package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
- package/src/runtime/routes/backup-routes.ts +15 -38
- package/src/runtime/routes/btw-routes.ts +14 -37
- package/src/runtime/routes/client-routes.ts +21 -2
- package/src/runtime/routes/contact-prompt-routes.ts +183 -0
- package/src/runtime/routes/contact-routes.ts +0 -25
- package/src/runtime/routes/conversation-query-routes.ts +36 -1
- package/src/runtime/routes/conversation-routes.ts +65 -39
- package/src/runtime/routes/debug-bash-routes.ts +163 -0
- package/src/runtime/routes/disk-pressure-routes.ts +121 -0
- package/src/runtime/routes/document-pdf-renderer.ts +169 -0
- package/src/runtime/routes/documents-routes.ts +32 -75
- package/src/runtime/routes/errors.ts +19 -4
- package/src/runtime/routes/events-routes.ts +38 -0
- package/src/runtime/routes/gateway-log-routes.ts +79 -0
- package/src/runtime/routes/guardian-approval-interception.ts +2 -8
- package/src/runtime/routes/heartbeat-routes.ts +103 -38
- package/src/runtime/routes/host-app-control-routes.ts +134 -0
- package/src/runtime/routes/host-bash-routes.ts +56 -6
- package/src/runtime/routes/host-browser-routes.ts +108 -13
- package/src/runtime/routes/host-cu-routes.ts +66 -9
- package/src/runtime/routes/host-file-routes.ts +54 -5
- package/src/runtime/routes/host-transfer-routes.ts +122 -19
- package/src/runtime/routes/http-adapter.ts +1 -0
- package/src/runtime/routes/identity-intro-cache.ts +30 -0
- package/src/runtime/routes/identity-routes.ts +21 -180
- package/src/runtime/routes/inbound-message-handler.ts +78 -21
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
- package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -0
- package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
- package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
- package/src/runtime/routes/index.ts +14 -0
- package/src/runtime/routes/mcp-auth-routes.ts +132 -0
- package/src/runtime/routes/memory-item-routes.test.ts +41 -15
- package/src/runtime/routes/memory-item-routes.ts +10 -12
- package/src/runtime/routes/memory-v2-routes.ts +474 -1
- package/src/runtime/routes/migration-routes.ts +96 -0
- package/src/runtime/routes/oauth-connect-routes.ts +153 -0
- package/src/runtime/routes/schedule-routes.ts +7 -0
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/runtime/verification-templates.ts +4 -7
- package/src/schedule/integration-status.ts +66 -2
- package/src/schedule/recurrence-engine.ts +4 -1
- package/src/schedule/retry-backoff.ts +18 -0
- package/src/schedule/retry-policy.ts +82 -0
- package/src/schedule/run-script.ts +37 -5
- package/src/schedule/schedule-recovery.ts +64 -0
- package/src/schedule/schedule-store.ts +106 -2
- package/src/schedule/scheduler-types.ts +25 -0
- package/src/schedule/scheduler.ts +83 -39
- package/src/security/encrypted-store.ts +2 -0
- package/src/security/oauth-callback-registry.ts +8 -0
- package/src/security/secure-keys.ts +55 -0
- package/src/sequence/analytics.ts +5 -5
- package/src/sequence/engine.ts +1 -1
- package/src/skills/catalog-files.ts +2 -8
- package/src/skills/include-graph.ts +5 -5
- package/src/skills/remote-skill-policy.ts +10 -16
- package/src/skills/skill-file-provider.ts +1 -1
- package/src/skills/skill-file-types.ts +13 -0
- package/src/skills/skillssh-audit-types.ts +28 -0
- package/src/skills/skillssh-registry.ts +8 -21
- package/src/subagent/index.ts +1 -7
- package/src/subagent/manager.ts +1 -15
- package/src/tasks/task-runner.ts +0 -1
- package/src/tasks/task-store.ts +0 -3
- package/src/telemetry/types.ts +2 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
- package/src/tools/apps/executors.ts +56 -69
- package/src/tools/background-tool-registry.ts +17 -3
- package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
- package/src/tools/browser/browser-execution.ts +2 -2
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
- package/src/tools/browser/cdp-client/factory.ts +23 -24
- package/src/tools/browser/cdp-client/index.ts +1 -14
- package/src/tools/computer-use/definitions.ts +42 -20
- package/src/tools/executor.ts +2 -0
- package/src/tools/host-filesystem/edit.test.ts +151 -0
- package/src/tools/host-filesystem/edit.ts +68 -0
- package/src/tools/host-filesystem/read.test.ts +129 -0
- package/src/tools/host-filesystem/read.ts +68 -0
- package/src/tools/host-filesystem/transfer.test.ts +127 -2
- package/src/tools/host-filesystem/transfer.ts +78 -3
- package/src/tools/host-filesystem/write.test.ts +134 -0
- package/src/tools/host-filesystem/write.ts +68 -0
- package/src/tools/host-terminal/host-shell.ts +66 -1
- package/src/tools/mcp/mcp-tool-factory.ts +2 -1
- package/src/tools/memory/register.test.ts +12 -9
- package/src/tools/memory/register.ts +1 -2
- package/src/tools/provider-tool-name.ts +28 -0
- package/src/tools/registry.ts +30 -9
- package/src/tools/schedule/create.ts +6 -0
- package/src/tools/schedule/list.ts +2 -0
- package/src/tools/schedule/update.ts +10 -0
- package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
- package/src/tools/shared/filesystem/path-policy.ts +25 -1
- package/src/tools/skills/load.ts +0 -32
- package/src/tools/terminal/shell.ts +9 -1
- package/src/tools/tool-approval-handler.ts +32 -11
- package/src/tools/types.ts +28 -2
- package/src/tts/provider-catalog.ts +3 -5
- package/src/usage/pricing.ts +1 -1
- package/src/util/disk-usage.ts +138 -0
- package/src/util/platform.ts +21 -11
- package/src/util/process-liveness.ts +26 -0
- package/src/workspace/hatched-date.ts +86 -0
- package/src/workspace/heartbeat-service.ts +19 -0
- package/src/workspace/migrations/003-seed-device-id.ts +1 -1
- package/src/workspace/migrations/006-services-config.ts +8 -5
- package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
- package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
- package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
- package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
- package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +2 -1
- package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
- package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
- package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +60 -0
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +146 -0
- package/src/workspace/migrations/067-release-notes-safe-storage-limits.ts +72 -0
- package/src/workspace/migrations/068-release-notes-local-timezone.ts +65 -0
- package/src/workspace/migrations/AGENTS.md +1 -1
- package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/workspace/migrations/utils.ts +21 -0
- package/src/__tests__/conversation-tool-setup-memory-scope.test.ts +0 -167
- package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
- package/src/__tests__/twilio-rest.test.ts +0 -34
- package/src/backup/__tests__/backup-key.test.ts +0 -152
- package/src/backup/__tests__/backup-worker.test.ts +0 -782
- package/src/backup/__tests__/offsite-writer.test.ts +0 -641
- package/src/backup/__tests__/stream-crypt.test.ts +0 -228
- package/src/backup/backup-key.ts +0 -137
- package/src/backup/backup-worker.ts +0 -472
- package/src/backup/offsite-writer.ts +0 -222
- package/src/backup/stream-crypt.ts +0 -263
- package/src/daemon/message-types/pairing.ts +0 -58
- package/src/memory/v2/__tests__/skill-qdrant.test.ts +0 -657
- package/src/memory/v2/skill-qdrant.ts +0 -395
- package/src/outbound-proxy/config.ts +0 -20
- package/src/outbound-proxy/health.ts +0 -18
- package/src/outbound-proxy/types.ts +0 -150
- package/src/runtime/capability-tokens.ts +0 -190
- package/src/signals/bash.ts +0 -198
- package/src/signals/mcp-reload.ts +0 -18
package/src/daemon/lifecycle.ts
CHANGED
|
@@ -2,8 +2,6 @@ import { join } from "node:path";
|
|
|
2
2
|
|
|
3
3
|
import { config as dotenvConfig } from "dotenv";
|
|
4
4
|
|
|
5
|
-
import type { BackupWorkerHandle } from "../backup/backup-worker.js";
|
|
6
|
-
import { startBackupWorker } from "../backup/backup-worker.js";
|
|
7
5
|
import { setPointerMessageProcessor } from "../calls/call-pointer-messages.js";
|
|
8
6
|
import { reconcileCallsOnStartup } from "../calls/call-recovery.js";
|
|
9
7
|
import { setRelayBroadcast } from "../calls/relay-server.js";
|
|
@@ -25,10 +23,6 @@ import type { AssistantConfig } from "../config/schema.js";
|
|
|
25
23
|
import { seedInferenceProfiles } from "../config/seed-inference-profiles.js";
|
|
26
24
|
import type { CesClient } from "../credential-execution/client.js";
|
|
27
25
|
import { createCesClient } from "../credential-execution/client.js";
|
|
28
|
-
import {
|
|
29
|
-
isCesCredentialBackendEnabled,
|
|
30
|
-
isCesToolsEnabled,
|
|
31
|
-
} from "../credential-execution/feature-gates.js";
|
|
32
26
|
import {
|
|
33
27
|
type CesProcessManager,
|
|
34
28
|
CesUnavailableError,
|
|
@@ -54,16 +48,12 @@ import {
|
|
|
54
48
|
import { expireAllPendingCanonicalRequests } from "../memory/canonical-guardian-store.js";
|
|
55
49
|
import { deleteMessageById, getMessages } from "../memory/conversation-crud.js";
|
|
56
50
|
import { initializeDb } from "../memory/db-init.js";
|
|
57
|
-
import {
|
|
58
|
-
selectEmbeddingBackend,
|
|
59
|
-
SPARSE_EMBEDDING_VERSION,
|
|
60
|
-
} from "../memory/embedding-backend.js";
|
|
51
|
+
import { selectEmbeddingBackend } from "../memory/embedding-backend.js";
|
|
61
52
|
import { enqueueMemoryJob } from "../memory/jobs-store.js";
|
|
62
53
|
import { startMemoryJobsWorker } from "../memory/jobs-worker.js";
|
|
63
54
|
import { initQdrantClient, resolveQdrantUrl } from "../memory/qdrant-client.js";
|
|
64
55
|
import { QdrantManager } from "../memory/qdrant-manager.js";
|
|
65
56
|
import { rotateToolInvocations } from "../memory/tool-usage-store.js";
|
|
66
|
-
import { deleteOldTraceEvents } from "../memory/trace-event-store.js";
|
|
67
57
|
import {
|
|
68
58
|
emitNotificationSignal,
|
|
69
59
|
registerBroadcastFn,
|
|
@@ -71,6 +61,7 @@ import {
|
|
|
71
61
|
import { backfillManualTokenConnections } from "../oauth/manual-token-connection.js";
|
|
72
62
|
import { seedOAuthProviders } from "../oauth/seed-providers.js";
|
|
73
63
|
import { loadUserPlugins } from "../plugins/user-loader.js";
|
|
64
|
+
import { backfillGuardIfNeeded } from "../proactive-artifact/index.js";
|
|
74
65
|
import { ensurePromptFiles } from "../prompts/system-prompt.js";
|
|
75
66
|
import { resolveManagedProxyContext } from "../providers/managed-proxy/context.js";
|
|
76
67
|
import { broadcastMessage } from "../runtime/assistant-event-hub.js";
|
|
@@ -81,6 +72,7 @@ import {
|
|
|
81
72
|
import { RuntimeHttpServer } from "../runtime/http-server.js";
|
|
82
73
|
import { recoverInterruptedImport } from "../runtime/migrations/vbundle-streaming-importer.js";
|
|
83
74
|
import { registerSecretsDeps } from "../runtime/routes/secrets-deps.js";
|
|
75
|
+
import { recoverStaleSchedules } from "../schedule/schedule-recovery.js";
|
|
84
76
|
import { startScheduler } from "../schedule/scheduler.js";
|
|
85
77
|
import {
|
|
86
78
|
onCesClientChanged,
|
|
@@ -113,6 +105,11 @@ import {
|
|
|
113
105
|
cleanupPidFileIfOwner,
|
|
114
106
|
writePid,
|
|
115
107
|
} from "./daemon-control.js";
|
|
108
|
+
import {
|
|
109
|
+
evaluateDiskPressureNow,
|
|
110
|
+
startDiskPressureGuard,
|
|
111
|
+
stopDiskPressureGuard,
|
|
112
|
+
} from "./disk-pressure-guard.js";
|
|
116
113
|
import { bootstrapPlugins } from "./external-plugins-bootstrap.js";
|
|
117
114
|
import {
|
|
118
115
|
createGuardianActionCopyGenerator,
|
|
@@ -133,11 +130,57 @@ import { DaemonServer } from "./server.js";
|
|
|
133
130
|
import { installShutdownHandlers } from "./shutdown-handlers.js";
|
|
134
131
|
|
|
135
132
|
const log = getLogger("lifecycle");
|
|
133
|
+
let diskPressureStartupSampleTimer: ReturnType<typeof setTimeout> | null = null;
|
|
136
134
|
|
|
137
135
|
function loadDotEnv(): void {
|
|
138
136
|
dotenvConfig({ path: getDotEnvPath(), quiet: true });
|
|
139
137
|
}
|
|
140
138
|
|
|
139
|
+
function runDeferredDiskPressureStartupSample(): void {
|
|
140
|
+
diskPressureStartupSampleTimer = null;
|
|
141
|
+
try {
|
|
142
|
+
const status = evaluateDiskPressureNow();
|
|
143
|
+
if (status.error) {
|
|
144
|
+
log.warn(
|
|
145
|
+
{ error: status.error },
|
|
146
|
+
"Disk pressure guard sample failed during startup — continuing unlocked",
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
} catch (err) {
|
|
150
|
+
log.warn(
|
|
151
|
+
{ err },
|
|
152
|
+
"Disk pressure guard failed during startup — continuing unlocked",
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function startDiskPressureGuardForLifecycle(): void {
|
|
158
|
+
try {
|
|
159
|
+
const startedStatus = startDiskPressureGuard();
|
|
160
|
+
if (!startedStatus.enabled) return;
|
|
161
|
+
if (!diskPressureStartupSampleTimer) {
|
|
162
|
+
diskPressureStartupSampleTimer = setTimeout(
|
|
163
|
+
runDeferredDiskPressureStartupSample,
|
|
164
|
+
0,
|
|
165
|
+
);
|
|
166
|
+
(diskPressureStartupSampleTimer as { unref?: () => void }).unref?.();
|
|
167
|
+
}
|
|
168
|
+
} catch (err) {
|
|
169
|
+
log.warn(
|
|
170
|
+
{ err },
|
|
171
|
+
"Disk pressure guard failed during startup — continuing unlocked",
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export function stopDiskPressureGuardForLifecycle(): void {
|
|
177
|
+
if (diskPressureStartupSampleTimer) {
|
|
178
|
+
clearTimeout(diskPressureStartupSampleTimer);
|
|
179
|
+
diskPressureStartupSampleTimer = null;
|
|
180
|
+
}
|
|
181
|
+
stopDiskPressureGuard();
|
|
182
|
+
}
|
|
183
|
+
|
|
141
184
|
export interface CesStartupResult {
|
|
142
185
|
client: CesClient | undefined;
|
|
143
186
|
processManager: CesProcessManager | undefined;
|
|
@@ -157,17 +200,6 @@ export interface CesStartupResult {
|
|
|
157
200
|
async function startCesProcess(
|
|
158
201
|
config: AssistantConfig,
|
|
159
202
|
): Promise<CesStartupResult> {
|
|
160
|
-
const shouldStartCes =
|
|
161
|
-
isCesToolsEnabled(config) || isCesCredentialBackendEnabled(config);
|
|
162
|
-
if (!shouldStartCes) {
|
|
163
|
-
return {
|
|
164
|
-
client: undefined,
|
|
165
|
-
processManager: undefined,
|
|
166
|
-
clientPromise: undefined,
|
|
167
|
-
abortController: undefined,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
|
|
171
203
|
const pm = createCesProcessManager({ assistantConfig: config });
|
|
172
204
|
const abortController = new AbortController();
|
|
173
205
|
let clientRef: CesClient | undefined;
|
|
@@ -291,9 +323,16 @@ export async function runDaemon(): Promise<void> {
|
|
|
291
323
|
// Fired non-blocking so a slow or unreachable gateway doesn't delay
|
|
292
324
|
// daemon startup (the IPC call has a 3s connect + 5s call timeout
|
|
293
325
|
// that would otherwise stall the critical path).
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
326
|
+
//
|
|
327
|
+
// On resolve, retry the v2 skill seed: the synchronous gate at the
|
|
328
|
+
// skill-seed call site below evaluates the memory-v2-enabled flag
|
|
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"));
|
|
297
336
|
|
|
298
337
|
seedInterfaceFiles();
|
|
299
338
|
|
|
@@ -460,12 +499,22 @@ export async function runDaemon(): Promise<void> {
|
|
|
460
499
|
}
|
|
461
500
|
} // end if (dbReady)
|
|
462
501
|
|
|
463
|
-
//
|
|
464
|
-
//
|
|
465
|
-
//
|
|
466
|
-
//
|
|
502
|
+
// Merge CLI-provided default config (from VELLUM_DEFAULT_WORKSPACE_CONFIG_PATH)
|
|
503
|
+
// into the workspace config file before profile seeding and the first
|
|
504
|
+
// loadConfig() call so onboarding/platform preferences are visible to the
|
|
505
|
+
// seeder and persisted alongside schema defaults.
|
|
506
|
+
const defaultConfigMerge = mergeDefaultWorkspaceConfig();
|
|
507
|
+
|
|
508
|
+
// Seed managed inference profiles into the workspace config. Runs after
|
|
509
|
+
// workspace migrations and default-config merge, but before loadConfig() so
|
|
510
|
+
// fresh hatches have profiles on disk before the first config load. Any
|
|
511
|
+
// profile fields explicitly supplied by the default overlay stay
|
|
512
|
+
// authoritative for this startup.
|
|
467
513
|
try {
|
|
468
|
-
seedInferenceProfiles(
|
|
514
|
+
seedInferenceProfiles({
|
|
515
|
+
preserveProfileNames: defaultConfigMerge.providedLlmProfileNames,
|
|
516
|
+
preserveActiveProfile: defaultConfigMerge.providedLlmActiveProfile,
|
|
517
|
+
});
|
|
469
518
|
log.info("Inference profile seeding complete");
|
|
470
519
|
} catch (err) {
|
|
471
520
|
log.warn(
|
|
@@ -474,11 +523,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
474
523
|
);
|
|
475
524
|
}
|
|
476
525
|
|
|
477
|
-
// Merge CLI-provided default config (from VELLUM_DEFAULT_WORKSPACE_CONFIG_PATH)
|
|
478
|
-
// into the workspace config file before the first loadConfig() call so
|
|
479
|
-
// onboarding preferences are persisted alongside schema defaults.
|
|
480
|
-
mergeDefaultWorkspaceConfig();
|
|
481
|
-
|
|
482
526
|
log.info("Daemon startup: loading config");
|
|
483
527
|
const config = loadConfig();
|
|
484
528
|
|
|
@@ -524,89 +568,81 @@ export async function runDaemon(): Promise<void> {
|
|
|
524
568
|
// bootstrap connection, so startup must happen at the process level.
|
|
525
569
|
const cesStartupPromise = startCesProcess(config);
|
|
526
570
|
|
|
527
|
-
//
|
|
528
|
-
//
|
|
529
|
-
//
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
},
|
|
546
|
-
},
|
|
547
|
-
);
|
|
548
|
-
if (client) {
|
|
549
|
-
setCesClient(client);
|
|
550
|
-
}
|
|
571
|
+
// CES startup must complete BEFORE provider initialization so credential
|
|
572
|
+
// reads can go through CES. Block with a 20-second timeout — fall back to
|
|
573
|
+
// direct credential store on timeout.
|
|
574
|
+
const cesResult = await cesStartupPromise;
|
|
575
|
+
// startCesProcess() returns immediately — the actual handshake runs
|
|
576
|
+
// inside clientPromise. Await it (with a 20s timeout) so the CES client
|
|
577
|
+
// is available before provider initialization.
|
|
578
|
+
if (cesResult.clientPromise) {
|
|
579
|
+
const client = await awaitCesClientWithTimeout(cesResult.clientPromise, {
|
|
580
|
+
timeoutMs: DEFAULT_CES_STARTUP_TIMEOUT_MS,
|
|
581
|
+
onTimeout: () => {
|
|
582
|
+
log.warn(
|
|
583
|
+
"CES handshake timed out after 20s — falling back to direct credential store",
|
|
584
|
+
);
|
|
585
|
+
},
|
|
586
|
+
});
|
|
587
|
+
if (client) {
|
|
588
|
+
setCesClient(client);
|
|
551
589
|
}
|
|
590
|
+
}
|
|
552
591
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
log.info("CES reconnection handshake accepted");
|
|
591
|
-
return newClient;
|
|
592
|
-
}
|
|
593
|
-
log.warn({ reason }, "CES reconnection handshake rejected");
|
|
594
|
-
newClient.close();
|
|
595
|
-
await pm.stop().catch(() => {});
|
|
596
|
-
return undefined;
|
|
597
|
-
} catch (err) {
|
|
598
|
-
log.warn(
|
|
599
|
-
{ error: err instanceof Error ? err.message : String(err) },
|
|
600
|
-
"CES reconnection attempt failed",
|
|
601
|
-
);
|
|
602
|
-
await pm.stop().catch(() => {});
|
|
603
|
-
return undefined;
|
|
592
|
+
// Register CES reconnection callback so the credential layer can
|
|
593
|
+
// re-establish the connection when the transport dies, instead of
|
|
594
|
+
// falling back to the encrypted file store.
|
|
595
|
+
if (cesResult.processManager) {
|
|
596
|
+
const pm = cesResult.processManager;
|
|
597
|
+
|
|
598
|
+
// Snapshot the managed-proxy context and assistant ID at CES startup
|
|
599
|
+
// so the reconnect closure below never calls back into
|
|
600
|
+
// `resolveManagedProxyContext()`. That function reads the assistant
|
|
601
|
+
// API key via `getSecureKeyAsync()`, which — once `setCesClient()`
|
|
602
|
+
// has resolved the backend to CES RPC — routes the read through CES
|
|
603
|
+
// itself. During a reconnect the old transport is dead and a new
|
|
604
|
+
// one is being set up by this very closure, so the nested credential
|
|
605
|
+
// read recursively awaits its own in-flight reconnection and
|
|
606
|
+
// deadlocks until `CREDENTIAL_OP_TIMEOUT_MS` (45s) fires. That
|
|
607
|
+
// 45-second stall delays every CES restart and causes dependent
|
|
608
|
+
// credential reads (e.g. Meet's STT provider resolution) to return
|
|
609
|
+
// `undefined` during the window. API key rotation uses the
|
|
610
|
+
// `updateAssistantApiKey` RPC on the live client, not a reconnect,
|
|
611
|
+
// so caching at startup is safe.
|
|
612
|
+
const startupProxyCtx = await resolveManagedProxyContext();
|
|
613
|
+
const startupAssistantId = getPlatformAssistantId();
|
|
614
|
+
|
|
615
|
+
setCesReconnect(async () => {
|
|
616
|
+
try {
|
|
617
|
+
await pm.stop();
|
|
618
|
+
const transport = await pm.start();
|
|
619
|
+
const newClient = createCesClient(transport);
|
|
620
|
+
const { accepted, reason } = await newClient.handshake({
|
|
621
|
+
...(startupProxyCtx.assistantApiKey
|
|
622
|
+
? { assistantApiKey: startupProxyCtx.assistantApiKey }
|
|
623
|
+
: {}),
|
|
624
|
+
...(startupAssistantId ? { assistantId: startupAssistantId } : {}),
|
|
625
|
+
});
|
|
626
|
+
if (accepted) {
|
|
627
|
+
log.info("CES reconnection handshake accepted");
|
|
628
|
+
return newClient;
|
|
604
629
|
}
|
|
605
|
-
|
|
606
|
-
|
|
630
|
+
log.warn({ reason }, "CES reconnection handshake rejected");
|
|
631
|
+
newClient.close();
|
|
632
|
+
await pm.stop().catch(() => {});
|
|
633
|
+
return undefined;
|
|
634
|
+
} catch (err) {
|
|
635
|
+
log.warn(
|
|
636
|
+
{ error: err instanceof Error ? err.message : String(err) },
|
|
637
|
+
"CES reconnection attempt failed",
|
|
638
|
+
);
|
|
639
|
+
await pm.stop().catch(() => {});
|
|
640
|
+
return undefined;
|
|
641
|
+
}
|
|
642
|
+
});
|
|
607
643
|
}
|
|
608
644
|
|
|
609
|
-
// Populate the registry with user plugins from
|
|
645
|
+
// Populate the registry with user plugins from `<workspaceDir>/plugins/*`
|
|
610
646
|
// AFTER first-party plugins have already registered via their static
|
|
611
647
|
// side-effect imports. User plugins may fail to load individually; a
|
|
612
648
|
// failing user plugin is logged and skipped so one bad install can't
|
|
@@ -645,6 +681,7 @@ export async function runDaemon(): Promise<void> {
|
|
|
645
681
|
|
|
646
682
|
await server.start();
|
|
647
683
|
log.info("Daemon startup: DaemonServer started");
|
|
684
|
+
startDiskPressureGuardForLifecycle();
|
|
648
685
|
|
|
649
686
|
// Kick off the update bulletin background job AFTER `server.start()`
|
|
650
687
|
// resolves. The conversation store must be initialized before wake
|
|
@@ -660,13 +697,12 @@ export async function runDaemon(): Promise<void> {
|
|
|
660
697
|
);
|
|
661
698
|
}
|
|
662
699
|
|
|
663
|
-
// Mutable refs for Qdrant
|
|
700
|
+
// Mutable refs for Qdrant and memory worker so background
|
|
664
701
|
// init can assign them and the shutdown handler always sees the latest value.
|
|
665
702
|
const bgRefs: {
|
|
666
703
|
qdrantManager: QdrantManager | null;
|
|
667
704
|
memoryWorker: { stop(): void } | null;
|
|
668
|
-
|
|
669
|
-
} = { qdrantManager: null, memoryWorker: null, backupWorker: null };
|
|
705
|
+
} = { qdrantManager: null, memoryWorker: null };
|
|
670
706
|
|
|
671
707
|
// Initialize Qdrant vector store and memory worker in the background so the
|
|
672
708
|
// RuntimeHttpServer can start accepting requests without waiting for Qdrant.
|
|
@@ -707,8 +743,11 @@ export async function runDaemon(): Promise<void> {
|
|
|
707
743
|
if (qdrantStarted) {
|
|
708
744
|
try {
|
|
709
745
|
const embeddingSelection = await selectEmbeddingBackend(config);
|
|
746
|
+
// Sentinel only encodes the dense provider+model identity; sparse
|
|
747
|
+
// encoder changes never require collection recreation, so they
|
|
748
|
+
// intentionally do not contribute to the v1 collection identity.
|
|
710
749
|
const embeddingModel = embeddingSelection.backend
|
|
711
|
-
? `${embeddingSelection.backend.provider}:${embeddingSelection.backend.model}
|
|
750
|
+
? `${embeddingSelection.backend.provider}:${embeddingSelection.backend.model}`
|
|
712
751
|
: undefined;
|
|
713
752
|
const qdrantClient = initQdrantClient({
|
|
714
753
|
url: qdrantUrl,
|
|
@@ -760,21 +799,32 @@ export async function runDaemon(): Promise<void> {
|
|
|
760
799
|
);
|
|
761
800
|
}
|
|
762
801
|
})();
|
|
802
|
+
|
|
803
|
+
// Build the BM25 corpus stats (per-token document frequencies and
|
|
804
|
+
// average document length) used by the v2 sparse channel. Without
|
|
805
|
+
// this, document-side sparse embeddings fall back to legacy TF-only
|
|
806
|
+
// weighting via the chicken-and-egg guard in
|
|
807
|
+
// `embed-concept-page.ts`. Fire-and-forget for the same reason as
|
|
808
|
+
// PKB reconcile — the stats are an optional optimization, never a
|
|
809
|
+
// boot-blocking dependency.
|
|
810
|
+
void (async () => {
|
|
811
|
+
try {
|
|
812
|
+
const { rebuildConceptPageCorpusStats } =
|
|
813
|
+
await import("../memory/v2/sparse-bm25.js");
|
|
814
|
+
await rebuildConceptPageCorpusStats(getWorkspaceDir());
|
|
815
|
+
log.info("Memory v2 BM25 corpus stats built");
|
|
816
|
+
} catch (err) {
|
|
817
|
+
log.warn(
|
|
818
|
+
{ err },
|
|
819
|
+
"BM25 corpus-stats rebuild failed — sparse channel will fall back to TF-only until next rebuild",
|
|
820
|
+
);
|
|
821
|
+
}
|
|
822
|
+
})();
|
|
763
823
|
}
|
|
764
824
|
|
|
765
825
|
log.info("Daemon startup: starting memory worker");
|
|
766
826
|
bgRefs.memoryWorker = startMemoryJobsWorker();
|
|
767
827
|
|
|
768
|
-
log.info("Daemon startup: starting backup worker");
|
|
769
|
-
try {
|
|
770
|
-
bgRefs.backupWorker = startBackupWorker();
|
|
771
|
-
} catch (err) {
|
|
772
|
-
log.warn(
|
|
773
|
-
{ err },
|
|
774
|
-
"Backup worker failed to start — continuing without backups",
|
|
775
|
-
);
|
|
776
|
-
}
|
|
777
|
-
|
|
778
828
|
// Seed capability graph nodes (new memory graph system)
|
|
779
829
|
try {
|
|
780
830
|
const {
|
|
@@ -818,6 +868,12 @@ export async function runDaemon(): Promise<void> {
|
|
|
818
868
|
// macOS adapter so it can deliver notification_intent messages to clients.
|
|
819
869
|
registerBroadcastFn((msg) => broadcastMessage(msg));
|
|
820
870
|
|
|
871
|
+
try {
|
|
872
|
+
recoverStaleSchedules();
|
|
873
|
+
} catch (err) {
|
|
874
|
+
log.error({ err }, "Schedule recovery failed — continuing startup");
|
|
875
|
+
}
|
|
876
|
+
|
|
821
877
|
const scheduler = startScheduler(
|
|
822
878
|
async (conversationId, message, options) => {
|
|
823
879
|
await processMessage(
|
|
@@ -1199,22 +1255,6 @@ export async function runDaemon(): Promise<void> {
|
|
|
1199
1255
|
}
|
|
1200
1256
|
}
|
|
1201
1257
|
|
|
1202
|
-
// Prune trace events older than 7 days to keep the database lean.
|
|
1203
|
-
// Deferred so synchronous cleanup doesn't block the startup path.
|
|
1204
|
-
setTimeout(() => {
|
|
1205
|
-
try {
|
|
1206
|
-
const deletedTraceEvents = deleteOldTraceEvents(7);
|
|
1207
|
-
if (deletedTraceEvents > 0) {
|
|
1208
|
-
log.debug(
|
|
1209
|
-
{ deletedTraceEvents },
|
|
1210
|
-
`Pruned ${deletedTraceEvents} trace event(s) older than 7 days`,
|
|
1211
|
-
);
|
|
1212
|
-
}
|
|
1213
|
-
} catch (err) {
|
|
1214
|
-
log.warn({ err }, "Trace event cleanup failed");
|
|
1215
|
-
}
|
|
1216
|
-
}, 0);
|
|
1217
|
-
|
|
1218
1258
|
const workspaceHeartbeat = new WorkspaceHeartbeatService();
|
|
1219
1259
|
workspaceHeartbeat.start();
|
|
1220
1260
|
|
|
@@ -1237,6 +1277,12 @@ export async function runDaemon(): Promise<void> {
|
|
|
1237
1277
|
"Heartbeat service configured",
|
|
1238
1278
|
);
|
|
1239
1279
|
|
|
1280
|
+
try {
|
|
1281
|
+
backfillGuardIfNeeded();
|
|
1282
|
+
} catch (err) {
|
|
1283
|
+
log.warn({ err }, "Proactive artifact backfill failed");
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1240
1286
|
// Filing yields to the memory v2 consolidation job when the flag is on —
|
|
1241
1287
|
// both serve the same role (periodic background memory processing) and
|
|
1242
1288
|
// running both is redundant. The consolidation job runs through the
|
|
@@ -1279,14 +1325,17 @@ export async function runDaemon(): Promise<void> {
|
|
|
1279
1325
|
scheduler,
|
|
1280
1326
|
feedScheduler,
|
|
1281
1327
|
getMemoryWorker: () => bgRefs.memoryWorker,
|
|
1282
|
-
getBackupWorker: () => bgRefs.backupWorker,
|
|
1283
1328
|
getQdrantManager: () => bgRefs.qdrantManager,
|
|
1284
1329
|
mcpManager,
|
|
1285
1330
|
telemetryReporter,
|
|
1286
|
-
cleanupPidFile
|
|
1331
|
+
cleanupPidFile: () => {
|
|
1332
|
+
stopDiskPressureGuardForLifecycle();
|
|
1333
|
+
cleanupPidFile();
|
|
1334
|
+
},
|
|
1287
1335
|
});
|
|
1288
1336
|
} catch (err) {
|
|
1289
1337
|
log.error({ err }, "Daemon startup failed — cleaning up");
|
|
1338
|
+
stopDiskPressureGuardForLifecycle();
|
|
1290
1339
|
cleanupPidFileIfOwner(process.pid);
|
|
1291
1340
|
throw err;
|
|
1292
1341
|
}
|
|
@@ -72,7 +72,7 @@ import { getLogger } from "../util/logger.js";
|
|
|
72
72
|
* keeps the supervisor free of path assumptions and simplifies
|
|
73
73
|
* tests.
|
|
74
74
|
*/
|
|
75
|
-
|
|
75
|
+
interface MeetHostManifest {
|
|
76
76
|
/** SHA-256 of the shipped skill source tree. */
|
|
77
77
|
sourceHash: string;
|
|
78
78
|
}
|
|
@@ -84,7 +84,7 @@ export interface MeetHostManifest {
|
|
|
84
84
|
* protocol version) can be threaded through later without a
|
|
85
85
|
* signature break.
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
interface MeetHostHandshakePayload {
|
|
88
88
|
sourceHash: string;
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -97,7 +97,7 @@ export interface MeetHostHandshakePayload {
|
|
|
97
97
|
* supervisor unaware of the rest of the IPC server's surface and avoids a
|
|
98
98
|
* circular import in tests that already stub `skill-server.js`.
|
|
99
99
|
*/
|
|
100
|
-
|
|
100
|
+
interface SkillRequestSender {
|
|
101
101
|
sendRequest(
|
|
102
102
|
connection: SkillIpcConnection,
|
|
103
103
|
method: string,
|
|
@@ -111,7 +111,7 @@ export interface SkillRequestSender {
|
|
|
111
111
|
* child. All are optional on construction — production callers
|
|
112
112
|
* rely on the defaults and tests override one or two at a time.
|
|
113
113
|
*/
|
|
114
|
-
|
|
114
|
+
interface MeetHostSupervisorDeps {
|
|
115
115
|
/** Absolute path to the shipped `meet-join` skill dir, containing `register.ts`. */
|
|
116
116
|
skillRuntimePath: string;
|
|
117
117
|
/** Absolute path to a standalone bun binary, or `"bun"` for PATH lookup. */
|
|
@@ -13,10 +13,12 @@ import { getLogger } from "../util/logger.js";
|
|
|
13
13
|
const log = getLogger("memory-v2-startup");
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Fire-and-forget seed of the v2
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Fire-and-forget seed of the v2 skill entries (now indexed alongside concept
|
|
17
|
+
* pages in `memory_v2_concept_pages` under the `skills/<id>` slug prefix), and
|
|
18
|
+
* a one-shot best-effort cleanup of the legacy `memory_v2_skills` Qdrant
|
|
19
|
+
* collection. Gated on both the `memory-v2-enabled` feature flag and the
|
|
20
|
+
* workspace-level `config.memory.v2.enabled` switch so v2 modules stay out of
|
|
21
|
+
* the v1 startup path when v2 is off.
|
|
20
22
|
*
|
|
21
23
|
* Uses a dynamic import so v2 code does not load unless the gate passes.
|
|
22
24
|
* Never awaits — startup must not block on this (see `assistant/CLAUDE.md`
|
|
@@ -32,4 +34,12 @@ export function maybeSeedMemoryV2Skills(config: AssistantConfig): void {
|
|
|
32
34
|
void import("../memory/v2/skill-store.js")
|
|
33
35
|
.then(({ seedV2SkillEntries }) => seedV2SkillEntries())
|
|
34
36
|
.catch((err) => log.warn({ err }, "Failed to seed v2 skill entries"));
|
|
37
|
+
void import("../memory/v2/qdrant.js")
|
|
38
|
+
.then(({ dropLegacySkillsCollection }) => dropLegacySkillsCollection())
|
|
39
|
+
.catch((err) =>
|
|
40
|
+
log.warn(
|
|
41
|
+
{ err },
|
|
42
|
+
"Failed to drop legacy memory_v2_skills collection — non-fatal",
|
|
43
|
+
),
|
|
44
|
+
);
|
|
35
45
|
}
|
|
@@ -20,9 +20,11 @@ export * from "./message-types/computer-use.js";
|
|
|
20
20
|
export * from "./message-types/contacts.js";
|
|
21
21
|
export * from "./message-types/conversations.js";
|
|
22
22
|
export * from "./message-types/diagnostics.js";
|
|
23
|
+
export * from "./message-types/disk-pressure.js";
|
|
23
24
|
export * from "./message-types/documents.js";
|
|
24
25
|
export * from "./message-types/guardian-actions.js";
|
|
25
26
|
export * from "./message-types/home.js";
|
|
27
|
+
export * from "./message-types/host-app-control.js";
|
|
26
28
|
export * from "./message-types/host-bash.js";
|
|
27
29
|
export * from "./message-types/host-browser.js";
|
|
28
30
|
export * from "./message-types/host-cu.js";
|
|
@@ -34,7 +36,6 @@ export * from "./message-types/meet.js";
|
|
|
34
36
|
export * from "./message-types/memory.js";
|
|
35
37
|
export * from "./message-types/messages.js";
|
|
36
38
|
export * from "./message-types/notifications.js";
|
|
37
|
-
export * from "./message-types/pairing.js";
|
|
38
39
|
export * from "./message-types/schedules.js";
|
|
39
40
|
export * from "./message-types/settings.js";
|
|
40
41
|
export * from "./message-types/shared.js";
|
|
@@ -71,6 +72,7 @@ import type {
|
|
|
71
72
|
_DiagnosticsClientMessages,
|
|
72
73
|
_DiagnosticsServerMessages,
|
|
73
74
|
} from "./message-types/diagnostics.js";
|
|
75
|
+
import type { _DiskPressureServerMessages } from "./message-types/disk-pressure.js";
|
|
74
76
|
import type {
|
|
75
77
|
_DocumentsClientMessages,
|
|
76
78
|
_DocumentsServerMessages,
|
|
@@ -80,6 +82,7 @@ import type {
|
|
|
80
82
|
_GuardianActionsServerMessages,
|
|
81
83
|
} from "./message-types/guardian-actions.js";
|
|
82
84
|
import type { _HomeServerMessages } from "./message-types/home.js";
|
|
85
|
+
import type { _HostAppControlServerMessages } from "./message-types/host-app-control.js";
|
|
83
86
|
import type { _HostBashServerMessages } from "./message-types/host-bash.js";
|
|
84
87
|
import type {
|
|
85
88
|
_HostBrowserClientMessages,
|
|
@@ -106,10 +109,6 @@ import type {
|
|
|
106
109
|
_NotificationsClientMessages,
|
|
107
110
|
_NotificationsServerMessages,
|
|
108
111
|
} from "./message-types/notifications.js";
|
|
109
|
-
import type {
|
|
110
|
-
_PairingClientMessages,
|
|
111
|
-
_PairingServerMessages,
|
|
112
|
-
} from "./message-types/pairing.js";
|
|
113
112
|
import type {
|
|
114
113
|
_SchedulesClientMessages,
|
|
115
114
|
_SchedulesServerMessages,
|
|
@@ -170,7 +169,6 @@ export type ClientMessage =
|
|
|
170
169
|
| _SchedulesClientMessages
|
|
171
170
|
| _DiagnosticsClientMessages
|
|
172
171
|
| _InboxClientMessages
|
|
173
|
-
| _PairingClientMessages
|
|
174
172
|
| _NotificationsClientMessages
|
|
175
173
|
| _SettingsClientMessages;
|
|
176
174
|
|
|
@@ -191,6 +189,7 @@ export type ServerMessage =
|
|
|
191
189
|
| _DocumentsServerMessages
|
|
192
190
|
| _GuardianActionsServerMessages
|
|
193
191
|
| _HomeServerMessages
|
|
192
|
+
| _HostAppControlServerMessages
|
|
194
193
|
| _HostBashServerMessages
|
|
195
194
|
| _HostBrowserServerMessages
|
|
196
195
|
| _HostCuServerMessages
|
|
@@ -203,10 +202,10 @@ export type ServerMessage =
|
|
|
203
202
|
| _SettingsServerMessages
|
|
204
203
|
| _DiagnosticsServerMessages
|
|
205
204
|
| _InboxServerMessages
|
|
206
|
-
| _PairingServerMessages
|
|
207
205
|
| _NotificationsServerMessages
|
|
208
206
|
| _UpgradesServerMessages
|
|
209
207
|
| _AcpServerMessages
|
|
208
|
+
| _DiskPressureServerMessages
|
|
210
209
|
| SubagentEvent;
|
|
211
210
|
|
|
212
211
|
// === Contract schema ===
|
|
@@ -215,4 +214,3 @@ export interface ContractSchema {
|
|
|
215
214
|
client: ClientMessage;
|
|
216
215
|
server: ServerMessage;
|
|
217
216
|
}
|
|
218
|
-
|