@vellumai/assistant 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (692) hide show
  1. package/AGENTS.md +11 -0
  2. package/Dockerfile +5 -4
  3. package/README.md +2 -2
  4. package/docker-entrypoint.sh +16 -0
  5. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +420 -0
  6. package/eslint-rules/cli-no-daemon-internals.js +283 -0
  7. package/eslint.config.mjs +12 -0
  8. package/knip.json +2 -1
  9. package/node_modules/@vellumai/skill-host-contracts/src/client.ts +10 -1
  10. package/openapi.yaml +4847 -1698
  11. package/package.json +3 -1
  12. package/scripts/generate-openapi.ts +52 -4
  13. package/scripts/sync-llm-catalog.ts +165 -0
  14. package/scripts/sync-web-search-catalog.ts +107 -0
  15. package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +169 -0
  16. package/src/__tests__/agent-loop-override-profile.test.ts +26 -1
  17. package/src/__tests__/anthropic-provider.test.ts +92 -2
  18. package/src/__tests__/app-control-flow.test.ts +7 -0
  19. package/src/__tests__/assistant-events-sse-shed.test.ts +232 -0
  20. package/src/__tests__/avatar-identity-sync.test.ts +87 -0
  21. package/src/__tests__/background-workers-disk-pressure.test.ts +11 -22
  22. package/src/__tests__/btw-routes.test.ts +1 -0
  23. package/src/__tests__/call-site-routing-provider.test.ts +172 -45
  24. package/src/__tests__/cancel-resolves-conversation-key.test.ts +44 -3
  25. package/src/__tests__/channel-policy.test.ts +12 -0
  26. package/src/__tests__/checker.test.ts +89 -0
  27. package/src/__tests__/cli-memory-v2-reembed-skills.test.ts +35 -7
  28. package/src/__tests__/compact-event-conversation-id-guard.test.ts +33 -5
  29. package/src/__tests__/compaction-strip-metadata-clear.test.ts +26 -1
  30. package/src/__tests__/config-loader-backfill.test.ts +526 -102
  31. package/src/__tests__/config-loader-corrupt.test.ts +68 -0
  32. package/src/__tests__/config-loader-platform-defaults.test.ts +77 -23
  33. package/src/__tests__/config-schema-cmd.test.ts +63 -29
  34. package/src/__tests__/config-schema.test.ts +14 -3
  35. package/src/__tests__/config-set-platform-guard.test.ts +75 -152
  36. package/src/__tests__/config-set-route.test.ts +198 -0
  37. package/src/__tests__/config-watcher.test.ts +6 -0
  38. package/src/__tests__/contacts-tools.test.ts +51 -199
  39. package/src/__tests__/context-search-agent-protocol.test.ts +21 -2
  40. package/src/__tests__/context-search-agent-runner.test.ts +22 -138
  41. package/src/__tests__/context-search-conversations-source.test.ts +42 -16
  42. package/src/__tests__/context-search-fanout.test.ts +20 -157
  43. package/src/__tests__/context-search-memory-v2-source.test.ts +3 -3
  44. package/src/__tests__/context-search-types.test.ts +7 -2
  45. package/src/__tests__/context-window-manager.test.ts +389 -1
  46. package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -0
  47. package/src/__tests__/conversation-crud-inference-profile.test.ts +100 -0
  48. package/src/__tests__/conversation-error.test.ts +38 -0
  49. package/src/__tests__/conversation-fork-crud.test.ts +241 -1
  50. package/src/__tests__/conversation-inference-profile-route.test.ts +14 -14
  51. package/src/__tests__/conversation-init.benchmark.test.ts +1 -0
  52. package/src/__tests__/conversation-lifecycle.test.ts +124 -0
  53. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +100 -1
  54. package/src/__tests__/conversation-process-callsite.test.ts +21 -1
  55. package/src/__tests__/conversation-runtime-assembly.test.ts +4 -4
  56. package/src/__tests__/conversation-slash-commands.test.ts +194 -2
  57. package/src/__tests__/conversation-surfaces-app-control.test.ts +323 -3
  58. package/src/__tests__/credential-security-invariants.test.ts +5 -6
  59. package/src/__tests__/daemon-credential-client.test.ts +56 -1
  60. package/src/__tests__/db-activation-state-fk-cascade.test.ts +132 -0
  61. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +37 -0
  62. package/src/__tests__/db-memory-graph-event-date-repair.test.ts +43 -20
  63. package/src/__tests__/db-proxy-transaction.test.ts +206 -0
  64. package/src/__tests__/external-plugin-loader.test.ts +458 -0
  65. package/src/__tests__/filing-service.test.ts +23 -3
  66. package/src/__tests__/fixtures/mock-chrome-extension.ts +5 -0
  67. package/src/__tests__/gateway-only-guard.test.ts +0 -1
  68. package/src/__tests__/graph-extraction-event-date.test.ts +34 -0
  69. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -8
  70. package/src/__tests__/heartbeat-disk-pressure.test.ts +21 -8
  71. package/src/__tests__/heartbeat-service.test.ts +50 -233
  72. package/src/__tests__/history-repair.test.ts +89 -0
  73. package/src/__tests__/host-app-control-proxy.test.ts +109 -1
  74. package/src/__tests__/host-app-control-routes.test.ts +247 -1
  75. package/src/__tests__/host-browser-proxy.test.ts +416 -20
  76. package/src/__tests__/host-browser-routes.test.ts +325 -33
  77. package/src/__tests__/host-proxy-preactivation.test.ts +211 -0
  78. package/src/__tests__/inference-no-mode-boot-e2e.test.ts +246 -0
  79. package/src/__tests__/inference-profile-reaper.test.ts +154 -0
  80. package/src/__tests__/inference-profile-session-handler.test.ts +398 -0
  81. package/src/__tests__/inference-profile-session-ipc.test.ts +236 -0
  82. package/src/__tests__/inline-skill-load-permissions.test.ts +6 -1
  83. package/src/__tests__/install-skill-routing.test.ts +2 -2
  84. package/src/__tests__/lifecycle-memory-v2-seed.test.ts +15 -0
  85. package/src/__tests__/llm-callsite-catalog.test.ts +20 -1
  86. package/src/__tests__/llm-catalog-parity.test.ts +146 -0
  87. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +188 -0
  88. package/src/__tests__/llm-request-log-source-factory.test.ts +124 -0
  89. package/src/__tests__/llm-resolver.test.ts +46 -0
  90. package/src/__tests__/managed-profile-guard.test.ts +131 -2
  91. package/src/__tests__/mcp-auth-routes.test.ts +1 -0
  92. package/src/__tests__/mcp-cli.test.ts +182 -220
  93. package/src/__tests__/mcp-health-check.test.ts +56 -27
  94. package/src/__tests__/memory-jobs-worker-lanes.test.ts +18 -11
  95. package/src/__tests__/message-complete-display-id.test.ts +175 -0
  96. package/src/__tests__/notification-platform-adapter.test.ts +229 -0
  97. package/src/__tests__/oauth-cli.test.ts +38 -2009
  98. package/src/__tests__/oauth-commands-routes.test.ts +711 -0
  99. package/src/__tests__/oauth-connect-routes.test.ts +174 -11
  100. package/src/__tests__/oauth-providers-routes.test.ts +14 -10
  101. package/src/__tests__/openai-responses-cutover-guard.test.ts +33 -12
  102. package/src/__tests__/openai-responses-provider.test.ts +17 -0
  103. package/src/__tests__/plugin-bootstrap.test.ts +31 -2
  104. package/src/__tests__/plugin-route-contribution.test.ts +31 -3
  105. package/src/__tests__/plugin-tool-contribution.test.ts +31 -3
  106. package/src/__tests__/plugin-types.test.ts +13 -11
  107. package/src/__tests__/process-message-background-slack.test.ts +46 -0
  108. package/src/__tests__/profile-entry-status.test.ts +43 -0
  109. package/src/__tests__/provider-managed-proxy-integration.test.ts +12 -4
  110. package/src/__tests__/provider-registry-ollama.test.ts +12 -4
  111. package/src/__tests__/provider-send-message-override-profile.test.ts +10 -4
  112. package/src/__tests__/relay-server.test.ts +118 -0
  113. package/src/__tests__/retry-thinking-tool-choice.test.ts +15 -0
  114. package/src/__tests__/schedule-retry.test.ts +56 -4
  115. package/src/__tests__/schedule-routes.test.ts +104 -0
  116. package/src/__tests__/scheduler-disk-pressure.test.ts +0 -4
  117. package/src/__tests__/scheduler-recurrence.test.ts +87 -34
  118. package/src/__tests__/scheduler-reuse-conversation.test.ts +161 -5
  119. package/src/__tests__/scheduler-wake.test.ts +0 -63
  120. package/src/__tests__/secret-allowlist.test.ts +1 -0
  121. package/src/__tests__/secret-routes-managed-proxy.test.ts +12 -4
  122. package/src/__tests__/shell-credential-ref.test.ts +95 -3
  123. package/src/__tests__/shell-tool-proxy-mode.test.ts +14 -0
  124. package/src/__tests__/skill-load-feature-flag.test.ts +1 -0
  125. package/src/__tests__/skill-load-tool.test.ts +2 -4
  126. package/src/__tests__/subagent-call-site-routing.test.ts +78 -16
  127. package/src/__tests__/suggestion-routes.test.ts +3 -3
  128. package/src/__tests__/sync-message-contract.test.ts +63 -0
  129. package/src/__tests__/task-scheduler.test.ts +88 -23
  130. package/src/__tests__/update-bulletin-job.test.ts +96 -193
  131. package/src/__tests__/usage-cli.test.ts +11 -73
  132. package/src/__tests__/user-plugin-loader.test.ts +145 -0
  133. package/src/__tests__/vercel-config.test.ts +168 -0
  134. package/src/__tests__/web-search-catalog-parity.test.ts +86 -0
  135. package/src/__tests__/web-search.test.ts +303 -2
  136. package/src/__tests__/workspace-migration-039-drop-legacy-llm-keys.test.ts +1 -21
  137. package/src/__tests__/workspace-migration-057-repair-stale-gemini-model-ids.test.ts +58 -0
  138. package/src/__tests__/workspace-migration-069-seed-onboarding-threads.test.ts +53 -20
  139. package/src/__tests__/workspace-migration-072-seed-reply-suggestion-callsite.test.ts +191 -0
  140. package/src/__tests__/workspace-migration-076-drop-services-inference-mode.test.ts +211 -0
  141. package/src/__tests__/workspace-migration-077-seed-memory-router-callsite.test.ts +174 -0
  142. package/src/__tests__/workspace-migration-079-home-feed-notification-only.test.ts +323 -0
  143. package/src/__tests__/workspace-migration-080-restrict-vercel-api-token-metadata.test.ts +299 -0
  144. package/src/__tests__/workspace-migration-081-backfill-bash-allowed-tools.test.ts +410 -0
  145. package/src/__tests__/workspace-migration-082-backfill-managed-profile-labels.test.ts +268 -0
  146. package/src/__tests__/workspace-migration-unify-llm-callsite-configs.test.ts +3 -3
  147. package/src/__tests__/workspace-release-notes-feature-flag-guard.test.ts +115 -0
  148. package/src/acp/__tests__/helpers/which-stub.ts +4 -2
  149. package/src/acp/resolve-agent.test.ts +25 -0
  150. package/src/acp/resolve-agent.ts +13 -2
  151. package/src/acp/session-manager.ts +14 -0
  152. package/src/approvals/guardian-request-resolvers.ts +32 -87
  153. package/src/calls/relay-server.ts +35 -0
  154. package/src/calls/relay-setup-router.ts +36 -0
  155. package/src/calls/types.ts +1 -0
  156. package/src/calls/voice-session-bridge.ts +23 -4
  157. package/src/channels/config.ts +14 -1
  158. package/src/channels/types.ts +1 -0
  159. package/src/cli/AGENTS.md +164 -4
  160. package/src/cli/__tests__/notifications.test.ts +54 -0
  161. package/src/cli/commands/__tests__/avatar.test.ts +540 -0
  162. package/src/cli/commands/__tests__/backup.test.ts +236 -776
  163. package/src/cli/commands/__tests__/cache.test.ts +1 -1
  164. package/src/cli/commands/__tests__/changelog.test.ts +593 -0
  165. package/src/cli/commands/__tests__/channel-verification-sessions.test.ts +503 -0
  166. package/src/cli/commands/__tests__/conversations-import.test.ts +515 -0
  167. package/src/cli/commands/__tests__/domain-register.test.ts +140 -167
  168. package/src/cli/commands/__tests__/domain-status.test.ts +137 -76
  169. package/src/cli/commands/__tests__/email-attachment.test.ts +314 -337
  170. package/src/cli/commands/__tests__/email-core.test.ts +579 -0
  171. package/src/cli/commands/__tests__/image-generation.test.ts +87 -824
  172. package/src/cli/commands/__tests__/inference-send.test.ts +30 -266
  173. package/src/cli/commands/__tests__/inference-session.test.ts +423 -0
  174. package/src/cli/commands/__tests__/memory-v2.test.ts +81 -110
  175. package/src/cli/commands/__tests__/skills.test.ts +563 -0
  176. package/src/cli/commands/__tests__/status.test.ts +249 -0
  177. package/src/cli/commands/__tests__/stt.test.ts +320 -0
  178. package/src/cli/commands/__tests__/tts-synthesize.test.ts +4 -603
  179. package/src/cli/commands/__tests__/tts.test.ts +321 -0
  180. package/src/cli/commands/__tests__/webhooks.test.ts +86 -511
  181. package/src/cli/commands/attachment.ts +8 -3
  182. package/src/cli/commands/audit.ts +95 -64
  183. package/src/cli/commands/auth.ts +61 -58
  184. package/src/cli/commands/avatar.ts +276 -390
  185. package/src/cli/commands/backup.ts +409 -505
  186. package/src/cli/commands/bash.ts +9 -5
  187. package/src/cli/commands/browser.ts +28 -9
  188. package/src/cli/commands/cache.ts +9 -4
  189. package/src/cli/commands/changelog.ts +414 -0
  190. package/src/cli/commands/channel-verification-sessions.ts +238 -317
  191. package/src/cli/commands/clients.ts +8 -3
  192. package/src/cli/commands/completions.ts +9 -9
  193. package/src/cli/commands/config.ts +102 -72
  194. package/src/cli/commands/contacts.ts +575 -696
  195. package/src/cli/commands/conversations-defer.ts +17 -69
  196. package/src/cli/commands/conversations-import.ts +90 -253
  197. package/src/cli/commands/conversations.ts +346 -436
  198. package/src/cli/commands/credential-execution.ts +9 -6
  199. package/src/cli/commands/credentials.ts +456 -736
  200. package/src/cli/commands/domain.ts +128 -206
  201. package/src/cli/commands/email.ts +606 -794
  202. package/src/cli/commands/gateway.ts +8 -1
  203. package/src/cli/commands/image-generation.ts +157 -205
  204. package/src/cli/commands/inference-providers.ts +352 -0
  205. package/src/cli/commands/inference-session.ts +415 -0
  206. package/src/cli/commands/inference.ts +87 -65
  207. package/src/cli/commands/keys.ts +8 -3
  208. package/src/cli/commands/mcp.ts +103 -287
  209. package/src/cli/commands/memory-v2.ts +162 -516
  210. package/src/cli/commands/notifications.ts +33 -7
  211. package/src/cli/commands/oauth/apps.ts +292 -261
  212. package/src/cli/commands/oauth/connect.ts +176 -297
  213. package/src/cli/commands/oauth/disconnect.ts +16 -215
  214. package/src/cli/commands/oauth/index.ts +49 -45
  215. package/src/cli/commands/oauth/mode.ts +43 -199
  216. package/src/cli/commands/oauth/ping.ts +17 -125
  217. package/src/cli/commands/oauth/providers.ts +732 -921
  218. package/src/cli/commands/oauth/request.ts +60 -350
  219. package/src/cli/commands/oauth/shared.ts +11 -121
  220. package/src/cli/commands/oauth/status.ts +31 -121
  221. package/src/cli/commands/oauth/token.ts +13 -55
  222. package/src/cli/commands/pending.ts +19 -10
  223. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +133 -183
  224. package/src/cli/commands/platform/__tests__/connect.test.ts +66 -181
  225. package/src/cli/commands/platform/__tests__/disconnect.test.ts +71 -227
  226. package/src/cli/commands/platform/__tests__/status.test.ts +169 -287
  227. package/src/cli/commands/platform/connect.ts +16 -80
  228. package/src/cli/commands/platform/disconnect.ts +14 -112
  229. package/src/cli/commands/platform/index.ts +177 -246
  230. package/src/cli/commands/routes.ts +153 -336
  231. package/src/cli/commands/sequence.ts +316 -360
  232. package/src/cli/commands/skills.ts +449 -671
  233. package/src/cli/commands/status.ts +58 -37
  234. package/src/cli/commands/stt.ts +94 -262
  235. package/src/cli/commands/task.ts +14 -40
  236. package/src/cli/commands/trust.ts +8 -3
  237. package/src/cli/commands/tts.ts +162 -167
  238. package/src/cli/commands/ui.ts +35 -42
  239. package/src/cli/commands/usage.ts +188 -126
  240. package/src/cli/commands/watchers.ts +8 -3
  241. package/src/cli/commands/webhooks.ts +99 -193
  242. package/src/cli/lib/__tests__/register-command.test.ts +85 -0
  243. package/src/cli/lib/daemon-credential-client.ts +4 -5
  244. package/src/cli/lib/nested-value.ts +44 -0
  245. package/src/cli/lib/open-browser.ts +36 -0
  246. package/src/cli/lib/register-command.ts +19 -0
  247. package/src/cli/lib/time-ago.ts +34 -0
  248. package/src/cli/program.ts +2 -4
  249. package/src/cli/utils/__tests__/conversation-id.test.ts +66 -0
  250. package/src/cli/utils/__tests__/parse-duration.test.ts +49 -0
  251. package/src/cli/utils/conversation-id.ts +30 -0
  252. package/src/cli/utils/parse-duration.ts +41 -0
  253. package/src/config/acp-defaults.test.ts +5 -1
  254. package/src/config/acp-defaults.ts +11 -4
  255. package/src/config/bundled-skills/acp/TOOLS.json +2 -2
  256. package/src/config/bundled-skills/app-control/TOOLS.json +32 -0
  257. package/src/config/bundled-skills/contacts/SKILL.md +12 -45
  258. package/src/config/bundled-skills/contacts/TOOLS.json +0 -57
  259. package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +0 -12
  260. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -58
  261. package/src/config/bundled-tool-registry.ts +0 -2
  262. package/src/config/feature-flag-registry.json +16 -0
  263. package/src/config/llm-resolver.ts +16 -1
  264. package/src/config/loader.ts +76 -14
  265. package/src/config/raw-config-utils.ts +2 -30
  266. package/src/config/schema.ts +4 -0
  267. package/src/config/schemas/__tests__/memory-v2.test.ts +49 -0
  268. package/src/config/schemas/call-site-catalog.ts +29 -7
  269. package/src/config/schemas/llm-request-logs.ts +57 -0
  270. package/src/config/schemas/llm.ts +52 -2
  271. package/src/config/schemas/memory-retrospective.ts +48 -0
  272. package/src/config/schemas/memory-v2.ts +32 -1
  273. package/src/config/schemas/memory.ts +4 -0
  274. package/src/config/schemas/services.ts +15 -12
  275. package/src/config/seed-inference-profiles.ts +195 -134
  276. package/src/contacts/contact-store.ts +0 -61
  277. package/src/context/window-manager.ts +191 -5
  278. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +79 -0
  279. package/src/daemon/__tests__/conversation-tool-setup.test.ts +109 -4
  280. package/src/daemon/__tests__/daemon-skill-host.test.ts +10 -4
  281. package/src/daemon/approval-generators.ts +23 -29
  282. package/src/daemon/config-watcher.ts +2 -0
  283. package/src/daemon/conversation-agent-loop-handlers.ts +24 -0
  284. package/src/daemon/conversation-agent-loop.ts +127 -97
  285. package/src/daemon/conversation-error.ts +21 -0
  286. package/src/daemon/conversation-lifecycle.ts +46 -5
  287. package/src/daemon/conversation-process.ts +36 -19
  288. package/src/daemon/conversation-runtime-assembly.ts +14 -5
  289. package/src/daemon/conversation-slash.ts +175 -23
  290. package/src/daemon/conversation-store.ts +17 -10
  291. package/src/daemon/conversation-surfaces.ts +76 -12
  292. package/src/daemon/conversation-tool-setup.ts +24 -14
  293. package/src/daemon/conversation.ts +48 -9
  294. package/src/daemon/external-plugins-bootstrap.ts +18 -8
  295. package/src/daemon/guardian-action-generators.ts +7 -22
  296. package/src/daemon/handlers/config-model.ts +8 -126
  297. package/src/daemon/handlers/config-slack-channel.ts +10 -7
  298. package/src/daemon/handlers/config-vercel.ts +3 -1
  299. package/src/daemon/handlers/skills.ts +84 -5
  300. package/src/daemon/history-repair.ts +33 -6
  301. package/src/daemon/host-app-control-proxy.ts +44 -19
  302. package/src/daemon/host-bash-proxy.ts +85 -158
  303. package/src/daemon/host-browser-proxy.ts +96 -35
  304. package/src/daemon/host-proxy-base.ts +13 -1
  305. package/src/daemon/host-proxy-preactivation.ts +25 -1
  306. package/src/daemon/identity-helpers.ts +19 -0
  307. package/src/daemon/lifecycle.ts +42 -43
  308. package/src/daemon/meet-host-supervisor.ts +15 -15
  309. package/src/daemon/memory-v2-startup.ts +9 -2
  310. package/src/daemon/message-protocol.ts +6 -0
  311. package/src/daemon/message-types/bookmarks.ts +18 -0
  312. package/src/daemon/message-types/conversations.ts +12 -9
  313. package/src/daemon/message-types/messages.ts +9 -1
  314. package/src/daemon/message-types/sync.ts +60 -0
  315. package/src/daemon/pkb-reminder-builder.test.ts +54 -13
  316. package/src/daemon/pkb-reminder-builder.ts +21 -7
  317. package/src/daemon/process-message.ts +56 -23
  318. package/src/daemon/server.ts +23 -18
  319. package/src/daemon/shutdown-handlers.ts +0 -2
  320. package/src/daemon/tool-setup-types.ts +9 -0
  321. package/src/daemon/tool-side-effects.ts +6 -4
  322. package/src/daemon/wake-target-adapter.ts +11 -0
  323. package/src/export/transcript-formatter.ts +61 -2
  324. package/src/filing/filing-service.ts +40 -53
  325. package/src/heartbeat/__tests__/heartbeat-service.test.ts +359 -0
  326. package/src/heartbeat/heartbeat-run-store.ts +2 -1
  327. package/src/heartbeat/heartbeat-service.ts +148 -127
  328. package/src/home/__tests__/feed-types.test.ts +63 -131
  329. package/src/home/__tests__/feed-writer.test.ts +77 -278
  330. package/src/home/__tests__/post-connect-feed.test.ts +9 -12
  331. package/src/home/feed-types.ts +19 -73
  332. package/src/home/feed-writer.ts +25 -156
  333. package/src/home/post-connect-feed.ts +1 -3
  334. package/src/ipc/__tests__/cli-ipc.test.ts +2 -0
  335. package/src/ipc/__tests__/email-ipc.test.ts +506 -0
  336. package/src/ipc/__tests__/exit-helper.test.ts +104 -0
  337. package/src/ipc/__tests__/streaming-client.test.ts +237 -0
  338. package/src/ipc/__tests__/streaming-framing.test.ts +142 -0
  339. package/src/ipc/assistant-server.ts +55 -6
  340. package/src/ipc/cli-client.ts +370 -50
  341. package/src/ipc/routes/db-proxy-transaction.ts +151 -0
  342. package/src/ipc/skill-routes/__tests__/events-ipc.test.ts +60 -0
  343. package/src/ipc/skill-routes/events.ts +30 -3
  344. package/src/live-voice/__tests__/live-voice-session-manager.test.ts +46 -0
  345. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +1 -0
  346. package/src/live-voice/live-voice-session-manager.ts +11 -4
  347. package/src/live-voice/live-voice-session.ts +14 -6
  348. package/src/memory/__tests__/bookmark-crud.test.ts +258 -0
  349. package/src/memory/__tests__/bookmark-schema.test.ts +181 -0
  350. package/src/memory/__tests__/conversation-types.test.ts +36 -0
  351. package/src/memory/__tests__/find-most-recent-retrospective-for.test.ts +130 -0
  352. package/src/memory/__tests__/memory-retrospective-enqueue.test.ts +177 -0
  353. package/src/memory/__tests__/memory-retrospective-job.test.ts +328 -0
  354. package/src/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +213 -0
  355. package/src/memory/__tests__/memory-retrospective-trigger-check.test.ts +90 -0
  356. package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +69 -0
  357. package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +3 -0
  358. package/src/memory/bookmark-crud.ts +179 -0
  359. package/src/memory/context-search/__tests__/agent-runner-redaction.test.ts +31 -9
  360. package/src/memory/context-search/agent-protocol.ts +5 -1
  361. package/src/memory/context-search/agent-runner.ts +60 -85
  362. package/src/memory/context-search/limits.ts +1 -4
  363. package/src/memory/context-search/search.ts +23 -113
  364. package/src/memory/context-search/sources/conversations.ts +18 -6
  365. package/src/memory/context-search/sources/memory-v2.ts +39 -14
  366. package/src/memory/context-search/sources/memory.ts +7 -0
  367. package/src/memory/context-search/sources/workspace.ts +13 -10
  368. package/src/memory/context-search/types.ts +1 -1
  369. package/src/memory/conversation-bootstrap.ts +11 -0
  370. package/src/memory/conversation-crud.ts +312 -10
  371. package/src/memory/conversation-queries.ts +9 -5
  372. package/src/memory/conversation-title-service.ts +1 -0
  373. package/src/memory/conversation-types.ts +16 -0
  374. package/src/memory/db-init.ts +14 -0
  375. package/src/memory/embedding-backend.ts +2 -1
  376. package/src/memory/embedding-runtime-manager.ts +1 -2
  377. package/src/memory/graph/__tests__/remember-description.test.ts +55 -0
  378. package/src/memory/graph/conversation-graph-memory.ts +76 -5
  379. package/src/memory/graph/extraction.ts +4 -0
  380. package/src/memory/graph/graph-memory-state-store.ts +16 -3
  381. package/src/memory/graph/tool-handlers.ts +17 -7
  382. package/src/memory/graph/tools.ts +44 -5
  383. package/src/memory/indexer.ts +17 -0
  384. package/src/memory/jobs/__tests__/embed-concept-page.test.ts +13 -15
  385. package/src/memory/jobs/embed-concept-page.ts +45 -9
  386. package/src/memory/jobs-store.ts +51 -1
  387. package/src/memory/jobs-worker.ts +52 -3
  388. package/src/memory/llm-request-log-source-clickhouse.ts +317 -0
  389. package/src/memory/llm-request-log-source-local.ts +26 -0
  390. package/src/memory/llm-request-log-source.ts +97 -0
  391. package/src/memory/llm-request-log-store.ts +1 -1
  392. package/src/memory/memory-retrospective-constants.ts +13 -0
  393. package/src/memory/memory-retrospective-enqueue.ts +114 -0
  394. package/src/memory/memory-retrospective-job.ts +351 -0
  395. package/src/memory/memory-retrospective-startup-cleanup.ts +108 -0
  396. package/src/memory/memory-retrospective-state.ts +162 -0
  397. package/src/memory/memory-retrospective-trigger-check.ts +91 -0
  398. package/src/memory/memory-v2-activation-log-store.ts +49 -5
  399. package/src/memory/memory-v2-concept-frequency.ts +4 -0
  400. package/src/memory/message-content.ts +38 -1
  401. package/src/memory/migrations/227-add-conversation-inference-profile.ts +6 -1
  402. package/src/memory/migrations/228-rename-inference-profile-snake-case.ts +20 -7
  403. package/src/memory/migrations/229-delete-private-conversations.test.ts +70 -1
  404. package/src/memory/migrations/229-delete-private-conversations.ts +12 -0
  405. package/src/memory/migrations/231-repair-memory-graph-event-dates.ts +16 -2
  406. package/src/memory/migrations/240-conversation-inference-profile-session.ts +25 -0
  407. package/src/memory/migrations/241-activation-state-fk-cascade.ts +50 -0
  408. package/src/memory/migrations/242-message-bookmarks.ts +38 -0
  409. package/src/memory/migrations/243-provider-connections.ts +68 -0
  410. package/src/memory/migrations/244-provider-connection-status-label.ts +23 -0
  411. package/src/memory/migrations/245-memory-retrospective-state.ts +36 -0
  412. package/src/memory/migrations/246-backfill-provider-connection-label.ts +81 -0
  413. package/src/memory/migrations/__tests__/244-provider-connection-status-label.test.ts +84 -0
  414. package/src/memory/migrations/__tests__/245-memory-retrospective-state.test.ts +125 -0
  415. package/src/memory/migrations/__tests__/246-backfill-provider-connection-label.test.ts +192 -0
  416. package/src/memory/migrations/index.ts +7 -0
  417. package/src/memory/published-pages-store.ts +16 -0
  418. package/src/memory/schema/bookmarks.ts +38 -0
  419. package/src/memory/schema/conversations.ts +2 -0
  420. package/src/memory/schema/index.ts +2 -0
  421. package/src/memory/schema/inference.ts +29 -0
  422. package/src/memory/schema/memory-core.ts +9 -0
  423. package/src/memory/search/semantic.ts +1 -4
  424. package/src/memory/v2/__tests__/__snapshots__/prompts-router.test.ts.snap +27 -0
  425. package/src/memory/v2/__tests__/activation-store.test.ts +5 -5
  426. package/src/memory/v2/__tests__/activation.test.ts +11 -4
  427. package/src/memory/v2/__tests__/backfill-jobs.test.ts +38 -21
  428. package/src/memory/v2/__tests__/consolidation-job.test.ts +123 -135
  429. package/src/memory/v2/__tests__/edge-index.test.ts +1 -1
  430. package/src/memory/v2/__tests__/frontmatter-sweep.test.ts +111 -0
  431. package/src/memory/v2/__tests__/injection.test.ts +628 -10
  432. package/src/memory/v2/__tests__/migration.test.ts +7 -3
  433. package/src/memory/v2/__tests__/page-index.test.ts +277 -0
  434. package/src/memory/v2/__tests__/page-store.test.ts +14 -1
  435. package/src/memory/v2/__tests__/prompts-router.test.ts +257 -0
  436. package/src/memory/v2/__tests__/qdrant.test.ts +72 -0
  437. package/src/memory/v2/__tests__/reranker.test.ts +4 -4
  438. package/src/memory/v2/__tests__/router.test.ts +516 -0
  439. package/src/memory/v2/__tests__/sim.test.ts +45 -1
  440. package/src/memory/v2/__tests__/skill-store.test.ts +58 -3
  441. package/src/memory/v2/__tests__/static-context.test.ts +7 -22
  442. package/src/memory/v2/__tests__/sweep-job.test.ts +95 -0
  443. package/src/memory/v2/activation-store.ts +34 -5
  444. package/src/memory/v2/activation.ts +40 -27
  445. package/src/memory/v2/backfill-jobs.ts +17 -84
  446. package/src/memory/v2/consolidation-job.ts +85 -78
  447. package/src/memory/v2/frontmatter-sweep.ts +91 -0
  448. package/src/memory/v2/injection.ts +440 -109
  449. package/src/memory/v2/migration.ts +117 -20
  450. package/src/memory/v2/page-index.ts +191 -0
  451. package/src/memory/v2/page-store.ts +3 -0
  452. package/src/memory/v2/prompts/consolidation.ts +9 -7
  453. package/src/memory/v2/prompts/router.ts +192 -0
  454. package/src/memory/v2/qdrant.ts +100 -87
  455. package/src/memory/v2/reranker.ts +14 -7
  456. package/src/memory/v2/router.ts +322 -0
  457. package/src/memory/v2/sim.ts +25 -12
  458. package/src/memory/v2/skill-store.ts +118 -29
  459. package/src/memory/v2/static-context.ts +16 -9
  460. package/src/memory/v2/sweep-job.ts +122 -96
  461. package/src/memory/v2/types.ts +10 -6
  462. package/src/memory/validation.ts +13 -0
  463. package/src/notifications/__tests__/emit-signal-home-feed.test.ts +182 -0
  464. package/src/notifications/__tests__/home-feed-side-effect.test.ts +199 -0
  465. package/src/notifications/__tests__/signal-registry.test.ts +17 -0
  466. package/src/notifications/adapters/platform.ts +171 -0
  467. package/src/notifications/conversation-pairing.ts +2 -2
  468. package/src/notifications/copy-composer.ts +15 -0
  469. package/src/notifications/destination-resolver.ts +21 -0
  470. package/src/notifications/emit-signal.ts +28 -1
  471. package/src/notifications/home-feed-side-effect.ts +111 -0
  472. package/src/notifications/signal.ts +5 -0
  473. package/src/permissions/checker.ts +12 -0
  474. package/src/permissions/ipc-risk-types.ts +2 -0
  475. package/src/plugin-api/index.ts +13 -0
  476. package/src/plugin-api/package.json +12 -0
  477. package/src/plugin-api/types.ts +62 -0
  478. package/src/plugins/defaults/injectors.ts +19 -3
  479. package/src/plugins/external-plugin-loader.ts +294 -0
  480. package/src/plugins/types.ts +46 -30
  481. package/src/plugins/user-loader.ts +64 -41
  482. package/src/proactive-artifact/job.test.ts +12 -4
  483. package/src/proactive-artifact/job.ts +4 -0
  484. package/src/proactive-artifact/trigger-state.test.ts +9 -0
  485. package/src/proactive-artifact/trigger-state.ts +4 -0
  486. package/src/prompts/__tests__/system-prompt.test.ts +105 -0
  487. package/src/prompts/system-prompt.ts +22 -1
  488. package/src/prompts/update-bulletin-job.ts +61 -73
  489. package/src/providers/__tests__/dispatch-connection-routing.test.ts +279 -0
  490. package/src/providers/__tests__/inference.test.ts +288 -0
  491. package/src/providers/__tests__/provider-env-vars.test.ts +6 -0
  492. package/src/providers/__tests__/provider-secret-catalog.test.ts +6 -0
  493. package/src/providers/__tests__/retry-callsite.test.ts +14 -32
  494. package/src/providers/__tests__/satellite-connection-routing.test.ts +510 -0
  495. package/src/providers/__tests__/search-provider-catalog.test.ts +80 -0
  496. package/src/providers/anthropic/client.ts +95 -26
  497. package/src/providers/call-site-routing.ts +94 -16
  498. package/src/providers/connection-resolution.ts +163 -0
  499. package/src/providers/inference/__tests__/connections-status-label.test.ts +250 -0
  500. package/src/providers/inference/adapter-factory.ts +173 -0
  501. package/src/providers/inference/auth.ts +112 -0
  502. package/src/providers/inference/backfill.ts +196 -0
  503. package/src/providers/inference/connections.ts +356 -0
  504. package/src/providers/inference/resolve-auth.ts +65 -0
  505. package/src/providers/model-catalog.ts +104 -6
  506. package/src/providers/openai/responses-provider.ts +4 -2
  507. package/src/providers/provider-env-vars.ts +17 -7
  508. package/src/providers/provider-secret-catalog.ts +49 -30
  509. package/src/providers/provider-send-message.ts +41 -20
  510. package/src/providers/registry.ts +143 -159
  511. package/src/providers/retry.ts +18 -10
  512. package/src/providers/search-provider-catalog.ts +121 -0
  513. package/src/runtime/AGENTS.md +18 -5
  514. package/src/runtime/__tests__/background-job-runner.test.ts +357 -0
  515. package/src/runtime/__tests__/pre-first-message-gate.test.ts +82 -0
  516. package/src/runtime/actor-trust-resolver.ts +32 -10
  517. package/src/runtime/agent-wake.ts +35 -6
  518. package/src/runtime/assistant-event-hub.ts +3 -85
  519. package/src/runtime/auth/route-policy.ts +303 -8
  520. package/src/runtime/auth/same-actor.ts +2 -0
  521. package/src/runtime/background-job-runner.ts +339 -0
  522. package/src/runtime/btw-sidechain.ts +1 -0
  523. package/src/runtime/http-router.ts +36 -1
  524. package/src/runtime/http-server.ts +31 -5
  525. package/src/runtime/http-types.ts +2 -0
  526. package/src/runtime/middleware/__tests__/request-logger.test.ts +162 -0
  527. package/src/runtime/middleware/request-logger.ts +62 -1
  528. package/src/runtime/pre-first-message-gate.ts +83 -0
  529. package/src/runtime/routes/__tests__/backup-routes.test.ts +8 -1
  530. package/src/runtime/routes/__tests__/bookmark-routes.test.ts +251 -0
  531. package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +142 -0
  532. package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +315 -0
  533. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +189 -0
  534. package/src/runtime/routes/__tests__/home-feed-routes.test.ts +15 -136
  535. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +736 -0
  536. package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +4 -4
  537. package/src/runtime/routes/__tests__/stt-routes.test.ts +5 -1
  538. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +384 -0
  539. package/src/runtime/routes/__tests__/tts-routes.test.ts +6 -2
  540. package/src/runtime/routes/acp-routes.ts +10 -8
  541. package/src/runtime/routes/app-management-routes.ts +228 -3
  542. package/src/runtime/routes/approval-routes.ts +0 -18
  543. package/src/runtime/routes/audit-routes.ts +43 -0
  544. package/src/runtime/routes/auth-routes.ts +72 -0
  545. package/src/runtime/routes/avatar-routes.ts +273 -20
  546. package/src/runtime/routes/backup-routes.ts +406 -2
  547. package/src/runtime/routes/bookmark-routes.ts +154 -0
  548. package/src/runtime/routes/channel-verification-routes.ts +2 -1
  549. package/src/runtime/routes/contact-routes.ts +0 -160
  550. package/src/runtime/routes/conversation-cli-routes.ts +192 -0
  551. package/src/runtime/routes/conversation-management-routes.ts +30 -43
  552. package/src/runtime/routes/conversation-query-routes.ts +334 -86
  553. package/src/runtime/routes/conversation-routes.ts +31 -10
  554. package/src/runtime/routes/conversations-import-routes.ts +229 -0
  555. package/src/runtime/routes/credential-routes.ts +540 -0
  556. package/src/runtime/routes/debug-routes.ts +2 -2
  557. package/src/runtime/routes/document-pdf-renderer.ts +5 -1
  558. package/src/runtime/routes/domain-routes.ts +167 -0
  559. package/src/runtime/routes/email-routes.ts +603 -0
  560. package/src/runtime/routes/errors.ts +2 -2
  561. package/src/runtime/routes/events-routes.ts +192 -0
  562. package/src/runtime/routes/home-feed-routes.ts +6 -78
  563. package/src/runtime/routes/host-app-control-routes.ts +44 -2
  564. package/src/runtime/routes/host-browser-routes.ts +103 -22
  565. package/src/runtime/routes/http-adapter.ts +2 -0
  566. package/src/runtime/routes/identity-routes.ts +5 -0
  567. package/src/runtime/routes/image-generation-routes.ts +99 -0
  568. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +137 -1
  569. package/src/runtime/routes/inbound-stages/background-dispatch.ts +87 -7
  570. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +156 -0
  571. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +22 -4
  572. package/src/runtime/routes/index.ts +36 -0
  573. package/src/runtime/routes/inference-profile-session-handler.ts +312 -0
  574. package/src/runtime/routes/inference-profile-session-reaper.ts +98 -0
  575. package/src/runtime/routes/inference-profile-session-routes.ts +146 -0
  576. package/src/runtime/routes/inference-provider-connection-routes.ts +317 -0
  577. package/src/runtime/routes/inference-send-routes.ts +115 -0
  578. package/src/runtime/routes/integrations/twilio.ts +1 -0
  579. package/src/runtime/routes/mcp-auth-routes.ts +283 -9
  580. package/src/runtime/routes/memory-v2-routes.ts +13 -398
  581. package/src/runtime/routes/notification-routes.ts +2 -0
  582. package/src/runtime/routes/oauth-apps.ts +112 -7
  583. package/src/runtime/routes/oauth-commands-routes.ts +1007 -0
  584. package/src/runtime/routes/oauth-connect-routes.ts +67 -5
  585. package/src/runtime/routes/oauth-providers.ts +298 -8
  586. package/src/runtime/routes/platform-routes.ts +336 -0
  587. package/src/runtime/routes/playground/inject-failures.ts +2 -1
  588. package/src/runtime/routes/playground/reset-circuit.ts +2 -1
  589. package/src/runtime/routes/playground/state.ts +2 -1
  590. package/src/runtime/routes/publish-routes.ts +221 -0
  591. package/src/runtime/routes/schedule-routes.ts +82 -0
  592. package/src/runtime/routes/sequence-routes.ts +291 -0
  593. package/src/runtime/routes/settings-routes.ts +2 -10
  594. package/src/runtime/routes/skills-routes.ts +31 -1
  595. package/src/runtime/routes/stt-routes.ts +240 -3
  596. package/src/runtime/routes/surface-action-routes.ts +43 -7
  597. package/src/runtime/routes/tts-routes.ts +67 -0
  598. package/src/runtime/routes/types.ts +32 -0
  599. package/src/runtime/routes/user-routes-cli.ts +243 -0
  600. package/src/runtime/routes/webhook-routes.ts +165 -0
  601. package/src/runtime/sync/resource-sync-events.ts +25 -0
  602. package/src/runtime/sync/sync-publisher.test.ts +105 -0
  603. package/src/runtime/sync/sync-publisher.ts +21 -0
  604. package/src/schedule/scheduler.ts +200 -123
  605. package/src/security/__tests__/provider-key-env-fallback.test.ts +12 -6
  606. package/src/security/secret-patterns.ts +3 -0
  607. package/src/sequence/engine.ts +38 -40
  608. package/src/subagent/manager.ts +20 -15
  609. package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +206 -0
  610. package/src/tools/browser/browser-execution.ts +15 -4
  611. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +174 -0
  612. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +16 -13
  613. package/src/tools/browser/cdp-client/extension-cdp-client.ts +24 -1
  614. package/src/tools/browser/cdp-client/factory.ts +66 -5
  615. package/src/tools/browser/runtime-check.ts +77 -0
  616. package/src/tools/memory/register.test.ts +3 -3
  617. package/src/tools/memory/register.ts +9 -1
  618. package/src/tools/network/__tests__/web-search.test.ts +156 -0
  619. package/src/tools/network/web-search.ts +280 -37
  620. package/src/tools/permission-checker.ts +13 -5
  621. package/src/tools/subagent/spawn.ts +3 -3
  622. package/src/tools/terminal/shell.ts +44 -0
  623. package/src/usage/attribution.ts +3 -2
  624. package/src/util/pricing.ts +86 -160
  625. package/src/watcher/__tests__/engine.test.ts +301 -0
  626. package/src/watcher/constants.ts +7 -0
  627. package/src/watcher/engine.ts +90 -90
  628. package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +6 -9
  629. package/src/workspace/migrations/054-seed-recall-callsite.ts +10 -1
  630. package/src/workspace/migrations/057-repair-stale-gemini-model-ids.ts +28 -4
  631. package/src/workspace/migrations/069-seed-onboarding-threads.ts +8 -2
  632. package/src/workspace/migrations/072-seed-reply-suggestion-callsite.ts +104 -0
  633. package/src/workspace/migrations/073-repair-recall-callsite-empty-profile.ts +93 -0
  634. package/src/workspace/migrations/074-drop-deprecated-secret-detection-keys.ts +117 -0
  635. package/src/workspace/migrations/075-memory-v2-bm25-b-default-reembed.ts +61 -0
  636. package/src/workspace/migrations/076-drop-services-inference-mode.ts +62 -0
  637. package/src/workspace/migrations/077-seed-memory-router-callsite.ts +89 -0
  638. package/src/workspace/migrations/078-release-notes-tavily-web-search.ts +66 -0
  639. package/src/workspace/migrations/079-home-feed-notification-only.ts +197 -0
  640. package/src/workspace/migrations/080-restrict-vercel-api-token-metadata.ts +182 -0
  641. package/src/workspace/migrations/081-backfill-bash-allowed-tools-for-injection-credentials.ts +160 -0
  642. package/src/workspace/migrations/082-backfill-managed-profile-labels.ts +154 -0
  643. package/src/workspace/migrations/registry.ts +22 -0
  644. package/src/workspace/migrations/runner.ts +13 -2
  645. package/src/workspace/migrations/types.ts +13 -3
  646. package/src/workspace/provider-commit-message-generator.ts +3 -2
  647. package/src/__tests__/context-search-pkb-source.test.ts +0 -498
  648. package/src/__tests__/credentials-cli.test.ts +0 -1225
  649. package/src/__tests__/memory-admin-recall.test.ts +0 -213
  650. package/src/approvals/__tests__/guardian-feed-event.test.ts +0 -303
  651. package/src/cli/commands/__tests__/email-download.test.ts +0 -260
  652. package/src/cli/commands/__tests__/email-list.test.ts +0 -216
  653. package/src/cli/commands/__tests__/email-register.test.ts +0 -186
  654. package/src/cli/commands/__tests__/email-send.test.ts +0 -416
  655. package/src/cli/commands/__tests__/email-status.test.ts +0 -185
  656. package/src/cli/commands/__tests__/email-unregister.test.ts +0 -168
  657. package/src/cli/commands/__tests__/routes.test.ts +0 -562
  658. package/src/cli/commands/__tests__/stt-transcribe.test.ts +0 -454
  659. package/src/cli/commands/autonomy.ts +0 -365
  660. package/src/cli/commands/memory.ts +0 -424
  661. package/src/cli/commands/oauth/__tests__/connect.test.ts +0 -947
  662. package/src/cli/commands/oauth/__tests__/disconnect.test.ts +0 -686
  663. package/src/cli/commands/oauth/__tests__/mode.test.ts +0 -632
  664. package/src/cli/commands/oauth/__tests__/ping.test.ts +0 -631
  665. package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +0 -573
  666. package/src/cli/commands/oauth/__tests__/providers-register.test.ts +0 -330
  667. package/src/cli/commands/oauth/__tests__/providers-update.test.ts +0 -521
  668. package/src/cli/commands/oauth/__tests__/status.test.ts +0 -551
  669. package/src/cli/commands/oauth/__tests__/token.test.ts +0 -420
  670. package/src/cli/lib/daemon-avatar-client.ts +0 -37
  671. package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -87
  672. package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +0 -207
  673. package/src/daemon/__tests__/conversation-feed-event.test.ts +0 -304
  674. package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +0 -233
  675. package/src/home/__tests__/assistant-feed-authoring.test.ts +0 -156
  676. package/src/home/__tests__/emit-feed-event.test.ts +0 -169
  677. package/src/home/__tests__/feed-population-integration.test.ts +0 -312
  678. package/src/home/__tests__/feed-scheduler.test.ts +0 -222
  679. package/src/home/__tests__/phase5-exit-criteria.test.ts +0 -229
  680. package/src/home/__tests__/platform-gmail-digest.test.ts +0 -222
  681. package/src/home/__tests__/rollup-producer.test.ts +0 -507
  682. package/src/home/assistant-feed-authoring.ts +0 -135
  683. package/src/home/emit-feed-event.ts +0 -169
  684. package/src/home/feed-scheduler.ts +0 -281
  685. package/src/home/platform-gmail-digest.ts +0 -163
  686. package/src/home/rewrite-command-preview.ts +0 -66
  687. package/src/home/rewrite-feed-title.ts +0 -58
  688. package/src/home/rollup-producer.ts +0 -426
  689. package/src/memory/admin.ts +0 -326
  690. package/src/memory/context-search/sources/pkb.ts +0 -476
  691. package/src/memory/graph/compaction.ts +0 -299
  692. /package/src/cli/{commands → lib}/cache-fs.ts +0 -0
