@vellumai/assistant 0.4.25 → 0.4.29

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 (1302) hide show
  1. package/.env.example +2 -2
  2. package/AGENTS.md +5 -0
  3. package/ARCHITECTURE.md +169 -69
  4. package/Dockerfile +1 -1
  5. package/README.md +111 -112
  6. package/bun.lock +0 -3
  7. package/docs/architecture/integrations.md +0 -1
  8. package/docs/architecture/memory.md +100 -63
  9. package/docs/error-handling.md +71 -0
  10. package/docs/runbook-trusted-contacts.md +10 -9
  11. package/docs/trusted-contact-access.md +48 -46
  12. package/package.json +3 -3
  13. package/scripts/compare-benchmarks.sh +12 -5
  14. package/scripts/ipc/check-swift-decoder-drift.ts +3 -0
  15. package/scripts/test.sh +89 -5
  16. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +46 -0
  17. package/src/__tests__/access-request-decision.test.ts +0 -1
  18. package/src/__tests__/account-registry.test.ts +1 -1
  19. package/src/__tests__/actor-token-service.test.ts +36 -23
  20. package/src/__tests__/agent-loop-thinking.test.ts +29 -13
  21. package/src/__tests__/agent-loop.test.ts +2 -1
  22. package/src/__tests__/app-builder-tool-scripts.test.ts +1 -1
  23. package/src/__tests__/approval-routes-http.test.ts +2 -2
  24. package/src/__tests__/asset-materialize-tool.test.ts +7 -7
  25. package/src/__tests__/asset-search-tool.test.ts +7 -7
  26. package/src/__tests__/browser-fill-credential.test.ts +1 -1
  27. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +217 -0
  28. package/src/__tests__/call-controller.test.ts +168 -58
  29. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  30. package/src/__tests__/channel-approval-routes.test.ts +113 -70
  31. package/src/__tests__/channel-guardian.test.ts +173 -282
  32. package/src/__tests__/channel-readiness-service.test.ts +6 -2
  33. package/src/__tests__/channel-reply-delivery.test.ts +2 -2
  34. package/src/__tests__/channel-retry-sweep.test.ts +14 -14
  35. package/src/__tests__/checker.test.ts +12 -31
  36. package/src/__tests__/claude-code-tool-profiles.test.ts +1 -1
  37. package/src/__tests__/commit-message-enrichment-service.test.ts +67 -59
  38. package/src/__tests__/compaction.benchmark.test.ts +6 -2
  39. package/src/__tests__/computer-use-tools.test.ts +1 -1
  40. package/src/__tests__/config-schema.test.ts +66 -7
  41. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +29 -29
  42. package/src/__tests__/contacts-tools.test.ts +63 -2
  43. package/src/__tests__/context-overflow-approval.test.ts +141 -0
  44. package/src/__tests__/context-overflow-policy.test.ts +171 -0
  45. package/src/__tests__/context-overflow-reducer.test.ts +533 -0
  46. package/src/__tests__/context-window-manager.test.ts +97 -0
  47. package/src/__tests__/conversation-attention-telegram.test.ts +38 -46
  48. package/src/__tests__/conversation-pairing.test.ts +2 -2
  49. package/src/__tests__/conversation-routes-guardian-reply.test.ts +214 -10
  50. package/src/__tests__/conversation-routes.test.ts +4 -7
  51. package/src/__tests__/credential-broker-browser-fill.test.ts +13 -2
  52. package/src/__tests__/credential-security-e2e.test.ts +1 -1
  53. package/src/__tests__/credential-security-invariants.test.ts +1 -1
  54. package/src/__tests__/credential-vault-unit.test.ts +1 -1
  55. package/src/__tests__/credential-vault.test.ts +11 -8
  56. package/src/__tests__/daemon-lifecycle.test.ts +2 -2
  57. package/src/__tests__/daemon-server-session-init.test.ts +6 -6
  58. package/src/__tests__/delete-managed-skill-tool.test.ts +1 -1
  59. package/src/__tests__/deterministic-verification-control-plane.test.ts +2 -2
  60. package/src/__tests__/emit-signal-routing-intent.test.ts +4 -0
  61. package/src/__tests__/encrypted-store.test.ts +10 -7
  62. package/src/__tests__/ephemeral-permissions.test.ts +3 -3
  63. package/src/__tests__/file-edit-tool.test.ts +1 -1
  64. package/src/__tests__/file-read-tool.test.ts +1 -1
  65. package/src/__tests__/file-write-tool.test.ts +1 -1
  66. package/src/__tests__/fixtures/credential-security-fixtures.ts +87 -64
  67. package/src/__tests__/fixtures/media-reuse-fixtures.ts +37 -31
  68. package/src/__tests__/fixtures/mock-signup-server.ts +171 -115
  69. package/src/__tests__/fixtures/proxy-fixtures.ts +39 -39
  70. package/src/__tests__/followup-tools.test.ts +1 -1
  71. package/src/__tests__/gateway-only-guard.test.ts +3 -0
  72. package/src/__tests__/guardian-actions-endpoint.test.ts +543 -1
  73. package/src/__tests__/guardian-control-plane-policy.test.ts +15 -15
  74. package/src/__tests__/guardian-dispatch.test.ts +79 -1
  75. package/src/__tests__/guardian-grant-minting.test.ts +14 -14
  76. package/src/__tests__/guardian-outbound-http.test.ts +1 -2
  77. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -41
  78. package/src/__tests__/guardian-routing-invariants.test.ts +2 -5
  79. package/src/__tests__/guardian-routing-state.test.ts +36 -52
  80. package/src/__tests__/guardian-verification-intent-routing.test.ts +4 -6
  81. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  82. package/src/__tests__/handle-user-message-secret-resume.test.ts +39 -1
  83. package/src/__tests__/handlers-cu-observation-blob.test.ts +21 -10
  84. package/src/__tests__/handlers-telegram-config.test.ts +14 -14
  85. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +23 -2
  86. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  87. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  88. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  89. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  90. package/src/__tests__/heartbeat-service.test.ts +45 -2
  91. package/src/__tests__/host-file-edit-tool.test.ts +1 -1
  92. package/src/__tests__/host-file-read-tool.test.ts +1 -1
  93. package/src/__tests__/host-file-write-tool.test.ts +1 -1
  94. package/src/__tests__/host-shell-tool.test.ts +1 -1
  95. package/src/__tests__/inbound-invite-redemption.test.ts +16 -18
  96. package/src/__tests__/ingress-reconcile.test.ts +2 -2
  97. package/src/__tests__/ingress-routes-http.test.ts +2 -1
  98. package/src/__tests__/integrations-cli.test.ts +256 -0
  99. package/src/__tests__/intent-routing.test.ts +4 -5
  100. package/src/__tests__/invite-redemption-service.test.ts +4 -3
  101. package/src/__tests__/ipc-snapshot.test.ts +28 -0
  102. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -1
  103. package/src/__tests__/mcp-cli.test.ts +136 -57
  104. package/src/__tests__/mcp-client-auth.test.ts +95 -0
  105. package/src/__tests__/media-generate-image.test.ts +2 -2
  106. package/src/__tests__/media-reuse-story.e2e.test.ts +8 -8
  107. package/src/__tests__/memory-regressions.test.ts +6 -6
  108. package/src/__tests__/messaging-send-tool.test.ts +1 -1
  109. package/src/__tests__/migration-cross-version-compatibility.test.ts +1855 -0
  110. package/src/__tests__/migration-export-http.test.ts +540 -0
  111. package/src/__tests__/migration-import-commit-http.test.ts +823 -0
  112. package/src/__tests__/migration-import-preflight-http.test.ts +755 -0
  113. package/src/__tests__/migration-parity-persistence.test.ts +1854 -0
  114. package/src/__tests__/migration-transport.test.ts +904 -0
  115. package/src/__tests__/migration-validate-http.test.ts +698 -0
  116. package/src/__tests__/migration-wizard.test.ts +1289 -0
  117. package/src/__tests__/non-member-access-request.test.ts +17 -17
  118. package/src/__tests__/notification-decision-strategy.test.ts +110 -2
  119. package/src/__tests__/notification-deep-link.test.ts +18 -0
  120. package/src/__tests__/notification-guardian-path.test.ts +0 -1
  121. package/src/__tests__/oauth2-gateway-transport.test.ts +1 -1
  122. package/src/__tests__/playbook-execution.test.ts +1 -1
  123. package/src/__tests__/playbook-tools.test.ts +1 -1
  124. package/src/__tests__/provider-streaming.benchmark.test.ts +3 -1
  125. package/src/__tests__/proxy-approval-callback.test.ts +1 -1
  126. package/src/__tests__/qdrant-manager.test.ts +40 -11
  127. package/src/__tests__/rebind-secrets-screen.test.ts +839 -0
  128. package/src/__tests__/recording-handler.test.ts +2 -2
  129. package/src/__tests__/recording-intent-handler.test.ts +3 -3
  130. package/src/__tests__/recording-state-machine.test.ts +2 -2
  131. package/src/__tests__/relay-server.test.ts +506 -227
  132. package/src/__tests__/reminder-store.test.ts +8 -0
  133. package/src/__tests__/reminder.test.ts +8 -0
  134. package/src/__tests__/{resolve-guardian-trust-class.test.ts → resolve-trust-class.test.ts} +11 -17
  135. package/src/__tests__/scaffold-managed-skill-tool.test.ts +1 -1
  136. package/src/__tests__/schedule-tools.test.ts +1 -1
  137. package/src/__tests__/script-proxy-certs.test.ts +1 -1
  138. package/src/__tests__/script-proxy-connect-tunnel.test.ts +2 -3
  139. package/src/__tests__/script-proxy-decision-trace.test.ts +2 -2
  140. package/src/__tests__/script-proxy-http-forwarder.test.ts +1 -1
  141. package/src/__tests__/script-proxy-injection-runtime.test.ts +5 -5
  142. package/src/__tests__/script-proxy-mitm-handler.test.ts +4 -4
  143. package/src/__tests__/script-proxy-policy-runtime.test.ts +2 -2
  144. package/src/__tests__/script-proxy-policy.test.ts +2 -2
  145. package/src/__tests__/script-proxy-session-manager.test.ts +4 -7
  146. package/src/__tests__/script-proxy-session-runtime.test.ts +1 -6
  147. package/src/__tests__/secret-onetime-send.test.ts +4 -4
  148. package/src/__tests__/secret-scanner-executor.test.ts +2 -2
  149. package/src/__tests__/send-endpoint-busy.test.ts +11 -9
  150. package/src/__tests__/send-notification-tool.test.ts +2 -2
  151. package/src/__tests__/session-abort-tool-results.test.ts +17 -2
  152. package/src/__tests__/session-agent-loop.test.ts +456 -35
  153. package/src/__tests__/session-confirmation-signals.test.ts +3 -2
  154. package/src/__tests__/session-conflict-gate.test.ts +20 -3
  155. package/src/__tests__/session-init.benchmark.test.ts +2 -2
  156. package/src/__tests__/session-load-history-repair.test.ts +7 -7
  157. package/src/__tests__/session-pre-run-repair.test.ts +17 -2
  158. package/src/__tests__/session-profile-injection.test.ts +20 -3
  159. package/src/__tests__/session-provider-retry-repair.test.ts +86 -6
  160. package/src/__tests__/session-queue.test.ts +33 -18
  161. package/src/__tests__/session-runtime-assembly.test.ts +147 -1
  162. package/src/__tests__/session-runtime-workspace.test.ts +40 -0
  163. package/src/__tests__/session-slash-known.test.ts +21 -3
  164. package/src/__tests__/session-slash-queue.test.ts +17 -2
  165. package/src/__tests__/session-slash-unknown.test.ts +17 -2
  166. package/src/__tests__/session-surfaces-deselection.test.ts +208 -0
  167. package/src/__tests__/session-workspace-cache-state.test.ts +2 -2
  168. package/src/__tests__/session-workspace-injection.test.ts +17 -2
  169. package/src/__tests__/session-workspace-tool-tracking.test.ts +17 -2
  170. package/src/__tests__/shell-credential-ref.test.ts +1 -1
  171. package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
  172. package/src/__tests__/skill-load-feature-flag.test.ts +1 -1
  173. package/src/__tests__/skill-load-tool.test.ts +1 -1
  174. package/src/__tests__/skill-script-runner-host.test.ts +1 -1
  175. package/src/__tests__/skill-script-runner-sandbox.test.ts +1 -1
  176. package/src/__tests__/skill-script-runner.test.ts +1 -1
  177. package/src/__tests__/skill-tool-factory.test.ts +1 -1
  178. package/src/__tests__/slack-skill.test.ts +3 -2
  179. package/src/__tests__/subagent-tools.test.ts +3 -3
  180. package/src/__tests__/swarm-recursion.test.ts +1 -1
  181. package/src/__tests__/swarm-session-integration.test.ts +1 -1
  182. package/src/__tests__/swarm-tool.test.ts +1 -1
  183. package/src/__tests__/task-management-tools.test.ts +1 -1
  184. package/src/__tests__/task-tools.test.ts +1 -1
  185. package/src/__tests__/terminal-tools.test.ts +1 -1
  186. package/src/__tests__/test-support/browser-skill-harness.ts +39 -27
  187. package/src/__tests__/test-support/computer-use-skill-harness.ts +14 -14
  188. package/src/__tests__/tool-approval-handler.test.ts +15 -15
  189. package/src/__tests__/tool-execution-abort-cleanup.test.ts +1 -1
  190. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -1
  191. package/src/__tests__/tool-executor-lifecycle-events.test.ts +2 -2
  192. package/src/__tests__/tool-executor-shell-integration.test.ts +1 -1
  193. package/src/__tests__/tool-executor.test.ts +23 -182
  194. package/src/__tests__/tool-grant-request-escalation.test.ts +11 -11
  195. package/src/__tests__/tool-permission-simulate-handler.test.ts +4 -4
  196. package/src/__tests__/transfer-progress-screen.test.ts +1180 -0
  197. package/src/__tests__/trust-context-guards.test.ts +25 -29
  198. package/src/__tests__/trusted-contact-approval-notifier.test.ts +23 -21
  199. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +37 -40
  200. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +29 -25
  201. package/src/__tests__/trusted-contact-multichannel.test.ts +25 -24
  202. package/src/__tests__/trusted-contact-verification.test.ts +63 -77
  203. package/src/__tests__/turn-commit.test.ts +18 -18
  204. package/src/__tests__/twilio-provider.test.ts +7 -7
  205. package/src/__tests__/validation-results-screen.test.ts +1107 -0
  206. package/src/__tests__/view-image-tool.test.ts +1 -1
  207. package/src/__tests__/voice-invite-redemption.test.ts +3 -2
  208. package/src/__tests__/voice-scoped-grant-consumer.test.ts +12 -12
  209. package/src/__tests__/voice-session-bridge.test.ts +24 -24
  210. package/src/agent/attachments.ts +3 -1
  211. package/src/agent/loop.ts +13 -13
  212. package/src/agent/message-types.ts +13 -7
  213. package/src/amazon/cart.ts +59 -32
  214. package/src/amazon/checkout.ts +25 -14
  215. package/src/amazon/client.ts +68 -48
  216. package/src/amazon/product-details.ts +3 -3
  217. package/src/amazon/request-extractor.ts +46 -31
  218. package/src/amazon/search.ts +6 -4
  219. package/src/amazon/session.ts +33 -24
  220. package/src/approvals/AGENTS.md +26 -0
  221. package/src/approvals/approval-primitive.ts +87 -64
  222. package/src/approvals/guardian-decision-primitive.ts +172 -81
  223. package/src/approvals/guardian-request-resolvers.ts +262 -155
  224. package/src/autonomy/autonomy-resolver.ts +7 -5
  225. package/src/autonomy/autonomy-store.ts +34 -19
  226. package/src/autonomy/disposition-mapper.ts +5 -5
  227. package/src/autonomy/index.ts +6 -6
  228. package/src/autonomy/types.ts +7 -3
  229. package/src/browser-extension-relay/client.ts +50 -19
  230. package/src/browser-extension-relay/protocol.ts +11 -11
  231. package/src/browser-extension-relay/server.ts +45 -20
  232. package/src/bundler/app-bundler.ts +75 -50
  233. package/src/bundler/bundle-scanner.ts +145 -41
  234. package/src/bundler/bundle-signer.ts +16 -14
  235. package/src/bundler/signature-verifier.ts +36 -33
  236. package/src/calls/call-constants.ts +10 -3
  237. package/src/calls/call-controller.ts +499 -235
  238. package/src/calls/call-conversation-messages.ts +25 -15
  239. package/src/calls/call-domain.ts +401 -148
  240. package/src/calls/call-pointer-message-composer.ts +26 -21
  241. package/src/calls/call-pointer-messages.ts +52 -28
  242. package/src/calls/call-recovery.ts +53 -37
  243. package/src/calls/call-state-machine.ts +37 -7
  244. package/src/calls/call-state.ts +35 -13
  245. package/src/calls/call-store.ts +165 -77
  246. package/src/calls/elevenlabs-client.ts +39 -20
  247. package/src/calls/guardian-action-sweep.ts +42 -24
  248. package/src/calls/guardian-dispatch.ts +79 -56
  249. package/src/calls/guardian-question-copy.ts +28 -23
  250. package/src/calls/relay-server.ts +1121 -532
  251. package/src/calls/speaker-identification.ts +21 -15
  252. package/src/calls/twilio-config.ts +34 -17
  253. package/src/calls/twilio-provider.ts +108 -55
  254. package/src/calls/twilio-rest.ts +212 -100
  255. package/src/calls/twilio-routes.ts +165 -92
  256. package/src/calls/types.ts +55 -7
  257. package/src/calls/voice-quality.ts +6 -4
  258. package/src/calls/voice-session-bridge.ts +181 -133
  259. package/src/channels/config.ts +17 -13
  260. package/src/channels/types.ts +38 -10
  261. package/src/cli/amazon.ts +333 -227
  262. package/src/cli/config-commands.ts +236 -146
  263. package/src/cli/core-commands.ts +403 -329
  264. package/src/cli/email-guardrails.ts +38 -19
  265. package/src/cli/email.ts +207 -153
  266. package/src/cli/influencer.ts +58 -56
  267. package/src/cli/integrations.ts +362 -0
  268. package/src/cli/ipc-client.ts +24 -19
  269. package/src/cli/map.ts +176 -129
  270. package/src/cli/mcp.ts +260 -152
  271. package/src/cli/sequence.ts +165 -107
  272. package/src/cli/twitter.ts +302 -218
  273. package/src/cli.ts +418 -279
  274. package/src/commands/cc-command-registry.ts +52 -27
  275. package/src/config/agent-schema.ts +217 -134
  276. package/src/config/assistant-feature-flags.ts +23 -18
  277. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +19 -0
  278. package/src/config/bundled-skills/app-builder/tools/app-create.ts +7 -4
  279. package/src/config/bundled-skills/app-builder/tools/app-delete.ts +6 -3
  280. package/src/config/bundled-skills/app-builder/tools/app-file-edit.ts +7 -4
  281. package/src/config/bundled-skills/app-builder/tools/app-file-list.ts +6 -3
  282. package/src/config/bundled-skills/app-builder/tools/app-file-read.ts +6 -3
  283. package/src/config/bundled-skills/app-builder/tools/app-file-write.ts +7 -4
  284. package/src/config/bundled-skills/app-builder/tools/app-list.ts +6 -3
  285. package/src/config/bundled-skills/app-builder/tools/app-query.ts +6 -3
  286. package/src/config/bundled-skills/app-builder/tools/app-update.ts +6 -3
  287. package/src/config/bundled-skills/browser/tools/browser-click.ts +5 -2
  288. package/src/config/bundled-skills/browser/tools/browser-close.ts +5 -2
  289. package/src/config/bundled-skills/browser/tools/browser-extract.ts +5 -2
  290. package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +5 -2
  291. package/src/config/bundled-skills/browser/tools/browser-hover.ts +5 -2
  292. package/src/config/bundled-skills/browser/tools/browser-navigate.ts +5 -2
  293. package/src/config/bundled-skills/browser/tools/browser-press-key.ts +5 -2
  294. package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +5 -2
  295. package/src/config/bundled-skills/browser/tools/browser-scroll.ts +5 -2
  296. package/src/config/bundled-skills/browser/tools/browser-select-option.ts +5 -2
  297. package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +5 -2
  298. package/src/config/bundled-skills/browser/tools/browser-type.ts +5 -2
  299. package/src/config/bundled-skills/browser/tools/browser-wait-for-download.ts +13 -6
  300. package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +5 -2
  301. package/src/config/bundled-skills/claude-code/TOOLS.json +4 -0
  302. package/src/config/bundled-skills/claude-code/tools/claude-code.ts +5 -2
  303. package/src/config/bundled-skills/computer-use/SKILL.md +2 -2
  304. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +6 -3
  305. package/src/config/bundled-skills/computer-use/tools/computer-use-done.ts +6 -3
  306. package/src/config/bundled-skills/computer-use/tools/computer-use-double-click.ts +10 -3
  307. package/src/config/bundled-skills/computer-use/tools/computer-use-drag.ts +6 -3
  308. package/src/config/bundled-skills/computer-use/tools/computer-use-key.ts +6 -3
  309. package/src/config/bundled-skills/computer-use/tools/computer-use-open-app.ts +6 -3
  310. package/src/config/bundled-skills/computer-use/tools/computer-use-request-control.ts +10 -3
  311. package/src/config/bundled-skills/computer-use/tools/computer-use-respond.ts +6 -3
  312. package/src/config/bundled-skills/computer-use/tools/computer-use-right-click.ts +10 -3
  313. package/src/config/bundled-skills/computer-use/tools/computer-use-run-applescript.ts +10 -3
  314. package/src/config/bundled-skills/computer-use/tools/computer-use-scroll.ts +6 -3
  315. package/src/config/bundled-skills/computer-use/tools/computer-use-type-text.ts +6 -3
  316. package/src/config/bundled-skills/computer-use/tools/computer-use-wait.ts +6 -3
  317. package/src/config/bundled-skills/configure-settings/SKILL.md +28 -14
  318. package/src/config/bundled-skills/contacts/SKILL.md +446 -15
  319. package/src/config/bundled-skills/contacts/tools/contact-merge.ts +99 -20
  320. package/src/config/bundled-skills/contacts/tools/contact-search.ts +74 -17
  321. package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +89 -26
  322. package/src/config/bundled-skills/document/tools/document-create.ts +5 -2
  323. package/src/config/bundled-skills/document/tools/document-update.ts +5 -2
  324. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -7
  325. package/src/config/bundled-skills/email-setup/SKILL.md +9 -9
  326. package/src/config/bundled-skills/followups/tools/followup-create.ts +5 -2
  327. package/src/config/bundled-skills/followups/tools/followup-list.ts +5 -2
  328. package/src/config/bundled-skills/followups/tools/followup-resolve.ts +5 -2
  329. package/src/config/bundled-skills/google-calendar/calendar-client.ts +44 -32
  330. package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +11 -5
  331. package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +13 -7
  332. package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +11 -5
  333. package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +13 -7
  334. package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +28 -12
  335. package/src/config/bundled-skills/google-calendar/tools/shared.ts +6 -4
  336. package/src/config/bundled-skills/google-calendar/types.ts +3 -3
  337. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +46 -24
  338. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +36 -19
  339. package/src/config/bundled-skills/knowledge-graph/tools/graph-query.ts +60 -35
  340. package/src/config/bundled-skills/mcp-setup/SKILL.md +75 -0
  341. package/src/config/bundled-skills/media-processing/SKILL.md +55 -15
  342. package/src/config/bundled-skills/media-processing/TOOLS.json +20 -2
  343. package/src/config/bundled-skills/media-processing/__tests__/concurrency-pool.test.ts +12 -10
  344. package/src/config/bundled-skills/media-processing/__tests__/cost-tracker.test.ts +34 -19
  345. package/src/config/bundled-skills/media-processing/__tests__/preprocess.test.ts +82 -66
  346. package/src/config/bundled-skills/media-processing/services/audio-transcribe.ts +148 -0
  347. package/src/config/bundled-skills/media-processing/services/concurrency-pool.ts +1 -1
  348. package/src/config/bundled-skills/media-processing/services/cost-tracker.ts +8 -3
  349. package/src/config/bundled-skills/media-processing/services/gemini-map.ts +117 -53
  350. package/src/config/bundled-skills/media-processing/services/gemini-video.ts +273 -0
  351. package/src/config/bundled-skills/media-processing/services/preprocess.ts +185 -97
  352. package/src/config/bundled-skills/media-processing/services/processing-pipeline.ts +32 -27
  353. package/src/config/bundled-skills/media-processing/services/reduce.ts +101 -24
  354. package/src/config/bundled-skills/media-processing/tools/analyze-keyframes.ts +121 -55
  355. package/src/config/bundled-skills/media-processing/tools/extract-keyframes.ts +58 -24
  356. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +177 -91
  357. package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +98 -70
  358. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +59 -19
  359. package/src/config/bundled-skills/media-processing/tools/media-status.ts +26 -10
  360. package/src/config/bundled-skills/media-processing/tools/query-media-events.ts +29 -14
  361. package/src/config/bundled-skills/messaging/SKILL.md +7 -5
  362. package/src/config/bundled-skills/messaging/TOOLS.json +7 -7
  363. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +31 -13
  364. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +16 -10
  365. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +18 -9
  366. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +23 -16
  367. package/src/config/bundled-skills/messaging/tools/gmail-draft.ts +28 -12
  368. package/src/config/bundled-skills/messaging/tools/gmail-filters.ts +41 -21
  369. package/src/config/bundled-skills/messaging/tools/gmail-follow-up.ts +44 -23
  370. package/src/config/bundled-skills/messaging/tools/gmail-forward.ts +73 -33
  371. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +15 -9
  372. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +22 -14
  373. package/src/config/bundled-skills/messaging/tools/gmail-outreach-scan.ts +99 -50
  374. package/src/config/bundled-skills/messaging/tools/gmail-send-draft.ts +14 -8
  375. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +63 -44
  376. package/src/config/bundled-skills/messaging/tools/gmail-sender-digest.ts +90 -46
  377. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +43 -22
  378. package/src/config/bundled-skills/messaging/tools/gmail-trash.ts +15 -9
  379. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +51 -22
  380. package/src/config/bundled-skills/messaging/tools/gmail-unsubscribe.ts +62 -26
  381. package/src/config/bundled-skills/messaging/tools/gmail-vacation.ts +34 -19
  382. package/src/config/bundled-skills/messaging/tools/google-contacts.ts +32 -16
  383. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +10 -4
  384. package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +91 -47
  385. package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +21 -9
  386. package/src/config/bundled-skills/messaging/tools/messaging-auth-test.ts +9 -3
  387. package/src/config/bundled-skills/messaging/tools/messaging-draft.ts +30 -17
  388. package/src/config/bundled-skills/messaging/tools/messaging-list-conversations.ts +10 -4
  389. package/src/config/bundled-skills/messaging/tools/messaging-mark-read.ts +14 -6
  390. package/src/config/bundled-skills/messaging/tools/messaging-read.ts +16 -5
  391. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +63 -36
  392. package/src/config/bundled-skills/messaging/tools/messaging-search.ts +10 -4
  393. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +30 -12
  394. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +48 -29
  395. package/src/config/bundled-skills/messaging/tools/scan-result-store.ts +20 -6
  396. package/src/config/bundled-skills/messaging/tools/send-notification.ts +1 -1
  397. package/src/config/bundled-skills/messaging/tools/sequence-analytics.ts +59 -22
  398. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +13 -7
  399. package/src/config/bundled-skills/messaging/tools/sequence-create.ts +27 -12
  400. package/src/config/bundled-skills/messaging/tools/sequence-delete.ts +14 -6
  401. package/src/config/bundled-skills/messaging/tools/sequence-enroll.ts +30 -11
  402. package/src/config/bundled-skills/messaging/tools/sequence-enrollment-list.ts +16 -8
  403. package/src/config/bundled-skills/messaging/tools/sequence-get.ts +31 -13
  404. package/src/config/bundled-skills/messaging/tools/sequence-import.ts +38 -22
  405. package/src/config/bundled-skills/messaging/tools/sequence-list.ts +16 -7
  406. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +29 -10
  407. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +16 -8
  408. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +35 -16
  409. package/src/config/bundled-skills/messaging/tools/shared.ts +26 -12
  410. package/src/config/bundled-skills/notifications/tools/send-notification.ts +69 -34
  411. package/src/config/bundled-skills/notifications/tools/shared.ts +1 -1
  412. package/src/config/bundled-skills/phone-calls/SKILL.md +47 -49
  413. package/src/config/bundled-skills/phone-calls/tools/call-end.ts +1 -1
  414. package/src/config/bundled-skills/phone-calls/tools/call-start.ts +1 -1
  415. package/src/config/bundled-skills/phone-calls/tools/call-status.ts +1 -1
  416. package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +91 -51
  417. package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +30 -16
  418. package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +66 -27
  419. package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +89 -42
  420. package/src/config/bundled-skills/public-ingress/SKILL.md +26 -19
  421. package/src/config/bundled-skills/reminder/tools/reminder-cancel.ts +5 -2
  422. package/src/config/bundled-skills/reminder/tools/reminder-create.ts +5 -2
  423. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +5 -2
  424. package/src/config/bundled-skills/schedule/tools/schedule-create.ts +5 -2
  425. package/src/config/bundled-skills/schedule/tools/schedule-delete.ts +5 -2
  426. package/src/config/bundled-skills/schedule/tools/schedule-list.ts +5 -2
  427. package/src/config/bundled-skills/schedule/tools/schedule-update.ts +5 -2
  428. package/src/config/bundled-skills/screen-recording/SKILL.md +11 -3
  429. package/src/config/bundled-skills/self-upgrade/SKILL.md +9 -8
  430. package/src/config/bundled-skills/slack/TOOLS.json +33 -15
  431. package/src/config/bundled-skills/slack/tools/shared.ts +7 -5
  432. package/src/config/bundled-skills/slack/tools/slack-add-reaction.ts +11 -5
  433. package/src/config/bundled-skills/slack/tools/slack-channel-details.ts +11 -5
  434. package/src/config/bundled-skills/slack/tools/slack-configure-channels.ts +46 -16
  435. package/src/config/bundled-skills/slack/tools/slack-delete-message.ts +11 -5
  436. package/src/config/bundled-skills/slack/tools/slack-edit-message.ts +28 -0
  437. package/src/config/bundled-skills/slack/tools/slack-leave-channel.ts +12 -6
  438. package/src/config/bundled-skills/sms-setup/SKILL.md +5 -8
  439. package/src/config/bundled-skills/subagent/tools/subagent-abort.ts +5 -2
  440. package/src/config/bundled-skills/subagent/tools/subagent-message.ts +5 -2
  441. package/src/config/bundled-skills/subagent/tools/subagent-read.ts +5 -2
  442. package/src/config/bundled-skills/subagent/tools/subagent-spawn.ts +5 -2
  443. package/src/config/bundled-skills/subagent/tools/subagent-status.ts +5 -2
  444. package/src/config/bundled-skills/tasks/tools/task-delete.ts +5 -2
  445. package/src/config/bundled-skills/tasks/tools/task-list-add.ts +5 -2
  446. package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +5 -2
  447. package/src/config/bundled-skills/tasks/tools/task-list-show.ts +5 -2
  448. package/src/config/bundled-skills/tasks/tools/task-list-update.ts +5 -2
  449. package/src/config/bundled-skills/tasks/tools/task-list.ts +5 -2
  450. package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +5 -2
  451. package/src/config/bundled-skills/tasks/tools/task-run.ts +5 -2
  452. package/src/config/bundled-skills/tasks/tools/task-save.ts +5 -2
  453. package/src/config/bundled-skills/telegram-setup/SKILL.md +7 -8
  454. package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +232 -127
  455. package/src/config/bundled-skills/twilio-setup/SKILL.md +7 -12
  456. package/src/config/bundled-skills/twitter/SKILL.md +19 -2
  457. package/src/config/bundled-skills/voice-setup/SKILL.md +5 -5
  458. package/src/config/bundled-skills/watcher/tools/watcher-create.ts +5 -2
  459. package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +5 -2
  460. package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +5 -2
  461. package/src/config/bundled-skills/watcher/tools/watcher-list.ts +5 -2
  462. package/src/config/bundled-skills/watcher/tools/watcher-update.ts +5 -2
  463. package/src/config/bundled-skills/weather/tools/get-weather.ts +5 -2
  464. package/src/config/calls-schema.ts +108 -63
  465. package/src/config/computer-use-prompt.ts +7 -7
  466. package/src/config/core-schema.ts +239 -155
  467. package/src/config/defaults.ts +2 -2
  468. package/src/config/elevenlabs-schema.ts +15 -15
  469. package/src/config/env-registry.ts +33 -33
  470. package/src/config/feature-flag-registry.json +31 -7
  471. package/src/config/loader.ts +118 -58
  472. package/src/config/mcp-schema.ts +29 -15
  473. package/src/config/memory-schema.ts +434 -229
  474. package/src/config/notifications-schema.ts +4 -4
  475. package/src/config/sandbox-schema.ts +2 -2
  476. package/src/config/schema.ts +12 -2
  477. package/src/config/skill-state.ts +27 -15
  478. package/src/config/skills-schema.ts +72 -23
  479. package/src/config/skills.ts +303 -143
  480. package/src/config/system-prompt.ts +25 -6
  481. package/src/config/types.ts +1 -1
  482. package/src/config/update-bulletin-format.ts +3 -3
  483. package/src/config/update-bulletin-state.ts +15 -6
  484. package/src/config/update-bulletin-template-path.ts +8 -4
  485. package/src/config/update-bulletin.ts +33 -14
  486. package/src/config/user-reference.ts +8 -8
  487. package/src/contacts/contact-events.ts +21 -0
  488. package/src/contacts/contact-store.ts +622 -100
  489. package/src/contacts/contacts-write.ts +287 -0
  490. package/src/contacts/index.ts +13 -4
  491. package/src/contacts/startup-migration.ts +21 -0
  492. package/src/contacts/types.ts +47 -2
  493. package/src/context/token-estimator.ts +54 -31
  494. package/src/context/tool-result-truncation.ts +41 -7
  495. package/src/context/window-manager.ts +225 -120
  496. package/src/daemon/approval-generators.ts +83 -55
  497. package/src/daemon/approved-devices-store.ts +33 -20
  498. package/src/daemon/assistant-attachments.ts +134 -98
  499. package/src/daemon/auth-manager.ts +17 -15
  500. package/src/daemon/classifier.ts +117 -46
  501. package/src/daemon/computer-use-session.ts +316 -187
  502. package/src/daemon/config-watcher.ts +91 -44
  503. package/src/daemon/connection-policy.ts +18 -10
  504. package/src/daemon/context-overflow-approval.ts +48 -0
  505. package/src/daemon/context-overflow-policy.ts +50 -0
  506. package/src/daemon/context-overflow-reducer.ts +300 -0
  507. package/src/daemon/daemon-control.ts +79 -51
  508. package/src/daemon/date-context.ts +119 -69
  509. package/src/daemon/dictation-profile-store.ts +94 -48
  510. package/src/daemon/dictation-text-processing.ts +33 -12
  511. package/src/daemon/doordash-steps.ts +92 -49
  512. package/src/daemon/guardian-action-generators.ts +62 -46
  513. package/src/daemon/guardian-verification-intent.ts +31 -18
  514. package/src/daemon/handlers/apps.ts +257 -111
  515. package/src/daemon/handlers/avatar.ts +20 -15
  516. package/src/daemon/handlers/computer-use.ts +82 -39
  517. package/src/daemon/handlers/config-channels.ts +146 -69
  518. package/src/daemon/handlers/config-heartbeat.ts +114 -59
  519. package/src/daemon/handlers/config-inbox.ts +277 -106
  520. package/src/daemon/handlers/config-ingress.ts +127 -55
  521. package/src/daemon/handlers/config-integrations.ts +145 -88
  522. package/src/daemon/handlers/config-model.ts +58 -22
  523. package/src/daemon/handlers/config-platform.ts +40 -16
  524. package/src/daemon/handlers/config-scheduling.ts +109 -48
  525. package/src/daemon/handlers/config-slack-channel.ts +67 -35
  526. package/src/daemon/handlers/config-slack.ts +21 -20
  527. package/src/daemon/handlers/config-telegram.ts +100 -70
  528. package/src/daemon/handlers/config-tools.ts +103 -55
  529. package/src/daemon/handlers/config-trust.ts +50 -20
  530. package/src/daemon/handlers/config.ts +72 -24
  531. package/src/daemon/handlers/contacts.ts +163 -0
  532. package/src/daemon/handlers/diagnostics.ts +90 -48
  533. package/src/daemon/handlers/documents.ts +74 -46
  534. package/src/daemon/handlers/guardian-actions.ts +118 -71
  535. package/src/daemon/handlers/home-base.ts +19 -16
  536. package/src/daemon/handlers/identity.ts +65 -45
  537. package/src/daemon/handlers/index.ts +78 -54
  538. package/src/daemon/handlers/misc.ts +664 -234
  539. package/src/daemon/handlers/navigate-settings.ts +14 -11
  540. package/src/daemon/handlers/oauth-connect.ts +48 -35
  541. package/src/daemon/handlers/open-bundle-handler.ts +31 -24
  542. package/src/daemon/handlers/pairing.ts +51 -25
  543. package/src/daemon/handlers/publish.ts +55 -33
  544. package/src/daemon/handlers/recording.ts +378 -162
  545. package/src/daemon/handlers/sessions.ts +923 -423
  546. package/src/daemon/handlers/shared.ts +202 -117
  547. package/src/daemon/handlers/signing.ts +25 -6
  548. package/src/daemon/handlers/subagents.ts +117 -56
  549. package/src/daemon/handlers/twitter-auth.ts +70 -49
  550. package/src/daemon/handlers/work-items.ts +264 -112
  551. package/src/daemon/handlers/workspace-files.ts +27 -20
  552. package/src/daemon/handlers.ts +2 -2
  553. package/src/daemon/history-repair.ts +16 -15
  554. package/src/daemon/identity-helpers.ts +4 -4
  555. package/src/daemon/install-cli-launchers.ts +33 -22
  556. package/src/daemon/ipc-blob-store.ts +38 -24
  557. package/src/daemon/ipc-contract/apps.ts +61 -49
  558. package/src/daemon/ipc-contract/computer-use.ts +47 -37
  559. package/src/daemon/ipc-contract/contacts.ts +69 -0
  560. package/src/daemon/ipc-contract/diagnostics.ts +14 -14
  561. package/src/daemon/ipc-contract/documents.ts +8 -8
  562. package/src/daemon/ipc-contract/guardian-actions.ts +4 -4
  563. package/src/daemon/ipc-contract/inbox.ts +16 -16
  564. package/src/daemon/ipc-contract/integrations.ts +57 -44
  565. package/src/daemon/ipc-contract/memory.ts +3 -5
  566. package/src/daemon/ipc-contract/messages.ts +95 -69
  567. package/src/daemon/ipc-contract/notifications.ts +10 -6
  568. package/src/daemon/ipc-contract/pairing.ts +8 -8
  569. package/src/daemon/ipc-contract/schedules.ts +20 -20
  570. package/src/daemon/ipc-contract/sessions.ts +88 -57
  571. package/src/daemon/ipc-contract/settings.ts +12 -7
  572. package/src/daemon/ipc-contract/shared.ts +9 -7
  573. package/src/daemon/ipc-contract/skills.ts +46 -26
  574. package/src/daemon/ipc-contract/subagents.ts +9 -9
  575. package/src/daemon/ipc-contract/trust.ts +11 -11
  576. package/src/daemon/ipc-contract/work-items.ts +33 -28
  577. package/src/daemon/ipc-contract/workspace.ts +28 -21
  578. package/src/daemon/ipc-contract-inventory.json +8 -0
  579. package/src/daemon/ipc-contract-inventory.ts +29 -26
  580. package/src/daemon/ipc-contract.ts +111 -44
  581. package/src/daemon/ipc-handler.ts +27 -19
  582. package/src/daemon/ipc-protocol.ts +22 -12
  583. package/src/daemon/ipc-validate.ts +91 -46
  584. package/src/daemon/lifecycle.ts +25 -1
  585. package/src/daemon/main.ts +10 -8
  586. package/src/daemon/media-visibility-policy.ts +3 -1
  587. package/src/daemon/pairing-store.ts +72 -40
  588. package/src/daemon/providers-setup.ts +35 -25
  589. package/src/daemon/recording-executor.ts +37 -30
  590. package/src/daemon/recording-intent-fallback.ts +58 -28
  591. package/src/daemon/recording-intent.ts +71 -61
  592. package/src/daemon/ride-shotgun-handler.ts +201 -121
  593. package/src/daemon/seed-files.ts +28 -17
  594. package/src/daemon/server.ts +23 -14
  595. package/src/daemon/session-agent-loop-handlers.ts +261 -135
  596. package/src/daemon/session-agent-loop.ts +795 -253
  597. package/src/daemon/session-attachments.ts +104 -39
  598. package/src/daemon/session-conflict-gate.ts +72 -28
  599. package/src/daemon/session-dynamic-profile.ts +36 -22
  600. package/src/daemon/session-error.ts +50 -45
  601. package/src/daemon/session-evictor.ts +17 -10
  602. package/src/daemon/session-history.ts +201 -89
  603. package/src/daemon/session-lifecycle.ts +79 -42
  604. package/src/daemon/session-media-retry.ts +89 -41
  605. package/src/daemon/session-memory.ts +77 -55
  606. package/src/daemon/session-messaging.ts +261 -111
  607. package/src/daemon/session-notifiers.ts +57 -45
  608. package/src/daemon/session-process.ts +370 -154
  609. package/src/daemon/session-queue-manager.ts +30 -13
  610. package/src/daemon/session-runtime-assembly.ts +61 -15
  611. package/src/daemon/session-skill-tools.ts +84 -36
  612. package/src/daemon/session-slash.ts +178 -113
  613. package/src/daemon/session-surfaces.ts +498 -211
  614. package/src/daemon/session-tool-setup.ts +22 -17
  615. package/src/daemon/session-usage.ts +26 -13
  616. package/src/daemon/session-workspace.ts +7 -4
  617. package/src/daemon/session.ts +18 -19
  618. package/src/daemon/shutdown-handlers.ts +36 -33
  619. package/src/daemon/tls-certs.ts +90 -57
  620. package/src/daemon/tool-side-effects.ts +97 -65
  621. package/src/daemon/trace-emitter.ts +8 -7
  622. package/src/daemon/video-thumbnail.ts +55 -25
  623. package/src/daemon/watch-handler.ts +164 -86
  624. package/src/email/provider.ts +1 -1
  625. package/src/email/providers/agentmail.ts +87 -45
  626. package/src/email/providers/index.ts +19 -14
  627. package/src/email/service.ts +52 -24
  628. package/src/email/types.ts +2 -2
  629. package/src/errors.ts +1 -1
  630. package/src/events/bus.ts +30 -10
  631. package/src/events/domain-events.ts +19 -13
  632. package/src/events/index.ts +6 -6
  633. package/src/events/tool-audit-listener.ts +34 -20
  634. package/src/events/tool-domain-event-publisher.ts +22 -20
  635. package/src/events/tool-metrics-listener.ts +26 -21
  636. package/src/events/tool-notification-listener.ts +5 -5
  637. package/src/events/tool-profiling-listener.ts +33 -23
  638. package/src/events/tool-trace-listener.ts +70 -46
  639. package/src/export/formatter.ts +38 -32
  640. package/src/followups/followup-store.ts +43 -36
  641. package/src/followups/index.ts +2 -2
  642. package/src/followups/types.ts +1 -1
  643. package/src/gallery/default-gallery.ts +37 -34
  644. package/src/gallery/gallery-manifest.ts +9 -9
  645. package/src/heartbeat/heartbeat-service.ts +59 -37
  646. package/src/home-base/app-link-store.ts +14 -12
  647. package/src/home-base/bootstrap.ts +14 -8
  648. package/src/home-base/prebuilt/seed.ts +35 -26
  649. package/src/home-base/prebuilt-home-base-updater.ts +14 -8
  650. package/src/hooks/cli.ts +56 -43
  651. package/src/hooks/config.ts +27 -14
  652. package/src/hooks/discovery.ts +53 -33
  653. package/src/hooks/manager.ts +50 -26
  654. package/src/hooks/runner.ts +35 -29
  655. package/src/hooks/templates.ts +38 -15
  656. package/src/hooks/types.ts +13 -13
  657. package/src/inbound/platform-callback-registration.ts +21 -15
  658. package/src/inbound/public-ingress-urls.ts +9 -6
  659. package/src/index.ts +20 -19
  660. package/src/influencer/client.ts +269 -108
  661. package/src/instrument.ts +3 -1
  662. package/src/logfire.ts +64 -39
  663. package/src/mcp/client.ts +107 -55
  664. package/src/mcp/manager.ts +45 -18
  665. package/src/mcp/mcp-oauth-provider.ts +114 -62
  666. package/src/media/gemini-image-service.ts +28 -21
  667. package/src/memory/account-store.ts +16 -9
  668. package/src/memory/admin.ts +87 -57
  669. package/src/memory/app-git-service.ts +77 -47
  670. package/src/memory/app-store.ts +151 -77
  671. package/src/memory/attachments-store.ts +123 -53
  672. package/src/memory/canonical-guardian-store.ts +190 -48
  673. package/src/memory/channel-delivery-store.ts +5 -5
  674. package/src/memory/channel-guardian-store.ts +31 -16
  675. package/src/memory/checkpoints.ts +14 -7
  676. package/src/memory/clarification-resolver.ts +219 -104
  677. package/src/memory/conflict-intent.ts +74 -23
  678. package/src/memory/conflict-policy.ts +20 -7
  679. package/src/memory/conflict-store.ts +144 -94
  680. package/src/memory/contradiction-checker.ts +257 -132
  681. package/src/memory/conversation-attention-store.ts +72 -32
  682. package/src/memory/conversation-bootstrap.ts +28 -0
  683. package/src/memory/conversation-crud.ts +12 -5
  684. package/src/memory/conversation-display-order-migration.ts +7 -7
  685. package/src/memory/conversation-key-store.ts +18 -13
  686. package/src/memory/conversation-queries.ts +130 -52
  687. package/src/memory/conversation-store.ts +43 -26
  688. package/src/memory/conversation-title-service.ts +89 -66
  689. package/src/memory/db-init.ts +90 -2
  690. package/src/memory/db.ts +10 -3
  691. package/src/memory/delivery-channels.ts +12 -6
  692. package/src/memory/delivery-crud.ts +26 -12
  693. package/src/memory/delivery-status.ts +19 -16
  694. package/src/memory/embedding-backend.ts +205 -77
  695. package/src/memory/embedding-gemini.ts +23 -10
  696. package/src/memory/embedding-local.ts +89 -44
  697. package/src/memory/embedding-ollama.ts +25 -13
  698. package/src/memory/embedding-openai.ts +20 -11
  699. package/src/memory/embedding-runtime-manager.ts +163 -90
  700. package/src/memory/entity-extractor.ts +185 -123
  701. package/src/memory/external-conversation-store.ts +30 -12
  702. package/src/memory/fingerprint.ts +2 -2
  703. package/src/memory/fts-reconciler.ts +57 -28
  704. package/src/memory/guardian-action-store.ts +162 -100
  705. package/src/memory/guardian-approvals.ts +63 -129
  706. package/src/memory/guardian-rate-limits.ts +20 -9
  707. package/src/memory/guardian-verification.ts +82 -35
  708. package/src/memory/indexer.ts +96 -55
  709. package/src/memory/ingress-invite-store.ts +28 -169
  710. package/src/memory/items-extractor.ts +313 -157
  711. package/src/memory/job-handlers/backfill.ts +116 -63
  712. package/src/memory/job-handlers/cleanup.ts +64 -41
  713. package/src/memory/job-handlers/conflict.ts +90 -49
  714. package/src/memory/job-handlers/embedding.ts +32 -17
  715. package/src/memory/job-handlers/extraction.ts +58 -33
  716. package/src/memory/job-handlers/index-maintenance.ts +31 -17
  717. package/src/memory/job-handlers/media-processing.ts +65 -24
  718. package/src/memory/job-handlers/summarization.ts +186 -128
  719. package/src/memory/job-utils.ts +100 -57
  720. package/src/memory/jobs-store.ts +235 -142
  721. package/src/memory/jobs-worker.ts +167 -83
  722. package/src/memory/llm-request-log-store.ts +13 -11
  723. package/src/memory/llm-usage-store.ts +35 -26
  724. package/src/memory/media-store.ts +151 -44
  725. package/src/memory/message-content.ts +28 -18
  726. package/src/memory/migrations/001-job-deferrals.ts +11 -5
  727. package/src/memory/migrations/002-tool-invocations-fk.ts +14 -6
  728. package/src/memory/migrations/003-memory-fts-backfill.ts +11 -5
  729. package/src/memory/migrations/004-entity-relation-dedup.ts +17 -11
  730. package/src/memory/migrations/005-fingerprint-scope-unique.ts +36 -21
  731. package/src/memory/migrations/006-scope-salted-fingerprints.ts +35 -20
  732. package/src/memory/migrations/007-assistant-id-to-self.ts +40 -27
  733. package/src/memory/migrations/008-remove-assistant-id-columns.ts +58 -36
  734. package/src/memory/migrations/009-llm-usage-events-drop-assistant-id.ts +36 -22
  735. package/src/memory/migrations/010-ext-conv-bindings-channel-chat-unique.ts +21 -11
  736. package/src/memory/migrations/011-call-sessions-provider-sid-dedup.ts +30 -15
  737. package/src/memory/migrations/012-call-sessions-add-initiated-from.ts +4 -2
  738. package/src/memory/migrations/013-guardian-action-tables.ts +29 -11
  739. package/src/memory/migrations/014-backfill-inbox-thread-state.ts +35 -21
  740. package/src/memory/migrations/015-drop-active-search-index.ts +17 -11
  741. package/src/memory/migrations/016-memory-segments-indexes.ts +7 -3
  742. package/src/memory/migrations/017-memory-items-indexes.ts +4 -2
  743. package/src/memory/migrations/018-remaining-table-indexes.ts +13 -5
  744. package/src/memory/migrations/019-notification-tables-schema-migration.ts +34 -20
  745. package/src/memory/migrations/020-rename-macos-ios-channel-to-vellum.ts +87 -53
  746. package/src/memory/migrations/021-conversation-status-indexes.ts +7 -3
  747. package/src/memory/migrations/022-add-origin-interface.ts +4 -2
  748. package/src/memory/migrations/023-memory-item-sources-indexes.ts +4 -2
  749. package/src/memory/migrations/024-embedding-vector-blob.ts +34 -18
  750. package/src/memory/migrations/025-messages-fts-backfill.ts +11 -5
  751. package/src/memory/migrations/026-guardian-verification-sessions.ts +80 -14
  752. package/src/memory/migrations/026a-embeddings-nullable-vector-json.ts +42 -26
  753. package/src/memory/migrations/027-notification-delivery-pairing-columns.ts +22 -8
  754. package/src/memory/migrations/027a-guardian-bootstrap-token.ts +11 -3
  755. package/src/memory/migrations/028-call-session-mode.ts +13 -3
  756. package/src/memory/migrations/028-notification-delivery-client-ack.ts +22 -8
  757. package/src/memory/migrations/029-channel-inbound-delivered-segments.ts +7 -3
  758. package/src/memory/migrations/030-guardian-action-followup.ts +46 -8
  759. package/src/memory/migrations/030-guardian-verification-purpose.ts +4 -2
  760. package/src/memory/migrations/031-conversations-thread-type-index.ts +4 -2
  761. package/src/memory/migrations/032-guardian-delivery-conversation-index.ts +4 -2
  762. package/src/memory/migrations/032-notification-delivery-thread-decision.ts +22 -8
  763. package/src/memory/migrations/033-scoped-approval-grants.ts +1 -1
  764. package/src/memory/migrations/034-guardian-action-tool-metadata.ts +15 -3
  765. package/src/memory/migrations/035-guardian-action-supersession.ts +15 -3
  766. package/src/memory/migrations/036-normalize-phone-identities.ts +101 -87
  767. package/src/memory/migrations/037-voice-invite-columns.ts +22 -4
  768. package/src/memory/migrations/038-actor-token-records.ts +5 -9
  769. package/src/memory/migrations/039-actor-refresh-token-records.ts +7 -13
  770. package/src/memory/migrations/100-core-tables.ts +1 -1
  771. package/src/memory/migrations/101-watchers-and-logs.ts +1 -1
  772. package/src/memory/migrations/103-complex-migrations.ts +9 -9
  773. package/src/memory/migrations/104-core-indexes.ts +188 -64
  774. package/src/memory/migrations/105-contacts-and-triage.ts +28 -10
  775. package/src/memory/migrations/106-call-sessions.ts +58 -16
  776. package/src/memory/migrations/107-followups.ts +16 -6
  777. package/src/memory/migrations/108-tasks-and-work-items.ts +43 -11
  778. package/src/memory/migrations/109-external-conversation-bindings.ts +11 -5
  779. package/src/memory/migrations/110-channel-guardian.ts +48 -10
  780. package/src/memory/migrations/111-media-assets.ts +52 -18
  781. package/src/memory/migrations/112-assistant-inbox.ts +32 -12
  782. package/src/memory/migrations/113-late-migrations.ts +12 -12
  783. package/src/memory/migrations/114-notifications.ts +28 -12
  784. package/src/memory/migrations/115-sequences.ts +10 -4
  785. package/src/memory/migrations/116-messages-fts.ts +1 -1
  786. package/src/memory/migrations/117-conversation-attention.ts +16 -6
  787. package/src/memory/migrations/118-reminder-routing-intent.ts +7 -3
  788. package/src/memory/migrations/119-schema-indexes-and-columns.ts +35 -15
  789. package/src/memory/migrations/120-fk-cascade-rebuilds.ts +36 -17
  790. package/src/memory/migrations/121-canonical-guardian-requests.ts +25 -9
  791. package/src/memory/migrations/122-canonical-guardian-requester-chat-id.ts +11 -3
  792. package/src/memory/migrations/123-canonical-guardian-deliveries-destination-index.ts +4 -2
  793. package/src/memory/migrations/124-voice-invite-display-metadata.ts +15 -3
  794. package/src/memory/migrations/125-guardian-principal-id-columns.ts +22 -4
  795. package/src/memory/migrations/126-backfill-guardian-principal-id.ts +174 -126
  796. package/src/memory/migrations/127-guardian-principal-id-not-null.ts +58 -42
  797. package/src/memory/migrations/128-contacts-role-principal.ts +26 -0
  798. package/src/memory/migrations/129-contact-channels-access-fields.ts +105 -0
  799. package/src/memory/migrations/130-contact-channels-type-ext-chat-id-index.ts +15 -0
  800. package/src/memory/migrations/131-drop-legacy-member-guardian-tables.ts +134 -0
  801. package/src/memory/migrations/132-contacts-assistant-id.ts +21 -0
  802. package/src/memory/migrations/index.ts +82 -73
  803. package/src/memory/migrations/registry.ts +53 -37
  804. package/src/memory/migrations/validate-migration-state.ts +73 -46
  805. package/src/memory/profile-compiler.ts +58 -24
  806. package/src/memory/published-pages-store.ts +12 -16
  807. package/src/memory/qdrant-circuit-breaker.ts +28 -20
  808. package/src/memory/qdrant-client.ts +99 -63
  809. package/src/memory/qdrant-manager.ts +89 -57
  810. package/src/memory/query-builder.ts +9 -7
  811. package/src/memory/raw-query.ts +63 -14
  812. package/src/memory/recall-cache.ts +15 -8
  813. package/src/memory/retrieval-budget.ts +0 -1
  814. package/src/memory/retriever.ts +385 -192
  815. package/src/memory/schema-migration.ts +1 -1
  816. package/src/memory/schema.ts +44 -56
  817. package/src/memory/scoped-approval-grants.ts +99 -45
  818. package/src/memory/search/entity.ts +102 -40
  819. package/src/memory/search/formatting.ts +70 -52
  820. package/src/memory/search/lexical.ts +82 -43
  821. package/src/memory/search/ranking.ts +103 -39
  822. package/src/memory/search/semantic.ts +59 -35
  823. package/src/memory/search/types.ts +8 -8
  824. package/src/memory/segmenter.ts +20 -12
  825. package/src/memory/shared-app-links-store.ts +21 -16
  826. package/src/memory/task-memory-cleanup.ts +18 -8
  827. package/src/memory/tool-usage-store.ts +27 -19
  828. package/src/memory/validation.ts +4 -2
  829. package/src/messaging/activity-analyzer.ts +7 -7
  830. package/src/messaging/draft-store.ts +13 -10
  831. package/src/messaging/email-classifier.ts +73 -37
  832. package/src/messaging/index.ts +3 -3
  833. package/src/messaging/outreach-classifier.ts +76 -38
  834. package/src/messaging/provider-types.ts +2 -4
  835. package/src/messaging/provider.ts +37 -8
  836. package/src/messaging/providers/gmail/adapter.ts +183 -66
  837. package/src/messaging/providers/gmail/client.ts +3 -1
  838. package/src/messaging/providers/gmail/mime-builder.ts +21 -19
  839. package/src/messaging/providers/gmail/people-client.ts +22 -9
  840. package/src/messaging/providers/gmail/types.ts +6 -6
  841. package/src/messaging/providers/slack/adapter.ts +93 -43
  842. package/src/messaging/providers/slack/client.ts +100 -41
  843. package/src/messaging/providers/slack/types.ts +6 -0
  844. package/src/messaging/providers/sms/adapter.ts +76 -40
  845. package/src/messaging/providers/sms/client.ts +4 -4
  846. package/src/messaging/providers/telegram-bot/adapter.ts +52 -30
  847. package/src/messaging/providers/telegram-bot/client.ts +7 -7
  848. package/src/messaging/providers/whatsapp/adapter.ts +58 -31
  849. package/src/messaging/providers/whatsapp/client.ts +4 -4
  850. package/src/messaging/registry.ts +9 -5
  851. package/src/messaging/style-analyzer.ts +69 -39
  852. package/src/messaging/thread-summarizer.ts +101 -53
  853. package/src/messaging/triage-engine.ts +111 -82
  854. package/src/messaging/types.ts +10 -10
  855. package/src/migrations/config-merge.ts +18 -10
  856. package/src/migrations/data-layout.ts +35 -22
  857. package/src/migrations/data-merge.ts +17 -7
  858. package/src/migrations/hooks-merge.ts +43 -16
  859. package/src/migrations/index.ts +6 -6
  860. package/src/migrations/log.ts +9 -5
  861. package/src/migrations/skills-merge.ts +17 -7
  862. package/src/migrations/workspace-layout.ts +39 -25
  863. package/src/notifications/AGENTS.md +5 -0
  864. package/src/notifications/adapters/macos.ts +21 -14
  865. package/src/notifications/adapters/sms.ts +28 -15
  866. package/src/notifications/adapters/telegram.ts +24 -15
  867. package/src/notifications/broadcaster.ts +108 -52
  868. package/src/notifications/conversation-pairing.ts +64 -29
  869. package/src/notifications/copy-composer.ts +165 -95
  870. package/src/notifications/decision-engine.ts +353 -147
  871. package/src/notifications/decisions-store.ts +26 -10
  872. package/src/notifications/deliveries-store.ts +23 -13
  873. package/src/notifications/destination-resolver.ts +42 -24
  874. package/src/notifications/deterministic-checks.ts +78 -27
  875. package/src/notifications/emit-signal.ts +83 -45
  876. package/src/notifications/events-store.ts +13 -7
  877. package/src/notifications/guardian-question-mode.ts +125 -75
  878. package/src/notifications/preference-extractor.ts +85 -53
  879. package/src/notifications/preference-summary.ts +31 -18
  880. package/src/notifications/preferences-store.ts +29 -18
  881. package/src/notifications/runtime-dispatch.ts +22 -12
  882. package/src/notifications/signal.ts +4 -4
  883. package/src/notifications/thread-candidates.ts +59 -23
  884. package/src/notifications/thread-seed-composer.ts +45 -27
  885. package/src/notifications/types.ts +19 -10
  886. package/src/oauth/connect-orchestrator.ts +105 -54
  887. package/src/oauth/connect-types.ts +3 -3
  888. package/src/oauth/provider-profiles.ts +80 -59
  889. package/src/oauth/scope-policy.ts +5 -2
  890. package/src/oauth/token-persistence.ts +58 -24
  891. package/src/outbound-proxy/certs.ts +284 -0
  892. package/src/outbound-proxy/config.ts +94 -0
  893. package/src/outbound-proxy/connect-tunnel.ts +84 -0
  894. package/src/outbound-proxy/health.ts +62 -0
  895. package/src/outbound-proxy/host-pattern-match.ts +67 -0
  896. package/src/outbound-proxy/http-forwarder.ts +162 -0
  897. package/src/outbound-proxy/index.ts +80 -0
  898. package/src/outbound-proxy/logging.ts +193 -0
  899. package/src/outbound-proxy/mitm-handler.ts +292 -0
  900. package/src/outbound-proxy/policy.ts +172 -0
  901. package/src/outbound-proxy/router.ts +64 -0
  902. package/src/outbound-proxy/server.ts +145 -0
  903. package/src/outbound-proxy/types.ts +150 -0
  904. package/src/permissions/checker.ts +481 -189
  905. package/src/permissions/defaults.ts +135 -108
  906. package/src/permissions/prompter.ts +53 -27
  907. package/src/permissions/secret-prompter.ts +21 -15
  908. package/src/permissions/shell-identity.ts +47 -16
  909. package/src/permissions/trust-store.ts +185 -73
  910. package/src/permissions/types.ts +22 -12
  911. package/src/permissions/workspace-policy.ts +47 -38
  912. package/src/playbooks/index.ts +10 -2
  913. package/src/playbooks/playbook-compiler.ts +30 -24
  914. package/src/playbooks/types.ts +11 -8
  915. package/src/providers/anthropic/client.ts +325 -168
  916. package/src/providers/failover.ts +57 -22
  917. package/src/providers/fireworks/client.ts +9 -5
  918. package/src/providers/gemini/client.ts +61 -39
  919. package/src/providers/model-intents.ts +40 -33
  920. package/src/providers/ollama/client.ts +7 -7
  921. package/src/providers/openai/client.ts +106 -68
  922. package/src/providers/openrouter/client.ts +9 -5
  923. package/src/providers/provider-send-message.ts +59 -27
  924. package/src/providers/ratelimit.ts +25 -8
  925. package/src/providers/registry.ts +86 -38
  926. package/src/providers/retry.ts +84 -36
  927. package/src/providers/stream-timeout.ts +5 -3
  928. package/src/providers/types.ts +7 -6
  929. package/src/runtime/AGENTS.md +42 -0
  930. package/src/runtime/access-request-helper.ts +118 -68
  931. package/src/runtime/actor-refresh-token-store.ts +21 -16
  932. package/src/runtime/actor-token-store.ts +25 -18
  933. package/src/runtime/actor-trust-resolver.ts +183 -80
  934. package/src/runtime/approval-conversation-turn.ts +39 -26
  935. package/src/runtime/approval-message-composer.ts +116 -84
  936. package/src/runtime/assistant-event-hub.ts +25 -6
  937. package/src/runtime/assistant-event.ts +4 -4
  938. package/src/runtime/assistant-scope.ts +1 -1
  939. package/src/runtime/auth/__tests__/guard-tests.test.ts +36 -14
  940. package/src/runtime/auth/context.ts +8 -7
  941. package/src/runtime/auth/credential-service.ts +60 -38
  942. package/src/runtime/auth/external-assistant-id.ts +16 -8
  943. package/src/runtime/auth/index.ts +23 -16
  944. package/src/runtime/auth/middleware.ts +87 -26
  945. package/src/runtime/auth/route-policy.ts +170 -104
  946. package/src/runtime/auth/scopes.ts +22 -29
  947. package/src/runtime/auth/subject.ts +19 -13
  948. package/src/runtime/auth/token-service.ts +3 -3
  949. package/src/runtime/auth/types.ts +23 -23
  950. package/src/runtime/channel-approval-parser.ts +37 -14
  951. package/src/runtime/channel-approval-types.ts +12 -4
  952. package/src/runtime/channel-approvals.ts +41 -23
  953. package/src/runtime/channel-guardian-service.ts +144 -103
  954. package/src/runtime/channel-invite-transport.ts +4 -2
  955. package/src/runtime/channel-invite-transports/telegram.ts +16 -10
  956. package/src/runtime/channel-invite-transports/voice.ts +7 -7
  957. package/src/runtime/channel-readiness-service.ts +139 -90
  958. package/src/runtime/channel-readiness-types.ts +4 -2
  959. package/src/runtime/channel-reply-delivery.ts +21 -11
  960. package/src/runtime/channel-retry-sweep.ts +111 -62
  961. package/src/runtime/confirmation-request-guardian-bridge.ts +73 -54
  962. package/src/runtime/gateway-client.ts +86 -53
  963. package/src/runtime/guardian-action-conversation-turn.ts +34 -18
  964. package/src/runtime/guardian-action-followup-executor.ts +115 -45
  965. package/src/runtime/guardian-action-grant-minter.ts +40 -24
  966. package/src/runtime/guardian-action-message-composer.ts +105 -84
  967. package/src/runtime/guardian-decision-types.ts +28 -13
  968. package/src/runtime/guardian-outbound-actions.ts +9 -0
  969. package/src/runtime/guardian-reply-router.ts +274 -145
  970. package/src/runtime/guardian-vellum-migration.ts +38 -24
  971. package/src/runtime/guardian-verification-templates.ts +8 -11
  972. package/src/runtime/http-router.ts +175 -0
  973. package/src/runtime/http-server.ts +931 -669
  974. package/src/runtime/http-types.ts +2 -2
  975. package/src/runtime/ingress-service.ts +182 -89
  976. package/src/runtime/invite-redemption-service.ts +211 -134
  977. package/src/runtime/invite-redemption-templates.ts +18 -11
  978. package/src/runtime/local-actor-identity.ts +73 -55
  979. package/src/runtime/middleware/auth.ts +25 -14
  980. package/src/runtime/middleware/error-handler.ts +15 -11
  981. package/src/runtime/middleware/rate-limiter.ts +23 -17
  982. package/src/runtime/middleware/request-logger.ts +4 -4
  983. package/src/runtime/middleware/twilio-validation.ts +29 -20
  984. package/src/runtime/migrations/migration-transport.ts +575 -0
  985. package/src/runtime/migrations/migration-wizard.ts +715 -0
  986. package/src/runtime/migrations/rebind-secrets-screen.ts +351 -0
  987. package/src/runtime/migrations/transfer-progress-screen.ts +321 -0
  988. package/src/runtime/migrations/validation-results-screen.ts +467 -0
  989. package/src/runtime/migrations/vbundle-builder.ts +295 -0
  990. package/src/runtime/migrations/vbundle-import-analyzer.ts +212 -0
  991. package/src/runtime/migrations/vbundle-importer.ts +339 -0
  992. package/src/runtime/migrations/vbundle-validator.ts +356 -0
  993. package/src/runtime/pending-interactions.ts +16 -7
  994. package/src/runtime/routes/access-request-decision.ts +73 -52
  995. package/src/runtime/routes/app-routes.ts +56 -38
  996. package/src/runtime/routes/approval-routes.ts +165 -74
  997. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +930 -0
  998. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +82 -0
  999. package/src/runtime/routes/approval-strategies/guardian-text-engine-strategy.ts +151 -0
  1000. package/src/runtime/routes/attachment-routes.ts +59 -48
  1001. package/src/runtime/routes/brain-graph-routes.ts +85 -69
  1002. package/src/runtime/routes/call-routes.ts +79 -38
  1003. package/src/runtime/routes/canonical-guardian-expiry-sweep.ts +10 -10
  1004. package/src/runtime/routes/channel-delivery-routes.ts +19 -14
  1005. package/src/runtime/routes/channel-guardian-routes.ts +3 -3
  1006. package/src/runtime/routes/channel-inbound-routes.ts +2 -2
  1007. package/src/runtime/routes/channel-readiness-routes.ts +12 -6
  1008. package/src/runtime/routes/channel-route-shared.ts +33 -25
  1009. package/src/runtime/routes/channel-routes.ts +4 -6
  1010. package/src/runtime/routes/contact-routes.ts +205 -16
  1011. package/src/runtime/routes/conversation-attention-routes.ts +57 -28
  1012. package/src/runtime/routes/conversation-routes.ts +321 -174
  1013. package/src/runtime/routes/debug-routes.ts +14 -10
  1014. package/src/runtime/routes/events-routes.ts +90 -57
  1015. package/src/runtime/routes/global-search-routes.ts +266 -0
  1016. package/src/runtime/routes/guardian-action-routes.ts +147 -56
  1017. package/src/runtime/routes/guardian-approval-interception.ts +255 -880
  1018. package/src/runtime/routes/guardian-approval-prompt.ts +40 -24
  1019. package/src/runtime/routes/guardian-approval-reply-helpers.ts +135 -0
  1020. package/src/runtime/routes/guardian-bootstrap-routes.ts +55 -36
  1021. package/src/runtime/routes/guardian-expiry-sweep.ts +63 -37
  1022. package/src/runtime/routes/guardian-refresh-routes.ts +40 -19
  1023. package/src/runtime/routes/identity-routes.ts +71 -42
  1024. package/src/runtime/routes/inbound-conversation.ts +17 -11
  1025. package/src/runtime/routes/inbound-message-handler.ts +278 -1460
  1026. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +658 -0
  1027. package/src/runtime/routes/inbound-stages/background-dispatch.ts +492 -0
  1028. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +214 -0
  1029. package/src/runtime/routes/inbound-stages/edit-intercept.ts +116 -0
  1030. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +167 -0
  1031. package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +185 -0
  1032. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +132 -0
  1033. package/src/runtime/routes/inbound-stages/verification-intercept.ts +340 -0
  1034. package/src/runtime/routes/ingress-routes.ts +34 -23
  1035. package/src/runtime/routes/integration-routes.ts +60 -21
  1036. package/src/runtime/routes/migration-routes.ts +434 -0
  1037. package/src/runtime/routes/pairing-routes.ts +157 -79
  1038. package/src/runtime/routes/secret-routes.ts +6 -2
  1039. package/src/runtime/routes/twilio-routes.ts +443 -249
  1040. package/src/runtime/tool-grant-request-helper.ts +36 -27
  1041. package/src/runtime/{guardian-context-resolver.ts → trust-context-resolver.ts} +29 -41
  1042. package/src/schedule/integration-status.ts +44 -9
  1043. package/src/schedule/recurrence-engine.ts +47 -24
  1044. package/src/schedule/recurrence-types.ts +12 -7
  1045. package/src/schedule/schedule-store.ts +166 -83
  1046. package/src/schedule/scheduler.ts +26 -22
  1047. package/src/security/encrypted-store.ts +68 -38
  1048. package/src/security/keychain.ts +183 -120
  1049. package/src/security/oauth-callback-registry.ts +3 -3
  1050. package/src/security/oauth2.ts +226 -138
  1051. package/src/security/redaction.ts +24 -24
  1052. package/src/security/secret-allowlist.ts +46 -21
  1053. package/src/security/secret-ingress.ts +15 -7
  1054. package/src/security/secret-scanner.ts +193 -104
  1055. package/src/security/secure-keys.ts +9 -3
  1056. package/src/security/token-manager.ts +99 -40
  1057. package/src/security/tool-approval-digest.ts +3 -3
  1058. package/src/sequence/analytics.ts +52 -27
  1059. package/src/sequence/engine.ts +135 -72
  1060. package/src/sequence/guardrails.ts +32 -20
  1061. package/src/sequence/importer.ts +75 -37
  1062. package/src/sequence/reply-matcher.ts +36 -18
  1063. package/src/sequence/store.ts +137 -75
  1064. package/src/sequence/types.ts +30 -16
  1065. package/src/services/published-app-updater.ts +26 -16
  1066. package/src/services/vercel-deploy.ts +19 -15
  1067. package/src/skills/active-skill-tools.ts +3 -3
  1068. package/src/skills/clawhub.ts +178 -90
  1069. package/src/skills/include-graph.ts +24 -17
  1070. package/src/skills/managed-store.ts +89 -42
  1071. package/src/skills/path-classifier.ts +10 -10
  1072. package/src/skills/remote-skill-policy.ts +31 -22
  1073. package/src/skills/slash-commands.ts +36 -30
  1074. package/src/skills/tool-manifest.ts +60 -31
  1075. package/src/skills/version-hash.ts +25 -15
  1076. package/src/slack/slack-webhook.ts +19 -15
  1077. package/src/subagent/index.ts +4 -8
  1078. package/src/subagent/manager.ts +119 -69
  1079. package/src/subagent/types.ts +9 -12
  1080. package/src/swarm/backend-claude-code.ts +124 -45
  1081. package/src/swarm/checkpoint.ts +36 -16
  1082. package/src/swarm/graph-utils.ts +1 -3
  1083. package/src/swarm/index.ts +38 -19
  1084. package/src/swarm/limits.ts +13 -4
  1085. package/src/swarm/orchestrator.ts +108 -57
  1086. package/src/swarm/plan-validator.ts +23 -17
  1087. package/src/swarm/router-planner.ts +51 -22
  1088. package/src/swarm/router-prompts.ts +4 -1
  1089. package/src/swarm/synthesizer.ts +26 -18
  1090. package/src/swarm/types.ts +14 -4
  1091. package/src/swarm/worker-backend.ts +36 -26
  1092. package/src/swarm/worker-prompts.ts +13 -9
  1093. package/src/swarm/worker-runner.ts +40 -34
  1094. package/src/tasks/candidate-store.ts +14 -6
  1095. package/src/tasks/ephemeral-permissions.ts +9 -5
  1096. package/src/tasks/task-compiler.ts +41 -38
  1097. package/src/tasks/task-runner.ts +54 -26
  1098. package/src/tasks/task-scheduler.ts +1 -1
  1099. package/src/tasks/task-store.ts +20 -7
  1100. package/src/tasks/tool-sanitizer.ts +3 -3
  1101. package/src/tools/apps/definitions.ts +23 -15
  1102. package/src/tools/apps/executors.ts +118 -37
  1103. package/src/tools/apps/open-proxy.ts +5 -5
  1104. package/src/tools/apps/registry.ts +2 -2
  1105. package/src/tools/assets/materialize.ts +59 -41
  1106. package/src/tools/assets/search.ts +86 -48
  1107. package/src/tools/browser/api-map.ts +52 -36
  1108. package/src/tools/browser/auth-cache.ts +21 -18
  1109. package/src/tools/browser/auth-detector.ts +43 -28
  1110. package/src/tools/browser/auto-navigate.ts +149 -68
  1111. package/src/tools/browser/browser-execution.ts +9 -3
  1112. package/src/tools/browser/headless-browser.ts +287 -150
  1113. package/src/tools/browser/jit-auth.ts +37 -21
  1114. package/src/tools/browser/network-recorder.ts +138 -56
  1115. package/src/tools/browser/recording-store.ts +22 -15
  1116. package/src/tools/browser/runtime-check.ts +8 -5
  1117. package/src/tools/browser/x-auto-navigate.ts +88 -47
  1118. package/src/tools/calls/call-end.ts +9 -6
  1119. package/src/tools/calls/call-start.ts +30 -20
  1120. package/src/tools/calls/call-status.ts +8 -5
  1121. package/src/tools/claude-code/claude-code.ts +301 -165
  1122. package/src/tools/computer-use/definitions.ts +159 -130
  1123. package/src/tools/computer-use/registry.ts +2 -2
  1124. package/src/tools/computer-use/request-computer-control.ts +21 -13
  1125. package/src/tools/computer-use/skill-proxy-bridge.ts +1 -1
  1126. package/src/tools/credentials/account-registry.ts +52 -35
  1127. package/src/tools/credentials/broker-types.ts +1 -1
  1128. package/src/tools/credentials/broker.ts +97 -55
  1129. package/src/tools/credentials/domain-policy.ts +5 -2
  1130. package/src/tools/credentials/host-pattern-match.ts +15 -8
  1131. package/src/tools/credentials/metadata-store.ts +93 -43
  1132. package/src/tools/credentials/policy-types.ts +5 -2
  1133. package/src/tools/credentials/policy-validate.ts +21 -14
  1134. package/src/tools/credentials/post-connect-hooks.ts +18 -7
  1135. package/src/tools/credentials/resolve.ts +11 -10
  1136. package/src/tools/credentials/selection.ts +30 -25
  1137. package/src/tools/credentials/tool-policy.ts +5 -2
  1138. package/src/tools/credentials/vault.ts +452 -183
  1139. package/src/tools/document/document-tool.ts +23 -17
  1140. package/src/tools/document/editor-template.ts +12 -7
  1141. package/src/tools/execution-target.ts +13 -10
  1142. package/src/tools/execution-timeout.ts +6 -5
  1143. package/src/tools/executor.ts +141 -74
  1144. package/src/tools/filesystem/edit.ts +82 -45
  1145. package/src/tools/filesystem/fuzzy-match.ts +70 -32
  1146. package/src/tools/filesystem/read.ts +46 -28
  1147. package/src/tools/filesystem/view-image.ts +86 -42
  1148. package/src/tools/filesystem/write.ts +53 -32
  1149. package/src/tools/followups/followup_create.ts +43 -17
  1150. package/src/tools/followups/followup_list.ts +28 -13
  1151. package/src/tools/followups/followup_resolve.ts +9 -6
  1152. package/src/tools/guardian-control-plane-policy.ts +15 -14
  1153. package/src/tools/host-filesystem/edit.ts +77 -42
  1154. package/src/tools/host-filesystem/read.ts +52 -33
  1155. package/src/tools/host-filesystem/write.ts +50 -29
  1156. package/src/tools/host-terminal/host-shell.ts +97 -61
  1157. package/src/tools/mcp/mcp-tool-factory.ts +21 -14
  1158. package/src/tools/memory/definitions.ts +60 -28
  1159. package/src/tools/memory/handlers.ts +149 -77
  1160. package/src/tools/memory/register.ts +39 -16
  1161. package/src/tools/network/__tests__/web-search.test.ts +236 -177
  1162. package/src/tools/network/domain-normalize.ts +13 -9
  1163. package/src/tools/network/script-proxy/__tests__/logging.test.ts +193 -123
  1164. package/src/tools/network/script-proxy/__tests__/policy.test.ts +225 -127
  1165. package/src/tools/network/script-proxy/index.ts +1 -17
  1166. package/src/tools/network/script-proxy/session-manager.ts +151 -84
  1167. package/src/tools/network/url-safety.ts +56 -34
  1168. package/src/tools/network/web-fetch.ts +273 -155
  1169. package/src/tools/network/web-search.ts +166 -81
  1170. package/src/tools/permission-checker.ts +6 -25
  1171. package/src/tools/policy-context.ts +8 -5
  1172. package/src/tools/registry.ts +73 -46
  1173. package/src/tools/reminder/reminder-store.ts +65 -44
  1174. package/src/tools/reminder/reminder.ts +76 -35
  1175. package/src/tools/schedule/create.ts +44 -21
  1176. package/src/tools/schedule/delete.ts +8 -5
  1177. package/src/tools/schedule/list.ts +39 -19
  1178. package/src/tools/schedule/update.ts +49 -26
  1179. package/src/tools/secret-detection-handler.ts +130 -49
  1180. package/src/tools/sensitive-output-placeholders.ts +15 -8
  1181. package/src/tools/shared/filesystem/edit-engine.ts +45 -14
  1182. package/src/tools/shared/filesystem/errors.ts +18 -18
  1183. package/src/tools/shared/filesystem/file-ops-service.ts +59 -32
  1184. package/src/tools/shared/filesystem/format-diff.ts +21 -11
  1185. package/src/tools/shared/filesystem/path-policy.ts +17 -13
  1186. package/src/tools/shared/filesystem/size-guard.ts +8 -4
  1187. package/src/tools/shared/filesystem/types.ts +2 -2
  1188. package/src/tools/shared/shell-output.ts +4 -3
  1189. package/src/tools/side-effects.ts +36 -28
  1190. package/src/tools/skills/delete-managed.ts +30 -17
  1191. package/src/tools/skills/load.ts +88 -46
  1192. package/src/tools/skills/sandbox-runner.ts +62 -46
  1193. package/src/tools/skills/scaffold-managed.ts +98 -48
  1194. package/src/tools/skills/script-contract.ts +5 -2
  1195. package/src/tools/skills/skill-script-runner.ts +29 -13
  1196. package/src/tools/skills/skill-tool-factory.ts +20 -10
  1197. package/src/tools/subagent/abort.ts +10 -4
  1198. package/src/tools/subagent/message.ts +14 -8
  1199. package/src/tools/subagent/read.ts +20 -11
  1200. package/src/tools/subagent/spawn.ts +14 -6
  1201. package/src/tools/subagent/status.ts +7 -4
  1202. package/src/tools/swarm/delegate.ts +75 -49
  1203. package/src/tools/system/avatar-generator.ts +46 -33
  1204. package/src/tools/system/navigate-settings.ts +29 -19
  1205. package/src/tools/system/open-system-settings.ts +30 -20
  1206. package/src/tools/system/request-permission.ts +59 -44
  1207. package/src/tools/system/version.ts +27 -16
  1208. package/src/tools/system/voice-config.ts +116 -53
  1209. package/src/tools/tasks/index.ts +8 -8
  1210. package/src/tools/tasks/task-delete.ts +61 -22
  1211. package/src/tools/tasks/task-list.ts +23 -11
  1212. package/src/tools/tasks/task-run.ts +41 -16
  1213. package/src/tools/tasks/task-save.ts +27 -10
  1214. package/src/tools/tasks/work-item-enqueue.ts +114 -48
  1215. package/src/tools/tasks/work-item-list.ts +20 -10
  1216. package/src/tools/tasks/work-item-remove.ts +49 -15
  1217. package/src/tools/tasks/work-item-run.ts +34 -13
  1218. package/src/tools/tasks/work-item-update.ts +84 -31
  1219. package/src/tools/terminal/backends/native.ts +64 -35
  1220. package/src/tools/terminal/backends/types.ts +6 -2
  1221. package/src/tools/terminal/parser.ts +200 -125
  1222. package/src/tools/terminal/safe-env.ts +27 -21
  1223. package/src/tools/terminal/sandbox-diagnostics.ts +31 -13
  1224. package/src/tools/terminal/sandbox.ts +10 -6
  1225. package/src/tools/terminal/shell.ts +124 -68
  1226. package/src/tools/tool-approval-handler.ts +193 -138
  1227. package/src/tools/types.ts +43 -23
  1228. package/src/tools/ui-surface/definitions.ts +124 -89
  1229. package/src/tools/ui-surface/registry.ts +2 -2
  1230. package/src/tools/watch/screen-watch.ts +50 -32
  1231. package/src/tools/watch/watch-state.ts +41 -15
  1232. package/src/tools/watcher/create.ts +37 -15
  1233. package/src/tools/watcher/delete.ts +9 -6
  1234. package/src/tools/watcher/digest.ts +10 -6
  1235. package/src/tools/watcher/list.ts +37 -14
  1236. package/src/tools/watcher/update.ts +33 -18
  1237. package/src/tools/weather/service.ts +331 -174
  1238. package/src/twitter/client.ts +261 -138
  1239. package/src/twitter/oauth-client.ts +17 -13
  1240. package/src/twitter/router.ts +51 -23
  1241. package/src/twitter/session.ts +27 -18
  1242. package/src/types/qrcode.d.ts +6 -3
  1243. package/src/usage/actors.ts +16 -16
  1244. package/src/usage/types.ts +3 -3
  1245. package/src/util/bundled-asset.ts +10 -6
  1246. package/src/util/canonicalize-identity.ts +11 -4
  1247. package/src/util/clipboard.ts +7 -7
  1248. package/src/util/content-id.ts +3 -3
  1249. package/src/util/debounce.ts +3 -2
  1250. package/src/util/diff.ts +55 -33
  1251. package/src/util/errors.ts +26 -26
  1252. package/src/util/fs.ts +8 -2
  1253. package/src/util/log-redact.ts +12 -12
  1254. package/src/util/logger.ts +112 -51
  1255. package/src/util/network-info.ts +13 -5
  1256. package/src/util/object.ts +4 -2
  1257. package/src/util/phone.ts +4 -4
  1258. package/src/util/platform.ts +80 -58
  1259. package/src/util/pricing.ts +49 -31
  1260. package/src/util/retry.ts +18 -7
  1261. package/src/util/row-mapper.ts +7 -4
  1262. package/src/util/silently.ts +7 -4
  1263. package/src/util/spawn.ts +48 -0
  1264. package/src/util/spinner.ts +9 -7
  1265. package/src/util/time.ts +16 -3
  1266. package/src/util/truncate.ts +1 -1
  1267. package/src/util/voice-code.ts +6 -4
  1268. package/src/util/xml.ts +5 -1
  1269. package/src/version.ts +12 -8
  1270. package/src/watcher/engine.ts +71 -44
  1271. package/src/watcher/provider-registry.ts +1 -1
  1272. package/src/watcher/providers/github.ts +40 -23
  1273. package/src/watcher/providers/gmail.ts +59 -38
  1274. package/src/watcher/providers/google-calendar.ts +62 -48
  1275. package/src/watcher/providers/linear.ts +219 -150
  1276. package/src/watcher/providers/slack.ts +93 -27
  1277. package/src/watcher/watcher-store.ts +75 -55
  1278. package/src/work-items/work-item-runner.ts +62 -29
  1279. package/src/work-items/work-item-store.ts +137 -47
  1280. package/src/workspace/commit-message-enrichment-service.ts +65 -25
  1281. package/src/workspace/commit-message-provider.ts +14 -12
  1282. package/src/workspace/git-service.ts +355 -239
  1283. package/src/workspace/heartbeat-service.ts +74 -37
  1284. package/src/workspace/provider-commit-message-generator.ts +95 -70
  1285. package/src/workspace/top-level-renderer.ts +10 -8
  1286. package/src/workspace/top-level-scanner.ts +9 -3
  1287. package/src/workspace/turn-commit.ts +63 -36
  1288. package/src/__tests__/ingress-member-store.test.ts +0 -294
  1289. package/src/__tests__/script-proxy-router.test.ts +0 -215
  1290. package/src/config/bundled-skills/trusted-contacts/SKILL.md +0 -372
  1291. package/src/memory/guardian-bindings.ts +0 -158
  1292. package/src/memory/ingress-member-store.ts +0 -352
  1293. package/src/tools/network/script-proxy/__tests__/router.test.ts +0 -77
  1294. package/src/tools/network/script-proxy/certs.ts +0 -7
  1295. package/src/tools/network/script-proxy/connect-tunnel.ts +0 -1
  1296. package/src/tools/network/script-proxy/http-forwarder.ts +0 -2
  1297. package/src/tools/network/script-proxy/logging.ts +0 -12
  1298. package/src/tools/network/script-proxy/mitm-handler.ts +0 -2
  1299. package/src/tools/network/script-proxy/policy.ts +0 -4
  1300. package/src/tools/network/script-proxy/router.ts +0 -2
  1301. package/src/tools/network/script-proxy/server.ts +0 -5
  1302. package/src/tools/network/script-proxy/types.ts +0 -19
