@vellumai/assistant 0.10.2-dev.202606250318.5e7cfb0 → 0.10.2

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 (430) hide show
  1. package/bun.lock +0 -20
  2. package/docs/workspace-tools.md +33 -42
  3. package/eslint-rules/cli-no-daemon-internals.js +0 -6
  4. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +0 -31
  5. package/node_modules/@vellumai/gateway-client/src/gateway-ipc-contracts.ts +0 -44
  6. package/node_modules/@vellumai/gateway-client/src/index.ts +0 -14
  7. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +0 -17
  8. package/node_modules/@vellumai/service-contracts/package.json +0 -1
  9. package/node_modules/@vellumai/service-contracts/src/index.ts +0 -1
  10. package/openapi.yaml +0 -155
  11. package/package.json +1 -4
  12. package/scripts/test.sh +15 -36
  13. package/src/__tests__/actor-token-service.test.ts +14 -36
  14. package/src/__tests__/agent-loop-override-profile.test.ts +0 -1
  15. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -2
  16. package/src/__tests__/agent-wake-override-profile.test.ts +0 -2
  17. package/src/__tests__/annotate-activity-metadata.test.ts +0 -2
  18. package/src/__tests__/annotate-risk-options.test.ts +0 -2
  19. package/src/__tests__/approval-cascade.test.ts +0 -2
  20. package/src/__tests__/assistant-attachments.test.ts +0 -42
  21. package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
  22. package/src/__tests__/btw-routes.test.ts +0 -2
  23. package/src/__tests__/build-persisted-content.test.ts +0 -2
  24. package/src/__tests__/call-controller.test.ts +0 -19
  25. package/src/__tests__/channel-guardian.test.ts +58 -94
  26. package/src/__tests__/channel-reply-delivery.test.ts +0 -2
  27. package/src/__tests__/compaction-events.test.ts +0 -2
  28. package/src/__tests__/compaction.benchmark.test.ts +0 -2
  29. package/src/__tests__/compactor-call-site-logging.test.ts +0 -2
  30. package/src/__tests__/compactor-low-watermark-cut.test.ts +0 -2
  31. package/src/__tests__/compactor-preserved-tail-count.test.ts +0 -2
  32. package/src/__tests__/compactor-summary-call-truncation.test.ts +0 -2
  33. package/src/__tests__/compactor-web-search-strip.test.ts +0 -2
  34. package/src/__tests__/config-loader-backfill.test.ts +10 -123
  35. package/src/__tests__/config-schema.test.ts +0 -1
  36. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +29 -31
  37. package/src/__tests__/contacts-relay-reads.test.ts +15 -13
  38. package/src/__tests__/conversation-abort-tool-results.test.ts +0 -2
  39. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +0 -2
  40. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +0 -2
  41. package/src/__tests__/conversation-agent-loop-overflow.test.ts +0 -2
  42. package/src/__tests__/conversation-agent-loop.test.ts +0 -134
  43. package/src/__tests__/conversation-analysis-routes.test.ts +0 -2
  44. package/src/__tests__/conversation-app-control-lifecycle.test.ts +0 -2
  45. package/src/__tests__/conversation-confirmation-signals.test.ts +0 -2
  46. package/src/__tests__/conversation-history-web-search.test.ts +0 -2
  47. package/src/__tests__/conversation-load-history-repair.test.ts +0 -2
  48. package/src/__tests__/conversation-load-history-stripped.test.ts +0 -2
  49. package/src/__tests__/conversation-pairing.test.ts +0 -2
  50. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +0 -2
  51. package/src/__tests__/conversation-process-callsite.test.ts +0 -2
  52. package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -2
  53. package/src/__tests__/conversation-queue.test.ts +0 -91
  54. package/src/__tests__/conversation-routes-guardian-reply.test.ts +0 -14
  55. package/src/__tests__/conversation-routes-slash-commands.test.ts +0 -14
  56. package/src/__tests__/conversation-slash-queue.test.ts +0 -2
  57. package/src/__tests__/conversation-slash-unknown.test.ts +0 -2
  58. package/src/__tests__/conversation-speed-override.test.ts +0 -2
  59. package/src/__tests__/conversation-surfaces-task-progress.test.ts +0 -29
  60. package/src/__tests__/conversation-title-service.test.ts +0 -2
  61. package/src/__tests__/conversation-tool-setup-attribution.test.ts +0 -47
  62. package/src/__tests__/conversation-usage.test.ts +0 -2
  63. package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -2
  64. package/src/__tests__/conversation-workspace-injection.test.ts +0 -2
  65. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -2
  66. package/src/__tests__/credential-security-invariants.test.ts +1 -1
  67. package/src/__tests__/db-migration-rollback.test.ts +171 -205
  68. package/src/__tests__/db-test-helpers.ts +4 -5
  69. package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -4
  70. package/src/__tests__/disk-pressure-guard.test.ts +0 -41
  71. package/src/__tests__/dm-persistence.test.ts +0 -2
  72. package/src/__tests__/emit-signal-routing-intent.test.ts +5 -10
  73. package/src/__tests__/events-dev-bypass-actor.test.ts +1 -7
  74. package/src/__tests__/exploration-drift-hook.test.ts +2 -3
  75. package/src/__tests__/filing-service.test.ts +0 -2
  76. package/src/__tests__/guardian-binding-drift-heal.test.ts +10 -75
  77. package/src/__tests__/guardian-dispatch.test.ts +1 -95
  78. package/src/__tests__/guardian-outbound-http.test.ts +0 -13
  79. package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -2
  80. package/src/__tests__/heartbeat-service.test.ts +0 -2
  81. package/src/__tests__/helpers/channel-test-adapter.ts +7 -1
  82. package/src/__tests__/host-app-control-routes.test.ts +30 -24
  83. package/src/__tests__/host-bash-routes.test.ts +41 -31
  84. package/src/__tests__/host-browser-routes.test.ts +32 -26
  85. package/src/__tests__/host-cu-routes-targeted.test.ts +33 -25
  86. package/src/__tests__/host-file-routes-targeted.test.ts +52 -40
  87. package/src/__tests__/host-transfer-routes-targeted.test.ts +43 -31
  88. package/src/__tests__/http-user-message-parity.test.ts +8 -290
  89. package/src/__tests__/inbound-invite-redemption.test.ts +0 -28
  90. package/src/__tests__/inbound-slack-persistence.test.ts +0 -2
  91. package/src/__tests__/invite-redemption-service.test.ts +0 -198
  92. package/src/__tests__/llm-context-normalization.test.ts +0 -105
  93. package/src/__tests__/llm-request-log-error-payload.test.ts +9 -71
  94. package/src/__tests__/llm-usage-store.test.ts +0 -25
  95. package/src/__tests__/mcp-health-check.test.ts +1 -2
  96. package/src/__tests__/media-stream-server-integration.test.ts +0 -127
  97. package/src/__tests__/memory-retrieval-hook.test.ts +0 -2
  98. package/src/__tests__/messaging-send-tool.test.ts +0 -2
  99. package/src/__tests__/migration-import-from-url.test.ts +2 -2
  100. package/src/__tests__/mtime-cache.test.ts +5 -146
  101. package/src/__tests__/native-web-search.test.ts +0 -2
  102. package/src/__tests__/non-member-access-request.test.ts +17 -189
  103. package/src/__tests__/notification-broadcaster.test.ts +0 -4
  104. package/src/__tests__/notification-decision-recipient-context.test.ts +32 -33
  105. package/src/__tests__/notification-deep-link.test.ts +0 -6
  106. package/src/__tests__/notification-guardian-path.test.ts +0 -19
  107. package/src/__tests__/openai-provider.test.ts +12 -22
  108. package/src/__tests__/openai-responses-provider.test.ts +2 -12
  109. package/src/__tests__/outbound-slack-persistence.test.ts +0 -2
  110. package/src/__tests__/pending-interactions-resolved-event.test.ts +4 -7
  111. package/src/__tests__/persistence-secret-redaction.test.ts +0 -2
  112. package/src/__tests__/plugin-bootstrap.test.ts +73 -3
  113. package/src/__tests__/plugin-route-contribution.test.ts +17 -4
  114. package/src/__tests__/plugin-tool-contribution.test.ts +18 -3
  115. package/src/__tests__/plugin-types.test.ts +2 -0
  116. package/src/__tests__/process-message-background-slack.test.ts +0 -2
  117. package/src/__tests__/process-message-display-content.test.ts +0 -2
  118. package/src/__tests__/provider-error-scenarios.test.ts +4 -5
  119. package/src/__tests__/provider-usage-tracking.test.ts +0 -39
  120. package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +0 -2
  121. package/src/__tests__/registry.test.ts +1 -4
  122. package/src/__tests__/relay-server.test.ts +25 -694
  123. package/src/__tests__/runtime-attachment-metadata.test.ts +1 -0
  124. package/src/__tests__/secret-ingress-http.test.ts +0 -14
  125. package/src/__tests__/send-endpoint-busy.test.ts +8 -30
  126. package/src/__tests__/skills.test.ts +0 -44
  127. package/src/__tests__/slack-inbound-verification.test.ts +2 -47
  128. package/src/__tests__/stt-hints.test.ts +13 -44
  129. package/src/__tests__/subagent-detail.test.ts +0 -27
  130. package/src/__tests__/subagent-disposal.test.ts +0 -65
  131. package/src/__tests__/subagent-notify-parent.test.ts +0 -2
  132. package/src/__tests__/subagent-role-registry.test.ts +2 -7
  133. package/src/__tests__/subagent-spawn-tool-fork.test.ts +0 -2
  134. package/src/__tests__/subagent-tools.test.ts +0 -2
  135. package/src/__tests__/suggestion-routes.test.ts +0 -2
  136. package/src/__tests__/title-generate-hook.test.ts +0 -2
  137. package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -2
  138. package/src/__tests__/tool-executor.test.ts +11 -16
  139. package/src/__tests__/tool-preview-lifecycle.test.ts +0 -2
  140. package/src/__tests__/tool-result-metadata-plumbing.test.ts +0 -2
  141. package/src/__tests__/tool-start-timestamp.test.ts +0 -2
  142. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +10 -10
  143. package/src/__tests__/twilio-routes.test.ts +0 -96
  144. package/src/__tests__/ui-file-upload-surface.test.ts +0 -86
  145. package/src/__tests__/verification-control-plane-policy.test.ts +0 -2
  146. package/src/__tests__/voice-invite-redemption.test.ts +0 -33
  147. package/src/__tests__/web-search-backend-failure.test.ts +0 -2
  148. package/src/__tests__/workspace-migration-remove-hooks.test.ts +35 -14
  149. package/src/__tests__/workspace-tool-loader.test.ts +2 -195
  150. package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
  151. package/src/agent/loop.ts +0 -56
  152. package/src/api/index.ts +1 -19
  153. package/src/api/responses/llm-request-log-entry.ts +0 -29
  154. package/src/api/responses/subagent-detail.ts +0 -17
  155. package/src/api/surfaces.ts +3 -39
  156. package/src/approvals/guardian-request-resolvers.ts +11 -1
  157. package/src/calls/__tests__/relay-setup-router.test.ts +4 -262
  158. package/src/calls/call-domain.ts +3 -3
  159. package/src/calls/guardian-dispatch.ts +8 -10
  160. package/src/calls/inbound-trust-reader.ts +1 -17
  161. package/src/calls/media-stream-server.ts +0 -21
  162. package/src/calls/relay-server.ts +50 -167
  163. package/src/calls/relay-setup-router.ts +7 -37
  164. package/src/calls/relay-verification.ts +4 -4
  165. package/src/calls/stt-hints.ts +12 -9
  166. package/src/calls/twilio-routes.ts +4 -14
  167. package/src/channels/types.ts +20 -10
  168. package/src/cli/commands/__tests__/cache.test.ts +1 -8
  169. package/src/cli/commands/cache.ts +181 -194
  170. package/src/cli/commands/db/__tests__/repair.test.ts +5 -6
  171. package/src/cli/commands/db/status.ts +1 -37
  172. package/src/cli/commands/mcp.ts +218 -252
  173. package/src/cli/commands/memory/index.ts +0 -2
  174. package/src/cli/commands/plugins.ts +3 -75
  175. package/src/cli/lib/__tests__/install-from-github.test.ts +0 -102
  176. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +1 -160
  177. package/src/cli/lib/list-installed-plugins.ts +1 -179
  178. package/src/config/__tests__/sync-gated-profiles.test.ts +3 -11
  179. package/src/config/bundled-skills/contacts/tools/contact-merge.ts +17 -27
  180. package/src/config/bundled-skills/contacts/tools/contact-search.ts +3 -13
  181. package/src/config/bundled-skills/subagent/SKILL.md +1 -1
  182. package/src/config/bundled-skills/subagent/TOOLS.json +1 -1
  183. package/src/config/feature-flag-registry.json +13 -5
  184. package/src/config/loader.ts +5 -38
  185. package/src/config/schemas/__tests__/memory-v3.test.ts +0 -1
  186. package/src/config/schemas/memory-lifecycle.ts +0 -12
  187. package/src/config/schemas/memory-v3.ts +0 -7
  188. package/src/config/schemas/memory.ts +0 -4
  189. package/src/config/schemas/timeouts.ts +0 -8
  190. package/src/config/seed-inference-profiles.ts +11 -21
  191. package/src/config/skills.ts +5 -27
  192. package/src/config/sync-gated-profiles.ts +13 -12
  193. package/src/contacts/contacts-write.ts +0 -3
  194. package/src/daemon/assistant-attachments.ts +4 -27
  195. package/src/daemon/conversation-agent-loop.ts +0 -28
  196. package/src/daemon/conversation-process.ts +16 -35
  197. package/src/daemon/conversation-surfaces.ts +38 -111
  198. package/src/daemon/conversation-tool-setup.ts +16 -50
  199. package/src/daemon/conversation.ts +1 -13
  200. package/src/daemon/disk-pressure-guard.ts +2 -12
  201. package/src/daemon/event-loop-watchdog.ts +1 -28
  202. package/src/daemon/external-plugins-bootstrap.ts +34 -4
  203. package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +0 -25
  204. package/src/daemon/handlers/config-a2a.ts +14 -6
  205. package/src/daemon/handlers/config-channels.ts +22 -78
  206. package/src/daemon/handlers/conversations.ts +0 -77
  207. package/src/daemon/lifecycle.ts +0 -4
  208. package/src/daemon/mcp-reload-service.ts +0 -10
  209. package/src/daemon/memory-v2-startup.test.ts +0 -72
  210. package/src/daemon/memory-v2-startup.ts +19 -87
  211. package/src/daemon/message-types/conversations.ts +0 -2
  212. package/src/daemon/message-types/surfaces.ts +12 -12
  213. package/src/daemon/server.ts +4 -0
  214. package/src/daemon/shutdown-handlers.ts +0 -20
  215. package/src/daemon/tool-setup-types.ts +0 -9
  216. package/src/daemon/workspace-tools-watcher.ts +328 -0
  217. package/src/ipc/__tests__/clients-list-ipc.test.ts +1 -1
  218. package/src/ipc/assistant-server.ts +2 -2
  219. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +0 -1
  220. package/src/mcp/client.ts +1 -15
  221. package/src/mcp/mcp-auth-orchestrator.ts +1 -6
  222. package/src/mcp/mcp-oauth-provider.ts +8 -19
  223. package/src/memory/__tests__/memory-retrospective-job.test.ts +0 -8
  224. package/src/memory/conversation-crud.ts +0 -38
  225. package/src/memory/db-connection.ts +3 -22
  226. package/src/memory/db-init.ts +502 -36
  227. package/src/memory/db-singleton.ts +4 -6
  228. package/src/memory/jobs-worker.ts +0 -58
  229. package/src/memory/llm-request-log-store.ts +1 -26
  230. package/src/memory/llm-usage-store.ts +20 -48
  231. package/src/memory/memory-retrospective-job.ts +8 -9
  232. package/src/memory/migrations/209-strip-thinking-from-consolidated.ts +56 -130
  233. package/src/memory/migrations/__tests__/run-migrations.test.ts +2 -2
  234. package/src/memory/migrations/registry.ts +573 -0
  235. package/src/memory/migrations/run-migrations.ts +6 -90
  236. package/src/memory/migrations/validate-migration-state.ts +66 -101
  237. package/src/memory/schema/conversations.ts +0 -9
  238. package/src/memory/schema/infrastructure.ts +0 -20
  239. package/src/memory/v2/__tests__/cli-command-store.test.ts +0 -25
  240. package/src/memory/v2/__tests__/skill-store.test.ts +0 -80
  241. package/src/memory/v2/cli-command-store.ts +38 -75
  242. package/src/memory/v2/prompts/consolidation.ts +82 -13
  243. package/src/memory/v2/prompts/router.ts +93 -21
  244. package/src/memory/v2/skill-store.ts +31 -68
  245. package/src/notifications/__tests__/broadcaster.test.ts +8 -16
  246. package/src/notifications/__tests__/decision-engine.test.ts +9 -78
  247. package/src/notifications/broadcaster.ts +1 -8
  248. package/src/notifications/decision-engine.ts +7 -15
  249. package/src/notifications/destination-resolver.ts +24 -68
  250. package/src/notifications/emit-signal.ts +14 -39
  251. package/src/permissions/question-prompter.test.ts +1 -1
  252. package/src/permissions/question-prompter.ts +4 -7
  253. package/src/plugin-api/index.ts +6 -6
  254. package/src/plugin-api/types.ts +5 -3
  255. package/src/plugin-api/vision-support.test.ts +4 -28
  256. package/src/plugin-api/vision-support.ts +31 -66
  257. package/src/plugins/defaults/advisor/__tests__/consult.test.ts +0 -161
  258. package/src/plugins/defaults/advisor/consult.ts +6 -110
  259. package/src/plugins/defaults/advisor/steering.ts +2 -14
  260. package/src/plugins/defaults/advisor/tools/advisor.ts +5 -32
  261. package/src/plugins/defaults/exploration-drift/hooks/post-tool-use.ts +1 -2
  262. package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +7 -47
  263. package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +11 -10
  264. package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +20 -12
  265. package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +11 -42
  266. package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +3 -33
  267. package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +4 -48
  268. package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +8 -4
  269. package/src/plugins/defaults/memory-v3-shadow/injector.ts +15 -43
  270. package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +2 -11
  271. package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +13 -77
  272. package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +11 -12
  273. package/src/plugins/mtime-cache.ts +291 -76
  274. package/src/plugins/pipeline.ts +13 -111
  275. package/src/plugins/types.ts +2 -0
  276. package/src/providers/anthropic/client.ts +0 -5
  277. package/src/providers/call-site-routing.ts +0 -4
  278. package/src/providers/model-catalog.ts +0 -16
  279. package/src/providers/openai/__tests__/api-error-detail.test.ts +120 -0
  280. package/src/providers/openai/chat-completions-provider.ts +83 -37
  281. package/src/providers/openai/responses-provider.ts +46 -50
  282. package/src/providers/openrouter/client.ts +0 -5
  283. package/src/providers/provider-send-message.ts +0 -4
  284. package/src/providers/ratelimit.ts +0 -4
  285. package/src/providers/retry.ts +0 -4
  286. package/src/providers/types.ts +0 -9
  287. package/src/providers/usage-tracking.ts +0 -4
  288. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +3 -335
  289. package/src/runtime/access-request-helper.ts +39 -19
  290. package/src/runtime/actor-trust-resolver.ts +2 -2
  291. package/src/runtime/assistant-event-hub.ts +1 -1
  292. package/src/runtime/assistant-stream-state.ts +2 -9
  293. package/src/runtime/auth/require-bound-guardian.ts +11 -21
  294. package/src/runtime/channel-verification-service.ts +31 -56
  295. package/src/runtime/confirmation-request-guardian-bridge.ts +3 -3
  296. package/src/runtime/guardian-vellum-migration.ts +7 -66
  297. package/src/runtime/invite-redemption-service.ts +187 -198
  298. package/src/runtime/local-actor-identity.ts +11 -76
  299. package/src/runtime/pending-interactions.ts +1 -11
  300. package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +5 -56
  301. package/src/runtime/routes/__tests__/channel-verification-routes.test.ts +1 -1
  302. package/src/runtime/routes/__tests__/surface-action-routes.test.ts +0 -187
  303. package/src/runtime/routes/browser-routes.ts +1 -1
  304. package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +5 -13
  305. package/src/runtime/routes/channel-verification-routes.ts +3 -3
  306. package/src/runtime/routes/contact-routes.ts +32 -8
  307. package/src/runtime/routes/conversation-cli-routes.ts +5 -4
  308. package/src/runtime/routes/conversation-list-routes.ts +7 -4
  309. package/src/runtime/routes/conversation-query-routes.ts +0 -72
  310. package/src/runtime/routes/conversation-routes.ts +85 -84
  311. package/src/runtime/routes/events-routes.ts +2 -2
  312. package/src/runtime/routes/global-search-routes.ts +1 -3
  313. package/src/runtime/routes/guardian-action-routes.ts +5 -4
  314. package/src/runtime/routes/host-app-control-routes.ts +4 -5
  315. package/src/runtime/routes/host-bash-routes.ts +4 -5
  316. package/src/runtime/routes/host-browser-routes.ts +11 -9
  317. package/src/runtime/routes/host-cu-routes.ts +4 -5
  318. package/src/runtime/routes/host-file-routes.ts +4 -5
  319. package/src/runtime/routes/host-transfer-routes.ts +6 -6
  320. package/src/runtime/routes/http-adapter.ts +1 -1
  321. package/src/runtime/routes/identity-routes.ts +2 -3
  322. package/src/runtime/routes/inbound-message-handler.ts +5 -5
  323. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +5 -97
  324. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +49 -61
  325. package/src/runtime/routes/inbound-stages/background-dispatch.ts +4 -16
  326. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +7 -7
  327. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +8 -21
  328. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.ts +3 -14
  329. package/src/runtime/routes/index.ts +0 -2
  330. package/src/runtime/routes/llm-context-normalization.ts +0 -83
  331. package/src/runtime/routes/mcp-auth-routes.ts +19 -171
  332. package/src/runtime/routes/migration-rollback-routes.ts +3 -4
  333. package/src/runtime/routes/migration-routes.ts +1 -4
  334. package/src/runtime/routes/subagents-routes.ts +0 -5
  335. package/src/runtime/routes/surface-action-routes.ts +56 -42
  336. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -1
  337. package/src/runtime/services/conversation-serializer.ts +9 -7
  338. package/src/runtime/tool-grant-request-helper.ts +3 -3
  339. package/src/runtime/trust-verdict-consumer.ts +9 -85
  340. package/src/runtime/verification-outbound-actions.ts +18 -18
  341. package/src/signals/user-message.ts +0 -16
  342. package/src/subagent/manager.ts +0 -9
  343. package/src/subagent/types.ts +3 -3
  344. package/src/telemetry/types.ts +1 -34
  345. package/src/telemetry/usage-telemetry-reporter.test.ts +2 -3
  346. package/src/telemetry/usage-telemetry-reporter.ts +3 -87
  347. package/src/tools/ask-question/ask-question-tool.test.ts +0 -29
  348. package/src/tools/ask-question/ask-question-tool.ts +0 -13
  349. package/src/tools/executor.ts +4 -4
  350. package/src/tools/registry.ts +0 -18
  351. package/src/tools/shared/filesystem/path-policy.ts +5 -12
  352. package/src/tools/tool-approval-handler.ts +1 -1
  353. package/src/tools/tool-defaults.ts +2 -9
  354. package/src/tools/tool-manifest.ts +0 -3
  355. package/src/tools/types.ts +2 -17
  356. package/src/tools/workspace-tools/loader.ts +244 -348
  357. package/src/util/errors.ts +1 -26
  358. package/src/util/platform.ts +0 -5
  359. package/src/workflows/library.test.ts +0 -140
  360. package/src/workflows/library.ts +28 -82
  361. package/src/workspace/migrations/017-seed-persona-dirs.ts +34 -3
  362. package/src/workspace/migrations/019-scope-journal-to-guardian.ts +24 -3
  363. package/src/workspace/migrations/048-remove-workspace-hooks.ts +66 -14
  364. package/src/workspace/migrations/registry.ts +0 -2
  365. package/node_modules/@vellumai/gateway-client/src/__tests__/guardian-delivery-contract.test.ts +0 -91
  366. package/node_modules/@vellumai/gateway-client/src/guardian-delivery-contract.ts +0 -48
  367. package/node_modules/@vellumai/service-contracts/src/__tests__/channels.test.ts +0 -28
  368. package/node_modules/@vellumai/service-contracts/src/channels.ts +0 -41
  369. package/src/__tests__/code-search-tool.test.ts +0 -585
  370. package/src/__tests__/guardian-expiry-notifier.test.ts +0 -282
  371. package/src/__tests__/mcp-config-secret-boundary.test.ts +0 -390
  372. package/src/__tests__/plugin-pipeline.test.ts +0 -96
  373. package/src/__tests__/sse-actor-principal-guardian-source.test.ts +0 -102
  374. package/src/__tests__/steer-on-enqueue-question.test.ts +0 -181
  375. package/src/__tests__/workspace-migration-111-prune-seeded-callsite-defaults.test.ts +0 -208
  376. package/src/agent/loop-exclusive-tool.test.ts +0 -150
  377. package/src/api/constants/sse-replay.ts +0 -41
  378. package/src/api/events/conversation-notice.ts +0 -26
  379. package/src/approvals/guardian-channel-delivery.ts +0 -30
  380. package/src/approvals/guardian-expiry-notifier.ts +0 -148
  381. package/src/cli/commands/memory/__tests__/worker.test.ts +0 -302
  382. package/src/cli/commands/memory/worker.ts +0 -175
  383. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -143
  384. package/src/config/prune-seeded-callsite-defaults.ts +0 -110
  385. package/src/contacts/__tests__/contacts-write-revoke-relay.test.ts +0 -129
  386. package/src/contacts/__tests__/guardian-delivery-reader.test.ts +0 -312
  387. package/src/contacts/__tests__/member-write-relay.test.ts +0 -202
  388. package/src/contacts/guardian-delivery-reader.ts +0 -223
  389. package/src/contacts/member-write-relay.ts +0 -189
  390. package/src/daemon/conversation-notices.ts +0 -60
  391. package/src/daemon/handlers/__tests__/config-channels.test.ts +0 -225
  392. package/src/hooks/hook-loader.ts +0 -341
  393. package/src/mcp/mcp-header-store.ts +0 -134
  394. package/src/memory/__tests__/301-create-watchdog-events.test.ts +0 -110
  395. package/src/memory/__tests__/prompt-override.test.ts +0 -192
  396. package/src/memory/__tests__/watchdog-events-store.test.ts +0 -161
  397. package/src/memory/migrations/300-add-processing-started-at.ts +0 -30
  398. package/src/memory/migrations/301-create-watchdog-events.ts +0 -45
  399. package/src/memory/migrations/__tests__/209-strip-thinking-from-consolidated.test.ts +0 -224
  400. package/src/memory/prompt-override.ts +0 -129
  401. package/src/memory/steps.ts +0 -573
  402. package/src/memory/watchdog-events-store.ts +0 -87
  403. package/src/memory/worker-control.ts +0 -118
  404. package/src/memory/worker-process.ts +0 -72
  405. package/src/notifications/__tests__/connected-channels.test.ts +0 -114
  406. package/src/notifications/__tests__/destination-resolver.test.ts +0 -256
  407. package/src/onboarding/checkin-event.test.ts +0 -222
  408. package/src/onboarding/checkin-event.ts +0 -321
  409. package/src/onboarding/schedule-checkin.ts +0 -190
  410. package/src/plugins/defaults/advisor/__tests__/context-pack-gating.test.ts +0 -106
  411. package/src/plugins/defaults/advisor/__tests__/context-pack.test.ts +0 -60
  412. package/src/plugins/defaults/advisor/context-pack.ts +0 -288
  413. package/src/plugins/defaults/memory-v3-shadow/pool-select.test.ts +0 -146
  414. package/src/plugins/surface-import.ts +0 -121
  415. package/src/providers/openai/__tests__/api-error-normalization.test.ts +0 -321
  416. package/src/providers/openai/api-error-normalization.ts +0 -270
  417. package/src/runtime/__tests__/channel-verification-service.test.ts +0 -133
  418. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +0 -181
  419. package/src/runtime/__tests__/is-guardian-bound-for-channel.test.ts +0 -66
  420. package/src/runtime/__tests__/local-principal-trust.test.ts +0 -164
  421. package/src/runtime/anchored-guardian.test.ts +0 -156
  422. package/src/runtime/anchored-guardian.ts +0 -135
  423. package/src/runtime/auth/__tests__/require-bound-guardian.test.ts +0 -99
  424. package/src/runtime/local-principal-trust.ts +0 -52
  425. package/src/runtime/routes/__tests__/contact-routes.test.ts +0 -212
  426. package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -93
  427. package/src/runtime/routes/onboarding-checkin-routes.ts +0 -86
  428. package/src/tools/filesystem/search.ts +0 -543
  429. package/src/util/telemetry-db-path.ts +0 -24
  430. package/src/workspace/migrations/111-prune-seeded-callsite-defaults.ts +0 -134
