@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
@@ -12,10 +12,13 @@
12
12
  * established.
13
13
  * 2. {@link sendAudio} forwards audio chunks over the open socket with
14
14
  * backpressure-safe bufferedAmount checks.
15
- * 3. {@link stop} sends the Deepgram `CloseStream` message and waits for
15
+ * 3. {@link finalizeUtterance} sends the Deepgram `Finalize` message to
16
+ * flush provider-buffered audio into finals without closing the
17
+ * stream; the flush completion is signalled with a `finalized` event.
18
+ * 4. {@link stop} sends the Deepgram `CloseStream` message and waits for
16
19
  * the provider to flush any remaining finals before closing.
17
- * 4. The `onEvent` callback receives `partial`, `final`, `error`, and
18
- * `closed` events throughout the session lifetime.
20
+ * 5. The `onEvent` callback receives `partial`, `final`, `finalized`,
21
+ * `error`, and `closed` events throughout the session lifetime.
19
22
  *
20
23
  * Error handling:
21
24
  * - Provider WebSocket errors and unexpected closes are mapped to
@@ -77,6 +80,14 @@ const MAX_BUFFERED_AMOUNT = 1024 * 1024; // 1 MiB
77
80
  */
78
81
  const CLOSE_GRACE_MS = 5_000;
79
82
 
83
+ /**
84
+ * Grace period (ms) after sending Finalize before the adapter emits
85
+ * `finalized` on its own. Deepgram sends no `from_finalize` Results frame
86
+ * when it has no significant audio buffered, so a caller waiting on the
87
+ * completion signal would otherwise stall indefinitely.
88
+ */
89
+ const FINALIZE_FALLBACK_MS = 2_000;
90
+
80
91
  // ---------------------------------------------------------------------------
81
92
  // Options
82
93
  // ---------------------------------------------------------------------------
@@ -105,6 +116,11 @@ export interface DeepgramRealtimeOptions {
105
116
  * silence).
106
117
  */
107
118
  keepaliveIntervalMs?: number;
119
+ /**
120
+ * Grace (ms) after a Finalize before `finalized` is emitted without a
121
+ * `from_finalize` flush from Deepgram. Default: 2_000.
122
+ */
123
+ finalizeFallbackMs?: number;
108
124
  /** Audio sample rate in Hz (default: 16000). Passed through from the client WebSocket connection. */
109
125
  sampleRate?: number;
110
126
  /**
@@ -198,6 +214,12 @@ interface DeepgramStreamResponse {
198
214
  type?: string;
199
215
  is_final?: boolean;
200
216
  speech_final?: boolean;
217
+ /**
218
+ * True when this Results frame is the flush produced by a `Finalize`
219
+ * control message (see {@link DeepgramRealtimeTranscriber.finalizeUtterance}).
220
+ * The flushed transcript may be empty when nothing was buffered.
221
+ */
222
+ from_finalize?: boolean;
201
223
  channel?: DeepgramStreamChannel;
202
224
  channel_index?: number[];
203
225
  /** Duration of the audio segment in seconds. */
@@ -258,6 +280,7 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
258
280
  private readonly connectTimeoutMs: number;
259
281
  private readonly inactivityTimeoutMs: number;
260
282
  private readonly keepaliveIntervalMs: number;
283
+ private readonly finalizeFallbackMs: number;
261
284
  private readonly sampleRate: number;
262
285
  /**
263
286
  * Whether speaker diarization is requested. Forwarded to the Deepgram
@@ -288,6 +311,41 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
288
311
  /** Whether the session has been fully closed. */
289
312
  private closed = false;
290
313
 
