@vellumai/assistant 0.4.41 → 0.4.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (843) hide show
  1. package/.env.example +1 -6
  2. package/.prettierignore +3 -0
  3. package/ARCHITECTURE.md +131 -393
  4. package/Dockerfile +0 -1
  5. package/README.md +73 -83
  6. package/bun.lock +8 -2
  7. package/docs/architecture/integrations.md +16 -21
  8. package/docs/architecture/memory.md +1 -1
  9. package/docs/architecture/scheduling.md +63 -63
  10. package/docs/architecture/security.md +3 -3
  11. package/docs/runbook-trusted-contacts.md +11 -12
  12. package/docs/trusted-contact-access.md +39 -39
  13. package/package.json +5 -8
  14. package/src/__tests__/access-request-decision.test.ts +4 -4
  15. package/src/__tests__/active-skill-tools.test.ts +49 -34
  16. package/src/__tests__/actor-token-service.test.ts +55 -85
  17. package/src/__tests__/amazon-cdp-integration.test.ts +14 -26
  18. package/src/__tests__/app-bundler.test.ts +14 -368
  19. package/src/__tests__/app-compiler.test.ts +0 -1
  20. package/src/__tests__/app-executors.test.ts +10 -1
  21. package/src/__tests__/approval-hardcoded-copy-guard.test.ts +1 -1
  22. package/src/__tests__/approval-primitive.test.ts +2 -4
  23. package/src/__tests__/approval-routes-http.test.ts +1 -1
  24. package/src/__tests__/asset-materialize-tool.test.ts +1 -4
  25. package/src/__tests__/asset-search-tool.test.ts +1 -4
  26. package/src/__tests__/assistant-attachments.test.ts +23 -0
  27. package/src/__tests__/assistant-feature-flags-integration.test.ts +4 -8
  28. package/src/__tests__/assistant-id-boundary-guard.test.ts +5 -5
  29. package/src/__tests__/attachments-store.test.ts +1 -4
  30. package/src/__tests__/avatar-e2e.test.ts +43 -23
  31. package/src/__tests__/browser-fill-credential.test.ts +1 -1
  32. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +2 -9
  33. package/src/__tests__/call-controller.test.ts +4 -8
  34. package/src/__tests__/call-conversation-messages.test.ts +1 -1
  35. package/src/__tests__/call-domain.test.ts +250 -8
  36. package/src/__tests__/call-pointer-message-composer.test.ts +14 -14
  37. package/src/__tests__/call-pointer-messages.test.ts +7 -11
  38. package/src/__tests__/call-recovery.test.ts +47 -0
  39. package/src/__tests__/call-routes-http.test.ts +13 -0
  40. package/src/__tests__/call-start-guardian-guard.test.ts +1 -1
  41. package/src/__tests__/callback-handoff-copy.test.ts +5 -5
  42. package/src/__tests__/canonical-guardian-store.test.ts +3 -3
  43. package/src/__tests__/channel-approval-routes.test.ts +101 -134
  44. package/src/__tests__/channel-approval.test.ts +0 -201
  45. package/src/__tests__/channel-approvals.test.ts +2 -2
  46. package/src/__tests__/channel-delivery-store.test.ts +16 -24
  47. package/src/__tests__/channel-guardian.test.ts +641 -740
  48. package/src/__tests__/channel-invite-transport.test.ts +1 -2
  49. package/src/__tests__/channel-policy.test.ts +9 -12
  50. package/src/__tests__/channel-readiness-service.test.ts +156 -45
  51. package/src/__tests__/channel-reply-delivery.test.ts +3 -3
  52. package/src/__tests__/channel-retry-sweep.test.ts +7 -7
  53. package/src/__tests__/checker.test.ts +10 -7
  54. package/src/__tests__/chrome-cdp.test.ts +57 -17
  55. package/src/__tests__/cli-help-reference-sync.test.ts +26 -0
  56. package/src/__tests__/compaction.benchmark.test.ts +25 -5
  57. package/src/__tests__/computer-use-session-lifecycle.test.ts +1 -1
  58. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  59. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +1 -1
  60. package/src/__tests__/config-loader-backfill.test.ts +310 -0
  61. package/src/__tests__/config-watcher.test.ts +1 -5
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +3 -5
  63. package/src/__tests__/connection-policy.test.ts +3 -62
  64. package/src/__tests__/contacts-tools.test.ts +0 -2
  65. package/src/__tests__/context-memory-e2e.test.ts +11 -7
  66. package/src/__tests__/context-overflow-policy.test.ts +2 -2
  67. package/src/__tests__/context-window-manager.test.ts +220 -61
  68. package/src/__tests__/conversation-attention-store.test.ts +178 -2
  69. package/src/__tests__/conversation-attention-telegram.test.ts +8 -11
  70. package/src/__tests__/conversation-pairing.test.ts +14 -14
  71. package/src/__tests__/conversation-routes-guardian-reply.test.ts +1 -1
  72. package/src/__tests__/conversation-store.test.ts +2 -2
  73. package/src/__tests__/conversation-unread-route.test.ts +155 -0
  74. package/src/__tests__/credential-metadata-store.test.ts +0 -2
  75. package/src/__tests__/credential-security-invariants.test.ts +9 -16
  76. package/src/__tests__/credentials-cli.test.ts +49 -5
  77. package/src/__tests__/daemon-assistant-events.test.ts +4 -22
  78. package/src/__tests__/db-migration-rollback.test.ts +2 -2
  79. package/src/__tests__/deterministic-verification-control-plane.test.ts +19 -19
  80. package/src/__tests__/dictation-mode-detection.test.ts +1 -1
  81. package/src/__tests__/dynamic-page-surface.test.ts +2 -2
  82. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +2 -6
  83. package/src/__tests__/email-cli.test.ts +12 -12
  84. package/src/__tests__/email-service-config-fallback.test.ts +1 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -18
  86. package/src/__tests__/event-bus.test.ts +0 -1
  87. package/src/__tests__/followup-tools.test.ts +0 -2
  88. package/src/__tests__/gateway-client-managed-outbound.test.ts +6 -6
  89. package/src/__tests__/gateway-only-enforcement.test.ts +13 -77
  90. package/src/__tests__/gateway-only-guard.test.ts +5 -0
  91. package/src/__tests__/guardian-action-conversation-turn.test.ts +3 -3
  92. package/src/__tests__/guardian-action-followup-executor.test.ts +29 -94
  93. package/src/__tests__/guardian-action-followup-store.test.ts +2 -12
  94. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +48 -194
  95. package/src/__tests__/guardian-action-late-reply.test.ts +12 -12
  96. package/src/__tests__/guardian-action-store.test.ts +2 -2
  97. package/src/__tests__/guardian-action-sweep.test.ts +5 -5
  98. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +1 -3
  99. package/src/__tests__/guardian-dispatch.test.ts +5 -46
  100. package/src/__tests__/guardian-grant-minting.test.ts +5 -44
  101. package/src/__tests__/guardian-outbound-http.test.ts +95 -114
  102. package/src/__tests__/guardian-question-mode.test.ts +1 -4
  103. package/src/__tests__/guardian-routing-invariants.test.ts +5 -13
  104. package/src/__tests__/guardian-routing-state.test.ts +3 -3
  105. package/src/__tests__/guardian-verification-voice-binding.test.ts +64 -7
  106. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +2 -2
  107. package/src/__tests__/handle-user-message-secret-resume.test.ts +3 -5
  108. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +16 -34
  109. package/src/__tests__/headless-browser-interactions.test.ts +1 -1
  110. package/src/__tests__/headless-browser-navigate.test.ts +1 -1
  111. package/src/__tests__/headless-browser-read-tools.test.ts +1 -1
  112. package/src/__tests__/headless-browser-snapshot.test.ts +1 -1
  113. package/src/__tests__/heartbeat-service.test.ts +1 -1
  114. package/src/__tests__/home-base-bootstrap.test.ts +0 -2
  115. package/src/__tests__/host-shell-tool.test.ts +3 -12
  116. package/src/__tests__/inbound-invite-redemption.test.ts +2 -2
  117. package/src/__tests__/ingress-url-consistency.test.ts +0 -64
  118. package/src/__tests__/integration-status.test.ts +8 -8
  119. package/src/__tests__/intent-routing.test.ts +9 -13
  120. package/src/__tests__/invite-redemption-service.test.ts +4 -4
  121. package/src/__tests__/invite-routes-http.test.ts +10 -10
  122. package/src/__tests__/llm-usage-store.test.ts +45 -9
  123. package/src/__tests__/local-gateway-health.test.ts +209 -0
  124. package/src/__tests__/managed-avatar-client.test.ts +23 -12
  125. package/src/__tests__/managed-skill-lifecycle.test.ts +1 -2
  126. package/src/__tests__/managed-store.test.ts +29 -12
  127. package/src/__tests__/managed-twitter-guardrails.test.ts +353 -0
  128. package/src/__tests__/mcp-cli.test.ts +1 -1
  129. package/src/__tests__/mcp-health-check.test.ts +1 -1
  130. package/src/__tests__/media-generate-image.test.ts +1 -1
  131. package/src/__tests__/media-reuse-story.e2e.test.ts +1 -4
  132. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +9 -6
  133. package/src/__tests__/memory-regressions.test.ts +1 -166
  134. package/src/__tests__/messaging-send-tool.test.ts +8 -4
  135. package/src/__tests__/migration-export-http.test.ts +2 -2
  136. package/src/__tests__/migration-transport.test.ts +44 -0
  137. package/src/__tests__/non-member-access-request.test.ts +49 -36
  138. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  139. package/src/__tests__/notification-decision-fallback.test.ts +2 -2
  140. package/src/__tests__/notification-decision-strategy.test.ts +4 -4
  141. package/src/__tests__/notification-deep-link.test.ts +3 -3
  142. package/src/__tests__/notification-guardian-path.test.ts +6 -44
  143. package/src/__tests__/notification-routing-intent.test.ts +11 -7
  144. package/src/__tests__/oauth-cli.test.ts +1 -1
  145. package/src/__tests__/onboarding-starter-tasks.test.ts +2 -6
  146. package/src/__tests__/onboarding-template-contract.test.ts +2 -2
  147. package/src/__tests__/platform.test.ts +168 -5
  148. package/src/__tests__/playbook-execution.test.ts +0 -2
  149. package/src/__tests__/playbook-tools.test.ts +0 -2
  150. package/src/__tests__/pricing.test.ts +125 -0
  151. package/src/__tests__/provider-error-scenarios.test.ts +9 -3
  152. package/src/__tests__/recording-handler.test.ts +46 -80
  153. package/src/__tests__/recording-state-machine.test.ts +112 -183
  154. package/src/__tests__/registry.test.ts +1 -1
  155. package/src/__tests__/relay-server.test.ts +69 -71
  156. package/src/__tests__/reminder-store.test.ts +3 -3
  157. package/src/__tests__/request-file-tool.test.ts +2 -2
  158. package/src/__tests__/ride-shotgun-handler.test.ts +2 -33
  159. package/src/__tests__/runtime-attachment-metadata.test.ts +3 -3
  160. package/src/__tests__/runtime-events-sse-parity.test.ts +1 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +4 -4
  162. package/src/__tests__/schedule-store.test.ts +13 -4
  163. package/src/__tests__/schedule-tools.test.ts +0 -2
  164. package/src/__tests__/scheduler-recurrence.test.ts +3 -4
  165. package/src/__tests__/scoped-approval-grants.test.ts +3 -5
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +6 -8
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +1 -1
  168. package/src/__tests__/secret-response-routing.test.ts +1 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +1 -1
  170. package/src/__tests__/sequence-store.test.ts +0 -2
  171. package/src/__tests__/server-history-render.test.ts +2 -199
  172. package/src/__tests__/session-abort-tool-results.test.ts +9 -3
  173. package/src/__tests__/session-agent-loop.test.ts +107 -3
  174. package/src/__tests__/session-confirmation-signals.test.ts +10 -4
  175. package/src/__tests__/session-conflict-gate.test.ts +9 -3
  176. package/src/__tests__/session-init.benchmark.test.ts +22 -13
  177. package/src/__tests__/session-load-history-repair.test.ts +6 -3
  178. package/src/__tests__/session-pre-run-repair.test.ts +9 -3
  179. package/src/__tests__/session-profile-injection.test.ts +9 -3
  180. package/src/__tests__/session-provider-retry-repair.test.ts +10 -4
  181. package/src/__tests__/session-queue.test.ts +10 -4
  182. package/src/__tests__/session-runtime-assembly.test.ts +28 -18
  183. package/src/__tests__/session-skill-tools.test.ts +2 -3
  184. package/src/__tests__/session-slash-known.test.ts +11 -4
  185. package/src/__tests__/session-slash-queue.test.ts +11 -4
  186. package/src/__tests__/session-slash-unknown.test.ts +12 -4
  187. package/src/__tests__/session-surfaces-deselection.test.ts +2 -2
  188. package/src/__tests__/session-surfaces-task-progress.test.ts +3 -3
  189. package/src/__tests__/session-tool-setup-app-refresh.test.ts +1 -1
  190. package/src/__tests__/session-tool-setup-memory-scope.test.ts +1 -1
  191. package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +1 -1
  192. package/src/__tests__/session-usage.test.ts +180 -0
  193. package/src/__tests__/session-workspace-cache-state.test.ts +8 -2
  194. package/src/__tests__/session-workspace-injection.test.ts +8 -2
  195. package/src/__tests__/session-workspace-tool-tracking.test.ts +8 -2
  196. package/src/__tests__/skill-feature-flags-integration.test.ts +5 -11
  197. package/src/__tests__/skill-feature-flags.test.ts +1 -0
  198. package/src/__tests__/skill-include-graph.test.ts +1 -0
  199. package/src/__tests__/skill-load-feature-flag.test.ts +3 -9
  200. package/src/__tests__/skill-load-tool.test.ts +90 -12
  201. package/src/__tests__/skill-projection-feature-flag.test.ts +14 -15
  202. package/src/__tests__/skills-uninstall.test.ts +131 -0
  203. package/src/__tests__/skills.test.ts +32 -16
  204. package/src/__tests__/slack-block-formatting.test.ts +1 -1
  205. package/src/__tests__/slack-channel-config.test.ts +71 -12
  206. package/src/__tests__/slack-inbound-verification.test.ts +7 -7
  207. package/src/__tests__/slack-share-routes.test.ts +1 -1
  208. package/src/__tests__/slack-skill.test.ts +2 -2
  209. package/src/__tests__/slash-commands-catalog.test.ts +1 -0
  210. package/src/__tests__/slash-commands-resolver.test.ts +1 -0
  211. package/src/__tests__/starter-task-flow.test.ts +1 -1
  212. package/src/__tests__/subagent-manager-notify.test.ts +1 -1
  213. package/src/__tests__/subagent-tools.test.ts +2 -2
  214. package/src/__tests__/system-prompt.test.ts +4 -8
  215. package/src/__tests__/task-compiler.test.ts +0 -2
  216. package/src/__tests__/task-management-tools.test.ts +0 -2
  217. package/src/__tests__/task-runner.test.ts +0 -2
  218. package/src/__tests__/task-scheduler.test.ts +2 -2
  219. package/src/__tests__/telegram-bot-username-resolution.test.ts +46 -44
  220. package/src/__tests__/terminal-tools.test.ts +1 -11
  221. package/src/__tests__/thread-seed-composer.test.ts +3 -1
  222. package/src/__tests__/tool-approval-handler.test.ts +5 -7
  223. package/src/__tests__/tool-executor.test.ts +2 -2
  224. package/src/__tests__/tool-grant-request-escalation.test.ts +3 -5
  225. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  226. package/src/__tests__/tool-profiling-listener.test.ts +1 -1
  227. package/src/__tests__/tool-trace-listener.test.ts +1 -2
  228. package/src/__tests__/trace-emitter.test.ts +1 -1
  229. package/src/__tests__/trust-context-guards.test.ts +1 -1
  230. package/src/__tests__/trust-store.test.ts +44 -395
  231. package/src/__tests__/trusted-contact-approval-notifier.test.ts +6 -8
  232. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +5 -7
  233. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +6 -6
  234. package/src/__tests__/trusted-contact-multichannel.test.ts +54 -47
  235. package/src/__tests__/trusted-contact-verification.test.ts +12 -12
  236. package/src/__tests__/twilio-config.test.ts +11 -2
  237. package/src/__tests__/twilio-provider.test.ts +6 -4
  238. package/src/__tests__/twilio-routes.test.ts +408 -86
  239. package/src/__tests__/twitter-platform-proxy-client.test.ts +450 -0
  240. package/src/__tests__/update-bulletin-format.test.ts +1 -1
  241. package/src/__tests__/update-bulletin-state.test.ts +1 -1
  242. package/src/__tests__/update-bulletin.test.ts +4 -8
  243. package/src/__tests__/update-template-contract.test.ts +1 -1
  244. package/src/__tests__/usage-cache-backfill-migration.test.ts +406 -0
  245. package/src/__tests__/usage-routes.test.ts +23 -5
  246. package/src/__tests__/user-reference.test.ts +1 -1
  247. package/src/__tests__/{guardian-control-plane-policy.test.ts → verification-control-plane-policy.test.ts} +142 -170
  248. package/src/__tests__/{guardian-verification-intent-routing.test.ts → verification-session-intent-routing.test.ts} +16 -16
  249. package/src/__tests__/view-image-tool.test.ts +0 -2
  250. package/src/__tests__/voice-ingress-preflight.test.ts +36 -0
  251. package/src/__tests__/voice-invite-redemption.test.ts +18 -18
  252. package/src/__tests__/voice-scoped-grant-consumer.test.ts +7 -7
  253. package/src/__tests__/voice-session-bridge.test.ts +14 -16
  254. package/src/__tests__/workspace-policy.test.ts +1 -1
  255. package/src/approvals/AGENTS.md +4 -4
  256. package/src/approvals/approval-primitive.ts +2 -2
  257. package/src/approvals/guardian-decision-primitive.ts +1 -1
  258. package/src/approvals/guardian-request-resolvers.ts +3 -4
  259. package/src/bundler/app-bundler.ts +29 -217
  260. package/src/bundler/app-compiler.ts +131 -103
  261. package/src/bundler/compiler-tools.ts +248 -0
  262. package/src/calls/active-call-lease.ts +207 -0
  263. package/src/calls/call-constants.ts +0 -7
  264. package/src/calls/call-controller.ts +1 -1
  265. package/src/calls/call-conversation-messages.ts +6 -6
  266. package/src/calls/call-domain.ts +73 -38
  267. package/src/calls/call-pointer-message-composer.ts +6 -6
  268. package/src/calls/call-pointer-messages.ts +14 -13
  269. package/src/calls/call-recovery.ts +2 -0
  270. package/src/calls/call-store.ts +21 -28
  271. package/src/calls/guardian-action-sweep.ts +6 -8
  272. package/src/calls/guardian-dispatch.ts +2 -6
  273. package/src/calls/relay-access-wait.ts +4 -4
  274. package/src/calls/relay-server.ts +69 -80
  275. package/src/calls/relay-setup-router.ts +16 -21
  276. package/src/calls/relay-verification.ts +27 -28
  277. package/src/calls/twilio-config.ts +28 -3
  278. package/src/calls/twilio-provider.ts +5 -5
  279. package/src/calls/twilio-rest.ts +26 -27
  280. package/src/calls/twilio-routes.ts +67 -54
  281. package/src/calls/types.ts +8 -8
  282. package/src/calls/voice-ingress-preflight.ts +110 -0
  283. package/src/calls/voice-session-bridge.ts +7 -7
  284. package/src/channels/config.ts +1 -10
  285. package/src/{config/channel-permission-profiles.ts → channels/permission-profiles.ts} +1 -1
  286. package/src/channels/types.ts +2 -13
  287. package/src/cli/__tests__/notifications.test.ts +1 -1
  288. package/src/{amazon → cli/commands/amazon}/client.ts +99 -42
  289. package/src/cli/{amazon.ts → commands/amazon/index.ts} +12 -17
  290. package/src/{amazon → cli/commands/amazon}/request-extractor.ts +39 -3
  291. package/src/cli/commands/amazon/session.ts +116 -0
  292. package/src/cli/{audit.ts → commands/audit.ts} +2 -4
  293. package/src/cli/{autonomy.ts → commands/autonomy.ts} +1 -3
  294. package/src/cli/commands/browser-relay.ts +520 -0
  295. package/src/cli/commands/channel-verification-sessions.ts +442 -0
  296. package/src/cli/{completions.ts → commands/completions.ts} +1 -3
  297. package/src/cli/{config.ts → commands/config.ts} +3 -5
  298. package/src/cli/{contacts.ts → commands/contacts.ts} +263 -16
  299. package/src/cli/{credentials.ts → commands/credentials.ts} +9 -10
  300. package/src/cli/{default-action.ts → commands/default-action.ts} +3 -3
  301. package/src/cli/{dev.ts → commands/dev.ts} +4 -6
  302. package/src/cli/{doctor.ts → commands/doctor.ts} +36 -60
  303. package/src/cli/{email.ts → commands/email.ts} +2 -2
  304. package/src/cli/{keys.ts → commands/keys.ts} +6 -6
  305. package/src/cli/{map.ts → commands/map.ts} +85 -93
  306. package/src/cli/{mcp.ts → commands/mcp.ts} +5 -7
  307. package/src/cli/{memory.ts → commands/memory.ts} +6 -7
  308. package/src/cli/{notifications.ts → commands/notifications.ts} +8 -10
  309. package/src/cli/{oauth.ts → commands/oauth.ts} +2 -2
  310. package/src/cli/commands/platform.ts +176 -0
  311. package/src/cli/{sequence.ts → commands/sequence.ts} +3 -3
  312. package/src/cli/{sessions.ts → commands/sessions.ts} +32 -52
  313. package/src/cli/commands/skills.ts +498 -0
  314. package/src/cli/{trust.ts → commands/trust.ts} +2 -4
  315. package/src/{__tests__/twitter-cli-error-shaping.test.ts → cli/commands/twitter/__tests__/cli-error-shaping.test.ts} +43 -2
  316. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +483 -0
  317. package/src/{__tests__/twitter-cli-routing.test.ts → cli/commands/twitter/__tests__/cli-routing.test.ts} +130 -4
  318. package/src/{__tests__/twitter-oauth-client.test.ts → cli/commands/twitter/__tests__/oauth-client.test.ts} +2 -2
  319. package/src/{twitter → cli/commands/twitter}/client.ts +17 -7
  320. package/src/cli/{twitter.ts → commands/twitter/index.ts} +322 -273
  321. package/src/cli/commands/twitter/router.ts +396 -0
  322. package/src/cli/commands/twitter/session.ts +121 -0
  323. package/src/cli/db.ts +1 -0
  324. package/src/cli/http-client.ts +87 -0
  325. package/src/cli/logger.ts +6 -0
  326. package/src/cli/main-screen.tsx +4 -3
  327. package/src/cli/output.ts +19 -0
  328. package/src/cli/program.ts +29 -27
  329. package/src/cli/reference.ts +27 -37
  330. package/src/cli.ts +452 -240
  331. package/src/config/assistant-feature-flags.ts +3 -15
  332. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +3 -6
  333. package/src/config/bundled-skills/agentmail/SKILL.md +4 -4
  334. package/src/config/bundled-skills/amazon/SKILL.md +15 -5
  335. package/src/config/bundled-skills/api-mapping/SKILL.md +4 -4
  336. package/src/config/bundled-skills/app-builder/SKILL.md +21 -6
  337. package/src/config/bundled-skills/browser/SKILL.md +4 -5
  338. package/src/config/bundled-skills/chatgpt-import/SKILL.md +4 -4
  339. package/src/config/bundled-skills/chatgpt-import/tools/chatgpt-import.ts +1 -1
  340. package/src/config/bundled-skills/claude-code/SKILL.md +4 -4
  341. package/src/config/bundled-skills/cli-discover/SKILL.md +4 -4
  342. package/src/config/bundled-skills/computer-use/SKILL.md +4 -4
  343. package/src/config/bundled-skills/contacts/SKILL.md +87 -229
  344. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +4 -4
  345. package/src/config/bundled-skills/document/SKILL.md +4 -3
  346. package/src/config/bundled-skills/document-writer/SKILL.md +4 -4
  347. package/src/config/bundled-skills/doordash/SKILL.md +4 -11
  348. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +8 -16
  349. package/src/config/bundled-skills/doordash/doordash-cli.ts +120 -86
  350. package/src/config/bundled-skills/doordash/lib/session.ts +1 -2
  351. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +26 -9
  352. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +140 -0
  353. package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
  354. package/src/config/bundled-skills/followups/SKILL.md +4 -3
  355. package/src/config/bundled-skills/frontend-design/SKILL.md +2 -0
  356. package/src/config/bundled-skills/google-calendar/SKILL.md +4 -4
  357. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +4 -6
  358. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +26 -41
  359. package/src/config/bundled-skills/image-studio/SKILL.md +4 -5
  360. package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -1
  361. package/src/config/bundled-skills/influencer/SKILL.md +19 -19
  362. package/src/{influencer → config/bundled-skills/influencer/scripts}/client.ts +73 -56
  363. package/src/config/bundled-skills/influencer/scripts/influencer.ts +267 -0
  364. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -2
  365. package/src/config/bundled-skills/macos-automation/SKILL.md +4 -5
  366. package/src/config/bundled-skills/mcp-setup/SKILL.md +4 -4
  367. package/src/config/bundled-skills/media-processing/SKILL.md +3 -2
  368. package/src/config/bundled-skills/messaging/SKILL.md +6 -33
  369. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -5
  370. package/src/config/bundled-skills/notifications/SKILL.md +4 -4
  371. package/src/config/bundled-skills/notion/SKILL.md +4 -4
  372. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +4 -5
  373. package/src/config/bundled-skills/oauth-setup/SKILL.md +4 -5
  374. package/src/config/bundled-skills/phone-calls/SKILL.md +24 -458
  375. package/src/config/bundled-skills/phone-calls/references/CONFIG.md +83 -0
  376. package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +57 -0
  377. package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +67 -0
  378. package/src/config/bundled-skills/playbooks/SKILL.md +4 -3
  379. package/src/config/bundled-skills/public-ingress/SKILL.md +65 -14
  380. package/src/config/bundled-skills/reminder/SKILL.md +4 -3
  381. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +4 -6
  382. package/src/config/bundled-skills/schedule/SKILL.md +4 -3
  383. package/src/config/bundled-skills/screen-recording/SKILL.md +4 -3
  384. package/src/config/bundled-skills/self-upgrade/SKILL.md +4 -4
  385. package/src/config/bundled-skills/skills-catalog/SKILL.md +4 -4
  386. package/src/config/bundled-skills/slack/SKILL.md +4 -8
  387. package/src/config/bundled-skills/slack/tools/slack-channel-permissions.ts +1 -1
  388. package/src/config/bundled-skills/slack-app-setup/SKILL.md +66 -88
  389. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +4 -5
  390. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +4 -5
  391. package/src/config/bundled-skills/start-the-day/SKILL.md +4 -4
  392. package/src/config/bundled-skills/subagent/SKILL.md +4 -3
  393. package/src/config/bundled-skills/tasks/SKILL.md +4 -3
  394. package/src/config/bundled-skills/telegram-setup/SKILL.md +63 -112
  395. package/src/config/bundled-skills/time-based-actions/SKILL.md +4 -3
  396. package/src/config/bundled-skills/transcribe/SKILL.md +4 -3
  397. package/src/config/bundled-skills/twilio-setup/SKILL.md +23 -50
  398. package/src/config/bundled-skills/twitter/SKILL.md +56 -14
  399. package/src/config/bundled-skills/typescript-eval/SKILL.md +4 -4
  400. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +4 -5
  401. package/src/config/bundled-skills/voice-setup/SKILL.md +19 -45
  402. package/src/config/bundled-skills/watcher/SKILL.md +4 -3
  403. package/src/config/env-registry.ts +1 -10
  404. package/src/config/feature-flag-registry.json +0 -16
  405. package/src/config/loader.ts +78 -38
  406. package/src/config/schema.ts +143 -106
  407. package/src/config/schemas/channels.ts +80 -0
  408. package/src/config/schemas/heartbeat.ts +51 -0
  409. package/src/config/schemas/inference.ts +136 -0
  410. package/src/config/schemas/ingress.ts +81 -0
  411. package/src/config/schemas/logging.ts +21 -0
  412. package/src/config/schemas/memory-lifecycle.ts +67 -0
  413. package/src/config/schemas/memory-processing.ts +215 -0
  414. package/src/config/schemas/memory-retrieval.ts +222 -0
  415. package/src/config/schemas/memory-storage.ts +83 -0
  416. package/src/config/schemas/memory.ts +58 -0
  417. package/src/config/schemas/platform.ts +64 -0
  418. package/src/config/schemas/security.ts +54 -0
  419. package/src/config/schemas/swarm.ts +50 -0
  420. package/src/config/schemas/timeouts.ts +47 -0
  421. package/src/config/{agent-schema.ts → schemas/workspace-git.ts} +0 -97
  422. package/src/config/skill-state.ts +3 -13
  423. package/src/config/skills.ts +233 -75
  424. package/src/config/types.ts +1 -20
  425. package/src/contacts/contact-store.ts +12 -49
  426. package/src/contacts/contacts-write.ts +1 -5
  427. package/src/contacts/index.ts +0 -2
  428. package/src/contacts/types.ts +0 -8
  429. package/src/context/window-manager.ts +73 -14
  430. package/src/daemon/assistant-attachments.ts +9 -0
  431. package/src/daemon/computer-use-session.ts +3 -3
  432. package/src/daemon/connection-policy.ts +6 -21
  433. package/src/daemon/context-overflow-policy.ts +1 -1
  434. package/src/daemon/daemon-control.ts +46 -54
  435. package/src/daemon/doordash-steps.ts +1 -1
  436. package/src/daemon/handlers/config-channels.ts +407 -71
  437. package/src/daemon/handlers/config-ingress.ts +17 -85
  438. package/src/daemon/handlers/config-model.ts +145 -123
  439. package/src/daemon/handlers/config-slack-channel.ts +43 -29
  440. package/src/daemon/handlers/config-telegram.ts +32 -27
  441. package/src/daemon/handlers/config-voice.ts +1 -4
  442. package/src/daemon/handlers/dictation.ts +11 -16
  443. package/src/daemon/handlers/identity.ts +5 -6
  444. package/src/daemon/handlers/pairing.ts +5 -13
  445. package/src/daemon/handlers/recording.ts +97 -199
  446. package/src/daemon/handlers/session-history.ts +110 -96
  447. package/src/daemon/handlers/session-user-message.ts +29 -57
  448. package/src/daemon/handlers/sessions.ts +240 -137
  449. package/src/daemon/handlers/shared.ts +62 -95
  450. package/src/daemon/handlers/skills.ts +492 -543
  451. package/src/daemon/lifecycle.ts +168 -55
  452. package/src/daemon/main.ts +1 -0
  453. package/src/daemon/{ipc-contract.ts → message-protocol.ts} +49 -49
  454. package/src/daemon/{ipc-contract → message-types}/computer-use.ts +0 -3
  455. package/src/daemon/{ipc-contract → message-types}/diagnostics.ts +0 -16
  456. package/src/daemon/{ipc-contract → message-types}/integrations.ts +29 -13
  457. package/src/daemon/{ipc-contract → message-types}/memory.ts +8 -0
  458. package/src/daemon/{ipc-contract → message-types}/notifications.ts +15 -1
  459. package/src/daemon/{ipc-contract → message-types}/sessions.ts +1 -0
  460. package/src/daemon/{ipc-contract → message-types}/shared.ts +0 -8
  461. package/src/daemon/{ipc-contract → message-types}/workspace.ts +2 -2
  462. package/src/daemon/providers-setup.ts +0 -5
  463. package/src/daemon/recording-executor.ts +0 -7
  464. package/src/daemon/ride-shotgun-handler.ts +9 -13
  465. package/src/daemon/server.ts +136 -510
  466. package/src/daemon/session-agent-loop-handlers.ts +22 -7
  467. package/src/daemon/session-agent-loop.ts +86 -24
  468. package/src/daemon/session-attachments.ts +1 -1
  469. package/src/daemon/session-error.ts +1 -1
  470. package/src/daemon/session-history.ts +20 -15
  471. package/src/daemon/session-lifecycle.ts +9 -7
  472. package/src/daemon/session-memory.ts +15 -1
  473. package/src/daemon/session-messaging.ts +10 -6
  474. package/src/daemon/session-notifiers.ts +10 -8
  475. package/src/daemon/session-process.ts +34 -25
  476. package/src/daemon/session-queue-manager.ts +1 -1
  477. package/src/daemon/session-runtime-assembly.ts +6 -25
  478. package/src/daemon/session-surfaces.ts +2 -2
  479. package/src/daemon/session-tool-setup.ts +1 -1
  480. package/src/daemon/session-usage.ts +119 -18
  481. package/src/daemon/session.ts +13 -9
  482. package/src/daemon/tool-side-effects.ts +6 -5
  483. package/src/daemon/trace-emitter.ts +1 -1
  484. package/src/daemon/{guardian-verification-intent.ts → verification-session-intent.ts} +16 -16
  485. package/src/daemon/watch-handler.ts +2 -5
  486. package/src/email/service.ts +8 -8
  487. package/src/events/domain-events.ts +0 -1
  488. package/src/events/tool-notification-listener.ts +1 -1
  489. package/src/followups/followup-store.ts +1 -2
  490. package/src/followups/types.ts +0 -6
  491. package/src/heartbeat/heartbeat-service.ts +1 -1
  492. package/src/inbound/platform-callback-registration.ts +1 -1
  493. package/src/inbound/public-ingress-urls.ts +0 -8
  494. package/src/index.ts +12 -0
  495. package/src/mcp/client.ts +1 -1
  496. package/src/mcp/manager.ts +1 -1
  497. package/src/memory/app-store.ts +1 -42
  498. package/src/memory/{guardian-verification.ts → channel-verification-sessions.ts} +110 -93
  499. package/src/memory/conversation-attention-store.ts +154 -0
  500. package/src/memory/conversation-bootstrap.ts +1 -1
  501. package/src/memory/conversation-crud.ts +53 -1
  502. package/src/memory/conversation-display-order-migration.ts +2 -3
  503. package/src/memory/conversation-queries.ts +1 -29
  504. package/src/memory/conversation-title-service.ts +26 -21
  505. package/src/memory/db-connection.ts +1 -8
  506. package/src/memory/db-init.ts +20 -0
  507. package/src/memory/delivery-crud.ts +4 -34
  508. package/src/memory/external-conversation-store.ts +1 -1
  509. package/src/memory/format-recall.ts +47 -0
  510. package/src/memory/guardian-action-store.ts +4 -5
  511. package/src/memory/guardian-rate-limits.ts +0 -3
  512. package/src/memory/invite-store.ts +1 -1
  513. package/src/memory/job-handlers/backfill.ts +9 -2
  514. package/src/memory/job-handlers/extraction.ts +2 -7
  515. package/src/memory/job-handlers/summarization.ts +1 -1
  516. package/src/memory/llm-usage-store.ts +11 -0
  517. package/src/memory/migrations/114-notifications.ts +12 -40
  518. package/src/memory/migrations/140-backfill-usage-cache-accounting.ts +357 -0
  519. package/src/memory/migrations/141-rename-verification-table.ts +55 -0
  520. package/src/memory/migrations/142-rename-verification-session-id-column.ts +32 -0
  521. package/src/memory/migrations/143-rename-guardian-verification-values.ts +48 -0
  522. package/src/memory/migrations/144-rename-voice-to-phone.ts +147 -0
  523. package/src/memory/migrations/index.ts +5 -0
  524. package/src/memory/migrations/registry.ts +30 -0
  525. package/src/memory/qdrant-circuit-breaker.ts +5 -0
  526. package/src/memory/retriever.test.ts +707 -0
  527. package/src/memory/retriever.ts +120 -116
  528. package/src/memory/schema/calls.ts +3 -7
  529. package/src/memory/schema/guardian.ts +2 -2
  530. package/src/memory/search/lexical.ts +4 -1
  531. package/src/memory/search/query-expansion.test.ts +70 -0
  532. package/src/memory/search/query-expansion.ts +118 -0
  533. package/src/memory/search/types.ts +18 -17
  534. package/src/messaging/providers/telegram-bot/adapter.ts +1 -1
  535. package/src/messaging/providers/whatsapp/adapter.ts +1 -4
  536. package/src/messaging/registry.ts +0 -1
  537. package/src/notifications/README.md +13 -22
  538. package/src/notifications/adapters/macos.ts +1 -1
  539. package/src/notifications/conversation-pairing.ts +2 -2
  540. package/src/notifications/copy-composer.ts +2 -2
  541. package/src/notifications/decision-engine.ts +1 -10
  542. package/src/notifications/destination-resolver.ts +2 -3
  543. package/src/notifications/emit-signal.ts +2 -8
  544. package/src/notifications/guardian-question-mode.ts +5 -8
  545. package/src/notifications/signal.ts +1 -2
  546. package/src/notifications/types.ts +1 -1
  547. package/src/oauth/token-persistence.ts +25 -1
  548. package/src/permissions/checker.ts +4 -29
  549. package/src/permissions/defaults.ts +6 -6
  550. package/src/permissions/prompter.ts +1 -1
  551. package/src/permissions/secret-prompter.ts +1 -1
  552. package/src/permissions/shell-identity.ts +1 -1
  553. package/src/permissions/trust-store.ts +13 -76
  554. package/src/permissions/workspace-policy.ts +1 -1
  555. package/src/{config → prompts}/computer-use-prompt.ts +1 -1
  556. package/src/{config → prompts}/system-prompt.ts +40 -21
  557. package/src/runtime/AGENTS.md +6 -8
  558. package/src/runtime/access-request-helper.ts +36 -55
  559. package/src/runtime/actor-trust-resolver.ts +1 -24
  560. package/src/runtime/approval-message-composer.ts +6 -2
  561. package/src/runtime/assistant-event.ts +1 -1
  562. package/src/runtime/auth/__tests__/ipc-auth-context.test.ts +1 -1
  563. package/src/runtime/auth/__tests__/subject.test.ts +32 -0
  564. package/src/runtime/auth/route-policy.ts +140 -24
  565. package/src/runtime/auth/subject.ts +9 -0
  566. package/src/runtime/auth/token-service.ts +11 -0
  567. package/src/runtime/auth/types.ts +1 -1
  568. package/src/runtime/channel-approval-types.ts +1 -1
  569. package/src/runtime/channel-approvals.ts +1 -1
  570. package/src/runtime/channel-invite-transport.ts +0 -2
  571. package/src/runtime/channel-invite-transports/slack.ts +5 -19
  572. package/src/runtime/channel-invite-transports/telegram.ts +17 -34
  573. package/src/runtime/channel-invite-transports/voice.ts +1 -1
  574. package/src/runtime/channel-readiness-service.ts +24 -159
  575. package/src/runtime/channel-readiness-types.ts +5 -1
  576. package/src/runtime/channel-reply-delivery.ts +43 -3
  577. package/src/runtime/channel-retry-sweep.ts +14 -22
  578. package/src/runtime/{channel-guardian-service.ts → channel-verification-service.ts} +50 -53
  579. package/src/runtime/confirmation-request-guardian-bridge.ts +2 -3
  580. package/src/runtime/gateway-client.ts +12 -15
  581. package/src/runtime/guardian-action-followup-executor.ts +8 -73
  582. package/src/runtime/guardian-action-grant-minter.ts +45 -61
  583. package/src/runtime/guardian-action-message-composer.ts +4 -4
  584. package/src/runtime/guardian-reply-router.ts +3 -3
  585. package/src/runtime/http-server.ts +133 -24
  586. package/src/runtime/http-types.ts +34 -1
  587. package/src/runtime/invite-instruction-generator.ts +1 -3
  588. package/src/runtime/invite-redemption-service.ts +5 -5
  589. package/src/runtime/invite-service.ts +7 -7
  590. package/src/runtime/local-actor-identity.ts +28 -2
  591. package/src/runtime/local-gateway-health.ts +275 -0
  592. package/src/runtime/middleware/twilio-validation.ts +3 -3
  593. package/src/runtime/migrations/migration-transport.ts +18 -3
  594. package/src/runtime/migrations/rebind-secrets-screen.ts +2 -2
  595. package/src/runtime/nl-approval-parser.ts +2 -3
  596. package/src/runtime/routes/access-request-decision.ts +2 -2
  597. package/src/runtime/routes/app-management-routes.ts +921 -0
  598. package/src/runtime/routes/approval-routes.ts +76 -7
  599. package/src/runtime/routes/approval-strategies/guardian-callback-strategy.ts +38 -203
  600. package/src/runtime/routes/channel-delivery-routes.ts +5 -4
  601. package/src/runtime/routes/channel-route-shared.ts +1 -3
  602. package/src/runtime/routes/channel-routes.ts +1 -4
  603. package/src/runtime/routes/channel-verification-routes.ts +257 -0
  604. package/src/runtime/routes/computer-use-routes.ts +595 -0
  605. package/src/runtime/routes/contact-routes.ts +1 -317
  606. package/src/runtime/routes/conversation-attention-routes.ts +6 -5
  607. package/src/runtime/routes/conversation-routes.ts +11 -18
  608. package/src/runtime/routes/debug-routes.ts +1 -1
  609. package/src/runtime/routes/diagnostics-routes.ts +813 -0
  610. package/src/runtime/routes/documents-routes.ts +227 -0
  611. package/src/runtime/routes/guardian-approval-interception.ts +25 -48
  612. package/src/runtime/routes/guardian-bootstrap-routes.ts +3 -3
  613. package/src/runtime/routes/guardian-expiry-sweep.ts +2 -2
  614. package/src/runtime/routes/guardian-refresh-routes.ts +11 -6
  615. package/src/runtime/routes/inbound-conversation.ts +3 -10
  616. package/src/runtime/routes/inbound-message-handler.ts +7 -6
  617. package/src/runtime/routes/inbound-stages/acl-enforcement.ts +22 -22
  618. package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +44 -0
  619. package/src/runtime/routes/inbound-stages/background-dispatch.ts +140 -22
  620. package/src/runtime/routes/inbound-stages/bootstrap-intercept.ts +4 -4
  621. package/src/runtime/routes/inbound-stages/edit-intercept.ts +5 -5
  622. package/src/runtime/routes/inbound-stages/escalation-intercept.ts +3 -3
  623. package/src/runtime/routes/inbound-stages/secret-ingress-check.ts +4 -4
  624. package/src/runtime/routes/inbound-stages/verification-intercept.ts +13 -14
  625. package/src/runtime/routes/integrations/slack/channel.ts +72 -0
  626. package/src/runtime/routes/{slack-share-routes.ts → integrations/slack/share.ts} +9 -9
  627. package/src/runtime/routes/integrations/telegram.ts +111 -0
  628. package/src/runtime/routes/integrations/twilio.ts +451 -0
  629. package/src/runtime/routes/invite-routes.ts +2 -2
  630. package/src/runtime/routes/pairing-routes.ts +1 -1
  631. package/src/runtime/routes/recording-routes.ts +332 -0
  632. package/src/{daemon/handlers/config-scheduling.ts → runtime/routes/schedule-routes.ts} +91 -106
  633. package/src/runtime/routes/session-management-routes.ts +167 -0
  634. package/src/runtime/routes/session-query-routes.ts +204 -0
  635. package/src/runtime/routes/settings-routes.ts +977 -0
  636. package/src/runtime/routes/skills-routes.ts +266 -0
  637. package/src/runtime/routes/subagents-routes.ts +246 -0
  638. package/src/runtime/routes/surface-action-routes.ts +100 -10
  639. package/src/runtime/routes/surface-content-routes.ts +1 -1
  640. package/src/runtime/routes/work-items-routes.ts +809 -0
  641. package/src/runtime/routes/workspace-routes.test.ts +778 -0
  642. package/src/runtime/routes/workspace-routes.ts +410 -0
  643. package/src/runtime/routes/workspace-utils.ts +88 -0
  644. package/src/runtime/telegram-streaming-delivery.test.ts +597 -0
  645. package/src/runtime/telegram-streaming-delivery.ts +380 -0
  646. package/src/runtime/tool-grant-request-helper.ts +1 -2
  647. package/src/runtime/trust-context-resolver.ts +0 -1
  648. package/src/runtime/{guardian-outbound-actions.ts → verification-outbound-actions.ts} +23 -188
  649. package/src/runtime/verification-rate-limiter.ts +2 -2
  650. package/src/runtime/{guardian-verification-templates.ts → verification-templates.ts} +2 -28
  651. package/src/schedule/integration-status.ts +2 -2
  652. package/src/schedule/schedule-store.ts +7 -9
  653. package/src/sequence/engine.ts +1 -1
  654. package/src/skills/active-skill-tools.ts +0 -8
  655. package/src/skills/clawhub.ts +1 -10
  656. package/src/skills/managed-store.ts +14 -4
  657. package/src/skills/slash-commands.ts +1 -1
  658. package/src/subagent/manager.ts +1 -1
  659. package/src/subagent/types.ts +1 -1
  660. package/src/tasks/SPEC.md +10 -10
  661. package/src/tasks/task-scheduler.ts +1 -1
  662. package/src/telegram/bot-username.ts +13 -0
  663. package/src/tools/assets/materialize.ts +1 -1
  664. package/src/tools/assets/search.ts +1 -1
  665. package/src/tools/browser/browser-execution.ts +2 -2
  666. package/src/tools/browser/browser-manager.ts +88 -11
  667. package/src/tools/browser/browser-screencast.ts +1 -1
  668. package/src/tools/browser/headless-browser.ts +0 -17
  669. package/src/tools/browser/jit-auth.ts +1 -1
  670. package/src/tools/browser/recording-store.ts +19 -1
  671. package/src/tools/browser/runtime-check.ts +4 -2
  672. package/src/tools/calls/call-start.ts +3 -3
  673. package/src/tools/credentials/metadata-store.ts +0 -13
  674. package/src/tools/credentials/vault.ts +7 -31
  675. package/src/tools/followups/followup_create.ts +0 -8
  676. package/src/tools/mcp/mcp-tool-factory.ts +1 -1
  677. package/src/tools/memory/definitions.ts +32 -10
  678. package/src/tools/memory/handlers.test.ts +573 -0
  679. package/src/tools/memory/handlers.ts +222 -65
  680. package/src/tools/memory/register.ts +53 -24
  681. package/src/tools/network/script-proxy/session-manager.ts +1 -12
  682. package/src/tools/schedule/update.ts +0 -8
  683. package/src/tools/skills/load.ts +3 -3
  684. package/src/tools/subagent/read.ts +1 -1
  685. package/src/tools/system/voice-config.ts +2 -14
  686. package/src/tools/terminal/safe-env.ts +5 -18
  687. package/src/tools/tool-approval-handler.ts +4 -4
  688. package/src/tools/tool-manifest.ts +4 -2
  689. package/src/tools/types.ts +1 -1
  690. package/src/tools/{guardian-control-plane-policy.ts → verification-control-plane-policy.ts} +37 -39
  691. package/src/twitter/platform-proxy-client.ts +405 -0
  692. package/src/usage/types.ts +21 -0
  693. package/src/util/canonicalize-identity.ts +2 -6
  694. package/src/util/cookie-session.ts +35 -51
  695. package/src/util/platform.ts +93 -86
  696. package/src/util/pricing.ts +180 -43
  697. package/src/work-items/work-item-runner.ts +1 -1
  698. package/scripts/ipc/check-contract-inventory.ts +0 -107
  699. package/scripts/ipc/check-swift-decoder-drift.ts +0 -184
  700. package/scripts/ipc/generate-swift.ts +0 -528
  701. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -3043
  702. package/src/__tests__/app-migration.test.ts +0 -148
  703. package/src/__tests__/config-loader-migration.test.ts +0 -85
  704. package/src/__tests__/daemon-lifecycle.test.ts +0 -715
  705. package/src/__tests__/daemon-server-session-init.test.ts +0 -864
  706. package/src/__tests__/guardian-actions-endpoint.test.ts +0 -1452
  707. package/src/__tests__/handlers-add-trust-rule-metadata.test.ts +0 -228
  708. package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -397
  709. package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -218
  710. package/src/__tests__/handlers-slack-config.test.ts +0 -140
  711. package/src/__tests__/handlers-telegram-config.test.ts +0 -1317
  712. package/src/__tests__/handlers-twitter-config.test.ts +0 -1145
  713. package/src/__tests__/ingress-reconcile.test.ts +0 -606
  714. package/src/__tests__/integrations-cli.test.ts +0 -232
  715. package/src/__tests__/ipc-blob-store.test.ts +0 -329
  716. package/src/__tests__/ipc-contract-inventory.test.ts +0 -69
  717. package/src/__tests__/ipc-contract.test.ts +0 -76
  718. package/src/__tests__/ipc-protocol.test.ts +0 -120
  719. package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -250
  720. package/src/__tests__/ipc-snapshot.test.ts +0 -2197
  721. package/src/__tests__/ipc-validate.test.ts +0 -471
  722. package/src/__tests__/migration-cli-flows.test.ts +0 -186
  723. package/src/__tests__/migration-ordering.test.ts +0 -267
  724. package/src/__tests__/oauth-connect-handler.test.ts +0 -361
  725. package/src/__tests__/platform-move-helper.test.ts +0 -108
  726. package/src/__tests__/platform-socket-path.test.ts +0 -52
  727. package/src/__tests__/platform-workspace-migration.test.ts +0 -1051
  728. package/src/__tests__/recording-intent-handler.test.ts +0 -1155
  729. package/src/__tests__/script-proxy-profile-template-fallback.test.ts +0 -127
  730. package/src/__tests__/sms-messaging-provider.test.ts +0 -156
  731. package/src/__tests__/tool-permission-simulate-handler.test.ts +0 -367
  732. package/src/__tests__/twitter-auth-handler.test.ts +0 -561
  733. package/src/__tests__/work-item-output.test.ts +0 -150
  734. package/src/amazon/session.ts +0 -58
  735. package/src/cli/channels.ts +0 -51
  736. package/src/cli/influencer.ts +0 -319
  737. package/src/cli/integrations.ts +0 -372
  738. package/src/cli/ipc-client.ts +0 -88
  739. package/src/config/bundled-skills/configure-settings/SKILL.md +0 -86
  740. package/src/config/bundled-skills/doordash/lib/shared/ipc.ts +0 -32
  741. package/src/config/bundled-skills/sms-setup/SKILL.md +0 -210
  742. package/src/config/core-schema.ts +0 -434
  743. package/src/config/memory-schema.ts +0 -617
  744. package/src/daemon/auth-manager.ts +0 -106
  745. package/src/daemon/handlers/apps.ts +0 -758
  746. package/src/daemon/handlers/avatar.ts +0 -73
  747. package/src/daemon/handlers/browser.ts +0 -3
  748. package/src/daemon/handlers/computer-use.ts +0 -231
  749. package/src/daemon/handlers/config-dispatch.ts +0 -29
  750. package/src/daemon/handlers/config-heartbeat.ts +0 -299
  751. package/src/daemon/handlers/config-inbox.ts +0 -457
  752. package/src/daemon/handlers/config-integrations.ts +0 -409
  753. package/src/daemon/handlers/config-platform.ts +0 -77
  754. package/src/daemon/handlers/config-slack.ts +0 -41
  755. package/src/daemon/handlers/config-tools.ts +0 -226
  756. package/src/daemon/handlers/config-trust.ts +0 -135
  757. package/src/daemon/handlers/config.ts +0 -64
  758. package/src/daemon/handlers/contacts.ts +0 -193
  759. package/src/daemon/handlers/diagnostics.ts +0 -382
  760. package/src/daemon/handlers/documents.ts +0 -188
  761. package/src/daemon/handlers/guardian-actions.ts +0 -82
  762. package/src/daemon/handlers/home-base.ts +0 -82
  763. package/src/daemon/handlers/index.ts +0 -222
  764. package/src/daemon/handlers/misc.ts +0 -1139
  765. package/src/daemon/handlers/navigate-settings.ts +0 -29
  766. package/src/daemon/handlers/oauth-connect.ts +0 -202
  767. package/src/daemon/handlers/open-bundle-handler.ts +0 -88
  768. package/src/daemon/handlers/publish.ts +0 -176
  769. package/src/daemon/handlers/signing.ts +0 -56
  770. package/src/daemon/handlers/subagents.ts +0 -286
  771. package/src/daemon/handlers/twitter-auth.ts +0 -220
  772. package/src/daemon/handlers/work-items.ts +0 -796
  773. package/src/daemon/handlers/workspace-files.ts +0 -84
  774. package/src/daemon/handlers.ts +0 -16
  775. package/src/daemon/ipc-blob-store.ts +0 -246
  776. package/src/daemon/ipc-contract-inventory.json +0 -348
  777. package/src/daemon/ipc-contract-inventory.ts +0 -202
  778. package/src/daemon/ipc-handler.ts +0 -120
  779. package/src/daemon/ipc-protocol.ts +0 -85
  780. package/src/daemon/ipc-validate.ts +0 -254
  781. package/src/memory/app-migration.ts +0 -114
  782. package/src/memory/channel-delivery-store.ts +0 -40
  783. package/src/memory/channel-guardian-store.ts +0 -83
  784. package/src/memory/conversation-store.ts +0 -102
  785. package/src/memory/schema-migration.ts +0 -38
  786. package/src/messaging/providers/sms/adapter.ts +0 -232
  787. package/src/messaging/providers/sms/client.ts +0 -93
  788. package/src/messaging/providers/sms/types.ts +0 -7
  789. package/src/migrations/config-merge.ts +0 -62
  790. package/src/migrations/data-layout.ts +0 -89
  791. package/src/migrations/data-merge.ts +0 -44
  792. package/src/migrations/hooks-merge.ts +0 -118
  793. package/src/migrations/index.ts +0 -6
  794. package/src/migrations/log.ts +0 -28
  795. package/src/migrations/skills-merge.ts +0 -44
  796. package/src/migrations/workspace-layout.ts +0 -94
  797. package/src/notifications/adapters/sms.ts +0 -94
  798. package/src/runtime/channel-approval-parser.ts +0 -123
  799. package/src/runtime/channel-invite-transports/sms.ts +0 -53
  800. package/src/runtime/routes/approval-strategies/guardian-legacy-fallback-strategy.ts +0 -82
  801. package/src/runtime/routes/integration-routes.ts +0 -381
  802. package/src/runtime/routes/twilio-routes.ts +0 -1251
  803. package/src/twitter/router.ts +0 -131
  804. package/src/twitter/session.ts +0 -54
  805. package/src/watcher/providers/slack.ts +0 -282
  806. /package/src/{amazon → cli/commands/amazon}/cart.ts +0 -0
  807. /package/src/{amazon → cli/commands/amazon}/checkout.ts +0 -0
  808. /package/src/{amazon → cli/commands/amazon}/product-details.ts +0 -0
  809. /package/src/{amazon → cli/commands/amazon}/search.ts +0 -0
  810. /package/src/{twitter → cli/commands/twitter}/oauth-client.ts +0 -0
  811. /package/src/config/{calls-schema.ts → schemas/calls.ts} +0 -0
  812. /package/src/config/{elevenlabs-schema.ts → schemas/elevenlabs.ts} +0 -0
  813. /package/src/config/{mcp-schema.ts → schemas/mcp.ts} +0 -0
  814. /package/src/config/{notifications-schema.ts → schemas/notifications.ts} +0 -0
  815. /package/src/config/{sandbox-schema.ts → schemas/sandbox.ts} +0 -0
  816. /package/src/config/{skills-schema.ts → schemas/skills.ts} +0 -0
  817. /package/src/daemon/{ipc-contract → message-types}/apps.ts +0 -0
  818. /package/src/daemon/{ipc-contract → message-types}/browser.ts +0 -0
  819. /package/src/daemon/{ipc-contract → message-types}/contacts.ts +0 -0
  820. /package/src/daemon/{ipc-contract → message-types}/documents.ts +0 -0
  821. /package/src/daemon/{ipc-contract → message-types}/guardian-actions.ts +0 -0
  822. /package/src/daemon/{ipc-contract → message-types}/inbox.ts +0 -0
  823. /package/src/daemon/{ipc-contract → message-types}/messages.ts +0 -0
  824. /package/src/daemon/{ipc-contract → message-types}/pairing.ts +0 -0
  825. /package/src/daemon/{ipc-contract → message-types}/schedules.ts +0 -0
  826. /package/src/daemon/{ipc-contract → message-types}/settings.ts +0 -0
  827. /package/src/daemon/{ipc-contract → message-types}/skills.ts +0 -0
  828. /package/src/daemon/{ipc-contract → message-types}/subagents.ts +0 -0
  829. /package/src/daemon/{ipc-contract → message-types}/surfaces.ts +0 -0
  830. /package/src/daemon/{ipc-contract → message-types}/trust.ts +0 -0
  831. /package/src/daemon/{ipc-contract → message-types}/work-items.ts +0 -0
  832. /package/src/{cli/email-guardrails.ts → email/guardrails.ts} +0 -0
  833. /package/src/{config → prompts}/__tests__/build-cli-reference-section.test.ts +0 -0
  834. /package/src/{config → prompts}/templates/BOOTSTRAP.md +0 -0
  835. /package/src/{config → prompts}/templates/IDENTITY.md +0 -0
  836. /package/src/{config → prompts}/templates/SOUL.md +0 -0
  837. /package/src/{config → prompts}/templates/UPDATES.md +0 -0
  838. /package/src/{config → prompts}/templates/USER.md +0 -0
  839. /package/src/{config → prompts}/update-bulletin-format.ts +0 -0
  840. /package/src/{config → prompts}/update-bulletin-state.ts +0 -0
  841. /package/src/{config → prompts}/update-bulletin-template-path.ts +0 -0
  842. /package/src/{config → prompts}/update-bulletin.ts +0 -0
  843. /package/src/{config → prompts}/user-reference.ts +0 -0
