@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
@@ -75,7 +75,7 @@ export const GUARDIAN_ACTION_COPY_MAX_TOKENS = 200;
75
75
  export const GUARDIAN_ACTION_COPY_SYSTEM_PROMPT =
76
76
  "You are an assistant writing one user-facing message about a guardian action in a voice call scenario. " +
77
77
  "Keep it concise, natural, and conversational. Preserve factual details exactly. " +
78
- "These messages are spoken aloud or sent as SMS, so use a warm, human tone. " +
78
+ "These messages are spoken aloud, so use a warm, human tone. " +
79
79
  "Do not mention internal systems, scenario IDs, or technical details. " +
80
80
  "Return plain text only.";
81
81
 
@@ -132,7 +132,7 @@ export function buildGuardianActionGenerationPrompt(
132
132
  : "";
133
133
  return [
134
134
  "Rewrite the following guardian action message as a natural, conversational reply.",
135
- "These messages are for voice call scenarios and may be spoken aloud or sent as SMS.",
135
+ "These messages are for voice call scenarios and may be spoken aloud.",
136
136
  "Keep the same concrete facts and next-step guidance.",
137
137
  keywordClause,
138
138
  `Context JSON: ${JSON.stringify(context)}`,
@@ -165,7 +165,7 @@ export function includesRequiredKeywords(
165
165
  * Return a scenario-specific deterministic fallback message.
166
166
  *
167
167
  * Each template produces natural, conversational text suitable for voice
168
- * or SMS delivery.
168
+ * delivery.
169
169
  */
170
170
  export function getGuardianActionFallbackMessage(
171
171
  context: GuardianActionMessageContext,
@@ -248,7 +248,7 @@ export function getGuardianActionFallbackMessage(
248
248
  : "Got it! Your answer has been applied to the current active request on the call.";
249
249
 
250
250
  case "outbound_message_copy":
251
- // This SMS is sent TO the original caller relaying the guardian's answer.
251
+ // This message is sent TO the original caller relaying the guardian's answer.
252
252
  // When lateAnswerText is available, include it — that's the whole point of message_back.
253
253
  if (context.lateAnswerText && context.questionText) {
254
254
  return `Hi! You asked "${context.questionText}" earlier. Here's the answer: ${context.lateAnswerText}`;
@@ -2,7 +2,7 @@
2
2
  * Shared guardian reply router for inbound channel messages.
3
3
  *
4
4
  * Provides a single entry point (`routeGuardianReply`) for all inbound
5
- * guardian reply processing across Telegram, SMS, and WhatsApp. Routes
5
+ * guardian reply processing across Telegram and WhatsApp. Routes
6
6
  * through a priority-ordered pipeline:
7
7
  *
8
8
  * 1. Deterministic callback/ref parsing (button presses with `apr:<requestId>:<action>`)
@@ -57,7 +57,7 @@ const log = getLogger("guardian-reply-router");
57
57
  export interface GuardianReplyContext {
58
58
  /** The raw message text (trimmed). */
59
59
  messageText: string;
60
- /** Source channel (telegram, sms, whatsapp, etc.). */
60
+ /** Source channel (telegram, whatsapp, etc.). */
61
61
  channel: string;
62
62
  /** Actor identity context for the sender. */
63
63
  actor: ActorContext;
@@ -260,7 +260,7 @@ function notConsumed(): GuardianReplyResult {
260
260
  * Route an inbound guardian reply through the canonical decision pipeline.
261
261
  *
262
262
  * This is the single entry point for all inbound guardian reply processing.
263
- * It handles messages from any channel (Telegram, SMS, WhatsApp) and
263
+ * It handles messages from any channel (Telegram, WhatsApp) and
264
264
  * routes through priority-ordered matching:
265
265
  *
266
266
  * 1. Deterministic callback parsing (button presses)
@@ -33,20 +33,25 @@ import {
33
33
  hasUngatedHttpAuthDisabled,
34
34
  isHttpAuthDisabled,
35
35
  } from "../config/env.js";
36
- import type { ServerMessage } from "../daemon/ipc-contract.js";
36
+ import type { ServerMessage } from "../daemon/message-protocol.js";
37
37
  import { PairingStore } from "../daemon/pairing-store.js";
38
38
  import {
39
39
  type Confidence,
40
40
  getAttentionStateByConversationIds,
41
+ markConversationUnread,
41
42
  recordConversationSeenSignal,
42
43
  type SignalType,
43
44
  } from "../memory/conversation-attention-store.js";
44
- import * as conversationStore from "../memory/conversation-store.js";
45
+ import {
46
+ countConversations,
47
+ listConversations,
48
+ } from "../memory/conversation-queries.js";
45
49
  import * as externalConversationStore from "../memory/external-conversation-store.js";
46
50
  import {
47
51
  consumeCallback,
48
52
  consumeCallbackError,
49
53
  } from "../security/oauth-callback-registry.js";
54
+ import { UserError } from "../util/errors.js";
50
55
  import { getLogger } from "../util/logger.js";
51
56
  import { buildAssistantEvent } from "./assistant-event.js";
52
57
  import { assistantEventHub } from "./assistant-event-hub.js";
@@ -86,6 +91,7 @@ import {
86
91
  TWILIO_WEBHOOK_RE,
87
92
  validateTwilioWebhook,
88
93
  } from "./middleware/twilio-validation.js";
94
+ import { appManagementRouteDefinitions } from "./routes/app-management-routes.js";
89
95
  import { handleServePage } from "./routes/app-routes.js";
90
96
  import { appRouteDefinitions } from "./routes/app-routes.js";
91
97
  import { approvalRouteDefinitions } from "./routes/approval-routes.js";
@@ -102,6 +108,8 @@ import {
102
108
  startGuardianExpirySweep,
103
109
  stopGuardianExpirySweep,
104
110
  } from "./routes/channel-routes.js";
111
+ import { channelVerificationRouteDefinitions } from "./routes/channel-verification-routes.js";
112
+ import { computerUseRouteDefinitions } from "./routes/computer-use-routes.js";
105
113
  import {
106
114
  contactCatchAllRouteDefinitions,
107
115
  contactRouteDefinitions,
@@ -109,6 +117,8 @@ import {
109
117
  import { conversationAttentionRouteDefinitions } from "./routes/conversation-attention-routes.js";
110
118
  import { conversationRouteDefinitions } from "./routes/conversation-routes.js";
111
119
  import { debugRouteDefinitions } from "./routes/debug-routes.js";
120
+ import { diagnosticsRouteDefinitions } from "./routes/diagnostics-routes.js";
121
+ import { documentRouteDefinitions } from "./routes/documents-routes.js";
112
122
  import { eventsRouteDefinitions } from "./routes/events-routes.js";
113
123
  import { globalSearchRouteDefinitions } from "./routes/global-search-routes.js";
114
124
  import { guardianActionRouteDefinitions } from "./routes/guardian-action-routes.js";
@@ -116,7 +126,10 @@ import { handleGuardianBootstrap } from "./routes/guardian-bootstrap-routes.js";
116
126
  import { handleGuardianRefresh } from "./routes/guardian-refresh-routes.js";
117
127
  import { handleHealth } from "./routes/identity-routes.js";
118
128
  import { identityRouteDefinitions } from "./routes/identity-routes.js";
119
- import { integrationRouteDefinitions } from "./routes/integration-routes.js";
129
+ import { slackChannelRouteDefinitions } from "./routes/integrations/slack/channel.js";
130
+ import { slackShareRouteDefinitions } from "./routes/integrations/slack/share.js";
131
+ import { telegramRouteDefinitions } from "./routes/integrations/telegram.js";
132
+ import { twilioRouteDefinitions } from "./routes/integrations/twilio.js";
120
133
  import { inviteRouteDefinitions } from "./routes/invite-routes.js";
121
134
  import { migrationRouteDefinitions } from "./routes/migration-routes.js";
122
135
  import type { PairingHandlerContext } from "./routes/pairing-routes.js";
@@ -125,13 +138,20 @@ import {
125
138
  handlePairingStatus,
126
139
  pairingRouteDefinitions,
127
140
  } from "./routes/pairing-routes.js";
141
+ import { recordingRouteDefinitions } from "./routes/recording-routes.js";
142
+ import { scheduleRouteDefinitions } from "./routes/schedule-routes.js";
128
143
  import { secretRouteDefinitions } from "./routes/secret-routes.js";
129
- import { slackShareRouteDefinitions } from "./routes/slack-share-routes.js";
144
+ import { sessionManagementRouteDefinitions } from "./routes/session-management-routes.js";
145
+ import { sessionQueryRouteDefinitions } from "./routes/session-query-routes.js";
146
+ import { settingsRouteDefinitions } from "./routes/settings-routes.js";
147
+ import { skillRouteDefinitions } from "./routes/skills-routes.js";
148
+ import { subagentRouteDefinitions } from "./routes/subagents-routes.js";
130
149
  import { surfaceActionRouteDefinitions } from "./routes/surface-action-routes.js";
131
150
  import { surfaceContentRouteDefinitions } from "./routes/surface-content-routes.js";
132
151
  import { trustRulesRouteDefinitions } from "./routes/trust-rules-routes.js";
133
- import { twilioRouteDefinitions } from "./routes/twilio-routes.js";
134
152
  import { usageRouteDefinitions } from "./routes/usage-routes.js";
153
+ import { workItemRouteDefinitions } from "./routes/work-items-routes.js";
154
+ import { workspaceRouteDefinitions } from "./routes/workspace-routes.js";
135
155
 
136
156
  // Re-export for consumers
137
157
  export { isPrivateAddress } from "./middleware/auth.js";
@@ -187,6 +207,12 @@ export class RuntimeHttpServer {
187
207
  private pairingBroadcast?: (msg: ServerMessage) => void;
188
208
  private sendMessageDeps?: SendMessageDeps;
189
209
  private findSession?: RuntimeHttpServerOptions["findSession"];
210
+ private findSessionBySurfaceId?: RuntimeHttpServerOptions["findSessionBySurfaceId"];
211
+ private getSkillContext?: RuntimeHttpServerOptions["getSkillContext"];
212
+ private sessionManagementDeps?: RuntimeHttpServerOptions["sessionManagementDeps"];
213
+ private getModelSetContext?: RuntimeHttpServerOptions["getModelSetContext"];
214
+ private getComputerUseDeps?: RuntimeHttpServerOptions["getComputerUseDeps"];
215
+ private getRecordingDeps?: RuntimeHttpServerOptions["getRecordingDeps"];
190
216
  private router: HttpRouter;
191
217
 
192
218
  constructor(options: RuntimeHttpServerOptions = {}) {
@@ -202,6 +228,12 @@ export class RuntimeHttpServer {
202
228
  this.interfacesDir = options.interfacesDir ?? null;
203
229
  this.sendMessageDeps = options.sendMessageDeps;
204
230
  this.findSession = options.findSession;
231
+ this.findSessionBySurfaceId = options.findSessionBySurfaceId;
232
+ this.getSkillContext = options.getSkillContext;
233
+ this.sessionManagementDeps = options.sessionManagementDeps;
234
+ this.getModelSetContext = options.getModelSetContext;
235
+ this.getComputerUseDeps = options.getComputerUseDeps;
236
+ this.getRecordingDeps = options.getRecordingDeps;
205
237
  this.router = new HttpRouter(this.buildRouteTable());
206
238
  }
207
239
 
@@ -240,10 +272,9 @@ export class RuntimeHttpServer {
240
272
  featureFlagToken: this.readFeatureFlagToken(),
241
273
  pairingBroadcast: ipcBroadcast
242
274
  ? (msg) => {
243
- // Broadcast to IPC socket clients (local Unix socket)
275
+ // Broadcast to all clients via the event hub so HTTP/SSE clients
276
+ // (e.g. macOS app) receive pairing approval requests.
244
277
  ipcBroadcast(msg);
245
- // Also publish to the event hub so HTTP/SSE clients (e.g. macOS
246
- // app with localHttpEnabled) receive pairing approval requests.
247
278
  void assistantEventHub.publish(
248
279
  buildAssistantEvent(DAEMON_INTERNAL_ASSISTANT_ID, msg),
249
280
  );
@@ -458,16 +489,10 @@ export class RuntimeHttpServer {
458
489
  // needs to work when the access token is expired. Bootstrap has its
459
490
  // own loopback IP validation; refresh is secured by the refresh token
460
491
  // in the request body (32 random bytes, hash-only storage).
461
- if (
462
- path === "/v1/integrations/guardian/vellum/bootstrap" &&
463
- req.method === "POST"
464
- ) {
492
+ if (path === "/v1/guardian/init" && req.method === "POST") {
465
493
  return await handleGuardianBootstrap(req, server);
466
494
  }
467
- if (
468
- path === "/v1/integrations/guardian/vellum/refresh" &&
469
- req.method === "POST"
470
- ) {
495
+ if (path === "/v1/guardian/refresh" && req.method === "POST") {
471
496
  return await handleGuardianRefresh(req);
472
497
  }
473
498
 
@@ -683,10 +708,44 @@ export class RuntimeHttpServer {
683
708
  getPairingContext: () => this.pairingContext,
684
709
  }),
685
710
  ...appRouteDefinitions(),
711
+ ...appManagementRouteDefinitions(),
686
712
  ...secretRouteDefinitions(),
687
713
  ...identityRouteDefinitions(),
688
714
  ...debugRouteDefinitions(),
689
715
  ...usageRouteDefinitions(),
716
+ ...workspaceRouteDefinitions(),
717
+ ...settingsRouteDefinitions(),
718
+ ...scheduleRouteDefinitions({
719
+ sendMessageDeps: this.sendMessageDeps,
720
+ }),
721
+ ...diagnosticsRouteDefinitions(),
722
+ ...documentRouteDefinitions(),
723
+ ...workItemRouteDefinitions(
724
+ this.sendMessageDeps
725
+ ? {
726
+ getOrCreateSession: (conversationId) =>
727
+ this.sendMessageDeps!.getOrCreateSession(conversationId),
728
+ findSession: this.findSession
729
+ ? (conversationId) => {
730
+ const s = this.findSession!(conversationId);
731
+ if (!s || !("abort" in s)) return undefined;
732
+ return s as import("../daemon/session.js").Session;
733
+ }
734
+ : undefined,
735
+ }
736
+ : undefined,
737
+ ),
738
+ ...subagentRouteDefinitions(),
739
+ ...sessionQueryRouteDefinitions({
740
+ getModelSetContext: this.getModelSetContext,
741
+ findSessionForQueue: this.findSession
742
+ ? (id) => {
743
+ const s = this.findSession!(id);
744
+ if (!s?.removeQueuedMessage) return undefined;
745
+ return { removeQueuedMessage: s.removeQueuedMessage.bind(s) };
746
+ }
747
+ : undefined,
748
+ }),
690
749
 
691
750
  // Browser relay — not extracted into a domain module because
692
751
  // these two routes depend on the in-process extensionRelayServer
@@ -720,12 +779,8 @@ export class RuntimeHttpServer {
720
779
  handler: ({ url }) => {
721
780
  const limit = Number(url.searchParams.get("limit") ?? 50);
722
781
  const offset = Number(url.searchParams.get("offset") ?? 0);
723
- const conversations = conversationStore.listConversations(
724
- limit,
725
- false,
726
- offset,
727
- );
728
- const totalCount = conversationStore.countConversations();
782
+ const conversations = listConversations(limit, false, offset);
783
+ const totalCount = countConversations();
729
784
  const conversationIds = conversations.map((c) => c.id);
730
785
  const bindings =
731
786
  externalConversationStore.getBindingsForConversations(
@@ -772,6 +827,7 @@ export class RuntimeHttpServer {
772
827
  updatedAt: c.updatedAt,
773
828
  threadType: c.threadType === "private" ? "private" : "standard",
774
829
  source: c.source ?? "user",
830
+ ...(c.scheduleJobId ? { scheduleJobId: c.scheduleJobId } : {}),
775
831
  ...(binding
776
832
  ? {
777
833
  channelBinding: {
@@ -796,6 +852,10 @@ export class RuntimeHttpServer {
796
852
 
797
853
  ...conversationAttentionRouteDefinitions(),
798
854
 
855
+ ...(this.sessionManagementDeps
856
+ ? sessionManagementRouteDefinitions(this.sessionManagementDeps)
857
+ : []),
858
+
799
859
  {
800
860
  endpoint: "conversations/seen",
801
861
  method: "POST",
@@ -832,6 +892,34 @@ export class RuntimeHttpServer {
832
892
  },
833
893
  },
834
894
 
895
+ {
896
+ endpoint: "conversations/unread",
897
+ method: "POST",
898
+ handler: async ({ req }) => {
899
+ const body = (await req.json()) as Record<string, unknown>;
900
+ const conversationId = body.conversationId as string | undefined;
901
+ if (!conversationId)
902
+ return httpError("BAD_REQUEST", "Missing conversationId", 400);
903
+ try {
904
+ markConversationUnread(conversationId);
905
+ return Response.json({ ok: true });
906
+ } catch (err) {
907
+ if (err instanceof UserError) {
908
+ return httpError("UNPROCESSABLE_ENTITY", err.message, 422);
909
+ }
910
+ log.error(
911
+ { err, conversationId },
912
+ "POST /v1/conversations/unread: failed",
913
+ );
914
+ return httpError(
915
+ "INTERNAL_ERROR",
916
+ "Failed to mark conversation unread",
917
+ 500,
918
+ );
919
+ }
920
+ },
921
+ },
922
+
835
923
  ...conversationRouteDefinitions({
836
924
  interfacesDir: this.interfacesDir,
837
925
  sendMessageDeps: this.sendMessageDeps,
@@ -841,8 +929,16 @@ export class RuntimeHttpServer {
841
929
  }),
842
930
  ...globalSearchRouteDefinitions(),
843
931
  ...approvalRouteDefinitions(),
932
+ ...(this.getSkillContext
933
+ ? skillRouteDefinitions({
934
+ getSkillContext: this.getSkillContext,
935
+ })
936
+ : []),
844
937
  ...trustRulesRouteDefinitions(),
845
- ...surfaceActionRouteDefinitions({ findSession: this.findSession }),
938
+ ...surfaceActionRouteDefinitions({
939
+ findSession: this.findSession,
940
+ findSessionBySurfaceId: this.findSessionBySurfaceId,
941
+ }),
846
942
  ...surfaceContentRouteDefinitions({ findSession: this.findSession }),
847
943
  ...guardianActionRouteDefinitions(),
848
944
 
@@ -851,12 +947,25 @@ export class RuntimeHttpServer {
851
947
  // contacts/:id catch-all must follow invite routes to avoid shadowing
852
948
  ...contactCatchAllRouteDefinitions(),
853
949
 
854
- ...integrationRouteDefinitions(),
950
+ ...telegramRouteDefinitions(),
951
+ ...channelVerificationRouteDefinitions(),
952
+ ...slackChannelRouteDefinitions(),
855
953
  ...slackShareRouteDefinitions(),
856
954
  ...twilioRouteDefinitions(),
857
955
  ...channelReadinessRouteDefinitions(),
858
956
  ...attachmentRouteDefinitions(),
859
957
 
958
+ ...(this.getComputerUseDeps
959
+ ? computerUseRouteDefinitions({
960
+ getComputerUseDeps: this.getComputerUseDeps,
961
+ })
962
+ : []),
963
+ ...(this.getRecordingDeps
964
+ ? recordingRouteDefinitions({
965
+ getRecordingDeps: this.getRecordingDeps,
966
+ })
967
+ : []),
968
+
860
969
  {
861
970
  endpoint: "interfaces/:path*",
862
971
  method: "GET",
@@ -2,7 +2,12 @@
2
2
  * Shared types for the runtime HTTP server and its route handlers.
3
3
  */
4
4
  import type { ChannelId, InterfaceId } from "../channels/types.js";
5
- import type { SurfaceData, SurfaceType } from "../daemon/ipc-contract/surfaces.js";
5
+ import type { SkillOperationContext } from "../daemon/handlers/skills.js";
6
+ import type { ServerMessage } from "../daemon/message-protocol.js";
7
+ import type {
8
+ SurfaceData,
9
+ SurfaceType,
10
+ } from "../daemon/message-types/surfaces.js";
6
11
  import type { Session } from "../daemon/session.js";
7
12
  import type { TrustContext } from "../daemon/session-runtime-assembly.js";
8
13
  import type {
@@ -14,6 +19,7 @@ import type {
14
19
  ComposeGuardianActionMessageOptions,
15
20
  GuardianActionMessageContext,
16
21
  } from "./guardian-action-message-composer.js";
22
+ import type { SessionManagementDeps } from "./routes/session-management-routes.js";
17
23
  /**
18
24
  * Daemon-injected function that generates approval copy using a provider.
19
25
  * Returns generated text or `null` on failure (caller falls back to deterministic text).
@@ -122,6 +128,8 @@ export interface RuntimeMessageSessionOptions {
122
128
  isInteractive?: boolean;
123
129
  /** Channel command intent metadata (e.g. Telegram /start). */
124
130
  commandIntent?: { type: string; payload?: string; languageCode?: string };
131
+ /** Optional callback to receive real-time agent loop events (text deltas, tool starts, etc.). */
132
+ onEvent?: (msg: ServerMessage) => void;
125
133
  }
126
134
 
127
135
  export type MessageProcessor = (
@@ -170,6 +178,8 @@ export interface RuntimeHttpServerOptions {
170
178
  guardianFollowUpConversationGenerator?: GuardianFollowUpConversationGenerator;
171
179
  /** Dependencies for the POST /v1/messages queue-if-busy handler. */
172
180
  sendMessageDeps?: SendMessageDeps;
181
+ /** Context provider for skill management HTTP routes. */
182
+ getSkillContext?: () => SkillOperationContext;
173
183
  /** Lookup an active session by ID (for surface actions and content fetches). */
174
184
  findSession?: (sessionId: string) =>
175
185
  | {
@@ -189,8 +199,31 @@ export interface RuntimeHttpServerOptions {
189
199
  data: SurfaceData;
190
200
  actions?: Array<{ id: string; label: string; style?: string }>;
191
201
  }>;
202
+ removeQueuedMessage?: (requestId: string) => boolean;
203
+ }
204
+ | undefined;
205
+ /** Lookup an active session by surfaceId (fallback when sessionId is absent). */
206
+ findSessionBySurfaceId?: (surfaceId: string) =>
207
+ | {
208
+ handleSurfaceAction(
209
+ surfaceId: string,
210
+ actionId: string,
211
+ data?: Record<string, unknown>,
212
+ ): void;
213
+ surfaceState: Map<
214
+ string,
215
+ { surfaceType: SurfaceType; data: SurfaceData; title?: string }
216
+ >;
192
217
  }
193
218
  | undefined;
219
+ /** Dependencies for session management HTTP routes (switch, rename, clear, cancel, undo, regenerate). */
220
+ sessionManagementDeps?: SessionManagementDeps;
221
+ /** Lazy factory for model config set context (session eviction, config reload suppression). */
222
+ getModelSetContext?: () => import("../daemon/handlers/config-model.js").ModelSetContext;
223
+ /** Provider for computer-use session dependencies (CU routes). */
224
+ getComputerUseDeps?: () => import("./routes/computer-use-routes.js").ComputerUseDeps;
225
+ /** Provider for recording dependencies (recording routes). */
226
+ getRecordingDeps?: () => import("./routes/recording-routes.js").RecordingDeps;
194
227
  }
195
228
 
196
229
  export interface RuntimeAttachmentMetadata {
@@ -32,13 +32,11 @@ export function channelDisplayLabel(type: string): string {
32
32
  switch (type) {
33
33
  case "telegram":
34
34
  return "Telegram";
35
- case "sms":
36
- return "SMS";
37
35
  case "email":
38
36
  return "Email";
39
37
  case "slack":
40
38
  return "Slack";
41
- case "voice":
39
+ case "phone":
42
40
  return "Voice";
43
41
  default:
44
42
  return type.charAt(0).toUpperCase() + type.slice(1);
@@ -285,7 +285,7 @@ export function redeemInvite(params: {
285
285
  export function redeemVoiceInviteCode(params: {
286
286
  assistantId?: string;
287
287
  callerExternalUserId: string;
288
- sourceChannel: "voice";
288
+ sourceChannel: "phone";
289
289
  code: string;
290
290
  }): VoiceRedemptionOutcome {
291
291
  const { callerExternalUserId, code } = params;
@@ -325,16 +325,16 @@ export function redeemVoiceInviteCode(params: {
325
325
  }
326
326
 
327
327
  // Channel enforcement: voice invites can only be redeemed on the voice channel
328
- if (invite.sourceChannel !== "voice") {
328
+ if (invite.sourceChannel !== "phone") {
329
329
  return { ok: false, reason: "invalid_or_expired" };
330
330
  }
331
331
 
332
332
  // Check for existing membership
333
333
  const canonicalCallerId =
334
- canonicalizeInboundIdentity("voice" as ChannelId, callerExternalUserId) ??
334
+ canonicalizeInboundIdentity("phone" as ChannelId, callerExternalUserId) ??
335
335
  callerExternalUserId;
336
336
  const voiceContactResult = findContactChannel({
337
- channelType: "voice",
337
+ channelType: "phone",
338
338
  externalUserId: canonicalCallerId,
339
339
  });
340
340
  const existingVoiceChannel = voiceContactResult?.channel ?? null;
@@ -367,7 +367,7 @@ export function redeemVoiceInviteCode(params: {
367
367
  getSqlite()
368
368
  .transaction(() => {
369
369
  const writeResult = upsertContactChannel({
370
- sourceChannel: "voice",
370
+ sourceChannel: "phone",
371
371
  externalUserId: callerExternalUserId,
372
372
  externalChatId: callerExternalUserId,
373
373
  displayName: preservedDisplayName,
@@ -9,11 +9,6 @@
9
9
  */
10
10
 
11
11
  import { isChannelId } from "../channels/types.js";
12
- import {
13
- DECLINED_BY_USER_SENTINEL,
14
- DEFAULT_USER_REFERENCE,
15
- resolveGuardianName,
16
- } from "../config/user-reference.js";
17
12
  import {
18
13
  createInvite,
19
14
  findByTokenHash,
@@ -23,6 +18,11 @@ import {
23
18
  listInvites,
24
19
  revokeInvite,
25
20
  } from "../memory/invite-store.js";
21
+ import {
22
+ DECLINED_BY_USER_SENTINEL,
23
+ DEFAULT_USER_REFERENCE,
24
+ resolveGuardianName,
25
+ } from "../prompts/user-reference.js";
26
26
  import { isValidE164 } from "../util/phone.js";
27
27
  import { generateVoiceCode, hashVoiceCode } from "../util/voice-code.js";
28
28
  import {
@@ -167,7 +167,7 @@ export async function createIngressInvite(params: {
167
167
  let voiceCode: string | undefined;
168
168
  let voiceCodeHash: string | undefined;
169
169
  let effectiveGuardianName: string | undefined;
170
- const isVoice = params.sourceChannel === "voice";
170
+ const isVoice = params.sourceChannel === "phone";
171
171
 
172
172
  // For non-voice invites: generate a 6-digit invite code for guardian-mediated
173
173
  // redemption. The plaintext code is returned once in the response; only the
@@ -351,7 +351,7 @@ export function redeemIngressInviteTyped(params: {
351
351
  export function redeemVoiceInviteCode(params: {
352
352
  assistantId?: string;
353
353
  callerExternalUserId: string;
354
- sourceChannel: "voice";
354
+ sourceChannel: "phone";
355
355
  code: string;
356
356
  }): VoiceRedemptionOutcome {
357
357
  return redeemVoiceInviteCodeTyped(params);
@@ -13,16 +13,42 @@
13
13
 
14
14
  import type { ChannelId } from "../channels/types.js";
15
15
  import { findGuardianForChannel } from "../contacts/contact-store.js";
16
- import { buildIpcAuthContext } from "../daemon/ipc-handler.js";
17
16
  import type { TrustContext } from "../daemon/session-runtime-assembly.js";
18
17
  import { getLogger } from "../util/logger.js";
19
18
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "./assistant-scope.js";
19
+ import { CURRENT_POLICY_EPOCH } from "./auth/policy.js";
20
+ import { resolveScopeProfile } from "./auth/scopes.js";
20
21
  import type { AuthContext } from "./auth/types.js";
21
22
  import { ensureVellumGuardianBinding } from "./guardian-vellum-migration.js";
22
23
  import { resolveTrustContext } from "./trust-context-resolver.js";
23
24
 
24
25
  const log = getLogger("local-actor-identity");
25
26
 
27
+ /**
28
+ * Build a synthetic AuthContext for a local session.
29
+ *
30
+ * Local connections are pre-authenticated via the daemon's file-system
31
+ * permission model. This produces the same AuthContext shape that HTTP
32
+ * routes receive from JWT verification, keeping downstream code
33
+ * transport-agnostic.
34
+ */
35
+ export function buildLocalAuthContext(sessionId: string): AuthContext {
36
+ return {
37
+ subject: `ipc:self:${sessionId}`,
38
+ principalType: "ipc",
39
+ assistantId: DAEMON_INTERNAL_ASSISTANT_ID,
40
+ sessionId,
41
+ scopeProfile: "ipc_v1",
42
+ scopes: resolveScopeProfile("ipc_v1"),
43
+ policyEpoch: CURRENT_POLICY_EPOCH,
44
+ };
45
+ }
46
+
47
+ /**
48
+ * @deprecated Use `buildLocalAuthContext` instead.
49
+ */
50
+ export const buildIpcAuthContext = buildLocalAuthContext;
51
+
26
52
  /**
27
53
  * Resolve the guardian runtime context for a local IPC connection.
28
54
  *
@@ -90,7 +116,7 @@ export function resolveLocalIpcTrustContext(
90
116
  * `authContext.actorPrincipalId` path as HTTP sessions.
91
117
  */
92
118
  export function resolveLocalIpcAuthContext(sessionId: string): AuthContext {
93
- const authContext = buildIpcAuthContext(sessionId);
119
+ const authContext = buildLocalAuthContext(sessionId);
94
120
 
95
121
  // Enrich with the guardian principal ID from contacts-first path
96
122
  const guardianResult = findGuardianForChannel("vellum");