package/.env.example CHANGED
@@ -9,11 +9,11 @@ OLLAMA_BASE_URL=
9
9
 
10
10
  # --- Remote Access ---
11
11
 
12
- # Override the daemon socket path (default: ~/.vellum/vellum.sock).
12
+ # Override the assistant socket path (default: ~/.vellum/vellum.sock).
13
13
  # Use this to target a forwarded or remote socket.
14
14
  # VELLUM_DAEMON_SOCKET=/path/to/remote/vellum.sock
15
15
 
16
- # Control daemon autostart behavior.
16
+ # Control assistant autostart behavior.
17
17
  # When VELLUM_DAEMON_SOCKET is set, autostart is disabled by default.
18
18
  # Set to 1 to force autostart even with a custom socket path.
19
19
  # VELLUM_DAEMON_AUTOSTART=1
package/AGENTS.md ADDED
@@ -0,0 +1,5 @@
1
+ # Assistant Service — Agent Instructions
2
+
3
+ For error handling conventions (throw vs result objects vs null), see [docs/error-handling.md](docs/error-handling.md).
4
+
5
+ Subdirectory-scoped rules live in local AGENTS.md files: `src/runtime/`, `src/approvals/`, `src/notifications/`.
package/ARCHITECTURE.md CHANGED
@@ -14,11 +14,11 @@ This document owns assistant-runtime architecture details. The repo-level archit
14
14
 
