@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.
Files changed (739) hide show
  1. package/ARCHITECTURE.md +48 -50
  2. package/Dockerfile +1 -0
  3. package/README.md +1 -2
  4. package/__tests__/permissions/gateway-threshold-reader.test.ts +9 -3
  5. package/bun.lock +26 -26
  6. package/docs/architecture/memory.md +5 -2
  7. package/docs/architecture/security.md +20 -0
  8. package/docs/plugins.md +7 -9
  9. package/knip.json +1 -0
  10. package/node_modules/@vellumai/gateway-client/src/index.ts +1 -0
  11. package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +52 -5
  12. package/node_modules/@vellumai/gateway-client/src/types.ts +11 -0
  13. package/node_modules/@vellumai/service-contracts/package.json +2 -0
  14. package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +4 -0
  15. package/node_modules/@vellumai/service-contracts/src/__tests__/ingress.test.ts +107 -0
  16. package/node_modules/@vellumai/service-contracts/src/index.ts +5 -1
  17. package/node_modules/@vellumai/service-contracts/src/ingress.ts +24 -0
  18. package/node_modules/@vellumai/service-contracts/src/twilio-ingress.ts +84 -0
  19. package/node_modules/@vellumai/slack-text/src/index.test.ts +18 -35
  20. package/node_modules/@vellumai/slack-text/src/index.ts +2 -48
  21. package/node_modules/@vellumai/twilio-client/bun.lock +24 -0
  22. package/node_modules/@vellumai/twilio-client/package.json +18 -0
  23. package/node_modules/@vellumai/twilio-client/src/__tests__/twilio-client.test.ts +128 -0
  24. package/node_modules/@vellumai/twilio-client/src/index.ts +179 -0
  25. package/node_modules/@vellumai/twilio-client/tsconfig.json +20 -0
  26. package/openapi.yaml +1020 -40
  27. package/package.json +6 -3
  28. package/src/__tests__/app-builder-tool-scripts.test.ts +3 -3
  29. package/src/__tests__/app-bundler.test.ts +170 -1
  30. package/src/__tests__/app-control-flow.test.ts +384 -0
  31. package/src/__tests__/app-control-no-global-cgevent.test.ts +98 -0
  32. package/src/__tests__/app-control-tool-schemas.test.ts +621 -0
  33. package/src/__tests__/app-executors.test.ts +30 -43
  34. package/src/__tests__/approval-routes-http.test.ts +23 -6
  35. package/src/__tests__/assistant-event-hub-machine-name.test.ts +146 -0
  36. package/src/__tests__/assistant-event-hub-targeted.test.ts +257 -0
  37. package/src/__tests__/assistant-event-hub.test.ts +157 -2
  38. package/src/__tests__/assistant-feature-flags-integration.test.ts +29 -7
  39. package/src/__tests__/auto-analysis-end-to-end.test.ts +62 -1
  40. package/src/__tests__/background-shell-host-bash.test.ts +14 -15
  41. package/src/__tests__/background-workers-disk-pressure.test.ts +268 -0
  42. package/src/__tests__/bootstrap-turn-cleanup.test.ts +44 -0
  43. package/src/__tests__/btw-routes.test.ts +13 -4
  44. package/src/__tests__/call-controller.test.ts +49 -1
  45. package/src/__tests__/call-conversation-messages.test.ts +8 -2
  46. package/src/__tests__/call-domain.test.ts +0 -2
  47. package/src/__tests__/call-routes-http.test.ts +0 -2
  48. package/src/__tests__/channel-inbound-disk-pressure.test.ts +537 -0
  49. package/src/__tests__/channel-readiness-service.test.ts +62 -2
  50. package/src/__tests__/checker.test.ts +3 -4
  51. package/src/__tests__/config-loader-backfill.test.ts +461 -147
  52. package/src/__tests__/config-loader-platform-defaults.test.ts +196 -0
  53. package/src/__tests__/config-schema-cmd.test.ts +0 -1
  54. package/src/__tests__/config-schema.test.ts +1 -0
  55. package/src/__tests__/config-set-platform-guard.test.ts +48 -4
  56. package/src/__tests__/config-watcher-cleanup-throttle.test.ts +20 -11
  57. package/src/__tests__/config-watcher.test.ts +142 -71
  58. package/src/__tests__/context-search-agent-runner.test.ts +61 -3
  59. package/src/__tests__/context-search-conversations-source.test.ts +0 -24
  60. package/src/__tests__/context-search-fanout.test.ts +0 -1
  61. package/src/__tests__/context-search-memory-source.test.ts +3 -7
  62. package/src/__tests__/context-search-memory-v2-source.test.ts +0 -2
  63. package/src/__tests__/context-search-pkb-source.test.ts +0 -1
  64. package/src/__tests__/context-search-workspace-source.test.ts +0 -1
  65. package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
  66. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +223 -0
  67. package/src/__tests__/conversation-agent-loop.test.ts +454 -5
  68. package/src/__tests__/conversation-app-control-instantiation.test.ts +392 -0
  69. package/src/__tests__/conversation-app-control-lifecycle.test.ts +237 -0
  70. package/src/__tests__/conversation-error.test.ts +150 -3
  71. package/src/__tests__/conversation-init.benchmark.test.ts +0 -2
  72. package/src/__tests__/conversation-lifecycle.test.ts +36 -0
  73. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +283 -0
  74. package/src/__tests__/conversation-process-callsite.test.ts +43 -0
  75. package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
  76. package/src/__tests__/conversation-routes-disk-view.test.ts +6 -0
  77. package/src/__tests__/conversation-routes-guardian-reply.test.ts +120 -72
  78. package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
  79. package/src/__tests__/conversation-runtime-assembly.test.ts +65 -0
  80. package/src/__tests__/conversation-slash-commands.test.ts +0 -4
  81. package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
  82. package/src/__tests__/conversation-speed-override.test.ts +0 -3
  83. package/src/__tests__/conversation-store.test.ts +0 -18
  84. package/src/__tests__/conversation-surfaces-action-delivery.test.ts +202 -0
  85. package/src/__tests__/conversation-surfaces-app-control.test.ts +328 -0
  86. package/src/__tests__/conversation-surfaces-data-persist.test.ts +404 -0
  87. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +2 -5
  88. package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
  89. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
  90. package/src/__tests__/credential-execution-feature-gates.test.ts +5 -12
  91. package/src/__tests__/credential-execution-managed-contract.test.ts +3 -131
  92. package/src/__tests__/credentials-cli.test.ts +12 -12
  93. package/src/__tests__/cu-unified-flow.test.ts +351 -23
  94. package/src/__tests__/daemon-credential-client.test.ts +101 -19
  95. package/src/__tests__/date-context.test.ts +164 -2
  96. package/src/__tests__/db-schedule-syntax-migration.test.ts +2 -0
  97. package/src/__tests__/disk-pressure-guard.test.ts +262 -0
  98. package/src/__tests__/disk-pressure-lifecycle.test.ts +168 -0
  99. package/src/__tests__/disk-pressure-policy.test.ts +241 -0
  100. package/src/__tests__/disk-pressure-routes.test.ts +379 -0
  101. package/src/__tests__/disk-pressure-tools.test.ts +277 -0
  102. package/src/__tests__/disk-usage.test.ts +150 -0
  103. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  104. package/src/__tests__/events-client-registration.test.ts +52 -0
  105. package/src/__tests__/events-dev-bypass-actor.test.ts +162 -0
  106. package/src/__tests__/file-write-tool.test.ts +4 -10
  107. package/src/__tests__/filing-service.test.ts +3 -4
  108. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -2
  110. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +0 -1
  112. package/src/__tests__/heartbeat-disk-pressure.test.ts +183 -0
  113. package/src/__tests__/heartbeat-service.test.ts +968 -2
  114. package/src/__tests__/helpers/call-route-handler.ts +7 -1
  115. package/src/__tests__/host-app-control-proxy.test.ts +772 -0
  116. package/src/__tests__/host-app-control-routes.test.ts +263 -0
  117. package/src/__tests__/host-bash-proxy.test.ts +439 -47
  118. package/src/__tests__/host-bash-routes.test.ts +459 -0
  119. package/src/__tests__/host-browser-proxy.test.ts +24 -22
  120. package/src/__tests__/host-browser-routes.test.ts +39 -13
  121. package/src/__tests__/host-cu-proxy.test.ts +248 -52
  122. package/src/__tests__/host-cu-routes-targeted.test.ts +429 -0
  123. package/src/__tests__/host-file-edit-tool.test.ts +47 -1
  124. package/src/__tests__/host-file-proxy-targeted.test.ts +378 -0
  125. package/src/__tests__/host-file-proxy.test.ts +301 -45
  126. package/src/__tests__/host-file-read-tool.test.ts +17 -0
  127. package/src/__tests__/host-file-routes-targeted.test.ts +420 -0
  128. package/src/__tests__/host-file-write-tool.test.ts +42 -1
  129. package/src/__tests__/host-proxy-base.test.ts +312 -0
  130. package/src/__tests__/host-shell-tool.test.ts +22 -4
  131. package/src/__tests__/host-transfer-proxy-targeted.test.ts +932 -0
  132. package/src/__tests__/host-transfer-proxy.test.ts +121 -22
  133. package/src/__tests__/host-transfer-routes-targeted.test.ts +662 -0
  134. package/src/__tests__/http-user-message-parity.test.ts +108 -1
  135. package/src/__tests__/identity-intro-cache.test.ts +29 -0
  136. package/src/__tests__/identity-routes.test.ts +103 -1
  137. package/src/__tests__/init-feature-flag-overrides.test.ts +26 -3
  138. package/src/__tests__/injector-chain.test.ts +18 -6
  139. package/src/__tests__/injector-disk-pressure.test.ts +224 -0
  140. package/src/__tests__/inline-command-runner.test.ts +0 -1
  141. package/src/__tests__/inline-skill-load-permissions.test.ts +5 -11
  142. package/src/__tests__/integration-status.test.ts +85 -5
  143. package/src/__tests__/intent-routing.test.ts +0 -1
  144. package/src/__tests__/jobs-store-qdrant-breaker.test.ts +95 -5
  145. package/src/__tests__/lifecycle-memory-v2-seed.test.ts +17 -0
  146. package/src/__tests__/managed-profile-guard.test.ts +18 -0
  147. package/src/__tests__/managed-skill-lifecycle.test.ts +0 -1
  148. package/src/__tests__/mcp-abort-signal.test.ts +130 -0
  149. package/src/__tests__/mcp-auth-routes.test.ts +197 -0
  150. package/src/__tests__/mcp-cli.test.ts +338 -2
  151. package/src/__tests__/memory-admin-recall.test.ts +3 -11
  152. package/src/__tests__/memory-jobs-worker-lanes.test.ts +188 -0
  153. package/src/__tests__/memory-retrieval-pipeline.test.ts +22 -1
  154. package/src/__tests__/migration-import-commit-http.test.ts +108 -2
  155. package/src/__tests__/mock-gateway-ipc.ts +1 -0
  156. package/src/__tests__/normalize-onboarding.test.ts +180 -0
  157. package/src/__tests__/oauth-cli.test.ts +0 -2
  158. package/src/__tests__/oauth-connect-routes.test.ts +316 -0
  159. package/src/__tests__/oauth-provider-seed-logos.test.ts +24 -2
  160. package/src/__tests__/oauth2-gateway-transport.test.ts +0 -1
  161. package/src/__tests__/onboarding-persona-write.test.ts +308 -0
  162. package/src/__tests__/openai-provider.test.ts +45 -8
  163. package/src/__tests__/persist-onboarding-artifacts.test.ts +44 -64
  164. package/src/__tests__/persistence-secret-redaction.test.ts +299 -0
  165. package/src/__tests__/platform-bash-auto-approve.test.ts +5 -9
  166. package/src/__tests__/platform-callback-registration.test.ts +21 -4
  167. package/src/__tests__/platform.test.ts +2 -1
  168. package/src/__tests__/playbook-execution.test.ts +0 -43
  169. package/src/__tests__/plugin-tool-contribution.test.ts +47 -0
  170. package/src/__tests__/prechat-onboarding-contract.test.ts +214 -25
  171. package/src/__tests__/process-message-background-slack.test.ts +2 -0
  172. package/src/__tests__/provider-commit-message-generator.test.ts +0 -1
  173. package/src/__tests__/provider-tool-name.test.ts +23 -0
  174. package/src/__tests__/public-ingress-urls.test.ts +97 -0
  175. package/src/__tests__/relay-server.test.ts +15 -4
  176. package/src/__tests__/require-fresh-approval.test.ts +0 -1
  177. package/src/__tests__/retry-backoff.test.ts +87 -0
  178. package/src/__tests__/runtime-events-sse.test.ts +2 -2
  179. package/src/__tests__/sanitize-config-for-transfer.test.ts +24 -2
  180. package/src/__tests__/schedule-retry.test.ts +715 -0
  181. package/src/__tests__/scheduler-disk-pressure.test.ts +148 -0
  182. package/src/__tests__/script-proxy-mitm-handler.test.ts +1 -1
  183. package/src/__tests__/secret-ingress-http.test.ts +1 -1
  184. package/src/__tests__/send-endpoint-busy.test.ts +3 -0
  185. package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -1
  186. package/src/__tests__/skill-feature-flags.test.ts +43 -41
  187. package/src/__tests__/skill-load-feature-flag.test.ts +13 -14
  188. package/src/__tests__/skill-load-inline-command.test.ts +0 -51
  189. package/src/__tests__/skill-load-inline-includes.test.ts +0 -43
  190. package/src/__tests__/skill-projection.benchmark.test.ts +0 -1
  191. package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -1
  192. package/src/__tests__/slack-channel-config.test.ts +9 -14
  193. package/src/__tests__/suggestion-routes.test.ts +46 -0
  194. package/src/__tests__/system-prompt-ask-mode.test.ts +0 -1
  195. package/src/__tests__/system-prompt.test.ts +0 -1
  196. package/src/__tests__/telegram-config.test.ts +0 -1
  197. package/src/__tests__/test-preload.ts +8 -0
  198. package/src/__tests__/tool-approval-handler.test.ts +3 -4
  199. package/src/__tests__/tool-audit-listener.test.ts +48 -0
  200. package/src/__tests__/tool-execute-pipeline.test.ts +0 -1
  201. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  202. package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -1
  203. package/src/__tests__/tool-executor.test.ts +0 -1
  204. package/src/__tests__/twilio-config.test.ts +3 -16
  205. package/src/__tests__/twilio-routes.test.ts +3 -5
  206. package/src/__tests__/twilio-validation.test.ts +93 -0
  207. package/src/__tests__/vellum-self-knowledge-inline-command.test.ts +1 -4
  208. package/src/__tests__/verification-control-plane-policy.test.ts +2 -4
  209. package/src/__tests__/voice-ingress-preflight.test.ts +19 -0
  210. package/src/__tests__/workspace-migration-006-services-config.test.ts +3 -2
  211. package/src/__tests__/workspace-migration-065-bump-stale-heartbeat-interval.test.ts +122 -0
  212. package/src/__tests__/workspace-migration-066-seed-heartbeat-callsite-cost-default.test.ts +285 -0
  213. package/src/__tests__/workspace-migration-068-release-notes-local-timezone.test.ts +90 -0
  214. package/src/__tests__/workspace-migration-backfill-installation-id.test.ts +1 -5
  215. package/src/__tests__/workspace-migration-down-functions.test.ts +8 -8
  216. package/src/__tests__/workspace-migration-safe-storage-limits-release.test.ts +90 -0
  217. package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +10 -6
  218. package/src/approvals/guardian-decision-primitive.ts +13 -0
  219. package/src/approvals/guardian-request-resolvers.ts +16 -17
  220. package/src/backup/__tests__/paths.test.ts +0 -22
  221. package/src/backup/__tests__/restore.test.ts +51 -151
  222. package/src/backup/paths.ts +2 -18
  223. package/src/backup/restore.ts +107 -231
  224. package/src/backup/snapshot-lock.ts +2 -27
  225. package/src/bundler/app-bundler.ts +51 -3
  226. package/src/bundler/compiler-tools.ts +3 -2
  227. package/src/calls/call-conversation-messages.ts +46 -10
  228. package/src/calls/relay-server.ts +4 -44
  229. package/src/calls/twilio-config.ts +2 -17
  230. package/src/calls/twilio-rest.ts +33 -105
  231. package/src/calls/twilio-routes.ts +11 -12
  232. package/src/channels/types.ts +8 -7
  233. package/src/cli/commands/__tests__/backup.test.ts +6 -277
  234. package/src/cli/commands/__tests__/gateway.test.ts +288 -0
  235. package/src/cli/commands/__tests__/memory-v2.test.ts +4 -0
  236. package/src/cli/commands/__tests__/webhooks.test.ts +0 -5
  237. package/src/cli/commands/backup.ts +6 -331
  238. package/src/cli/commands/bash.ts +35 -108
  239. package/src/cli/commands/clients.ts +36 -37
  240. package/src/cli/commands/contacts.ts +137 -25
  241. package/src/cli/commands/conversations.ts +2 -5
  242. package/src/cli/commands/credentials.ts +71 -7
  243. package/src/cli/commands/domain.ts +66 -15
  244. package/src/cli/commands/gateway.ts +183 -0
  245. package/src/cli/commands/keys.ts +9 -6
  246. package/src/cli/commands/mcp.ts +116 -156
  247. package/src/cli/commands/memory-v2.ts +303 -7
  248. package/src/cli/commands/oauth/__tests__/connect.test.ts +437 -1
  249. package/src/cli/commands/oauth/connect.ts +127 -1
  250. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -4
  251. package/src/cli/commands/platform/__tests__/connect.test.ts +7 -3
  252. package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -3
  253. package/src/cli/commands/platform/__tests__/status.test.ts +116 -21
  254. package/src/cli/commands/platform/disconnect.ts +5 -4
  255. package/src/cli/commands/platform/index.ts +16 -25
  256. package/src/cli/commands/status.ts +57 -0
  257. package/src/cli/lib/daemon-credential-client.ts +110 -28
  258. package/src/cli/program.ts +6 -2
  259. package/src/config/assistant-feature-flags.ts +79 -12
  260. package/src/config/bundled-skills/acp/SKILL.md +6 -0
  261. package/src/config/bundled-skills/acp/TOOLS.json +1 -22
  262. package/src/config/bundled-skills/app-builder/SKILL.md +14 -109
  263. package/src/config/bundled-skills/app-builder/TOOLS.json +1 -28
  264. package/src/config/bundled-skills/app-builder/tools/app-create.ts +1 -10
  265. package/src/config/bundled-skills/app-control/SKILL.md +75 -0
  266. package/src/config/bundled-skills/app-control/TOOLS.json +299 -0
  267. package/src/config/bundled-skills/app-control/tools/app-control-click.ts +12 -0
  268. package/src/config/bundled-skills/app-control/tools/app-control-combo.ts +12 -0
  269. package/src/config/bundled-skills/app-control/tools/app-control-drag.ts +12 -0
  270. package/src/config/bundled-skills/app-control/tools/app-control-observe.ts +12 -0
  271. package/src/config/bundled-skills/app-control/tools/app-control-press.ts +12 -0
  272. package/src/config/bundled-skills/app-control/tools/app-control-sequence.ts +12 -0
  273. package/src/config/bundled-skills/app-control/tools/app-control-start.ts +12 -0
  274. package/src/config/bundled-skills/app-control/tools/app-control-stop.ts +12 -0
  275. package/src/config/bundled-skills/app-control/tools/app-control-type.ts +12 -0
  276. package/src/config/bundled-skills/computer-use/SKILL.md +6 -0
  277. package/src/config/bundled-skills/computer-use/TOOLS.json +67 -43
  278. package/src/config/bundled-skills/contacts/TOOLS.json +0 -16
  279. package/src/config/bundled-skills/document/TOOLS.json +0 -8
  280. package/src/config/bundled-skills/followups/TOOLS.json +0 -12
  281. package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
  282. package/src/config/bundled-skills/image-studio/TOOLS.json +0 -4
  283. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -24
  284. package/src/config/bundled-skills/messaging/TOOLS.json +0 -40
  285. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -3
  286. package/src/config/bundled-skills/phone-calls/TOOLS.json +0 -12
  287. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +25 -4
  288. package/src/config/bundled-skills/playbooks/TOOLS.json +0 -16
  289. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +2 -2
  290. package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +2 -2
  291. package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +2 -2
  292. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +2 -2
  293. package/src/config/bundled-skills/schedule/TOOLS.json +14 -14
  294. package/src/config/bundled-skills/sequences/TOOLS.json +0 -36
  295. package/src/config/bundled-skills/settings/SKILL.md +4 -0
  296. package/src/config/bundled-skills/settings/TOOLS.json +0 -12
  297. package/src/config/bundled-skills/skill-management/SKILL.md +6 -0
  298. package/src/config/bundled-skills/skill-management/TOOLS.json +0 -8
  299. package/src/config/bundled-skills/subagent/SKILL.md +6 -2
  300. package/src/config/bundled-skills/subagent/TOOLS.json +0 -20
  301. package/src/config/bundled-skills/transcribe/SKILL.md +4 -0
  302. package/src/config/bundled-skills/transcribe/TOOLS.json +0 -4
  303. package/src/config/bundled-tool-registry.ts +21 -0
  304. package/src/config/env-registry.ts +0 -2
  305. package/src/config/env.ts +19 -20
  306. package/src/config/feature-flag-registry.json +47 -135
  307. package/src/config/loader.ts +197 -104
  308. package/src/config/sanitize-for-transfer.ts +2 -0
  309. package/src/config/schemas/__tests__/memory-lifecycle.test.ts +80 -0
  310. package/src/config/schemas/__tests__/memory-v2.test.ts +17 -9
  311. package/src/config/schemas/call-site-catalog.ts +14 -0
  312. package/src/config/schemas/calls.ts +0 -9
  313. package/src/config/schemas/channels.ts +0 -5
  314. package/src/config/schemas/heartbeat.ts +64 -1
  315. package/src/config/schemas/ingress.ts +10 -6
  316. package/src/config/schemas/llm.ts +7 -10
  317. package/src/config/schemas/memory-lifecycle.ts +90 -24
  318. package/src/config/schemas/memory-v2.ts +121 -13
  319. package/src/config/schemas/platform.ts +49 -3
  320. package/src/config/schemas/services.ts +29 -15
  321. package/src/config/schemas/skills.ts +0 -6
  322. package/src/config/seed-inference-profiles.ts +230 -33
  323. package/src/contacts/contact-store.ts +0 -55
  324. package/src/contacts/contacts-write.ts +0 -27
  325. package/src/context/window-manager.ts +1 -2
  326. package/src/credential-execution/feature-gates.ts +10 -10
  327. package/src/credential-execution/process-manager.ts +12 -41
  328. package/src/daemon/__tests__/conversation-tool-setup.test.ts +187 -5
  329. package/src/daemon/assistant-attachments.ts +4 -4
  330. package/src/daemon/bootstrap-turn-cleanup.ts +45 -0
  331. package/src/daemon/config-watcher.ts +89 -60
  332. package/src/daemon/conversation-agent-loop-handlers.ts +27 -3
  333. package/src/daemon/conversation-agent-loop.ts +202 -61
  334. package/src/daemon/conversation-error.ts +87 -15
  335. package/src/daemon/conversation-lifecycle.ts +9 -4
  336. package/src/daemon/conversation-process.ts +24 -11
  337. package/src/daemon/conversation-runtime-assembly.ts +28 -2
  338. package/src/daemon/conversation-store.ts +2 -2
  339. package/src/daemon/conversation-surfaces.ts +305 -4
  340. package/src/daemon/conversation-tool-setup.ts +66 -62
  341. package/src/daemon/conversation.ts +38 -24
  342. package/src/daemon/date-context.ts +71 -22
  343. package/src/daemon/disk-pressure-background-gate.ts +73 -0
  344. package/src/daemon/disk-pressure-guard.ts +343 -0
  345. package/src/daemon/disk-pressure-policy.ts +163 -0
  346. package/src/daemon/doordash-steps.ts +1 -1
  347. package/src/daemon/handlers/shared.ts +4 -2
  348. package/src/daemon/handlers/skills.ts +3 -4
  349. package/src/daemon/host-app-control-proxy.ts +389 -0
  350. package/src/daemon/host-bash-proxy.ts +117 -82
  351. package/src/daemon/host-browser-proxy.ts +67 -82
  352. package/src/daemon/host-cu-proxy.ts +127 -86
  353. package/src/daemon/host-file-proxy.ts +129 -69
  354. package/src/daemon/host-proxy-base.ts +294 -0
  355. package/src/daemon/host-proxy-preactivation.ts +82 -0
  356. package/src/daemon/host-transfer-proxy.ts +338 -129
  357. package/src/daemon/lifecycle.ts +194 -145
  358. package/src/daemon/meet-host-supervisor.ts +4 -4
  359. package/src/daemon/meet-manifest-loader.ts +0 -1
  360. package/src/daemon/memory-v2-startup.ts +14 -4
  361. package/src/daemon/message-protocol.ts +6 -8
  362. package/src/daemon/message-types/contacts.ts +23 -1
  363. package/src/daemon/message-types/conversations.ts +15 -8
  364. package/src/daemon/message-types/disk-pressure.ts +9 -0
  365. package/src/daemon/message-types/host-app-control.ts +150 -0
  366. package/src/daemon/message-types/host-bash.ts +4 -0
  367. package/src/daemon/message-types/host-cu.ts +2 -0
  368. package/src/daemon/message-types/host-file.ts +4 -0
  369. package/src/daemon/message-types/host-transfer.ts +3 -0
  370. package/src/daemon/message-types/messages.ts +3 -0
  371. package/src/daemon/message-types/schedules.ts +8 -3
  372. package/src/daemon/message-types/skills.ts +2 -2
  373. package/src/daemon/process-message.ts +18 -1
  374. package/src/daemon/profiler-run-store.ts +5 -5
  375. package/src/daemon/shutdown-handlers.ts +0 -3
  376. package/src/daemon/tool-setup-types.ts +51 -0
  377. package/src/daemon/tool-side-effects.ts +1 -1
  378. package/src/documents/document-store.ts +85 -0
  379. package/src/events/tool-audit-listener.ts +2 -1
  380. package/src/filing/filing-service.ts +30 -5
  381. package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +24 -23
  382. package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +252 -0
  383. package/src/heartbeat/heartbeat-run-store.ts +249 -0
  384. package/src/heartbeat/heartbeat-service.ts +459 -54
  385. package/src/home/__tests__/post-connect-feed.test.ts +99 -0
  386. package/src/home/__tests__/relationship-state-writer.test.ts +11 -9
  387. package/src/home/__tests__/suggested-prompts.test.ts +89 -0
  388. package/src/home/feed-scheduler.ts +18 -0
  389. package/src/home/post-connect-feed.ts +68 -0
  390. package/src/home/relationship-state-writer.ts +17 -92
  391. package/src/home/suggested-prompts.ts +46 -10
  392. package/src/inbound/platform-callback-registration.ts +8 -15
  393. package/src/inbound/public-ingress-urls.ts +32 -34
  394. package/src/ipc/__tests__/clients-list-ipc.test.ts +169 -0
  395. package/src/ipc/__tests__/route-error-envelope.test.ts +80 -0
  396. package/src/ipc/assistant-server.ts +70 -3
  397. package/src/ipc/cli-client.ts +32 -1
  398. package/src/ipc/gateway-client.ts +37 -3
  399. package/src/live-voice/live-voice-archive.ts +4 -4
  400. package/src/live-voice/live-voice-metrics.ts +10 -10
  401. package/src/live-voice/protocol.ts +5 -7
  402. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +304 -0
  403. package/src/mcp/mcp-auth-orchestrator.ts +213 -0
  404. package/src/mcp/mcp-auth-state.ts +133 -0
  405. package/src/mcp/mcp-oauth-provider.ts +19 -0
  406. package/src/media/image-service.ts +1 -7
  407. package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +21 -13
  408. package/src/memory/__tests__/jobs-store-job-classes.test.ts +24 -0
  409. package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +52 -22
  410. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -6
  411. package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +272 -0
  412. package/src/memory/__tests__/qdrant-client-sentinel.test.ts +49 -0
  413. package/src/memory/__tests__/sparse-tokenize.test.ts +66 -0
  414. package/src/memory/admin.ts +5 -9
  415. package/src/memory/anisotropy.test.ts +247 -0
  416. package/src/memory/anisotropy.ts +443 -0
  417. package/src/memory/auto-analysis-constants.ts +17 -0
  418. package/src/memory/auto-analysis-guard.ts +5 -15
  419. package/src/memory/canonical-guardian-store.ts +7 -7
  420. package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +122 -0
  421. package/src/memory/context-search/agent-protocol.ts +6 -6
  422. package/src/memory/context-search/agent-runner.ts +51 -9
  423. package/src/memory/context-search/sources/conversations.ts +2 -11
  424. package/src/memory/context-search/sources/memory-v2.ts +22 -9
  425. package/src/memory/context-search/sources/memory.ts +0 -1
  426. package/src/memory/context-search/types.ts +0 -1
  427. package/src/memory/conversation-crud.ts +5 -13
  428. package/src/memory/conversation-key-store.ts +2 -15
  429. package/src/memory/db-init.ts +6 -0
  430. package/src/memory/embedding-backend.ts +9 -21
  431. package/src/memory/embedding-runtime-manager.ts +119 -5
  432. package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +81 -25
  433. package/src/memory/graph/conversation-graph-memory.ts +43 -78
  434. package/src/memory/graph/extraction.ts +1 -3
  435. package/src/memory/graph/graph-search.test.ts +10 -67
  436. package/src/memory/graph/graph-search.ts +9 -20
  437. package/src/memory/graph/retriever.test.ts +6 -0
  438. package/src/memory/graph/retriever.ts +34 -10
  439. package/src/memory/graph/tools.ts +1 -1
  440. package/src/memory/indexer.ts +54 -45
  441. package/src/memory/job-handlers/backfill.ts +2 -11
  442. package/src/memory/job-handlers/cleanup.ts +43 -0
  443. package/src/memory/job-handlers/embedding.ts +6 -8
  444. package/src/memory/job-handlers/summarization.ts +2 -7
  445. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +8 -2
  446. package/src/memory/jobs/embed-concept-page.ts +28 -2
  447. package/src/memory/jobs/embed-pkb-file.test.ts +2 -2
  448. package/src/memory/jobs-store.ts +114 -22
  449. package/src/memory/jobs-worker.ts +193 -106
  450. package/src/memory/memory-v2-activation-log-store.ts +33 -15
  451. package/src/memory/memory-v2-concept-frequency.ts +169 -0
  452. package/src/memory/migrations/237-heartbeat-runs.ts +45 -0
  453. package/src/memory/migrations/238-schedule-retry-policy.ts +20 -0
  454. package/src/memory/migrations/239-trace-events-created-at-index.ts +18 -0
  455. package/src/memory/migrations/index.ts +6 -0
  456. package/src/memory/migrations/registry.ts +8 -0
  457. package/src/memory/pkb/pkb-search.test.ts +6 -0
  458. package/src/memory/pkb/pkb-search.ts +7 -0
  459. package/src/memory/qdrant-client.ts +49 -32
  460. package/src/memory/rerank-local.ts +374 -0
  461. package/src/memory/schema/infrastructure.ts +15 -0
  462. package/src/memory/search/semantic.ts +13 -67
  463. package/src/memory/sparse-tokenize.ts +49 -0
  464. package/src/memory/trace-event-store.ts +1 -17
  465. package/src/memory/v2/__tests__/activation.test.ts +387 -344
  466. package/src/memory/v2/__tests__/consolidation-job.test.ts +40 -8
  467. package/src/memory/v2/__tests__/injection.test.ts +181 -169
  468. package/src/memory/v2/__tests__/prompts-consolidation.test.ts +61 -2
  469. package/src/memory/v2/__tests__/qdrant.test.ts +16 -0
  470. package/src/memory/v2/__tests__/reranker.test.ts +338 -0
  471. package/src/memory/v2/__tests__/sim.test.ts +154 -188
  472. package/src/memory/v2/__tests__/skill-store.test.ts +71 -65
  473. package/src/memory/v2/__tests__/sparse-bm25.test.ts +292 -0
  474. package/src/memory/v2/__tests__/static-context.test.ts +76 -2
  475. package/src/memory/v2/activation.ts +213 -239
  476. package/src/memory/v2/consolidation-job.ts +65 -17
  477. package/src/memory/v2/constants.ts +7 -0
  478. package/src/memory/v2/injection.ts +123 -103
  479. package/src/memory/v2/prompts/consolidation.ts +348 -92
  480. package/src/memory/v2/qdrant.ts +198 -1
  481. package/src/memory/v2/reranker.ts +177 -0
  482. package/src/memory/v2/sim.ts +113 -77
  483. package/src/memory/v2/skill-content.ts +4 -3
  484. package/src/memory/v2/skill-store.ts +91 -53
  485. package/src/memory/v2/sparse-bm25.ts +245 -0
  486. package/src/memory/v2/static-context.ts +28 -5
  487. package/src/memory/v2/types.ts +10 -10
  488. package/src/messaging/providers/gmail/types.ts +0 -49
  489. package/src/messaging/providers/slack/adapter.ts +1 -31
  490. package/src/messaging/providers/slack/types.ts +0 -32
  491. package/src/notifications/README.md +10 -10
  492. package/src/notifications/broadcaster.ts +1 -1
  493. package/src/notifications/copy-composer.ts +13 -0
  494. package/src/notifications/guardian-question-mode.ts +5 -5
  495. package/src/notifications/signal.ts +4 -0
  496. package/src/oauth/AGENTS.md +3 -1
  497. package/src/oauth/__tests__/oauth-connect-state.test.ts +137 -0
  498. package/src/oauth/connect-orchestrator.ts +6 -0
  499. package/src/oauth/connection-resolver.test.ts +66 -1
  500. package/src/oauth/connection-resolver.ts +55 -1
  501. package/src/oauth/credential-token-resolver.ts +1 -3
  502. package/src/oauth/manual-token-connection.ts +0 -4
  503. package/src/oauth/oauth-connect-state.ts +77 -0
  504. package/src/oauth/seed-providers.ts +58 -1
  505. package/src/outbound-proxy/index.ts +1 -37
  506. package/src/outbound-proxy/logging.ts +1 -1
  507. package/src/outbound-proxy/policy.ts +6 -5
  508. package/src/outbound-proxy/router.ts +2 -1
  509. package/src/permissions/approval-policy.test.ts +6 -275
  510. package/src/permissions/approval-policy.ts +0 -51
  511. package/src/permissions/checker.test.ts +0 -1
  512. package/src/permissions/checker.ts +3 -17
  513. package/src/permissions/gateway-threshold-reader.ts +2 -0
  514. package/src/permissions/prompter.ts +34 -1
  515. package/src/permissions/secret-prompter.ts +6 -2
  516. package/src/plugins/defaults/injectors.ts +35 -2
  517. package/src/plugins/defaults/memory-retrieval.ts +5 -6
  518. package/src/plugins/types.ts +7 -0
  519. package/src/proactive-artifact/aux-message-injector.ts +74 -0
  520. package/src/proactive-artifact/decision.test.ts +226 -0
  521. package/src/proactive-artifact/decision.ts +165 -0
  522. package/src/proactive-artifact/index.ts +7 -0
  523. package/src/proactive-artifact/job.test.ts +867 -0
  524. package/src/proactive-artifact/job.ts +352 -0
  525. package/src/proactive-artifact/message-copy.ts +41 -0
  526. package/src/proactive-artifact/trigger-state.test.ts +277 -0
  527. package/src/proactive-artifact/trigger-state.ts +119 -0
  528. package/src/prompts/bootstrap-cleanup.ts +27 -0
  529. package/src/prompts/normalize-onboarding.ts +80 -0
  530. package/src/prompts/persona-resolver.ts +101 -9
  531. package/src/prompts/system-prompt.ts +23 -24
  532. package/src/prompts/templates/BOOTSTRAP.md +13 -5
  533. package/src/prompts/templates/SOUL.md +13 -1
  534. package/src/providers/__tests__/retry-callsite.test.ts +222 -1
  535. package/src/providers/model-intents.ts +7 -0
  536. package/src/providers/openrouter/client.ts +8 -0
  537. package/src/providers/retry.ts +50 -0
  538. package/src/providers/speech-to-text/provider-catalog.ts +7 -8
  539. package/src/providers/types.ts +1 -0
  540. package/src/runtime/__tests__/agent-wake.test.ts +456 -3
  541. package/src/runtime/agent-wake.ts +238 -100
  542. package/src/runtime/assistant-event-hub.ts +151 -99
  543. package/src/runtime/auth/__tests__/middleware.test.ts +11 -56
  544. package/src/runtime/auth/__tests__/route-policy.test.ts +64 -0
  545. package/src/runtime/auth/middleware.ts +0 -96
  546. package/src/runtime/auth/route-policy.ts +32 -0
  547. package/src/runtime/auth/same-actor.ts +216 -0
  548. package/src/runtime/btw-sidechain.ts +2 -3
  549. package/src/runtime/channel-invite-transport.ts +2 -48
  550. package/src/runtime/channel-invite-transports/email.ts +1 -1
  551. package/src/runtime/channel-invite-transports/slack.ts +1 -1
  552. package/src/runtime/channel-invite-transports/telegram.ts +1 -1
  553. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  554. package/src/runtime/channel-invite-transports/whatsapp.ts +1 -1
  555. package/src/runtime/channel-invite-types.ts +54 -0
  556. package/src/runtime/channel-readiness-service.ts +32 -13
  557. package/src/runtime/channel-retry-sweep.ts +65 -1
  558. package/src/runtime/guardian-reply-router.ts +10 -0
  559. package/src/runtime/http-server.ts +3 -329
  560. package/src/runtime/http-types.ts +0 -5
  561. package/src/runtime/local-actor-identity.ts +52 -11
  562. package/src/runtime/migrations/__tests__/vbundle-import-parity.test.ts +413 -0
  563. package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +260 -0
  564. package/src/runtime/migrations/__tests__/vbundle-import-version-compat.test.ts +189 -0
  565. package/src/runtime/migrations/__tests__/vbundle-streaming-importer.test.ts +153 -1
  566. package/src/runtime/migrations/__tests__/vbundle-symlink-importer.test.ts +451 -0
  567. package/src/runtime/migrations/__tests__/vbundle-symlink-streaming-importer.test.ts +0 -0
  568. package/src/runtime/migrations/__tests__/vbundle-symlink-streaming.test.ts +515 -0
  569. package/src/runtime/migrations/__tests__/vbundle-symlink-tar.test.ts +437 -0
  570. package/src/runtime/migrations/__tests__/vbundle-symlink-walker.test.ts +319 -0
  571. package/src/runtime/migrations/__tests__/vbundle-validator-v1-schema.test.ts +51 -1
  572. package/src/runtime/migrations/migration-transport.ts +7 -7
  573. package/src/runtime/migrations/vbundle-builder.ts +327 -60
  574. package/src/runtime/migrations/vbundle-import-analyzer.ts +4 -4
  575. package/src/runtime/migrations/vbundle-import-policy.ts +172 -0
  576. package/src/runtime/migrations/vbundle-importer.ts +245 -68
  577. package/src/runtime/migrations/vbundle-streaming-importer.ts +326 -35
  578. package/src/runtime/migrations/vbundle-streaming-validator.ts +157 -4
  579. package/src/runtime/migrations/vbundle-tar-stream.ts +15 -6
  580. package/src/runtime/migrations/vbundle-validator.ts +114 -0
  581. package/src/runtime/pending-interactions.ts +43 -9
  582. package/src/runtime/routes/__tests__/backup-routes.test.ts +22 -150
  583. package/src/runtime/routes/__tests__/client-routes.test.ts +155 -0
  584. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +98 -5
  585. package/src/runtime/routes/__tests__/gateway-log-routes.test.ts +242 -0
  586. package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +112 -0
  587. package/src/runtime/routes/approval-interception-types.ts +13 -0
  588. package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +1 -1
  589. package/src/runtime/routes/backup-routes.ts +15 -38
  590. package/src/runtime/routes/btw-routes.ts +14 -37
  591. package/src/runtime/routes/client-routes.ts +21 -2
  592. package/src/runtime/routes/contact-prompt-routes.ts +183 -0
  593. package/src/runtime/routes/contact-routes.ts +0 -25
  594. package/src/runtime/routes/conversation-query-routes.ts +36 -1
  595. package/src/runtime/routes/conversation-routes.ts +65 -39
  596. package/src/runtime/routes/debug-bash-routes.ts +163 -0
  597. package/src/runtime/routes/disk-pressure-routes.ts +121 -0
  598. package/src/runtime/routes/document-pdf-renderer.ts +169 -0
  599. package/src/runtime/routes/documents-routes.ts +32 -75
  600. package/src/runtime/routes/errors.ts +19 -4
  601. package/src/runtime/routes/events-routes.ts +38 -0
  602. package/src/runtime/routes/gateway-log-routes.ts +79 -0
  603. package/src/runtime/routes/guardian-approval-interception.ts +2 -8
  604. package/src/runtime/routes/heartbeat-routes.ts +103 -38
  605. package/src/runtime/routes/host-app-control-routes.ts +134 -0
  606. package/src/runtime/routes/host-bash-routes.ts +56 -6
  607. package/src/runtime/routes/host-browser-routes.ts +108 -13
  608. package/src/runtime/routes/host-cu-routes.ts +66 -9
  609. package/src/runtime/routes/host-file-routes.ts +54 -5
  610. package/src/runtime/routes/host-transfer-routes.ts +122 -19
  611. package/src/runtime/routes/http-adapter.ts +1 -0
  612. package/src/runtime/routes/identity-intro-cache.ts +30 -0
  613. package/src/runtime/routes/identity-routes.ts +21 -180
  614. package/src/runtime/routes/inbound-message-handler.ts +78 -21
  615. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +0 -7
  616. package/src/runtime/routes/inbound-stages/edit-intercept.ts +0 -8
  617. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -0
  618. package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -20
  619. package/src/runtime/routes/inbound-stages/transcribe-audio.ts +5 -13
  620. package/src/runtime/routes/index.ts +14 -0
  621. package/src/runtime/routes/mcp-auth-routes.ts +132 -0
  622. package/src/runtime/routes/memory-item-routes.test.ts +41 -15
  623. package/src/runtime/routes/memory-item-routes.ts +10 -12
  624. package/src/runtime/routes/memory-v2-routes.ts +474 -1
  625. package/src/runtime/routes/migration-routes.ts +96 -0
  626. package/src/runtime/routes/oauth-connect-routes.ts +153 -0
  627. package/src/runtime/routes/schedule-routes.ts +7 -0
  628. package/src/runtime/verification-outbound-actions.ts +4 -4
  629. package/src/runtime/verification-templates.ts +4 -7
  630. package/src/schedule/integration-status.ts +66 -2
  631. package/src/schedule/recurrence-engine.ts +4 -1
  632. package/src/schedule/retry-backoff.ts +18 -0
  633. package/src/schedule/retry-policy.ts +82 -0
  634. package/src/schedule/run-script.ts +37 -5
  635. package/src/schedule/schedule-recovery.ts +64 -0
  636. package/src/schedule/schedule-store.ts +106 -2
  637. package/src/schedule/scheduler-types.ts +25 -0
  638. package/src/schedule/scheduler.ts +83 -39
  639. package/src/security/encrypted-store.ts +2 -0
  640. package/src/security/oauth-callback-registry.ts +8 -0
  641. package/src/security/secure-keys.ts +55 -0
  642. package/src/sequence/analytics.ts +5 -5
  643. package/src/sequence/engine.ts +1 -1
  644. package/src/skills/catalog-files.ts +2 -8
  645. package/src/skills/include-graph.ts +5 -5
  646. package/src/skills/remote-skill-policy.ts +10 -16
  647. package/src/skills/skill-file-provider.ts +1 -1
  648. package/src/skills/skill-file-types.ts +13 -0
  649. package/src/skills/skillssh-audit-types.ts +28 -0
  650. package/src/skills/skillssh-registry.ts +8 -21
  651. package/src/subagent/index.ts +1 -7
  652. package/src/subagent/manager.ts +1 -15
  653. package/src/tasks/task-runner.ts +0 -1
  654. package/src/tasks/task-store.ts +0 -3
  655. package/src/telemetry/types.ts +2 -0
  656. package/src/telemetry/usage-telemetry-reporter.test.ts +21 -0
  657. package/src/telemetry/usage-telemetry-reporter.ts +1 -0
  658. package/src/tools/app-control/skill-proxy-bridge.ts +28 -0
  659. package/src/tools/apps/executors.ts +56 -69
  660. package/src/tools/background-tool-registry.ts +17 -3
  661. package/src/tools/browser/__tests__/browser-status.test.ts +21 -18
  662. package/src/tools/browser/browser-execution.ts +2 -2
  663. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +55 -4
  664. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +12 -6
  665. package/src/tools/browser/cdp-client/factory.ts +23 -24
  666. package/src/tools/browser/cdp-client/index.ts +1 -14
  667. package/src/tools/computer-use/definitions.ts +42 -20
  668. package/src/tools/executor.ts +2 -0
  669. package/src/tools/host-filesystem/edit.test.ts +151 -0
  670. package/src/tools/host-filesystem/edit.ts +68 -0
  671. package/src/tools/host-filesystem/read.test.ts +129 -0
  672. package/src/tools/host-filesystem/read.ts +68 -0
  673. package/src/tools/host-filesystem/transfer.test.ts +127 -2
  674. package/src/tools/host-filesystem/transfer.ts +78 -3
  675. package/src/tools/host-filesystem/write.test.ts +134 -0
  676. package/src/tools/host-filesystem/write.ts +68 -0
  677. package/src/tools/host-terminal/host-shell.ts +66 -1
  678. package/src/tools/mcp/mcp-tool-factory.ts +2 -1
  679. package/src/tools/memory/register.test.ts +12 -9
  680. package/src/tools/memory/register.ts +1 -2
  681. package/src/tools/provider-tool-name.ts +28 -0
  682. package/src/tools/registry.ts +30 -9
  683. package/src/tools/schedule/create.ts +6 -0
  684. package/src/tools/schedule/list.ts +2 -0
  685. package/src/tools/schedule/update.ts +10 -0
  686. package/src/tools/shared/filesystem/file-ops-service.ts +2 -0
  687. package/src/tools/shared/filesystem/path-policy.ts +25 -1
  688. package/src/tools/skills/load.ts +0 -32
  689. package/src/tools/terminal/shell.ts +9 -1
  690. package/src/tools/tool-approval-handler.ts +32 -11
  691. package/src/tools/types.ts +28 -2
  692. package/src/tts/provider-catalog.ts +3 -5
  693. package/src/usage/pricing.ts +1 -1
  694. package/src/util/disk-usage.ts +138 -0
  695. package/src/util/platform.ts +21 -11
  696. package/src/util/process-liveness.ts +26 -0
  697. package/src/workspace/hatched-date.ts +86 -0
  698. package/src/workspace/heartbeat-service.ts +19 -0
  699. package/src/workspace/migrations/003-seed-device-id.ts +1 -1
  700. package/src/workspace/migrations/006-services-config.ts +8 -5
  701. package/src/workspace/migrations/016-extract-feature-flags-to-protected.ts +3 -9
  702. package/src/workspace/migrations/021-move-signals-to-workspace.ts +4 -10
  703. package/src/workspace/migrations/022-move-hooks-to-workspace.ts +4 -10
  704. package/src/workspace/migrations/023-move-config-files-to-workspace.ts +4 -11
  705. package/src/workspace/migrations/024-move-runtime-files-to-workspace.ts +3 -10
  706. package/src/workspace/migrations/040-seed-latency-callsite-defaults.ts +3 -2
  707. package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +2 -1
  708. package/src/workspace/migrations/059-move-pid-to-workspace.ts +3 -8
  709. package/src/workspace/migrations/061-move-backup-key-to-workspace.ts +3 -8
  710. package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +60 -0
  711. package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +146 -0
  712. package/src/workspace/migrations/067-release-notes-safe-storage-limits.ts +72 -0
  713. package/src/workspace/migrations/068-release-notes-local-timezone.ts +65 -0
  714. package/src/workspace/migrations/AGENTS.md +1 -1
  715. package/src/workspace/migrations/migrate-to-workspace-volume.ts +4 -10
  716. package/src/workspace/migrations/registry.ts +8 -0
  717. package/src/workspace/migrations/utils.ts +21 -0
  718. package/src/__tests__/conversation-tool-setup-memory-scope.test.ts +0 -167
  719. package/src/__tests__/host-browser-e2e-cloud.test.ts +0 -443
  720. package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +0 -226
  721. package/src/__tests__/host-browser-ws-events-e2e.test.ts +0 -427
  722. package/src/__tests__/twilio-rest.test.ts +0 -34
  723. package/src/backup/__tests__/backup-key.test.ts +0 -152
  724. package/src/backup/__tests__/backup-worker.test.ts +0 -782
  725. package/src/backup/__tests__/offsite-writer.test.ts +0 -641
  726. package/src/backup/__tests__/stream-crypt.test.ts +0 -228
  727. package/src/backup/backup-key.ts +0 -137
  728. package/src/backup/backup-worker.ts +0 -472
  729. package/src/backup/offsite-writer.ts +0 -222
  730. package/src/backup/stream-crypt.ts +0 -263
  731. package/src/daemon/message-types/pairing.ts +0 -58
  732. package/src/memory/v2/__tests__/skill-qdrant.test.ts +0 -657
  733. package/src/memory/v2/skill-qdrant.ts +0 -395
  734. package/src/outbound-proxy/config.ts +0 -20
  735. package/src/outbound-proxy/health.ts +0 -18
  736. package/src/outbound-proxy/types.ts +0 -150
  737. package/src/runtime/capability-tokens.ts +0 -190
  738. package/src/signals/bash.ts +0 -198
  739. package/src/signals/mcp-reload.ts +0 -18