314
+ /**
315
+ * Number of `Finalize` control frames in flight — incremented when
316
+ * {@link finalizeUtterance} sends a frame, decremented when a
317
+ * `from_finalize` flush (or the fallback timer) emits its `finalized`
318
+ * event. Deepgram answers requests in order, so each settlement pairs
319
+ * with the oldest outstanding request; counting keeps `finalized`
320
+ * emitted exactly once per request even when requests overlap.
321
+ */
322
+ private outstandingFinalizes = 0;
323
+
324
+ /**
325
+ * Number of Finalize requests the fallback timer settled whose
326
+ * `from_finalize` flush has not yet arrived. Flushes arrive in request
327
+ * order, so while this is positive the next `from_finalize` frame
328
+ * answers a fallback-settled request: it is dropped as stale instead of
329
+ * being emitted as — and settling — a newer request's flush.
330
+ *
331
+ * The debt lives only until the next Finalize send —
332
+ * {@link finalizeUtterance} resets it (rationale at the reset) — and is
333
+ * also reset on close alongside the outstanding-request drain. The
334
+ * live-voice session serializes requests (at most one in flight), so in
335
+ * practice the counter is 0 or 1; no code path relies on larger values.
336
+ */
337
+ private fallbackSettledFinalizes = 0;
338
+
339
+ /**
340
+ * Fallback timer for in-flight Finalize requests. Deepgram omits the
341
+ * `from_finalize` flush when nothing significant is buffered, so this
342
+ * timer emits `finalized` after {@link FINALIZE_FALLBACK_MS} to keep the
343
+ * completion contract, re-arming while requests remain outstanding.
344
+ * Cleared when a flush arrives (and re-armed if more are pending) or on
345
+ * cleanup.
346
+ */
347
+ private finalizeFallbackTimer: ReturnType<typeof setTimeout> | null = null;
348
+
291
349
  /** Whether stop() has been called. */
292
350
  private stopping = false;
293
351
 
@@ -318,6 +376,8 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
318
376
  options.inactivityTimeoutMs ?? DEFAULT_INACTIVITY_TIMEOUT_MS;
319
377
  this.keepaliveIntervalMs =
320
378
  options.keepaliveIntervalMs ?? DEFAULT_KEEPALIVE_INTERVAL_MS;
379
+ this.finalizeFallbackMs =
380
+ options.finalizeFallbackMs ?? FINALIZE_FALLBACK_MS;
321
381
  this.sampleRate = options.sampleRate ?? 16_000;
322
382
  this.diarize = options.diarize ?? false;
323
383
  this.utteranceBoundaryFinals = options.utteranceBoundaryFinals ?? false;
@@ -413,6 +473,56 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
413
473
  ws.send(new Uint8Array(audio));
414
474
  }
415
475
 