15
15
  ### Guardian Actor Context (Unified Across Channels)
16
16
 
17
- - Guardian/non-guardian/unverified classification is centralized in `assistant/src/runtime/guardian-context-resolver.ts`.
17
+ - Guardian/non-guardian/unverified classification is centralized in `assistant/src/runtime/trust-context-resolver.ts`.
18
18
  - The same resolver is used by:
19
19
  - `/channels/inbound` (Telegram/SMS/WhatsApp path) before run orchestration.
20
20
  - Inbound Twilio voice setup (`RelayConnection.handleSetup`) to seed call-time actor context.
21
- - Runtime channel runs pass this as `guardianContext`, and session runtime assembly injects `<inbound_actor_context>` (via `inboundActorContextFromGuardian()`) into provider-facing prompts.
21
+ - Runtime channel runs pass this as `trustContext`, and session runtime assembly injects `<inbound_actor_context>` (via `inboundActorContextFromTrustContext()`) into provider-facing prompts.
22
22
  - Voice calls mirror the same prompt contract: `CallController` receives guardian context on setup and refreshes it immediately after successful voice challenge verification, so the first post-verification turn is grounded as `actor_role: guardian`.
23
23
  - Voice-specific behavior (DTMF/speech verification flow, relay state machine) remains voice-local; only actor-role resolution is shared.