@@ -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
- void initFeatureFlagOverrides().catch((err) =>
295
- log.warn({ err }, "Background feature flag init failed"),
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
- // Seed managed inference profiles into the workspace config. Runs
464
- // after workspace migrations (which may have created the initial
465
- // profile slots) and before mergeDefaultWorkspaceConfig / loadConfig
466
- // so the profiles are on disk for the first config load.
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
- // When the credential backend flag is enabled, CES startup must complete
528
- // BEFORE provider initialization so credential reads can go through CES.
529
- // Block with a 20-second timeout — fall back to direct credential store
530
- // on timeout.
531
- if (isCesCredentialBackendEnabled(config)) {
532
- const cesResult = await cesStartupPromise;
533
- // startCesProcess() returns immediately the actual handshake runs
534
- // inside clientPromise. Await it (with a 20s timeout) so the CES client
535
- // is available before provider initialization.
536
- if (cesResult.clientPromise) {
537
- const client = await awaitCesClientWithTimeout(
538
- cesResult.clientPromise,
539
- {
540
- timeoutMs: DEFAULT_CES_STARTUP_TIMEOUT_MS,
541
- onTimeout: () => {
542
- log.warn(
543
- "CES handshake timed out after 20s — falling back to direct credential store",
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
- // Register CES reconnection callback so the credential layer can
554
- // re-establish the connection when the transport dies, instead of
555
- // falling back to the encrypted file store.
556
- if (cesResult.processManager) {
557
- const pm = cesResult.processManager;
558
-
559
- // Snapshot the managed-proxy context and assistant ID at CES startup
560
- // so the reconnect closure below never calls back into
561
- // `resolveManagedProxyContext()`. That function reads the assistant
562
- // API key via `getSecureKeyAsync()`, which — once `setCesClient()`
563
- // has resolved the backend to CES RPC — routes the read through CES
564
- // itself. During a reconnect the old transport is dead and a new
565
- // one is being set up by this very closure, so the nested credential
566
- // read recursively awaits its own in-flight reconnection and
567
- // deadlocks until `CREDENTIAL_OP_TIMEOUT_MS` (45s) fires. That
568
- // 45-second stall delays every CES restart and causes dependent
569
- // credential reads (e.g. Meet's STT provider resolution) to return
570
- // `undefined` during the window. API key rotation uses the
571
- // `updateAssistantApiKey` RPC on the live client, not a reconnect,
572
- // so caching at startup is safe.
573
- const startupProxyCtx = await resolveManagedProxyContext();
574
- const startupAssistantId = getPlatformAssistantId();
575
-
576
- setCesReconnect(async () => {
577
- try {
578
- await pm.stop();
579
- const transport = await pm.start();
580
- const newClient = createCesClient(transport);
581
- const { accepted, reason } = await newClient.handshake({
582
- ...(startupProxyCtx.assistantApiKey
583
- ? { assistantApiKey: startupProxyCtx.assistantApiKey }
584
- : {}),
585
- ...(startupAssistantId
586
- ? { assistantId: startupAssistantId }
587
- : {}),
588
- });
589
- if (accepted) {
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 `~/.vellum/plugins/*`
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, memory worker, and backup worker so background
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
- backupWorker: BackupWorkerHandle | null;
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}:sparse-v${SPARSE_EMBEDDING_VERSION}`
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
- export interface MeetHostManifest {
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
- export interface MeetHostHandshakePayload {
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
- export interface SkillRequestSender {
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
- export interface MeetHostSupervisorDeps {
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. */
@@ -109,7 +109,6 @@ const SERIALIZABLE_TOOL_CONTEXT_KEYS = [
109
109
  "callSessionId",
110
110
  "principal",
111
111
  "toolUseId",
112
- "memoryScopeId",
113
112
  "requesterExternalUserId",
114
113
  "requesterChatId",
115
114
  "requesterIdentifier",
@@ -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 parallel skill embedding collection. Gated
17
- * on both the `memory-v2-enabled` feature flag and the workspace-level
18
- * `config.memory.v2.enabled` switch so v2 modules stay out of the v1 startup
19
- * path when v2 is off.
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
-