@@ -1,58 +1,29 @@
1
1
  /**
2
2
  * `assistant webhooks` — unified webhook URL management.
3
3
  *
4
- * Abstracts over the platform/self-hosted split so skills and setup flows
5
- * can get a callback URL in one command without branching on IS_PLATFORM,
6
- * loading the public-ingress skill, or calling `platform callback-routes
7
- * register` directly.
4
+ * Thin IPC wrapper that delegates webhook operations to the daemon.
8
5
  *
9
- * Platform-managed: registers a callback route and returns the platform URL.
10
- * Self-hosted: resolves ingress.publicBaseUrl and appends the path.
6
+ * Platform-managed: daemon registers a callback route and returns the platform URL.
7
+ * Self-hosted: daemon resolves ingress.publicBaseUrl and appends the path.
11
8
  */
12
9
 
13
10
  import type { Command } from "commander";
14
11
 
15
- import { getIsPlatform } from "../../config/env-registry.js";
16
- import { getConfig } from "../../config/loader.js";
17
- import {
18
- registerCallbackRoute,
19
- resolvePlatformCallbackRegistrationContext,
20
- } from "../../inbound/platform-callback-registration.js";
21
- import { getPublicBaseUrl } from "../../inbound/public-ingress-urls.js";
12
+ import { cliIpcCall, exitFromIpcResult } from "../../ipc/cli-client.js";
13
+ import { registerCommand } from "../lib/register-command.js";
22
14
  import { log } from "../logger.js";
