@vellumai/assistant 0.6.2 → 0.6.3

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 (396) hide show
  1. package/bun.lock +40 -40
  2. package/bunfig.toml +3 -0
  3. package/docs/architecture/memory.md +1 -1
  4. package/node_modules/@vellumai/ces-contracts/src/rpc.ts +42 -0
  5. package/openapi.yaml +184 -69
  6. package/package.json +41 -41
  7. package/scripts/generate-openapi.ts +1 -2
  8. package/src/__tests__/acp-session.test.ts +43 -0
  9. package/src/__tests__/app-builder-tool-scripts.test.ts +1 -0
  10. package/src/__tests__/app-executors.test.ts +1 -0
  11. package/src/__tests__/app-source-watcher.test.ts +37 -11
  12. package/src/__tests__/approval-routes-http.test.ts +178 -1
  13. package/src/__tests__/browser-fill-credential.test.ts +229 -94
  14. package/src/__tests__/browser-manager.test.ts +40 -27
  15. package/src/__tests__/catalog-files.test.ts +862 -0
  16. package/src/__tests__/channel-approvals.test.ts +53 -0
  17. package/src/__tests__/config-managed-gemini-defaults.test.ts +326 -0
  18. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  19. package/src/__tests__/config-schema.test.ts +125 -48
  20. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +23 -0
  21. package/src/__tests__/context-overflow-approval.test.ts +16 -1
  22. package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -1
  23. package/src/__tests__/conversation-agent-loop.test.ts +1 -1
  24. package/src/__tests__/conversation-analysis-routes.test.ts +2 -2
  25. package/src/__tests__/conversation-attachments.test.ts +80 -4
  26. package/src/__tests__/conversation-confirmation-signals.test.ts +155 -0
  27. package/src/__tests__/conversation-fork-crud.test.ts +17 -0
  28. package/src/__tests__/conversation-history-web-search.test.ts +1 -0
  29. package/src/__tests__/conversation-host-access-routes.test.ts +229 -0
  30. package/src/__tests__/conversation-inject-context.test.ts +103 -0
  31. package/src/__tests__/conversation-queue.test.ts +45 -2
  32. package/src/__tests__/conversation-routes-disk-view.test.ts +5 -0
  33. package/src/__tests__/conversation-routes-guardian-reply.test.ts +16 -0
  34. package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
  35. package/src/__tests__/conversation-runtime-assembly.test.ts +269 -46
  36. package/src/__tests__/conversation-starter-routes.test.ts +126 -0
  37. package/src/__tests__/conversation-starters-cadence.test.ts +161 -0
  38. package/src/__tests__/conversation-store.test.ts +195 -0
  39. package/src/__tests__/conversation-workspace-cache-state.test.ts +193 -0
  40. package/src/__tests__/credential-execution-approval-bridge.test.ts +32 -1
  41. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  42. package/src/__tests__/credential-vault-unit.test.ts +4 -4
  43. package/src/__tests__/credential-vault.test.ts +152 -13
  44. package/src/__tests__/credentials-cli.test.ts +2 -2
  45. package/src/__tests__/date-context.test.ts +4 -4
  46. package/src/__tests__/embedding-managed-proxy-selection.test.ts +256 -0
  47. package/src/__tests__/extension-id-sync-guard.test.ts +155 -0
  48. package/src/__tests__/fixtures/mock-chrome-extension.ts +375 -0
  49. package/src/__tests__/gateway-only-guard.test.ts +3 -0
  50. package/src/__tests__/gemini-provider.test.ts +2 -2
  51. package/src/__tests__/guardian-routing-invariants.test.ts +70 -2
  52. package/src/__tests__/headless-browser-interactions.test.ts +707 -371
  53. package/src/__tests__/headless-browser-navigate.test.ts +389 -47
  54. package/src/__tests__/headless-browser-read-tools.test.ts +266 -103
  55. package/src/__tests__/headless-browser-snapshot.test.ts +240 -77
  56. package/src/__tests__/host-bash-proxy.test.ts +150 -1
  57. package/src/__tests__/host-browser-e2e-cloud.test.ts +462 -0
  58. package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +286 -0
  59. package/src/__tests__/host-browser-e2e-self-hosted.test.ts +374 -0
  60. package/src/__tests__/host-browser-event-routes.test.ts +350 -0
  61. package/src/__tests__/host-browser-proxy.test.ts +444 -0
  62. package/src/__tests__/host-browser-routes.test.ts +198 -0
  63. package/src/__tests__/host-browser-ws-events-e2e.test.ts +320 -0
  64. package/src/__tests__/host-cu-proxy.test.ts +171 -1
  65. package/src/__tests__/host-file-proxy.test.ts +185 -1
  66. package/src/__tests__/host-file-read-tool.test.ts +52 -0
  67. package/src/__tests__/host-proxy-interface.test.ts +165 -0
  68. package/src/__tests__/host-shell-tool.test.ts +1 -11
  69. package/src/__tests__/http-user-message-parity.test.ts +1 -0
  70. package/src/__tests__/integration-status.test.ts +6 -7
  71. package/src/__tests__/list-messages-tool-merge.test.ts +37 -12
  72. package/src/__tests__/mcp-client-auth.test.ts +40 -4
  73. package/src/__tests__/mcp-health-check.test.ts +10 -3
  74. package/src/__tests__/migration-cross-version-compatibility.test.ts +3 -1
  75. package/src/__tests__/migration-export-http.test.ts +61 -2
  76. package/src/__tests__/migration-export-streaming.test.ts +66 -0
  77. package/src/__tests__/migration-import-commit-http.test.ts +101 -1
  78. package/src/__tests__/native-host-marker-sync-guard.test.ts +157 -0
  79. package/src/__tests__/oauth-apps-routes.test.ts +17 -12
  80. package/src/__tests__/oauth-cli.test.ts +707 -60
  81. package/src/__tests__/oauth-connect-orchestrator.test.ts +116 -24
  82. package/src/__tests__/oauth-provider-seed-logos.test.ts +23 -0
  83. package/src/__tests__/oauth-provider-serializer.test.ts +146 -10
  84. package/src/__tests__/oauth-provider-visibility.test.ts +19 -21
  85. package/src/__tests__/oauth-providers-routes.test.ts +50 -14
  86. package/src/__tests__/oauth-store.test.ts +1386 -182
  87. package/src/__tests__/oauth2-gateway-transport.test.ts +211 -20
  88. package/src/__tests__/onboarding-template-contract.test.ts +75 -57
  89. package/src/__tests__/openai-provider.test.ts +2 -2
  90. package/src/__tests__/outlook-categories.test.ts +1 -1
  91. package/src/__tests__/outlook-client-automation.test.ts +1 -1
  92. package/src/__tests__/outlook-compose-tools.test.ts +1 -1
  93. package/src/__tests__/outlook-email-watcher.test.ts +1 -1
  94. package/src/__tests__/outlook-follow-up.test.ts +1 -1
  95. package/src/__tests__/outlook-messaging-provider.test.ts +2 -2
  96. package/src/__tests__/outlook-trash.test.ts +1 -1
  97. package/src/__tests__/outlook-unsubscribe.test.ts +1 -1
  98. package/src/__tests__/permission-checker-host-gate.test.ts +74 -14
  99. package/src/__tests__/permission-mode.test.ts +28 -56
  100. package/src/__tests__/platform-callback-registration.test.ts +19 -0
  101. package/src/__tests__/post-turn-tool-result-truncation.test.ts +296 -0
  102. package/src/__tests__/proxy-approval-callback.test.ts +18 -0
  103. package/src/__tests__/require-fresh-approval.test.ts +40 -1
  104. package/src/__tests__/sanitize-config-for-transfer.test.ts +132 -0
  105. package/src/__tests__/schedule-routes.test.ts +162 -0
  106. package/src/__tests__/secret-detection-handler.test.ts +84 -0
  107. package/src/__tests__/secret-ingress-http.test.ts +1 -0
  108. package/src/__tests__/send-endpoint-busy.test.ts +3 -0
  109. package/src/__tests__/set-permission-mode.test.ts +13 -250
  110. package/src/__tests__/skills-file-content-endpoint.test.ts +670 -0
  111. package/src/__tests__/skills-files-catalog-fallback.test.ts +450 -0
  112. package/src/__tests__/slack-channel-config.test.ts +12 -15
  113. package/src/__tests__/subagent-detail.test.ts +44 -2
  114. package/src/__tests__/subagent-disposal.test.ts +1 -0
  115. package/src/__tests__/subagent-fork-notifications.test.ts +291 -0
  116. package/src/__tests__/subagent-fork-spawn.test.ts +384 -0
  117. package/src/__tests__/subagent-manager-notify.test.ts +1 -0
  118. package/src/__tests__/subagent-notify-parent.test.ts +1 -0
  119. package/src/__tests__/subagent-spawn-tool-fork.test.ts +411 -0
  120. package/src/__tests__/subagent-tools.test.ts +1 -0
  121. package/src/__tests__/subagent-types.test.ts +1 -0
  122. package/src/__tests__/system-prompt-ask-mode.test.ts +27 -71
  123. package/src/__tests__/system-prompt.test.ts +72 -1
  124. package/src/__tests__/task-scheduler.test.ts +32 -6
  125. package/src/__tests__/telegram-config.test.ts +10 -13
  126. package/src/__tests__/terminal-tools.test.ts +9 -0
  127. package/src/__tests__/tool-approval-handler.test.ts +73 -0
  128. package/src/__tests__/tool-side-effects-slack-dm.test.ts +22 -0
  129. package/src/__tests__/top-level-renderer.test.ts +73 -1
  130. package/src/__tests__/transport-hints-queue.test.ts +14 -29
  131. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +109 -0
  132. package/src/__tests__/v2-consent-policy.test.ts +103 -0
  133. package/src/acp/client-handler.ts +30 -4
  134. package/src/agent/loop.ts +12 -6
  135. package/src/approvals/guardian-request-resolvers.ts +21 -15
  136. package/src/browser-session/__tests__/manager.test.ts +297 -0
  137. package/src/browser-session/backends/cdp-inspect.ts +30 -0
  138. package/src/browser-session/backends/extension.ts +26 -0
  139. package/src/browser-session/backends/local.ts +24 -0
  140. package/src/browser-session/events.ts +164 -0
  141. package/src/browser-session/index.ts +27 -0
  142. package/src/browser-session/manager.ts +159 -0
  143. package/src/browser-session/types.ts +28 -0
  144. package/src/channels/__tests__/types.test.ts +134 -0
  145. package/src/channels/types.ts +53 -3
  146. package/src/cli/commands/browser-relay.ts +339 -409
  147. package/src/cli/commands/credentials.ts +3 -3
  148. package/src/cli/commands/email.ts +18 -13
  149. package/src/cli/commands/mcp.ts +16 -4
  150. package/src/cli/commands/oauth/__tests__/connect.test.ts +44 -44
  151. package/src/cli/commands/oauth/__tests__/disconnect.test.ts +21 -21
  152. package/src/cli/commands/oauth/__tests__/mode.test.ts +17 -17
  153. package/src/cli/commands/oauth/__tests__/ping.test.ts +16 -16
  154. package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +31 -33
  155. package/src/cli/commands/oauth/__tests__/providers-register.test.ts +329 -0
  156. package/src/cli/commands/oauth/__tests__/providers-update.test.ts +116 -12
  157. package/src/cli/commands/oauth/__tests__/status.test.ts +10 -10
  158. package/src/cli/commands/oauth/__tests__/token.test.ts +7 -7
  159. package/src/cli/commands/oauth/apps.ts +7 -4
  160. package/src/cli/commands/oauth/connect.ts +6 -3
  161. package/src/cli/commands/oauth/disconnect.ts +1 -1
  162. package/src/cli/commands/oauth/providers.ts +200 -36
  163. package/src/cli/commands/oauth/shared.ts +5 -5
  164. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +259 -0
  165. package/src/cli/commands/platform/index.ts +107 -10
  166. package/src/cli/commands/usage.ts +10 -9
  167. package/src/cli/lib/daemon-credential-client.ts +4 -0
  168. package/src/cli/program.ts +1 -1
  169. package/src/config/bundled-skills/app-builder/SKILL.md +26 -249
  170. package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +105 -0
  171. package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +56 -0
  172. package/src/config/bundled-skills/app-builder/references/WIDGETS.md +125 -0
  173. package/src/config/bundled-skills/contacts/SKILL.md +3 -0
  174. package/src/config/bundled-skills/document/SKILL.md +4 -0
  175. package/src/config/bundled-skills/gmail/SKILL.md +1 -1
  176. package/src/config/bundled-skills/outlook/SKILL.md +7 -0
  177. package/src/config/bundled-skills/subagent/SKILL.md +21 -0
  178. package/src/config/bundled-skills/subagent/TOOLS.json +8 -4
  179. package/src/config/bundled-skills/tasks/SKILL.md +5 -0
  180. package/src/config/env-registry.ts +14 -0
  181. package/src/config/env.ts +21 -0
  182. package/src/config/feature-flag-registry.json +44 -5
  183. package/src/config/loader.ts +56 -1
  184. package/src/config/sanitize-for-transfer.ts +47 -0
  185. package/src/config/schema.ts +46 -5
  186. package/src/config/schemas/host-browser.ts +66 -0
  187. package/src/config/schemas/memory-lifecycle.ts +1 -1
  188. package/src/config/schemas/memory-retrieval.ts +103 -0
  189. package/src/config/schemas/security.ts +0 -6
  190. package/src/config/schemas/services.ts +8 -0
  191. package/src/config/types.ts +0 -1
  192. package/src/context/post-turn-tool-result-truncation.ts +176 -0
  193. package/src/context/window-manager.ts +19 -1
  194. package/src/credential-execution/approval-bridge.ts +49 -15
  195. package/src/daemon/__tests__/conversation-tool-setup.test.ts +186 -0
  196. package/src/daemon/app-source-watcher.ts +35 -0
  197. package/src/daemon/context-overflow-approval.ts +5 -0
  198. package/src/daemon/conversation-agent-loop-handlers.ts +17 -2
  199. package/src/daemon/conversation-agent-loop.ts +58 -24
  200. package/src/daemon/conversation-attachments.ts +40 -0
  201. package/src/daemon/conversation-process.ts +48 -1
  202. package/src/daemon/conversation-runtime-assembly.ts +118 -36
  203. package/src/daemon/conversation-surfaces.ts +37 -36
  204. package/src/daemon/conversation-tool-setup.ts +74 -8
  205. package/src/daemon/conversation-workspace.ts +12 -0
  206. package/src/daemon/conversation.ts +226 -8
  207. package/src/daemon/date-context.ts +10 -10
  208. package/src/daemon/first-greeting.ts +3 -2
  209. package/src/daemon/handlers/conversations.ts +9 -140
  210. package/src/daemon/handlers/shared.ts +58 -0
  211. package/src/daemon/handlers/skills.ts +232 -37
  212. package/src/daemon/host-bash-proxy.ts +48 -13
  213. package/src/daemon/host-browser-proxy.ts +191 -0
  214. package/src/daemon/host-cu-proxy.ts +36 -11
  215. package/src/daemon/host-file-proxy.ts +57 -9
  216. package/src/daemon/lifecycle.ts +65 -11
  217. package/src/daemon/message-protocol.ts +7 -0
  218. package/src/daemon/message-types/conversations.ts +55 -13
  219. package/src/daemon/message-types/host-browser.ts +100 -0
  220. package/src/daemon/message-types/messages.ts +5 -5
  221. package/src/daemon/message-types/skills.ts +10 -0
  222. package/src/daemon/message-types/subagents.ts +2 -0
  223. package/src/daemon/server.ts +92 -12
  224. package/src/daemon/tool-side-effects.ts +6 -0
  225. package/src/daemon/transport-hints.ts +5 -24
  226. package/src/inbound/platform-callback-registration.ts +18 -17
  227. package/src/mcp/client.ts +59 -24
  228. package/src/memory/app-store.ts +31 -1
  229. package/src/memory/conversation-crud.ts +23 -0
  230. package/src/memory/conversation-starters-cadence.ts +76 -0
  231. package/src/memory/conversation-title-service.ts +5 -2
  232. package/src/memory/db-init.ts +12 -0
  233. package/src/memory/embedding-backend.test.ts +75 -0
  234. package/src/memory/embedding-backend.ts +131 -5
  235. package/src/memory/embedding-gemini.test.ts +54 -0
  236. package/src/memory/embedding-gemini.ts +20 -9
  237. package/src/memory/embedding-local.ts +176 -17
  238. package/src/memory/graph/consolidation.ts +10 -23
  239. package/src/memory/graph/extraction-job.ts +15 -0
  240. package/src/memory/graph/retriever.ts +40 -22
  241. package/src/memory/graph/store.test.ts +7 -3
  242. package/src/memory/graph/store.ts +47 -12
  243. package/src/memory/llm-usage-store.ts +45 -4
  244. package/src/memory/migrations/213-oauth-providers-scope-separator.ts +13 -0
  245. package/src/memory/migrations/214-oauth-providers-refresh-url.ts +11 -0
  246. package/src/memory/migrations/215-oauth-providers-revoke.ts +14 -0
  247. package/src/memory/migrations/216-oauth-providers-token-auth-method.ts +30 -0
  248. package/src/memory/migrations/217-conversation-host-access.ts +40 -0
  249. package/src/memory/migrations/218-oauth-providers-logo-url.ts +11 -0
  250. package/src/memory/migrations/index.ts +6 -0
  251. package/src/memory/migrations/registry.ts +8 -0
  252. package/src/memory/schema/conversations.ts +1 -0
  253. package/src/memory/schema/oauth.ts +18 -13
  254. package/src/oauth/AGENTS.md +76 -0
  255. package/src/oauth/__tests__/identity-verifier.test.ts +24 -19
  256. package/src/oauth/__tests__/seed-providers-managed.test.ts +32 -0
  257. package/src/oauth/byo-connection.test.ts +8 -8
  258. package/src/oauth/byo-connection.ts +7 -7
  259. package/src/oauth/connect-orchestrator.ts +23 -21
  260. package/src/oauth/connect-types.ts +3 -3
  261. package/src/oauth/connection-resolver.test.ts +17 -4
  262. package/src/oauth/connection-resolver.ts +16 -16
  263. package/src/oauth/connection.ts +1 -1
  264. package/src/oauth/manual-token-connection.ts +13 -13
  265. package/src/oauth/oauth-store.ts +214 -100
  266. package/src/oauth/platform-connection.test.ts +3 -3
  267. package/src/oauth/platform-connection.ts +4 -4
  268. package/src/oauth/provider-serializer.ts +31 -5
  269. package/src/oauth/revoke.ts +76 -0
  270. package/src/oauth/seed-providers.ts +126 -87
  271. package/src/oauth/token-persistence.ts +1 -1
  272. package/src/permissions/permission-mode.ts +4 -11
  273. package/src/permissions/prompter.ts +13 -1
  274. package/src/permissions/v2-consent-policy.ts +87 -0
  275. package/src/prompts/system-prompt.ts +18 -21
  276. package/src/prompts/templates/BOOTSTRAP-REFERENCE.md +3 -65
  277. package/src/prompts/templates/BOOTSTRAP.md +59 -105
  278. package/src/providers/anthropic/client.ts +1 -0
  279. package/src/providers/types.ts +1 -1
  280. package/src/runtime/AGENTS.md +23 -0
  281. package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +715 -0
  282. package/src/runtime/__tests__/capability-tokens.test.ts +258 -0
  283. package/src/runtime/__tests__/chrome-extension-registry.test.ts +518 -0
  284. package/src/runtime/assistant-event-hub.ts +2 -2
  285. package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
  286. package/src/runtime/auth/__tests__/middleware.test.ts +116 -1
  287. package/src/runtime/auth/__tests__/route-policy.test.ts +8 -0
  288. package/src/runtime/auth/middleware.ts +98 -0
  289. package/src/runtime/auth/route-policy.ts +6 -7
  290. package/src/runtime/capability-tokens.ts +414 -0
  291. package/src/runtime/channel-approvals.ts +18 -5
  292. package/src/runtime/chrome-extension-registry.ts +332 -0
  293. package/src/runtime/confirmation-request-guardian-bridge.ts +6 -0
  294. package/src/runtime/guardian-decision-types.ts +7 -0
  295. package/src/runtime/http-server.ts +425 -70
  296. package/src/runtime/migrations/__tests__/rebind-secrets-credentials.test.ts +172 -0
  297. package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +276 -0
  298. package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +162 -0
  299. package/src/runtime/migrations/migration-transport.ts +6 -0
  300. package/src/runtime/migrations/migration-wizard.ts +22 -2
  301. package/src/runtime/migrations/rebind-secrets-screen.ts +76 -15
  302. package/src/runtime/migrations/vbundle-builder.ts +145 -38
  303. package/src/runtime/migrations/vbundle-import-analyzer.ts +19 -0
  304. package/src/runtime/migrations/vbundle-importer.ts +55 -5
  305. package/src/runtime/pending-interactions.ts +29 -13
  306. package/src/runtime/routes/approval-routes.ts +90 -16
  307. package/src/runtime/routes/browser-cdp-routes.ts +229 -0
  308. package/src/runtime/routes/browser-extension-pair-routes.ts +497 -0
  309. package/src/runtime/routes/conversation-analysis-routes.ts +2 -1
  310. package/src/runtime/routes/conversation-management-routes.ts +108 -0
  311. package/src/runtime/routes/conversation-routes.ts +301 -27
  312. package/src/runtime/routes/conversation-starter-routes.ts +78 -16
  313. package/src/runtime/routes/guardian-action-routes.ts +24 -13
  314. package/src/runtime/routes/host-browser-routes.ts +279 -0
  315. package/src/runtime/routes/host-file-routes.ts +9 -1
  316. package/src/runtime/routes/identity-routes.ts +259 -16
  317. package/src/runtime/routes/log-export-routes.ts +42 -22
  318. package/src/runtime/routes/memory-item-routes.ts +1 -7
  319. package/src/runtime/routes/migration-routes.ts +87 -2
  320. package/src/runtime/routes/oauth-apps.ts +15 -17
  321. package/src/runtime/routes/oauth-providers.ts +4 -0
  322. package/src/runtime/routes/schedule-routes.ts +24 -11
  323. package/src/runtime/routes/settings-routes.ts +9 -97
  324. package/src/runtime/routes/skills-routes.ts +52 -2
  325. package/src/runtime/routes/subagents-routes.ts +14 -10
  326. package/src/runtime/routes/usage-routes.ts +8 -7
  327. package/src/runtime/routes/workspace-routes.test.ts +22 -0
  328. package/src/runtime/routes/workspace-routes.ts +8 -1
  329. package/src/runtime/routes/workspace-utils.ts +2 -0
  330. package/src/schedule/scheduler.ts +7 -5
  331. package/src/security/ces-credential-client.ts +20 -0
  332. package/src/security/ces-rpc-credential-backend.ts +17 -0
  333. package/src/security/credential-backend.ts +5 -0
  334. package/src/security/oauth2.ts +42 -25
  335. package/src/security/secure-keys.ts +118 -25
  336. package/src/security/token-manager.ts +23 -10
  337. package/src/skills/catalog-files.ts +492 -0
  338. package/src/subagent/manager.ts +131 -26
  339. package/src/subagent/types.ts +19 -0
  340. package/src/tools/apps/executors.ts +11 -2
  341. package/src/tools/browser/__tests__/auth-detector.test.ts +202 -108
  342. package/src/tools/browser/auth-detector.ts +43 -12
  343. package/src/tools/browser/browser-execution.ts +645 -340
  344. package/src/tools/browser/browser-manager.ts +36 -12
  345. package/src/tools/browser/cdp-client/__tests__/accessibility-snapshot.test.ts +318 -0
  346. package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +1175 -0
  347. package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +870 -0
  348. package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +330 -0
  349. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +377 -0
  350. package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-nested-frames.json +64 -0
  351. package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-simple.json +69 -0
  352. package/src/tools/browser/cdp-client/__tests__/local-cdp-client.test.ts +310 -0
  353. package/src/tools/browser/cdp-client/__tests__/types.test.ts +96 -0
  354. package/src/tools/browser/cdp-client/accessibility-snapshot.ts +387 -0
  355. package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +695 -0
  356. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/discovery.test.ts +743 -0
  357. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +580 -0
  358. package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +578 -0
  359. package/src/tools/browser/cdp-client/cdp-inspect/ws-transport.ts +579 -0
  360. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +635 -0
  361. package/src/tools/browser/cdp-client/errors.ts +34 -0
  362. package/src/tools/browser/cdp-client/extension-cdp-client.ts +125 -0
  363. package/src/tools/browser/cdp-client/factory.ts +204 -0
  364. package/src/tools/browser/cdp-client/index.ts +14 -0
  365. package/src/tools/browser/cdp-client/local-cdp-client.ts +187 -0
  366. package/src/tools/browser/cdp-client/types.ts +52 -0
  367. package/src/tools/filesystem/edit.ts +1 -1
  368. package/src/tools/filesystem/list.ts +1 -1
  369. package/src/tools/filesystem/read.ts +1 -1
  370. package/src/tools/filesystem/write.ts +2 -1
  371. package/src/tools/host-filesystem/edit.ts +1 -1
  372. package/src/tools/host-filesystem/read.ts +12 -15
  373. package/src/tools/host-filesystem/write.ts +1 -1
  374. package/src/tools/host-terminal/host-shell.ts +21 -16
  375. package/src/tools/permission-checker.ts +77 -82
  376. package/src/tools/registry.ts +0 -2
  377. package/src/tools/secret-detection-handler.ts +34 -0
  378. package/src/tools/shared/filesystem/image-read.ts +61 -40
  379. package/src/tools/subagent/spawn.ts +47 -3
  380. package/src/tools/subagent/status.ts +2 -0
  381. package/src/tools/system/register.ts +2 -16
  382. package/src/tools/terminal/safe-env.ts +7 -0
  383. package/src/tools/terminal/shell.ts +21 -16
  384. package/src/tools/tool-approval-handler.ts +48 -2
  385. package/src/tools/types.ts +2 -0
  386. package/src/util/platform.ts +14 -19
  387. package/src/workspace/top-level-renderer.ts +19 -1
  388. package/src/__tests__/chrome-cdp.test.ts +0 -419
  389. package/src/__tests__/permission-mode-sse.test.ts +0 -418
  390. package/src/__tests__/permission-mode-store.test.ts +0 -277
  391. package/src/browser-extension-relay/protocol.ts +0 -63
  392. package/src/browser-extension-relay/server.ts +0 -203
  393. package/src/config/schemas/sandbox.ts +0 -14
  394. package/src/permissions/permission-mode-store.ts +0 -180
  395. package/src/tools/browser/chrome-cdp.ts +0 -239
  396. package/src/tools/system/set-permission-mode.ts +0 -103