package/scripts/test.sh CHANGED
@@ -169,7 +169,6 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
169
169
 
170
170
  safe_name="$(echo "${test_file}" | tr "/" "_")"
171
171
  out_file="${results_dir}/${safe_name}.out"
172
- base="$(basename "${test_file}")"
173
172
 
174
173
  coverage_args=""
175
174
  if [[ "${coverage_enabled}" == "true" ]]; then
@@ -186,48 +185,28 @@ printf '%s\n' "${test_files[@]}" | xargs -P "${WORKERS}" -I {} bash -c '
186
185
  timeout_cmd="gtimeout"
187
186
  fi
188
187
 
189
- # Run the test file in its own bun process. Wrapped in a function so a
190
- # transient infrastructure crash can be retried without duplicating the
191
- # four-way (timeout × experimental-filter) invocation.
192
- run_bun_test() {
193
- if [[ -n "${timeout_cmd}" ]]; then
194
- if [[ "${exclude_exp}" == "true" ]]; then
195
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
196
- else
197
- "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
198
- fi
199
- else
200
- if [[ "${exclude_exp}" == "true" ]]; then
201
- bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
202
- else
203
- bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
204
- fi
205
- fi
206
- }
207
-
208
188
  start_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
209
189
 
210
- run_bun_test
211
- exit_code=$?
212
-
213
- # Retry once on a transient bun loader/runtime crash. Bun occasionally aborts
214
- # a worker before its tests run — e.g. "# Unhandled error between tests" with
215
- # "error: ENOENT reading <corrupted path>" — failing the whole job even though
216
- # the file is green on a clean process. Such a crash truncates the run before
217
- # any assertion executes, so it prints no "(fail)" line; genuine assertion
218
- # failures do, and are reported immediately without a retry (fast feedback, no
219
- # masking of intermittent real failures). Timeouts (124/137) are handled by the
220
- # hang branch below, not here.
221
- if [[ ${exit_code} -ne 0 && ${exit_code} -ne 124 && ${exit_code} -ne 137 ]] \
222
- && ! grep -q "^(fail)" "${out_file}" 2>/dev/null; then
223
- echo " ↻ ${base} (transient crash, exit ${exit_code} — retrying once)"
224
- run_bun_test
225
- exit_code=$?
190
+ if [[ -n "${timeout_cmd}" ]]; then
191
+ if [[ "${exclude_exp}" == "true" ]]; then
192
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
193
+ else
194
+ "${timeout_cmd}" -k 10 "${per_test_timeout}" bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
195
+ fi
196
+ else
197
+ if [[ "${exclude_exp}" == "true" ]]; then
198
+ bun test ${coverage_args} --test-name-pattern "^(?!.*\\[experimental\\])" "${test_file}" > "${out_file}" 2>&1
199
+ else
200
+ bun test ${coverage_args} "${test_file}" > "${out_file}" 2>&1
201
+ fi
226
202
  fi
