@vellumai/assistant 0.4.41 → 0.4.43

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 (843) hide show
  1. package/.env.example +1 -6
  2. package/.prettierignore +3 -0
  3. package/ARCHITECTURE.md +131 -393
  4. package/Dockerfile +0 -1
  5. package/README.md +73 -83
  6. package/bun.lock +8 -2
  7. package/docs/architecture/integrations.md +16 -21
  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 -1
  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-skill-retrieval-guard.test.ts +2 -9
  33. package/src/__tests__/call-controller.test.ts +4 -8
  34. package/src/__tests__/call-conversation-messages.test.ts +1 -1
  35. package/src/__tests__/call-domain.test.ts +250 -8
  36. package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
  37. package/src/__tests__/call-pointer-messages.test.ts +7 -11
  38. package/src/__tests__/call-recovery.test.ts +47 -0
  39. package/src/__tests__/call-routes-http.test.ts +13 -0
  40. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  41. package/src/__tests__/callback-handoff-copy.test.ts +5 -5
  42. package/src/__tests__/canonical-guardian-store.test.ts +3 -3
  43. package/src/__tests__/channel-approval-routes.test.ts +101 -134
  44. package/src/__tests__/channel-approval.test.ts +0 -201
  45. package/src/__tests__/channel-approvals.test.ts +2 -2
  46. package/src/__tests__/channel-delivery-store.test.ts +16 -24
  47. package/src/__tests__/channel-guardian.test.ts +641 -740
  48. package/src/__tests__/channel-invite-transport.test.ts +1 -2
  49. package/src/__tests__/channel-policy.test.ts +9 -12
  50. package/src/__tests__/channel-readiness-service.test.ts +156 -45
  51. package/src/__tests__/channel-reply-delivery.test.ts +3 -3
  52. package/src/__tests__/channel-retry-sweep.test.ts +7 -7
  53. package/src/__tests__/checker.test.ts +10 -7
  54. package/src/__tests__/chrome-cdp.test.ts +57 -17
  55. package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
  56. package/src/__tests__/compaction.benchmark.test.ts +25 -5
  57. package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
  58. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  59. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
  60. package/src/__tests__/config-loader-backfill.test.ts +310 -0
  61. package/src/__tests__/config-watcher.test.ts +1 -5
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
  63. package/src/__tests__/connection-policy.test.ts +3 -62
  64. package/src/__tests__/contacts-tools.test.ts +0 -2
  65. package/src/__tests__/context-memory-e2e.test.ts +11 -7
  66. package/src/__tests__/context-overflow-policy.test.ts +2 -2
  67. package/src/__tests__/context-window-manager.test.ts +220 -61
  68. package/src/__tests__/conversation-attention-store.test.ts +178 -2
  69. package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
  70. package/src/__tests__/conversation-pairing.test.ts +14 -14
  71. package/src/__tests__/conversation-routes-guardian-reply.test.ts +1 -1
  72. package/src/__tests__/conversation-store.test.ts +2 -2
  73. package/src/__tests__/conversation-unread-route.test.ts +155 -0
  74. package/src/__tests__/credential-metadata-store.test.ts +0 -2
  75. package/src/__tests__/credential-security-invariants.test.ts +9 -16
  76. package/src/__tests__/credentials-cli.test.ts +49 -5
  77. package/src/__tests__/daemon-assistant-events.test.ts +4 -22
  78. package/src/__tests__/db-migration-rollback.test.ts +2 -2
  79. package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
  80. package/src/__tests__/dictation-mode-detection.test.ts +1 -1
  81. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  82. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
  83. package/src/__tests__/email-cli.test.ts +12 -12
  84. package/src/__tests__/email-service-config-fallback.test.ts +1 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
  86. package/src/__tests__/event-bus.test.ts +0 -1
  87. package/src/__tests__/followup-tools.test.ts +0 -2
  88. package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
  89. package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
  90. package/src/__tests__/gateway-only-guard.test.ts +5 -0
  91. package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
  92. package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
  93. package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
  94. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
  95. package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
  96. package/src/__tests__/guardian-action-store.test.ts +2 -2
  97. package/src/__tests__/guardian-action-sweep.test.ts +5 -5
  98. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
  99. package/src/__tests__/guardian-dispatch.test.ts +5 -46
  100. package/src/__tests__/guardian-grant-minting.test.ts +5 -44
  101. package/src/__tests__/guardian-outbound-http.test.ts +95 -114
  102. package/src/__tests__/guardian-question-mode.test.ts +1 -4
  103. package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
  104. package/src/__tests__/guardian-routing-state.test.ts +3 -3
  105. package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
  106. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  107. package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
  108. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
  109. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  110. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  111. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  112. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  113. package/src/__tests__/heartbeat-service.test.ts +1 -1
  114. package/src/__tests__/home-base-bootstrap.test.ts +0 -2
  115. package/src/__tests__/host-shell-tool.test.ts +3 -12
  116. package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
  117. package/src/__tests__/ingress-url-consistency.test.ts +0 -64
  118. package/src/__tests__/integration-status.test.ts +8 -8
  119. package/src/__tests__/intent-routing.test.ts +9 -13
  120. package/src/__tests__/invite-redemption-service.test.ts +4 -4
  121. package/src/__tests__/invite-routes-http.test.ts +10 -10
  122. package/src/__tests__/llm-usage-store.test.ts +45 -9
  123. package/src/__tests__/local-gateway-health.test.ts +209 -0
  124. package/src/__tests__/managed-avatar-client.test.ts +23 -12
  125. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
  126. package/src/__tests__/managed-store.test.ts +29 -12
  127. package/src/__tests__/managed-twitter-guardrails.test.ts +353 -0
  128. package/src/__tests__/mcp-cli.test.ts +1 -1
  129. package/src/__tests__/mcp-health-check.test.ts +1 -1
  130. package/src/__tests__/media-generate-image.test.ts +1 -1
  131. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
  132. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
  133. package/src/__tests__/memory-regressions.test.ts +1 -166
  134. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  135. package/src/__tests__/migration-export-http.test.ts +2 -2
  136. package/src/__tests__/migration-transport.test.ts +44 -0
  137. package/src/__tests__/non-member-access-request.test.ts +49 -36
  138. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  139. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  140. package/src/__tests__/notification-decision-strategy.test.ts +4 -4
  141. package/src/__tests__/notification-deep-link.test.ts +3 -3
  142. package/src/__tests__/notification-guardian-path.test.ts +6 -44
  143. package/src/__tests__/notification-routing-intent.test.ts +11 -7
  144. package/src/__tests__/oauth-cli.test.ts +1 -1
  145. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
  146. package/src/__tests__/onboarding-template-contract.test.ts +2 -2
  147. package/src/__tests__/platform.test.ts +168 -5
  148. package/src/__tests__/playbook-execution.test.ts +0 -2
  149. package/src/__tests__/playbook-tools.test.ts +0 -2
  150. package/src/__tests__/pricing.test.ts +125 -0
  151. package/src/__tests__/provider-error-scenarios.test.ts +9 -3
  152. package/src/__tests__/recording-handler.test.ts +46 -80
  153. package/src/__tests__/recording-state-machine.test.ts +112 -183
  154. package/src/__tests__/registry.test.ts +1 -1
  155. package/src/__tests__/relay-server.test.ts +69 -71
  156. package/src/__tests__/reminder-store.test.ts +3 -3
  157. package/src/__tests__/request-file-tool.test.ts +2 -2
  158. package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
  159. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
  160. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
  162. package/src/__tests__/schedule-store.test.ts +13 -4
  163. package/src/__tests__/schedule-tools.test.ts +0 -2
  164. package/src/__tests__/scheduler-recurrence.test.ts +3 -4
  165. package/src/__tests__/scoped-approval-grants.test.ts +3 -5
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
  168. package/src/__tests__/secret-response-routing.test.ts +1 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +1 -1
  170. package/src/__tests__/sequence-store.test.ts +0 -2
  171. package/src/__tests__/server-history-render.test.ts +2 -199
  172. package/src/__tests__/session-abort-tool-results.test.ts +9 -3
  173. package/src/__tests__/session-agent-loop.test.ts +107 -3
  174. package/src/__tests__/session-confirmation-signals.test.ts +10 -4
  175. package/src/__tests__/session-conflict-gate.test.ts +9 -3
  176. package/src/__tests__/session-init.benchmark.test.ts +22 -13
  177. package/src/__tests__/session-load-history-repair.test.ts +6 -3
  178. package/src/__tests__/session-pre-run-repair.test.ts +9 -3
  179. package/src/__tests__/session-profile-injection.test.ts +9 -3
  180. package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
  181. package/src/__tests__/session-queue.test.ts +10 -4
  182. package/src/__tests__/session-runtime-assembly.test.ts +28 -18
  183. package/src/__tests__/session-skill-tools.test.ts +2 -3
  184. package/src/__tests__/session-slash-known.test.ts +11 -4
  185. package/src/__tests__/session-slash-queue.test.ts +11 -4
  186. package/src/__tests__/session-slash-unknown.test.ts +12 -4
  187. package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
  188. package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
  189. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
  190. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
  191. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
  192. package/src/__tests__/session-usage.test.ts +180 -0
  193. package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
  194. package/src/__tests__/session-workspace-injection.test.ts +8 -2
  195. package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
  196. package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
  197. package/src/__tests__/skill-feature-flags.test.ts +1 -0
  198. package/src/__tests__/skill-include-graph.test.ts +1 -0
  199. package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
  200. package/src/__tests__/skill-load-tool.test.ts +90 -12
  201. package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
  202. package/src/__tests__/skills-uninstall.test.ts +131 -0
  203. package/src/__tests__/skills.test.ts +32 -16
  204. package/src/__tests__/slack-block-formatting.test.ts +1 -1
  205. package/src/__tests__/slack-channel-config.test.ts +71 -12
  206. package/src/__tests__/slack-inbound-verification.test.ts +7 -7
  207. package/src/__tests__/slack-share-routes.test.ts +1 -1
  208. package/src/__tests__/slack-skill.test.ts +2 -2
  209. package/src/__tests__/slash-commands-catalog.test.ts +1 -0
  210. package/src/__tests__/slash-commands-resolver.test.ts +1 -0
  211. package/src/__tests__/starter-task-flow.test.ts +1 -1
  212. package/src/__tests__/subagent-manager-notify.test.ts +1 -1
  213. package/src/__tests__/subagent-tools.test.ts +2 -2
  214. package/src/__tests__/system-prompt.test.ts +4 -8
  215. package/src/__tests__/task-compiler.test.ts +0 -2
  216. package/src/__tests__/task-management-tools.test.ts +0 -2
  217. package/src/__tests__/task-runner.test.ts +0 -2
  218. package/src/__tests__/task-scheduler.test.ts +2 -2
  219. package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
  220. package/src/__tests__/terminal-tools.test.ts +1 -11
  221. package/src/__tests__/thread-seed-composer.test.ts +3 -1
  222. package/src/__tests__/tool-approval-handler.test.ts +5 -7
  223. package/src/__tests__/tool-executor.test.ts +2 -2
  224. package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
  225. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  226. package/src/__tests__/tool-profiling-listener.test.ts +1 -1
  227. package/src/__tests__/tool-trace-listener.test.ts +1 -2
  228. package/src/__tests__/trace-emitter.test.ts +1 -1
  229. package/src/__tests__/trust-context-guards.test.ts +1 -1
  230. package/src/__tests__/trust-store.test.ts +44 -395
  231. package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
  232. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
  233. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
  234. package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
  235. package/src/__tests__/trusted-contact-verification.test.ts +12 -12
  236. package/src/__tests__/twilio-config.test.ts +11 -2
  237. package/src/__tests__/twilio-provider.test.ts +6 -4
  238. package/src/__tests__/twilio-routes.test.ts +408 -86
  239. package/src/__tests__/twitter-platform-proxy-client.test.ts +450 -0
  240. package/src/__tests__/update-bulletin-format.test.ts +1 -1
  241. package/src/__tests__/update-bulletin-state.test.ts +1 -1
  242. package/src/__tests__/update-bulletin.test.ts +4 -8
  243. package/src/__tests__/update-template-contract.test.ts +1 -1
  244. package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
  245. package/src/__tests__/usage-routes.test.ts +23 -5
  246. package/src/__tests__/user-reference.test.ts +1 -1
  247. package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
  248. package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
  249. package/src/__tests__/view-image-tool.test.ts +0 -2
  250. package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
  251. package/src/__tests__/voice-invite-redemption.test.ts +18 -18
  252. package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
  253. package/src/__tests__/voice-session-bridge.test.ts +14 -16
  254. package/src/__tests__/workspace-policy.test.ts +1 -1
  255. package/src/approvals/AGENTS.md +4 -4
  256. package/src/approvals/approval-primitive.ts +2 -2
  257. package/src/approvals/guardian-decision-primitive.ts +1 -1
  258. package/src/approvals/guardian-request-resolvers.ts +3 -4
  259. package/src/bundler/app-bundler.ts +29 -217
  260. package/src/bundler/app-compiler.ts +131 -103
  261. package/src/bundler/compiler-tools.ts +248 -0
  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} +12 -17
  290. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  291. package/src/cli/commands/amazon/session.ts +116 -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} +263 -16
  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/{__tests__/twitter-cli-error-shaping.test.ts → cli/commands/twitter/__tests__/cli-error-shaping.test.ts} +43 -2
  316. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +483 -0
  317. package/src/{__tests__/twitter-cli-routing.test.ts → cli/commands/twitter/__tests__/cli-routing.test.ts} +130 -4
  318. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -2
  319. package/src/{twitter → cli/commands/twitter}/client.ts +17 -7
  320. package/src/cli/{twitter.ts → commands/twitter/index.ts} +322 -273
  321. package/src/cli/commands/twitter/router.ts +396 -0
  322. package/src/cli/commands/twitter/session.ts +121 -0
  323. package/src/cli/db.ts +1 -0
  324. package/src/cli/http-client.ts +87 -0
  325. package/src/cli/logger.ts +6 -0
  326. package/src/cli/main-screen.tsx +4 -3
  327. package/src/cli/output.ts +19 -0
  328. package/src/cli/program.ts +29 -27
  329. package/src/cli/reference.ts +27 -37
  330. package/src/cli.ts +452 -240
  331. package/src/config/assistant-feature-flags.ts +3 -15
  332. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  333. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  334. package/src/config/bundled-skills/amazon/SKILL.md +15 -5
  335. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  336. package/src/config/bundled-skills/app-builder/SKILL.md +21 -6
  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 +87 -229
  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 -11
  348. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +8 -16
  349. package/src/config/bundled-skills/doordash/doordash-cli.ts +120 -86
  350. package/src/config/bundled-skills/doordash/lib/session.ts +1 -2
  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 +56 -14
  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 +0 -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 +233 -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 +110 -96
  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 +168 -55
  452. package/src/daemon/main.ts +1 -0
  453. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  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 +29 -13
  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 +1 -0
  460. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  461. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  462. package/src/daemon/providers-setup.ts +0 -5
  463. package/src/daemon/recording-executor.ts +0 -7
  464. package/src/daemon/ride-shotgun-handler.ts +9 -13
  465. package/src/daemon/server.ts +136 -510
  466. package/src/daemon/session-agent-loop-handlers.ts +22 -7
  467. package/src/daemon/session-agent-loop.ts +86 -24
  468. package/src/daemon/session-attachments.ts +1 -1
  469. package/src/daemon/session-error.ts +1 -1
  470. package/src/daemon/session-history.ts +20 -15
  471. package/src/daemon/session-lifecycle.ts +9 -7
  472. package/src/daemon/session-memory.ts +15 -1
  473. package/src/daemon/session-messaging.ts +10 -6
  474. package/src/daemon/session-notifiers.ts +10 -8
  475. package/src/daemon/session-process.ts +34 -25
  476. package/src/daemon/session-queue-manager.ts +1 -1
  477. package/src/daemon/session-runtime-assembly.ts +6 -25
  478. package/src/daemon/session-surfaces.ts +2 -2
  479. package/src/daemon/session-tool-setup.ts +1 -1
  480. package/src/daemon/session-usage.ts +119 -18
  481. package/src/daemon/session.ts +13 -9
  482. package/src/daemon/tool-side-effects.ts +6 -5
  483. package/src/daemon/trace-emitter.ts +1 -1
  484. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  485. package/src/daemon/watch-handler.ts +2 -5
  486. package/src/email/service.ts +8 -8
  487. package/src/events/domain-events.ts +0 -1
  488. package/src/events/tool-notification-listener.ts +1 -1
  489. package/src/followups/followup-store.ts +1 -2
  490. package/src/followups/types.ts +0 -6
  491. package/src/heartbeat/heartbeat-service.ts +1 -1
  492. package/src/inbound/platform-callback-registration.ts +1 -1
  493. package/src/inbound/public-ingress-urls.ts +0 -8
  494. package/src/index.ts +12 -0
  495. package/src/mcp/client.ts +1 -1
  496. package/src/mcp/manager.ts +1 -1
  497. package/src/memory/app-store.ts +1 -42
  498. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  499. package/src/memory/conversation-attention-store.ts +154 -0
  500. package/src/memory/conversation-bootstrap.ts +1 -1
  501. package/src/memory/conversation-crud.ts +53 -1
  502. package/src/memory/conversation-display-order-migration.ts +2 -3
  503. package/src/memory/conversation-queries.ts +1 -29
  504. package/src/memory/conversation-title-service.ts +26 -21
  505. package/src/memory/db-connection.ts +1 -8
  506. package/src/memory/db-init.ts +20 -0
  507. package/src/memory/delivery-crud.ts +4 -34
  508. package/src/memory/external-conversation-store.ts +1 -1
  509. package/src/memory/format-recall.ts +47 -0
  510. package/src/memory/guardian-action-store.ts +4 -5
  511. package/src/memory/guardian-rate-limits.ts +0 -3
  512. package/src/memory/invite-store.ts +1 -1
  513. package/src/memory/job-handlers/backfill.ts +9 -2
  514. package/src/memory/job-handlers/extraction.ts +2 -7
  515. package/src/memory/job-handlers/summarization.ts +1 -1
  516. package/src/memory/llm-usage-store.ts +11 -0
  517. package/src/memory/migrations/114-notifications.ts +12 -40
  518. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  519. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  520. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  521. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  522. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  523. package/src/memory/migrations/index.ts +5 -0
  524. package/src/memory/migrations/registry.ts +30 -0
  525. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  526. package/src/memory/retriever.test.ts +707 -0
  527. package/src/memory/retriever.ts +120 -116
  528. package/src/memory/schema/calls.ts +3 -7
  529. package/src/memory/schema/guardian.ts +2 -2
  530. package/src/memory/search/lexical.ts +4 -1
  531. package/src/memory/search/query-expansion.test.ts +70 -0
  532. package/src/memory/search/query-expansion.ts +118 -0
  533. package/src/memory/search/types.ts +18 -17
  534. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  535. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  536. package/src/messaging/registry.ts +0 -1
  537. package/src/notifications/README.md +13 -22
  538. package/src/notifications/adapters/macos.ts +1 -1
  539. package/src/notifications/conversation-pairing.ts +2 -2
  540. package/src/notifications/copy-composer.ts +2 -2
  541. package/src/notifications/decision-engine.ts +1 -10
  542. package/src/notifications/destination-resolver.ts +2 -3
  543. package/src/notifications/emit-signal.ts +2 -8
  544. package/src/notifications/guardian-question-mode.ts +5 -8
  545. package/src/notifications/signal.ts +1 -2
  546. package/src/notifications/types.ts +1 -1
  547. package/src/oauth/token-persistence.ts +25 -1
  548. package/src/permissions/checker.ts +4 -29
  549. package/src/permissions/defaults.ts +6 -6
  550. package/src/permissions/prompter.ts +1 -1
  551. package/src/permissions/secret-prompter.ts +1 -1
  552. package/src/permissions/shell-identity.ts +1 -1
  553. package/src/permissions/trust-store.ts +13 -76
  554. package/src/permissions/workspace-policy.ts +1 -1
  555. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  556. package/src/{config → prompts}/system-prompt.ts +40 -21
  557. package/src/runtime/AGENTS.md +6 -8
  558. package/src/runtime/access-request-helper.ts +36 -55
  559. package/src/runtime/actor-trust-resolver.ts +1 -24
  560. package/src/runtime/approval-message-composer.ts +6 -2
  561. package/src/runtime/assistant-event.ts +1 -1
  562. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  563. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  564. package/src/runtime/auth/route-policy.ts +140 -24
  565. package/src/runtime/auth/subject.ts +9 -0
  566. package/src/runtime/auth/token-service.ts +11 -0
  567. package/src/runtime/auth/types.ts +1 -1
  568. package/src/runtime/channel-approval-types.ts +1 -1
  569. package/src/runtime/channel-approvals.ts +1 -1
  570. package/src/runtime/channel-invite-transport.ts +0 -2
  571. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  572. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  573. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  574. package/src/runtime/channel-readiness-service.ts +24 -159
  575. package/src/runtime/channel-readiness-types.ts +5 -1
  576. package/src/runtime/channel-reply-delivery.ts +43 -3
  577. package/src/runtime/channel-retry-sweep.ts +14 -22
  578. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  579. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  580. package/src/runtime/gateway-client.ts +12 -15
  581. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  582. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  583. package/src/runtime/guardian-action-message-composer.ts +4 -4
  584. package/src/runtime/guardian-reply-router.ts +3 -3
  585. package/src/runtime/http-server.ts +133 -24
  586. package/src/runtime/http-types.ts +34 -1
  587. package/src/runtime/invite-instruction-generator.ts +1 -3
  588. package/src/runtime/invite-redemption-service.ts +5 -5
  589. package/src/runtime/invite-service.ts +7 -7
  590. package/src/runtime/local-actor-identity.ts +28 -2
  591. package/src/runtime/local-gateway-health.ts +275 -0
  592. package/src/runtime/middleware/twilio-validation.ts +3 -3
  593. package/src/runtime/migrations/migration-transport.ts +18 -3
  594. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  595. package/src/runtime/nl-approval-parser.ts +2 -3
  596. package/src/runtime/routes/access-request-decision.ts +2 -2
  597. package/src/runtime/routes/app-management-routes.ts +921 -0
  598. package/src/runtime/routes/approval-routes.ts +76 -7
  599. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  600. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  601. package/src/runtime/routes/channel-route-shared.ts +1 -3
  602. package/src/runtime/routes/channel-routes.ts +1 -4
  603. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  604. package/src/runtime/routes/computer-use-routes.ts +595 -0
  605. package/src/runtime/routes/contact-routes.ts +1 -317
  606. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  607. package/src/runtime/routes/conversation-routes.ts +11 -18
  608. package/src/runtime/routes/debug-routes.ts +1 -1
  609. package/src/runtime/routes/diagnostics-routes.ts +813 -0
  610. package/src/runtime/routes/documents-routes.ts +227 -0
  611. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  612. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  613. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  614. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  615. package/src/runtime/routes/inbound-conversation.ts +3 -10
  616. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  617. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  618. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  619. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  620. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  621. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  622. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  623. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  624. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  625. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  626. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  627. package/src/runtime/routes/integrations/telegram.ts +111 -0
  628. package/src/runtime/routes/integrations/twilio.ts +451 -0
  629. package/src/runtime/routes/invite-routes.ts +2 -2
  630. package/src/runtime/routes/pairing-routes.ts +1 -1
  631. package/src/runtime/routes/recording-routes.ts +332 -0
  632. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  633. package/src/runtime/routes/session-management-routes.ts +167 -0
  634. package/src/runtime/routes/session-query-routes.ts +204 -0
  635. package/src/runtime/routes/settings-routes.ts +977 -0
  636. package/src/runtime/routes/skills-routes.ts +266 -0
  637. package/src/runtime/routes/subagents-routes.ts +246 -0
  638. package/src/runtime/routes/surface-action-routes.ts +100 -10
  639. package/src/runtime/routes/surface-content-routes.ts +1 -1
  640. package/src/runtime/routes/work-items-routes.ts +809 -0
  641. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  642. package/src/runtime/routes/workspace-routes.ts +410 -0
  643. package/src/runtime/routes/workspace-utils.ts +88 -0
  644. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  645. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  646. package/src/runtime/tool-grant-request-helper.ts +1 -2
  647. package/src/runtime/trust-context-resolver.ts +0 -1
  648. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  649. package/src/runtime/verification-rate-limiter.ts +2 -2
  650. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  651. package/src/schedule/integration-status.ts +2 -2
  652. package/src/schedule/schedule-store.ts +7 -9
  653. package/src/sequence/engine.ts +1 -1
  654. package/src/skills/active-skill-tools.ts +0 -8
  655. package/src/skills/clawhub.ts +1 -10
  656. package/src/skills/managed-store.ts +14 -4
  657. package/src/skills/slash-commands.ts +1 -1
  658. package/src/subagent/manager.ts +1 -1
  659. package/src/subagent/types.ts +1 -1
  660. package/src/tasks/SPEC.md +10 -10
  661. package/src/tasks/task-scheduler.ts +1 -1
  662. package/src/telegram/bot-username.ts +13 -0
  663. package/src/tools/assets/materialize.ts +1 -1
  664. package/src/tools/assets/search.ts +1 -1
  665. package/src/tools/browser/browser-execution.ts +2 -2
  666. package/src/tools/browser/browser-manager.ts +88 -11
  667. package/src/tools/browser/browser-screencast.ts +1 -1
  668. package/src/tools/browser/headless-browser.ts +0 -17
  669. package/src/tools/browser/jit-auth.ts +1 -1
  670. package/src/tools/browser/recording-store.ts +19 -1
  671. package/src/tools/browser/runtime-check.ts +4 -2
  672. package/src/tools/calls/call-start.ts +3 -3
  673. package/src/tools/credentials/metadata-store.ts +0 -13
  674. package/src/tools/credentials/vault.ts +7 -31
  675. package/src/tools/followups/followup_create.ts +0 -8
  676. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  677. package/src/tools/memory/definitions.ts +32 -10
  678. package/src/tools/memory/handlers.test.ts +573 -0
  679. package/src/tools/memory/handlers.ts +222 -65
  680. package/src/tools/memory/register.ts +53 -24
  681. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  682. package/src/tools/schedule/update.ts +0 -8
  683. package/src/tools/skills/load.ts +3 -3
  684. package/src/tools/subagent/read.ts +1 -1
  685. package/src/tools/system/voice-config.ts +2 -14
  686. package/src/tools/terminal/safe-env.ts +5 -18
  687. package/src/tools/tool-approval-handler.ts +4 -4
  688. package/src/tools/tool-manifest.ts +4 -2
  689. package/src/tools/types.ts +1 -1
  690. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  691. package/src/twitter/platform-proxy-client.ts +405 -0
  692. package/src/usage/types.ts +21 -0
  693. package/src/util/canonicalize-identity.ts +2 -6
  694. package/src/util/cookie-session.ts +35 -51
  695. package/src/util/platform.ts +93 -86
  696. package/src/util/pricing.ts +180 -43
  697. package/src/work-items/work-item-runner.ts +1 -1
  698. package/scripts/ipc/check-contract-inventory.ts +0 -107
  699. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  700. package/scripts/ipc/generate-swift.ts +0 -528
  701. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  702. package/src/__tests__/app-migration.test.ts +0 -148
  703. package/src/__tests__/config-loader-migration.test.ts +0 -85
  704. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  705. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  706. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  707. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  708. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  709. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  710. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  711. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  712. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  713. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  714. package/src/__tests__/integrations-cli.test.ts +0 -232
  715. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  716. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  717. package/src/__tests__/ipc-contract.test.ts +0 -76
  718. package/src/__tests__/ipc-protocol.test.ts +0 -120
  719. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  720. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  721. package/src/__tests__/ipc-validate.test.ts +0 -471
  722. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  723. package/src/__tests__/migration-ordering.test.ts +0 -267
  724. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  725. package/src/__tests__/platform-move-helper.test.ts +0 -108
  726. package/src/__tests__/platform-socket-path.test.ts +0 -52
  727. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  728. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  729. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  730. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  731. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  732. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  733. package/src/__tests__/work-item-output.test.ts +0 -150
  734. package/src/amazon/session.ts +0 -58
  735. package/src/cli/channels.ts +0 -51
  736. package/src/cli/influencer.ts +0 -319
  737. package/src/cli/integrations.ts +0 -372
  738. package/src/cli/ipc-client.ts +0 -88
  739. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  740. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  741. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  742. package/src/config/core-schema.ts +0 -434
  743. package/src/config/memory-schema.ts +0 -617
  744. package/src/daemon/auth-manager.ts +0 -106
  745. package/src/daemon/handlers/apps.ts +0 -758
  746. package/src/daemon/handlers/avatar.ts +0 -73
  747. package/src/daemon/handlers/browser.ts +0 -3
  748. package/src/daemon/handlers/computer-use.ts +0 -231
  749. package/src/daemon/handlers/config-dispatch.ts +0 -29
  750. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  751. package/src/daemon/handlers/config-inbox.ts +0 -457
  752. package/src/daemon/handlers/config-integrations.ts +0 -409
  753. package/src/daemon/handlers/config-platform.ts +0 -77
  754. package/src/daemon/handlers/config-slack.ts +0 -41
  755. package/src/daemon/handlers/config-tools.ts +0 -226
  756. package/src/daemon/handlers/config-trust.ts +0 -135
  757. package/src/daemon/handlers/config.ts +0 -64
  758. package/src/daemon/handlers/contacts.ts +0 -193
  759. package/src/daemon/handlers/diagnostics.ts +0 -382
  760. package/src/daemon/handlers/documents.ts +0 -188
  761. package/src/daemon/handlers/guardian-actions.ts +0 -82
  762. package/src/daemon/handlers/home-base.ts +0 -82
  763. package/src/daemon/handlers/index.ts +0 -222
  764. package/src/daemon/handlers/misc.ts +0 -1139
  765. package/src/daemon/handlers/navigate-settings.ts +0 -29
  766. package/src/daemon/handlers/oauth-connect.ts +0 -202
  767. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  768. package/src/daemon/handlers/publish.ts +0 -176
  769. package/src/daemon/handlers/signing.ts +0 -56
  770. package/src/daemon/handlers/subagents.ts +0 -286
  771. package/src/daemon/handlers/twitter-auth.ts +0 -220
  772. package/src/daemon/handlers/work-items.ts +0 -796
  773. package/src/daemon/handlers/workspace-files.ts +0 -84
  774. package/src/daemon/handlers.ts +0 -16
  775. package/src/daemon/ipc-blob-store.ts +0 -246
  776. package/src/daemon/ipc-contract-inventory.json +0 -348
  777. package/src/daemon/ipc-contract-inventory.ts +0 -202
  778. package/src/daemon/ipc-handler.ts +0 -120
  779. package/src/daemon/ipc-protocol.ts +0 -85
  780. package/src/daemon/ipc-validate.ts +0 -254
  781. package/src/memory/app-migration.ts +0 -114
  782. package/src/memory/channel-delivery-store.ts +0 -40
  783. package/src/memory/channel-guardian-store.ts +0 -83
  784. package/src/memory/conversation-store.ts +0 -102
  785. package/src/memory/schema-migration.ts +0 -38
  786. package/src/messaging/providers/sms/adapter.ts +0 -232
  787. package/src/messaging/providers/sms/client.ts +0 -93
  788. package/src/messaging/providers/sms/types.ts +0 -7
  789. package/src/migrations/config-merge.ts +0 -62
  790. package/src/migrations/data-layout.ts +0 -89
  791. package/src/migrations/data-merge.ts +0 -44
  792. package/src/migrations/hooks-merge.ts +0 -118
  793. package/src/migrations/index.ts +0 -6
  794. package/src/migrations/log.ts +0 -28
  795. package/src/migrations/skills-merge.ts +0 -44
  796. package/src/migrations/workspace-layout.ts +0 -94
  797. package/src/notifications/adapters/sms.ts +0 -94
  798. package/src/runtime/channel-approval-parser.ts +0 -123
  799. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  800. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  801. package/src/runtime/routes/integration-routes.ts +0 -381
  802. package/src/runtime/routes/twilio-routes.ts +0 -1251
  803. package/src/twitter/router.ts +0 -131
  804. package/src/twitter/session.ts +0 -54
  805. package/src/watcher/providers/slack.ts +0 -282
  806. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  807. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  808. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  809. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  810. /package/src/{twitter → cli/commands/twitter}/oauth-client.ts +0 -0
  811. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  812. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  813. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  814. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  815. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  816. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  817. /package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -0
  818. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  819. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  820. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  821. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  822. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  823. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  824. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  825. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  826. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  827. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  828. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  829. /package/src/daemon/{ipc-contract → message-types}/surfaces.ts +0 -0
  830. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  831. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  832. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  833. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  834. /package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -0
  835. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  836. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  837. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  838. /package/src/{config → prompts}/templates/USER.md +0 -0
  839. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  840. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  841. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  842. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  843. /package/src/{config → prompts}/user-reference.ts +0 -0
