@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
@@ -11,7 +11,8 @@ import { getLogger } from "../util/logger.js";
11
11
  import { createRowMapper } from "../util/row-mapper.js";
12
12
  import { deleteOrphanAttachments } from "./attachments-store.js";
13
13
  import { projectAssistantMessage } from "./conversation-attention-store.js";
14
- import { getDb, rawExec, rawGet } from "./db.js";
14
+ import { ensureDisplayOrderMigration } from "./conversation-display-order-migration.js";
15
+ import { getDb, rawExec, rawGet, rawRun } from "./db.js";
15
16
  import { indexMessageNow } from "./indexer.js";
16
17
  import {
17
18
  channelInboundEvents,
@@ -893,3 +894,54 @@ export function getConversationRecentProvenanceTrustClass(
893
894
  return undefined;
894
895
  }
895
896
  }
897
+
898
+ // ---------------------------------------------------------------------------
899
+ // CRUD functions for display_order and is_pinned
900
+ // ---------------------------------------------------------------------------
901
+
902
+ export function batchSetDisplayOrders(
903
+ updates: Array<{
904
+ id: string;
905
+ displayOrder: number | null;
906
+ isPinned: boolean;
907
+ }>,
908
+ ): void {
909
+ ensureDisplayOrderMigration();
910
+ rawExec("BEGIN");
911
+ try {
912
+ for (const update of updates) {
913
+ rawRun(
914
+ "UPDATE conversations SET display_order = ?, is_pinned = ? WHERE id = ?",
915
+ update.displayOrder,
916
+ update.isPinned ? 1 : 0,
917
+ update.id,
918
+ );
919
+ }
920
+ rawExec("COMMIT");
921
+ } catch (err) {
922
+ rawExec("ROLLBACK");
923
+ throw err;
924
+ }
925
+ }
926
+
927
+ export function getDisplayMetaForConversations(
928
+ conversationIds: string[],
929
+ ): Map<string, { displayOrder: number | null; isPinned: boolean }> {
930
+ ensureDisplayOrderMigration();
931
+ const result = new Map<
932
+ string,
933
+ { displayOrder: number | null; isPinned: boolean }
934
+ >();
935
+ if (conversationIds.length === 0) return result;
936
+ for (const id of conversationIds) {
937
+ const row = rawGet<{
938
+ display_order: number | null;
939
+ is_pinned: number | null;
940
+ }>("SELECT display_order, is_pinned FROM conversations WHERE id = ?", id);
941
+ result.set(id, {
942
+ displayOrder: row?.display_order ?? null,
943
+ isPinned: (row?.is_pinned ?? 0) === 1,
944
+ });
945
+ }
946
+ return result;
947
+ }
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Runtime migration for display_order and is_pinned columns on the
3
3
  * conversations table. Extracted into its own module to avoid circular
4
- * dependencies between conversation-store.ts (which re-exports from
5
- * conversation-queries.ts) and conversation-queries.ts (which needs
6
- * the migration to run before ORDER BY display_order).
4
+ * dependencies between conversation-crud.ts and conversation-queries.ts
5
+ * (which needs the migration to run before ORDER BY display_order).
7
6
  */
8
7
 
9
8
  import { getLogger } from "../util/logger.js";
@@ -1,4 +1,4 @@
1
- import { and, asc, count, desc, eq, gte, lt, ne, or, sql } from "drizzle-orm";
1
+ import { and, asc, count, desc, eq, lt, or, sql } from "drizzle-orm";
2
2
 
3
3
  import { getLogger } from "../util/logger.js";
4
4
  import type { ConversationRow, MessageRow } from "./conversation-crud.js";
@@ -55,34 +55,6 @@ export function getLatestConversation(): ConversationRow | null {
55
55
  return row ? parseConversation(row) : null;
56
56
  }
57
57
 
