@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
@@ -1,4 +1,4 @@
1
- import { beforeEach, describe, expect, mock, test } from "bun:test";
1
+ import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
2
2
 
3
3
  import { Command } from "commander";
4
4
 
@@ -93,7 +93,6 @@ mock.module("../tools/credentials/metadata-store.js", () => ({
93
93
  usageDescription?: string;
94
94
  expiresAt?: number | null;
95
95
  grantedScopes?: string[];
96
- accountInfo?: string | null;
97
96
  alias?: string | null;
98
97
  injectionTemplates?: unknown[] | null;
99
98
  },
@@ -168,7 +167,8 @@ mock.module("../tools/credentials/metadata-store.js", () => ({
168
167
  // Import the module under test (after mocks are registered)
169
168
  // ---------------------------------------------------------------------------
170
169
 
171
- const { registerCredentialsCommand } = await import("../cli/credentials.js");
170
+ const { registerCredentialsCommand } =
171
+ await import("../cli/commands/credentials.js");
172
172
 
173
173
  // ---------------------------------------------------------------------------
174
174
  // Test helper
@@ -317,7 +317,6 @@ describe("assistant credentials CLI", () => {
317
317
  expect(cred).toHaveProperty("usageDescription");
318
318
  expect(cred).toHaveProperty("allowedTools");
319
319
  expect(cred).toHaveProperty("allowedDomains");
320
- expect(cred).toHaveProperty("accountInfo");
321
320
  expect(cred).toHaveProperty("grantedScopes");
322
321
  expect(cred).toHaveProperty("expiresAt");
323
322
  expect(cred).toHaveProperty("createdAt");
@@ -634,7 +633,6 @@ describe("assistant credentials CLI", () => {
634
633
  expect(parsed).toHaveProperty("usageDescription");
635
634
  expect(parsed).toHaveProperty("allowedTools");
636
635
  expect(parsed).toHaveProperty("allowedDomains");
637
- expect(parsed).toHaveProperty("accountInfo");
638
636
  expect(parsed).toHaveProperty("grantedScopes");
639
637
  expect(parsed).toHaveProperty("expiresAt");
640
638
  expect(parsed).toHaveProperty("injectionTemplateCount");
@@ -796,6 +794,52 @@ describe("assistant credentials CLI", () => {
796
794
  });
797
795
  });
798
796
 
797
+ // =========================================================================
798
+ // instance-scoped BASE_DATA_DIR
799
+ // =========================================================================
800
+
801
+ describe("instance-scoped BASE_DATA_DIR", () => {
802
+ let savedBaseDataDir: string | undefined;
803
+
804
+ beforeEach(() => {
805
+ savedBaseDataDir = process.env.BASE_DATA_DIR;
806
+ });
807
+
808
+ afterEach(() => {
809
+ if (savedBaseDataDir === undefined) {
810
+ delete process.env.BASE_DATA_DIR;
811
+ } else {
812
+ process.env.BASE_DATA_DIR = savedBaseDataDir;
813
+ }
814
+ });
815
+
816
+ test("credential reveal reads from instance-scoped store when BASE_DATA_DIR is set", async () => {
817
+ // Point BASE_DATA_DIR to a temp directory (simulating instance-scoped dir)
818
+ const tmpDir = (await import("node:os")).tmpdir();
819
+ const instanceDir = (await import("node:path")).join(
820
+ tmpDir,
821
+ `vellum-test-instance-${Date.now()}`,
822
+ );
823
+ process.env.BASE_DATA_DIR = instanceDir;
824
+
825
+ // Seed a credential in the mock store
826
+ seedCredential("twilio", "auth_token", "instance_secret_abc123");
827
+
828
+ // Run `credentials reveal twilio:auth_token`
829
+ const result = await runCli(["reveal", "twilio:auth_token", "--json"]);
830
+ expect(result.exitCode).toBe(0);
831
+ const parsed = JSON.parse(result.stdout);
832
+ expect(parsed.ok).toBe(true);
833
+ expect(parsed.value).toBe("instance_secret_abc123");
834
+
835
+ // Verify the correct key was looked up in the secure store
836
+ expect(secureKeyStore.has("credential:twilio:auth_token")).toBe(true);
837
+ expect(secureKeyStore.get("credential:twilio:auth_token")).toBe(
838
+ "instance_secret_abc123",
839
+ );
840
+ });
841
+ });
842
+
799
843
  // =========================================================================
800
844
  // help text quality
801
845
  // =========================================================================
@@ -6,7 +6,6 @@
6
6
  * - send() → one mirrored assistant event per message
7
7
  * - broadcast() → one mirrored assistant event per message (not per socket)
8
8
  */
9
- import * as net from "node:net";
10
9
  import { describe, expect, mock, test } from "bun:test";
11
10
 
12
11
  // ── Platform mock (must happen before imports that read it) ─────────────────
@@ -28,7 +27,6 @@ mock.module("../util/platform.js", () => ({
28
27
  getLogPath: () => "/tmp/test.log",
29
28
  getDbPath: () => "/tmp/test.db",
30
29
  ensureDataDir: () => {},
31
- removeSocketFile: () => {},
32
30
  }));
33
31
 
34
32
  mock.module("../util/logger.js", () => ({
@@ -39,23 +37,13 @@ mock.module("../util/logger.js", () => ({
39
37
  }));
40
38
 
41
39
  // ── Imports (after mocks) ────────────────────────────────────────────────────
42
- import type { ServerMessage } from "../daemon/ipc-protocol.js";
40
+ import type { ServerMessage } from "../daemon/message-protocol.js";
43
41
  import type { AssistantEvent } from "../runtime/assistant-event.js";
44
42
  import { buildAssistantEvent } from "../runtime/assistant-event.js";
45
43
  import { AssistantEventHub } from "../runtime/assistant-event-hub.js";
46
44
 
47
45
  // ── Helpers ──────────────────────────────────────────────────────────────────
48
46
 
49
- function makeFakeSocket(destroyed = false): net.Socket {
50
- const s = Object.create(net.Socket.prototype) as net.Socket;
51
- Object.assign(s, {
52
- destroyed,
53
- write: () => true,
54
- on: () => s,
55
- });
56
- return s;
57
- }
58
-
59
47
  // ── buildAssistantEvent factory ───────────────────────────────────────────────
60
48
 
61
49
  describe("buildAssistantEvent", () => {
@@ -115,7 +103,7 @@ describe("daemon send → one mirrored assistant event", () => {
115
103
  expect(received[0].message.type).toBe("assistant_text_delta");
116
104
  });
117
105
 
118
- test("sessionId falls back to socket binding when message lacks it", async () => {
106
+ test("sessionId falls back to explicit parameter when message lacks it", async () => {
119
107
  const hub = new AssistantEventHub();
120
108
  const received: AssistantEvent[] = [];
121
109
 
@@ -123,19 +111,13 @@ describe("daemon send → one mirrored assistant event", () => {
123
111
  received.push(e);
124
112
  });
125
113
 
126
- // Simulate server.ts resolving sessionId from socket→session map
127
- const socketSessionMap = new Map<object, string>();
128
- const fakeSocket = makeFakeSocket();
129
- socketSessionMap.set(fakeSocket, "sess_from_socket");
130
-
131
114
  const msg: ServerMessage = { type: "pong" }; // no sessionId field
132
- const sessionId = socketSessionMap.get(fakeSocket);
133
- const event = buildAssistantEvent("ast_ipc", msg, sessionId);
115
+ const event = buildAssistantEvent("ast_ipc", msg, "sess_explicit");
134
116
 
135
117
  await hub.publish(event);
136
118
 
137
119
  expect(received).toHaveLength(1);
138
- expect(received[0].sessionId).toBe("sess_from_socket");
120
+ expect(received[0].sessionId).toBe("sess_explicit");
139
121
  });
140
122
  });
141
123
 
@@ -16,7 +16,6 @@ import { describe, expect, test } from "bun:test";
16
16
  import { drizzle } from "drizzle-orm/bun-sqlite";
17
17
 
18
18
  import { getSqliteFrom } from "../memory/db-connection.js";
19
- import * as schema from "../memory/schema.js";
20
19
  import {
21
20
  migrateJobDeferrals,
22
21
  migrateMemoryEntityRelationDedup,
@@ -24,7 +23,8 @@ import {
24
23
  MIGRATION_REGISTRY,
25
24
  type MigrationValidationResult,
26
25
  validateMigrationState,
27
- } from "../memory/schema-migration.js";
26
+ } from "../memory/migrations/index.js";
27
+ import * as schema from "../memory/schema.js";
28
28
 
29
29
  // ---------------------------------------------------------------------------
30
30
  // Helpers
@@ -54,7 +54,7 @@ import { initializeDb } from "../memory/db-init.js";
54
54
  import {
55
55
  composeChannelVerifyReply,
56
56
  GUARDIAN_VERIFY_TEMPLATE_KEYS,
57
- } from "../runtime/guardian-verification-templates.js";
57
+ } from "../runtime/verification-templates.js";
58
58
 
59
59
  // ---------------------------------------------------------------------------
60
60
  // DB initialization
@@ -131,16 +131,16 @@ describe("TwiML parameter propagation", () => {
131
131
  voice: "en-US-Standard-A",
132
132
  };
133
133
 
134
- test("includes guardianVerificationSessionId as Parameter when provided", () => {
134
+ test("includes verificationSessionId as Parameter when provided", () => {
135
135
  const twiml = generateTwiML(
136
136
  "session-123",
137
137
  "wss://example.com/v1/calls/relay",
138
138
  null,
139
139
  defaultProfile,
140
140
  undefined,
141
- { guardianVerificationSessionId: "gv-session-456" },
141
+ { verificationSessionId: "gv-session-456" },
142
142
  );
143
- expect(twiml).toContain('name="guardianVerificationSessionId"');
143
+ expect(twiml).toContain('name="verificationSessionId"');
144
144
  expect(twiml).toContain('value="gv-session-456"');
145
145
  expect(twiml).toContain("<Parameter");
146
146
  });
@@ -173,7 +173,7 @@ describe("TwiML parameter propagation", () => {
173
173
  // ---------------------------------------------------------------------------
174
174
 
175
175
  describe("Call session mode metadata", () => {
176
- test("createCallSession persists callMode and guardianVerificationSessionId", async () => {
176
+ test("createCallSession persists callMode and verificationSessionId", async () => {
177
177
  // Dynamic import to avoid circular dependency issues
178
178
  const { createCallSession, getCallSession } =
179
179
  await import("../calls/call-store.js");
@@ -186,18 +186,18 @@ describe("Call session mode metadata", () => {
186
186
  provider: "twilio",
187
187
  fromNumber: "+15551234567",
188
188
  toNumber: "+15559876543",
189
- callMode: "guardian_verification",
190
- guardianVerificationSessionId: "gv-session-test",
189
+ callMode: "verification",
190
+ verificationSessionId: "gv-session-test",
191
191
  });
192
192
 
193
- expect(session.callMode).toBe("guardian_verification");
194
- expect(session.guardianVerificationSessionId).toBe("gv-session-test");
193
+ expect(session.callMode).toBe("verification");
194
+ expect(session.verificationSessionId).toBe("gv-session-test");
195
195
 
196
196
  // Verify it persists to DB
197
197
  const loaded = getCallSession(session.id);
198
198
  expect(loaded).not.toBeNull();
199
- expect(loaded!.callMode).toBe("guardian_verification");
200
- expect(loaded!.guardianVerificationSessionId).toBe("gv-session-test");
199
+ expect(loaded!.callMode).toBe("verification");
200
+ expect(loaded!.verificationSessionId).toBe("gv-session-test");
201
201
  });
202
202
 
203
203
  test("createCallSession defaults callMode to null when not provided", async () => {
@@ -217,12 +217,12 @@ describe("Call session mode metadata", () => {
217
217
  });
218
218
 
219
219
  expect(session.callMode).toBeNull();
220
- expect(session.guardianVerificationSessionId).toBeNull();
220
+ expect(session.verificationSessionId).toBeNull();
221
221
 
222
222
  const loaded = getCallSession(session.id);
223
223
  expect(loaded).not.toBeNull();
224
224
  expect(loaded!.callMode).toBeNull();
225
- expect(loaded!.guardianVerificationSessionId).toBeNull();
225
+ expect(loaded!.verificationSessionId).toBeNull();
226
226
  });
227
227
  });
228
228
 
@@ -235,13 +235,13 @@ describe("Verification control messages are deterministic (guard)", () => {
235
235
  const { createHash } = await import("node:crypto");
236
236
  const { handleChannelInbound } =
237
237
  await import("../runtime/routes/inbound-message-handler.js");
238
- const { createChallenge } =
239
- await import("../memory/channel-guardian-store.js");
238
+ const { createInboundSession } =
239
+ await import("../memory/channel-verification-sessions.js");
240
240
 
241
241
  // Set up a pending challenge
242
242
  const secret = "123456";
243
243
  const challengeHash = createHash("sha256").update(secret).digest("hex");
244
- createChallenge({
244
+ createInboundSession({
245
245
  id: "challenge-guard-test",
246
246
  channel: "telegram",
247
247
  challengeHash,
@@ -302,7 +302,7 @@ describe("Verification control messages are deterministic (guard)", () => {
302
302
  const body = (await response.json()) as Record<string, unknown>;
303
303
 
304
304
  // Verification should have been handled
305
- expect(body.guardianVerification).toBeDefined();
305
+ expect(body.verificationOutcome).toBeDefined();
306
306
 
307
307
  // processMessage must NOT have been called — this is the guard
308
308
  expect(processMessageCalled).toBe(false);
@@ -319,7 +319,7 @@ describe("Verification control messages are deterministic (guard)", () => {
319
319
  const { handleChannelInbound } =
320
320
  await import("../runtime/routes/inbound-message-handler.js");
321
321
  const { createOutboundSession } =
322
- await import("../runtime/channel-guardian-service.js");
322
+ await import("../runtime/channel-verification-service.js");
323
323
 
324
324
  // Generate a bootstrap token and create a pending_bootstrap session
325
325
  const bootstrapToken = randomBytes(16).toString("hex");
@@ -391,7 +391,7 @@ describe("Verification control messages are deterministic (guard)", () => {
391
391
  const body = (await response.json()) as Record<string, unknown>;
392
392
 
393
393
  // Bootstrap should have been handled deterministically
394
- expect(body.guardianVerification).toBe("bootstrap_bound");
394
+ expect(body.verificationOutcome).toBe("bootstrap_bound");
395
395
  expect(body.accepted).toBe(true);
396
396
 
397
397
  // processMessage must NOT have been called — deterministic handling
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
 
3
3
  import { detectDictationModeHeuristic as detectDictationMode } from "../daemon/handlers/dictation.js";
4
- import type { DictationRequest } from "../daemon/ipc-protocol.js";
4
+ import type { DictationRequest } from "../daemon/message-protocol.js";
5
5
 
6
6
  type DictationRequestOverrides = Omit<Partial<DictationRequest>, "context"> & {
7
7
  context?: Partial<DictationRequest["context"]>;
@@ -3,8 +3,8 @@ import { describe, expect, test } from "bun:test";
3
3
  import type {
4
4
  DynamicPageSurfaceData,
5
5
  UiSurfaceShowDynamicPage,
6
- } from "../daemon/ipc-protocol.js";
7
- import { INTERACTIVE_SURFACE_TYPES } from "../daemon/ipc-protocol.js";
6
+ } from "../daemon/message-protocol.js";
7
+ import { INTERACTIVE_SURFACE_TYPES } from "../daemon/message-protocol.js";
8
8
  import { uiShowTool } from "../tools/ui-surface/definitions.js";
9
9
 
10
10
  // ---------------------------------------------------------------------------
@@ -25,7 +25,7 @@ mock.module("../util/platform.js", () => ({
25
25
  getLogPath: () => join(TEST_DIR, "logs", "vellum.log"),
26
26
  getHistoryPath: () => join(TEST_DIR, "history"),
27
27
  getHooksDir: () => join(TEST_DIR, "hooks"),
28
- getIpcBlobDir: () => join(TEST_DIR, "ipc-blobs"),
28
+
29
29
  getSandboxRootDir: () => join(TEST_DIR, "sandbox"),
30
30
  getSandboxWorkingDir: () => TEST_DIR,
31
31
  getInterfacesDir: () => join(TEST_DIR, "interfaces"),
@@ -35,10 +35,6 @@ mock.module("../util/platform.js", () => ({
35
35
  getPlatformName: () => process.platform,
36
36
  getClipboardCommand: () => null,
37
37
  readSessionToken: () => null,
38
- removeSocketFile: () => {},
39
- migratePath: () => {},
40
- migrateToWorkspaceLayout: () => {},
41
- migrateToDataLayout: () => {},
42
38
  }));
43
39
 
44
40
  const noopLogger = new Proxy({} as Record<string, unknown>, {
@@ -74,7 +70,7 @@ mock.module("../config/loader.js", () => ({
74
70
  syncConfigToLockfile: () => {},
75
71
  }));
76
72
 
77
- const { buildSystemPrompt } = await import("../config/system-prompt.js");
73
+ const { buildSystemPrompt } = await import("../prompts/system-prompt.js");
78
74
 
79
75
  describe("Dynamic Skill Authoring Workflow prompt section", () => {
80
76
  beforeEach(() => {
@@ -60,7 +60,7 @@ describe("email provider factory", () => {
60
60
  // ---------------------------------------------------------------------------
61
61
  describe("email guardrails", () => {
62
62
  test("pause blocks sends (returns outbound_paused)", async () => {
63
- const guardrails = await import("../cli/email-guardrails.js");
63
+ const guardrails = await import("../email/guardrails.js");
64
64
 
65
65
  guardrails.setOutboundPaused(true);
66
66
  expect(guardrails.isOutboundPaused()).toBe(true);
@@ -71,7 +71,7 @@ describe("email guardrails", () => {
71
71
  });
72
72
 
73
73
  test("resume allows sends", async () => {
74
- const guardrails = await import("../cli/email-guardrails.js");
74
+ const guardrails = await import("../email/guardrails.js");
75
75
 
76
76
  guardrails.setOutboundPaused(true);
77
77
  guardrails.setOutboundPaused(false);
@@ -81,7 +81,7 @@ describe("email guardrails", () => {
81
81
  });
82
82
 
83
83
  test("daily cap enforced", async () => {
84
- const guardrails = await import("../cli/email-guardrails.js");
84
+ const guardrails = await import("../email/guardrails.js");
85
85
 
86
86
  guardrails.setDailySendCap(2);
87
87
  guardrails.incrementDailySendCount();
@@ -95,7 +95,7 @@ describe("email guardrails", () => {
95
95
  });
96
96
 
97
97
  test("blocklist checked", async () => {
98
- const guardrails = await import("../cli/email-guardrails.js");
98
+ const guardrails = await import("../email/guardrails.js");
99
99
 
100
100
  guardrails.addAddressRule("block", "*@spam.com");
101
101
 
@@ -106,7 +106,7 @@ describe("email guardrails", () => {
106
106
  });
107
107
 
108
108
  test("allowlist enforcement", async () => {
109
- const guardrails = await import("../cli/email-guardrails.js");
109
+ const guardrails = await import("../email/guardrails.js");
110
110
 
111
111
  guardrails.addAddressRule("allow", "*@trusted.com");
112
112
 
@@ -119,7 +119,7 @@ describe("email guardrails", () => {
119
119
  });
120
120
 
121
121
  test("rule lifecycle: add, list, remove", async () => {
122
- const guardrails = await import("../cli/email-guardrails.js");
122
+ const guardrails = await import("../email/guardrails.js");
123
123
 
124
124
  const rule = guardrails.addAddressRule("block", "*@evil.com");
125
125
  expect(rule.id).toBeTruthy();
@@ -134,17 +134,17 @@ describe("email guardrails", () => {
134
134
  });
135
135
 
136
136
  test("remove non-existent rule returns false", async () => {
137
- const guardrails = await import("../cli/email-guardrails.js");
137
+ const guardrails = await import("../email/guardrails.js");
138
138
  expect(guardrails.removeAddressRule("non-existent")).toBe(false);
139
139
  });
140
140
 
141
141
  test("default cap is 25", async () => {
142
- const guardrails = await import("../cli/email-guardrails.js");
142
+ const guardrails = await import("../email/guardrails.js");
143
143
  expect(guardrails.getDailySendCap()).toBe(25);
144
144
  });
145
145
 
146
146
  test("incrementDailySendCount returns new count", async () => {
147
- const guardrails = await import("../cli/email-guardrails.js");
147
+ const guardrails = await import("../email/guardrails.js");
148
148
 
149
149
  expect(guardrails.incrementDailySendCount()).toBe(1);
150
150
  expect(guardrails.incrementDailySendCount()).toBe(2);
@@ -152,7 +152,7 @@ describe("email guardrails", () => {
152
152
  });
153
153
 
154
154
  test("guardrails check priority: pause > cap > blocklist", async () => {
155
- const guardrails = await import("../cli/email-guardrails.js");
155
+ const guardrails = await import("../email/guardrails.js");
156
156
 
157
157
  guardrails.setOutboundPaused(true);
158
158
  guardrails.setDailySendCap(0);
@@ -227,7 +227,7 @@ describe("email service guardrails integration", () => {
227
227
  // ---------------------------------------------------------------------------
228
228
  describe("email JSON contract", () => {
229
229
  test("guardrails status has expected shape", async () => {
230
- const guardrails = await import("../cli/email-guardrails.js");
230
+ const guardrails = await import("../email/guardrails.js");
231
231
  const status = guardrails.getGuardrailsStatus();
232
232
  const json = JSON.stringify(status);
233
233
  const parsed = JSON.parse(json);
@@ -243,7 +243,7 @@ describe("email JSON contract", () => {
243
243
  });
244
244
 
245
245
  test("address rule has expected JSON fields", async () => {
246
- const guardrails = await import("../cli/email-guardrails.js");
246
+ const guardrails = await import("../email/guardrails.js");
247
247
  const rule = guardrails.addAddressRule("block", "*@test.com");
248
248
  const parsed = JSON.parse(JSON.stringify(rule));
249
249
 
@@ -40,7 +40,7 @@ mock.module("../config/loader.js", () => ({
40
40
  }));
41
41
 
42
42
  // Stub guardrails (imported by service.ts but not relevant here)
43
- mock.module("../cli/email-guardrails.js", () => ({
43
+ mock.module("../email/guardrails.js", () => ({
44
44
  addAddressRule: () => ({}),
45
45
  checkSendGuardrails: () => null,
46
46
  getGuardrailsStatus: () => ({}),
@@ -7,7 +7,6 @@ const runDeterministicChecksMock = mock();
7
7
  const createEventMock = mock();
8
8
  const updateEventDedupeKeyMock = mock();
9
9
  const dispatchDecisionMock = mock();
10
- const activeBindingChannels = new Set<string>(["telegram"]);
11
10
 
12
11
  mock.module("../util/logger.js", () => ({
13
12
  getLogger: () =>
@@ -24,15 +23,9 @@ mock.module("../contacts/contact-store.js", () => ({
24
23
  findGuardianForChannel: (_channelType: string, _assistantId: string) => null,
25
24
  }));
26
25
 
27
- mock.module("../memory/channel-guardian-store.js", () => ({
28
- getActiveBinding: (_assistantId: string, channel: string) =>
29
- activeBindingChannels.has(channel)
30
- ? {
31
- guardianDeliveryChatId: "guardian-chat-123",
32
- guardianExternalUserId: "guardian-user-123",
33
- }
34
- : null,
35
- }));
26
+ // Note: stale mock for channel-guardian-store.js removed the barrel was
27
+ // deleted and none of the functions it mocked (getActiveBinding) existed in
28
+ // the barrel.
36
29
 
37
30
  mock.module("../notifications/adapters/macos.js", () => ({
38
31
  VellumAdapter: class {
@@ -40,10 +33,6 @@ mock.module("../notifications/adapters/macos.js", () => ({
40
33
  },
41
34
  }));
42
35
 
43
- mock.module("../notifications/adapters/sms.js", () => ({
44
- SmsAdapter: class {},
45
- }));
46
-
47
36
  mock.module("../notifications/adapters/telegram.js", () => ({
48
37
  TelegramAdapter: class {},
49
38
  }));
@@ -91,8 +80,6 @@ describe("emitNotificationSignal routing intent re-persistence", () => {
91
80
  createEventMock.mockReset();
92
81
  updateEventDedupeKeyMock.mockReset();
93
82
  dispatchDecisionMock.mockReset();
94
- activeBindingChannels.clear();
95
- activeBindingChannels.add("telegram");
96
83
 
97
84
  createEventMock.mockReturnValue({ id: "evt-1" });
98
85
  runDeterministicChecksMock.mockResolvedValue({ passed: true });
@@ -190,8 +177,6 @@ describe("emitNotificationSignal routing intent re-persistence", () => {
190
177
  });
191
178
 
192
179
  test("excludes unverified binding channels from connected channel candidates", async () => {
193
- activeBindingChannels.clear();
194
-
195
180
  const decision = {
196
181
  shouldNotify: true,
197
182
  selectedChannels: ["vellum"],
@@ -143,7 +143,6 @@ describe("EventBus", () => {
143
143
  await expect(
144
144
  bus.emit("daemon.lifecycle.started", {
145
145
  pid: 1,
146
- socketPath: "/tmp/sock",
147
146
  startedAtMs: Date.now(),
148
147
  }),
149
148
  ).rejects.toBeInstanceOf(EventBusDisposedError);
@@ -15,8 +15,6 @@ mock.module("../util/platform.js", () => ({
15
15
  getDbPath: () => join(testDir, "test.db"),
16
16
  getLogPath: () => join(testDir, "test.log"),
17
17
  ensureDataDir: () => {},
18
- migrateToDataLayout: () => {},
19
- migrateToWorkspaceLayout: () => {},
20
18
  }));
21
19
 
22
20
  mock.module("../util/logger.js", () => ({
@@ -35,7 +35,7 @@ describe("gateway-client managed outbound lane", () => {
35
35
 
36
36
  test("translates managed callback URL into managed outbound-send request", async () => {
37
37
  await deliverChannelReply(
38
- "https://platform.test/v1/internal/managed-gateway/outbound-send/?route_id=route-123&assistant_id=assistant-123&source_channel=sms&source_update_id=SM-inbound-123&callback_token=runtime-token",
38
+ "https://platform.test/v1/internal/managed-gateway/outbound-send/?route_id=route-123&assistant_id=assistant-123&source_channel=phone&source_update_id=CA-inbound-123&callback_token=runtime-token",
39
39
  {
40
40
  chatId: "+15550001111",
41
41
  text: "hello from runtime",
@@ -74,7 +74,7 @@ describe("gateway-client managed outbound lane", () => {
74
74
  };
75
75
  expect(body.route_id).toBe("route-123");
76
76
  expect(body.assistant_id).toBe("assistant-123");
77
- expect(body.normalized_send.sourceChannel).toBe("sms");
77
+ expect(body.normalized_send.sourceChannel).toBe("phone");
78
78
  expect(body.normalized_send.message.to).toBe("+15550001111");
79
79
  expect(body.normalized_send.message.content).toBe("hello from runtime");
80
80
  expect(body.normalized_send.message.externalMessageId).toStartWith(
@@ -83,7 +83,7 @@ describe("gateway-client managed outbound lane", () => {
83
83
  expect(body.normalized_send.source.requestId).toBe(
84
84
  body.normalized_send.message.externalMessageId,
85
85
  );
86
- expect(body.normalized_send.raw.sourceUpdateId).toBe("SM-inbound-123");
86
+ expect(body.normalized_send.raw.sourceUpdateId).toBe("CA-inbound-123");
87
87
  });
88
88
 
89
89
  test("retries managed outbound send on retriable upstream responses with stable idempotency key", async () => {
@@ -109,7 +109,7 @@ describe("gateway-client managed outbound lane", () => {
109
109
  ) as unknown as typeof globalThis.fetch;
110
110
 
111
111
  await deliverChannelReply(
112
- "https://platform.test/v1/internal/managed-gateway/outbound-send/?route_id=route-retry&assistant_id=assistant-retry&source_channel=sms&source_update_id=SM-retry",
112
+ "https://platform.test/v1/internal/managed-gateway/outbound-send/?route_id=route-retry&assistant_id=assistant-retry&source_channel=phone&source_update_id=CA-retry",
113
113
  {
114
114
  chatId: "+15550002222",
115
115
  text: "retry this outbound send",
@@ -138,7 +138,7 @@ describe("gateway-client managed outbound lane", () => {
138
138
 
139
139
  test("falls back to standard callback delivery for non-managed callback URL", async () => {
140
140
  await deliverChannelReply(
141
- "https://gateway.test/deliver/sms",
141
+ "https://gateway.test/deliver/voice",
142
142
  {
143
143
  chatId: "+15550001111",
144
144
  text: "standard gateway callback",
@@ -148,7 +148,7 @@ describe("gateway-client managed outbound lane", () => {
148
148
 
149
149
  expect(calls).toHaveLength(1);
150
150
  const call = calls[0];
151
- expect(call.url).toBe("https://gateway.test/deliver/sms");
151
+ expect(call.url).toBe("https://gateway.test/deliver/voice");
152
152
 
153
153
  const headers = call.init.headers as Record<string, string>;
154
154
  expect(headers["Content-Type"]).toBe("application/json");