@vellumai/assistant 0.4.44 → 0.4.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/.prettierignore +4 -0
  2. package/ARCHITECTURE.md +34 -31
  3. package/README.md +4 -4
  4. package/bun.lock +10 -35
  5. package/docs/architecture/integrations.md +102 -197
  6. package/docs/architecture/keychain-broker.md +1 -1
  7. package/docs/architecture/memory.md +2 -2
  8. package/docs/architecture/scheduling.md +1 -1
  9. package/docs/architecture/security.md +11 -11
  10. package/docs/error-handling.md +1 -1
  11. package/docs/trusted-contact-access.md +3 -3
  12. package/drizzle/meta/0000_snapshot.json +34 -100
  13. package/drizzle/meta/_journal.json +1 -1
  14. package/drizzle.config.ts +4 -4
  15. package/package.json +3 -2
  16. package/scripts/capture-x-graphql.ts +237 -141
  17. package/scripts/generate-bundled-tool-registry.ts +223 -0
  18. package/src/__tests__/access-request-decision.test.ts +0 -1
  19. package/src/__tests__/actor-token-service.test.ts +23 -24
  20. package/src/__tests__/agent-loop.test.ts +0 -131
  21. package/src/__tests__/always-loaded-tools-guard.test.ts +71 -0
  22. package/src/__tests__/amazon-cdp-integration.test.ts +11 -9
  23. package/src/__tests__/approval-primitive.test.ts +0 -1
  24. package/src/__tests__/approval-routes-http.test.ts +11 -1
  25. package/src/__tests__/asset-materialize-tool.test.ts +0 -1
  26. package/src/__tests__/asset-search-tool.test.ts +0 -1
  27. package/src/__tests__/assistant-attachment-directive.test.ts +1 -1
  28. package/src/__tests__/assistant-events-sse-hardening.test.ts +0 -1
  29. package/src/__tests__/assistant-feature-flag-guardrails.test.ts +0 -2
  30. package/src/__tests__/assistant-feature-flags-integration.test.ts +70 -18
  31. package/src/__tests__/assistant-id-boundary-guard.test.ts +6 -6
  32. package/src/__tests__/attachments-store.test.ts +0 -1
  33. package/src/__tests__/avatar-e2e.test.ts +74 -115
  34. package/src/__tests__/avatar-router.test.ts +25 -62
  35. package/src/__tests__/browser-manager.test.ts +24 -0
  36. package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +4 -3
  37. package/src/__tests__/browser-skill-endstate.test.ts +8 -11
  38. package/src/__tests__/btw-routes.test.ts +326 -0
  39. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +23 -9
  40. package/src/__tests__/call-controller.test.ts +0 -1
  41. package/src/__tests__/call-conversation-messages.test.ts +0 -1
  42. package/src/__tests__/call-domain.test.ts +0 -1
  43. package/src/__tests__/call-pointer-messages.test.ts +0 -1
  44. package/src/__tests__/call-recovery.test.ts +0 -1
  45. package/src/__tests__/call-routes-http.test.ts +0 -1
  46. package/src/__tests__/call-store.test.ts +0 -1
  47. package/src/__tests__/canonical-guardian-store.test.ts +0 -1
  48. package/src/__tests__/channel-approval-routes.test.ts +1 -1
  49. package/src/__tests__/channel-approvals.test.ts +1 -1
  50. package/src/__tests__/channel-delivery-store.test.ts +0 -1
  51. package/src/__tests__/channel-guardian.test.ts +5 -7
  52. package/src/__tests__/channel-retry-sweep.test.ts +0 -1
  53. package/src/__tests__/checker.test.ts +4 -11
  54. package/src/__tests__/compaction.benchmark.test.ts +16 -14
  55. package/src/__tests__/computer-use-session-lifecycle.test.ts +10 -11
  56. package/src/__tests__/computer-use-session-working-dir.test.ts +2 -6
  57. package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +2 -5
  58. package/src/__tests__/computer-use-tools.test.ts +35 -31
  59. package/src/__tests__/config-schema.test.ts +11 -15
  60. package/src/__tests__/config-watcher.test.ts +0 -1
  61. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
  62. package/src/__tests__/conflict-store.test.ts +0 -1
  63. package/src/__tests__/connection-policy.test.ts +4 -7
  64. package/src/__tests__/contacts-tools.test.ts +0 -1
  65. package/src/__tests__/context-memory-e2e.test.ts +2 -4
  66. package/src/__tests__/context-overflow-reducer.test.ts +2 -4
  67. package/src/__tests__/context-window-manager.test.ts +147 -60
  68. package/src/__tests__/contradiction-checker.test.ts +0 -1
  69. package/src/__tests__/conversation-attention-store.test.ts +0 -1
  70. package/src/__tests__/conversation-attention-telegram.test.ts +1 -1
  71. package/src/__tests__/conversation-pairing.test.ts +2 -2
  72. package/src/__tests__/conversation-routes-guardian-reply.test.ts +25 -1
  73. package/src/__tests__/conversation-routes-slash-commands.test.ts +381 -0
  74. package/src/__tests__/conversation-store.test.ts +0 -1
  75. package/src/__tests__/conversation-unread-route.test.ts +1 -2
  76. package/src/__tests__/credential-security-invariants.test.ts +7 -8
  77. package/src/__tests__/cross-provider-web-search.test.ts +353 -0
  78. package/src/__tests__/daemon-assistant-events.test.ts +6 -7
  79. package/src/__tests__/db-schedule-syntax-migration.test.ts +15 -3
  80. package/src/__tests__/delete-managed-skill-tool.test.ts +5 -9
  81. package/src/__tests__/deterministic-verification-control-plane.test.ts +0 -1
  82. package/src/__tests__/diagnostics-export.test.ts +189 -0
  83. package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -1
  84. package/src/__tests__/emit-signal-routing-intent.test.ts +3 -3
  85. package/src/__tests__/entity-extractor.test.ts +0 -1
  86. package/src/__tests__/entity-search.test.ts +0 -1
  87. package/src/__tests__/ephemeral-permissions.test.ts +2 -4
  88. package/src/__tests__/file-read-tool.test.ts +86 -0
  89. package/src/__tests__/followup-tools.test.ts +0 -1
  90. package/src/__tests__/frontmatter.test.ts +77 -34
  91. package/src/__tests__/gateway-only-enforcement.test.ts +0 -1
  92. package/src/__tests__/gateway-only-guard.test.ts +1 -1
  93. package/src/__tests__/guardian-action-conversation-turn.test.ts +0 -1
  94. package/src/__tests__/guardian-action-followup-executor.test.ts +0 -1
  95. package/src/__tests__/guardian-action-followup-store.test.ts +0 -1
  96. package/src/__tests__/guardian-action-grant-mint-consume.test.ts +0 -1
  97. package/src/__tests__/guardian-action-late-reply.test.ts +0 -1
  98. package/src/__tests__/guardian-action-store.test.ts +0 -1
  99. package/src/__tests__/guardian-action-sweep.test.ts +0 -1
  100. package/src/__tests__/guardian-decision-primitive-canonical.test.ts +0 -1
  101. package/src/__tests__/guardian-dispatch.test.ts +1 -2
  102. package/src/__tests__/guardian-grant-minting.test.ts +1 -1
  103. package/src/__tests__/guardian-outbound-http.test.ts +0 -1
  104. package/src/__tests__/guardian-principal-id-roundtrip.test.ts +0 -1
  105. package/src/__tests__/guardian-routing-invariants.test.ts +1 -1
  106. package/src/__tests__/guardian-routing-state.test.ts +0 -1
  107. package/src/__tests__/guardian-verification-voice-binding.test.ts +0 -1
  108. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +3 -5
  109. package/src/__tests__/handlers-user-message-approval-consumption.test.ts +28 -426
  110. package/src/__tests__/host-bash-proxy.test.ts +335 -0
  111. package/src/__tests__/host-file-proxy.test.ts +374 -0
  112. package/src/__tests__/host-shell-tool.test.ts +147 -1
  113. package/src/__tests__/http-user-message-parity.test.ts +361 -0
  114. package/src/__tests__/inbound-invite-redemption.test.ts +0 -1
  115. package/src/__tests__/integration-status.test.ts +3 -8
  116. package/src/__tests__/intent-routing.test.ts +7 -46
  117. package/src/__tests__/invite-redemption-service.test.ts +0 -1
  118. package/src/__tests__/invite-routes-http.test.ts +0 -1
  119. package/src/__tests__/llm-usage-store.test.ts +0 -1
  120. package/src/__tests__/managed-avatar-client.test.ts +101 -55
  121. package/src/__tests__/managed-skill-lifecycle.test.ts +9 -18
  122. package/src/__tests__/managed-store.test.ts +94 -21
  123. package/src/__tests__/media-reuse-story.e2e.test.ts +0 -1
  124. package/src/__tests__/memory-context-benchmark.benchmark.test.ts +2 -4
  125. package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -1
  126. package/src/__tests__/memory-recall-quality.test.ts +0 -1
  127. package/src/__tests__/memory-regressions.experimental.test.ts +0 -1
  128. package/src/__tests__/memory-regressions.test.ts +0 -1
  129. package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -1
  130. package/src/__tests__/memory-upsert-concurrency.test.ts +0 -1
  131. package/src/__tests__/messaging-send-tool.test.ts +35 -0
  132. package/src/__tests__/messaging-skill-split.test.ts +138 -0
  133. package/src/__tests__/migration-cross-version-compatibility.test.ts +0 -1
  134. package/src/__tests__/migration-export-http.test.ts +2 -3
  135. package/src/__tests__/migration-import-commit-http.test.ts +1 -2
  136. package/src/__tests__/migration-import-preflight-http.test.ts +1 -2
  137. package/src/__tests__/migration-validate-http.test.ts +1 -2
  138. package/src/__tests__/native-web-search.test.ts +475 -0
  139. package/src/__tests__/navigate-settings-tab.test.ts +84 -0
  140. package/src/__tests__/non-member-access-request.test.ts +0 -1
  141. package/src/__tests__/notification-broadcaster.test.ts +15 -15
  142. package/src/__tests__/notification-decision-strategy.test.ts +6 -6
  143. package/src/__tests__/notification-deep-link.test.ts +7 -7
  144. package/src/__tests__/notification-guardian-path.test.ts +2 -3
  145. package/src/__tests__/notification-telegram-adapter.test.ts +1 -1
  146. package/src/__tests__/notification-thread-candidates.test.ts +4 -4
  147. package/src/__tests__/onboarding-starter-tasks.test.ts +0 -1
  148. package/src/__tests__/playbook-execution.test.ts +0 -1
  149. package/src/__tests__/playbook-tools.test.ts +0 -1
  150. package/src/__tests__/profile-compiler.test.ts +0 -1
  151. package/src/__tests__/provider-managed-proxy-integration.test.ts +25 -0
  152. package/src/__tests__/qdrant-collection-migration.test.ts +223 -0
  153. package/src/__tests__/recording-handler.test.ts +30 -94
  154. package/src/__tests__/registry.test.ts +28 -35
  155. package/src/__tests__/relay-server.test.ts +0 -1
  156. package/src/__tests__/ride-shotgun-handler.test.ts +4 -20
  157. package/src/__tests__/runtime-attachment-metadata.test.ts +0 -1
  158. package/src/__tests__/runtime-events-sse-parity.test.ts +3 -4
  159. package/src/__tests__/runtime-events-sse.test.ts +0 -1
  160. package/src/__tests__/sandbox-diagnostics.test.ts +0 -1
  161. package/src/__tests__/scaffold-managed-skill-tool.test.ts +30 -28
  162. package/src/__tests__/schedule-store.test.ts +441 -1
  163. package/src/__tests__/schedule-tools.test.ts +468 -7
  164. package/src/__tests__/scheduler-recurrence.test.ts +196 -23
  165. package/src/__tests__/scoped-approval-grants.test.ts +0 -1
  166. package/src/__tests__/scoped-grant-security-matrix.test.ts +0 -1
  167. package/src/__tests__/secret-prompt-log-hygiene.test.ts +6 -3
  168. package/src/__tests__/secret-response-routing.test.ts +4 -1
  169. package/src/__tests__/send-endpoint-busy.test.ts +14 -2
  170. package/src/__tests__/send-notification-tool.test.ts +0 -7
  171. package/src/__tests__/sequence-store.test.ts +0 -1
  172. package/src/__tests__/server-history-render.test.ts +1 -2
  173. package/src/__tests__/session-abort-tool-results.test.ts +0 -1
  174. package/src/__tests__/session-agent-loop.test.ts +46 -6
  175. package/src/__tests__/session-confirmation-signals.test.ts +0 -1
  176. package/src/__tests__/session-conflict-gate.test.ts +2 -6
  177. package/src/__tests__/session-error.test.ts +5 -14
  178. package/src/__tests__/session-init.benchmark.test.ts +3 -5
  179. package/src/__tests__/session-load-history-repair.test.ts +0 -1
  180. package/src/__tests__/session-media-retry.test.ts +12 -74
  181. package/src/__tests__/session-pre-run-repair.test.ts +0 -1
  182. package/src/__tests__/session-profile-injection.test.ts +2 -6
  183. package/src/__tests__/session-provider-retry-repair.test.ts +2 -6
  184. package/src/__tests__/session-queue.test.ts +94 -139
  185. package/src/__tests__/session-skill-tools.test.ts +115 -115
  186. package/src/__tests__/session-slash-known.test.ts +0 -1
  187. package/src/__tests__/session-slash-queue.test.ts +0 -1
  188. package/src/__tests__/session-slash-unknown.test.ts +0 -1
  189. package/src/__tests__/session-surfaces-task-progress.test.ts +34 -0
  190. package/src/__tests__/session-usage.test.ts +0 -1
  191. package/src/__tests__/session-workspace-cache-state.test.ts +2 -6
  192. package/src/__tests__/session-workspace-injection.test.ts +2 -6
  193. package/src/__tests__/session-workspace-tool-tracking.test.ts +2 -6
  194. package/src/__tests__/skill-feature-flags-integration.test.ts +180 -184
  195. package/src/__tests__/skill-feature-flags.test.ts +125 -18
  196. package/src/__tests__/skill-load-feature-flag.test.ts +1 -2
  197. package/src/__tests__/skill-load-tool.test.ts +194 -2
  198. package/src/__tests__/skill-projection-feature-flag.test.ts +27 -16
  199. package/src/__tests__/skill-projection.benchmark.test.ts +15 -14
  200. package/src/__tests__/skills.test.ts +14 -53
  201. package/src/__tests__/slack-channel-config.test.ts +0 -1
  202. package/src/__tests__/slack-inbound-verification.test.ts +0 -1
  203. package/src/__tests__/slack-skill.test.ts +1 -1
  204. package/src/__tests__/subagent-tools.test.ts +2 -2
  205. package/src/__tests__/system-prompt.test.ts +4 -3
  206. package/src/__tests__/task-compiler.test.ts +0 -1
  207. package/src/__tests__/task-management-tools.test.ts +0 -1
  208. package/src/__tests__/task-memory-cleanup.test.ts +0 -1
  209. package/src/__tests__/task-runner.test.ts +0 -1
  210. package/src/__tests__/task-scheduler.test.ts +0 -1
  211. package/src/__tests__/terminal-tools.test.ts +0 -1
  212. package/src/__tests__/test-support/computer-use-skill-harness.ts +2 -4
  213. package/src/__tests__/thread-seed-composer.test.ts +5 -5
  214. package/src/__tests__/tool-approval-handler.test.ts +0 -1
  215. package/src/__tests__/tool-execution-abort-cleanup.test.ts +0 -1
  216. package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -1
  217. package/src/__tests__/tool-executor.test.ts +8 -86
  218. package/src/__tests__/tool-grant-request-escalation.test.ts +0 -1
  219. package/src/__tests__/tool-notification-listener.test.ts +1 -1
  220. package/src/__tests__/tool-preview-lifecycle.test.ts +416 -0
  221. package/src/__tests__/trust-store.test.ts +80 -4
  222. package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
  223. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +0 -1
  224. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +0 -1
  225. package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
  226. package/src/__tests__/trusted-contact-verification.test.ts +0 -1
  227. package/src/__tests__/twilio-provider.test.ts +0 -1
  228. package/src/__tests__/twilio-routes.test.ts +0 -1
  229. package/src/__tests__/{request-file-tool.test.ts → ui-file-upload-surface.test.ts} +11 -72
  230. package/src/__tests__/update-bulletin.test.ts +0 -1
  231. package/src/__tests__/usage-cache-backfill-migration.test.ts +0 -1
  232. package/src/__tests__/usage-routes.test.ts +0 -1
  233. package/src/__tests__/verification-control-plane-policy.test.ts +4 -4
  234. package/src/__tests__/voice-invite-redemption.test.ts +0 -1
  235. package/src/__tests__/voice-scoped-grant-consumer.test.ts +0 -1
  236. package/src/__tests__/voice-session-bridge.test.ts +9 -1
  237. package/src/__tests__/web-fetch.test.ts +57 -0
  238. package/src/__tests__/workspace-git-service.test.ts +5 -14
  239. package/src/__tests__/workspace-policy.test.ts +0 -1
  240. package/src/agent/loop.ts +22 -34
  241. package/src/bundler/bundle-signer.ts +4 -4
  242. package/src/calls/call-controller.ts +1 -1
  243. package/src/calls/relay-server.ts +1 -1
  244. package/src/calls/twilio-rest.ts +1 -1
  245. package/src/calls/voice-session-bridge.ts +3 -1
  246. package/src/cli/__tests__/notifications.test.ts +3 -4
  247. package/src/cli/commands/map.ts +2 -6
  248. package/src/cli/commands/mcp.ts +73 -15
  249. package/src/cli/commands/notifications.ts +4 -4
  250. package/src/cli/commands/sessions.ts +9 -1
  251. package/src/cli/commands/skills.ts +6 -10
  252. package/src/cli/http-client.ts +2 -3
  253. package/src/cli/main-screen.tsx +10 -10
  254. package/src/cli/program.ts +0 -4
  255. package/src/cli/reference.ts +0 -2
  256. package/src/cli.ts +15 -9
  257. package/src/config/__tests__/bundled-tool-registry-guard.test.ts +120 -0
  258. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +11 -0
  259. package/src/config/bundled-skills/app-builder/SKILL.md +6 -1
  260. package/src/config/bundled-skills/browser/SKILL.md +6 -1
  261. package/src/config/bundled-skills/chatgpt-import/SKILL.md +5 -1
  262. package/src/config/bundled-skills/claude-code/SKILL.md +5 -1
  263. package/src/config/bundled-skills/computer-use/SKILL.md +6 -1
  264. package/src/config/bundled-skills/computer-use/TOOLS.json +6 -69
  265. package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +10 -1
  266. package/src/config/bundled-skills/contacts/SKILL.md +10 -1
  267. package/src/config/bundled-skills/contacts/TOOLS.json +35 -0
  268. package/src/config/bundled-skills/{messaging → contacts}/tools/google-contacts.ts +9 -2
  269. package/src/config/bundled-skills/document/SKILL.md +4 -1
  270. package/src/config/bundled-skills/doordash/SKILL.md +8 -1
  271. package/src/config/bundled-skills/doordash/lib/shared/platform.ts +4 -1
  272. package/src/config/bundled-skills/followups/SKILL.md +4 -1
  273. package/src/config/bundled-skills/gmail/SKILL.md +180 -0
  274. package/src/config/bundled-skills/gmail/TOOLS.json +506 -0
  275. package/src/config/bundled-skills/gmail/tools/gmail-archive.ts +149 -0
  276. package/src/config/bundled-skills/gmail/tools/gmail-attachments.ts +110 -0
  277. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-draft.ts +1 -1
  278. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-filters.ts +1 -1
  279. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-follow-up.ts +1 -1
  280. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-forward.ts +1 -1
  281. package/src/config/bundled-skills/gmail/tools/gmail-label.ts +50 -0
  282. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-outreach-scan.ts +8 -90
  283. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-send-draft.ts +1 -1
  284. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-sender-digest.ts +2 -2
  285. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-trash.ts +1 -1
  286. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-unsubscribe.ts +1 -1
  287. package/src/config/bundled-skills/{messaging → gmail}/tools/gmail-vacation.ts +1 -1
  288. package/src/config/bundled-skills/gmail/tools/shared.ts +47 -0
  289. package/src/config/bundled-skills/google-calendar/SKILL.md +5 -1
  290. package/src/config/bundled-skills/image-studio/SKILL.md +5 -1
  291. package/src/config/bundled-skills/knowledge-graph/SKILL.md +4 -1
  292. package/src/config/bundled-skills/media-processing/SKILL.md +7 -13
  293. package/src/config/bundled-skills/media-processing/TOOLS.json +0 -22
  294. package/src/config/bundled-skills/media-processing/tools/generate-clip.ts +12 -1
  295. package/src/config/bundled-skills/messaging/SKILL.md +23 -139
  296. package/src/config/bundled-skills/messaging/TOOLS.json +33 -1215
  297. package/src/config/bundled-skills/messaging/tools/gmail-mime-helpers.ts +42 -0
  298. package/src/config/bundled-skills/messaging/tools/messaging-send.ts +165 -2
  299. package/src/config/bundled-skills/messaging/tools/messaging-sender-digest.ts +1 -13
  300. package/src/config/bundled-skills/messaging/tools/shared.ts +81 -34
  301. package/src/config/bundled-skills/notifications/SKILL.md +5 -1
  302. package/src/config/bundled-skills/orchestration/SKILL.md +30 -0
  303. package/src/config/bundled-skills/orchestration/TOOLS.json +35 -0
  304. package/src/config/bundled-skills/{reminder/tools/reminder-create.ts → orchestration/tools/swarm-delegate.ts} +3 -3
  305. package/src/config/bundled-skills/phone-calls/SKILL.md +9 -1
  306. package/src/config/bundled-skills/playbooks/SKILL.md +4 -1
  307. package/src/config/bundled-skills/schedule/SKILL.md +70 -9
  308. package/src/config/bundled-skills/schedule/TOOLS.json +38 -6
  309. package/src/config/bundled-skills/screen-watch/SKILL.md +28 -0
  310. package/src/config/bundled-skills/screen-watch/TOOLS.json +35 -0
  311. package/src/config/bundled-skills/{reminder/tools/reminder-cancel.ts → screen-watch/tools/start-screen-watch.ts} +3 -3
  312. package/src/config/bundled-skills/sequences/SKILL.md +47 -0
  313. package/src/config/bundled-skills/sequences/TOOLS.json +340 -0
  314. package/src/config/bundled-skills/sequences/tools/sequence-update.ts +128 -0
  315. package/src/config/bundled-skills/sequences/tools/shared.ts +9 -0
  316. package/src/config/bundled-skills/settings/SKILL.md +12 -0
  317. package/src/config/bundled-skills/settings/TOOLS.json +112 -0
  318. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +43 -0
  319. package/src/config/bundled-skills/settings/tools/open-system-settings.ts +52 -0
  320. package/src/config/bundled-skills/{computer-use/tools/computer-use-right-click.ts → settings/tools/set-avatar.ts} +2 -6
  321. package/src/{tools/system/voice-config.ts → config/bundled-skills/settings/tools/voice-config-update.ts} +59 -96
  322. package/src/config/bundled-skills/skill-management/SKILL.md +18 -0
  323. package/src/config/bundled-skills/skill-management/TOOLS.json +90 -0
  324. package/src/config/bundled-skills/{computer-use/tools/computer-use-double-click.ts → skill-management/tools/delete-managed.ts} +2 -6
  325. package/src/config/bundled-skills/skill-management/tools/scaffold-managed.ts +12 -0
  326. package/src/config/bundled-skills/slack/SKILL.md +5 -1
  327. package/src/config/bundled-skills/subagent/SKILL.md +4 -1
  328. package/src/config/bundled-skills/tasks/SKILL.md +5 -2
  329. package/src/config/bundled-skills/transcribe/SKILL.md +4 -1
  330. package/src/config/bundled-skills/watcher/SKILL.md +4 -1
  331. package/src/config/bundled-tool-registry.ts +118 -107
  332. package/src/config/env.ts +5 -2
  333. package/src/config/feature-flag-registry.json +25 -9
  334. package/src/config/loader.ts +10 -2
  335. package/src/config/schema.ts +19 -16
  336. package/src/config/schemas/inference.ts +12 -22
  337. package/src/config/schemas/memory-storage.ts +19 -1
  338. package/src/config/schemas/platform.ts +0 -16
  339. package/src/config/skill-state.ts +11 -8
  340. package/src/config/skills.ts +83 -32
  341. package/src/context/token-estimator.ts +11 -0
  342. package/src/context/window-manager.ts +180 -151
  343. package/src/daemon/computer-use-session.ts +11 -43
  344. package/src/daemon/daemon-control.ts +4 -1
  345. package/src/daemon/handlers/config-channels.ts +5 -9
  346. package/src/daemon/handlers/config-ingress.ts +0 -4
  347. package/src/daemon/handlers/config-model.ts +7 -13
  348. package/src/daemon/handlers/config-telegram.ts +4 -8
  349. package/src/daemon/handlers/config-voice.ts +2 -5
  350. package/src/daemon/handlers/dictation.ts +2 -12
  351. package/src/daemon/handlers/identity.ts +0 -105
  352. package/src/daemon/handlers/recording.ts +3 -23
  353. package/src/daemon/handlers/session-history.ts +1 -1
  354. package/src/daemon/handlers/sessions.ts +53 -72
  355. package/src/daemon/handlers/shared.ts +7 -28
  356. package/src/daemon/handlers/skills.ts +31 -27
  357. package/src/daemon/host-bash-proxy.ts +148 -0
  358. package/src/daemon/host-file-proxy.ts +135 -0
  359. package/src/daemon/lifecycle.ts +49 -24
  360. package/src/daemon/mcp-reload-service.ts +123 -0
  361. package/src/daemon/message-protocol.ts +6 -0
  362. package/src/daemon/message-types/browser.ts +1 -1
  363. package/src/daemon/message-types/computer-use.ts +1 -4
  364. package/src/daemon/message-types/guardian-actions.ts +1 -1
  365. package/src/daemon/message-types/host-bash.ts +18 -0
  366. package/src/daemon/message-types/host-file.ts +44 -0
  367. package/src/daemon/message-types/integrations.ts +1 -67
  368. package/src/daemon/message-types/messages.ts +15 -0
  369. package/src/daemon/message-types/schedules.ts +11 -27
  370. package/src/daemon/message-types/sessions.ts +2 -1
  371. package/src/daemon/message-types/settings.ts +1 -1
  372. package/src/daemon/message-types/shared.ts +1 -1
  373. package/src/daemon/ride-shotgun-handler.ts +2 -42
  374. package/src/daemon/server.ts +43 -10
  375. package/src/daemon/session-agent-loop-handlers.ts +48 -7
  376. package/src/daemon/session-agent-loop.ts +97 -66
  377. package/src/daemon/session-attachments.ts +1 -1
  378. package/src/daemon/session-error.ts +17 -16
  379. package/src/daemon/session-lifecycle.ts +20 -1
  380. package/src/daemon/session-media-retry.ts +1 -15
  381. package/src/daemon/session-messaging.ts +14 -6
  382. package/src/daemon/session-process.ts +36 -7
  383. package/src/daemon/session-queue-manager.ts +62 -103
  384. package/src/daemon/session-runtime-assembly.ts +27 -0
  385. package/src/daemon/session-skill-tools.ts +12 -11
  386. package/src/daemon/session-slash.ts +7 -0
  387. package/src/daemon/session-surfaces.ts +19 -97
  388. package/src/daemon/session-tool-setup.ts +146 -6
  389. package/src/daemon/session.ts +77 -13
  390. package/src/errors.ts +0 -2
  391. package/src/export/formatter.ts +6 -0
  392. package/src/mcp/mcp-oauth-provider.ts +1 -3
  393. package/src/media/avatar-router.ts +20 -28
  394. package/src/media/avatar-types.ts +7 -14
  395. package/src/media/managed-avatar-client.ts +70 -34
  396. package/src/memory/conversation-title-service.ts +1 -2
  397. package/src/memory/db-init.ts +16 -0
  398. package/src/memory/embedding-backend.ts +129 -27
  399. package/src/memory/embedding-gemini.test.ts +256 -0
  400. package/src/memory/embedding-gemini.ts +47 -13
  401. package/src/memory/embedding-local.ts +14 -2
  402. package/src/memory/embedding-ollama.ts +15 -2
  403. package/src/memory/embedding-openai.ts +15 -2
  404. package/src/memory/embedding-types.test.ts +116 -0
  405. package/src/memory/embedding-types.ts +61 -0
  406. package/src/memory/fingerprint.ts +1 -1
  407. package/src/memory/indexer.ts +25 -1
  408. package/src/memory/job-handlers/embedding.test.ts +258 -0
  409. package/src/memory/job-handlers/embedding.ts +81 -1
  410. package/src/memory/job-handlers/index-maintenance.ts +35 -1
  411. package/src/memory/job-handlers/media-processing.ts +11 -1
  412. package/src/memory/job-utils.ts +21 -6
  413. package/src/memory/jobs-store.ts +5 -1
  414. package/src/memory/jobs-worker.ts +8 -0
  415. package/src/memory/message-content.ts +66 -0
  416. package/src/memory/migrations/100-core-tables.ts +1 -31
  417. package/src/memory/migrations/104-core-indexes.ts +0 -11
  418. package/src/memory/migrations/145-drop-accounts-table.ts +19 -0
  419. package/src/memory/migrations/146-schedule-oneshot-routing.ts +94 -0
  420. package/src/memory/migrations/147-migrate-reminders-to-schedules.ts +129 -0
  421. package/src/memory/migrations/148-drop-reminders-table.ts +18 -0
  422. package/src/memory/migrations/index.ts +4 -0
  423. package/src/memory/migrations/registry.ts +19 -0
  424. package/src/memory/qdrant-client.ts +158 -43
  425. package/src/memory/retriever.test.ts +0 -1
  426. package/src/memory/retriever.ts +12 -2
  427. package/src/memory/schema/infrastructure.ts +5 -29
  428. package/src/memory/search/formatting.ts +34 -9
  429. package/src/memory/search/semantic.ts +57 -2
  430. package/src/memory/search/types.ts +2 -1
  431. package/src/notifications/AGENTS.md +2 -2
  432. package/src/notifications/README.md +59 -58
  433. package/src/notifications/adapters/macos.ts +1 -1
  434. package/src/notifications/broadcaster.ts +5 -5
  435. package/src/notifications/copy-composer.ts +1 -1
  436. package/src/notifications/decision-engine.ts +2 -2
  437. package/src/notifications/destination-resolver.ts +2 -2
  438. package/src/notifications/emit-signal.ts +8 -8
  439. package/src/notifications/signal.ts +1 -1
  440. package/src/notifications/thread-seed-composer.ts +1 -1
  441. package/src/oauth/connect-orchestrator.ts +1 -1
  442. package/src/oauth/token-persistence.ts +1 -1
  443. package/src/permissions/checker.ts +12 -1
  444. package/src/permissions/defaults.ts +10 -14
  445. package/src/permissions/trust-store.ts +37 -0
  446. package/src/permissions/workspace-policy.ts +0 -1
  447. package/src/prompts/__tests__/build-cli-reference-section.test.ts +11 -0
  448. package/src/prompts/computer-use-prompt.ts +1 -1
  449. package/src/prompts/system-prompt.ts +29 -30
  450. package/src/prompts/templates/SOUL.md +1 -2
  451. package/src/prompts/templates/UPDATES.md +16 -7
  452. package/src/providers/anthropic/client.ts +87 -33
  453. package/src/providers/gemini/client.ts +6 -0
  454. package/src/providers/managed-proxy/constants.ts +5 -0
  455. package/src/providers/openai/client.ts +15 -0
  456. package/src/providers/registry.ts +2 -2
  457. package/src/providers/types.ts +24 -2
  458. package/src/runtime/AGENTS.md +18 -0
  459. package/src/runtime/assistant-event-hub.ts +2 -3
  460. package/src/runtime/assistant-event.ts +4 -4
  461. package/src/runtime/auth/__tests__/context.test.ts +5 -5
  462. package/src/runtime/auth/__tests__/credential-service.test.ts +0 -1
  463. package/src/runtime/auth/__tests__/guard-tests.test.ts +2 -2
  464. package/src/runtime/auth/__tests__/{ipc-auth-context.test.ts → local-auth-context.test.ts} +21 -21
  465. package/src/runtime/auth/__tests__/route-policy.test.ts +2 -2
  466. package/src/runtime/auth/__tests__/scopes.test.ts +7 -7
  467. package/src/runtime/auth/__tests__/subject.test.ts +8 -8
  468. package/src/runtime/auth/__tests__/token-service.test.ts +0 -1
  469. package/src/runtime/auth/route-policy.ts +8 -4
  470. package/src/runtime/auth/scopes.ts +1 -1
  471. package/src/runtime/auth/subject.ts +4 -4
  472. package/src/runtime/auth/token-service.ts +0 -23
  473. package/src/runtime/auth/types.ts +3 -3
  474. package/src/runtime/guardian-action-followup-executor.ts +1 -1
  475. package/src/runtime/guardian-action-grant-minter.ts +1 -1
  476. package/src/runtime/guardian-action-service.ts +3 -3
  477. package/src/runtime/http-server.ts +15 -2
  478. package/src/runtime/invite-service.ts +3 -3
  479. package/src/runtime/local-actor-identity.ts +17 -22
  480. package/src/runtime/pending-interactions.ts +21 -9
  481. package/src/runtime/routes/app-management-routes.ts +2 -3
  482. package/src/runtime/routes/approval-routes.ts +1 -3
  483. package/src/runtime/routes/btw-routes.ts +155 -0
  484. package/src/runtime/routes/computer-use-routes.ts +77 -31
  485. package/src/runtime/routes/conversation-routes.ts +230 -46
  486. package/src/runtime/routes/diagnostics-routes.ts +63 -29
  487. package/src/runtime/routes/documents-routes.ts +2 -2
  488. package/src/runtime/routes/global-search-routes.ts +1 -1
  489. package/src/runtime/routes/host-bash-routes.ts +83 -0
  490. package/src/runtime/routes/host-file-routes.ts +79 -0
  491. package/src/runtime/routes/integrations/slack/share.ts +1 -1
  492. package/src/runtime/routes/log-export-routes.ts +120 -0
  493. package/src/runtime/routes/mcp-routes.ts +20 -0
  494. package/src/runtime/routes/migration-routes.ts +3 -3
  495. package/src/runtime/routes/pairing-routes.ts +1 -1
  496. package/src/runtime/routes/recording-routes.ts +6 -4
  497. package/src/runtime/routes/schedule-routes.ts +31 -5
  498. package/src/runtime/routes/session-management-routes.ts +2 -6
  499. package/src/runtime/routes/session-query-routes.ts +18 -15
  500. package/src/runtime/routes/settings-routes.ts +7 -261
  501. package/src/runtime/routes/skills-routes.ts +7 -6
  502. package/src/runtime/routes/subagents-routes.ts +4 -10
  503. package/src/runtime/routes/surface-action-routes.ts +3 -14
  504. package/src/runtime/routes/surface-content-routes.ts +22 -5
  505. package/src/runtime/routes/work-items-routes.ts +21 -25
  506. package/src/runtime/routes/workspace-routes.test.ts +3 -3
  507. package/src/runtime/routes/workspace-utils.ts +1 -1
  508. package/src/runtime/telegram-streaming-delivery.ts +3 -0
  509. package/src/runtime/verification-outbound-actions.ts +2 -2
  510. package/src/schedule/integration-status.ts +0 -6
  511. package/src/schedule/schedule-store.ts +234 -43
  512. package/src/schedule/scheduler.ts +73 -74
  513. package/src/security/oauth2.ts +1 -1
  514. package/src/sequence/store.ts +12 -2
  515. package/src/skills/frontmatter.ts +19 -77
  516. package/src/skills/managed-store.ts +11 -2
  517. package/src/subagent/manager.ts +5 -3
  518. package/src/tasks/ephemeral-permissions.ts +3 -5
  519. package/src/tools/AGENTS.md +0 -1
  520. package/src/tools/browser/browser-manager.ts +17 -11
  521. package/src/tools/browser/jit-auth.ts +4 -1
  522. package/src/tools/claude-code/claude-code.ts +1 -1
  523. package/src/tools/computer-use/definitions.ts +48 -60
  524. package/src/tools/document/document-tool.ts +6 -6
  525. package/src/tools/filesystem/edit.ts +2 -1
  526. package/src/tools/filesystem/read.ts +20 -2
  527. package/src/tools/filesystem/write.ts +2 -1
  528. package/src/tools/host-filesystem/edit.ts +17 -1
  529. package/src/tools/host-filesystem/read.ts +16 -1
  530. package/src/tools/host-filesystem/write.ts +15 -1
  531. package/src/tools/host-terminal/host-shell.ts +24 -0
  532. package/src/tools/memory/definitions.ts +45 -81
  533. package/src/tools/memory/handlers.test.ts +0 -1
  534. package/src/tools/memory/handlers.ts +1 -1
  535. package/src/tools/memory/register.ts +26 -60
  536. package/src/tools/network/script-proxy/session-manager.ts +6 -8
  537. package/src/tools/network/web-fetch.ts +7 -1
  538. package/src/tools/network/web-search.ts +2 -1
  539. package/src/tools/registry.ts +23 -0
  540. package/src/tools/schedule/create.ts +113 -5
  541. package/src/tools/schedule/list.ts +57 -15
  542. package/src/tools/schedule/update.ts +73 -3
  543. package/src/tools/shared/filesystem/image-read.ts +192 -0
  544. package/src/tools/side-effects.ts +1 -7
  545. package/src/tools/skills/delete-managed.ts +27 -64
  546. package/src/tools/skills/execute.ts +54 -0
  547. package/src/tools/skills/load.ts +127 -5
  548. package/src/tools/skills/scaffold-managed.ts +93 -172
  549. package/src/tools/subagent/message.ts +0 -7
  550. package/src/tools/subagent/spawn.ts +1 -1
  551. package/src/tools/swarm/delegate.ts +0 -3
  552. package/src/tools/system/avatar-generator.ts +13 -19
  553. package/src/tools/system/request-permission.ts +2 -1
  554. package/src/tools/terminal/safe-env.ts +1 -0
  555. package/src/tools/tool-manifest.ts +41 -47
  556. package/src/tools/types.ts +6 -2
  557. package/src/tools/ui-surface/definitions.ts +0 -55
  558. package/src/util/errors.ts +0 -10
  559. package/src/workspace/git-service.ts +0 -2
  560. package/src/__tests__/account-registry.test.ts +0 -258
  561. package/src/__tests__/email-classifier.test.ts +0 -25
  562. package/src/__tests__/gmail-integration.test.ts +0 -97
  563. package/src/__tests__/handle-user-message-secret-resume.test.ts +0 -172
  564. package/src/__tests__/managed-twitter-guardrails.test.ts +0 -357
  565. package/src/__tests__/recording-intent-fallback.test.ts +0 -199
  566. package/src/__tests__/recording-intent.test.ts +0 -985
  567. package/src/__tests__/recording-state-machine.test.ts +0 -1574
  568. package/src/__tests__/reminder-store.test.ts +0 -350
  569. package/src/__tests__/reminder.test.ts +0 -337
  570. package/src/__tests__/scan-result-store.test.ts +0 -121
  571. package/src/__tests__/twitter-platform-proxy-client.test.ts +0 -475
  572. package/src/__tests__/view-image-tool.test.ts +0 -241
  573. package/src/cli/commands/amazon/cart.ts +0 -513
  574. package/src/cli/commands/amazon/checkout.ts +0 -394
  575. package/src/cli/commands/amazon/client.ts +0 -513
  576. package/src/cli/commands/amazon/index.ts +0 -885
  577. package/src/cli/commands/amazon/product-details.ts +0 -145
  578. package/src/cli/commands/amazon/request-extractor.ts +0 -187
  579. package/src/cli/commands/amazon/search.ts +0 -76
  580. package/src/cli/commands/amazon/session.ts +0 -108
  581. package/src/cli/commands/twitter/__tests__/cli-read-routing.test.ts +0 -345
  582. package/src/cli/commands/twitter/__tests__/cli-routing.test.ts +0 -252
  583. package/src/cli/commands/twitter/__tests__/oauth-client.test.ts +0 -151
  584. package/src/cli/commands/twitter/index.ts +0 -420
  585. package/src/cli/commands/twitter/oauth-client.ts +0 -60
  586. package/src/cli/commands/twitter/router.ts +0 -351
  587. package/src/cli/commands/twitter/types.ts +0 -30
  588. package/src/config/bundled-skills/agentmail/SKILL.md +0 -132
  589. package/src/config/bundled-skills/agentmail/icon.svg +0 -21
  590. package/src/config/bundled-skills/amazon/SKILL.md +0 -136
  591. package/src/config/bundled-skills/amazon/icon.svg +0 -13
  592. package/src/config/bundled-skills/api-mapping/SKILL.md +0 -78
  593. package/src/config/bundled-skills/api-mapping/icon.svg +0 -18
  594. package/src/config/bundled-skills/cli-discover/SKILL.md +0 -68
  595. package/src/config/bundled-skills/deploy-fullstack-vercel/SKILL.md +0 -179
  596. package/src/config/bundled-skills/document-writer/SKILL.md +0 -195
  597. package/src/config/bundled-skills/elevenlabs-voice/SKILL.md +0 -140
  598. package/src/config/bundled-skills/email-setup/SKILL.md +0 -68
  599. package/src/config/bundled-skills/frontend-design/SKILL.md +0 -44
  600. package/src/config/bundled-skills/frontend-design/icon.svg +0 -16
  601. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +0 -452
  602. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +0 -203
  603. package/src/config/bundled-skills/influencer/SKILL.md +0 -144
  604. package/src/config/bundled-skills/influencer/scripts/client.ts +0 -1269
  605. package/src/config/bundled-skills/influencer/scripts/influencer.ts +0 -267
  606. package/src/config/bundled-skills/macos-automation/SKILL.md +0 -65
  607. package/src/config/bundled-skills/macos-automation/icon.svg +0 -12
  608. package/src/config/bundled-skills/mcp-setup/SKILL.md +0 -75
  609. package/src/config/bundled-skills/media-processing/tools/media-diagnostics.ts +0 -184
  610. package/src/config/bundled-skills/messaging/tools/gmail-archive-by-query.ts +0 -80
  611. package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -29
  612. package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -56
  613. package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -34
  614. package/src/config/bundled-skills/messaging/tools/gmail-download-attachment.ts +0 -47
  615. package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -31
  616. package/src/config/bundled-skills/messaging/tools/gmail-list-attachments.ts +0 -67
  617. package/src/config/bundled-skills/messaging/tools/gmail-send-with-attachments.ts +0 -97
  618. package/src/config/bundled-skills/messaging/tools/gmail-summarize-thread.ts +0 -87
  619. package/src/config/bundled-skills/messaging/tools/gmail-triage.ts +0 -135
  620. package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -24
  621. package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -201
  622. package/src/config/bundled-skills/messaging/tools/send-notification.ts +0 -1
  623. package/src/config/bundled-skills/messaging/tools/sequence-cancel.ts +0 -27
  624. package/src/config/bundled-skills/messaging/tools/sequence-pause.ts +0 -48
  625. package/src/config/bundled-skills/messaging/tools/sequence-resume.ts +0 -27
  626. package/src/config/bundled-skills/messaging/tools/sequence-update.ts +0 -56
  627. package/src/config/bundled-skills/notion/SKILL.md +0 -240
  628. package/src/config/bundled-skills/notion-oauth-setup/SKILL.md +0 -126
  629. package/src/config/bundled-skills/oauth-setup/SKILL.md +0 -143
  630. package/src/config/bundled-skills/public-ingress/SKILL.md +0 -258
  631. package/src/config/bundled-skills/reminder/SKILL.md +0 -79
  632. package/src/config/bundled-skills/reminder/TOOLS.json +0 -89
  633. package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -12
  634. package/src/config/bundled-skills/restaurant-reservation/SKILL.md +0 -141
  635. package/src/config/bundled-skills/screen-recording/SKILL.md +0 -148
  636. package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -69
  637. package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -78
  638. package/src/config/bundled-skills/slack-app-setup/SKILL.md +0 -178
  639. package/src/config/bundled-skills/slack-digest-setup/SKILL.md +0 -163
  640. package/src/config/bundled-skills/slack-oauth-setup/SKILL.md +0 -157
  641. package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
  642. package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
  643. package/src/config/bundled-skills/telegram-setup/SKILL.md +0 -105
  644. package/src/config/bundled-skills/time-based-actions/SKILL.md +0 -142
  645. package/src/config/bundled-skills/twilio-setup/SKILL.md +0 -232
  646. package/src/config/bundled-skills/twitter/SKILL.md +0 -206
  647. package/src/config/bundled-skills/twitter/icon.svg +0 -14
  648. package/src/config/bundled-skills/typescript-eval/SKILL.md +0 -60
  649. package/src/config/bundled-skills/vercel-token-setup/SKILL.md +0 -214
  650. package/src/config/bundled-skills/voice-setup/SKILL.md +0 -131
  651. package/src/config/bundled-skills/voice-setup/icon.svg +0 -20
  652. package/src/daemon/handlers/pairing.ts +0 -119
  653. package/src/daemon/handlers/session-user-message.ts +0 -961
  654. package/src/daemon/recording-executor.ts +0 -180
  655. package/src/daemon/recording-intent-fallback.ts +0 -162
  656. package/src/daemon/recording-intent.ts +0 -493
  657. package/src/memory/account-store.ts +0 -117
  658. package/src/messaging/activity-analyzer.ts +0 -76
  659. package/src/messaging/email-classifier.ts +0 -208
  660. package/src/messaging/index.ts +0 -2
  661. package/src/messaging/outreach-classifier.ts +0 -185
  662. package/src/messaging/thread-summarizer.ts +0 -346
  663. package/src/messaging/types.ts +0 -17
  664. package/src/tools/browser/x-auto-navigate.ts +0 -254
  665. package/src/tools/credentials/account-registry.ts +0 -144
  666. package/src/tools/filesystem/view-image.ts +0 -244
  667. package/src/tools/reminder/reminder-store.ts +0 -194
  668. package/src/tools/reminder/reminder.ts +0 -158
  669. package/src/tools/system/navigate-settings.ts +0 -74
  670. package/src/tools/system/open-system-settings.ts +0 -85
  671. package/src/tools/system/version.ts +0 -54
  672. package/src/twitter/platform-proxy-client.ts +0 -408
  673. /package/src/config/bundled-skills/{messaging → gmail}/tools/scan-result-store.ts +0 -0
  674. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-analytics.ts +0 -0
  675. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-create.ts +0 -0
  676. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-delete.ts +0 -0
  677. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enroll.ts +0 -0
  678. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-enrollment-list.ts +0 -0
  679. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-get.ts +0 -0
  680. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-import.ts +0 -0
  681. /package/src/config/bundled-skills/{messaging → sequences}/tools/sequence-list.ts +0 -0
