@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.
- package/bun.lock +40 -40
- package/bunfig.toml +3 -0
- package/docker-entrypoint.sh +12 -2
- package/docs/architecture/memory.md +1 -1
- package/node_modules/@vellumai/ces-contracts/src/handles.ts +7 -9
- package/node_modules/@vellumai/ces-contracts/src/rpc.ts +42 -0
- package/openapi.yaml +184 -69
- package/package.json +41 -41
- package/scripts/generate-openapi.ts +1 -2
- package/src/__tests__/acp-session.test.ts +43 -0
- package/src/__tests__/app-builder-tool-scripts.test.ts +1 -0
- package/src/__tests__/app-executors.test.ts +1 -0
- package/src/__tests__/app-source-watcher.test.ts +37 -11
- package/src/__tests__/approval-routes-http.test.ts +178 -1
- package/src/__tests__/assistant-event-hub.test.ts +30 -0
- package/src/__tests__/browser-fill-credential.test.ts +229 -94
- package/src/__tests__/browser-manager.test.ts +40 -27
- package/src/__tests__/catalog-files.test.ts +862 -0
- package/src/__tests__/channel-approvals.test.ts +53 -0
- package/src/__tests__/checker.test.ts +104 -170
- package/src/__tests__/cli-command-risk-guard.test.ts +1 -1
- package/src/__tests__/config-managed-gemini-defaults.test.ts +326 -0
- package/src/__tests__/config-schema-cmd.test.ts +2 -2
- package/src/__tests__/config-schema.test.ts +125 -48
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +23 -0
- package/src/__tests__/context-overflow-approval.test.ts +21 -6
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop.test.ts +1 -1
- package/src/__tests__/conversation-analysis-routes.test.ts +169 -0
- package/src/__tests__/conversation-attachments.test.ts +80 -4
- package/src/__tests__/conversation-confirmation-signals.test.ts +155 -0
- package/src/__tests__/conversation-directories-parse.test.ts +105 -0
- package/src/__tests__/conversation-fork-crud.test.ts +17 -0
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-host-access-routes.test.ts +229 -0
- package/src/__tests__/conversation-inject-context.test.ts +103 -0
- package/src/__tests__/conversation-queue.test.ts +45 -2
- package/src/__tests__/conversation-routes-disk-view.test.ts +5 -0
- package/src/__tests__/conversation-routes-guardian-reply.test.ts +16 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +1 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +269 -46
- package/src/__tests__/conversation-starter-routes.test.ts +126 -0
- package/src/__tests__/conversation-starters-cadence.test.ts +161 -0
- package/src/__tests__/conversation-store.test.ts +195 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +193 -0
- package/src/__tests__/credential-execution-approval-bridge.test.ts +32 -3
- package/src/__tests__/credential-security-invariants.test.ts +1 -0
- package/src/__tests__/credential-vault-unit.test.ts +4 -4
- package/src/__tests__/credential-vault.test.ts +152 -13
- package/src/__tests__/credentials-cli.test.ts +2 -2
- package/src/__tests__/date-context.test.ts +4 -4
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +256 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +155 -0
- package/src/__tests__/fixtures/mock-chrome-extension.ts +375 -0
- package/src/__tests__/gateway-only-guard.test.ts +3 -0
- package/src/__tests__/gemini-provider.test.ts +2 -2
- package/src/__tests__/guardian-routing-invariants.test.ts +70 -2
- package/src/__tests__/headless-browser-interactions.test.ts +707 -371
- package/src/__tests__/headless-browser-navigate.test.ts +389 -47
- package/src/__tests__/headless-browser-read-tools.test.ts +266 -103
- package/src/__tests__/headless-browser-snapshot.test.ts +240 -77
- package/src/__tests__/host-bash-proxy.test.ts +150 -1
- package/src/__tests__/host-browser-e2e-cloud.test.ts +462 -0
- package/src/__tests__/host-browser-e2e-self-hosted-capability.test.ts +286 -0
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +374 -0
- package/src/__tests__/host-browser-event-routes.test.ts +350 -0
- package/src/__tests__/host-browser-proxy.test.ts +444 -0
- package/src/__tests__/host-browser-routes.test.ts +198 -0
- package/src/__tests__/host-browser-ws-events-e2e.test.ts +320 -0
- package/src/__tests__/host-cu-proxy.test.ts +171 -1
- package/src/__tests__/host-file-proxy.test.ts +185 -1
- package/src/__tests__/host-file-read-tool.test.ts +52 -0
- package/src/__tests__/host-proxy-interface.test.ts +165 -0
- package/src/__tests__/host-shell-tool.test.ts +1 -11
- package/src/__tests__/http-user-message-parity.test.ts +1 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +167 -0
- package/src/__tests__/inline-command-runner.test.ts +7 -5
- package/src/__tests__/integration-status.test.ts +6 -7
- package/src/__tests__/list-messages-tool-merge.test.ts +37 -12
- package/src/__tests__/log-export-workspace.test.ts +190 -0
- package/src/__tests__/managed-credential-catalog-cli.test.ts +12 -14
- package/src/__tests__/mcp-client-auth.test.ts +40 -4
- package/src/__tests__/mcp-health-check.test.ts +10 -3
- package/src/__tests__/migration-cross-version-compatibility.test.ts +3 -1
- package/src/__tests__/migration-export-http.test.ts +61 -2
- package/src/__tests__/migration-export-streaming.test.ts +66 -0
- package/src/__tests__/migration-import-commit-http.test.ts +101 -1
- package/src/__tests__/native-host-marker-sync-guard.test.ts +157 -0
- package/src/__tests__/navigate-settings-tab.test.ts +14 -1
- package/src/__tests__/notification-broadcaster.test.ts +65 -0
- package/src/__tests__/oauth-apps-routes.test.ts +17 -12
- package/src/__tests__/oauth-cli.test.ts +707 -60
- package/src/__tests__/oauth-connect-orchestrator.test.ts +116 -24
- package/src/__tests__/oauth-provider-seed-logos.test.ts +23 -0
- package/src/__tests__/oauth-provider-serializer.test.ts +146 -10
- package/src/__tests__/oauth-provider-visibility.test.ts +19 -21
- package/src/__tests__/oauth-providers-routes.test.ts +50 -14
- package/src/__tests__/oauth-store.test.ts +1386 -182
- package/src/__tests__/oauth2-gateway-transport.test.ts +211 -20
- package/src/__tests__/onboarding-template-contract.test.ts +74 -55
- package/src/__tests__/openai-provider.test.ts +2 -2
- package/src/__tests__/outlook-categories.test.ts +1 -1
- package/src/__tests__/outlook-client-automation.test.ts +1 -1
- package/src/__tests__/outlook-compose-tools.test.ts +1 -1
- package/src/__tests__/outlook-email-watcher.test.ts +1 -1
- package/src/__tests__/outlook-follow-up.test.ts +1 -1
- package/src/__tests__/outlook-messaging-provider.test.ts +2 -2
- package/src/__tests__/outlook-trash.test.ts +1 -1
- package/src/__tests__/outlook-unsubscribe.test.ts +1 -1
- package/src/__tests__/permission-checker-host-gate.test.ts +74 -14
- package/src/__tests__/permission-mode.test.ts +28 -56
- package/src/__tests__/pkb-autoinject.test.ts +96 -0
- package/src/__tests__/platform-callback-registration.test.ts +19 -0
- package/src/__tests__/post-turn-tool-result-truncation.test.ts +296 -0
- package/src/__tests__/proxy-approval-callback.test.ts +18 -0
- package/src/__tests__/require-fresh-approval.test.ts +40 -3
- package/src/__tests__/sandbox-diagnostics.test.ts +1 -32
- package/src/__tests__/sanitize-config-for-transfer.test.ts +132 -0
- package/src/__tests__/schedule-routes.test.ts +162 -0
- package/src/__tests__/secret-detection-handler.test.ts +84 -0
- package/src/__tests__/secret-ingress-http.test.ts +1 -0
- package/src/__tests__/send-endpoint-busy.test.ts +3 -0
- package/src/__tests__/set-permission-mode.test.ts +13 -250
- package/src/__tests__/skills-file-content-endpoint.test.ts +670 -0
- package/src/__tests__/skills-files-catalog-fallback.test.ts +450 -0
- package/src/__tests__/slack-channel-config.test.ts +12 -15
- package/src/__tests__/subagent-detail.test.ts +44 -2
- package/src/__tests__/subagent-disposal.test.ts +1 -0
- package/src/__tests__/subagent-fork-notifications.test.ts +291 -0
- package/src/__tests__/subagent-fork-spawn.test.ts +384 -0
- package/src/__tests__/subagent-manager-notify.test.ts +1 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -0
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +411 -0
- package/src/__tests__/subagent-tools.test.ts +1 -0
- package/src/__tests__/subagent-types.test.ts +1 -0
- package/src/__tests__/system-prompt-ask-mode.test.ts +27 -71
- package/src/__tests__/system-prompt.test.ts +72 -1
- package/src/__tests__/task-scheduler.test.ts +32 -6
- package/src/__tests__/telegram-config.test.ts +10 -13
- package/src/__tests__/terminal-sandbox.test.ts +1 -1
- package/src/__tests__/terminal-tools.test.ts +11 -5
- package/src/__tests__/test-preload.ts +14 -0
- package/src/__tests__/tool-approval-handler.test.ts +73 -0
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -1
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +1 -8
- package/src/__tests__/tool-executor.test.ts +0 -1
- package/src/__tests__/tool-side-effects-slack-dm.test.ts +22 -0
- package/src/__tests__/top-level-renderer.test.ts +73 -1
- package/src/__tests__/transport-hints-queue.test.ts +62 -0
- package/src/__tests__/trust-store.test.ts +4 -4
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +109 -0
- package/src/__tests__/v2-consent-policy.test.ts +103 -0
- package/src/__tests__/workspace-migration-030-seed-pkb-autoinject.test.ts +168 -0
- package/src/__tests__/workspace-policy.test.ts +2 -7
- package/src/acp/client-handler.ts +30 -4
- package/src/agent/loop.ts +12 -35
- package/src/approvals/guardian-request-resolvers.ts +21 -15
- package/src/browser-session/__tests__/manager.test.ts +297 -0
- package/src/browser-session/backends/cdp-inspect.ts +30 -0
- package/src/browser-session/backends/extension.ts +26 -0
- package/src/browser-session/backends/local.ts +24 -0
- package/src/browser-session/events.ts +164 -0
- package/src/browser-session/index.ts +27 -0
- package/src/browser-session/manager.ts +159 -0
- package/src/browser-session/types.ts +28 -0
- package/src/channels/__tests__/types.test.ts +134 -0
- package/src/channels/types.ts +55 -0
- package/src/cli/__tests__/run-assistant-command.ts +34 -7
- package/src/cli/__tests__/unknown-command.test.ts +33 -0
- package/src/cli/commands/browser-relay.ts +339 -409
- package/src/cli/commands/credentials.ts +3 -3
- package/src/cli/commands/default-action.ts +68 -1
- package/src/cli/commands/email.ts +18 -13
- package/src/cli/commands/mcp.ts +16 -4
- package/src/cli/commands/oauth/__tests__/connect.test.ts +68 -41
- package/src/cli/commands/oauth/__tests__/disconnect.test.ts +21 -21
- package/src/cli/commands/oauth/__tests__/mode.test.ts +17 -17
- package/src/cli/commands/oauth/__tests__/ping.test.ts +16 -16
- package/src/cli/commands/oauth/__tests__/providers-delete.test.ts +31 -33
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +329 -0
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +116 -12
- package/src/cli/commands/oauth/__tests__/status.test.ts +10 -10
- package/src/cli/commands/oauth/__tests__/token.test.ts +7 -7
- package/src/cli/commands/oauth/apps.ts +7 -4
- package/src/cli/commands/oauth/connect.ts +16 -2
- package/src/cli/commands/oauth/disconnect.ts +1 -1
- package/src/cli/commands/oauth/providers.ts +200 -36
- package/src/cli/commands/oauth/shared.ts +5 -5
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +259 -0
- package/src/cli/commands/platform/__tests__/connect.test.ts +1 -1
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +1 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +1 -1
- package/src/cli/commands/platform/index.ts +107 -10
- package/src/cli/commands/usage.ts +10 -9
- package/src/cli/lib/daemon-credential-client.ts +4 -0
- package/src/cli/program.ts +10 -3
- package/src/config/assistant-feature-flags.ts +59 -55
- package/src/config/bundled-skills/app-builder/SKILL.md +33 -173
- package/src/config/bundled-skills/app-builder/references/CUSTOM_ROUTES.md +105 -0
- package/src/config/bundled-skills/app-builder/references/INTERACTION_HOOKS.md +56 -0
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +125 -0
- package/src/config/bundled-skills/contacts/SKILL.md +3 -0
- package/src/config/bundled-skills/document/SKILL.md +4 -0
- package/src/config/bundled-skills/gmail/SKILL.md +12 -7
- package/src/config/bundled-skills/gmail/TOOLS.json +1 -1
- package/src/config/bundled-skills/gmail/tools/gmail-sender-digest.ts +2 -1
- package/src/config/bundled-skills/outlook/SKILL.md +7 -0
- package/src/config/bundled-skills/settings/TOOLS.json +1 -1
- package/src/config/bundled-skills/settings/tools/navigate-settings-tab.ts +8 -3
- package/src/config/bundled-skills/subagent/SKILL.md +21 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +8 -4
- package/src/config/bundled-skills/tasks/SKILL.md +5 -0
- package/src/config/env-registry.ts +14 -0
- package/src/config/env.ts +21 -0
- package/src/config/feature-flag-registry.json +46 -7
- package/src/config/loader.ts +56 -1
- package/src/config/sanitize-for-transfer.ts +47 -0
- package/src/config/schema.ts +46 -5
- package/src/config/schemas/host-browser.ts +66 -0
- package/src/config/schemas/memory-lifecycle.ts +1 -1
- package/src/config/schemas/memory-retrieval.ts +103 -0
- package/src/config/schemas/security.ts +0 -6
- package/src/config/schemas/services.ts +16 -0
- package/src/config/types.ts +0 -1
- package/src/context/post-turn-tool-result-truncation.ts +176 -0
- package/src/context/window-manager.ts +19 -1
- package/src/credential-execution/approval-bridge.ts +49 -16
- package/src/credential-execution/managed-catalog.ts +3 -7
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +186 -0
- package/src/daemon/app-source-watcher.ts +35 -0
- package/src/daemon/config-watcher.ts +6 -2
- package/src/daemon/context-overflow-approval.ts +5 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +17 -2
- package/src/daemon/conversation-agent-loop.ts +74 -19
- package/src/daemon/conversation-attachments.ts +40 -1
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +66 -3
- package/src/daemon/conversation-queue-manager.ts +8 -0
- package/src/daemon/conversation-runtime-assembly.ts +159 -20
- package/src/daemon/conversation-surfaces.ts +78 -12
- package/src/daemon/conversation-tool-setup.ts +74 -11
- package/src/daemon/conversation-workspace.ts +12 -0
- package/src/daemon/conversation.ts +227 -11
- package/src/daemon/date-context.ts +10 -10
- package/src/daemon/first-greeting.ts +3 -2
- package/src/daemon/handlers/conversations.ts +9 -139
- package/src/daemon/handlers/shared.ts +65 -0
- package/src/daemon/handlers/skills.ts +232 -37
- package/src/daemon/host-bash-proxy.ts +48 -13
- package/src/daemon/host-browser-proxy.ts +191 -0
- package/src/daemon/host-cu-proxy.ts +36 -11
- package/src/daemon/host-file-proxy.ts +57 -9
- package/src/daemon/lifecycle.ts +86 -12
- package/src/daemon/message-protocol.ts +7 -0
- package/src/daemon/message-types/conversations.ts +59 -13
- package/src/daemon/message-types/host-browser.ts +100 -0
- package/src/daemon/message-types/messages.ts +5 -6
- package/src/daemon/message-types/notifications.ts +12 -0
- package/src/daemon/message-types/settings.ts +12 -0
- package/src/daemon/message-types/skills.ts +10 -0
- package/src/daemon/message-types/subagents.ts +2 -0
- package/src/daemon/server.ts +112 -35
- package/src/daemon/tool-side-effects.ts +6 -0
- package/src/daemon/transport-hints.ts +14 -0
- package/src/inbound/platform-callback-registration.ts +18 -17
- package/src/index.ts +1 -1
- package/src/mcp/client.ts +59 -24
- package/src/memory/app-store.ts +31 -1
- package/src/memory/conversation-crud.ts +38 -10
- package/src/memory/conversation-directories.ts +39 -0
- package/src/memory/conversation-group-migration.ts +65 -5
- package/src/memory/conversation-starters-cadence.ts +76 -0
- package/src/memory/conversation-title-service.ts +5 -2
- package/src/memory/db-init.ts +12 -0
- package/src/memory/embedding-backend.test.ts +75 -0
- package/src/memory/embedding-backend.ts +131 -5
- package/src/memory/embedding-gemini.test.ts +54 -0
- package/src/memory/embedding-gemini.ts +20 -9
- package/src/memory/embedding-local.ts +177 -18
- package/src/memory/graph/capability-seed.ts +3 -5
- package/src/memory/graph/consolidation.ts +10 -23
- package/src/memory/graph/extraction-job.ts +15 -0
- package/src/memory/graph/retriever.ts +40 -22
- package/src/memory/graph/store.test.ts +7 -3
- package/src/memory/graph/store.ts +47 -12
- package/src/memory/group-crud.ts +25 -9
- package/src/memory/llm-usage-store.ts +45 -4
- package/src/memory/migrations/213-oauth-providers-scope-separator.ts +13 -0
- package/src/memory/migrations/214-oauth-providers-refresh-url.ts +11 -0
- package/src/memory/migrations/215-oauth-providers-revoke.ts +14 -0
- package/src/memory/migrations/216-oauth-providers-token-auth-method.ts +30 -0
- package/src/memory/migrations/217-conversation-host-access.ts +40 -0
- package/src/memory/migrations/218-oauth-providers-logo-url.ts +11 -0
- package/src/memory/migrations/index.ts +6 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/schema/conversations.ts +1 -0
- package/src/memory/schema/oauth.ts +18 -13
- package/src/messaging/provider.ts +1 -1
- package/src/notifications/broadcaster.ts +6 -0
- package/src/notifications/conversation-pairing.ts +12 -4
- package/src/notifications/emit-signal.ts +14 -0
- package/src/notifications/signal.ts +11 -0
- package/src/oauth/AGENTS.md +76 -0
- package/src/oauth/__tests__/identity-verifier.test.ts +24 -19
- package/src/oauth/__tests__/seed-providers-managed.test.ts +32 -0
- package/src/oauth/byo-connection.test.ts +8 -8
- package/src/oauth/byo-connection.ts +7 -7
- package/src/oauth/connect-orchestrator.ts +23 -21
- package/src/oauth/connect-types.ts +3 -3
- package/src/oauth/connection-resolver.test.ts +17 -4
- package/src/oauth/connection-resolver.ts +16 -16
- package/src/oauth/connection.ts +1 -1
- package/src/oauth/manual-token-connection.ts +13 -13
- package/src/oauth/oauth-store.ts +214 -100
- package/src/oauth/platform-connection.test.ts +5 -5
- package/src/oauth/platform-connection.ts +4 -4
- package/src/oauth/provider-serializer.ts +31 -5
- package/src/oauth/revoke.ts +76 -0
- package/src/oauth/seed-providers.ts +127 -87
- package/src/oauth/token-persistence.ts +1 -1
- package/src/permissions/checker.ts +3 -3
- package/src/permissions/defaults.ts +7 -8
- package/src/permissions/permission-mode.ts +4 -11
- package/src/permissions/prompter.ts +13 -3
- package/src/permissions/v2-consent-policy.ts +87 -0
- package/src/platform/client.ts +1 -1
- package/src/prompts/system-prompt.ts +18 -21
- package/src/prompts/templates/BOOTSTRAP-REFERENCE.md +3 -65
- package/src/prompts/templates/BOOTSTRAP.md +59 -96
- package/src/prompts/templates/SOUL.md +11 -11
- package/src/providers/anthropic/client.ts +1 -0
- package/src/providers/types.ts +1 -1
- package/src/runtime/AGENTS.md +23 -0
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +715 -0
- package/src/runtime/__tests__/capability-tokens.test.ts +258 -0
- package/src/runtime/__tests__/chrome-extension-registry.test.ts +518 -0
- package/src/runtime/assistant-event-hub.ts +24 -2
- package/src/runtime/auth/__tests__/guard-tests.test.ts +1 -0
- package/src/runtime/auth/__tests__/middleware.test.ts +116 -1
- package/src/runtime/auth/__tests__/route-policy.test.ts +8 -0
- package/src/runtime/auth/middleware.ts +98 -0
- package/src/runtime/auth/route-policy.ts +6 -7
- package/src/runtime/auth/token-service.ts +8 -0
- package/src/runtime/capability-tokens.ts +414 -0
- package/src/runtime/channel-approvals.ts +18 -5
- package/src/runtime/chrome-extension-registry.ts +332 -0
- package/src/runtime/confirmation-request-guardian-bridge.ts +6 -0
- package/src/runtime/guardian-decision-types.ts +7 -0
- package/src/runtime/http-server.ts +425 -70
- package/src/runtime/migrations/__tests__/rebind-secrets-credentials.test.ts +172 -0
- package/src/runtime/migrations/__tests__/vbundle-builder-credentials.test.ts +276 -0
- package/src/runtime/migrations/__tests__/vbundle-import-credentials.test.ts +162 -0
- package/src/runtime/migrations/migration-transport.ts +6 -0
- package/src/runtime/migrations/migration-wizard.ts +22 -2
- package/src/runtime/migrations/rebind-secrets-screen.ts +76 -15
- package/src/runtime/migrations/vbundle-builder.ts +145 -38
- package/src/runtime/migrations/vbundle-import-analyzer.ts +19 -0
- package/src/runtime/migrations/vbundle-importer.ts +55 -5
- package/src/runtime/pending-interactions.ts +29 -13
- package/src/runtime/routes/approval-routes.ts +90 -16
- package/src/runtime/routes/browser-cdp-routes.ts +229 -0
- package/src/runtime/routes/browser-extension-pair-routes.ts +497 -0
- package/src/runtime/routes/conversation-analysis-routes.ts +18 -5
- package/src/runtime/routes/conversation-management-routes.ts +108 -0
- package/src/runtime/routes/conversation-routes.ts +308 -28
- package/src/runtime/routes/conversation-starter-routes.ts +78 -16
- package/src/runtime/routes/group-routes.ts +22 -8
- package/src/runtime/routes/guardian-action-routes.ts +24 -13
- package/src/runtime/routes/host-browser-routes.ts +279 -0
- package/src/runtime/routes/host-file-routes.ts +9 -1
- package/src/runtime/routes/identity-routes.ts +259 -16
- package/src/runtime/routes/log-export/AGENTS.md +104 -0
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist-error-contract.test.ts +103 -0
- package/src/runtime/routes/log-export/__tests__/workspace-allowlist.test.ts +716 -0
- package/src/runtime/routes/log-export/workspace-allowlist.ts +458 -0
- package/src/runtime/routes/log-export-routes.ts +60 -25
- package/src/runtime/routes/memory-item-routes.ts +1 -7
- package/src/runtime/routes/migration-routes.ts +87 -2
- package/src/runtime/routes/oauth-apps.ts +15 -17
- package/src/runtime/routes/oauth-providers.ts +4 -0
- package/src/runtime/routes/schedule-routes.ts +24 -11
- package/src/runtime/routes/settings-routes.ts +9 -97
- package/src/runtime/routes/skills-routes.ts +52 -2
- package/src/runtime/routes/subagents-routes.ts +14 -10
- package/src/runtime/routes/usage-routes.ts +8 -7
- package/src/runtime/routes/workspace-routes.test.ts +22 -0
- package/src/runtime/routes/workspace-routes.ts +8 -1
- package/src/runtime/routes/workspace-utils.ts +2 -0
- package/src/schedule/scheduler.ts +7 -5
- package/src/security/ces-credential-client.ts +20 -0
- package/src/security/ces-rpc-credential-backend.ts +17 -0
- package/src/security/credential-backend.ts +5 -0
- package/src/security/oauth2.ts +42 -25
- package/src/security/secure-keys.ts +118 -25
- package/src/security/token-manager.ts +23 -10
- package/src/skills/catalog-files.ts +492 -0
- package/src/skills/inline-command-runner.ts +12 -14
- package/src/subagent/manager.ts +131 -26
- package/src/subagent/types.ts +19 -0
- package/src/tools/apps/executors.ts +11 -2
- package/src/tools/browser/__tests__/auth-detector.test.ts +202 -108
- package/src/tools/browser/auth-detector.ts +43 -12
- package/src/tools/browser/browser-execution.ts +645 -340
- package/src/tools/browser/browser-manager.ts +36 -12
- package/src/tools/browser/cdp-client/__tests__/accessibility-snapshot.test.ts +318 -0
- package/src/tools/browser/cdp-client/__tests__/cdp-dom-helpers.test.ts +1175 -0
- package/src/tools/browser/cdp-client/__tests__/cdp-inspect-client.test.ts +870 -0
- package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +330 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +377 -0
- package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-nested-frames.json +64 -0
- package/src/tools/browser/cdp-client/__tests__/fixtures/ax-tree-simple.json +69 -0
- package/src/tools/browser/cdp-client/__tests__/local-cdp-client.test.ts +310 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +96 -0
- package/src/tools/browser/cdp-client/accessibility-snapshot.ts +387 -0
- package/src/tools/browser/cdp-client/cdp-dom-helpers.ts +695 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/discovery.test.ts +743 -0
- package/src/tools/browser/cdp-client/cdp-inspect/__tests__/ws-transport.test.ts +580 -0
- package/src/tools/browser/cdp-client/cdp-inspect/discovery.ts +578 -0
- package/src/tools/browser/cdp-client/cdp-inspect/ws-transport.ts +579 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +635 -0
- package/src/tools/browser/cdp-client/errors.ts +34 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +125 -0
- package/src/tools/browser/cdp-client/factory.ts +204 -0
- package/src/tools/browser/cdp-client/index.ts +14 -0
- package/src/tools/browser/cdp-client/local-cdp-client.ts +187 -0
- package/src/tools/browser/cdp-client/types.ts +52 -0
- package/src/tools/filesystem/edit.ts +1 -1
- package/src/tools/filesystem/list.ts +1 -1
- package/src/tools/filesystem/read.ts +1 -1
- package/src/tools/filesystem/write.ts +2 -1
- package/src/tools/host-filesystem/edit.ts +1 -1
- package/src/tools/host-filesystem/read.ts +12 -15
- package/src/tools/host-filesystem/write.ts +1 -1
- package/src/tools/host-terminal/host-shell.ts +21 -16
- package/src/tools/permission-checker.ts +77 -100
- package/src/tools/registry.ts +0 -2
- package/src/tools/secret-detection-handler.ts +34 -1
- package/src/tools/shared/filesystem/image-read.ts +61 -40
- package/src/tools/skills/sandbox-runner.ts +3 -6
- package/src/tools/subagent/spawn.ts +47 -3
- package/src/tools/subagent/status.ts +2 -0
- package/src/tools/system/register.ts +2 -16
- package/src/tools/terminal/safe-env.ts +7 -0
- package/src/tools/terminal/sandbox-diagnostics.ts +4 -4
- package/src/tools/terminal/sandbox.ts +4 -1
- package/src/tools/terminal/shell.ts +24 -21
- package/src/tools/tool-approval-handler.ts +48 -2
- package/src/tools/types.ts +2 -3
- package/src/util/platform.ts +14 -19
- package/src/watcher/provider-types.ts +1 -1
- package/src/workspace/migrations/029-seed-pkb.ts +1 -0
- package/src/workspace/migrations/030-seed-pkb-autoinject.ts +73 -0
- package/src/workspace/migrations/registry.ts +2 -0
- package/src/workspace/top-level-renderer.ts +19 -1
- package/src/__tests__/chrome-cdp.test.ts +0 -419
- package/src/__tests__/permission-mode-sse.test.ts +0 -418
- package/src/__tests__/permission-mode-store.test.ts +0 -277
- package/src/browser-extension-relay/protocol.ts +0 -63
- package/src/browser-extension-relay/server.ts +0 -203
- package/src/config/schemas/sandbox.ts +0 -14
- package/src/permissions/permission-mode-store.ts +0 -180
- package/src/tools/browser/chrome-cdp.ts +0 -239
- 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
|
-
|
|
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: (
|
|
75
|
-
mockListActiveConnectionsByProvider(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
provider: string,
|
|
57
57
|
options?: Record<string, unknown>,
|
|
58
58
|
) => {
|
|
59
|
-
mockResolveOAuthConnectionCalls.push({
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: (
|
|
51
|
-
if (
|
|
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
|
-
|
|
61
|
+
provider: string,
|
|
64
62
|
clientId?: string,
|
|
65
63
|
connectionId?: string,
|
|
66
64
|
) => {
|
|
67
|
-
mockDisconnectCalls.push({
|
|
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
|
-
? {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
234
|
+
provider: "custom-api",
|
|
237
235
|
oauthAppId: "app-1",
|
|
238
236
|
status: "active",
|
|
239
237
|
},
|
|
240
238
|
{
|
|
241
239
|
id: "conn-2",
|
|
242
|
-
|
|
240
|
+
provider: "custom-api",
|
|
243
241
|
oauthAppId: "app-1",
|
|
244
242
|
status: "active",
|
|
245
243
|
},
|
|
246
244
|
{
|
|
247
245
|
id: "conn-3",
|
|
248
|
-
|
|
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
|
-
? {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
298
|
+
provider: "custom-api",
|
|
301
299
|
oauthAppId: "app-1",
|
|
302
300
|
status: "active",
|
|
303
301
|
},
|
|
304
302
|
{
|
|
305
303
|
id: "conn-2",
|
|
306
|
-
|
|
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
|
-
|
|
327
|
+
provider: "custom-api",
|
|
330
328
|
clientId: undefined,
|
|
331
329
|
connectionId: "conn-1",
|
|
332
330
|
},
|
|
333
331
|
{
|
|
334
|
-
|
|
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
|
-
? {
|
|
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
|
-
? {
|
|
380
|
+
? { provider: "google", authorizeUrl: "https://accounts.google.com" }
|
|
383
381
|
: undefined;
|
|
384
382
|
|
|
385
383
|
mockListAppsResult = [
|
|
386
384
|
{
|
|
387
385
|
id: "app-g",
|
|
388
|
-
|
|
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
|
-
|
|
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
|
-
? {
|
|
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
|
-
? {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
? {
|
|
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
|
-
|
|
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
|
-
|
|
535
|
+
provider: "custom-api",
|
|
538
536
|
oauthAppId: "app-1",
|
|
539
537
|
status: "active",
|
|
540
538
|
},
|
|
541
539
|
{
|
|
542
540
|
id: "conn-2",
|
|
543
|
-
|
|
541
|
+
provider: "custom-api",
|
|
544
542
|
oauthAppId: "app-1",
|
|
545
543
|
status: "active",
|
|
546
544
|
},
|