@vellumai/assistant 0.6.1 → 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 (463) hide show
  1. package/bun.lock +40 -40
  2. package/bunfig.toml +3 -0
  3. package/docker-entrypoint.sh +12 -2
  4. package/docs/architecture/memory.md +1 -1
  5. package/node_modules/@vellumai/ces-contracts/src/handles.ts +7 -9
  6. package/node_modules/@vellumai/ces-contracts/src/rpc.ts +42 -0
  7. package/openapi.yaml +184 -69
  8. package/package.json +41 -41
  9. package/scripts/generate-openapi.ts +1 -2
  10. package/src/__tests__/acp-session.test.ts +43 -0
  11. package/src/__tests__/app-builder-tool-scripts.test.ts +1 -0
  12. package/src/__tests__/app-executors.test.ts +1 -0
  13. package/src/__tests__/app-source-watcher.test.ts +37 -11
  14. package/src/__tests__/approval-routes-http.test.ts +178 -1
  15. package/src/__tests__/assistant-event-hub.test.ts +30 -0
  16. package/src/__tests__/browser-fill-credential.test.ts +229 -94
  17. package/src/__tests__/browser-manager.test.ts +40 -27
  18. package/src/__tests__/catalog-files.test.ts +862 -0
  19. package/src/__tests__/channel-approvals.test.ts +53 -0
  20. package/src/__tests__/checker.test.ts +104 -170
  21. package/src/__tests__/cli-command-risk-guard.test.ts +1 -1
  22. package/src/__tests__/config-managed-gemini-defaults.test.ts +326 -0
  23. package/src/__tests__/config-schema-cmd.test.ts +2 -2
  24. package/src/__tests__/config-schema.test.ts +125 -48
  25. package/src/__tests__/confirmation-request-guardian-bridge.test.ts +23 -0
  26. package/src/__tests__/context-overflow-approval.test.ts +21 -6
  27. package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -1
  28. package/src/__tests__/conversation-agent-loop.test.ts +1 -1
  29. package/src/__tests__/conversation-analysis-routes.test.ts +169 -0
  30. package/src/__tests__/conversation-attachments.test.ts +80 -4
  31. package/src/__tests__/conversation-confirmation-signals.test.ts +155 -0
  32. package/src/__tests__/conversation-directories-parse.test.ts +105 -0
  33. package/src/__tests__/conversation-fork-crud.test.ts +17 -0
  34. package/src/__tests__/conversation-history-web-search.test.ts +1 -0
  35. package/src/__tests__/conversation-host-access-routes.test.ts +229 -0
  36. package/src/__tests__/conversation-inject-context.test.ts +103 -0
  37. package/src/__tests__/conversation-queue.test.ts +45 -2
  38. package/src/__tests__/conversation-routes-disk-view.test.ts +5 -0
  39. package/src/__tests__/conversation-routes-guardian-reply.test.ts +16 -0
  40. package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
  41. package/src/__tests__/conversation-runtime-assembly.test.ts +269 -46
  42. package/src/__tests__/conversation-starter-routes.test.ts +126 -0
  43. package/src/__tests__/conversation-starters-cadence.test.ts +161 -0
  44. package/src/__tests__/conversation-store.test.ts +195 -0
  45. package/src/__tests__/conversation-workspace-cache-state.test.ts +193 -0
  46. package/src/__tests__/credential-execution-approval-bridge.test.ts +32 -3
  47. package/src/__tests__/credential-security-invariants.test.ts +1 -0
  48. package/src/__tests__/credential-vault-unit.test.ts +4 -4
  49. package/src/__tests__/credential-vault.test.ts +152 -13
  50. package/src/__tests__/credentials-cli.test.ts +2 -2
  51. package/src/__tests__/date-context.test.ts +4 -4
  52. package/src/__tests__/embedding-managed-proxy-selection.test.ts +256 -0
  53. package/src/__tests__/extension-id-sync-guard.test.ts +155 -0
  54. package/src/__tests__/fixtures/mock-chrome-extension.ts +375 -0
  55. package/src/__tests__/gateway-only-guard.test.ts +3 -0
  56. package/src/__tests__/gemini-provider.test.ts +2 -2
  57. package/src/__tests__/guardian-routing-invariants.test.ts +70 -2
  58. package/src/__tests__/headless-browser-interactions.test.ts +707 -371
  59. package/src/__tests__/headless-browser-navigate.test.ts +389 -47
  60. package/src/__tests__/headless-browser-read-tools.test.ts +266 -103
  61. package/src/__tests__/headless-browser-snapshot.test.ts +240 -77
  62. package/src/__tests__/host-bash-proxy.test.ts +150 -1
  63. package/src/__tests__/host-browser-e2e-cloud.test.ts +462 -0
  64. package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +286 -0
  65. package/src/__tests__/host-browser-e2e-self-hosted.test.ts +374 -0
  66. package/src/__tests__/host-browser-event-routes.test.ts +350 -0
  67. package/src/__tests__/host-browser-proxy.test.ts +444 -0
  68. package/src/__tests__/host-browser-routes.test.ts +198 -0
  69. package/src/__tests__/host-browser-ws-events-e2e.test.ts +320 -0
  70. package/src/__tests__/host-cu-proxy.test.ts +171 -1
  71. package/src/__tests__/host-file-proxy.test.ts +185 -1
  72. package/src/__tests__/host-file-read-tool.test.ts +52 -0
  73. package/src/__tests__/host-proxy-interface.test.ts +165 -0
  74. package/src/__tests__/host-shell-tool.test.ts +1 -11
  75. package/src/__tests__/http-user-message-parity.test.ts +1 -0
  76. package/src/__tests__/init-feature-flag-overrides.test.ts +167 -0
  77. package/src/__tests__/inline-command-runner.test.ts +7 -5
  78. package/src/__tests__/integration-status.test.ts +6 -7
  79. package/src/__tests__/list-messages-tool-merge.test.ts +37 -12
  80. package/src/__tests__/log-export-workspace.test.ts +190 -0
  81. package/src/__tests__/managed-credential-catalog-cli.test.ts +12 -14
  82. package/src/__tests__/mcp-client-auth.test.ts +40 -4
  83. package/src/__tests__/mcp-health-check.test.ts +10 -3
  84. package/src/__tests__/migration-cross-version-compatibility.test.ts +3 -1
  85. package/src/__tests__/migration-export-http.test.ts +61 -2
  86. package/src/__tests__/migration-export-streaming.test.ts +66 -0
  87. package/src/__tests__/migration-import-commit-http.test.ts +101 -1
  88. package/src/__tests__/native-host-marker-sync-guard.test.ts +157 -0
  89. package/src/__tests__/navigate-settings-tab.test.ts +14 -1
  90. package/src/__tests__/notification-broadcaster.test.ts +65 -0
  91. package/src/__tests__/oauth-apps-routes.test.ts +17 -12
  92. package/src/__tests__/oauth-cli.test.ts +707 -60
  93. package/src/__tests__/oauth-connect-orchestrator.test.ts +116 -24
  94. package/src/__tests__/oauth-provider-seed-logos.test.ts +23 -0
  95. package/src/__tests__/oauth-provider-serializer.test.ts +146 -10
  96. package/src/__tests__/oauth-provider-visibility.test.ts +19 -21
  97. package/src/__tests__/oauth-providers-routes.test.ts +50 -14
  98. package/src/__tests__/oauth-store.test.ts +1386 -182
  99. package/src/__tests__/oauth2-gateway-transport.test.ts +211 -20
  100. package/src/__tests__/onboarding-template-contract.test.ts +74 -55
  101. package/src/__tests__/openai-provider.test.ts +2 -2
  102. package/src/__tests__/outlook-categories.test.ts +1 -1
  103. package/src/__tests__/outlook-client-automation.test.ts +1 -1
  104. package/src/__tests__/outlook-compose-tools.test.ts +1 -1
  105. package/src/__tests__/outlook-email-watcher.test.ts +1 -1
  106. package/src/__tests__/outlook-follow-up.test.ts +1 -1
  107. package/src/__tests__/outlook-messaging-provider.test.ts +2 -2
  108. package/src/__tests__/outlook-trash.test.ts +1 -1
  109. package/src/__tests__/outlook-unsubscribe.test.ts +1 -1
  110. package/src/__tests__/permission-checker-host-gate.test.ts +74 -14
  111. package/src/__tests__/permission-mode.test.ts +28 -56
  112. package/src/__tests__/pkb-autoinject.test.ts +96 -0
  113. package/src/__tests__/platform-callback-registration.test.ts +19 -0
  114. package/src/__tests__/post-turn-tool-result-truncation.test.ts +296 -0
  115. package/src/__tests__/proxy-approval-callback.test.ts +18 -0
  116. package/src/__tests__/require-fresh-approval.test.ts +40 -3
  117. package/src/__tests__/sandbox-diagnostics.test.ts +1 -32
  118. package/src/__tests__/sanitize-config-for-transfer.test.ts +132 -0
  119. package/src/__tests__/schedule-routes.test.ts +162 -0
  120. package/src/__tests__/secret-detection-handler.test.ts +84 -0
  121. package/src/__tests__/secret-ingress-http.test.ts +1 -0
  122. package/src/__tests__/send-endpoint-busy.test.ts +3 -0
  123. package/src/__tests__/set-permission-mode.test.ts +13 -250
  124. package/src/__tests__/skills-file-content-endpoint.test.ts +670 -0
  125. package/src/__tests__/skills-files-catalog-fallback.test.ts +450 -0
  126. package/src/__tests__/slack-channel-config.test.ts +12 -15
  127. package/src/__tests__/subagent-detail.test.ts +44 -2
  128. package/src/__tests__/subagent-disposal.test.ts +1 -0
  129. package/src/__tests__/subagent-fork-notifications.test.ts +291 -0
  130. package/src/__tests__/subagent-fork-spawn.test.ts +384 -0
  131. package/src/__tests__/subagent-manager-notify.test.ts +1 -0
  132. package/src/__tests__/subagent-notify-parent.test.ts +1 -0
  133. package/src/__tests__/subagent-spawn-tool-fork.test.ts +411 -0
  134. package/src/__tests__/subagent-tools.test.ts +1 -0
  135. package/src/__tests__/subagent-types.test.ts +1 -0
  136. package/src/__tests__/system-prompt-ask-mode.test.ts +27 -71
  137. package/src/__tests__/system-prompt.test.ts +72 -1
  138. package/src/__tests__/task-scheduler.test.ts +32 -6
  139. package/src/__tests__/telegram-config.test.ts +10 -13
  140. package/src/__tests__/terminal-sandbox.test.ts +1 -1
  141. package/src/__tests__/terminal-tools.test.ts +11 -5
  142. package/src/__tests__/test-preload.ts +14 -0
  143. package/src/__tests__/tool-approval-handler.test.ts +73 -0
  144. package/src/__tests__/tool-domain-event-publisher.test.ts +0 -1
  145. package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -8
  146. package/src/__tests__/tool-executor.test.ts +0 -1
  147. package/src/__tests__/tool-side-effects-slack-dm.test.ts +22 -0
  148. package/src/__tests__/top-level-renderer.test.ts +73 -1
  149. package/src/__tests__/transport-hints-queue.test.ts +62 -0
  150. package/src/__tests__/trust-store.test.ts +4 -4
  151. package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +109 -0
  152. package/src/__tests__/v2-consent-policy.test.ts +103 -0
  153. package/src/__tests__/workspace-migration-030-seed-pkb-autoinject.test.ts +168 -0
  154. package/src/__tests__/workspace-policy.test.ts +2 -7
  155. package/src/acp/client-handler.ts +30 -4
  156. package/src/agent/loop.ts +12 -35
  157. package/src/approvals/guardian-request-resolvers.ts +21 -15
  158. package/src/browser-session/__tests__/manager.test.ts +297 -0
  159. package/src/browser-session/backends/cdp-inspect.ts +30 -0
  160. package/src/browser-session/backends/extension.ts +26 -0
  161. package/src/browser-session/backends/local.ts +24 -0
  162. package/src/browser-session/events.ts +164 -0
  163. package/src/browser-session/index.ts +27 -0
  164. package/src/browser-session/manager.ts +159 -0
  165. package/src/browser-session/types.ts +28 -0
  166. package/src/channels/__tests__/types.test.ts +134 -0
  167. package/src/channels/types.ts +55 -0
  168. package/src/cli/__tests__/run-assistant-command.ts +34 -7
  169. package/src/cli/__tests__/unknown-command.test.ts +33 -0
  170. package/src/cli/commands/browser-relay.ts +339 -409
  171. package/src/cli/commands/credentials.ts +3 -3
  172. package/src/cli/commands/default-action.ts +68 -1
  173. package/src/cli/commands/email.ts +18 -13
  174. package/src/cli/commands/mcp.ts +16 -4
  175. package/src/cli/commands/oauth/__tests__/connect.test.ts +68 -41
  176. package/src/cli/commands/oauth/__tests__/disconnect.test.ts +21 -21
  177. package/src/cli/commands/oauth/__tests__/mode.test.ts +17 -17
  178. package/src/cli/commands/oauth/__tests__/ping.test.ts +16 -16
  179. package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +31 -33
  180. package/src/cli/commands/oauth/__tests__/providers-register.test.ts +329 -0
  181. package/src/cli/commands/oauth/__tests__/providers-update.test.ts +116 -12
  182. package/src/cli/commands/oauth/__tests__/status.test.ts +10 -10
  183. package/src/cli/commands/oauth/__tests__/token.test.ts +7 -7
  184. package/src/cli/commands/oauth/apps.ts +7 -4
  185. package/src/cli/commands/oauth/connect.ts +16 -2
  186. package/src/cli/commands/oauth/disconnect.ts +1 -1
  187. package/src/cli/commands/oauth/providers.ts +200 -36
  188. package/src/cli/commands/oauth/shared.ts +5 -5
  189. package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +259 -0
  190. package/src/cli/commands/platform/__tests__/connect.test.ts +1 -1
  191. package/src/cli/commands/platform/__tests__/disconnect.test.ts +1 -1
  192. package/src/cli/commands/platform/__tests__/status.test.ts +1 -1
  193. package/src/cli/commands/platform/index.ts +107 -10
  194. package/src/cli/commands/usage.ts +10 -9
  195. package/src/cli/lib/daemon-credential-client.ts +4 -0
  196. package/src/cli/program.ts +10 -3
  197. package/src/config/assistant-feature-flags.ts +59 -55
  198. package/src/config/bundled-skills/app-builder/SKILL.md +33 -173
  199. package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +105 -0
  200. package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +56 -0
  201. package/src/config/bundled-skills/app-builder/references/WIDGETS.md +125 -0
  202. package/src/config/bundled-skills/contacts/SKILL.md +3 -0
  203. package/src/config/bundled-skills/document/SKILL.md +4 -0
  204. package/src/config/bundled-skills/gmail/SKILL.md +12 -7
  205. package/src/config/bundled-skills/gmail/TOOLS.json +1 -1
  206. package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +2 -1
  207. package/src/config/bundled-skills/outlook/SKILL.md +7 -0
  208. package/src/config/bundled-skills/settings/TOOLS.json +1 -1
  209. package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +8 -3
  210. package/src/config/bundled-skills/subagent/SKILL.md +21 -0
  211. package/src/config/bundled-skills/subagent/TOOLS.json +8 -4
  212. package/src/config/bundled-skills/tasks/SKILL.md +5 -0
  213. package/src/config/env-registry.ts +14 -0
  214. package/src/config/env.ts +21 -0
  215. package/src/config/feature-flag-registry.json +46 -7
  216. package/src/config/loader.ts +56 -1
  217. package/src/config/sanitize-for-transfer.ts +47 -0
  218. package/src/config/schema.ts +46 -5
  219. package/src/config/schemas/host-browser.ts +66 -0
  220. package/src/config/schemas/memory-lifecycle.ts +1 -1
  221. package/src/config/schemas/memory-retrieval.ts +103 -0
  222. package/src/config/schemas/security.ts +0 -6
  223. package/src/config/schemas/services.ts +16 -0
  224. package/src/config/types.ts +0 -1
  225. package/src/context/post-turn-tool-result-truncation.ts +176 -0
  226. package/src/context/window-manager.ts +19 -1
  227. package/src/credential-execution/approval-bridge.ts +49 -16
  228. package/src/credential-execution/managed-catalog.ts +3 -7
  229. package/src/daemon/__tests__/conversation-tool-setup.test.ts +186 -0
  230. package/src/daemon/app-source-watcher.ts +35 -0
  231. package/src/daemon/config-watcher.ts +6 -2
  232. package/src/daemon/context-overflow-approval.ts +5 -1
  233. package/src/daemon/conversation-agent-loop-handlers.ts +17 -2
  234. package/src/daemon/conversation-agent-loop.ts +74 -19
  235. package/src/daemon/conversation-attachments.ts +40 -1
  236. package/src/daemon/conversation-messaging.ts +3 -0
  237. package/src/daemon/conversation-process.ts +66 -3
  238. package/src/daemon/conversation-queue-manager.ts +8 -0
  239. package/src/daemon/conversation-runtime-assembly.ts +159 -20
  240. package/src/daemon/conversation-surfaces.ts +78 -12
  241. package/src/daemon/conversation-tool-setup.ts +74 -11
  242. package/src/daemon/conversation-workspace.ts +12 -0
  243. package/src/daemon/conversation.ts +227 -11
  244. package/src/daemon/date-context.ts +10 -10
  245. package/src/daemon/first-greeting.ts +3 -2
  246. package/src/daemon/handlers/conversations.ts +9 -139
  247. package/src/daemon/handlers/shared.ts +65 -0
  248. package/src/daemon/handlers/skills.ts +232 -37
  249. package/src/daemon/host-bash-proxy.ts +48 -13
  250. package/src/daemon/host-browser-proxy.ts +191 -0
  251. package/src/daemon/host-cu-proxy.ts +36 -11
  252. package/src/daemon/host-file-proxy.ts +57 -9
  253. package/src/daemon/lifecycle.ts +86 -12
  254. package/src/daemon/message-protocol.ts +7 -0
  255. package/src/daemon/message-types/conversations.ts +59 -13
  256. package/src/daemon/message-types/host-browser.ts +100 -0
  257. package/src/daemon/message-types/messages.ts +5 -6
  258. package/src/daemon/message-types/notifications.ts +12 -0
  259. package/src/daemon/message-types/settings.ts +12 -0
  260. package/src/daemon/message-types/skills.ts +10 -0
  261. package/src/daemon/message-types/subagents.ts +2 -0
  262. package/src/daemon/server.ts +112 -35
  263. package/src/daemon/tool-side-effects.ts +6 -0
  264. package/src/daemon/transport-hints.ts +14 -0
  265. package/src/inbound/platform-callback-registration.ts +18 -17
  266. package/src/index.ts +1 -1
  267. package/src/mcp/client.ts +59 -24
  268. package/src/memory/app-store.ts +31 -1
  269. package/src/memory/conversation-crud.ts +38 -10
  270. package/src/memory/conversation-directories.ts +39 -0
  271. package/src/memory/conversation-group-migration.ts +65 -5
  272. package/src/memory/conversation-starters-cadence.ts +76 -0
  273. package/src/memory/conversation-title-service.ts +5 -2
  274. package/src/memory/db-init.ts +12 -0
  275. package/src/memory/embedding-backend.test.ts +75 -0
  276. package/src/memory/embedding-backend.ts +131 -5
  277. package/src/memory/embedding-gemini.test.ts +54 -0
  278. package/src/memory/embedding-gemini.ts +20 -9
  279. package/src/memory/embedding-local.ts +177 -18
  280. package/src/memory/graph/capability-seed.ts +3 -5
  281. package/src/memory/graph/consolidation.ts +10 -23
  282. package/src/memory/graph/extraction-job.ts +15 -0
  283. package/src/memory/graph/retriever.ts +40 -22
  284. package/src/memory/graph/store.test.ts +7 -3
  285. package/src/memory/graph/store.ts +47 -12
  286. package/src/memory/group-crud.ts +25 -9
  287. package/src/memory/llm-usage-store.ts +45 -4
  288. package/src/memory/migrations/213-oauth-providers-scope-separator.ts +13 -0
  289. package/src/memory/migrations/214-oauth-providers-refresh-url.ts +11 -0
  290. package/src/memory/migrations/215-oauth-providers-revoke.ts +14 -0
  291. package/src/memory/migrations/216-oauth-providers-token-auth-method.ts +30 -0
  292. package/src/memory/migrations/217-conversation-host-access.ts +40 -0
  293. package/src/memory/migrations/218-oauth-providers-logo-url.ts +11 -0
  294. package/src/memory/migrations/index.ts +6 -0
  295. package/src/memory/migrations/registry.ts +8 -0
  296. package/src/memory/schema/conversations.ts +1 -0
  297. package/src/memory/schema/oauth.ts +18 -13
  298. package/src/messaging/provider.ts +1 -1
  299. package/src/notifications/broadcaster.ts +6 -0
  300. package/src/notifications/conversation-pairing.ts +12 -4
  301. package/src/notifications/emit-signal.ts +14 -0
  302. package/src/notifications/signal.ts +11 -0
  303. package/src/oauth/AGENTS.md +76 -0
  304. package/src/oauth/__tests__/identity-verifier.test.ts +24 -19
  305. package/src/oauth/__tests__/seed-providers-managed.test.ts +32 -0
  306. package/src/oauth/byo-connection.test.ts +8 -8
  307. package/src/oauth/byo-connection.ts +7 -7
  308. package/src/oauth/connect-orchestrator.ts +23 -21
  309. package/src/oauth/connect-types.ts +3 -3
  310. package/src/oauth/connection-resolver.test.ts +17 -4
  311. package/src/oauth/connection-resolver.ts +16 -16
  312. package/src/oauth/connection.ts +1 -1
  313. package/src/oauth/manual-token-connection.ts +13 -13
  314. package/src/oauth/oauth-store.ts +214 -100
  315. package/src/oauth/platform-connection.test.ts +5 -5
  316. package/src/oauth/platform-connection.ts +4 -4
  317. package/src/oauth/provider-serializer.ts +31 -5
  318. package/src/oauth/revoke.ts +76 -0
  319. package/src/oauth/seed-providers.ts +127 -87
  320. package/src/oauth/token-persistence.ts +1 -1
  321. package/src/permissions/checker.ts +3 -3
  322. package/src/permissions/defaults.ts +7 -8
  323. package/src/permissions/permission-mode.ts +4 -11
  324. package/src/permissions/prompter.ts +13 -3
  325. package/src/permissions/v2-consent-policy.ts +87 -0
  326. package/src/platform/client.ts +1 -1
  327. package/src/prompts/system-prompt.ts +18 -21
  328. package/src/prompts/templates/BOOTSTRAP-REFERENCE.md +3 -65
  329. package/src/prompts/templates/BOOTSTRAP.md +59 -96
  330. package/src/prompts/templates/SOUL.md +11 -11
  331. package/src/providers/anthropic/client.ts +1 -0
  332. package/src/providers/types.ts +1 -1
  333. package/src/runtime/AGENTS.md +23 -0
  334. package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +715 -0
  335. package/src/runtime/__tests__/capability-tokens.test.ts +258 -0
  336. package/src/runtime/__tests__/chrome-extension-registry.test.ts +518 -0
  337. package/src/runtime/assistant-event-hub.ts +24 -2
  338. package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
  339. package/src/runtime/auth/__tests__/middleware.test.ts +116 -1
  340. package/src/runtime/auth/__tests__/route-policy.test.ts +8 -0
  341. package/src/runtime/auth/middleware.ts +98 -0
  342. package/src/runtime/auth/route-policy.ts +6 -7
  343. package/src/runtime/auth/token-service.ts +8 -0
  344. package/src/runtime/capability-tokens.ts +414 -0
  345. package/src/runtime/channel-approvals.ts +18 -5
  346. package/src/runtime/chrome-extension-registry.ts +332 -0
  347. package/src/runtime/confirmation-request-guardian-bridge.ts +6 -0
  348. package/src/runtime/guardian-decision-types.ts +7 -0
  349. package/src/runtime/http-server.ts +425 -70
  350. package/src/runtime/migrations/__tests__/rebind-secrets-credentials.test.ts +172 -0
  351. package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +276 -0
  352. package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +162 -0
  353. package/src/runtime/migrations/migration-transport.ts +6 -0
  354. package/src/runtime/migrations/migration-wizard.ts +22 -2
  355. package/src/runtime/migrations/rebind-secrets-screen.ts +76 -15
  356. package/src/runtime/migrations/vbundle-builder.ts +145 -38
  357. package/src/runtime/migrations/vbundle-import-analyzer.ts +19 -0
  358. package/src/runtime/migrations/vbundle-importer.ts +55 -5
  359. package/src/runtime/pending-interactions.ts +29 -13
  360. package/src/runtime/routes/approval-routes.ts +90 -16
  361. package/src/runtime/routes/browser-cdp-routes.ts +229 -0
  362. package/src/runtime/routes/browser-extension-pair-routes.ts +497 -0
  363. package/src/runtime/routes/conversation-analysis-routes.ts +18 -5
  364. package/src/runtime/routes/conversation-management-routes.ts +108 -0
  365. package/src/runtime/routes/conversation-routes.ts +308 -28
  366. package/src/runtime/routes/conversation-starter-routes.ts +78 -16
  367. package/src/runtime/routes/group-routes.ts +22 -8
  368. package/src/runtime/routes/guardian-action-routes.ts +24 -13
  369. package/src/runtime/routes/host-browser-routes.ts +279 -0
  370. package/src/runtime/routes/host-file-routes.ts +9 -1
  371. package/src/runtime/routes/identity-routes.ts +259 -16
  372. package/src/runtime/routes/log-export/AGENTS.md +104 -0
  373. package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +103 -0
  374. package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +716 -0
  375. package/src/runtime/routes/log-export/workspace-allowlist.ts +458 -0
  376. package/src/runtime/routes/log-export-routes.ts +60 -25
  377. package/src/runtime/routes/memory-item-routes.ts +1 -7
  378. package/src/runtime/routes/migration-routes.ts +87 -2
  379. package/src/runtime/routes/oauth-apps.ts +15 -17
  380. package/src/runtime/routes/oauth-providers.ts +4 -0
  381. package/src/runtime/routes/schedule-routes.ts +24 -11
  382. package/src/runtime/routes/settings-routes.ts +9 -97
  383. package/src/runtime/routes/skills-routes.ts +52 -2
  384. package/src/runtime/routes/subagents-routes.ts +14 -10
  385. package/src/runtime/routes/usage-routes.ts +8 -7
  386. package/src/runtime/routes/workspace-routes.test.ts +22 -0
  387. package/src/runtime/routes/workspace-routes.ts +8 -1
  388. package/src/runtime/routes/workspace-utils.ts +2 -0
  389. package/src/schedule/scheduler.ts +7 -5
  390. package/src/security/ces-credential-client.ts +20 -0
  391. package/src/security/ces-rpc-credential-backend.ts +17 -0
  392. package/src/security/credential-backend.ts +5 -0
  393. package/src/security/oauth2.ts +42 -25
  394. package/src/security/secure-keys.ts +118 -25
  395. package/src/security/token-manager.ts +23 -10
  396. package/src/skills/catalog-files.ts +492 -0
  397. package/src/skills/inline-command-runner.ts +12 -14
  398. package/src/subagent/manager.ts +131 -26
  399. package/src/subagent/types.ts +19 -0
  400. package/src/tools/apps/executors.ts +11 -2
  401. package/src/tools/browser/__tests__/auth-detector.test.ts +202 -108
  402. package/src/tools/browser/auth-detector.ts +43 -12
  403. package/src/tools/browser/browser-execution.ts +645 -340
  404. package/src/tools/browser/browser-manager.ts +36 -12
  405. package/src/tools/browser/cdp-client/__tests__/accessibility-snapshot.test.ts +318 -0
  406. package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +1175 -0
  407. package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +870 -0
  408. package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +330 -0
  409. package/src/tools/browser/cdp-client/__tests__/factory.test.ts +377 -0
  410. package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-nested-frames.json +64 -0
  411. package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-simple.json +69 -0
  412. package/src/tools/browser/cdp-client/__tests__/local-cdp-client.test.ts +310 -0
  413. package/src/tools/browser/cdp-client/__tests__/types.test.ts +96 -0
  414. package/src/tools/browser/cdp-client/accessibility-snapshot.ts +387 -0
  415. package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +695 -0
  416. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/discovery.test.ts +743 -0
  417. package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +580 -0
  418. package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +578 -0
  419. package/src/tools/browser/cdp-client/cdp-inspect/ws-transport.ts +579 -0
  420. package/src/tools/browser/cdp-client/cdp-inspect-client.ts +635 -0
  421. package/src/tools/browser/cdp-client/errors.ts +34 -0
  422. package/src/tools/browser/cdp-client/extension-cdp-client.ts +125 -0
  423. package/src/tools/browser/cdp-client/factory.ts +204 -0
  424. package/src/tools/browser/cdp-client/index.ts +14 -0
  425. package/src/tools/browser/cdp-client/local-cdp-client.ts +187 -0
  426. package/src/tools/browser/cdp-client/types.ts +52 -0
  427. package/src/tools/filesystem/edit.ts +1 -1
  428. package/src/tools/filesystem/list.ts +1 -1
  429. package/src/tools/filesystem/read.ts +1 -1
  430. package/src/tools/filesystem/write.ts +2 -1
  431. package/src/tools/host-filesystem/edit.ts +1 -1
  432. package/src/tools/host-filesystem/read.ts +12 -15
  433. package/src/tools/host-filesystem/write.ts +1 -1
  434. package/src/tools/host-terminal/host-shell.ts +21 -16
  435. package/src/tools/permission-checker.ts +77 -100
  436. package/src/tools/registry.ts +0 -2
  437. package/src/tools/secret-detection-handler.ts +34 -1
  438. package/src/tools/shared/filesystem/image-read.ts +61 -40
  439. package/src/tools/skills/sandbox-runner.ts +3 -6
  440. package/src/tools/subagent/spawn.ts +47 -3
  441. package/src/tools/subagent/status.ts +2 -0
  442. package/src/tools/system/register.ts +2 -16
  443. package/src/tools/terminal/safe-env.ts +7 -0
  444. package/src/tools/terminal/sandbox-diagnostics.ts +4 -4
  445. package/src/tools/terminal/sandbox.ts +4 -1
  446. package/src/tools/terminal/shell.ts +24 -21
  447. package/src/tools/tool-approval-handler.ts +48 -2
  448. package/src/tools/types.ts +2 -3
  449. package/src/util/platform.ts +14 -19
  450. package/src/watcher/provider-types.ts +1 -1
  451. package/src/workspace/migrations/029-seed-pkb.ts +1 -0
  452. package/src/workspace/migrations/030-seed-pkb-autoinject.ts +73 -0
  453. package/src/workspace/migrations/registry.ts +2 -0
  454. package/src/workspace/top-level-renderer.ts +19 -1
  455. package/src/__tests__/chrome-cdp.test.ts +0 -419
  456. package/src/__tests__/permission-mode-sse.test.ts +0 -418
  457. package/src/__tests__/permission-mode-store.test.ts +0 -277
  458. package/src/browser-extension-relay/protocol.ts +0 -63
  459. package/src/browser-extension-relay/server.ts +0 -203
  460. package/src/config/schemas/sandbox.ts +0 -14
  461. package/src/permissions/permission-mode-store.ts +0 -180
  462. package/src/tools/browser/chrome-cdp.ts +0 -239
  463. package/src/tools/system/set-permission-mode.ts +0 -103
