@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
@@ -2,21 +2,29 @@ import type { Command } from "commander";
2
2
 
3
3
  import {
4
4
  getAssistantContactMetadata,
5
+ getChannelById,
5
6
  getContact,
6
7
  listContacts,
7
8
  mergeContacts,
8
9
  searchContacts,
9
- } from "../contacts/contact-store.js";
10
- import type { ContactRole } from "../contacts/types.js";
11
- import { initializeDb } from "../memory/db.js";
10
+ updateChannelStatus,
11
+ upsertContact,
12
+ } from "../../contacts/contact-store.js";
13
+ import type {
14
+ ChannelPolicy,
15
+ ChannelStatus,
16
+ ContactRole,
17
+ ContactType,
18
+ } from "../../contacts/types.js";
12
19
  import {
13
20
  createIngressInvite,
14
21
  listIngressInvites,
15
22
  redeemIngressInvite,
16
23
  redeemVoiceInviteCode,
17
24
  revokeIngressInvite,
18
- } from "../runtime/invite-service.js";
19
- import { writeOutput } from "./integrations.js";
25
+ } from "../../runtime/invite-service.js";
26
+ import { initializeDb } from "../db.js";
27
+ import { writeOutput } from "../output.js";
20
28
 
21
29
  export function registerContactsCommand(program: Command): void {
22
30
  const contacts = program
@@ -36,6 +44,7 @@ is the source of truth for identity resolution across all channels.
36
44
  Examples:
37
45
  $ assistant contacts list
38
46
  $ assistant contacts get abc-123
47
+ $ assistant contacts upsert --display-name "Alice"
39
48
  $ assistant contacts merge keep-id merge-id
40
49
  $ assistant contacts invites list`,
41
50
  );
@@ -46,6 +55,14 @@ Examples:
46
55
  .option("--role <role>", "Filter by role (default: contact)", "contact")
47
56
  .option("--limit <limit>", "Maximum number of contacts to return")
48
57
  .option("--query <query>", "Search query to filter contacts")
58
+ .option(
59
+ "--channel-address <address>",
60
+ "Search by channel address (email, phone, handle)",
61
+ )
62
+ .option(
63
+ "--channel-type <channelType>",
64
+ "Filter by channel type (email, telegram, phone, whatsapp, slack)",
65
+ )
49
66
  .addHelpText(
50
67
  "after",
51
68
  `
@@ -53,14 +70,20 @@ Lists contacts with optional filtering. The --role flag accepts: contact
53
70
  or guardian (defaults to contact). The --limit flag sets
54
71
  the maximum number of results (defaults to 50).
55
72
 
56
- When --query is provided, a full-text search is performed across contact
57
- names and linked external identifiers (phone numbers, emails, Telegram
58
- usernames). Without --query, returns all contacts matching the role filter.
73
+ When --query, --channel-address, or --channel-type is provided, a search
74
+ is performed. --query does full-text search across contact names and
75
+ linked external identifiers. --channel-address matches phone numbers,
76
+ emails, or handles. --channel-type filters by channel kind. These filters
77
+ can be combined. Without any search params, returns all contacts matching
78
+ the role filter.
59
79
 
60
80
  Examples:
61
81
  $ assistant contacts list
62
82
  $ assistant contacts list --role guardian
63
83
  $ assistant contacts list --query "john" --limit 10
84
+ $ assistant contacts list --channel-address "+15551234567"
85
+ $ assistant contacts list --channel-type telegram
86
+ $ assistant contacts list --query "alice" --channel-type email
64
87
  $ assistant contacts list --role guardian --json`,
65
88
  )
66
89
  .action(
@@ -69,6 +92,8 @@ Examples:
69
92
  role?: string;
70
93
  limit?: string;
71
94
  query?: string;
95
+ channelAddress?: string;
96
+ channelType?: string;
72
97
  },
73
98
  cmd: Command,
74
99
  ) => {
@@ -79,8 +104,16 @@ Examples:
79
104
 
80
105
  const effectiveLimit = limit ?? 50;
81
106
 
82
- const results = opts.query
83
- ? searchContacts({ query: opts.query, role, limit: effectiveLimit })
107
+ const hasSearchParams =
108
+ opts.query || opts.channelAddress || opts.channelType;
109
+ const results = hasSearchParams
110
+ ? searchContacts({
111
+ query: opts.query,
112
+ channelAddress: opts.channelAddress,
113
+ channelType: opts.channelType,
114
+ role,
115
+ limit: effectiveLimit,
116
+ })
84
117
  : listContacts(effectiveLimit, role);
85
118
 
86
119
  writeOutput(cmd, { ok: true, contacts: results });
@@ -166,6 +199,220 @@ Examples:
166
199
  },
167
200
  );
168
201
 
202
+ contacts
203
+ .command("upsert")
204
+ .description("Create or update a contact")
205
+ .requiredOption("--display-name <name>", "Display name for the contact")
206
+ .option("--id <id>", "Contact ID — provide to update an existing contact")
207
+ .option("--notes <notes>", "Free-text notes about the contact")
208
+ .option(
209
+ "--role <role>",
210
+ "Contact role: contact or guardian (default: contact for new contacts)",
211
+ )
212
+ .option(
213
+ "--contact-type <type>",
214
+ "Contact type: human or assistant (default: human for new contacts)",
215
+ )
216
+ .option(
217
+ "--channels <json>",
218
+ "JSON array of channel objects, each with type, address, and optional isPrimary, externalUserId, externalChatId, status, policy",
219
+ )
220
+ .addHelpText(
221
+ "after",
222
+ `
223
+ Creates a new contact or updates an existing one. When --id is provided and
224
+ matches an existing contact, that contact is updated. When --id is omitted,
225
+ a new contact is created with a generated UUID.
226
+
227
+ The --channels flag accepts a JSON array of channel objects. Each object must
228
+ have "type" (e.g. telegram, phone, email, whatsapp) and "address" fields.
229
+ Optional channel fields: isPrimary (boolean), externalUserId, externalChatId,
230
+ status (active, revoked, blocked), policy (allow, deny).
231
+
232
+ Examples:
233
+ $ assistant contacts upsert --display-name "Alice" --json
234
+ $ assistant contacts upsert --display-name "Alice" --id abc-123 --notes "Updated notes" --json
235
+ $ assistant contacts upsert --display-name "Bob" --role guardian --json
236
+ $ assistant contacts upsert --display-name "Bob" --channels '[{"type":"telegram","address":"12345","externalUserId":"12345","status":"active","policy":"allow"}]' --json`,
237
+ )
238
+ .action(
239
+ async (
240
+ opts: {
241
+ displayName: string;
242
+ id?: string;
243
+ notes?: string;
244
+ role?: string;
245
+ contactType?: string;
246
+ channels?: string;
247
+ },
248
+ cmd: Command,
249
+ ) => {
250
+ try {
251
+ initializeDb();
252
+
253
+ let channels: unknown[] | undefined;
254
+ if (opts.channels) {
255
+ try {
256
+ channels = JSON.parse(opts.channels);
257
+ if (!Array.isArray(channels)) {
258
+ writeOutput(cmd, {
259
+ ok: false,
260
+ error: "--channels must be a JSON array",
261
+ });
262
+ process.exitCode = 1;
263
+ return;
264
+ }
265
+ } catch {
266
+ writeOutput(cmd, {
267
+ ok: false,
268
+ error: `Invalid JSON for --channels: ${opts.channels}`,
269
+ });
270
+ process.exitCode = 1;
271
+ return;
272
+ }
273
+ }
274
+
275
+ const result = upsertContact({
276
+ id: opts.id,
277
+ displayName: opts.displayName,
278
+ notes: opts.notes,
279
+ role: opts.role as ContactRole | undefined,
280
+ contactType: opts.contactType as ContactType | undefined,
281
+ channels: channels as
282
+ | {
283
+ type: string;
284
+ address: string;
285
+ isPrimary?: boolean;
286
+ externalUserId?: string;
287
+ externalChatId?: string;
288
+ status?: ChannelStatus;
289
+ policy?: ChannelPolicy;
290
+ }[]
291
+ | undefined,
292
+ });
293
+
294
+ writeOutput(cmd, { ok: true, contact: result });
295
+ } catch (err) {
296
+ const message = err instanceof Error ? err.message : String(err);
297
+ writeOutput(cmd, { ok: false, error: message });
298
+ process.exitCode = 1;
299
+ }
300
+ },
301
+ );
302
+
303
+ const channelsCmds = contacts
304
+ .command("channels")
305
+ .description("Manage contact channels");
306
+
307
+ channelsCmds.addHelpText(
308
+ "after",
309
+ `
310
+ Channels represent external communication endpoints linked to contacts —
311
+ phone numbers, Telegram IDs, email addresses, etc. Each channel has a
312
+ status (active, pending, revoked, blocked, unverified) and a policy
313
+ (allow, deny, escalate) that controls how the assistant handles messages
314
+ from that channel.
315
+
316
+ Examples:
317
+ $ assistant contacts channels update-status <channelId> --status revoked --reason "No longer needed"
318
+ $ assistant contacts channels update-status <channelId> --policy deny`,
319
+ );
320
+
321
+ channelsCmds
322
+ .command("update-status <channelId>")
323
+ .description("Update a channel's status or policy")
324
+ .option(
325
+ "--status <status>",
326
+ "New channel status: active, revoked, or blocked",
327
+ )
328
+ .option("--policy <policy>", "New channel policy: allow, deny, or escalate")
329
+ .option("--reason <reason>", "Reason for the status change")
330
+ .addHelpText(
331
+ "after",
332
+ `
333
+ Arguments:
334
+ channelId UUID of the contact channel to update
335
+
336
+ Updates the access-control fields on an existing channel. At least one of
337
+ --status or --policy must be provided.
338
+
339
+ When --status is "revoked", --reason is mapped to revokedReason on the
340
+ channel record. When --status is "blocked", --reason is mapped to
341
+ blockedReason. The --reason flag is ignored for other status values.
342
+
343
+ Valid --status values: active, revoked, blocked
344
+ Valid --policy values: allow, deny, escalate
345
+
346
+ Examples:
347
+ $ assistant contacts channels update-status abc-123 --status revoked --reason "No longer needed" --json
348
+ $ assistant contacts channels update-status abc-123 --status blocked --reason "Spam" --json
349
+ $ assistant contacts channels update-status abc-123 --policy deny --json
350
+ $ assistant contacts channels update-status abc-123 --status active --policy allow --json`,
351
+ )
352
+ .action(
353
+ async (
354
+ channelId: string,
355
+ opts: {
356
+ status?: string;
357
+ policy?: string;
358
+ reason?: string;
359
+ },
360
+ cmd: Command,
361
+ ) => {
362
+ try {
363
+ if (!opts.status && !opts.policy) {
364
+ writeOutput(cmd, {
365
+ ok: false,
366
+ error: "At least one of --status or --policy must be provided",
367
+ });
368
+ process.exitCode = 1;
369
+ return;
370
+ }
371
+
372
+ initializeDb();
373
+
374
+ const existing = getChannelById(channelId);
375
+ if (!existing) {
376
+ writeOutput(cmd, {
377
+ ok: false,
378
+ error: `Channel not found: ${channelId}`,
379
+ });
380
+ process.exitCode = 1;
381
+ return;
382
+ }
383
+
384
+ const status = opts.status as ChannelStatus | undefined;
385
+ const policy = opts.policy as ChannelPolicy | undefined;
386
+
387
+ const revokedReason: string | null | undefined =
388
+ status !== undefined
389
+ ? status === "revoked"
390
+ ? (opts.reason ?? null)
391
+ : null
392
+ : undefined;
393
+ const blockedReason: string | null | undefined =
394
+ status !== undefined
395
+ ? status === "blocked"
396
+ ? (opts.reason ?? null)
397
+ : null
398
+ : undefined;
399
+
400
+ const result = updateChannelStatus(channelId, {
401
+ status,
402
+ policy,
403
+ revokedReason,
404
+ blockedReason,
405
+ });
406
+
407
+ writeOutput(cmd, { ok: true, channel: result });
408
+ } catch (err) {
409
+ const message = err instanceof Error ? err.message : String(err);
410
+ writeOutput(cmd, { ok: false, error: message });
411
+ process.exitCode = 1;
412
+ }
413
+ },
414
+ );
415
+
169
416
  const invites = contacts
170
417
  .command("invites")
171
418
  .description("Manage contact invites");
@@ -174,7 +421,7 @@ Examples:
174
421
  "after",
175
422
  `
176
423
  Invites are tokens that grant channel access when redeemed. Each invite is
177
- tied to a source channel (telegram, voice, sms, email, whatsapp) and can
424
+ tied to a source channel (telegram, phone, email, whatsapp) and can
178
425
  optionally have usage limits, expiration, and notes. When redeemed, the
179
426
  invite creates a channel membership linking a contact to an external
180
427
  identifier on the source channel.
@@ -201,7 +448,7 @@ Examples:
201
448
  $ assistant contacts invites list
202
449
  $ assistant contacts invites list --source-channel telegram
203
450
  $ assistant contacts invites list --status active
204
- $ assistant contacts invites list --source-channel voice --json`,
451
+ $ assistant contacts invites list --source-channel phone --json`,
205
452
  )
