@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
@@ -13,8 +13,12 @@ import type {
13
13
  TurnChannelContext,
14
14
  TurnInterfaceContext,
15
15
  } from "../channels/types.js";
16
- import * as conversationStore from "../memory/conversation-store.js";
17
- import { provenanceFromTrustContext } from "../memory/conversation-store.js";
16
+ import {
17
+ addMessage,
18
+ getMessageById,
19
+ provenanceFromTrustContext,
20
+ updateMessageContent,
21
+ } from "../memory/conversation-crud.js";
18
22
  import { recordRequestLog } from "../memory/llm-request-log-store.js";
19
23
  import type { ContentBlock, ImageContent } from "../providers/types.js";
20
24
  import type { DirectiveRequest } from "./assistant-attachments.js";
@@ -22,7 +26,7 @@ import {
22
26
  cleanAssistantContent,
23
27
  drainDirectiveDisplayBuffer,
24
28
  } from "./assistant-attachments.js";
25
- import type { ServerMessage } from "./ipc-protocol.js";
29
+ import type { ServerMessage } from "./message-protocol.js";
26
30
  import type { AgentLoopSessionContext } from "./session-agent-loop.js";
27
31
  import {
28
32
  buildSessionErrorMessage,
@@ -45,7 +49,10 @@ export interface EventHandlerState {
45
49
  pendingDirectiveDisplayBuffer: string;
46
50
  firstAssistantText: string;
47
51
  exchangeInputTokens: number;
52
+ exchangeCacheCreationInputTokens: number;
53
+ exchangeCacheReadInputTokens: number;
48
54
  exchangeOutputTokens: number;
55
+ readonly exchangeRawResponses: unknown[];
49
56
  model: string;
50
57
  orderingErrorDetected: boolean;
51
58
  deferredOrderingError: string | null;
@@ -106,7 +113,10 @@ export function createEventHandlerState(): EventHandlerState {
106
113
  pendingDirectiveDisplayBuffer: "",
107
114
  firstAssistantText: "",
108
115
  exchangeInputTokens: 0,
116
+ exchangeCacheCreationInputTokens: 0,
117
+ exchangeCacheReadInputTokens: 0,
109
118
  exchangeOutputTokens: 0,
119
+ exchangeRawResponses: [],
110
120
  model: "",
111
121
  orderingErrorDetected: false,
112
122
  deferredOrderingError: null,
@@ -485,7 +495,7 @@ function annotatePersistedAssistantMessage(state: EventHandlerState): void {
485
495
  const messageId = state.lastAssistantMessageId;
486
496
  if (!messageId) return;
487
497
 
488
- const row = conversationStore.getMessageById(messageId);
498
+ const row = getMessageById(messageId);
489
499
  if (!row) return;
490
500
 
491
501
  let content: ContentBlock[];
@@ -520,7 +530,7 @@ function annotatePersistedAssistantMessage(state: EventHandlerState): void {
520
530
  }
521
531
 
522
532
  if (modified) {
523
- conversationStore.updateMessageContent(messageId, JSON.stringify(content));
533
+ updateMessageContent(messageId, JSON.stringify(content));
524
534
  }
525
535
 
526
536
  // Clear for the next turn
@@ -593,7 +603,7 @@ export async function handleMessageComplete(
593
603
  assistantMessageInterface:
594
604
  deps.turnInterfaceContext.assistantMessageInterface,
595
605
  };
596
- await conversationStore.addMessage(
606
+ await addMessage(
597
607
  deps.ctx.conversationId,
598
608
  "user",
599
609
  JSON.stringify(toolResultBlocks),
@@ -655,7 +665,7 @@ export async function handleMessageComplete(
655
665
  assistantMessageInterface:
656
666
  deps.turnInterfaceContext.assistantMessageInterface,
657
667
  };
658
- const assistantMsg = await conversationStore.addMessage(
668
+ const assistantMsg = await addMessage(
659
669
  deps.ctx.conversationId,
660
670
  "assistant",
661
671
  JSON.stringify(contentWithSurfaces),
@@ -691,8 +701,13 @@ export function handleUsage(
691
701
  event: Extract<AgentEvent, { type: "usage" }>,
692
702
  ): void {
693
703
  state.exchangeInputTokens += event.inputTokens;
704
+ state.exchangeCacheCreationInputTokens += event.cacheCreationInputTokens ?? 0;
705
+ state.exchangeCacheReadInputTokens += event.cacheReadInputTokens ?? 0;
694
706
  state.exchangeOutputTokens += event.outputTokens;
695
707
  state.model = event.model;
708
+ if (event.rawResponse !== undefined) {
709
+ state.exchangeRawResponses.push(event.rawResponse);
710
+ }
696
711
 
697
712
  if (event.rawRequest && event.rawResponse) {
698
713
  try {
@@ -28,12 +28,16 @@ import type { ToolProfiler } from "../events/tool-profiling-listener.js";
28
28
  import { getHookManager } from "../hooks/manager.js";
29
29
  import { commitAppTurnChanges } from "../memory/app-git-service.js";
30
30
  import { getApp, listAppFiles } from "../memory/app-store.js";
31
- import * as conversationStore from "../memory/conversation-store.js";
32
31
  import {
32
+ addMessage,
33
+ deleteMessageById,
34
+ getConversation,
33
35
  getConversationOriginChannel,
34
36
  getConversationOriginInterface,
35
37
  provenanceFromTrustContext,
36
- } from "../memory/conversation-store.js";
38
+ updateConversationContextWindow,
39
+ updateConversationTitle,
40
+ } from "../memory/conversation-crud.js";
37
41
  import {
38
42
  isReplaceableTitle,
39
43
  queueGenerateConversationTitle,
@@ -73,7 +77,7 @@ import type {
73
77
  SurfaceData,
74
78
  SurfaceType,
75
79
  UsageStats,
76
- } from "./ipc-protocol.js";
80
+ } from "./message-protocol.js";
77
81
  import {
78
82
  createEventHandlerState,
79
83
  dispatchAgentEvent,
@@ -233,11 +237,11 @@ export interface AgentLoopSessionContext {
233
237
  statusText?: string,
234
238
  ): void;
235
239
  emitConfirmationStateChanged(
236
- params: import("./ipc-contract/messages.js").ConfirmationStateChanged extends {
240
+ params: import("./message-types/messages.js").ConfirmationStateChanged extends {
237
241
  type: infer _;
238
242
  }
239
243
  ? Omit<
240
- import("./ipc-contract/messages.js").ConfirmationStateChanged,
244
+ import("./message-types/messages.js").ConfirmationStateChanged,
241
245
  "type"
242
246
  >
243
247
  : never,
@@ -371,18 +375,15 @@ export async function runAgentLoopImpl(
371
375
  if (preMessageResult.blocked) {
372
376
  if (!options?.skipPreMessageRollback) {
373
377
  ctx.messages.pop();
374
- conversationStore.deleteMessageById(userMessageId);
378
+ deleteMessageById(userMessageId);
375
379
  }
376
380
  // Replace loading placeholder so the thread isn't stuck as "Generating title..."
377
- const currentConv = conversationStore.getConversation(ctx.conversationId);
381
+ const currentConv = getConversation(ctx.conversationId);
378
382
  if (
379
383
  isReplaceableTitle(currentConv?.title ?? null) &&
380
384
  currentConv?.title !== UNTITLED_FALLBACK
381
385
  ) {
382
- conversationStore.updateConversationTitle(
383
- ctx.conversationId,
384
- UNTITLED_FALLBACK,
385
- );
386
+ updateConversationTitle(ctx.conversationId, UNTITLED_FALLBACK);
386
387
  onEvent({
387
388
  type: "session_title_updated",
388
389
  sessionId: ctx.conversationId,
@@ -405,9 +406,7 @@ export async function runAgentLoopImpl(
405
406
  // Deferred via setTimeout so the main agent loop LLM call enqueues
406
407
  // first, avoiding rate-limit slot contention on strict configs.
407
408
  if (
408
- isReplaceableTitle(
409
- conversationStore.getConversation(ctx.conversationId)?.title ?? null,
410
- )
409
+ isReplaceableTitle(getConversation(ctx.conversationId)?.title ?? null)
411
410
  ) {
412
411
  setTimeout(() => {
413
412
  queueGenerateConversationTitle({
@@ -427,16 +426,29 @@ export async function runAgentLoopImpl(
427
426
 
428
427
  const isFirstMessage = ctx.messages.length === 1;
429
428
 
429
+ const compactCheck = ctx.contextWindowManager.shouldCompact(ctx.messages);
430
+ if (compactCheck.needed) {
431
+ ctx.emitActivityState(
432
+ "thinking",
433
+ "thinking_delta",
434
+ "assistant_turn",
435
+ reqId,
436
+ "Compacting context",
437
+ );
438
+ }
430
439
  const compacted = await ctx.contextWindowManager.maybeCompact(
431
440
  ctx.messages,
432
441
  abortController.signal,
433
- { lastCompactedAt: ctx.contextCompactedAt ?? undefined },
442
+ {
443
+ lastCompactedAt: ctx.contextCompactedAt ?? undefined,
444
+ precomputedEstimate: compactCheck.estimatedTokens,
445
+ },
434
446
  );
435
447
  if (compacted.compacted) {
436
448
  ctx.messages = compacted.messages;
437
449
  ctx.contextCompactedMessageCount += compacted.compactedPersistedMessages;
438
450
  ctx.contextCompactedAt = Date.now();
439
- conversationStore.updateConversationContextWindow(
451
+ updateConversationContextWindow(
440
452
  ctx.conversationId,
441
453
  compacted.summaryText,
442
454
  ctx.contextCompactedMessageCount,
@@ -461,6 +473,9 @@ export async function runAgentLoopImpl(
461
473
  onEvent,
462
474
  "context_compactor",
463
475
  reqId,
476
+ compacted.summaryCacheCreationInputTokens ?? 0,
477
+ compacted.summaryCacheReadInputTokens ?? 0,
478
+ collapseRawResponses(compacted.summaryRawResponses),
464
479
  );
465
480
  }
466
481
 
@@ -667,6 +682,13 @@ export async function runAgentLoopImpl(
667
682
  !reducerState.exhausted
668
683
  ) {
669
684
  preflightAttempts++;
685
+ ctx.emitActivityState(
686
+ "thinking",
687
+ "thinking_delta",
688
+ "assistant_turn",
689
+ reqId,
690
+ "Compacting context",
691
+ );
670
692
  const step = await reduceContextOverflow(
671
693
  ctx.messages,
672
694
  {
@@ -689,7 +711,7 @@ export async function runAgentLoopImpl(
689
711
  ctx.contextCompactedMessageCount +=
690
712
  step.compactionResult.compactedPersistedMessages;
691
713
  ctx.contextCompactedAt = Date.now();
692
- conversationStore.updateConversationContextWindow(
714
+ updateConversationContextWindow(
693
715
  ctx.conversationId,
694
716
  step.compactionResult.summaryText,
695
717
  ctx.contextCompactedMessageCount,
@@ -715,6 +737,9 @@ export async function runAgentLoopImpl(
715
737
  onEvent,
716
738
  "context_compactor",
717
739
  reqId,
740
+ step.compactionResult.summaryCacheCreationInputTokens ?? 0,
741
+ step.compactionResult.summaryCacheReadInputTokens ?? 0,
742
+ collapseRawResponses(step.compactionResult.summaryRawResponses),
718
743
  );
719
744
  }
720
745
 
@@ -747,7 +772,7 @@ export async function runAgentLoopImpl(
747
772
  let preRunHistoryLength = runMessages.length;
748
773
 
749
774
  const shouldGenerateTitle = isReplaceableTitle(
750
- conversationStore.getConversation(ctx.conversationId)?.title ?? null,
775
+ getConversation(ctx.conversationId)?.title ?? null,
751
776
  );
752
777
 
753
778
  const deps: EventHandlerDeps = {
@@ -854,6 +879,13 @@ export async function runAgentLoopImpl(
854
879
  "Context too large — applying next reducer tier",
855
880
  );
856
881
 
882
+ ctx.emitActivityState(
883
+ "thinking",
884
+ "thinking_delta",
885
+ "assistant_turn",
886
+ reqId,
887
+ "Compacting context",
888
+ );
857
889
  const step = await reduceContextOverflow(
858
890
  ctx.messages,
859
891
  {
@@ -876,7 +908,7 @@ export async function runAgentLoopImpl(
876
908
  ctx.contextCompactedMessageCount +=
877
909
  step.compactionResult.compactedPersistedMessages;
878
910
  ctx.contextCompactedAt = Date.now();
879
- conversationStore.updateConversationContextWindow(
911
+ updateConversationContextWindow(
880
912
  ctx.conversationId,
881
913
  step.compactionResult.summaryText,
882
914
  ctx.contextCompactedMessageCount,
@@ -902,6 +934,9 @@ export async function runAgentLoopImpl(
902
934
  onEvent,
903
935
  "context_compactor",
904
936
  reqId,
937
+ step.compactionResult.summaryCacheCreationInputTokens ?? 0,
938
+ step.compactionResult.summaryCacheReadInputTokens ?? 0,
939
+ collapseRawResponses(step.compactionResult.summaryRawResponses),
905
940
  );
906
941
  }
907
942
 
@@ -953,7 +988,7 @@ export async function runAgentLoopImpl(
953
988
  ctx.contextCompactedMessageCount +=
954
989
  emergencyCompact.compactedPersistedMessages;
955
990
  ctx.contextCompactedAt = Date.now();
956
- conversationStore.updateConversationContextWindow(
991
+ updateConversationContextWindow(
957
992
  ctx.conversationId,
958
993
  emergencyCompact.summaryText,
959
994
  ctx.contextCompactedMessageCount,
@@ -979,6 +1014,9 @@ export async function runAgentLoopImpl(
979
1014
  onEvent,
980
1015
  "context_compactor",
981
1016
  reqId,
1017
+ emergencyCompact.summaryCacheCreationInputTokens ?? 0,
1018
+ emergencyCompact.summaryCacheReadInputTokens ?? 0,
1019
+ collapseRawResponses(emergencyCompact.summaryRawResponses),
982
1020
  );
983
1021
  }
984
1022
 
@@ -1016,7 +1054,7 @@ export async function runAgentLoopImpl(
1016
1054
  capturedTurnInterfaceContext.assistantMessageInterface,
1017
1055
  };
1018
1056
  const denyMessage = createAssistantMessage(denyText);
1019
- await conversationStore.addMessage(
1057
+ await addMessage(
1020
1058
  ctx.conversationId,
1021
1059
  "assistant",
1022
1060
  JSON.stringify(denyMessage.content),
@@ -1033,6 +1071,13 @@ export async function runAgentLoopImpl(
1033
1071
  }
1034
1072
  } else if (action === "auto_compress_latest_turn") {
1035
1073
  // Non-interactive — auto-compress without asking
1074
+ ctx.emitActivityState(
1075
+ "thinking",
1076
+ "thinking_delta",
1077
+ "assistant_turn",
1078
+ reqId,
1079
+ "Compacting context",
1080
+ );
1036
1081
  const emergencyCompact = await ctx.contextWindowManager.maybeCompact(
1037
1082
  ctx.messages,
1038
1083
  abortController.signal,
@@ -1048,7 +1093,7 @@ export async function runAgentLoopImpl(
1048
1093
  ctx.contextCompactedMessageCount +=
1049
1094
  emergencyCompact.compactedPersistedMessages;
1050
1095
  ctx.contextCompactedAt = Date.now();
1051
- conversationStore.updateConversationContextWindow(
1096
+ updateConversationContextWindow(
1052
1097
  ctx.conversationId,
1053
1098
  emergencyCompact.summaryText,
1054
1099
  ctx.contextCompactedMessageCount,
@@ -1074,6 +1119,9 @@ export async function runAgentLoopImpl(
1074
1119
  onEvent,
1075
1120
  "context_compactor",
1076
1121
  reqId,
1122
+ emergencyCompact.summaryCacheCreationInputTokens ?? 0,
1123
+ emergencyCompact.summaryCacheReadInputTokens ?? 0,
1124
+ collapseRawResponses(emergencyCompact.summaryRawResponses),
1077
1125
  );
1078
1126
  }
1079
1127
 
@@ -1168,7 +1216,7 @@ export async function runAgentLoopImpl(
1168
1216
  assistantMessageInterface:
1169
1217
  capturedTurnInterfaceContext.assistantMessageInterface,
1170
1218
  };
1171
- await conversationStore.addMessage(
1219
+ await addMessage(
1172
1220
  ctx.conversationId,
1173
1221
  "user",
1174
1222
  JSON.stringify(toolResultBlocks),
@@ -1210,7 +1258,7 @@ export async function runAgentLoopImpl(
1210
1258
  const errorAssistantMessage = createAssistantMessage(
1211
1259
  state.providerErrorUserMessage,
1212
1260
  );
1213
- await conversationStore.addMessage(
1261
+ await addMessage(
1214
1262
  ctx.conversationId,
1215
1263
  "assistant",
1216
1264
  JSON.stringify(errorAssistantMessage.content),
@@ -1244,6 +1292,9 @@ export async function runAgentLoopImpl(
1244
1292
  onEvent,
1245
1293
  "main_agent",
1246
1294
  reqId,
1295
+ state.exchangeCacheCreationInputTokens,
1296
+ state.exchangeCacheReadInputTokens,
1297
+ collapseRawResponses(state.exchangeRawResponses),
1247
1298
  );
1248
1299
 
1249
1300
  void getHookManager().trigger("post-message", {
@@ -1449,6 +1500,9 @@ function emitUsage(
1449
1500
  onEvent: (msg: ServerMessage) => void,
1450
1501
  actor: UsageActor,
1451
1502
  requestId: string | null = null,
1503
+ cacheCreationInputTokens = 0,
1504
+ cacheReadInputTokens = 0,
1505
+ rawResponse?: unknown,
1452
1506
  ): void {
1453
1507
  recordUsage(
1454
1508
  {
@@ -1462,5 +1516,13 @@ function emitUsage(
1462
1516
  onEvent,
1463
1517
  actor,
1464
1518
  requestId,
1519
+ cacheCreationInputTokens,
1520
+ cacheReadInputTokens,
1521
+ rawResponse,
1465
1522
  );
1466
1523
  }
1524
+
1525
+ function collapseRawResponses(rawResponses?: unknown[]): unknown | undefined {
1526
+ if (!rawResponses || rawResponses.length === 0) return undefined;
1527
+ return rawResponses.length === 1 ? rawResponses[0] : rawResponses;
1528
+ }
@@ -24,7 +24,7 @@ import {
24
24
  resolveDirectives,
25
25
  validateDrafts,
26
26
  } from "./assistant-attachments.js";
27
- import type { UserMessageAttachment } from "./ipc-protocol.js";
27
+ import type { UserMessageAttachment } from "./message-protocol.js";
28
28
  import { generateVideoThumbnail } from "./video-thumbnail.js";
29
29
 
30
30
  const log = getLogger("session-attachments");
@@ -1,5 +1,5 @@
1
1
  import { ProviderError } from "../util/errors.js";
2
- import type { SessionErrorCode, SessionErrorMessage } from "./ipc-protocol.js";
2
+ import type { SessionErrorCode, SessionErrorMessage } from "./message-protocol.js";
3
3
 
4
4
  /**
5
5
  * Classified session error ready for IPC emission.
@@ -1,13 +1,20 @@
1
1
  import { v4 as uuid } from "uuid";
2
2
 
3
3
  import { getSummaryFromContextMessage } from "../context/window-manager.js";
4
- import * as conversationStore from "../memory/conversation-store.js";
4
+ import {
5
+ deleteLastExchange,
6
+ deleteMessageById,
7
+ getMessages,
8
+ relinkAttachments,
9
+ updateMessageContent,
10
+ } from "../memory/conversation-crud.js";
11
+ import { isLastUserMessageToolResult } from "../memory/conversation-queries.js";
5
12
  import { enqueueMemoryJob } from "../memory/jobs-store.js";
6
13
  import { withQdrantBreaker } from "../memory/qdrant-circuit-breaker.js";
7
14
  import { getQdrantClient } from "../memory/qdrant-client.js";
8
15
  import type { ContentBlock, Message } from "../providers/types.js";
9
16
  import { getLogger } from "../util/logger.js";
10
- import type { ServerMessage } from "./ipc-protocol.js";
17
+ import type { ServerMessage } from "./message-protocol.js";
11
18
  import type { TraceEmitter } from "./trace-emitter.js";
12
19
 
13
20
  const log = getLogger("session-history");
@@ -117,7 +124,7 @@ export function consolidateAssistantMessages(
117
124
  conversationId: string,
118
125
  userMessageId: string,
119
126
  ): void {
120
- const allMessages = conversationStore.getMessages(conversationId);
127
+ const allMessages = getMessages(conversationId);
121
128
  const userMsgIndex = allMessages.findIndex((m) => m.id === userMessageId);
122
129
  if (userMsgIndex === -1) return;
123
130
 
@@ -159,7 +166,7 @@ export function consolidateAssistantMessages(
159
166
  const allSegmentIds: string[] = [];
160
167
  const allOrphanedItemIds: string[] = [];
161
168
  for (const id of messagesToDelete) {
162
- const deleted = conversationStore.deleteMessageById(id);
169
+ const deleted = deleteMessageById(id);
163
170
  allSegmentIds.push(...deleted.segmentIds);
164
171
  allOrphanedItemIds.push(...deleted.orphanedItemIds);
165
172
  }
@@ -260,7 +267,7 @@ export function consolidateAssistantMessages(
260
267
 
261
268
  // Update the first assistant message with all content
262
269
  const firstAssistantMsg = messagesToConsolidate[0];
263
- conversationStore.updateMessageContent(
270
+ updateMessageContent(
264
271
  firstAssistantMsg.id,
265
272
  JSON.stringify(consolidatedContent),
266
273
  );
@@ -273,7 +280,7 @@ export function consolidateAssistantMessages(
273
280
  ...messagesToDelete,
274
281
  ];
275
282
  if (messageIdsToDelete.length > 0) {
276
- const relinked = conversationStore.relinkAttachments(
283
+ const relinked = relinkAttachments(
277
284
  messageIdsToDelete,
278
285
  firstAssistantMsg.id,
279
286
  );
@@ -290,14 +297,12 @@ export function consolidateAssistantMessages(
290
297
  const allSegmentIds: string[] = [];
291
298
  const allOrphanedItemIds: string[] = [];
292
299
  for (let i = 1; i < messagesToConsolidate.length; i++) {
293
- const deleted = conversationStore.deleteMessageById(
294
- messagesToConsolidate[i].id,
295
- );
300
+ const deleted = deleteMessageById(messagesToConsolidate[i].id);
296
301
  allSegmentIds.push(...deleted.segmentIds);
297
302
  allOrphanedItemIds.push(...deleted.orphanedItemIds);
298
303
  }
299
304
  for (const id of messagesToDelete) {
300
- const deleted = conversationStore.deleteMessageById(id);
305
+ const deleted = deleteMessageById(id);
301
306
  allSegmentIds.push(...deleted.segmentIds);
302
307
  allOrphanedItemIds.push(...deleted.orphanedItemIds);
303
308
  }
@@ -376,15 +381,15 @@ export function undo(session: HistorySessionContext): number {
376
381
  // deleteLastExchange when the loop peeled back tool_result messages.
377
382
  let hadToolResult = false;
378
383
  do {
379
- conversationStore.deleteLastExchange(session.conversationId);
380
- if (conversationStore.isLastUserMessageToolResult(session.conversationId)) {
384
+ deleteLastExchange(session.conversationId);
385
+ if (isLastUserMessageToolResult(session.conversationId)) {
381
386
  hadToolResult = true;
382
387
  } else {
383
388
  break;
384
389
  }
385
390
  } while (true);
386
391
  if (hadToolResult) {
387
- conversationStore.deleteLastExchange(session.conversationId);
392
+ deleteLastExchange(session.conversationId);
388
393
  }
389
394
 
390
395
  return removed;
@@ -455,7 +460,7 @@ export async function regenerate(
455
460
 
456
461
  // Find DB message IDs to delete: get all messages from the DB, then
457
462
  // identify the ones that come after the last user message.
458
- const dbMessages = conversationStore.getMessages(session.conversationId);
463
+ const dbMessages = getMessages(session.conversationId);
459
464
 
460
465
  // Walk backwards to find the last real (non-tool_result) user message in the DB.
461
466
  let dbUserMsgIdx = -1;
@@ -504,7 +509,7 @@ export async function regenerate(
504
509
  const allSegmentIds: string[] = [];
505
510
  const allOrphanedItemIds: string[] = [];
506
511
  for (const msg of messagesToDelete) {
507
- const deleted = conversationStore.deleteMessageById(msg.id);
512
+ const deleted = deleteMessageById(msg.id);
508
513
  allSegmentIds.push(...deleted.segmentIds);
509
514
  allOrphanedItemIds.push(...deleted.orphanedItemIds);
510
515
  }
@@ -9,7 +9,11 @@ import type { EventBus } from "../events/bus.js";
9
9
  import type { AssistantDomainEvents } from "../events/domain-events.js";
10
10
  import type { ToolProfiler } from "../events/tool-profiling-listener.js";
11
11
  import { getHookManager } from "../hooks/manager.js";
12
- import * as conversationStore from "../memory/conversation-store.js";
12
+ import {
13
+ getConversation,
14
+ getMessages,
15
+ type MessageRow,
16
+ } from "../memory/conversation-crud.js";
13
17
  import type { PermissionPrompter } from "../permissions/prompter.js";
14
18
  import type { SecretPrompter } from "../permissions/secret-prompter.js";
15
19
  import type { ContentBlock, Message } from "../providers/types.js";
@@ -20,7 +24,7 @@ import {
20
24
  import { unregisterSessionSender } from "../tools/browser/browser-screencast.js";
21
25
  import { getLogger } from "../util/logger.js";
22
26
  import { repairHistory } from "./history-repair.js";
23
- import type { SurfaceData, SurfaceType, UsageStats } from "./ipc-protocol.js";
27
+ import type { SurfaceData, SurfaceType, UsageStats } from "./message-protocol.js";
24
28
  import {
25
29
  unregisterCallNotifiers,
26
30
  unregisterWatchNotifiers,
@@ -50,9 +54,7 @@ function parseProvenanceTrustClass(
50
54
  return undefined;
51
55
  }
52
56
 
53
- function filterMessagesForUntrustedActor(
54
- messages: conversationStore.MessageRow[],
55
- ): conversationStore.MessageRow[] {
57
+ function filterMessagesForUntrustedActor(messages: MessageRow[]): MessageRow[] {
56
58
  return messages.filter((m) => {
57
59
  const provenanceTrustClass = parseProvenanceTrustClass(m.metadata);
58
60
  return (
@@ -105,12 +107,12 @@ export interface DisposeContext extends AbortContext {
105
107
 
106
108
  export async function loadFromDb(ctx: LoadFromDbContext): Promise<void> {
107
109
  const trustClass = ctx.trustContext?.trustClass;
108
- const allDbMessages = conversationStore.getMessages(ctx.conversationId);
110
+ const allDbMessages = getMessages(ctx.conversationId);
109
111
  const dbMessages = isUntrustedTrustClass(trustClass)
110
112
  ? filterMessagesForUntrustedActor(allDbMessages)
111
113
  : allDbMessages;
112
114
 
113
- const conv = conversationStore.getConversation(ctx.conversationId);
115
+ const conv = getConversation(ctx.conversationId);
114
116
  const contextSummary = !isUntrustedTrustClass(trustClass)
115
117
  ? conv?.contextSummary?.trim() || null
116
118
  : null;
@@ -12,7 +12,7 @@ import {
12
12
  import type { ScopePolicyOverride } from "../memory/search/types.js";
13
13
  import type { Message } from "../providers/types.js";
14
14
  import type { Provider } from "../providers/types.js";
15
- import type { ServerMessage } from "./ipc-protocol.js";
15
+ import type { ServerMessage } from "./message-protocol.js";
16
16
  import type { ConflictGate } from "./session-conflict-gate.js";
17
17
  import { injectDynamicProfileIntoUserMessage } from "./session-dynamic-profile.js";
18
18
 
@@ -202,6 +202,13 @@ export async function prepareMemoryContext(
202
202
  type: "memory_status",
203
203
  enabled: recall.enabled,
204
204
  degraded: recall.degraded,
205
+ degradation: recall.degradation
206
+ ? {
207
+ semanticUnavailable: recall.degradation.semanticUnavailable,
208
+ reason: recall.degradation.reason,
209
+ fallbackSources: [...recall.degradation.fallbackSources],
210
+ }
211
+ : undefined,
205
212
  reason: recall.reason,
206
213
  provider: recall.provider,
207
214
  model: recall.model,
@@ -235,6 +242,13 @@ export async function prepareMemoryContext(
235
242
  type: "memory_recalled",
236
243
  provider: recall.provider ?? "unknown",
237
244
  model: recall.model ?? "unknown",
245
+ degradation: recall.degradation
246
+ ? {
247
+ semanticUnavailable: recall.degradation.semanticUnavailable,
248
+ reason: recall.degradation.reason,
249
+ fallbackSources: [...recall.degradation.fallbackSources],
250
+ }
251
+ : undefined,
238
252
  lexicalHits: recall.lexicalHits,
239
253
  semanticHits: recall.semanticHits,
240
254
  recencyHits: recall.recencyHits,
@@ -19,12 +19,16 @@ import {
19
19
  uploadAttachment,
20
20
  validateAttachmentUpload,
21
21
  } from "../memory/attachments-store.js";
22
- import * as conversationStore from "../memory/conversation-store.js";
23
- import { provenanceFromTrustContext } from "../memory/conversation-store.js";
22
+ import {
23
+ addMessage,
24
+ provenanceFromTrustContext,
25
+ setConversationOriginChannelIfUnset,
26
+ setConversationOriginInterfaceIfUnset,
27
+ } from "../memory/conversation-crud.js";
24
28
  import type { SecretPrompter } from "../permissions/secret-prompter.js";
25
29
  import type { Message } from "../providers/types.js";
26
30
  import { getLogger } from "../util/logger.js";
27
- import type { ServerMessage, UserMessageAttachment } from "./ipc-protocol.js";
31
+ import type { ServerMessage, UserMessageAttachment } from "./message-protocol.js";
28
32
  import type { MessageQueue } from "./session-queue-manager.js";
29
33
  import type { TrustContext } from "./session-runtime-assembly.js";
30
34
 
@@ -317,7 +321,7 @@ export async function persistUserMessage(
317
321
  ).content,
318
322
  )
319
323
  : JSON.stringify(userMessage.content);
320
- const persistedUserMessage = await conversationStore.addMessage(
324
+ const persistedUserMessage = await addMessage(
321
325
  ctx.conversationId,
322
326
  "user",
323
327
  contentToPersist,
@@ -325,13 +329,13 @@ export async function persistUserMessage(
325
329
  );
326
330
 
327
331
  if (turnCtx) {
328
- conversationStore.setConversationOriginChannelIfUnset(
332
+ setConversationOriginChannelIfUnset(
329
333
  ctx.conversationId,
330
334
  turnCtx.userMessageChannel,
331
335
  );
332
336
  }
333
337
  if (turnIfCtx) {
334
- conversationStore.setConversationOriginInterfaceIfUnset(
338
+ setConversationOriginInterfaceIfUnset(
335
339
  ctx.conversationId,
336
340
  turnIfCtx.userMessageInterface,
337
341
  );