@vellumai/assistant 0.4.42 → 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 (840) 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/calls/active-call-lease.ts +207 -0
  261. package/src/calls/call-constants.ts +0 -7
  262. package/src/calls/call-controller.ts +1 -1
  263. package/src/calls/call-conversation-messages.ts +6 -6
  264. package/src/calls/call-domain.ts +73 -38
  265. package/src/calls/call-pointer-message-composer.ts +6 -6
  266. package/src/calls/call-pointer-messages.ts +14 -13
  267. package/src/calls/call-recovery.ts +2 -0
  268. package/src/calls/call-store.ts +21 -28
  269. package/src/calls/guardian-action-sweep.ts +6 -8
  270. package/src/calls/guardian-dispatch.ts +2 -6
  271. package/src/calls/relay-access-wait.ts +4 -4
  272. package/src/calls/relay-server.ts +69 -80
  273. package/src/calls/relay-setup-router.ts +16 -21
  274. package/src/calls/relay-verification.ts +27 -28
  275. package/src/calls/twilio-config.ts +28 -3
  276. package/src/calls/twilio-provider.ts +5 -5
  277. package/src/calls/twilio-rest.ts +26 -27
  278. package/src/calls/twilio-routes.ts +67 -54
  279. package/src/calls/types.ts +8 -8
  280. package/src/calls/voice-ingress-preflight.ts +110 -0
  281. package/src/calls/voice-session-bridge.ts +7 -7
  282. package/src/channels/config.ts +1 -10
  283. package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
  284. package/src/channels/types.ts +2 -13
  285. package/src/cli/__tests__/notifications.test.ts +1 -1
  286. package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
  287. package/src/cli/{amazon.ts → commands/amazon/index.ts} +12 -17
  288. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  289. package/src/cli/commands/amazon/session.ts +116 -0
  290. package/src/cli/{audit.ts → commands/audit.ts} +2 -4
  291. package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
  292. package/src/cli/commands/browser-relay.ts +520 -0
  293. package/src/cli/commands/channel-verification-sessions.ts +442 -0
  294. package/src/cli/{completions.ts → commands/completions.ts} +1 -3
  295. package/src/cli/{config.ts → commands/config.ts} +3 -5
  296. package/src/cli/{contacts.ts → commands/contacts.ts} +15 -17
  297. package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
  298. package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
  299. package/src/cli/{dev.ts → commands/dev.ts} +4 -6
  300. package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
  301. package/src/cli/{email.ts → commands/email.ts} +2 -2
  302. package/src/cli/{keys.ts → commands/keys.ts} +6 -6
  303. package/src/cli/{map.ts → commands/map.ts} +85 -93
  304. package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
  305. package/src/cli/{memory.ts → commands/memory.ts} +6 -7
  306. package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
  307. package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
  308. package/src/cli/commands/platform.ts +176 -0
  309. package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
  310. package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
  311. package/src/cli/commands/skills.ts +498 -0
  312. package/src/cli/{trust.ts → commands/trust.ts} +2 -4
  313. package/src/{__tests__/twitter-cli-error-shaping.test.ts → cli/commands/twitter/__tests__/cli-error-shaping.test.ts} +43 -2
  314. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +483 -0
  315. package/src/{__tests__/twitter-cli-routing.test.ts → cli/commands/twitter/__tests__/cli-routing.test.ts} +130 -4
  316. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -2
  317. package/src/{twitter → cli/commands/twitter}/client.ts +17 -7
  318. package/src/cli/{twitter.ts → commands/twitter/index.ts} +322 -273
  319. package/src/cli/commands/twitter/router.ts +396 -0
  320. package/src/cli/commands/twitter/session.ts +121 -0
  321. package/src/cli/db.ts +1 -0
  322. package/src/cli/http-client.ts +87 -0
  323. package/src/cli/logger.ts +6 -0
  324. package/src/cli/main-screen.tsx +4 -3
  325. package/src/cli/output.ts +19 -0
  326. package/src/cli/program.ts +29 -27
  327. package/src/cli/reference.ts +27 -37
  328. package/src/cli.ts +452 -240
  329. package/src/config/assistant-feature-flags.ts +3 -15
  330. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  331. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  332. package/src/config/bundled-skills/amazon/SKILL.md +15 -5
  333. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  334. package/src/config/bundled-skills/app-builder/SKILL.md +4 -3
  335. package/src/config/bundled-skills/browser/SKILL.md +4 -5
  336. package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
  337. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
  338. package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
  339. package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
  340. package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
  341. package/src/config/bundled-skills/contacts/SKILL.md +23 -77
  342. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
  343. package/src/config/bundled-skills/document/SKILL.md +4 -3
  344. package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
  345. package/src/config/bundled-skills/doordash/SKILL.md +4 -11
  346. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +8 -16
  347. package/src/config/bundled-skills/doordash/doordash-cli.ts +120 -86
  348. package/src/config/bundled-skills/doordash/lib/session.ts +1 -2
  349. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
  350. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
  351. package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
  352. package/src/config/bundled-skills/followups/SKILL.md +4 -3
  353. package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
  354. package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
  355. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
  356. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
  357. package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
  358. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
  359. package/src/config/bundled-skills/influencer/SKILL.md +19 -19
  360. package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
  361. package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
  362. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
  363. package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
  364. package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
  365. package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
  366. package/src/config/bundled-skills/messaging/SKILL.md +6 -33
  367. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
  368. package/src/config/bundled-skills/notifications/SKILL.md +4 -4
  369. package/src/config/bundled-skills/notion/SKILL.md +4 -4
  370. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
  371. package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
  372. package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
  373. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
  374. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
  375. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
  376. package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
  377. package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
  378. package/src/config/bundled-skills/reminder/SKILL.md +4 -3
  379. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
  380. package/src/config/bundled-skills/schedule/SKILL.md +4 -3
  381. package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
  382. package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
  383. package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
  384. package/src/config/bundled-skills/slack/SKILL.md +4 -8
  385. package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
  386. package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
  387. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
  388. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
  389. package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
  390. package/src/config/bundled-skills/subagent/SKILL.md +4 -3
  391. package/src/config/bundled-skills/tasks/SKILL.md +4 -3
  392. package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
  393. package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
  394. package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
  395. package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
  396. package/src/config/bundled-skills/twitter/SKILL.md +56 -14
  397. package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
  398. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
  399. package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
  400. package/src/config/bundled-skills/watcher/SKILL.md +4 -3
  401. package/src/config/env-registry.ts +1 -10
  402. package/src/config/feature-flag-registry.json +0 -16
  403. package/src/config/loader.ts +78 -38
  404. package/src/config/schema.ts +143 -106
  405. package/src/config/schemas/channels.ts +80 -0
  406. package/src/config/schemas/heartbeat.ts +51 -0
  407. package/src/config/schemas/inference.ts +136 -0
  408. package/src/config/schemas/ingress.ts +81 -0
  409. package/src/config/schemas/logging.ts +21 -0
  410. package/src/config/schemas/memory-lifecycle.ts +67 -0
  411. package/src/config/schemas/memory-processing.ts +215 -0
  412. package/src/config/schemas/memory-retrieval.ts +222 -0
  413. package/src/config/schemas/memory-storage.ts +83 -0
  414. package/src/config/schemas/memory.ts +58 -0
  415. package/src/config/schemas/platform.ts +64 -0
  416. package/src/config/schemas/security.ts +54 -0
  417. package/src/config/schemas/swarm.ts +50 -0
  418. package/src/config/schemas/timeouts.ts +47 -0
  419. package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
  420. package/src/config/skill-state.ts +3 -13
  421. package/src/config/skills.ts +196 -75
  422. package/src/config/types.ts +1 -20
  423. package/src/contacts/contact-store.ts +12 -49
  424. package/src/contacts/contacts-write.ts +1 -5
  425. package/src/contacts/index.ts +0 -2
  426. package/src/contacts/types.ts +0 -8
  427. package/src/context/window-manager.ts +73 -14
  428. package/src/daemon/assistant-attachments.ts +9 -0
  429. package/src/daemon/computer-use-session.ts +3 -3
  430. package/src/daemon/connection-policy.ts +6 -21
  431. package/src/daemon/context-overflow-policy.ts +1 -1
  432. package/src/daemon/daemon-control.ts +46 -54
  433. package/src/daemon/doordash-steps.ts +1 -1
  434. package/src/daemon/handlers/config-channels.ts +407 -71
  435. package/src/daemon/handlers/config-ingress.ts +17 -85
  436. package/src/daemon/handlers/config-model.ts +145 -123
  437. package/src/daemon/handlers/config-slack-channel.ts +43 -29
  438. package/src/daemon/handlers/config-telegram.ts +32 -27
  439. package/src/daemon/handlers/config-voice.ts +1 -4
  440. package/src/daemon/handlers/dictation.ts +11 -16
  441. package/src/daemon/handlers/identity.ts +5 -6
  442. package/src/daemon/handlers/pairing.ts +5 -13
  443. package/src/daemon/handlers/recording.ts +97 -199
  444. package/src/daemon/handlers/session-history.ts +110 -96
  445. package/src/daemon/handlers/session-user-message.ts +29 -57
  446. package/src/daemon/handlers/sessions.ts +240 -137
  447. package/src/daemon/handlers/shared.ts +62 -95
  448. package/src/daemon/handlers/skills.ts +492 -543
  449. package/src/daemon/lifecycle.ts +168 -55
  450. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  451. package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
  452. package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
  453. package/src/daemon/{ipc-contract → message-types}/integrations.ts +29 -13
  454. package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
  455. package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
  456. package/src/daemon/{ipc-contract → message-types}/sessions.ts +1 -0
  457. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  458. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  459. package/src/daemon/providers-setup.ts +0 -5
  460. package/src/daemon/recording-executor.ts +0 -7
  461. package/src/daemon/ride-shotgun-handler.ts +9 -13
  462. package/src/daemon/server.ts +136 -510
  463. package/src/daemon/session-agent-loop-handlers.ts +22 -7
  464. package/src/daemon/session-agent-loop.ts +86 -24
  465. package/src/daemon/session-attachments.ts +1 -1
  466. package/src/daemon/session-error.ts +1 -1
  467. package/src/daemon/session-history.ts +20 -15
  468. package/src/daemon/session-lifecycle.ts +9 -7
  469. package/src/daemon/session-memory.ts +15 -1
  470. package/src/daemon/session-messaging.ts +10 -6
  471. package/src/daemon/session-notifiers.ts +10 -8
  472. package/src/daemon/session-process.ts +34 -25
  473. package/src/daemon/session-queue-manager.ts +1 -1
  474. package/src/daemon/session-runtime-assembly.ts +6 -25
  475. package/src/daemon/session-surfaces.ts +2 -2
  476. package/src/daemon/session-tool-setup.ts +1 -1
  477. package/src/daemon/session-usage.ts +119 -18
  478. package/src/daemon/session.ts +13 -9
  479. package/src/daemon/tool-side-effects.ts +6 -5
  480. package/src/daemon/trace-emitter.ts +1 -1
  481. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  482. package/src/daemon/watch-handler.ts +2 -5
  483. package/src/email/service.ts +8 -8
  484. package/src/events/domain-events.ts +0 -1
  485. package/src/events/tool-notification-listener.ts +1 -1
  486. package/src/followups/followup-store.ts +1 -2
  487. package/src/followups/types.ts +0 -6
  488. package/src/heartbeat/heartbeat-service.ts +1 -1
  489. package/src/inbound/platform-callback-registration.ts +1 -1
  490. package/src/inbound/public-ingress-urls.ts +0 -8
  491. package/src/index.ts +12 -0
  492. package/src/mcp/client.ts +1 -1
  493. package/src/mcp/manager.ts +1 -1
  494. package/src/memory/app-store.ts +1 -42
  495. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  496. package/src/memory/conversation-attention-store.ts +154 -0
  497. package/src/memory/conversation-bootstrap.ts +1 -1
  498. package/src/memory/conversation-crud.ts +53 -1
  499. package/src/memory/conversation-display-order-migration.ts +2 -3
  500. package/src/memory/conversation-queries.ts +1 -29
  501. package/src/memory/conversation-title-service.ts +26 -21
  502. package/src/memory/db-connection.ts +1 -8
  503. package/src/memory/db-init.ts +20 -0
  504. package/src/memory/delivery-crud.ts +4 -34
  505. package/src/memory/external-conversation-store.ts +1 -1
  506. package/src/memory/format-recall.ts +47 -0
  507. package/src/memory/guardian-action-store.ts +4 -5
  508. package/src/memory/guardian-rate-limits.ts +0 -3
  509. package/src/memory/invite-store.ts +1 -1
  510. package/src/memory/job-handlers/backfill.ts +9 -2
  511. package/src/memory/job-handlers/extraction.ts +2 -7
  512. package/src/memory/job-handlers/summarization.ts +1 -1
  513. package/src/memory/llm-usage-store.ts +11 -0
  514. package/src/memory/migrations/114-notifications.ts +12 -40
  515. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  516. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  517. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  518. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  519. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  520. package/src/memory/migrations/index.ts +5 -0
  521. package/src/memory/migrations/registry.ts +30 -0
  522. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  523. package/src/memory/retriever.test.ts +707 -0
  524. package/src/memory/retriever.ts +120 -116
  525. package/src/memory/schema/calls.ts +3 -7
  526. package/src/memory/schema/guardian.ts +2 -2
  527. package/src/memory/search/lexical.ts +4 -1
  528. package/src/memory/search/query-expansion.test.ts +70 -0
  529. package/src/memory/search/query-expansion.ts +118 -0
  530. package/src/memory/search/types.ts +18 -17
  531. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  532. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  533. package/src/messaging/registry.ts +0 -1
  534. package/src/notifications/README.md +13 -22
  535. package/src/notifications/adapters/macos.ts +1 -1
  536. package/src/notifications/conversation-pairing.ts +2 -2
  537. package/src/notifications/copy-composer.ts +2 -2
  538. package/src/notifications/decision-engine.ts +1 -10
  539. package/src/notifications/destination-resolver.ts +2 -3
  540. package/src/notifications/emit-signal.ts +2 -8
  541. package/src/notifications/guardian-question-mode.ts +5 -8
  542. package/src/notifications/signal.ts +1 -2
  543. package/src/notifications/types.ts +1 -1
  544. package/src/oauth/token-persistence.ts +25 -1
  545. package/src/permissions/checker.ts +4 -29
  546. package/src/permissions/defaults.ts +6 -6
  547. package/src/permissions/prompter.ts +1 -1
  548. package/src/permissions/secret-prompter.ts +1 -1
  549. package/src/permissions/shell-identity.ts +1 -1
  550. package/src/permissions/trust-store.ts +13 -76
  551. package/src/permissions/workspace-policy.ts +1 -1
  552. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  553. package/src/{config → prompts}/system-prompt.ts +40 -21
  554. package/src/runtime/AGENTS.md +6 -8
  555. package/src/runtime/access-request-helper.ts +36 -55
  556. package/src/runtime/actor-trust-resolver.ts +1 -24
  557. package/src/runtime/approval-message-composer.ts +6 -2
  558. package/src/runtime/assistant-event.ts +1 -1
  559. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  560. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  561. package/src/runtime/auth/route-policy.ts +140 -24
  562. package/src/runtime/auth/subject.ts +9 -0
  563. package/src/runtime/auth/token-service.ts +11 -0
  564. package/src/runtime/auth/types.ts +1 -1
  565. package/src/runtime/channel-approval-types.ts +1 -1
  566. package/src/runtime/channel-approvals.ts +1 -1
  567. package/src/runtime/channel-invite-transport.ts +0 -2
  568. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  569. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  570. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  571. package/src/runtime/channel-readiness-service.ts +24 -159
  572. package/src/runtime/channel-readiness-types.ts +5 -1
  573. package/src/runtime/channel-reply-delivery.ts +43 -3
  574. package/src/runtime/channel-retry-sweep.ts +14 -22
  575. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  576. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  577. package/src/runtime/gateway-client.ts +12 -15
  578. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  579. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  580. package/src/runtime/guardian-action-message-composer.ts +4 -4
  581. package/src/runtime/guardian-reply-router.ts +3 -3
  582. package/src/runtime/http-server.ts +133 -24
  583. package/src/runtime/http-types.ts +34 -1
  584. package/src/runtime/invite-instruction-generator.ts +1 -3
  585. package/src/runtime/invite-redemption-service.ts +5 -5
  586. package/src/runtime/invite-service.ts +7 -7
  587. package/src/runtime/local-actor-identity.ts +28 -2
  588. package/src/runtime/local-gateway-health.ts +275 -0
  589. package/src/runtime/middleware/twilio-validation.ts +3 -3
  590. package/src/runtime/migrations/migration-transport.ts +18 -3
  591. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  592. package/src/runtime/nl-approval-parser.ts +2 -3
  593. package/src/runtime/routes/access-request-decision.ts +2 -2
  594. package/src/runtime/routes/app-management-routes.ts +921 -0
  595. package/src/runtime/routes/approval-routes.ts +76 -7
  596. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  597. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  598. package/src/runtime/routes/channel-route-shared.ts +1 -3
  599. package/src/runtime/routes/channel-routes.ts +1 -4
  600. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  601. package/src/runtime/routes/computer-use-routes.ts +595 -0
  602. package/src/runtime/routes/contact-routes.ts +1 -317
  603. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  604. package/src/runtime/routes/conversation-routes.ts +11 -18
  605. package/src/runtime/routes/debug-routes.ts +1 -1
  606. package/src/runtime/routes/diagnostics-routes.ts +813 -0
  607. package/src/runtime/routes/documents-routes.ts +227 -0
  608. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  609. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  610. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  611. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  612. package/src/runtime/routes/inbound-conversation.ts +3 -10
  613. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  614. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  615. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  616. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  617. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  618. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  619. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  620. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  621. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  622. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  623. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  624. package/src/runtime/routes/integrations/telegram.ts +111 -0
  625. package/src/runtime/routes/integrations/twilio.ts +451 -0
  626. package/src/runtime/routes/invite-routes.ts +2 -2
  627. package/src/runtime/routes/pairing-routes.ts +1 -1
  628. package/src/runtime/routes/recording-routes.ts +332 -0
  629. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  630. package/src/runtime/routes/session-management-routes.ts +167 -0
  631. package/src/runtime/routes/session-query-routes.ts +204 -0
  632. package/src/runtime/routes/settings-routes.ts +977 -0
  633. package/src/runtime/routes/skills-routes.ts +266 -0
  634. package/src/runtime/routes/subagents-routes.ts +246 -0
  635. package/src/runtime/routes/surface-action-routes.ts +100 -10
  636. package/src/runtime/routes/surface-content-routes.ts +1 -1
  637. package/src/runtime/routes/work-items-routes.ts +809 -0
  638. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  639. package/src/runtime/routes/workspace-routes.ts +410 -0
  640. package/src/runtime/routes/workspace-utils.ts +88 -0
  641. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  642. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  643. package/src/runtime/tool-grant-request-helper.ts +1 -2
  644. package/src/runtime/trust-context-resolver.ts +0 -1
  645. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  646. package/src/runtime/verification-rate-limiter.ts +2 -2
  647. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  648. package/src/schedule/integration-status.ts +2 -2
  649. package/src/schedule/schedule-store.ts +7 -9
  650. package/src/sequence/engine.ts +1 -1
  651. package/src/skills/active-skill-tools.ts +0 -8
  652. package/src/skills/clawhub.ts +1 -10
  653. package/src/skills/managed-store.ts +14 -4
  654. package/src/skills/slash-commands.ts +1 -1
  655. package/src/subagent/manager.ts +1 -1
  656. package/src/subagent/types.ts +1 -1
  657. package/src/tasks/SPEC.md +10 -10
  658. package/src/tasks/task-scheduler.ts +1 -1
  659. package/src/telegram/bot-username.ts +13 -0
  660. package/src/tools/assets/materialize.ts +1 -1
  661. package/src/tools/assets/search.ts +1 -1
  662. package/src/tools/browser/browser-execution.ts +2 -2
  663. package/src/tools/browser/browser-manager.ts +88 -11
  664. package/src/tools/browser/browser-screencast.ts +1 -1
  665. package/src/tools/browser/headless-browser.ts +0 -17
  666. package/src/tools/browser/jit-auth.ts +1 -1
  667. package/src/tools/browser/recording-store.ts +19 -1
  668. package/src/tools/browser/runtime-check.ts +4 -2
  669. package/src/tools/calls/call-start.ts +3 -3
  670. package/src/tools/credentials/metadata-store.ts +0 -13
  671. package/src/tools/credentials/vault.ts +7 -31
  672. package/src/tools/followups/followup_create.ts +0 -8
  673. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  674. package/src/tools/memory/definitions.ts +32 -10
  675. package/src/tools/memory/handlers.test.ts +573 -0
  676. package/src/tools/memory/handlers.ts +222 -65
  677. package/src/tools/memory/register.ts +53 -24
  678. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  679. package/src/tools/schedule/update.ts +0 -8
  680. package/src/tools/skills/load.ts +3 -3
  681. package/src/tools/subagent/read.ts +1 -1
  682. package/src/tools/system/voice-config.ts +2 -14
  683. package/src/tools/terminal/safe-env.ts +5 -18
  684. package/src/tools/tool-approval-handler.ts +4 -4
  685. package/src/tools/tool-manifest.ts +4 -2
  686. package/src/tools/types.ts +1 -1
  687. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  688. package/src/twitter/platform-proxy-client.ts +405 -0
  689. package/src/usage/types.ts +21 -0
  690. package/src/util/canonicalize-identity.ts +2 -6
  691. package/src/util/cookie-session.ts +35 -51
  692. package/src/util/platform.ts +93 -86
  693. package/src/util/pricing.ts +180 -43
  694. package/src/work-items/work-item-runner.ts +1 -1
  695. package/scripts/ipc/check-contract-inventory.ts +0 -107
  696. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  697. package/scripts/ipc/generate-swift.ts +0 -528
  698. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  699. package/src/__tests__/app-migration.test.ts +0 -148
  700. package/src/__tests__/config-loader-migration.test.ts +0 -85
  701. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  702. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  703. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  704. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  705. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  706. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  707. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  708. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  709. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  710. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  711. package/src/__tests__/integrations-cli.test.ts +0 -232
  712. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  713. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  714. package/src/__tests__/ipc-contract.test.ts +0 -76
  715. package/src/__tests__/ipc-protocol.test.ts +0 -120
  716. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  717. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  718. package/src/__tests__/ipc-validate.test.ts +0 -471
  719. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  720. package/src/__tests__/migration-ordering.test.ts +0 -267
  721. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  722. package/src/__tests__/platform-move-helper.test.ts +0 -108
  723. package/src/__tests__/platform-socket-path.test.ts +0 -52
  724. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  725. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  726. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  727. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  728. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  729. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  730. package/src/__tests__/work-item-output.test.ts +0 -150
  731. package/src/amazon/session.ts +0 -58
  732. package/src/cli/channels.ts +0 -51
  733. package/src/cli/influencer.ts +0 -319
  734. package/src/cli/integrations.ts +0 -372
  735. package/src/cli/ipc-client.ts +0 -88
  736. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  737. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  738. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  739. package/src/config/core-schema.ts +0 -434
  740. package/src/config/memory-schema.ts +0 -617
  741. package/src/daemon/auth-manager.ts +0 -106
  742. package/src/daemon/handlers/apps.ts +0 -783
  743. package/src/daemon/handlers/avatar.ts +0 -73
  744. package/src/daemon/handlers/browser.ts +0 -3
  745. package/src/daemon/handlers/computer-use.ts +0 -231
  746. package/src/daemon/handlers/config-dispatch.ts +0 -29
  747. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  748. package/src/daemon/handlers/config-inbox.ts +0 -457
  749. package/src/daemon/handlers/config-integrations.ts +0 -409
  750. package/src/daemon/handlers/config-platform.ts +0 -77
  751. package/src/daemon/handlers/config-slack.ts +0 -41
  752. package/src/daemon/handlers/config-tools.ts +0 -226
  753. package/src/daemon/handlers/config-trust.ts +0 -135
  754. package/src/daemon/handlers/config.ts +0 -64
  755. package/src/daemon/handlers/contacts.ts +0 -193
  756. package/src/daemon/handlers/diagnostics.ts +0 -382
  757. package/src/daemon/handlers/documents.ts +0 -188
  758. package/src/daemon/handlers/guardian-actions.ts +0 -82
  759. package/src/daemon/handlers/home-base.ts +0 -82
  760. package/src/daemon/handlers/index.ts +0 -222
  761. package/src/daemon/handlers/misc.ts +0 -1139
  762. package/src/daemon/handlers/navigate-settings.ts +0 -29
  763. package/src/daemon/handlers/oauth-connect.ts +0 -202
  764. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  765. package/src/daemon/handlers/publish.ts +0 -176
  766. package/src/daemon/handlers/signing.ts +0 -56
  767. package/src/daemon/handlers/subagents.ts +0 -286
  768. package/src/daemon/handlers/twitter-auth.ts +0 -220
  769. package/src/daemon/handlers/work-items.ts +0 -796
  770. package/src/daemon/handlers/workspace-files.ts +0 -84
  771. package/src/daemon/handlers.ts +0 -16
  772. package/src/daemon/ipc-blob-store.ts +0 -246
  773. package/src/daemon/ipc-contract-inventory.json +0 -348
  774. package/src/daemon/ipc-contract-inventory.ts +0 -202
  775. package/src/daemon/ipc-handler.ts +0 -120
  776. package/src/daemon/ipc-protocol.ts +0 -85
  777. package/src/daemon/ipc-validate.ts +0 -254
  778. package/src/memory/app-migration.ts +0 -114
  779. package/src/memory/channel-delivery-store.ts +0 -40
  780. package/src/memory/channel-guardian-store.ts +0 -83
  781. package/src/memory/conversation-store.ts +0 -102
  782. package/src/memory/schema-migration.ts +0 -38
  783. package/src/messaging/providers/sms/adapter.ts +0 -232
  784. package/src/messaging/providers/sms/client.ts +0 -93
  785. package/src/messaging/providers/sms/types.ts +0 -7
  786. package/src/migrations/config-merge.ts +0 -62
  787. package/src/migrations/data-layout.ts +0 -89
  788. package/src/migrations/data-merge.ts +0 -44
  789. package/src/migrations/hooks-merge.ts +0 -118
  790. package/src/migrations/index.ts +0 -6
  791. package/src/migrations/log.ts +0 -28
  792. package/src/migrations/skills-merge.ts +0 -44
  793. package/src/migrations/workspace-layout.ts +0 -94
  794. package/src/notifications/adapters/sms.ts +0 -94
  795. package/src/runtime/channel-approval-parser.ts +0 -123
  796. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  797. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  798. package/src/runtime/routes/integration-routes.ts +0 -381
  799. package/src/runtime/routes/twilio-routes.ts +0 -1251
  800. package/src/twitter/router.ts +0 -131
  801. package/src/twitter/session.ts +0 -54
  802. package/src/watcher/providers/slack.ts +0 -282
  803. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  804. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  805. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  806. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  807. /package/src/{twitter → cli/commands/twitter}/oauth-client.ts +0 -0
  808. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  809. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  810. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  811. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  812. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  813. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  814. /package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -0
  815. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  816. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  817. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  818. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  819. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  820. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  821. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  822. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  823. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  824. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  825. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  826. /package/src/daemon/{ipc-contract → message-types}/surfaces.ts +0 -0
  827. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  828. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  829. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  830. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  831. /package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -0
  832. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  833. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  834. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  835. /package/src/{config → prompts}/templates/USER.md +0 -0
  836. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  837. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  838. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  839. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  840. /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");