@vellumai/assistant 0.10.7 → 0.10.8-dev.202607102228.5945895

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 (1558) hide show
  1. package/AGENTS.md +3 -1
  2. package/ARCHITECTURE.md +9 -9
  3. package/README.md +1 -1
  4. package/docs/architecture/memory.md +1 -3
  5. package/docs/credential-execution-service.md +9 -96
  6. package/docs/runbook-trusted-contacts.md +132 -93
  7. package/docs/trusted-contact-access.md +125 -115
  8. package/docs/workspace-tools.md +4 -2
  9. package/eslint-rules/__tests__/cli-no-daemon-internals.test.ts +62 -360
  10. package/eslint-rules/cli-no-daemon-internals.js +91 -269
  11. package/eslint.config.mjs +4 -4
  12. package/knip.json +2 -1
  13. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/package.json +1 -2
  14. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/attachment-naming.test.ts +104 -0
  15. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +0 -2
  16. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/attachment-naming.ts +118 -0
  17. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/credential-rpc.ts +3 -5
  18. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/index.ts +2 -4
  19. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/rpc.ts +4 -447
  20. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/package.json +1 -2
  21. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/attachment-naming.test.ts +104 -0
  22. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +0 -2
  23. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/attachment-naming.ts +118 -0
  24. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/credential-rpc.ts +3 -5
  25. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/index.ts +2 -4
  26. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/rpc.ts +4 -447
  27. package/node_modules/@vellumai/gateway-client/src/__tests__/invite-contract.test.ts +0 -18
  28. package/node_modules/@vellumai/gateway-client/src/__tests__/trust-verdict-contract.test.ts +40 -6
  29. package/node_modules/@vellumai/gateway-client/src/channel-permission-contract.ts +13 -0
  30. package/node_modules/@vellumai/gateway-client/src/index.ts +24 -2
  31. package/node_modules/@vellumai/gateway-client/src/invite-contract.ts +146 -16
  32. package/node_modules/@vellumai/gateway-client/src/trust-verdict-contract.ts +22 -4
  33. package/node_modules/@vellumai/service-contracts/package.json +1 -2
  34. package/node_modules/@vellumai/service-contracts/src/__tests__/attachment-naming.test.ts +104 -0
  35. package/node_modules/@vellumai/service-contracts/src/__tests__/contracts.test.ts +0 -2
  36. package/node_modules/@vellumai/service-contracts/src/attachment-naming.ts +118 -0
  37. package/node_modules/@vellumai/service-contracts/src/credential-rpc.ts +3 -5
  38. package/node_modules/@vellumai/service-contracts/src/index.ts +2 -4
  39. package/node_modules/@vellumai/service-contracts/src/rpc.ts +4 -447
  40. package/openapi.yaml +1648 -676
  41. package/package.json +4 -5
  42. package/scripts/build-test-fixtures.ts +105 -0
  43. package/scripts/memory-inspect.ts +2 -8
  44. package/scripts/test.ts +597 -0
  45. package/src/__tests__/access-request-card-view.test.ts +38 -0
  46. package/src/__tests__/activation-early-marking.test.ts +1 -8
  47. package/src/__tests__/actor-token-service.test.ts +1 -22
  48. package/src/__tests__/add-message-preassigned-id.test.ts +1 -1
  49. package/src/__tests__/agent-image-optimize.test.ts +104 -1
  50. package/src/__tests__/agent-loop-callsite-precedence.test.ts +0 -5
  51. package/src/__tests__/agent-loop-compaction-events.test.ts +1 -1
  52. package/src/__tests__/agent-loop-compaction-strip.test.ts +1 -1
  53. package/src/__tests__/agent-loop-exit-reason.test.ts +1 -1
  54. package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +0 -6
  55. package/src/__tests__/agent-loop-override-profile.test.ts +66 -5
  56. package/src/__tests__/agent-loop-pushes-post-hook-prompt.test.ts +1 -9
  57. package/src/__tests__/agent-loop-regrowth-guard.test.ts +1 -1
  58. package/src/__tests__/agent-loop-set-system-prompt.test.ts +1 -7
  59. package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +1 -0
  60. package/src/__tests__/agent-wake-override-profile.test.ts +21 -1
  61. package/src/__tests__/annotate-activity-metadata.test.ts +4 -10
  62. package/src/__tests__/annotate-risk-options.test.ts +4 -10
  63. package/src/__tests__/anthropic-error-formatting.test.ts +193 -2
  64. package/src/__tests__/anthropic-gateway-shared.test.ts +140 -0
  65. package/src/__tests__/anthropic-provider.test.ts +58 -0
  66. package/src/__tests__/app-bundler.test.ts +0 -8
  67. package/src/__tests__/app-conversation-ids-backfill.test.ts +1 -8
  68. package/src/__tests__/app-routes-csp.test.ts +0 -8
  69. package/src/__tests__/approval-cascade.test.ts +0 -21
  70. package/src/__tests__/approval-interception-trust-gates.test.ts +0 -7
  71. package/src/__tests__/approval-primitive.test.ts +1 -9
  72. package/src/__tests__/approval-routes-http.test.ts +1 -16
  73. package/src/__tests__/assistant-attachment-directive.test.ts +1 -0
  74. package/src/__tests__/assistant-attachments.test.ts +211 -0
  75. package/src/__tests__/assistant-event-hub-machine-name.test.ts +0 -7
  76. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -7
  77. package/src/__tests__/assistant-feature-flag-guard.test.ts +3 -3
  78. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +1 -1
  79. package/src/__tests__/attachment-stored-path-annotation.test.ts +0 -7
  80. package/src/__tests__/attachment-upload-trusted-source.test.ts +0 -7
  81. package/src/__tests__/attachments-store-heic-normalize.test.ts +0 -7
  82. package/src/__tests__/attachments-store.test.ts +43 -8
  83. package/src/__tests__/attachments.test.ts +77 -0
  84. package/src/__tests__/audit-log-rotation.test.ts +1 -9
  85. package/src/__tests__/auth-fallback-events-store.test.ts +0 -7
  86. package/src/__tests__/available-skills.test.ts +266 -0
  87. package/src/__tests__/avatar-generator.test.ts +0 -9
  88. package/src/__tests__/background-shell-host-bash.test.ts +0 -7
  89. package/src/__tests__/background-workers-disk-pressure.test.ts +4 -3
  90. package/src/__tests__/browser-fill-credential.test.ts +0 -7
  91. package/src/__tests__/browser-manager.test.ts +1 -8
  92. package/src/__tests__/btw-routes.test.ts +0 -7
  93. package/src/__tests__/build-persisted-content.test.ts +0 -8
  94. package/src/__tests__/call-constants.test.ts +1 -1
  95. package/src/__tests__/call-controller.test.ts +783 -34
  96. package/src/__tests__/call-conversation-messages.test.ts +2 -9
  97. package/src/__tests__/call-domain.test.ts +7 -24
  98. package/src/__tests__/call-pointer-message-composer.test.ts +0 -8
  99. package/src/__tests__/call-pointer-messages.test.ts +1 -8
  100. package/src/__tests__/call-recovery.test.ts +1 -8
  101. package/src/__tests__/call-routes-http.test.ts +0 -7
  102. package/src/__tests__/call-setup-flow-invite.test.ts +1 -1
  103. package/src/__tests__/call-setup-flow-midcall-trust.test.ts +76 -97
  104. package/src/__tests__/call-setup-flow-name-capture.test.ts +1 -1
  105. package/src/__tests__/call-setup-flow-verification.test.ts +1 -1
  106. package/src/__tests__/call-setup-flow.test.ts +2 -2
  107. package/src/__tests__/call-site-routing-provider.test.ts +1 -5
  108. package/src/__tests__/call-state.test.ts +1 -8
  109. package/src/__tests__/call-store.test.ts +1 -8
  110. package/src/__tests__/cancel-resolves-conversation-key.test.ts +0 -7
  111. package/src/__tests__/canonical-guardian-store.test.ts +1 -8
  112. package/src/__tests__/catalog-cache.test.ts +0 -8
  113. package/src/__tests__/catalog-files.test.ts +0 -8
  114. package/src/__tests__/catalog-install-normalize.test.ts +0 -7
  115. package/src/__tests__/ces-rpc-credential-backend.test.ts +0 -7
  116. package/src/__tests__/channel-approval-routes.test.ts +0 -7
  117. package/src/__tests__/channel-approvals.test.ts +0 -7
  118. package/src/__tests__/channel-delivery-store.test.ts +0 -7
  119. package/src/__tests__/channel-guardian.test.ts +29 -16
  120. package/src/__tests__/channel-inbound-disk-pressure.test.ts +0 -7
  121. package/src/__tests__/channel-reply-delivery.test.ts +18 -5
  122. package/src/__tests__/channel-retry-sweep.test.ts +0 -7
  123. package/src/__tests__/clawhub-files.test.ts +0 -8
  124. package/src/__tests__/clawhub.test.ts +0 -7
  125. package/src/__tests__/clear-all-lexical.test.ts +0 -6
  126. package/src/__tests__/client-os-metadata-persistence.test.ts +0 -5
  127. package/src/__tests__/compaction-direct.test.ts +47 -0
  128. package/src/__tests__/compaction-events.test.ts +14 -29
  129. package/src/__tests__/compaction-ledger-store.test.ts +1 -7
  130. package/src/__tests__/compaction-summary-head-persisted-count.test.ts +417 -0
  131. package/src/__tests__/compaction-trail-store.test.ts +2 -8
  132. package/src/__tests__/compaction.benchmark.test.ts +0 -5
  133. package/src/__tests__/compactor-call-site-logging.test.ts +0 -21
  134. package/src/__tests__/compactor-fixed-boundary.test.ts +334 -0
  135. package/src/__tests__/compactor-low-watermark-cut.test.ts +8 -23
  136. package/src/__tests__/compactor-media-strip.test.ts +0 -21
  137. package/src/__tests__/compactor-preserved-tail-count.test.ts +0 -21
  138. package/src/__tests__/compactor-summary-call-truncation.test.ts +0 -21
  139. package/src/__tests__/compactor-web-search-strip.test.ts +21 -25
  140. package/src/__tests__/config-get-vision-flag.test.ts +0 -6
  141. package/src/__tests__/config-loader-backfill.test.ts +332 -316
  142. package/src/__tests__/config-loader-platform-defaults.test.ts +0 -21
  143. package/src/__tests__/config-loader-validation-reset-notice.test.ts +183 -0
  144. package/src/__tests__/config-schema.test.ts +85 -30
  145. package/src/__tests__/config-set-route.test.ts +0 -6
  146. package/src/__tests__/config-watcher-cleanup-throttle.test.ts +12 -24
  147. package/src/__tests__/config-watcher-skill-reseed.test.ts +1 -8
  148. package/src/__tests__/config-watcher.test.ts +22 -12
  149. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +1 -9
  150. package/src/__tests__/contact-store-interaction-info.test.ts +1 -8
  151. package/src/__tests__/contact-store-user-file.test.ts +1 -14
  152. package/src/__tests__/contacts-tools.test.ts +0 -7
  153. package/src/__tests__/contacts-write.test.ts +1 -8
  154. package/src/__tests__/context-search-memory-source.test.ts +0 -1
  155. package/src/__tests__/context-search-memory-v2-source.test.ts +0 -6
  156. package/src/__tests__/context-window-manager-compact-retry.test.ts +118 -21
  157. package/src/__tests__/context-window-manager-overflow-rung.test.ts +0 -21
  158. package/src/__tests__/conversation-abort-tool-results.test.ts +0 -5
  159. package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +0 -12
  160. package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +5 -12
  161. package/src/__tests__/conversation-agent-loop-overflow.test.ts +45 -21
  162. package/src/__tests__/conversation-agent-loop.test.ts +192 -70
  163. package/src/__tests__/conversation-app-control-instantiation.test.ts +20 -8
  164. package/src/__tests__/conversation-app-control-lifecycle.test.ts +0 -9
  165. package/src/__tests__/conversation-attachments.test.ts +1 -7
  166. package/src/__tests__/conversation-attention-store.test.ts +1 -9
  167. package/src/__tests__/conversation-attention-telegram.test.ts +0 -8
  168. package/src/__tests__/conversation-clear-safety.test.ts +0 -7
  169. package/src/__tests__/conversation-confirmation-signals.test.ts +0 -21
  170. package/src/__tests__/conversation-crud-enabled-plugins.test.ts +1 -7
  171. package/src/__tests__/conversation-crud-inference-profile.test.ts +1 -7
  172. package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +0 -7
  173. package/src/__tests__/conversation-disk-view-integration.test.ts +0 -7
  174. package/src/__tests__/conversation-disk-view.test.ts +0 -7
  175. package/src/__tests__/conversation-enabledplugins-route.test.ts +2 -8
  176. package/src/__tests__/conversation-error.test.ts +299 -3
  177. package/src/__tests__/conversation-fork-crud.test.ts +52 -37
  178. package/src/__tests__/conversation-fork-retrospective.test.ts +486 -7
  179. package/src/__tests__/conversation-fork-route.test.ts +0 -7
  180. package/src/__tests__/conversation-history-web-search.test.ts +39 -17
  181. package/src/__tests__/conversation-inference-profile-list.test.ts +0 -6
  182. package/src/__tests__/conversation-inference-profile-route.test.ts +0 -5
  183. package/src/__tests__/conversation-init.benchmark.test.ts +6 -2
  184. package/src/__tests__/conversation-initial-prompt.test.ts +1 -1
  185. package/src/__tests__/conversation-key-store-disk-view.test.ts +0 -7
  186. package/src/__tests__/conversation-lifecycle.test.ts +108 -62
  187. package/src/__tests__/conversation-list-source.test.ts +0 -7
  188. package/src/__tests__/conversation-load-history-repair.test.ts +39 -53
  189. package/src/__tests__/conversation-load-history-stripped.test.ts +12 -19
  190. package/src/__tests__/conversation-loop-db-lock-resilience.test.ts +10 -15
  191. package/src/__tests__/conversation-message-id-uuidv7.test.ts +73 -0
  192. package/src/__tests__/conversation-pairing.test.ts +0 -7
  193. package/src/__tests__/conversation-process-app-control-preactivation.test.ts +0 -5
  194. package/src/__tests__/conversation-process-callsite.test.ts +14 -7
  195. package/src/__tests__/conversation-provider-retry-repair.test.ts +0 -5
  196. package/src/__tests__/conversation-queue.test.ts +91 -21
  197. package/src/__tests__/conversation-routes-disk-view.test.ts +0 -11
  198. package/src/__tests__/conversation-routes-enabled-plugins.test.ts +3 -11
  199. package/src/__tests__/conversation-routes-guardian-reply.test.ts +3 -11
  200. package/src/__tests__/conversation-routes-hidden-queue.test.ts +3 -11
  201. package/src/__tests__/conversation-routes-slash-commands.test.ts +24 -13
  202. package/src/__tests__/conversation-runtime-assembly.test.ts +37 -9
  203. package/src/__tests__/conversation-skill-tools.test.ts +31 -15
  204. package/src/__tests__/conversation-slash-commands.test.ts +5 -4
  205. package/src/__tests__/conversation-slash-queue.test.ts +0 -5
  206. package/src/__tests__/conversation-slash-unknown.test.ts +0 -5
  207. package/src/__tests__/conversation-speed-override.test.ts +13 -23
  208. package/src/__tests__/conversation-starter-routes.test.ts +0 -7
  209. package/src/__tests__/conversation-store.test.ts +9 -22
  210. package/src/__tests__/conversation-summarize-route.test.ts +445 -0
  211. package/src/__tests__/conversation-summarize-up-to.test.ts +711 -0
  212. package/src/__tests__/conversation-surfaces-activation-emit.test.ts +0 -8
  213. package/src/__tests__/conversation-surfaces-data-persist.test.ts +4 -2
  214. package/src/__tests__/conversation-title-service.test.ts +0 -7
  215. package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +0 -19
  216. package/src/__tests__/conversation-tool-setup-attribution.test.ts +4 -8
  217. package/src/__tests__/conversation-unread-route.test.ts +0 -7
  218. package/src/__tests__/conversation-usage.test.ts +10 -8
  219. package/src/__tests__/conversation-wait-for-idle.test.ts +391 -0
  220. package/src/__tests__/conversation-workspace-cache-state.test.ts +0 -5
  221. package/src/__tests__/conversation-workspace-injection.test.ts +0 -5
  222. package/src/__tests__/conversation-workspace-tool-tracking.test.ts +0 -5
  223. package/src/__tests__/conversations-import-system-filter.test.ts +0 -7
  224. package/src/__tests__/credential-broker-browser-fill.test.ts +0 -9
  225. package/src/__tests__/credential-broker-server-use.test.ts +0 -9
  226. package/src/__tests__/credential-execution-api-key-propagation.test.ts +0 -40
  227. package/src/__tests__/credential-execution-client.test.ts +3 -38
  228. package/src/__tests__/credential-execution-managed-contract.test.ts +10 -106
  229. package/src/__tests__/credential-health-service.test.ts +0 -9
  230. package/src/__tests__/credential-metadata-store.test.ts +0 -8
  231. package/src/__tests__/credential-prompt-route.test.ts +80 -9
  232. package/src/__tests__/credential-request-route.test.ts +76 -0
  233. package/src/__tests__/credential-resolve.test.ts +0 -8
  234. package/src/__tests__/credential-security-invariants.test.ts +3 -10
  235. package/src/__tests__/credential-token-resolver.test.ts +0 -9
  236. package/src/__tests__/custom-profile-ensure.test.ts +232 -0
  237. package/src/__tests__/daemon-assistant-events.test.ts +1 -9
  238. package/src/__tests__/daemon-credential-client.test.ts +0 -7
  239. package/src/__tests__/db-conversation-fork-lineage-migration.test.ts +1 -8
  240. package/src/__tests__/db-conversation-inference-profile-migration.test.ts +1 -7
  241. package/src/__tests__/db-llm-request-log-provider-migration.test.ts +0 -8
  242. package/src/__tests__/db-processing-resume-attempts-migration.test.ts +116 -0
  243. package/src/__tests__/db-readiness-http-gate.test.ts +0 -7
  244. package/src/__tests__/db-rename-inference-profile-snake-case-migration.test.ts +1 -7
  245. package/src/__tests__/default-provider-ensure.test.ts +343 -0
  246. package/src/__tests__/delete-managed-skill-tool.test.ts +0 -7
  247. package/src/__tests__/delete-propagation.test.ts +0 -7
  248. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -7
  249. package/src/__tests__/device-id.test.ts +1 -9
  250. package/src/__tests__/disk-pressure-tools.test.ts +0 -4
  251. package/src/__tests__/dm-backfill.test.ts +0 -7
  252. package/src/__tests__/dm-persistence.test.ts +0 -5
  253. package/src/__tests__/docker-signing-key-bootstrap.test.ts +1 -8
  254. package/src/__tests__/drain-requeue-on-contention.test.ts +202 -0
  255. package/src/__tests__/dynamic-skill-background-guard.test.ts +174 -0
  256. package/src/__tests__/edit-propagation.test.ts +1 -8
  257. package/src/__tests__/embedding-managed-proxy-selection.test.ts +0 -8
  258. package/src/__tests__/emit-signal-routing-intent.test.ts +175 -7
  259. package/src/__tests__/encrypted-store.test.ts +0 -9
  260. package/src/__tests__/ensure-conversation-exists.test.ts +85 -0
  261. package/src/__tests__/events-client-registration.test.ts +0 -7
  262. package/src/__tests__/events-dev-bypass-actor.test.ts +2 -9
  263. package/src/__tests__/events-tail-route.test.ts +172 -0
  264. package/src/__tests__/file-write-tool.test.ts +9 -13
  265. package/src/__tests__/followup-tools.test.ts +0 -7
  266. package/src/__tests__/gateway-flag-listener.test.ts +2 -23
  267. package/src/__tests__/gemini-inline-media.test.ts +2 -2
  268. package/src/__tests__/gemini-provider.test.ts +140 -1
  269. package/src/__tests__/get-skill-detail-audit.test.ts +89 -1
  270. package/src/__tests__/graph-extraction-event-date.test.ts +0 -9
  271. package/src/__tests__/guardian-action-sweep.test.ts +0 -7
  272. package/src/__tests__/guardian-binding-drift-heal.test.ts +0 -7
  273. package/src/__tests__/guardian-card-withdrawal.test.ts +0 -8
  274. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -9
  275. package/src/__tests__/guardian-dispatch.test.ts +0 -7
  276. package/src/__tests__/guardian-expiry-notifier.test.ts +1 -9
  277. package/src/__tests__/guardian-outbound-http.test.ts +0 -7
  278. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +1 -8
  279. package/src/__tests__/guardian-routing-invariants.test.ts +0 -8
  280. package/src/__tests__/guardian-routing-state.test.ts +1 -9
  281. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -7
  282. package/src/__tests__/handlers-skills-memory-v2-reseed.test.ts +0 -2
  283. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +4 -5
  284. package/src/__tests__/headless-browser-interactions.test.ts +0 -7
  285. package/src/__tests__/headless-browser-mode.test.ts +0 -9
  286. package/src/__tests__/headless-browser-navigate.test.ts +91 -13
  287. package/src/__tests__/headless-browser-read-tools.test.ts +0 -7
  288. package/src/__tests__/headless-browser-snapshot.test.ts +0 -7
  289. package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -9
  290. package/src/__tests__/helpers/set-config.ts +40 -0
  291. package/src/__tests__/host-bash-proxy.test.ts +3 -3
  292. package/src/__tests__/host-browser-proxy.test.ts +15 -20
  293. package/src/__tests__/host-cu-routes-targeted.test.ts +0 -1
  294. package/src/__tests__/host-shell-tool.test.ts +5 -69
  295. package/src/__tests__/http-conversation-lineage.test.ts +0 -7
  296. package/src/__tests__/http-user-message-parity.test.ts +0 -7
  297. package/src/__tests__/identity-routes.test.ts +1 -9
  298. package/src/__tests__/image-recovery-hook.test.ts +36 -0
  299. package/src/__tests__/inbound-admitted-introduction-nudge.test.ts +296 -0
  300. package/src/__tests__/inbound-invite-redemption.test.ts +0 -7
  301. package/src/__tests__/inbound-slack-persistence.test.ts +0 -5
  302. package/src/__tests__/inbound-trust-verdict.test.ts +1 -8
  303. package/src/__tests__/inference-profile-reaper.test.ts +1 -7
  304. package/src/__tests__/inference-profile-session-handler.test.ts +0 -6
  305. package/src/__tests__/inference-profile-session-ipc.test.ts +0 -6
  306. package/src/__tests__/ingress-url-consistency.test.ts +1 -23
  307. package/src/__tests__/injection-block.test.ts +0 -1
  308. package/src/__tests__/injector-chain.test.ts +17 -0
  309. package/src/__tests__/injector-config-validation-reset-notice.test.ts +121 -0
  310. package/src/__tests__/injector-pkb-v2-silenced.test.ts +8 -0
  311. package/src/__tests__/injector-registry-order-guard.test.ts +1 -0
  312. package/src/__tests__/inline-command-runner.test.ts +0 -7
  313. package/src/__tests__/inline-skill-load-permissions.test.ts +29 -31
  314. package/src/__tests__/internal-telemetry-routes.test.ts +72 -7
  315. package/src/__tests__/interrupted-turn-reconciler.test.ts +126 -0
  316. package/src/__tests__/introduction-card-resolver.test.ts +0 -9
  317. package/src/__tests__/invite-redeemed-ipc.test.ts +0 -7
  318. package/src/__tests__/invite-routes-http.test.ts +46 -11
  319. package/src/__tests__/job-handler-registration-guard.test.ts +1 -1
  320. package/src/__tests__/jobs-store-qdrant-breaker.test.ts +0 -7
  321. package/src/__tests__/jobs-store-upsert-debounced.test.ts +0 -7
  322. package/src/__tests__/lexical-index-dual-write.test.ts +2 -8
  323. package/src/__tests__/list-messages-attachments.test.ts +0 -7
  324. package/src/__tests__/list-messages-background-tool-completion.test.ts +0 -7
  325. package/src/__tests__/list-messages-client-message-id.test.ts +0 -7
  326. package/src/__tests__/list-messages-hidden-metadata.test.ts +0 -7
  327. package/src/__tests__/list-messages-page-latest.test.ts +0 -7
  328. package/src/__tests__/list-messages-queued.test.ts +9 -10
  329. package/src/__tests__/list-messages-tool-merge.test.ts +0 -7
  330. package/src/__tests__/llm-catalog-parity.test.ts +20 -0
  331. package/src/__tests__/llm-context-resolution.test.ts +26 -1
  332. package/src/__tests__/llm-context-route-provider.test.ts +1 -8
  333. package/src/__tests__/llm-request-log-agent-loop-exit-reason.test.ts +9 -16
  334. package/src/__tests__/llm-request-log-call-site.test.ts +5 -12
  335. package/src/__tests__/llm-request-log-clickhouse-routing.test.ts +117 -0
  336. package/src/__tests__/llm-request-log-clickhouse-writer-guards.test.ts +115 -0
  337. package/src/__tests__/llm-request-log-disabled-writes.test.ts +72 -0
  338. package/src/__tests__/llm-request-log-sink-clickhouse.test.ts +211 -0
  339. package/src/__tests__/llm-request-log-source-clickhouse.test.ts +1 -22
  340. package/src/__tests__/llm-request-log-source-factory.test.ts +0 -21
  341. package/src/__tests__/llm-request-log-turn-query.test.ts +0 -7
  342. package/src/__tests__/llm-resolver-override-or-default.test.ts +563 -0
  343. package/src/__tests__/llm-resolver.test.ts +167 -6
  344. package/src/__tests__/llm-usage-store.test.ts +1 -7
  345. package/src/__tests__/log-export-routes.test.ts +0 -7
  346. package/src/__tests__/log-export-workspace.test.ts +0 -7
  347. package/src/__tests__/managed-profile-guard.test.ts +240 -6
  348. package/src/__tests__/managed-skill-lifecycle.test.ts +0 -7
  349. package/src/__tests__/managed-store.test.ts +1 -16
  350. package/src/__tests__/mcp-auth-routes.test.ts +1 -8
  351. package/src/__tests__/mcp-config-secret-boundary.test.ts +17 -5
  352. package/src/__tests__/media-generate-image.test.ts +20 -7
  353. package/src/__tests__/media-stream-output.test.ts +755 -71
  354. package/src/__tests__/media-stream-server-integration.test.ts +290 -60
  355. package/src/__tests__/media-stream-stt-session.test.ts +26 -13
  356. package/src/__tests__/memory-config-file-parity.test.ts +187 -0
  357. package/src/__tests__/memory-identity-context-parity.test.ts +103 -0
  358. package/src/__tests__/memory-jobs-worker-backoff.test.ts +8 -7
  359. package/src/__tests__/memory-jobs-worker-cleanup-cadence.test.ts +296 -0
  360. package/src/__tests__/memory-jobs-worker-lanes.test.ts +0 -7
  361. package/src/__tests__/memory-recall-log-store.test.ts +0 -7
  362. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -7
  363. package/src/__tests__/message-queue.test.ts +40 -0
  364. package/src/__tests__/messages-after-tiebreaker.test.ts +1 -8
  365. package/src/__tests__/messaging-send-tool.test.ts +0 -7
  366. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -7
  367. package/src/__tests__/migration-export-http.test.ts +10 -12
  368. package/src/__tests__/migration-export-streaming.test.ts +0 -7
  369. package/src/__tests__/migration-export-to-gcs.test.ts +60 -7
  370. package/src/__tests__/migration-import-commit-http.test.ts +11 -12
  371. package/src/__tests__/migration-import-from-gcs.test.ts +0 -7
  372. package/src/__tests__/migration-import-from-url.test.ts +0 -7
  373. package/src/__tests__/migration-import-preflight-http.test.ts +10 -11
  374. package/src/__tests__/migration-jobs-status.test.ts +8 -11
  375. package/src/__tests__/migration-validate-http.test.ts +2 -8
  376. package/src/__tests__/model-intents.test.ts +18 -0
  377. package/src/__tests__/mtime-cache.test.ts +102 -9
  378. package/src/__tests__/non-member-access-request.test.ts +145 -7
  379. package/src/__tests__/notification-broadcaster.test.ts +0 -7
  380. package/src/__tests__/notification-candidate-guardian-context.test.ts +1 -8
  381. package/src/__tests__/notification-decision-fallback.test.ts +0 -7
  382. package/src/__tests__/notification-decision-identity.test.ts +0 -7
  383. package/src/__tests__/notification-decision-recipient-context.test.ts +0 -7
  384. package/src/__tests__/notification-deep-link.test.ts +415 -11
  385. package/src/__tests__/notification-guardian-path.test.ts +0 -7
  386. package/src/__tests__/notification-platform-adapter.test.ts +0 -7
  387. package/src/__tests__/notification-routing-intent.test.ts +1 -9
  388. package/src/__tests__/notification-schedule-notify-dedup.test.ts +1 -9
  389. package/src/__tests__/notification-telegram-adapter.test.ts +0 -7
  390. package/src/__tests__/oauth-cli.test.ts +0 -1
  391. package/src/__tests__/oauth-connect-orchestrator.test.ts +0 -8
  392. package/src/__tests__/oauth-connect-routes.test.ts +19 -18
  393. package/src/__tests__/oauth-provider-profiles.test.ts +0 -7
  394. package/src/__tests__/oauth-provider-visibility.test.ts +0 -7
  395. package/src/__tests__/oauth-store.test.ts +0 -7
  396. package/src/__tests__/openai-provider.test.ts +11 -0
  397. package/src/__tests__/openrouter-provider-only.test.ts +16 -5
  398. package/src/__tests__/openrouter-token-estimation.test.ts +2 -2
  399. package/src/__tests__/outbound-slack-persistence.test.ts +9 -7
  400. package/src/__tests__/outlook-email-watcher.test.ts +0 -9
  401. package/src/__tests__/path-policy.test.ts +0 -7
  402. package/src/__tests__/pending-interactions-resolved-event.test.ts +26 -4
  403. package/src/__tests__/persist-media-references.test.ts +112 -0
  404. package/src/__tests__/persist-unsendable-image-downscale.test.ts +9 -4
  405. package/src/__tests__/persist-unsendable-image.test.ts +39 -7
  406. package/src/__tests__/persist-user-message-set-processing-failure.test.ts +41 -0
  407. package/src/__tests__/persistence-secret-redaction.test.ts +7 -7
  408. package/src/__tests__/persona-resolver.test.ts +1 -1
  409. package/src/__tests__/personal-memory-auth-bypass.test.ts +2 -4
  410. package/src/__tests__/platform-bash-auto-approve.test.ts +20 -10
  411. package/src/__tests__/platform-callback-registration.test.ts +10 -9
  412. package/src/__tests__/platform-proxy-context.test.ts +0 -8
  413. package/src/__tests__/playbook-execution.test.ts +2 -33
  414. package/src/__tests__/playbook-tools.test.ts +0 -7
  415. package/src/__tests__/plugin-api-model-profiles.test.ts +25 -4
  416. package/src/__tests__/plugin-effective-enabled-set.test.ts +29 -29
  417. package/src/__tests__/plugin-hook-pipeline-hardening.test.ts +249 -0
  418. package/src/__tests__/plugin-import-boundary-guard.test.ts +13 -25
  419. package/src/__tests__/plugin-import-boundary-reverse-guard.test.ts +316 -0
  420. package/src/__tests__/plugin-types.test.ts +1 -1
  421. package/src/__tests__/pointer-conversation-trust.test.ts +2 -4
  422. package/src/__tests__/pricing.test.ts +85 -2
  423. package/src/__tests__/process-message-background-slack.test.ts +4 -5
  424. package/src/__tests__/process-message-display-content.test.ts +102 -10
  425. package/src/__tests__/processing-flag-persist-failure.test.ts +0 -5
  426. package/src/__tests__/provider-commit-message-generator.test.ts +15 -8
  427. package/src/__tests__/provider-error-scenarios.test.ts +68 -5
  428. package/src/__tests__/provider-platform-proxy-integration.test.ts +17 -2
  429. package/src/__tests__/provider-registry-ollama.test.ts +14 -1
  430. package/src/__tests__/provider-send-message-override-profile.test.ts +13 -5
  431. package/src/__tests__/provider-streaming.benchmark.test.ts +1 -6
  432. package/src/__tests__/provider-usage-tracking.test.ts +9 -6
  433. package/src/__tests__/proxy-approval-callback.test.ts +0 -6
  434. package/src/__tests__/prune-old-conversations-job.test.ts +1 -9
  435. package/src/__tests__/prune-old-tool-invocations-job.test.ts +1 -9
  436. package/src/__tests__/public-ingress-urls.test.ts +1 -24
  437. package/src/__tests__/qdrant-collection-migration.test.ts +0 -7
  438. package/src/__tests__/qdrant-manager.test.ts +0 -8
  439. package/src/__tests__/ratelimit.test.ts +1 -8
  440. package/src/__tests__/reaction-persistence.test.ts +0 -7
  441. package/src/__tests__/rebuild-index-graph-nodes.test.ts +0 -11
  442. package/src/__tests__/registry.test.ts +39 -12
  443. package/src/__tests__/request-secret-standalone-channel-gate.test.ts +270 -0
  444. package/src/__tests__/require-fresh-approval.test.ts +47 -182
  445. package/src/__tests__/resolve-trust-class.test.ts +1 -1
  446. package/src/__tests__/retry-openrouter-only-normalization.test.ts +9 -5
  447. package/src/__tests__/retry-thinking-adaptive-only.test.ts +19 -5
  448. package/src/__tests__/retry-thinking-tool-choice.test.ts +65 -5
  449. package/src/__tests__/retry-verbosity-normalization.test.ts +9 -5
  450. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -7
  451. package/src/__tests__/runtime-events-sse-bilingual.test.ts +0 -7
  452. package/src/__tests__/runtime-events-sse-parity.test.ts +0 -7
  453. package/src/__tests__/runtime-events-sse-reconnect.test.ts +0 -7
  454. package/src/__tests__/runtime-events-sse.test.ts +0 -7
  455. package/src/__tests__/scaffold-managed-skill-tool.test.ts +131 -9
  456. package/src/__tests__/schedule-retry.test.ts +0 -8
  457. package/src/__tests__/schedule-routes-workflow-validation.test.ts +0 -7
  458. package/src/__tests__/schedule-routes.test.ts +0 -7
  459. package/src/__tests__/schedule-store.test.ts +0 -8
  460. package/src/__tests__/schedule-tools.test.ts +0 -7
  461. package/src/__tests__/scheduler-disk-pressure.test.ts +0 -10
  462. package/src/__tests__/scheduler-recurrence.test.ts +19 -96
  463. package/src/__tests__/scheduler-reuse-conversation.test.ts +75 -88
  464. package/src/__tests__/scheduler-wake.test.ts +12 -60
  465. package/src/__tests__/scheduler-worker-standdown.test.ts +0 -8
  466. package/src/__tests__/scoped-approval-grants.test.ts +1 -9
  467. package/src/__tests__/scoped-grant-security-matrix.test.ts +1 -9
  468. package/src/__tests__/secret-allowlist.test.ts +1 -8
  469. package/src/__tests__/secret-ingress-channel.test.ts +0 -7
  470. package/src/__tests__/secret-ingress-cli.test.ts +0 -7
  471. package/src/__tests__/secret-ingress-http.test.ts +3 -11
  472. package/src/__tests__/secret-patterns.test.ts +27 -0
  473. package/src/__tests__/secret-prompter-channel-fallback.test.ts +35 -9
  474. package/src/__tests__/secret-response-routing.test.ts +1 -1
  475. package/src/__tests__/secret-routes-platform-proxy.test.ts +0 -7
  476. package/src/__tests__/secure-keys-managed-failover.test.ts +0 -7
  477. package/src/__tests__/secure-keys.test.ts +142 -33
  478. package/src/__tests__/send-endpoint-busy.test.ts +0 -19
  479. package/src/__tests__/sequence-store.test.ts +0 -9
  480. package/src/__tests__/server-history-render.test.ts +61 -8
  481. package/src/__tests__/service-contracts-import-guard.test.ts +4 -9
  482. package/src/__tests__/set-permission-mode.test.ts +0 -7
  483. package/src/__tests__/settings-routes.test.ts +0 -7
  484. package/src/__tests__/shell-credential-ref.test.ts +0 -8
  485. package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -7
  486. package/src/__tests__/skill-projection-feature-flag.test.ts +35 -17
  487. package/src/__tests__/skill-projection.benchmark.test.ts +7 -7
  488. package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -7
  489. package/src/__tests__/skills-files-catalog-fallback.test.ts +0 -7
  490. package/src/__tests__/slack-channels-routes.test.ts +34 -16
  491. package/src/__tests__/slack-inbound-verification.test.ts +0 -7
  492. package/src/__tests__/slack-reaction-canonical-approval.test.ts +0 -8
  493. package/src/__tests__/slack-users-routes.test.ts +148 -0
  494. package/src/__tests__/slim-skill-category.test.ts +0 -7
  495. package/src/__tests__/stale-approval-dedup.test.ts +0 -7
  496. package/src/__tests__/subagent-call-site-routing.test.ts +45 -11
  497. package/src/__tests__/subagent-detail.test.ts +2 -1
  498. package/src/__tests__/subagent-fork-prompt-role.test.ts +0 -5
  499. package/src/__tests__/subagent-fork-spawn.test.ts +0 -37
  500. package/src/__tests__/subagent-spawn-and-await.test.ts +0 -5
  501. package/src/__tests__/subagent-tool-gate-mode.test.ts +1 -7
  502. package/src/__tests__/subagent-tools.test.ts +77 -36
  503. package/src/__tests__/suggestion-routes.test.ts +28 -42
  504. package/src/__tests__/summarize-boundary.test.ts +169 -0
  505. package/src/__tests__/task-compiler.test.ts +0 -7
  506. package/src/__tests__/task-management-tools.test.ts +0 -7
  507. package/src/__tests__/task-memory-cleanup.test.ts +0 -18
  508. package/src/__tests__/task-scheduler.test.ts +40 -9
  509. package/src/__tests__/telegram-bot-username-resolution.test.ts +0 -8
  510. package/src/__tests__/telephony-tts-guard.test.ts +118 -26
  511. package/src/__tests__/test-preload.ts +11 -1
  512. package/src/__tests__/thread-backfill.test.ts +2 -8
  513. package/src/__tests__/token-manager.test.ts +0 -9
  514. package/src/__tests__/tool-approval-handler.test.ts +57 -88
  515. package/src/__tests__/{tool-audit-listener.test.ts → tool-audit.test.ts} +230 -255
  516. package/src/__tests__/tool-execution-abort-cleanup.test.ts +5 -33
  517. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -8
  518. package/src/__tests__/tool-executor-lifecycle-events.test.ts +308 -411
  519. package/src/__tests__/tool-executor.test.ts +37 -26
  520. package/src/__tests__/tool-grant-request-escalation.test.ts +17 -31
  521. package/src/__tests__/tool-preview-lifecycle.test.ts +2 -8
  522. package/src/__tests__/tool-profiler.test.ts +139 -0
  523. package/src/__tests__/tool-result-metadata-plumbing.test.ts +0 -8
  524. package/src/__tests__/tool-start-timestamp.test.ts +4 -10
  525. package/src/__tests__/tools-get-route.test.ts +75 -3
  526. package/src/__tests__/trust-context-guards.test.ts +1 -1
  527. package/src/__tests__/trusted-contact-approval-notifier.test.ts +1 -1
  528. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +9 -26
  529. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -7
  530. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -7
  531. package/src/__tests__/trusted-contact-verification.test.ts +6 -139
  532. package/src/__tests__/turn-boundary-resolution.test.ts +0 -7
  533. package/src/__tests__/turn-events-store.test.ts +51 -7
  534. package/src/__tests__/turn-outcome-read.test.ts +75 -0
  535. package/src/__tests__/twilio-config.test.ts +0 -7
  536. package/src/__tests__/twilio-provider.test.ts +0 -7
  537. package/src/__tests__/twilio-routes-twiml.test.ts +1 -8
  538. package/src/__tests__/twilio-routes.test.ts +12 -5
  539. package/src/__tests__/twilio-validation.test.ts +0 -7
  540. package/src/__tests__/usage-attribution.test.ts +91 -1
  541. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -7
  542. package/src/__tests__/usage-routes.test.ts +1 -8
  543. package/src/__tests__/vbundle-pax-and-symlink.test.ts +0 -7
  544. package/src/__tests__/vercel-ai-gateway-provider.test.ts +283 -0
  545. package/src/__tests__/vercel-config.test.ts +0 -7
  546. package/src/__tests__/verification-control-plane-policy.test.ts +60 -31
  547. package/src/__tests__/voice-approval-resolver-relay.test.ts +3 -9
  548. package/src/__tests__/voice-config-update.test.ts +1 -22
  549. package/src/__tests__/voice-guardian-cold-cache-warm.test.ts +8 -17
  550. package/src/__tests__/voice-scoped-grant-consumer.test.ts +1 -10
  551. package/src/__tests__/voice-session-bridge-processing-wait.test.ts +0 -7
  552. package/src/__tests__/voice-session-bridge.test.ts +116 -68
  553. package/src/__tests__/workspace-git-service.test.ts +207 -2
  554. package/src/__tests__/workspace-migration-009-backfill-conversation-disk-view.test.ts +0 -8
  555. package/src/__tests__/workspace-migration-013-repair-conversation-disk-view.test.ts +0 -8
  556. package/src/__tests__/workspace-migration-028-recover-conversations-from-disk-view.test.ts +0 -8
  557. package/src/__tests__/workspace-migration-126-strip-managed-profile-bodies.test.ts +192 -0
  558. package/src/__tests__/workspace-migration-127-backfill-default-provider.test.ts +277 -0
  559. package/src/__tests__/workspace-migration-128-repair-stale-openrouter-grok-model-ids.test.ts +135 -0
  560. package/src/__tests__/workspace-migration-129-remove-analyze-conversation-config.test.ts +190 -0
  561. package/src/__tests__/workspace-tool-loader.test.ts +5 -1
  562. package/src/a2a/__tests__/e2e-a2a-channel.test.ts +1 -10
  563. package/src/a2a/__tests__/task-store.test.ts +0 -9
  564. package/src/acp/__tests__/session-manager-persistence.test.ts +1 -8
  565. package/src/acp/__tests__/session-manager-resume.test.ts +0 -7
  566. package/src/acp/__tests__/session-manager-startup.test.ts +1 -8
  567. package/src/agent/attachments.ts +57 -0
  568. package/src/agent/image-optimize.ts +80 -0
  569. package/src/agent/loop-exclusive-tool.test.ts +28 -5
  570. package/src/agent/loop.ts +25 -63
  571. package/src/api/responses/conversation-message.ts +9 -15
  572. package/src/approvals/guardian-expiry-notifier.ts +6 -0
  573. package/src/approvals/guardian-request-resolvers.ts +42 -21
  574. package/src/background-wake/wake-intent-hooks.test.ts +2 -10
  575. package/src/browser/operation-meta.ts +493 -0
  576. package/src/browser/operations.ts +2 -477
  577. package/src/calls/__tests__/call-setup-router.test.ts +341 -321
  578. package/src/calls/__tests__/channel-admission-reader.test.ts +50 -24
  579. package/src/calls/__tests__/fish-audio-client.test.ts +35 -11
  580. package/src/calls/__tests__/inbound-trust-reader.test.ts +157 -34
  581. package/src/calls/__tests__/tts-text-sanitizer.test.ts +22 -0
  582. package/src/calls/__tests__/voice-session-bridge.test.ts +884 -0
  583. package/src/calls/access-request-wait.ts +3 -1
  584. package/src/calls/audio-store.ts +6 -6
  585. package/src/calls/call-constants.ts +1 -1
  586. package/src/calls/call-controller.ts +242 -64
  587. package/src/calls/call-setup-flow-types.ts +2 -2
  588. package/src/calls/call-setup-flow.ts +19 -57
  589. package/src/calls/call-setup-router.ts +63 -39
  590. package/src/calls/call-speech-output.ts +39 -39
  591. package/src/calls/call-transport.ts +17 -5
  592. package/src/calls/channel-admission-reader.ts +38 -28
  593. package/src/calls/fish-audio-client.ts +24 -52
  594. package/src/calls/gateway-invite-reader.ts +15 -19
  595. package/src/calls/inbound-trust-reader.ts +74 -25
  596. package/src/calls/media-stream-audio-transcode.ts +1 -1
  597. package/src/calls/media-stream-output.ts +482 -64
  598. package/src/calls/media-stream-server.ts +156 -83
  599. package/src/calls/media-stream-stt-session.ts +1 -0
  600. package/src/calls/resolve-call-tts-provider.ts +60 -17
  601. package/src/calls/telephony-tts-capability.ts +13 -13
  602. package/src/calls/tts-text-sanitizer.ts +5 -3
  603. package/src/calls/unresolved-caller-trust.ts +36 -0
  604. package/src/calls/voice-session-bridge.ts +397 -52
  605. package/src/channels/__tests__/gateway-invites.test.ts +257 -0
  606. package/src/channels/gateway-invites.ts +142 -0
  607. package/src/channels/gateway-verification-sessions.ts +4 -8
  608. package/src/cli/AGENTS.md +60 -51
  609. package/src/cli/commands/__tests__/inference-models.test.ts +86 -0
  610. package/src/cli/commands/__tests__/inference-profiles.test.ts +254 -0
  611. package/src/cli/commands/__tests__/inference-providers.test.ts +171 -0
  612. package/src/cli/commands/__tests__/schedules.test.ts +133 -1
  613. package/src/cli/commands/__tests__/usage.test.ts +131 -0
  614. package/src/cli/commands/attachment.help.ts +100 -0
  615. package/src/cli/commands/attachment.ts +92 -157
  616. package/src/cli/commands/audit.help.ts +40 -0
  617. package/src/cli/commands/audit.ts +66 -86
  618. package/src/cli/commands/auth.help.ts +46 -0
  619. package/src/cli/commands/auth.ts +10 -43
  620. package/src/cli/commands/avatar.help.ts +236 -0
  621. package/src/cli/commands/avatar.ts +66 -250
  622. package/src/cli/commands/backup.help.ts +190 -0
  623. package/src/cli/commands/backup.ts +109 -276
  624. package/src/cli/commands/bash.help.ts +45 -0
  625. package/src/cli/commands/bash.ts +55 -75
  626. package/src/cli/commands/browser.help.ts +196 -0
  627. package/src/cli/commands/browser.ts +241 -352
  628. package/src/cli/commands/config.ts +166 -164
  629. package/src/cli/commands/contacts.ts +13 -22
  630. package/src/cli/commands/credentials.ts +38 -28
  631. package/src/cli/commands/db/repair-step-conversation-backfill.ts +19 -10
  632. package/src/cli/commands/db/repair.ts +20 -8
  633. package/src/cli/commands/default-action.ts +8 -3
  634. package/src/cli/commands/domain.ts +36 -22
  635. package/src/cli/commands/email.ts +77 -36
  636. package/src/cli/commands/inference-callsites.ts +158 -0
  637. package/src/cli/commands/inference-models.ts +84 -0
  638. package/src/cli/commands/inference-profiles.ts +371 -0
  639. package/src/cli/commands/inference-providers-default.ts +89 -0
  640. package/src/cli/commands/inference-providers.ts +117 -24
  641. package/src/cli/commands/inference.ts +6 -0
  642. package/src/cli/commands/keys.ts +27 -38
  643. package/src/cli/commands/memory/index.ts +8 -0
  644. package/src/cli/commands/memory/memory-retrospective.ts +7 -5
  645. package/src/cli/commands/memory/memory-v2-compare-render.ts +2 -2
  646. package/src/cli/commands/memory/nodes.ts +301 -0
  647. package/src/cli/commands/oauth/shared.ts +1 -1
  648. package/src/cli/commands/oauth/status.test.ts +6 -6
  649. package/src/cli/commands/oauth/status.ts +12 -6
  650. package/src/cli/commands/oauth/token.ts +1 -26
  651. package/src/cli/commands/plugins.ts +210 -116
  652. package/src/cli/commands/schedules.ts +17 -2
  653. package/src/cli/commands/tools-run.ts +4 -4
  654. package/src/cli/commands/tools.ts +23 -7
  655. package/src/cli/commands/ui.ts +2 -3
  656. package/src/cli/commands/usage.ts +59 -21
  657. package/src/cli/index.help.ts +31 -0
  658. package/src/cli/lib/__tests__/cli-output.test.ts +20 -0
  659. package/src/cli/lib/__tests__/diff-plugin.test.ts +2 -5
  660. package/src/cli/lib/__tests__/inspect-plugin.test.ts +1 -1
  661. package/src/cli/lib/__tests__/install-from-github.test.ts +37 -5
  662. package/src/cli/lib/__tests__/install-from-platform.test.ts +497 -0
  663. package/src/cli/lib/__tests__/list-installed-plugins.test.ts +36 -0
  664. package/src/cli/lib/__tests__/plugin-artifact.test.ts +54 -1
  665. package/src/cli/lib/__tests__/plugin-details.test.ts +137 -1
  666. package/src/cli/lib/__tests__/plugin-icon-file.test.ts +142 -0
  667. package/src/cli/lib/__tests__/plugin-marketplace.test.ts +1 -1
  668. package/src/cli/lib/__tests__/plugin-pin-history.test.ts +1 -1
  669. package/src/cli/lib/__tests__/search-plugins.test.ts +1 -1
  670. package/src/cli/lib/__tests__/uninstall-plugin.test.ts +82 -21
  671. package/src/cli/lib/__tests__/upgrade-plugin.test.ts +1 -1
  672. package/src/cli/lib/cli-command-help.ts +119 -0
  673. package/src/cli/lib/cli-output.ts +55 -0
  674. package/src/cli/lib/diff-plugin.ts +2 -2
  675. package/src/cli/lib/fetch-like.ts +11 -0
  676. package/src/cli/lib/inspect-plugin.ts +2 -2
  677. package/src/cli/lib/install-from-github.ts +61 -15
  678. package/src/cli/lib/install-from-platform.ts +618 -0
  679. package/src/cli/lib/list-installed-plugins.ts +39 -5
  680. package/src/cli/lib/plugin-artifact.ts +30 -0
  681. package/src/cli/lib/plugin-constants.ts +27 -0
  682. package/src/cli/lib/plugin-details.ts +51 -11
  683. package/src/cli/lib/plugin-icon-file.ts +101 -0
  684. package/src/cli/lib/plugin-marketplace.ts +1 -4
  685. package/src/cli/lib/plugin-pin-history.ts +27 -12
  686. package/src/cli/lib/publish-plugin.ts +3 -3
  687. package/src/cli/lib/search-plugins.ts +2 -6
  688. package/src/cli/lib/uninstall-plugin.ts +24 -2
  689. package/src/cli/lib/upgrade-plugin.ts +8 -22
  690. package/src/cli/program.ts +0 -2
  691. package/src/cli.ts +22 -13
  692. package/src/config/__tests__/default-profile-catalog.test.ts +384 -0
  693. package/src/config/__tests__/default-provider.test.ts +245 -0
  694. package/src/config/__tests__/deployment-context-defaults.test.ts +0 -21
  695. package/src/config/__tests__/loader-callsite-strip-fallback.test.ts +0 -21
  696. package/src/config/__tests__/loader-last-known-good.test.ts +208 -0
  697. package/src/config/__tests__/loader-sparse-array-cleanup.test.ts +145 -0
  698. package/src/config/__tests__/profile-materialization.test.ts +297 -0
  699. package/src/config/__tests__/seed-default-provider.test.ts +210 -0
  700. package/src/config/__tests__/sync-gated-profiles.test.ts +27 -34
  701. package/src/config/assistant-feature-flags.ts +1 -1
  702. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +9 -8
  703. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +0 -6
  704. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +2 -2
  705. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +0 -3
  706. package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +0 -3
  707. package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +1 -3
  708. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +0 -4
  709. package/src/config/bundled-skills/schedule/SKILL.md +17 -0
  710. package/src/config/bundled-skills/transcribe/tools/transcribe-media.test.ts +0 -7
  711. package/src/config/call-site-defaults.ts +5 -2
  712. package/src/config/default-profile-catalog.ts +481 -0
  713. package/src/config/default-profile-names.ts +44 -0
  714. package/src/config/default-provider-resolution.ts +33 -0
  715. package/src/config/default-provider.ts +38 -0
  716. package/src/config/env-registry.ts +2 -0
  717. package/src/config/env.ts +0 -6
  718. package/src/config/feature-flag-registry.json +42 -50
  719. package/src/config/inference-profile-validation.ts +5 -4
  720. package/src/config/llm-resolver.ts +447 -24
  721. package/src/config/loader.ts +345 -10
  722. package/src/config/profile-materialization.ts +151 -0
  723. package/src/config/schema.ts +2 -52
  724. package/src/config/schemas/__tests__/live-voice.test.ts +108 -0
  725. package/src/config/schemas/__tests__/llm-request-logs.test.ts +33 -5
  726. package/src/config/schemas/call-site-catalog.ts +0 -6
  727. package/src/config/schemas/calls.ts +9 -0
  728. package/src/config/schemas/conversations.ts +1 -1
  729. package/src/config/schemas/live-voice.ts +77 -0
  730. package/src/config/schemas/llm-request-logs.ts +78 -27
  731. package/src/config/schemas/llm.ts +53 -2
  732. package/src/config/schemas/memory-lifecycle.ts +0 -6
  733. package/src/config/schemas/memory.ts +57 -1
  734. package/src/config/seed-inference-profiles.ts +100 -289
  735. package/src/config/sync-gated-profiles.ts +17 -23
  736. package/src/contacts/canonical-guardian-store.ts +6 -0
  737. package/src/contacts/contact-store.ts +272 -51
  738. package/src/contacts/contacts-write.ts +0 -22
  739. package/src/contacts/guardian-contact-reader.ts +3 -2
  740. package/src/contacts/member-write-relay.ts +2 -19
  741. package/src/contacts/types.ts +2 -1
  742. package/src/context/compactor.ts +230 -38
  743. package/src/context/image-dimensions.ts +25 -3
  744. package/src/context/token-estimator.ts +11 -7
  745. package/src/conversations/__tests__/message-consolidation.test.ts +6 -5
  746. package/src/conversations/job-handlers/summarization.ts +0 -2
  747. package/src/conversations/message-consolidation.ts +34 -112
  748. package/src/credential-execution/executable-discovery.ts +16 -144
  749. package/src/credential-execution/process-manager.test.ts +1 -112
  750. package/src/credential-execution/process-manager.ts +13 -379
  751. package/src/credential-execution/prompted-credential.ts +1 -1
  752. package/src/daemon/__tests__/conversation-surfaces-launch.test.ts +1 -1
  753. package/src/daemon/__tests__/inference-profile-notification.test.ts +0 -8
  754. package/src/daemon/__tests__/inflight-message-content.test.ts +219 -0
  755. package/src/daemon/__tests__/native-web-search-metadata.test.ts +0 -8
  756. package/src/daemon/__tests__/wake-conversation-ops-completion.test.ts +0 -6
  757. package/src/daemon/__tests__/web-search-status-text.test.ts +0 -8
  758. package/src/daemon/approval-generators.ts +17 -11
  759. package/src/daemon/assistant-attachments.ts +86 -87
  760. package/src/daemon/config-watcher.ts +67 -21
  761. package/src/daemon/conversation-agent-loop-handlers.ts +146 -50
  762. package/src/daemon/conversation-agent-loop.ts +136 -34
  763. package/src/daemon/conversation-error.ts +291 -109
  764. package/src/daemon/conversation-history.ts +6 -12
  765. package/src/daemon/conversation-initial-prompt.ts +1 -1
  766. package/src/daemon/conversation-launch.ts +1 -1
  767. package/src/daemon/conversation-lifecycle.ts +5 -22
  768. package/src/daemon/conversation-media-retry.ts +3 -2
  769. package/src/daemon/conversation-messaging.ts +296 -66
  770. package/src/daemon/conversation-notifiers.ts +1 -1
  771. package/src/daemon/conversation-process.ts +162 -12
  772. package/src/daemon/conversation-queue-manager.ts +12 -0
  773. package/src/daemon/conversation-runtime-assembly.ts +197 -53
  774. package/src/daemon/conversation-skill-tools.ts +27 -9
  775. package/src/daemon/conversation-slash.ts +2 -4
  776. package/src/daemon/conversation-store.ts +11 -13
  777. package/src/daemon/conversation-surfaces.ts +145 -176
  778. package/src/daemon/conversation-tool-setup.ts +18 -12
  779. package/src/daemon/conversation-turn-finalize.ts +18 -1
  780. package/src/daemon/conversation.ts +265 -85
  781. package/src/daemon/disk-pressure-policy.ts +1 -1
  782. package/src/daemon/event-loop-watchdog.test.ts +1 -6
  783. package/src/daemon/event-loop-watchdog.ts +2 -20
  784. package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +0 -7
  785. package/src/daemon/handlers/__tests__/config-a2a-complete.test.ts +1 -8
  786. package/src/daemon/handlers/__tests__/config-a2a-invite.test.ts +1 -8
  787. package/src/daemon/handlers/__tests__/config-a2a-redeem.test.ts +1 -8
  788. package/src/daemon/handlers/__tests__/config-a2a.test.ts +1 -8
  789. package/src/daemon/handlers/config-a2a.ts +0 -3
  790. package/src/daemon/handlers/conversation-history.ts +6 -4
  791. package/src/daemon/handlers/shared.ts +224 -79
  792. package/src/daemon/handlers/skills.ts +8 -0
  793. package/src/daemon/inflight-message-content.ts +228 -0
  794. package/src/daemon/interrupted-turn-reconciler.ts +134 -0
  795. package/src/daemon/lifecycle.ts +120 -64
  796. package/src/daemon/main.ts +1 -5
  797. package/src/daemon/message-types/conversations.ts +2 -0
  798. package/src/daemon/message-types/host-bash.ts +1 -1
  799. package/src/daemon/message-types/skills.ts +6 -0
  800. package/src/daemon/message-types/sync.ts +1 -0
  801. package/src/daemon/orphan-reaper.test.ts +1 -6
  802. package/src/daemon/persist-media-references.ts +151 -0
  803. package/src/daemon/pointer-conversation-trust.ts +2 -4
  804. package/src/daemon/process-message.ts +82 -8
  805. package/src/daemon/providers-setup.ts +1 -4
  806. package/src/daemon/shutdown-handlers.ts +0 -4
  807. package/src/daemon/sqlite-corruption-watchdog.test.ts +0 -13
  808. package/src/daemon/sqlite-corruption-watchdog.ts +2 -15
  809. package/src/daemon/summarize-boundary.ts +62 -0
  810. package/src/daemon/tool-setup-types.ts +1 -1
  811. package/src/daemon/trust-context-types.ts +61 -0
  812. package/src/daemon/trust-context.ts +5 -55
  813. package/src/daemon/wake-conversation-ops.ts +4 -1
  814. package/src/documents/document-comments-store.test.ts +1 -7
  815. package/src/export/__tests__/transcript-formatter.test.ts +13 -8
  816. package/src/export/formatter.ts +8 -17
  817. package/src/export/transcript-formatter.ts +13 -40
  818. package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +0 -9
  819. package/src/heartbeat/__tests__/heartbeat-service.test.ts +0 -2
  820. package/src/home/__tests__/home-content-refresh.test.ts +0 -7
  821. package/src/home/__tests__/suggested-prompts.test.ts +4 -12
  822. package/src/home/conversation-starter-checkpoints.ts +9 -5
  823. package/src/home/job-handlers/conversation-starters.ts +24 -54
  824. package/src/home/suggested-prompts-cache.ts +91 -0
  825. package/src/home/suggested-prompts.ts +4 -77
  826. package/src/hooks/__tests__/hook-live-reload.test.ts +62 -48
  827. package/src/hooks/hook-loader.ts +215 -194
  828. package/src/hooks/types.ts +2 -2
  829. package/src/ipc/__tests__/contacts-info-ipc.test.ts +66 -11
  830. package/src/ipc/assistant-server.ts +14 -34
  831. package/src/ipc/gateway-flag-listener.ts +14 -25
  832. package/src/ipc/gateway-validated-call.ts +32 -0
  833. package/src/ipc/routes/__tests__/contacts-mirror-ipc-routes.test.ts +149 -17
  834. package/src/ipc/routes/__tests__/contacts-mirror-merge-contact.test.ts +197 -0
  835. package/src/ipc/routes/__tests__/contacts-mirror-upsert-full.test.ts +368 -0
  836. package/src/ipc/routes/__tests__/guardian-label-ipc-routes.test.ts +74 -0
  837. package/src/ipc/routes/__tests__/invite-ipc-routes.test.ts +0 -7
  838. package/src/ipc/routes/__tests__/memory-v2-backfill.test.ts +5 -7
  839. package/src/ipc/routes/contacts-info-ipc-routes.ts +5 -2
  840. package/src/ipc/routes/contacts-mirror-ipc-routes.ts +78 -1
  841. package/src/ipc/routes/db-proxy.ts +9 -15
  842. package/src/ipc/routes/guardian-label-ipc-routes.ts +42 -0
  843. package/src/live-voice/__tests__/live-voice-archive.test.ts +1 -8
  844. package/src/live-voice/__tests__/live-voice-credential-preflight.test.ts +275 -0
  845. package/src/live-voice/__tests__/live-voice-integration.test.ts +124 -0
  846. package/src/live-voice/__tests__/live-voice-metrics.test.ts +67 -0
  847. package/src/live-voice/__tests__/live-voice-session-preflight.test.ts +156 -0
  848. package/src/live-voice/__tests__/live-voice-stt.test.ts +464 -19
  849. package/src/live-voice/__tests__/live-voice-tts-session.test.ts +350 -4
  850. package/src/live-voice/__tests__/live-voice-tts.test.ts +186 -10
  851. package/src/live-voice/__tests__/live-voice-vad.test.ts +372 -10
  852. package/src/live-voice/__tests__/protocol.test.ts +2 -0
  853. package/src/live-voice/__tests__/runtime-websocket-shell.test.ts +61 -9
  854. package/src/live-voice/live-voice-credential-preflight.ts +205 -0
  855. package/src/live-voice/live-voice-metrics.ts +44 -0
  856. package/src/live-voice/live-voice-session-manager.ts +19 -0
  857. package/src/live-voice/live-voice-session.ts +1015 -276
  858. package/src/live-voice/live-voice-tts.ts +50 -4
  859. package/src/live-voice/protocol.ts +8 -0
  860. package/src/mcp/__tests__/mcp-auth-orchestrator.test.ts +3 -7
  861. package/src/messaging/channel-binding-schema.ts +15 -7
  862. package/src/messaging/providers/a2a/__tests__/deliver.test.ts +0 -9
  863. package/src/messaging/providers/slack/__tests__/download.test.ts +1 -8
  864. package/src/messaging/providers/slack/binding-metadata.test.ts +63 -0
  865. package/src/messaging/providers/slack/binding-metadata.ts +6 -0
  866. package/src/messaging/providers/slack/conversation-utils.ts +7 -4
  867. package/src/messaging/providers/slack/send.test.ts +0 -7
  868. package/src/messaging/providers/slack/types.ts +2 -0
  869. package/src/messaging/providers/slack/withdraw.test.ts +0 -6
  870. package/src/messaging/providers/telegram-bot/send.test.ts +0 -7
  871. package/src/monitoring/__tests__/resource-sampler.test.ts +2 -4
  872. package/src/monitoring/__tests__/stall-capture.test.ts +1 -1
  873. package/src/monitoring/process-memory.ts +6 -1
  874. package/src/monitoring/resource-sample-types.ts +71 -0
  875. package/src/monitoring/resource-sampler.ts +7 -69
  876. package/src/monitoring/stall-capture.ts +1 -1
  877. package/src/notifications/__tests__/broadcaster.test.ts +100 -9
  878. package/src/notifications/__tests__/connected-channels.test.ts +11 -8
  879. package/src/notifications/__tests__/decision-engine.test.ts +0 -7
  880. package/src/notifications/__tests__/destination-resolver.test.ts +18 -12
  881. package/src/notifications/__tests__/deterministic-checks.test.ts +1 -9
  882. package/src/notifications/access-request-copy.ts +33 -1
  883. package/src/notifications/adapters/slack.ts +7 -2
  884. package/src/notifications/approval-card-data.ts +4 -2
  885. package/src/notifications/broadcaster.ts +118 -67
  886. package/src/notifications/copy-composer.ts +6 -2
  887. package/src/notifications/emit-signal.ts +23 -1
  888. package/src/notifications/signal.ts +5 -4
  889. package/src/notifications/types.ts +1 -1
  890. package/src/notifications/urgency.ts +5 -0
  891. package/src/oauth/byo-connection.test.ts +1 -10
  892. package/src/oauth/connect-orchestrator.ts +1 -1
  893. package/src/oauth/connection-resolver.test.ts +140 -7
  894. package/src/oauth/connection-resolver.ts +48 -12
  895. package/src/oauth/oauth-store.ts +4 -11
  896. package/src/onboarding/__tests__/onboarding-events-store.test.ts +0 -8
  897. package/src/permissions/approval-policy.test.ts +0 -314
  898. package/src/permissions/approval-policy.ts +38 -90
  899. package/src/permissions/checker.test.ts +3 -14
  900. package/src/permissions/checker.ts +95 -19
  901. package/src/permissions/confirmation-canonical-request.ts +118 -0
  902. package/src/permissions/gateway-threshold-reader.test.ts +0 -8
  903. package/src/permissions/ipc-risk-types.ts +2 -0
  904. package/src/permissions/prompter.ts +16 -3
  905. package/src/permissions/secret-prompt-types.ts +34 -0
  906. package/src/permissions/secret-prompter.ts +21 -19
  907. package/src/permissions/types.ts +0 -14
  908. package/src/persistence/__tests__/bulk-write-gate.test.ts +159 -0
  909. package/src/persistence/__tests__/conversation-queries-search.test.ts +0 -7
  910. package/src/persistence/__tests__/immediate-transaction-guard.test.ts +70 -0
  911. package/src/persistence/__tests__/message-content-file.test.ts +259 -0
  912. package/src/persistence/__tests__/slow-query-log.test.ts +125 -0
  913. package/src/persistence/attachments-store.ts +90 -26
  914. package/src/persistence/auto-analysis-constants.ts +4 -13
  915. package/src/persistence/bulk-write-gate.ts +82 -0
  916. package/src/persistence/cleanup-schedule-state.ts +51 -21
  917. package/src/persistence/conversation-bootstrap.ts +3 -3
  918. package/src/persistence/conversation-crud.ts +382 -105
  919. package/src/persistence/conversation-disk-view.ts +32 -15
  920. package/src/persistence/conversation-group-migration.test.ts +1 -8
  921. package/src/persistence/conversation-key-store.ts +0 -2
  922. package/src/persistence/conversation-plugin-facade.ts +190 -0
  923. package/src/persistence/conversation-row-batch-delete.ts +16 -1
  924. package/src/persistence/conversation-title-service.ts +59 -22
  925. package/src/persistence/conversation-types.ts +19 -4
  926. package/src/persistence/db-async-query.ts +18 -9
  927. package/src/persistence/db-connection.ts +20 -4
  928. package/src/persistence/db-init.ts +16 -173
  929. package/src/persistence/db-maintenance.ts +78 -6
  930. package/src/persistence/embeddings/__tests__/messages-lexical-index.test.ts +0 -7
  931. package/src/persistence/embeddings/plugin-facade.ts +37 -0
  932. package/src/persistence/embeddings/qdrant-client.ts +2 -18
  933. package/src/persistence/fork-message-copy.ts +18 -4
  934. package/src/persistence/job-handlers/__tests__/message-lexical-backfill.test.ts +0 -7
  935. package/src/persistence/job-handlers/__tests__/message-lexical-enqueue.test.ts +0 -6
  936. package/src/persistence/job-handlers/__tests__/message-lexical.test.ts +0 -7
  937. package/src/persistence/job-handlers/message-lexical-backfill.ts +8 -5
  938. package/src/persistence/job-handlers/message-lexical.ts +2 -2
  939. package/src/persistence/jobs-store.ts +48 -85
  940. package/src/persistence/llm-request-log-sink-clickhouse.ts +325 -0
  941. package/src/persistence/llm-request-log-store.ts +213 -100
  942. package/src/persistence/llm-request-log-writer-types.ts +80 -0
  943. package/src/persistence/message-content-file.ts +301 -0
  944. package/src/persistence/message-content.ts +33 -72
  945. package/src/persistence/migrations/321-canonical-guardian-request-trigger.ts +27 -0
  946. package/src/persistence/migrations/322-add-processing-resume-attempts.ts +31 -0
  947. package/src/persistence/migrations/323-delete-non-default-memory-scopes.test.ts +148 -0
  948. package/src/persistence/migrations/323-delete-non-default-memory-scopes.ts +35 -0
  949. package/src/persistence/migrations/324-message-finalized-column.ts +26 -0
  950. package/src/persistence/migrations/325-create-config-setting-events.ts +40 -0
  951. package/src/persistence/migrations/326-move-injection-events-to-memory-db.ts +104 -0
  952. package/src/persistence/migrations/327-create-flush-checkpoints.ts +86 -0
  953. package/src/persistence/migrations/__tests__/297-move-llm-request-logs.test.ts +2 -2
  954. package/src/persistence/migrations/__tests__/327-create-flush-checkpoints.test.ts +124 -0
  955. package/src/persistence/schema/conversations.ts +25 -1
  956. package/src/persistence/schema/guardian.ts +5 -0
  957. package/src/persistence/schema/infrastructure.ts +33 -0
  958. package/src/persistence/schema/memory-core.ts +17 -28
  959. package/src/persistence/schema/memory-graph.ts +0 -4
  960. package/src/persistence/schema/memory-injection.ts +3 -1
  961. package/src/persistence/schema/tasks.ts +0 -1
  962. package/src/persistence/slow-query-log.ts +58 -21
  963. package/src/persistence/steps.ts +14 -0
  964. package/src/platform/consent-cache.test.ts +0 -7
  965. package/src/platform/managed-speech.test.ts +218 -0
  966. package/src/platform/managed-speech.ts +195 -0
  967. package/src/playbooks/playbook-compiler.ts +2 -10
  968. package/src/plugin-api/index.ts +79 -0
  969. package/src/plugin-api/model-profiles.test.ts +31 -3
  970. package/src/plugin-api/model-profiles.ts +3 -1
  971. package/src/plugin-api/types.ts +12 -3
  972. package/src/plugin-api/vision-support.ts +4 -3
  973. package/src/plugins/AGENTS.md +19 -0
  974. package/src/plugins/__tests__/plugin-state-boundary-guard.test.ts +65 -0
  975. package/src/plugins/defaults/compaction/compact.ts +13 -0
  976. package/src/plugins/defaults/compaction/window-manager.ts +207 -43
  977. package/src/plugins/defaults/image-fallback/__tests__/caption-cache-persistence.test.ts +216 -0
  978. package/src/plugins/defaults/image-fallback/__tests__/image-fallback.test.ts +281 -2
  979. package/src/plugins/defaults/image-fallback/__tests__/vision-recovery.test.ts +268 -0
  980. package/src/plugins/defaults/image-fallback/hooks/conversation-deleted.ts +27 -0
  981. package/src/plugins/defaults/image-fallback/hooks/init.ts +16 -0
  982. package/src/plugins/defaults/image-fallback/hooks/post-compact.ts +52 -0
  983. package/src/plugins/defaults/image-fallback/hooks/post-model-call.ts +80 -0
  984. package/src/plugins/defaults/image-fallback/hooks/post-tool-use.ts +7 -4
  985. package/src/plugins/defaults/image-fallback/hooks/shutdown.ts +14 -0
  986. package/src/plugins/defaults/image-fallback/hooks/stop.ts +23 -0
  987. package/src/plugins/defaults/image-fallback/hooks/user-prompt-submit.ts +12 -12
  988. package/src/plugins/defaults/image-fallback/src/caption-blocks.ts +73 -15
  989. package/src/plugins/defaults/image-fallback/src/caption-cache.ts +206 -20
  990. package/src/plugins/defaults/image-fallback/src/recovery-state.ts +49 -0
  991. package/src/plugins/defaults/image-fallback/src/vision-caption.ts +11 -3
  992. package/src/plugins/defaults/image-fallback/src/vision-error.ts +19 -0
  993. package/src/plugins/defaults/image-recovery/detect.ts +32 -10
  994. package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +20 -18
  995. package/src/plugins/defaults/image-recovery/recover.ts +97 -61
  996. package/src/plugins/defaults/index.ts +29 -5
  997. package/src/plugins/defaults/injector-order.ts +1 -0
  998. package/src/plugins/defaults/memory/__tests__/activation-session-store.test.ts +1 -8
  999. package/src/plugins/defaults/memory/__tests__/clear-stale-processing-flags.test.ts +1 -8
  1000. package/src/plugins/defaults/memory/__tests__/conversation-queries.test.ts +1 -8
  1001. package/src/plugins/defaults/memory/__tests__/conversation-row-batch-delete.test.ts +0 -6
  1002. package/src/plugins/defaults/memory/__tests__/db-maintenance.test.ts +105 -11
  1003. package/src/plugins/defaults/memory/__tests__/db-memory-attach.test.ts +22 -18
  1004. package/src/plugins/defaults/memory/__tests__/embedding-cache.test.ts +0 -6
  1005. package/src/plugins/defaults/memory/__tests__/find-most-recent-retrospective-for.test.ts +1 -8
  1006. package/src/plugins/defaults/memory/__tests__/fork-message-copy.test.ts +0 -6
  1007. package/src/plugins/defaults/memory/__tests__/jobs-store-enqueue-gate.test.ts +7 -70
  1008. package/src/plugins/defaults/memory/__tests__/jobs-worker-memory-disabled.test.ts +0 -7
  1009. package/src/plugins/defaults/memory/__tests__/jobs-worker-pkb-schedule.test.ts +7 -0
  1010. package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-graph-trigger-embed.test.ts +0 -5
  1011. package/src/plugins/defaults/memory/__tests__/jobs-worker-v2-schedule.test.ts +7 -0
  1012. package/src/plugins/defaults/memory/__tests__/memory-retrospective-enqueue.test.ts +0 -7
  1013. package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +186 -19
  1014. package/src/plugins/defaults/memory/__tests__/memory-retrospective-skill-card.test.ts +926 -0
  1015. package/src/plugins/defaults/memory/__tests__/memory-retrospective-startup-cleanup.test.ts +136 -82
  1016. package/src/plugins/defaults/memory/__tests__/memory-retrospective-state.test.ts +0 -6
  1017. package/src/plugins/defaults/memory/__tests__/memory-retrospective-trigger-check.test.ts +217 -2
  1018. package/src/plugins/defaults/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -7
  1019. package/src/plugins/defaults/memory/__tests__/memory-v2-concept-frequency.test.ts +0 -7
  1020. package/src/plugins/defaults/memory/__tests__/table-relocation.test.ts +49 -0
  1021. package/src/plugins/defaults/memory/activation-session-store.ts +1 -1
  1022. package/src/plugins/defaults/memory/anisotropy.ts +1 -1
  1023. package/src/plugins/defaults/memory/config.ts +155 -6
  1024. package/src/plugins/defaults/memory/context-search/agent-protocol.ts +1 -1
  1025. package/src/plugins/defaults/memory/context-search/search.ts +1 -1
  1026. package/src/plugins/defaults/memory/context-search/sources/conversations.ts +26 -23
  1027. package/src/plugins/defaults/memory/context-search/sources/memory-v2.ts +1 -1
  1028. package/src/plugins/defaults/memory/context-search/sources/memory.ts +1 -1
  1029. package/src/plugins/defaults/memory/embeddings.ts +8 -40
  1030. package/src/plugins/defaults/memory/filing-jobs.ts +1 -1
  1031. package/src/plugins/defaults/memory/fork-conversation-memory.ts +8 -4
  1032. package/src/plugins/defaults/memory/frontmatter.ts +1 -1
  1033. package/src/plugins/defaults/memory/graph/__tests__/handle-remember-v2.test.ts +4 -25
  1034. package/src/plugins/defaults/memory/graph/bootstrap.ts +13 -19
  1035. package/src/plugins/defaults/memory/graph/capability-seed.ts +62 -33
  1036. package/src/plugins/defaults/memory/graph/consolidation.ts +8 -15
  1037. package/src/plugins/defaults/memory/graph/conversation-graph-memory.ts +12 -4
  1038. package/src/plugins/defaults/memory/graph/decay.ts +5 -10
  1039. package/src/plugins/defaults/memory/graph/extraction-job.ts +2 -3
  1040. package/src/plugins/defaults/memory/graph/extraction.test.ts +1 -9
  1041. package/src/plugins/defaults/memory/graph/extraction.ts +149 -64
  1042. package/src/plugins/defaults/memory/graph/graph-search.test.ts +0 -6
  1043. package/src/plugins/defaults/memory/graph/graph-search.ts +33 -15
  1044. package/src/plugins/defaults/memory/graph/image-ref-utils.ts +7 -3
  1045. package/src/plugins/defaults/memory/graph/injection.test.ts +0 -1
  1046. package/src/plugins/defaults/memory/graph/injection.ts +1 -1
  1047. package/src/plugins/defaults/memory/graph/narrative.ts +2 -4
  1048. package/src/plugins/defaults/memory/graph/pattern-scan.ts +2 -5
  1049. package/src/plugins/defaults/memory/graph/retriever.test.ts +27 -28
  1050. package/src/plugins/defaults/memory/graph/retriever.ts +89 -42
  1051. package/src/plugins/defaults/memory/graph/scoring.test.ts +0 -1
  1052. package/src/plugins/defaults/memory/graph/store.test.ts +6 -58
  1053. package/src/plugins/defaults/memory/graph/store.ts +5 -43
  1054. package/src/plugins/defaults/memory/graph/tool-handlers.test.ts +318 -0
  1055. package/src/plugins/defaults/memory/graph/tool-handlers.ts +244 -8
  1056. package/src/plugins/defaults/memory/graph/tools.ts +1 -1
  1057. package/src/plugins/defaults/memory/graph/types.ts +0 -3
  1058. package/src/plugins/defaults/memory/graph-topology/__tests__/build-memory-graph.test.ts +130 -0
  1059. package/src/plugins/defaults/memory/graph-topology/build-memory-graph.ts +303 -0
  1060. package/src/plugins/defaults/memory/graph-topology/flag.ts +14 -0
  1061. package/src/plugins/defaults/memory/graph-topology/types.ts +84 -0
  1062. package/src/plugins/defaults/memory/hooks/init.ts +1 -1
  1063. package/src/plugins/defaults/memory/hooks/user-prompt-submit.ts +10 -10
  1064. package/src/plugins/defaults/memory/host-utils.ts +80 -0
  1065. package/src/plugins/defaults/memory/identity-context.ts +39 -0
  1066. package/src/plugins/defaults/memory/indexer.ts +18 -54
  1067. package/src/plugins/defaults/memory/injectors.ts +5 -8
  1068. package/src/plugins/defaults/memory/job-handler-registration.ts +0 -4
  1069. package/src/plugins/defaults/memory/job-handlers/backfill.ts +10 -8
  1070. package/src/plugins/defaults/memory/job-handlers/embedding.test.ts +0 -8
  1071. package/src/plugins/defaults/memory/job-handlers/embedding.ts +31 -17
  1072. package/src/plugins/defaults/memory/job-handlers/index-maintenance.ts +13 -6
  1073. package/src/plugins/defaults/memory/job-handlers.ts +10 -9
  1074. package/src/plugins/defaults/memory/jobs/__tests__/embed-concept-page.test.ts +0 -7
  1075. package/src/plugins/defaults/memory/jobs/embed-concept-page.ts +3 -3
  1076. package/src/plugins/defaults/memory/jobs/embed-pkb-file.test.ts +41 -28
  1077. package/src/plugins/defaults/memory/jobs/embed-pkb-file.ts +10 -5
  1078. package/src/plugins/defaults/memory/jobs-worker.ts +161 -50
  1079. package/src/plugins/defaults/memory/logging.ts +17 -0
  1080. package/src/plugins/defaults/memory/memory-retrospective-accounting.ts +143 -0
  1081. package/src/plugins/defaults/memory/memory-retrospective-constants.ts +19 -7
  1082. package/src/plugins/defaults/memory/memory-retrospective-enqueue.ts +5 -6
  1083. package/src/plugins/defaults/memory/memory-retrospective-fork-boundary.ts +57 -20
  1084. package/src/plugins/defaults/memory/memory-retrospective-job.ts +220 -79
  1085. package/src/plugins/defaults/memory/memory-retrospective-skill-card.ts +448 -0
  1086. package/src/plugins/defaults/memory/memory-retrospective-startup-cleanup.ts +52 -39
  1087. package/src/plugins/defaults/memory/memory-retrospective-state.ts +14 -10
  1088. package/src/plugins/defaults/memory/memory-retrospective-trigger-check.ts +8 -3
  1089. package/src/plugins/defaults/memory/message-media.ts +80 -0
  1090. package/src/plugins/defaults/memory/paths.ts +48 -0
  1091. package/src/plugins/defaults/memory/pkb/autoinject.ts +1 -1
  1092. package/src/plugins/defaults/memory/pkb/context.ts +2 -2
  1093. package/src/plugins/defaults/memory/pkb/pkb-index.test.ts +25 -44
  1094. package/src/plugins/defaults/memory/pkb/pkb-index.ts +24 -25
  1095. package/src/plugins/defaults/memory/pkb/pkb-reconcile.test.ts +46 -34
  1096. package/src/plugins/defaults/memory/pkb/pkb-reconcile.ts +4 -9
  1097. package/src/plugins/defaults/memory/pkb/pkb-search.test.ts +5 -17
  1098. package/src/plugins/defaults/memory/pkb/pkb-search.ts +2 -9
  1099. package/src/plugins/defaults/memory/pkb/types.ts +1 -12
  1100. package/src/plugins/defaults/memory/pkb-schedule.ts +2 -2
  1101. package/src/plugins/defaults/memory/rerank-local.ts +3 -4
  1102. package/src/plugins/defaults/memory/routes/__tests__/memory-v2-simulate-route.test.ts +9 -17
  1103. package/src/plugins/defaults/memory/routes/memory-eval-routes.ts +2 -2
  1104. package/src/plugins/defaults/memory/routes/memory-graph-routes.ts +71 -0
  1105. package/src/plugins/defaults/memory/routes/memory-item-routes.test.ts +149 -9
  1106. package/src/plugins/defaults/memory/routes/memory-item-routes.ts +147 -12
  1107. package/src/plugins/defaults/memory/routes/memory-v2-routes.ts +7 -11
  1108. package/src/plugins/defaults/memory/routes/memory-v3-routes.ts +1 -1
  1109. package/src/plugins/defaults/memory/startup.ts +3 -4
  1110. package/src/plugins/defaults/memory/task-memory-cleanup.ts +1 -1
  1111. package/src/plugins/defaults/memory/tools.test.ts +1 -9
  1112. package/src/plugins/defaults/memory/tools.ts +0 -1
  1113. package/src/plugins/defaults/memory/v2/__tests__/activation.test.ts +0 -5
  1114. package/src/plugins/defaults/memory/v2/__tests__/backfill-jobs.test.ts +0 -6
  1115. package/src/plugins/defaults/memory/v2/__tests__/cli-command-store.test.ts +6 -6
  1116. package/src/plugins/defaults/memory/v2/__tests__/consolidation-job.test.ts +48 -6
  1117. package/src/plugins/defaults/memory/v2/__tests__/harness-compare.test.ts +0 -5
  1118. package/src/plugins/defaults/memory/v2/__tests__/harness-oracle.test.ts +0 -5
  1119. package/src/plugins/defaults/memory/v2/__tests__/harness-replay-input.test.ts +0 -5
  1120. package/src/plugins/defaults/memory/v2/__tests__/injection-events.test.ts +61 -69
  1121. package/src/plugins/defaults/memory/v2/__tests__/injection.test.ts +0 -5
  1122. package/src/plugins/defaults/memory/v2/__tests__/migration.test.ts +0 -6
  1123. package/src/plugins/defaults/memory/v2/__tests__/page-index.test.ts +0 -5
  1124. package/src/plugins/defaults/memory/v2/__tests__/prompts-consolidation.test.ts +28 -0
  1125. package/src/plugins/defaults/memory/v2/__tests__/qdrant.test.ts +3 -6
  1126. package/src/plugins/defaults/memory/v2/__tests__/reranker.test.ts +3 -5
  1127. package/src/plugins/defaults/memory/v2/__tests__/router.test.ts +16 -27
  1128. package/src/plugins/defaults/memory/v2/__tests__/sim.test.ts +0 -5
  1129. package/src/plugins/defaults/memory/v2/__tests__/skill-content.test.ts +1 -1
  1130. package/src/plugins/defaults/memory/v2/__tests__/skill-store.test.ts +56 -22
  1131. package/src/plugins/defaults/memory/v2/__tests__/static-context.test.ts +9 -6
  1132. package/src/plugins/defaults/memory/v2/__tests__/sweep-job.test.ts +6 -6
  1133. package/src/plugins/defaults/memory/v2/backfill-jobs.ts +31 -16
  1134. package/src/plugins/defaults/memory/v2/cli-command-content.ts +78 -0
  1135. package/src/plugins/defaults/memory/v2/cli-command-store.ts +32 -11
  1136. package/src/plugins/defaults/memory/v2/consolidation-job.ts +45 -5
  1137. package/src/plugins/defaults/memory/v2/frontmatter-sweep.ts +1 -1
  1138. package/src/plugins/defaults/memory/v2/harness/harness-types.ts +12 -0
  1139. package/src/plugins/defaults/memory/v2/harness/retriever.ts +1 -8
  1140. package/src/plugins/defaults/memory/v2/harness/router-retriever.ts +1 -8
  1141. package/src/plugins/defaults/memory/v2/harness/trace.ts +1 -1
  1142. package/src/plugins/defaults/memory/v2/injection-events.ts +34 -15
  1143. package/src/plugins/defaults/memory/v2/injection.ts +3 -4
  1144. package/src/plugins/defaults/memory/v2/memory-v2-startup.test.ts +0 -5
  1145. package/src/plugins/defaults/memory/v2/memory-v2-startup.ts +2 -2
  1146. package/src/plugins/defaults/memory/v2/migration.ts +1 -1
  1147. package/src/plugins/defaults/memory/v2/page-index.ts +1 -1
  1148. package/src/plugins/defaults/memory/v2/prompts/consolidation.ts +6 -2
  1149. package/src/plugins/defaults/memory/v2/prompts/router.ts +1 -1
  1150. package/src/plugins/defaults/memory/v2/qdrant.ts +2 -2
  1151. package/src/plugins/defaults/memory/v2/reranker.ts +2 -2
  1152. package/src/plugins/defaults/memory/v2/router.ts +10 -20
  1153. package/src/plugins/defaults/memory/v2/skill-content.ts +23 -4
  1154. package/src/plugins/defaults/memory/v2/skill-store.ts +44 -43
  1155. package/src/plugins/defaults/memory/v2/static-context.ts +7 -12
  1156. package/src/plugins/defaults/memory/v2/sweep-job.ts +24 -13
  1157. package/src/plugins/defaults/memory/v3/__tests__/carry-integration.test.ts +19 -0
  1158. package/src/plugins/defaults/memory/v3/__tests__/dense.test.ts +0 -5
  1159. package/src/plugins/defaults/memory/v3/__tests__/injection.test.ts +17 -0
  1160. package/src/plugins/defaults/memory/v3/__tests__/live-integration.test.ts +14 -4
  1161. package/src/plugins/defaults/memory/v3/__tests__/maintain-job.test.ts +23 -17
  1162. package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +20 -6
  1163. package/src/plugins/defaults/memory/v3/__tests__/pool-select.test.ts +2 -0
  1164. package/src/plugins/defaults/memory/v3/__tests__/section-dense-store.test.ts +0 -5
  1165. package/src/plugins/defaults/memory/v3/candidate-match.ts +20 -11
  1166. package/src/plugins/defaults/memory/v3/dense.ts +1 -1
  1167. package/src/plugins/defaults/memory/v3/injector.ts +1 -1
  1168. package/src/plugins/defaults/memory/v3/learned-edges.test.ts +14 -0
  1169. package/src/plugins/defaults/memory/v3/learned-edges.ts +6 -1
  1170. package/src/plugins/defaults/memory/v3/maintain-job.ts +39 -31
  1171. package/src/plugins/defaults/memory/v3/orchestrate.ts +1 -1
  1172. package/src/plugins/defaults/memory/v3/page-content.ts +1 -1
  1173. package/src/plugins/defaults/memory/v3/pool-select.ts +2 -3
  1174. package/src/plugins/defaults/memory/v3/prune.test.ts +10 -0
  1175. package/src/plugins/defaults/memory/v3/prune.ts +1 -1
  1176. package/src/plugins/defaults/memory/v3/section-dense-store.ts +1 -1
  1177. package/src/plugins/defaults/memory/v3/selection-log-store.ts +1 -1
  1178. package/src/plugins/defaults/memory/v3/shadow-plugin.ts +47 -25
  1179. package/src/plugins/defaults/memory/v3-eval/eval-packets.ts +31 -11
  1180. package/src/plugins/defaults/memory/worker.ts +2 -2
  1181. package/src/plugins/defaults/workspace/injectors.ts +116 -5
  1182. package/src/plugins/mtime-cache.ts +207 -105
  1183. package/src/plugins/pipeline.ts +195 -5
  1184. package/src/plugins/surface-import.ts +52 -14
  1185. package/src/plugins/types.ts +10 -15
  1186. package/src/prompts/persona-resolver.ts +1 -1
  1187. package/src/prompts/system-prompt.ts +2 -4
  1188. package/src/prompts/templates/system-sections.ts +12 -0
  1189. package/src/providers/__tests__/connection-model-compat.test.ts +0 -5
  1190. package/src/providers/__tests__/count-tokens-forwarding.test.ts +1 -21
  1191. package/src/providers/__tests__/dispatch-connection-routing.test.ts +12 -6
  1192. package/src/providers/__tests__/preflight-resolved-config.test.ts +189 -0
  1193. package/src/providers/__tests__/registry-native-web-search.test.ts +21 -3
  1194. package/src/providers/__tests__/retry-callsite.test.ts +207 -8
  1195. package/src/providers/__tests__/satellite-connection-routing.test.ts +12 -6
  1196. package/src/providers/__tests__/vellum-mismatch-routing.test.ts +0 -5
  1197. package/src/providers/anthropic/client.ts +109 -7
  1198. package/src/providers/anthropic-gateway-shared.ts +63 -0
  1199. package/src/providers/call-site-routing.ts +1 -0
  1200. package/src/providers/connection-resolution.ts +192 -6
  1201. package/src/providers/content-block-schema.ts +149 -0
  1202. package/src/providers/gemini/client.ts +84 -22
  1203. package/src/providers/gemini/inline-media.ts +2 -3
  1204. package/src/providers/inference/__tests__/base-url-route-validation.test.ts +5 -0
  1205. package/src/providers/inference/__tests__/codex-token-refresh.test.ts +1 -15
  1206. package/src/providers/inference/adapter-factory.ts +13 -0
  1207. package/src/providers/inference/connection-availability.ts +193 -0
  1208. package/src/providers/inference/connections.ts +6 -10
  1209. package/src/providers/media-resolve.ts +193 -0
  1210. package/src/providers/model-catalog.ts +337 -17
  1211. package/src/providers/model-intents.ts +6 -0
  1212. package/src/providers/openai/__tests__/api-error-normalization.test.ts +98 -0
  1213. package/src/providers/openai/__tests__/chat-completions-provider-reasoning.test.ts +112 -0
  1214. package/src/providers/openai/api-error-normalization.ts +61 -0
  1215. package/src/providers/openai/chat-completions-provider.ts +73 -10
  1216. package/src/providers/openai/responses-provider.ts +10 -3
  1217. package/src/providers/openrouter/client.ts +6 -39
  1218. package/src/providers/platform-proxy/constants.ts +4 -0
  1219. package/src/providers/provider-availability.ts +23 -1
  1220. package/src/providers/provider-send-message.ts +19 -3
  1221. package/src/providers/registry.ts +5 -1
  1222. package/src/providers/retry.ts +91 -29
  1223. package/src/providers/speech-to-text/__tests__/resolve.test.ts +31 -0
  1224. package/src/providers/speech-to-text/deepgram-realtime.test.ts +393 -1
  1225. package/src/providers/speech-to-text/deepgram-realtime.ts +213 -13
  1226. package/src/providers/speech-to-text/resolve.ts +33 -5
  1227. package/src/providers/types.ts +69 -24
  1228. package/src/providers/vellum-model-routing.ts +11 -0
  1229. package/src/providers/vercel-ai-gateway/client.ts +142 -0
  1230. package/src/runtime/__tests__/actor-trust-resolver.test.ts +132 -0
  1231. package/src/runtime/__tests__/agent-wake.test.ts +232 -16
  1232. package/src/runtime/__tests__/background-job-runner.test.ts +71 -2
  1233. package/src/runtime/__tests__/guardian-vellum-migration.test.ts +5 -15
  1234. package/src/runtime/__tests__/local-principal-trust.test.ts +0 -6
  1235. package/src/runtime/__tests__/member-verdict-cache.test.ts +2 -15
  1236. package/src/runtime/__tests__/trust-verdict-consumer.test.ts +91 -30
  1237. package/src/runtime/access-request-helper.ts +75 -3
  1238. package/src/runtime/actor-trust-resolver.ts +33 -108
  1239. package/src/runtime/agent-wake.ts +45 -25
  1240. package/src/runtime/assistant-event-hub.ts +0 -105
  1241. package/src/runtime/auth/__tests__/middleware.test.ts +1 -10
  1242. package/src/runtime/auth/__tests__/route-policy.test.ts +0 -7
  1243. package/src/runtime/auth/__tests__/token-service.test.ts +1 -8
  1244. package/src/runtime/background-job-runner.ts +57 -2
  1245. package/src/runtime/capabilities.ts +3 -3
  1246. package/src/runtime/channel-reply-delivery.ts +38 -19
  1247. package/src/runtime/channel-retry-sweep.ts +1 -1
  1248. package/src/runtime/confirmation-request-guardian-bridge.ts +4 -3
  1249. package/src/runtime/effective-capabilities.test.ts +0 -36
  1250. package/src/runtime/effective-capabilities.ts +8 -23
  1251. package/src/runtime/guardian-vellum-migration.ts +12 -16
  1252. package/src/runtime/http-router-types.ts +119 -0
  1253. package/src/runtime/http-router.ts +2 -115
  1254. package/src/runtime/http-server.ts +11 -2
  1255. package/src/runtime/http-types.ts +1 -1
  1256. package/src/runtime/introduction-policy.ts +89 -0
  1257. package/src/runtime/local-actor-identity.ts +4 -50
  1258. package/src/runtime/local-principal-trust.ts +1 -1
  1259. package/src/runtime/member-verdict-cache.ts +0 -0
  1260. package/src/runtime/migrations/__tests__/gcs-signed-url.test.ts +51 -1
  1261. package/src/runtime/migrations/__tests__/origin-mode.test.ts +62 -0
  1262. package/src/runtime/migrations/gcs-signed-url.ts +21 -7
  1263. package/src/runtime/migrations/origin-mode.ts +16 -11
  1264. package/src/runtime/pending-interactions.ts +8 -3
  1265. package/src/runtime/routes/__tests__/acp-routes.test.ts +0 -7
  1266. package/src/runtime/routes/__tests__/backup-routes.test.ts +0 -7
  1267. package/src/runtime/routes/__tests__/bookmark-routes.test.ts +0 -1
  1268. package/src/runtime/routes/__tests__/channel-verification-revoke.test.ts +0 -16
  1269. package/src/runtime/routes/__tests__/client-routes.test.ts +0 -7
  1270. package/src/runtime/routes/__tests__/connection-routes-vs-cli-parity.test.ts +4 -5
  1271. package/src/runtime/routes/__tests__/consolidation-routes.test.ts +8 -8
  1272. package/src/runtime/routes/__tests__/contact-routes.test.ts +2 -3
  1273. package/src/runtime/routes/__tests__/content-source-routes.test.ts +0 -7
  1274. package/src/runtime/routes/__tests__/conversation-compaction-routes.test.ts +31 -9
  1275. package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +0 -7
  1276. package/src/runtime/routes/__tests__/conversation-management-routes.test.ts +0 -8
  1277. package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +260 -11
  1278. package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +0 -7
  1279. package/src/runtime/routes/__tests__/default-provider-routes.test.ts +499 -0
  1280. package/src/runtime/routes/__tests__/global-search-routes.test.ts +0 -1
  1281. package/src/runtime/routes/__tests__/inference-callsites-routes.test.ts +54 -0
  1282. package/src/runtime/routes/__tests__/inference-models-routes.test.ts +54 -0
  1283. package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +403 -0
  1284. package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +219 -6
  1285. package/src/runtime/routes/__tests__/inference-routes-registration.test.ts +42 -0
  1286. package/src/runtime/routes/__tests__/invite-relay-routes.test.ts +70 -15
  1287. package/src/runtime/routes/__tests__/monitoring-routes.test.ts +1 -1
  1288. package/src/runtime/routes/__tests__/plugins-routes.test.ts +182 -38
  1289. package/src/runtime/routes/__tests__/retrospective-routes.test.ts +1 -8
  1290. package/src/runtime/routes/__tests__/sanity-routes.test.ts +0 -7
  1291. package/src/runtime/routes/__tests__/stt-routes.test.ts +0 -9
  1292. package/src/runtime/routes/__tests__/suggest-trust-rule-routes.test.ts +0 -7
  1293. package/src/runtime/routes/__tests__/task-routes.test.ts +2 -2
  1294. package/src/runtime/routes/__tests__/theme-routes.test.ts +66 -0
  1295. package/src/runtime/routes/__tests__/tts-routes.test.ts +0 -7
  1296. package/src/runtime/routes/__tests__/user-route-dispatcher.test.ts +1 -9
  1297. package/src/runtime/routes/__tests__/wake-conversation-routes.test.ts +0 -7
  1298. package/src/runtime/routes/acp-routes.ts +20 -14
  1299. package/src/runtime/routes/approval-routes.ts +21 -2
  1300. package/src/runtime/routes/canned-message-complete.ts +82 -0
  1301. package/src/runtime/routes/channel-metadata.ts +49 -0
  1302. package/src/runtime/routes/contact-routes.ts +75 -43
  1303. package/src/runtime/routes/conversation-attention-routes.ts +1 -1
  1304. package/src/runtime/routes/conversation-cli-routes.ts +2 -2
  1305. package/src/runtime/routes/conversation-compaction-routes.ts +5 -0
  1306. package/src/runtime/routes/conversation-management-routes.ts +147 -2
  1307. package/src/runtime/routes/conversation-query-routes.ts +378 -43
  1308. package/src/runtime/routes/conversation-routes.ts +89 -181
  1309. package/src/runtime/routes/conversation-starter-routes.ts +12 -23
  1310. package/src/runtime/routes/credential-prompt-routes.ts +48 -4
  1311. package/src/runtime/routes/credential-request-routes.ts +85 -0
  1312. package/src/runtime/routes/credential-routes.ts +40 -5
  1313. package/src/runtime/routes/default-provider-routes.ts +132 -0
  1314. package/src/runtime/routes/errors.ts +17 -0
  1315. package/src/runtime/routes/events-routes.ts +158 -39
  1316. package/src/runtime/routes/guardian-approval-interception.ts +1 -1
  1317. package/src/runtime/routes/http-adapter.ts +1 -1
  1318. package/src/runtime/routes/inbound-message-handler.ts +61 -6
  1319. package/src/runtime/routes/inbound-stages/acl-enforcement.test.ts +58 -26
  1320. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +73 -87
  1321. package/src/runtime/routes/inbound-stages/admission-policy.ts +2 -1
  1322. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +1 -8
  1323. package/src/runtime/routes/inbound-stages/background-dispatch.ts +3 -2
  1324. package/src/runtime/routes/inbound-stages/bootstrap-intercept.test.ts +0 -5
  1325. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -1
  1326. package/src/runtime/routes/inbound-stages/escalation-intercept.test.ts +0 -5
  1327. package/src/runtime/routes/inbound-stages/guardian-activation-intercept.test.ts +0 -9
  1328. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.test.ts +0 -9
  1329. package/src/runtime/routes/inbound-stages/reaction-intercept.test.ts +302 -0
  1330. package/src/runtime/routes/inbound-stages/reaction-intercept.ts +27 -37
  1331. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +1 -1
  1332. package/src/runtime/routes/inbound-stages/transcribe-audio.test.ts +0 -9
  1333. package/src/runtime/routes/index.ts +16 -4
  1334. package/src/runtime/routes/inference-callsites-routes.ts +211 -0
  1335. package/src/runtime/routes/inference-models-routes.ts +104 -0
  1336. package/src/runtime/routes/inference-profile-session-handler.ts +2 -1
  1337. package/src/runtime/routes/inference-profiles-routes.ts +717 -0
  1338. package/src/runtime/routes/inference-provider-connection-routes.ts +38 -1
  1339. package/src/runtime/routes/inference-send-routes.ts +2 -1
  1340. package/src/runtime/routes/integrations/slack/channels.ts +26 -4
  1341. package/src/runtime/routes/integrations/slack/users.ts +78 -0
  1342. package/src/runtime/routes/internal-telemetry-routes.ts +44 -0
  1343. package/src/runtime/routes/llm-call-sites-routes.ts +2 -1
  1344. package/src/runtime/routes/llm-request-logs-access.ts +19 -0
  1345. package/src/runtime/routes/migration-routes.ts +94 -47
  1346. package/src/runtime/routes/monitoring-routes.ts +1 -1
  1347. package/src/runtime/routes/notification-routes.ts +1 -1
  1348. package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +0 -7
  1349. package/src/runtime/routes/plugins-routes.ts +169 -16
  1350. package/src/runtime/routes/schedule-routes.ts +38 -1
  1351. package/src/runtime/routes/secret-routes.ts +0 -7
  1352. package/src/runtime/routes/settings-routes.ts +160 -22
  1353. package/src/runtime/routes/skills-routes.ts +6 -0
  1354. package/src/runtime/routes/subagents-routes.ts +17 -18
  1355. package/src/runtime/routes/surface-action-routes.ts +4 -2
  1356. package/src/runtime/routes/theme-routes.ts +36 -0
  1357. package/src/runtime/routes/types.ts +2 -1
  1358. package/src/runtime/routes/workflow-routes.ts +1 -1
  1359. package/src/runtime/services/__tests__/auto-analysis-guard.test.ts +2 -16
  1360. package/src/runtime/services/__tests__/conversation-serializer.test.ts +0 -1
  1361. package/src/runtime/services/auto-analysis-guard.ts +5 -5
  1362. package/src/runtime/services/conversation-serializer.ts +2 -3
  1363. package/src/runtime/sync/resource-sync-events.ts +4 -0
  1364. package/src/runtime/trust-context-resolver.ts +9 -9
  1365. package/src/runtime/trust-verdict-consumer.ts +46 -5
  1366. package/src/schedule/scheduler.ts +61 -18
  1367. package/src/security/__tests__/oauth2-device-code.test.ts +12 -60
  1368. package/src/security/__tests__/provider-key-env-fallback.test.ts +0 -10
  1369. package/src/security/__tests__/secret-normalize.test.ts +96 -0
  1370. package/src/security/secret-normalize.ts +41 -0
  1371. package/src/security/secret-patterns.ts +3 -0
  1372. package/src/security/secure-keys.ts +222 -49
  1373. package/src/sequence/engine.ts +15 -6
  1374. package/src/signals/user-message.ts +3 -1
  1375. package/src/skills/available-skills.ts +134 -0
  1376. package/src/skills/install-meta.ts +8 -0
  1377. package/src/skills/managed-store.ts +10 -0
  1378. package/src/stt/types.ts +33 -2
  1379. package/src/subagent/manager.ts +5 -6
  1380. package/src/tasks/SPEC.md +10 -17
  1381. package/src/tasks/tool-sanitizer.ts +3 -1
  1382. package/src/telemetry/__tests__/config-setting-events-store.test.ts +126 -0
  1383. package/src/telemetry/__tests__/flush-checkpoints.test.ts +56 -0
  1384. package/src/telemetry/__tests__/watchdog-events-store.test.ts +0 -8
  1385. package/src/telemetry/config-setting-events-store.ts +97 -0
  1386. package/src/telemetry/flush-checkpoints.ts +70 -0
  1387. package/src/telemetry/skill-loaded-events-store.test.ts +0 -8
  1388. package/src/telemetry/telemetry-event-sources.ts +571 -0
  1389. package/src/telemetry/tool-audit.ts +285 -0
  1390. package/src/telemetry/tool-executed-events-store.test.ts +19 -27
  1391. package/src/telemetry/tool-executed-events-store.ts +5 -5
  1392. package/src/telemetry/turn-events-store.ts +36 -0
  1393. package/src/telemetry/turn-outcome.ts +116 -0
  1394. package/src/telemetry/turn-trace-store.test.ts +156 -8
  1395. package/src/telemetry/turn-trace-store.ts +53 -4
  1396. package/src/telemetry/types.ts +91 -2
  1397. package/src/telemetry/usage-telemetry-reporter.test.ts +373 -119
  1398. package/src/telemetry/usage-telemetry-reporter.ts +110 -675
  1399. package/src/telemetry/watchdog-direct-emit.test.ts +0 -5
  1400. package/src/theme/workspace-theme.test.ts +269 -0
  1401. package/src/theme/workspace-theme.ts +304 -0
  1402. package/src/tools/AGENTS.md +0 -26
  1403. package/src/tools/acp/spawn.test.ts +0 -7
  1404. package/src/tools/browser/browser-execution.ts +99 -75
  1405. package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +1 -11
  1406. package/src/tools/browser/cdp-client/__tests__/local-cdp-client.test.ts +0 -10
  1407. package/src/tools/browser/network-recorder.test.ts +0 -11
  1408. package/src/tools/document/document-comment-tool.test.ts +1 -7
  1409. package/src/tools/execution-target.test.ts +31 -0
  1410. package/src/tools/execution-target.ts +1 -1
  1411. package/src/tools/executor.ts +63 -275
  1412. package/src/tools/filesystem/write.ts +0 -2
  1413. package/src/tools/host-terminal/host-shell.test.ts +0 -7
  1414. package/src/tools/host-terminal/host-shell.ts +6 -49
  1415. package/src/tools/permission-checker.ts +33 -81
  1416. package/src/tools/registry.ts +261 -166
  1417. package/src/tools/run-standalone.ts +6 -13
  1418. package/src/tools/side-effects.ts +0 -1
  1419. package/src/tools/skills/find-similar-skills.test.ts +5 -9
  1420. package/src/tools/skills/scaffold-managed.ts +31 -4
  1421. package/src/tools/skills/skill-script-runner.ts +17 -31
  1422. package/src/tools/skills/skill-tool-factory.ts +2 -6
  1423. package/src/tools/subagent/read.ts +6 -4
  1424. package/src/tools/subagent/spawn.ts +28 -29
  1425. package/src/tools/terminal/safe-env.ts +8 -3
  1426. package/src/tools/terminal/shell.test.ts +0 -6
  1427. package/src/tools/terminal/shell.ts +1 -50
  1428. package/src/tools/tool-approval-handler.ts +99 -166
  1429. package/src/tools/tool-defaults.ts +2 -6
  1430. package/src/tools/tool-manifest.ts +0 -49
  1431. package/src/{events/tool-profiling-listener.ts → tools/tool-profiler.ts} +64 -32
  1432. package/src/tools/tool-types.ts +4 -95
  1433. package/src/tools/types.ts +27 -140
  1434. package/src/tools/workflows/manage-workflows.ts +2 -1
  1435. package/src/tools/workflows/run-workflow.test.ts +6 -1
  1436. package/src/tools/workflows/run-workflow.ts +2 -4
  1437. package/src/tools/workspace-tools/loader.ts +26 -14
  1438. package/src/tts/__tests__/pcm-chunk-aligner.test.ts +48 -0
  1439. package/src/tts/__tests__/pcm-sample-rates.test.ts +59 -0
  1440. package/src/tts/__tests__/provider-adapters.test.ts +891 -22
  1441. package/src/tts/__tests__/provider-catalog.test.ts +43 -10
  1442. package/src/tts/__tests__/speakable-segments.test.ts +427 -0
  1443. package/src/tts/__tests__/synthesis-stream.test.ts +5 -1
  1444. package/src/tts/pcm-chunk-aligner.ts +29 -0
  1445. package/src/tts/pcm-sample-rates.ts +47 -0
  1446. package/src/tts/provider-definition.ts +6 -7
  1447. package/src/tts/providers/__tests__/xai-tts-socket.test.ts +406 -0
  1448. package/src/tts/providers/deepgram-provider.ts +160 -102
  1449. package/src/tts/providers/elevenlabs-provider.ts +182 -105
  1450. package/src/tts/providers/fish-audio-provider.ts +72 -105
  1451. package/src/tts/providers/xai-provider.ts +131 -22
  1452. package/src/tts/providers/xai-tts-socket.ts +311 -0
  1453. package/src/tts/speakable-segments.ts +188 -0
  1454. package/src/tts/stream-read.ts +136 -0
  1455. package/src/tts/synthesis-stream.ts +9 -5
  1456. package/src/tts/synthesize-text.ts +15 -5
  1457. package/src/tts/types.ts +21 -0
  1458. package/src/usage/attribution.ts +43 -9
  1459. package/src/util/errors.ts +26 -0
  1460. package/src/util/image-conversion.ts +23 -5
  1461. package/src/util/logger.ts +67 -68
  1462. package/src/util/platform.ts +19 -60
  1463. package/src/util/pricing.ts +14 -11
  1464. package/src/util/process-tree.ts +25 -13
  1465. package/src/util/provider-error-patterns.ts +21 -0
  1466. package/src/util/sqlite-query-label.ts +51 -0
  1467. package/src/util/sqlite-retry.ts +14 -2
  1468. package/src/util/unicode.ts +1 -1
  1469. package/src/watcher/__tests__/engine-auth-notify.test.ts +316 -0
  1470. package/src/watcher/engine.ts +87 -2
  1471. package/src/workflows/capabilities.test.ts +2 -32
  1472. package/src/workflows/capabilities.ts +18 -25
  1473. package/src/workflows/engine-integration.test.ts +1 -7
  1474. package/src/workflows/engine.test.ts +2 -10
  1475. package/src/workflows/engine.ts +1 -1
  1476. package/src/workflows/fanout-load.test.ts +1 -1
  1477. package/src/workflows/journal-store.test.ts +1 -9
  1478. package/src/workflows/leaf-runner.test.ts +0 -6
  1479. package/src/workflows/leaf-runner.ts +4 -5
  1480. package/src/workflows/library.test.ts +1 -9
  1481. package/src/workflows/run-manager.test.ts +2 -10
  1482. package/src/workflows/run-manager.ts +2 -4
  1483. package/src/workspace/adaptive-thinking-repair.ts +1 -1
  1484. package/src/workspace/custom-profile-ensure.ts +133 -0
  1485. package/src/workspace/default-provider-ensure.ts +162 -0
  1486. package/src/workspace/git-service.ts +160 -15
  1487. package/src/workspace/migrations/028-recover-conversations-from-disk-view.ts +0 -1
  1488. package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +1 -1
  1489. package/src/workspace/migrations/126-strip-managed-profile-bodies.ts +92 -0
  1490. package/src/workspace/migrations/127-backfill-default-provider.ts +176 -0
  1491. package/src/workspace/migrations/128-repair-stale-openrouter-grok-model-ids.ts +112 -0
  1492. package/src/workspace/migrations/129-remove-analyze-conversation-config.ts +59 -0
  1493. package/src/workspace/migrations/registry.ts +8 -0
  1494. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/grants.test.ts +0 -686
  1495. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/grants.ts +0 -184
  1496. package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/rendering.ts +0 -135
  1497. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/grants.test.ts +0 -686
  1498. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/grants.ts +0 -184
  1499. package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/rendering.ts +0 -135
  1500. package/node_modules/@vellumai/service-contracts/src/__tests__/grants.test.ts +0 -686
  1501. package/node_modules/@vellumai/service-contracts/src/grants.ts +0 -184
  1502. package/node_modules/@vellumai/service-contracts/src/rendering.ts +0 -135
  1503. package/scripts/generate-bundled-tool-registry.ts +0 -223
  1504. package/scripts/test.sh +0 -494
  1505. package/src/__tests__/actor-trust-resolver-address-fallback.test.ts +0 -255
  1506. package/src/__tests__/agent-loop-sentry-hygiene.test.ts +0 -137
  1507. package/src/__tests__/auto-analysis-end-to-end.test.ts +0 -621
  1508. package/src/__tests__/auto-analysis-prompt.test.ts +0 -50
  1509. package/src/__tests__/config-analysis.test.ts +0 -83
  1510. package/src/__tests__/conversation-analysis-routes.test.ts +0 -156
  1511. package/src/__tests__/credential-execution-admin-cli.test.ts +0 -504
  1512. package/src/__tests__/credential-execution-approval-bridge.test.ts +0 -297
  1513. package/src/__tests__/credential-execution-feature-gates.test.ts +0 -185
  1514. package/src/__tests__/credential-execution-shell-lockdown.test.ts +0 -120
  1515. package/src/__tests__/credential-execution-tools.test.ts +0 -289
  1516. package/src/__tests__/db-proxy-transaction.test.ts +0 -206
  1517. package/src/__tests__/event-bus.test.ts +0 -222
  1518. package/src/__tests__/reaction-intercept-cold-cache-warm.test.ts +0 -141
  1519. package/src/__tests__/reaction-intercept-member-verdict-warm.test.ts +0 -157
  1520. package/src/__tests__/skill-memory.test.ts +0 -85
  1521. package/src/__tests__/skill-runtime-path.test.ts +0 -63
  1522. package/src/__tests__/tool-domain-event-publisher.test.ts +0 -216
  1523. package/src/__tests__/tool-metrics-listener.test.ts +0 -194
  1524. package/src/__tests__/tool-profiling-listener.test.ts +0 -219
  1525. package/src/cli/commands/credential-execution.ts +0 -362
  1526. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +0 -120
  1527. package/src/config/bundled-tool-registry.ts +0 -281
  1528. package/src/config/schemas/analysis.ts +0 -32
  1529. package/src/credential-execution/approval-bridge.ts +0 -320
  1530. package/src/credential-execution/feature-gates.ts +0 -61
  1531. package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +0 -449
  1532. package/src/events/bus.ts +0 -177
  1533. package/src/events/domain-events.ts +0 -68
  1534. package/src/events/tool-audit-listener.ts +0 -184
  1535. package/src/events/tool-domain-event-publisher.ts +0 -90
  1536. package/src/events/tool-metrics-listener.ts +0 -134
  1537. package/src/events/tool-permission-telemetry-listener.ts +0 -44
  1538. package/src/instrument.ts +0 -213
  1539. package/src/ipc/routes/db-proxy-transaction.ts +0 -151
  1540. package/src/plugins/defaults/memory/__tests__/find-analysis-conversation.test.ts +0 -197
  1541. package/src/runtime/routes/conversation-analysis-routes.ts +0 -75
  1542. package/src/runtime/routes/work-items-routes.test.ts +0 -74
  1543. package/src/runtime/routes/work-items-routes.ts +0 -881
  1544. package/src/runtime/services/__tests__/analyze-conversation.test.ts +0 -477
  1545. package/src/runtime/services/__tests__/auto-analysis-enqueue.test.ts +0 -386
  1546. package/src/runtime/services/__tests__/auto-analysis-prompt.test.ts +0 -53
  1547. package/src/runtime/services/__tests__/conversation-analyze-job.test.ts +0 -213
  1548. package/src/runtime/services/__tests__/manual-analysis-prompt.test.ts +0 -41
  1549. package/src/runtime/services/analyze-conversation.ts +0 -332
  1550. package/src/runtime/services/auto-analysis-enqueue.ts +0 -130
  1551. package/src/runtime/services/auto-analysis-prompt.ts +0 -55
  1552. package/src/runtime/services/conversation-analyze-job.ts +0 -53
  1553. package/src/skills/skill-memory.ts +0 -44
  1554. package/src/tools/credential-execution/make-authenticated-request.ts +0 -198
  1555. package/src/tools/credential-execution/manage-secure-command-tool.ts +0 -371
  1556. package/src/tools/credential-execution/run-authenticated-command.ts +0 -261
  1557. package/src/tools/flag-gated-tools.test.ts +0 -76
  1558. package/src/util/sentry-log-stream.ts +0 -51
