@vellumai/assistant 0.4.43 → 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 (713) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +46 -44
  3. package/README.md +15 -16
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -215
  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 -3
  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-asset.test.ts +1 -1
  40. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  41. package/src/__tests__/call-controller.test.ts +0 -1
  42. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  43. package/src/__tests__/call-domain.test.ts +0 -1
  44. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  45. package/src/__tests__/call-recovery.test.ts +0 -1
  46. package/src/__tests__/call-routes-http.test.ts +0 -1
  47. package/src/__tests__/call-store.test.ts +0 -1
  48. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  49. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  50. package/src/__tests__/channel-approvals.test.ts +1 -1
  51. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  52. package/src/__tests__/channel-guardian.test.ts +5 -7
  53. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  54. package/src/__tests__/checker.test.ts +32 -36
  55. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  56. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  57. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  58. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  59. package/src/__tests__/computer-use-tools.test.ts +35 -31
  60. package/src/__tests__/config-schema.test.ts +11 -15
  61. package/src/__tests__/config-watcher.test.ts +0 -1
  62. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  63. package/src/__tests__/conflict-store.test.ts +0 -1
  64. package/src/__tests__/connection-policy.test.ts +4 -7
  65. package/src/__tests__/contacts-tools.test.ts +0 -1
  66. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  67. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  68. package/src/__tests__/context-window-manager.test.ts +147 -60
  69. package/src/__tests__/contradiction-checker.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  71. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  72. package/src/__tests__/conversation-pairing.test.ts +2 -2
  73. package/src/__tests__/conversation-routes-guardian-reply.test.ts +31 -7
  74. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  75. package/src/__tests__/conversation-store.test.ts +0 -1
  76. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  77. package/src/__tests__/credential-security-invariants.test.ts +8 -8
  78. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  79. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  80. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  81. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  82. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  83. package/src/__tests__/diagnostics-export.test.ts +189 -0
  84. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  85. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  86. package/src/__tests__/entity-extractor.test.ts +0 -1
  87. package/src/__tests__/entity-search.test.ts +0 -1
  88. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  89. package/src/__tests__/error-handler-friendly-messages.test.ts +46 -0
  90. package/src/__tests__/file-read-tool.test.ts +86 -0
  91. package/src/__tests__/followup-tools.test.ts +0 -1
  92. package/src/__tests__/frontmatter.test.ts +77 -34
  93. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  94. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  95. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  96. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  97. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  98. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  99. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  100. package/src/__tests__/guardian-action-store.test.ts +0 -1
  101. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  102. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  103. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  104. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  105. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  106. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  107. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  108. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  109. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  110. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  111. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  112. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  113. package/src/__tests__/host-file-proxy.test.ts +374 -0
  114. package/src/__tests__/host-shell-tool.test.ts +147 -1
  115. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  116. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  117. package/src/__tests__/integration-status.test.ts +3 -8
  118. package/src/__tests__/intent-routing.test.ts +7 -46
  119. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  120. package/src/__tests__/invite-routes-http.test.ts +0 -1
  121. package/src/__tests__/llm-usage-store.test.ts +0 -1
  122. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  123. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  124. package/src/__tests__/managed-store.test.ts +94 -21
  125. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  126. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  127. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  128. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  129. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  130. package/src/__tests__/memory-regressions.test.ts +0 -1
  131. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  132. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  133. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  134. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  135. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  136. package/src/__tests__/migration-export-http.test.ts +2 -3
  137. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  138. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  139. package/src/__tests__/migration-validate-http.test.ts +1 -2
  140. package/src/__tests__/native-web-search.test.ts +475 -0
  141. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  142. package/src/__tests__/non-member-access-request.test.ts +0 -1
  143. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  144. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  145. package/src/__tests__/notification-deep-link.test.ts +7 -7
  146. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  147. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  148. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  149. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  150. package/src/__tests__/onboarding-template-contract.test.ts +0 -10
  151. package/src/__tests__/playbook-execution.test.ts +0 -1
  152. package/src/__tests__/playbook-tools.test.ts +0 -1
  153. package/src/__tests__/profile-compiler.test.ts +0 -1
  154. package/src/__tests__/provider-fail-open-selection.test.ts +12 -2
  155. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  156. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  157. package/src/__tests__/recording-handler.test.ts +30 -94
  158. package/src/__tests__/registry.test.ts +28 -35
  159. package/src/__tests__/relay-server.test.ts +0 -1
  160. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  161. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  162. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  163. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  164. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  165. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  166. package/src/__tests__/schedule-store.test.ts +441 -1
  167. package/src/__tests__/schedule-tools.test.ts +468 -7
  168. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  169. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  170. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  171. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  172. package/src/__tests__/secret-response-routing.test.ts +4 -1
  173. package/src/__tests__/send-endpoint-busy.test.ts +14 -5
  174. package/src/__tests__/send-notification-tool.test.ts +0 -7
  175. package/src/__tests__/sequence-store.test.ts +0 -1
  176. package/src/__tests__/server-history-render.test.ts +1 -2
  177. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  178. package/src/__tests__/session-agent-loop.test.ts +46 -6
  179. package/src/__tests__/session-confirmation-signals.test.ts +7 -46
  180. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  181. package/src/__tests__/session-error.test.ts +5 -14
  182. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  183. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  184. package/src/__tests__/session-media-retry.test.ts +12 -74
  185. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  186. package/src/__tests__/session-profile-injection.test.ts +2 -6
  187. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  188. package/src/__tests__/session-queue.test.ts +94 -139
  189. package/src/__tests__/session-skill-tools.test.ts +115 -115
  190. package/src/__tests__/session-slash-known.test.ts +0 -1
  191. package/src/__tests__/session-slash-queue.test.ts +0 -1
  192. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  193. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  194. package/src/__tests__/session-usage.test.ts +0 -1
  195. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  196. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  197. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  198. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  199. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  200. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  201. package/src/__tests__/skill-load-tool.test.ts +194 -2
  202. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  203. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  204. package/src/__tests__/skills.test.ts +14 -53
  205. package/src/__tests__/slack-channel-config.test.ts +0 -1
  206. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  207. package/src/__tests__/slack-skill.test.ts +1 -1
  208. package/src/__tests__/starter-task-flow.test.ts +9 -19
  209. package/src/__tests__/subagent-tools.test.ts +2 -2
  210. package/src/__tests__/system-prompt.test.ts +7 -7
  211. package/src/__tests__/task-compiler.test.ts +0 -1
  212. package/src/__tests__/task-management-tools.test.ts +0 -1
  213. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  214. package/src/__tests__/task-runner.test.ts +0 -1
  215. package/src/__tests__/task-scheduler.test.ts +0 -1
  216. package/src/__tests__/terminal-tools.test.ts +0 -1
  217. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  218. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  219. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  220. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  221. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  222. package/src/__tests__/tool-executor.test.ts +8 -86
  223. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  224. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  225. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  226. package/src/__tests__/trust-store.test.ts +84 -8
  227. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  228. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  229. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  230. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  231. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  232. package/src/__tests__/twilio-provider.test.ts +0 -1
  233. package/src/__tests__/twilio-routes.test.ts +0 -1
  234. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  235. package/src/__tests__/update-bulletin.test.ts +0 -1
  236. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  237. package/src/__tests__/usage-routes.test.ts +0 -1
  238. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  239. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  240. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  241. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  242. package/src/__tests__/web-fetch.test.ts +57 -0
  243. package/src/__tests__/workspace-git-service.test.ts +5 -14
  244. package/src/__tests__/workspace-policy.test.ts +0 -1
  245. package/src/agent/loop.ts +22 -34
  246. package/src/bundler/bundle-signer.ts +4 -4
  247. package/src/calls/call-controller.ts +1 -1
  248. package/src/calls/relay-server.ts +1 -1
  249. package/src/calls/twilio-rest.ts +1 -1
  250. package/src/calls/voice-session-bridge.ts +3 -1
  251. package/src/cli/__tests__/notifications.test.ts +3 -4
  252. package/src/cli/commands/map.ts +2 -6
  253. package/src/cli/commands/mcp.ts +73 -15
  254. package/src/cli/commands/notifications.ts +4 -4
  255. package/src/cli/commands/sessions.ts +9 -1
  256. package/src/cli/commands/skills.ts +6 -10
  257. package/src/cli/http-client.ts +2 -3
  258. package/src/cli/main-screen.tsx +10 -10
  259. package/src/cli/program.ts +0 -4
  260. package/src/cli/reference.ts +0 -2
  261. package/src/cli.ts +15 -9
  262. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  263. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  264. package/src/config/bundled-skills/app-builder/SKILL.md +6 -7
  265. package/src/config/bundled-skills/app-builder/TOOLS.json +0 -4
  266. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  267. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  268. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  269. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  270. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  271. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  272. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  273. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  274. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  275. package/src/config/bundled-skills/document/SKILL.md +4 -1
  276. package/src/config/bundled-skills/doordash/SKILL.md +8 -2
  277. package/src/config/bundled-skills/doordash/__tests__/doordash-session.test.ts +1 -82
  278. package/src/config/bundled-skills/doordash/doordash-cli.ts +17 -28
  279. package/src/config/bundled-skills/doordash/lib/session.ts +21 -17
  280. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  281. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  282. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  283. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  284. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  285. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  288. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  289. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  290. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  291. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  292. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  293. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  294. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  295. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  296. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  297. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  298. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  299. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  300. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  301. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  302. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  303. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  304. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  305. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  306. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  307. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  308. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  309. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  310. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  311. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  312. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  313. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  314. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  315. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  316. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  317. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  318. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  319. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  320. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  321. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  322. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  323. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  324. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  325. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  326. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  327. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  328. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  329. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  330. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  331. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  332. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  333. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  334. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  335. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  336. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  337. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  338. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  339. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  340. package/src/config/bundled-tool-registry.ts +118 -107
  341. package/src/config/env.ts +5 -2
  342. package/src/config/feature-flag-registry.json +33 -9
  343. package/src/config/loader.ts +10 -2
  344. package/src/config/schema.ts +19 -16
  345. package/src/config/schemas/inference.ts +12 -22
  346. package/src/config/schemas/memory-storage.ts +19 -1
  347. package/src/config/schemas/platform.ts +0 -16
  348. package/src/config/skill-state.ts +11 -8
  349. package/src/config/skills.ts +83 -32
  350. package/src/context/token-estimator.ts +11 -0
  351. package/src/context/window-manager.ts +180 -151
  352. package/src/daemon/computer-use-session.ts +11 -43
  353. package/src/daemon/daemon-control.ts +4 -1
  354. package/src/daemon/handlers/config-channels.ts +5 -9
  355. package/src/daemon/handlers/config-ingress.ts +0 -4
  356. package/src/daemon/handlers/config-model.ts +7 -13
  357. package/src/daemon/handlers/config-telegram.ts +4 -8
  358. package/src/daemon/handlers/config-voice.ts +2 -5
  359. package/src/daemon/handlers/dictation.ts +2 -12
  360. package/src/daemon/handlers/identity.ts +0 -105
  361. package/src/daemon/handlers/recording.ts +3 -23
  362. package/src/daemon/handlers/session-history.ts +42 -10
  363. package/src/daemon/handlers/sessions.ts +53 -72
  364. package/src/daemon/handlers/shared.ts +7 -28
  365. package/src/daemon/handlers/skills.ts +31 -27
  366. package/src/daemon/host-bash-proxy.ts +148 -0
  367. package/src/daemon/host-file-proxy.ts +135 -0
  368. package/src/daemon/lifecycle.ts +53 -41
  369. package/src/daemon/mcp-reload-service.ts +123 -0
  370. package/src/daemon/message-protocol.ts +6 -0
  371. package/src/daemon/message-types/apps.ts +0 -25
  372. package/src/daemon/message-types/browser.ts +1 -1
  373. package/src/daemon/message-types/computer-use.ts +1 -4
  374. package/src/daemon/message-types/guardian-actions.ts +1 -1
  375. package/src/daemon/message-types/host-bash.ts +18 -0
  376. package/src/daemon/message-types/host-file.ts +44 -0
  377. package/src/daemon/message-types/integrations.ts +1 -73
  378. package/src/daemon/message-types/messages.ts +15 -0
  379. package/src/daemon/message-types/schedules.ts +11 -27
  380. package/src/daemon/message-types/sessions.ts +8 -2
  381. package/src/daemon/message-types/settings.ts +1 -1
  382. package/src/daemon/message-types/shared.ts +1 -1
  383. package/src/daemon/message-types/surfaces.ts +2 -0
  384. package/src/daemon/ride-shotgun-handler.ts +35 -43
  385. package/src/daemon/seed-files.ts +3 -27
  386. package/src/daemon/server.ts +45 -28
  387. package/src/daemon/session-agent-loop-handlers.ts +72 -9
  388. package/src/daemon/session-agent-loop.ts +97 -66
  389. package/src/daemon/session-attachments.ts +1 -1
  390. package/src/daemon/session-error.ts +17 -16
  391. package/src/daemon/session-lifecycle.ts +20 -1
  392. package/src/daemon/session-media-retry.ts +1 -15
  393. package/src/daemon/session-messaging.ts +14 -6
  394. package/src/daemon/session-process.ts +36 -7
  395. package/src/daemon/session-queue-manager.ts +62 -103
  396. package/src/daemon/session-runtime-assembly.ts +27 -7
  397. package/src/daemon/session-skill-tools.ts +12 -11
  398. package/src/daemon/session-slash.ts +7 -0
  399. package/src/daemon/session-surfaces.ts +192 -118
  400. package/src/daemon/session-tool-setup.ts +146 -6
  401. package/src/daemon/session.ts +75 -37
  402. package/src/errors.ts +0 -2
  403. package/src/export/formatter.ts +6 -0
  404. package/src/mcp/mcp-oauth-provider.ts +1 -3
  405. package/src/media/avatar-router.ts +20 -28
  406. package/src/media/avatar-types.ts +7 -14
  407. package/src/media/managed-avatar-client.ts +70 -34
  408. package/src/memory/app-store.ts +0 -18
  409. package/src/memory/conversation-title-service.ts +1 -2
  410. package/src/memory/db-init.ts +16 -0
  411. package/src/memory/embedding-backend.ts +129 -27
  412. package/src/memory/embedding-gemini.test.ts +256 -0
  413. package/src/memory/embedding-gemini.ts +47 -13
  414. package/src/memory/embedding-local.ts +14 -2
  415. package/src/memory/embedding-ollama.ts +15 -2
  416. package/src/memory/embedding-openai.ts +15 -2
  417. package/src/memory/embedding-types.test.ts +116 -0
  418. package/src/memory/embedding-types.ts +61 -0
  419. package/src/memory/fingerprint.ts +1 -1
  420. package/src/memory/indexer.ts +25 -1
  421. package/src/memory/job-handlers/embedding.test.ts +258 -0
  422. package/src/memory/job-handlers/embedding.ts +81 -1
  423. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  424. package/src/memory/job-handlers/media-processing.ts +11 -1
  425. package/src/memory/job-utils.ts +21 -6
  426. package/src/memory/jobs-store.ts +5 -1
  427. package/src/memory/jobs-worker.ts +8 -0
  428. package/src/memory/message-content.ts +66 -0
  429. package/src/memory/migrations/100-core-tables.ts +1 -31
  430. package/src/memory/migrations/104-core-indexes.ts +0 -11
  431. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  432. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  433. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  434. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  435. package/src/memory/migrations/index.ts +4 -0
  436. package/src/memory/migrations/registry.ts +19 -0
  437. package/src/memory/qdrant-client.ts +158 -43
  438. package/src/memory/retriever.test.ts +0 -1
  439. package/src/memory/retriever.ts +12 -2
  440. package/src/memory/schema/infrastructure.ts +5 -37
  441. package/src/memory/search/formatting.ts +34 -9
  442. package/src/memory/search/semantic.ts +57 -2
  443. package/src/memory/search/types.ts +2 -1
  444. package/src/notifications/AGENTS.md +2 -2
  445. package/src/notifications/README.md +59 -58
  446. package/src/notifications/adapters/macos.ts +1 -1
  447. package/src/notifications/broadcaster.ts +5 -5
  448. package/src/notifications/copy-composer.ts +1 -1
  449. package/src/notifications/decision-engine.ts +2 -2
  450. package/src/notifications/destination-resolver.ts +2 -2
  451. package/src/notifications/emit-signal.ts +8 -8
  452. package/src/notifications/signal.ts +1 -1
  453. package/src/notifications/thread-seed-composer.ts +1 -1
  454. package/src/oauth/connect-orchestrator.ts +1 -1
  455. package/src/oauth/token-persistence.ts +1 -1
  456. package/src/permissions/checker.ts +12 -1
  457. package/src/permissions/defaults.ts +13 -17
  458. package/src/permissions/trust-store.ts +37 -0
  459. package/src/permissions/workspace-policy.ts +0 -1
  460. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  461. package/src/prompts/computer-use-prompt.ts +1 -1
  462. package/src/prompts/system-prompt.ts +33 -35
  463. package/src/prompts/templates/BOOTSTRAP.md +0 -3
  464. package/src/prompts/templates/SOUL.md +1 -2
  465. package/src/prompts/templates/UPDATES.md +16 -7
  466. package/src/providers/anthropic/client.ts +87 -33
  467. package/src/providers/gemini/client.ts +6 -0
  468. package/src/providers/managed-proxy/constants.ts +5 -0
  469. package/src/providers/openai/client.ts +15 -0
  470. package/src/providers/registry.ts +4 -6
  471. package/src/providers/types.ts +24 -2
  472. package/src/runtime/AGENTS.md +18 -0
  473. package/src/runtime/assistant-event-hub.ts +2 -3
  474. package/src/runtime/assistant-event.ts +4 -4
  475. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  476. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  477. package/src/runtime/auth/__tests__/guard-tests.test.ts +3 -2
  478. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  479. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  480. package/src/runtime/auth/__tests__/scopes.test.ts +9 -8
  481. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  482. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  483. package/src/runtime/auth/route-policy.ts +8 -8
  484. package/src/runtime/auth/scopes.ts +2 -1
  485. package/src/runtime/auth/subject.ts +4 -4
  486. package/src/runtime/auth/token-service.ts +1 -24
  487. package/src/runtime/auth/types.ts +3 -3
  488. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  489. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  490. package/src/runtime/guardian-action-service.ts +3 -3
  491. package/src/runtime/http-server.ts +15 -2
  492. package/src/runtime/http-types.ts +10 -0
  493. package/src/runtime/invite-service.ts +3 -3
  494. package/src/runtime/local-actor-identity.ts +17 -22
  495. package/src/runtime/middleware/error-handler.ts +14 -1
  496. package/src/runtime/pending-interactions.ts +21 -9
  497. package/src/runtime/routes/app-management-routes.ts +63 -67
  498. package/src/runtime/routes/approval-routes.ts +1 -3
  499. package/src/runtime/routes/brain-graph/brain-graph.html +1845 -0
  500. package/src/runtime/routes/brain-graph-routes.ts +4 -42
  501. package/src/runtime/routes/btw-routes.ts +155 -0
  502. package/src/runtime/routes/computer-use-routes.ts +77 -31
  503. package/src/runtime/routes/conversation-routes.ts +234 -47
  504. package/src/runtime/routes/diagnostics-routes.ts +154 -43
  505. package/src/runtime/routes/documents-routes.ts +2 -2
  506. package/src/runtime/routes/global-search-routes.ts +1 -1
  507. package/src/runtime/routes/host-bash-routes.ts +83 -0
  508. package/src/runtime/routes/host-file-routes.ts +79 -0
  509. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  510. package/src/runtime/routes/log-export-routes.ts +120 -0
  511. package/src/runtime/routes/mcp-routes.ts +20 -0
  512. package/src/runtime/routes/migration-routes.ts +3 -3
  513. package/src/runtime/routes/pairing-routes.ts +1 -1
  514. package/src/runtime/routes/recording-routes.ts +6 -4
  515. package/src/runtime/routes/schedule-routes.ts +31 -5
  516. package/src/runtime/routes/session-management-routes.ts +2 -6
  517. package/src/runtime/routes/session-query-routes.ts +18 -15
  518. package/src/runtime/routes/settings-routes.ts +7 -351
  519. package/src/runtime/routes/skills-routes.ts +7 -6
  520. package/src/runtime/routes/subagents-routes.ts +4 -10
  521. package/src/runtime/routes/surface-action-routes.ts +3 -14
  522. package/src/runtime/routes/surface-content-routes.ts +22 -5
  523. package/src/runtime/routes/work-items-routes.ts +21 -25
  524. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  525. package/src/runtime/routes/workspace-utils.ts +1 -1
  526. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  527. package/src/runtime/verification-outbound-actions.ts +2 -2
  528. package/src/schedule/integration-status.ts +0 -6
  529. package/src/schedule/schedule-store.ts +234 -43
  530. package/src/schedule/scheduler.ts +73 -74
  531. package/src/security/oauth2.ts +1 -1
  532. package/src/sequence/store.ts +12 -2
  533. package/src/skills/frontmatter.ts +19 -77
  534. package/src/skills/managed-store.ts +11 -2
  535. package/src/subagent/manager.ts +5 -3
  536. package/src/tasks/ephemeral-permissions.ts +3 -5
  537. package/src/tools/AGENTS.md +37 -0
  538. package/src/tools/apps/executors.ts +0 -6
  539. package/src/tools/browser/browser-manager.ts +17 -11
  540. package/src/tools/browser/jit-auth.ts +4 -1
  541. package/src/tools/claude-code/claude-code.ts +1 -1
  542. package/src/tools/computer-use/definitions.ts +48 -60
  543. package/src/tools/document/document-tool.ts +6 -6
  544. package/src/tools/document/editor-template.ts +10 -8
  545. package/src/tools/filesystem/edit.ts +2 -1
  546. package/src/tools/filesystem/read.ts +20 -2
  547. package/src/tools/filesystem/write.ts +2 -1
  548. package/src/tools/host-filesystem/edit.ts +17 -1
  549. package/src/tools/host-filesystem/read.ts +16 -1
  550. package/src/tools/host-filesystem/write.ts +15 -1
  551. package/src/tools/host-terminal/host-shell.ts +24 -0
  552. package/src/tools/memory/definitions.ts +45 -81
  553. package/src/tools/memory/handlers.test.ts +0 -1
  554. package/src/tools/memory/handlers.ts +1 -1
  555. package/src/tools/memory/register.ts +26 -60
  556. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  557. package/src/tools/network/web-fetch.ts +7 -1
  558. package/src/tools/network/web-search.ts +2 -1
  559. package/src/tools/registry.ts +23 -0
  560. package/src/tools/schedule/create.ts +113 -5
  561. package/src/tools/schedule/list.ts +57 -15
  562. package/src/tools/schedule/update.ts +73 -3
  563. package/src/tools/shared/filesystem/image-read.ts +192 -0
  564. package/src/tools/side-effects.ts +1 -7
  565. package/src/tools/skills/delete-managed.ts +27 -64
  566. package/src/tools/skills/execute.ts +54 -0
  567. package/src/tools/skills/load.ts +127 -5
  568. package/src/tools/skills/scaffold-managed.ts +93 -172
  569. package/src/tools/subagent/message.ts +0 -7
  570. package/src/tools/subagent/spawn.ts +1 -1
  571. package/src/tools/swarm/delegate.ts +0 -3
  572. package/src/tools/system/avatar-generator.ts +13 -19
  573. package/src/tools/system/request-permission.ts +2 -1
  574. package/src/tools/terminal/safe-env.ts +1 -0
  575. package/src/tools/tool-manifest.ts +41 -47
  576. package/src/tools/types.ts +6 -2
  577. package/src/tools/ui-surface/definitions.ts +0 -55
  578. package/src/util/errors.ts +12 -10
  579. package/src/workspace/git-service.ts +0 -2
  580. package/src/__tests__/account-registry.test.ts +0 -258
  581. package/src/__tests__/email-classifier.test.ts +0 -25
  582. package/src/__tests__/gmail-integration.test.ts +0 -97
  583. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  584. package/src/__tests__/home-base-bootstrap.test.ts +0 -84
  585. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -353
  586. package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -79
  587. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  588. package/src/__tests__/recording-intent.test.ts +0 -985
  589. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  590. package/src/__tests__/reminder-store.test.ts +0 -350
  591. package/src/__tests__/reminder.test.ts +0 -337
  592. package/src/__tests__/scan-result-store.test.ts +0 -121
  593. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -450
  594. package/src/__tests__/view-image-tool.test.ts +0 -241
  595. package/src/cli/commands/amazon/cart.ts +0 -513
  596. package/src/cli/commands/amazon/checkout.ts +0 -394
  597. package/src/cli/commands/amazon/client.ts +0 -513
  598. package/src/cli/commands/amazon/index.ts +0 -920
  599. package/src/cli/commands/amazon/product-details.ts +0 -145
  600. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  601. package/src/cli/commands/amazon/search.ts +0 -76
  602. package/src/cli/commands/amazon/session.ts +0 -116
  603. package/src/cli/commands/twitter/__tests__/cli-error-shaping.test.ts +0 -265
  604. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -483
  605. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -412
  606. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -197
  607. package/src/cli/commands/twitter/client.ts +0 -989
  608. package/src/cli/commands/twitter/index.ts +0 -1160
  609. package/src/cli/commands/twitter/oauth-client.ts +0 -94
  610. package/src/cli/commands/twitter/router.ts +0 -396
  611. package/src/cli/commands/twitter/session.ts +0 -121
  612. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  613. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  614. package/src/config/bundled-skills/amazon/SKILL.md +0 -137
  615. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  616. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  617. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  618. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  619. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  620. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  621. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  622. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  623. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  624. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  625. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  626. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  627. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  628. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  629. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  630. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  631. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  632. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  633. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  634. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  635. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  636. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  637. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  638. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  639. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  640. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  641. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  642. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  643. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  644. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  645. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  646. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  647. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  648. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  649. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  650. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  651. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  652. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  653. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  654. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  655. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  656. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  657. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  658. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  659. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  660. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  661. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  662. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  663. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  664. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  665. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  666. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  667. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  668. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  669. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  670. package/src/config/bundled-skills/twitter/SKILL.md +0 -319
  671. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  672. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  673. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  674. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  675. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  676. package/src/daemon/handlers/pairing.ts +0 -119
  677. package/src/daemon/handlers/session-user-message.ts +0 -961
  678. package/src/daemon/recording-executor.ts +0 -180
  679. package/src/daemon/recording-intent-fallback.ts +0 -162
  680. package/src/daemon/recording-intent.ts +0 -493
  681. package/src/home-base/app-link-store.ts +0 -78
  682. package/src/home-base/bootstrap.ts +0 -74
  683. package/src/home-base/prebuilt/brain-graph.html +0 -1483
  684. package/src/home-base/prebuilt/index.html +0 -702
  685. package/src/home-base/prebuilt/seed-metadata.json +0 -21
  686. package/src/home-base/prebuilt/seed.ts +0 -122
  687. package/src/home-base/prebuilt-home-base-updater.ts +0 -36
  688. package/src/memory/account-store.ts +0 -117
  689. package/src/messaging/activity-analyzer.ts +0 -76
  690. package/src/messaging/email-classifier.ts +0 -208
  691. package/src/messaging/index.ts +0 -2
  692. package/src/messaging/outreach-classifier.ts +0 -185
  693. package/src/messaging/thread-summarizer.ts +0 -346
  694. package/src/messaging/types.ts +0 -17
  695. package/src/tools/browser/x-auto-navigate.ts +0 -254
  696. package/src/tools/credentials/account-registry.ts +0 -144
  697. package/src/tools/filesystem/view-image.ts +0 -244
  698. package/src/tools/reminder/reminder-store.ts +0 -194
  699. package/src/tools/reminder/reminder.ts +0 -158
  700. package/src/tools/system/navigate-settings.ts +0 -74
  701. package/src/tools/system/open-system-settings.ts +0 -85
  702. package/src/tools/system/version.ts +0 -54
  703. package/src/twitter/platform-proxy-client.ts +0 -405
  704. package/src/util/cookie-session.ts +0 -98
  705. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  706. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  707. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  708. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  709. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  710. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  711. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  712. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  713. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -3,12 +3,14 @@ import { join, relative } from "node:path";
