@vellumai/assistant 0.4.42 → 0.4.44

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 (867) hide show
  1. package/.env.example +1 -6
  2. package/.prettierignore +3 -0
  3. package/ARCHITECTURE.md +140 -403
  4. package/Dockerfile +0 -1
  5. package/README.md +81 -92
  6. package/bun.lock +8 -2
  7. package/docs/architecture/integrations.md +81 -104
  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 -3
  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-asset.test.ts +1 -1
  33. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
  34. package/src/__tests__/call-controller.test.ts +4 -8
  35. package/src/__tests__/call-conversation-messages.test.ts +1 -1
  36. package/src/__tests__/call-domain.test.ts +250 -8
  37. package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
  38. package/src/__tests__/call-pointer-messages.test.ts +7 -11
  39. package/src/__tests__/call-recovery.test.ts +47 -0
  40. package/src/__tests__/call-routes-http.test.ts +13 -0
  41. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  42. package/src/__tests__/callback-handoff-copy.test.ts +5 -5
  43. package/src/__tests__/canonical-guardian-store.test.ts +3 -3
  44. package/src/__tests__/channel-approval-routes.test.ts +101 -134
  45. package/src/__tests__/channel-approval.test.ts +0 -201
  46. package/src/__tests__/channel-approvals.test.ts +2 -2
  47. package/src/__tests__/channel-delivery-store.test.ts +16 -24
  48. package/src/__tests__/channel-guardian.test.ts +641 -740
  49. package/src/__tests__/channel-invite-transport.test.ts +1 -2
  50. package/src/__tests__/channel-policy.test.ts +9 -12
  51. package/src/__tests__/channel-readiness-service.test.ts +156 -45
  52. package/src/__tests__/channel-reply-delivery.test.ts +3 -3
  53. package/src/__tests__/channel-retry-sweep.test.ts +7 -7
  54. package/src/__tests__/checker.test.ts +41 -35
  55. package/src/__tests__/chrome-cdp.test.ts +57 -17
  56. package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
  57. package/src/__tests__/compaction.benchmark.test.ts +25 -5
  58. package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
  59. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  60. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
  61. package/src/__tests__/config-loader-backfill.test.ts +310 -0
  62. package/src/__tests__/config-watcher.test.ts +1 -5
  63. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
  64. package/src/__tests__/connection-policy.test.ts +3 -62
  65. package/src/__tests__/contacts-tools.test.ts +0 -2
  66. package/src/__tests__/context-memory-e2e.test.ts +11 -7
  67. package/src/__tests__/context-overflow-policy.test.ts +2 -2
  68. package/src/__tests__/context-window-manager.test.ts +220 -61
  69. package/src/__tests__/conversation-attention-store.test.ts +178 -2
  70. package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
  71. package/src/__tests__/conversation-pairing.test.ts +14 -14
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +7 -7
  73. package/src/__tests__/conversation-store.test.ts +2 -2
  74. package/src/__tests__/conversation-unread-route.test.ts +155 -0
  75. package/src/__tests__/credential-metadata-store.test.ts +0 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +10 -16
  77. package/src/__tests__/credentials-cli.test.ts +49 -5
  78. package/src/__tests__/daemon-assistant-events.test.ts +4 -22
  79. package/src/__tests__/db-migration-rollback.test.ts +2 -2
  80. package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
  81. package/src/__tests__/dictation-mode-detection.test.ts +1 -1
  82. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
  84. package/src/__tests__/email-cli.test.ts +12 -12
  85. package/src/__tests__/email-service-config-fallback.test.ts +1 -1
  86. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
  87. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  88. package/src/__tests__/event-bus.test.ts +0 -1
  89. package/src/__tests__/followup-tools.test.ts +0 -2
  90. package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
  91. package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
  92. package/src/__tests__/gateway-only-guard.test.ts +5 -0
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
  95. package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
  97. package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
  98. package/src/__tests__/guardian-action-store.test.ts +2 -2
  99. package/src/__tests__/guardian-action-sweep.test.ts +5 -5
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
  101. package/src/__tests__/guardian-dispatch.test.ts +5 -46
  102. package/src/__tests__/guardian-grant-minting.test.ts +5 -44
  103. package/src/__tests__/guardian-outbound-http.test.ts +95 -114
  104. package/src/__tests__/guardian-question-mode.test.ts +1 -4
  105. package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
  106. package/src/__tests__/guardian-routing-state.test.ts +3 -3
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  109. package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
  110. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
  111. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  112. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  113. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  114. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  115. package/src/__tests__/heartbeat-service.test.ts +1 -1
  116. package/src/__tests__/host-shell-tool.test.ts +3 -12
  117. package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
  118. package/src/__tests__/ingress-url-consistency.test.ts +0 -64
  119. package/src/__tests__/integration-status.test.ts +8 -8
  120. package/src/__tests__/intent-routing.test.ts +9 -13
  121. package/src/__tests__/invite-redemption-service.test.ts +4 -4
  122. package/src/__tests__/invite-routes-http.test.ts +10 -10
  123. package/src/__tests__/llm-usage-store.test.ts +45 -9
  124. package/src/__tests__/local-gateway-health.test.ts +209 -0
  125. package/src/__tests__/managed-avatar-client.test.ts +23 -12
  126. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
  127. package/src/__tests__/managed-store.test.ts +29 -12
  128. package/src/__tests__/managed-twitter-guardrails.test.ts +357 -0
  129. package/src/__tests__/mcp-cli.test.ts +1 -1
  130. package/src/__tests__/mcp-health-check.test.ts +1 -1
  131. package/src/__tests__/media-generate-image.test.ts +1 -1
  132. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
  133. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
  134. package/src/__tests__/memory-regressions.test.ts +1 -166
  135. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  136. package/src/__tests__/migration-export-http.test.ts +2 -2
  137. package/src/__tests__/migration-transport.test.ts +44 -0
  138. package/src/__tests__/non-member-access-request.test.ts +49 -36
  139. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  140. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  141. package/src/__tests__/notification-decision-strategy.test.ts +4 -4
  142. package/src/__tests__/notification-deep-link.test.ts +3 -3
  143. package/src/__tests__/notification-guardian-path.test.ts +6 -44
  144. package/src/__tests__/notification-routing-intent.test.ts +11 -7
  145. package/src/__tests__/oauth-cli.test.ts +1 -1
  146. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
  147. package/src/__tests__/onboarding-template-contract.test.ts +2 -12
  148. package/src/__tests__/platform.test.ts +168 -5
  149. package/src/__tests__/playbook-execution.test.ts +0 -2
  150. package/src/__tests__/playbook-tools.test.ts +0 -2
  151. package/src/__tests__/pricing.test.ts +125 -0
  152. package/src/__tests__/provider-error-scenarios.test.ts +9 -3
  153. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  154. package/src/__tests__/recording-handler.test.ts +46 -80
  155. package/src/__tests__/recording-state-machine.test.ts +112 -183
  156. package/src/__tests__/registry.test.ts +1 -1
  157. package/src/__tests__/relay-server.test.ts +69 -71
  158. package/src/__tests__/reminder-store.test.ts +3 -3
  159. package/src/__tests__/request-file-tool.test.ts +2 -2
  160. package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  163. package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
  164. package/src/__tests__/schedule-store.test.ts +13 -4
  165. package/src/__tests__/schedule-tools.test.ts +0 -2
  166. package/src/__tests__/scheduler-recurrence.test.ts +3 -4
  167. package/src/__tests__/scoped-approval-grants.test.ts +3 -5
  168. package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
  169. package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
  170. package/src/__tests__/secret-response-routing.test.ts +1 -1
  171. package/src/__tests__/send-endpoint-busy.test.ts +1 -4
  172. package/src/__tests__/sequence-store.test.ts +0 -2
  173. package/src/__tests__/server-history-render.test.ts +2 -199
  174. package/src/__tests__/session-abort-tool-results.test.ts +9 -3
  175. package/src/__tests__/session-agent-loop.test.ts +107 -3
  176. package/src/__tests__/session-confirmation-signals.test.ts +17 -49
  177. package/src/__tests__/session-conflict-gate.test.ts +9 -3
  178. package/src/__tests__/session-init.benchmark.test.ts +22 -13
  179. package/src/__tests__/session-load-history-repair.test.ts +6 -3
  180. package/src/__tests__/session-pre-run-repair.test.ts +9 -3
  181. package/src/__tests__/session-profile-injection.test.ts +9 -3
  182. package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
  183. package/src/__tests__/session-queue.test.ts +10 -4
  184. package/src/__tests__/session-runtime-assembly.test.ts +28 -18
  185. package/src/__tests__/session-skill-tools.test.ts +2 -3
  186. package/src/__tests__/session-slash-known.test.ts +11 -4
  187. package/src/__tests__/session-slash-queue.test.ts +11 -4
  188. package/src/__tests__/session-slash-unknown.test.ts +12 -4
  189. package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
  190. package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
  191. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
  192. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
  193. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
  194. package/src/__tests__/session-usage.test.ts +180 -0
  195. package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
  196. package/src/__tests__/session-workspace-injection.test.ts +8 -2
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
  199. package/src/__tests__/skill-feature-flags.test.ts +1 -0
  200. package/src/__tests__/skill-include-graph.test.ts +1 -0
  201. package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
  202. package/src/__tests__/skill-load-tool.test.ts +90 -12
  203. package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
  204. package/src/__tests__/skills-uninstall.test.ts +131 -0
  205. package/src/__tests__/skills.test.ts +32 -16
  206. package/src/__tests__/slack-block-formatting.test.ts +1 -1
  207. package/src/__tests__/slack-channel-config.test.ts +71 -12
  208. package/src/__tests__/slack-inbound-verification.test.ts +7 -7
  209. package/src/__tests__/slack-share-routes.test.ts +1 -1
  210. package/src/__tests__/slack-skill.test.ts +2 -2
  211. package/src/__tests__/slash-commands-catalog.test.ts +1 -0
  212. package/src/__tests__/slash-commands-resolver.test.ts +1 -0
  213. package/src/__tests__/starter-task-flow.test.ts +10 -20
  214. package/src/__tests__/subagent-manager-notify.test.ts +1 -1
  215. package/src/__tests__/subagent-tools.test.ts +2 -2
  216. package/src/__tests__/system-prompt.test.ts +7 -12
  217. package/src/__tests__/task-compiler.test.ts +0 -2
  218. package/src/__tests__/task-management-tools.test.ts +0 -2
  219. package/src/__tests__/task-runner.test.ts +0 -2
  220. package/src/__tests__/task-scheduler.test.ts +2 -2
  221. package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
  222. package/src/__tests__/terminal-tools.test.ts +1 -11
  223. package/src/__tests__/thread-seed-composer.test.ts +3 -1
  224. package/src/__tests__/tool-approval-handler.test.ts +5 -7
  225. package/src/__tests__/tool-executor.test.ts +2 -2
  226. package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
  227. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  228. package/src/__tests__/tool-profiling-listener.test.ts +1 -1
  229. package/src/__tests__/tool-trace-listener.test.ts +1 -2
  230. package/src/__tests__/trace-emitter.test.ts +1 -1
  231. package/src/__tests__/trust-context-guards.test.ts +1 -1
  232. package/src/__tests__/trust-store.test.ts +48 -399
  233. package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
  234. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
  235. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
  236. package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
  237. package/src/__tests__/trusted-contact-verification.test.ts +12 -12
  238. package/src/__tests__/twilio-config.test.ts +11 -2
  239. package/src/__tests__/twilio-provider.test.ts +6 -4
  240. package/src/__tests__/twilio-routes.test.ts +408 -86
  241. package/src/__tests__/twitter-platform-proxy-client.test.ts +475 -0
  242. package/src/__tests__/update-bulletin-format.test.ts +1 -1
  243. package/src/__tests__/update-bulletin-state.test.ts +1 -1
  244. package/src/__tests__/update-bulletin.test.ts +4 -8
  245. package/src/__tests__/update-template-contract.test.ts +1 -1
  246. package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
  247. package/src/__tests__/usage-routes.test.ts +23 -5
  248. package/src/__tests__/user-reference.test.ts +1 -1
  249. package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
  250. package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
  251. package/src/__tests__/view-image-tool.test.ts +0 -2
  252. package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
  253. package/src/__tests__/voice-invite-redemption.test.ts +18 -18
  254. package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
  255. package/src/__tests__/voice-session-bridge.test.ts +14 -16
  256. package/src/__tests__/workspace-policy.test.ts +1 -1
  257. package/src/approvals/AGENTS.md +4 -4
  258. package/src/approvals/approval-primitive.ts +2 -2
  259. package/src/approvals/guardian-decision-primitive.ts +1 -1
  260. package/src/approvals/guardian-request-resolvers.ts +3 -4
  261. package/src/bundler/app-bundler.ts +29 -217
  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} +14 -54
  290. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  291. package/src/cli/commands/amazon/session.ts +108 -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} +15 -17
  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/cli/commands/twitter/__tests__/cli-read-routing.test.ts +345 -0
  316. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +252 -0
  317. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -48
  318. package/src/cli/commands/twitter/index.ts +420 -0
  319. package/src/{twitter → cli/commands/twitter}/oauth-client.ts +1 -35
  320. package/src/cli/commands/twitter/router.ts +351 -0
  321. package/src/cli/commands/twitter/types.ts +30 -0
  322. package/src/cli/db.ts +1 -0
  323. package/src/cli/http-client.ts +87 -0
  324. package/src/cli/logger.ts +6 -0
  325. package/src/cli/main-screen.tsx +4 -3
  326. package/src/cli/output.ts +19 -0
  327. package/src/cli/program.ts +29 -27
  328. package/src/cli/reference.ts +27 -37
  329. package/src/cli.ts +452 -240
  330. package/src/config/assistant-feature-flags.ts +3 -15
  331. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  332. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  333. package/src/config/bundled-skills/amazon/SKILL.md +15 -6
  334. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  335. package/src/config/bundled-skills/app-builder/SKILL.md +4 -9
  336. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  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 +23 -77
  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 -12
  348. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -90
  349. package/src/config/bundled-skills/doordash/doordash-cli.ts +132 -109
  350. package/src/config/bundled-skills/doordash/lib/session.ts +22 -19
  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 +73 -144
  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 +8 -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 +196 -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 +151 -105
  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 +155 -55
  452. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  453. package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -25
  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 +30 -20
  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 +7 -1
  460. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  461. package/src/daemon/{ipc-contract → message-types}/surfaces.ts +2 -0
  462. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  463. package/src/daemon/providers-setup.ts +0 -5
  464. package/src/daemon/recording-executor.ts +0 -7
  465. package/src/daemon/ride-shotgun-handler.ts +42 -14
  466. package/src/daemon/seed-files.ts +3 -27
  467. package/src/daemon/server.ts +134 -524
  468. package/src/daemon/session-agent-loop-handlers.ts +46 -9
  469. package/src/daemon/session-agent-loop.ts +86 -24
  470. package/src/daemon/session-attachments.ts +1 -1
  471. package/src/daemon/session-error.ts +1 -1
  472. package/src/daemon/session-history.ts +20 -15
  473. package/src/daemon/session-lifecycle.ts +9 -7
  474. package/src/daemon/session-memory.ts +15 -1
  475. package/src/daemon/session-messaging.ts +10 -6
  476. package/src/daemon/session-notifiers.ts +10 -8
  477. package/src/daemon/session-process.ts +34 -25
  478. package/src/daemon/session-queue-manager.ts +1 -1
  479. package/src/daemon/session-runtime-assembly.ts +6 -32
  480. package/src/daemon/session-surfaces.ts +187 -35
  481. package/src/daemon/session-tool-setup.ts +1 -1
  482. package/src/daemon/session-usage.ts +119 -18
  483. package/src/daemon/session.ts +11 -33
  484. package/src/daemon/tool-side-effects.ts +6 -5
  485. package/src/daemon/trace-emitter.ts +1 -1
  486. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  487. package/src/daemon/watch-handler.ts +2 -5
  488. package/src/email/service.ts +8 -8
  489. package/src/events/domain-events.ts +0 -1
  490. package/src/events/tool-notification-listener.ts +1 -1
  491. package/src/followups/followup-store.ts +1 -2
  492. package/src/followups/types.ts +0 -6
  493. package/src/heartbeat/heartbeat-service.ts +1 -1
  494. package/src/inbound/platform-callback-registration.ts +1 -1
  495. package/src/inbound/public-ingress-urls.ts +0 -8
  496. package/src/index.ts +12 -0
  497. package/src/mcp/client.ts +1 -1
  498. package/src/mcp/manager.ts +1 -1
  499. package/src/memory/app-store.ts +1 -60
  500. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  501. package/src/memory/conversation-attention-store.ts +154 -0
  502. package/src/memory/conversation-bootstrap.ts +1 -1
  503. package/src/memory/conversation-crud.ts +53 -1
  504. package/src/memory/conversation-display-order-migration.ts +2 -3
  505. package/src/memory/conversation-queries.ts +1 -29
  506. package/src/memory/conversation-title-service.ts +26 -21
  507. package/src/memory/db-connection.ts +1 -8
  508. package/src/memory/db-init.ts +20 -0
  509. package/src/memory/delivery-crud.ts +4 -34
  510. package/src/memory/external-conversation-store.ts +1 -1
  511. package/src/memory/format-recall.ts +47 -0
  512. package/src/memory/guardian-action-store.ts +4 -5
  513. package/src/memory/guardian-rate-limits.ts +0 -3
  514. package/src/memory/invite-store.ts +1 -1
  515. package/src/memory/job-handlers/backfill.ts +9 -2
  516. package/src/memory/job-handlers/extraction.ts +2 -7
  517. package/src/memory/job-handlers/summarization.ts +1 -1
  518. package/src/memory/llm-usage-store.ts +11 -0
  519. package/src/memory/migrations/114-notifications.ts +12 -40
  520. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  521. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  522. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  523. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  524. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  525. package/src/memory/migrations/index.ts +5 -0
  526. package/src/memory/migrations/registry.ts +30 -0
  527. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  528. package/src/memory/retriever.test.ts +707 -0
  529. package/src/memory/retriever.ts +120 -116
  530. package/src/memory/schema/calls.ts +3 -7
  531. package/src/memory/schema/guardian.ts +2 -2
  532. package/src/memory/schema/infrastructure.ts +0 -8
  533. package/src/memory/search/lexical.ts +4 -1
  534. package/src/memory/search/query-expansion.test.ts +70 -0
  535. package/src/memory/search/query-expansion.ts +118 -0
  536. package/src/memory/search/types.ts +18 -17
  537. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  538. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  539. package/src/messaging/registry.ts +0 -1
  540. package/src/notifications/README.md +13 -22
  541. package/src/notifications/adapters/macos.ts +1 -1
  542. package/src/notifications/conversation-pairing.ts +2 -2
  543. package/src/notifications/copy-composer.ts +2 -2
  544. package/src/notifications/decision-engine.ts +1 -10
  545. package/src/notifications/destination-resolver.ts +2 -3
  546. package/src/notifications/emit-signal.ts +2 -8
  547. package/src/notifications/guardian-question-mode.ts +5 -8
  548. package/src/notifications/signal.ts +1 -2
  549. package/src/notifications/types.ts +1 -1
  550. package/src/oauth/token-persistence.ts +25 -1
  551. package/src/permissions/checker.ts +4 -29
  552. package/src/permissions/defaults.ts +9 -9
  553. package/src/permissions/prompter.ts +1 -1
  554. package/src/permissions/secret-prompter.ts +1 -1
  555. package/src/permissions/shell-identity.ts +1 -1
  556. package/src/permissions/trust-store.ts +13 -76
  557. package/src/permissions/workspace-policy.ts +1 -1
  558. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  559. package/src/{config → prompts}/system-prompt.ts +44 -26
  560. package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -3
  561. package/src/providers/registry.ts +2 -4
  562. package/src/runtime/AGENTS.md +6 -8
  563. package/src/runtime/access-request-helper.ts +36 -55
  564. package/src/runtime/actor-trust-resolver.ts +1 -24
  565. package/src/runtime/approval-message-composer.ts +6 -2
  566. package/src/runtime/assistant-event.ts +1 -1
  567. package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
  568. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  569. package/src/runtime/auth/__tests__/scopes.test.ts +2 -1
  570. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  571. package/src/runtime/auth/route-policy.ts +137 -25
  572. package/src/runtime/auth/scopes.ts +1 -0
  573. package/src/runtime/auth/subject.ts +9 -0
  574. package/src/runtime/auth/token-service.ts +12 -1
  575. package/src/runtime/auth/types.ts +1 -1
  576. package/src/runtime/channel-approval-types.ts +1 -1
  577. package/src/runtime/channel-approvals.ts +1 -1
  578. package/src/runtime/channel-invite-transport.ts +0 -2
  579. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  580. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  581. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  582. package/src/runtime/channel-readiness-service.ts +24 -159
  583. package/src/runtime/channel-readiness-types.ts +5 -1
  584. package/src/runtime/channel-reply-delivery.ts +43 -3
  585. package/src/runtime/channel-retry-sweep.ts +14 -22
  586. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  587. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  588. package/src/runtime/gateway-client.ts +12 -15
  589. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  590. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  591. package/src/runtime/guardian-action-message-composer.ts +4 -4
  592. package/src/runtime/guardian-reply-router.ts +3 -3
  593. package/src/runtime/http-server.ts +133 -24
  594. package/src/runtime/http-types.ts +44 -1
  595. package/src/runtime/invite-instruction-generator.ts +1 -3
  596. package/src/runtime/invite-redemption-service.ts +5 -5
  597. package/src/runtime/invite-service.ts +7 -7
  598. package/src/runtime/local-actor-identity.ts +28 -2
  599. package/src/runtime/local-gateway-health.ts +275 -0
  600. package/src/runtime/middleware/error-handler.ts +14 -1
  601. package/src/runtime/middleware/twilio-validation.ts +3 -3
  602. package/src/runtime/migrations/migration-transport.ts +18 -3
  603. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  604. package/src/runtime/nl-approval-parser.ts +2 -3
  605. package/src/runtime/routes/access-request-decision.ts +2 -2
  606. package/src/runtime/routes/app-management-routes.ts +918 -0
  607. package/src/runtime/routes/approval-routes.ts +76 -7
  608. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  609. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  610. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  611. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  612. package/src/runtime/routes/channel-route-shared.ts +1 -3
  613. package/src/runtime/routes/channel-routes.ts +1 -4
  614. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  615. package/src/runtime/routes/computer-use-routes.ts +595 -0
  616. package/src/runtime/routes/contact-routes.ts +1 -317
  617. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  618. package/src/runtime/routes/conversation-routes.ts +20 -24
  619. package/src/runtime/routes/debug-routes.ts +1 -1
  620. package/src/runtime/routes/diagnostics-routes.ts +890 -0
  621. package/src/runtime/routes/documents-routes.ts +227 -0
  622. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  623. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  624. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  625. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  626. package/src/runtime/routes/inbound-conversation.ts +3 -10
  627. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  628. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  629. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  630. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  631. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  632. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  633. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  634. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  635. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  636. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  637. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  638. package/src/runtime/routes/integrations/telegram.ts +111 -0
  639. package/src/runtime/routes/integrations/twilio.ts +451 -0
  640. package/src/runtime/routes/invite-routes.ts +2 -2
  641. package/src/runtime/routes/pairing-routes.ts +1 -1
  642. package/src/runtime/routes/recording-routes.ts +332 -0
  643. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  644. package/src/runtime/routes/session-management-routes.ts +167 -0
  645. package/src/runtime/routes/session-query-routes.ts +204 -0
  646. package/src/runtime/routes/settings-routes.ts +887 -0
  647. package/src/runtime/routes/skills-routes.ts +266 -0
  648. package/src/runtime/routes/subagents-routes.ts +246 -0
  649. package/src/runtime/routes/surface-action-routes.ts +100 -10
  650. package/src/runtime/routes/surface-content-routes.ts +1 -1
  651. package/src/runtime/routes/work-items-routes.ts +809 -0
  652. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  653. package/src/runtime/routes/workspace-routes.ts +410 -0
  654. package/src/runtime/routes/workspace-utils.ts +88 -0
  655. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  656. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  657. package/src/runtime/tool-grant-request-helper.ts +1 -2
  658. package/src/runtime/trust-context-resolver.ts +0 -1
  659. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  660. package/src/runtime/verification-rate-limiter.ts +2 -2
  661. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  662. package/src/schedule/integration-status.ts +2 -2
  663. package/src/schedule/schedule-store.ts +7 -9
  664. package/src/sequence/engine.ts +1 -1
  665. package/src/skills/active-skill-tools.ts +0 -8
  666. package/src/skills/clawhub.ts +1 -10
  667. package/src/skills/managed-store.ts +14 -4
  668. package/src/skills/slash-commands.ts +1 -1
  669. package/src/subagent/manager.ts +1 -1
  670. package/src/subagent/types.ts +1 -1
  671. package/src/tasks/SPEC.md +10 -10
  672. package/src/tasks/task-scheduler.ts +1 -1
  673. package/src/telegram/bot-username.ts +13 -0
  674. package/src/tools/AGENTS.md +38 -0
  675. package/src/tools/apps/executors.ts +0 -6
  676. package/src/tools/assets/materialize.ts +1 -1
  677. package/src/tools/assets/search.ts +1 -1
  678. package/src/tools/browser/browser-execution.ts +2 -2
  679. package/src/tools/browser/browser-manager.ts +88 -11
  680. package/src/tools/browser/browser-screencast.ts +1 -1
  681. package/src/tools/browser/headless-browser.ts +0 -17
  682. package/src/tools/browser/jit-auth.ts +1 -1
  683. package/src/tools/browser/recording-store.ts +19 -1
  684. package/src/tools/browser/runtime-check.ts +4 -2
  685. package/src/tools/calls/call-start.ts +3 -3
  686. package/src/tools/credentials/metadata-store.ts +0 -13
  687. package/src/tools/credentials/vault.ts +7 -31
  688. package/src/tools/document/editor-template.ts +10 -8
  689. package/src/tools/followups/followup_create.ts +0 -8
  690. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  691. package/src/tools/memory/definitions.ts +32 -10
  692. package/src/tools/memory/handlers.test.ts +573 -0
  693. package/src/tools/memory/handlers.ts +222 -65
  694. package/src/tools/memory/register.ts +53 -24
  695. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  696. package/src/tools/schedule/update.ts +0 -8
  697. package/src/tools/skills/load.ts +3 -3
  698. package/src/tools/subagent/read.ts +1 -1
  699. package/src/tools/system/voice-config.ts +2 -14
  700. package/src/tools/terminal/safe-env.ts +5 -18
  701. package/src/tools/tool-approval-handler.ts +4 -4
  702. package/src/tools/tool-manifest.ts +4 -2
  703. package/src/tools/types.ts +1 -1
  704. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  705. package/src/twitter/platform-proxy-client.ts +408 -0
  706. package/src/usage/types.ts +21 -0
  707. package/src/util/canonicalize-identity.ts +2 -6
  708. package/src/util/errors.ts +12 -0
  709. package/src/util/platform.ts +93 -86
  710. package/src/util/pricing.ts +180 -43
  711. package/src/work-items/work-item-runner.ts +1 -1
  712. package/scripts/ipc/check-contract-inventory.ts +0 -107
  713. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  714. package/scripts/ipc/generate-swift.ts +0 -528
  715. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  716. package/src/__tests__/app-migration.test.ts +0 -148
  717. package/src/__tests__/config-loader-migration.test.ts +0 -85
  718. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  719. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  720. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  721. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  722. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  723. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  724. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  725. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  726. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  727. package/src/__tests__/home-base-bootstrap.test.ts +0 -86
  728. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  729. package/src/__tests__/integrations-cli.test.ts +0 -232
  730. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  731. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  732. package/src/__tests__/ipc-contract.test.ts +0 -76
  733. package/src/__tests__/ipc-protocol.test.ts +0 -120
  734. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  735. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  736. package/src/__tests__/ipc-validate.test.ts +0 -471
  737. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  738. package/src/__tests__/migration-ordering.test.ts +0 -267
  739. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  740. package/src/__tests__/platform-move-helper.test.ts +0 -108
  741. package/src/__tests__/platform-socket-path.test.ts +0 -52
  742. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  743. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  744. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  745. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  746. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  747. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  748. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  749. package/src/__tests__/twitter-cli-error-shaping.test.ts +0 -224
  750. package/src/__tests__/twitter-cli-routing.test.ts +0 -286
  751. package/src/__tests__/work-item-output.test.ts +0 -150
  752. package/src/amazon/session.ts +0 -58
  753. package/src/cli/channels.ts +0 -51
  754. package/src/cli/influencer.ts +0 -319
  755. package/src/cli/integrations.ts +0 -372
  756. package/src/cli/ipc-client.ts +0 -88
  757. package/src/cli/twitter.ts +0 -1111
  758. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  759. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  760. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  761. package/src/config/core-schema.ts +0 -434
  762. package/src/config/memory-schema.ts +0 -617
  763. package/src/daemon/auth-manager.ts +0 -106
  764. package/src/daemon/handlers/apps.ts +0 -783
  765. package/src/daemon/handlers/avatar.ts +0 -73
  766. package/src/daemon/handlers/browser.ts +0 -3
  767. package/src/daemon/handlers/computer-use.ts +0 -231
  768. package/src/daemon/handlers/config-dispatch.ts +0 -29
  769. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  770. package/src/daemon/handlers/config-inbox.ts +0 -457
  771. package/src/daemon/handlers/config-integrations.ts +0 -409
  772. package/src/daemon/handlers/config-platform.ts +0 -77
  773. package/src/daemon/handlers/config-slack.ts +0 -41
  774. package/src/daemon/handlers/config-tools.ts +0 -226
  775. package/src/daemon/handlers/config-trust.ts +0 -135
  776. package/src/daemon/handlers/config.ts +0 -64
  777. package/src/daemon/handlers/contacts.ts +0 -193
  778. package/src/daemon/handlers/diagnostics.ts +0 -382
  779. package/src/daemon/handlers/documents.ts +0 -188
  780. package/src/daemon/handlers/guardian-actions.ts +0 -82
  781. package/src/daemon/handlers/home-base.ts +0 -82
  782. package/src/daemon/handlers/index.ts +0 -222
  783. package/src/daemon/handlers/misc.ts +0 -1139
  784. package/src/daemon/handlers/navigate-settings.ts +0 -29
  785. package/src/daemon/handlers/oauth-connect.ts +0 -202
  786. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  787. package/src/daemon/handlers/publish.ts +0 -176
  788. package/src/daemon/handlers/signing.ts +0 -56
  789. package/src/daemon/handlers/subagents.ts +0 -286
  790. package/src/daemon/handlers/twitter-auth.ts +0 -220
  791. package/src/daemon/handlers/work-items.ts +0 -796
  792. package/src/daemon/handlers/workspace-files.ts +0 -84
  793. package/src/daemon/handlers.ts +0 -16
  794. package/src/daemon/ipc-blob-store.ts +0 -246
  795. package/src/daemon/ipc-contract-inventory.json +0 -348
  796. package/src/daemon/ipc-contract-inventory.ts +0 -202
  797. package/src/daemon/ipc-handler.ts +0 -120
  798. package/src/daemon/ipc-protocol.ts +0 -85
  799. package/src/daemon/ipc-validate.ts +0 -254
  800. package/src/home-base/app-link-store.ts +0 -78
  801. package/src/home-base/bootstrap.ts +0 -74
  802. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  803. package/src/home-base/prebuilt/index.html +0 -702
  804. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  805. package/src/home-base/prebuilt/seed.ts +0 -122
  806. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  807. package/src/memory/app-migration.ts +0 -114
  808. package/src/memory/channel-delivery-store.ts +0 -40
  809. package/src/memory/channel-guardian-store.ts +0 -83
  810. package/src/memory/conversation-store.ts +0 -102
  811. package/src/memory/schema-migration.ts +0 -38
  812. package/src/messaging/providers/sms/adapter.ts +0 -232
  813. package/src/messaging/providers/sms/client.ts +0 -93
  814. package/src/messaging/providers/sms/types.ts +0 -7
  815. package/src/migrations/config-merge.ts +0 -62
  816. package/src/migrations/data-layout.ts +0 -89
  817. package/src/migrations/data-merge.ts +0 -44
  818. package/src/migrations/hooks-merge.ts +0 -118
  819. package/src/migrations/index.ts +0 -6
  820. package/src/migrations/log.ts +0 -28
  821. package/src/migrations/skills-merge.ts +0 -44
  822. package/src/migrations/workspace-layout.ts +0 -94
  823. package/src/notifications/adapters/sms.ts +0 -94
  824. package/src/runtime/channel-approval-parser.ts +0 -123
  825. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  826. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  827. package/src/runtime/routes/integration-routes.ts +0 -381
  828. package/src/runtime/routes/twilio-routes.ts +0 -1251
  829. package/src/twitter/client.ts +0 -979
  830. package/src/twitter/router.ts +0 -131
  831. package/src/twitter/session.ts +0 -54
  832. package/src/util/cookie-session.ts +0 -114
  833. package/src/watcher/providers/slack.ts +0 -282
  834. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  835. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  836. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  837. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  838. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  839. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  840. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  841. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  842. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  843. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  844. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  845. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  846. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  847. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  848. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  849. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  850. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  851. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  852. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  853. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  854. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  855. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  856. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  857. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  858. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  859. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  860. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  861. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  862. /package/src/{config → prompts}/templates/USER.md +0 -0
  863. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  864. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  865. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  866. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  867. /package/src/{config → prompts}/user-reference.ts +0 -0