23
15
  import { shouldOutputJson, writeOutput } from "../output.js";
24
16
 
25
- // ---------------------------------------------------------------------------
26
- // Type → path derivation
27
- // ---------------------------------------------------------------------------
28
-
29
- /**
30
- * Derive the webhook path from the type name.
31
- *
32
- * Convention: underscores become path separators, prefixed with `webhooks/`.
33
- * telegram → webhooks/telegram
34
- * twilio_voice → webhooks/twilio/voice
35
- * twilio_status → webhooks/twilio/status
36
- * resend → webhooks/resend
37
- * oauth_callback → webhooks/oauth/callback
38
- */
39
- function deriveWebhookPath(type: string): string {
40
- return `webhooks/${type.replace(/_/g, "/")}`;
41
- }
42
-
43
- // ---------------------------------------------------------------------------
44
- // Command registration
45
- // ---------------------------------------------------------------------------
46
-
47
17
  export function registerWebhooksCommand(program: Command): void {
48
- const webhooks = program
49
- .command("webhooks")
50
- .description("Manage webhook callback URLs for external integrations")
51
- .option("--json", "Machine-readable compact JSON output");
52
-
53
- webhooks.addHelpText(
54
- "after",
55
- `
18
+ registerCommand(program, {
19
+ name: "webhooks",
20
+ transport: "ipc",
21
+ description: "Manage webhook callback URLs for external integrations",
22
+ build: (webhooks) => {
23
+ webhooks.option("--json", "Machine-readable compact JSON output");
24
+ webhooks.addHelpText(
25
+ "after",
26
+ `
56
27
  Resolves a stable callback URL that external services (Telegram, Twilio,
57
28
  email providers, OAuth) should use to reach this assistant.
58
29
 
@@ -73,20 +44,20 @@ Examples:
73
44
  $ assistant webhooks register resend --source "@bot_handle"
74
45
  $ assistant webhooks list
75
46
  $ assistant webhooks list --json`,
76
- );
77
-
78
- // ---------------------------------------------------------------------------
79
- // webhooks register <type>
80
- // ---------------------------------------------------------------------------
81
-
82
- webhooks
83
- .command("register <type>")
84
- .description(
85
- "Get a callback URL for a webhook type, registering with the platform if needed",
86
- )
87
- .addHelpText(
88
- "after",
89
- `
47
+ );
48
+
49
+ // -----------------------------------------------------------------------
50
+ // webhooks register <type>
51
+ // -----------------------------------------------------------------------
52
+
53
+ webhooks
54
+ .command("register <type>")
55
+ .description(
56
+ "Get a callback URL for a webhook type, registering with the platform if needed",
57
+ )
58
+ .addHelpText(
59
+ "after",
60
+ `
90
61
  Resolves a callback URL for the given webhook type. On platform-managed
91
62
  assistants (IS_PLATFORM=true), registers a callback route with the platform
92
63
  gateway and returns the stable external URL. On self-hosted assistants,
@@ -114,74 +85,49 @@ Examples:
114
85
  $ assistant webhooks register twilio_voice --json
115
86
  $ assistant webhooks register resend --json
116
87
  $ assistant webhooks register custom_provider --path webhooks/my-provider --json`,
117
- )
118
- .option("--path <path>", "Override the derived webhook path")
119
- .option(
120
- "--source <label>",
121
- "Human-readable source label for admin display (e.g. bot handle, phone number)",
122
- )
123
- .action(
124
- async (
125
- type: string,
126
- opts: { path?: string; source?: string },
127
- cmd: Command,
128
- ) => {
129
- try {
130
- const webhookPath = opts.path ?? deriveWebhookPath(type);
131
-
132
- let callbackUrl: string;
133
- let mode: "platform" | "self-hosted";
134
-
135
- if (getIsPlatform()) {
136
- // Platform-managed: register callback route
137
- callbackUrl = await registerCallbackRoute(
138
- webhookPath,
139
- type,
140
- opts.source,
141
- );
142
- mode = "platform";
143
- } else {
144
- // Self-hosted: use ingress.publicBaseUrl
145
- const config = getConfig();
146
- const baseUrl = getPublicBaseUrl(config);
147
- callbackUrl = `${baseUrl}/${webhookPath}`;
148
- mode = "self-hosted";
149
- }
150
-
151
- if (shouldOutputJson(cmd)) {
152
- writeOutput(cmd, {
153
- ok: true,
154
- callbackUrl,
155
- type,
156
- path: webhookPath,
157
- mode,
88
+ )
89
+ .option("--path <path>", "Override the derived webhook path")
90
+ .option(
91
+ "--source <label>",
92
+ "Human-readable source label for admin display (e.g. bot handle, phone number)",
93
+ )
94
+ .action(
95
+ async (
96
+ type: string,
97
+ opts: { path?: string; source?: string },
98
+ cmd: Command,
99
+ ) => {
100
+ const r = await cliIpcCall<{
101
+ callbackUrl: string;
102
+ type: string;
103
+ path: string;
104
+ mode: "platform" | "self-hosted";
105
+ }>("webhooks_register", {
106
+ body: {
107
+ type,
108
+ path: opts.path,
109
+ source: opts.source,
110
+ },
158
111
  });
159
- } else {
160
- // Plain mode: emit only the URL so callers can capture it with $()
161
- process.stdout.write(callbackUrl + "\n");
162
- }
163
- } catch (err) {
164
- const message = err instanceof Error ? err.message : String(err);
165
- if (shouldOutputJson(cmd)) {
166
- writeOutput(cmd, { ok: false, error: message });
167
- } else {
168
- log.error(message);
169
- }
170
- process.exitCode = 1;
171
- }
172
- },
173
- );
174
-
175
- // ---------------------------------------------------------------------------
176
- // webhooks list
177
- // ---------------------------------------------------------------------------
178
-
179
- webhooks
180
- .command("list")
181
- .description("List registered webhook callback routes")
182
- .addHelpText(
183
- "after",
184
- `
112
+ if (!r.ok) return exitFromIpcResult({ ok: false, error: r.error, statusCode: r.statusCode }, cmd);
113
+ if (shouldOutputJson(cmd)) {
114
+ writeOutput(cmd, { ok: true, ...r.result });
115
+ } else {
116
+ process.stdout.write(r.result!.callbackUrl + "\n");
117
+ }
118
+ },
119
+ );
120
+
121
+ // -----------------------------------------------------------------------
122
+ // webhooks list
123
+ // -----------------------------------------------------------------------
124
+
125
+ webhooks
126
+ .command("list")
127
+ .description("List registered webhook callback routes")
128
+ .addHelpText(
129
+ "after",
130
+ `
185
131
  Lists all webhook callback routes registered with the platform for this
186
132
  assistant. Only available when platform credentials are configured (either
187
133
  via IS_PLATFORM or 'assistant platform connect').
@@ -193,78 +139,38 @@ on demand.
193
139
  Examples:
194
140
  $ assistant webhooks list
195
141
  $ assistant webhooks list --json`,
196
- )
197
- .action(async (_opts: Record<string, unknown>, cmd: Command) => {
198
- try {
199
- const context = await resolvePlatformCallbackRegistrationContext();
200
- if (!context.platformBaseUrl || !context.authHeader) {
201
- const errorMsg =
202
- "Self-hosted webhook listing coming soon. Use 'assistant webhooks register <type>' to resolve URLs on demand.";
203
- if (shouldOutputJson(cmd)) {
204
- writeOutput(cmd, { ok: false, error: errorMsg });
205
- } else {
206
- log.error(errorMsg);
207
- }
208
- process.exitCode = 1;
209
- return;
210
- }
211
-
212
- const url = `${context.platformBaseUrl}/v1/internal/gateway/callback-routes/`;
213
- const response = await fetch(url, {
214
- method: "GET",
215
- headers: {
216
- Authorization: context.authHeader,
217
- Accept: "application/json",
218
- },
219
- signal: AbortSignal.timeout(10_000),
220
- });
221
-
222
- if (!response.ok) {
223
- const detail = await response.text().catch(() => "");
224
- const errorMsg = `Failed to list webhook routes (HTTP ${response.status}): ${detail}`;
142
+ )
143
+ .action(async (_opts: Record<string, unknown>, cmd: Command) => {
144
+ const r = await cliIpcCall<{
145
+ routes: Array<{
146
+ id: string;
147
+ assistant_id: string;
148
+ type: string;
149
+ callback_path: string;
150
+ callback_url: string;
151
+ source_identifier: string | null;
152
+ }>;
153
+ }>("webhooks_list", {});
154
+ if (!r.ok) return exitFromIpcResult({ ok: false, error: r.error, statusCode: r.statusCode }, cmd);
225
155
  if (shouldOutputJson(cmd)) {
226
- writeOutput(cmd, { ok: false, error: errorMsg });
156
+ writeOutput(cmd, { ok: true, routes: r.result!.routes });
227
157
  } else {
228
- log.error(errorMsg);
229
- }
230
- process.exitCode = 1;
231
- return;
232
- }
233
-
234
- const routes = (await response.json()) as Array<{
235
- id: string;
236
- assistant_id: string;
237
- type: string;
238
- callback_path: string;
239
- callback_url: string;
240
- source_identifier: string | null;
241
- }>;
242
-
243
- if (shouldOutputJson(cmd)) {
244
- writeOutput(cmd, { ok: true, routes });
245
- } else {
246
- if (routes.length === 0) {
247
- log.info("No webhook routes registered.");
248
- } else {
249
- log.info(`${routes.length} webhook route(s) registered:\n`);
250
- for (const route of routes) {
251
- log.info(` Type: ${route.type}`);
252
- log.info(` URL: ${route.callback_url}`);
253
- if (route.source_identifier) {
254
- log.info(` Source: ${route.source_identifier}`);
158
+ const routes = r.result!.routes;
159
+ if (routes.length === 0) {
160
+ log.info("No webhook routes registered.");
161
+ } else {
162
+ log.info(`${routes.length} webhook route(s) registered:\n`);
163
+ for (const route of routes) {
164
+ log.info(` Type: ${route.type}`);
165
+ log.info(` URL: ${route.callback_url}`);
166
+ if (route.source_identifier) {
167
+ log.info(` Source: ${route.source_identifier}`);
168
+ }
169
+ log.info("");
255
170
  }
256
- log.info("");
257
171
  }
258
172
  }
259
- }
260
- } catch (err) {
261
- const message = err instanceof Error ? err.message : String(err);
262
- if (shouldOutputJson(cmd)) {
263
- writeOutput(cmd, { ok: false, error: message });
264
- } else {
265
- log.error(message);
266
- }
267
- process.exitCode = 1;
268
- }
269
- });
173
+ });
174
+ },
175
+ });
270
176
  }
@@ -0,0 +1,85 @@
1
+ import { describe, expect, test } from "bun:test";
2
+
3
+ import { Command } from "commander";
4
+
5
+ import { type CommandTransport, registerCommand } from "../register-command.js";
6
+
7
+ describe("registerCommand", () => {
8
+ test("registers a command with the correct name and description", () => {
9
+ const parent = new Command();
10
+ const result = registerCommand(parent, {
11
+ name: "test-cmd",
12
+ transport: "ipc",
13
+ description: "A test command",
14
+ build: () => {},
15
+ });
16
+
17
+ expect(result.name()).toBe("test-cmd");
18
+ expect(result.description()).toBe("A test command");
19
+ });
20
+
21
+ test("calls build with the command instance", () => {
22
+ const parent = new Command();
23
+ let receivedCmd: Command | undefined;
24
+
25
+ registerCommand(parent, {
26
+ name: "my-cmd",
27
+ transport: "local",
28
+ description: "My command",
29
+ build: (cmd) => {
30
+ receivedCmd = cmd;
31
+ },
32
+ });
33
+
34
+ expect(receivedCmd).toBeDefined();
35
+ expect(receivedCmd!.name()).toBe("my-cmd");
36
+ });
37
+
38
+ test("returns the registered command", () => {
39
+ const parent = new Command();
40
+ const result = registerCommand(parent, {
41
+ name: "ret-cmd",
42
+ transport: "bootstrap",
43
+ description: "Return test",
44
+ build: () => {},
45
+ });
46
+
47
+ expect(result).toBeInstanceOf(Command);
48
+ expect(result.name()).toBe("ret-cmd");
49
+ });
50
+
51
+ test.each([
52
+ ["ipc" as CommandTransport],
53
+ ["local" as CommandTransport],
54
+ ["bootstrap" as CommandTransport],
55
+ ])("accepts transport value: %s", (transport) => {
56
+ const parent = new Command();
57
+ let buildCalled = false;
58
+
59
+ const result = registerCommand(parent, {
60
+ name: `cmd-${transport}`,
61
+ transport,
62
+ description: `Command with transport ${transport}`,
63
+ build: () => {
64
+ buildCalled = true;
65
+ },
66
+ });
67
+
68
+ expect(buildCalled).toBe(true);
69
+ expect(result.name()).toBe(`cmd-${transport}`);
70
+ expect(result.description()).toBe(`Command with transport ${transport}`);
71
+ });
72
+
73
+ test("attaches the command as a subcommand of parent", () => {
74
+ const parent = new Command("program");
75
+ registerCommand(parent, {
76
+ name: "sub",
77
+ transport: "ipc",
78
+ description: "Subcommand",
79
+ build: () => {},
80
+ });
81
+
82
+ const names = parent.commands.map((c) => c.name());
83
+ expect(names).toContain("sub");
84
+ });
85
+ });
@@ -48,8 +48,8 @@ export async function setSecureKeyViaDaemon(
48
48
  value: string,
49
49
  ): Promise<SetSecureKeyResult> {
50
50
  const ipc = await cliIpcCall<{ success: boolean; error?: string }>(
51
- "secrets/write",
52
- { type, name, value },
51
+ "secrets_add",
52
+ { body: { type, name, value } },
53
53
  );
54
54
 
55
55
  if (ipc.ok && ipc.result?.success) {
@@ -109,9 +109,8 @@ export async function deleteSecureKeyViaDaemon(
109
109
  type: string,
110
110
  name: string,
111
111
  ): Promise<DeleteSecureKeyResult> {
112
- const ipc = await cliIpcCall<{ success: boolean }>("secrets/delete", {
113
- type,
114
- name,
112
+ const ipc = await cliIpcCall<{ success: boolean }>("secrets_delete", {
113
+ body: { type, name },
115
114
  });
116
115
 
117
116
  if (ipc.ok && ipc.result?.success) {
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Dotted-path get/set helpers for the CLI.
3
+ *
4
+ * These two functions are byte-for-byte equivalent to the implementations in
5
+ * `config/loader.ts` (see `getNestedValue` / `setNestedValue` there). They
6
+ * are inlined here so the IPC-tagged `config` command can walk dotted paths
7
+ * without importing `config/loader.js`, which has module-level side effects
8
+ * (config cache, file watcher, etc.) inappropriate for the CLI process.
9
+ *
10
+ * Loader and CLI both call `setNestedValue("a.b.c", v)`-style helpers - if
11
+ * the behavior needs to change in one place, change it in both.
12
+ */
13
+
14
+ export function getNestedValue(
15
+ obj: Record<string, unknown>,
16
+ path: string,
17
+ ): unknown {
18
+ const keys = path.split(".");
19
+ let current: unknown = obj;
20
+ for (const key of keys) {
21
+ if (current == null || typeof current !== "object") {
22
+ return undefined;
23
+ }
24
+ current = (current as Record<string, unknown>)[key];
25
+ }
26
+ return current;
27
+ }
28
+
29
+ export function setNestedValue(
30
+ obj: Record<string, unknown>,
31
+ path: string,
32
+ value: unknown,
33
+ ): void {
34
+ const keys = path.split(".");
35
+ let current = obj;
36
+ for (let i = 0; i < keys.length - 1; i++) {
37
+ const key = keys[i]!;
38
+ if (current[key] == null || typeof current[key] !== "object") {
39
+ current[key] = {};
40
+ }
41
+ current = current[key] as Record<string, unknown>;
42
+ }
43
+ current[keys[keys.length - 1]!] = value;
44
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * CLI-side helper that opens a URL on the user's host machine.
3
+ *
4
+ * Writes an `open_url` event to the `signals/emit-event` file so that the
5
+ * daemon's ConfigWatcher picks it up and publishes it to connected clients
6
+ * (e.g. the Swift macOS app) via the assistant event hub.
7
+ *
8
+ * Uses only `node:` imports so it's safe for `ipc`-tagged CLI commands.
9
+ */
10
+
11
+ import { mkdirSync, writeFileSync } from "node:fs";
12
+ import { join } from "node:path";
13
+
14
+ function getWorkspaceDir(): string {
15
+ return (
16
+ process.env.VELLUM_WORKSPACE_DIR ??
17
+ join(
18
+ process.env.HOME ?? process.env.USERPROFILE ?? "/tmp",
19
+ ".vellum",
20
+ "workspace",
21
+ )
22
+ );
23
+ }
24
+
25
+ export function openInHostBrowser(url: string): void {
26
+ try {
27
+ const signalsDir = join(getWorkspaceDir(), "signals");
28
+ mkdirSync(signalsDir, { recursive: true });
29
+ writeFileSync(
30
+ join(signalsDir, "emit-event"),
31
+ JSON.stringify({ type: "open_url", url }),
32
+ );
33
+ } catch {
34
+ // Best-effort — caller will display the URL as a fallback
35
+ }
36
+ }
@@ -0,0 +1,19 @@
1
+ import type { Command } from "commander";
2
+
3
+ export type CommandTransport = "ipc" | "local" | "bootstrap";
4
+
5
+ interface RegisterCommandOpts {
6
+ name: string;
7
+ transport: CommandTransport;
8
+ description: string;
9
+ build: (cmd: Command) => void;
10
+ }
11
+
12
+ export function registerCommand(
13
+ parent: Command,
14
+ opts: RegisterCommandOpts,
15
+ ): Command {
16
+ const cmd = parent.command(opts.name).description(opts.description);
17
+ opts.build(cmd);
18
+ return cmd;
19
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Relative-time formatter for CLI output.
3
+ *
4
+ * Pure function with no daemon-internal imports — safe for IPC-tagged commands.
5
+ */
6
+ export function timeAgo(timestamp: number): string {
7
+ const seconds = Math.floor((Date.now() - timestamp) / 1000);
8
+ if (seconds < 60) return "just now";
9
+ const minutes = Math.floor(seconds / 60);
10
+ if (minutes < 60) return `${minutes}m ago`;
11
+ const hours = Math.floor(minutes / 60);
12
+ if (hours < 24) return `${hours}h ago`;
13
+ const days = Math.floor(hours / 24);
14
+ if (days === 1) return "yesterday";
15
+ if (days < 14) return `${days}d ago`;
16
+ const weeks = Math.floor(days / 7);
17
+ if (weeks < 8) return `${weeks}w ago`;
18
+ const date = new Date(timestamp);
19
+ const months = [
20
+ "Jan",
21
+ "Feb",
22
+ "Mar",
23
+ "Apr",
24
+ "May",
25
+ "Jun",
26
+ "Jul",
27
+ "Aug",
28
+ "Sep",
29
+ "Oct",
30
+ "Nov",
31
+ "Dec",
32
+ ];
33
+ return `${months[date.getMonth()]} ${date.getDate()}`;
34
+ }
@@ -10,12 +10,12 @@ import { APP_VERSION } from "../version.js";
10
10
  import { registerAttachmentCommand } from "./commands/attachment.js";
11
11
  import { registerAuditCommand } from "./commands/audit.js";
12
12
  import { registerAuthCommand } from "./commands/auth.js";
13
- import { registerAutonomyCommand } from "./commands/autonomy.js";
14
13
  import { registerAvatarCommand } from "./commands/avatar.js";
15
14
  import { registerBackupCommand } from "./commands/backup.js";
16
15
  import { registerBashCommand } from "./commands/bash.js";
17
16
  import { registerBrowserCommand } from "./commands/browser.js";
18
17
  import { registerCacheCommand } from "./commands/cache.js";
18
+ import { registerChangelogCommand } from "./commands/changelog.js";
19
19
  import { registerChannelVerificationSessionsCommand } from "./commands/channel-verification-sessions.js";
20
20
  import { registerClientsCommand } from "./commands/clients.js";
21
21
  import { registerCompletionsCommand } from "./commands/completions.js";
@@ -32,7 +32,6 @@ import { registerImageGenerationCommand } from "./commands/image-generation.js";
32
32
  import { registerInferenceCommand } from "./commands/inference.js";
33
33
  import { registerKeysCommand } from "./commands/keys.js";
34
34
  import { registerMcpCommand } from "./commands/mcp.js";
35
- import { registerMemoryCommand } from "./commands/memory.js";
36
35
  import { registerMemoryV2Command } from "./commands/memory-v2.js";
37
36
  import { registerNotificationsCommand } from "./commands/notifications.js";
38
37
  import { registerOAuthCommand } from "./commands/oauth/index.js";
@@ -80,12 +79,12 @@ Examples:
80
79
  registerAttachmentCommand(program);
81
80
  registerAuditCommand(program);
82
81
  registerAuthCommand(program);
83
- registerAutonomyCommand(program);
84
82
  registerAvatarCommand(program);
85
83
  registerBackupCommand(program);
86
84
  registerBashCommand(program);
87
85
  registerBrowserCommand(program);
88
86
  registerCacheCommand(program);
87
+ registerChangelogCommand(program);
89
88
  registerChannelVerificationSessionsCommand(program);
90
89
  registerClientsCommand(program);
91
90
  registerCompletionsCommand(program);
@@ -103,7 +102,6 @@ Examples:
103
102
  registerInferenceCommand(program);
104
103
  registerKeysCommand(program);
105
104
  registerMcpCommand(program);
106
- registerMemoryCommand(program);
107
105
  registerMemoryV2Command(program);
108
106
  registerNotificationsCommand(program);
109
107
  registerOAuthCommand(program);