@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
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Generates `src/config/bundled-tool-registry.ts` by reading every
4
+ * `TOOLS.json` under `src/config/bundled-skills/`.
5
+ *
6
+ * Usage:
7
+ * cd assistant && bun run scripts/generate-bundled-tool-registry.ts
8
+ */
9
+
10
+ import { readdir, readFile, writeFile } from "node:fs/promises";
11
+ import { basename, join, resolve } from "node:path";
12
+
13
+ const ROOT = resolve(import.meta.dir, "../src/config/bundled-skills");
14
+ const OUTPUT = resolve(
15
+ import.meta.dir,
16
+ "../src/config/bundled-tool-registry.ts",
17
+ );
18
+
19
+ interface ToolEntry {
20
+ executor: string;
21
+ [key: string]: unknown;
22
+ }
23
+
24
+ interface ToolsJson {
25
+ version: number;
26
+ tools: ToolEntry[];
27
+ }
28
+
29
+ /** Convert a kebab-case filename stem to camelCase. */
30
+ function toCamelCase(kebab: string): string {
31
+ return kebab.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
32
+ }
33
+
34
+ /** Build the section separator comment (e.g. `// ── browser ──…`). */
35
+ function sectionComment(skillName: string): string {
36
+ const inner = ` ${skillName} `;
37
+ // Target total line width of ~80 chars
38
+ const remaining = 80 - 3 - inner.length; // 3 for "// "
39
+ const suffix = "─".repeat(Math.max(1, remaining));
40
+ return `// ──${inner}${"─".repeat(0)}${suffix}`;
41
+ }
42
+
43
+ async function main() {
44
+ const entries = await readdir(ROOT, { withFileTypes: true });
45
+ const skillDirs = entries
46
+ .filter((e) => e.isDirectory() && e.name !== "_shared")
47
+ .map((e) => e.name)
48
+ .sort();
49
+
50
+ // First pass: collect all executors and detect alias collisions.
51
+ const skills: {
52
+ name: string;
53
+ tools: {
54
+ executor: string;
55
+ registryKey: string;
56
+ importPath: string;
57
+ alias: string;
58
+ }[];
59
+ }[] = [];
60
+
61
+ // Map from alias → skill that first claimed it (for collision detection).
62
+ const claimedAliases = new Map<string, string>();
63
+ // Track which aliases need collision-prefixing.
64
+ const collidedAliases = new Set<string>();
65
+
66
+ for (const skillDir of skillDirs) {
67
+ const toolsJsonPath = join(ROOT, skillDir, "TOOLS.json");
68
+ let raw: string;
69
+ try {
70
+ raw = await readFile(toolsJsonPath, "utf-8");
71
+ } catch (err) {
72
+ if ((err as NodeJS.ErrnoException).code === "ENOENT") {
73
+ // No TOOLS.json — skip this skill.
74
+ continue;
75
+ }
76
+ throw err;
77
+ }
78
+
79
+ const toolsJson: ToolsJson = JSON.parse(raw);
80
+ const toolEntries: (typeof skills)[number]["tools"] = [];
81
+
82
+ for (const tool of toolsJson.tools) {
83
+ const executor = tool.executor;
84
+ const registryKey = `${skillDir}:${executor}`;
85
+ const importPath = `./bundled-skills/${skillDir}/${executor.replace(".ts", ".js")}`;
86
+ const stem = basename(executor, ".ts");
87
+ const baseAlias = toCamelCase(stem);
88
+
89
+ const existingSkill = claimedAliases.get(baseAlias);
90
+ if (existingSkill !== undefined && existingSkill !== skillDir) {
91
+ collidedAliases.add(baseAlias);
92
+ }
93
+ claimedAliases.set(baseAlias, skillDir);
94
+
95
+ toolEntries.push({ executor, registryKey, importPath, alias: baseAlias });
96
+ }
97
+
98
+ if (toolEntries.length > 0) {
99
+ skills.push({ name: skillDir, tools: toolEntries });
100
+ }
101
+ }
102
+
103
+ // Second pass: resolve collided aliases by adding skill prefix.
104
+ for (const skill of skills) {
105
+ for (const tool of skill.tools) {
106
+ if (collidedAliases.has(tool.alias)) {
107
+ const prefix = toCamelCase(skill.name);
108
+ tool.alias = `${prefix}_${tool.alias}`;
109
+ }
110
+ }
111
+ }
112
+
113
+ // Check for remaining duplicates within same skill (shouldn't happen but be safe).
114
+ const finalAliases = new Set<string>();
115
+ for (const skill of skills) {
116
+ for (const tool of skill.tools) {
117
+ if (finalAliases.has(tool.alias)) {
118
+ // Append skill prefix if not already present.
119
+ const prefix = toCamelCase(skill.name);
120
+ if (!tool.alias.startsWith(prefix)) {
121
+ tool.alias = `${prefix}${tool.alias.charAt(0).toUpperCase()}${tool.alias.slice(1)}`;
122
+ }
123
+ }
124
+ finalAliases.add(tool.alias);
125
+ }
126
+ }
127
+
128
+ // Generate output.
129
+ const lines: string[] = [];
130
+
131
+ // File header.
132
+ lines.push(`/**`);
133
+ lines.push(` * Auto-generated registry of bundled skill tool scripts.`);
134
+ lines.push(` *`);
135
+ lines.push(
136
+ ` * In compiled Bun binaries, bundled tool scripts can't be dynamically`,
137
+ );
138
+ lines.push(
139
+ ` * imported from the filesystem because their relative imports point to`,
140
+ );
141
+ lines.push(
142
+ ` * modules that only exist inside the binary's virtual /$bunfs/ filesystem.`,
143
+ );
144
+ lines.push(` *`);
145
+ lines.push(
146
+ ` * This registry eagerly imports every bundled tool script so it becomes`,
147
+ );
148
+ lines.push(
149
+ ` * part of the compiled binary. At runtime, the skill-script-runner`,
150
+ );
151
+ lines.push(` * checks this map before falling back to a dynamic import.`);
152
+ lines.push(` *`);
153
+ lines.push(` * Regenerate with:`);
154
+ lines.push(` * bun run scripts/generate-bundled-tool-registry.ts`);
155
+ lines.push(` */`);
156
+ lines.push(
157
+ `import type { SkillToolScript } from "../tools/skills/script-contract.js";`,
158
+ );
159
+
160
+ // Import statements grouped by skill, sorted by import path within each
161
+ // group so the output satisfies eslint simple-import-sort.
162
+ for (const skill of skills) {
163
+ // Strip `.js` before comparing so `browser-wait-for` sorts before
164
+ // `browser-wait-for-download`, matching simple-import-sort's order.
165
+ const sorted = [...skill.tools].sort((a, b) =>
166
+ a.importPath
167
+ .replace(/\.js$/, "")
168
+ .localeCompare(b.importPath.replace(/\.js$/, "")),
169
+ );
170
+ lines.push(sectionComment(skill.name));
171
+ for (const tool of sorted) {
172
+ lines.push(`import * as ${tool.alias} from "${tool.importPath}";`);
173
+ }
174
+ }
175
+
176
+ // Registry map.
177
+ lines.push(``);
178
+ lines.push(
179
+ `// ─── Registry ────────────────────────────────────────────────────────────────`,
180
+ );
181
+ lines.push(``);
182
+ lines.push(
183
+ `/** Key format: \`skillDirBasename:executorPath\` (e.g. \`schedule:tools/schedule-list.ts\`). */`,
184
+ );
185
+ lines.push(
186
+ `export const bundledToolRegistry = new Map<string, SkillToolScript>([`,
187
+ );
188
+
189
+ for (let i = 0; i < skills.length; i++) {
190
+ const skill = skills[i];
191
+ lines.push(` // ${skill.name}`);
192
+ for (const tool of skill.tools) {
193
+ const entry = `["${tool.registryKey}", ${tool.alias}]`;
194
+ // Wrap long lines.
195
+ if (` ${entry},`.length > 80) {
196
+ lines.push(` [`);
197
+ lines.push(` "${tool.registryKey}",`);
198
+ lines.push(` ${tool.alias},`);
199
+ lines.push(` ],`);
200
+ } else {
201
+ lines.push(` ${entry},`);
202
+ }
203
+ }
204
+
205
+ if (i < skills.length - 1) {
206
+ lines.push(``);
207
+ }
208
+ }
209
+
210
+ lines.push(`]);`);
211
+ lines.push(``); // trailing newline
212
+
213
+ await writeFile(OUTPUT, lines.join("\n"), "utf-8");
214
+ console.log(`✓ Generated ${OUTPUT}`);
215
+ console.log(
216
+ ` ${skills.length} skills, ${skills.reduce((n, s) => n + s.tools.length, 0)} tools`,
217
+ );
218
+ }
219
+
220
+ main().catch((err) => {
221
+ console.error(err);
222
+ process.exit(1);
223
+ });
@@ -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"),
@@ -23,7 +23,6 @@ mock.module("../util/platform.js", () => ({
23
23
  isMacOS: () => process.platform === "darwin",
24
24
  isLinux: () => process.platform === "linux",
25
25
  isWindows: () => process.platform === "win32",
26
- getSocketPath: () => join(testDir, "test.sock"),
27
26
  getPidPath: () => join(testDir, "test.pid"),
28
27
  getLogPath: () => join(testDir, "test.log"),
29
28
  ensureDataDir: () => {},
@@ -64,8 +63,8 @@ import {
64
63
  } from "../runtime/auth/token-service.js";
65
64
  import { ensureVellumGuardianBinding } from "../runtime/guardian-vellum-migration.js";
66
65
  import {
67
- resolveLocalIpcAuthContext,
68
- resolveLocalIpcTrustContext,
66
+ resolveLocalAuthContext,
67
+ resolveLocalTrustContext,
69
68
  } from "../runtime/local-actor-identity.js";
70
69
 
71
70
  // ---------------------------------------------------------------------------
@@ -358,20 +357,20 @@ describe("bootstrap endpoint idempotency", () => {
358
357
  });
359
358
 
360
359
  // ---------------------------------------------------------------------------
361
- // Local IPC identity resolution
360
+ // Local identity resolution
362
361
  // ---------------------------------------------------------------------------
363
362
 
364
- describe("resolveLocalIpcTrustContext", () => {
363
+ describe("resolveLocalTrustContext", () => {
365
364
  test("returns guardian context when vellum binding exists", () => {
366
365
  ensureVellumGuardianBinding("self");
367
366
 
368
- const ctx = resolveLocalIpcTrustContext();
367
+ const ctx = resolveLocalTrustContext();
369
368
  expect(ctx.trustClass).toBe("guardian");
370
369
  expect(ctx.sourceChannel).toBe("vellum");
371
370
  });
372
371
 
373
372
  test("returns guardian context with principal when no vellum binding exists (pre-bootstrap self-heal)", () => {
374
- const ctx = resolveLocalIpcTrustContext();
373
+ const ctx = resolveLocalTrustContext();
375
374
  expect(ctx.trustClass).toBe("guardian");
376
375
  expect(ctx.sourceChannel).toBe("vellum");
377
376
  expect(ctx.guardianPrincipalId).toBeDefined();
@@ -379,35 +378,35 @@ describe("resolveLocalIpcTrustContext", () => {
379
378
 
380
379
  test("respects custom sourceChannel parameter", () => {
381
380
  ensureVellumGuardianBinding("self");
382
- const ctx = resolveLocalIpcTrustContext("vellum");
381
+ const ctx = resolveLocalTrustContext("vellum");
383
382
  expect(ctx.sourceChannel).toBe("vellum");
384
383
  });
385
384
  });
386
385
 
387
386
  // ---------------------------------------------------------------------------
388
- // Local IPC AuthContext resolution
387
+ // Local AuthContext resolution
389
388
  // ---------------------------------------------------------------------------
390
389
 
391
- describe("resolveLocalIpcAuthContext", () => {
392
- test("returns AuthContext with ipc principal type", () => {
393
- const ctx = resolveLocalIpcAuthContext("session-123");
394
- expect(ctx.principalType).toBe("ipc");
390
+ describe("resolveLocalAuthContext", () => {
391
+ test("returns AuthContext with local principal type", () => {
392
+ const ctx = resolveLocalAuthContext("session-123");
393
+ expect(ctx.principalType).toBe("local");
395
394
  });
396
395
 
397
- test("subject follows ipc:self:<sessionId> pattern", () => {
398
- const ctx = resolveLocalIpcAuthContext("session-abc");
399
- expect(ctx.subject).toBe("ipc:self:session-abc");
396
+ test("subject follows local:self:<sessionId> pattern", () => {
397
+ const ctx = resolveLocalAuthContext("session-abc");
398
+ expect(ctx.subject).toBe("local:self:session-abc");
400
399
  });
401
400
 
402
401
  test("assistantId is always self", () => {
403
- const ctx = resolveLocalIpcAuthContext("session-123");
402
+ const ctx = resolveLocalAuthContext("session-123");
404
403
  expect(ctx.assistantId).toBe("self");
405
404
  });
406
405
 
407
- test("uses ipc_v1 scope profile with ipc.all scope", () => {
408
- const ctx = resolveLocalIpcAuthContext("session-123");
409
- expect(ctx.scopeProfile).toBe("ipc_v1");
410
- expect(ctx.scopes.has("ipc.all")).toBe(true);
406
+ test("uses local_v1 scope profile with local.all scope", () => {
407
+ const ctx = resolveLocalAuthContext("session-123");
408
+ expect(ctx.scopeProfile).toBe("local_v1");
409
+ expect(ctx.scopes.has("local.all")).toBe(true);
411
410
  });
412
411
 
413
412
  test("enriches actorPrincipalId from vellum guardian binding when present", () => {
@@ -415,7 +414,7 @@ describe("resolveLocalIpcAuthContext", () => {
415
414
  const guardianResult = findGuardianForChannel("vellum");
416
415
  expect(guardianResult).toBeTruthy();
417
416
 
418
- const ctx = resolveLocalIpcAuthContext("session-123");
417
+ const ctx = resolveLocalAuthContext("session-123");
419
418
  expect(ctx.actorPrincipalId).toBe(
420
419
  guardianResult!.contact.principalId ?? undefined,
421
420
  );
@@ -426,14 +425,14 @@ describe("resolveLocalIpcAuthContext", () => {
426
425
  resetDb();
427
426
  initializeDb();
428
427
 
429
- const ctx = resolveLocalIpcAuthContext("session-123");
428
+ const ctx = resolveLocalAuthContext("session-123");
430
429
  // Self-heal creates a vellum guardian binding automatically
431
430
  expect(ctx.actorPrincipalId).toBeDefined();
432
431
  expect(ctx.actorPrincipalId).toMatch(/^vellum-principal-/);
433
432
  });
434
433
 
435
434
  test("sessionId matches the provided argument", () => {
436
- const ctx = resolveLocalIpcAuthContext("my-session");
435
+ const ctx = resolveLocalAuthContext("my-session");
437
436
  expect(ctx.sessionId).toBe("my-session");
438
437
  });
439
438
  });
@@ -501,137 +501,6 @@ describe("AgentLoop", () => {
501
501
  expect(reminderBlock).toBeDefined();
502
502
  });
503
503
 
504
- test("stops after configured maxToolUseTurns to prevent runaway loops", async () => {
505
- const responses: ProviderResponse[] = [
506
- toolUseResponse("t1", "read_file", { path: "/one.txt" }),
507
- toolUseResponse("t2", "read_file", { path: "/two.txt" }),
508
- toolUseResponse("t3", "read_file", { path: "/three.txt" }),
509
- textResponse("Should never be requested"),
510
- ];
511
- const { provider, calls } = createMockProvider(responses);
512
- const toolExecutor = async () => ({ content: "data", isError: false });
513
- const loop = new AgentLoop(
514
- provider,
515
- "system",
516
- { maxToolUseTurns: 3 },
517
- dummyTools,
518
- toolExecutor,
519
- );
520
-
521
- const events: AgentEvent[] = [];
522
- const history = await loop.run([userMessage], collectEvents(events));
523
-
524
- // The loop should stop immediately after the 3rd tool-use turn, before the next provider call.
525
- expect(calls).toHaveLength(3);
526
-
527
- const errorEvents = events.filter(
528
- (e): e is Extract<AgentEvent, { type: "error" }> => e.type === "error",
529
- );
530
- expect(errorEvents).toHaveLength(1);
531
- expect(errorEvents[0].error.message).toContain(
532
- "Tool-use turn limit reached (3)",
533
- );
534
-
535
- const lastMessage = history[history.length - 1];
536
- expect(lastMessage.role).toBe("user");
537
- const limitText = lastMessage.content.find(
538
- (b): b is Extract<ContentBlock, { type: "text" }> =>
539
- b.type === "text" && b.text.includes("Tool-use turn limit reached (3)"),
540
- );
541
- expect(limitText).toBeDefined();
542
- });
543
-
544
- test("injects approaching-limit warning before the hard stop", async () => {
545
- // maxToolUseTurns: 8, soft warning at turn 3 (8 - 5 = 3)
546
- const responses: ProviderResponse[] = [];
547
- for (let i = 0; i < 8; i++) {
548
- responses.push(
549
- toolUseResponse(`t${i}`, "read_file", { path: `/${i}.txt` }),
550
- );
551
- }
552
- responses.push(textResponse("done"));
553
- const { provider, calls } = createMockProvider(responses);
554
- const toolExecutor = async () => ({ content: "data", isError: false });
555
- const loop = new AgentLoop(
556
- provider,
557
- "system",
558
- { maxToolUseTurns: 8 },
559
- dummyTools,
560
- toolExecutor,
561
- );
562
-
563
- const events: AgentEvent[] = [];
564
- await loop.run([userMessage], collectEvents(events));
565
-
566
- // Should have stopped at turn 8 (hard limit)
567
- expect(calls).toHaveLength(8);
568
-
569
- // Check that the approaching-limit warning was injected at turn 3 (8 - 5 = 3)
570
- // The warning would appear in the messages sent to the provider on turn 4 (the call after turn 3)
571
- const turn4Messages = calls[3].messages;
572
- const lastMsg = turn4Messages[turn4Messages.length - 1];
573
- const warningBlock = lastMsg.content.find(
574
- (b): b is Extract<ContentBlock, { type: "text" }> =>
575
- b.type === "text" &&
576
- b.text.includes("approaching the tool-use turn limit"),
577
- );
578
- expect(warningBlock).toBeDefined();
579
- });
580
-
581
- test("runs without limit when maxToolUseTurns is 0", async () => {
582
- // Use 20 turns (beyond old default of 8 used in other tests) to verify no cap
583
- const turnCount = 20;
584
- const responses: ProviderResponse[] = [];
585
- for (let i = 0; i < turnCount; i++) {
586
- responses.push(
587
- toolUseResponse(`t${i}`, "read_file", { path: `/${i}.txt` }),
588
- );
589
- }
590
- responses.push(textResponse("done"));
591
- const { provider, calls } = createMockProvider(responses);
592
- const toolExecutor = async () => ({ content: "data", isError: false });
593
- const loop = new AgentLoop(
594
- provider,
595
- "system",
596
- { maxToolUseTurns: 0, minTurnIntervalMs: 0 },
597
- dummyTools,
598
- toolExecutor,
599
- );
600
-
601
- const events: AgentEvent[] = [];
602
- await loop.run([userMessage], collectEvents(events));
603
-
604
- // All 20 tool turns + 1 final text response = 21 provider calls
605
- expect(calls).toHaveLength(turnCount + 1);
606
-
607
- // No hard-limit error events should have been emitted
608
- const errorEvents = events.filter(
609
- (e): e is Extract<AgentEvent, { type: "error" }> => e.type === "error",
610
- );
611
- expect(errorEvents).toHaveLength(0);
612
-
613
- // Progress check reminders should still fire every 5 turns
614
- const progressChecks = calls.filter((call) => {
615
- const lastMsg = call.messages[call.messages.length - 1];
616
- return lastMsg.content.some(
617
- (b): b is Extract<ContentBlock, { type: "text" }> =>
618
- b.type === "text" && b.text.includes("making meaningful progress"),
619
- );
620
- });
621
- expect(progressChecks.length).toBeGreaterThanOrEqual(3);
622
-
623
- // No approaching-limit warnings should appear
624
- const limitWarnings = calls.filter((call) => {
625
- const lastMsg = call.messages[call.messages.length - 1];
626
- return lastMsg.content.some(
627
- (b): b is Extract<ContentBlock, { type: "text" }> =>
628
- b.type === "text" &&
629
- b.text.includes("approaching the tool-use turn limit"),
630
- );
631
- });
632
- expect(limitWarnings).toHaveLength(0);
633
- });
634
-
635
504
  // 9. Tool executor error results are forwarded correctly
636
505
  test("forwards tool error results to provider", async () => {
637
506
  const { provider, calls } = createMockProvider([
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Guard test: always-loaded tool count
3
+ *
4
+ * This test asserts the exact set of tools that are active when no client is
5
+ * connected, no host proxy is available, no attachments are present, and no
6
+ * special channel capabilities exist. This represents the minimal "always-loaded"
7
+ * baseline that is sent to the LLM on every turn.
8
+ *
9
+ * Adding a tool to this set increases token cost for every request. If this test
10
+ * fails because a new tool was added, update the assertion below and justify
11
+ * the token cost increase in the PR description.
12
+ */
13
+
14
+ import { afterAll, describe, expect, test } from "bun:test";
15
+
16
+ import {
17
+ buildToolDefinitions,
18
+ isToolActiveForContext,
19
+ type SkillProjectionContext,
20
+ } from "../daemon/session-tool-setup.js";
21
+ import {
22
+ __resetRegistryForTesting,
23
+ initializeTools,
24
+ } from "../tools/registry.js";
25
+
26
+ afterAll(() => {
27
+ __resetRegistryForTesting();
28
+ });
29
+
30
+ describe("always-loaded tool count", () => {
31
+ test("should be exactly 11 (no-client baseline excludes host tools)", async () => {
32
+ await initializeTools();
33
+ const allDefs = buildToolDefinitions();
34
+
35
+ // Minimal context: no client, no attachments, no capabilities
36
+ const minimalContext: SkillProjectionContext = {
37
+ skillProjectionState: new Map(),
38
+ skillProjectionCache: {},
39
+ coreToolNames: new Set(),
40
+ toolsDisabledDepth: 0,
41
+ hasNoClient: true,
42
+ hasAttachments: false,
43
+ channelCapabilities: undefined,
44
+ };
45
+
46
+ const activeTools = allDefs.filter((def) =>
47
+ isToolActiveForContext(def.name, minimalContext),
48
+ );
49
+ const activeNames = activeTools.map((t) => t.name).sort();
50
+
51
+ // Host tools (host_bash, host_file_*) are excluded when no client is
52
+ // connected — without a human in the loop, the guardian auto-approve
53
+ // path would allow unchecked host command execution.
54
+ const expectedNames = [
55
+ "bash",
56
+ "credential_store",
57
+ "file_edit",
58
+ "file_read",
59
+ "file_write",
60
+ "memory_manage",
61
+ "memory_recall",
62
+ "skill_execute",
63
+ "skill_load",
64
+ "web_fetch",
65
+ "web_search",
66
+ ].sort();
67
+
68
+ expect(activeNames).toEqual(expectedNames);
69
+ expect(activeTools.length).toBe(11);
70
+ });
71
+ });
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Verify that the Amazon CLI does NOT define its own CDP launch/window logic.
2
+ * Verify that the Amazon skill scripts do NOT define their own CDP launch/window logic.
3
3
  *
4
- * The Amazon CLI now uses browser extension relay instead of CDP for session
4
+ * The Amazon skill now uses browser extension relay instead of CDP for session
5
5
  * management, so we only verify that old inline CDP patterns are absent.
6
6
  */
7
7
 
@@ -9,21 +9,23 @@ import { readdirSync, readFileSync } from "node:fs";
9
9
  import { join } from "node:path";
10
10
  import { describe, expect, test } from "bun:test";
11
11
 
12
- const AMAZON_CLI_DIR = join(
12
+ const AMAZON_SCRIPTS_DIR = join(
13
13
  import.meta.dirname ?? __dirname,
14
14
  "..",
15
- "cli",
16
- "commands",
15
+ "..",
16
+ "..",
17
+ "skills",
17
18
  "amazon",
19
+ "scripts",
18
20
  );
19
21
 
20
- // Read all .ts files in the amazon/ directory and concatenate their source
21
- const amazonSource = readdirSync(AMAZON_CLI_DIR)
22
+ // Read all .ts files in the amazon/scripts/ directory and concatenate their source
23
+ const amazonSource = readdirSync(AMAZON_SCRIPTS_DIR)
22
24
  .filter((f) => f.endsWith(".ts"))
23
- .map((f) => readFileSync(join(AMAZON_CLI_DIR, f), "utf-8"))
25
+ .map((f) => readFileSync(join(AMAZON_SCRIPTS_DIR, f), "utf-8"))
24
26
  .join("\n");
25
27
 
26
- describe("Amazon CLI CDP integration", () => {
28
+ describe("Amazon skill CDP integration", () => {
27
29
  test("does not define its own CDP_BASE constant", () => {
28
30
  // The old inline constant was: const CDP_BASE = "http://localhost:9222";
29
31
  expect(amazonSource).not.toMatch(/const\s+CDP_BASE\s*=/);
@@ -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"),
@@ -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"),
@@ -47,6 +46,7 @@ mock.module("../config/loader.js", () => ({
47
46
  rateLimit: { maxRequestsPerMinute: 0, maxTokensPerSession: 0 },
48
47
  secretDetection: { enabled: false },
49
48
  sandbox: { enabled: false },
49
+ contextWindow: { maxInputTokens: 200000 },
50
50
  }),
51
51
  }));
52
52
 
@@ -112,8 +112,12 @@ function makeIdleSession(opts?: {
112
112
  setCommandIntent: () => {},
113
113
  setTurnChannelContext: () => {},
114
114
  setTurnInterfaceContext: () => {},
115
- setStateSignalListener: () => {},
115
+ ensureActorScopedHistory: async () => {},
116
+ getMessages: () => [],
117
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
116
118
  updateClient: () => {},
119
+ setHostBashProxy: () => {},
120
+ setHostFileProxy: () => {},
117
121
  enqueueMessage: () => ({ queued: false, requestId: "noop" }),
118
122
  hasAnyPendingConfirmation: () => false,
119
123
  runAgentLoop: async (
@@ -171,8 +175,12 @@ function makeConfirmationEmittingSession(opts?: {
171
175
  setCommandIntent: () => {},
172
176
  setTurnChannelContext: () => {},
173
177
  setTurnInterfaceContext: () => {},
174
- setStateSignalListener: () => {},
178
+ ensureActorScopedHistory: async () => {},
179
+ getMessages: () => [],
180
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
175
181
  updateClient: () => {},
182
+ setHostBashProxy: () => {},
183
+ setHostFileProxy: () => {},
176
184
  enqueueMessage: () => ({ queued: false, requestId: "noop" }),
177
185
  hasAnyPendingConfirmation: () => false,
178
186
  runAgentLoop: async (
@@ -13,7 +13,6 @@ mock.module("../util/platform.js", () => ({
13
13
  isMacOS: () => process.platform === "darwin",
14
14
  isLinux: () => process.platform === "linux",
15
15
  isWindows: () => process.platform === "win32",
16
- getSocketPath: () => join(testDir, "test.sock"),
17
16
  getPidPath: () => join(testDir, "test.pid"),
18
17
  getDbPath: () => join(testDir, "test.db"),
19
18
  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"),
@@ -423,7 +423,7 @@ describe("resolveHostDirective", () => {
423
423
  writeFileSync(join(TEST_DIR, "doc.txt"), "content");
424
424
 
425
425
  const failApprove = async () => {
426
- throw new Error("IPC disconnected");
426
+ throw new Error("connection lost");
427
427
  };
428
428
  const result = await resolveHostDirective(makeHostDirective(), failApprove);
429
429