@vellumai/assistant 0.4.42 → 0.4.44

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 (867) hide show
  1. package/.env.example +1 -6
  2. package/.prettierignore +3 -0
  3. package/ARCHITECTURE.md +140 -403
  4. package/Dockerfile +0 -1
  5. package/README.md +81 -92
  6. package/bun.lock +8 -2
  7. package/docs/architecture/integrations.md +81 -104
  8. package/docs/architecture/memory.md +1 -1
  9. package/docs/architecture/scheduling.md +63 -63
  10. package/docs/architecture/security.md +3 -3
  11. package/docs/runbook-trusted-contacts.md +11 -12
  12. package/docs/trusted-contact-access.md +39 -39
  13. package/package.json +5 -8
  14. package/src/__tests__/access-request-decision.test.ts +4 -4
  15. package/src/__tests__/active-skill-tools.test.ts +49 -34
  16. package/src/__tests__/actor-token-service.test.ts +55 -85
  17. package/src/__tests__/amazon-cdp-integration.test.ts +14 -26
  18. package/src/__tests__/app-bundler.test.ts +14 -368
  19. package/src/__tests__/app-compiler.test.ts +0 -1
  20. package/src/__tests__/app-executors.test.ts +10 -1
  21. package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
  22. package/src/__tests__/approval-primitive.test.ts +2 -4
  23. package/src/__tests__/approval-routes-http.test.ts +1 -3
  24. package/src/__tests__/asset-materialize-tool.test.ts +1 -4
  25. package/src/__tests__/asset-search-tool.test.ts +1 -4
  26. package/src/__tests__/assistant-attachments.test.ts +23 -0
  27. package/src/__tests__/assistant-feature-flags-integration.test.ts +4 -8
  28. package/src/__tests__/assistant-id-boundary-guard.test.ts +5 -5
  29. package/src/__tests__/attachments-store.test.ts +1 -4
  30. package/src/__tests__/avatar-e2e.test.ts +43 -23
  31. package/src/__tests__/browser-fill-credential.test.ts +1 -1
  32. package/src/__tests__/bundled-asset.test.ts +1 -1
  33. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
  34. package/src/__tests__/call-controller.test.ts +4 -8
  35. package/src/__tests__/call-conversation-messages.test.ts +1 -1
  36. package/src/__tests__/call-domain.test.ts +250 -8
  37. package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
  38. package/src/__tests__/call-pointer-messages.test.ts +7 -11
  39. package/src/__tests__/call-recovery.test.ts +47 -0
  40. package/src/__tests__/call-routes-http.test.ts +13 -0
  41. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  42. package/src/__tests__/callback-handoff-copy.test.ts +5 -5
  43. package/src/__tests__/canonical-guardian-store.test.ts +3 -3
  44. package/src/__tests__/channel-approval-routes.test.ts +101 -134
  45. package/src/__tests__/channel-approval.test.ts +0 -201
  46. package/src/__tests__/channel-approvals.test.ts +2 -2
  47. package/src/__tests__/channel-delivery-store.test.ts +16 -24
  48. package/src/__tests__/channel-guardian.test.ts +641 -740
  49. package/src/__tests__/channel-invite-transport.test.ts +1 -2
  50. package/src/__tests__/channel-policy.test.ts +9 -12
  51. package/src/__tests__/channel-readiness-service.test.ts +156 -45
  52. package/src/__tests__/channel-reply-delivery.test.ts +3 -3
  53. package/src/__tests__/channel-retry-sweep.test.ts +7 -7
  54. package/src/__tests__/checker.test.ts +41 -35
  55. package/src/__tests__/chrome-cdp.test.ts +57 -17
  56. package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
  57. package/src/__tests__/compaction.benchmark.test.ts +25 -5
  58. package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
  59. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  60. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
  61. package/src/__tests__/config-loader-backfill.test.ts +310 -0
  62. package/src/__tests__/config-watcher.test.ts +1 -5
  63. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
  64. package/src/__tests__/connection-policy.test.ts +3 -62
  65. package/src/__tests__/contacts-tools.test.ts +0 -2
  66. package/src/__tests__/context-memory-e2e.test.ts +11 -7
  67. package/src/__tests__/context-overflow-policy.test.ts +2 -2
  68. package/src/__tests__/context-window-manager.test.ts +220 -61
  69. package/src/__tests__/conversation-attention-store.test.ts +178 -2
  70. package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
  71. package/src/__tests__/conversation-pairing.test.ts +14 -14
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +7 -7
  73. package/src/__tests__/conversation-store.test.ts +2 -2
  74. package/src/__tests__/conversation-unread-route.test.ts +155 -0
  75. package/src/__tests__/credential-metadata-store.test.ts +0 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +10 -16
  77. package/src/__tests__/credentials-cli.test.ts +49 -5
  78. package/src/__tests__/daemon-assistant-events.test.ts +4 -22
  79. package/src/__tests__/db-migration-rollback.test.ts +2 -2
  80. package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
  81. package/src/__tests__/dictation-mode-detection.test.ts +1 -1
  82. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
  84. package/src/__tests__/email-cli.test.ts +12 -12
  85. package/src/__tests__/email-service-config-fallback.test.ts +1 -1
  86. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
  87. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  88. package/src/__tests__/event-bus.test.ts +0 -1
  89. package/src/__tests__/followup-tools.test.ts +0 -2
  90. package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
  91. package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
  92. package/src/__tests__/gateway-only-guard.test.ts +5 -0
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
  95. package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
  97. package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
  98. package/src/__tests__/guardian-action-store.test.ts +2 -2
  99. package/src/__tests__/guardian-action-sweep.test.ts +5 -5
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
  101. package/src/__tests__/guardian-dispatch.test.ts +5 -46
  102. package/src/__tests__/guardian-grant-minting.test.ts +5 -44
  103. package/src/__tests__/guardian-outbound-http.test.ts +95 -114
  104. package/src/__tests__/guardian-question-mode.test.ts +1 -4
  105. package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
  106. package/src/__tests__/guardian-routing-state.test.ts +3 -3
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  109. package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
  110. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
  111. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  112. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  113. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  114. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  115. package/src/__tests__/heartbeat-service.test.ts +1 -1
  116. package/src/__tests__/host-shell-tool.test.ts +3 -12
  117. package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
  118. package/src/__tests__/ingress-url-consistency.test.ts +0 -64
  119. package/src/__tests__/integration-status.test.ts +8 -8
  120. package/src/__tests__/intent-routing.test.ts +9 -13
  121. package/src/__tests__/invite-redemption-service.test.ts +4 -4
  122. package/src/__tests__/invite-routes-http.test.ts +10 -10
  123. package/src/__tests__/llm-usage-store.test.ts +45 -9
  124. package/src/__tests__/local-gateway-health.test.ts +209 -0
  125. package/src/__tests__/managed-avatar-client.test.ts +23 -12
  126. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
  127. package/src/__tests__/managed-store.test.ts +29 -12
  128. package/src/__tests__/managed-twitter-guardrails.test.ts +357 -0
  129. package/src/__tests__/mcp-cli.test.ts +1 -1
  130. package/src/__tests__/mcp-health-check.test.ts +1 -1
  131. package/src/__tests__/media-generate-image.test.ts +1 -1
  132. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
  133. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
  134. package/src/__tests__/memory-regressions.test.ts +1 -166
  135. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  136. package/src/__tests__/migration-export-http.test.ts +2 -2
  137. package/src/__tests__/migration-transport.test.ts +44 -0
  138. package/src/__tests__/non-member-access-request.test.ts +49 -36
  139. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  140. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  141. package/src/__tests__/notification-decision-strategy.test.ts +4 -4
  142. package/src/__tests__/notification-deep-link.test.ts +3 -3
  143. package/src/__tests__/notification-guardian-path.test.ts +6 -44
  144. package/src/__tests__/notification-routing-intent.test.ts +11 -7
  145. package/src/__tests__/oauth-cli.test.ts +1 -1
  146. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
  147. package/src/__tests__/onboarding-template-contract.test.ts +2 -12
  148. package/src/__tests__/platform.test.ts +168 -5
  149. package/src/__tests__/playbook-execution.test.ts +0 -2
  150. package/src/__tests__/playbook-tools.test.ts +0 -2
  151. package/src/__tests__/pricing.test.ts +125 -0
  152. package/src/__tests__/provider-error-scenarios.test.ts +9 -3
  153. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  154. package/src/__tests__/recording-handler.test.ts +46 -80
  155. package/src/__tests__/recording-state-machine.test.ts +112 -183
  156. package/src/__tests__/registry.test.ts +1 -1
  157. package/src/__tests__/relay-server.test.ts +69 -71
  158. package/src/__tests__/reminder-store.test.ts +3 -3
  159. package/src/__tests__/request-file-tool.test.ts +2 -2
  160. package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  163. package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
  164. package/src/__tests__/schedule-store.test.ts +13 -4
  165. package/src/__tests__/schedule-tools.test.ts +0 -2
  166. package/src/__tests__/scheduler-recurrence.test.ts +3 -4
  167. package/src/__tests__/scoped-approval-grants.test.ts +3 -5
  168. package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
  169. package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
  170. package/src/__tests__/secret-response-routing.test.ts +1 -1
  171. package/src/__tests__/send-endpoint-busy.test.ts +1 -4
  172. package/src/__tests__/sequence-store.test.ts +0 -2
  173. package/src/__tests__/server-history-render.test.ts +2 -199
  174. package/src/__tests__/session-abort-tool-results.test.ts +9 -3
  175. package/src/__tests__/session-agent-loop.test.ts +107 -3
  176. package/src/__tests__/session-confirmation-signals.test.ts +17 -49
  177. package/src/__tests__/session-conflict-gate.test.ts +9 -3
  178. package/src/__tests__/session-init.benchmark.test.ts +22 -13
  179. package/src/__tests__/session-load-history-repair.test.ts +6 -3
  180. package/src/__tests__/session-pre-run-repair.test.ts +9 -3
  181. package/src/__tests__/session-profile-injection.test.ts +9 -3
  182. package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
  183. package/src/__tests__/session-queue.test.ts +10 -4
  184. package/src/__tests__/session-runtime-assembly.test.ts +28 -18
  185. package/src/__tests__/session-skill-tools.test.ts +2 -3
  186. package/src/__tests__/session-slash-known.test.ts +11 -4
  187. package/src/__tests__/session-slash-queue.test.ts +11 -4
  188. package/src/__tests__/session-slash-unknown.test.ts +12 -4
  189. package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
  190. package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
  191. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
  192. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
  193. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
  194. package/src/__tests__/session-usage.test.ts +180 -0
  195. package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
  196. package/src/__tests__/session-workspace-injection.test.ts +8 -2
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
  199. package/src/__tests__/skill-feature-flags.test.ts +1 -0
  200. package/src/__tests__/skill-include-graph.test.ts +1 -0
  201. package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
  202. package/src/__tests__/skill-load-tool.test.ts +90 -12
  203. package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
  204. package/src/__tests__/skills-uninstall.test.ts +131 -0
  205. package/src/__tests__/skills.test.ts +32 -16
  206. package/src/__tests__/slack-block-formatting.test.ts +1 -1
  207. package/src/__tests__/slack-channel-config.test.ts +71 -12
  208. package/src/__tests__/slack-inbound-verification.test.ts +7 -7
  209. package/src/__tests__/slack-share-routes.test.ts +1 -1
  210. package/src/__tests__/slack-skill.test.ts +2 -2
  211. package/src/__tests__/slash-commands-catalog.test.ts +1 -0
  212. package/src/__tests__/slash-commands-resolver.test.ts +1 -0
  213. package/src/__tests__/starter-task-flow.test.ts +10 -20
  214. package/src/__tests__/subagent-manager-notify.test.ts +1 -1
  215. package/src/__tests__/subagent-tools.test.ts +2 -2
  216. package/src/__tests__/system-prompt.test.ts +7 -12
  217. package/src/__tests__/task-compiler.test.ts +0 -2
  218. package/src/__tests__/task-management-tools.test.ts +0 -2
  219. package/src/__tests__/task-runner.test.ts +0 -2
  220. package/src/__tests__/task-scheduler.test.ts +2 -2
  221. package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
  222. package/src/__tests__/terminal-tools.test.ts +1 -11
  223. package/src/__tests__/thread-seed-composer.test.ts +3 -1
  224. package/src/__tests__/tool-approval-handler.test.ts +5 -7
  225. package/src/__tests__/tool-executor.test.ts +2 -2
  226. package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
  227. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  228. package/src/__tests__/tool-profiling-listener.test.ts +1 -1
  229. package/src/__tests__/tool-trace-listener.test.ts +1 -2
  230. package/src/__tests__/trace-emitter.test.ts +1 -1
  231. package/src/__tests__/trust-context-guards.test.ts +1 -1
  232. package/src/__tests__/trust-store.test.ts +48 -399
  233. package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
  234. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
  235. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
  236. package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
  237. package/src/__tests__/trusted-contact-verification.test.ts +12 -12
  238. package/src/__tests__/twilio-config.test.ts +11 -2
  239. package/src/__tests__/twilio-provider.test.ts +6 -4
  240. package/src/__tests__/twilio-routes.test.ts +408 -86
  241. package/src/__tests__/twitter-platform-proxy-client.test.ts +475 -0
  242. package/src/__tests__/update-bulletin-format.test.ts +1 -1
  243. package/src/__tests__/update-bulletin-state.test.ts +1 -1
  244. package/src/__tests__/update-bulletin.test.ts +4 -8
  245. package/src/__tests__/update-template-contract.test.ts +1 -1
  246. package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
  247. package/src/__tests__/usage-routes.test.ts +23 -5
  248. package/src/__tests__/user-reference.test.ts +1 -1
  249. package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
  250. package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
  251. package/src/__tests__/view-image-tool.test.ts +0 -2
  252. package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
  253. package/src/__tests__/voice-invite-redemption.test.ts +18 -18
  254. package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
  255. package/src/__tests__/voice-session-bridge.test.ts +14 -16
  256. package/src/__tests__/workspace-policy.test.ts +1 -1
  257. package/src/approvals/AGENTS.md +4 -4
  258. package/src/approvals/approval-primitive.ts +2 -2
  259. package/src/approvals/guardian-decision-primitive.ts +1 -1
  260. package/src/approvals/guardian-request-resolvers.ts +3 -4
  261. package/src/bundler/app-bundler.ts +29 -217
  262. package/src/calls/active-call-lease.ts +207 -0
  263. package/src/calls/call-constants.ts +0 -7
  264. package/src/calls/call-controller.ts +1 -1
  265. package/src/calls/call-conversation-messages.ts +6 -6
  266. package/src/calls/call-domain.ts +73 -38
  267. package/src/calls/call-pointer-message-composer.ts +6 -6
  268. package/src/calls/call-pointer-messages.ts +14 -13
  269. package/src/calls/call-recovery.ts +2 -0
  270. package/src/calls/call-store.ts +21 -28
  271. package/src/calls/guardian-action-sweep.ts +6 -8
  272. package/src/calls/guardian-dispatch.ts +2 -6
  273. package/src/calls/relay-access-wait.ts +4 -4
  274. package/src/calls/relay-server.ts +69 -80
  275. package/src/calls/relay-setup-router.ts +16 -21
  276. package/src/calls/relay-verification.ts +27 -28
  277. package/src/calls/twilio-config.ts +28 -3
  278. package/src/calls/twilio-provider.ts +5 -5
  279. package/src/calls/twilio-rest.ts +26 -27
  280. package/src/calls/twilio-routes.ts +67 -54
  281. package/src/calls/types.ts +8 -8
  282. package/src/calls/voice-ingress-preflight.ts +110 -0
  283. package/src/calls/voice-session-bridge.ts +7 -7
  284. package/src/channels/config.ts +1 -10
  285. package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
  286. package/src/channels/types.ts +2 -13
  287. package/src/cli/__tests__/notifications.test.ts +1 -1
  288. package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
  289. package/src/cli/{amazon.ts → commands/amazon/index.ts} +14 -54
  290. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  291. package/src/cli/commands/amazon/session.ts +108 -0
  292. package/src/cli/{audit.ts → commands/audit.ts} +2 -4
  293. package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
  294. package/src/cli/commands/browser-relay.ts +520 -0
  295. package/src/cli/commands/channel-verification-sessions.ts +442 -0
  296. package/src/cli/{completions.ts → commands/completions.ts} +1 -3
  297. package/src/cli/{config.ts → commands/config.ts} +3 -5
  298. package/src/cli/{contacts.ts → commands/contacts.ts} +15 -17
  299. package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
  300. package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
  301. package/src/cli/{dev.ts → commands/dev.ts} +4 -6
  302. package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
  303. package/src/cli/{email.ts → commands/email.ts} +2 -2
  304. package/src/cli/{keys.ts → commands/keys.ts} +6 -6
  305. package/src/cli/{map.ts → commands/map.ts} +85 -93
  306. package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
  307. package/src/cli/{memory.ts → commands/memory.ts} +6 -7
  308. package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
  309. package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
  310. package/src/cli/commands/platform.ts +176 -0
  311. package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
  312. package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
  313. package/src/cli/commands/skills.ts +498 -0
  314. package/src/cli/{trust.ts → commands/trust.ts} +2 -4
  315. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +345 -0
  316. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +252 -0
  317. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -48
  318. package/src/cli/commands/twitter/index.ts +420 -0
  319. package/src/{twitter → cli/commands/twitter}/oauth-client.ts +1 -35
  320. package/src/cli/commands/twitter/router.ts +351 -0
  321. package/src/cli/commands/twitter/types.ts +30 -0
  322. package/src/cli/db.ts +1 -0
  323. package/src/cli/http-client.ts +87 -0
  324. package/src/cli/logger.ts +6 -0
  325. package/src/cli/main-screen.tsx +4 -3
  326. package/src/cli/output.ts +19 -0
  327. package/src/cli/program.ts +29 -27
  328. package/src/cli/reference.ts +27 -37
  329. package/src/cli.ts +452 -240
  330. package/src/config/assistant-feature-flags.ts +3 -15
  331. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  332. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  333. package/src/config/bundled-skills/amazon/SKILL.md +15 -6
  334. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  335. package/src/config/bundled-skills/app-builder/SKILL.md +4 -9
  336. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  337. package/src/config/bundled-skills/browser/SKILL.md +4 -5
  338. package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
  339. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
  340. package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
  341. package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
  342. package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
  343. package/src/config/bundled-skills/contacts/SKILL.md +23 -77
  344. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
  345. package/src/config/bundled-skills/document/SKILL.md +4 -3
  346. package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
  347. package/src/config/bundled-skills/doordash/SKILL.md +4 -12
  348. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -90
  349. package/src/config/bundled-skills/doordash/doordash-cli.ts +132 -109
  350. package/src/config/bundled-skills/doordash/lib/session.ts +22 -19
  351. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
  352. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
  353. package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
  354. package/src/config/bundled-skills/followups/SKILL.md +4 -3
  355. package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
  356. package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
  357. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
  358. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
  359. package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
  360. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
  361. package/src/config/bundled-skills/influencer/SKILL.md +19 -19
  362. package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
  363. package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
  364. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
  365. package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
  366. package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
  367. package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
  368. package/src/config/bundled-skills/messaging/SKILL.md +6 -33
  369. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
  370. package/src/config/bundled-skills/notifications/SKILL.md +4 -4
  371. package/src/config/bundled-skills/notion/SKILL.md +4 -4
  372. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
  373. package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
  374. package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
  375. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
  376. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
  377. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
  378. package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
  379. package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
  380. package/src/config/bundled-skills/reminder/SKILL.md +4 -3
  381. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
  382. package/src/config/bundled-skills/schedule/SKILL.md +4 -3
  383. package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
  384. package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
  385. package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
  386. package/src/config/bundled-skills/slack/SKILL.md +4 -8
  387. package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
  388. package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
  389. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
  390. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
  391. package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
  392. package/src/config/bundled-skills/subagent/SKILL.md +4 -3
  393. package/src/config/bundled-skills/tasks/SKILL.md +4 -3
  394. package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
  395. package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
  396. package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
  397. package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
  398. package/src/config/bundled-skills/twitter/SKILL.md +73 -144
  399. package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
  400. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
  401. package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
  402. package/src/config/bundled-skills/watcher/SKILL.md +4 -3
  403. package/src/config/env-registry.ts +1 -10
  404. package/src/config/feature-flag-registry.json +8 -16
  405. package/src/config/loader.ts +78 -38
  406. package/src/config/schema.ts +143 -106
  407. package/src/config/schemas/channels.ts +80 -0
  408. package/src/config/schemas/heartbeat.ts +51 -0
  409. package/src/config/schemas/inference.ts +136 -0
  410. package/src/config/schemas/ingress.ts +81 -0
  411. package/src/config/schemas/logging.ts +21 -0
  412. package/src/config/schemas/memory-lifecycle.ts +67 -0
  413. package/src/config/schemas/memory-processing.ts +215 -0
  414. package/src/config/schemas/memory-retrieval.ts +222 -0
  415. package/src/config/schemas/memory-storage.ts +83 -0
  416. package/src/config/schemas/memory.ts +58 -0
  417. package/src/config/schemas/platform.ts +64 -0
  418. package/src/config/schemas/security.ts +54 -0
  419. package/src/config/schemas/swarm.ts +50 -0
  420. package/src/config/schemas/timeouts.ts +47 -0
  421. package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
  422. package/src/config/skill-state.ts +3 -13
  423. package/src/config/skills.ts +196 -75
  424. package/src/config/types.ts +1 -20
  425. package/src/contacts/contact-store.ts +12 -49
  426. package/src/contacts/contacts-write.ts +1 -5
  427. package/src/contacts/index.ts +0 -2
  428. package/src/contacts/types.ts +0 -8
  429. package/src/context/window-manager.ts +73 -14
  430. package/src/daemon/assistant-attachments.ts +9 -0
  431. package/src/daemon/computer-use-session.ts +3 -3
  432. package/src/daemon/connection-policy.ts +6 -21
  433. package/src/daemon/context-overflow-policy.ts +1 -1
  434. package/src/daemon/daemon-control.ts +46 -54
  435. package/src/daemon/doordash-steps.ts +1 -1
  436. package/src/daemon/handlers/config-channels.ts +407 -71
  437. package/src/daemon/handlers/config-ingress.ts +17 -85
  438. package/src/daemon/handlers/config-model.ts +145 -123
  439. package/src/daemon/handlers/config-slack-channel.ts +43 -29
  440. package/src/daemon/handlers/config-telegram.ts +32 -27
  441. package/src/daemon/handlers/config-voice.ts +1 -4
  442. package/src/daemon/handlers/dictation.ts +11 -16
  443. package/src/daemon/handlers/identity.ts +5 -6
  444. package/src/daemon/handlers/pairing.ts +5 -13
  445. package/src/daemon/handlers/recording.ts +97 -199
  446. package/src/daemon/handlers/session-history.ts +151 -105
  447. package/src/daemon/handlers/session-user-message.ts +29 -57
  448. package/src/daemon/handlers/sessions.ts +240 -137
  449. package/src/daemon/handlers/shared.ts +62 -95
  450. package/src/daemon/handlers/skills.ts +492 -543
  451. package/src/daemon/lifecycle.ts +155 -55
  452. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  453. package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -25
  454. package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
  455. package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
  456. package/src/daemon/{ipc-contract → message-types}/integrations.ts +30 -20
  457. package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
  458. package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
  459. package/src/daemon/{ipc-contract → message-types}/sessions.ts +7 -1
  460. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  461. package/src/daemon/{ipc-contract → message-types}/surfaces.ts +2 -0
  462. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  463. package/src/daemon/providers-setup.ts +0 -5
  464. package/src/daemon/recording-executor.ts +0 -7
  465. package/src/daemon/ride-shotgun-handler.ts +42 -14
  466. package/src/daemon/seed-files.ts +3 -27
  467. package/src/daemon/server.ts +134 -524
  468. package/src/daemon/session-agent-loop-handlers.ts +46 -9
  469. package/src/daemon/session-agent-loop.ts +86 -24
  470. package/src/daemon/session-attachments.ts +1 -1
  471. package/src/daemon/session-error.ts +1 -1
  472. package/src/daemon/session-history.ts +20 -15
  473. package/src/daemon/session-lifecycle.ts +9 -7
  474. package/src/daemon/session-memory.ts +15 -1
  475. package/src/daemon/session-messaging.ts +10 -6
  476. package/src/daemon/session-notifiers.ts +10 -8
  477. package/src/daemon/session-process.ts +34 -25
  478. package/src/daemon/session-queue-manager.ts +1 -1
  479. package/src/daemon/session-runtime-assembly.ts +6 -32
  480. package/src/daemon/session-surfaces.ts +187 -35
  481. package/src/daemon/session-tool-setup.ts +1 -1
  482. package/src/daemon/session-usage.ts +119 -18
  483. package/src/daemon/session.ts +11 -33
  484. package/src/daemon/tool-side-effects.ts +6 -5
  485. package/src/daemon/trace-emitter.ts +1 -1
  486. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  487. package/src/daemon/watch-handler.ts +2 -5
  488. package/src/email/service.ts +8 -8
  489. package/src/events/domain-events.ts +0 -1
  490. package/src/events/tool-notification-listener.ts +1 -1
  491. package/src/followups/followup-store.ts +1 -2
  492. package/src/followups/types.ts +0 -6
  493. package/src/heartbeat/heartbeat-service.ts +1 -1
  494. package/src/inbound/platform-callback-registration.ts +1 -1
  495. package/src/inbound/public-ingress-urls.ts +0 -8
  496. package/src/index.ts +12 -0
  497. package/src/mcp/client.ts +1 -1
  498. package/src/mcp/manager.ts +1 -1
  499. package/src/memory/app-store.ts +1 -60
  500. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  501. package/src/memory/conversation-attention-store.ts +154 -0
  502. package/src/memory/conversation-bootstrap.ts +1 -1
  503. package/src/memory/conversation-crud.ts +53 -1
  504. package/src/memory/conversation-display-order-migration.ts +2 -3
  505. package/src/memory/conversation-queries.ts +1 -29
  506. package/src/memory/conversation-title-service.ts +26 -21
  507. package/src/memory/db-connection.ts +1 -8
  508. package/src/memory/db-init.ts +20 -0
  509. package/src/memory/delivery-crud.ts +4 -34
  510. package/src/memory/external-conversation-store.ts +1 -1
  511. package/src/memory/format-recall.ts +47 -0
  512. package/src/memory/guardian-action-store.ts +4 -5
  513. package/src/memory/guardian-rate-limits.ts +0 -3
  514. package/src/memory/invite-store.ts +1 -1
  515. package/src/memory/job-handlers/backfill.ts +9 -2
  516. package/src/memory/job-handlers/extraction.ts +2 -7
  517. package/src/memory/job-handlers/summarization.ts +1 -1
  518. package/src/memory/llm-usage-store.ts +11 -0
  519. package/src/memory/migrations/114-notifications.ts +12 -40
  520. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  521. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  522. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  523. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  524. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  525. package/src/memory/migrations/index.ts +5 -0
  526. package/src/memory/migrations/registry.ts +30 -0
  527. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  528. package/src/memory/retriever.test.ts +707 -0
  529. package/src/memory/retriever.ts +120 -116
  530. package/src/memory/schema/calls.ts +3 -7
  531. package/src/memory/schema/guardian.ts +2 -2
  532. package/src/memory/schema/infrastructure.ts +0 -8
  533. package/src/memory/search/lexical.ts +4 -1
  534. package/src/memory/search/query-expansion.test.ts +70 -0
  535. package/src/memory/search/query-expansion.ts +118 -0
  536. package/src/memory/search/types.ts +18 -17
  537. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  538. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  539. package/src/messaging/registry.ts +0 -1
  540. package/src/notifications/README.md +13 -22
  541. package/src/notifications/adapters/macos.ts +1 -1
  542. package/src/notifications/conversation-pairing.ts +2 -2
  543. package/src/notifications/copy-composer.ts +2 -2
  544. package/src/notifications/decision-engine.ts +1 -10
  545. package/src/notifications/destination-resolver.ts +2 -3
  546. package/src/notifications/emit-signal.ts +2 -8
  547. package/src/notifications/guardian-question-mode.ts +5 -8
  548. package/src/notifications/signal.ts +1 -2
  549. package/src/notifications/types.ts +1 -1
  550. package/src/oauth/token-persistence.ts +25 -1
  551. package/src/permissions/checker.ts +4 -29
  552. package/src/permissions/defaults.ts +9 -9
  553. package/src/permissions/prompter.ts +1 -1
  554. package/src/permissions/secret-prompter.ts +1 -1
  555. package/src/permissions/shell-identity.ts +1 -1
  556. package/src/permissions/trust-store.ts +13 -76
  557. package/src/permissions/workspace-policy.ts +1 -1
  558. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  559. package/src/{config → prompts}/system-prompt.ts +44 -26
  560. package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -3
  561. package/src/providers/registry.ts +2 -4
  562. package/src/runtime/AGENTS.md +6 -8
  563. package/src/runtime/access-request-helper.ts +36 -55
  564. package/src/runtime/actor-trust-resolver.ts +1 -24
  565. package/src/runtime/approval-message-composer.ts +6 -2
  566. package/src/runtime/assistant-event.ts +1 -1
  567. package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
  568. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  569. package/src/runtime/auth/__tests__/scopes.test.ts +2 -1
  570. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  571. package/src/runtime/auth/route-policy.ts +137 -25
  572. package/src/runtime/auth/scopes.ts +1 -0
  573. package/src/runtime/auth/subject.ts +9 -0
  574. package/src/runtime/auth/token-service.ts +12 -1
  575. package/src/runtime/auth/types.ts +1 -1
  576. package/src/runtime/channel-approval-types.ts +1 -1
  577. package/src/runtime/channel-approvals.ts +1 -1
  578. package/src/runtime/channel-invite-transport.ts +0 -2
  579. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  580. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  581. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  582. package/src/runtime/channel-readiness-service.ts +24 -159
  583. package/src/runtime/channel-readiness-types.ts +5 -1
  584. package/src/runtime/channel-reply-delivery.ts +43 -3
  585. package/src/runtime/channel-retry-sweep.ts +14 -22
  586. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  587. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  588. package/src/runtime/gateway-client.ts +12 -15
  589. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  590. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  591. package/src/runtime/guardian-action-message-composer.ts +4 -4
  592. package/src/runtime/guardian-reply-router.ts +3 -3
  593. package/src/runtime/http-server.ts +133 -24
  594. package/src/runtime/http-types.ts +44 -1
  595. package/src/runtime/invite-instruction-generator.ts +1 -3
  596. package/src/runtime/invite-redemption-service.ts +5 -5
  597. package/src/runtime/invite-service.ts +7 -7
  598. package/src/runtime/local-actor-identity.ts +28 -2
  599. package/src/runtime/local-gateway-health.ts +275 -0
  600. package/src/runtime/middleware/error-handler.ts +14 -1
  601. package/src/runtime/middleware/twilio-validation.ts +3 -3
  602. package/src/runtime/migrations/migration-transport.ts +18 -3
  603. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  604. package/src/runtime/nl-approval-parser.ts +2 -3
  605. package/src/runtime/routes/access-request-decision.ts +2 -2
  606. package/src/runtime/routes/app-management-routes.ts +918 -0
  607. package/src/runtime/routes/approval-routes.ts +76 -7
  608. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  609. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  610. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  611. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  612. package/src/runtime/routes/channel-route-shared.ts +1 -3
  613. package/src/runtime/routes/channel-routes.ts +1 -4
  614. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  615. package/src/runtime/routes/computer-use-routes.ts +595 -0
  616. package/src/runtime/routes/contact-routes.ts +1 -317
  617. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  618. package/src/runtime/routes/conversation-routes.ts +20 -24
  619. package/src/runtime/routes/debug-routes.ts +1 -1
  620. package/src/runtime/routes/diagnostics-routes.ts +890 -0
  621. package/src/runtime/routes/documents-routes.ts +227 -0
  622. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  623. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  624. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  625. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  626. package/src/runtime/routes/inbound-conversation.ts +3 -10
  627. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  628. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  629. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  630. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  631. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  632. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  633. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  634. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  635. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  636. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  637. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  638. package/src/runtime/routes/integrations/telegram.ts +111 -0
  639. package/src/runtime/routes/integrations/twilio.ts +451 -0
  640. package/src/runtime/routes/invite-routes.ts +2 -2
  641. package/src/runtime/routes/pairing-routes.ts +1 -1
  642. package/src/runtime/routes/recording-routes.ts +332 -0
  643. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  644. package/src/runtime/routes/session-management-routes.ts +167 -0
  645. package/src/runtime/routes/session-query-routes.ts +204 -0
  646. package/src/runtime/routes/settings-routes.ts +887 -0
  647. package/src/runtime/routes/skills-routes.ts +266 -0
  648. package/src/runtime/routes/subagents-routes.ts +246 -0
  649. package/src/runtime/routes/surface-action-routes.ts +100 -10
  650. package/src/runtime/routes/surface-content-routes.ts +1 -1
  651. package/src/runtime/routes/work-items-routes.ts +809 -0
  652. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  653. package/src/runtime/routes/workspace-routes.ts +410 -0
  654. package/src/runtime/routes/workspace-utils.ts +88 -0
  655. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  656. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  657. package/src/runtime/tool-grant-request-helper.ts +1 -2
  658. package/src/runtime/trust-context-resolver.ts +0 -1
  659. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  660. package/src/runtime/verification-rate-limiter.ts +2 -2
  661. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  662. package/src/schedule/integration-status.ts +2 -2
  663. package/src/schedule/schedule-store.ts +7 -9
  664. package/src/sequence/engine.ts +1 -1
  665. package/src/skills/active-skill-tools.ts +0 -8
  666. package/src/skills/clawhub.ts +1 -10
  667. package/src/skills/managed-store.ts +14 -4
  668. package/src/skills/slash-commands.ts +1 -1
  669. package/src/subagent/manager.ts +1 -1
  670. package/src/subagent/types.ts +1 -1
  671. package/src/tasks/SPEC.md +10 -10
  672. package/src/tasks/task-scheduler.ts +1 -1
  673. package/src/telegram/bot-username.ts +13 -0
  674. package/src/tools/AGENTS.md +38 -0
  675. package/src/tools/apps/executors.ts +0 -6
  676. package/src/tools/assets/materialize.ts +1 -1
  677. package/src/tools/assets/search.ts +1 -1
  678. package/src/tools/browser/browser-execution.ts +2 -2
  679. package/src/tools/browser/browser-manager.ts +88 -11
  680. package/src/tools/browser/browser-screencast.ts +1 -1
  681. package/src/tools/browser/headless-browser.ts +0 -17
  682. package/src/tools/browser/jit-auth.ts +1 -1
  683. package/src/tools/browser/recording-store.ts +19 -1
  684. package/src/tools/browser/runtime-check.ts +4 -2
  685. package/src/tools/calls/call-start.ts +3 -3
  686. package/src/tools/credentials/metadata-store.ts +0 -13
  687. package/src/tools/credentials/vault.ts +7 -31
  688. package/src/tools/document/editor-template.ts +10 -8
  689. package/src/tools/followups/followup_create.ts +0 -8
  690. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  691. package/src/tools/memory/definitions.ts +32 -10
  692. package/src/tools/memory/handlers.test.ts +573 -0
  693. package/src/tools/memory/handlers.ts +222 -65
  694. package/src/tools/memory/register.ts +53 -24
  695. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  696. package/src/tools/schedule/update.ts +0 -8
  697. package/src/tools/skills/load.ts +3 -3
  698. package/src/tools/subagent/read.ts +1 -1
  699. package/src/tools/system/voice-config.ts +2 -14
  700. package/src/tools/terminal/safe-env.ts +5 -18
  701. package/src/tools/tool-approval-handler.ts +4 -4
  702. package/src/tools/tool-manifest.ts +4 -2
  703. package/src/tools/types.ts +1 -1
  704. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  705. package/src/twitter/platform-proxy-client.ts +408 -0
  706. package/src/usage/types.ts +21 -0
  707. package/src/util/canonicalize-identity.ts +2 -6
  708. package/src/util/errors.ts +12 -0
  709. package/src/util/platform.ts +93 -86
  710. package/src/util/pricing.ts +180 -43
  711. package/src/work-items/work-item-runner.ts +1 -1
  712. package/scripts/ipc/check-contract-inventory.ts +0 -107
  713. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  714. package/scripts/ipc/generate-swift.ts +0 -528
  715. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  716. package/src/__tests__/app-migration.test.ts +0 -148
  717. package/src/__tests__/config-loader-migration.test.ts +0 -85
  718. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  719. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  720. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  721. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  722. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  723. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  724. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  725. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  726. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  727. package/src/__tests__/home-base-bootstrap.test.ts +0 -86
  728. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  729. package/src/__tests__/integrations-cli.test.ts +0 -232
  730. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  731. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  732. package/src/__tests__/ipc-contract.test.ts +0 -76
  733. package/src/__tests__/ipc-protocol.test.ts +0 -120
  734. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  735. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  736. package/src/__tests__/ipc-validate.test.ts +0 -471
  737. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  738. package/src/__tests__/migration-ordering.test.ts +0 -267
  739. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  740. package/src/__tests__/platform-move-helper.test.ts +0 -108
  741. package/src/__tests__/platform-socket-path.test.ts +0 -52
  742. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  743. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  744. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  745. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  746. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  747. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  748. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  749. package/src/__tests__/twitter-cli-error-shaping.test.ts +0 -224
  750. package/src/__tests__/twitter-cli-routing.test.ts +0 -286
  751. package/src/__tests__/work-item-output.test.ts +0 -150
  752. package/src/amazon/session.ts +0 -58
  753. package/src/cli/channels.ts +0 -51
  754. package/src/cli/influencer.ts +0 -319
  755. package/src/cli/integrations.ts +0 -372
  756. package/src/cli/ipc-client.ts +0 -88
  757. package/src/cli/twitter.ts +0 -1111
  758. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  759. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  760. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  761. package/src/config/core-schema.ts +0 -434
  762. package/src/config/memory-schema.ts +0 -617
  763. package/src/daemon/auth-manager.ts +0 -106
  764. package/src/daemon/handlers/apps.ts +0 -783
  765. package/src/daemon/handlers/avatar.ts +0 -73
  766. package/src/daemon/handlers/browser.ts +0 -3
  767. package/src/daemon/handlers/computer-use.ts +0 -231
  768. package/src/daemon/handlers/config-dispatch.ts +0 -29
  769. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  770. package/src/daemon/handlers/config-inbox.ts +0 -457
  771. package/src/daemon/handlers/config-integrations.ts +0 -409
  772. package/src/daemon/handlers/config-platform.ts +0 -77
  773. package/src/daemon/handlers/config-slack.ts +0 -41
  774. package/src/daemon/handlers/config-tools.ts +0 -226
  775. package/src/daemon/handlers/config-trust.ts +0 -135
  776. package/src/daemon/handlers/config.ts +0 -64
  777. package/src/daemon/handlers/contacts.ts +0 -193
  778. package/src/daemon/handlers/diagnostics.ts +0 -382
  779. package/src/daemon/handlers/documents.ts +0 -188
  780. package/src/daemon/handlers/guardian-actions.ts +0 -82
  781. package/src/daemon/handlers/home-base.ts +0 -82
  782. package/src/daemon/handlers/index.ts +0 -222
  783. package/src/daemon/handlers/misc.ts +0 -1139
  784. package/src/daemon/handlers/navigate-settings.ts +0 -29
  785. package/src/daemon/handlers/oauth-connect.ts +0 -202
  786. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  787. package/src/daemon/handlers/publish.ts +0 -176
  788. package/src/daemon/handlers/signing.ts +0 -56
  789. package/src/daemon/handlers/subagents.ts +0 -286
  790. package/src/daemon/handlers/twitter-auth.ts +0 -220
  791. package/src/daemon/handlers/work-items.ts +0 -796
  792. package/src/daemon/handlers/workspace-files.ts +0 -84
  793. package/src/daemon/handlers.ts +0 -16
  794. package/src/daemon/ipc-blob-store.ts +0 -246
  795. package/src/daemon/ipc-contract-inventory.json +0 -348
  796. package/src/daemon/ipc-contract-inventory.ts +0 -202
  797. package/src/daemon/ipc-handler.ts +0 -120
  798. package/src/daemon/ipc-protocol.ts +0 -85
  799. package/src/daemon/ipc-validate.ts +0 -254
  800. package/src/home-base/app-link-store.ts +0 -78
  801. package/src/home-base/bootstrap.ts +0 -74
  802. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  803. package/src/home-base/prebuilt/index.html +0 -702
  804. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  805. package/src/home-base/prebuilt/seed.ts +0 -122
  806. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  807. package/src/memory/app-migration.ts +0 -114
  808. package/src/memory/channel-delivery-store.ts +0 -40
  809. package/src/memory/channel-guardian-store.ts +0 -83
  810. package/src/memory/conversation-store.ts +0 -102
  811. package/src/memory/schema-migration.ts +0 -38
  812. package/src/messaging/providers/sms/adapter.ts +0 -232
  813. package/src/messaging/providers/sms/client.ts +0 -93
  814. package/src/messaging/providers/sms/types.ts +0 -7
  815. package/src/migrations/config-merge.ts +0 -62
  816. package/src/migrations/data-layout.ts +0 -89
  817. package/src/migrations/data-merge.ts +0 -44
  818. package/src/migrations/hooks-merge.ts +0 -118
  819. package/src/migrations/index.ts +0 -6
  820. package/src/migrations/log.ts +0 -28
  821. package/src/migrations/skills-merge.ts +0 -44
  822. package/src/migrations/workspace-layout.ts +0 -94
  823. package/src/notifications/adapters/sms.ts +0 -94
  824. package/src/runtime/channel-approval-parser.ts +0 -123
  825. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  826. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  827. package/src/runtime/routes/integration-routes.ts +0 -381
  828. package/src/runtime/routes/twilio-routes.ts +0 -1251
  829. package/src/twitter/client.ts +0 -979
  830. package/src/twitter/router.ts +0 -131
  831. package/src/twitter/session.ts +0 -54
  832. package/src/util/cookie-session.ts +0 -114
  833. package/src/watcher/providers/slack.ts +0 -282
  834. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  835. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  836. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  837. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  838. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  839. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  840. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  841. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  842. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  843. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  844. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  845. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  846. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  847. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  848. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  849. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  850. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  851. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  852. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  853. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  854. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  855. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  856. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  857. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  858. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  859. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  860. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  861. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  862. /package/src/{config → prompts}/templates/USER.md +0 -0
  863. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  864. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  865. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  866. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  867. /package/src/{config → prompts}/user-reference.ts +0 -0
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Channel guardian verification service.
2
+ * Channel verification service.
3
3
  *