24
24
 
@@ -28,34 +28,34 @@ All HTTP API requests use a single `Authorization: Bearer <jwt>` header for auth
28
28
 
29
29
  **Token schema (JWT claims):**
30
30
 
31
- | Claim | Type | Description |
32
- |-------|------|-------------|
33
- | `iss` | `'vellum-auth'` | Issuer — always `vellum-auth` |
34
- | `aud` | `'vellum-daemon'` or `'vellum-gateway'` | Audience — which service the token targets |
35
- | `sub` | string | Subject — encodes principal type and identity (see patterns below) |
36
- | `scope_profile` | string | Named permission bundle (see profiles below) |
37
- | `exp` | number | Expiry timestamp (seconds since epoch) |
38
- | `policy_epoch` | number | Policy version — stale tokens are rejected with `refresh_required` |
39
- | `iat` | number | Issued-at timestamp |
40
- | `jti` | string | Unique token ID |
31
+ | Claim | Type | Description |
32
+ | --------------- | --------------------------------------- | ------------------------------------------------------------------ |
33
+ | `iss` | `'vellum-auth'` | Issuer — always `vellum-auth` |
34
+ | `aud` | `'vellum-daemon'` or `'vellum-gateway'` | Audience — which service the token targets |
35
+ | `sub` | string | Subject — encodes principal type and identity (see patterns below) |
36
+ | `scope_profile` | string | Named permission bundle (see profiles below) |
37
+ | `exp` | number | Expiry timestamp (seconds since epoch) |
38
+ | `policy_epoch` | number | Policy version — stale tokens are rejected with `refresh_required` |
39
+ | `iat` | number | Issued-at timestamp |
40
+ | `jti` | string | Unique token ID |
41
41
 