@@ -10,6 +10,7 @@ import { hostShellTool } from "./host-terminal/host-shell.js";
10
10
  import { toProviderSafeToolName } from "./provider-tool-name.js";
11
11
  import { registerSystemTools } from "./system/register.js";
12
12
  import { finalizeTool } from "./tool-defaults.js";
13
+ import { explicitTools } from "./tool-manifest.js";
13
14
  import type { OwnerInfo, Tool, ToolDefinition } from "./types.js";
14
15
  import { allUiSurfaceTools } from "./ui-surface/definitions.js";
15
16
  import { registerUiSurfaceTools } from "./ui-surface/registry.js";
@@ -22,70 +23,33 @@ const tools = new Map<string, Tool>();
22
23
  // `register*` functions and read by `getToolOwner()`. Lives on the registry
23
24
  // (not on the `Tool` object) so callers cannot spoof ownership by writing a
24
25
  // field on the manifest — the only way to claim a tool is to go through a
25
- // `register*` function, which stamps the owner from its arguments. Core
26
- // tools intentionally have no entry here; `getToolOwner` returns `undefined`
27
- // for them.
26
+ // `register*` function, which stamps the owner from its arguments. Built-in
27
+ // tools are stamped with the shared {@link DEFAULT_TOOL_OWNER} by
28
+ // `registerTool`, so every registered tool has an entry and `getToolOwner` is a
29
+ // plain lookup — a missing entry means the name is not registered at all.
28
30
  const ownersByName = new Map<string, OwnerInfo>();