4
- * Encapsulates the business logic for the guardian verification challenge
5
- * lifecycle: creating challenges with cryptographic secrets, validating
6
- * and consuming them, and managing guardian bindings.
4
+ * Encapsulates the business logic for the verification session lifecycle:
5
+ * creating sessions with cryptographic secrets, validating and consuming
6
+ * them, and managing guardian bindings.
7
7
  */
8
8
 
9
9
  import { createHash, randomBytes } from "crypto";
@@ -15,27 +15,29 @@ import type {
15
15
  GuardianBinding,
16
16
  IdentityBindingStatus,
17
17
  SessionStatus,
18
- VerificationChallenge,
19
18
  VerificationPurpose,
20
- } from "../memory/channel-guardian-store.js";
19
+ VerificationSession,
20
+ } from "../memory/channel-verification-sessions.js";
21
21
  import {
22
22
  bindSessionIdentity as storeBindSessionIdentity,
23
- consumeChallenge,
23
+ consumeSession,
24
24
  countRecentSendsToDestination as storeCountRecentSendsToDestination,
25
- createChallenge,
25
+ createInboundSession,
26
26
  createVerificationSession,
27
27
  findActiveSession as storeFindActiveSession,
28
- findPendingChallengeByHash,
29
- findPendingChallengeForChannel,
28
+ findPendingSessionByHash,
29
+ findPendingSessionForChannel,
30
30
  findSessionByBootstrapTokenHash as storeFindSessionByBootstrapTokenHash,
31
31
  findSessionByIdentity as storeFindSessionByIdentity,
32
+ revokePendingSessions as storeRevokePendingSessions,
33
+ updateSessionDelivery as storeUpdateSessionDelivery,
34
+ updateSessionStatus as storeUpdateSessionStatus,
35
+ } from "../memory/channel-verification-sessions.js";
36
+ import {
32
37
  getRateLimit,
33
38
  recordInvalidAttempt,
34
39
  resetRateLimit,
35
- revokePendingChallenges as storeRevokePendingChallenges,
36
- updateSessionDelivery as storeUpdateSessionDelivery,
37
- updateSessionStatus as storeUpdateSessionStatus,
38
- } from "../memory/channel-guardian-store.js";
40
+ } from "../memory/guardian-rate-limits.js";
39
41
  import { composeApprovalMessage } from "./approval-message-composer.js";