@@ -11,7 +11,7 @@ let mockGetProvider: (
11
11
  ) => Record<string, unknown> | undefined = () => undefined;
12
12
 
13
13
  let mockListActiveConnectionsByProvider: (
14
- providerKey: string,
14
+ provider: string,
15
15
  ) => Array<Record<string, unknown>> = () => [];
16
16
 
17
17
  let mockGetManagedServiceConfigKey: (key: string) => string | null = () => null;
@@ -71,8 +71,8 @@ mock.module("../../../../config/loader.js", () => ({
71
71
 
72
72
  mock.module("../../../../oauth/oauth-store.js", () => ({
73
73
  getProvider: (key: string) => mockGetProvider(key),
74
- listActiveConnectionsByProvider: (providerKey: string) =>
75
- mockListActiveConnectionsByProvider(providerKey),
74
+ listActiveConnectionsByProvider: (provider: string) =>
75
+ mockListActiveConnectionsByProvider(provider),
76
76
  listConnections: () => [],
77
77
  getConnection: () => undefined,
78
78
  getConnectionByProvider: () => undefined,
@@ -276,7 +276,7 @@ describe("assistant oauth mode", () => {
276
276
 
277
277
  test("provider without managedServiceConfigKey returns your-own with managedModeSupported: false", async () => {
278
278
  mockGetProvider = () => ({
279
- providerKey: "slack",
279
+ provider: "slack",
280
280
  managedServiceConfigKey: null,
281
281
  });
282
282
  mockGetManagedServiceConfigKey = () => null;
@@ -296,7 +296,7 @@ describe("assistant oauth mode", () => {
296
296
 
297
297
  test("provider in managed mode returns mode: managed with managedModeSupported: true", async () => {
298
298
  mockGetProvider = () => ({
299
- providerKey: "google",
299
+ provider: "google",
300
300
  managedServiceConfigKey: "google-oauth",
301
301
  });
302
302
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -319,7 +319,7 @@ describe("assistant oauth mode", () => {
319
319
 
320
320
  test("provider in your-own mode returns mode: your-own with managedModeSupported: true", async () => {
321
321
  mockGetProvider = () => ({
322
- providerKey: "google",
322
+ provider: "google",
323
323
  managedServiceConfigKey: "google-oauth",
324
324
  });
325
325
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -348,7 +348,7 @@ describe("assistant oauth mode", () => {
348
348
  describe("set mode", () => {
349
349
  test("invalid mode value returns error listing valid values", async () => {
350
350
  mockGetProvider = () => ({
351
- providerKey: "google",
351
+ provider: "google",
352
352
  managedServiceConfigKey: "google-oauth",
353
353
  });
354
354
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -370,7 +370,7 @@ describe("assistant oauth mode", () => {
370
370
 
371
371
  test("provider without managedServiceConfigKey returns error about managed mode not available when --set managed", async () => {
372
372
  mockGetProvider = () => ({
373
- providerKey: "slack",
373
+ provider: "slack",
374
374
  managedServiceConfigKey: null,
375
375
  });
376
376
  mockGetManagedServiceConfigKey = () => null;
@@ -391,7 +391,7 @@ describe("assistant oauth mode", () => {
391
391
 
392
392
  test("provider without managedServiceConfigKey treats --set your-own as successful no-op", async () => {
393
393
  mockGetProvider = () => ({
394
- providerKey: "slack",
394
+ provider: "slack",
395
395
  managedServiceConfigKey: null,
396
396
  });
397
397
  mockGetManagedServiceConfigKey = () => null;
@@ -414,7 +414,7 @@ describe("assistant oauth mode", () => {
414
414
 
415
415
  test("set to same mode returns changed: false", async () => {
416
416
  mockGetProvider = () => ({
417
- providerKey: "google",
417
+ provider: "google",
418
418
  managedServiceConfigKey: "google-oauth",
419
419
  });
420
420
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -440,7 +440,7 @@ describe("assistant oauth mode", () => {
440
440
 
441
441
  test("switch managed -> your-own with active managed connections and no BYO connections includes hint", async () => {
442
442
  mockGetProvider = () => ({
443
- providerKey: "google",
443
+ provider: "google",
444
444
  managedServiceConfigKey: "google-oauth",
445
445
  });
446
446
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -483,7 +483,7 @@ describe("assistant oauth mode", () => {
483
483
 
484
484
  test("switch your-own -> managed with active BYO connections and no managed connections includes hint", async () => {
485
485
  mockGetProvider = () => ({
486
- providerKey: "google",
486
+ provider: "google",
487
487
  managedServiceConfigKey: "google-oauth",
488
488
  });
489
489
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -496,7 +496,7 @@ describe("assistant oauth mode", () => {
496
496
  mockListActiveConnectionsByProvider = () => [
497
497
  {
498
498
  id: "conn-local-1",
499
- providerKey: "google",
499
+ provider: "google",
500
500
  status: "active",
501
501
  },
502
502
  ];
@@ -526,7 +526,7 @@ describe("assistant oauth mode", () => {
526
526
 
527
527
  test("switch mode with connections on both sides has no hint", async () => {
528
528
  mockGetProvider = () => ({
529
- providerKey: "google",
529
+ provider: "google",
530
530
  managedServiceConfigKey: "google-oauth",
531
531
  });
532
532
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -549,7 +549,7 @@ describe("assistant oauth mode", () => {
549
549
  mockListActiveConnectionsByProvider = () => [
550
550
  {
551
551
  id: "conn-local-1",
552
- providerKey: "google",
552
+ provider: "google",
553
553
  status: "active",
554
554
  },
555
555
  ];
@@ -571,7 +571,7 @@ describe("assistant oauth mode", () => {
571
571
 
572
572
  test("switch mode with no connections on either side has no hint", async () => {
573
573
  mockGetProvider = () => ({
574
- providerKey: "google",
574
+ provider: "google",
575
575
  managedServiceConfigKey: "google-oauth",
576
576
  });
577
577
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -604,7 +604,7 @@ describe("assistant oauth mode", () => {
604
604
 
605
605
  test("saveRawConfig is called with the correct nested path", async () => {
606
606
  mockGetProvider = () => ({
607
- providerKey: "google",
607
+ provider: "google",
608
608
  managedServiceConfigKey: "google-oauth",
609
609
  });
610
610
  mockGetManagedServiceConfigKey = () => "google-oauth";
@@ -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
  },