29
31
 
30
- // ── External tool registry ───────────────────────────────────────────
31
- // Skills register their tools here at initialization time so the tool
32
- // manifest can include them without importing from `../skills/`.
33
- //
34
- // Each registration is stored as a provider closure. Closures are
35
- // resolved at `getExternalTools()` time (which `initializeTools()`
36
- // calls), not at registration time — this lets a skill defer its
37
- // feature-flag check until after the daemon has run
38
- // `mergeDefaultWorkspaceConfig()`, so skills see the merged config
39
- // instead of forcing an early `loadConfig()` against unmerged defaults.
40
- const externalToolProviders: Array<{
41
- owner: OwnerInfo;
42
- provider: () => Tool[];
43
- }> = [];
44
-
45
- /**
46
- * Register tools provided by an external skill. Called during skill
47
- * initialization (e.g. meet-join bootstrap).
48
- *
49
- * Accepts either a concrete `Tool[]` (resolved eagerly at the caller)
50
- * or a `() => Tool[]` closure (resolved lazily inside
51
- * `getExternalTools()`). Skills that perform feature-flag or config
52
- * reads to decide which tools to surface must pass a closure so the
53
- * read happens after daemon-startup config merging.
54
- *
55
- * Lives in registry.ts (not tool-manifest.ts) to avoid a circular
56
- * dependency: skills/load.ts → … → meet-join/register.ts → tool-manifest.ts
57
- * → skills/load.ts. Keeping it here lets external skill bootstraps import
58
- * from registry.ts, which is already a leaf in the dependency graph.
59
- *
60
- * `owner` records which extension produced these tools — typed
61
- * {@link OwnerInfo} so ownership flows through `ownersByName` at
62
- * `initializeTools()` time, the same way `register*` registers it for
63
- * IPC-loaded tools. Eager (boot-time) skill bootstraps go through this
64
- * path rather than `registerSkillTools`, so this is where their owner
65
- * lookup gets established.
66
- */
67
- export function registerExternalTools(
68
- owner: OwnerInfo,
69
- toolsOrProvider: Tool[] | (() => Tool[]),
70
- ): void {
71
- const provider =
72
- typeof toolsOrProvider === "function"
73
- ? toolsOrProvider
74
- : () => toolsOrProvider;
75
- externalToolProviders.push({ owner, provider });
76
- }
77
-
78
- /** Return all externally registered tools paired with their owners. */
79
- function getExternalTools(): Array<{ owner: OwnerInfo; tool: Tool }> {
80
- return externalToolProviders.flatMap(({ owner, provider }) =>
81
- provider().map((tool) => ({ owner, tool })),
82
- );
83
- }
84
-
85
- // Snapshot of core tools captured after initializeTools() completes.
86
- // Lets __resetRegistryForTesting() restore the core baseline synchronously,
87
- // without re-running the async initializeTools() bootstrap.
88
- let coreToolsSnapshot: Map<string, Tool> | null = null;
32
+ // Owner recorded for built-in tools — those registered via `registerTool`
33
+ // without an explicit extension owner. One frozen instance is shared across all
34
+ // built-ins; `id` is a constant sentinel because built-ins are not a distinct
35
+ // installable extension.
36
+ const DEFAULT_TOOL_OWNER: OwnerInfo = Object.freeze({
37
+ kind: "default",
38
+ id: "default",
39
+ });
40
+
41
+ // Snapshot of core tools (with their owners) captured after initializeTools()
42
+ // completes. Lets __resetRegistryForTesting() restore the core baseline — tools
43
+ // and ownership together — synchronously, without re-running the async
44
+ // initializeTools() bootstrap.
45
+ let coreToolsSnapshot: Map<string, { tool: Tool; owner: OwnerInfo }> | null =
46
+ null;
47
+
48
+ // Cached promise for the one-time tool-registry initialization. `initializeTools`
49
+ // returns this so repeated calls (across entry points, or an eventual
50
+ // getter-triggered ensure) run the underlying work exactly once. Cleared by the
51
+ // test-reset helpers so each test can re-initialize from a clean baseline.
52
+ let toolsInitPromise: Promise<void> | null = null;
89
53
 