476
+ /**
477
+ * Flush all provider-buffered audio into final transcript(s) without
478
+ * closing the stream.
479
+ *
480
+ * Sends the Deepgram `Finalize` control message; Deepgram responds by
481
+ * flushing buffered audio as a Results frame with `from_finalize: true`
482
+ * (possibly with an empty transcript). The adapter emits the resulting
483
+ * `final` (when non-empty) followed by one `finalized` event, and the
484
+ * stream stays open for more audio.
485
+ *
486
+ * Every request settles exactly once, oldest first: by its
487
+ * `from_finalize` flush when one arrives in time, or by a fallback
488
+ * timer ({@link DeepgramRealtimeOptions.finalizeFallbackMs}) when
489
+ * Deepgram omits the flush (nothing significant buffered) or answers
490
+ * too slowly. A flush arriving after its request was fallback-settled
491
+ * but before the next Finalize is sent is dropped as stale — no
492
+ * `final`, no second `finalized` — so its text is not attributed to a
493
+ * newer request. Sending the next Finalize clears that stale-flush debt
494
+ * (see {@link fallbackSettledFinalizes}). When the socket is not open
495
+ * there is nothing buffered provider-side, so `finalized` is emitted
496
+ * immediately. {@link stop} remains the session-teardown path.
497
+ */
498
+ finalizeUtterance(): void {
499
+ const ws = this.ws;
500
+ if (this.closed || this.stopping || !ws || ws.readyState !== WS_OPEN) {
501
+ // Nothing buffered provider-side — the flush is trivially complete.
502
+ this.emitEvent({ type: "finalized" });
503
+ return;
504
+ }
505
+
506
+ try {
507
+ ws.send(JSON.stringify({ type: "Finalize" }));
508
+ } catch (err) {
509
+ log.warn({ err }, "Deepgram Finalize send failed");
510
+ this.emitEvent({ type: "finalized" });
511
+ return;
512
+ }
513
+ // Stream ordering means a slow flush for an earlier fallback-settled
514
+ // request reaches us before Deepgram processes the Finalize just
515
+ // sent, so any debt still unconsumed here is for a flush Deepgram
516
+ // omitted (the common fallback cause) and would otherwise sit forever,
517
+ // wrongly dropping this request's legitimate flush. A >fallback-window
518
+ // provider flush racing an immediate re-release could in theory land
519
+ // after this send and be misattributed to this request; the session's
520
+ // queue-head drop-guard bounds that case.
521
+ this.fallbackSettledFinalizes = 0;
522
+ this.outstandingFinalizes += 1;
523
+ this.armFinalizeFallbackTimer();
524
+ }
525
+
416
526
  stop(): void {
417
527
  if (this.closed || this.stopping) return;
418
528
  this.stopping = true;
@@ -558,14 +668,36 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
558
668
  * We emit:
559
669
  * - `partial` for `is_final: false` frames (if interim results enabled).
560
670
  * - `final` for `is_final: true` frames.
671
+ * - `finalized` after the `final` of a `from_finalize: true` flush frame
672
+ * (the response to {@link finalizeUtterance}). An empty flush emits
673
+ * only `finalized` — silence flushes carry no transcript to commit. A
674
+ * flush arriving while a fallback-settled request still awaits its
675
+ * flush is dropped entirely (no `final`, no `finalized`) — see
676
+ * {@link finalizeUtterance}.
561
677
  */
562
678
  private handleTranscriptFrame(frame: DeepgramStreamResponse): void {
563
679
  const alternative = frame.channel?.alternatives?.[0];
564
680
  const transcript = alternative?.transcript;
681
+ const fromFinalize = frame.from_finalize === true;
565
682
 
566
683
  // Extract text, defaulting to empty string for silence segments.
567
684
  const text = typeof transcript === "string" ? transcript.trim() : "";
568
685
 
686
+ // A flush arriving while fallback-settled requests await theirs is
687
+ // stale: flushes arrive in request order, so it pairs with the oldest
688
+ // fallback-settled request, whose `finalized` was already emitted.
689
+ // Emitting its text (or another `finalized`) here would attribute it
690
+ // to a newer request's utterance. The debt window closes when the
691
+ // next Finalize is sent — see finalizeUtterance.
692
+ if (fromFinalize && this.fallbackSettledFinalizes > 0) {
693
+ this.fallbackSettledFinalizes -= 1;
694
+ log.debug(
695
+ { droppedTextLength: text.length },
696
+ "Dropped a stale from_finalize flush: its request was fallback-settled",
697
+ );
698
+ return;
699
+ }
700
+
569
701
  const speakerLabel = this.diarize
570
702
  ? extractSpeakerLabel(alternative)
571
703
  : undefined;
@@ -576,22 +708,27 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
576
708
 
577
709
  if (frame.is_final) {
578
710
  if (this.utteranceBoundaryFinals) {
579
- // Withhold committed segments until an utterance boundary.
711
+ // Withhold committed segments until an utterance boundary. A
712
+ // Finalize flush is a forced boundary — flush what is pending.
580
713
  if (text.length > 0) {
581
714
  this.pendingFinalSegments.push(text);
582
715
  }
583
- if (frame.speech_final) {
716
+ if (frame.speech_final || fromFinalize) {
584
717
  this.flushPendingUtterance();
585
718
  }
586
- return;
719
+ } else if (text.length > 0 || !fromFinalize) {
720
+ // Committed transcript — emit as final. Empty Finalize flushes
721
+ // are suppressed (nothing was buffered provider-side).
722
+ this.emitEvent({
723
+ type: "final",
724
+ text,
725
+ ...(speakerLabel !== undefined ? { speakerLabel } : {}),
726
+ ...(confidence !== undefined ? { confidence } : {}),
727
+ // Mark the finalize flush so consumers can attribute it to the
728
+ // utterance that requested the flush rather than new speech.
729
+ ...(fromFinalize ? { fromFinalize: true } : {}),
730
+ });
587
731
  }
588
- // Committed transcript — emit as final.
589
- this.emitEvent({
590
- type: "final",
591
- text,
592
- ...(speakerLabel !== undefined ? { speakerLabel } : {}),
593
- ...(confidence !== undefined ? { confidence } : {}),
594
- });
595
732
  } else if (this.interimResults) {
596
733
  // Interim transcript — emit as partial.
597
734
  this.emitEvent({
@@ -601,6 +738,10 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
601
738
  ...(confidence !== undefined ? { confidence } : {}),
602
739
  });
603
740
  }
741
+
742
+ if (fromFinalize) {
743
+ this.settleOneFinalize();
744
+ }
604
745
  }
605
746
 
606
747
  /**
@@ -686,6 +827,55 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
686
827
  this.emitEvent({ type: "final", text });
687
828
  }
688
829
 
830
+ /**
831
+ * Emit `finalized` for the oldest in-flight {@link finalizeUtterance}
832
+ * request and re-arm the fallback timer while more remain outstanding.
833
+ * No-op when no request is in flight, so `finalized` is emitted at most
834
+ * once per request.
835
+ */
836
+ private settleOneFinalize(): void {
837
+ this.clearFinalizeFallbackTimer();
838
+ if (this.outstandingFinalizes === 0) {
839
+ return;
840
+ }
841
+ this.outstandingFinalizes -= 1;
842
+ this.emitEvent({ type: "finalized" });
843
+ if (this.outstandingFinalizes > 0) {
844
+ this.armFinalizeFallbackTimer();
845
+ }
846
+ }
847
+
848
+ /**
849
+ * (Re)arm the fallback timer that emits `finalized` when Deepgram
850
+ * omits the `from_finalize` flush for an in-flight Finalize request.
851
+ */
852
+ private armFinalizeFallbackTimer(): void {
853
+ if (this.closed) {
854
+ return;
855
+ }
856
+ this.clearFinalizeFallbackTimer();
857
+ this.finalizeFallbackTimer = setTimeout(() => {
858
+ this.finalizeFallbackTimer = null;
859
+ log.debug(
860
+ "Deepgram sent no from_finalize flush — emitting finalized fallback",
861
+ );
862
+ if (this.outstandingFinalizes > 0) {
863
+ // The request settles without its flush; a flush that still
864
+ // arrives before the next Finalize send is dropped as stale in
865
+ // handleTranscriptFrame.
866
+ this.fallbackSettledFinalizes += 1;
867
+ }
868
+ this.settleOneFinalize();
869
+ }, this.finalizeFallbackMs);
870
+ }
871
+
872
+ private clearFinalizeFallbackTimer(): void {
873
+ if (this.finalizeFallbackTimer !== null) {
874
+ clearTimeout(this.finalizeFallbackTimer);
875
+ this.finalizeFallbackTimer = null;
876
+ }
877
+ }
878
+
689
879
  /**
690
880
  * Emit a `closed` event and clean up all resources (timers, WebSocket).
691
881
  * Flushes any withheld utterance text first so boundary-gated sessions
@@ -700,6 +890,15 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
700
890
  this.forceClose();
701
891
 
702
892
  this.flushPendingUtterance();
893
+ // Every Finalize with no flush response must still complete before
894
+ // the stream reports closed, so waiters see one finalized per request
895
+ // followed by closed, in order.
896
+ while (this.outstandingFinalizes > 0) {
897
+ this.settleOneFinalize();
898
+ }
899
+ // Closed sessions process no further frames, so pending stale-flush
900
+ // bookkeeping resets with the drained requests.
901
+ this.fallbackSettledFinalizes = 0;
703
902
  this.emitEvent({ type: "closed" });
704
903
  this.onEvent = null;
705
904
  }
@@ -736,6 +935,7 @@ export class DeepgramRealtimeTranscriber implements StreamingTranscriber {
736
935
  clearInterval(this.keepaliveTimer);
737
936
  this.keepaliveTimer = null;
738
937
  }
938
+ this.clearFinalizeFallbackTimer();
739
939
  }
740
940
 
741
941
  /**
@@ -271,6 +271,12 @@ export interface ResolveStreamingTranscriberOptions {
271
271
  * Default: false.
272
272
  */
273
273
  utteranceBoundaryFinals?: boolean;
274
+ /**
275
+ * Silence window (ms) the provider waits before finalizing an utterance
276
+ * when `utteranceBoundaryFinals` is enabled (Deepgram `utterance_end_ms`).
277
+ * Ignored without `utteranceBoundaryFinals`. Default: 1000.
278
+ */
279
+ utteranceEndMs?: number;
274
280
  }
275
281
 
276
282
  /**
@@ -357,14 +363,17 @@ export async function resolveStreamingTranscriber(
357
363
  sampleRate: options.sampleRate,
358
364
  diarize: enableDiarization,
359
365
  utteranceBoundaryFinals: options.utteranceBoundaryFinals ?? false,
366
+ utteranceEndMs: options.utteranceEndMs,
360
367
  });
361
368
  }
362
369
 
363
370
  /**
364
- * Deepgram `utterance_end_ms` used when utterance-boundary finals are
365
- * requested. Deepgram requires >= 1000 ms; this is the pause length after
366
- * which an `UtteranceEnd` frame confirms the utterance is complete even
367
- * when `speech_final` endpointing never fired (e.g. background noise).
371
+ * Default Deepgram `utterance_end_ms` used when utterance-boundary finals
372
+ * are requested and the caller supplies no override. This is the pause
373
+ * length after which an `UtteranceEnd` frame confirms the utterance is
374
+ * complete even when `speech_final` endpointing never fired (e.g.
375
+ * background noise). Telephony callers override it via
376
+ * `calls.voice.utteranceEndMs`.
368
377
  */
369
378
  const UTTERANCE_BOUNDARY_END_MS = 1_000;
370
379
 
@@ -387,6 +396,12 @@ interface CreateStreamingTranscriberOptions {
387
396
  * `null` instead).
388
397
  */
389
398
  utteranceBoundaryFinals?: boolean;
399
+ /**
400
+ * Silence window (ms) before an utterance is finalized. Only forwarded
401
+ * to Deepgram (as `utterance_end_ms`) when `utteranceBoundaryFinals`
402
+ * is set. Defaults to {@link UTTERANCE_BOUNDARY_END_MS}.
403
+ */
404
+ utteranceEndMs?: number;
390
405
  }