203
+ exit_code=$?
227
204
 
228
205
  end_ms=$(perl -MTime::HiRes=time -e "printf \"%d\", time*1000")
229
206
  elapsed=$(( end_ms - start_ms ))
230
207
 
208
+ base="$(basename "${test_file}")"
209
+
231
210
  # Record duration for longest-first scheduling in future runs.
232
211
  # Write the repo-relative path (not the basename) so the lookup in future
233
212
  # runs disambiguates files that share a basename across directories.
@@ -29,17 +29,6 @@ mock.module("../config/env.js", () => ({
29
29
  checkUnrecognizedEnvVars: () => {},
30
30
  }));
31
31
 
32
- // No gateway in tests: force the reader to miss so resolution exercises the
33
- // local-store bootstrap fallback deterministically.
34
- let fakeGuardianDelivery: { principalId?: string | null } | null = null;
35
- mock.module("../contacts/guardian-delivery-reader.js", () => ({
36
- getGuardianDelivery: async () =>
37
- fakeGuardianDelivery ? [fakeGuardianDelivery] : null,
38
- guardianForChannel: (list: { principalId?: string | null }[]) => list[0],
39
- invalidateGuardianDeliveryCache: () => {},
40
- onContactChange: () => {},
41
- }));
42
-
43
32
  import { getDb } from "../memory/db-connection.js";