42
42
  **Subject patterns:**
43
43
 
44
- | Pattern | Principal Type | Description |
45
- |---------|---------------|-------------|
46
- | `actor:<assistantId>:<actorPrincipalId>` | `actor` | Desktop, iOS, or CLI client |
47
- | `svc:gateway:<assistantId>` | `svc_gateway` | Gateway service (ingress, webhooks) |
48
- | `ipc:<assistantId>:<sessionId>` | `ipc` | Internal IPC connections |
49
- | `svc:daemon:self` | n/a | Daemon self-identification (for internal use) |
44
+ | Pattern | Principal Type | Description |
45
+ | ---------------------------------------- | -------------- | --------------------------------------------- |
46
+ | `actor:<assistantId>:<actorPrincipalId>` | `actor` | Desktop, iOS, or CLI client |
47
+ | `svc:gateway:<assistantId>` | `svc_gateway` | Gateway service (ingress, webhooks) |
48
+ | `ipc:<assistantId>:<sessionId>` | `ipc` | Internal IPC connections |
49
+ | `svc:daemon:self` | n/a | Daemon self-identification (for internal use) |
50
50
 
51
51
  **Scope profiles:**
52
52
 
53
- | Profile | Scopes | Used by |
54
- |---------|--------|---------|
55
- | `actor_client_v1` | `chat.{read,write}`, `approval.{read,write}`, `settings.{read,write}`, `attachments.{read,write}`, `calls.{read,write}`, `feature_flags.{read,write}` | Desktop, iOS, CLI clients |
56
- | `gateway_ingress_v1` | `ingress.write`, `internal.write` | Gateway channel inbound + webhook forwarding |
57
- | `gateway_service_v1` | `settings.read`, `settings.write`, `internal.write` | Gateway service-to-daemon calls |
58
- | `ipc_v1` | `ipc.all` | Internal IPC connections |
53
+ | Profile | Scopes | Used by |
54
+ | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
55
+ | `actor_client_v1` | `chat.{read,write}`, `approval.{read,write}`, `settings.{read,write}`, `attachments.{read,write}`, `calls.{read,write}`, `feature_flags.{read,write}` | Desktop, iOS, CLI clients |
56
+ | `gateway_ingress_v1` | `ingress.write`, `internal.write` | Gateway channel inbound + webhook forwarding |
57
+ | `gateway_service_v1` | `settings.read`, `settings.write`, `internal.write` | Gateway service-to-daemon calls |
58
+ | `ipc_v1` | `ipc.all` | Internal IPC connections |
59
59
 