391
406
 
392
407
  /**
@@ -413,7 +428,8 @@ async function createStreamingTranscriber(
413
428
  ...(options.utteranceBoundaryFinals
414
429
  ? {
415
430
  utteranceBoundaryFinals: true,
416
- utteranceEndMs: UTTERANCE_BOUNDARY_END_MS,
431
+ utteranceEndMs:
432
+ options.utteranceEndMs ?? UTTERANCE_BOUNDARY_END_MS,
417
433
  }
418
434
  : {}),
419
435
  });
@@ -449,3 +465,15 @@ async function createStreamingTranscriber(
449
465
  }
450
466
  }
451
467
  }
468
+
469
+ /**
470
+ * True when an API key resolves for the given credential provider name.
471
+ *
472
+ * Centralized here (an authorized secure-keys importer) so callers that only
473
+ * need a key-existence check don't import secure-keys directly.
474
+ */
475
+ export async function sttProviderKeyResolves(
476
+ credentialProviderName: string,
477
+ ): Promise<boolean> {
478
+ return (await getProviderKeyAsync(credentialProviderName)) !== undefined;
479
+ }
@@ -2,38 +2,83 @@ import type { ToolDefinition } from "../tools/tool-types.js";
2
2
  export type { ToolDefinition };
3
3
 