90
54
  // Tracks how many sessions are currently using each skill's tools.
91
55
  // Tools are only removed from the global registry when this drops to 0.
@@ -97,6 +61,17 @@ const skillRefCount = new Map<string, number>();
97
61
  // separate and covers the case of two extensions choosing the same tool name.
98
62
  const pluginRefCount = new Map<string, number>();
99
63
 
64
+ // Fingerprints of the user-plugin tool sets `loadPluginTools` last pulled
65
+ // from the plugin mtime-cache, keyed by plugin name. The pull reconcile diffs
66
+ // the cache's current fingerprints against this map, so it only ever touches
67
+ // registrations it created itself — plugin-owned tools registered by other
68
+ // callers (the in-process default-plugin bootstrap) are never disturbed.
69
+ const pulledPluginFingerprints = new Map<string, string>();
70
+
71
+ // In-flight plugin pull — concurrent `loadPluginTools` callers coalesce onto
72
+ // a single reconcile (mirrors `loadWorkspaceTools`).
73
+ let pluginToolsReconcileInFlight: Promise<void> | null = null;
74
+
100
75
  /**
101
76
  * Format an owner for log messages and error strings. Returns a stable
102
77
  * human-readable description (e.g. `skill "deploy"`, `plugin "weather"`,
@@ -105,7 +80,9 @@ const pluginRefCount = new Map<string, number>();
105
80
  * string so log/error sites never produce `undefined` interpolations.
106
81
  */