60
60
  **Identity lifecycle:**
61
61
 
@@ -75,21 +75,21 @@ All HTTP API requests use a single `Authorization: Bearer <jwt>` header for auth
75
75
 
76
76
  **Key source files:**
77
77
 
78
- | File | Purpose |
79
- |------|---------|
80
- | `src/runtime/auth/types.ts` | Core type definitions: `TokenClaims`, `AuthContext`, `ScopeProfile`, `Scope`, `PrincipalType` |
81
- | `src/runtime/auth/token-service.ts` | JWT signing, verification, and policy epoch management |
82
- | `src/runtime/auth/credential-service.ts` | Credential pair minting (access token + refresh token) |
83
- | `src/runtime/auth/scopes.ts` | Scope profile resolver (`resolveScopeProfile`) |
84
- | `src/runtime/auth/context.ts` | AuthContext builder from JWT claims |
85
- | `src/runtime/auth/subject.ts` | Subject string parser (`parseSub`) |
86
- | `src/runtime/auth/middleware.ts` | JWT bearer auth middleware (`authenticateRequest`) |
87
- | `src/runtime/auth/route-policy.ts` | Route-level scope/principal enforcement |
88
- | `src/runtime/routes/guardian-bootstrap-routes.ts` | `POST /v1/integrations/guardian/vellum/bootstrap` (initial JWT issuance) |
89
- | `src/runtime/routes/guardian-refresh-routes.ts` | `POST /v1/integrations/guardian/vellum/refresh` (token rotation) |
90
- | `src/runtime/routes/pairing-routes.ts` | JWT credential issuance in pairing flow |
91
- | `src/runtime/local-actor-identity.ts` | `resolveLocalIpcGuardianContext` — deterministic IPC identity |
92
- | `src/memory/guardian-bindings.ts` | Guardian binding persistence (shared across all channels) |
78
+ | File | Purpose |
79
+ | ------------------------------------------------- | --------------------------------------------------------------------------------------------- |
80
+ | `src/runtime/auth/types.ts` | Core type definitions: `TokenClaims`, `AuthContext`, `ScopeProfile`, `Scope`, `PrincipalType` |
81
+ | `src/runtime/auth/token-service.ts` | JWT signing, verification, and policy epoch management |
82
+ | `src/runtime/auth/credential-service.ts` | Credential pair minting (access token + refresh token) |
83
+ | `src/runtime/auth/scopes.ts` | Scope profile resolver (`resolveScopeProfile`) |
84
+ | `src/runtime/auth/context.ts` | AuthContext builder from JWT claims |
85
+ | `src/runtime/auth/subject.ts` | Subject string parser (`parseSub`) |
86
+ | `src/runtime/auth/middleware.ts` | JWT bearer auth middleware (`authenticateRequest`) |
87
+ | `src/runtime/auth/route-policy.ts` | Route-level scope/principal enforcement |
88
+ | `src/runtime/routes/guardian-bootstrap-routes.ts` | `POST /v1/integrations/guardian/vellum/bootstrap` (initial JWT issuance) |
89
+ | `src/runtime/routes/guardian-refresh-routes.ts` | `POST /v1/integrations/guardian/vellum/refresh` (token rotation) |
90
+ | `src/runtime/routes/pairing-routes.ts` | JWT credential issuance in pairing flow |
91
+ | `src/runtime/local-actor-identity.ts` | `resolveLocalIpcGuardianContext` — deterministic IPC identity |
92
+ | `src/memory/channel-guardian-store.ts` | Guardian binding types and re-exports |
93
93
 