4
4
  import type { LLMCallSite } from "../config/schemas/llm.js";
5
- import { ProviderError } from "../util/errors.js";
5
+ import { ProviderError, type ProviderErrorReason } from "../util/errors.js";
6
6
 
7
7
  export interface TextContent {
8
8
  type: "text";
9
9
  text: string;
10
10
  }
11
11
 
12
+ /**
13
+ * Media payload for an image or file content block. One unified type covers
14
+ * both blocks and both storage forms:
15
+ *
16
+ * - `base64` — the bytes travel inline with the block. This is the runtime
17
+ * shape the provider transforms consume and the shape produced for a live
18
+ * (in-flight) turn.
19
+ * - `workspace_ref` — the bytes live somewhere in the workspace, not inline.
20
+ * This is the shape PERSISTED into `messages.content`, keeping large blobs
21
+ * out of the DB row and the lexical index. It is resolved back to inline
22
+ * bytes at the provider send boundary (`providers/media-resolve.ts`); any
23
+ * consumer that needs the raw bytes from stored content resolves it with
24
+ * `resolveMediaSourceData(source)`.
25
+ *
26
+ * `filename` is optional on both arms (present for file blocks and for
27
+ * generated-media references). For references, `sizeBytes` (and, for images,
28
+ * `width`/`height`) are captured at persist time so size-only consumers — the
29
+ * per-turn token estimator especially — can cost the block without reading the
30
+ * file back off disk.
31
+ */
32
+ export interface Base64MediaSource {
33
+ type: "base64";
34
+ media_type: string;
35
+ data: string;
36
+ filename?: string;
37
+ }
38
+
39
+ /**
40
+ * A reference to bytes stored in the workspace rather than inlined. The bytes
41
+ * live in the workspace attachment store, addressed by `attachmentId`, and are
42
+ * read back at the provider send boundary. User uploads are attachment rows
43
+ * already; tool-result media is materialized into attachment rows before it is
44
+ * referenced, so a single `attachmentId` resolves every case and needs no
45
+ * fallback locator.
46
+ *
47
+ * `sizeBytes` (and, for images, `width`/`height`) are the persist-time hints
48
+ * that let size-only consumers cost the block without a disk read.
49
+ */
50
+ export interface WorkspaceRefMediaSource {
51
+ type: "workspace_ref";
52
+ media_type: string;
53
+ /** Attachment row id; resolves to bytes via the attachment store. */
54
+ attachmentId: string;
55
+ /** Byte length of the referenced file. */
56
+ sizeBytes: number;
57
+ filename?: string;
58
+ /** Decoded pixel width, when the reference is an image. */
59
+ width?: number;
60
+ /** Decoded pixel height, when the reference is an image. */
61
+ height?: number;
62
+ }
63
+
64
+ export type MediaSource = Base64MediaSource | WorkspaceRefMediaSource;
65
+
12
66
  export interface ImageContent {
13
67
  type: "image";
14
- source: {
15
- type: "base64";
16
- media_type: string;
17
- data: string;
18
- };
68
+ source: MediaSource;
19
69
  }