@@ -45,7 +45,7 @@ mock.module("../security/secret-ingress.js", () => ({
45
45
  }));
46
46
 
47
47
  // Mock render to return the raw content as text
48
- mock.module("../daemon/handlers.js", () => ({
48
+ mock.module("../daemon/handlers/shared.js", () => ({
49
49
  renderHistoryContent: (content: unknown) => ({
50
50
  text: typeof content === "string" ? content : JSON.stringify(content),
51
51
  }),
@@ -59,12 +59,12 @@ import {
59
59
  createCanonicalGuardianRequest,
60
60
  getCanonicalGuardianRequest,
61
61
  } from "../memory/canonical-guardian-store.js";
62
- import * as channelDeliveryStore from "../memory/channel-delivery-store.js";
62
+ import { getDb, initializeDb, resetDb, resetTestTables } from "../memory/db.js";
63
+ import * as deliveryChannels from "../memory/delivery-channels.js";
63
64
  import {
64
65
  createApprovalRequest,
65
66
  getAllPendingApprovalsByGuardianChat,
66
- } from "../memory/channel-guardian-store.js";
67
- import { getDb, initializeDb, resetDb, resetTestTables } from "../memory/db.js";
67
+ } from "../memory/guardian-approvals.js";
68
68
  import {
69
69
  conversations,
70
70
  externalConversationBindings,
@@ -115,7 +115,7 @@ function resetTables(): void {
115
115
  "canonical_guardian_deliveries",
116
116
  "canonical_guardian_requests",
117
117
  "channel_guardian_approval_requests",
118
- "channel_guardian_verification_challenges",
118
+ "channel_verification_sessions",
119
119
  "conversation_keys",
120
120
  "message_runs",
121
121
  "channel_inbound_events",
@@ -124,7 +124,7 @@ function resetTables(): void {
124
124
  "contact_channels",
125
125
  "contacts",
126
126
  );
127
- channelDeliveryStore.resetAllRunDeliveryClaims();
127
+ deliveryChannels.resetAllRunDeliveryClaims();
128
128
  pendingInteractions.clear();
129
129
  }
130
130
 
@@ -217,9 +217,9 @@ function ensureTestContact(): void {
217
217
  policy: "allow",
218
218
  },
219
219
  {
220
- type: "sms",
221
- address: "sms-user-default",
222
- externalUserId: "sms-user-default",
220
+ type: "slack",
221
+ address: "slack-user-default",
222
+ externalUserId: "slack-user-default",
223
223
  status: "active",
224
224
  policy: "allow",
225
225
  },
@@ -399,46 +399,13 @@ describe("inbound text matching approval phrases triggers decision handling", ()
399
399
 
400
400
  deliverSpy.mockRestore();
401
401
  });
402
-
403
- test('text "always" triggers approve_always decision', async () => {
404
- const deliverSpy = spyOn(
405
- gatewayClient,
406
- "deliverChannelReply",
407
- ).mockResolvedValue({ ok: true });
408
-
409
- const initReq = makeInboundRequest({ content: "init" });
410
- await handleChannelInbound(initReq, noopProcessMessage);
411
-
412
- const db = getDb();
413
- const events = db.$client
414
- .prepare("SELECT conversation_id FROM channel_inbound_events")
415
- .all() as Array<{ conversation_id: string }>;
416
- const conversationId = events[0]?.conversation_id;
417
- ensureConversation(conversationId!);
418
-
419
- const sessionMock = registerPendingInteraction(
420
- "req-txt-2",
421
- conversationId!,
422
- "shell",
423
- );
424
-
425
- const req = makeInboundRequest({ content: "always" });
426
- const res = await handleChannelInbound(req, noopProcessMessage);
427
- const body = (await res.json()) as Record<string, unknown>;
428
-
429
- expect(body.accepted).toBe(true);
430
- expect(body.approval).toBe("decision_applied");
431
- expect(sessionMock).toHaveBeenCalledWith("req-txt-2", "allow");
432
-
433
- deliverSpy.mockRestore();
434
- });
435
402
  });
436
403
 
437
404
  // ═══════════════════════════════════════════════════════════════════════════
438
405
  // 4. Non-decision messages during pending approval (no conversational engine)
439
406
  // ═══════════════════════════════════════════════════════════════════════════
440
407
 
441
- describe("non-decision messages during pending approval (legacy fallback)", () => {
408
+ describe("non-decision messages during pending approval (no conversational engine)", () => {
442
409
  beforeEach(() => {
443
410
  createGuardianBinding({
444
411
  channel: "telegram",
@@ -887,27 +854,27 @@ describe("stale callback handling", () => {
887
854
  });
888
855
 
889
856
  // ═══════════════════════════════════════════════════════════════════════════
890
- // 15. SMS channel approval decisions
857
+ // 15. Plain-text channel approval decisions (telegram)
891
858
  // ═══════════════════════════════════════════════════════════════════════════
892
859
 
893
- describe("SMS channel approval decisions", () => {
860
+ describe("plain-text channel approval decisions", () => {
894
861
  beforeEach(() => {
895
862
  createGuardianBinding({
896
- channel: "sms",
897
- guardianExternalUserId: "sms-user-default",
898
- guardianDeliveryChatId: "sms-chat-123",
899
- guardianPrincipalId: "sms-user-default",
863
+ channel: "telegram",
864
+ guardianExternalUserId: "telegram-user-default",
865
+ guardianDeliveryChatId: "chat-123",
866
+ guardianPrincipalId: "telegram-user-default",
900
867
  });
901
868
  });
902
869
 
903
- function makeSmsInboundRequest(
870
+ function makePlainTextInboundRequest(
904
871
  overrides: Record<string, unknown> = {},
905
872
  ): Request {
906
873
  const body = {
907
- sourceChannel: "sms",
908
- interface: "sms",
909
- conversationExternalId: "sms-chat-123",
910
- actorExternalId: "sms-user-default",
874
+ sourceChannel: "telegram",
875
+ interface: "telegram",
876
+ conversationExternalId: "chat-123",
877
+ actorExternalId: "telegram-user-default",
911
878
  externalMessageId: `msg-${Date.now()}-${Math.random()}`,
912
879
  content: "hello",
913
880
  replyCallbackUrl: "https://gateway.test/deliver",
@@ -922,14 +889,14 @@ describe("SMS channel approval decisions", () => {
922
889
  });
923
890
  }
924
891
 
925
- test('plain-text "yes" via SMS triggers approve_once decision', async () => {
892
+ test('plain-text "yes" triggers approve_once decision', async () => {
926
893
  const deliverSpy = spyOn(
927
894
  gatewayClient,
928
895
  "deliverChannelReply",
929
896
  ).mockResolvedValue({ ok: true });
930
897
 
931
- // Establish the conversation via SMS
932
- const initReq = makeSmsInboundRequest({ content: "init" });
898
+ // Establish the conversation
899
+ const initReq = makePlainTextInboundRequest({ content: "init" });
933
900
  await handleChannelInbound(initReq, noopProcessMessage);
934
901
 
935
902
  const db = getDb();
@@ -940,29 +907,29 @@ describe("SMS channel approval decisions", () => {
940
907
  ensureConversation(conversationId!);
941
908
 
942
909
  const sessionMock = registerPendingInteraction(
943
- "req-sms-1",
910
+ "req-pt-1",
944
911
  conversationId!,
945
912
  "shell",
946
913
  );
947
914
 
948
- const req = makeSmsInboundRequest({ content: "yes" });
915
+ const req = makePlainTextInboundRequest({ content: "yes" });
949
916
  const res = await handleChannelInbound(req, noopProcessMessage);
950
917
  const body = (await res.json()) as Record<string, unknown>;
951
918
 
952
919
  expect(body.accepted).toBe(true);
953
920
  expect(body.approval).toBe("decision_applied");
954
- expect(sessionMock).toHaveBeenCalledWith("req-sms-1", "allow");
921
+ expect(sessionMock).toHaveBeenCalledWith("req-pt-1", "allow");
955
922
 
956
923
  deliverSpy.mockRestore();
957
924
  });
958
925
 
959
- test('plain-text "no" via SMS triggers reject decision', async () => {
926
+ test('plain-text "no" triggers reject decision', async () => {
960
927
  const deliverSpy = spyOn(
961
928
  gatewayClient,
962
929
  "deliverChannelReply",
963
930
  ).mockResolvedValue({ ok: true });
964
931
 
965
- const initReq = makeSmsInboundRequest({ content: "init" });
932
+ const initReq = makePlainTextInboundRequest({ content: "init" });
966
933
  await handleChannelInbound(initReq, noopProcessMessage);
967
934
 
968
935
  const db = getDb();
@@ -973,23 +940,23 @@ describe("SMS channel approval decisions", () => {
973
940
  ensureConversation(conversationId!);
974
941
 
975
942
  const sessionMock = registerPendingInteraction(
976
- "req-sms-2",
943
+ "req-pt-2",
977
944
  conversationId!,
978
945
  "shell",
979
946
  );
980
947
 
981
- const req = makeSmsInboundRequest({ content: "no" });
948
+ const req = makePlainTextInboundRequest({ content: "no" });
982
949
  const res = await handleChannelInbound(req, noopProcessMessage);
983
950
  const body = (await res.json()) as Record<string, unknown>;
984
951
 
985
952
  expect(body.accepted).toBe(true);
986
953
  expect(body.approval).toBe("decision_applied");
987
- expect(sessionMock).toHaveBeenCalledWith("req-sms-2", "deny");
954
+ expect(sessionMock).toHaveBeenCalledWith("req-pt-2", "deny");
988
955
 
989
956
  deliverSpy.mockRestore();
990
957
  });
991
958
 
992
- test("non-decision SMS message during pending approval sends status reply", async () => {
959
+ test("non-decision message during pending approval sends status reply", async () => {
993
960
  const deliverSpy = spyOn(
994
961
  gatewayClient,
995
962
  "deliverChannelReply",
@@ -999,7 +966,7 @@ describe("SMS channel approval decisions", () => {
999
966
  "deliverApprovalPrompt",
1000
967
  ).mockResolvedValue(undefined);
1001
968
 
1002
- const initReq = makeSmsInboundRequest({ content: "init" });
969
+ const initReq = makePlainTextInboundRequest({ content: "init" });
1003
970
  await handleChannelInbound(initReq, noopProcessMessage);
1004
971
 
1005
972
  const db = getDb();
@@ -1009,22 +976,22 @@ describe("SMS channel approval decisions", () => {
1009
976
  const conversationId = events[events.length - 1]?.conversation_id;
1010
977
  ensureConversation(conversationId!);
1011
978
 
1012
- registerPendingInteraction("req-sms-3", conversationId!, "shell");
979
+ registerPendingInteraction("req-pt-3", conversationId!, "shell");
1013
980
 
1014
- const req = makeSmsInboundRequest({ content: "what is happening?" });
981
+ const req = makePlainTextInboundRequest({ content: "what is happening?" });
1015
982
  const res = await handleChannelInbound(req, noopProcessMessage);
1016
983
  const body = (await res.json()) as Record<string, unknown>;
1017
984
 
1018
985
  expect(body.accepted).toBe(true);
1019
986
  expect(body.approval).toBe("assistant_turn");
1020
987
 
1021
- // SMS non-decision: status reply delivered via plain text
988
+ // Non-decision: status reply delivered via plain text
1022
989
  expect(deliverSpy).toHaveBeenCalled();
1023
990
  expect(approvalSpy).not.toHaveBeenCalled();
1024
991
  const statusCall = deliverSpy.mock.calls.find(
1025
992
  (call) =>
1026
993
  typeof call[1] === "object" &&
1027
- (call[1] as { chatId?: string }).chatId === "sms-chat-123",
994
+ (call[1] as { chatId?: string }).chatId === "chat-123",
1028
995
  );
1029
996
  expect(statusCall).toBeDefined();
1030
997
  const statusPayload = statusCall![1] as {
@@ -1041,14 +1008,14 @@ describe("SMS channel approval decisions", () => {
1041
1008
  });
1042
1009
 
1043
1010
  // ═══════════════════════════════════════════════════════════════════════════
1044
- // 16. SMS guardian verify intercept
1011
+ // 16. Guardian verify intercept
1045
1012
  // ═══════════════════════════════════════════════════════════════════════════
1046
1013
 
1047
- describe("SMS guardian verify intercept", () => {
1048
- test("verification code reply works with sourceChannel sms", async () => {
1049
- const { createVerificationChallenge } =
1050
- await import("../runtime/channel-guardian-service.js");
1051
- const { secret } = createVerificationChallenge("sms");
1014
+ describe("telegram guardian verify intercept", () => {
1015
+ test("verification code reply works with sourceChannel telegram", async () => {
1016
+ const { createInboundVerificationSession } =
1017
+ await import("../runtime/channel-verification-service.js");
1018
+ const { secret } = createInboundVerificationSession("telegram");
1052
1019
 
1053
1020
  const deliverSpy = spyOn(
1054
1021
  gatewayClient,
@@ -1061,12 +1028,12 @@ describe("SMS guardian verify intercept", () => {
1061
1028
  "Content-Type": "application/json",
1062
1029
  },
1063
1030
  body: JSON.stringify({
1064
- sourceChannel: "sms",
1065
- interface: "sms",
1066
- conversationExternalId: "sms-chat-verify",
1031
+ sourceChannel: "telegram",
1032
+ interface: "telegram",
1033
+ conversationExternalId: "tg-chat-verify",
1067
1034
  externalMessageId: `msg-${Date.now()}-${Math.random()}`,
1068
1035
  content: secret,
1069
- actorExternalId: "sms-user-42",
1036
+ actorExternalId: "tg-user-42",
1070
1037
  replyCallbackUrl: "https://gateway.test/deliver",
1071
1038
  }),
1072
1039
  });
@@ -1075,12 +1042,12 @@ describe("SMS guardian verify intercept", () => {
1075
1042
  const body = (await res.json()) as Record<string, unknown>;
1076
1043
 
1077
1044
  expect(body.accepted).toBe(true);
1078
- expect(body.guardianVerification).toBe("verified");
1045
+ expect(body.verificationOutcome).toBe("verified");
1079
1046
 
1080
1047
  expect(deliverSpy).toHaveBeenCalled();
1081
1048
  const replyArgs = deliverSpy.mock.calls[0];
1082
1049
  const replyPayload = replyArgs[1] as { chatId: string; text: string };
1083
- expect(replyPayload.chatId).toBe("sms-chat-verify");
1050
+ expect(replyPayload.chatId).toBe("tg-chat-verify");
1084
1051
  expect(typeof replyPayload.text).toBe("string");
1085
1052
  expect(replyPayload.text.toLowerCase()).toContain("guardian");
1086
1053
  expect(replyPayload.text.toLowerCase()).toContain("verif");
@@ -1088,11 +1055,11 @@ describe("SMS guardian verify intercept", () => {
1088
1055
  deliverSpy.mockRestore();
1089
1056
  });
1090
1057
 
1091
- test("invalid verification code returns failed via SMS", async () => {
1092
- const { createVerificationChallenge } =
1093
- await import("../runtime/channel-guardian-service.js");
1058
+ test("invalid verification code returns failed via telegram", async () => {
1059
+ const { createInboundVerificationSession } =
1060
+ await import("../runtime/channel-verification-service.js");
1094
1061
  // Ensure there is a pending challenge so bare-code verification is intercepted.
1095
- createVerificationChallenge("sms");
1062
+ createInboundVerificationSession("telegram");
1096
1063
 
1097
1064
  const deliverSpy = spyOn(
1098
1065
  gatewayClient,
@@ -1105,12 +1072,12 @@ describe("SMS guardian verify intercept", () => {
1105
1072
  "Content-Type": "application/json",
1106
1073
  },
1107
1074
  body: JSON.stringify({
1108
- sourceChannel: "sms",
1109
- interface: "sms",
1110
- conversationExternalId: "sms-chat-verify-fail",
1075
+ sourceChannel: "telegram",
1076
+ interface: "telegram",
1077
+ conversationExternalId: "tg-chat-verify-fail",
1111
1078
  externalMessageId: `msg-${Date.now()}-${Math.random()}`,
1112
1079
  content: "000000",
1113
- actorExternalId: "sms-user-43",
1080
+ actorExternalId: "tg-user-43",
1114
1081
  replyCallbackUrl: "https://gateway.test/deliver",
1115
1082
  }),
1116
1083
  });
@@ -1119,7 +1086,7 @@ describe("SMS guardian verify intercept", () => {
1119
1086
  const body = (await res.json()) as Record<string, unknown>;
1120
1087
 
1121
1088
  expect(body.accepted).toBe(true);
1122
- expect(body.guardianVerification).toBe("failed");
1089
+ expect(body.verificationOutcome).toBe("failed");
1123
1090
 
1124
1091
  expect(deliverSpy).toHaveBeenCalled();
1125
1092
  const replyArgs = deliverSpy.mock.calls[0];
@@ -1133,14 +1100,14 @@ describe("SMS guardian verify intercept", () => {
1133
1100
 
1134
1101
  test("64-char hex verification codes are intercepted when a pending challenge exists", async () => {
1135
1102
  const { createHash, randomBytes } = await import("node:crypto");
1136
- const { createChallenge } =
1137
- await import("../memory/channel-guardian-store.js");
1103
+ const { createInboundSession } =
1104
+ await import("../memory/channel-verification-sessions.js");
1138
1105
 
1139
1106
  const secret = randomBytes(32).toString("hex");
1140
1107
  const challengeHash = createHash("sha256").update(secret).digest("hex");
1141
- createChallenge({
1108
+ createInboundSession({
1142
1109
  id: `challenge-hex-${Date.now()}`,
1143
- channel: "sms",
1110
+ channel: "telegram",
1144
1111
  challengeHash,
1145
1112
  expiresAt: Date.now() + 600_000,
1146
1113
  });
@@ -1157,12 +1124,12 @@ describe("SMS guardian verify intercept", () => {
1157
1124
  "Content-Type": "application/json",
1158
1125
  },
1159
1126
  body: JSON.stringify({
1160
- sourceChannel: "sms",
1161
- interface: "sms",
1162
- conversationExternalId: "sms-chat-hex-message",
1127
+ sourceChannel: "telegram",
1128
+ interface: "telegram",
1129
+ conversationExternalId: "tg-chat-hex-message",
1163
1130
  externalMessageId: `msg-${Date.now()}-${Math.random()}`,
1164
1131
  content: secret,
1165
- actorExternalId: "sms-user-hex",
1132
+ actorExternalId: "tg-user-hex",
1166
1133
  replyCallbackUrl: "https://gateway.test/deliver",
1167
1134
  }),
1168
1135
  });
@@ -1171,7 +1138,7 @@ describe("SMS guardian verify intercept", () => {
1171
1138
  const body = (await res.json()) as Record<string, unknown>;
1172
1139
 
1173
1140
  expect(body.accepted).toBe(true);
1174
- expect(body.guardianVerification).toBe("verified");
1141
+ expect(body.verificationOutcome).toBe("verified");
1175
1142
  expect(processMessageCalled).toBe(false);
1176
1143
  });
1177
1144
  });
@@ -1467,27 +1434,27 @@ describe("expired guardian approval auto-denies via sweep", () => {
1467
1434
  describe("deliver-once idempotency guard", () => {
1468
1435
  test("claimRunDelivery returns true on first call, false on subsequent calls", () => {
1469
1436
  const runId = "run-idem-unit";
1470
- expect(channelDeliveryStore.claimRunDelivery(runId)).toBe(true);
1471
- expect(channelDeliveryStore.claimRunDelivery(runId)).toBe(false);
1472
- expect(channelDeliveryStore.claimRunDelivery(runId)).toBe(false);
1473
- channelDeliveryStore.resetRunDeliveryClaim(runId);
1437
+ expect(deliveryChannels.claimRunDelivery(runId)).toBe(true);
1438
+ expect(deliveryChannels.claimRunDelivery(runId)).toBe(false);
1439
+ expect(deliveryChannels.claimRunDelivery(runId)).toBe(false);
1440
+ deliveryChannels.resetRunDeliveryClaim(runId);
1474
1441
  });
1475
1442
 
1476
1443
  test("different run IDs are independent", () => {
1477
- expect(channelDeliveryStore.claimRunDelivery("run-a")).toBe(true);
1478
- expect(channelDeliveryStore.claimRunDelivery("run-b")).toBe(true);
1479
- expect(channelDeliveryStore.claimRunDelivery("run-a")).toBe(false);
1480
- expect(channelDeliveryStore.claimRunDelivery("run-b")).toBe(false);
1481
- channelDeliveryStore.resetRunDeliveryClaim("run-a");
1482
- channelDeliveryStore.resetRunDeliveryClaim("run-b");
1444
+ expect(deliveryChannels.claimRunDelivery("run-a")).toBe(true);
1445
+ expect(deliveryChannels.claimRunDelivery("run-b")).toBe(true);
1446
+ expect(deliveryChannels.claimRunDelivery("run-a")).toBe(false);
1447
+ expect(deliveryChannels.claimRunDelivery("run-b")).toBe(false);
1448
+ deliveryChannels.resetRunDeliveryClaim("run-a");
1449
+ deliveryChannels.resetRunDeliveryClaim("run-b");
1483
1450
  });
1484
1451
 
1485
1452
  test("resetRunDeliveryClaim allows re-claim", () => {
1486
1453
  const runId = "run-idem-reset";
1487
- expect(channelDeliveryStore.claimRunDelivery(runId)).toBe(true);
1488
- channelDeliveryStore.resetRunDeliveryClaim(runId);
1489
- expect(channelDeliveryStore.claimRunDelivery(runId)).toBe(true);
1490
- channelDeliveryStore.resetRunDeliveryClaim(runId);
1454
+ expect(deliveryChannels.claimRunDelivery(runId)).toBe(true);
1455
+ deliveryChannels.resetRunDeliveryClaim(runId);
1456
+ expect(deliveryChannels.claimRunDelivery(runId)).toBe(true);
1457
+ deliveryChannels.resetRunDeliveryClaim(runId);
1491
1458
  });
1492
1459
  });
1493
1460
 
@@ -1497,9 +1464,9 @@ describe("deliver-once idempotency guard", () => {
1497
1464
 
1498
1465
  describe("assistant-scoped guardian verification via handleChannelInbound", () => {
1499
1466
  test("verification code uses the threaded assistantId (default: self)", async () => {
1500
- const { createVerificationChallenge } =
1501
- await import("../runtime/channel-guardian-service.js");
1502
- const { secret } = createVerificationChallenge("telegram");
1467
+ const { createInboundVerificationSession } =
1468
+ await import("../runtime/channel-verification-service.js");
1469
+ const { secret } = createInboundVerificationSession("telegram");
1503
1470
 
1504
1471
  const deliverSpy = spyOn(
1505
1472
  gatewayClient,
@@ -1515,19 +1482,19 @@ describe("assistant-scoped guardian verification via handleChannelInbound", () =
1515
1482
  const body = (await res.json()) as Record<string, unknown>;
1516
1483
 
1517
1484
  expect(body.accepted).toBe(true);
1518
- expect(body.guardianVerification).toBe("verified");
1485
+ expect(body.verificationOutcome).toBe("verified");
1519
1486
 
1520
1487
  deliverSpy.mockRestore();
1521
1488
  });
1522
1489
 
1523
1490
  test("verification code with explicit assistantId resolves against canonical scope", async () => {
1524
- const { createVerificationChallenge } =
1525
- await import("../runtime/channel-guardian-service.js");
1491
+ const { createInboundVerificationSession } =
1492
+ await import("../runtime/channel-verification-service.js");
1526
1493
  const { getGuardianBinding } =
1527
- await import("../runtime/channel-guardian-service.js");
1494
+ await import("../runtime/channel-verification-service.js");
1528
1495
 
1529
1496
  // All assistant IDs canonicalize to 'self' in the single-tenant daemon
1530
- const { secret } = createVerificationChallenge("telegram");
1497
+ const { secret } = createInboundVerificationSession("telegram");
1531
1498
 
1532
1499
  const deliverSpy = spyOn(
1533
1500
  gatewayClient,
@@ -1547,7 +1514,7 @@ describe("assistant-scoped guardian verification via handleChannelInbound", () =
1547
1514
  const body = (await res.json()) as Record<string, unknown>;
1548
1515
 
1549
1516
  expect(body.accepted).toBe(true);
1550
- expect(body.guardianVerification).toBe("verified");
1517
+ expect(body.verificationOutcome).toBe("verified");
1551
1518
 
1552
1519
  const bindingX = getGuardianBinding("self", "telegram");
1553
1520
  expect(bindingX).not.toBeNull();
@@ -1557,11 +1524,11 @@ describe("assistant-scoped guardian verification via handleChannelInbound", () =
1557
1524
  });
1558
1525
 
1559
1526
  test("all assistant IDs share canonical scope for verification", async () => {
1560
- const { createVerificationChallenge } =
1561
- await import("../runtime/channel-guardian-service.js");
1527
+ const { createInboundVerificationSession } =
1528
+ await import("../runtime/channel-verification-service.js");
1562
1529
 
1563
1530
  // Both IDs canonicalize to 'self', so the challenge is found
1564
- const { secret } = createVerificationChallenge("telegram");
1531
+ const { secret } = createInboundVerificationSession("telegram");
1565
1532
 
1566
1533
  const deliverSpy = spyOn(
1567
1534
  gatewayClient,
@@ -1581,7 +1548,7 @@ describe("assistant-scoped guardian verification via handleChannelInbound", () =
1581
1548
  const body = (await res.json()) as Record<string, unknown>;
1582
1549
 
1583
1550
  expect(body.accepted).toBe(true);
1584
- expect(body.guardianVerification).toBe("verified");
1551
+ expect(body.verificationOutcome).toBe("verified");
1585
1552
 
1586
1553
  deliverSpy.mockRestore();
1587
1554
  });
@@ -2784,23 +2751,23 @@ describe("non-decision status reply for different channels", () => {
2784
2751
  guardianPrincipalId: "telegram-user-default",
2785
2752
  });
2786
2753
  createGuardianBinding({
2787
- channel: "sms",
2754
+ channel: "slack",
2788
2755
  guardianExternalUserId: "telegram-user-default",
2789
2756
  guardianDeliveryChatId: "chat-123",
2790
2757
  guardianPrincipalId: "telegram-user-default",
2791
2758
  });
2792
2759
  });
2793
2760
 
2794
- test("non-decision message on non-rich channel (sms) sends status reply", async () => {
2761
+ test("non-decision message on slack sends status reply", async () => {
2795
2762
  const deliverSpy = spyOn(
2796
2763
  gatewayClient,
2797
2764
  "deliverChannelReply",
2798
2765
  ).mockResolvedValue({ ok: true });
2799
2766
 
2800
- // Establish the conversation using sms (non-rich channel)
2767
+ // Establish the conversation using slack
2801
2768
  const initReq = makeInboundRequest({
2802
2769
  content: "init",
2803
- sourceChannel: "sms",
2770
+ sourceChannel: "slack",
2804
2771
  });
2805
2772
  await handleChannelInbound(initReq, noopProcessMessage);
2806
2773
 
@@ -2811,12 +2778,12 @@ describe("non-decision status reply for different channels", () => {
2811
2778
  const conversationId = events[0]?.conversation_id;
2812
2779
  ensureConversation(conversationId!);
2813
2780
 
2814
- registerPendingInteraction("req-status-sms", conversationId!, "shell");
2781
+ registerPendingInteraction("req-status-slack", conversationId!, "shell");
2815
2782
 
2816
2783
  // Send a non-decision message
2817
2784
  const req = makeInboundRequest({
2818
2785
  content: "what is happening?",
2819
- sourceChannel: "sms",
2786
+ sourceChannel: "slack",
2820
2787
  });
2821
2788
  const res = await handleChannelInbound(req, noopProcessMessage);
2822
2789
  const body = (await res.json()) as Record<string, unknown>;