206
453
  .action(
207
454
  async (
@@ -232,7 +479,7 @@ Examples:
232
479
  .description("Create a new invite")
233
480
  .requiredOption(
234
481
  "--source-channel <channel>",
235
- "Source channel (e.g. telegram, voice, sms, email, whatsapp)",
482
+ "Source channel (e.g. telegram, phone, email, whatsapp)",
236
483
  )
237
484
  .option("--note <note>", "Optional note")
238
485
  .option("--max-uses <n>", "Max redemptions")
@@ -254,7 +501,7 @@ Examples:
254
501
  "after",
255
502
  `
256
503
  Creates a new invite token for the specified source channel. The --source-channel
257
- flag is required and must be one of: telegram, voice, sms, email, whatsapp.
504
+ flag is required and must be one of: telegram, phone, email, whatsapp.
258
505
 
259
506
  Optional fields:
260
507
  --note Free-text note attached to the invite
@@ -269,7 +516,7 @@ Voice invites require three additional fields:
269
516
 
270
517
  Examples:
271
518
  $ assistant contacts invites create --source-channel telegram --note "For Alice" --max-uses 1
272
- $ assistant contacts invites create --source-channel voice --expected-external-user-id "+15551234567" --friend-name "Alice" --guardian-name "Bob" --contact-name "Alice Smith"`,
519
+ $ assistant contacts invites create --source-channel phone --expected-external-user-id "+15551234567" --friend-name "Alice" --guardian-name "Bob" --contact-name "Alice Smith"`,
273
520
  )
274
521
  .action(
275
522
  async (
@@ -425,7 +672,7 @@ Examples:
425
672
  const result = redeemVoiceInviteCode({
426
673
  code: opts.code,
427
674
  callerExternalUserId: opts.callerExternalUserId,
428
- sourceChannel: "voice",
675
+ sourceChannel: "phone",
429
676
  ...(opts.assistantId ? { assistantId: opts.assistantId } : {}),
430
677
  });
431
678
  if (result.ok) {
@@ -4,7 +4,7 @@ import {
4
4
  deleteSecureKeyAsync,
5
5
  getSecureKey,
6
6
  setSecureKeyAsync,
7
- } from "../security/secure-keys.js";
7
+ } from "../../security/secure-keys.js";
8
8
  import {
9
9
  assertMetadataWritable,
10
10
  type CredentialMetadata,
@@ -13,11 +13,9 @@ import {
13
13
  getCredentialMetadataById,
14
14
  listCredentialMetadata,
15
15
  upsertCredentialMetadata,
16
- } from "../tools/credentials/metadata-store.js";
17
- import { getCliLogger } from "../util/logger.js";
18
- import { shouldOutputJson, writeOutput } from "./integrations.js";
19
-
20
- const log = getCliLogger("cli");
16
+ } from "../../tools/credentials/metadata-store.js";
17
+ import { log } from "../logger.js";
18
+ import { shouldOutputJson, writeOutput } from "../output.js";
21
19
 
22
20
  // ---------------------------------------------------------------------------
23
21
  // Shared helpers
@@ -68,7 +66,6 @@ function buildCredentialOutput(
68
66
  usageDescription: metadata.usageDescription ?? null,
69
67
  allowedTools: metadata.allowedTools,
70
68
  allowedDomains: metadata.allowedDomains,
71
- accountInfo: metadata.accountInfo ?? null,
72
69
  grantedScopes: metadata.grantedScopes ?? null,
73
70
  expiresAt: metadata.expiresAt
74
71
  ? new Date(metadata.expiresAt).toISOString()
@@ -103,7 +100,6 @@ function printCredentialHuman(output: Record<string, unknown>): void {
103
100
  log.info(
104
101
  ` Domains: ${(output.allowedDomains as string[]).join(", ")}`,
105
102
  );
106
- if (output.accountInfo) log.info(` Account: ${output.accountInfo}`);
107
103
  if (output.grantedScopes)
108
104
  log.info(
109
105
  ` Scopes: ${(output.grantedScopes as string[]).join(", ")}`,
@@ -258,7 +254,11 @@ Examples:
258
254
  async (
259
255
  name: string,
260
256
  value: string,
261
- opts: { label?: string; description?: string; allowedTools?: string },
257
+ opts: {
258
+ label?: string;
259
+ description?: string;
260
+ allowedTools?: string;
261
+ },
262
262
  cmd: Command,
263
263
  ) => {
264
264
  try {
@@ -463,7 +463,6 @@ Examples:
463
463
  usageDescription: null,
464
464
  allowedTools: [],
465
465
  allowedDomains: [],
466
- accountInfo: null,
467
466
  grantedScopes: null,
468
467
  expiresAt: null,
469
468
  createdAt: null,
@@ -1,8 +1,8 @@
1
1
  import type { Command } from "commander";
2
2
 
3
- import { startCli } from "../cli.js";
4
- import { shouldAutoStartDaemon } from "../daemon/connection-policy.js";
5
- import { ensureDaemonRunning } from "../daemon/lifecycle.js";
3
+ import { startCli } from "../../cli.js";
4
+ import { shouldAutoStartDaemon } from "../../daemon/connection-policy.js";
5
+ import { ensureDaemonRunning } from "../../daemon/lifecycle.js";
6
6
 
7
7
  export function registerDefaultAction(program: Command): void {
8
8
  program.action(async () => {
@@ -3,10 +3,8 @@ import { join } from "node:path";
3
3
 
4
4
  import type { Command } from "commander";
5
5
 
6
- import { getDaemonStatus, stopDaemon } from "../daemon/lifecycle.js";
7
- import { getCliLogger } from "../util/logger.js";
8
-
9
- const log = getCliLogger("cli");
6
+ import { getDaemonStatus, stopDaemon } from "../../daemon/lifecycle.js";
7
+ import { log } from "../logger.js";
10
8
 
11
9
  export function registerDevCommand(program: Command): void {
12
10
  program
@@ -97,7 +95,7 @@ Examples:
97
95
  }
98
96
  }
99
97
 
100
- const mainPath = `${import.meta.dirname}/../daemon/main.ts`;
98
+ const mainPath = `${import.meta.dirname}/../../daemon/main.ts`;
101
99
 
102
100
  const useWatch = opts.watch === true;
103
101
  log.info(
@@ -106,7 +104,7 @@ Examples:
106
104
  } (Ctrl+C to stop)`,
107
105
  );
108
106
 
109
- const repoRoot = join(import.meta.dirname, "..", "..", "..");
107
+ const repoRoot = join(import.meta.dirname, "..", "..", "..", "..");
110
108
  const args = useWatch ? ["--watch", "run", mainPath] : ["run", mainPath];
111
109
  const child = spawn("bun", args, {
112
110
  stdio: "inherit",
@@ -1,28 +1,20 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { existsSync, readFileSync, statSync } from "node:fs";
3
- import * as net from "node:net";
4
3
 
5
4
  import type { Command } from "commander";
6
5
 
7
- import { loadRawConfig } from "../config/loader.js";
6
+ import { loadRawConfig } from "../../config/loader.js";
7
+ import { shouldAutoStartDaemon } from "../../daemon/connection-policy.js";
8
8
  import {
9
- hasSocketOverride,
10
- shouldAutoStartDaemon,
11
- } from "../daemon/connection-policy.js";
12
- import { IpcError } from "../util/errors.js";
13
- import { getCliLogger } from "../util/logger.js";
14
- import {
15
- getDataDir,
16
9
  getDbPath,
17
10
  getLogPath,
18
11
  getRootDir,
19
- getSocketPath,
20
12
  getWorkspaceDir,
21
13
  getWorkspaceHooksDir,
22
14
  getWorkspaceSkillsDir,
23
- } from "../util/platform.js";
24
-
25
- const log = getCliLogger("cli");
15
+ } from "../../util/platform.js";
16
+ import { getHttpBaseUrl, httpHealthCheck } from "../http-client.js";
17
+ import { log } from "../logger.js";
26
18
 
27
19
  export function registerDoctorCommand(program: Command): void {
28
20
  program
@@ -42,13 +34,13 @@ Output symbols:
42
34
  Diagnostic checks performed:
43
35
  1. Bun is installed Verifies bun is available in PATH
44
36
  2. API key configured Checks for a valid provider API key in config or env
45
- 3. Assistant reachable Connects to the assistant Unix socket
37
+ 3. Assistant reachable HTTP health check against the assistant server
46
38
  4. Database exists/readable Opens the SQLite database and runs a test query
47
39
  5. Directory structure Verifies required ~/.vellum/ directories exist
48
40
  6. Disk space Ensures at least 100MB free on the data partition
49
41
  7. Log file size Warns if the log file exceeds 50MB
50
42
  8. Database integrity Runs SQLite PRAGMA integrity_check
51
- 9. Socket permissions Verifies the assistant socket has 0600 or 0700 mode
43
+ 9. HTTP token permissions Verifies the http-token file has 0600 or 0700 mode
52
44
  10. Trust rule syntax Validates trust.json structure and rule fields
53
45
  11. WASM files Checks that tree-sitter WASM binaries are present
54
46
  12. Browser runtime Verifies Playwright and Chromium availability
@@ -65,14 +57,9 @@ Examples:
65
57
  log.info("Vellum Doctor\n");
66
58
 
67
59
  // 0. Connection policy info
68
- const socketPath = getSocketPath();
69
- const isOverride = hasSocketOverride();
60
+ const httpUrl = getHttpBaseUrl();
70
61
  const autostart = shouldAutoStartDaemon();
71
- log.info(
72
- ` Socket: ${socketPath}${
73
- isOverride ? " (override via VELLUM_DAEMON_SOCKET)" : ""
74
- }`,
75
- );
62
+ log.info(` HTTP: ${httpUrl}`);
76
63
  log.info(` Autostart: ${autostart ? "enabled" : "disabled"}\n`);
77
64
 
78
65
  // 1. Bun installed
@@ -114,35 +101,22 @@ Examples:
114
101
  );
115
102
  }
116
103
 
117
- // 3. Daemon reachable
104
+ // 3. Daemon reachable (HTTP health check)
118
105
  try {
119
- const sock = getSocketPath();
120
- if (!existsSync(sock)) {
106
+ const healthy = await httpHealthCheck(2000);
107
+ if (healthy) {
108
+ pass("Assistant reachable");
109
+ } else {
121
110
  fail(
122
111
  "Assistant reachable",
123
- "socket not found (is the assistant running?)",
112
+ "HTTP health check failed (is the assistant running?)",
124
113
  );
125
- } else {
126
- await new Promise<void>((resolve, reject) => {
127
- const s = net.createConnection(sock);
128
- const timer = setTimeout(() => {
129
- s.destroy();
130
- reject(new IpcError("timeout"));
131
- }, 2000);
132
- s.on("connect", () => {
133
- clearTimeout(timer);
134
- s.end();
135
- resolve();
136
- });
137
- s.on("error", (err) => {
138
- clearTimeout(timer);
139
- reject(err);
140
- });
141
- });
142
- pass("Assistant reachable");
143
114
  }
144
115
  } catch {
145
- fail("Assistant reachable", "could not connect to assistant socket");
116
+ fail(
117
+ "Assistant reachable",
118
+ "could not connect to assistant HTTP server",
119
+ );
146
120
  }
147
121
 
148
122
  // 4. DB exists and readable
@@ -166,7 +140,7 @@ Examples:
166
140
 
167
141
  // 5. ~/.vellum/ directory structure (workspace layout)
168
142
  const rootDir = getRootDir();
169
- const dataDir = getDataDir();
143
+ const dataDir = process.env.VELLUM_DATA_DIR!;
170
144
  const workspaceDir = getWorkspaceDir();
171
145
  const requiredDirs = [
172
146
  rootDir,
@@ -257,25 +231,27 @@ Examples:
257
231
  fail("Database integrity check", "database file not found");
258
232
  }
259
233
 
260
- // 9. Socket permissions
261
- const sockPath = getSocketPath();
262
- if (existsSync(sockPath)) {
234
+ // 9. HTTP token
235
+ const tokenPath = `${rootDir}/http-token`;
236
+ if (existsSync(tokenPath)) {
263
237
  try {
264
- const sockStat = statSync(sockPath);
265
- const mode = sockStat.mode & 0o777;
238
+ const tokenStat = statSync(tokenPath);
239
+ const mode = tokenStat.mode & 0o777;
266
240
  if (mode === 0o600 || mode === 0o700) {
267
- pass(`Socket permissions (${mode.toString(8).padStart(4, "0")})`);
241
+ pass(
242
+ `HTTP token permissions (${mode.toString(8).padStart(4, "0")})`,
243
+ );
268
244
  } else {
269
245
  fail(
270
- "Socket permissions",
246
+ "HTTP token permissions",
271
247
  `expected 0600 or 0700, got 0${mode.toString(8)}`,
272
248
  );
273
249
  }
274
250
  } catch {
275
- fail("Socket permissions", "could not stat socket");
251
+ fail("HTTP token permissions", "could not stat http-token file");
276
252
  }
277
253
  } else {
278
- pass("Socket permissions (socket not present — assistant not running)");
254
+ pass("HTTP token (not present — assistant not running)");
279
255
  }
280
256
 
281
257
  // 10. Trust rule syntax
@@ -327,7 +303,7 @@ Examples:
327
303
  const missingWasm: string[] = [];
328
304
  for (const wasm of wasmFiles) {
329
305
  const dir = import.meta.dirname ?? __dirname;
330
- let fullPath = `${dir}/../../node_modules/${wasm.pkg}/${wasm.file}`;
306
+ let fullPath = `${dir}/../../../node_modules/${wasm.pkg}/${wasm.file}`;
331
307
  // In compiled binaries, fall back to Resources/ or next to the binary
332
308
  if (!existsSync(fullPath) && dir.startsWith("/$bunfs/")) {
333
309
  const { dirname: pathDirname, join: pathJoin } =
@@ -345,11 +321,11 @@ Examples:
345
321
  try {
346
322
  const wasmStat = statSync(fullPath);
347
323
  if (wasmStat.size === 0) {
348
- missingWasm.push(`${wasm} (empty)`);
324
+ missingWasm.push(`${wasm.file} (empty)`);
349
325
  wasmOk = false;
350
326
  }
351
327
  } catch {
352
- missingWasm.push(`${wasm} (unreadable)`);
328
+ missingWasm.push(`${wasm.file} (unreadable)`);
353
329
  wasmOk = false;
354
330
  }
355
331
  }
@@ -362,7 +338,7 @@ Examples:
362
338
 
363
339
  // 12. Browser runtime (Playwright + Chromium)
364
340
  const { checkBrowserRuntime } =
365
- await import("../tools/browser/runtime-check.js");
341
+ await import("../../tools/browser/runtime-check.js");
366
342
  const browserStatus = await checkBrowserRuntime();
367
343
  if (
368
344
  browserStatus.playwrightAvailable &&
@@ -380,7 +356,7 @@ Examples:
380
356
 
381
357
  // 13. Sandbox backend diagnostics
382
358
  const { runSandboxDiagnostics } =
383
- await import("../tools/terminal/sandbox-diagnostics.js");
359
+ await import("../../tools/terminal/sandbox-diagnostics.js");
384
360
  const sandbox = runSandboxDiagnostics();
385
361
  log.info(
386
362
  `\n Sandbox: ${sandbox.config.enabled ? "enabled" : "disabled"}`,