107
82
  function describeOwner(owner: OwnerInfo | undefined): string {
108
- if (!owner) return "core tool";
83
+ if (!owner) {
84
+ return "core tool";
85
+ }
109
86
  switch (owner.kind) {
110
87
  case "skill":
111
88
  return `skill "${owner.id}"`;
@@ -188,13 +165,41 @@ export function registerTool(definition: ToolDefinition): void {
188
165
  }
189
166
  const existing = tools.get(name);
190
167
  if (existing) {
191
- if (existing === tool) return; // same definition re-registered, skip
168
+ if (existing === tool) {
169
+ return;
170
+ } // same definition re-registered, skip
192
171
  log.warn({ name }, "Tool already registered, overwriting");
193
172
  }
194
173
  tools.set(name, tool);
174
+ // A tool registered through this bare path has no explicit extension owner,
175
+ // so it is a built-in: record the shared `default` owner by name.
176
+ ownersByName.set(name, DEFAULT_TOOL_OWNER);
195
177
  log.info({ name, category: tool.category }, "Tool registered");
196
178
  }
197
179
 
180
+ /**
181
+ * Resolve a registered tool by name, ensuring the registry has been
182
+ * initialized first. Mirrors `getHooksFor`, which awaits its reconcile before
183
+ * reading — so a caller on a cold registry gets a populated result instead of
184
+ * a spurious `undefined`. Prefer this in any async context.
185
+ *
186
+ * `initializeTools()` is idempotent: the first call does the work and caches
187
+ * its promise, so every later `resolveTool` just awaits the already-settled
188
+ * promise (an `await` on a resolved value — no re-initialization). The per-call
189
+ * cost past init is a single map lookup.
190
+ */
191
+ export async function resolveTool(name: string): Promise<Tool | undefined> {
192
+ await initializeTools();
193
+ return tools.get(name);
194
+ }
195
+
196
+ /**
197
+ * Synchronous read that does NOT trigger initialization. For hot-path callers
198
+ * that run only after the registry is known to be populated — e.g. the agent
199
+ * loop's exclusive-tool predicate, invoked mid-turn once tools are resolved.
200
+ * Returns `undefined` if the tool is absent or the registry is not yet
201
+ * initialized; use {@link resolveTool} when readiness is not already guaranteed.
202
+ */
198
203
  export function getTool(name: string): Tool | undefined {
199
204
  return tools.get(name);
200
205
  }
@@ -235,12 +240,20 @@ export function getEnabledTools(): Tool[] {
235
240
  }
236
241
 
237
242
  /**
238
- * Return the recorded owner for a tool, or `undefined` if the tool is
239
- * core-origin (no owner) or unknown. Consumers that need to gate behavior on
240
- * which extension contributed a tool (permissions checker, approval-handler
241
- * load hints, conversation-skill-tools projection) call this rather than
242
- * reading owner off the `Tool` object — the registry is the single source of
243
- * truth for ownership.
243
+ * Return the owner recorded for a tool. Extension tools return their
244
+ * {@link OwnerInfo} (skill / plugin / MCP / workspace); built-ins return the
245
+ * shared {@link DEFAULT_TOOL_OWNER} (`kind: "default"`) that `registerTool`
246
+ * stamps by name. Returns `undefined` only when `name` is not registered at all
247
+ * — an unknown tool, which callers treat as "not a real tool" (skip / deny),
248
+ * never as a built-in.
249
+ *
250
+ * Because a tool cannot be invoked unless it was registered first, an invocable
251
+ * tool always has a defined owner in practice.
252
+ *
253
+ * Consumers that gate behavior on which extension contributed a tool
254
+ * (permissions checker, approval-handler load hints, conversation-skill-tools
255
+ * projection) call this rather than reading owner off the `Tool` object — the
256
+ * registry is the single source of truth for ownership.
244
257
  */
245
258
  export function getToolOwner(name: string): OwnerInfo | undefined {
246
259
  return ownersByName.get(name);
@@ -279,7 +292,7 @@ export function registerSkillTools(skillId: string, newTools: Tool[]): Tool[] {
279
292
  const existing = tools.get(tool.name);
280
293
  if (existing) {
281
294
  const existingOwner = ownersByName.get(tool.name);
282
- const existingIsCore = !existingOwner;
295
+ const existingIsCore = !existingOwner || existingOwner.kind === "default";
283
296
  if (existingIsCore) {
284
297
  log.warn(
285
298
  { toolName: tool.name, ownerSkillId: skillId },
@@ -364,7 +377,8 @@ export function registerPluginTools(
364
377
  }
365
378
  const existing = tools.get(tool.name);
366
379
  if (existing) {
367
- const existingIsCore = !ownersByName.has(tool.name);
380
+ const existingOwner = ownersByName.get(tool.name);
381
+ const existingIsCore = !existingOwner || existingOwner.kind === "default";
368
382
  if (existingIsCore) {
369
383
  log.warn(
370
384
  { toolName: tool.name, ownerPluginId: pluginName },
@@ -372,7 +386,6 @@ export function registerPluginTools(
372
386
  );
373
387
  continue;
374
388
  }
375
- const existingOwner = ownersByName.get(tool.name);
376
389
  if (existingOwner?.kind === "workspace") {
377
390
  log.warn(
378
391
  { toolName: tool.name, pluginName },
@@ -439,6 +452,93 @@ export function unregisterPluginTools(pluginName: string): void {
439
452
  }
440
453
  }
441
454
 
455
+ /**
456
+ * Pull the active user-plugin tool set from the plugin mtime-cache into the
457
+ * registry. This is the pull half of the plugin-tool relationship — the
458
+ * mtime-cache never writes to the registry; instead this reconcile reads
459
+ * {@link import("../plugins/mtime-cache.js").getActiveUserPluginTools} (which
460
+ * syncs against the source-versions sentinel first) and diffs the result into
461
+ * the registry: plugins that vanished are unregistered, new plugins register,
462
+ * and a plugin whose per-tool source mtimes moved is re-registered. Mirrors
463
+ * how hooks resolve through `getUserHookEntriesFor`.
464
+ *
465
+ * Idempotent, cheap when nothing changed (one sentinel stat + fingerprint
466
+ * compares), and concurrency-safe (concurrent callers coalesce onto one
467
+ * in-flight reconcile). Runs as the final step of `initializeTools()` (at
468
+ * daemon boot the plugin cache is already populated by then), and
469
+ * fire-and-forget from the per-turn conversation tool resolver — the same
470
+ * cadence `loadWorkspaceTools` runs on.
471
+ */
472
+ export function loadPluginTools(): Promise<void> {
473
+ if (pluginToolsReconcileInFlight) {
474
+ return pluginToolsReconcileInFlight;
475
+ }
476
+ // `reconcilePluginToolsFromCache` never rejects (failures are caught and
477
+ // logged); `.finally` clears the slot either way so the next caller pulls
478
+ // fresh.
479
+ pluginToolsReconcileInFlight = reconcilePluginToolsFromCache().finally(() => {
480
+ pluginToolsReconcileInFlight = null;
481
+ });
482
+ return pluginToolsReconcileInFlight;
483
+ }
484
+
485
+ async function reconcilePluginToolsFromCache(): Promise<void> {
486
+ // Dynamic import: the mtime-cache pulls the plugin-loader subtree in with
487
+ // it, which must stay out of this module's eager import graph — the
488
+ // registry is a widely-imported leaf.
489
+ let active: Map<string, { fingerprint: string; tools: Tool[] }>;
490
+ try {
491
+ const { getActiveUserPluginTools } =
492
+ await import("../plugins/mtime-cache.js");
493
+ active = await getActiveUserPluginTools();
494
+ } catch (err) {
495
+ log.warn(
496
+ { err },
497
+ "loadPluginTools: plugin cache pull failed — keeping current registrations",
498
+ );
499
+ return;
500
+ }
501
+
502
+ // Tear down plugins this reconcile registered that are no longer active
503
+ // (uninstalled, disabled, or their last tool file was deleted).
504
+ for (const pluginName of pulledPluginFingerprints.keys()) {
505
+ if (!active.has(pluginName)) {
506
+ unregisterPluginTools(pluginName);
507
+ pulledPluginFingerprints.delete(pluginName);
508
+ }
509
+ }
510
+
511
+ // Register new plugins; re-register ones whose tool set changed. Per-plugin
512
+ // isolation: one plugin's conflict/failure never blocks the others.
513
+ for (const [pluginName, { fingerprint, tools: pluginTools }] of active) {
514
+ const prev = pulledPluginFingerprints.get(pluginName);
515
+ if (prev === fingerprint) {
516
+ continue;
517
+ }
518
+ try {
519
+ if (prev !== undefined) {
520
+ // Changed tool set: drop the previous registration first so tools
521
+ // removed in the new set don't linger (re-registering alone would
522
+ // only overwrite the survivors).
523
+ unregisterPluginTools(pluginName);
524
+ }
525
+ registerPluginTools(pluginName, pluginTools);
526
+ pulledPluginFingerprints.set(pluginName, fingerprint);
527
+ log.info(
528
+ { plugin: pluginName, count: pluginTools.length },
529
+ "user plugin tools registered",
530
+ );
531
+ } catch (err) {
532
+ // Leave no fingerprint so the next reconcile retries this plugin.
533
+ pulledPluginFingerprints.delete(pluginName);
534
+ log.error(
535
+ { err, plugin: pluginName },
536
+ `Failed to register tools for user plugin ${pluginName}`,
537
+ );
538
+ }
539
+ }
540
+ }
541
+
442
542
  /**
443
543
  * Return the current reference count for a plugin's tools. Exposed for testing.
444
544
  */
@@ -496,7 +596,8 @@ export function registerMcpTools(serverId: string, newTools: Tool[]): Tool[] {
496
596
  }
497
597
  const existing = tools.get(tool.name);
498
598
  if (existing) {
499
- const existingIsCore = !ownersByName.has(tool.name);
599
+ const existingOwner = ownersByName.get(tool.name);
600
+ const existingIsCore = !existingOwner || existingOwner.kind === "default";
500
601
  if (existingIsCore) {
501
602
  log.warn(
502
603
  { toolName: tool.name, ownerMcpServerId: serverId },
@@ -504,7 +605,6 @@ export function registerMcpTools(serverId: string, newTools: Tool[]): Tool[] {
504
605
  );
505
606
  continue;
506
607
  }
507
- const existingOwner = ownersByName.get(tool.name);
508
608
  if (existingOwner?.kind === "workspace") {
509
609
  log.warn(
510
610
  { toolName: tool.name, serverId },
@@ -578,7 +678,9 @@ export function getMcpToolDefinitions(): Tool[] {
578
678
  export function getPluginToolDefinitions(): Tool[] {
579
679
  return Array.from(tools.values()).filter((t) => {
580
680
  const owner = ownersByName.get(t.name);
581
- if (owner?.kind !== "plugin") return false;
681
+ if (owner?.kind !== "plugin") {
682
+ return false;
683
+ }
582
684
  // Filter out tools contributed by disabled plugins at read time so
583
685
  // `assistant plugins disable <name>` takes effect on the next turn
584
686
  // without a daemon restart. Mirrors the `.disabled` sentinel filtering
@@ -594,9 +696,13 @@ export function getPluginToolDefinitions(): Tool[] {
594
696
  export function getMcpToolsByServer(): Map<string, Tool[]> {
595
697
  const byServer = new Map<string, Tool[]>();
596
698
  for (const [name, owner] of ownersByName) {
597
- if (owner.kind !== "mcp") continue;
699
+ if (owner.kind !== "mcp") {
700
+ continue;
701
+ }
598
702
  const tool = tools.get(name);
599
- if (!tool) continue;
703
+ if (!tool) {
704
+ continue;
705
+ }
600
706
  let list = byServer.get(owner.id);
601
707
  if (!list) {
602
708
  list = [];
@@ -675,7 +781,9 @@ export function registerWorkspaceTools(
675
781
  seenInBatch.add(tool.name);
676
782
 
677
783
  const existing = tools.get(tool.name);
678
- if (!existing) continue;
784
+ if (!existing) {
785
+ continue;
786
+ }
679
787
 
680
788
  const existingOwner = ownersByName.get(tool.name);
681
789
  if (existingOwner?.kind === "workspace") {
@@ -684,7 +792,12 @@ export function registerWorkspaceTools(
684
792
  );
685
793
  }
686
794
 
687
- if (!existingOwner) continue; // Core tool — override allowed, handled in mutation phase below.
795
+ // Built-in (default) tool — override allowed, handled in the mutation
796
+ // phase below. `undefined` shouldn't occur (every registered tool has an
797
+ // owner) but is treated the same as a built-in for safety.
798
+ if (!existingOwner || existingOwner.kind === "default") {
799
+ continue;
800
+ }
688
801
 
689
802
  throw new Error(
690
803
  `Workspace tool "${tool.name}" conflicts with an existing ${describeOwner(existingOwner)}. Workspace tools must register before other extension categories.`,
@@ -693,7 +806,9 @@ export function registerWorkspaceTools(
693
806
 
694
807
  for (const { tool, workspacePath } of stamped) {
695
808
  const existing = tools.get(tool.name);
696
- const existingIsCore = existing && !ownersByName.has(tool.name);
809
+ const existingOwner = ownersByName.get(tool.name);
810
+ const existingIsCore =
811
+ existing && (!existingOwner || existingOwner.kind === "default");
697
812
  if (existingIsCore) {
698
813
  coreToolOverrides.set(tool.name, existing);
699
814
  log.info(
@@ -735,7 +850,9 @@ export function unregisterWorkspaceTool(name: string): void {
735
850
  const stashed = coreToolOverrides.get(name);
736
851
  if (stashed) {
737
852
  tools.set(name, stashed);
738
- ownersByName.delete(name);
853
+ // The stash only ever holds a displaced built-in, so restore its `default`
854
+ // owner rather than deleting the entry.
855
+ ownersByName.set(name, DEFAULT_TOOL_OWNER);
739
856
  coreToolOverrides.delete(name);
740
857
  log.info(
741
858
  { name, workspacePath },
@@ -795,7 +912,7 @@ export function removeCoreToolViaWorkspace(name: string): void {
795
912
  );
796
913
  }
797
914
 
798
- if (existingOwner) {
915
+ if (existingOwner && existingOwner.kind !== "default") {
799
916
  log.warn(
800
917
  { name, owner: existingOwner },
801
918
  `removeCoreToolViaWorkspace: "${name}" is owned by ${describeOwner(existingOwner)}, not a core tool — cannot strip from workspace. Resolve at the source (uninstall the ${existingOwner.kind}).`,
@@ -805,6 +922,9 @@ export function removeCoreToolViaWorkspace(name: string): void {
805
922
 
806
923
  coreToolOverrides.set(name, existing);
807
924
  tools.delete(name);
925
+ // The stripped built-in no longer has a live entry; drop its owner so
926
+ // `getToolOwner` reports the name as unregistered until it is restored.
927
+ ownersByName.delete(name);
808
928
  log.info(
809
929
  { name },
810
930
  "Stripped core tool via workspace .removed sentinel — stashed for potential restore",
@@ -849,6 +969,7 @@ export function restoreStrippedCoreTool(name: string): void {
849
969
  return;
850
970
  }
851
971
  tools.set(name, stashed);
972
+ ownersByName.set(name, DEFAULT_TOOL_OWNER);
852
973
  coreToolOverrides.delete(name);
853
974
  log.info(
854
975
  { name },
@@ -887,7 +1008,9 @@ export function getWorkspaceToolDefinitions(): Tool[] {
887
1008
  export function getStrippedCoreToolNames(): string[] {
888
1009
  const stripped: string[] = [];
889
1010
  for (const name of coreToolOverrides.keys()) {
890
- if (!tools.has(name)) stripped.push(name);
1011
+ if (!tools.has(name)) {
1012
+ stripped.push(name);
1013
+ }
891
1014
  }
892
1015
  return stripped;
893
1016
  }
@@ -932,10 +1055,32 @@ export function getAllToolDefinitions(): Tool[] {
932
1055
  );
933
1056
  }
934
1057
 
935
- export async function initializeTools(): Promise<void> {
936
- const { explicitTools, getCesToolsIfEnabled, cesTools } =
937
- await import("./tool-manifest.js");
1058
+ /**
1059
+ * Idempotent, cached tool-registry initialization: resolve the tool manifest,
1060
+ * register the built-in (default) tools, and load workspace overrides. The
1061
+ * first call runs the work; every later call returns the same settled promise
1062
+ * without repeating it, so it is safe to call from multiple entry points or
1063
+ * lazily on demand.
1064
+ *
1065
+ * This is the tool-registry analogue of the hook registry's
1066
+ * `maybeReconcileFromSentinel()` — the lazy "make sure the registry is
1067
+ * populated" step. As the registry read getters migrate to async (mirroring
1068
+ * `getHooksFor`), they will `await` this before reading the map, so a read can
1069
+ * no longer observe an un-initialized registry.
1070
+ */
1071
+ export function initializeTools(): Promise<void> {
1072
+ if (!toolsInitPromise) {
1073
+ toolsInitPromise = runToolInitialization().catch((err) => {
1074
+ // Don't cache a failed init: clear the slot so a later call retries
1075
+ // rather than returning the same rejected promise forever.
1076
+ toolsInitPromise = null;
1077
+ throw err;
1078
+ });
1079
+ }
1080
+ return toolsInitPromise;
1081
+ }
938
1082
 
1083
+ async function runToolInitialization(): Promise<void> {
939
1084
  // Capture tool names already in the registry before any manifest
940
1085
  // registrations. In production this is empty; in tests a non-skill tool
941
1086
  // may have been registered before the first initializeTools() call.
@@ -945,18 +1090,6 @@ export async function initializeTools(): Promise<void> {
945
1090
  registerTool(tool);
946
1091
  }
947
1092
 
948
- // External skill tools — registered by skill bootstrap modules via
949
- // `registerExternalTools()`. Called at init time (not spread into
950
- // `explicitTools`) so registrations that happen between module-load
951
- // and `initializeTools()` are picked up. Each provider pairs its tools
952
- // with an OwnerInfo so the registry can record ownership in
953
- // {@link ownersByName} alongside the bare `registerTool()` install.
954
- const extEntries = getExternalTools();
955
- for (const { owner, tool } of extEntries) {
956
- registerTool(tool);
957
- ownersByName.set(tool.name, owner);
958
- }
959
-
960
1093
  // Host tools are registered here so host access stays opt-in until this
961
1094
  // point in startup.
962
1095
  const hostTools = [
@@ -970,12 +1103,6 @@ export async function initializeTools(): Promise<void> {
970
1103
  registerTool(tool);
971
1104
  }
972
1105
 
973
- // CES tools - registered only when the CES feature flag is enabled.
974
- const activeCesTools = getCesToolsIfEnabled();
975
- for (const tool of activeCesTools) {
976
- registerTool(tool);
977
- }
978
-
979
1106
  registerUiSurfaceTools();
980
1107
  registerAppTools();
981
1108
  registerSystemTools();
@@ -985,29 +1112,32 @@ export async function initializeTools(): Promise<void> {
985
1112
  // arbitrary test tools that were registered before init.
986
1113
  //
987
1114
  // A pre-existing tool is included only if it is a known manifest tool
988
- // (declared in explicitTools, hostTools, or any registered external
989
- // skill tool) — e.g. a test registered a manifest tool directly before
990
- // its first initializeTools() call.
1115
+ // (declared in explicitTools or hostTools) — e.g. a test registered a
1116
+ // manifest tool directly before its first initializeTools() call.
991
1117
  if (!coreToolsSnapshot) {
992
1118
  // Core tool literals always set `name` (verified by `registerTool` —
993
1119
  // it throws on missing name). The `!` assertions reflect that
994
1120
  // invariant at the iteration sites.
995
1121
  const manifestToolNames = new Set<string>([
996
1122
  ...explicitTools.map((t) => t.name!),
997
- ...extEntries.map(({ tool }) => tool.name),
998
1123
  ...hostTools.map((t) => t.name!),
999
- ...cesTools.map((t) => t.name!),
1000
1124
  ...allUiSurfaceTools.map((t) => t.name!),
1001
1125
  ...coreAppProxyTools.map((t) => t.name!),
1002
1126
  ]);
1003
1127
 
1004
- coreToolsSnapshot = new Map<string, Tool>();
1128
+ coreToolsSnapshot = new Map<string, { tool: Tool; owner: OwnerInfo }>();
1005
1129
  for (const [name, tool] of tools) {
1006
- const ownerKind = ownersByName.get(name)?.kind;
1007
- if (ownerKind === "skill" || ownerKind === "plugin") continue;
1130
+ const owner = ownersByName.get(name);
1131
+ if (owner?.kind === "skill" || owner?.kind === "plugin") {
1132
+ continue;
1133
+ }
1008
1134
  // Exclude pre-existing tools not declared in the manifest
1009
- if (preExisting.has(name) && !manifestToolNames.has(name)) continue;
1010
- coreToolsSnapshot.set(name, tool);
1135
+ if (preExisting.has(name) && !manifestToolNames.has(name)) {
1136
+ continue;
1137
+ }
1138
+ // Every registered tool carries an owner (built-ins get DEFAULT_TOOL_OWNER
1139
+ // stamped by registerTool), so `owner` is defined here.
1140
+ coreToolsSnapshot.set(name, { tool, owner: owner! });
1011
1141
  }
1012
1142
  }
1013
1143
 
@@ -1030,46 +1160,15 @@ export async function initializeTools(): Promise<void> {
1030
1160
  // here would create a registry ↔ loader cycle.
1031
1161
  const { loadWorkspaceTools } = await import("./workspace-tools/loader.js");
1032
1162
  await loadWorkspaceTools();
1033
- }
1034
1163
 
1035
- /**
1036
- * Register any feature-flag-gated tools (CES `ces-tools`) that are enabled but
1037
- * not yet in the registry. Idempotent and safe to call repeatedly.
1038
- *
1039
- * `initializeTools()` registers the gated tools once at startup, but feature-flag
1040
- * overrides are fetched from the gateway ASYNCHRONOUSLY and non-blocking (see
1041
- * `lifecycle.ts` — `initFeatureFlagOverrides()` is fired with `void`), so
1042
- * `initializeTools()` can run BEFORE the flag value is known and register
1043
- * nothing. The daemon receives ALL overrides (local `protected/feature-flags.json`
1044
- * and remote/LaunchDarkly alike) through that async fetch, so this race affects
1045
- * every install — without this follow-up sync a flag-enabled assistant would
1046
- * never see the gated tools until a restart, which can lose the same race again.
1047
- * Call this once the override fetch resolves.
1048
- *
1049
- * Enable-direction only: it does not unregister tools whose flag was turned OFF
1050
- * (a live flip to OFF still requires a restart to drop them — the expected
1051
- * behavior for daemon-gating flags). Never throws.
1052
- */
1053
- export async function syncFlagGatedTools(): Promise<void> {
1054
- try {
1055
- const { getCesToolsIfEnabled } = await import("./tool-manifest.js");
1056
- const enabled = [...getCesToolsIfEnabled()];
1057
- const added: string[] = [];
1058
- for (const tool of enabled) {
1059
- if (tool.name && !tools.has(tool.name)) {
1060
- registerTool(tool);
1061
- added.push(tool.name);
1062
- }
1063
- }
1064
- if (added.length > 0) {
1065
- log.info({ tools: added }, "Registered flag-gated tools after flag load");
1066
- }
1067
- } catch (err) {
1068
- log.warn(
1069
- { err },
1070
- "syncFlagGatedTools failed; flag-gated tools may stay unregistered until restart",
1071
- );
1072
- }
1164
+ // Pull the active user-plugin tool set last, so core and workspace
1165
+ // registrations already own their names when plugin conflicts resolve.
1166
+ // At daemon boot the plugin mtime-cache is populated before this runs
1167
+ // (`initializePlugins()` precedes `initializeTools()` in the lifecycle);
1168
+ // in worker/standalone processes the cache is empty and this is a no-op.
1169
+ // Runtime changes keep flowing through the same reconcile, re-fired by
1170
+ // the per-turn conversation tool resolver.
1171
+ await loadPluginTools();
1073
1172
  }
1074
1173
 
1075
1174
  /**
@@ -1086,15 +1185,20 @@ export function __resetRegistryForTesting(): void {
1086
1185
  ownersByName.clear();
1087
1186
  skillRefCount.clear();
1088
1187
  pluginRefCount.clear();
1188
+ pulledPluginFingerprints.clear();
1089
1189
  // Drop the override stash too — the snapshot already represents the
1090
1190
  // pre-override baseline, so leaving stashed entries here would let a
1091
1191
  // later registerWorkspaceTools() falsely report "overridesCore: true"
1092
1192
  // against a fresh registry.
1093
1193
  coreToolOverrides.clear();
1194
+ // Clear the cached init promise so a later initializeTools() re-runs against
1195
+ // the freshly reset registry rather than returning the previous settled run.
1196
+ toolsInitPromise = null;
1094
1197
 
1095
1198
  if (coreToolsSnapshot) {
1096
- for (const [name, tool] of coreToolsSnapshot) {
1199
+ for (const [name, { tool, owner }] of coreToolsSnapshot) {
1097
1200
  tools.set(name, tool);
1201
+ ownersByName.set(name, owner);
1098
1202
  }
1099
1203
  }
1100
1204
  }
@@ -1109,16 +1213,7 @@ export function __clearRegistryForTesting(): void {
1109
1213
  ownersByName.clear();
1110
1214
  skillRefCount.clear();
1111
1215
  pluginRefCount.clear();
1216
+ pulledPluginFingerprints.clear();
1112
1217
  coreToolOverrides.clear();
1113
- }
1114
-
1115
- /**
1116
- * Drop every registered external-tool provider. Exposed exclusively for
1117
- * tests that want to verify a single `registerExternalTools()` call in
1118
- * isolation — the provider array otherwise accumulates across cases
1119
- * because ESM import caching prevents re-running the tool-manifest
1120
- * bootstrap.
1121
- */
1122
- export function __clearExternalToolProvidersForTesting(): void {
1123
- externalToolProviders.length = 0;
1218
+ toolsInitPromise = null;
1124
1219
  }