58
- /**
59
- * Get the next message in a conversation after a given message.
60
- * Uses gte + ne(id) instead of gt on timestamp so that messages sharing the
61
- * same millisecond (common in legacy conversations where an assistant turn and
62
- * the following user tool_result are saved in the same tick) are not skipped.
63
- */
64
- export function getNextMessage(
65
- conversationId: string,
66
- afterTimestamp: number,
67
- excludeMessageId: string,
68
- ): MessageRow | null {
69
- const db = getDb();
70
- const row = db
71
- .select()
72
- .from(messages)
73
- .where(
74
- and(
75
- eq(messages.conversationId, conversationId),
76
- gte(messages.createdAt, afterTimestamp),
77
- ne(messages.id, excludeMessageId),
78
- ),
79
- )
80
- .orderBy(asc(messages.createdAt), asc(messages.id))
81
- .limit(1)
82
- .get();
83
- return row ? parseMessage(row) : null;
84
- }
85
-
86
58
  export interface PaginatedMessagesResult {
87
59
  messages: MessageRow[];
88
60
  /** Whether older messages exist beyond the returned page. */
@@ -12,8 +12,12 @@ import { getConfiguredProvider } from "../providers/provider-send-message.js";
12
12
  import type { Provider } from "../providers/types.js";
13
13
  import { getLogger } from "../util/logger.js";
14
14
  import { truncate } from "../util/truncate.js";
15
- import type { MessageRow } from "./conversation-store.js";
16
- import * as conversationStore from "./conversation-store.js";
15
+ import {
16
+ getConversation,
17
+ getMessages,
18
+ type MessageRow,
19
+ updateConversationTitle,
20
+ } from "./conversation-crud.js";
17
21
 
18
22
  const log = getLogger("conversation-title-service");
19
23
 
@@ -110,7 +114,7 @@ export async function generateAndPersistConversationTitle(
110
114
  } = params;
111
115
 
112
116
  // Check current title is replaceable
113
- const conversation = conversationStore.getConversation(conversationId);
117
+ const conversation = getConversation(conversationId);
114
118
  if (conversation && !isReplaceableTitle(conversation.title)) {
115
119
  return { title: conversation.title!, updated: false };
116
120
  }
@@ -119,7 +123,7 @@ export async function generateAndPersistConversationTitle(
119
123
  if (!provider) {
120
124
  // No provider available — fall back to context-derived title or untitled
121
125
  const fallback = deriveFallbackTitle(context) ?? UNTITLED_FALLBACK;
122
- conversationStore.updateConversationTitle(conversationId, fallback, 1);
126
+ updateConversationTitle(conversationId, fallback, 1);
123
127
  onTitleUpdated?.(fallback);
124
128
  return { title: fallback, updated: true };
125
129
  }
@@ -136,7 +140,10 @@ export async function generateAndPersistConversationTitle(
136
140
  [],
137
141
  undefined,
138
142
  {
139
- config: { max_tokens: config.daemon.titleGenerationMaxTokens },
143
+ config: {
144
+ max_tokens: config.daemon.titleGenerationMaxTokens,
145
+ modelIntent: "latency-optimized",
146
+ },
140
147
  signal: combinedSignal,
141
148
  },
142
149
  );
@@ -149,12 +156,12 @@ export async function generateAndPersistConversationTitle(
149
156
  }
150
157
 
151
158
  // Re-check replaceability before persisting (race guard)
152
- const current = conversationStore.getConversation(conversationId);
159
+ const current = getConversation(conversationId);
153
160
  if (current && !isReplaceableTitle(current.title)) {
154
161
  return { title: current.title!, updated: false };
155
162
  }
156
163
 
157
- conversationStore.updateConversationTitle(conversationId, title, 1);
164
+ updateConversationTitle(conversationId, title, 1);
158
165
  onTitleUpdated?.(title);
159
166
  log.info({ conversationId, title }, "Auto-generated conversation title");
160
167
  return { title, updated: true };
@@ -165,13 +172,13 @@ export async function generateAndPersistConversationTitle(
165
172
  // text-response path above). A concurrent custom rename may have landed
166
173
  // while the LLM request was in-flight; writing unconditionally would
167
174
  // clobber the user's intent.
168
- const currentForFallback = conversationStore.getConversation(conversationId);
175
+ const currentForFallback = getConversation(conversationId);
169
176
  if (currentForFallback && !isReplaceableTitle(currentForFallback.title)) {
170
177
  return { title: currentForFallback.title!, updated: false };
171
178
  }
172
179
 
173
180
  const fallback = deriveFallbackTitle(context) ?? UNTITLED_FALLBACK;
174
- conversationStore.updateConversationTitle(conversationId, fallback, 1);
181
+ updateConversationTitle(conversationId, fallback, 1);
175
182
  onTitleUpdated?.(fallback);
176
183
  return { title: fallback, updated: true };
177
184
  }
@@ -191,16 +198,11 @@ export function queueGenerateConversationTitle(
191
198
  );
192
199
  // Replace loading placeholder with stable fallback
193
200
  try {
194
- const conversation = conversationStore.getConversation(
195
- params.conversationId,
196
- );
201
+ const conversation = getConversation(params.conversationId);
197
202
  if (conversation && conversation.title === GENERATING_TITLE) {
198
203
  const fallback =
199
204
  deriveFallbackTitle(params.context) ?? UNTITLED_FALLBACK;
200
- conversationStore.updateConversationTitle(
201
- params.conversationId,
202
- fallback,
203
- );
205
+ updateConversationTitle(params.conversationId, fallback);
204
206
  params.onTitleUpdated?.(fallback);
205
207
  }
206
208
  } catch {
@@ -228,7 +230,7 @@ export async function regenerateConversationTitle(
228
230
  ): Promise<{ title: string; updated: boolean }> {
229
231
  const { conversationId, onTitleUpdated, signal } = params;
230
232
 
231
- const conversation = conversationStore.getConversation(conversationId);
233
+ const conversation = getConversation(conversationId);
232
234
  if (!conversation || !conversation.isAutoTitle) {
233
235
  return { title: conversation?.title ?? UNTITLED_FALLBACK, updated: false };
234
236
  }
@@ -238,7 +240,7 @@ export async function regenerateConversationTitle(
238
240
  return { title: conversation.title ?? UNTITLED_FALLBACK, updated: false };
239
241
  }
240
242
 
241
- const allMessages = conversationStore.getMessages(conversationId);
243
+ const allMessages = getMessages(conversationId);
242
244
  const recentMessages = allMessages.slice(-3);
243
245
  if (recentMessages.length === 0) {
244
246
  return { title: conversation.title ?? UNTITLED_FALLBACK, updated: false };
@@ -256,7 +258,10 @@ export async function regenerateConversationTitle(
256
258
  [],
257
259
  undefined,
258
260
  {
259
- config: { max_tokens: config.daemon.titleGenerationMaxTokens },
261
+ config: {
262
+ max_tokens: config.daemon.titleGenerationMaxTokens,
263
+ modelIntent: "latency-optimized",
264
+ },
260
265
  signal: combinedSignal,
261
266
  },
262
267
  );
@@ -269,12 +274,12 @@ export async function regenerateConversationTitle(
269
274
  }
270
275
 
271
276
  // Re-check isAutoTitle before persisting (race guard against manual rename)
272
- const current = conversationStore.getConversation(conversationId);
277
+ const current = getConversation(conversationId);
273
278
  if (!current || !current.isAutoTitle) {
274
279
  return { title: current?.title ?? UNTITLED_FALLBACK, updated: false };
275
280
  }
276
281
 
277
- conversationStore.updateConversationTitle(conversationId, title, 1);
282
+ updateConversationTitle(conversationId, title, 1);
278
283
  onTitleUpdated?.(title);
279
284
  log.info(
280
285
  { conversationId, title },
@@ -2,12 +2,7 @@ import { Database } from "bun:sqlite";
2
2
 
3
3
  import { drizzle } from "drizzle-orm/bun-sqlite";
4
4
 
5
- import {
6
- ensureDataDir,
7
- getDbPath,
8
- migrateToDataLayout,
9
- migrateToWorkspaceLayout,
10
- } from "../util/platform.js";
5
+ import { ensureDataDir, getDbPath } from "../util/platform.js";
11
6
  import * as schema from "./schema.js";
12
7
 
13
8
  export type DrizzleDb = ReturnType<typeof drizzle<typeof schema>>;
@@ -16,8 +11,6 @@ let db: DrizzleDb | null = null;
16
11
 
17
12
  export function getDb(): DrizzleDb {
18
13
  if (!db) {
19
- migrateToDataLayout();
20
- migrateToWorkspaceLayout();
21
14
  ensureDataDir();
22
15
  const sqlite = new Database(getDbPath());
23
16
  sqlite.exec("PRAGMA journal_mode=WAL");
@@ -35,6 +35,7 @@ import {
35
35
  migrateAssistantContactMetadata,
36
36
  migrateBackfillContactInteractionStats,
37
37
  migrateBackfillGuardianPrincipalId,
38
+ migrateBackfillUsageCacheAccounting,
38
39
  migrateCallSessionMode,
39
40
  migrateCanonicalGuardianDeliveriesDestinationIndex,
40
41
  migrateCanonicalGuardianRequesterChatId,
@@ -63,6 +64,10 @@ import {
63
64
  migrateNormalizePhoneIdentities,
64
65
  migrateNotificationDeliveryThreadDecision,
65
66
  migrateReminderRoutingIntent,
67
+ migrateRenameGuardianVerificationValues,
68
+ migrateRenameVerificationSessionIdColumn,
69
+ migrateRenameVerificationTable,
70
+ migrateRenameVoiceToPhone,
66
71
  migrateSchemaIndexesAndColumns,
67
72
  migrateUsageDashboardIndexes,
68
73
  migrateVoiceInviteColumns,
@@ -304,6 +309,21 @@ export function initializeDb(): void {
304
309
  // 43. Drop all composite usage indexes — they don't eliminate temp B-trees for GROUP BY
305
310
  migrateDropUsageCompositeIndexes(database);
306
311
 
312
+ // 44. Backfill historical Anthropic usage rows from request-log truth before dashboard reads
313
+ migrateBackfillUsageCacheAccounting(database);
314
+
315
+ // 45. Rename channel_guardian_verification_challenges → channel_verification_sessions
316
+ migrateRenameVerificationTable(database);
317
+
318
+ // 46. Rename guardian_verification_session_id → verification_session_id in call_sessions
319
+ migrateRenameVerificationSessionIdColumn(database);
320
+
321
+ // 47. Rename persisted guardian_verification call_mode and event_type values
322
+ migrateRenameGuardianVerificationValues(database);
323
+
324
+ // 48. Rename stored "voice" channel values to "phone" across all channel text columns
325
+ migrateRenameVoiceToPhone(database);
326
+
307
327
  validateMigrationState(database);
308
328
 
309
329
  if (process.env.BUN_TEST === "1") {
@@ -9,11 +9,7 @@ import { and, desc, eq, isNotNull } from "drizzle-orm";
9
9
  import { v4 as uuid } from "uuid";
10
10
 
11
11
  import { DAEMON_INTERNAL_ASSISTANT_ID } from "../runtime/assistant-scope.js";
12
- import {
13
- getConversationByKey,
14
- getOrCreateConversation,
15
- setConversationKeyIfAbsent,
16
- } from "./conversation-key-store.js";
12
+ import { getOrCreateConversation } from "./conversation-key-store.js";
17
13
  import { getDb } from "./db.js";
18
14
  import { channelInboundEvents, conversations } from "./schema.js";
19
15
 
@@ -65,35 +61,9 @@ export function recordInbound(
65
61
  };
66
62
  }
67
63
 
68
- const assistantId = options?.assistantId;
69
- const legacyKey = `${sourceChannel}:${externalChatId}`;
70
- const scopedKey = assistantId
71
- ? `asst:${assistantId}:${sourceChannel}:${externalChatId}`
72
- : legacyKey;
73
-
74
- // Resolve conversation mapping with assistant-scoped keying:
75
- // 1. If scoped key exists, use it directly.
76
- // 2. If assistantId is "self" and legacy key exists, reuse the legacy
77
- // conversation and create a scoped alias to prevent future bleed.
78
- // 3. Otherwise, create/get conversation from the scoped key.
79
- let mapping: { conversationId: string; created: boolean };
80
- const scopedMapping = assistantId ? getConversationByKey(scopedKey) : null;
81
- if (scopedMapping) {
82
- mapping = { conversationId: scopedMapping.conversationId, created: false };
83
- } else if (assistantId === DAEMON_INTERNAL_ASSISTANT_ID) {
84
- const legacyMapping = getConversationByKey(legacyKey);
85
- if (legacyMapping) {
86
- mapping = {
87
- conversationId: legacyMapping.conversationId,
88
- created: false,
89
- };
90
- setConversationKeyIfAbsent(scopedKey, legacyMapping.conversationId);
91
- } else {
92
- mapping = getOrCreateConversation(scopedKey);
93
- }
94
- } else {
95
- mapping = getOrCreateConversation(scopedKey);
96
- }
64
+ const assistantId = options?.assistantId ?? DAEMON_INTERNAL_ASSISTANT_ID;
65
+ const scopedKey = `asst:${assistantId}:${sourceChannel}:${externalChatId}`;
66
+ const mapping = getOrCreateConversation(scopedKey);
97
67
  const now = Date.now();
98
68
  const eventId = uuid();
99
69
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Store for external conversation bindings — maps internal conversation IDs
3
- * to external channel identifiers (e.g. Telegram chat ID, SMS thread ID).
3
+ * to external channel identifiers (e.g. Telegram chat ID, voice session).
4
4
  *
5
5
  * This enables the system to track which conversations originated from
6
6
  * external channels and expose channel metadata in session/conversation
@@ -0,0 +1,47 @@
1
+ import { estimateTextTokens } from "../context/token-estimator.js";
2
+ import { buildInjectedText } from "./search/formatting.js";
3
+ import { markItemUsage, trimToTokenBudget } from "./search/ranking.js";
4
+ import type { Candidate } from "./search/types.js";
5
+
6
+ export interface FormatRecallTextOptions {
7
+ /** Injection format: 'markdown' or 'structured_v1'. */
8
+ format: string;
9
+ /** Maximum token budget for the formatted output. */
10
+ maxTokens: number;
11
+ }
12
+
13
+ export interface FormatRecallTextResult {
14
+ /** The formatted text ready for injection. */
15
+ text: string;
16
+ /** Candidates that fit within the token budget. */
17
+ selected: Candidate[];
18
+ /** Token count of the final injected text. */
19
+ tokenCount: number;
20
+ }
21
+
22
+ /**
23
+ * Format scored recall candidates into injectable text.
24
+ *
25
+ * Trims candidates to the token budget, groups by section with temporal
26
+ * grounding, applies "Lost in the Middle" ordering, and marks item usage.
27
+ *
28
+ * Extracted from `formatRecallResult()` in `retriever.ts` so both the
29
+ * auto-injection path and the on-demand memory_recall tool can reuse it.
30
+ */
31
+ export function formatRecallText(
32
+ candidates: Candidate[],
33
+ opts: FormatRecallTextOptions,
34
+ ): FormatRecallTextResult {
35
+ const { format, maxTokens } = opts;
36
+
37
+ const selected = trimToTokenBudget(candidates, maxTokens, format);
38
+ markItemUsage(selected);
39
+
40
+ const text = buildInjectedText(selected, format);
41
+
42
+ return {
43
+ text,
44
+ selected,
45
+ tokenCount: estimateTextTokens(text),
46
+ };
47
+ }
@@ -2,7 +2,7 @@
2
2
  * Store for cross-channel guardian action requests and deliveries.
3
3
  *
4
4
  * Guardian action requests are created when a voice call's ASK_GUARDIAN
5
- * marker fires, and deliveries track per-channel dispatch (telegram, sms, mac).
5
+ * marker fires, and deliveries track per-channel dispatch (telegram, mac).
6
6
  * Resolution uses first-response-wins semantics: the first channel to
7
7
  * answer resolves the request and all other deliveries are marked answered.
8
8
  */
@@ -301,11 +301,10 @@ export function resolveGuardianActionRequest(
301
301
 
302
302
  /**
303
303
  * Expire a guardian action request and all its deliveries.
304
- * When reason is not provided, defaults to 'sweep_timeout' for backward compatibility.
305
304
  */
306
305
  export function expireGuardianActionRequest(
307
306
  id: string,
308
- reason?: ExpiredReason,
307
+ reason: ExpiredReason,
309
308
  ): void {
310
309
  const db = getDb();
311
310
  const now = Date.now();
@@ -313,7 +312,7 @@ export function expireGuardianActionRequest(
313
312
  db.update(guardianActionRequests)
314
313
  .set({
315
314
  status: "expired",
316
- expiredReason: reason ?? "sweep_timeout",
315
+ expiredReason: reason,
317
316
  updatedAt: now,
318
317
  })
319
318
  .where(
@@ -864,7 +863,7 @@ export function getExpiredDeliveriesByConversation(
864
863
  /**
865
864
  * Look up deliveries for requests in `awaiting_guardian_choice` follow-up state.
866
865
  * Used by inbound message routing to intercept guardian follow-up replies
867
- * on channel paths (Telegram, SMS).
866
+ * on channel paths (Telegram, WhatsApp).
868
867
  */
869
868
  export function getFollowupDeliveriesByDestination(
870
869
  channel: string,
@@ -151,9 +151,6 @@ export function recordInvalidAttempt(
151
151
  channel,
152
152
  actorExternalUserId,
153
153
  actorChatId,
154
- // Legacy columns kept for backward compatibility with upgraded databases
155
- invalidAttempts: 0,
156
- windowStartedAt: 0,
157
154
  attemptTimestampsJson: JSON.stringify(timestamps),
158
155
  lockedUntil,
159
156
  createdAt: now,
@@ -331,7 +331,7 @@ export function findActiveVoiceInvites(params: {
331
331
  .from(assistantIngressInvites)
332
332
  .where(
333
333
  and(
334
- eq(assistantIngressInvites.sourceChannel, "voice"),
334
+ eq(assistantIngressInvites.sourceChannel, "phone"),
335
335
  eq(assistantIngressInvites.status, "active"),
336
336
  eq(
337
337
  assistantIngressInvites.expectedExternalUserId,
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  getConversationMemoryScopeId,
13
13
  messageMetadataSchema,
14
- } from "../conversation-store.js";
14
+ } from "../conversation-crud.js";
15
15
  import { getDb } from "../db.js";
16
16
  import { indexMessageNow } from "../indexer.js";
17
17
  import {
@@ -169,6 +169,7 @@ export function backfillEntityRelationsJob(
169
169
  const batch = db
170
170
  .select({
171
171
  id: messages.id,
172
+ conversationId: messages.conversationId,
172
173
  role: messages.role,
173
174
  createdAt: messages.createdAt,
174
175
  metadata: messages.metadata,
@@ -180,6 +181,7 @@ export function backfillEntityRelationsJob(
180
181
  .all();
181
182
  if (batch.length === 0) return;
182
183
 
184
+ const scopeCache = new Map<string, string>();
183
185
  let queuedExtractEntityJobs = 0;
184
186
  let skippedUntrusted = 0;
185
187
  for (const message of batch) {
@@ -190,7 +192,12 @@ export function backfillEntityRelationsJob(
190
192
  skippedUntrusted += 1;
191
193
  continue;
192
194
  }
193
- enqueueMemoryJob("extract_entities", { messageId: message.id });
195
+ let scopeId = scopeCache.get(message.conversationId);
196
+ if (scopeId === undefined) {
197
+ scopeId = getConversationMemoryScopeId(message.conversationId);
198
+ scopeCache.set(message.conversationId, scopeId);
199
+ }
200
+ enqueueMemoryJob("extract_entities", { messageId: message.id, scopeId });
194
201
  queuedExtractEntityJobs += 1;
195
202
  }
196
203
 
@@ -22,7 +22,8 @@ const log = getLogger("memory-jobs-worker");
22
22
 
23
23
  export async function extractItemsJob(job: MemoryJob): Promise<void> {
24
24
  const messageId = asString(job.payload.messageId);
25
- if (!messageId) return;
25
+ const scopeId = asString(job.payload.scopeId);
26
+ if (!messageId || !scopeId) return;
26
27
 
27
28
  // If the conversation that owns this message has been marked as failed,
28
29
  // skip extraction entirely. This prevents async extraction jobs from
@@ -41,12 +42,6 @@ export async function extractItemsJob(job: MemoryJob): Promise<void> {
41
42
  return;
42
43
  }
43
44
 
44
- // Backward compat: old payloads may lack scopeId — default to 'default'
45
- const scopeId =
46
- typeof job.payload.scopeId === "string" && job.payload.scopeId
47
- ? job.payload.scopeId
48
- : "default";
49
-
50
45
  await extractAndUpsertMemoryItemsForMessage(
51
46
  messageId,
52
47
  scopeId,
@@ -10,7 +10,7 @@ import {
10
10
  userMessage,
11
11
  } from "../../providers/provider-send-message.js";
12
12
  import { getLogger } from "../../util/logger.js";
13
- import { getConversationMemoryScopeId } from "../conversation-store.js";
13
+ import { getConversationMemoryScopeId } from "../conversation-crud.js";
14
14
  import { getDb } from "../db.js";
15
15
  import {
16
16
  asString,
@@ -90,6 +90,7 @@ export interface UsageTimeRange {
90
90
 
91
91
  /** Aggregate totals across a time range. */
92
92
  export interface UsageTotals {
93
+ /** Direct input tokens only; cache traffic is reported separately below. */
93
94
  totalInputTokens: number;
94
95
  totalOutputTokens: number;
95
96
  totalCacheCreationTokens: number;
@@ -104,6 +105,7 @@ export interface UsageTotals {
104
105
  export interface UsageDayBucket {
105
106
  /** ISO date string (YYYY-MM-DD) in UTC. */
106
107
  date: string;
108
+ /** Direct input tokens only; cache traffic is tracked separately in totals. */
107
109
  totalInputTokens: number;
108
110
  totalOutputTokens: number;
109
111
  totalEstimatedCostUsd: number;
@@ -113,8 +115,11 @@ export interface UsageDayBucket {
113
115
  /** A grouped breakdown row (by actor, provider, or model). */
114
116
  export interface UsageGroupBreakdown {
115
117
  group: string;
118
+ /** Direct input tokens only; cache traffic is reported separately below. */
116
119
  totalInputTokens: number;
117
120
  totalOutputTokens: number;
121
+ totalCacheCreationTokens: number;
122
+ totalCacheReadTokens: number;
118
123
  totalEstimatedCostUsd: number;
119
124
  eventCount: number;
120
125
  }
@@ -144,6 +149,8 @@ interface GroupRow {
144
149
  group_key: string;
145
150
  total_input_tokens: number;
146
151
  total_output_tokens: number;
152
+ total_cache_creation_tokens: number;
153
+ total_cache_read_tokens: number;
147
154
  total_estimated_cost_usd: number | null;
148
155
  event_count: number;
149
156
  }
@@ -236,6 +243,8 @@ export function getUsageGroupBreakdown(
236
243
  ${column} AS group_key,
237
244
  COALESCE(SUM(input_tokens), 0) AS total_input_tokens,
238
245
  COALESCE(SUM(output_tokens), 0) AS total_output_tokens,
246
+ COALESCE(SUM(cache_creation_input_tokens), 0) AS total_cache_creation_tokens,
247
+ COALESCE(SUM(cache_read_input_tokens), 0) AS total_cache_read_tokens,
239
248
  COALESCE(SUM(estimated_cost_usd), 0) AS total_estimated_cost_usd,
240
249
  COUNT(*) AS event_count
241
250
  FROM llm_usage_events
@@ -250,6 +259,8 @@ export function getUsageGroupBreakdown(
250
259
  group: r.group_key,
251
260
  totalInputTokens: r.total_input_tokens,
252
261
  totalOutputTokens: r.total_output_tokens,
262
+ totalCacheCreationTokens: r.total_cache_creation_tokens,
263
+ totalCacheReadTokens: r.total_cache_read_tokens,
253
264
  totalEstimatedCostUsd: r.total_estimated_cost_usd ?? 0,
254
265
  eventCount: r.event_count,
255
266
  }));