@@ -15,7 +15,7 @@ let mockResolveOAuthConnectionResult:
15
15
  | Error = new Error("not configured");
16
16
 
17
17
  let mockResolveOAuthConnectionCalls: Array<{
18
- providerKey: string;
18
+ provider: string;
19
19
  options?: Record<string, unknown>;
20
20
  }> = [];
21
21
 
@@ -53,10 +53,10 @@ mock.module("../../../../oauth/oauth-store.js", () => ({
53
53
 
54
54
  mock.module("../../../../oauth/connection-resolver.js", () => ({
55
55
  resolveOAuthConnection: async (
56
- providerKey: string,
56
+ provider: string,
57
57
  options?: Record<string, unknown>,
58
58
  ) => {
59
- mockResolveOAuthConnectionCalls.push({ providerKey, options });
59
+ mockResolveOAuthConnectionCalls.push({ provider, options });
60
60
  if (mockResolveOAuthConnectionResult instanceof Error) {
61
61
  throw mockResolveOAuthConnectionResult;
62
62
  }
@@ -186,7 +186,7 @@ describe("assistant oauth ping", () => {
186
186
 
187
187
  test("no ping URL configured returns error", async () => {
188
188
  mockGetProvider = () => ({
189
- providerKey: "google",
189
+ provider: "google",
190
190
  pingUrl: null,
191
191
  });
192
192
 
@@ -205,7 +205,7 @@ describe("assistant oauth ping", () => {
205
205
  describe("BYO mode", () => {
206
206
  beforeEach(() => {
207
207
  mockGetProvider = () => ({
208
- providerKey: "google",
208
+ provider: "google",
209
209
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
210
210
  managedServiceConfigKey: null,
211
211
  });
@@ -307,7 +307,7 @@ describe("assistant oauth ping", () => {
307
307
  describe("managed mode", () => {
308
308
  beforeEach(() => {
309
309
  mockGetProvider = () => ({
310
- providerKey: "google",
310
+ provider: "google",
311
311
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
312
312
  managedServiceConfigKey: "google-oauth",
313
313
  });
@@ -363,7 +363,7 @@ describe("assistant oauth ping", () => {
363
363
 
364
364
  test("connection resolution failure (no active connection) with recovery hint", async () => {
365
365
  mockGetProvider = () => ({
366
- providerKey: "google",
366
+ provider: "google",
367
367
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
368
368
  });
369
369
 
@@ -386,7 +386,7 @@ describe("assistant oauth ping", () => {
386
386
 
387
387
  test("--account option passed through to connection resolution", async () => {
388
388
  mockGetProvider = () => ({
389
- providerKey: "google",
389
+ provider: "google",
390
390
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
391
391
  });
392
392
 
@@ -419,7 +419,7 @@ describe("assistant oauth ping", () => {
419
419
 
420
420
  test("--client-id option passed through to connection resolution", async () => {
421
421
  mockGetProvider = () => ({
422
- providerKey: "google",
422
+ provider: "google",
423
423
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
424
424
  });
425
425
 
@@ -452,7 +452,7 @@ describe("assistant oauth ping", () => {
452
452
 
453
453
  test("JSON output mode returns structured response", async () => {
454
454
  mockGetProvider = () => ({
455
- providerKey: "google",
455
+ provider: "google",
456
456
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
457
457
  });
458
458
 
@@ -480,7 +480,7 @@ describe("assistant oauth ping", () => {
480
480
 
481
481
  test("human output mode logs to stderr on success", async () => {
482
482
  mockGetProvider = () => ({
483
- providerKey: "google",
483
+ provider: "google",
484
484
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
485
485
  });
486
486
 
@@ -508,7 +508,7 @@ describe("assistant oauth ping", () => {
508
508
 
509
509
  test("uses configured pingMethod for POST providers", async () => {
510
510
  mockGetProvider = () => ({
511
- providerKey: "dropbox",
511
+ provider: "dropbox",
512
512
  pingUrl: "https://api.dropboxapi.com/2/users/get_current_account",
513
513
  pingMethod: "POST",
514
514
  pingHeaders: null,
@@ -530,7 +530,7 @@ describe("assistant oauth ping", () => {
530
530
 
531
531
  test("uses configured pingHeaders", async () => {
532
532
  mockGetProvider = () => ({
533
- providerKey: "notion",
533
+ provider: "notion",
534
534
  pingUrl: "https://api.notion.com/v1/users/me",
535
535
  pingMethod: null,
536
536
  pingHeaders: '{"Notion-Version":"2022-06-28"}',
@@ -554,7 +554,7 @@ describe("assistant oauth ping", () => {
554
554
 
555
555
  test("uses configured pingBody for GraphQL providers", async () => {
556
556
  mockGetProvider = () => ({
557
- providerKey: "linear",
557
+ provider: "linear",
558
558
  pingUrl: "https://api.linear.app/graphql",
559
559
  pingMethod: "POST",
560
560
  pingHeaders: '{"Content-Type":"application/json"}',
@@ -582,7 +582,7 @@ describe("assistant oauth ping", () => {
582
582
 
583
583
  test("defaults to GET with no extra headers/body when ping config is null", async () => {
584
584
  mockGetProvider = () => ({
585
- providerKey: "google",
585
+ provider: "google",
586
586
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
587
587
  pingMethod: null,
588
588
  pingHeaders: null,
@@ -610,7 +610,7 @@ describe("assistant oauth ping", () => {
610
610
 
611
611
  test("network failure returns error with recovery hint", async () => {
612
612
  mockGetProvider = () => ({
613
- providerKey: "google",
613
+ provider: "google",
614
614
  pingUrl: "https://www.googleapis.com/oauth2/v1/tokeninfo",
615
615
  });
616
616
 
@@ -20,7 +20,7 @@ let mockDeleteAppCalls: string[] = [];
20
20
  let mockDeleteAppResult = true;
21
21
 
22
22
  let mockDisconnectCalls: Array<{
23
- providerKey: string;
23
+ provider: string;
24
24
  clientId: string | undefined;
25
25
  connectionId: string | undefined;
26
26
  }> = [];
@@ -47,11 +47,9 @@ mock.module("../../../../oauth/oauth-store.js", () => ({
47
47
  getProvider: (key: string) => mockGetProvider(key),
48
48
  deleteProvider: () => mockDeleteProviderResult,
49
49
  listApps: () => mockListAppsResult,
50
- listConnections: (providerKey?: string) => {
51
- if (providerKey) {
52
- return mockListConnectionsResult.filter(
53
- (c) => c.providerKey === providerKey,
54
- );
50
+ listConnections: (provider?: string) => {
51
+ if (provider) {
52
+ return mockListConnectionsResult.filter((c) => c.provider === provider);
55
53
  }
56
54
  return mockListConnectionsResult;
57
55
  },
@@ -60,11 +58,11 @@ mock.module("../../../../oauth/oauth-store.js", () => ({
60
58
  return mockDeleteAppResult;
61
59
  },
62
60
  disconnectOAuthProvider: async (
63
- providerKey: string,
61
+ provider: string,
64
62
  clientId?: string,
65
63
  connectionId?: string,
66
64
  ) => {
67
- mockDisconnectCalls.push({ providerKey, clientId, connectionId });
65
+ mockDisconnectCalls.push({ provider, clientId, connectionId });
68
66
  return mockDisconnectResult;
69
67
  },
70
68
  listProviders: () => [],
@@ -210,20 +208,20 @@ describe("assistant oauth providers delete", () => {
210
208
  test("provider with dependents and no --force returns exit code 1 with counts", async () => {
211
209
  mockGetProvider = (key) =>
212
210
  key === "custom-api"
213
- ? { providerKey: "custom-api", authUrl: "https://example.com/auth" }
211
+ ? { provider: "custom-api", authorizeUrl: "https://example.com/auth" }
214
212
  : undefined;
215
213
 
216
214
  mockListAppsResult = [
217
215
  {
218
216
  id: "app-1",
219
- providerKey: "custom-api",
217
+ provider: "custom-api",
220
218
  clientId: "c1",
221
219
  createdAt: Date.now(),
222
220
  updatedAt: Date.now(),
223
221
  },
224
222
  {
225
223
  id: "app-2",
226
- providerKey: "custom-api",
224
+ provider: "custom-api",
227
225
  clientId: "c2",
228
226
  createdAt: Date.now(),
229
227
  updatedAt: Date.now(),
@@ -233,19 +231,19 @@ describe("assistant oauth providers delete", () => {
233
231
  mockListConnectionsResult = [
234
232
  {
235
233
  id: "conn-1",
236
- providerKey: "custom-api",
234
+ provider: "custom-api",
237
235
  oauthAppId: "app-1",
238
236
  status: "active",
239
237
  },
240
238
  {
241
239
  id: "conn-2",
242
- providerKey: "custom-api",
240
+ provider: "custom-api",
243
241
  oauthAppId: "app-1",
244
242
  status: "active",
245
243
  },
246
244
  {
247
245
  id: "conn-3",
248
- providerKey: "custom-api",
246
+ provider: "custom-api",
249
247
  oauthAppId: "app-2",
250
248
  status: "active",
251
249
  },
@@ -272,13 +270,13 @@ describe("assistant oauth providers delete", () => {
272
270
  test("provider with dependents and --force cascades deletion and returns summary", async () => {
273
271
  mockGetProvider = (key) =>
274
272
  key === "custom-api"
275
- ? { providerKey: "custom-api", authUrl: "https://example.com/auth" }
273
+ ? { provider: "custom-api", authorizeUrl: "https://example.com/auth" }
276
274
  : undefined;
277
275
 
278
276
  mockListAppsResult = [
279
277
  {
280
278
  id: "app-1",
281
- providerKey: "custom-api",
279
+ provider: "custom-api",
282
280
  clientId: "c1",
283
281
  clientSecretCredentialPath: "cred/app-1",
284
282
  createdAt: Date.now(),
@@ -286,7 +284,7 @@ describe("assistant oauth providers delete", () => {
286
284
  },
287
285
  {
288
286
  id: "app-other",
289
- providerKey: "other-provider",
287
+ provider: "other-provider",
290
288
  clientId: "c3",
291
289
  clientSecretCredentialPath: "cred/app-other",
292
290
  createdAt: Date.now(),
@@ -297,13 +295,13 @@ describe("assistant oauth providers delete", () => {
297
295
  mockListConnectionsResult = [
298
296
  {
299
297
  id: "conn-1",
300
- providerKey: "custom-api",
298
+ provider: "custom-api",
301
299
  oauthAppId: "app-1",
302
300
  status: "active",
303
301
  },
304
302
  {
305
303
  id: "conn-2",
306
- providerKey: "custom-api",
304
+ provider: "custom-api",
307
305
  oauthAppId: "app-1",
308
306
  status: "active",
309
307
  },
@@ -326,12 +324,12 @@ describe("assistant oauth providers delete", () => {
326
324
  // Verify disconnectOAuthProvider was called for each connection
327
325
  expect(mockDisconnectCalls).toEqual([
328
326
  {
329
- providerKey: "custom-api",
327
+ provider: "custom-api",
330
328
  clientId: undefined,
331
329
  connectionId: "conn-1",
332
330
  },
333
331
  {
334
- providerKey: "custom-api",
332
+ provider: "custom-api",
335
333
  clientId: undefined,
336
334
  connectionId: "conn-2",
337
335
  },
@@ -348,7 +346,7 @@ describe("assistant oauth providers delete", () => {
348
346
  test("provider with no dependents and no --force deletes cleanly", async () => {
349
347
  mockGetProvider = (key) =>
350
348
  key === "custom-api"
351
- ? { providerKey: "custom-api", authUrl: "https://example.com/auth" }
349
+ ? { provider: "custom-api", authorizeUrl: "https://example.com/auth" }
352
350
  : undefined;
353
351
 
354
352
  mockListAppsResult = [];
@@ -379,13 +377,13 @@ describe("assistant oauth providers delete", () => {
379
377
  test("built-in provider with --force succeeds and logs warning about re-creation", async () => {
380
378
  mockGetProvider = (key) =>
381
379
  key === "google"
382
- ? { providerKey: "google", authUrl: "https://accounts.google.com" }
380
+ ? { provider: "google", authorizeUrl: "https://accounts.google.com" }
383
381
  : undefined;
384
382
 
385
383
  mockListAppsResult = [
386
384
  {
387
385
  id: "app-g",
388
- providerKey: "google",
386
+ provider: "google",
389
387
  clientId: "goog-client",
390
388
  clientSecretCredentialPath: "cred/app-g",
391
389
  createdAt: Date.now(),
@@ -396,7 +394,7 @@ describe("assistant oauth providers delete", () => {
396
394
  mockListConnectionsResult = [
397
395
  {
398
396
  id: "conn-g",
399
- providerKey: "google",
397
+ provider: "google",
400
398
  oauthAppId: "app-g",
401
399
  status: "active",
402
400
  },
@@ -430,7 +428,7 @@ describe("assistant oauth providers delete", () => {
430
428
  test("built-in provider without --force and no dependents logs warning and deletes", async () => {
431
429
  mockGetProvider = (key) =>
432
430
  key === "google"
433
- ? { providerKey: "google", authUrl: "https://accounts.google.com" }
431
+ ? { provider: "google", authorizeUrl: "https://accounts.google.com" }
434
432
  : undefined;
435
433
 
436
434
  mockListAppsResult = [];
@@ -461,13 +459,13 @@ describe("assistant oauth providers delete", () => {
461
459
  test("token cleanup error logs warning but continues cascade delete", async () => {
462
460
  mockGetProvider = (key) =>
463
461
  key === "custom-api"
464
- ? { providerKey: "custom-api", authUrl: "https://example.com/auth" }
462
+ ? { provider: "custom-api", authorizeUrl: "https://example.com/auth" }
465
463
  : undefined;
466
464
 
467
465
  mockListAppsResult = [
468
466
  {
469
467
  id: "app-1",
470
- providerKey: "custom-api",
468
+ provider: "custom-api",
471
469
  clientId: "c1",
472
470
  createdAt: Date.now(),
473
471
  updatedAt: Date.now(),
@@ -477,7 +475,7 @@ describe("assistant oauth providers delete", () => {
477
475
  mockListConnectionsResult = [
478
476
  {
479
477
  id: "conn-1",
480
- providerKey: "custom-api",
478
+ provider: "custom-api",
481
479
  oauthAppId: "app-1",
482
480
  status: "active",
483
481
  },
@@ -518,13 +516,13 @@ describe("assistant oauth providers delete", () => {
518
516
  test("token cleanup error calls deleteConnection as fallback to avoid FK violation", async () => {
519
517
  mockGetProvider = (key) =>
520
518
  key === "custom-api"
521
- ? { providerKey: "custom-api", authUrl: "https://example.com/auth" }
519
+ ? { provider: "custom-api", authorizeUrl: "https://example.com/auth" }
522
520
  : undefined;
523
521
 
524
522
  mockListAppsResult = [
525
523
  {
526
524
  id: "app-1",
527
- providerKey: "custom-api",
525
+ provider: "custom-api",
528
526
  clientId: "c1",
529
527
  createdAt: Date.now(),
530
528
  updatedAt: Date.now(),
@@ -534,13 +532,13 @@ describe("assistant oauth providers delete", () => {
534
532
  mockListConnectionsResult = [
535
533
  {
536
534
  id: "conn-1",
537
- providerKey: "custom-api",
535
+ provider: "custom-api",
538
536
  oauthAppId: "app-1",
539
537
  status: "active",
540
538
  },
541
539
  {
542
540
  id: "conn-2",
543
- providerKey: "custom-api",
541
+ provider: "custom-api",
544
542
  oauthAppId: "app-1",
545
543
  status: "active",
546
544
  },