44
33
  import { initializeDb } from "../memory/db-init.js";
45
34
  import { resetExternalAssistantIdCache } from "../runtime/auth/external-assistant-id.js";
@@ -62,7 +51,6 @@ await initializeDb();
62
51
  beforeEach(async () => {
63
52
  initAuthSigningKey(TEST_KEY);
64
53
  resetExternalAssistantIdCache();
65
- fakeGuardianDelivery = null;
66
54
  resetDbForTesting();
67
55
  await initializeDb();
68
56
  });
@@ -72,8 +60,8 @@ beforeEach(async () => {
72
60
  // ---------------------------------------------------------------------------
73
61
 
74
62
  describe("resolveLocalTrustContext", () => {
75
- test("falls back to minimal trust context when no vellum binding exists", async () => {
76
- const ctx = await resolveLocalTrustContext();
63
+ test("falls back to minimal trust context when no vellum binding exists", () => {
64
+ const ctx = resolveLocalTrustContext();
77
65
  expect(ctx.sourceChannel).toBe("vellum");
78
66
  });
79
67
  });
@@ -83,48 +71,38 @@ describe("resolveLocalTrustContext", () => {
83
71
  // ---------------------------------------------------------------------------
84
72
 
85
73
  describe("resolveLocalAuthContext", () => {
86
- test("returns AuthContext with local principal type", async () => {
87
- const ctx = await resolveLocalAuthContext("session-123");
74
+ test("returns AuthContext with local principal type", () => {
75
+ const ctx = resolveLocalAuthContext("session-123");
88
76
  expect(ctx.principalType).toBe("local");
89
77
  });
90
78
 
91
- test("subject follows local:self:<conversationId> pattern", async () => {
92
- const ctx = await resolveLocalAuthContext("session-abc");
79
+ test("subject follows local:self:<conversationId> pattern", () => {
80
+ const ctx = resolveLocalAuthContext("session-abc");
93
81
  expect(ctx.subject).toBe("local:self:session-abc");
94
82
  });
95
83
 
96
- test("assistantId is always self", async () => {
97
- const ctx = await resolveLocalAuthContext("session-123");
84
+ test("assistantId is always self", () => {
85
+ const ctx = resolveLocalAuthContext("session-123");
98
86
  expect(ctx.assistantId).toBe("self");
99
87
  });
100
88
 
101
- test("uses local_v1 scope profile with local.all scope", async () => {
102
- const ctx = await resolveLocalAuthContext("session-123");
89
+ test("uses local_v1 scope profile with local.all scope", () => {
90
+ const ctx = resolveLocalAuthContext("session-123");
103
91
  expect(ctx.scopeProfile).toBe("local_v1");
104
92
  expect(ctx.scopes.has("local.all")).toBe(true);
105
93
  });
106
94
 
107
- test("actorPrincipalId is undefined when no vellum binding exists", async () => {
95
+ test("actorPrincipalId is undefined when no vellum binding exists", () => {
108
96
  const db = getDb();
109
97
  db.run("DELETE FROM contact_channels");
110
98
  db.run("DELETE FROM contacts");
111
99
 
112
- const ctx = await resolveLocalAuthContext("session-123");
100
+ const ctx = resolveLocalAuthContext("session-123");
113
101
  expect(ctx.actorPrincipalId).toBeUndefined();
114
102
  });
115
103
 
116
- test("resolves the guardian principal from the gateway when available", async () => {
117
- const db = getDb();
118
- db.run("DELETE FROM contact_channels");
119
- db.run("DELETE FROM contacts");
120
- fakeGuardianDelivery = { principalId: "gateway-guardian-id" };
121
-
122
- const ctx = await resolveLocalAuthContext("session-123");
123
- expect(ctx.actorPrincipalId).toBe("gateway-guardian-id");
124
- });
125
-
126
- test("conversationId matches the provided argument", async () => {
127
- const ctx = await resolveLocalAuthContext("my-session");
104
+ test("conversationId matches the provided argument", () => {
105
+ const ctx = resolveLocalAuthContext("my-session");
128
106
  expect(ctx.conversationId).toBe("my-session");
129
107
  });
130
108
  });
@@ -384,7 +384,6 @@ describe("SubagentManager.spawn — overrideProfile inheritance", () => {
384
384
  // inheritance chain breaks at the second nesting level.
385
385
 
386
386
  mock.module("../memory/conversation-crud.js", () => ({
387
- setConversationProcessingStartedAt: () => {},
388
387
  // Always return undefined for the row read so the test fails fast unless
389
388
  // executeSubagentSpawn reads from context.overrideProfile first.
390
389
  getConversationOverrideProfile: () => undefined,
@@ -21,8 +21,6 @@ import type {
21
21
  import type { Message } from "../providers/types.js";
22
22
 
23
23
  mock.module("../memory/conversation-crud.js", () => ({
24
- setConversationProcessingStartedAt: () => {},
25
- isConversationProcessing: () => false,
26
24
  getConversationOverrideProfile: () => undefined,
27
25
  }));
28
26
 
@@ -31,8 +31,6 @@ import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
31
31
  let mockOverrideProfile: string | undefined = undefined;
32
32
 
33
33
  mock.module("../memory/conversation-crud.js", () => ({
34
- setConversationProcessingStartedAt: () => {},
35
- isConversationProcessing: () => false,
36
34
  getConversationOverrideProfile: (_id: string) => mockOverrideProfile,
37
35
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
38
36
  }));
@@ -55,8 +55,6 @@ let mockedRowContent = "";
55
55
  const updates: Array<{ id: string; content: string }> = [];
56
56
 
57
57
  mock.module("../memory/conversation-crud.js", () => ({
58
- setConversationProcessingStartedAt: () => {},
59
- isConversationProcessing: () => false,
60
58
  addMessage: () => ({ id: "mock-msg-id" }),
61
59
  getMessageById: (id: string) =>
62
60
  mockedRowContent ? { id, content: mockedRowContent } : null,
@@ -50,8 +50,6 @@ let mockedRowContent = "";
50
50
  const updates: Array<{ id: string; content: string }> = [];
51
51
 
52
52
  mock.module("../memory/conversation-crud.js", () => ({
53
- setConversationProcessingStartedAt: () => {},
54
- isConversationProcessing: () => false,
55
53
  addMessage: () => ({ id: "mock-msg-id" }),
56
54
  getMessageById: (id: string) =>
57
55
  mockedRowContent ? { id, content: mockedRowContent } : null,
@@ -121,8 +121,6 @@ mock.module("../security/secret-allowlist.js", () => ({
121
121
  }));
122
122
 
123
123
  mock.module("../memory/conversation-crud.js", () => ({
124
- setConversationProcessingStartedAt: () => {},
125
- isConversationProcessing: () => false,
126
124
  setConversationOriginChannelIfUnset: () => {},
127
125
  updateConversationContextWindow: () => {},
128
126
  deleteMessageById: () => {},
@@ -373,48 +373,6 @@ describe("extractVellumLinks", () => {
373
373
  expect(result.directiveRequests[1].path).toBe("/tmp/b.pdf");
374
374
  });
375
375
 
376
- test("decodes URL-encoded spaces in workspace paths", () => {
377
- const text =
378
- "[file with spaces.txt](vellum://workspace/scratch/file%20with%20spaces.txt)";
379
- const result = extractVellumLinks(text);
380
-
381
- expect(result.directiveRequests).toHaveLength(1);
382
- expect(result.directiveRequests[0].source).toBe("sandbox");
383
- expect(result.directiveRequests[0].path).toBe(
384
- "scratch/file with spaces.txt",
385
- );
386
- });
387
-
388
- test("decodes URL-encoded spaces in host paths", () => {
389
- const text =
390
- "[my file.pdf](vellum://host/Users/me/my%20file.pdf)";
391
- const result = extractVellumLinks(text);
392
-
393
- expect(result.directiveRequests).toHaveLength(1);
394
- expect(result.directiveRequests[0].source).toBe("host");
395
- expect(result.directiveRequests[0].path).toBe("/Users/me/my file.pdf");
396
- });
397
-
398
- test("warns on malformed percent-encoding instead of throwing", () => {
399
- const text =
400
- "[100% complete.txt](vellum://workspace/scratch/100%25complete.txt)";
401
- const result = extractVellumLinks(text);
402
-
403
- // %25 decodes to %, so this should succeed
404
- expect(result.directiveRequests).toHaveLength(1);
405
- expect(result.directiveRequests[0].path).toBe("scratch/100%complete.txt");
406
- });
407
-
408
- test("warns on malformed percent-encoding and skips the link", () => {
409
- const text =
410
- "[bad file](vellum://workspace/scratch/100%complete.txt)";
411
- const result = extractVellumLinks(text);
412
-
413
- expect(result.directiveRequests).toHaveLength(0);
414
- expect(result.parseWarnings).toHaveLength(1);
415
- expect(result.parseWarnings[0]).toContain("malformed percent-encoding");
416
- });
417
-
418
376
  test("warns on empty workspace path", () => {
419
377
  const text = "[file](vellum://workspace/)";
420
378
  const result = extractVellumLinks(text);
@@ -100,8 +100,6 @@ mock.module("../daemon/process-message.js", () => ({
100
100
 
101
101
  const createdConversations: Array<{ conversationType: string }> = [];
102
102
  mock.module("../memory/conversation-crud.js", () => ({
103
- setConversationProcessingStartedAt: () => {},
104
- isConversationProcessing: () => false,
105
103
  addMessage: mock(() => ({ id: "msg-1" })),
106
104
  archiveConversation: mock(() => true),
107
105
  batchSetDisplayOrders: mock(() => {}),
@@ -43,8 +43,6 @@ mock.module("../memory/conversation-key-store.js", () => ({
43
43
  const mockAddMessage = mock(() => {});
44
44
 
45
45
  mock.module("../memory/conversation-crud.js", () => ({
46
- setConversationProcessingStartedAt: () => {},
47
- isConversationProcessing: () => false,
48
46
  addMessage: mockAddMessage,
49
47
  reserveMessage: mock(async () => ({ id: "msg-reserve" })),
50
48
  }));
@@ -41,8 +41,6 @@ mock.module("../config/loader.js", () => ({
41
41
  }));
42
42
 
43
43
  mock.module("../memory/conversation-crud.js", () => ({
44
- setConversationProcessingStartedAt: () => {},
45
- isConversationProcessing: () => false,
46
44
  addMessage: () => ({ id: "mock-msg-id" }),
47
45
  getMessageById: () => null,
48
46
  updateMessageContent: () => {},
@@ -168,25 +168,6 @@ mock.module("../notifications/emit-signal.js", () => ({
168
168
  }),
169
169
  }));
170
170
 
171
- // Guardian principalId is resolved from the gateway binding reader. Mirror the
172
- // vellum binding seeded by resetTables so guardian dispatch can resolve it.
173
- mock.module("../contacts/guardian-delivery-reader.js", () => ({
174
- getGuardianDelivery: async () => [
175
- {
176
- channelType: "vellum",
177
- contactId: "guardian-vellum",
178
- principalId: "test-principal-id",
179
- address: "local",
180
- status: "active",
181
- },
182
- ],
183
- guardianForChannel: (
184
- list: Array<{ channelType: string; status: string }>,
185
- channelType: string,
186
- ) => list.find((g) => g.channelType === channelType && g.status === "active"),
187
- anyGuardian: (list: unknown[]) => list[0],
188
- }));
189
-
190
171
  mock.module("../calls/voice-session-bridge.js", () => {
191
172
  mockStartVoiceTurn = mock(createMockVoiceTurn(["Hello", " there"]));
192
173
  return {