94
94
  ### Channel-Agnostic Scoped Approval Grants
95
95
 
@@ -113,10 +113,20 @@ All guardian approval decisions — regardless of how they arrive — route thro
113
113
  - `approve_always` is downgraded to `approve_once` for guardian-on-behalf requests (guardians cannot permanently allowlist tools for requesters).
114
114
  - Scoped grant minting only fires on explicit approve for requests with tool metadata.
115
115
 
116
- **Dual-mode approval UX:** Guardians can respond to approval prompts via two modes, both routing through `applyGuardianDecision`:
116
+ **Unified interaction model buttons first, text fallback:** All guardian approval prompts follow a canonical "buttons first, text fallback" pattern. Structured button UIs are the primary interaction surface, but every prompt also carries deterministic text fallback instructions so guardians can always act even when buttons are unavailable or not used. This applies uniformly across all request kinds (`tool_approval`, `pending_question`, `access_request`) and all channels (macOS desktop, Telegram, SMS, WhatsApp).
117
117
 
118
- 1. **Button UI (deterministic):** Desktop clients and channel adapters render structured `GuardianDecisionPrompt` objects as tappable buttons. Desktop clients use HTTP endpoints (`GET /v1/guardian-actions/pending`, `POST /v1/guardian-actions/decision`) or IPC (`guardian_actions_pending_request`, `guardian_action_decision`). Channel adapters (Telegram inline keyboards, WhatsApp) encode actions in callback data.
119
- 2. **Conversational (NL parsing):** Text replies are classified by the conversational approval engine or parsed by the legacy text parser. The resulting `ApprovalDecisionResult` is passed to `applyGuardianDecision` identically.
118
+ **Button-first path (deterministic):**
119
+
120
+ - Desktop clients (macOS/iOS) render `GuardianDecisionPrompt` objects as tappable card UIs with kind-aware headers and action buttons. The `GuardianDecisionBubble` renders distinct headers for each kind: "Tool Approval Required", "Question Pending", or "Access Request".
121
+ - Desktop clients submit decisions via HTTP (`POST /v1/guardian-actions/decision`) or IPC (`guardian_action_decision`). Both route through `applyCanonicalGuardianDecision`.
122
+ - Channel adapters (Telegram inline keyboards, WhatsApp) encode actions as callback data (`apr:<requestId>:<action>`).
123
+
124
+ **Text fallback path (always available):**
125
+
126
+ - Every prompt includes a `requestCode` (6-char alphanumeric). Guardians can reply with `<requestCode> approve` or `<requestCode> reject` on any channel.
127
+ - `access_request` prompts additionally embed explicit text directives in `questionText`: the request-code approve/reject directive and the `"open invite flow"` phrase for starting the Trusted Contacts invite flow.
128
+ - `pending_question` prompts (voice-originated) support `<requestCode> <your answer>` for free-text answers.
129
+ - The `routeGuardianReply` router processes text replies through a priority-ordered pipeline: callback parsing -> request code parsing -> NL classification. All paths converge on `applyCanonicalGuardianDecision`.
120
130
 
121
131
  **Shared type system:** `GuardianDecisionPrompt` and `GuardianDecisionAction` (in `src/runtime/guardian-decision-types.ts`) define the structured prompt model. `buildDecisionActions()` computes the action set respecting `persistentDecisionsAllowed` and `forGuardianOnBehalf` flags. `buildPlainTextFallback()` generates parser-compatible text instructions. Channel adapters map these to channel-specific formats via `toApprovalActionOptions()` in `channel-approval-types.ts`.
122
132
 
@@ -148,12 +158,12 @@ In addition to persistent trust rules (`always_allow` / `always_deny`), the appr
148
158
 
149
159
  **Key source files:**
150
160
 
151
- | File | Purpose |
152
- |------|---------|
161
+ | File | Purpose |
162
+ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
153
163
  | `src/runtime/session-approval-overrides.ts` | In-memory store: `setThreadMode`, `setTimedMode`, `getEffectiveMode`, `clearMode`, `hasActiveOverride`, `clearAll` |
154
- | `src/permissions/types.ts` | `UserDecision` type (includes `allow_10m`, `allow_thread`, `temporary_override`), `isAllowDecision()` helper |
155
- | `src/runtime/guardian-decision-types.ts` | `buildDecisionActions()` — controls which temporary options appear in approval prompts |
156
- | `src/tools/permission-checker.ts` | Permission pipeline integration — checks temporary overrides before prompting |
164
+ | `src/permissions/types.ts` | `UserDecision` type (includes `allow_10m`, `allow_thread`, `temporary_override`), `isAllowDecision()` helper |
165
+ | `src/runtime/guardian-decision-types.ts` | `buildDecisionActions()` — controls which temporary options appear in approval prompts |
166
+ | `src/tools/permission-checker.ts` | Permission pipeline integration — checks temporary overrides before prompting |
157
167
 
158
168
  ### Canonical Guardian Request System
159
169
 
@@ -169,9 +179,9 @@ The canonical guardian request system provides a channel-agnostic, unified domai
169
179
 
170
180
  4. **Deterministic API (prompt listing and decision endpoints):** Desktop clients and API consumers use `GET /v1/guardian-actions/pending` and `POST /v1/guardian-actions/decision` (HTTP) or the equivalent IPC messages. These endpoints surface canonical requests alongside legacy pending interactions and channel approval records, with deduplication to avoid double-rendering.
171
181
 
172
- 5. **Dual-mode (deterministic + conversational):** Guardians can respond via structured button UIs (deterministic path) or free-text conversation (NL path). Both paths converge on the same canonical primitive. Code-only messages (just a request code without decision text) return clarification instead of auto-approving. Disambiguation with multiple pending requests stays fail-closed — no auto-resolve when the target is ambiguous.
182
+ 5. **Buttons first, text fallback:** All request kinds (`tool_approval`, `pending_question`, `access_request`) are rendered as structured button cards when displayed in macOS/iOS guardian threads. Each prompt also embeds deterministic text fallback instructions (request-code-based approve/reject directives, and for `access_request` the "open invite flow" phrase) so text-based channels and manual fallback always work. Code-only messages (just a request code without decision text) return clarification instead of auto-approving. Disambiguation with multiple pending requests stays fail-closed — no auto-resolve when the target is ambiguous.
173
183
 
174
- **Resolver registry:** Kind-specific resolvers (`src/approvals/guardian-request-resolvers.ts`) handle side effects after CAS resolution. Built-in resolvers: `tool_approval` (channel/desktop approval path) and `pending_question` (voice call question path). New request kinds register resolvers without touching the core primitive.
184
+ **Resolver registry:** Kind-specific resolvers (`src/approvals/guardian-request-resolvers.ts`) handle side effects after CAS resolution. Built-in resolvers: `tool_approval` (channel/desktop approval path), `pending_question` (voice call question path), and `access_request` (trusted-contact verification session creation). New request kinds register resolvers without touching the core primitive.
175
185
 
176
186
  **Expiry sweeps:** Three complementary sweeps run on 60-second intervals to clean up stale requests:
177
187
 
@@ -414,7 +424,7 @@ External users who are not the guardian can gain access to the assistant through
414
424
  3. Guardian approves or denies via callback button or conversational intent (routed through `guardian-approval-interception.ts`).
415
425
  4. On approval, an identity-bound verification session with a 6-digit code is created (`access-request-decision.ts` → `channel-guardian-service.ts`).
416
426
  5. Guardian gives the code to the requester out-of-band.
417
- 6. Requester enters the code; identity binding is verified, the challenge is consumed, and an active member record is created in `assistant_ingress_members`.
427
+ 6. Requester enters the code; identity binding is verified, the challenge is consumed, and an active contact channel is created in the contacts table.
418
428
  7. All subsequent messages are accepted through the ingress ACL.
419
429
 
420
430
  **Channel-agnostic design:** The entire flow operates on abstract `ChannelId` and `actorExternalId`/`conversationExternalId` fields (DB column names `externalUserId`/`externalChatId` are unchanged). Identity binding adapts per channel: Telegram uses chat IDs, SMS/voice use E.164 phone numbers, HTTP API uses caller-provided identity. No channel-specific branching exists in the trusted contact code paths.
@@ -448,9 +458,9 @@ External users who are not the guardian can gain access to the assistant through
448
458
  | `src/runtime/channel-guardian-service.ts` | Verification challenge lifecycle, identity binding, rate limiting |
449
459
  | `src/runtime/routes/ingress-routes.ts` | HTTP API handlers for member/invite management |
450
460
  | `src/runtime/ingress-service.ts` | Business logic for member CRUD |
451
- | `src/memory/ingress-member-store.ts` | Member record persistence |
461
+ | `src/contacts/contact-store.ts` | Contact read queries — lookup, search, list, and channel operations |
452
462
  | `src/memory/channel-guardian-store.ts` | Approval request and verification challenge persistence |
453
- | `src/config/bundled-skills/trusted-contacts/SKILL.md` | Skill teaching the assistant to manage contacts via HTTP API |
463
+ | `src/config/bundled-skills/contacts/SKILL.md` | Unified skill for contact management, access control, and invite links |
454
464
 
455
465
  ### Guardian-Initiated Invite Links
456
466
 
@@ -461,7 +471,7 @@ A complementary access-granting flow where the guardian proactively creates a sh
461
471
  ```
462
472
  ┌─────────────────────────────────────────────────────────────┐
463
473
  │ Conversational Orchestration (guardian-invite-intent.ts) │
464
- │ Pattern-based intent detection → forces trusted-contacts
474
+ │ Pattern-based intent detection → forces contacts
465
475
  │ skill load for create / list / revoke actions │
466
476
  ├─────────────────────────────────────────────────────────────┤
467
477
  │ Channel Transport Adapters (channel-invite-transport.ts) │
@@ -481,7 +491,7 @@ A complementary access-granting flow where the guardian proactively creates a sh
481
491
  **Invite link flow (Telegram):**
482
492
 
483
493
  1. Guardian asks the assistant to create an invite via desktop chat.
484
- 2. `guardian-invite-intent.ts` detects the intent and rewrites the message to force-load the `trusted-contacts` skill.
494
+ 2. `guardian-invite-intent.ts` detects the intent and rewrites the message to force-load the `contacts` skill.
485
495
  3. The skill calls the ingress HTTP API to create an invite token, then calls the Telegram transport adapter to build a deep link: `https://t.me/<bot>?start=iv_<token>`.
486
496
  4. Guardian shares the link with the invitee out-of-band.
487
497
  5. Invitee clicks the link, opening Telegram which sends `/start iv_<token>` to the bot.
@@ -537,7 +547,7 @@ Voice invites use a short numeric code (4-10 digits, default 6) instead of a URL
537
547
  | `src/runtime/channel-invite-transport.ts` | Transport adapter registry with `buildShareableInvite` / `extractInboundToken` interface |
538
548
  | `src/runtime/channel-invite-transports/telegram.ts` | Telegram adapter — `t.me/<bot>?start=iv_<token>` deep links, `/start iv_<token>` extraction |
539
549
  | `src/runtime/channel-invite-transports/voice.ts` | Voice transport adapter — code-based redemption metadata |
540
- | `src/daemon/guardian-invite-intent.ts` | Intent detection — routes create/list/revoke requests into the trusted-contacts skill |
550
+ | `src/daemon/guardian-invite-intent.ts` | Intent detection — routes create/list/revoke requests into the contacts skill |
541
551
  | `src/runtime/ingress-service.ts` | Shared business logic for invite/member operations (used by both HTTP routes and IPC) |
542
552
  | `src/runtime/routes/ingress-routes.ts` | HTTP API handlers for member/invite management including voice invite creation and redemption |
543
553
  | `src/runtime/routes/inbound-message-handler.ts` | Invite token intercept in the inbound flow (non-member and inactive-member branches) |
@@ -1103,6 +1113,67 @@ sequenceDiagram
1103
1113
 
1104
1114
  ---
1105
1115
 
1116
+ ## Context Overflow Recovery
1117
+
1118
+ The session loop implements a deterministic overflow convergence pipeline that recovers from context-too-large provider rejections without surfacing errors to the user. Instead of the previous behavior where a `CONTEXT_TOO_LARGE` error was emitted as a `session_error`, the pipeline iteratively reduces the context payload until it fits within the provider's limit.
1119
+
1120
+ ### Two-Phase Architecture
1121
+
1122
+ **Phase 1 — Preflight budgeting:** Before calling the provider, the session loop estimates prompt token count and compares it against a preflight budget (`maxInputTokens * (1 - safetyMarginRatio)`). If the estimate exceeds the budget, the reducer runs proactively, avoiding a wasted provider round-trip. This catches overflow caused by large tool results, media payloads, or accumulated history before any network call.
1123
+
1124
+ **Phase 2 — Post-rejection convergence:** If the provider returns a context-too-large error despite preflight checks (e.g., due to estimation inaccuracy), the same reducer runs reactively in a bounded loop, retrying the provider after each tier.
1125
+
1126
+ ### Tiered Reduction
1127
+
1128
+ The reducer (`context-overflow-reducer.ts`) applies four monotonically more aggressive tiers, each idempotent:
1129
+
1130
+ | Tier | Reduction | Effect |
1131
+ | ------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
1132
+ | 1. Forced compaction | Emergency `maybeCompact()` with `force: true`, `minKeepRecentUserTurns: 0` | Summarizes older history more aggressively than normal compaction |
1133
+ | 2. Tool-result truncation | `truncateToolResultsAcrossHistory()` at 4,000 chars per result | Shrinks verbose tool outputs (shell, file reads) across all retained messages |
1134
+ | 3. Media/file stubbing | `stripMediaPayloadsForRetry()` | Replaces image and file content blocks with lightweight text stubs |
1135
+ | 4. Injection downgrade | Sets `injectionMode` to `"minimal"` | Drops runtime injections (workspace listing, temporal context, memory recall) to minimal set |
1136
+
1137
+ After each tier, the reducer re-estimates tokens. If the estimate is within budget, the loop breaks and the provider call proceeds. The loop is bounded by `maxAttempts` (default 3).
1138
+
1139
+ ### Overflow Policy and Latest-Turn Compression
1140
+
1141
+ When all four reducer tiers are exhausted and the provider still rejects, the overflow policy resolver (`context-overflow-policy.ts`) determines the next action based on config and session interactivity:
1142
+
1143
+ | Session Type | Config Policy | Action |
1144
+ | --------------- | ----------------------- | ------------------------------------------------------------------------------------------------------ |
1145
+ | Interactive | `"summarize"` (default) | `request_user_approval` — prompt the user via `PermissionPrompter` before compressing the latest turn |
1146
+ | Non-interactive | `"truncate"` (default) | `auto_compress_latest_turn` — compress without asking |
1147
+ | Any | `"drop"` | `fail_gracefully` — fall through to the final context-overflow fallback, which emits a `session_error` |
1148
+
1149
+ **Approval gate:** For interactive sessions, the pipeline uses `requestCompressionApproval()` in `context-overflow-approval.ts`, which presents a confirmation prompt through the existing `PermissionPrompter` flow (`POST /v1/confirm`). The prompt uses a reserved pseudo tool name (`context_overflow_compression`) so the UI can display a meaningful label. The decision is one-shot per overflow (no "always allow" option).
1150
+
1151
+ **Deny handling:** If the user declines compression, the session emits a graceful assistant explanation message ("The conversation has grown too long...") instead of a `session_error`. The deny message is persisted to conversation history and delivered via `assistant_text_delta` events, so the user sees a normal chat bubble rather than an error toast. The turn ends cleanly without triggering the error classification pipeline.
1152
+
1153
+ ### Config
1154
+
1155
+ All overflow recovery settings live under `contextWindow.overflowRecovery` in the assistant config schema:
1156
+
1157
+ | Config key | Default | Purpose |
1158
+ | ------------------------------------- | ------------: | ------------------------------------------------------------------------------ |
1159
+ | `enabled` | `true` | Master switch for the overflow recovery pipeline |
1160
+ | `safetyMarginRatio` | `0.05` | Fraction of `maxInputTokens` reserved as safety margin for preflight budget |
1161
+ | `maxAttempts` | `3` | Maximum reducer iterations per overflow event (both preflight and convergence) |
1162
+ | `interactiveLatestTurnCompression` | `"summarize"` | Policy for interactive sessions: `"summarize"`, `"truncate"`, or `"drop"` |
1163
+ | `nonInteractiveLatestTurnCompression` | `"truncate"` | Policy for non-interactive sessions: same options |
1164
+
1165
+ ### Key Source Files
1166
+
1167
+ | File | Purpose |
1168
+ | ----------------------------------------- | -------------------------------------------------------------------------------- |
1169
+ | `src/daemon/context-overflow-reducer.ts` | Tiered reducer: four-tier pipeline with idempotent steps and cumulative state |
1170
+ | `src/daemon/context-overflow-policy.ts` | Overflow policy resolver: maps config + interactivity to concrete action |
1171
+ | `src/daemon/context-overflow-approval.ts` | Approval gate: prompts user for latest-turn compression via `PermissionPrompter` |
1172
+ | `src/daemon/session-agent-loop.ts` | Integration: preflight budget check, convergence loop, approval/deny flow |
1173
+ | `src/config/core-schema.ts` | `ContextOverflowRecoveryConfigSchema` with defaults and validation |
1174
+
1175
+ ---
1176
+
1106
1177
  ## Task Routing — Voice Source Bypass and Escalation