40
42
 
41
43
  // ---------------------------------------------------------------------------
@@ -58,7 +60,7 @@ const RATE_LIMIT_LOCKOUT_MS = 30 * 60 * 1000;
58
60
  // Types
59
61
  // ---------------------------------------------------------------------------
60
62
 
61
- export interface CreateChallengeResult {
63
+ export interface CreateVerificationSessionResult {
62
64
  challengeId: string;
63
65
  secret: string;
64
66
  verifyCommand: string;
@@ -66,7 +68,7 @@ export interface CreateChallengeResult {
66
68
  instruction: string;
67
69
  }
68
70
 
69
- export type ValidateChallengeResult =
71
+ export type ValidateVerificationResult =
70
72
  | { success: true; verificationType: "guardian" | "trusted_contact" }
71
73
  | { success: false; reason: string };
72
74
 
@@ -96,24 +98,24 @@ function generateNumericSecret(digits: number = 6): string {
96
98
  }
97
99
 
98
100
  /**
99
- * Create a new verification challenge for a guardian candidate.
101
+ * Create a new inbound verification session for a guardian candidate.
100
102
  *
101
- * Inbound challenges are not identity-bound: `validateAndConsumeChallenge`
102
- * skips the identity check when no expected-identity fields are set, so
103
- * code secrecy is the only protection against brute-force guessing during
104
- * the TTL window. A 32-byte hex secret provides ~2^128 entropy, making
103
+ * Inbound sessions are not identity-bound (`identityBindingStatus: null`),
104
+ * so `validateAndConsumeVerification` skips the identity check and code
105
+ * secrecy is the only protection against brute-force guessing during the
106
+ * TTL window. A 32-byte hex secret provides ~2^128 entropy, making
105
107
  * enumeration infeasible. Identity-bound outbound sessions (created via
106
108
  * `createOutboundSession`) use shorter 6-digit numeric codes because the
107
109
  * identity check adds a second layer of protection.
108
110
  *
109
- * Hashes the secret (SHA-256) and stores the challenge record with a
111
+ * Hashes the secret (SHA-256) and stores the session record with a
110
112
  * 10-minute TTL. The raw secret is returned so it can be displayed to
111
113
  * the user; only the hash is persisted.
112
114
  */
113
- export function createVerificationChallenge(
115
+ export function createInboundVerificationSession(
114
116
  channel: string,
115
117
  sessionId?: string,
116
- ): CreateChallengeResult {
118
+ ): CreateVerificationSessionResult {
117
119
  // High-entropy hex for unbound inbound challenges — 6-digit numeric
118
120
  // codes are only safe when identity binding provides a second factor.
119
121
  const secret = randomBytes(32).toString("hex");
@@ -121,7 +123,7 @@ export function createVerificationChallenge(
121
123
  const challengeId = uuid();
122
124
  const expiresAt = Date.now() + CHALLENGE_TTL_MS;
123
125
 
124
- createChallenge({
126
+ createInboundSession({
125
127
  id: challengeId,
126
128
  channel,
127
129
  challengeHash,
@@ -159,14 +161,14 @@ export function createVerificationChallenge(
159
161
  * exceeding the threshold the actor is locked out for a cooldown
160
162
  * period. On success the counter resets.
161
163
  */
162
- export function validateAndConsumeChallenge(
164
+ export function validateAndConsumeVerification(
163
165
  channel: string,
164
166
  secret: string,
165
167
  actorExternalUserId: string,
166
168
  actorChatId: string,
167
169
  _actorUsername?: string,
168
170
  _actorDisplayName?: string,
169
- ): ValidateChallengeResult {
171
+ ): ValidateVerificationResult {
170
172
  // ── Rate-limit check ──
171
173
  const existing = getRateLimit(channel, actorExternalUserId, actorChatId);
172
174
  if (
@@ -187,7 +189,7 @@ export function validateAndConsumeChallenge(
187
189
 
188
190
  const challengeHash = hashSecret(secret);
189
191
 
190
- const challenge = findPendingChallengeByHash(channel, challengeHash);
192
+ const challenge = findPendingSessionByHash(channel, challengeHash);
191
193
  if (!challenge) {
192
194
  recordInvalidAttempt(
193
195
  channel,
@@ -225,11 +227,11 @@ export function validateAndConsumeChallenge(
225
227
  }
226
228
 
227
229
  // ── Expected-identity check (outbound sessions) ──
228
- // If the session has identity binding fields set and is in 'bound' state,
229
- // verify the actor matches the expected identity. If identity_binding_status
230
- // is 'pending_bootstrap', allow consumption (bootstrap path handles binding
231
- // separately). If no expected identity fields are set (legacy/inbound-only),
232
- // skip identity check for backward compatibility.
230
+ // If the session is in 'bound' state AND has at least one expected-identity
231
+ // field, verify the actor matches. Inbound-only sessions have no expected
232
+ // identity and rely on code secrecy alone. If identity_binding_status is
233
+ // 'pending_bootstrap', allow consumption (bootstrap path handles binding
234
+ // separately).
233
235
  const hasExpectedIdentity =
234
236
  challenge.expectedExternalUserId != null ||
235
237
  challenge.expectedChatId != null ||
@@ -238,7 +240,7 @@ export function validateAndConsumeChallenge(
238
240
  if (hasExpectedIdentity && challenge.identityBindingStatus === "bound") {
239
241
  let identityMatch = false;
240
242
 
241
- // For SMS/voice: verify actorExternalUserId matches expectedPhoneE164
243
+ // For voice: verify actorExternalUserId matches expectedPhoneE164
242
244
  // OR actorExternalUserId matches expectedExternalUserId
243
245
  if (challenge.expectedPhoneE164 != null) {
244
246
  if (
@@ -298,10 +300,9 @@ export function validateAndConsumeChallenge(
298
300
  }
299
301
  }
300
302
  // pending_bootstrap: allow consumption without identity check
301
- // no expected identity: legacy/inbound-only, skip identity check
302
303
 
303
304
  // Consume the challenge so it cannot be reused
304
- consumeChallenge(challenge.id, actorExternalUserId, actorChatId);
305
+ consumeSession(challenge.id, actorExternalUserId, actorChatId);
305
306
 
306
307
  // Reset the rate-limit counter on success
307
308
  resetRateLimit(channel, actorExternalUserId, actorChatId);
@@ -321,7 +322,7 @@ export function validateAndConsumeChallenge(
321
322
  /**
322
323
  * Look up the active guardian binding for a given assistant and channel.
323
324
  * Reads from the contacts table via findGuardianForChannel and
324
- * synthesizes a GuardianBinding-shaped object for backward compatibility.
325
+ * synthesizes a GuardianBinding-shaped object.
325
326
  * Returns null when no contacts match.
326
327
  */
327
328
  export function getGuardianBinding(
@@ -374,23 +375,21 @@ export function revokeBinding(assistantId: string, channel: string): boolean {
374
375
  }
375
376
 
376
377
  /**
377
- * Revoke all pending challenges for a given channel.
378
- * Called when the user cancels verification so that stale challenges
378
+ * Revoke all pending sessions for a given channel.
379
+ * Called when the user cancels verification so that stale sessions
379
380
  * don't gate inbound calls.
380
381
  */
381
- export function revokePendingChallenges(channel: string): void {
382
- storeRevokePendingChallenges(channel);
382
+ export function revokePendingSessions(channel: string): void {
383
+ storeRevokePendingSessions(channel);
383
384
  }
384
385
 
385
386
  /**
386
- * Look up a pending (non-expired) verification challenge for a given
387
+ * Look up a pending (non-expired) verification session for a given
387
388
  * channel. Used by relay setup to detect whether an active
388
389
  * voice verification session exists.
389
390
  */
390
- export function getPendingChallenge(
391
- channel: string,
392
- ): VerificationChallenge | null {
393
- return findPendingChallengeForChannel(channel);
391
+ export function getPendingSession(channel: string): VerificationSession | null {
392
+ return findPendingSessionForChannel(channel);
394
393
  }
395
394
 
396
395
  // ---------------------------------------------------------------------------
@@ -409,7 +408,7 @@ export interface CreateOutboundSessionResult {
409
408
  * Create an outbound verification session with expected identity pre-set.
410
409
  * Returns session info including the secret for outbound delivery.
411
410
  *
412
- * Channels where identity is pre-bound (SMS, voice, Telegram with known
411
+ * Channels where identity is pre-bound (voice, Telegram with known
413
412
  * chat ID) use 6-digit numeric codes for ease of entry. Unbound bootstrap
414
413
  * sessions (e.g. Telegram handle where identity is not yet known) use
415
414
  * high-entropy 32-byte hex secrets to prevent brute-force guessing during
@@ -470,9 +469,7 @@ export function createOutboundSession(params: {
470
469
  /**
471
470
  * Find the most recent active outbound session for a given channel.
472
471
  */
473
- export function findActiveSession(
474
- channel: string,
475
- ): VerificationChallenge | null {
472
+ export function findActiveSession(channel: string): VerificationSession | null {
476
473
  return storeFindActiveSession(channel);
477
474
  }
478
475
 
@@ -484,7 +481,7 @@ export function findSessionByIdentity(
484
481
  externalUserId?: string,
485
482
  chatId?: string,
486
483
  phoneE164?: string,
487
- ): VerificationChallenge | null {
484
+ ): VerificationSession | null {
488
485
  return storeFindSessionByIdentity(channel, externalUserId, chatId, phoneE164);
489
486
  }
490
487
 
@@ -515,7 +512,7 @@ export function updateSessionDelivery(
515
512
  }
516
513
 
517
514
  /**
518
- * Count total SMS sends to a destination across all sessions within a
515
+ * Count total sends to a destination across all sessions within a
519
516
  * rolling time window. Prevents circumvention of per-session limits by
520
517
  * repeatedly creating new sessions to the same phone number.
521
518
  */
@@ -550,7 +547,7 @@ export function bindSessionIdentity(
550
547
  export function resolveBootstrapToken(
551
548
  channel: string,
552
549
  token: string,
553
- ): VerificationChallenge | null {
550
+ ): VerificationSession | null {
554
551
  const tokenHash = hashSecret(token);
555
552
  return storeFindSessionByBootstrapTokenHash(channel, tokenHash);
556
553
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * When a trusted-contact channel session creates a confirmation_request (tool approval),
5
5
  * this helper emits a guardian.question notification signal and persists canonical
6
- * delivery rows to guardian destinations (Telegram/SMS/Vellum), enabling the guardian
6
+ * delivery rows to guardian destinations (Telegram/Slack/Vellum), enabling the guardian
7
7
  * to approve via callback/request-code path.
8
8
  *
9
9
  * Modeled after the tool-grant-request-helper pattern. Designed to be called from
@@ -22,7 +22,7 @@ import type { NotificationSourceChannel } from "../notifications/signal.js";
22
22
  import { canonicalizeInboundIdentity } from "../util/canonicalize-identity.js";
23
23
  import { getLogger } from "../util/logger.js";
24
24
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "./assistant-scope.js";
25
- import { getGuardianBinding } from "./channel-guardian-service.js";
25
+ import { getGuardianBinding } from "./channel-verification-service.js";
26
26
 
27
27
  const log = getLogger("confirmation-request-guardian-bridge");
28
28
 
@@ -181,7 +181,6 @@ export function bridgeConfirmationRequestToGuardian(
181
181
  .then((signalResult) => {
182
182
  for (const result of signalResult.deliveryResults) {
183
183
  if (result.channel === "vellum") continue; // handled in onThreadCreated
184
- if (result.channel !== "telegram" && result.channel !== "sms") continue;
185
184
  createCanonicalGuardianDelivery({
186
185
  requestId: canonicalRequest.id,
187
186
  destinationChannel: result.channel,
@@ -13,8 +13,6 @@ const MANAGED_CALLBACK_TOKEN_HEADER = "X-Managed-Gateway-Callback-Token";
13
13
  const MANAGED_IDEMPOTENCY_HEADER = "X-Idempotency-Key";
14
14
  const MANAGED_OUTBOUND_MAX_ATTEMPTS = 3;
15
15
  const MANAGED_OUTBOUND_RETRY_BASE_MS = 150;
16
- const SMS_ATTACHMENTS_FALLBACK_TEXT =
17
- "I have a media attachment to share, but SMS currently supports text only.";
18
16
 
19
17
  export interface ChannelReplyPayload {
20
18
  chatId: string;
@@ -33,6 +31,8 @@ export interface ChannelReplyPayload {
33
31
  ephemeral?: boolean;
34
32
  /** Slack user ID — required when `ephemeral` is true. */
35
33
  user?: string;
34
+ /** Telegram message_id for editing an existing message instead of sending a new one. */
35
+ messageId?: number;
36
36
  /** When provided, instructs the delivery endpoint to update an existing message instead of posting a new one. */
37
37
  messageTs?: string;
38
38
  /** When true, auto-generate Block Kit blocks from text via textToBlocks(). */
@@ -45,13 +45,15 @@ export interface ChannelDeliveryResult {
45
45
  ok: boolean;
46
46
  /** The message timestamp returned by the delivery endpoint (e.g. Slack message ts). */
47
47
  ts?: string;
48
+ /** The Telegram message_id returned when a new message was sent. */
49
+ messageId?: number;
48
50
  }
49
51
 
50
52
  interface ManagedOutboundCallbackContext {
51
53
  requestUrl: string;
52
54
  routeId: string;
53
55
  assistantId: string;
54
- sourceChannel: "sms" | "voice";
56
+ sourceChannel: "phone";
55
57
  sourceUpdateId?: string;
56
58
  callbackToken?: string;
57
59
  }
@@ -92,11 +94,14 @@ export async function deliverChannelReply(
92
94
  );
93
95
  }
94
96
 
95
- let result: ChannelDeliveryResult = { ok: true };
97
+ const result: ChannelDeliveryResult = { ok: true };
96
98
  try {
97
99
  const responseBody = (await response.json()) as Record<string, unknown>;
98
100
  if (typeof responseBody.ts === "string") {
99
- result = { ok: true, ts: responseBody.ts };
101
+ result.ts = responseBody.ts;
102
+ }
103
+ if (typeof responseBody.messageId === "number") {
104
+ result.messageId = responseBody.messageId;
100
105
  }
101
106
  } catch {
102
107
  // Response may not be JSON for non-Slack channels; that's fine.
@@ -138,11 +143,7 @@ function parseManagedOutboundCallback(
138
143
  const assistantId = parsed.searchParams.get("assistant_id")?.trim();
139
144
  const sourceChannel = parsed.searchParams.get("source_channel")?.trim();
140
145
 
141
- if (
142
- !routeId ||
143
- !assistantId ||
144
- (sourceChannel !== "sms" && sourceChannel !== "voice")
145
- ) {
146
+ if (!routeId || !assistantId || sourceChannel !== "phone") {
146
147
  throw new Error(
147
148
  "Managed outbound callback URL is missing required route_id, assistant_id, or source_channel.",
148
149
  );
@@ -185,11 +186,7 @@ async function deliverManagedOutboundReply(
185
186
  Array.isArray(payload.attachments) && payload.attachments.length > 0;
186
187
  const text = payload.approval?.plainTextFallback ?? payload.text;
187
188
  const normalizedText =
188
- typeof text === "string" && text.trim().length > 0
189
- ? text
190
- : hasAttachments
191
- ? SMS_ATTACHMENTS_FALLBACK_TEXT
192
- : "";
189
+ typeof text === "string" && text.trim().length > 0 ? text : "";
193
190
  if (!normalizedText) {
194
191
  throw new Error(
195
192
  "Managed outbound delivery requires text or plainTextFallback.",
@@ -2,11 +2,9 @@
2
2
  * Guardian action follow-up executor.
3
3
  *
4
4
  * After the conversation engine classifies the guardian's reply as
5
- * `call_back` or `message_back` and transitions the follow-up state to
6
- * `dispatching`, this module executes the actual action:
5
+ * `call_back` and transitions the follow-up state to `dispatching`,
6
+ * this module executes the actual action:
7
7
  *
8
- * - **message_back**: Generates outbound SMS text and sends it to the
9
- * counterparty phone number via the gateway's /deliver/sms endpoint.
10
8
  * - **call_back**: Starts an outbound call to the counterparty with
11
9
  * context about the guardian's answer.
12
10
  *
@@ -14,13 +12,12 @@
14
12
  * dispatches the appropriate action, and returns a result with generated
15
13
  * reply text for the guardian's confirmation message.
16
14
  *
17
- * This module is channel-agnostic: both inbound-message-handler (Telegram,
18
- * SMS channels) and session-process (mac/IPC channel) use it.
15
+ * This module is channel-agnostic: both inbound-message-handler (Telegram
16
+ * channels) and session-process (mac/IPC channel) use it.
19
17
  */
20
18
 
21
19
  import { startCall } from "../calls/call-domain.js";
22
20
  import { getCallSession } from "../calls/call-store.js";
23
- import { getGatewayInternalBaseUrl } from "../config/env.js";
24
21
  import { getOrCreateConversation } from "../memory/conversation-key-store.js";
25
22
  import {
26
23
  finalizeFollowup,
@@ -30,8 +27,6 @@ import {
30
27
  } from "../memory/guardian-action-store.js";
31
28
  import { getLogger } from "../util/logger.js";
32
29
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "./assistant-scope.js";
33
- import { mintDaemonDeliveryToken } from "./auth/token-service.js";
34
- import { deliverChannelReply } from "./gateway-client.js";
35
30
  import { composeGuardianActionMessageGenerative } from "./guardian-action-message-composer.js";
36
31
  import type { GuardianActionCopyGenerator } from "./http-types.js";
37
32
 
@@ -105,62 +100,6 @@ export function resolveCounterparty(
105
100
  // Action dispatchers
106
101
  // ---------------------------------------------------------------------------
107
102
 
108
- /**
109
- * Send an SMS to the counterparty with the guardian's answer context.
110
- * Uses the gateway's /deliver/sms endpoint (same path as the SMS notification adapter).
111
- */
112
- async function executeMessageBack(
113
- request: GuardianActionRequest,
114
- counterparty: CounterpartyInfo,
115
- generator?: GuardianActionCopyGenerator,
116
- ): Promise<{ ok: true } | { ok: false; error: string }> {
117
- try {
118
- // Generate the outbound SMS text using the composer
119
- const messageText = await composeGuardianActionMessageGenerative(
120
- {
121
- scenario: "outbound_message_copy",
122
- questionText: request.questionText,
123
- lateAnswerText: request.lateAnswerText ?? undefined,
124
- callerIdentifier: counterparty.displayIdentifier,
125
- },
126
- {},
127
- generator,
128
- );
129
-
130
- const gatewayBase = getGatewayInternalBaseUrl();
131
- const deliverUrl = `${gatewayBase}/deliver/sms`;
132
- const bearerToken = mintDaemonDeliveryToken();
133
-
134
- await deliverChannelReply(
135
- deliverUrl,
136
- {
137
- chatId: counterparty.phoneNumber,
138
- text: messageText,
139
- assistantId: DAEMON_INTERNAL_ASSISTANT_ID,
140
- },
141
- bearerToken,
142
- );
143
-
144
- log.info(
145
- { requestId: request.id, counterpartyPhone: counterparty.phoneNumber },
146
- "Follow-up message_back SMS sent successfully",
147
- );
148
-
149
- return { ok: true };
150
- } catch (err) {
151
- const message = err instanceof Error ? err.message : String(err);
152
- log.error(
153
- {
154
- err,
155
- requestId: request.id,
156
- counterpartyPhone: counterparty.phoneNumber,
157
- },
158
- "Failed to send follow-up message_back SMS",
159
- );
160
- return { ok: false, error: message };
161
- }
162
- }
163
-
164
103
  /**
165
104
  * Start an outbound call to the counterparty with context about the
166
105
  * guardian's answer. Uses the existing call start domain flow.
@@ -307,12 +246,11 @@ export async function executeFollowupAction(
307
246
  // Execute the action
308
247
  let actionResult: { ok: true } | { ok: false; error: string };
309
248
 
310
- if (action === "message_back") {
311
- actionResult = await executeMessageBack(request, counterparty, generator);
312
- } else if (action === "call_back") {
249
+ if (action === "call_back") {
313
250
  actionResult = await executeCallBack(request, counterparty);
314
251
  } else {
315
- // decline is already handled in M5 — should not reach the executor
252
+ // decline is already handled in M5 — should not reach the executor.
253
+ // message_back (SMS) is no longer supported.
316
254
  finalizeFollowup(requestId, "failed");
317
255
  const errorText = await composeGuardianActionMessageGenerative(
318
256
  {
@@ -333,10 +271,7 @@ export async function executeFollowupAction(
333
271
  if (actionResult.ok) {
334
272
  finalizeFollowup(requestId, "completed");
335
273
 
336
- const scenario =
337
- action === "message_back"
338
- ? ("followup_message_sent" as const)
339
- : ("followup_call_started" as const);
274
+ const scenario = "followup_call_started" as const;
340
275
  const confirmText = await composeGuardianActionMessageGenerative(
341
276
  {
342
277
  scenario,
@@ -11,7 +11,6 @@ import { mintGrantFromDecision } from "../approvals/approval-primitive.js";
11
11
  import type { GuardianActionRequest } from "../memory/guardian-action-store.js";
12
12
  import { getLogger } from "../util/logger.js";
13
13
  import { runApprovalConversationTurn } from "./approval-conversation-turn.js";
14
- import { parseApprovalDecision } from "./channel-approval-parser.js";
15
14
  import type { ApprovalConversationGenerator } from "./http-types.js";
16
15
 
17
16
  const log = getLogger("guardian-action-grant-minter");
@@ -23,14 +22,13 @@ export const GUARDIAN_ACTION_GRANT_TTL_MS = 5 * 60 * 1000;
23
22
  * Mint a `tool_signature` scoped grant when a guardian-action request is
24
23
  * resolved and the request carries tool metadata (toolName + inputDigest).
25
24
  *
26
- * Uses two-tier classification:
27
- * 1. Deterministic fast path via parseApprovalDecision (exact keyword match).
28
- * 2. LLM fallback via runApprovalConversationTurn when the deterministic
29
- * parser returns null and an approvalConversationGenerator is provided.
25
+ * Classifies the guardian's answer via the conversational approval engine
26
+ * (`runApprovalConversationTurn`). Only `approve_once` produces a grant
27
+ * guardian-action grants are always single-use `tool_signature` scoped.
30
28
  *
31
29
  * Skips silently when:
32
30
  * - The resolved request has no toolName/inputDigest (informational consult).
33
- * - The guardian's answer is not classified as approval by either tier (fail-closed).
31
+ * - The guardian's answer is not classified as approval (fail-closed).
34
32
  *
35
33
  * Fails silently on error -- grant minting is best-effort and must never
36
34
  * block the guardian-action answer flow.
@@ -40,7 +38,7 @@ export async function tryMintGuardianActionGrant(params: {
40
38
  answerText: string;
41
39
  decisionChannel: string;
42
40
  guardianExternalUserId?: string;
43
- approvalConversationGenerator?: ApprovalConversationGenerator;
41
+ approvalConversationGenerator: ApprovalConversationGenerator;
44
42
  }): Promise<void> {
45
43
  const {
46
44
  request,
@@ -56,63 +54,50 @@ export async function tryMintGuardianActionGrant(params: {
56
54
  return;
57
55
  }
58
56
 
59
- // Tier 1: Deterministic fast path -- try exact keyword matching first.
60
- // Guardian-action invariant: grants are always one-time `tool_signature`
61
- // scoped. We treat `approve_always` from the deterministic parser the
62
- // same as `approve_once` -- the grant is still single-use. This keeps
63
- // the guardian-action path aligned with the primary approval interception
64
- // flow where guardians are limited to approve_once / reject.
65
- const decision = parseApprovalDecision(answerText);
66
- let isApproval =
67
- decision?.action === "approve_once" ||
68
- decision?.action === "approve_always";
69
-
70
- // Tier 2: LLM fallback -- when the deterministic parser found no match
71
- // and a generator is available, delegate to the conversational engine.
57
+ // Classify the guardian's answer via the conversational approval engine.
72
58
  // Only allow approve_once (not approve_always) to keep guardian-action
73
59
  // grants strictly one-time and consistent with guardian policy.
74
- if (!isApproval && !decision && approvalConversationGenerator) {
75
- try {
76
- const llmResult = await runApprovalConversationTurn(
77
- {
78
- toolName: request.toolName,
79
- allowedActions: ["approve_once", "reject"],
80
- role: "guardian",
81
- pendingApprovals: [
82
- { requestId: request.id, toolName: request.toolName },
83
- ],
84
- userMessage: answerText,
85
- },
86
- approvalConversationGenerator,
87
- );
60
+ let isApproval = false;
61
+ try {
62
+ const llmResult = await runApprovalConversationTurn(
63
+ {
64
+ toolName: request.toolName,
65
+ allowedActions: ["approve_once", "reject"],
66
+ role: "guardian",
67
+ pendingApprovals: [
68
+ { requestId: request.id, toolName: request.toolName },
69
+ ],
70
+ userMessage: answerText,
71
+ },
72
+ approvalConversationGenerator,
73
+ );
88
74
 
89
- isApproval = llmResult.disposition === "approve_once";
75
+ isApproval = llmResult.disposition === "approve_once";
90
76
 
91
- log.info(
92
- {
93
- event: "guardian_action_grant_llm_fallback",
94
- toolName: request.toolName,
95
- requestId: request.id,
96
- answerText,
97
- llmDisposition: llmResult.disposition,
98
- matched: isApproval,
99
- decisionChannel,
100
- },
101
- `LLM fallback classifier returned disposition: ${llmResult.disposition}`,
102
- );
103
- } catch (err) {
104
- // Fail-closed: generator errors must not produce grants.
105
- log.warn(
106
- {
107
- event: "guardian_action_grant_llm_fallback_error",
108
- toolName: request.toolName,
109
- requestId: request.id,
110
- err,
111
- decisionChannel,
112
- },
113
- "LLM fallback classifier threw an error; treating as non-approval (fail-closed)",
114
- );
115
- }
77
+ log.info(
78
+ {
79
+ event: "guardian_action_grant_classification",
80
+ toolName: request.toolName,
81
+ requestId: request.id,
82
+ answerText,
83
+ llmDisposition: llmResult.disposition,
84
+ matched: isApproval,
85
+ decisionChannel,
86
+ },
87
+ `Approval classifier returned disposition: ${llmResult.disposition}`,
88
+ );
89
+ } catch (err) {
90
+ // Fail-closed: generator errors must not produce grants.
91
+ log.warn(
92
+ {
93
+ event: "guardian_action_grant_classification_error",
94
+ toolName: request.toolName,
95
+ requestId: request.id,
96
+ err,
97
+ decisionChannel,
98
+ },
99
+ "Approval classifier threw an error; treating as non-approval (fail-closed)",
100
+ );
116
101
  }
117
102
 
118
103
  if (!isApproval) {
@@ -122,7 +107,6 @@ export async function tryMintGuardianActionGrant(params: {
122
107
  toolName: request.toolName,
123
108
  requestId: request.id,
124
109
  answerText,
125
- parsedAction: decision?.action ?? null,
126
110
  decisionChannel,
127
111
  },
128
112
  "Skipped grant minting: guardian answer not classified as approval",