@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
@@ -155,7 +155,7 @@ describe("pendingInteractions.resolve emits interaction_resolved", () => {
155
155
  });
156
156
 
157
157
  describe("removeByConversation emits interaction_resolved per entry", () => {
158
- test("emits superseded for every confirmation/secret interaction in the conversation", () => {
158
+ test("emits superseded for every non-host interaction in the conversation", () => {
159
159
  pendingInteractions.register("conf-1", {
160
160
  conversationId: "conv-x",
161
161
  kind: "confirmation",
@@ -182,16 +182,13 @@ describe("removeByConversation emits interaction_resolved per entry", () => {
182
182
  const events = publishedMessages.filter(
183
183
  (m) => m.type === "interaction_resolved",
184
184
  ) as Extract<ServerMessage, { type: "interaction_resolved" }>[];
185
- expect(events).toHaveLength(2);
185
+ expect(events).toHaveLength(3);
186
186
  expect(events.every((e) => e.state === "superseded")).toBe(true);
187
187
  const requestIds = new Set(events.map((e) => e.requestId));
188
- expect(requestIds).toEqual(new Set(["conf-1", "secret-1"]));
188
+ expect(requestIds).toEqual(new Set(["conf-1", "secret-1", "question-1"]));
189
189
 
190
- // host_bash and question entries both survive auto-deny — no event for
191
- // either. host proxies are settled by their result POST; questions by the
192
- // enqueue steer's turn abort (see removeByConversation's skip list).
190
+ // host_bash entries survive auto-deny — no event for them.
193
191
  expect(pendingInteractions.get("host-bash-1")).toBeDefined();
194
- expect(pendingInteractions.get("question-1")).toBeDefined();
195
192
  // Unrelated conversation is untouched.
196
193
  expect(pendingInteractions.get("conf-other")).toBeDefined();
197
194
  });
@@ -48,8 +48,6 @@ interface AddMessageCall {
48
48
  }
49
49
  const addMessageCalls: AddMessageCall[] = [];
50
50
  mock.module("../memory/conversation-crud.js", () => ({
51
- setConversationProcessingStartedAt: () => {},
52
- isConversationProcessing: () => false,
53
51
  addMessage: (
54
52
  conversationId: string,
55
53
  role: string,
@@ -4,19 +4,32 @@
4
4
  * Covers:
5
5
  * - A noop `init()` fires with a valid `PluginInitContext` that exposes every
6
6
  * documented field.
7
+ * - `requiresCredential` entries are resolved through the credential store
8
+ * helper and arrive in `ctx.credentials`.
7
9
  * - Version-mismatch registration fails with an error that names the plugin
8
10
  * (the registry enforces this at `registerPlugin` time, so bootstrap never
9
11
  * sees the malformed plugin).
10
12
  * - Shutdown hook walks plugins in reverse registration order.
11
13
  *
12
- * `resetPluginRegistryForTests()` isolates registry state between cases.
14
+ * Uses `mock.module` to stub `security/secure-keys.js` so credential
15
+ * resolution doesn't hit the real backend. `resetPluginRegistryForTests()`
16
+ * isolates registry state between cases.
13
17
  */
14
18
 
15
19
  import { existsSync } from "node:fs";
16
20
  import { rm } from "node:fs/promises";
17
21
  import { tmpdir } from "node:os";
18
22
  import { join } from "node:path";
19
- import { beforeEach, describe, expect, test } from "bun:test";
23
+ import { beforeEach, describe, expect, mock, test } from "bun:test";
24
+
25
+ // Mock credential store before importing the bootstrap module so the
26
+ // module-under-test captures the stubbed binding.
27
+ const getSecureKeyAsyncMock = mock(
28
+ async (_account: string): Promise<string | undefined> => undefined,
29
+ );
30
+ mock.module("../security/secure-keys.js", () => ({
31
+ getSecureKeyAsync: getSecureKeyAsyncMock,
32
+ }));
20
33
 
21
34
  import { clearFeatureFlagOverridesCache } from "../config/assistant-feature-flags.js";
22
35
  import { bootstrapPlugins } from "../daemon/external-plugins-bootstrap.js";
@@ -55,6 +68,7 @@ function buildPlugin(
55
68
  onShutdown?: () => Promise<void>;
56
69
  } = {},
57
70
  options: {
71
+ requiresCredential?: string[];
58
72
  requiresFlag?: string[];
59
73
  } = {},
60
74
  ): Plugin {
@@ -80,6 +94,9 @@ function buildPlugin(
80
94
  manifest: {
81
95
  name,
82
96
  version: "0.0.1",
97
+ ...(options.requiresCredential
98
+ ? { requiresCredential: options.requiresCredential }
99
+ : {}),
83
100
  ...(options.requiresFlag ? { requiresFlag: options.requiresFlag } : {}),
84
101
  },
85
102
  ...rest,
@@ -90,6 +107,8 @@ function buildPlugin(
90
107
  describe("plugin bootstrap", () => {
91
108
  beforeEach(async () => {
92
109
  resetPluginRegistryForTests();
110
+ getSecureKeyAsyncMock.mockReset();
111
+ getSecureKeyAsyncMock.mockImplementation(async () => undefined);
93
112
  // Reset feature-flag cache so tests start from a known state. Individual
94
113
  // tests that exercise `requiresFlag` use `setOverridesForTesting(...)`
95
114
  // to install their own overrides.
@@ -114,6 +133,7 @@ describe("plugin bootstrap", () => {
114
133
 
115
134
  // Every documented field must be present on the context passed to init.
116
135
  expect(ctx.config).toBeUndefined(); // no `plugins.alpha` block in fake config
136
+ expect(ctx.credentials).toEqual({});
117
137
  expect(ctx.logger).toBeDefined();
118
138
  expect(typeof (ctx.logger as { info: unknown }).info).toBe("function");
119
139
  // Storage dir lives under getWorkspaceDir()/plugins-data/<name> and must have
@@ -125,6 +145,52 @@ describe("plugin bootstrap", () => {
125
145
  expect(ctx.assistantVersion).toBe(APP_VERSION);
126
146
  });
127
147
 
148
+ test("credential resolution: init receives the resolved value under credentials[key]", async () => {
149
+ getSecureKeyAsyncMock.mockImplementation(async (account: string) => {
150
+ if (account === "some-key") return "super-secret-value";
151
+ return undefined;
152
+ });
153
+
154
+ let received: PluginInitContext | undefined;
155
+ const plugin = buildPlugin(
156
+ "credentialed",
157
+ {
158
+ async init(ctx) {
159
+ received = ctx;
160
+ },
161
+ },
162
+ { requiresCredential: ["some-key"] },
163
+ );
164
+ registerPlugin(plugin);
165
+
166
+ await bootstrapPlugins();
167
+
168
+ expect(getSecureKeyAsyncMock).toHaveBeenCalledTimes(1);
169
+ expect(getSecureKeyAsyncMock).toHaveBeenCalledWith("some-key");
170
+ expect(received?.credentials).toEqual({ "some-key": "super-secret-value" });
171
+ });
172
+
173
+ test("credential resolution: a plugin whose required credential is missing is skipped, not fatal", async () => {
174
+ // GIVEN a plugin that requires a credential the store cannot resolve
175
+ getSecureKeyAsyncMock.mockImplementation(async () => undefined);
176
+ registerPlugin(
177
+ buildPlugin(
178
+ "missing-cred",
179
+ { async init() {} },
180
+ { requiresCredential: ["absent-key"] },
181
+ ),
182
+ );
183
+
184
+ // WHEN bootstrap runs
185
+ // THEN it completes without throwing — the unresolvable credential is
186
+ // contained to that plugin (same per-plugin isolation as an init throw)
187
+ await bootstrapPlugins();
188
+
189
+ // AND the plugin is dropped from the registry
190
+ const names = getRegisteredPlugins().map((p) => p.manifest.name);
191
+ expect(names).not.toContain("missing-cred");
192
+ });
193
+
128
194
  test("version mismatch: external plugin loader rejects when peerDependency unsatisfied", async () => {
129
195
  // Host-compat negotiation lives in the external-plugin loader against
130
196
  // `peerDependencies["@vellumai/plugin-api"]`. The registry no longer
@@ -489,7 +555,11 @@ describe("plugin bootstrap", () => {
489
555
  registerPlugin(plugin);
490
556
 
491
557
  // Create the .disabled sentinel in the workspace plugins dir.
492
- const sentinelDir = join(TEST_WORKSPACE_DIR, "plugins", "sentinel-off");
558
+ const sentinelDir = join(
559
+ TEST_WORKSPACE_DIR,
560
+ "plugins",
561
+ "sentinel-off",
562
+ );
493
563
  const { mkdir, writeFile } = await import("node:fs/promises");
494
564
  await mkdir(sentinelDir, { recursive: true });
495
565
  await writeFile(join(sentinelDir, ".disabled"), "");
@@ -22,15 +22,26 @@
22
22
  * each plugin's shutdown only removes its own route — the other plugin's
23
23
  * route stays live until its own teardown runs.
24
24
  *
25
- * `resetPluginRegistryForTests()` isolates plugin-registry state and
26
- * `resetSkillRoutesForTests()` isolates skill-route-registry state between
27
- * cases.
25
+ * Uses `mock.module` to stub credential resolution — bootstrap otherwise
26
+ * tries to hit the real secure-key backend. `resetPluginRegistryForTests()`
27
+ * isolates plugin-registry state and `resetSkillRoutesForTests()` isolates
28
+ * skill-route-registry state between cases.
28
29
  */
29
30
 
30
31
  import { rm } from "node:fs/promises";
31
32
  import { tmpdir } from "node:os";
32
33
  import { join } from "node:path";
33
- import { beforeEach, describe, expect, test } from "bun:test";
34
+ import { beforeEach, describe, expect, mock, test } from "bun:test";
35
+
36
+ // Stub the credential store before importing bootstrap so the module binds to
37
+ // the mock. Plugins in these tests don't declare `requiresCredential`, but
38
+ // the mock keeps the test hermetic regardless of what the backend would do.
39
+ const getSecureKeyAsyncMock = mock(
40
+ async (_account: string): Promise<string | undefined> => undefined,
41
+ );
42
+ mock.module("../security/secure-keys.js", () => ({
43
+ getSecureKeyAsync: getSecureKeyAsyncMock,
44
+ }));
34
45
 
35
46
  import { bootstrapPlugins } from "../daemon/external-plugins-bootstrap.js";
36
47
  import { runShutdownHooks } from "../daemon/shutdown-registry.js";
@@ -102,6 +113,8 @@ describe("plugin route contributions", () => {
102
113
  beforeEach(async () => {
103
114
  resetPluginRegistryForTests();
104
115
  resetSkillRoutesForTests();
116
+ getSecureKeyAsyncMock.mockReset();
117
+ getSecureKeyAsyncMock.mockImplementation(async () => undefined);
105
118
  await rm(TEST_WORKSPACE_DIR, { recursive: true, force: true });
106
119
  });
107
120
 
@@ -16,9 +16,11 @@
16
16
  * - Direct `registerPluginTools` / `unregisterPluginTools` semantics,
17
17
  * including the plugin-scoped ref count.
18
18
  *
19
- * `resetPluginRegistryForTests()` and `__clearRegistryForTesting()` isolate
20
- * registry state between cases so this file can run alongside other
21
- * plugin/tool-registry tests without cross-contamination.
19
+ * Uses `mock.module` to stub the credential store so bootstrap doesn't hit
20
+ * the real backend. `resetPluginRegistryForTests()` and
21
+ * `__clearRegistryForTesting()` isolate registry state between cases so
22
+ * this file can run alongside other plugin/tool-registry tests without
23
+ * cross-contamination.
22
24
  */
23
25
 
24
26
  import { rm } from "node:fs/promises";
@@ -26,6 +28,17 @@ import { tmpdir } from "node:os";
26
28
  import { join } from "node:path";
27
29
  import { beforeEach, describe, expect, mock, test } from "bun:test";
28
30
 
31
+ // Mock the credential store before importing the bootstrap so the module
32
+ // under test captures the stubbed binding. Bootstrap only calls this for
33
+ // plugins that declare `requiresCredential`; the tests in this file don't,
34
+ // so the stub simply returns undefined.
35
+ const getSecureKeyAsyncMock = mock(
36
+ async (_account: string): Promise<string | undefined> => undefined,
37
+ );
38
+ mock.module("../security/secure-keys.js", () => ({
39
+ getSecureKeyAsync: getSecureKeyAsyncMock,
40
+ }));
41
+
29
42
  import { bootstrapPlugins } from "../daemon/external-plugins-bootstrap.js";
30
43
  import { runShutdownHooks } from "../daemon/shutdown-registry.js";
31
44
  import { RiskLevel } from "../permissions/types.js";
@@ -121,6 +134,8 @@ describe("plugin tool contributions", () => {
121
134
  // assertions about which tools are present. We don't need any of the
122
135
  // eager/host tools for these tests.
123
136
  __clearRegistryForTesting();
137
+ getSecureKeyAsyncMock.mockReset();
138
+ getSecureKeyAsyncMock.mockImplementation(async () => undefined);
124
139
  await rm(TEST_WORKSPACE_DIR, { recursive: true, force: true });
125
140
  });
126
141
 
@@ -38,6 +38,7 @@ describe("plugin core types", () => {
38
38
  const manifest: PluginManifest = {
39
39
  name: "sample-plugin",
40
40
  version: "0.1.0",
41
+ requiresCredential: ["SAMPLE_API_KEY"],
41
42
  requiresFlag: ["sample-feature"],
42
43
  config: { parse: (input: unknown) => input },
43
44
  };
@@ -60,6 +61,7 @@ describe("plugin core types", () => {
60
61
  async init(ctx: PluginInitContext) {
61
62
  // Touch every field so refactors that rename any of them break here.
62
63
  void ctx.config;
64
+ void ctx.credentials;
63
65
  void ctx.logger;
64
66
  void ctx.pluginStorageDir;
65
67
  void ctx.assistantVersion;
@@ -19,8 +19,6 @@ mock.module("../memory/canonical-guardian-store.js", () => ({
19
19
  }));
20
20
 
21
21
  mock.module("../memory/conversation-crud.js", () => ({
22
- setConversationProcessingStartedAt: () => {},
23
- isConversationProcessing: () => false,
24
22
  addMessage: async () => ({ id: "message-id" }),
25
23
  getConversation: () => null,
26
24
  provenanceFromTrustContext: () => ({}),
@@ -37,8 +37,6 @@ mock.module("../memory/attachments-store.js", () => ({
37
37
  }));
38
38
 
39
39
  mock.module("../memory/conversation-crud.js", () => ({
40
- setConversationProcessingStartedAt: () => {},
41
- isConversationProcessing: () => false,
42
40
  addMessage: async (
43
41
  conversationId: string,
44
42
  role: string,
@@ -837,10 +837,9 @@ describe("RetryProvider — streaming response handling", () => {
837
837
 
838
838
  test("does NOT retry OpenAI/Gemini-shaped 'Request was aborted' (no inner-timeout rewrite at those catch-sites)", async () => {
839
839
  // The OpenAI chat-completions, OpenAI responses, and Gemini catch-sites
840
- // format their errors as `"<Provider> API error (<status>): Request
841
- // was aborted."` (the OpenAI catch-sites render a missing status as
842
- // `(unknown status)`; the Anthropic catch-site intentionally omits the
843
- // parenthetical) and — unlike the Anthropic
840
+ // format their errors as `"<Provider> API error (undefined): Request
841
+ // was aborted."` (note the `(undefined)` parenthetical that the
842
+ // Anthropic catch-site intentionally omits) and — unlike the Anthropic
844
843
  // catch-site — they do NOT rewrite their inner-streamTimeoutMs
845
844
  // deadline failures. A provider-agnostic transport-abort predicate
846
845
  // would burn three retries on what is by construction a deterministic
@@ -849,7 +848,7 @@ describe("RetryProvider — streaming response handling", () => {
849
848
  // wasted retry budget for non-Anthropic providers until their
850
849
  // catch-sites grow the same `innerTimeoutFired` distinction.
851
850
  const openaiAbortError = new ProviderError(
852
- "OpenAI API error (unknown status): Request was aborted.",
851
+ "OpenAI API error (undefined): Request was aborted.",
853
852
  "openai",
854
853
  undefined,
855
854
  );
@@ -200,42 +200,3 @@ describe("UsageTrackingProvider", () => {
200
200
  });
201
201
  });
202
202
  });
203
-
204
- describe("native web-search capability survives the wrapper chain", () => {
205
- function leaf(supports: boolean | undefined): Provider {
206
- return {
207
- name: "anthropic",
208
- ...(supports === undefined ? {} : { supportsNativeWebSearch: supports }),
209
- async sendMessage(): Promise<ProviderResponse> {
210
- return {
211
- content: [{ type: "text", text: "" }],
212
- model: "m",
213
- usage: { inputTokens: 0, outputTokens: 0 },
214
- stopReason: "end_turn",
215
- };
216
- },
217
- };
218
- }
219
-
220
- test("UsageTrackingProvider forwards supportsNativeWebSearch", () => {
221
- expect(new UsageTrackingProvider(leaf(true)).supportsNativeWebSearch).toBe(
222
- true,
223
- );
224
- expect(new UsageTrackingProvider(leaf(false)).supportsNativeWebSearch).toBe(
225
- false,
226
- );
227
- expect(
228
- new UsageTrackingProvider(leaf(undefined)).supportsNativeWebSearch,
229
- ).toBeUndefined();
230
- });
231
-
232
- test("CallSiteConfiguredProvider forwards it through a nested wrapper", () => {
233
- // The exact chain getConfiguredProvider returns: CallSiteConfigured →
234
- // UsageTracking → leaf. The advisor consult reads the flag off the top.
235
- const wrapped = new CallSiteConfiguredProvider(
236
- new UsageTrackingProvider(leaf(true)),
237
- "advisor",
238
- );
239
- expect(wrapped.supportsNativeWebSearch).toBe(true);
240
- });
241
- });
@@ -23,8 +23,6 @@ let dbMessages: Array<{
23
23
  }> = [];
24
24
 
25
25
  mock.module("../memory/conversation-crud.js", () => ({
26
- setConversationProcessingStartedAt: () => {},
27
- isConversationProcessing: () => false,
28
26
  getMessages: (conversationId: string) =>
29
27
  dbMessages.filter((m) => m.conversationId === conversationId),
30
28
  deleteMessageById: (messageId: string) => {
@@ -36,9 +36,6 @@ function makeFakeTool(name: string): Tool {
36
36
  category: "test",
37
37
  defaultRiskLevel: RiskLevel.Low,
38
38
  executionTarget: "sandbox",
39
- // Match the finalized shape the registry stores, so identity comparisons
40
- // (`getTool(name)` toEqual coreTool) hold after registration fills defaults.
41
- exclusive: false,
42
39
  input_schema: { type: "object", properties: {}, required: [] },
43
40
  async execute(
44
41
  _input: Record<string, unknown>,
@@ -111,7 +108,7 @@ describe("tool registry dynamic-tools tools", () => {
111
108
 
112
109
  describe("tool manifest", () => {
113
110
  test("eager module tool names list contains expected count", () => {
114
- expect(eagerModuleToolNames.length).toBe(12);
111
+ expect(eagerModuleToolNames.length).toBe(11);
115
112
  });
116
113
 
117
114
  test("explicit tools list includes memory tools", () => {