@vellumai/assistant 0.4.42 → 0.4.44

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