@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
@@ -14,7 +14,7 @@ import type {
14
14
  ToolPermissionDeniedEvent,
15
15
  } from "../tools/types.js";
16
16
 
17
- // ── Module mocks (must precede real imports) ─────────────────────────
17
+ // -- Module mocks (must precede real imports) --
18
18
 
19
19
  const mockConfig = {
20
20
  provider: "anthropic",
@@ -103,15 +103,15 @@ mock.module("../tools/terminal/sandbox.js", () => ({
103
103
  wrapCommand: () => ({ command: "", sandboxed: false }),
104
104
  }));
105
105
 
106
- // ── Real imports ─────────────────────────────────────────────────────
106
+ // -- Real imports --
107
107
 
108
108
  import { PermissionPrompter } from "../permissions/prompter.js";
109
109
  import { ToolExecutor } from "../tools/executor.js";
110
- import {
111
- enforceGuardianOnlyPolicy,
112
- isGuardianControlPlaneInvocation,
113
- } from "../tools/guardian-control-plane-policy.js";
114
110
  import type { ToolContext } from "../tools/types.js";
111
+ import {
112
+ enforceVerificationControlPlanePolicy,
113
+ isVerificationControlPlaneInvocation,
114
+ } from "../tools/verification-control-plane-policy.js";
115
115
 
116
116
  function makeContext(overrides?: Partial<ToolContext>): ToolContext {
117
117
  return {
@@ -144,23 +144,22 @@ afterAll(() => {
144
144
  });
145
145
 
146
146
  // =====================================================================
147
- // Unit tests: isGuardianControlPlaneInvocation
147
+ // Unit tests: isVerificationControlPlaneInvocation
148
148
  // =====================================================================
149
149
 
150
- describe("isGuardianControlPlaneInvocation", () => {
151
- const guardianPaths = [
152
- "/v1/integrations/guardian/challenge",
153
- "/v1/integrations/guardian/status",
154
- "/v1/integrations/guardian/outbound/start",
155
- "/v1/integrations/guardian/outbound/resend",
156
- "/v1/integrations/guardian/outbound/cancel",
150
+ describe("isVerificationControlPlaneInvocation", () => {
151
+ const verificationPaths = [
152
+ "/v1/channel-verification-sessions",
153
+ "/v1/channel-verification-sessions/status",
154
+ "/v1/channel-verification-sessions/resend",
155
+ "/v1/channel-verification-sessions/revoke",
157
156
  ];
158
157
 
159
- describe("bash tool with guardian endpoint in command", () => {
160
- for (const path of guardianPaths) {
158
+ describe("bash tool with verification endpoint in command", () => {
159
+ for (const path of verificationPaths) {
161
160
  test(`detects curl to ${path}`, () => {
162
161
  expect(
163
- isGuardianControlPlaneInvocation("bash", {
162
+ isVerificationControlPlaneInvocation("bash", {
164
163
  command: `curl -X POST http://localhost:3000${path}`,
165
164
  }),
166
165
  ).toBe(true);
@@ -168,7 +167,7 @@ describe("isGuardianControlPlaneInvocation", () => {
168
167
 
169
168
  test(`detects wget to ${path}`, () => {
170
169
  expect(
171
- isGuardianControlPlaneInvocation("bash", {
170
+ isVerificationControlPlaneInvocation("bash", {
172
171
  command: `wget https://api.example.com${path}`,
173
172
  }),
174
173
  ).toBe(true);
@@ -177,57 +176,57 @@ describe("isGuardianControlPlaneInvocation", () => {
177
176
 
178
177
  test("does not match unrelated commands", () => {
179
178
  expect(
180
- isGuardianControlPlaneInvocation("bash", {
179
+ isVerificationControlPlaneInvocation("bash", {
181
180
  command: "git status",
182
181
  }),
183
182
  ).toBe(false);
184
183
  });
185
184
 
186
185
  test("matches partial path prefix via fragment detection (fail-closed for shell tools)", () => {
187
- // Even without a trailing sub-path, the presence of both /v1/integrations and guardian
188
- // in a bash command triggers the conservative fragment detector.
189
186
  expect(
190
- isGuardianControlPlaneInvocation("bash", {
191
- command: "curl http://localhost:3000/v1/integrations/guardian",
187
+ isVerificationControlPlaneInvocation("bash", {
188
+ command:
189
+ "curl http://localhost:3000/v1/channel-verification-sessions",
192
190
  }),
193
191
  ).toBe(true);
194
192
  });
195
193
 
196
- test("matches unknown sub-path under guardian control-plane (broad pattern)", () => {
194
+ test("matches unknown sub-path under verification control-plane (broad pattern)", () => {
197
195
  expect(
198
- isGuardianControlPlaneInvocation("bash", {
199
- command: "curl http://localhost:3000/v1/integrations/guardian/other",
196
+ isVerificationControlPlaneInvocation("bash", {
197
+ command:
198
+ "curl http://localhost:3000/v1/channel-verification-sessions/other",
200
199
  }),
201
200
  ).toBe(true);
202
201
  });
203
202
 
204
203
  test("handles missing command field gracefully", () => {
205
- expect(isGuardianControlPlaneInvocation("bash", {})).toBe(false);
204
+ expect(isVerificationControlPlaneInvocation("bash", {})).toBe(false);
206
205
  });
207
206
 
208
207
  test("handles non-string command field gracefully", () => {
209
- expect(isGuardianControlPlaneInvocation("bash", { command: 42 })).toBe(
210
- false,
211
- );
208
+ expect(
209
+ isVerificationControlPlaneInvocation("bash", { command: 42 }),
210
+ ).toBe(false);
212
211
  });
213
212
  });
214
213
 
215
- describe("host_bash tool with guardian endpoint in command", () => {
216
- test("detects guardian endpoint", () => {
214
+ describe("host_bash tool with verification endpoint in command", () => {
215
+ test("detects verification endpoint", () => {
217
216
  expect(
218
- isGuardianControlPlaneInvocation("host_bash", {
217
+ isVerificationControlPlaneInvocation("host_bash", {
219
218
  command:
220
- 'curl -H "Authorization: Bearer token" https://internal:8080/v1/integrations/guardian/outbound/start',
219
+ 'curl -H "Authorization: Bearer token" https://internal:8080/v1/channel-verification-sessions',
221
220
  }),
222
221
  ).toBe(true);
223
222
  });
224
223
  });
225
224
 
226
- describe("network_request tool with guardian endpoint in url", () => {
227
- for (const path of guardianPaths) {
225
+ describe("network_request tool with verification endpoint in url", () => {
226
+ for (const path of verificationPaths) {
228
227
  test(`detects ${path}`, () => {
229
228
  expect(
230
- isGuardianControlPlaneInvocation("network_request", {
229
+ isVerificationControlPlaneInvocation("network_request", {
231
230
  url: `https://api.vellum.ai${path}`,
232
231
  }),
233
232
  ).toBe(true);
@@ -236,77 +235,77 @@ describe("isGuardianControlPlaneInvocation", () => {
236
235
 
237
236
  test("detects proxied local URL", () => {
238
237
  expect(
239
- isGuardianControlPlaneInvocation("network_request", {
240
- url: "http://127.0.0.1:3000/v1/integrations/guardian/challenge",
238
+ isVerificationControlPlaneInvocation("network_request", {
239
+ url: "http://127.0.0.1:3000/v1/channel-verification-sessions",
241
240
  }),
242
241
  ).toBe(true);
243
242
  });
244
243
 
245
244
  test("does not match unrelated URLs", () => {
246
245
  expect(
247
- isGuardianControlPlaneInvocation("network_request", {
246
+ isVerificationControlPlaneInvocation("network_request", {
248
247
  url: "https://api.example.com/v1/messages",
249
248
  }),
250
249
  ).toBe(false);
251
250
  });
252
251
 
253
252
  test("handles missing url field gracefully", () => {
254
- expect(isGuardianControlPlaneInvocation("network_request", {})).toBe(
253
+ expect(isVerificationControlPlaneInvocation("network_request", {})).toBe(
255
254
  false,
256
255
  );
257
256
  });
258
257
  });
259
258
 
260
- describe("web_fetch tool with guardian endpoint in url", () => {
261
- test("detects guardian endpoint", () => {
259
+ describe("web_fetch tool with verification endpoint in url", () => {
260
+ test("detects verification endpoint", () => {
262
261
  expect(
263
- isGuardianControlPlaneInvocation("web_fetch", {
264
- url: "https://api.example.com/v1/integrations/guardian/outbound/cancel",
262
+ isVerificationControlPlaneInvocation("web_fetch", {
263
+ url: "https://api.example.com/v1/channel-verification-sessions",
265
264
  }),
266
265
  ).toBe(true);
267
266
  });
268
267
 
269
268
  test("does not match unrelated URL", () => {
270
269
  expect(
271
- isGuardianControlPlaneInvocation("web_fetch", {
270
+ isVerificationControlPlaneInvocation("web_fetch", {
272
271
  url: "https://docs.example.com/api/v1/help",
273
272
  }),
274
273
  ).toBe(false);
275
274
  });
276
275
  });
277
276
 
278
- describe("browser_navigate tool with guardian endpoint in url", () => {
279
- test("detects guardian endpoint", () => {
277
+ describe("browser_navigate tool with verification endpoint in url", () => {
278
+ test("detects verification endpoint", () => {
280
279
  expect(
281
- isGuardianControlPlaneInvocation("browser_navigate", {
282
- url: "http://localhost:3000/v1/integrations/guardian/status",
280
+ isVerificationControlPlaneInvocation("browser_navigate", {
281
+ url: "http://localhost:3000/v1/channel-verification-sessions/status",
283
282
  }),
284
283
  ).toBe(true);
285
284
  });
286
285
  });
287
286
 
288
287
  describe("unrelated tools are not flagged", () => {
289
- test("file_read is never a guardian invocation", () => {
288
+ test("file_read is never a verification invocation", () => {
290
289
  expect(
291
- isGuardianControlPlaneInvocation("file_read", {
292
- path: "/v1/integrations/guardian/challenge",
290
+ isVerificationControlPlaneInvocation("file_read", {
291
+ path: "/v1/channel-verification-sessions",
293
292
  }),
294
293
  ).toBe(false);
295
294
  });
296
295
 
297
- test("file_write is never a guardian invocation", () => {
296
+ test("file_write is never a verification invocation", () => {
298
297
  expect(
299
- isGuardianControlPlaneInvocation("file_write", {
298
+ isVerificationControlPlaneInvocation("file_write", {
300
299
  path: "/tmp/test.txt",
301
- content: "curl /v1/integrations/guardian/outbound/start",
300
+ content: "curl /v1/channel-verification-sessions",
302
301
  }),
303
302
  ).toBe(false);
304
303
  });
305
304
 
306
- test("web_search is never a guardian invocation", () => {
305
+ test("web_search is never a verification invocation", () => {
307
306
  expect(
308
- isGuardianControlPlaneInvocation("web_search", {
309
- query: "/v1/integrations/guardian/status",
307
+ isVerificationControlPlaneInvocation("web_search", {
308
+ query: "/v1/channel-verification-sessions/status",
310
309
  }),
311
310
  ).toBe(false);
312
311
  });
@@ -315,25 +314,25 @@ describe("isGuardianControlPlaneInvocation", () => {
315
314
  describe("path matching covers proxied and local variants", () => {
316
315
  test("matches endpoint with query string", () => {
317
316
  expect(
318
- isGuardianControlPlaneInvocation("network_request", {
319
- url: "https://api.example.com/v1/integrations/guardian/challenge?token=abc",
317
+ isVerificationControlPlaneInvocation("network_request", {
318
+ url: "https://api.example.com/v1/channel-verification-sessions?token=abc",
320
319
  }),
321
320
  ).toBe(true);
322
321
  });
323
322
 
324
323
  test("matches endpoint with trailing slash", () => {
325
324
  expect(
326
- isGuardianControlPlaneInvocation("network_request", {
327
- url: "https://api.example.com/v1/integrations/guardian/outbound/start/",
325
+ isVerificationControlPlaneInvocation("network_request", {
326
+ url: "https://api.example.com/v1/channel-verification-sessions/resend/",
328
327
  }),
329
328
  ).toBe(true);
330
329
  });
331
330
 
332
331
  test("matches endpoint in piped bash command", () => {
333
332
  expect(
334
- isGuardianControlPlaneInvocation("bash", {
333
+ isVerificationControlPlaneInvocation("bash", {
335
334
  command:
336
- 'echo \'{"phone":"+1234567890"}\' | curl -X POST -d @- http://localhost:3000/v1/integrations/guardian/outbound/resend',
335
+ 'echo \'{"phone":"+1234567890"}\' | curl -X POST -d @- http://localhost:3000/v1/channel-verification-sessions/resend',
337
336
  }),
338
337
  ).toBe(true);
339
338
  });
@@ -342,146 +341,121 @@ describe("isGuardianControlPlaneInvocation", () => {
342
341
  describe("obfuscation resistance", () => {
343
342
  test("detects URL-encoded path (%2F encoding)", () => {
344
343
  expect(
345
- isGuardianControlPlaneInvocation("bash", {
344
+ isVerificationControlPlaneInvocation("bash", {
346
345
  command:
347
- "curl http://localhost:3000/v1/integrations%2Fguardian%2Foutbound%2Fstart",
348
- }),
349
- ).toBe(true);
350
- });
351
-
352
- test("detects double-encoded path (%252F encoding)", () => {
353
- expect(
354
- isGuardianControlPlaneInvocation("network_request", {
355
- url: "http://localhost:3000/v1/integrations%252Fguardian%252Fchallenge",
346
+ "curl http://localhost:3000/v1/channel%2Dverification%2Dsessions",
356
347
  }),
357
348
  ).toBe(true);
358
349
  });
359
350
 
360
351
  test("detects double slashes in path", () => {
361
352
  expect(
362
- isGuardianControlPlaneInvocation("bash", {
353
+ isVerificationControlPlaneInvocation("bash", {
363
354
  command:
364
- "curl http://localhost:3000/v1/integrations//guardian/outbound/start",
355
+ "curl http://localhost:3000/v1//channel-verification-sessions",
365
356
  }),
366
357
  ).toBe(true);
367
358
  });
368
359
 
369
360
  test("detects triple slashes in path", () => {
370
361
  expect(
371
- isGuardianControlPlaneInvocation("network_request", {
372
- url: "http://localhost:3000/v1///integrations///guardian///status",
362
+ isVerificationControlPlaneInvocation("network_request", {
363
+ url: "http://localhost:3000/v1///channel-verification-sessions///status",
373
364
  }),
374
365
  ).toBe(true);
375
366
  });
376
367
 
377
368
  test("detects mixed case path", () => {
378
369
  expect(
379
- isGuardianControlPlaneInvocation("bash", {
370
+ isVerificationControlPlaneInvocation("bash", {
380
371
  command:
381
- "curl http://localhost:3000/V1/Integrations/Guardian/Outbound/Start",
372
+ "curl http://localhost:3000/V1/Channel-Verification-Sessions/Status",
382
373
  }),
383
374
  ).toBe(true);
384
375
  });
385
376
 
386
377
  test("detects ALL CAPS path", () => {
387
378
  expect(
388
- isGuardianControlPlaneInvocation("network_request", {
389
- url: "http://localhost:3000/V1/INTEGRATIONS/GUARDIAN/CHALLENGE",
379
+ isVerificationControlPlaneInvocation("network_request", {
380
+ url: "http://localhost:3000/V1/CHANNEL-VERIFICATION-SESSIONS",
390
381
  }),
391
382
  ).toBe(true);
392
383
  });
393
384
 
394
- test("detects combined obfuscation: URL-encoding + mixed case", () => {
385
+ test("detects combined obfuscation: double slashes + mixed case", () => {
395
386
  expect(
396
- isGuardianControlPlaneInvocation("bash", {
397
- command:
398
- "curl http://localhost:3000/V1/Integrations%2FGuardian%2FOutbound%2FCancel",
399
- }),
400
- ).toBe(true);
401
- });
402
-
403
- test("detects combined obfuscation: double slashes + URL-encoding", () => {
404
- expect(
405
- isGuardianControlPlaneInvocation("network_request", {
406
- url: "http://localhost:3000/v1//integrations%2Fguardian%2Fstatus",
407
- }),
408
- ).toBe(true);
409
- });
410
-
411
- test("detects URL-encoded path in web_fetch tool", () => {
412
- expect(
413
- isGuardianControlPlaneInvocation("web_fetch", {
414
- url: "http://localhost:3000/v1/integrations%2Fguardian%2Foutbound%2Fresend",
387
+ isVerificationControlPlaneInvocation("network_request", {
388
+ url: "http://localhost:3000/v1//Channel-Verification-Sessions/status",
415
389
  }),
416
390
  ).toBe(true);
417
391
  });
418
392
 
419
393
  test("does not false-positive on unrelated encoded paths", () => {
420
394
  expect(
421
- isGuardianControlPlaneInvocation("bash", {
395
+ isVerificationControlPlaneInvocation("bash", {
422
396
  command:
423
397
  "curl http://localhost:3000/v1/integrations%2Fother%2Fservice",
424
398
  }),
425
399
  ).toBe(false);
426
400
  });
427
401
 
428
- test("detects guardian endpoint despite malformed percent-encoding elsewhere in command", () => {
429
- const result = isGuardianControlPlaneInvocation("bash", {
402
+ test("detects endpoint despite malformed percent-encoding elsewhere in command", () => {
403
+ const result = isVerificationControlPlaneInvocation("bash", {
430
404
  command:
431
- 'curl -H "X: %ZZ" http://localhost:3000/v1/integrations%2Fguardian%2Foutbound%2Fstart -d \'{"channel":"sms"}\'',
405
+ 'curl -H "X: %ZZ" http://localhost:3000/v1/channel-verification-sessions -d \'{"channel":"sms"}\'',
432
406
  });
433
407
  expect(result).toBe(true);
434
408
  });
435
409
  });
436
410
 
437
411
  describe("shell expansion resistance", () => {
438
- test("detects guardian endpoint constructed via shell variable concatenation", () => {
412
+ test("detects endpoint constructed via shell variable concatenation", () => {
439
413
  expect(
440
- isGuardianControlPlaneInvocation("bash", {
414
+ isVerificationControlPlaneInvocation("bash", {
441
415
  command:
442
- 'base=http://localhost:7821/v1/integrations; seg=guardian; curl "$base/$seg/status"',
416
+ 'base=http://localhost:7821/v1; seg=channel-verification-sessions; curl "$base/$seg/status"',
443
417
  }),
444
418
  ).toBe(true);
445
419
  });
446
420
 
447
- test("detects guardian endpoint with split variable assignment", () => {
421
+ test("detects endpoint with split variable assignment", () => {
448
422
  expect(
449
- isGuardianControlPlaneInvocation("bash", {
423
+ isVerificationControlPlaneInvocation("bash", {
450
424
  command:
451
- 'API=/v1/integrations; curl "http://localhost:3000${API}/guardian/outbound/start"',
425
+ 'API=channel-verification-sessions; curl "http://localhost:3000/v1/${API}"',
452
426
  }),
453
427
  ).toBe(true);
454
428
  });
455
429
 
456
- test("detects guardian endpoint with path built across multiple variables", () => {
430
+ test("detects endpoint with path built across multiple variables", () => {
457
431
  expect(
458
- isGuardianControlPlaneInvocation("bash", {
432
+ isVerificationControlPlaneInvocation("bash", {
459
433
  command:
460
- 'HOST=http://localhost:7821; PATH_PREFIX=/v1/integrations; SVC=guardian; curl "$HOST$PATH_PREFIX/$SVC/challenge"',
434
+ 'HOST=http://localhost:7821; ENDPOINT=channel-verification-sessions; curl "$HOST/v1/$ENDPOINT"',
461
435
  }),
462
436
  ).toBe(true);
463
437
  });
464
438
 
465
- test("detects guardian endpoint via heredoc-style construction", () => {
439
+ test("detects endpoint via heredoc-style construction", () => {
466
440
  expect(
467
- isGuardianControlPlaneInvocation("bash", {
441
+ isVerificationControlPlaneInvocation("bash", {
468
442
  command:
469
- 'url="http://localhost:3000/v1/integrations"; curl "${url}/guardian/outbound/resend"',
443
+ 'url="http://localhost:3000/v1/channel-verification-sessions"; curl "${url}/resend"',
470
444
  }),
471
445
  ).toBe(true);
472
446
  });
473
447
 
474
- test("does not false-positive when only /v1/integrations is present without guardian", () => {
448
+ test("does not false-positive on unrelated paths", () => {
475
449
  expect(
476
- isGuardianControlPlaneInvocation("bash", {
450
+ isVerificationControlPlaneInvocation("bash", {
477
451
  command: "curl http://localhost:3000/v1/integrations/other/service",
478
452
  }),
479
453
  ).toBe(false);
480
454
  });
481
455
 
482
- test("does not false-positive when only guardian is present without /v1/integrations", () => {
456
+ test("does not false-positive when only guardian is present without verification path", () => {
483
457
  expect(
484
- isGuardianControlPlaneInvocation("bash", {
458
+ isVerificationControlPlaneInvocation("bash", {
485
459
  command: 'echo "guardian notification sent"',
486
460
  }),
487
461
  ).toBe(false);
@@ -491,7 +465,7 @@ describe("isGuardianControlPlaneInvocation", () => {
491
465
  // URL tools pass structured URLs, not shell commands. The fragment detector
492
466
  // is bash/host_bash only. For URL tools, we rely on exact/normalized matching.
493
467
  expect(
494
- isGuardianControlPlaneInvocation("network_request", {
468
+ isVerificationControlPlaneInvocation("network_request", {
495
469
  url: "https://api.example.com/v1/messages",
496
470
  }),
497
471
  ).toBe(false);
@@ -500,16 +474,15 @@ describe("isGuardianControlPlaneInvocation", () => {
500
474
  });
501
475
 
502
476
  // =====================================================================
503
- // Unit tests: enforceGuardianOnlyPolicy
477
+ // Unit tests: enforceVerificationControlPlanePolicy
504
478
  // =====================================================================
505
479
 
506
- describe("enforceGuardianOnlyPolicy", () => {
507
- test("non-guardian actor denied for guardian endpoint", () => {
508
- const result = enforceGuardianOnlyPolicy(
480
+ describe("enforceVerificationControlPlanePolicy", () => {
481
+ test("non-guardian actor denied for verification endpoint", () => {
482
+ const result = enforceVerificationControlPlanePolicy(
509
483
  "bash",
510
484
  {
511
- command:
512
- "curl http://localhost:3000/v1/integrations/guardian/outbound/start",
485
+ command: "curl http://localhost:3000/v1/channel-verification-sessions",
513
486
  },
514
487
  "trusted_contact",
515
488
  );
@@ -517,11 +490,11 @@ describe("enforceGuardianOnlyPolicy", () => {
517
490
  expect(result.reason).toContain("restricted to guardian users");
518
491
  });
519
492
 
520
- test("unverified_channel actor denied for guardian endpoint", () => {
521
- const result = enforceGuardianOnlyPolicy(
493
+ test("unverified_channel actor denied for verification endpoint", () => {
494
+ const result = enforceVerificationControlPlanePolicy(
522
495
  "network_request",
523
496
  {
524
- url: "https://api.example.com/v1/integrations/guardian/challenge",
497
+ url: "https://api.example.com/v1/channel-verification-sessions",
525
498
  },
526
499
  "unknown",
527
500
  );
@@ -529,12 +502,11 @@ describe("enforceGuardianOnlyPolicy", () => {
529
502
  expect(result.reason).toContain("restricted to guardian users");
530
503
  });
531
504
 
532
- test("guardian actor is NOT denied for guardian endpoint", () => {
533
- const result = enforceGuardianOnlyPolicy(
505
+ test("guardian actor is NOT denied for verification endpoint", () => {
506
+ const result = enforceVerificationControlPlanePolicy(
534
507
  "bash",
535
508
  {
536
- command:
537
- "curl http://localhost:3000/v1/integrations/guardian/outbound/start",
509
+ command: "curl http://localhost:3000/v1/channel-verification-sessions",
538
510
  },
539
511
  "guardian",
540
512
  );
@@ -542,24 +514,22 @@ describe("enforceGuardianOnlyPolicy", () => {
542
514
  expect(result.reason).toBeUndefined();
543
515
  });
544
516
 
545
- test("guardian actor role is NOT denied for guardian endpoint (explicit)", () => {
546
- const result = enforceGuardianOnlyPolicy(
517
+ test("guardian actor role is NOT denied for verification endpoint (explicit)", () => {
518
+ const result = enforceVerificationControlPlanePolicy(
547
519
  "bash",
548
520
  {
549
- command:
550
- "curl http://localhost:3000/v1/integrations/guardian/outbound/start",
521
+ command: "curl http://localhost:3000/v1/channel-verification-sessions",
551
522
  },
552
523
  "guardian",
553
524
  );
554
525
  expect(result.denied).toBe(false);
555
526
  });
556
527
 
557
- test("unknown actor role is denied for guardian endpoint (allowlist, not denylist)", () => {
558
- const result = enforceGuardianOnlyPolicy(
528
+ test("unknown actor role is denied for verification endpoint (allowlist, not denylist)", () => {
529
+ const result = enforceVerificationControlPlanePolicy(
559
530
  "bash",
560
531
  {
561
- command:
562
- "curl http://localhost:3000/v1/integrations/guardian/outbound/start",
532
+ command: "curl http://localhost:3000/v1/channel-verification-sessions",
563
533
  },
564
534
  "some_future_role",
565
535
  );
@@ -568,7 +538,7 @@ describe("enforceGuardianOnlyPolicy", () => {
568
538
  });
569
539
 
570
540
  test("non-guardian actor is NOT denied for unrelated endpoint", () => {
571
- const result = enforceGuardianOnlyPolicy(
541
+ const result = enforceVerificationControlPlanePolicy(
572
542
  "bash",
573
543
  {
574
544
  command: "curl http://localhost:3000/v1/messages",
@@ -579,7 +549,7 @@ describe("enforceGuardianOnlyPolicy", () => {
579
549
  });
580
550
 
581
551
  test("non-guardian actor is NOT denied for unrelated tool", () => {
582
- const result = enforceGuardianOnlyPolicy(
552
+ const result = enforceVerificationControlPlanePolicy(
583
553
  "file_read",
584
554
  {
585
555
  path: "README.md",
@@ -591,21 +561,21 @@ describe("enforceGuardianOnlyPolicy", () => {
591
561
  });
592
562
 
593
563
  // =====================================================================
594
- // Integration tests: ToolExecutor guardian-only policy gate
564
+ // Integration tests: ToolExecutor verification control-plane policy gate
595
565
  // =====================================================================
596
566
 
597
- describe("ToolExecutor guardian-only policy gate", () => {
567
+ describe("ToolExecutor verification control-plane policy gate", () => {
598
568
  beforeEach(() => {
599
569
  fakeToolResult = { content: "ok", isError: false };
600
570
  });
601
571
 
602
- test("non-guardian actor blocked from bash curl to guardian outbound/start", async () => {
572
+ test("non-guardian actor blocked from bash curl to verification sessions", async () => {
603
573
  const executor = new ToolExecutor(makePrompter());
604
574
  const result = await executor.execute(
605
575
  "bash",
606
576
  {
607
577
  command:
608
- "curl -X POST http://localhost:3000/v1/integrations/guardian/outbound/start",
578
+ "curl -X POST http://localhost:3000/v1/channel-verification-sessions",
609
579
  },
610
580
  makeContext({ trustClass: "trusted_contact" }),
611
581
  );
@@ -613,11 +583,11 @@ describe("ToolExecutor guardian-only policy gate", () => {
613
583
  expect(result.content).toContain("restricted to guardian users");
614
584
  });
615
585
 
616
- test("unverified_channel actor blocked from network_request to guardian endpoint", async () => {
586
+ test("unverified_channel actor blocked from network_request to verification endpoint", async () => {
617
587
  const executor = new ToolExecutor(makePrompter());
618
588
  const result = await executor.execute(
619
589
  "network_request",
620
- { url: "https://api.example.com/v1/integrations/guardian/challenge" },
590
+ { url: "https://api.example.com/v1/channel-verification-sessions" },
621
591
  makeContext({ trustClass: "unknown" }),
622
592
  );
623
593
  expect(result.isError).toBe(true);
@@ -630,7 +600,7 @@ describe("ToolExecutor guardian-only policy gate", () => {
630
600
  "bash",
631
601
  {
632
602
  command:
633
- "curl -X POST http://localhost:3000/v1/integrations/guardian/outbound/start",
603
+ "curl -X POST http://localhost:3000/v1/channel-verification-sessions",
634
604
  },
635
605
  makeContext({ trustClass: "guardian" }),
636
606
  );
@@ -638,11 +608,14 @@ describe("ToolExecutor guardian-only policy gate", () => {
638
608
  expect(result.content).toBe("ok");
639
609
  });
640
610
 
641
- test("guardian trust class is NOT blocked from guardian endpoint (default)", async () => {
611
+ test("guardian trust class is NOT blocked from verification endpoint (default)", async () => {
642
612
  const executor = new ToolExecutor(makePrompter());
643
613
  const result = await executor.execute(
644
614
  "bash",
645
- { command: "curl http://localhost:3000/v1/integrations/guardian/status" },
615
+ {
616
+ command:
617
+ "curl http://localhost:3000/v1/channel-verification-sessions/status",
618
+ },
646
619
  makeContext(), // defaults to trustClass: 'guardian'
647
620
  );
648
621
  expect(result.isError).toBe(false);
@@ -671,14 +644,14 @@ describe("ToolExecutor guardian-only policy gate", () => {
671
644
  expect(result.content).toBe("ok");
672
645
  });
673
646
 
674
- test("permission_denied lifecycle event is emitted on guardian policy block", async () => {
647
+ test("permission_denied lifecycle event is emitted on verification policy block", async () => {
675
648
  let capturedEvent: ToolPermissionDeniedEvent | undefined;
676
649
  const executor = new ToolExecutor(makePrompter());
677
650
  await executor.execute(
678
651
  "bash",
679
652
  {
680
653
  command:
681
- "curl http://localhost:3000/v1/integrations/guardian/outbound/cancel",
654
+ "curl -X DELETE http://localhost:3000/v1/channel-verification-sessions",
682
655
  },
683
656
  makeContext({
684
657
  trustClass: "trusted_contact",
@@ -694,35 +667,35 @@ describe("ToolExecutor guardian-only policy gate", () => {
694
667
  expect(capturedEvent!.reason).toContain("restricted to guardian users");
695
668
  });
696
669
 
697
- test("non-guardian blocked from web_fetch to guardian endpoint", async () => {
670
+ test("non-guardian blocked from web_fetch to verification endpoint", async () => {
698
671
  const executor = new ToolExecutor(makePrompter());
699
672
  const result = await executor.execute(
700
673
  "web_fetch",
701
- { url: "http://localhost:3000/v1/integrations/guardian/outbound/resend" },
674
+ { url: "http://localhost:3000/v1/channel-verification-sessions/resend" },
702
675
  makeContext({ trustClass: "trusted_contact" }),
703
676
  );
704
677
  expect(result.isError).toBe(true);
705
678
  expect(result.content).toContain("restricted to guardian users");
706
679
  });
707
680
 
708
- test("non-guardian blocked from browser_navigate to guardian endpoint", async () => {
681
+ test("non-guardian blocked from browser_navigate to verification endpoint", async () => {
709
682
  const executor = new ToolExecutor(makePrompter());
710
683
  const result = await executor.execute(
711
684
  "browser_navigate",
712
- { url: "http://localhost:3000/v1/integrations/guardian/status" },
685
+ { url: "http://localhost:3000/v1/channel-verification-sessions/status" },
713
686
  makeContext({ trustClass: "trusted_contact" }),
714
687
  );
715
688
  expect(result.isError).toBe(true);
716
689
  expect(result.content).toContain("restricted to guardian users");
717
690
  });
718
691
 
719
- test("non-guardian blocked from host_bash with guardian endpoint", async () => {
692
+ test("non-guardian blocked from host_bash with verification endpoint", async () => {
720
693
  const executor = new ToolExecutor(makePrompter());
721
694
  const result = await executor.execute(
722
695
  "host_bash",
723
696
  {
724
697
  command:
725
- "curl -X POST https://internal:8080/v1/integrations/guardian/challenge",
698
+ "curl -X POST https://internal:8080/v1/channel-verification-sessions",
726
699
  },
727
700
  makeContext({ trustClass: "trusted_contact" }),
728
701
  );
@@ -730,13 +703,12 @@ describe("ToolExecutor guardian-only policy gate", () => {
730
703
  expect(result.content).toContain("restricted to guardian users");
731
704
  });
732
705
 
733
- test("all five guardian endpoints are blocked for non-guardian via network_request", async () => {
706
+ test("all verification endpoints are blocked for non-guardian via network_request", async () => {
734
707
  const endpoints = [
735
- "/v1/integrations/guardian/challenge",
736
- "/v1/integrations/guardian/status",
737
- "/v1/integrations/guardian/outbound/start",
738
- "/v1/integrations/guardian/outbound/resend",
739
- "/v1/integrations/guardian/outbound/cancel",
708
+ "/v1/channel-verification-sessions",
709
+ "/v1/channel-verification-sessions/status",
710
+ "/v1/channel-verification-sessions/resend",
711
+ "/v1/channel-verification-sessions/revoke",
740
712
  ];
741
713
 
742
714
  for (const path of endpoints) {