@@ -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":
@@ -779,7 +761,6 @@ export function buildInboundActorContextBlock(
779
761
  if (ctx.memberPolicy) {
780
762
  lines.push(`member_policy: ${ctx.memberPolicy}`);
781
763
  }
782
- lines.push(`denial_reason: ${ctx.denialReason ?? "none"}`);
783
764
  // Contact metadata — only included when the sender has a contact record
784
765
  // with non-default values.
785
766
  if (ctx.contactNotes) {
@@ -20,8 +20,8 @@ import type {
20
20
  TableRow,
21
21
  TableSurfaceData,
22
22
  UiSurfaceShow,
23
- } from "./ipc-protocol.js";
24
- import { INTERACTIVE_SURFACE_TYPES } from "./ipc-protocol.js";
23
+ } from "./message-protocol.js";
24
+ import { INTERACTIVE_SURFACE_TYPES } from "./message-protocol.js";
25
25
  import { buildSessionErrorMessage } from "./session-error.js";
26
26
 
27
27
  const log = getLogger("session-surfaces");
@@ -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,
@@ -1,10 +1,15 @@
1
1
  import { getConfig } from "../config/loader.js";
2
- import * as conversationStore from "../memory/conversation-store.js";
2
+ import { updateConversationUsage } from "../memory/conversation-crud.js";
3
3
  import { recordUsageEvent } from "../memory/llm-usage-store.js";
4
4
  import type { UsageActor } from "../usage/actors.js";
5
+ import type {
6
+ AnthropicCacheCreationTokenDetails,
7
+ PricingResult,
8
+ PricingUsage,
9
+ } from "../usage/types.js";
5
10
  import { getLogger } from "../util/logger.js";
6
- import { estimateCost, resolvePricingWithOverrides } from "../util/pricing.js";
7
- import type { ServerMessage, UsageStats } from "./ipc-protocol.js";
11
+ import { resolvePricingForUsageWithOverrides } from "../util/pricing.js";
12
+ import type { ServerMessage, UsageStats } from "./message-protocol.js";
8
13
 
9
14
  const log = getLogger("session-usage");
10
15
 
@@ -14,6 +19,81 @@ export interface UsageContext {
14
19
  usageStats: UsageStats;
15
20
  }
16
21
 
22
+ function normalizeTokenCount(value: number | null | undefined): number {
23
+ if (typeof value !== "number" || !Number.isFinite(value)) return 0;
24
+ return Math.max(value, 0);
25
+ }
26
+
27
+ function asRecord(value: unknown): Record<string, unknown> | null {
28
+ if (typeof value !== "object" || value == null) return null;
29
+ return value as Record<string, unknown>;
30
+ }
31
+
32
+ function extractAnthropicCacheCreationFromResponse(
33
+ response: unknown,
34
+ ): AnthropicCacheCreationTokenDetails | null {
35
+ const rawResponse = asRecord(response);
36
+ const usage = asRecord(rawResponse?.usage);
37
+ const cacheCreation = asRecord(usage?.cache_creation);
38
+ if (!cacheCreation) return null;
39
+
40
+ return {
41
+ ephemeral_5m_input_tokens: normalizeTokenCount(
42
+ cacheCreation.ephemeral_5m_input_tokens as number | null | undefined,
43
+ ),
44
+ ephemeral_1h_input_tokens: normalizeTokenCount(
45
+ cacheCreation.ephemeral_1h_input_tokens as number | null | undefined,
46
+ ),
47
+ };
48
+ }
49
+
50
+ function extractAnthropicCacheCreation(
51
+ rawResponse: unknown,
52
+ ): AnthropicCacheCreationTokenDetails | null {
53
+ const responses = Array.isArray(rawResponse) ? rawResponse : [rawResponse];
54
+ let foundDetails = false;
55
+ let ephemeral5mInputTokens = 0;
56
+ let ephemeral1hInputTokens = 0;
57
+
58
+ for (const response of responses) {
59
+ const details = extractAnthropicCacheCreationFromResponse(response);
60
+ if (!details) continue;
61
+ foundDetails = true;
62
+ ephemeral5mInputTokens += normalizeTokenCount(
63
+ details.ephemeral_5m_input_tokens,
64
+ );
65
+ ephemeral1hInputTokens += normalizeTokenCount(
66
+ details.ephemeral_1h_input_tokens,
67
+ );
68
+ }
69
+
70
+ if (!foundDetails) return null;
71
+
72
+ return {
73
+ ephemeral_5m_input_tokens: ephemeral5mInputTokens,
74
+ ephemeral_1h_input_tokens: ephemeral1hInputTokens,
75
+ };
76
+ }
77
+
78
+ function resolveStructuredPricing(
79
+ providerName: string,
80
+ model: string,
81
+ usage: PricingUsage,
82
+ ): PricingResult {
83
+ try {
84
+ const config = getConfig();
85
+ return resolvePricingForUsageWithOverrides(
86
+ providerName,
87
+ model,
88
+ usage,
89
+ config.pricingOverrides,
90
+ );
91
+ } catch (err) {
92
+ log.warn({ err, model, providerName }, "Failed to resolve usage pricing");
93
+ return { estimatedCostUsd: null, pricingStatus: "unpriced" };
94
+ }
95
+ }
96
+
17
97
  export function recordUsage(
18
98
  ctx: UsageContext,
19
99
  inputTokens: number,
@@ -22,20 +102,49 @@ export function recordUsage(
22
102
  onEvent: (msg: ServerMessage) => void,
23
103
  actor: UsageActor,
24
104
  requestId: string | null = null,
105
+ cacheCreationInputTokens = 0,
106
+ cacheReadInputTokens = 0,
107
+ rawResponse?: unknown,
25
108
  ): void {
26
109
  if (inputTokens <= 0 && outputTokens <= 0) return;
27
110
 
28
- const estimatedCost = estimateCost(
29
- inputTokens,
111
+ const normalizedCacheCreationInputTokens = normalizeTokenCount(
112
+ cacheCreationInputTokens,
113
+ );
114
+ const normalizedCacheReadInputTokens =
115
+ normalizeTokenCount(cacheReadInputTokens);
116
+ const directInputTokens = Math.max(
117
+ normalizeTokenCount(inputTokens) -
118
+ normalizedCacheCreationInputTokens -
119
+ normalizedCacheReadInputTokens,
120
+ 0,
121
+ );
122
+
123
+ const pricingUsage: PricingUsage = {
124
+ directInputTokens,
30
125
  outputTokens,
31
- model,
126
+ cacheCreationInputTokens: normalizedCacheCreationInputTokens,
127
+ cacheReadInputTokens: normalizedCacheReadInputTokens,
128
+ anthropicCacheCreation:
129
+ ctx.providerName === "anthropic"
130
+ ? extractAnthropicCacheCreation(rawResponse)
131
+ : null,
132
+ };
133
+ const pricing = resolveStructuredPricing(
32
134
  ctx.providerName,
135
+ model,
136
+ pricingUsage,
33
137
  );
138
+ const estimatedCost =
139
+ pricing.pricingStatus === "priced" && pricing.estimatedCostUsd != null
140
+ ? pricing.estimatedCostUsd
141
+ : 0;
142
+
34
143
  ctx.usageStats.inputTokens += inputTokens;
35
144
  ctx.usageStats.outputTokens += outputTokens;
36
145
  ctx.usageStats.estimatedCost += estimatedCost;
37
146
 
38
- conversationStore.updateConversationUsage(
147
+ updateConversationUsage(
39
148
  ctx.conversationId,
40
149
  ctx.usageStats.inputTokens,
41
150
  ctx.usageStats.outputTokens,
@@ -53,23 +162,15 @@ export function recordUsage(
53
162
 
54
163
  // Dual-write: persist per-turn usage event to the new ledger table
55
164
  try {
56
- const config = getConfig();
57
- const pricing = resolvePricingWithOverrides(
58
- ctx.providerName,
59
- model,
60
- inputTokens,
61
- outputTokens,
62
- config.pricingOverrides,
63
- );
64
165
  recordUsageEvent(
65
166
  {
66
167
  actor,
67
168
  provider: ctx.providerName,
68
169
  model,
69
- inputTokens,
170
+ inputTokens: directInputTokens,
70
171
  outputTokens,
71
- cacheCreationInputTokens: null,
72
- cacheReadInputTokens: null,
172
+ cacheCreationInputTokens: normalizedCacheCreationInputTokens,
173
+ cacheReadInputTokens: normalizedCacheReadInputTokens,
73
174
  conversationId: ctx.conversationId,
74
175
  runId: null,
75
176
  requestId,
@@ -22,7 +22,6 @@ import type {
22
22
  TurnInterfaceContext,
23
23
  } from "../channels/types.js";
24
24
  import { getConfig } from "../config/loader.js";
25
- import { buildSystemPrompt } from "../config/system-prompt.js";
26
25
  import { ContextWindowManager } from "../context/window-manager.js";
27
26
  import { EventBus } from "../events/bus.js";
28
27
  import type { AssistantDomainEvents } from "../events/domain-events.js";
@@ -39,6 +38,7 @@ import { getHookManager } from "../hooks/manager.js";
39
38
  import { PermissionPrompter } from "../permissions/prompter.js";
40
39
  import { SecretPrompter } from "../permissions/secret-prompter.js";
41
40
  import type { UserDecision } from "../permissions/types.js";
41
+ import { buildSystemPrompt } from "../prompts/system-prompt.js";
42
42
  import type { Message } from "../providers/types.js";
43
43
  import type { Provider } from "../providers/types.js";
44
44
  import type { TrustClass } from "../runtime/actor-trust-resolver.js";
@@ -46,17 +46,17 @@ import type { AuthContext } from "../runtime/auth/types.js";
46
46
  import * as approvalOverrides from "../runtime/session-approval-overrides.js";
47
47
  import { ToolExecutor } from "../tools/executor.js";
48
48
  import type { AssistantAttachmentDraft } from "./assistant-attachments.js";
49
- import type {
50
- AssistantActivityState,
51
- ConfirmationStateChanged,
52
- } from "./ipc-contract/messages.js";
53
49
  import type {
54
50
  ServerMessage,
55
51
  SurfaceData,
56
52
  SurfaceType,
57
53
  UsageStats,
58
54
  UserMessageAttachment,
59
- } from "./ipc-protocol.js";
55
+ } from "./message-protocol.js";
56
+ import type {
57
+ AssistantActivityState,
58
+ ConfirmationStateChanged,
59
+ } from "./message-types/messages.js";
60
60
  import { runAgentLoopImpl } from "./session-agent-loop.js";
61
61
  import { ConflictGate } from "./session-conflict-gate.js";
62
62
  import type { HistorySessionContext } from "./session-history.js";
@@ -352,11 +352,11 @@ export class Session {
352
352
  resolveTools,
353
353
  resolveSystemPromptCallback,
354
354
  );
355
- this.contextWindowManager = new ContextWindowManager(
355
+ this.contextWindowManager = new ContextWindowManager({
356
356
  provider,
357
357
  systemPrompt,
358
- config.contextWindow,
359
- );
358
+ config: config.contextWindow,
359
+ });
360
360
 
361
361
  void getHookManager().trigger("session-start", {
362
362
  sessionId: this.conversationId,
@@ -403,6 +403,10 @@ export class Session {
403
403
  this.onStateSignal = listener;
404
404
  }
405
405
 
406
+ get hasStateSignalListener(): boolean {
407
+ return this.onStateSignal !== undefined;
408
+ }
409
+
406
410
  setSandboxOverride(enabled: boolean | undefined): void {
407
411
  this.sandboxOverride = enabled;
408
412
  }
@@ -17,7 +17,7 @@ import type { ToolExecutionResult } from "../tools/types.js";
17
17
  import { getLogger } from "../util/logger.js";
18
18
  import { getWorkspaceDir } from "../util/platform.js";
19
19
  import { isDoordashCommand, updateDoordashProgress } from "./doordash-steps.js";
20
- import type { ServerMessage } from "./ipc-protocol.js";
20
+ import type { ServerMessage } from "./message-protocol.js";
21
21
  import { refreshSurfacesForApp } from "./session-surfaces.js";
22
22
  import type { ToolSetupContext } from "./session-tool-setup.js";
23
23
 
@@ -214,13 +214,12 @@ registerHook(
214
214
  registerHook(
215
215
  "voice_config_update",
216
216
  (_name, input, _result, { broadcastToAllClients }) => {
217
- const setting =
218
- (input.setting as string) ??
219
- (input.activation_key ? "activation_key" : undefined);
217
+ const setting = input.setting as string | undefined;
220
218
  if (!setting) return;
221
219
 
222
220
  const SETTING_TO_KEY: Record<string, string> = {
223
221
  activation_key: "pttActivationKey",
222
+ tts_voice_id: "ttsVoiceId",
224
223
  wake_word_enabled: "wakeWordEnabled",
225
224
  wake_word_keyword: "wakeWordKeyword",
226
225
  wake_word_timeout: "wakeWordTimeoutSeconds",
@@ -230,7 +229,7 @@ registerHook(
230
229
 
231
230
  // Coerce the value to the correct type before broadcasting, matching
232
231
  // the validation logic in the tool's execute method.
233
- const raw = input.value ?? input.activation_key;
232
+ const raw = input.value;
234
233
  let coerced: string | boolean | number = raw as string;
235
234
  if (setting === "wake_word_enabled") {
236
235
  coerced = raw === true || raw === "true";
@@ -238,6 +237,8 @@ registerHook(
238
237
  coerced = typeof raw === "number" ? raw : Number(raw);
239
238
  } else if (setting === "wake_word_keyword" && typeof raw === "string") {
240
239
  coerced = raw.trim();
240
+ } else if (setting === "tts_voice_id" && typeof raw === "string") {
241
+ coerced = raw.trim();
241
242
  }
242
243
  broadcastToAllClients?.({
243
244
  type: "client_settings_update",
@@ -1,6 +1,6 @@
1
1
  import { v4 as uuid } from "uuid";
2
2
 
3
- import type { ServerMessage, TraceEventKind } from "./ipc-protocol.js";
3
+ import type { ServerMessage, TraceEventKind } from "./message-protocol.js";
4
4
 
5
5
  export type TraceEventStatus = "info" | "success" | "warning" | "error";
6
6