1107
1178
 
1108
1179
  When a task is submitted via `task_submit`, the daemon classifies it to determine routing. Voice-sourced tasks and slash command candidates bypass the classifier entirely for lower latency and more predictable routing.
@@ -1333,6 +1404,26 @@ graph LR
1333
1404
 
1334
1405
  Skills can expose custom tools via a `TOOLS.json` manifest alongside their `SKILL.md`. When a skill is activated during a session, its tools are dynamically loaded, registered, and made available to the agent loop. Browser, Gmail, Claude Code, Weather, and other capabilities are delivered as **bundled skills** rather than hardcoded tools. Browser tools (previously the core `headless-browser` tool) are now provided by the bundled `browser` skill with system default allow rules that preserve frictionless auto-approval.
1335
1406
 
1407
+ ### Bundled Skill Retrieval Contract (CLI-First)
1408
+
1409
+ Config/status retrieval instructions in bundled `SKILL.md` files are CLI-first. Retrieval should flow through canonical `vellum` CLI surfaces (`vellum config get` for generic settings, secure credential surfaces for secrets, and domain reads where available) instead of direct gateway curl snippets or keychain lookups.
1410
+
1411
+ ```mermaid
1412
+ graph LR
1413
+ SKILL["SKILL.md retrieval instruction"] --> BASH["bash tool"]
1414
+ BASH --> CLI["vellum config get / secure credential surfaces / domain reads"]
1415
+ CLI --> GW["Gateway read route (when needed)"]
1416
+ GW --> RT["Runtime handler/config service"]
1417
+ ```
1418
+
1419
+ Rules enforced by guard tests:
1420
+
1421
+ - Retrieval reads use `bash` + canonical CLI surfaces (`vellum config get` and domain read commands where available).
1422
+ - Direct gateway `curl` + manual bearer headers are for control-plane writes/actions, not retrieval reads.
1423
+ - Bundled skill docs must not instruct direct keychain lookups (`security find-generic-password`, `secret-tool`) for retrieval.
1424
+ - `host_bash` is not used for Vellum CLI retrieval commands unless intentionally allowlisted.
1425
+ - Outbound credentialed API calls prefer proxied execution (`bash` with `network_mode: "proxied"` + `credential_ids`) so credentials are injected by policy-aware plumbing instead of copied into commands.
1426
+
1336
1427
  ### Skill Directory Structure
1337
1428
 
1338
1429
  Each skill directory (bundled, managed, workspace, or extra) may contain:
@@ -1987,7 +2078,7 @@ The pairing function (`pairDeliveryWithConversation`) is resilient — errors ar
1987
2078
 
1988
2079
  The notification pipeline uses a single conversation materialization path across producers:
1989
2080
 
1990
- 1. **Canonical pipeline** (`emitNotificationSignal` → decision engine → broadcaster → conversation pairing → adapters): The broadcaster pairs each delivery with a conversation, then dispatches a `notification_intent` IPC event via the Vellum adapter. The IPC payload includes `deepLinkMetadata` (e.g. `{ conversationId }`) so the macOS/iOS client can deep-link to the relevant context when the user taps the notification.
2081
+ 1. **Canonical pipeline** (`emitNotificationSignal` → decision engine → broadcaster → conversation pairing → adapters): The broadcaster pairs each delivery with a conversation, then dispatches a `notification_intent` IPC event via the Vellum adapter. The IPC payload includes `deepLinkMetadata` (e.g. `{ conversationId, messageId }`) so the macOS/iOS client can deep-link to the relevant context when the user taps the notification. When `messageId` is present, the client scrolls to that specific message within the thread (message-level anchoring).
1991
2082
  2. **Guardian bookkeeping** (`dispatchGuardianQuestion`): Guardian dispatch creates `guardian_action_request` / `guardian_action_delivery` audit rows derived from pipeline delivery results and the per-dispatch `onThreadCreated` callback — there is no separate thread-creation path.
1992
2083
 
1993
2084
  ### Thread Surfacing via `notification_thread_created` IPC (Creation-Only)
@@ -2016,6 +2107,15 @@ The decision engine produces per-channel thread actions using a candidate-driven
2016
2107
  5. **IPC gating**: `notification_thread_created` fires only on actual creation, not on reuse.
2017
2108
  6. **Audit trail**: Thread actions are persisted in both `notification_decisions.validation_results` and `notification_deliveries` columns (`thread_action`, `thread_target_conversation_id`, `thread_decision_fallback_used`).
2018
2109
 
2110
+ ### Guardian Call Thread Affinity
2111
+
2112
+ When a guardian question originates from an active phone call (`callSessionId` present on the signal), the decision engine enforces thread affinity so all questions within the same call land in one vellum thread:
2113
+
2114
+ - **First question in a call** (no `conversationAffinityHint`): `enforceGuardianCallThreadAffinity` forces `start_new` for the vellum channel, creating a dedicated thread for the call.
2115
+ - **Subsequent questions in the same call** (affinity hint already set by `dispatchGuardianQuestion`): The guard is a no-op, and `enforceConversationAffinity` routes to `reuse_existing` using the hint's `conversationId`.
2116
+
2117
+ This guard runs **before** `enforceConversationAffinity` in the post-decision chain so the two cooperate: the first dispatch creates the thread, and subsequent dispatches reuse it via the affinity hint that `dispatchGuardianQuestion` sets after observing the first delivery's `conversationId`.
2118
+
2019
2119
  ### Guardian Multi-Request Disambiguation in Reused Threads
2020
2120
 
2021
2121
  When the decision engine routes multiple guardian questions to the same conversation (via `reuse_existing`), those questions share a single thread. The guardian disambiguates which question they are answering using **request-code prefixes**:
@@ -2034,7 +2134,7 @@ Reminders carry optional `routingIntent` (`single_channel` | `multi_channel` | `
2034
2134
 
2035
2135
  Notifications are delivered to three channel types:
2036
2136
 
2037
- - **Vellum (always connected)**: Local IPC via the daemon's broadcast mechanism. The `VellumAdapter` emits a `notification_intent` message with rendered copy and optional `deepLinkMetadata`.
2137
+ - **Vellum (always connected)**: Local IPC via the daemon's broadcast mechanism. The `VellumAdapter` emits a `notification_intent` message with rendered copy and optional `deepLinkMetadata` (includes `conversationId` for thread navigation and `messageId` for message-level scroll anchoring).
2038
2138
  - **Telegram (when guardian binding exists)**: HTTP POST to the gateway's `/deliver/telegram` endpoint. Requires an active guardian binding for the assistant.
2039
2139
  - **SMS (when guardian binding exists)**: HTTP POST to the gateway's `/deliver/sms` endpoint. Follows the same pattern as Telegram; the `SmsAdapter` sends text-only messages via the Twilio Messages API. The `assistantId` is threaded through the delivery payload for multi-assistant phone number resolution.
2040
2140
 
@@ -2122,7 +2222,7 @@ Some tool outputs contain values that must reach the user's final reply but shou
2122
2222
 
2123
2223
  3. **Post-generation substitution** (`src/agent/loop.ts`): Before emitting streamed `text_delta` events and before building the final `assistantMessage`, all placeholders are deterministically replaced with their real values. The substitution is chunk-safe for streaming (buffering partial placeholder prefixes across deltas).
2124
2224
 
2125
- Key files: `src/tools/sensitive-output-placeholders.ts`, `src/tools/executor.ts` (extraction hook), `src/agent/loop.ts` (substitution), `src/config/bundled-skills/trusted-contacts/SKILL.md` (invite flow adoption).
2225
+ Key files: `src/tools/sensitive-output-placeholders.ts`, `src/tools/executor.ts` (extraction hook), `src/agent/loop.ts` (substitution), `src/config/bundled-skills/contacts/SKILL.md` (invite flow adoption).
2126
2226
 
2127
2227
  ### Notifications
2128
2228
 
@@ -2145,22 +2245,22 @@ The daemon uses a single fixed internal scope constant — `DAEMON_INTERNAL_ASSI
2145
2245
 
2146
2246
  The guardian trust system uses a three-valued `TrustClass` — `'guardian'`, `'trusted_contact'`, or `'unknown'` — as the single vocabulary for actor trust classification across all channels and runtime paths. There is no legacy `actorRole` concept; all trust decisions flow through `TrustClass`.
2147
2247
 
2148
- **`GuardianRuntimeContext`** (in `src/daemon/session-runtime-assembly.ts`) is the single runtime carrier for trust state on channel-originated turns. It carries `trustClass`, guardian identity fields, and requester metadata. The `guardianPrincipalId` field is typed as `?: string` (optional but non-nullable) — a principal ID is present when a guardian binding exists but is never `null`.
2248
+ **`TrustContext`** (in `src/daemon/session-runtime-assembly.ts`) is the single runtime carrier for trust state on channel-originated turns. It carries `trustClass`, guardian identity fields, and requester metadata. The `guardianPrincipalId` field is typed as `?: string` (optional but non-nullable) — a principal ID is present when a guardian binding exists but is never `null`.
2149
2249
 
2150
- **Explicit trust gates:** `guardianTrustClass` is a **required** field in `ToolContext` (in `src/tools/types.ts`). Every tool execution must carry a trust classification — the field is not optional. This ensures trust-gated tool policies (guardian control-plane restrictions, host-tool blocking for untrusted actors) cannot be bypassed by omitting the classification.
2250
+ **Explicit trust gates:** `trustClass` is a **required** field in `ToolContext` (in `src/tools/types.ts`). Every tool execution must carry a trust classification — the field is not optional. This ensures trust-gated tool policies (guardian control-plane restrictions, host-tool blocking for untrusted actors) cannot be bypassed by omitting the classification.
2151
2251
 
2152
- **Guardian bindings** (in `src/memory/guardian-bindings.ts`) always carry `guardianPrincipalId: string` as a required, non-null field. A binding without a principal ID is invalid and cannot be created.
2252
+ **Guardian bindings** (in `src/memory/channel-guardian-store.ts`) always carry `guardianPrincipalId: string` as a required, non-null field. A binding without a principal ID is invalid and cannot be created.
2153
2253
 
2154
- **Strict retry sweep parsing:** The channel retry sweep (`src/runtime/channel-retry-sweep.ts`) uses `parseGuardianRuntimeContext()` which validates `trustClass` against the canonical three-value set. There is no fallback to a legacy `actorRole` field — stored payloads that lack a valid `trustClass` are rejected deterministically to prevent silent privilege escalation. When `guardianCtx` is entirely absent from a stored payload (pre-guardian events), the sweep synthesizes an explicit `trustClass: 'unknown'` context so that replay never proceeds without a trust classification.
2254
+ **Strict retry sweep parsing:** The channel retry sweep (`src/runtime/channel-retry-sweep.ts`) uses `parseTrustRuntimeContext()` which validates `trustClass` against the canonical three-value set. There is no fallback to a legacy `actorRole` field — stored payloads that lack a valid `trustClass` are rejected deterministically to prevent silent privilege escalation. When `trustCtx` is entirely absent from a stored payload (pre-guardian events), the sweep synthesizes an explicit `trustClass: 'unknown'` context so that replay never proceeds without a trust classification.
2155
2255
 
2156
2256
  **Rollout note — legacy `actorRole` payloads:** Previously failed events stored with only `actorRole` (no `trustClass`) will be marked as failed on each retry attempt and eventually dead-lettered after exhausting `RETRY_MAX_ATTEMPTS`. This is an intentional security tradeoff: replaying these events with inferred trust would violate the explicit-trust model. If legacy events need to be recovered, they should be repaired (adding a canonical `trustClass` to the stored payload) before replay via `replayDeadLetters()`.
2157
2257
 
2158
2258
  **Key files:**
2159
2259
 
2160
- | File | Purpose |
2161
- | -------------------------------------------- | ------------------------------------------------------ |
2162
- | `src/daemon/session-runtime-assembly.ts` | `GuardianRuntimeContext` type definition |
2163
- | `src/tools/types.ts` | `ToolContext.guardianTrustClass` (required trust gate) |
2164
- | `src/runtime/channel-retry-sweep.ts` | Strict `trustClass` parser for retry sweep |
2165
- | `src/memory/guardian-bindings.ts` | `GuardianBinding` with required `guardianPrincipalId` |
2166
- | `src/__tests__/trust-context-guards.test.ts` | Guard tests enforcing trust-context type invariants |
2260
+ | File | Purpose |
2261
+ | -------------------------------------------- | ----------------------------------------------------- |
2262
+ | `src/daemon/session-runtime-assembly.ts` | `TrustContext` type definition |
2263
+ | `src/tools/types.ts` | `ToolContext.trustClass` (required trust gate) |
2264
+ | `src/runtime/channel-retry-sweep.ts` | Strict `trustClass` parser for retry sweep |
2265
+ | `src/memory/channel-guardian-store.ts` | `GuardianBinding` with required `guardianPrincipalId` |
2266
+ | `src/__tests__/trust-context-guards.test.ts` | Guard tests enforcing trust-context type invariants |
package/Dockerfile CHANGED
@@ -81,7 +81,7 @@ RUN echo 'Dir::State "/data/dpkg";' > /etc/apt/apt.conf.d/99data-dir && \
81
81
  chown -R assistant:assistant /data/apt /data/dpkg
82
82
 
83
83
  ENV PATH="/data/usr/bin:/data/usr/sbin:${PATH}"
84
- ENV LD_LIBRARY_PATH="/data/usr/lib:/data/usr/lib/x86_64-linux-gnu:/data/usr/lib/aarch64-linux-gnu:${LD_LIBRARY_PATH}"
84
+ ENV LD_LIBRARY_PATH="/data/usr/lib:/data/usr/lib/x86_64-linux-gnu:/data/usr/lib/aarch64-linux-gnu"
85
85
 
86
86
  USER root
87
87