3
3
  import { describe, expect, test } from "bun:test";
4
4
 
5
5
  const ASSISTANT_DIR = join(import.meta.dir, "..", "..");
6
+ const REPO_ROOT = join(ASSISTANT_DIR, "..");
6
7
  const BUNDLED_SKILLS_DIR = join(
7
8
  ASSISTANT_DIR,
8
9
  "src",
9
10
  "config",
10
11
  "bundled-skills",
11
12
  );
13
+ const FIRST_PARTY_SKILLS_DIR = join(REPO_ROOT, "skills");
12
14
 
13
15
  function collectSkillFiles(rootDir: string): string[] {
14
16
  const pending = [rootDir];
@@ -33,25 +35,32 @@ function collectSkillFiles(rootDir: string): string[] {
33
35
  return files;
34
36
  }
35
37
 
36
- const ALL_SKILL_FILES = collectSkillFiles(BUNDLED_SKILLS_DIR);
38
+ const ALL_SKILL_FILES = [
39
+ ...collectSkillFiles(BUNDLED_SKILLS_DIR),
40
+ ...collectSkillFiles(FIRST_PARTY_SKILLS_DIR),
41
+ ];
37
42
 
38
43
  const GATEWAY_RETRIEVAL_BANLIST: Array<{
44
+ skillDir: string;
39
45
  skillPath: string;
40
46
  bannedSnippets: string[];
41
47
  }> = [
42
48
  {
49
+ skillDir: FIRST_PARTY_SKILLS_DIR,
43
50
  skillPath: "guardian-verify-setup/SKILL.md",
44
51
  bannedSnippets: [
45
52
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/channel-verification-sessions/status',
46
53
  ],
47
54
  },
48
55
  {
56
+ skillDir: FIRST_PARTY_SKILLS_DIR,
49
57
  skillPath: "telegram-setup/SKILL.md",
50
58
  bannedSnippets: [
51
59
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/telegram/config',
52
60
  ],
53
61
  },
54
62
  {
63
+ skillDir: BUNDLED_SKILLS_DIR,
55
64
  skillPath: "contacts/SKILL.md",
56
65
  bannedSnippets: [
57
66
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/ingress/members',
@@ -61,6 +70,7 @@ const GATEWAY_RETRIEVAL_BANLIST: Array<{
61
70
  ],
62
71
  },
63
72
  {
73
+ skillDir: FIRST_PARTY_SKILLS_DIR,
64
74
  skillPath: "twilio-setup/SKILL.md",
65
75
  bannedSnippets: [
66
76
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/config"',
@@ -68,12 +78,14 @@ const GATEWAY_RETRIEVAL_BANLIST: Array<{
68
78
  ],
69
79
  },
70
80
  {
81
+ skillDir: BUNDLED_SKILLS_DIR,
71
82
  skillPath: "phone-calls/SKILL.md",
72
83
  bannedSnippets: [
73
84
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/twilio/config"',
74
85
  ],
75
86
  },
76
87
  {
88
+ skillDir: FIRST_PARTY_SKILLS_DIR,
77
89
  skillPath: "public-ingress/SKILL.md",
78
90
  bannedSnippets: [
79
91
  'curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/',
@@ -82,6 +94,7 @@ const GATEWAY_RETRIEVAL_BANLIST: Array<{
82
94
  ],
83
95
  },
84
96
  {
97
+ skillDir: FIRST_PARTY_SKILLS_DIR,
85
98
  skillPath: "voice-setup/SKILL.md",
86
99
  bannedSnippets: [
87
100
  "assistant config get elevenlabs.voiceId",
@@ -89,6 +102,7 @@ const GATEWAY_RETRIEVAL_BANLIST: Array<{
89
102
  ],
90
103
  },
91
104
  {
105
+ skillDir: FIRST_PARTY_SKILLS_DIR,
92
106
  skillPath: "email-setup/SKILL.md",
93
107
  bannedSnippets: [
94
108
  "host_bash",
@@ -123,7 +137,7 @@ describe("bundled skill retrieval guard", () => {
123
137
  const violations: string[] = [];
124
138
 
125
139
  for (const rule of GATEWAY_RETRIEVAL_BANLIST) {
126
- const abs = join(BUNDLED_SKILLS_DIR, rule.skillPath);
140
+ const abs = join(rule.skillDir, rule.skillPath);
127
141
  const content = readFileSync(abs, "utf-8");
128
142
  for (const snippet of rule.bannedSnippets) {
129
143
  if (content.includes(snippet)) {
@@ -136,7 +150,7 @@ describe("bundled skill retrieval guard", () => {
136
150
 
137
151
  if (violations.length > 0) {
138
152
  const message = [
139
- "Bundled skill retrieval contract regression detected.",
153
+ "Skill retrieval contract regression detected.",
140
154
  "Migrated skills must not reintroduce direct gateway/keychain retrieval snippets.",
141
155
  "",
142
156
  "Violations:",
@@ -147,11 +161,11 @@ describe("bundled skill retrieval guard", () => {
147
161
  }
148
162
  });
149
163
 
150
- test("bundled skills do not contain direct keychain lookup instructions", () => {
164
+ test("skills do not contain direct keychain lookup instructions", () => {
151
165
  const violations: string[] = [];
152
166
 
153
167
  for (const skillFile of ALL_SKILL_FILES) {
154
- const rel = relative(ASSISTANT_DIR, skillFile).replaceAll("\\", "/");
168
+ const rel = relative(REPO_ROOT, skillFile).replaceAll("\\", "/");
155
169
  if (KEYCHAIN_ALLOWLIST.has(rel)) continue;
156
170
  const content = readFileSync(skillFile, "utf-8");
157
171
  for (const pattern of KEYCHAIN_PATTERNS) {
@@ -163,7 +177,7 @@ describe("bundled skill retrieval guard", () => {
163
177
 
164
178
  if (violations.length > 0) {
165
179
  const message = [
166
- "Direct keychain lookup instructions were found in bundled skills.",
180
+ "Direct keychain lookup instructions were found in skills.",
167
181
  "Use credential_store and CLI/proxied flows instead.",
168
182
  "",
169
183
  "Violations:",
@@ -176,11 +190,11 @@ describe("bundled skill retrieval guard", () => {
176
190
  }
177
191
  });
178
192
 
179
- test("bundled skills do not require host_bash for Vellum CLI retrieval commands", () => {
193
+ test("skills do not require host_bash for Vellum CLI retrieval commands", () => {
180
194
  const violations: string[] = [];
181
195
 
182
196
  for (const skillFile of ALL_SKILL_FILES) {
183
- const rel = relative(ASSISTANT_DIR, skillFile).replaceAll("\\", "/");
197
+ const rel = relative(REPO_ROOT, skillFile).replaceAll("\\", "/");
184
198
  if (HOST_BASH_RETRIEVAL_ALLOWLIST.has(rel)) continue;
185
199
  const content = readFileSync(skillFile, "utf-8");
186
200
  const hasHostBash = content.includes("host_bash");
@@ -196,7 +210,7 @@ describe("bundled skill retrieval guard", () => {
196
210
 
197
211
  if (violations.length > 0) {
198
212
  const message = [
199
- "Bundled skills must not require host_bash for Vellum CLI retrieval commands.",
213
+ "Skills must not require host_bash for Vellum CLI retrieval commands.",
200
214
  "Use sandboxed bash for retrieval flows unless an explicit exception is documented.",
201
215
  "",
202
216
  "Violations:",
@@ -22,7 +22,6 @@ mock.module("../util/platform.js", () => ({
22
22
  isMacOS: () => process.platform === "darwin",
23
23
  isLinux: () => process.platform === "linux",
24
24
  isWindows: () => process.platform === "win32",
25
- getSocketPath: () => join(testDir, "test.sock"),
26
25
  getPidPath: () => join(testDir, "test.pid"),
27
26
  getDbPath: () => join(testDir, "test.db"),
28
27
  getLogPath: () => join(testDir, "test.log"),
@@ -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"),
@@ -20,7 +20,6 @@ mock.module("../util/platform.js", () => ({
20
20
  isMacOS: () => process.platform === "darwin",
21
21
  isLinux: () => process.platform === "linux",
22
22
  isWindows: () => process.platform === "win32",
23
- getSocketPath: () => join(testDir, "test.sock"),
24
23
  getPidPath: () => join(testDir, "test.pid"),
25
24
  getDbPath: () => join(testDir, "test.db"),
26
25
  getLogPath: () => join(testDir, "test.log"),
@@ -18,7 +18,6 @@ mock.module("../util/platform.js", () => ({
18
18
  isMacOS: () => process.platform === "darwin",
19
19
  isLinux: () => process.platform === "linux",
20
20
  isWindows: () => process.platform === "win32",
21
- getSocketPath: () => join(testDir, "test.sock"),
22
21
  getPidPath: () => join(testDir, "test.pid"),
23
22
  getDbPath: () => join(testDir, "test.db"),
24
23
  getLogPath: () => join(testDir, "test.log"),
@@ -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"),
@@ -22,7 +22,6 @@ mock.module("../util/platform.js", () => ({
22
22
  isMacOS: () => process.platform === "darwin",
23
23
  isLinux: () => process.platform === "linux",
24
24
  isWindows: () => process.platform === "win32",
25
- getSocketPath: () => join(testDir, "test.sock"),
26
25
  getPidPath: () => join(testDir, "test.pid"),
27
26
  getDbPath: () => join(testDir, "test.db"),
28
27
  getLogPath: () => join(testDir, "test.log"),
@@ -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"),
@@ -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"),
@@ -25,7 +25,6 @@ mock.module("../util/platform.js", () => ({
25
25
  isMacOS: () => process.platform === "darwin",
26
26
  isLinux: () => process.platform === "linux",
27
27
  isWindows: () => process.platform === "win32",
28
- getSocketPath: () => join(testDir, "test.sock"),
29
28
  getPidPath: () => join(testDir, "test.pid"),
30
29
  getDbPath: () => join(testDir, "test.db"),
31
30
  getLogPath: () => join(testDir, "test.log"),
@@ -152,6 +151,7 @@ function registerPendingInteraction(
152
151
  const handleConfirmationResponse = mock(() => {});
153
152
  const mockSession = {
154
153
  handleConfirmationResponse,
154
+ ensureActorScopedHistory: async () => {},
155
155
  } as unknown as Session;
156
156
 
157
157
  pendingInteractions.register(requestId, {
@@ -25,7 +25,6 @@ mock.module("../util/platform.js", () => ({
25
25
  isMacOS: () => process.platform === "darwin",
26
26
  isLinux: () => process.platform === "linux",
27
27
  isWindows: () => process.platform === "win32",
28
- getSocketPath: () => join(testDir, "test.sock"),
29
28
  getPidPath: () => join(testDir, "test.pid"),
30
29
  getDbPath: () => join(testDir, "test.db"),
31
30
  getLogPath: () => join(testDir, "test.log"),
@@ -86,6 +85,7 @@ function registerPendingConfirmation(
86
85
  ): void {
87
86
  const mockSession = {
88
87
  handleConfirmationResponse: mock(() => {}),
88
+ ensureActorScopedHistory: async () => {},
89
89
  } as unknown as Session;
90
90
 
91
91
  pendingInteractions.register(requestId, {
@@ -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"),
@@ -16,7 +16,6 @@ mock.module("../util/platform.js", () => ({
16
16
  isMacOS: () => process.platform === "darwin",
17
17
  isLinux: () => process.platform === "linux",
18
18
  isWindows: () => process.platform === "win32",
19
- getSocketPath: () => join(testDir, "test.sock"),
20
19
  getPidPath: () => join(testDir, "test.pid"),
21
20
  getDbPath: () => join(testDir, "test.db"),
22
21
  getLogPath: () => join(testDir, "test.log"),
@@ -1293,7 +1292,7 @@ describe("assistant-scoped approval request lookups", () => {
1293
1292
  });
1294
1293
 
1295
1294
  // ═══════════════════════════════════════════════════════════════════════════
1296
- // 10. IPC handler — channel-aware guardian status response
1295
+ // 10. HTTP handler — channel-aware guardian status response
1297
1296
  // ═══════════════════════════════════════════════════════════════════════════
1298
1297
 
1299
1298
  /**
@@ -1327,8 +1326,7 @@ function createMockCtx(): {
1327
1326
  return { ctx, lastResponse: () => captured };
1328
1327
  }
1329
1328
 
1330
-
1331
- describe("IPC handler channel-aware guardian status", () => {
1329
+ describe("HTTP handler channel-aware guardian status", () => {
1332
1330
  beforeEach(() => {
1333
1331
  resetTables();
1334
1332
  });
@@ -1954,10 +1952,10 @@ describe("pending challenge lookup", () => {
1954
1952
  });
1955
1953
 
1956
1954
  // ═══════════════════════════════════════════════════════════════════════════
1957
- // 16. IPC handler — voice guardian verification
1955
+ // 16. HTTP handler — voice guardian verification
1958
1956
  // ═══════════════════════════════════════════════════════════════════════════
1959
1957
 
1960
- describe("IPC handler voice guardian verification", () => {
1958
+ describe("HTTP handler voice guardian verification", () => {
1961
1959
  beforeEach(() => {
1962
1960
  resetTables();
1963
1961
  });
@@ -2540,7 +2538,7 @@ describe("outbound verification sessions", () => {
2540
2538
  });
2541
2539
 
2542
2540
  // ═══════════════════════════════════════════════════════════════════════════
2543
- // 18. Outbound Voice Verification (IPC Handlers)
2541
+ // 18. Outbound Voice Verification (HTTP Handlers)
2544
2542
  // ═══════════════════════════════════════════════════════════════════════════
2545
2543
 
2546
2544
  describe("outbound voice verification", () => {
@@ -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"),
@@ -31,7 +31,6 @@ mock.module("../util/platform.js", () => ({
31
31
  isMacOS: () => process.platform === "darwin",
32
32
  isLinux: () => process.platform === "linux",
33
33
  isWindows: () => process.platform === "win32",
34
- getSocketPath: () => join(checkerTestDir, "test.sock"),
35
34
  getPidPath: () => join(checkerTestDir, "test.pid"),
36
35
  getDbPath: () => join(checkerTestDir, "test.db"),
37
36
  getLogPath: () => join(checkerTestDir, "test.log"),
@@ -98,12 +97,6 @@ import { RiskLevel } from "../permissions/types.js";
98
97
  import { getTool, registerTool } from "../tools/registry.js";
99
98
  import type { Tool } from "../tools/types.js";
100
99
 
101
- // Import managed skill tools so they register in the tool registry.
102
- // Without this, classifyRisk falls through to RiskLevel.Medium (unknown tool)
103
- // instead of the declared RiskLevel.High — producing wrong test behavior.
104
- import "../tools/skills/scaffold-managed.js";
105
- import "../tools/skills/delete-managed.js";
106
-
107
100
  // Register a mock skill-origin tool for testing default-ask policy.
108
101
  const mockSkillTool: Tool = {
109
102
  name: "skill_test_tool",
@@ -637,27 +630,26 @@ describe("Permission Checker", () => {
637
630
  expect(result.decision).toBe("prompt");
638
631
  });
639
632
 
640
- test("host_bash rm is always high risk prompt", async () => {
633
+ test("host_bash rm is always prompted via default ask rule", async () => {
641
634
  const result = await check(
642
635
  "host_bash",
643
636
  { command: "rm file.txt" },
644
637
  "/tmp",
645
638
  );
646
639
  expect(result.decision).toBe("prompt");
647
- expect(result.reason).toContain("High risk");
640
+ expect(result.reason).toContain("ask rule");
648
641
  });
649
642
 
650
- test("plain rm (without -rf) is high risk and prompts despite default allow rule", async () => {
651
- // Validates that ALL rm commands are escalated to High risk, not just rm -rf.
652
- // The default allow rule for host_bash auto-approves Low/Medium risk but
653
- // High risk always prompts.
643
+ test("plain rm (without -rf) prompts via default ask rule", async () => {
644
+ // The default ask rule for host_bash prompts ALL commands regardless
645
+ // of risk level rm commands are no exception.
654
646
  const result = await check(
655
647
  "host_bash",
656
648
  { command: "rm single-file.txt" },
657
649
  "/tmp",
658
650
  );
659
651
  expect(result.decision).toBe("prompt");
660
- expect(result.reason).toContain("High risk");
652
+ expect(result.reason).toContain("ask rule");
661
653
 
662
654
  // Also verify rm -rf still prompts
663
655
  const rfResult = await check(
@@ -666,7 +658,7 @@ describe("Permission Checker", () => {
666
658
  "/tmp",
667
659
  );
668
660
  expect(rfResult.decision).toBe("prompt");
669
- expect(rfResult.reason).toContain("High risk");
661
+ expect(rfResult.reason).toContain("ask rule");
670
662
  });
671
663
 
672
664
  test("rm is high risk even with matching trust rule → prompt", async () => {
@@ -807,11 +799,11 @@ describe("Permission Checker", () => {
807
799
  expect(result.matchedRule?.id).toBe("default:ask-host_file_edit-global");
808
800
  });
809
801
 
810
- test("host_bash auto-allows low risk via default allow rule", async () => {
802
+ test("host_bash prompts low risk via default ask rule", async () => {
811
803
  const result = await check("host_bash", { command: "ls" }, "/tmp");
812
- expect(result.decision).toBe("allow");
813
- expect(result.reason).toContain("Matched trust rule");
814
- expect(result.matchedRule?.id).toBe("default:allow-host_bash-global");
804
+ expect(result.decision).toBe("prompt");
805
+ expect(result.reason).toContain("ask rule");
806
+ expect(result.matchedRule?.id).toBe("default:ask-host_bash-global");
815
807
  });
816
808
 
817
809
  test("scaffold_managed_skill prompts by default via managed skill ask rule", async () => {
@@ -2232,11 +2224,12 @@ describe("Permission Checker", () => {
2232
2224
  expect(result.matchedRule?.id).toBe("default:allow-bash-global");
2233
2225
  });
2234
2226
 
2235
- test("host_bash auto-allows low risk in strict mode (default allow rule is a matching rule)", async () => {
2227
+ test("host_bash prompts low risk in strict mode (default ask rule matches)", async () => {
2236
2228
  testConfig.permissions.mode = "strict";
2237
2229
  const result = await check("host_bash", { command: "ls" }, "/tmp");
2238
- expect(result.decision).toBe("allow");
2239
- expect(result.matchedRule?.id).toBe("default:allow-host_bash-global");
2230
+ expect(result.decision).toBe("prompt");
2231
+ expect(result.reason).toContain("ask rule");
2232
+ expect(result.matchedRule?.id).toBe("default:ask-host_bash-global");
2240
2233
  });
2241
2234
 
2242
2235
  test("high-risk host_bash (rm) with no matching rule returns prompt in strict mode", async () => {
@@ -3570,15 +3563,16 @@ describe("Permission Checker", () => {
3570
3563
  expect(result.matchedRule?.id).toBe("default:allow-bash-global");
3571
3564
  });
3572
3565
 
3573
- test("low-risk host_bash auto-allows in strict mode (default allow rule is a matching rule)", async () => {
3566
+ test("low-risk host_bash prompts in strict mode (default ask rule matches)", async () => {
3574
3567
  testConfig.permissions.mode = "strict";
3575
3568
  const result = await check(
3576
3569
  "host_bash",
3577
3570
  { command: "echo hello" },
3578
3571
  "/tmp",
3579
3572
  );
3580
- expect(result.decision).toBe("allow");
3581
- expect(result.matchedRule?.id).toBe("default:allow-host_bash-global");
3573
+ expect(result.decision).toBe("prompt");
3574
+ expect(result.reason).toContain("ask rule");
3575
+ expect(result.matchedRule?.id).toBe("default:ask-host_bash-global");
3582
3576
  });
3583
3577
 
3584
3578
  test("low-risk file_read with no rule prompts in strict mode", async () => {
@@ -3660,10 +3654,11 @@ describe("Permission Checker", () => {
3660
3654
  // target-scoped. ───────────────────────────────────────────────
3661
3655
 
3662
3656
  describe("Invariant 4: host execution approvals are explicit and target-scoped", () => {
3663
- test("host_bash auto-allows low risk via default allow rule", async () => {
3657
+ test("host_bash prompts low risk via default ask rule", async () => {
3664
3658
  const result = await check("host_bash", { command: "ls" }, "/tmp");
3665
- expect(result.decision).toBe("allow");
3666
- expect(result.matchedRule?.id).toBe("default:allow-host_bash-global");
3659
+ expect(result.decision).toBe("prompt");
3660
+ expect(result.reason).toContain("ask rule");
3661
+ expect(result.matchedRule?.id).toBe("default:ask-host_bash-global");
3667
3662
  });
3668
3663
 
3669
3664
  test("host_file_read prompts by default (no implicit allow)", async () => {
@@ -3740,7 +3735,7 @@ describe("Permission Checker", () => {
3740
3735
  expect(matchResult.matchedRule?.id).toBe("inv4-target-scoped");
3741
3736
 
3742
3737
  // Different target — the target-scoped rule should NOT match;
3743
- // falls back to the default host_bash allow rule (auto-allows medium risk)
3738
+ // falls back to the default host_bash ask rule (prompts)
3744
3739
  const noMatchResult = await check(
3745
3740
  "host_bash",
3746
3741
  { command: "run script.js" },
@@ -3749,8 +3744,11 @@ describe("Permission Checker", () => {
3749
3744
  executionTarget: "/usr/local/bin/bun",
3750
3745
  },
3751
3746
  );
3752
- expect(noMatchResult.decision).toBe("allow");
3753
- expect(noMatchResult.matchedRule?.id).not.toBe("inv4-target-scoped");
3747
+ expect(noMatchResult.decision).toBe("prompt");
3748
+ expect(noMatchResult.reason).toContain("ask rule");
3749
+ expect(noMatchResult.matchedRule?.id).toBe(
3750
+ "default:ask-host_bash-global",
3751
+ );
3754
3752
  });
3755
3753
  });
3756
3754
 
@@ -4391,8 +4389,6 @@ describe("computer-use tool permission defaults", () => {
4391
4389
  test("computer_use_* tools classify as Low risk (proxy tools)", async () => {
4392
4390
  const cuToolNames = [
4393
4391
  "computer_use_click",
4394
- "computer_use_double_click",
4395
- "computer_use_right_click",
4396
4392
  "computer_use_type_text",
4397
4393
  "computer_use_key",
4398
4394
  "computer_use_scroll",
@@ -4722,10 +4718,10 @@ describe("workspace mode — auto-allow workspace-scoped operations", () => {
4722
4718
  expect(result.reason).toContain("ask rule");
4723
4719
  });
4724
4720
 
4725
- test("host_bash → allow (default allow rule matches)", async () => {
4721
+ test("host_bash → prompt (default ask rule matches)", async () => {
4726
4722
  const result = await check("host_bash", { command: "ls" }, workspaceDir);
4727
- expect(result.decision).toBe("allow");
4728
- expect(result.reason).toContain("Matched trust rule");
4723
+ expect(result.decision).toBe("prompt");
4724
+ expect(result.reason).toContain("ask rule");
4729
4725
  });
4730
4726
 
4731
4727
  // ── explicit rules still take precedence in workspace mode ──
@@ -4,8 +4,8 @@
4
4
  * Measures compaction cost with a mock provider:
5
5
  * - compaction latency under threshold pressure
6
6
  * - no-op fast path for below-threshold histories
7
- * - token reduction ratio after compaction
8
- * - summary call count within expected range
7
+ * - token reduction below target budget
8
+ * - single-pass summarization (exactly 1 call)
9
9
  * - severe pressure overriding cooldown
10
10
  */
11
11
  import { describe, expect, mock, test } from "bun:test";
@@ -73,10 +73,9 @@ function makeConfig() {
73
73
  return {
74
74
  ...DEFAULT_CONFIG.contextWindow,
75
75
  maxInputTokens: 6000,
76
- targetInputTokens: 3200,
76
+ targetBudgetRatio: 0.58,
77
77
  compactThreshold: 0.6,
78
- preserveRecentUserTurns: 8,
79
- chunkTokens: 1200,
78
+ summaryBudgetRatio: 0.05,
80
79
  };
81
80
  }
82
81
 
@@ -131,7 +130,7 @@ describe("Compaction benchmark", () => {
131
130
  expect(counter.calls).toBe(0);
132
131
  });
133
132
 
134
- test("token reduction ratio exceeds 30% after compaction", async () => {
133
+ test("compaction reduces tokens below target budget", async () => {
135
134
  const counter = { calls: 0 };
136
135
  const provider = makeSummaryProvider(counter);
137
136
  const config = makeConfig();
@@ -145,13 +144,17 @@ describe("Compaction benchmark", () => {
145
144
  const result = await manager.maybeCompact(messages);
146
145
 
147
146
  expect(result.compacted).toBe(true);
148
- const reductionRatio =
149
- (result.previousEstimatedInputTokens - result.estimatedInputTokens) /
150
- result.previousEstimatedInputTokens;
151
- expect(reductionRatio).toBeGreaterThan(0.3);
147
+ expect(result.estimatedInputTokens).toBeLessThan(
148
+ result.previousEstimatedInputTokens,
149
+ );
150
+ // Target is maxInputTokens * (targetBudgetRatio - summaryBudgetRatio)
151
+ const targetTokens = Math.floor(
152
+ config.maxInputTokens * (config.targetBudgetRatio - config.summaryBudgetRatio),
153
+ );
154
+ expect(result.estimatedInputTokens).toBeLessThanOrEqual(targetTokens);
152
155
  });
153
156
 
154
- test("summary calls fall within 2-6 range", async () => {
157
+ test("single-pass summarization makes exactly 1 summary call", async () => {
155
158
  const counter = { calls: 0 };
156
159
  const provider = makeSummaryProvider(counter);
157
160
  const config = makeConfig();
@@ -165,8 +168,7 @@ describe("Compaction benchmark", () => {
165
168
  const result = await manager.maybeCompact(messages);
166
169
 
167
170
  expect(result.compacted).toBe(true);
168
- expect(result.summaryCalls).toBeGreaterThanOrEqual(2);
169
- expect(result.summaryCalls).toBeLessThanOrEqual(6);
171
+ expect(result.summaryCalls).toBe(1);
170
172
  expect(result.summaryCalls).toBe(counter.calls);
171
173
  });
172
174
 
@@ -177,7 +179,7 @@ describe("Compaction benchmark", () => {
177
179
  const config = {
178
180
  ...makeConfig(),
179
181
  maxInputTokens: 4000,
180
- targetInputTokens: 2000,
182
+ targetBudgetRatio: 0.55,
181
183
  };
182
184
  const manager = new ContextWindowManager({
183
185
  provider,
@@ -17,18 +17,19 @@ mock.module("../config/loader.js", () => ({
17
17
  contextWindow: {
18
18
  enabled: true,
19
19
  maxInputTokens: 180000,
20
- targetInputTokens: 110000,
20
+ targetBudgetRatio: 0.3,
21
21
  compactThreshold: 0.8,
22
- preserveRecentUserTurns: 8,
23
- summaryMaxTokens: 1200,
24
- chunkTokens: 12000,
22
+ summaryBudgetRatio: 0.05,
25
23
  },
26
24
  }),
27
25
  invalidateConfigCache: () => {},
28
26
  }));
29
27
 
30
28
  import { ComputerUseSession } from "../daemon/computer-use-session.js";
31
- import type { CuObservation, ServerMessage } from "../daemon/message-protocol.js";
29
+ import type {
30
+ CuObservation,
31
+ ServerMessage,
32
+ } from "../daemon/message-protocol.js";
32
33
  import type { Provider, ProviderResponse } from "../providers/types.js";
33
34
 
34
35
  function createProvider(responses: ProviderResponse[]): {
@@ -141,7 +142,7 @@ describe("ComputerUseSession lifecycle", () => {
141
142
  expect(session.getState()).toBe("error");
142
143
  });
143
144
 
144
- test("CU session passes exactly 12 computer_use_* tools to the agent loop", async () => {
145
+ test("CU session passes exactly 10 computer_use_* tools to the agent loop", async () => {
145
146
  let capturedTools: string[] = [];
146
147
  const provider: Provider = {
147
148
  name: "mock",
@@ -180,13 +181,11 @@ describe("ComputerUseSession lifecycle", () => {
180
181
  });
181
182
 
182
183
  const cuTools = capturedTools.filter((n) => n.startsWith("computer_use_"));
183
- expect(cuTools).toHaveLength(12);
184
+ expect(cuTools).toHaveLength(10);
184
185
 
185
186
  // Assert exact set of expected CU tool names
186
187
  const expectedCuTools = [
187
188
  "computer_use_click",
188
- "computer_use_double_click",
189
- "computer_use_right_click",
190
189
  "computer_use_type_text",
191
190
  "computer_use_key",
192
191
  "computer_use_scroll",
@@ -251,7 +250,7 @@ describe("ComputerUseSession lifecycle", () => {
251
250
  expect(completes[0].isResponse).toBe(true);
252
251
  });
253
252
 
254
- test("default construction preactivates computer-use skill and provides 12 CU tools", async () => {
253
+ test("default construction preactivates computer-use skill and provides 10 CU tools", async () => {
255
254
  let capturedTools: string[] = [];
256
255
  const provider: Provider = {
257
256
  name: "mock",
@@ -292,7 +291,7 @@ describe("ComputerUseSession lifecycle", () => {
292
291
  });
293
292
 
294
293
  const cuTools = capturedTools.filter((n) => n.startsWith("computer_use_"));
295
- expect(cuTools).toHaveLength(12);
294
+ expect(cuTools).toHaveLength(10);
296
295
  });
297
296
 
298
297
  test("constructor accepts preactivatedSkillIds parameter", () => {