@vellumai/assistant 0.6.5 → 0.6.6
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/AGENTS.md +9 -1
- package/ARCHITECTURE.md +15 -17
- package/Dockerfile +6 -4
- package/__tests__/permissions/gateway-threshold-reader.test.ts +283 -0
- package/docs/architecture/integrations.md +32 -39
- package/docs/architecture/memory.md +25 -30
- package/docs/architecture/security.md +7 -6
- package/docs/browser-use-architecture-phase2.md +63 -20
- package/docs/plugins.md +761 -0
- package/examples/plugins/echo/README.md +132 -0
- package/examples/plugins/echo/package.json +17 -0
- package/examples/plugins/echo/register.ts +187 -0
- package/node_modules/@vellumai/egress-proxy/src/types.ts +19 -0
- package/openapi.yaml +212 -68
- package/package.json +1 -1
- package/src/__tests__/app-compiler.test.ts +57 -0
- package/src/__tests__/approval-cascade.test.ts +7 -2
- package/src/__tests__/auto-analysis-end-to-end.test.ts +1 -0
- package/src/__tests__/avatar-generator.test.ts +4 -2
- package/src/__tests__/bundled-asset.test.ts +6 -6
- package/src/__tests__/catalog-cache.test.ts +69 -0
- package/src/__tests__/checker.test.ts +459 -171
- package/src/__tests__/circuit-breaker-pipeline.test.ts +406 -0
- package/src/__tests__/compaction-events.test.ts +501 -0
- package/src/__tests__/compaction-pipeline.test.ts +210 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +181 -0
- package/src/__tests__/compaction-timeout-recovery.test.ts +262 -0
- package/src/__tests__/config-model-image-provider.test.ts +110 -0
- package/src/__tests__/config-schema.test.ts +22 -9
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +0 -4
- package/src/__tests__/contacts-tools.test.ts +26 -0
- package/src/__tests__/context-overflow-policy.test.ts +7 -7
- package/src/__tests__/context-window-manager.test.ts +355 -4
- package/src/__tests__/conversation-abort-tool-results.test.ts +4 -1
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +26 -30
- package/src/__tests__/conversation-agent-loop.test.ts +30 -141
- package/src/__tests__/conversation-confirmation-signals.test.ts +6 -1
- package/src/__tests__/conversation-history-web-search.test.ts +1 -0
- package/src/__tests__/conversation-init.benchmark.test.ts +2 -16
- package/src/__tests__/conversation-pairing.test.ts +174 -10
- package/src/__tests__/conversation-pre-run-repair.test.ts +4 -1
- package/src/__tests__/conversation-process-callsite.test.ts +3 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +16 -7
- package/src/__tests__/conversation-queue.test.ts +29 -14
- package/src/__tests__/conversation-routes-disk-view.test.ts +7 -6
- package/src/__tests__/conversation-runtime-assembly.test.ts +155 -110
- package/src/__tests__/conversation-runtime-workspace.test.ts +23 -38
- package/src/__tests__/conversation-seed-composer.test.ts +2 -2
- package/src/__tests__/conversation-slash-queue.test.ts +7 -2
- package/src/__tests__/conversation-slash-unknown.test.ts +25 -2
- package/src/__tests__/conversation-speed-override.test.ts +6 -1
- package/src/__tests__/conversation-title-service.test.ts +116 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +41 -2
- package/src/__tests__/conversation-usage.test.ts +1 -1
- package/src/__tests__/conversation-workspace-cache-state.test.ts +4 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +3 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +4 -1
- package/src/__tests__/credential-health-service.test.ts +78 -9
- package/src/__tests__/credential-security-invariants.test.ts +2 -2
- package/src/__tests__/db-schedule-syntax-migration.test.ts +1 -0
- package/src/__tests__/empty-response-pipeline.test.ts +305 -0
- package/src/__tests__/extension-id-sync-guard.test.ts +3 -3
- package/src/__tests__/first-greeting.test.ts +247 -5
- package/src/__tests__/headless-browser-mode.test.ts +57 -0
- package/src/__tests__/history-repair-pipeline.test.ts +399 -0
- package/src/__tests__/host-browser-e2e-cloud.test.ts +307 -0
- package/src/__tests__/host-browser-e2e-self-hosted.test.ts +3 -3
- package/src/__tests__/host-proxy-interface.test.ts +36 -2
- package/src/__tests__/image-credentials.test.ts +137 -0
- package/src/__tests__/image-service-dispatcher.test.ts +186 -0
- package/src/__tests__/injector-chain.test.ts +526 -0
- package/src/__tests__/intent-routing.test.ts +0 -26
- package/src/__tests__/llm-call-pipeline.test.ts +285 -0
- package/src/__tests__/llm-schema.test.ts +1 -1
- package/src/__tests__/media-generate-image.test.ts +119 -13
- package/src/__tests__/memory-retrieval-pipeline.test.ts +401 -0
- package/src/__tests__/memory-upsert-concurrency.test.ts +1 -0
- package/src/__tests__/migration-import-from-url.test.ts +5 -68
- package/src/__tests__/model-intents.test.ts +4 -2
- package/src/__tests__/notification-broadcaster.test.ts +3 -3
- package/src/__tests__/notification-decision-strategy.test.ts +0 -11
- package/src/__tests__/notification-schedule-notify-dedup.test.ts +108 -0
- package/src/__tests__/oauth-apps-routes.test.ts +1 -1
- package/src/__tests__/oauth-cli.test.ts +14 -12
- package/src/__tests__/oauth-connect-orchestrator.test.ts +4 -13
- package/src/__tests__/oauth-provider-serializer.test.ts +6 -4
- package/src/__tests__/oauth-provider-visibility.test.ts +3 -5
- package/src/__tests__/oauth-providers-routes.test.ts +3 -2
- package/src/__tests__/oauth-store.test.ts +41 -76
- package/src/__tests__/onboarding-template-contract.test.ts +16 -64
- package/src/__tests__/openai-image-service.test.ts +368 -0
- package/src/__tests__/overflow-reduce-pipeline.test.ts +676 -0
- package/src/__tests__/permission-checker-host-gate.test.ts +0 -24
- package/src/__tests__/persist-onboarding-artifacts.test.ts +266 -0
- package/src/__tests__/persistence-pipeline.test.ts +377 -0
- package/src/__tests__/pipeline-runner.test.ts +565 -0
- package/src/__tests__/platform.test.ts +5 -2
- package/src/__tests__/plugin-bootstrap.test.ts +483 -0
- package/src/__tests__/plugin-registry.test.ts +273 -0
- package/src/__tests__/plugin-route-contribution.test.ts +288 -0
- package/src/__tests__/plugin-skill-contribution.test.ts +367 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +286 -0
- package/src/__tests__/plugin-types.test.ts +320 -0
- package/src/__tests__/pricing.test.ts +44 -12
- package/src/__tests__/proxy-approval-callback.test.ts +69 -8
- package/src/__tests__/reaction-persistence.test.ts +1 -0
- package/src/__tests__/regenerate-fire-and-forget-trace.test.ts +1 -0
- package/src/__tests__/registry.test.ts +0 -2
- package/src/__tests__/schedule-routes.test.ts +131 -1
- package/src/__tests__/scheduler-recurrence.test.ts +14 -70
- package/src/__tests__/scheduler-reuse-conversation.test.ts +10 -50
- package/src/__tests__/secret-detection-handler.test.ts +0 -10
- package/src/__tests__/shell-identity.test.ts +0 -134
- package/src/__tests__/suggestion-routes.test.ts +103 -4
- package/src/__tests__/task-memory-cleanup.test.ts +1 -0
- package/src/__tests__/task-scheduler.test.ts +3 -15
- package/src/__tests__/test-preload.ts +11 -0
- package/src/__tests__/title-generate-pipeline.test.ts +224 -0
- package/src/__tests__/token-estimate-pipeline.test.ts +431 -0
- package/src/__tests__/tool-error-pipeline.test.ts +244 -0
- package/src/__tests__/tool-execute-pipeline.test.ts +431 -0
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -6
- package/src/__tests__/tool-executor-shell-integration.test.ts +7 -10
- package/src/__tests__/tool-executor.test.ts +141 -0
- package/src/__tests__/tool-result-truncate-pipeline.test.ts +356 -0
- package/src/__tests__/tool-result-truncation.test.ts +0 -110
- package/src/__tests__/user-plugin-loader.test.ts +191 -0
- package/src/__tests__/workspace-migration-046-seed-conversation-starters-callsite.test.ts +185 -0
- package/src/__tests__/workspace-migration-049-release-notes-default-sonnet.test.ts +100 -0
- package/src/__tests__/workspace-migration-050-seed-main-agent-opus-callsite.test.ts +171 -0
- package/src/__tests__/workspace-migration-051-seed-conversation-summarization-callsite.test.ts +252 -0
- package/src/__tests__/workspace-migration-remove-hooks.test.ts +99 -0
- package/src/__tests__/workspace-policy.test.ts +21 -3
- package/src/agent/loop.ts +340 -102
- package/src/approvals/__tests__/guardian-feed-event.test.ts +304 -0
- package/src/approvals/guardian-request-resolvers.ts +80 -0
- package/src/backup/__tests__/backup-worker.test.ts +2 -13
- package/src/backup/backup-worker.ts +3 -15
- package/src/bundler/app-compiler.ts +84 -1
- package/src/calls/call-state.ts +2 -2
- package/src/channels/__tests__/types.test.ts +3 -3
- package/src/channels/types.ts +6 -4
- package/src/cli/__tests__/notifications.test.ts +87 -211
- package/src/cli/commands/__tests__/backup.test.ts +1 -1
- package/src/cli/commands/__tests__/image-generation.test.ts +255 -35
- package/src/cli/commands/__tests__/inference-send.test.ts +12 -0
- package/src/cli/commands/__tests__/tts-synthesize.test.ts +12 -0
- package/src/cli/commands/backup.ts +2 -2
- package/src/cli/commands/clients.ts +138 -0
- package/src/cli/commands/completions.ts +2 -9
- package/src/cli/commands/conversations.ts +55 -7
- package/src/cli/commands/image-generation.ts +33 -34
- package/src/cli/commands/notifications.ts +68 -103
- package/src/cli/commands/oauth/__tests__/providers-register.test.ts +1 -1
- package/src/cli/commands/oauth/__tests__/providers-update.test.ts +1 -1
- package/src/cli/commands/oauth/connect.ts +2 -2
- package/src/cli/commands/oauth/providers.ts +176 -8
- package/src/cli/commands/oauth/status.ts +46 -36
- package/src/cli/commands/skills.ts +3 -4
- package/src/cli/program.ts +25 -29
- package/src/config/__tests__/backup-schema.test.ts +7 -2
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/app-builder/references/WIDGETS.md +10 -10
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +66 -87
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +28 -51
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +22 -40
- package/src/config/bundled-skills/image-studio/SKILL.md +2 -1
- package/src/config/bundled-skills/image-studio/TOOLS.json +2 -1
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +23 -39
- package/src/config/bundled-skills/messaging/SKILL.md +3 -3
- package/src/config/bundled-skills/messaging/tools/__tests__/messaging-feed-events.test.ts +207 -0
- package/src/config/bundled-skills/messaging/tools/messaging-archive-by-sender.ts +12 -0
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +58 -0
- package/src/config/bundled-skills/schedule/SKILL.md +8 -3
- package/src/config/bundled-skills/schedule/TOOLS.json +15 -7
- package/src/config/bundled-skills/schedule/references/SCRIPT_MODE_PATTERNS.md +59 -0
- package/src/config/bundled-tool-registry.ts +0 -15
- package/src/config/feature-flag-registry.json +17 -1
- package/src/config/schema.ts +19 -0
- package/src/config/schemas/backup.ts +1 -1
- package/src/config/schemas/conversations.ts +16 -0
- package/src/config/schemas/llm.ts +2 -3
- package/src/config/schemas/security.ts +6 -6
- package/src/config/schemas/tts.ts +11 -0
- package/src/config/skill-state.ts +6 -2
- package/src/config/skills.ts +94 -5
- package/src/context/__tests__/compact-prompt.test.ts +27 -9
- package/src/context/prompts/compact.md +26 -12
- package/src/context/tool-result-truncation.ts +3 -63
- package/src/context/window-manager.ts +190 -16
- package/src/credential-health/credential-health-service.ts +19 -6
- package/src/daemon/__tests__/conversation-feed-event.test.ts +317 -0
- package/src/daemon/__tests__/conversation-lifecycle-auto-analyze.test.ts +4 -12
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +14 -15
- package/src/daemon/config-watcher.ts +0 -2
- package/src/daemon/context-overflow-policy.ts +4 -13
- package/src/daemon/conversation-agent-loop-handlers.ts +83 -22
- package/src/daemon/conversation-agent-loop.ts +984 -683
- package/src/daemon/conversation-history.ts +10 -19
- package/src/daemon/conversation-lifecycle.ts +37 -19
- package/src/daemon/conversation-notifiers.ts +2 -110
- package/src/daemon/conversation-process.ts +14 -7
- package/src/daemon/conversation-runtime-assembly.ts +532 -411
- package/src/daemon/conversation-tool-setup.ts +41 -4
- package/src/daemon/conversation.ts +80 -35
- package/src/daemon/external-plugins-bootstrap.ts +478 -0
- package/src/daemon/first-greeting.ts +191 -14
- package/src/daemon/handlers/config-model.ts +11 -0
- package/src/daemon/handlers/skills.ts +5 -1
- package/src/daemon/lifecycle.ts +33 -68
- package/src/daemon/message-types/computer-use.ts +2 -34
- package/src/daemon/message-types/conversations.ts +49 -0
- package/src/daemon/message-types/messages.ts +12 -0
- package/src/daemon/server.ts +5 -3
- package/src/daemon/shutdown-handlers.ts +2 -12
- package/src/daemon/tool-side-effects.ts +14 -56
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +160 -0
- package/src/heartbeat/heartbeat-service.ts +24 -1
- package/src/home/__tests__/feed-population-integration.test.ts +312 -0
- package/src/home/emit-feed-event.ts +7 -0
- package/src/home/feed-types.ts +41 -2
- package/src/home/rewrite-command-preview.ts +66 -0
- package/src/ipc/__tests__/socket-path.test.ts +11 -50
- package/src/ipc/cli-client.ts +1 -1
- package/src/ipc/cli-server.ts +3 -3
- package/src/ipc/gateway-client.ts +4 -1
- package/src/ipc/routes/browser-context.ts +2 -0
- package/src/ipc/routes/browser.ts +1 -0
- package/src/ipc/routes/get-contact.ts +16 -0
- package/src/ipc/routes/index.ts +14 -0
- package/src/ipc/routes/list-clients.ts +31 -0
- package/src/ipc/routes/merge-contacts.ts +17 -0
- package/src/ipc/routes/notification.ts +133 -0
- package/src/ipc/routes/rename-conversation.ts +59 -0
- package/src/ipc/routes/search-contacts.ts +19 -0
- package/src/ipc/routes/upsert-contact.ts +25 -0
- package/src/ipc/socket-path.ts +14 -38
- package/src/media/app-icon-generator.ts +23 -46
- package/src/media/avatar-router.ts +26 -41
- package/src/media/gemini-image-service.ts +8 -41
- package/src/media/image-credentials.ts +73 -0
- package/src/media/image-service.ts +85 -0
- package/src/media/openai-image-service.ts +131 -0
- package/src/media/types.ts +46 -0
- package/src/memory/conversation-crud.ts +48 -18
- package/src/memory/conversation-queries.ts +57 -4
- package/src/memory/conversation-title-service.ts +25 -0
- package/src/memory/db-init.ts +8 -0
- package/src/memory/embedding-gemini.test.ts +41 -2
- package/src/memory/embedding-gemini.ts +6 -1
- package/src/memory/graph/bootstrap.test.ts +282 -0
- package/src/memory/graph/bootstrap.ts +8 -5
- package/src/memory/graph/extraction.ts +10 -2
- package/src/memory/graph/graph-search.test.ts +1 -0
- package/src/memory/graph/inspect.ts +2 -2
- package/src/memory/graph/retriever.ts +10 -3
- package/src/memory/migrations/041-approval-prompt-ts-tracker.ts +26 -0
- package/src/memory/migrations/149-oauth-tables.ts +1 -0
- package/src/memory/migrations/223-schedule-script-column.ts +11 -0
- package/src/memory/migrations/224-oauth-providers-managed-service-is-paid.ts +24 -0
- package/src/memory/migrations/225-oauth-providers-available-scopes.ts +13 -0
- package/src/memory/migrations/index.ts +4 -0
- package/src/memory/pkb/pkb-index.test.ts +1 -0
- package/src/memory/pkb/pkb-reconcile.test.ts +1 -0
- package/src/memory/pkb/pkb-search.test.ts +65 -4
- package/src/memory/pkb/pkb-search.ts +40 -18
- package/src/memory/qdrant-client.test.ts +60 -0
- package/src/memory/qdrant-client.ts +25 -0
- package/src/memory/schema/infrastructure.ts +1 -0
- package/src/memory/schema/oauth.ts +4 -1
- package/src/messaging/providers/slack/render-transcript.test.ts +77 -29
- package/src/messaging/providers/slack/render-transcript.ts +58 -0
- package/src/notifications/conversation-pairing.ts +78 -19
- package/src/notifications/copy-composer.ts +0 -5
- package/src/notifications/emit-signal.ts +1 -1
- package/src/notifications/signal.ts +1 -2
- package/src/oauth/AGENTS.md +1 -1
- package/src/oauth/__tests__/identity-verifier.test.ts +2 -1
- package/src/oauth/connect-orchestrator.ts +8 -34
- package/src/oauth/connect-types.ts +6 -10
- package/src/oauth/manual-token-connection.ts +23 -0
- package/src/oauth/oauth-store.ts +30 -14
- package/src/oauth/provider-serializer.ts +6 -1
- package/src/oauth/seed-providers.ts +56 -108
- package/src/outbound-proxy/http-forwarder.ts +9 -0
- package/src/permissions/approval-policy.test.ts +293 -18
- package/src/permissions/approval-policy.ts +110 -58
- package/src/permissions/arg-parser.test.ts +161 -0
- package/src/permissions/arg-parser.ts +141 -0
- package/src/permissions/bash-risk-classifier.test.ts +414 -2
- package/src/permissions/bash-risk-classifier.ts +303 -60
- package/src/permissions/checker.ts +157 -29
- package/src/permissions/command-registry.test.ts +239 -0
- package/src/permissions/command-registry.ts +234 -54
- package/src/permissions/defaults.ts +5 -4
- package/src/permissions/gateway-threshold-reader.ts +196 -0
- package/src/permissions/prompter.ts +4 -0
- package/src/permissions/risk-types.ts +61 -4
- package/src/permissions/schedule-risk-classifier.test.ts +129 -0
- package/src/permissions/schedule-risk-classifier.ts +85 -0
- package/src/permissions/shell-identity.ts +2 -42
- package/src/permissions/types.ts +2 -0
- package/src/permissions/workspace-policy.ts +8 -3
- package/src/plugins/defaults/circuit-breaker.ts +146 -0
- package/src/plugins/defaults/compaction.ts +145 -0
- package/src/plugins/defaults/empty-response.ts +126 -0
- package/src/plugins/defaults/history-repair.ts +85 -0
- package/src/plugins/defaults/index.ts +116 -0
- package/src/plugins/defaults/injectors.ts +491 -0
- package/src/plugins/defaults/llm-call.ts +82 -0
- package/src/plugins/defaults/memory-retrieval.ts +226 -0
- package/src/plugins/defaults/overflow-reduce.ts +181 -0
- package/src/plugins/defaults/persistence.ts +129 -0
- package/src/plugins/defaults/title-generate.ts +95 -0
- package/src/plugins/defaults/token-estimate.ts +104 -0
- package/src/plugins/defaults/tool-error.ts +126 -0
- package/src/plugins/defaults/tool-execute.ts +89 -0
- package/src/plugins/defaults/tool-result-truncate.ts +88 -0
- package/src/plugins/pipeline.ts +316 -0
- package/src/plugins/plugin-skill-contributions.ts +292 -0
- package/src/plugins/registry.ts +241 -0
- package/src/plugins/types.ts +1134 -0
- package/src/plugins/user-loader.ts +177 -0
- package/src/prompts/templates/BOOTSTRAP.md +27 -77
- package/src/providers/model-catalog.ts +52 -29
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openrouter/client.ts +5 -1
- package/src/providers/speech-to-text/deepgram-realtime.test.ts +61 -0
- package/src/providers/speech-to-text/deepgram-realtime.ts +57 -0
- package/src/providers/speech-to-text/xai-realtime.test.ts +72 -4
- package/src/providers/speech-to-text/xai-realtime.ts +39 -14
- package/src/runtime/AGENTS.md +25 -16
- package/src/runtime/__tests__/browser-extension-pair-routes.test.ts +3 -3
- package/src/runtime/__tests__/client-registry.test.ts +293 -0
- package/src/runtime/client-registry.ts +261 -0
- package/src/runtime/http-server.ts +77 -8
- package/src/runtime/http-types.ts +0 -2
- package/src/runtime/migrations/vbundle-builder.ts +1 -22
- package/src/runtime/routes/approval-prompt-ts-tracker.ts +51 -31
- package/src/runtime/routes/approval-routes.ts +17 -0
- package/src/runtime/routes/browser-extension-pair-routes.ts +27 -8
- package/src/runtime/routes/conversation-routes.ts +223 -116
- package/src/runtime/routes/inbound-message-handler.ts +88 -13
- package/src/runtime/routes/memory-item-routes.test.ts +1 -0
- package/src/runtime/routes/migration-routes.ts +0 -3
- package/src/runtime/routes/playground/__tests__/force-compact.test.ts +284 -0
- package/src/runtime/routes/playground/__tests__/guard.test.ts +80 -0
- package/src/runtime/routes/playground/__tests__/inject-failures.test.ts +294 -0
- package/src/runtime/routes/playground/__tests__/reset-circuit.test.ts +271 -0
- package/src/runtime/routes/playground/__tests__/seed-conversation.test.ts +202 -0
- package/src/runtime/routes/playground/__tests__/seeded-conversations.test.ts +309 -0
- package/src/runtime/routes/playground/__tests__/state.test.ts +224 -0
- package/src/runtime/routes/playground/conversation-not-found.ts +29 -0
- package/src/runtime/routes/playground/deps.ts +56 -0
- package/src/runtime/routes/playground/force-compact.ts +73 -0
- package/src/runtime/routes/playground/guard.ts +37 -0
- package/src/runtime/routes/playground/index.ts +28 -0
- package/src/runtime/routes/playground/inject-failures.ts +159 -0
- package/src/runtime/routes/playground/reset-circuit.ts +115 -0
- package/src/runtime/routes/playground/seed-conversation.ts +139 -0
- package/src/runtime/routes/playground/seeded-conversations.ts +78 -0
- package/src/runtime/routes/playground/state.ts +78 -0
- package/src/runtime/routes/schedule-routes.ts +89 -8
- package/src/runtime/skill-route-registry.ts +75 -15
- package/src/schedule/run-script.ts +68 -0
- package/src/schedule/schedule-store.ts +7 -1
- package/src/schedule/scheduler.ts +48 -8
- package/src/skills/catalog-cache.ts +12 -5
- package/src/tools/browser/__tests__/browser-status.test.ts +189 -0
- package/src/tools/browser/browser-execution.ts +88 -19
- package/src/tools/browser/cdp-client/__tests__/extension-cdp-client.test.ts +230 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +146 -3
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +54 -3
- package/src/tools/browser/cdp-client/factory.ts +15 -4
- package/src/tools/executor.ts +126 -74
- package/src/tools/network/script-proxy/session-manager.ts +37 -1
- package/src/tools/permission-checker.ts +98 -49
- package/src/tools/policy-context.ts +4 -0
- package/src/tools/registry.ts +140 -3
- package/src/tools/schedule/create.ts +23 -8
- package/src/tools/schedule/update.ts +3 -1
- package/src/tools/secret-detection-handler.ts +0 -51
- package/src/tools/system/avatar-generator.ts +6 -2
- package/src/tools/types.ts +28 -2
- package/src/util/platform.ts +7 -2
- package/src/util/pricing.ts +26 -3
- package/src/workspace/migrations/006-services-config.ts +2 -4
- package/src/workspace/migrations/022-move-hooks-to-workspace.ts +2 -3
- package/src/workspace/migrations/041-backfill-google-gmail-settings-scope.ts +3 -4
- package/src/workspace/migrations/046-seed-conversation-starters-callsite.ts +108 -0
- package/src/workspace/migrations/047-remove-watch-callsites.ts +54 -0
- package/src/workspace/migrations/048-remove-workspace-hooks.ts +81 -0
- package/src/workspace/migrations/049-release-notes-default-sonnet.ts +80 -0
- package/src/workspace/migrations/050-seed-main-agent-opus-callsite.ts +86 -0
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +128 -0
- package/src/workspace/migrations/registry.ts +12 -0
- package/tsconfig.json +1 -1
- package/hook-templates/debug-prompt-logger/hook.json +0 -7
- package/hook-templates/debug-prompt-logger/run.sh +0 -66
- package/src/__tests__/compaction-circuit-breaker.test.ts +0 -336
- package/src/__tests__/context-overflow-approval.test.ts +0 -156
- package/src/__tests__/hooks-blocking.test.ts +0 -178
- package/src/__tests__/hooks-cli.test.ts +0 -182
- package/src/__tests__/hooks-config.test.ts +0 -108
- package/src/__tests__/hooks-discovery.test.ts +0 -211
- package/src/__tests__/hooks-integration.test.ts +0 -196
- package/src/__tests__/hooks-manager.test.ts +0 -226
- package/src/__tests__/hooks-runner.test.ts +0 -175
- package/src/__tests__/hooks-settings.test.ts +0 -160
- package/src/__tests__/hooks-templates.test.ts +0 -169
- package/src/__tests__/hooks-ts-runner.test.ts +0 -170
- package/src/__tests__/hooks-watch.test.ts +0 -112
- package/src/__tests__/notification-schedule-dedup.test.ts +0 -213
- package/src/__tests__/oauth-scope-policy.test.ts +0 -180
- package/src/__tests__/send-notification-tool.test.ts +0 -83
- package/src/cli/commands/shotgun.ts +0 -266
- package/src/config/bundled-skills/conversations/SKILL.md +0 -20
- package/src/config/bundled-skills/conversations/TOOLS.json +0 -23
- package/src/config/bundled-skills/conversations/tools/rename-conversation.ts +0 -88
- package/src/config/bundled-skills/heartbeat/SKILL.md +0 -43
- package/src/config/bundled-skills/notifications/SKILL.md +0 -40
- package/src/config/bundled-skills/notifications/TOOLS.json +0 -80
- package/src/config/bundled-skills/notifications/tools/send-notification.ts +0 -152
- package/src/config/bundled-skills/notifications/tools/shared.ts +0 -13
- package/src/config/bundled-skills/screen-watch/SKILL.md +0 -27
- package/src/config/bundled-skills/screen-watch/TOOLS.json +0 -35
- package/src/config/bundled-skills/screen-watch/tools/start-screen-watch.ts +0 -12
- package/src/config/bundled-skills/skills-catalog/SKILL.md +0 -84
- package/src/daemon/context-overflow-approval.ts +0 -52
- package/src/daemon/watch-handler.ts +0 -399
- package/src/hooks/cli.ts +0 -253
- package/src/hooks/config.ts +0 -100
- package/src/hooks/discovery.ts +0 -135
- package/src/hooks/manager.ts +0 -179
- package/src/hooks/runner.ts +0 -117
- package/src/hooks/templates.ts +0 -77
- package/src/hooks/types.ts +0 -75
- package/src/oauth/scope-policy.ts +0 -89
- package/src/runtime/gateway-internal-client.ts +0 -94
- package/src/runtime/routes/watch-routes.ts +0 -156
- package/src/signals/shotgun.ts +0 -203
- package/src/tools/watch/screen-watch.ts +0 -144
- package/src/tools/watch/watch-state.ts +0 -142
|
@@ -61,7 +61,6 @@ function seedTestProvider(provider = "github"): void {
|
|
|
61
61
|
authorizeUrl: `https://${provider}.example.com/authorize`,
|
|
62
62
|
tokenExchangeUrl: `https://${provider}.example.com/token`,
|
|
63
63
|
defaultScopes: ["read"],
|
|
64
|
-
scopePolicy: {},
|
|
65
64
|
},
|
|
66
65
|
]);
|
|
67
66
|
}
|
|
@@ -99,14 +98,13 @@ describe("provider operations", () => {
|
|
|
99
98
|
authorizeUrl: "https://github.com/login/oauth/authorize",
|
|
100
99
|
tokenExchangeUrl: "https://github.com/login/oauth/access_token",
|
|
101
100
|
defaultScopes: ["repo", "user"],
|
|
102
|
-
scopePolicy: { required: ["repo"] },
|
|
103
101
|
},
|
|
104
102
|
{
|
|
105
103
|
provider: "google",
|
|
106
104
|
authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
107
105
|
tokenExchangeUrl: "https://oauth2.googleapis.com/token",
|
|
108
106
|
defaultScopes: ["openid", "email"],
|
|
109
|
-
|
|
107
|
+
|
|
110
108
|
authorizeParams: { access_type: "offline" },
|
|
111
109
|
},
|
|
112
110
|
]);
|
|
@@ -119,7 +117,6 @@ describe("provider operations", () => {
|
|
|
119
117
|
"https://github.com/login/oauth/access_token",
|
|
120
118
|
);
|
|
121
119
|
expect(JSON.parse(gh!.defaultScopes)).toEqual(["repo", "user"]);
|
|
122
|
-
expect(JSON.parse(gh!.scopePolicy)).toEqual({ required: ["repo"] });
|
|
123
120
|
|
|
124
121
|
const goog = getProvider("google");
|
|
125
122
|
expect(goog).toBeDefined();
|
|
@@ -136,7 +133,7 @@ describe("provider operations", () => {
|
|
|
136
133
|
authorizeUrl: "https://github.com/login/oauth/authorize",
|
|
137
134
|
tokenExchangeUrl: "https://github.com/login/oauth/access_token",
|
|
138
135
|
defaultScopes: ["repo"],
|
|
139
|
-
|
|
136
|
+
|
|
140
137
|
baseUrl: "https://api.github.com",
|
|
141
138
|
},
|
|
142
139
|
]);
|
|
@@ -153,7 +150,6 @@ describe("provider operations", () => {
|
|
|
153
150
|
authorizeUrl: "https://github.com/login/oauth/authorize-v2",
|
|
154
151
|
tokenExchangeUrl: "https://github.com/login/oauth/access_token-v2",
|
|
155
152
|
defaultScopes: ["repo", "user"],
|
|
156
|
-
scopePolicy: { required: ["repo"] },
|
|
157
153
|
baseUrl: "https://api.github.com/v2",
|
|
158
154
|
},
|
|
159
155
|
]);
|
|
@@ -167,10 +163,9 @@ describe("provider operations", () => {
|
|
|
167
163
|
expect(row!.tokenExchangeUrl).toBe(
|
|
168
164
|
"https://github.com/login/oauth/access_token-v2",
|
|
169
165
|
);
|
|
170
|
-
// User-customizable fields (baseUrl
|
|
166
|
+
// User-customizable fields (baseUrl) are preserved from
|
|
171
167
|
// the original insert — not overwritten on re-seed.
|
|
172
168
|
expect(row!.baseUrl).toBe("https://api.github.com");
|
|
173
|
-
expect(JSON.parse(row!.scopePolicy)).toEqual({});
|
|
174
169
|
// defaultScopes ARE overwritten on re-seed so upstream scope additions
|
|
175
170
|
// propagate to existing installations.
|
|
176
171
|
expect(JSON.parse(row!.defaultScopes)).toEqual(["repo", "user"]);
|
|
@@ -185,7 +180,7 @@ describe("provider operations", () => {
|
|
|
185
180
|
authorizeUrl: "https://github.com/authorize",
|
|
186
181
|
tokenExchangeUrl: "https://github.com/token",
|
|
187
182
|
defaultScopes: ["repo"],
|
|
188
|
-
|
|
183
|
+
|
|
189
184
|
pingUrl: "https://api.github.com/user",
|
|
190
185
|
},
|
|
191
186
|
]);
|
|
@@ -200,7 +195,6 @@ describe("provider operations", () => {
|
|
|
200
195
|
authorizeUrl: "https://github.com/authorize",
|
|
201
196
|
tokenExchangeUrl: "https://github.com/token",
|
|
202
197
|
defaultScopes: ["repo"],
|
|
203
|
-
scopePolicy: {},
|
|
204
198
|
},
|
|
205
199
|
]);
|
|
206
200
|
const row = getProvider("github");
|
|
@@ -216,7 +210,8 @@ describe("provider operations", () => {
|
|
|
216
210
|
tokenExchangeUrl: "https://github.com/token",
|
|
217
211
|
tokenEndpointAuthMethod: "client_secret_post",
|
|
218
212
|
defaultScopes: ["repo"],
|
|
219
|
-
|
|
213
|
+
availableScopes:
|
|
214
|
+
"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps",
|
|
220
215
|
userinfoUrl: "https://api.github.com/user",
|
|
221
216
|
baseUrl: "https://api.github.com",
|
|
222
217
|
authorizeParams: { prompt: "consent" },
|
|
@@ -230,10 +225,6 @@ describe("provider operations", () => {
|
|
|
230
225
|
db.update(oauthProviders)
|
|
231
226
|
.set({
|
|
232
227
|
defaultScopes: JSON.stringify(["repo", "user", "gist"]),
|
|
233
|
-
scopePolicy: JSON.stringify({
|
|
234
|
-
required: ["repo"],
|
|
235
|
-
allowAdditionalScopes: true,
|
|
236
|
-
}),
|
|
237
228
|
baseUrl: "https://custom.github.com/api",
|
|
238
229
|
})
|
|
239
230
|
.where(eq(oauthProviders.provider, "github"))
|
|
@@ -256,7 +247,9 @@ describe("provider operations", () => {
|
|
|
256
247
|
tokenExchangeUrl: "https://github.com/token-v2",
|
|
257
248
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
258
249
|
defaultScopes: ["repo-only"],
|
|
259
|
-
|
|
250
|
+
availableScopes:
|
|
251
|
+
"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps-v2",
|
|
252
|
+
|
|
260
253
|
userinfoUrl: "https://api.github.com/user-v2",
|
|
261
254
|
baseUrl: "https://api.github.com/v2",
|
|
262
255
|
authorizeParams: { prompt: "login" },
|
|
@@ -268,13 +261,12 @@ describe("provider operations", () => {
|
|
|
268
261
|
const row = getProvider("github");
|
|
269
262
|
expect(row).toBeDefined();
|
|
270
263
|
|
|
271
|
-
// defaultScopes are overwritten by the seed data
|
|
264
|
+
// defaultScopes are overwritten by the seed data
|
|
272
265
|
expect(JSON.parse(row!.defaultScopes)).toEqual(["repo-only"]);
|
|
273
|
-
//
|
|
274
|
-
expect(JSON.parse(row!.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
});
|
|
266
|
+
// availableScopes is overwritten on re-seed
|
|
267
|
+
expect(JSON.parse(row!.availableScopes!)).toBe(
|
|
268
|
+
"https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps-v2",
|
|
269
|
+
);
|
|
278
270
|
expect(row!.baseUrl).toBe("https://custom.github.com/api");
|
|
279
271
|
|
|
280
272
|
// Implementation fields should be overwritten from the seed data
|
|
@@ -293,7 +285,7 @@ describe("provider operations", () => {
|
|
|
293
285
|
authorizeUrl: "https://example.com/authorize",
|
|
294
286
|
tokenExchangeUrl: "https://example.com/token",
|
|
295
287
|
defaultScopes: ["read", "write"],
|
|
296
|
-
|
|
288
|
+
|
|
297
289
|
scopeSeparator: ",",
|
|
298
290
|
},
|
|
299
291
|
]);
|
|
@@ -310,7 +302,6 @@ describe("provider operations", () => {
|
|
|
310
302
|
authorizeUrl: "https://github.com/authorize",
|
|
311
303
|
tokenExchangeUrl: "https://github.com/token",
|
|
312
304
|
defaultScopes: ["repo"],
|
|
313
|
-
scopePolicy: {},
|
|
314
305
|
},
|
|
315
306
|
]);
|
|
316
307
|
|
|
@@ -326,7 +317,7 @@ describe("provider operations", () => {
|
|
|
326
317
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
327
318
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
328
319
|
defaultScopes: ["read"],
|
|
329
|
-
|
|
320
|
+
|
|
330
321
|
scopeSeparator: " ",
|
|
331
322
|
},
|
|
332
323
|
]);
|
|
@@ -342,7 +333,7 @@ describe("provider operations", () => {
|
|
|
342
333
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
343
334
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
344
335
|
defaultScopes: ["read"],
|
|
345
|
-
|
|
336
|
+
|
|
346
337
|
scopeSeparator: ",",
|
|
347
338
|
},
|
|
348
339
|
]);
|
|
@@ -359,7 +350,6 @@ describe("provider operations", () => {
|
|
|
359
350
|
tokenExchangeUrl: "https://example.com/token",
|
|
360
351
|
refreshUrl: "https://refresh.example.com/token",
|
|
361
352
|
defaultScopes: ["read"],
|
|
362
|
-
scopePolicy: {},
|
|
363
353
|
},
|
|
364
354
|
]);
|
|
365
355
|
|
|
@@ -375,7 +365,6 @@ describe("provider operations", () => {
|
|
|
375
365
|
authorizeUrl: "https://example.com/authorize",
|
|
376
366
|
tokenExchangeUrl: "https://example.com/token",
|
|
377
367
|
defaultScopes: ["read"],
|
|
378
|
-
scopePolicy: {},
|
|
379
368
|
},
|
|
380
369
|
]);
|
|
381
370
|
|
|
@@ -392,7 +381,6 @@ describe("provider operations", () => {
|
|
|
392
381
|
tokenExchangeUrl: "https://example.com/token",
|
|
393
382
|
refreshUrl: "https://refresh.example.com/token",
|
|
394
383
|
defaultScopes: ["read"],
|
|
395
|
-
scopePolicy: {},
|
|
396
384
|
},
|
|
397
385
|
]);
|
|
398
386
|
|
|
@@ -401,7 +389,7 @@ describe("provider operations", () => {
|
|
|
401
389
|
|
|
402
390
|
// Re-seed with a different refreshUrl — it should be overwritten,
|
|
403
391
|
// proving refreshUrl is in the onConflictDoUpdate set clause (not
|
|
404
|
-
// preserved like
|
|
392
|
+
// preserved like baseUrl).
|
|
405
393
|
seedProviders([
|
|
406
394
|
{
|
|
407
395
|
provider: "test-provider",
|
|
@@ -409,7 +397,6 @@ describe("provider operations", () => {
|
|
|
409
397
|
tokenExchangeUrl: "https://example.com/token",
|
|
410
398
|
refreshUrl: "https://refresh-v2.example.com/token",
|
|
411
399
|
defaultScopes: ["read"],
|
|
412
|
-
scopePolicy: {},
|
|
413
400
|
},
|
|
414
401
|
]);
|
|
415
402
|
|
|
@@ -426,7 +413,6 @@ describe("provider operations", () => {
|
|
|
426
413
|
revokeUrl: "https://revoke.example.com",
|
|
427
414
|
revokeBodyTemplate: { token: "{access_token}" },
|
|
428
415
|
defaultScopes: ["read"],
|
|
429
|
-
scopePolicy: {},
|
|
430
416
|
},
|
|
431
417
|
]);
|
|
432
418
|
|
|
@@ -445,7 +431,6 @@ describe("provider operations", () => {
|
|
|
445
431
|
authorizeUrl: "https://example.com/authorize",
|
|
446
432
|
tokenExchangeUrl: "https://example.com/token",
|
|
447
433
|
defaultScopes: ["read"],
|
|
448
|
-
scopePolicy: {},
|
|
449
434
|
},
|
|
450
435
|
]);
|
|
451
436
|
|
|
@@ -462,7 +447,7 @@ describe("provider operations", () => {
|
|
|
462
447
|
authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
463
448
|
tokenExchangeUrl: "https://oauth2.googleapis.com/token",
|
|
464
449
|
defaultScopes: ["openid"],
|
|
465
|
-
|
|
450
|
+
|
|
466
451
|
logoUrl: "https://cdn.simpleicons.org/google",
|
|
467
452
|
},
|
|
468
453
|
]);
|
|
@@ -479,7 +464,7 @@ describe("provider operations", () => {
|
|
|
479
464
|
authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
480
465
|
tokenExchangeUrl: "https://oauth2.googleapis.com/token",
|
|
481
466
|
defaultScopes: ["openid"],
|
|
482
|
-
|
|
467
|
+
|
|
483
468
|
logoUrl: "https://cdn.simpleicons.org/google",
|
|
484
469
|
},
|
|
485
470
|
]);
|
|
@@ -497,7 +482,7 @@ describe("provider operations", () => {
|
|
|
497
482
|
authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
498
483
|
tokenExchangeUrl: "https://oauth2.googleapis.com/token",
|
|
499
484
|
defaultScopes: ["openid"],
|
|
500
|
-
|
|
485
|
+
|
|
501
486
|
logoUrl: "https://cdn.simpleicons.org/google-v2",
|
|
502
487
|
},
|
|
503
488
|
]);
|
|
@@ -514,7 +499,6 @@ describe("provider operations", () => {
|
|
|
514
499
|
tokenExchangeUrl: "https://example.com/token",
|
|
515
500
|
revokeUrl: "https://revoke.example.com",
|
|
516
501
|
defaultScopes: ["read"],
|
|
517
|
-
scopePolicy: {},
|
|
518
502
|
},
|
|
519
503
|
]);
|
|
520
504
|
|
|
@@ -523,7 +507,7 @@ describe("provider operations", () => {
|
|
|
523
507
|
|
|
524
508
|
// Re-seed with a different revokeUrl — it should be overwritten,
|
|
525
509
|
// proving revokeUrl is in the onConflictDoUpdate set clause (not
|
|
526
|
-
// preserved like
|
|
510
|
+
// preserved like baseUrl).
|
|
527
511
|
seedProviders([
|
|
528
512
|
{
|
|
529
513
|
provider: "test-provider",
|
|
@@ -531,7 +515,6 @@ describe("provider operations", () => {
|
|
|
531
515
|
tokenExchangeUrl: "https://example.com/token",
|
|
532
516
|
revokeUrl: "https://revoke-v2.example.com",
|
|
533
517
|
defaultScopes: ["read"],
|
|
534
|
-
scopePolicy: {},
|
|
535
518
|
},
|
|
536
519
|
]);
|
|
537
520
|
|
|
@@ -586,7 +569,7 @@ describe("provider operations", () => {
|
|
|
586
569
|
authorizeUrl: "https://example.com/authorize",
|
|
587
570
|
tokenExchangeUrl: "https://example.com/token",
|
|
588
571
|
defaultScopes: [],
|
|
589
|
-
|
|
572
|
+
|
|
590
573
|
// Note: tokenEndpointAuthMethod intentionally omitted
|
|
591
574
|
},
|
|
592
575
|
]);
|
|
@@ -602,7 +585,7 @@ describe("provider operations", () => {
|
|
|
602
585
|
authorizeUrl: "https://example.com/authorize",
|
|
603
586
|
tokenExchangeUrl: "https://example.com/token",
|
|
604
587
|
defaultScopes: [],
|
|
605
|
-
|
|
588
|
+
|
|
606
589
|
// Note: tokenExchangeBodyFormat intentionally omitted
|
|
607
590
|
},
|
|
608
591
|
]);
|
|
@@ -618,7 +601,7 @@ describe("provider operations", () => {
|
|
|
618
601
|
authorizeUrl: "https://example.com/authorize",
|
|
619
602
|
tokenExchangeUrl: "https://example.com/token",
|
|
620
603
|
defaultScopes: [],
|
|
621
|
-
|
|
604
|
+
|
|
622
605
|
tokenExchangeBodyFormat: "json",
|
|
623
606
|
},
|
|
624
607
|
]);
|
|
@@ -635,8 +618,8 @@ describe("provider operations", () => {
|
|
|
635
618
|
raw.exec(`
|
|
636
619
|
INSERT INTO oauth_providers (
|
|
637
620
|
provider_key, auth_url, token_url, token_endpoint_auth_method,
|
|
638
|
-
default_scopes, scope_policy,
|
|
639
|
-
created_at, updated_at
|
|
621
|
+
default_scopes, scope_policy, available_scopes, scope_separator,
|
|
622
|
+
requires_client_secret, created_at, updated_at
|
|
640
623
|
) VALUES (
|
|
641
624
|
'legacy-null-provider',
|
|
642
625
|
'https://example.com/authorize',
|
|
@@ -644,6 +627,7 @@ describe("provider operations", () => {
|
|
|
644
627
|
NULL,
|
|
645
628
|
'[]',
|
|
646
629
|
'{}',
|
|
630
|
+
NULL,
|
|
647
631
|
' ',
|
|
648
632
|
1,
|
|
649
633
|
${Date.now()},
|
|
@@ -671,7 +655,6 @@ describe("provider operations", () => {
|
|
|
671
655
|
tokenExchangeUrl: "https://example.com/token",
|
|
672
656
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
673
657
|
defaultScopes: [],
|
|
674
|
-
scopePolicy: {},
|
|
675
658
|
},
|
|
676
659
|
]);
|
|
677
660
|
|
|
@@ -692,7 +675,6 @@ describe("provider operations", () => {
|
|
|
692
675
|
authorizeUrl: "https://github.com/authorize",
|
|
693
676
|
tokenExchangeUrl: "https://github.com/token",
|
|
694
677
|
defaultScopes: ["repo"],
|
|
695
|
-
scopePolicy: {},
|
|
696
678
|
},
|
|
697
679
|
]);
|
|
698
680
|
|
|
@@ -713,7 +695,6 @@ describe("provider operations", () => {
|
|
|
713
695
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
714
696
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
715
697
|
defaultScopes: ["read"],
|
|
716
|
-
scopePolicy: {},
|
|
717
698
|
});
|
|
718
699
|
|
|
719
700
|
expect(row.provider).toBe("linear");
|
|
@@ -730,7 +711,6 @@ describe("provider operations", () => {
|
|
|
730
711
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
731
712
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
732
713
|
defaultScopes: ["read"],
|
|
733
|
-
scopePolicy: {},
|
|
734
714
|
});
|
|
735
715
|
|
|
736
716
|
expect(() =>
|
|
@@ -739,7 +719,6 @@ describe("provider operations", () => {
|
|
|
739
719
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
740
720
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
741
721
|
defaultScopes: ["read"],
|
|
742
|
-
scopePolicy: {},
|
|
743
722
|
}),
|
|
744
723
|
).toThrow(/already exists.*linear/);
|
|
745
724
|
});
|
|
@@ -750,7 +729,7 @@ describe("provider operations", () => {
|
|
|
750
729
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
751
730
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
752
731
|
defaultScopes: ["read"],
|
|
753
|
-
|
|
732
|
+
|
|
754
733
|
scopeSeparator: ";",
|
|
755
734
|
});
|
|
756
735
|
|
|
@@ -765,7 +744,6 @@ describe("provider operations", () => {
|
|
|
765
744
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
766
745
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
767
746
|
defaultScopes: ["read"],
|
|
768
|
-
scopePolicy: {},
|
|
769
747
|
});
|
|
770
748
|
|
|
771
749
|
const fetched = getProvider("linear");
|
|
@@ -780,7 +758,6 @@ describe("provider operations", () => {
|
|
|
780
758
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
781
759
|
refreshUrl: "https://api.linear.app/oauth/refresh",
|
|
782
760
|
defaultScopes: ["read"],
|
|
783
|
-
scopePolicy: {},
|
|
784
761
|
});
|
|
785
762
|
|
|
786
763
|
const fetched = getProvider("linear");
|
|
@@ -794,7 +771,6 @@ describe("provider operations", () => {
|
|
|
794
771
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
795
772
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
796
773
|
defaultScopes: ["read"],
|
|
797
|
-
scopePolicy: {},
|
|
798
774
|
});
|
|
799
775
|
|
|
800
776
|
const fetched = getProvider("linear");
|
|
@@ -810,7 +786,6 @@ describe("provider operations", () => {
|
|
|
810
786
|
revokeUrl: "https://api.linear.app/oauth/revoke",
|
|
811
787
|
revokeBodyTemplate: { token: "{access_token}" },
|
|
812
788
|
defaultScopes: ["read"],
|
|
813
|
-
scopePolicy: {},
|
|
814
789
|
});
|
|
815
790
|
|
|
816
791
|
const fetched = getProvider("linear");
|
|
@@ -827,7 +802,7 @@ describe("provider operations", () => {
|
|
|
827
802
|
authorizeUrl: "https://example.com/authorize",
|
|
828
803
|
tokenExchangeUrl: "https://example.com/token",
|
|
829
804
|
defaultScopes: [],
|
|
830
|
-
|
|
805
|
+
|
|
831
806
|
// Note: tokenEndpointAuthMethod intentionally omitted
|
|
832
807
|
});
|
|
833
808
|
expect(row.tokenEndpointAuthMethod).toBe("client_secret_post");
|
|
@@ -842,7 +817,7 @@ describe("provider operations", () => {
|
|
|
842
817
|
authorizeUrl: "https://example.com/authorize",
|
|
843
818
|
tokenExchangeUrl: "https://example.com/token",
|
|
844
819
|
defaultScopes: [],
|
|
845
|
-
|
|
820
|
+
|
|
846
821
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
847
822
|
});
|
|
848
823
|
expect(row.tokenEndpointAuthMethod).toBe("client_secret_basic");
|
|
@@ -854,7 +829,7 @@ describe("provider operations", () => {
|
|
|
854
829
|
authorizeUrl: "https://example.com/authorize",
|
|
855
830
|
tokenExchangeUrl: "https://example.com/token",
|
|
856
831
|
defaultScopes: [],
|
|
857
|
-
|
|
832
|
+
|
|
858
833
|
// Note: tokenExchangeBodyFormat intentionally omitted
|
|
859
834
|
});
|
|
860
835
|
expect(row.tokenExchangeBodyFormat).toBe("form");
|
|
@@ -869,7 +844,7 @@ describe("provider operations", () => {
|
|
|
869
844
|
authorizeUrl: "https://example.com/authorize",
|
|
870
845
|
tokenExchangeUrl: "https://example.com/token",
|
|
871
846
|
defaultScopes: [],
|
|
872
|
-
|
|
847
|
+
|
|
873
848
|
tokenExchangeBodyFormat: "json",
|
|
874
849
|
});
|
|
875
850
|
expect(row.tokenExchangeBodyFormat).toBe("json");
|
|
@@ -881,7 +856,7 @@ describe("provider operations", () => {
|
|
|
881
856
|
authorizeUrl: "https://api.notion.com/v1/oauth/authorize",
|
|
882
857
|
tokenExchangeUrl: "https://api.notion.com/v1/oauth/token",
|
|
883
858
|
defaultScopes: ["read"],
|
|
884
|
-
|
|
859
|
+
|
|
885
860
|
logoUrl: "https://cdn.simpleicons.org/notion",
|
|
886
861
|
});
|
|
887
862
|
|
|
@@ -896,7 +871,6 @@ describe("provider operations", () => {
|
|
|
896
871
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
897
872
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
898
873
|
defaultScopes: ["read"],
|
|
899
|
-
scopePolicy: {},
|
|
900
874
|
});
|
|
901
875
|
|
|
902
876
|
const fetched = getProvider("linear");
|
|
@@ -913,7 +887,6 @@ describe("provider operations", () => {
|
|
|
913
887
|
authorizeUrl: "https://github.com/authorize",
|
|
914
888
|
tokenExchangeUrl: "https://github.com/token",
|
|
915
889
|
defaultScopes: ["repo"],
|
|
916
|
-
scopePolicy: {},
|
|
917
890
|
},
|
|
918
891
|
]);
|
|
919
892
|
|
|
@@ -938,7 +911,7 @@ describe("provider operations", () => {
|
|
|
938
911
|
authorizeUrl: "https://github.com/authorize",
|
|
939
912
|
tokenExchangeUrl: "https://github.com/token",
|
|
940
913
|
defaultScopes: ["repo"],
|
|
941
|
-
|
|
914
|
+
|
|
942
915
|
scopeSeparator: ",",
|
|
943
916
|
},
|
|
944
917
|
]);
|
|
@@ -958,7 +931,6 @@ describe("provider operations", () => {
|
|
|
958
931
|
authorizeUrl: "https://github.com/authorize",
|
|
959
932
|
tokenExchangeUrl: "https://github.com/token",
|
|
960
933
|
defaultScopes: ["repo"],
|
|
961
|
-
scopePolicy: {},
|
|
962
934
|
},
|
|
963
935
|
]);
|
|
964
936
|
|
|
@@ -987,7 +959,6 @@ describe("provider operations", () => {
|
|
|
987
959
|
tokenExchangeUrl: "https://github.com/token",
|
|
988
960
|
refreshUrl: "https://github.com/login/oauth/refresh",
|
|
989
961
|
defaultScopes: ["repo"],
|
|
990
|
-
scopePolicy: {},
|
|
991
962
|
},
|
|
992
963
|
]);
|
|
993
964
|
|
|
@@ -1013,7 +984,6 @@ describe("provider operations", () => {
|
|
|
1013
984
|
authorizeUrl: "https://github.com/authorize",
|
|
1014
985
|
tokenExchangeUrl: "https://github.com/token",
|
|
1015
986
|
defaultScopes: ["repo"],
|
|
1016
|
-
scopePolicy: {},
|
|
1017
987
|
},
|
|
1018
988
|
]);
|
|
1019
989
|
|
|
@@ -1037,7 +1007,6 @@ describe("provider operations", () => {
|
|
|
1037
1007
|
authorizeUrl: "https://github.com/authorize",
|
|
1038
1008
|
tokenExchangeUrl: "https://github.com/token",
|
|
1039
1009
|
defaultScopes: ["repo"],
|
|
1040
|
-
scopePolicy: {},
|
|
1041
1010
|
},
|
|
1042
1011
|
]);
|
|
1043
1012
|
|
|
@@ -1072,7 +1041,6 @@ describe("provider operations", () => {
|
|
|
1072
1041
|
revokeUrl: "https://github.com/login/oauth/revoke",
|
|
1073
1042
|
revokeBodyTemplate: { token: "{access_token}" },
|
|
1074
1043
|
defaultScopes: ["repo"],
|
|
1075
|
-
scopePolicy: {},
|
|
1076
1044
|
},
|
|
1077
1045
|
]);
|
|
1078
1046
|
|
|
@@ -1103,7 +1071,6 @@ describe("provider operations", () => {
|
|
|
1103
1071
|
tokenExchangeUrl: "https://example.com/token",
|
|
1104
1072
|
tokenEndpointAuthMethod: "client_secret_basic",
|
|
1105
1073
|
defaultScopes: [],
|
|
1106
|
-
scopePolicy: {},
|
|
1107
1074
|
},
|
|
1108
1075
|
]);
|
|
1109
1076
|
|
|
@@ -1129,7 +1096,6 @@ describe("provider operations", () => {
|
|
|
1129
1096
|
tokenExchangeUrl: "https://example.com/token",
|
|
1130
1097
|
tokenExchangeBodyFormat: "json",
|
|
1131
1098
|
defaultScopes: [],
|
|
1132
|
-
scopePolicy: {},
|
|
1133
1099
|
},
|
|
1134
1100
|
]);
|
|
1135
1101
|
|
|
@@ -1153,7 +1119,6 @@ describe("provider operations", () => {
|
|
|
1153
1119
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
1154
1120
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
1155
1121
|
defaultScopes: ["read"],
|
|
1156
|
-
scopePolicy: {},
|
|
1157
1122
|
});
|
|
1158
1123
|
|
|
1159
1124
|
expect(getProvider("linear")!.logoUrl).toBeNull();
|
|
@@ -1174,7 +1139,7 @@ describe("provider operations", () => {
|
|
|
1174
1139
|
authorizeUrl: "https://api.notion.com/v1/oauth/authorize",
|
|
1175
1140
|
tokenExchangeUrl: "https://api.notion.com/v1/oauth/token",
|
|
1176
1141
|
defaultScopes: ["read"],
|
|
1177
|
-
|
|
1142
|
+
|
|
1178
1143
|
logoUrl: "https://cdn.simpleicons.org/notion",
|
|
1179
1144
|
});
|
|
1180
1145
|
|
|
@@ -1195,7 +1160,7 @@ describe("provider operations", () => {
|
|
|
1195
1160
|
authorizeUrl: "https://api.notion.com/v1/oauth/authorize",
|
|
1196
1161
|
tokenExchangeUrl: "https://api.notion.com/v1/oauth/token",
|
|
1197
1162
|
defaultScopes: ["read"],
|
|
1198
|
-
|
|
1163
|
+
|
|
1199
1164
|
logoUrl: "https://cdn.simpleicons.org/notion",
|
|
1200
1165
|
});
|
|
1201
1166
|
|
|
@@ -1221,7 +1186,7 @@ describe("provider operations", () => {
|
|
|
1221
1186
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
1222
1187
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
1223
1188
|
defaultScopes: ["read"],
|
|
1224
|
-
|
|
1189
|
+
|
|
1225
1190
|
scopeSeparator: "",
|
|
1226
1191
|
},
|
|
1227
1192
|
]);
|
|
@@ -1236,7 +1201,7 @@ describe("provider operations", () => {
|
|
|
1236
1201
|
authorizeUrl: "https://linear.app/oauth/authorize",
|
|
1237
1202
|
tokenExchangeUrl: "https://api.linear.app/oauth/token",
|
|
1238
1203
|
defaultScopes: ["read"],
|
|
1239
|
-
|
|
1204
|
+
|
|
1240
1205
|
scopeSeparator: "",
|
|
1241
1206
|
});
|
|
1242
1207
|
|
|
@@ -2048,7 +2013,7 @@ describe("disconnectOAuthProvider", () => {
|
|
|
2048
2013
|
authorizeUrl: `https://${provider}.example.com/authorize`,
|
|
2049
2014
|
tokenExchangeUrl: `https://${provider}.example.com/token`,
|
|
2050
2015
|
defaultScopes: ["read"],
|
|
2051
|
-
|
|
2016
|
+
|
|
2052
2017
|
...(revokeUrl ? { revokeUrl } : {}),
|
|
2053
2018
|
...(revokeBodyTemplate ? { revokeBodyTemplate } : {}),
|
|
2054
2019
|
},
|
|
@@ -2342,7 +2307,7 @@ describe("disconnectOAuthProvider", () => {
|
|
|
2342
2307
|
authorizeUrl: "https://google.example.com/authorize",
|
|
2343
2308
|
tokenExchangeUrl: "https://google.example.com/token",
|
|
2344
2309
|
defaultScopes: ["email"],
|
|
2345
|
-
|
|
2310
|
+
|
|
2346
2311
|
revokeUrl: "https://oauth2.googleapis.com/revoke",
|
|
2347
2312
|
revokeBodyTemplate: {
|
|
2348
2313
|
token: "{access_token}",
|