@@ -18,8 +18,10 @@ import {
18
18
  unregisterCallTranscriptNotifier,
19
19
  } from "../calls/call-state.js";
20
20
  import { getCallSession } from "../calls/call-store.js";
21
- import * as conversationStore from "../memory/conversation-store.js";
22
- import { provenanceFromTrustContext } from "../memory/conversation-store.js";
21
+ import {
22
+ addMessage,
23
+ provenanceFromTrustContext,
24
+ } from "../memory/conversation-crud.js";
23
25
  import type { Message } from "../providers/types.js";
24
26
  import type { WatchSession } from "../tools/watch/watch-state.js";
25
27
  import {
@@ -31,7 +33,7 @@ import {
31
33
  unregisterWatchCompletionNotifier,
32
34
  unregisterWatchStartNotifier,
33
35
  } from "../tools/watch/watch-state.js";
34
- import type { ServerMessage } from "./ipc-protocol.js";
36
+ import type { ServerMessage } from "./message-protocol.js";
35
37
  import type { TrustContext } from "./session-runtime-assembly.js";
36
38
  import {
37
39
  lastCommentaryBySession,
@@ -106,16 +108,16 @@ export function registerSessionNotifiers(
106
108
  const callee = callSession?.toNumber ?? "the caller";
107
109
  const questionText = `**Live call question** (to ${callee}):\n\n${question}\n\n_Use the call answer API to respond._`;
108
110
 
109
- await conversationStore.addMessage(
111
+ await addMessage(
110
112
  conversationId,
111
113
  "assistant",
112
114
  JSON.stringify([{ type: "text", text: questionText }]),
113
115
  {
114
116
  ...provenanceFromTrustContext(ctx.trustContext),
115
- userMessageChannel: "voice",
116
- assistantMessageChannel: "voice",
117
- userMessageInterface: "voice",
118
- assistantMessageInterface: "voice",
117
+ userMessageChannel: "phone",
118
+ assistantMessageChannel: "phone",
119
+ userMessageInterface: "phone",
120
+ assistantMessageInterface: "phone",
119
121
  },
120
122
  );
121
123
 
@@ -17,21 +17,28 @@ import type {
17
17
  import { parseChannelId, parseInterfaceId } from "../channels/types.js";
18
18
  import { getConfig } from "../config/loader.js";
19
19
  import { listPendingRequestsByConversationScope } from "../memory/canonical-guardian-store.js";
20
- import * as conversationStore from "../memory/conversation-store.js";
21
- import { provenanceFromTrustContext } from "../memory/conversation-store.js";
20
+ import {
21
+ addMessage,
22
+ provenanceFromTrustContext,
23
+ setConversationOriginChannelIfUnset,
24
+ setConversationOriginInterfaceIfUnset,
25
+ } from "../memory/conversation-crud.js";
22
26
  import { extractPreferences } from "../notifications/preference-extractor.js";
23
27
  import { createPreference } from "../notifications/preferences-store.js";
24
28
  import type { Message } from "../providers/types.js";
25
29
  import { routeGuardianReply } from "../runtime/guardian-reply-router.js";
26
30
  import { getLogger } from "../util/logger.js";
27
- import { resolveGuardianVerificationIntent } from "./guardian-verification-intent.js";
28
- import type { UsageStats } from "./ipc-contract.js";
29
- import type { ServerMessage, UserMessageAttachment } from "./ipc-protocol.js";
31
+ import type {
32
+ ServerMessage,
33
+ UsageStats,
34
+ UserMessageAttachment,
35
+ } from "./message-protocol.js";
30
36
  import type { MessageQueue } from "./session-queue-manager.js";
31
37
  import type { QueueDrainReason } from "./session-queue-manager.js";
32
38
  import type { TrustContext } from "./session-runtime-assembly.js";
33
39
  import { resolveSlash, type SlashContext } from "./session-slash.js";
34
40
  import type { TraceEmitter } from "./trace-emitter.js";
41
+ import { resolveVerificationSessionIntent } from "./verification-session-intent.js";
35
42
 
36
43
  const log = getLogger("session-process");
37
44
 
@@ -287,7 +294,7 @@ export async function drainQueue(
287
294
  createUserMessage(next.displayContent, next.attachments).content,
288
295
  )
289
296
  : JSON.stringify(userMsg.content);
290
- await conversationStore.addMessage(
297
+ await addMessage(
291
298
  session.conversationId,
292
299
  "user",
293
300
  contentToPersist,
@@ -296,7 +303,7 @@ export async function drainQueue(
296
303
  session.messages.push(userMsg);
297
304
 
298
305
  const assistantMsg = createAssistantMessage(slashResult.message);
299
- await conversationStore.addMessage(
306
+ await addMessage(
300
307
  session.conversationId,
301
308
  "assistant",
302
309
  JSON.stringify(assistantMsg.content),
@@ -305,13 +312,13 @@ export async function drainQueue(
305
312
  session.messages.push(assistantMsg);
306
313
 
307
314
  if (queuedTurnCtx) {
308
- conversationStore.setConversationOriginChannelIfUnset(
315
+ setConversationOriginChannelIfUnset(
309
316
  session.conversationId,
310
317
  queuedTurnCtx.userMessageChannel,
311
318
  );
312
319
  }
313
320
  if (queuedInterfaceCtx) {
314
- conversationStore.setConversationOriginInterfaceIfUnset(
321
+ setConversationOriginInterfaceIfUnset(
315
322
  session.conversationId,
316
323
  queuedInterfaceCtx.userMessageInterface,
317
324
  );
@@ -373,16 +380,17 @@ export async function drainQueue(
373
380
  // loop receives the rewritten instruction.
374
381
  let agentLoopContent = resolvedContent;
375
382
  if (slashResult.kind === "passthrough") {
376
- const guardianIntent = resolveGuardianVerificationIntent(resolvedContent);
377
- if (guardianIntent.kind === "direct_setup") {
383
+ const verificationIntent =
384
+ resolveVerificationSessionIntent(resolvedContent);
385
+ if (verificationIntent.kind === "direct_setup") {
378
386
  log.info(
379
387
  {
380
388
  conversationId: session.conversationId,
381
- channelHint: guardianIntent.channelHint,
389
+ channelHint: verificationIntent.channelHint,
382
390
  },
383
- "Guardian verification intent intercepted in queue — forcing skill flow",
391
+ "Verification session intent intercepted in queue — forcing skill flow",
384
392
  );
385
- agentLoopContent = guardianIntent.rewrittenContent;
393
+ agentLoopContent = verificationIntent.rewrittenContent;
386
394
  session.preactivatedSkillIds = ["guardian-verify-setup"];
387
395
  }
388
396
  }
@@ -566,7 +574,7 @@ export async function processMessage(
566
574
  };
567
575
 
568
576
  const userMsg = createUserMessage(content, attachments);
569
- const persisted = await conversationStore.addMessage(
577
+ const persisted = await addMessage(
570
578
  session.conversationId,
571
579
  "user",
572
580
  JSON.stringify(userMsg.content),
@@ -580,7 +588,7 @@ export async function processMessage(
580
588
  ? "Decision applied."
581
589
  : "Request already resolved.");
582
590
  const assistantMsg = createAssistantMessage(replyText);
583
- await conversationStore.addMessage(
591
+ await addMessage(
584
592
  session.conversationId,
585
593
  "assistant",
586
594
  JSON.stringify(assistantMsg.content),
@@ -636,7 +644,7 @@ export async function processMessage(
636
644
  const contentToPersist = displayContent
637
645
  ? JSON.stringify(createUserMessage(displayContent, attachments).content)
638
646
  : JSON.stringify(userMsg.content);
639
- const persisted = await conversationStore.addMessage(
647
+ const persisted = await addMessage(
640
648
  session.conversationId,
641
649
  "user",
642
650
  contentToPersist,
@@ -645,7 +653,7 @@ export async function processMessage(
645
653
  session.messages.push(userMsg);
646
654
 
647
655
  const assistantMsg = createAssistantMessage(slashResult.message);
648
- await conversationStore.addMessage(
656
+ await addMessage(
649
657
  session.conversationId,
650
658
  "assistant",
651
659
  JSON.stringify(assistantMsg.content),
@@ -654,13 +662,13 @@ export async function processMessage(
654
662
  session.messages.push(assistantMsg);
655
663
 
656
664
  if (pmTurnCtx) {
657
- conversationStore.setConversationOriginChannelIfUnset(
665
+ setConversationOriginChannelIfUnset(
658
666
  session.conversationId,
659
667
  pmTurnCtx.userMessageChannel,
660
668
  );
661
669
  }
662
670
  if (pmInterfaceCtx) {
663
- conversationStore.setConversationOriginInterfaceIfUnset(
671
+ setConversationOriginInterfaceIfUnset(
664
672
  session.conversationId,
665
673
  pmInterfaceCtx.userMessageInterface,
666
674
  );
@@ -698,16 +706,17 @@ export async function processMessage(
698
706
  // rewritten content only for the agent loop instruction.
699
707
  let agentLoopContent = resolvedContent;
700
708
  if (slashResult.kind === "passthrough") {
701
- const guardianIntent = resolveGuardianVerificationIntent(resolvedContent);
702
- if (guardianIntent.kind === "direct_setup") {
709
+ const verificationIntent =
710
+ resolveVerificationSessionIntent(resolvedContent);
711
+ if (verificationIntent.kind === "direct_setup") {
703
712
  log.info(
704
713
  {
705
714
  conversationId: session.conversationId,
706
- channelHint: guardianIntent.channelHint,
715
+ channelHint: verificationIntent.channelHint,
707
716
  },
708
- "Guardian verification intent intercepted — forcing skill flow",
717
+ "Verification session intent intercepted — forcing skill flow",
709
718
  );
710
- agentLoopContent = guardianIntent.rewrittenContent;
719
+ agentLoopContent = verificationIntent.rewrittenContent;
711
720
  session.preactivatedSkillIds = ["guardian-verify-setup"];
712
721
  }
713
722
  }
@@ -10,7 +10,7 @@ import type {
10
10
  TurnInterfaceContext,
11
11
  } from "../channels/types.js";
12
12
  import { getLogger } from "../util/logger.js";
13
- import type { ServerMessage, UserMessageAttachment } from "./ipc-protocol.js";
13
+ import type { ServerMessage, UserMessageAttachment } from "./message-protocol.js";
14
14
 
15
15
  const log = getLogger("session-queue");
16
16
 
@@ -25,7 +25,7 @@ import { channelStatusToMemberStatus } from "../runtime/routes/inbound-stages/ac
25
25
  * interacting. Used to gate UI-specific references and permission asks.
26
26
  */
27
27
  export interface ChannelCapabilities {
28
- /** The raw channel identifier (e.g. "vellum", "telegram", "sms"). */
28
+ /** The raw channel identifier (e.g. "vellum", "telegram"). */
29
29
  channel: string;
30
30
  /** Whether this channel can render the dashboard UI (apps, dynamic pages). */
31
31
  dashboardCapable: boolean;
@@ -81,8 +81,6 @@ export interface TrustContext {
81
81
  requesterExternalUserId?: string;
82
82
  /** Chat/conversation ID the requester is interacting through. */
83
83
  requesterChatId?: string;
84
- /** Access denial reason, if applicable. See {@link DenialReason}. */
85
- denialReason?: "no_binding" | "no_identity";
86
84
  }
87
85
 
88
86
  /**
@@ -113,8 +111,6 @@ export interface InboundActorContext {
113
111
  memberStatus?: string;
114
112
  /** Member policy when the actor has a contact record. */
115
113
  memberPolicy?: string;
116
- /** Denial reason when access is blocked. */
117
- denialReason?: string;
118
114
  /** Free-text notes about this contact. */
119
115
  contactNotes?: string;
120
116
  /** Number of prior interactions with this contact. */
@@ -138,7 +134,6 @@ export function inboundActorContextFromTrustContext(
138
134
  actorMemberDisplayName: ctx.requesterMemberDisplayName,
139
135
  trustClass: ctx.trustClass,
140
136
  guardianIdentity: ctx.guardianExternalUserId,
141
- denialReason: ctx.denialReason,
142
137
  };
143
138
  }
144
139
 
@@ -162,28 +157,22 @@ export function inboundActorContextFromTrust(
162
157
  ? channelStatusToMemberStatus(ctx.memberRecord.channel.status)
163
158
  : undefined,
164
159
  memberPolicy: ctx.memberRecord?.channel.policy ?? undefined,
165
- denialReason: ctx.denialReason,
166
160
  contactNotes: ctx.memberRecord?.contact.notes ?? undefined,
167
161
  contactInteractionCount:
168
162
  ctx.memberRecord?.contact.interactionCount ?? undefined,
169
163
  };
170
164
  }
171
165
 
172
- /** Legacy push-to-talk activation key values (pre-custom-key support). */
173
- const PTT_KEY_LEGACY = new Set(["fn", "ctrl", "fn_shift", "none"]);
174
-
175
166
  /**
176
- * Validate a PTT activation key string. Accepts both legacy string values
177
- * (fn, ctrl, fn_shift, none) and JSON PTTActivator payloads from the
178
- * custom key feature. Returns the key as-is if valid, undefined otherwise.
167
+ * Validate a PTT activation key string. Accepts JSON PTTActivator payloads
168
+ * from the custom key feature. Returns the key as-is if valid, undefined otherwise.
179
169
  */
180
170
  export function sanitizePttActivationKey(
181
171
  key: string | undefined | null,
182
172
  ): string | undefined {
183
173
  if (key == null) return undefined;
184
- if (PTT_KEY_LEGACY.has(key)) return key;
185
174
 
186
- // Try parsing as a JSON PTTActivator payload
175
+ // Parse as a JSON PTTActivator payload
187
176
  if (key.startsWith("{")) {
188
177
  try {
189
178
  const parsed = JSON.parse(key) as { kind?: string };
@@ -247,14 +236,8 @@ const KEY_CODE_NAMES: Record<number, string> = {
247
236
  57: "Caps Lock",
248
237
  };
249
238
 
250
- /** Derive a human-readable label from a PTT activation key value (legacy string or JSON). */
239
+ /** Derive a human-readable label from a PTT activation key JSON value. */
251
240
  function pttKeyLabel(raw: string): string {
252
- // Legacy string values
253
- if (raw === "fn") return "Fn (Globe)";
254
- if (raw === "ctrl") return "Ctrl";
255
- if (raw === "fn_shift") return "Fn+Shift";
256
- if (raw === "none") return "none";
257
-
258
241
  // JSON PTTActivator payload
259
242
  if (raw.startsWith("{")) {
260
243
  try {
@@ -362,8 +345,7 @@ export function resolveChannelCapabilities(
362
345
  };
363
346
  }
364
347
  case "telegram":
365
- case "sms":
366
- case "voice":
348
+ case "phone":
367
349
  case "whatsapp":
368
350
  case "slack":
369
351
  case "email":
@@ -439,13 +421,6 @@ export function injectActiveSurfaceContext(
439
421
  "8. Keep your text response to 1 brief sentence confirming what you changed.",
440
422
  );
441
423
 
442
- if (ctx.html.includes('data-vellum-home-base="v1"')) {
443
- lines.push(
444
- "9. This is the prebuilt Home Base scaffold. Preserve layout anchors:",
445
- " `home-base-root`, `home-base-onboarding-lane`, and `home-base-starter-lane`.",
446
- );
447
- }
448
-
449
424
  // File tree with sizes (capped at 50 files to bound prompt size)
450
425
  const files = ctx.appFiles ?? listAppFiles(ctx.appId);
451
426
  const MAX_FILE_TREE_ENTRIES = 50;
@@ -779,7 +754,6 @@ export function buildInboundActorContextBlock(
779
754
  if (ctx.memberPolicy) {
780
755
  lines.push(`member_policy: ${ctx.memberPolicy}`);
781
756
  }
782
- lines.push(`denial_reason: ${ctx.denialReason ?? "none"}`);
783
757
  // Contact metadata — only included when the sender has a contact record
784
758
  // with non-default values.
785
759
  if (ctx.contactNotes) {
@@ -1,9 +1,5 @@
1
1
  import { v4 as uuid } from "uuid";
2
2
 
3
- import {
4
- findSeededHomeBaseApp,
5
- getPrebuiltHomeBasePreview,
6
- } from "../home-base/prebuilt/seed.js";
7
3
  import { getApp, getAppPreview, updateApp } from "../memory/app-store.js";
8
4
  import type { ToolExecutionResult } from "../tools/types.js";
9
5
  import { getLogger } from "../util/logger.js";
@@ -20,8 +16,8 @@ import type {
20
16
  TableRow,
21
17
  TableSurfaceData,
22
18
  UiSurfaceShow,
23
- } from "./ipc-protocol.js";
24
- import { INTERACTIVE_SURFACE_TYPES } from "./ipc-protocol.js";
19
+ } from "./message-protocol.js";
20
+ import { INTERACTIVE_SURFACE_TYPES } from "./message-protocol.js";
25
21
  import { buildSessionErrorMessage } from "./session-error.js";
26
22
 
27
23
  const log = getLogger("session-surfaces");
@@ -78,14 +74,27 @@ function normalizeCardShowData(
78
74
  normalized.templateData = input.templateData;
79
75
  }
80
76
 
81
- // task_progress cards need a title for Swift parsing; fall back when missing.
77
+ // The LLM sometimes sends `title` or `body` at the top-level tool input
78
+ // instead of nesting them inside `data`. The Swift client requires `title`
79
+ // inside the card data dict — without it `parseCardData` returns nil and
80
+ // the surface is silently dropped. Copy them from input when missing.
81
+ if (
82
+ typeof normalized.title !== "string" &&
83
+ typeof input.title === "string" &&
84
+ input.title.trim().length > 0
85
+ ) {
86
+ normalized.title = input.title;
87
+ }
88
+ if (typeof normalized.body !== "string" && typeof input.body === "string") {
89
+ normalized.body = input.body;
90
+ }
91
+
92
+ // task_progress cards: additional fallbacks for title from templateData.
82
93
  if (
83
94
  normalized.template === "task_progress" &&
84
95
  typeof normalized.title !== "string"
85
96
  ) {
86
- if (typeof input.title === "string" && input.title.trim().length > 0) {
87
- normalized.title = input.title;
88
- } else if (
97
+ if (
89
98
  isPlainObject(normalized.templateData) &&
90
99
  typeof normalized.templateData.title === "string"
91
100
  ) {
@@ -166,7 +175,17 @@ export interface SurfaceSessionContext {
166
175
  >;
167
176
  surfaceState: Map<
168
177
  string,
169
- { surfaceType: SurfaceType; data: SurfaceData; title?: string }
178
+ {
179
+ surfaceType: SurfaceType;
180
+ data: SurfaceData;
181
+ title?: string;
182
+ actions?: Array<{
183
+ id: string;
184
+ label: string;
185
+ style?: string;
186
+ data?: Record<string, unknown>;
187
+ }>;
188
+ }
170
189
  >;
171
190
  surfaceUndoStacks: Map<string, string[]>;
172
191
  /** Request IDs that originated from surface action button clicks (not regular user messages). */
@@ -176,7 +195,12 @@ export interface SurfaceSessionContext {
176
195
  surfaceType: SurfaceType;
177
196
  title?: string;
178
197
  data: SurfaceData;
179
- actions?: Array<{ id: string; label: string; style?: string }>;
198
+ actions?: Array<{
199
+ id: string;
200
+ label: string;
201
+ style?: string;
202
+ data?: Record<string, unknown>;
203
+ }>;
180
204
  display?: string;
181
205
  }>;
182
206
  onEscalateToComputerUse?: (task: string, sourceSessionId: string) => boolean;
@@ -517,8 +541,91 @@ export function handleSurfaceAction(
517
541
  data?: Record<string, unknown>,
518
542
  ): void {
519
543
  const pending = ctx.pendingSurfaceActions.get(surfaceId);
544
+
545
+ // When surfaces are restored from history (e.g. onboarding cards), there is
546
+ // no in-memory pendingSurfaceActions entry. For relay_prompt / agent_prompt
547
+ // actions the client already sends the full payload (including { prompt }),
548
+ // so we can handle them without stored state.
520
549
  if (!pending) {
521
- log.warn({ surfaceId, actionId }, "No pending surface action found");
550
+ const isRelay = actionId === "relay_prompt" || actionId === "agent_prompt";
551
+ const prompt =
552
+ isRelay && typeof data?.prompt === "string" ? data.prompt.trim() : "";
553
+
554
+ if (!prompt) {
555
+ log.warn({ surfaceId, actionId }, "No pending surface action found");
556
+ return;
557
+ }
558
+
559
+ const requestId = uuid();
560
+ ctx.surfaceActionRequestIds.add(requestId);
561
+ const onEvent = (msg: ServerMessage) => ctx.sendToClient(msg);
562
+
563
+ ctx.traceEmitter.emit("request_received", "Surface action received", {
564
+ requestId,
565
+ status: "info",
566
+ attributes: { source: "surface_action", surfaceId, actionId },
567
+ });
568
+
569
+ const result = ctx.enqueueMessage(
570
+ prompt,
571
+ [],
572
+ onEvent,
573
+ requestId,
574
+ surfaceId,
575
+ );
576
+ if (result.rejected) {
577
+ log.error({ surfaceId, actionId }, "Relay prompt rejected — queue full");
578
+ onEvent(
579
+ buildSessionErrorMessage(ctx.conversationId, {
580
+ code: "QUEUE_FULL",
581
+ userMessage:
582
+ "Message queue is full (max depth: 10). Please wait for current messages to be processed.",
583
+ retryable: true,
584
+ debugDetails: "Relay prompt rejected — session queue is full",
585
+ }),
586
+ );
587
+ return;
588
+ }
589
+
590
+ // Echo the prompt to the client so it appears in the chat UI.
591
+ // Sent after enqueue succeeds so the user doesn't see a prompt that
592
+ // won't be processed.
593
+ ctx.sendToClient({
594
+ type: "user_message_echo",
595
+ text: prompt,
596
+ sessionId: ctx.conversationId,
597
+ });
598
+
599
+ if (result.queued) {
600
+ log.info(
601
+ { surfaceId, actionId, requestId },
602
+ "Relay prompt queued (session busy, history-restored)",
603
+ );
604
+ return;
605
+ }
606
+
607
+ // Session is idle — process the message immediately.
608
+ log.info(
609
+ { surfaceId, actionId, requestId },
610
+ "Processing relay prompt immediately (history-restored)",
611
+ );
612
+ ctx
613
+ .processMessage(prompt, [], onEvent, requestId, surfaceId)
614
+ .catch((err) => {
615
+ const message = err instanceof Error ? err.message : String(err);
616
+ log.error(
617
+ { err, surfaceId, actionId },
618
+ "Failed to process history-restored relay prompt",
619
+ );
620
+ onEvent(
621
+ buildSessionErrorMessage(ctx.conversationId, {
622
+ code: "SESSION_PROCESSING_FAILED",
623
+ userMessage: `Something went wrong: ${message}`,
624
+ retryable: false,
625
+ debugDetails: `History-restored relay prompt processing failed: ${message}`,
626
+ }),
627
+ );
628
+ });
522
629
  return;
523
630
  }
524
631
  const retainPending = pending.surfaceType === "dynamic_page";
@@ -538,32 +645,39 @@ export function handleSurfaceAction(
538
645
  handleDocumentContentChanged(ctx, surfaceId, data);
539
646
  return;
540
647
  }
541
- ctx.lastSurfaceAction.set(surfaceId, { actionId, data });
648
+ // Merge stored action-level data (from ui_show definition) with client-sent
649
+ // data. This is critical for relay_prompt buttons: the client only sends the
650
+ // actionId, but the prompt payload lives in the action definition's data.
651
+ const stored = ctx.surfaceState.get(surfaceId);
652
+ const actionDef = stored?.actions?.find((a) => a.id === actionId);
653
+ const mergedData: Record<string, unknown> | undefined =
654
+ actionDef?.data || data ? { ...actionDef?.data, ...data } : undefined;
655
+
656
+ ctx.lastSurfaceAction.set(surfaceId, { actionId, data: mergedData });
542
657
  const shouldRelayPrompt =
543
658
  actionId === "relay_prompt" || actionId === "agent_prompt";
544
659
  const prompt =
545
- shouldRelayPrompt && typeof data?.prompt === "string"
546
- ? data.prompt.trim()
660
+ shouldRelayPrompt && typeof mergedData?.prompt === "string"
661
+ ? mergedData.prompt.trim()
547
662
  : "";
548
663
 
549
664
  // Build a human-readable summary so the LLM clearly understands the
550
665
  // user's decision instead of parsing raw JSON.
551
- const stored = ctx.surfaceState.get(surfaceId);
552
666
  const surfaceData = stored?.data as Record<string, unknown> | undefined;
553
667
  const summary = buildCompletionSummary(
554
668
  pending.surfaceType,
555
669
  actionId,
556
- data,
670
+ mergedData,
557
671
  surfaceData,
558
672
  );
559
673
  let fallbackContent = `[User action on ${pending.surfaceType} surface: ${summary}]`;
560
674
  // Append structured data so the LLM has access to IDs/values it needs
561
675
  // to act on (e.g. selectedIds for archiving).
562
- if (data && Object.keys(data).length > 0) {
563
- fallbackContent += `\n\nAction data: ${JSON.stringify(data)}`;
676
+ if (mergedData && Object.keys(mergedData).length > 0) {
677
+ fallbackContent += `\n\nAction data: ${JSON.stringify(mergedData)}`;
564
678
  }
565
679
  // Append deselection context for table/list surfaces so the LLM knows what the user chose to keep.
566
- const selectedIds = data?.selectedIds as string[] | undefined;
680
+ const selectedIds = mergedData?.selectedIds as string[] | undefined;
567
681
  if (
568
682
  selectedIds &&
569
683
  (pending.surfaceType === "table" || pending.surfaceType === "list")
@@ -574,11 +688,28 @@ export function handleSurfaceAction(
574
688
  selectedIds,
575
689
  );
576
690
  }
577
- const content = prompt || fallbackContent;
691
+ // When a relay_prompt button also carries selection data (e.g. list/table
692
+ // surface with a canned prompt + user-selected rows), append the selection
693
+ // context so the LLM sees both the prompt and the user's selections.
694
+ let content = prompt || fallbackContent;
695
+ if (prompt && selectedIds && mergedData) {
696
+ if (pending.surfaceType === "table" || pending.surfaceType === "list") {
697
+ content += buildDeselectionDescription(
698
+ pending.surfaceType,
699
+ stored,
700
+ selectedIds,
701
+ );
702
+ }
703
+ }
578
704
  // Show the user plain-text instead of raw JSON action data.
579
705
  const displayContent = prompt
580
706
  ? undefined
581
- : buildUserFacingLabel(pending.surfaceType, actionId, data, surfaceData);
707
+ : buildUserFacingLabel(
708
+ pending.surfaceType,
709
+ actionId,
710
+ mergedData,
711
+ surfaceData,
712
+ );
582
713
 
583
714
  const requestId = uuid();
584
715
  ctx.surfaceActionRequestIds.add(requestId);
@@ -912,7 +1043,12 @@ export async function surfaceProxyResolver(
912
1043
  : rawData
913
1044
  ) as SurfaceData;
914
1045
  const actions = input.actions as
915
- | Array<{ id: string; label: string; style?: string }>
1046
+ | Array<{
1047
+ id: string;
1048
+ label: string;
1049
+ style?: string;
1050
+ data?: Record<string, unknown>;
1051
+ }>
916
1052
  | undefined;
917
1053
  // Interactive surfaces default to awaiting user action.
918
1054
  const hasActions = Array.isArray(actions) && actions.length > 0;
@@ -942,9 +1078,6 @@ export async function surfaceProxyResolver(
942
1078
  }
943
1079
  }
944
1080
 
945
- // Track surface state for ui_update merging
946
- ctx.surfaceState.set(surfaceId, { surfaceType, data, title });
947
-
948
1081
  const display = (input.display as string) === "panel" ? "panel" : "inline";
949
1082
 
950
1083
  const mappedActions = actions?.map((a) => ({
@@ -954,8 +1087,31 @@ export async function surfaceProxyResolver(
954
1087
  | "primary"
955
1088
  | "secondary"
956
1089
  | "destructive",
1090
+ ...(a.data ? { data: a.data } : {}),
957
1091
  }));
958
1092
 
1093
+ // Track surface state for ui_update merging (includes actions so we can
1094
+ // look up per-action data payloads when the client sends an action back).
1095
+ ctx.surfaceState.set(surfaceId, {
1096
+ surfaceType,
1097
+ data,
1098
+ title,
1099
+ actions: mappedActions,
1100
+ });
1101
+
1102
+ log.info(
1103
+ {
1104
+ surfaceId,
1105
+ surfaceType,
1106
+ title,
1107
+ dataKeys: Object.keys(data),
1108
+ actionCount: mappedActions?.length ?? 0,
1109
+ display,
1110
+ conversationId: ctx.conversationId,
1111
+ },
1112
+ "Sending ui_surface_show to client",
1113
+ );
1114
+
959
1115
  ctx.sendToClient({
960
1116
  type: "ui_surface_show",
961
1117
  sessionId: ctx.conversationId,
@@ -1106,14 +1262,10 @@ export async function surfaceProxyResolver(
1106
1262
  const openMode = input.open_mode as string | undefined;
1107
1263
  const app = getApp(appId);
1108
1264
  if (!app) return { content: `App not found: ${appId}`, isError: true };
1109
- const seededHomeBase = findSeededHomeBaseApp();
1110
- const defaultPreview =
1111
- seededHomeBase && seededHomeBase.id === app.id
1112
- ? getPrebuiltHomeBasePreview()
1113
- : // Generate a minimal fallback preview from app metadata so that the
1114
- // surface is always rendered as a clickable preview card (not an
1115
- // un-clickable fallback chip) after session restart.
1116
- { title: app.name, subtitle: app.description };
1265
+ // Generate a minimal fallback preview from app metadata so that the
1266
+ // surface is always rendered as a clickable preview card (not an
1267
+ // un-clickable fallback chip) after session restart.
1268
+ const defaultPreview = { title: app.name, subtitle: app.description };
1117
1269
 
1118
1270
  const storedPreview = getAppPreview(app.id);
1119
1271
  const surfaceData: DynamicPageSurfaceData = {
@@ -40,7 +40,7 @@ import {
40
40
  isDoordashCommand,
41
41
  markDoordashStepInProgress,
42
42
  } from "./doordash-steps.js";
43
- import type { ServerMessage, UiSurfaceShow } from "./ipc-protocol.js";
43
+ import type { ServerMessage, UiSurfaceShow } from "./message-protocol.js";
44
44
  import type { TrustContext } from "./session-runtime-assembly.js";
45
45
  import {
46
46
  projectSkillTools,