@@ -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,7 +112,12 @@ function makeIdleSession(opts?: {
112
112
  setCommandIntent: () => {},
113
113
  setTurnChannelContext: () => {},
114
114
  setTurnInterfaceContext: () => {},
115
+ ensureActorScopedHistory: async () => {},
116
+ getMessages: () => [],
117
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
115
118
  updateClient: () => {},
119
+ setHostBashProxy: () => {},
120
+ setHostFileProxy: () => {},
116
121
  enqueueMessage: () => ({ queued: false, requestId: "noop" }),
117
122
  hasAnyPendingConfirmation: () => false,
118
123
  runAgentLoop: async (
@@ -170,7 +175,12 @@ function makeConfirmationEmittingSession(opts?: {
170
175
  setCommandIntent: () => {},
171
176
  setTurnChannelContext: () => {},
172
177
  setTurnInterfaceContext: () => {},
178
+ ensureActorScopedHistory: async () => {},
179
+ getMessages: () => [],
180
+ usageStats: { inputTokens: 0, outputTokens: 0, estimatedCost: 0 },
173
181
  updateClient: () => {},
182
+ setHostBashProxy: () => {},
183
+ setHostFileProxy: () => {},
174
184
  enqueueMessage: () => ({ queued: false, requestId: "noop" }),
175
185
  hasAnyPendingConfirmation: () => false,
176
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