20
70
 
21
71
  export interface FileContent {
22
72
  type: "file";
23
- source: {
24
- type: "base64";
25
- media_type: string;
26
- data: string;
27
- filename: string;
28
- };
73
+ source: MediaSource;
29
74
  extracted_text?: string;
30
75
  /**
31
- * Internal id linking this block to a row in the attachments table.
32
- * Set when the file block originates from a persisted user-message
33
- * attachment so downstream consumers (DB joins, inline-chip
34
- * positioning) can correlate the block back to its attachment id.
35
- * Stripped by `daemon/handlers/shared.ts` before sending to the
36
- * model.
76
+ * Internal id linking a base64 file block to a row in the attachments table
77
+ * so consumers (DB joins, inline-chip positioning) can correlate the block
78
+ * back to its attachment. Redundant once the block is a reference (use
79
+ * `source.attachmentId`); retained only while file media is still persisted
80
+ * inline as base64, and removed when file uploads move to references.
81
+ * Stripped by `daemon/handlers/shared.ts` before sending to the model.
37
82
  */
38
83
  _attachmentId?: string;
39
84
  }
@@ -320,6 +365,8 @@ export interface ContextOverflowErrorOptions {
320
365
  statusCode?: number;
321
366
  /** Underlying error to preserve the cause chain (standard Error.cause). */
322
367
  cause?: unknown;
368
+ /** Semantic reason override; defaults to `context_overflow`. */
369
+ reason?: ProviderErrorReason;
323
370
  }
324
371
 
325
372
  /**
@@ -347,12 +394,10 @@ export class ContextOverflowError extends ProviderError {
347
394
  provider: string,
348
395
  options: ContextOverflowErrorOptions = {},
349
396
  ) {
350
- super(
351
- message,
352
- provider,
353
- options.statusCode ?? 400,
354
- options.cause !== undefined ? { cause: options.cause } : undefined,
355
- );
397
+ super(message, provider, options.statusCode ?? 400, {
398
+ reason: options.reason ?? "context_overflow",
399
+ ...(options.cause !== undefined ? { cause: options.cause } : {}),
400
+ });
356
401
  this.name = "ContextOverflowError";
357
402
  this.actualTokens = options.actualTokens;
358
403
  this.maxTokens = options.maxTokens;
@@ -38,6 +38,17 @@ export const MANAGED_ROUTABLE_PROVIDERS: ReadonlySet<string> = new Set(
38
38
  */
39
39
  export const VELLUM_MANAGED_PROVIDER = "vellum";
40
40
 
41
+ /**
42
+ * Name of the single provider-agnostic Vellum-managed connection row. The
43
+ * connection carries platform auth and the `vellum` sentinel instead of a
44
+ * real upstream; the upstream is chosen per-request from the resolving
45
+ * profile's provider. Lives in this pure module (rather than
46
+ * `inference/connections.ts`, which re-exports it) so leaf consumers like the
47
+ * default-profile catalog can reference it without importing the
48
+ * DB-connected module graph.
49
+ */
50
+ export const VELLUM_MANAGED_CONNECTION_NAME = "vellum";
51
+
41
52
  /**
42
53
  * Whether a connection is the provider-agnostic Vellum-managed connection.
43
54
  * Structurally typed so this stays a pure module with no connection-schema