@vellumai/assistant 0.4.44 → 0.4.45

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 (681) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +34 -31
  3. package/README.md +4 -4
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -197
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -1
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  40. package/src/__tests__/call-controller.test.ts +0 -1
  41. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  42. package/src/__tests__/call-domain.test.ts +0 -1
  43. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  44. package/src/__tests__/call-recovery.test.ts +0 -1
  45. package/src/__tests__/call-routes-http.test.ts +0 -1
  46. package/src/__tests__/call-store.test.ts +0 -1
  47. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  48. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  49. package/src/__tests__/channel-approvals.test.ts +1 -1
  50. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  51. package/src/__tests__/channel-guardian.test.ts +5 -7
  52. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  53. package/src/__tests__/checker.test.ts +4 -11
  54. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  55. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  56. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  57. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  58. package/src/__tests__/computer-use-tools.test.ts +35 -31
  59. package/src/__tests__/config-schema.test.ts +11 -15
  60. package/src/__tests__/config-watcher.test.ts +0 -1
  61. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  62. package/src/__tests__/conflict-store.test.ts +0 -1
  63. package/src/__tests__/connection-policy.test.ts +4 -7
  64. package/src/__tests__/contacts-tools.test.ts +0 -1
  65. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  66. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  67. package/src/__tests__/context-window-manager.test.ts +147 -60
  68. package/src/__tests__/contradiction-checker.test.ts +0 -1
  69. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  71. package/src/__tests__/conversation-pairing.test.ts +2 -2
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
  73. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  74. package/src/__tests__/conversation-store.test.ts +0 -1
  75. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +7 -8
  77. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  78. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  79. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  80. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  81. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  82. package/src/__tests__/diagnostics-export.test.ts +189 -0
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  84. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  85. package/src/__tests__/entity-extractor.test.ts +0 -1
  86. package/src/__tests__/entity-search.test.ts +0 -1
  87. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  88. package/src/__tests__/file-read-tool.test.ts +86 -0
  89. package/src/__tests__/followup-tools.test.ts +0 -1
  90. package/src/__tests__/frontmatter.test.ts +77 -34
  91. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  92. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  95. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  97. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  98. package/src/__tests__/guardian-action-store.test.ts +0 -1
  99. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  101. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  102. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  103. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  104. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  105. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  106. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  109. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  110. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  111. package/src/__tests__/host-file-proxy.test.ts +374 -0
  112. package/src/__tests__/host-shell-tool.test.ts +147 -1
  113. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  114. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  115. package/src/__tests__/integration-status.test.ts +3 -8
  116. package/src/__tests__/intent-routing.test.ts +7 -46
  117. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  118. package/src/__tests__/invite-routes-http.test.ts +0 -1
  119. package/src/__tests__/llm-usage-store.test.ts +0 -1
  120. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  121. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  122. package/src/__tests__/managed-store.test.ts +94 -21
  123. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  124. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  125. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  126. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  127. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  128. package/src/__tests__/memory-regressions.test.ts +0 -1
  129. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  130. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  131. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  132. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  133. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  134. package/src/__tests__/migration-export-http.test.ts +2 -3
  135. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  136. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  137. package/src/__tests__/migration-validate-http.test.ts +1 -2
  138. package/src/__tests__/native-web-search.test.ts +475 -0
  139. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  140. package/src/__tests__/non-member-access-request.test.ts +0 -1
  141. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  142. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  143. package/src/__tests__/notification-deep-link.test.ts +7 -7
  144. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  145. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  146. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  147. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  148. package/src/__tests__/playbook-execution.test.ts +0 -1
  149. package/src/__tests__/playbook-tools.test.ts +0 -1
  150. package/src/__tests__/profile-compiler.test.ts +0 -1
  151. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  152. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  153. package/src/__tests__/recording-handler.test.ts +30 -94
  154. package/src/__tests__/registry.test.ts +28 -35
  155. package/src/__tests__/relay-server.test.ts +0 -1
  156. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  157. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  158. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  159. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  160. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  162. package/src/__tests__/schedule-store.test.ts +441 -1
  163. package/src/__tests__/schedule-tools.test.ts +468 -7
  164. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  165. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  168. package/src/__tests__/secret-response-routing.test.ts +4 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +14 -2
  170. package/src/__tests__/send-notification-tool.test.ts +0 -7
  171. package/src/__tests__/sequence-store.test.ts +0 -1
  172. package/src/__tests__/server-history-render.test.ts +1 -2
  173. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  174. package/src/__tests__/session-agent-loop.test.ts +46 -6
  175. package/src/__tests__/session-confirmation-signals.test.ts +0 -1
  176. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  177. package/src/__tests__/session-error.test.ts +5 -14
  178. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  179. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  180. package/src/__tests__/session-media-retry.test.ts +12 -74
  181. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  182. package/src/__tests__/session-profile-injection.test.ts +2 -6
  183. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  184. package/src/__tests__/session-queue.test.ts +94 -139
  185. package/src/__tests__/session-skill-tools.test.ts +115 -115
  186. package/src/__tests__/session-slash-known.test.ts +0 -1
  187. package/src/__tests__/session-slash-queue.test.ts +0 -1
  188. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  189. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  190. package/src/__tests__/session-usage.test.ts +0 -1
  191. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  192. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  193. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  194. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  195. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  196. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  197. package/src/__tests__/skill-load-tool.test.ts +194 -2
  198. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  199. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  200. package/src/__tests__/skills.test.ts +14 -53
  201. package/src/__tests__/slack-channel-config.test.ts +0 -1
  202. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  203. package/src/__tests__/slack-skill.test.ts +1 -1
  204. package/src/__tests__/subagent-tools.test.ts +2 -2
  205. package/src/__tests__/system-prompt.test.ts +4 -3
  206. package/src/__tests__/task-compiler.test.ts +0 -1
  207. package/src/__tests__/task-management-tools.test.ts +0 -1
  208. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  209. package/src/__tests__/task-runner.test.ts +0 -1
  210. package/src/__tests__/task-scheduler.test.ts +0 -1
  211. package/src/__tests__/terminal-tools.test.ts +0 -1
  212. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  213. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  214. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  215. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  216. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  217. package/src/__tests__/tool-executor.test.ts +8 -86
  218. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  219. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  220. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  221. package/src/__tests__/trust-store.test.ts +80 -4
  222. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  223. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  224. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  225. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  226. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  227. package/src/__tests__/twilio-provider.test.ts +0 -1
  228. package/src/__tests__/twilio-routes.test.ts +0 -1
  229. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  230. package/src/__tests__/update-bulletin.test.ts +0 -1
  231. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  232. package/src/__tests__/usage-routes.test.ts +0 -1
  233. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  234. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  235. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  236. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  237. package/src/__tests__/web-fetch.test.ts +57 -0
  238. package/src/__tests__/workspace-git-service.test.ts +5 -14
  239. package/src/__tests__/workspace-policy.test.ts +0 -1
  240. package/src/agent/loop.ts +22 -34
  241. package/src/bundler/bundle-signer.ts +4 -4
  242. package/src/calls/call-controller.ts +1 -1
  243. package/src/calls/relay-server.ts +1 -1
  244. package/src/calls/twilio-rest.ts +1 -1
  245. package/src/calls/voice-session-bridge.ts +3 -1
  246. package/src/cli/__tests__/notifications.test.ts +3 -4
  247. package/src/cli/commands/map.ts +2 -6
  248. package/src/cli/commands/mcp.ts +73 -15
  249. package/src/cli/commands/notifications.ts +4 -4
  250. package/src/cli/commands/sessions.ts +9 -1
  251. package/src/cli/commands/skills.ts +6 -10
  252. package/src/cli/http-client.ts +2 -3
  253. package/src/cli/main-screen.tsx +10 -10
  254. package/src/cli/program.ts +0 -4
  255. package/src/cli/reference.ts +0 -2
  256. package/src/cli.ts +15 -9
  257. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  258. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  259. package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
  260. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  261. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  262. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  263. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  264. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  265. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  266. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  267. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  268. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  269. package/src/config/bundled-skills/document/SKILL.md +4 -1
  270. package/src/config/bundled-skills/doordash/SKILL.md +8 -1
  271. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  272. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  273. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  274. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  275. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  276. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  277. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  278. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  279. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  280. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  281. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  282. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  283. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  284. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  285. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  288. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  289. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  290. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  291. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  292. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  293. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  294. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  295. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  296. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  297. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  298. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  299. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  300. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  301. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  302. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  303. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  304. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  305. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  306. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  307. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  308. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  309. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  310. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  311. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  312. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  313. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  314. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  315. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  316. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  317. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  318. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  319. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  320. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  321. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  322. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  323. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  324. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  325. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  326. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  327. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  328. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  329. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  330. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  331. package/src/config/bundled-tool-registry.ts +118 -107
  332. package/src/config/env.ts +5 -2
  333. package/src/config/feature-flag-registry.json +25 -9
  334. package/src/config/loader.ts +10 -2
  335. package/src/config/schema.ts +19 -16
  336. package/src/config/schemas/inference.ts +12 -22
  337. package/src/config/schemas/memory-storage.ts +19 -1
  338. package/src/config/schemas/platform.ts +0 -16
  339. package/src/config/skill-state.ts +11 -8
  340. package/src/config/skills.ts +83 -32
  341. package/src/context/token-estimator.ts +11 -0
  342. package/src/context/window-manager.ts +180 -151
  343. package/src/daemon/computer-use-session.ts +11 -43
  344. package/src/daemon/daemon-control.ts +4 -1
  345. package/src/daemon/handlers/config-channels.ts +5 -9
  346. package/src/daemon/handlers/config-ingress.ts +0 -4
  347. package/src/daemon/handlers/config-model.ts +7 -13
  348. package/src/daemon/handlers/config-telegram.ts +4 -8
  349. package/src/daemon/handlers/config-voice.ts +2 -5
  350. package/src/daemon/handlers/dictation.ts +2 -12
  351. package/src/daemon/handlers/identity.ts +0 -105
  352. package/src/daemon/handlers/recording.ts +3 -23
  353. package/src/daemon/handlers/session-history.ts +1 -1
  354. package/src/daemon/handlers/sessions.ts +53 -72
  355. package/src/daemon/handlers/shared.ts +7 -28
  356. package/src/daemon/handlers/skills.ts +31 -27
  357. package/src/daemon/host-bash-proxy.ts +148 -0
  358. package/src/daemon/host-file-proxy.ts +135 -0
  359. package/src/daemon/lifecycle.ts +49 -24
  360. package/src/daemon/mcp-reload-service.ts +123 -0
  361. package/src/daemon/message-protocol.ts +6 -0
  362. package/src/daemon/message-types/browser.ts +1 -1
  363. package/src/daemon/message-types/computer-use.ts +1 -4
  364. package/src/daemon/message-types/guardian-actions.ts +1 -1
  365. package/src/daemon/message-types/host-bash.ts +18 -0
  366. package/src/daemon/message-types/host-file.ts +44 -0
  367. package/src/daemon/message-types/integrations.ts +1 -67
  368. package/src/daemon/message-types/messages.ts +15 -0
  369. package/src/daemon/message-types/schedules.ts +11 -27
  370. package/src/daemon/message-types/sessions.ts +2 -1
  371. package/src/daemon/message-types/settings.ts +1 -1
  372. package/src/daemon/message-types/shared.ts +1 -1
  373. package/src/daemon/ride-shotgun-handler.ts +2 -42
  374. package/src/daemon/server.ts +43 -10
  375. package/src/daemon/session-agent-loop-handlers.ts +48 -7
  376. package/src/daemon/session-agent-loop.ts +97 -66
  377. package/src/daemon/session-attachments.ts +1 -1
  378. package/src/daemon/session-error.ts +17 -16
  379. package/src/daemon/session-lifecycle.ts +20 -1
  380. package/src/daemon/session-media-retry.ts +1 -15
  381. package/src/daemon/session-messaging.ts +14 -6
  382. package/src/daemon/session-process.ts +36 -7
  383. package/src/daemon/session-queue-manager.ts +62 -103
  384. package/src/daemon/session-runtime-assembly.ts +27 -0
  385. package/src/daemon/session-skill-tools.ts +12 -11
  386. package/src/daemon/session-slash.ts +7 -0
  387. package/src/daemon/session-surfaces.ts +19 -97
  388. package/src/daemon/session-tool-setup.ts +146 -6
  389. package/src/daemon/session.ts +77 -13
  390. package/src/errors.ts +0 -2
  391. package/src/export/formatter.ts +6 -0
  392. package/src/mcp/mcp-oauth-provider.ts +1 -3
  393. package/src/media/avatar-router.ts +20 -28
  394. package/src/media/avatar-types.ts +7 -14
  395. package/src/media/managed-avatar-client.ts +70 -34
  396. package/src/memory/conversation-title-service.ts +1 -2
  397. package/src/memory/db-init.ts +16 -0
  398. package/src/memory/embedding-backend.ts +129 -27
  399. package/src/memory/embedding-gemini.test.ts +256 -0
  400. package/src/memory/embedding-gemini.ts +47 -13
  401. package/src/memory/embedding-local.ts +14 -2
  402. package/src/memory/embedding-ollama.ts +15 -2
  403. package/src/memory/embedding-openai.ts +15 -2
  404. package/src/memory/embedding-types.test.ts +116 -0
  405. package/src/memory/embedding-types.ts +61 -0
  406. package/src/memory/fingerprint.ts +1 -1
  407. package/src/memory/indexer.ts +25 -1
  408. package/src/memory/job-handlers/embedding.test.ts +258 -0
  409. package/src/memory/job-handlers/embedding.ts +81 -1
  410. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  411. package/src/memory/job-handlers/media-processing.ts +11 -1
  412. package/src/memory/job-utils.ts +21 -6
  413. package/src/memory/jobs-store.ts +5 -1
  414. package/src/memory/jobs-worker.ts +8 -0
  415. package/src/memory/message-content.ts +66 -0
  416. package/src/memory/migrations/100-core-tables.ts +1 -31
  417. package/src/memory/migrations/104-core-indexes.ts +0 -11
  418. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  419. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  420. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  421. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  422. package/src/memory/migrations/index.ts +4 -0
  423. package/src/memory/migrations/registry.ts +19 -0
  424. package/src/memory/qdrant-client.ts +158 -43
  425. package/src/memory/retriever.test.ts +0 -1
  426. package/src/memory/retriever.ts +12 -2
  427. package/src/memory/schema/infrastructure.ts +5 -29
  428. package/src/memory/search/formatting.ts +34 -9
  429. package/src/memory/search/semantic.ts +57 -2
  430. package/src/memory/search/types.ts +2 -1
  431. package/src/notifications/AGENTS.md +2 -2
  432. package/src/notifications/README.md +59 -58
  433. package/src/notifications/adapters/macos.ts +1 -1
  434. package/src/notifications/broadcaster.ts +5 -5
  435. package/src/notifications/copy-composer.ts +1 -1
  436. package/src/notifications/decision-engine.ts +2 -2
  437. package/src/notifications/destination-resolver.ts +2 -2
  438. package/src/notifications/emit-signal.ts +8 -8
  439. package/src/notifications/signal.ts +1 -1
  440. package/src/notifications/thread-seed-composer.ts +1 -1
  441. package/src/oauth/connect-orchestrator.ts +1 -1
  442. package/src/oauth/token-persistence.ts +1 -1
  443. package/src/permissions/checker.ts +12 -1
  444. package/src/permissions/defaults.ts +10 -14
  445. package/src/permissions/trust-store.ts +37 -0
  446. package/src/permissions/workspace-policy.ts +0 -1
  447. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  448. package/src/prompts/computer-use-prompt.ts +1 -1
  449. package/src/prompts/system-prompt.ts +29 -30
  450. package/src/prompts/templates/SOUL.md +1 -2
  451. package/src/prompts/templates/UPDATES.md +16 -7
  452. package/src/providers/anthropic/client.ts +87 -33
  453. package/src/providers/gemini/client.ts +6 -0
  454. package/src/providers/managed-proxy/constants.ts +5 -0
  455. package/src/providers/openai/client.ts +15 -0
  456. package/src/providers/registry.ts +2 -2
  457. package/src/providers/types.ts +24 -2
  458. package/src/runtime/AGENTS.md +18 -0
  459. package/src/runtime/assistant-event-hub.ts +2 -3
  460. package/src/runtime/assistant-event.ts +4 -4
  461. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  462. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  463. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
  464. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  465. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  466. package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
  467. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  468. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  469. package/src/runtime/auth/route-policy.ts +8 -4
  470. package/src/runtime/auth/scopes.ts +1 -1
  471. package/src/runtime/auth/subject.ts +4 -4
  472. package/src/runtime/auth/token-service.ts +0 -23
  473. package/src/runtime/auth/types.ts +3 -3
  474. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  475. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  476. package/src/runtime/guardian-action-service.ts +3 -3
  477. package/src/runtime/http-server.ts +15 -2
  478. package/src/runtime/invite-service.ts +3 -3
  479. package/src/runtime/local-actor-identity.ts +17 -22
  480. package/src/runtime/pending-interactions.ts +21 -9
  481. package/src/runtime/routes/app-management-routes.ts +2 -3
  482. package/src/runtime/routes/approval-routes.ts +1 -3
  483. package/src/runtime/routes/btw-routes.ts +155 -0
  484. package/src/runtime/routes/computer-use-routes.ts +77 -31
  485. package/src/runtime/routes/conversation-routes.ts +230 -46
  486. package/src/runtime/routes/diagnostics-routes.ts +63 -29
  487. package/src/runtime/routes/documents-routes.ts +2 -2
  488. package/src/runtime/routes/global-search-routes.ts +1 -1
  489. package/src/runtime/routes/host-bash-routes.ts +83 -0
  490. package/src/runtime/routes/host-file-routes.ts +79 -0
  491. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  492. package/src/runtime/routes/log-export-routes.ts +120 -0
  493. package/src/runtime/routes/mcp-routes.ts +20 -0
  494. package/src/runtime/routes/migration-routes.ts +3 -3
  495. package/src/runtime/routes/pairing-routes.ts +1 -1
  496. package/src/runtime/routes/recording-routes.ts +6 -4
  497. package/src/runtime/routes/schedule-routes.ts +31 -5
  498. package/src/runtime/routes/session-management-routes.ts +2 -6
  499. package/src/runtime/routes/session-query-routes.ts +18 -15
  500. package/src/runtime/routes/settings-routes.ts +7 -261
  501. package/src/runtime/routes/skills-routes.ts +7 -6
  502. package/src/runtime/routes/subagents-routes.ts +4 -10
  503. package/src/runtime/routes/surface-action-routes.ts +3 -14
  504. package/src/runtime/routes/surface-content-routes.ts +22 -5
  505. package/src/runtime/routes/work-items-routes.ts +21 -25
  506. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  507. package/src/runtime/routes/workspace-utils.ts +1 -1
  508. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  509. package/src/runtime/verification-outbound-actions.ts +2 -2
  510. package/src/schedule/integration-status.ts +0 -6
  511. package/src/schedule/schedule-store.ts +234 -43
  512. package/src/schedule/scheduler.ts +73 -74
  513. package/src/security/oauth2.ts +1 -1
  514. package/src/sequence/store.ts +12 -2
  515. package/src/skills/frontmatter.ts +19 -77
  516. package/src/skills/managed-store.ts +11 -2
  517. package/src/subagent/manager.ts +5 -3
  518. package/src/tasks/ephemeral-permissions.ts +3 -5
  519. package/src/tools/AGENTS.md +0 -1
  520. package/src/tools/browser/browser-manager.ts +17 -11
  521. package/src/tools/browser/jit-auth.ts +4 -1
  522. package/src/tools/claude-code/claude-code.ts +1 -1
  523. package/src/tools/computer-use/definitions.ts +48 -60
  524. package/src/tools/document/document-tool.ts +6 -6
  525. package/src/tools/filesystem/edit.ts +2 -1
  526. package/src/tools/filesystem/read.ts +20 -2
  527. package/src/tools/filesystem/write.ts +2 -1
  528. package/src/tools/host-filesystem/edit.ts +17 -1
  529. package/src/tools/host-filesystem/read.ts +16 -1
  530. package/src/tools/host-filesystem/write.ts +15 -1
  531. package/src/tools/host-terminal/host-shell.ts +24 -0
  532. package/src/tools/memory/definitions.ts +45 -81
  533. package/src/tools/memory/handlers.test.ts +0 -1
  534. package/src/tools/memory/handlers.ts +1 -1
  535. package/src/tools/memory/register.ts +26 -60
  536. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  537. package/src/tools/network/web-fetch.ts +7 -1
  538. package/src/tools/network/web-search.ts +2 -1
  539. package/src/tools/registry.ts +23 -0
  540. package/src/tools/schedule/create.ts +113 -5
  541. package/src/tools/schedule/list.ts +57 -15
  542. package/src/tools/schedule/update.ts +73 -3
  543. package/src/tools/shared/filesystem/image-read.ts +192 -0
  544. package/src/tools/side-effects.ts +1 -7
  545. package/src/tools/skills/delete-managed.ts +27 -64
  546. package/src/tools/skills/execute.ts +54 -0
  547. package/src/tools/skills/load.ts +127 -5
  548. package/src/tools/skills/scaffold-managed.ts +93 -172
  549. package/src/tools/subagent/message.ts +0 -7
  550. package/src/tools/subagent/spawn.ts +1 -1
  551. package/src/tools/swarm/delegate.ts +0 -3
  552. package/src/tools/system/avatar-generator.ts +13 -19
  553. package/src/tools/system/request-permission.ts +2 -1
  554. package/src/tools/terminal/safe-env.ts +1 -0
  555. package/src/tools/tool-manifest.ts +41 -47
  556. package/src/tools/types.ts +6 -2
  557. package/src/tools/ui-surface/definitions.ts +0 -55
  558. package/src/util/errors.ts +0 -10
  559. package/src/workspace/git-service.ts +0 -2
  560. package/src/__tests__/account-registry.test.ts +0 -258
  561. package/src/__tests__/email-classifier.test.ts +0 -25
  562. package/src/__tests__/gmail-integration.test.ts +0 -97
  563. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  564. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
  565. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  566. package/src/__tests__/recording-intent.test.ts +0 -985
  567. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  568. package/src/__tests__/reminder-store.test.ts +0 -350
  569. package/src/__tests__/reminder.test.ts +0 -337
  570. package/src/__tests__/scan-result-store.test.ts +0 -121
  571. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
  572. package/src/__tests__/view-image-tool.test.ts +0 -241
  573. package/src/cli/commands/amazon/cart.ts +0 -513
  574. package/src/cli/commands/amazon/checkout.ts +0 -394
  575. package/src/cli/commands/amazon/client.ts +0 -513
  576. package/src/cli/commands/amazon/index.ts +0 -885
  577. package/src/cli/commands/amazon/product-details.ts +0 -145
  578. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  579. package/src/cli/commands/amazon/search.ts +0 -76
  580. package/src/cli/commands/amazon/session.ts +0 -108
  581. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
  582. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
  583. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
  584. package/src/cli/commands/twitter/index.ts +0 -420
  585. package/src/cli/commands/twitter/oauth-client.ts +0 -60
  586. package/src/cli/commands/twitter/router.ts +0 -351
  587. package/src/cli/commands/twitter/types.ts +0 -30
  588. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  589. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  590. package/src/config/bundled-skills/amazon/SKILL.md +0 -136
  591. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  592. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  593. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  594. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  595. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  596. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  597. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  598. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  599. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  600. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  601. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  602. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  603. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  604. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  605. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  606. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  607. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  608. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  609. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  610. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  611. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  612. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  613. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  614. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  615. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  616. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  617. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  618. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  619. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  620. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  621. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  622. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  623. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  624. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  625. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  626. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  627. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  628. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  629. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  630. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  631. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  632. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  633. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  634. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  635. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  636. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  637. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  638. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  639. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  640. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  641. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  642. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  643. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  644. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  645. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  646. package/src/config/bundled-skills/twitter/SKILL.md +0 -206
  647. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  648. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  649. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  650. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  651. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  652. package/src/daemon/handlers/pairing.ts +0 -119
  653. package/src/daemon/handlers/session-user-message.ts +0 -961
  654. package/src/daemon/recording-executor.ts +0 -180
  655. package/src/daemon/recording-intent-fallback.ts +0 -162
  656. package/src/daemon/recording-intent.ts +0 -493
  657. package/src/memory/account-store.ts +0 -117
  658. package/src/messaging/activity-analyzer.ts +0 -76
  659. package/src/messaging/email-classifier.ts +0 -208
  660. package/src/messaging/index.ts +0 -2
  661. package/src/messaging/outreach-classifier.ts +0 -185
  662. package/src/messaging/thread-summarizer.ts +0 -346
  663. package/src/messaging/types.ts +0 -17
  664. package/src/tools/browser/x-auto-navigate.ts +0 -254
  665. package/src/tools/credentials/account-registry.ts +0 -144
  666. package/src/tools/filesystem/view-image.ts +0 -244
  667. package/src/tools/reminder/reminder-store.ts +0 -194
  668. package/src/tools/reminder/reminder.ts +0 -158
  669. package/src/tools/system/navigate-settings.ts +0 -74
  670. package/src/tools/system/open-system-settings.ts +0 -85
  671. package/src/tools/system/version.ts +0 -54
  672. package/src/twitter/platform-proxy-client.ts +0 -408
  673. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  674. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  675. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  676. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  677. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  678. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  679. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  680. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  681. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -10,7 +10,6 @@ mock.module("../util/platform.js", () => ({
10
10
  isMacOS: () => process.platform === "darwin",
11
11
  isLinux: () => process.platform === "linux",
12
12
  isWindows: () => process.platform === "win32",
13
- getSocketPath: () => join(testDir, "test.sock"),
14
13
  getPidPath: () => join(testDir, "test.pid"),
15
14
  getDbPath: () => join(testDir, "test.db"),
16
15
  getLogPath: () => join(testDir, "test.log"),
@@ -34,10 +33,6 @@ import {
34
33
  } from "../schedule/schedule-store.js";
35
34
  import { startScheduler } from "../schedule/scheduler.js";
36
35
  import { createTask } from "../tasks/task-store.js";
37
- import {
38
- getReminder,
39
- insertReminder,
40
- } from "../tools/reminder/reminder-store.js";
41
36
 
42
37
  initializeDb();
43
38
 
@@ -97,7 +92,6 @@ describe("scheduler RRULE execution", () => {
97
92
  const db = getDb();
98
93
  db.run("DELETE FROM cron_runs");
99
94
  db.run("DELETE FROM cron_jobs");
100
- db.run("DELETE FROM reminders");
101
95
  db.run("DELETE FROM task_runs");
102
96
  db.run("DELETE FROM tasks");
103
97
  db.run("DELETE FROM messages");
@@ -545,31 +539,71 @@ describe("scheduler RRULE execution", () => {
545
539
  expect(after!.lastRunAt).not.toBeNull();
546
540
  });
547
541
 
548
- test("notify reminder passes routing metadata to notifyReminder callback", async () => {
549
- const reminder = insertReminder({
550
- label: "Route this reminder",
551
- message: "Reminder body",
552
- fireAt: Date.now() - 1000,
542
+ // ── One-shot schedule tests ───────────────────────────────────────
543
+
544
+ test("one-shot execute mode fires and marks schedule as fired", async () => {
545
+ const schedule = createSchedule({
546
+ name: "One-shot execute",
547
+ message: "Execute this once",
548
+ mode: "execute",
549
+ nextRunAt: Date.now() - 1000,
550
+ // No expression = one-shot
551
+ });
552
+
553
+ expect(getSchedule(schedule.id)!.status).toBe("active");
554
+
555
+ const processedMessages: { conversationId: string; message: string }[] = [];
556
+ const processMessage = async (conversationId: string, message: string) => {
557
+ processedMessages.push({ conversationId, message });
558
+ };
559
+
560
+ const scheduler = startScheduler(
561
+ processMessage,
562
+ () => {},
563
+ () => {},
564
+ );
565
+ await new Promise((resolve) => setTimeout(resolve, 500));
566
+ scheduler.stop();
567
+
568
+ expect(
569
+ processedMessages.some((m) => m.message === "Execute this once"),
570
+ ).toBe(true);
571
+
572
+ const after = getSchedule(schedule.id);
573
+ expect(after).not.toBeNull();
574
+ expect(after!.status).toBe("fired");
575
+ expect(after!.enabled).toBe(false);
576
+
577
+ // A cron_runs entry should have been created
578
+ const runs = getScheduleRuns(schedule.id);
579
+ expect(runs.length).toBeGreaterThanOrEqual(1);
580
+ expect(runs[0].status).toBe("ok");
581
+ });
582
+
583
+ test("one-shot notify mode emits notification and marks schedule as fired", async () => {
584
+ const schedule = createSchedule({
585
+ name: "One-shot notify",
586
+ message: "Notify about this",
553
587
  mode: "notify",
588
+ nextRunAt: Date.now() - 1000,
554
589
  routingIntent: "multi_channel",
555
- routingHints: {
556
- requestedByUser: true,
557
- channelMentions: ["telegram", "slack"],
558
- },
590
+ routingHints: { channel: "slack" },
559
591
  });
560
592
 
593
+ expect(getSchedule(schedule.id)!.status).toBe("active");
594
+
561
595
  const notifyCalls: Array<{
562
596
  id: string;
563
597
  label: string;
564
598
  message: string;
565
- routingIntent: "single_channel" | "multi_channel" | "all_channels";
599
+ routingIntent: string;
566
600
  routingHints: Record<string, unknown>;
567
601
  }> = [];
568
- const notifyReminder = (payload: {
602
+ const notifyScheduleOneShot = (payload: {
569
603
  id: string;
570
604
  label: string;
571
605
  message: string;
572
- routingIntent: "single_channel" | "multi_channel" | "all_channels";
606
+ routingIntent: string;
573
607
  routingHints: Record<string, unknown>;
574
608
  }) => {
575
609
  notifyCalls.push(payload);
@@ -577,7 +611,7 @@ describe("scheduler RRULE execution", () => {
577
611
 
578
612
  const scheduler = startScheduler(
579
613
  async () => {},
580
- notifyReminder,
614
+ notifyScheduleOneShot,
581
615
  () => {},
582
616
  );
583
617
  await new Promise((resolve) => setTimeout(resolve, 500));
@@ -585,15 +619,154 @@ describe("scheduler RRULE execution", () => {
585
619
 
586
620
  expect(notifyCalls).toHaveLength(1);
587
621
  expect(notifyCalls[0]).toEqual({
588
- id: reminder.id,
589
- label: reminder.label,
590
- message: reminder.message,
622
+ id: schedule.id,
623
+ label: "One-shot notify",
624
+ message: "Notify about this",
591
625
  routingIntent: "multi_channel",
626
+ routingHints: { channel: "slack" },
627
+ });
628
+
629
+ const after = getSchedule(schedule.id);
630
+ expect(after).not.toBeNull();
631
+ expect(after!.status).toBe("fired");
632
+ expect(after!.enabled).toBe(false);
633
+ });
634
+
635
+ test("one-shot failure reverts to active for retry", async () => {
636
+ const schedule = createSchedule({
637
+ name: "One-shot fail",
638
+ message: "This will fail",
639
+ mode: "execute",
640
+ nextRunAt: Date.now() - 1000,
641
+ });
642
+
643
+ expect(getSchedule(schedule.id)!.status).toBe("active");
644
+
645
+ const processMessage = async () => {
646
+ throw new Error("Simulated failure");
647
+ };
648
+
649
+ const scheduler = startScheduler(
650
+ processMessage,
651
+ () => {},
652
+ () => {},
653
+ );
654
+ await new Promise((resolve) => setTimeout(resolve, 500));
655
+ scheduler.stop();
656
+
657
+ const after = getSchedule(schedule.id);
658
+ expect(after).not.toBeNull();
659
+ expect(after!.status).toBe("active");
660
+ expect(after!.enabled).toBe(true);
661
+ });
662
+
663
+ test("recurring + notify mode emits notification and continues recurring", async () => {
664
+ const rruleExpr = buildEveryMinuteRrule();
665
+ const schedule = createSchedule({
666
+ name: "Recurring notify",
667
+ cronExpression: rruleExpr,
668
+ message: "Recurring notification",
669
+ syntax: "rrule",
670
+ expression: rruleExpr,
671
+ mode: "notify",
672
+ routingIntent: "single_channel",
673
+ routingHints: { preferred: "email" },
674
+ });
675
+
676
+ forceScheduleDue(schedule.id);
677
+
678
+ const notifyCalls: Array<{
679
+ id: string;
680
+ label: string;
681
+ message: string;
682
+ routingIntent: string;
683
+ routingHints: Record<string, unknown>;
684
+ }> = [];
685
+ const notifyScheduleOneShot = (payload: {
686
+ id: string;
687
+ label: string;
688
+ message: string;
689
+ routingIntent: string;
690
+ routingHints: Record<string, unknown>;
691
+ }) => {
692
+ notifyCalls.push(payload);
693
+ };
694
+
695
+ const scheduler = startScheduler(
696
+ async () => {},
697
+ notifyScheduleOneShot,
698
+ () => {},
699
+ );
700
+ await new Promise((resolve) => setTimeout(resolve, 500));
701
+ scheduler.stop();
702
+
703
+ expect(notifyCalls).toHaveLength(1);
704
+ expect(notifyCalls[0]).toEqual({
705
+ id: schedule.id,
706
+ label: "Recurring notify",
707
+ message: "Recurring notification",
708
+ routingIntent: "single_channel",
709
+ routingHints: { preferred: "email" },
710
+ });
711
+
712
+ // Schedule should remain enabled and have a future nextRunAt (not fired/disabled)
713
+ const after = getSchedule(schedule.id);
714
+ expect(after).not.toBeNull();
715
+ expect(after!.enabled).toBe(true);
716
+ expect(after!.nextRunAt).toBeGreaterThan(Date.now() - 5000);
717
+ // Status should still be "active" (not "fired")
718
+ expect(after!.status).toBe("active");
719
+ });
720
+
721
+ test("one-shot notify mode passes routing intent and hints to notifier", async () => {
722
+ const schedule = createSchedule({
723
+ name: "Routing test",
724
+ message: "Check routing",
725
+ mode: "notify",
726
+ nextRunAt: Date.now() - 1000,
727
+ routingIntent: "all_channels",
592
728
  routingHints: {
593
729
  requestedByUser: true,
594
730
  channelMentions: ["telegram", "slack"],
731
+ priority: "high",
595
732
  },
596
733
  });
597
- expect(getReminder(reminder.id)?.status).toBe("fired");
734
+
735
+ const notifyCalls: Array<{
736
+ id: string;
737
+ label: string;
738
+ message: string;
739
+ routingIntent: string;
740
+ routingHints: Record<string, unknown>;
741
+ }> = [];
742
+ const notifyScheduleOneShot = (payload: {
743
+ id: string;
744
+ label: string;
745
+ message: string;
746
+ routingIntent: string;
747
+ routingHints: Record<string, unknown>;
748
+ }) => {
749
+ notifyCalls.push(payload);
750
+ };
751
+
752
+ const scheduler = startScheduler(
753
+ async () => {},
754
+ notifyScheduleOneShot,
755
+ () => {},
756
+ );
757
+ await new Promise((resolve) => setTimeout(resolve, 500));
758
+ scheduler.stop();
759
+
760
+ expect(notifyCalls).toHaveLength(1);
761
+ expect(notifyCalls[0].routingIntent).toBe("all_channels");
762
+ expect(notifyCalls[0].routingHints).toEqual({
763
+ requestedByUser: true,
764
+ channelMentions: ["telegram", "slack"],
765
+ priority: "high",
766
+ });
767
+
768
+ // Should be marked as fired
769
+ const after = getSchedule(schedule.id);
770
+ expect(after!.status).toBe("fired");
598
771
  });
599
772
  });
@@ -10,7 +10,6 @@ mock.module("../util/platform.js", () => ({
10
10
  isMacOS: () => process.platform === "darwin",
11
11
  isLinux: () => process.platform === "linux",
12
12
  isWindows: () => process.platform === "win32",
13
- getSocketPath: () => join(testDir, "test.sock"),
14
13
  getPidPath: () => join(testDir, "test.pid"),
15
14
  getDbPath: () => join(testDir, "test.db"),
16
15
  getLogPath: () => join(testDir, "test.log"),
@@ -35,7 +35,6 @@ mock.module("../util/platform.js", () => ({
35
35
  isMacOS: () => process.platform === "darwin",
36
36
  isLinux: () => process.platform === "linux",
37
37
  isWindows: () => process.platform === "win32",
38
- getSocketPath: () => join(testDir, "test.sock"),
39
38
  getPidPath: () => join(testDir, "test.pid"),
40
39
  getDbPath: () => join(testDir, "test.db"),
41
40
  getLogPath: () => join(testDir, "test.log"),
@@ -1,6 +1,9 @@
1
1
  import { beforeEach, describe, expect, mock, test } from "bun:test";
2
2
 
3
- import type { SecretRequest, ServerMessage } from "../daemon/message-protocol.js";
3
+ import type {
4
+ SecretRequest,
5
+ ServerMessage,
6
+ } from "../daemon/message-protocol.js";
4
7
 
5
8
  // Capture all logger calls so we can verify secret values never appear
6
9
  const logCalls: Array<{ level: string; args: unknown[] }> = [];
@@ -100,10 +103,10 @@ describe("secret prompt log hygiene", () => {
100
103
  }
101
104
  });
102
105
 
103
- test("sent IPC message contains value=undefined (value flows through IPC, not logs)", async () => {
106
+ test("sent message contains value=undefined (value flows through event, not logs)", async () => {
104
107
  const promise = prompter.prompt("svc", "tok", "Token");
105
108
  const msg = sentMessages[0] as SecretRequest & { value?: unknown };
106
- // The IPC message should NOT contain a value field
109
+ // The message should NOT contain a value field
107
110
  expect(msg.value).toBeUndefined();
108
111
  prompter.resolveSecret(msg.requestId, undefined);
109
112
  await promise;
@@ -1,6 +1,9 @@
1
1
  import { beforeEach, describe, expect, test } from "bun:test";
2
2
 
3
- import type { SecretRequest, ServerMessage } from "../daemon/message-protocol.js";
3
+ import type {
4
+ SecretRequest,
5
+ ServerMessage,
6
+ } from "../daemon/message-protocol.js";
4
7
  import type { SecretPromptResult } from "../permissions/secret-prompter.js";
5
8
  import { SecretPrompter } from "../permissions/secret-prompter.js";
6
9
 
@@ -29,7 +29,6 @@ mock.module("../util/platform.js", () => ({
29
29
  isMacOS: () => process.platform === "darwin",
30
30
  isLinux: () => process.platform === "linux",
31
31
  isWindows: () => process.platform === "win32",
32
- getSocketPath: () => join(testDir, "test.sock"),
33
32
  getPidPath: () => join(testDir, "test.pid"),
34
33
  getDbPath: () => join(testDir, "test.db"),
35
34
  getLogPath: () => join(testDir, "test.log"),
@@ -53,6 +52,7 @@ mock.module("../config/loader.js", () => ({
53
52
  memory: { enabled: false },
54
53
  rateLimit: { maxRequestsPerMinute: 0, maxTokensPerSession: 0 },
55
54
  secretDetection: { enabled: false },
55
+ contextWindow: { maxInputTokens: 200000 },
56
56
  }),
57
57
  }));
58
58
 
@@ -65,7 +65,7 @@ mock.module("../runtime/guardian-vellum-migration.js", () => ({
65
65
  // Mock local-actor-identity to return a stable guardian context that uses
66
66
  // the same principal as the canonical requests created in tests.
67
67
  mock.module("../runtime/local-actor-identity.js", () => ({
68
- resolveLocalIpcTrustContext: () => ({
68
+ resolveLocalTrustContext: () => ({
69
69
  sourceChannel: "vellum",
70
70
  trustClass: "guardian",
71
71
  guardianPrincipalId: "test-principal-id",
@@ -112,7 +112,11 @@ function makeCompletingSession(): Session {
112
112
  setCommandIntent: () => {},
113
113
  setTurnChannelContext: () => {},
114
114
  setTurnInterfaceContext: () => {},
115
+ ensureActorScopedHistory: async () => {},
116
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
115
117
  updateClient: () => {},
118
+ setHostBashProxy: () => {},
119
+ setHostFileProxy: () => {},
116
120
  hasAnyPendingConfirmation: () => false,
117
121
  hasPendingConfirmation: () => false,
118
122
  denyAllPendingConfirmations: () => {},
@@ -164,7 +168,11 @@ function makeHangingSession(): Session {
164
168
  setCommandIntent: () => {},
165
169
  setTurnChannelContext: () => {},
166
170
  setTurnInterfaceContext: () => {},
171
+ ensureActorScopedHistory: async () => {},
172
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
167
173
  updateClient: () => {},
174
+ setHostBashProxy: () => {},
175
+ setHostFileProxy: () => {},
168
176
  hasAnyPendingConfirmation: () => false,
169
177
  hasPendingConfirmation: () => false,
170
178
  denyAllPendingConfirmations: () => {},
@@ -244,7 +252,11 @@ function makePendingApprovalSession(
244
252
  setCommandIntent: () => {},
245
253
  setTurnChannelContext: () => {},
246
254
  setTurnInterfaceContext: () => {},
255
+ ensureActorScopedHistory: async () => {},
256
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
247
257
  updateClient: () => {},
258
+ setHostBashProxy: () => {},
259
+ setHostFileProxy: () => {},
248
260
  hasAnyPendingConfirmation: () => pending.size > 0,
249
261
  hasPendingConfirmation: (candidateRequestId: string) =>
250
262
  pending.has(candidateRequestId),
@@ -7,9 +7,6 @@ mock.module("../notifications/emit-signal.js", () => ({
7
7
  emitNotificationSignalMock(params),
8
8
  }));
9
9
 
10
- // Import from the new canonical location (notifications skill)
11
- // Backward-compat: the messaging re-export should resolve to the same function
12
- import { run as messagingRun } from "../config/bundled-skills/messaging/tools/send-notification.js";
13
10
  import { run } from "../config/bundled-skills/notifications/tools/send-notification.js";
14
11
 
15
12
  describe("send-notification tool", () => {
@@ -85,8 +82,4 @@ describe("send-notification tool", () => {
85
82
  expect(result.content).toContain("database unavailable");
86
83
  expect(emitNotificationSignalMock).toHaveBeenCalledTimes(1);
87
84
  });
88
-
89
- test("messaging re-export resolves to the same run function", () => {
90
- expect(messagingRun).toBe(run);
91
- });
92
85
  });
@@ -11,7 +11,6 @@ mock.module("../util/platform.js", () => ({
11
11
  isMacOS: () => process.platform === "darwin",
12
12
  isLinux: () => process.platform === "linux",
13
13
  isWindows: () => process.platform === "win32",
14
- getSocketPath: () => join(testDir, "test.sock"),
15
14
  getPidPath: () => join(testDir, "test.pid"),
16
15
  getDbPath: () => join(testDir, "test.db"),
17
16
  getLogPath: () => join(testDir, "test.log"),
@@ -12,7 +12,6 @@ mock.module("../util/platform.js", () => ({
12
12
  isMacOS: () => process.platform === "darwin",
13
13
  isLinux: () => process.platform === "linux",
14
14
  isWindows: () => process.platform === "win32",
15
- getSocketPath: () => join(testDir, "test.sock"),
16
15
  getPidPath: () => join(testDir, "test.pid"),
17
16
  getDbPath: () => join(testDir, "test.db"),
18
17
  getLogPath: () => join(testDir, "test.log"),
@@ -240,7 +239,7 @@ describe("renderHistoryContent", () => {
240
239
  {
241
240
  type: "tool_use",
242
241
  id: "tu_1",
243
- name: "memory_save",
242
+ name: "memory_manage",
244
243
  input: { key: "task" },
245
244
  },
246
245
  { type: "tool_result", tool_use_id: "tu_1", content: "saved" },
@@ -13,7 +13,6 @@ mock.module("../util/logger.js", () => ({
13
13
  }));
14
14
 
15
15
  mock.module("../util/platform.js", () => ({
16
- getSocketPath: () => "/tmp/test.sock",
17
16
  getDataDir: () => "/tmp",
18
17
  }));
19
18
 
@@ -16,7 +16,6 @@ mock.module("../util/logger.js", () => ({
16
16
  }));
17
17
 
18
18
  mock.module("../util/platform.js", () => ({
19
- getSocketPath: () => "/tmp/test.sock",
20
19
  getDataDir: () => "/tmp",
21
20
  }));
22
21
 
@@ -229,12 +228,13 @@ mock.module("../daemon/session-usage.js", () => ({
229
228
  recordUsage: recordUsageMock,
230
229
  }));
231
230
 
231
+ const resolveAssistantAttachmentsMock = mock(async () => ({
232
+ assistantAttachments: [],
233
+ emittedAttachments: [],
234
+ directiveWarnings: [],
235
+ }));
232
236
  mock.module("../daemon/session-attachments.js", () => ({
233
- resolveAssistantAttachments: async () => ({
234
- assistantAttachments: [],
235
- emittedAttachments: [],
236
- directiveWarnings: [],
237
- }),
237
+ resolveAssistantAttachments: resolveAssistantAttachmentsMock,
238
238
  approveHostAttachmentRead: async () => true,
239
239
  formatAttachmentWarnings: () => "",
240
240
  }));
@@ -1506,6 +1506,46 @@ describe("session-agent-loop", () => {
1506
1506
  const sessionError = events.find((e) => e.type === "session_error");
1507
1507
  expect(sessionError).toBeUndefined();
1508
1508
  });
1509
+
1510
+ test("skips resolveAssistantAttachments when cancelled", async () => {
1511
+ const events: ServerMessage[] = [];
1512
+ const abortController = new AbortController();
1513
+ resolveAssistantAttachmentsMock.mockClear();
1514
+
1515
+ const agentLoopRun: AgentLoopRun = async (messages, onEvent) => {
1516
+ onEvent({
1517
+ type: "message_complete",
1518
+ message: {
1519
+ role: "assistant",
1520
+ content: [{ type: "text", text: "partial" }],
1521
+ },
1522
+ });
1523
+ onEvent({
1524
+ type: "usage",
1525
+ inputTokens: 100,
1526
+ outputTokens: 50,
1527
+ model: "test-model",
1528
+ providerDurationMs: 100,
1529
+ });
1530
+ // Simulate abort after processing
1531
+ abortController.abort();
1532
+ return [
1533
+ ...messages,
1534
+ {
1535
+ role: "assistant" as const,
1536
+ content: [{ type: "text", text: "partial" }] as ContentBlock[],
1537
+ },
1538
+ ];
1539
+ };
1540
+
1541
+ const ctx = makeCtx({ agentLoopRun, abortController });
1542
+ await runAgentLoopImpl(ctx, "hello", "msg-1", (msg) => events.push(msg));
1543
+
1544
+ const cancelled = events.find((e) => e.type === "generation_cancelled");
1545
+ expect(cancelled).toBeDefined();
1546
+ // resolveAssistantAttachments should NOT have been called
1547
+ expect(resolveAssistantAttachmentsMock).not.toHaveBeenCalled();
1548
+ });
1509
1549
  });
1510
1550
 
1511
1551
  describe("finally block cleanup", () => {
@@ -52,7 +52,6 @@ mock.module("../util/logger.js", () => ({
52
52
  }));
53
53
 
54
54
  mock.module("../util/platform.js", () => ({
55
- getSocketPath: () => join(testDir, "test.sock"),
56
55
  getDataDir: () => testDir,
57
56
  }));
58
57
 
@@ -67,7 +67,6 @@ mock.module("../util/logger.js", () => ({
67
67
  }));
68
68
 
69
69
  mock.module("../util/platform.js", () => ({
70
- getSocketPath: () => "/tmp/test.sock",
71
70
  getDataDir: () => "/tmp",
72
71
  }));
73
72
 
@@ -102,11 +101,8 @@ mock.module("../config/loader.js", () => ({
102
101
  contextWindow: {
103
102
  enabled: true,
104
103
  maxInputTokens: 100000,
105
- targetInputTokens: 80000,
106
- compactThreshold: 0.8,
107
- preserveRecentUserTurns: 8,
108
- summaryMaxTokens: 512,
109
- chunkTokens: 12000,
104
+ targetBudgetRatio: 0.30,
105
+ compactThreshold: 0.8, summaryBudgetRatio: 0.05,
110
106
  overflowRecovery: {
111
107
  enabled: true,
112
108
  safetyMarginRatio: 0.05,
@@ -201,7 +201,7 @@ describe("classifySessionError", () => {
201
201
  );
202
202
  const result = classifySessionError(err, baseCtx);
203
203
  expect(result.code).toBe("PROVIDER_API");
204
- expect(result.retryable).toBe(false);
204
+ expect(result.retryable).toBe(true);
205
205
  });
206
206
  });
207
207
 
@@ -225,15 +225,6 @@ describe("classifySessionError", () => {
225
225
  });
226
226
  });
227
227
 
228
- describe("queue phase", () => {
229
- it("always returns QUEUE_FULL regardless of message content", () => {
230
- const ctx: ErrorContext = { phase: "queue" };
231
- const result = classifySessionError(new Error("random error"), ctx);
232
- expect(result.code).toBe("QUEUE_FULL");
233
- expect(result.retryable).toBe(true);
234
- });
235
- });
236
-
237
228
  describe("regenerate phase", () => {
238
229
  it("returns REGENERATE_FAILED with nested classification info", () => {
239
230
  const ctx: ErrorContext = { phase: "regenerate" };
@@ -323,18 +314,18 @@ describe("classifySessionError", () => {
323
314
  expect(result.retryable).toBe(true);
324
315
  });
325
316
 
326
- it("classifies ProviderError with 401 as PROVIDER_API (not retryable)", () => {
317
+ it("classifies ProviderError with 401 as PROVIDER_BILLING (non-retryable)", () => {
327
318
  const err = new ProviderError("Unauthorized", "anthropic", 401);
328
319
  const result = classifySessionError(err, baseCtx);
329
- expect(result.code).toBe("PROVIDER_API");
320
+ expect(result.code).toBe("PROVIDER_BILLING");
330
321
  expect(result.retryable).toBe(false);
331
322
  });
332
323
 
333
- it("classifies ProviderError with 400 as PROVIDER_API (not retryable)", () => {
324
+ it("classifies ProviderError with 400 as PROVIDER_API (retryable)", () => {
334
325
  const err = new ProviderError("Bad request", "anthropic", 400);
335
326
  const result = classifySessionError(err, baseCtx);
336
327
  expect(result.code).toBe("PROVIDER_API");
337
- expect(result.retryable).toBe(false);
328
+ expect(result.retryable).toBe(true);
338
329
  });
339
330
 
340
331
  it("ProviderError without statusCode falls back to regex", () => {
@@ -91,7 +91,6 @@ mock.module("../util/platform.js", () => ({
91
91
  getWorkspaceSkillsDir: () => join(testDir, "skills"),
92
92
  getWorkspaceHooksDir: () => join(testDir, "hooks"),
93
93
  getWorkspacePromptPath: (file: string) => join(testDir, file),
94
- getSocketPath: () => join(testDir, "test.sock"),
95
94
  getSessionTokenPath: () => join(testDir, "session-token"),
96
95
  getPidPath: () => join(testDir, "test.pid"),
97
96
  getDbPath: () => join(testDir, "data", "test.db"),
@@ -142,10 +141,9 @@ const mockConfig = {
142
141
  contextWindow: {
143
142
  enabled: true,
144
143
  maxInputTokens: 180000,
145
- targetInputTokens: 110000,
144
+ targetBudgetRatio: 0.3,
146
145
  compactThreshold: 0.8,
147
- preserveRecentUserTurns: 8,
148
- summaryMaxTokens: 1200,
146
+ summaryBudgetRatio: 0.05,
149
147
  },
150
148
  thinking: { enabled: false },
151
149
  };
@@ -506,7 +504,7 @@ describe("End-to-end session creation benchmark", () => {
506
504
  if (i === 0) {
507
505
  expect(session.conversationId).toBe(id);
508
506
  expect(session.getMessages()).toHaveLength(0);
509
- expect(projection.toolDefinitions.length).toBe(testSkillIds.length);
507
+ expect(projection.allowedToolNames.size).toBe(testSkillIds.length);
510
508
  }
511
509
  resetSkillToolProjection(session.skillProjectionState);
512
510
  session.dispose();
@@ -9,7 +9,6 @@ mock.module("../util/logger.js", () => ({
9
9
  }));
10
10
 
11
11
  mock.module("../util/platform.js", () => ({
12
- getSocketPath: () => "/tmp/test.sock",
13
12
  getDataDir: () => "/tmp",
14
13
  }));
15
14