@agent-native/core 0.122.4 → 0.123.0
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +538 -0
- package/corpus/core/docs/content/actions.mdx +33 -20
- package/corpus/core/docs/content/agent-mentions.mdx +30 -19
- package/corpus/core/docs/content/agent-native-toolkit.mdx +8 -6
- package/corpus/core/docs/content/agent-resources.mdx +11 -0
- package/corpus/core/docs/content/agent-surfaces.mdx +41 -30
- package/corpus/core/docs/content/audit-log.mdx +78 -0
- package/corpus/core/docs/content/authentication.mdx +7 -5
- package/corpus/core/docs/content/automations.mdx +15 -9
- package/corpus/core/docs/content/client.mdx +11 -11
- package/corpus/core/docs/content/cloneable-saas.mdx +7 -1
- package/corpus/core/docs/content/code-agents-ui.mdx +9 -1
- package/corpus/core/docs/content/components.mdx +7 -0
- package/corpus/core/docs/content/context-awareness.mdx +1 -0
- package/corpus/core/docs/content/creating-templates.mdx +9 -1
- package/corpus/core/docs/content/custom-design-system.mdx +8 -0
- package/corpus/core/docs/content/data-programs.mdx +6 -0
- package/corpus/core/docs/content/deployment.mdx +2 -0
- package/corpus/core/docs/content/doctor.mdx +5 -3
- package/corpus/core/docs/content/extensions.mdx +26 -0
- package/corpus/core/docs/content/external-agents-catalog.mdx +533 -0
- package/corpus/core/docs/content/external-agents.mdx +20 -514
- package/corpus/core/docs/content/faq.mdx +2 -2
- package/corpus/core/docs/content/file-uploads.mdx +44 -0
- package/corpus/core/docs/content/frames.mdx +2 -2
- package/corpus/core/docs/content/generative-ui.mdx +8 -0
- package/corpus/core/docs/content/getting-started.mdx +45 -17
- package/corpus/core/docs/content/human-approval.mdx +9 -0
- package/corpus/core/docs/content/integrations.mdx +4 -3
- package/corpus/core/docs/content/internationalization.mdx +4 -11
- package/corpus/core/docs/content/key-concepts.mdx +1 -1
- package/corpus/core/docs/content/local-file-mode.mdx +5 -0
- package/corpus/core/docs/content/mcp-apps.mdx +2 -1
- package/corpus/core/docs/content/mcp-clients.mdx +32 -1
- package/corpus/core/docs/content/mcp-protocol.mdx +4 -3
- package/corpus/core/docs/content/messaging-internals.mdx +328 -0
- package/corpus/core/docs/content/messaging-recipes.mdx +194 -0
- package/corpus/core/docs/content/messaging.mdx +9 -307
- package/corpus/core/docs/content/multi-app-workspace.mdx +1 -1
- package/corpus/core/docs/content/multi-tenancy.mdx +1 -0
- package/corpus/core/docs/content/native-chat-ui.mdx +8 -0
- package/corpus/core/docs/content/notifications.mdx +18 -20
- package/corpus/core/docs/content/observability.mdx +1 -0
- package/corpus/core/docs/content/onboarding.mdx +20 -6
- package/corpus/core/docs/content/organizations-teams-permissions.mdx +99 -124
- package/corpus/core/docs/content/package-lifecycle.mdx +19 -7
- package/corpus/core/docs/content/progress.mdx +11 -0
- package/corpus/core/docs/content/real-time-collaboration.mdx +44 -3
- package/corpus/core/docs/content/recurring-jobs.mdx +14 -1
- package/corpus/core/docs/content/security.mdx +5 -2
- package/corpus/core/docs/content/server.mdx +2 -1
- package/corpus/core/docs/content/sharing.mdx +22 -3
- package/corpus/core/docs/content/skills-guide.mdx +62 -19
- package/corpus/core/docs/content/syncing-template-changes.mdx +9 -0
- package/corpus/core/docs/content/template-analytics-connectors.mdx +75 -0
- package/corpus/core/docs/content/template-analytics-dashboards.mdx +106 -0
- package/corpus/core/docs/content/template-analytics-developers.mdx +287 -0
- package/corpus/core/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
- package/corpus/core/docs/content/template-analytics.mdx +21 -263
- package/corpus/core/docs/content/template-assets-developers.mdx +456 -0
- package/corpus/core/docs/content/template-assets-generation.mdx +147 -0
- package/corpus/core/docs/content/template-assets-integrations.mdx +319 -0
- package/corpus/core/docs/content/template-assets-presets.mdx +185 -0
- package/corpus/core/docs/content/template-assets.mdx +12 -562
- package/corpus/core/docs/content/template-brain-agent.mdx +103 -0
- package/corpus/core/docs/content/template-brain-developers.mdx +379 -0
- package/corpus/core/docs/content/template-brain-knowledge.mdx +50 -0
- package/corpus/core/docs/content/template-brain-sources.mdx +163 -0
- package/corpus/core/docs/content/template-brain.mdx +30 -390
- package/corpus/core/docs/content/template-calendar-agent.mdx +133 -0
- package/corpus/core/docs/content/template-calendar-booking-links.mdx +73 -0
- package/corpus/core/docs/content/template-calendar-developers.mdx +366 -0
- package/corpus/core/docs/content/template-calendar-scheduling.mdx +128 -0
- package/corpus/core/docs/content/template-calendar.mdx +13 -260
- package/corpus/core/docs/content/template-chat-developers.mdx +88 -0
- package/corpus/core/docs/content/template-chat-first-edits.mdx +145 -0
- package/corpus/core/docs/content/template-chat.mdx +12 -77
- package/corpus/core/docs/content/template-clips-ai-and-editing.mdx +114 -0
- package/corpus/core/docs/content/template-clips-capture-everywhere.mdx +120 -0
- package/corpus/core/docs/content/template-clips-developers.mdx +373 -0
- package/corpus/core/docs/content/template-clips-sharing-and-teams.mdx +182 -0
- package/corpus/core/docs/content/template-clips.mdx +19 -508
- package/corpus/core/docs/content/template-content-databases.mdx +406 -0
- package/corpus/core/docs/content/template-content-developers.mdx +364 -0
- package/corpus/core/docs/content/template-content-editing.mdx +60 -0
- package/corpus/core/docs/content/template-content-sync.mdx +149 -0
- package/corpus/core/docs/content/template-content.mdx +21 -561
- package/corpus/core/docs/content/template-design-brand-and-figma.mdx +150 -0
- package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
- package/corpus/core/docs/content/template-design-developers.mdx +358 -0
- package/corpus/core/docs/content/template-design-quality-and-components.mdx +95 -0
- package/corpus/core/docs/content/template-design.mdx +20 -344
- package/corpus/core/docs/content/template-dispatch-developers.mdx +121 -0
- package/corpus/core/docs/content/template-dispatch-messaging-routing.mdx +114 -0
- package/corpus/core/docs/content/template-dispatch-operations.mdx +160 -0
- package/corpus/core/docs/content/template-dispatch-vault-integrations.mdx +316 -0
- package/corpus/core/docs/content/template-dispatch.mdx +24 -283
- package/corpus/core/docs/content/template-forms-building-publishing.mdx +135 -0
- package/corpus/core/docs/content/template-forms-developers.mdx +195 -0
- package/corpus/core/docs/content/template-forms-responses.mdx +120 -0
- package/corpus/core/docs/content/template-forms.mdx +21 -230
- package/corpus/core/docs/content/template-mail-agent.mdx +114 -0
- package/corpus/core/docs/content/template-mail-developers.mdx +356 -0
- package/corpus/core/docs/content/template-mail-drafts-and-queue.mdx +103 -0
- package/corpus/core/docs/content/template-mail-inbox.mdx +118 -0
- package/corpus/core/docs/content/template-mail.mdx +23 -274
- package/corpus/core/docs/content/template-plan-automations.mdx +213 -0
- package/corpus/core/docs/content/template-plan-developers.mdx +703 -0
- package/corpus/core/docs/content/template-plan-local-and-desktop.mdx +236 -0
- package/corpus/core/docs/content/template-plan-review-workflow.mdx +180 -0
- package/corpus/core/docs/content/template-plan.mdx +60 -910
- package/corpus/core/docs/content/template-slides-agent.mdx +102 -0
- package/corpus/core/docs/content/template-slides-design-and-media.mdx +94 -0
- package/corpus/core/docs/content/template-slides-developers.mdx +488 -0
- package/corpus/core/docs/content/template-slides-editing.mdx +56 -0
- package/corpus/core/docs/content/template-slides.mdx +20 -362
- package/corpus/core/docs/content/toolkit-capability-packages.mdx +38 -13
- package/corpus/core/docs/content/toolkit-context-knowledge.mdx +49 -9
- package/corpus/core/docs/content/toolkit-editors-canvases.mdx +72 -10
- package/corpus/core/docs/content/toolkit-resources.mdx +16 -0
- package/corpus/core/docs/content/toolkit-settings.mdx +3 -3
- package/corpus/core/docs/content/toolkit-sharing.mdx +5 -7
- package/corpus/core/docs/content/using-your-agent.mdx +25 -2
- package/corpus/core/docs/content/voice-input.mdx +11 -7
- package/corpus/core/docs/content/what-is-agent-native.mdx +1 -0
- package/corpus/core/docs/content/workspace-connections.mdx +21 -11
- package/corpus/core/docs/content/workspace-management.mdx +1 -1
- package/corpus/core/package.json +1 -3
- package/corpus/core/src/a2a/client.ts +4 -2
- package/corpus/core/src/agent/action-warnings.ts +103 -0
- package/corpus/core/src/agent/durable-background.ts +42 -5
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +58 -6
- package/corpus/core/src/agent/engine/anthropic-engine.ts +51 -8
- package/corpus/core/src/agent/engine/builder-engine.ts +56 -18
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +10 -9
- package/corpus/core/src/agent/engine/credential-errors.ts +11 -0
- package/corpus/core/src/agent/engine/error-detail.ts +39 -0
- package/corpus/core/src/agent/engine/prompt-cache.ts +44 -0
- package/corpus/core/src/agent/engine/registry.ts +22 -30
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +2 -1
- package/corpus/core/src/agent/engine/translate-anthropic.ts +99 -0
- package/corpus/core/src/agent/loop-settings.ts +94 -7
- package/corpus/core/src/agent/production-agent.ts +667 -157
- package/corpus/core/src/agent/run-loop-with-resume.ts +27 -1
- package/corpus/core/src/agent/run-manager.ts +229 -39
- package/corpus/core/src/agent/run-store.ts +397 -64
- package/corpus/core/src/agent/thread-data-builder.ts +5 -1
- package/corpus/core/src/agent/types.ts +23 -6
- package/corpus/core/src/application-state/script-helpers.ts +5 -2
- package/corpus/core/src/cli/agents.ts +69 -1
- package/corpus/core/src/cli/app-skill.ts +1 -1
- package/corpus/core/src/cli/code-agent-executor.ts +7 -3
- package/corpus/core/src/cli/design-connect.ts +82 -8
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
- package/corpus/core/src/client/AssistantChat.tsx +623 -607
- package/corpus/core/src/client/agent-chat-adapter.ts +176 -29
- package/corpus/core/src/client/chat/message-components.tsx +13 -0
- package/corpus/core/src/client/embed-auth.ts +3 -1
- package/corpus/core/src/client/integrations/IntegrationCard.tsx +41 -24
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +37 -21
- package/corpus/core/src/client/integrations/webhook-url.ts +29 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +41 -27
- package/corpus/core/src/client/org/RequireActiveOrg.tsx +7 -0
- package/corpus/core/src/client/org/TeamPage.tsx +144 -14
- package/corpus/core/src/client/org/hooks.ts +27 -0
- package/corpus/core/src/client/org/index.ts +2 -0
- package/corpus/core/src/client/require-session.tsx +40 -29
- package/corpus/core/src/client/session-replay.ts +1 -1
- package/corpus/core/src/client/settings/DemoModeSection.tsx +0 -5
- package/corpus/core/src/client/settings/SecretsSection.tsx +47 -42
- package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
- package/corpus/core/src/client/sse-event-processor.ts +83 -8
- package/corpus/core/src/client/use-action.ts +22 -13
- package/corpus/core/src/client/use-agent-engine-configured.ts +36 -4
- package/corpus/core/src/client/use-db-sync.ts +21 -1
- package/corpus/core/src/credentials/index.ts +124 -2
- package/corpus/core/src/deploy/build.ts +93 -30
- package/corpus/core/src/deploy/workspace-deploy.ts +21 -16
- package/corpus/core/src/guards/no-localhost-fallback.ts +76 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +19 -12
- package/corpus/core/src/integrations/webhook-handler.ts +56 -33
- package/corpus/core/src/jobs/scheduler.ts +57 -23
- package/corpus/core/src/localization/default-messages.ts +23 -1
- package/corpus/core/src/observability/evals.ts +7 -8
- package/corpus/core/src/observability/traces.ts +2 -0
- package/corpus/core/src/org/accept-pending.ts +2 -2
- package/corpus/core/src/org/active-org.ts +73 -0
- package/corpus/core/src/org/auto-join-domain.ts +7 -2
- package/corpus/core/src/org/context.ts +169 -66
- package/corpus/core/src/org/handlers.ts +148 -10
- package/corpus/core/src/org/plugin.ts +8 -1
- package/corpus/core/src/org/types.ts +6 -1
- package/corpus/core/src/provider-api/index.ts +6 -1
- package/corpus/core/src/resources/handlers.ts +2 -6
- package/corpus/core/src/resources/script-helpers.ts +2 -1
- package/corpus/core/src/scripts/chat/search-chats.ts +5 -2
- package/corpus/core/src/scripts/describe-workspace-apps.ts +59 -0
- package/corpus/core/src/scripts/resources/delete-memory.ts +5 -2
- package/corpus/core/src/scripts/resources/delete.ts +5 -2
- package/corpus/core/src/scripts/resources/effective.ts +5 -2
- package/corpus/core/src/scripts/resources/list.ts +5 -2
- package/corpus/core/src/scripts/resources/read.ts +5 -2
- package/corpus/core/src/scripts/resources/save-memory.ts +5 -2
- package/corpus/core/src/scripts/resources/write.ts +5 -2
- package/corpus/core/src/server/agent-capabilities.ts +147 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +11 -13
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +183 -57
- package/corpus/core/src/server/agent-chat/script-entries.ts +20 -7
- package/corpus/core/src/server/agent-chat-plugin.ts +27 -0
- package/corpus/core/src/server/auth.ts +38 -32
- package/corpus/core/src/server/core-routes-plugin.ts +229 -179
- package/corpus/core/src/server/credential-provider.ts +196 -44
- package/corpus/core/src/server/embed-session.ts +10 -0
- package/corpus/core/src/server/framework-request-handler.ts +43 -0
- package/corpus/core/src/server/google-auth-plugin.ts +13 -450
- package/corpus/core/src/server/index.ts +4 -1
- package/corpus/core/src/server/onboarding-html.ts +20 -56
- package/corpus/core/src/server/open-route.ts +6 -1
- package/corpus/core/src/server/poll.ts +1 -1
- package/corpus/core/src/server/prompts/framework-core-compact.ts +5 -5
- package/corpus/core/src/server/prompts/framework-core.ts +7 -9
- package/corpus/core/src/server/prompts/shared-rules.ts +20 -9
- package/corpus/core/src/server/request-context.ts +58 -2
- package/corpus/core/src/server/scoped-key-storage.ts +1 -1
- package/corpus/core/src/settings/org-settings.ts +9 -0
- package/corpus/core/src/settings/store.ts +29 -0
- package/corpus/core/src/shared/index.ts +13 -0
- package/corpus/core/src/shared/sign-in-journey.ts +331 -0
- package/corpus/core/src/styles/agent-native.css +8 -0
- package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/chat/AGENTS.md +8 -0
- package/corpus/core/src/templates/chat/app/entry.client.tsx +3 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/default/AGENTS.md +68 -195
- package/corpus/core/src/templates/default/app/entry.client.tsx +3 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +8 -0
- package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +62 -124
- package/corpus/core/src/templates/workspace-root/AGENTS.md +6 -1
- package/corpus/core/src/triggers/dispatcher.ts +28 -17
- package/corpus/core/src/vite/client.ts +20 -8
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +41 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +50 -22
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +8 -0
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/analytics/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/analytics/.builder/skills/charts/SKILL.md +2 -2
- package/corpus/templates/analytics/actions/delete-dashboard-view.ts +24 -0
- package/corpus/templates/analytics/actions/delete-user-pref.ts +22 -0
- package/corpus/templates/analytics/actions/generate-chart.ts +8 -245
- package/corpus/templates/analytics/actions/get-theme.ts +27 -0
- package/corpus/templates/analytics/actions/get-user-pref.ts +22 -0
- package/corpus/templates/analytics/actions/list-dashboard-views.ts +25 -0
- package/corpus/templates/analytics/actions/save-dashboard-view.ts +33 -0
- package/corpus/templates/analytics/actions/set-theme.ts +22 -0
- package/corpus/templates/analytics/actions/set-user-pref.ts +24 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +134 -27
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -9
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +0 -17
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +10 -5
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +22 -52
- package/corpus/templates/analytics/app/hooks/use-user-pref.ts +21 -31
- package/corpus/templates/analytics/app/i18n-data.ts +10 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dual-axis.ts +73 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +8 -27
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +0 -57
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
- package/corpus/templates/analytics/app/root.tsx +0 -28
- package/corpus/templates/analytics/changelog/2026-07-26-error-issues-now-group-by-message-as-well-as-stack-frame-and.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-line-area-and-bar-dashboard-panels-can-plot-series-on-a-seco.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-scheduled-dashboard-email-reports-now-arrive-complete-and-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-session-replays-now-detect-rage-clicks-so-the-rage-click-fil.md +6 -0
- package/corpus/templates/analytics/docs/error-capture.md +8 -4
- package/corpus/templates/analytics/package.json +1 -2
- package/corpus/templates/analytics/scripts/preview-dashboard-report.ts +221 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -32
- package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +1168 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +111 -1358
- package/corpus/templates/analytics/server/lib/error-capture.ts +32 -15
- package/corpus/templates/analytics/server/lib/report-chart-svg.ts +901 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +77 -1
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -4
- package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +28 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/assets/.agents/skills/assets-navigation/SKILL.md +46 -0
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +28 -0
- package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +9 -0
- package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +11 -0
- package/corpus/templates/assets/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/assets/AGENTS.md +58 -125
- package/corpus/templates/assets/actions/variant-slots.ts +8 -4
- package/corpus/templates/assets/app/entry.client.tsx +3 -0
- package/corpus/templates/assets/package.json +0 -2
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +78 -4
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +15 -3
- package/corpus/templates/brain/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/brain/AGENTS.md +73 -119
- package/corpus/templates/brain/app/entry.client.tsx +3 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +56 -3
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/calendar/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/calendar/AGENTS.md +22 -45
- package/corpus/templates/calendar/app/entry.client.tsx +3 -0
- package/corpus/templates/calendar/server/handlers/events.ts +0 -364
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/chat/AGENTS.md +8 -0
- package/corpus/templates/chat/app/entry.client.tsx +3 -0
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +42 -0
- package/corpus/templates/clips/.agents/skills/brain-export/SKILL.md +59 -0
- package/corpus/templates/clips/.agents/skills/bug-reports/SKILL.md +37 -0
- package/corpus/templates/clips/.agents/skills/crm-call-evidence/SKILL.md +41 -0
- package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +4 -0
- package/corpus/templates/clips/.agents/skills/external-integrations/SKILL.md +45 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +9 -0
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +45 -0
- package/corpus/templates/clips/.agents/skills/screen-memory/SKILL.md +43 -0
- package/corpus/templates/clips/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +38 -1
- package/corpus/templates/clips/AGENTS.md +82 -224
- package/corpus/templates/clips/actions/create-recording.ts +4 -0
- package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +6 -10
- package/corpus/templates/clips/app/routes/invite.$token.tsx +6 -5
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +4 -5
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -8
- package/corpus/templates/clips/changelog/2026-07-26-long-agent-chat-turns-now-finish-instead-of-stopping-partway.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-26-recordings-no-longer-get-stuck-on-uploading-uploads-now-hold.md +6 -0
- package/corpus/templates/clips/server/db/schema.ts +3 -0
- package/corpus/templates/clips/server/jobs/brain-export.ts +4 -0
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +0 -52
- package/corpus/templates/clips/server/lib/upload-lease.ts +241 -0
- package/corpus/templates/clips/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/clips/server/plugins/db.ts +18 -347
- package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +7 -1
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +123 -126
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +4 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +118 -0
- package/corpus/templates/clips/server/routes/api/uploads/reap.post.ts +69 -0
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/content/.agents/skills/content/SKILL.md +4 -0
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +8 -0
- package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +55 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +12 -1
- package/corpus/templates/content/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/content/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/content/AGENTS.md +63 -131
- package/corpus/templates/content/app/routes/_app.tsx +4 -4
- package/corpus/templates/content/server/routes/api/notion/callback.get.ts +6 -24
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +15 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +12 -0
- package/corpus/templates/design/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/design/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +201 -102
- package/corpus/templates/design/AGENTS.md +58 -71
- package/corpus/templates/design/actions/open-visual-edit.ts +111 -2
- package/corpus/templates/design/app/components/design/AddLocalhostScreenDialog.tsx +236 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1 -1
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2 -2
- package/corpus/templates/design/app/entry.client.tsx +3 -0
- package/corpus/templates/design/app/i18n-data.ts +180 -0
- package/corpus/templates/design/app/pages/Present.tsx +6 -9
- package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -7
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +20 -0
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/dispatch/app/entry.client.tsx +3 -0
- package/corpus/templates/dispatch/server/plugins/identity-sso.ts +27 -16
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/forms/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/forms/DEVELOPING.md +1 -1
- package/corpus/templates/forms/app/entry.client.tsx +3 -0
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +3 -5
- package/corpus/templates/forms/app/routes/_app.tsx +4 -4
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/macros/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/macros/app/entry.client.tsx +3 -0
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +10 -0
- package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +3 -0
- package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +26 -2
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +37 -0
- package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +58 -0
- package/corpus/templates/mail/.agents/skills/mail-backends/SKILL.md +33 -0
- package/corpus/templates/mail/.agents/skills/provider-api-scans/SKILL.md +39 -0
- package/corpus/templates/mail/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/mail/AGENTS.md +74 -143
- package/corpus/templates/mail/actions/create-alias.ts +36 -0
- package/corpus/templates/mail/actions/create-automation.ts +28 -0
- package/corpus/templates/mail/actions/create-scheduled-job.ts +45 -0
- package/corpus/templates/mail/actions/delete-alias.ts +26 -0
- package/corpus/templates/mail/actions/delete-automation.ts +21 -0
- package/corpus/templates/mail/actions/get-automation-settings.ts +32 -0
- package/corpus/templates/mail/actions/get-mail-preferences.ts +18 -0
- package/corpus/templates/mail/actions/list-aliases.ts +17 -0
- package/corpus/templates/mail/actions/list-automations.ts +18 -0
- package/corpus/templates/mail/actions/list-scheduled-jobs.ts +18 -0
- package/corpus/templates/mail/actions/update-alias.ts +37 -0
- package/corpus/templates/mail/actions/update-automation-settings.ts +33 -0
- package/corpus/templates/mail/actions/update-automation.ts +33 -0
- package/corpus/templates/mail/actions/update-mail-preferences.ts +68 -0
- package/corpus/templates/mail/actions/update-scheduled-job.ts +25 -0
- package/corpus/templates/mail/app/entry.client.tsx +3 -0
- package/corpus/templates/mail/app/hooks/use-aliases.ts +6 -36
- package/corpus/templates/mail/app/hooks/use-automations.ts +9 -16
- package/corpus/templates/mail/app/hooks/use-emails.ts +6 -5
- package/corpus/templates/mail/app/hooks/use-scheduled-jobs.ts +12 -15
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +15 -9
- package/corpus/templates/mail/server/handlers/automations.ts +5 -142
- package/corpus/templates/mail/server/handlers/emails.ts +1 -56
- package/corpus/templates/mail/server/handlers/scheduled-jobs.ts +0 -134
- package/corpus/templates/mail/server/lib/aliases.ts +18 -0
- package/corpus/templates/mail/server/lib/automations.ts +104 -0
- package/corpus/templates/mail/server/lib/jobs.ts +34 -0
- package/corpus/templates/mail/server/lib/mail-settings.ts +43 -0
- package/corpus/templates/mail/shared/automation-schema.ts +10 -0
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/plan/.agents/skills/plan-authoring-flow/SKILL.md +98 -0
- package/corpus/templates/plan/.agents/skills/plan-browser-editing/SKILL.md +42 -0
- package/corpus/templates/plan/.agents/skills/plan-comments-and-feedback/SKILL.md +68 -0
- package/corpus/templates/plan/.agents/skills/plan-events/SKILL.md +22 -0
- package/corpus/templates/plan/.agents/skills/plan-hosted-writes/SKILL.md +42 -0
- package/corpus/templates/plan/.agents/skills/plan-local-codebase-chat/SKILL.md +38 -0
- package/corpus/templates/plan/.agents/skills/plan-review-recaps/SKILL.md +25 -0
- package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +68 -0
- package/corpus/templates/plan/.agents/skills/plan-version-history/SKILL.md +25 -0
- package/corpus/templates/plan/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/plan/AGENTS.md +64 -296
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +9 -8
- package/corpus/templates/plan/app/pages/PlansPage.tsx +5 -10
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +7 -7
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/slides/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -2
- package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/slides/DEVELOPING.md +3 -3
- package/corpus/templates/slides/actions/_deck-write.ts +52 -0
- package/corpus/templates/slides/actions/add-deck.ts +73 -0
- package/corpus/templates/slides/actions/delete-deck.ts +60 -0
- package/corpus/templates/slides/actions/get-deck.ts +3 -1
- package/corpus/templates/slides/actions/save-deck.ts +144 -0
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +27 -20
- package/corpus/templates/slides/app/context/DeckContext.tsx +173 -100
- package/corpus/templates/slides/app/pages/Index.tsx +3 -6
- package/corpus/templates/slides/app/routes/slide.tsx +16 -12
- package/corpus/templates/slides/changelog/2026-07-26-a-newly-created-deck-now-appears-in-the-deck-list-right-away.md +6 -0
- package/corpus/templates/slides/server/handlers/decks.ts +2 -378
- package/corpus/templates/tasks/.agents/skills/action-reference/SKILL.md +47 -0
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +19 -1
- package/corpus/templates/tasks/.agents/skills/custom-fields/SKILL.md +63 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/tasks/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/tasks/.agents/skills/store-conventions/SKILL.md +45 -0
- package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +66 -0
- package/corpus/templates/tasks/AGENTS.md +48 -113
- package/corpus/templates/tasks/app/entry.client.tsx +3 -0
- package/corpus/toolkit/CHANGELOG.md +12 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/composer/PromptComposer.tsx +23 -20
- package/dist/a2a/client.d.ts +3 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +4 -2
- package/dist/a2a/client.js.map +1 -1
- package/dist/agent/action-warnings.d.ts +27 -0
- package/dist/agent/action-warnings.d.ts.map +1 -0
- package/dist/agent/action-warnings.js +73 -0
- package/dist/agent/action-warnings.js.map +1 -0
- package/dist/agent/durable-background.d.ts +8 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +37 -5
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +47 -6
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +41 -9
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +46 -19
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -1
- package/dist/agent/engine/continuation-dispatch-retry.js +11 -9
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -1
- package/dist/agent/engine/credential-errors.d.ts +6 -0
- package/dist/agent/engine/credential-errors.d.ts.map +1 -1
- package/dist/agent/engine/credential-errors.js +10 -0
- package/dist/agent/engine/credential-errors.js.map +1 -1
- package/dist/agent/engine/error-detail.d.ts +2 -0
- package/dist/agent/engine/error-detail.d.ts.map +1 -0
- package/dist/agent/engine/error-detail.js +37 -0
- package/dist/agent/engine/error-detail.js.map +1 -0
- package/dist/agent/engine/prompt-cache.d.ts +34 -0
- package/dist/agent/engine/prompt-cache.d.ts.map +1 -0
- package/dist/agent/engine/prompt-cache.js +39 -0
- package/dist/agent/engine/prompt-cache.js.map +1 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +23 -33
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/tool-call-journal-seed.d.ts +1 -1
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -1
- package/dist/agent/engine/tool-call-journal-seed.js +2 -2
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -1
- package/dist/agent/engine/translate-anthropic.d.ts +28 -0
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
- package/dist/agent/engine/translate-anthropic.js +75 -0
- package/dist/agent/engine/translate-anthropic.js.map +1 -1
- package/dist/agent/loop-settings.d.ts +35 -2
- package/dist/agent/loop-settings.d.ts.map +1 -1
- package/dist/agent/loop-settings.js +71 -8
- package/dist/agent/loop-settings.js.map +1 -1
- package/dist/agent/production-agent.d.ts +105 -20
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +516 -123
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +24 -2
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +52 -9
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +191 -36
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +87 -14
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +331 -59
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +6 -1
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +18 -6
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +9 -5
- package/dist/agent/types.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +2 -2
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/cli/agents.d.ts +2 -0
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +48 -1
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/app-skill.js +1 -1
- package/dist/cli/app-skill.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +3 -3
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +73 -8
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.js +169 -24
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +135 -125
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +17 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +141 -31
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +9 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +12 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/embed-auth.d.ts.map +1 -1
- package/dist/client/embed-auth.js +3 -1
- package/dist/client/embed-auth.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +9 -4
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +13 -7
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/integrations/webhook-url.d.ts +7 -0
- package/dist/client/integrations/webhook-url.d.ts.map +1 -0
- package/dist/client/integrations/webhook-url.js +32 -0
- package/dist/client/integrations/webhook-url.js.map +1 -0
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +13 -11
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
- package/dist/client/org/RequireActiveOrg.js +2 -2
- package/dist/client/org/RequireActiveOrg.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +52 -13
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +9 -0
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +24 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +1 -1
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/require-session.d.ts +12 -17
- package/dist/client/require-session.d.ts.map +1 -1
- package/dist/client/require-session.js +36 -23
- package/dist/client/require-session.js.map +1 -1
- package/dist/client/session-replay.js +1 -1
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts +0 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +0 -4
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +12 -8
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts +0 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +1 -4
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +33 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +83 -8
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +23 -14
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +9 -3
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +30 -3
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +3 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +18 -1
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/credentials/index.d.ts +29 -1
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +111 -2
- package/dist/credentials/index.js.map +1 -1
- package/dist/deploy/build.d.ts +14 -3
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +81 -24
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts +15 -0
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +19 -18
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/guards/no-localhost-fallback.d.ts +7 -0
- package/dist/guards/no-localhost-fallback.d.ts.map +1 -1
- package/dist/guards/no-localhost-fallback.js +75 -16
- package/dist/guards/no-localhost-fallback.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +8 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +22 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +17 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +60 -33
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +17 -1
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +17 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/evals.d.ts.map +1 -1
- package/dist/observability/evals.js +7 -10
- package/dist/observability/evals.js.map +1 -1
- package/dist/observability/routes.d.ts +1 -1
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/org/accept-pending.js +2 -2
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/active-org.d.ts +16 -0
- package/dist/org/active-org.d.ts.map +1 -0
- package/dist/org/active-org.js +57 -0
- package/dist/org/active-org.js.map +1 -0
- package/dist/org/auto-join-domain.d.ts.map +1 -1
- package/dist/org/auto-join-domain.js +3 -2
- package/dist/org/auto-join-domain.js.map +1 -1
- package/dist/org/context.d.ts +19 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +159 -71
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +24 -1
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +129 -10
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/plugin.d.ts +2 -0
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +9 -2
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/types.d.ts +6 -1
- package/dist/org/types.d.ts.map +1 -1
- package/dist/org/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +3 -2
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +2 -7
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +2 -2
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +2 -2
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/scripts/describe-workspace-apps.d.ts +4 -0
- package/dist/scripts/describe-workspace-apps.d.ts.map +1 -0
- package/dist/scripts/describe-workspace-apps.js +34 -0
- package/dist/scripts/describe-workspace-apps.js.map +1 -0
- package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
- package/dist/scripts/resources/delete-memory.js +2 -2
- package/dist/scripts/resources/delete-memory.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +2 -2
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/effective.d.ts.map +1 -1
- package/dist/scripts/resources/effective.js +2 -2
- package/dist/scripts/resources/effective.js.map +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +2 -2
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +2 -2
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/save-memory.d.ts.map +1 -1
- package/dist/scripts/resources/save-memory.js +2 -2
- package/dist/scripts/resources/save-memory.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +2 -2
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-capabilities.d.ts +21 -0
- package/dist/server/agent-capabilities.d.ts.map +1 -0
- package/dist/server/agent-capabilities.js +106 -0
- package/dist/server/agent-capabilities.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +11 -13
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/prompt-resources.d.ts +32 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
- package/dist/server/agent-chat/prompt-resources.js +117 -56
- package/dist/server/agent-chat/prompt-resources.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +18 -8
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +27 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts +9 -9
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +32 -33
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +45 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +162 -139
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +35 -2
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +155 -40
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/embed-session.d.ts.map +1 -1
- package/dist/server/embed-session.js +10 -0
- package/dist/server/embed-session.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +38 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +12 -444
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +20 -56
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +6 -1
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/poll.js +1 -1
- package/dist/server/poll.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +5 -6
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.d.ts.map +1 -1
- package/dist/server/prompts/framework-core.js +7 -10
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/dist/server/prompts/shared-rules.d.ts +20 -2
- package/dist/server/prompts/shared-rules.d.ts.map +1 -1
- package/dist/server/prompts/shared-rules.js +20 -10
- package/dist/server/prompts/shared-rules.js.map +1 -1
- package/dist/server/request-context.d.ts +26 -1
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +52 -2
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/scoped-key-storage.js +1 -1
- package/dist/server/scoped-key-storage.js.map +1 -1
- package/dist/settings/org-settings.d.ts +2 -0
- package/dist/settings/org-settings.d.ts.map +1 -1
- package/dist/settings/org-settings.js +5 -1
- package/dist/settings/org-settings.js.map +1 -1
- package/dist/settings/store.d.ts +6 -0
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +25 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/sign-in-journey.d.ts +102 -0
- package/dist/shared/sign-in-journey.d.ts.map +1 -0
- package/dist/shared/sign-in-journey.js +269 -0
- package/dist/shared/sign-in-journey.js.map +1 -0
- package/dist/styles/agent-native.css +8 -0
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/dist/templates/chat/AGENTS.md +8 -0
- package/dist/templates/chat/app/entry.client.tsx +3 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/default/AGENTS.md +68 -195
- package/dist/templates/default/app/entry.client.tsx +3 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +8 -0
- package/dist/templates/default/app/i18n/de-DE.ts +8 -0
- package/dist/templates/default/app/i18n/en-US.ts +8 -0
- package/dist/templates/default/app/i18n/es-ES.ts +8 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +8 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +8 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +8 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +8 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +8 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +8 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +8 -0
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/dist/templates/workspace-core/AGENTS.md +62 -124
- package/dist/templates/workspace-root/AGENTS.md +6 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +10 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +18 -8
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.mdx +33 -20
- package/docs/content/agent-mentions.mdx +30 -19
- package/docs/content/agent-native-toolkit.mdx +8 -6
- package/docs/content/agent-resources.mdx +11 -0
- package/docs/content/agent-surfaces.mdx +41 -30
- package/docs/content/audit-log.mdx +78 -0
- package/docs/content/authentication.mdx +7 -5
- package/docs/content/automations.mdx +15 -9
- package/docs/content/client.mdx +11 -11
- package/docs/content/cloneable-saas.mdx +7 -1
- package/docs/content/code-agents-ui.mdx +9 -1
- package/docs/content/components.mdx +7 -0
- package/docs/content/context-awareness.mdx +1 -0
- package/docs/content/creating-templates.mdx +9 -1
- package/docs/content/custom-design-system.mdx +8 -0
- package/docs/content/data-programs.mdx +6 -0
- package/docs/content/deployment.mdx +2 -0
- package/docs/content/doctor.mdx +5 -3
- package/docs/content/extensions.mdx +26 -0
- package/docs/content/external-agents-catalog.mdx +533 -0
- package/docs/content/external-agents.mdx +20 -514
- package/docs/content/faq.mdx +2 -2
- package/docs/content/file-uploads.mdx +44 -0
- package/docs/content/frames.mdx +2 -2
- package/docs/content/generative-ui.mdx +8 -0
- package/docs/content/getting-started.mdx +45 -17
- package/docs/content/human-approval.mdx +9 -0
- package/docs/content/integrations.mdx +4 -3
- package/docs/content/internationalization.mdx +4 -11
- package/docs/content/key-concepts.mdx +1 -1
- package/docs/content/local-file-mode.mdx +5 -0
- package/docs/content/mcp-apps.mdx +2 -1
- package/docs/content/mcp-clients.mdx +32 -1
- package/docs/content/mcp-protocol.mdx +4 -3
- package/docs/content/messaging-internals.mdx +328 -0
- package/docs/content/messaging-recipes.mdx +194 -0
- package/docs/content/messaging.mdx +9 -307
- package/docs/content/multi-app-workspace.mdx +1 -1
- package/docs/content/multi-tenancy.mdx +1 -0
- package/docs/content/native-chat-ui.mdx +8 -0
- package/docs/content/notifications.mdx +18 -20
- package/docs/content/observability.mdx +1 -0
- package/docs/content/onboarding.mdx +20 -6
- package/docs/content/organizations-teams-permissions.mdx +99 -124
- package/docs/content/package-lifecycle.mdx +19 -7
- package/docs/content/progress.mdx +11 -0
- package/docs/content/real-time-collaboration.mdx +44 -3
- package/docs/content/recurring-jobs.mdx +14 -1
- package/docs/content/security.mdx +5 -2
- package/docs/content/server.mdx +2 -1
- package/docs/content/sharing.mdx +22 -3
- package/docs/content/skills-guide.mdx +62 -19
- package/docs/content/syncing-template-changes.mdx +9 -0
- package/docs/content/template-analytics-connectors.mdx +75 -0
- package/docs/content/template-analytics-dashboards.mdx +106 -0
- package/docs/content/template-analytics-developers.mdx +287 -0
- package/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
- package/docs/content/template-analytics.mdx +21 -263
- package/docs/content/template-assets-developers.mdx +456 -0
- package/docs/content/template-assets-generation.mdx +147 -0
- package/docs/content/template-assets-integrations.mdx +319 -0
- package/docs/content/template-assets-presets.mdx +185 -0
- package/docs/content/template-assets.mdx +12 -562
- package/docs/content/template-brain-agent.mdx +103 -0
- package/docs/content/template-brain-developers.mdx +379 -0
- package/docs/content/template-brain-knowledge.mdx +50 -0
- package/docs/content/template-brain-sources.mdx +163 -0
- package/docs/content/template-brain.mdx +30 -390
- package/docs/content/template-calendar-agent.mdx +133 -0
- package/docs/content/template-calendar-booking-links.mdx +73 -0
- package/docs/content/template-calendar-developers.mdx +366 -0
- package/docs/content/template-calendar-scheduling.mdx +128 -0
- package/docs/content/template-calendar.mdx +13 -260
- package/docs/content/template-chat-developers.mdx +88 -0
- package/docs/content/template-chat-first-edits.mdx +145 -0
- package/docs/content/template-chat.mdx +12 -77
- package/docs/content/template-clips-ai-and-editing.mdx +114 -0
- package/docs/content/template-clips-capture-everywhere.mdx +120 -0
- package/docs/content/template-clips-developers.mdx +373 -0
- package/docs/content/template-clips-sharing-and-teams.mdx +182 -0
- package/docs/content/template-clips.mdx +19 -508
- package/docs/content/template-content-databases.mdx +406 -0
- package/docs/content/template-content-developers.mdx +364 -0
- package/docs/content/template-content-editing.mdx +60 -0
- package/docs/content/template-content-sync.mdx +149 -0
- package/docs/content/template-content.mdx +21 -561
- package/docs/content/template-design-brand-and-figma.mdx +150 -0
- package/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
- package/docs/content/template-design-developers.mdx +358 -0
- package/docs/content/template-design-quality-and-components.mdx +95 -0
- package/docs/content/template-design.mdx +20 -344
- package/docs/content/template-dispatch-developers.mdx +121 -0
- package/docs/content/template-dispatch-messaging-routing.mdx +114 -0
- package/docs/content/template-dispatch-operations.mdx +160 -0
- package/docs/content/template-dispatch-vault-integrations.mdx +316 -0
- package/docs/content/template-dispatch.mdx +24 -283
- package/docs/content/template-forms-building-publishing.mdx +135 -0
- package/docs/content/template-forms-developers.mdx +195 -0
- package/docs/content/template-forms-responses.mdx +120 -0
- package/docs/content/template-forms.mdx +21 -230
- package/docs/content/template-mail-agent.mdx +114 -0
- package/docs/content/template-mail-developers.mdx +356 -0
- package/docs/content/template-mail-drafts-and-queue.mdx +103 -0
- package/docs/content/template-mail-inbox.mdx +118 -0
- package/docs/content/template-mail.mdx +23 -274
- package/docs/content/template-plan-automations.mdx +213 -0
- package/docs/content/template-plan-developers.mdx +703 -0
- package/docs/content/template-plan-local-and-desktop.mdx +236 -0
- package/docs/content/template-plan-review-workflow.mdx +180 -0
- package/docs/content/template-plan.mdx +60 -910
- package/docs/content/template-slides-agent.mdx +102 -0
- package/docs/content/template-slides-design-and-media.mdx +94 -0
- package/docs/content/template-slides-developers.mdx +488 -0
- package/docs/content/template-slides-editing.mdx +56 -0
- package/docs/content/template-slides.mdx +20 -362
- package/docs/content/toolkit-capability-packages.mdx +38 -13
- package/docs/content/toolkit-context-knowledge.mdx +49 -9
- package/docs/content/toolkit-editors-canvases.mdx +72 -10
- package/docs/content/toolkit-resources.mdx +16 -0
- package/docs/content/toolkit-settings.mdx +3 -3
- package/docs/content/toolkit-sharing.mdx +5 -7
- package/docs/content/using-your-agent.mdx +25 -2
- package/docs/content/voice-input.mdx +11 -7
- package/docs/content/what-is-agent-native.mdx +1 -0
- package/docs/content/workspace-connections.mdx +21 -11
- package/docs/content/workspace-management.mdx +1 -1
- package/package.json +2 -4
- package/src/a2a/client.ts +4 -2
- package/src/agent/action-warnings.ts +103 -0
- package/src/agent/durable-background.ts +42 -5
- package/src/agent/engine/ai-sdk-engine.ts +58 -6
- package/src/agent/engine/anthropic-engine.ts +51 -8
- package/src/agent/engine/builder-engine.ts +56 -18
- package/src/agent/engine/continuation-dispatch-retry.ts +10 -9
- package/src/agent/engine/credential-errors.ts +11 -0
- package/src/agent/engine/error-detail.ts +39 -0
- package/src/agent/engine/prompt-cache.ts +44 -0
- package/src/agent/engine/registry.ts +22 -30
- package/src/agent/engine/tool-call-journal-seed.ts +2 -1
- package/src/agent/engine/translate-anthropic.ts +99 -0
- package/src/agent/loop-settings.ts +94 -7
- package/src/agent/production-agent.ts +667 -157
- package/src/agent/run-loop-with-resume.ts +27 -1
- package/src/agent/run-manager.ts +229 -39
- package/src/agent/run-store.ts +397 -64
- package/src/agent/thread-data-builder.ts +5 -1
- package/src/agent/types.ts +23 -6
- package/src/application-state/script-helpers.ts +5 -2
- package/src/cli/agents.ts +69 -1
- package/src/cli/app-skill.ts +1 -1
- package/src/cli/code-agent-executor.ts +7 -3
- package/src/cli/design-connect.ts +82 -8
- package/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
- package/src/client/AssistantChat.tsx +623 -607
- package/src/client/agent-chat-adapter.ts +176 -29
- package/src/client/chat/message-components.tsx +13 -0
- package/src/client/embed-auth.ts +3 -1
- package/src/client/integrations/IntegrationCard.tsx +41 -24
- package/src/client/integrations/IntegrationsPanel.tsx +37 -21
- package/src/client/integrations/webhook-url.ts +29 -0
- package/src/client/org/OrgSwitcher.tsx +41 -27
- package/src/client/org/RequireActiveOrg.tsx +7 -0
- package/src/client/org/TeamPage.tsx +144 -14
- package/src/client/org/hooks.ts +27 -0
- package/src/client/org/index.ts +2 -0
- package/src/client/require-session.tsx +40 -29
- package/src/client/session-replay.ts +1 -1
- package/src/client/settings/DemoModeSection.tsx +0 -5
- package/src/client/settings/SecretsSection.tsx +47 -42
- package/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
- package/src/client/sse-event-processor.ts +83 -8
- package/src/client/use-action.ts +22 -13
- package/src/client/use-agent-engine-configured.ts +36 -4
- package/src/client/use-db-sync.ts +21 -1
- package/src/credentials/index.ts +124 -2
- package/src/deploy/build.ts +93 -30
- package/src/deploy/workspace-deploy.ts +21 -16
- package/src/guards/no-localhost-fallback.ts +76 -14
- package/src/integrations/google-docs-poller.ts +19 -12
- package/src/integrations/webhook-handler.ts +56 -33
- package/src/jobs/scheduler.ts +57 -23
- package/src/localization/default-messages.ts +23 -1
- package/src/observability/evals.ts +7 -8
- package/src/observability/traces.ts +2 -0
- package/src/org/accept-pending.ts +2 -2
- package/src/org/active-org.ts +73 -0
- package/src/org/auto-join-domain.ts +7 -2
- package/src/org/context.ts +169 -66
- package/src/org/handlers.ts +148 -10
- package/src/org/plugin.ts +8 -1
- package/src/org/types.ts +6 -1
- package/src/provider-api/index.ts +6 -1
- package/src/resources/handlers.ts +2 -6
- package/src/resources/script-helpers.ts +2 -1
- package/src/scripts/chat/search-chats.ts +5 -2
- package/src/scripts/describe-workspace-apps.ts +59 -0
- package/src/scripts/resources/delete-memory.ts +5 -2
- package/src/scripts/resources/delete.ts +5 -2
- package/src/scripts/resources/effective.ts +5 -2
- package/src/scripts/resources/list.ts +5 -2
- package/src/scripts/resources/read.ts +5 -2
- package/src/scripts/resources/save-memory.ts +5 -2
- package/src/scripts/resources/write.ts +5 -2
- package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +11 -31
- package/src/server/agent-capabilities.ts +147 -0
- package/src/server/agent-chat/framework-prompts.ts +11 -13
- package/src/server/agent-chat/prompt-resources.ts +183 -57
- package/src/server/agent-chat/script-entries.ts +20 -7
- package/src/server/agent-chat-plugin.ts +27 -0
- package/src/server/auth.ts +38 -32
- package/src/server/core-routes-plugin.ts +229 -179
- package/src/server/credential-provider.ts +196 -44
- package/src/server/embed-session.ts +10 -0
- package/src/server/framework-request-handler.ts +43 -0
- package/src/server/google-auth-plugin.ts +13 -450
- package/src/server/index.ts +4 -1
- package/src/server/onboarding-html.ts +20 -56
- package/src/server/open-route.ts +6 -1
- package/src/server/poll.ts +1 -1
- package/src/server/prompts/framework-core-compact.ts +5 -5
- package/src/server/prompts/framework-core.ts +7 -9
- package/src/server/prompts/shared-rules.ts +20 -9
- package/src/server/request-context.ts +58 -2
- package/src/server/scoped-key-storage.ts +1 -1
- package/src/settings/org-settings.ts +9 -0
- package/src/settings/store.ts +29 -0
- package/src/shared/index.ts +13 -0
- package/src/shared/sign-in-journey.ts +331 -0
- package/src/styles/agent-native.css +8 -0
- package/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/src/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/src/templates/chat/AGENTS.md +8 -0
- package/src/templates/chat/app/entry.client.tsx +3 -0
- package/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/default/AGENTS.md +68 -195
- package/src/templates/default/app/entry.client.tsx +3 -0
- package/src/templates/default/app/i18n/ar-SA.ts +8 -0
- package/src/templates/default/app/i18n/de-DE.ts +8 -0
- package/src/templates/default/app/i18n/en-US.ts +8 -0
- package/src/templates/default/app/i18n/es-ES.ts +8 -0
- package/src/templates/default/app/i18n/fr-FR.ts +8 -0
- package/src/templates/default/app/i18n/hi-IN.ts +8 -0
- package/src/templates/default/app/i18n/ja-JP.ts +8 -0
- package/src/templates/default/app/i18n/ko-KR.ts +8 -0
- package/src/templates/default/app/i18n/pt-BR.ts +8 -0
- package/src/templates/default/app/i18n/zh-CN.ts +8 -0
- package/src/templates/default/app/i18n/zh-TW.ts +8 -0
- package/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/src/templates/workspace-core/AGENTS.md +62 -124
- package/src/templates/workspace-root/AGENTS.md +6 -1
- package/src/triggers/dispatcher.ts +28 -17
- package/src/vite/client.ts +20 -8
- package/corpus/core/src/client/components/MissingKeyCard.tsx +0 -61
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +0 -495
- package/corpus/core/src/client/settings/BackgroundAgentSection.tsx +0 -193
- package/corpus/core/src/client/settings/BrowserSection.tsx +0 -110
- package/corpus/templates/analytics/app/components/InlineMetric.tsx +0 -31
- package/corpus/templates/analytics/app/components/auth/LoginScreen.tsx +0 -4
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +0 -128
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +0 -264
- package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +0 -84
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +0 -92
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +0 -154
- package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +0 -49
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +0 -120
- package/corpus/templates/analytics/server/handlers/dashboard-views.ts +0 -85
- package/corpus/templates/analytics/server/handlers/user-prefs.ts +0 -58
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId]/[viewId].delete.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].post.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/theme.get.ts +0 -17
- package/corpus/templates/analytics/server/routes/api/theme.post.ts +0 -15
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].delete.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].put.ts +0 -1
- package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +0 -156
- package/corpus/templates/assets/app/components/library/LibraryCard.tsx +0 -213
- package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +0 -49
- package/corpus/templates/calendar/server/routes/api/events/[id].delete.ts +0 -1
- package/corpus/templates/calendar/server/routes/api/events/[id].get.ts +0 -1
- package/corpus/templates/calendar/server/routes/api/events/[id].put.ts +0 -1
- package/corpus/templates/content/app/components/layout/AppLayout.tsx +0 -9
- package/corpus/templates/content/server/routes/api/comments/[id].delete.ts +0 -69
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +0 -109
- package/corpus/templates/content/server/routes/api/documents/[id]/versions.get.ts +0 -53
- package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +0 -85
- package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +0 -129
- package/corpus/templates/forms/app/components/layout/AppLayout.tsx +0 -9
- package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +0 -213
- package/corpus/templates/mail/server/handlers/aliases.ts +0 -98
- package/corpus/templates/mail/server/routes/api/aliases/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/settings.get.ts +0 -22
- package/corpus/templates/mail/server/routes/api/automations/settings.put.ts +0 -25
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/settings.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/settings.patch.ts +0 -1
- package/corpus/templates/slides/app/components/deck/BuilderLogo.tsx +0 -22
- package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +0 -176
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +0 -244
- package/corpus/templates/slides/app/components/editor/ImportButton.tsx +0 -84
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +0 -43
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +0 -50
- package/corpus/templates/slides/server/routes/api/decks/[id].delete.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/[id].get.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/[id].put.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/index.get.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/index.post.ts +0 -1
- package/dist/client/components/MissingKeyCard.d.ts +0 -7
- package/dist/client/components/MissingKeyCard.d.ts.map +0 -1
- package/dist/client/components/MissingKeyCard.js +0 -32
- package/dist/client/components/MissingKeyCard.js.map +0 -1
- package/dist/client/extensions/agent-native-extension-runtime.d.ts +0 -69
- package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +0 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +0 -348
- package/dist/client/extensions/agent-native-extension-runtime.js.map +0 -1
- package/dist/client/settings/BackgroundAgentSection.d.ts +0 -2
- package/dist/client/settings/BackgroundAgentSection.d.ts.map +0 -1
- package/dist/client/settings/BackgroundAgentSection.js +0 -68
- package/dist/client/settings/BackgroundAgentSection.js.map +0 -1
- package/dist/client/settings/BrowserSection.d.ts +0 -2
- package/dist/client/settings/BrowserSection.d.ts.map +0 -1
- package/dist/client/settings/BrowserSection.js +0 -40
- package/dist/client/settings/BrowserSection.js.map +0 -1
- package/dist/templates/chat/.react-router/types/+server-build.d.ts +0 -18
- package/dist/templates/chat/.react-router/types/app/+types/root.ts +0 -68
- package/src/client/components/MissingKeyCard.tsx +0 -61
- package/src/client/extensions/agent-native-extension-runtime.ts +0 -495
- package/src/client/settings/BackgroundAgentSection.tsx +0 -193
- package/src/client/settings/BrowserSection.tsx +0 -110
- package/src/templates/chat/.react-router/types/+server-build.d.ts +0 -18
- package/src/templates/chat/.react-router/types/app/+types/root.ts +0 -68
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type { WorkspaceConnectionTemplateUse } from \"../connections/catalog.js\";\nimport {\n resolveCredential,\n type CredentialContext,\n} from \"../credentials/index.js\";\nimport {\n createSsrfSafeDispatcher,\n isBlockedExtensionUrlWithDns,\n} from \"../extensions/url-safety.js\";\nimport {\n processWebContent,\n type WebContentSearchOptions,\n type WebExtractMode,\n type WebResponseMode,\n} from \"../extensions/web-content.js\";\nimport {\n deleteOAuthTokens,\n listOAuthAccountsByOwner,\n saveOAuthTokens,\n} from \"../oauth-tokens/index.js\";\nimport { resolveSecret } from \"../server/credential-provider.js\";\nimport { resolveGoogleProviderCredentialCandidates } from \"../server/google-oauth-credentials.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport { mergeDefinitionsById } from \"../shared/merge-by-id.js\";\nimport { resolveWorkspaceConnectionCredentialForApp } from \"../workspace-connections/credentials.js\";\nimport { resolveWorkspaceConnectionForApp } from \"../workspace-connections/store.js\";\nimport type {\n CustomProviderConfig,\n CustomProviderAuthKind,\n} from \"./custom-registry.js\";\nimport {\n createProviderQuotaIdentity,\n createProviderRequestDedupeKey,\n executeWithProviderQuota,\n type ProviderQuotaIdentity,\n type ProviderQuotaExhaustedDetail,\n} from \"./quota-governor.js\";\n\nexport type {\n CustomProviderConfig,\n CustomProviderScope,\n CustomProviderAuthKind,\n UpsertCustomProviderArgs,\n} from \"./custom-registry.js\";\nexport {\n upsertCustomProvider,\n deleteCustomProvider,\n listCustomProviders,\n getCustomProvider,\n validateCustomBaseUrl,\n assertCanMutateCustomProviderScope,\n CustomProviderAuthError,\n} from \"./custom-registry.js\";\n\nexport const PROVIDER_API_IDS = [\n \"amplitude\",\n \"apollo\",\n \"bigquery\",\n \"clay\",\n \"commonroom\",\n \"dataforseo\",\n \"ga4\",\n \"gcloud\",\n \"github\",\n \"figma\",\n \"gmail\",\n \"gong\",\n \"google_calendar\",\n \"google_drive\",\n \"google_slides\",\n \"granola\",\n \"grafana\",\n \"hubspot\",\n \"salesforce\",\n \"jira\",\n \"mixpanel\",\n \"notion\",\n \"posthog\",\n \"prometheus\",\n \"pylon\",\n \"sentry\",\n \"slack\",\n \"stripe\",\n \"twitter\",\n] as const;\n\nexport type ProviderApiId = (typeof PROVIDER_API_IDS)[number];\n\nexport type ProviderApiMethod =\n | \"GET\"\n | \"POST\"\n | \"PUT\"\n | \"PATCH\"\n | \"DELETE\"\n | \"HEAD\";\n\n/** Cursor-pagination config for fetchAllPages. */\nexport interface FetchAllPagesConfig {\n /**\n * Dot-path into the JSON response body where the next-page cursor lives,\n * e.g. \"meta.next_cursor\" or \"pagination.next_page_token\".\n */\n cursorPath: string;\n /**\n * Query parameter name to pass the cursor on the next request,\n * e.g. \"cursor\" or \"page_token\".\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor on the next request.\n * Use this for POST-body pagination, e.g. Gong's top-level `cursor`.\n */\n cursorBodyPath?: string;\n /**\n * Dot-path to the items array in each response body.\n * When omitted, the whole response body is appended to the items array.\n */\n itemsPath?: string;\n /**\n * Maximum number of pages to fetch. Default 10, max 50.\n */\n maxPages?: number;\n}\n\nexport interface ProviderApiRequestArgs {\n provider: ProviderApiId | string;\n method?: ProviderApiMethod;\n path: string;\n query?: unknown;\n headers?: Record<string, unknown>;\n body?: unknown;\n auth?: \"default\" | \"none\";\n timeoutMs?: number;\n maxBytes?: number;\n connectionId?: string | null;\n accountId?: string | null;\n /**\n * When set, write the full response body to this workspace file path instead\n * of returning it in context. Returns a compact summary with status, bytes,\n * path, and a preview. Allows up to 20 MB (vs the normal 4 MB context limit).\n */\n saveToFile?: string;\n /**\n * When set, automatically paginate by cursor until the cursor field is empty\n * or maxPages is reached. Accumulates items from itemsPath (or whole bodies)\n * across all pages. Combine with saveToFile to write the full dataset.\n */\n fetchAllPages?: FetchAllPagesConfig;\n}\n\nexport interface GitHubRepositoryRef {\n owner: string;\n repo: string;\n}\n\nexport interface GitHubRepositoryFileEntry {\n name: string;\n path: string;\n type: \"file\" | \"dir\" | \"symlink\" | \"submodule\" | \"unknown\";\n sha: string | null;\n size: number | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n}\n\nexport interface GitHubRepositoryFileListArgs extends GitHubRepositoryRef {\n path?: string;\n ref?: string;\n recursive?: boolean;\n includeDirectories?: boolean;\n maxFiles?: number;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileSearchArgs extends GitHubRepositoryRef {\n query?: string;\n path?: string;\n filename?: string;\n extension?: string;\n language?: string;\n ref?: string;\n perPage?: number;\n page?: number;\n maxFiles?: number;\n includeTextMatches?: boolean;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileReadArgs extends GitHubRepositoryRef {\n path: string;\n ref?: string;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileWriteArgs extends GitHubRepositoryRef {\n path: string;\n content: string;\n message: string;\n branch?: string;\n sha?: string;\n overwriteExisting?: boolean;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileDeleteArgs extends GitHubRepositoryRef {\n path: string;\n message: string;\n branch?: string;\n sha?: string;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryCommitIdentity {\n name: string;\n email: string;\n date?: string;\n}\n\nexport interface GitHubRepositoryFileListResult {\n repository: GitHubRepositoryRef;\n ref: string | null;\n path: string;\n recursive: boolean;\n entries: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n providerTruncated: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileSearchResult {\n repository: GitHubRepositoryRef;\n mode: \"code-search\" | \"tree-filter\";\n query: string | null;\n ref: string | null;\n items: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n incompleteResults: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileReadResult {\n repository: GitHubRepositoryRef;\n path: string;\n ref: string | null;\n name: string;\n type: string;\n sha: string;\n size: number;\n encoding: string | null;\n content: string | null;\n contentBase64: string | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileWriteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n content: {\n name: string | null;\n path: string | null;\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n };\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileDeleteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface ProviderApiDocsOptions {\n provider: ProviderApiId | string;\n url?: string;\n maxBytes?: number;\n maxChars?: number;\n responseMode?: WebResponseMode;\n extract?: WebExtractMode;\n includeLinks?: boolean;\n search?: WebContentSearchOptions;\n}\n\nexport type ProviderApiAuthKind =\n | { type: \"none\" }\n | {\n type: \"bearer\";\n keys: readonly string[];\n workspaceProvider?: string;\n }\n | {\n type: \"basic\";\n usernameKey: string;\n passwordKey: string;\n workspaceProvider?: string;\n }\n | {\n type: \"basic-raw\";\n key: string;\n workspaceProvider?: string;\n }\n | {\n type: \"api-key-header\";\n key: string;\n header: string;\n workspaceProvider?: string;\n }\n | {\n type: \"google-service-account\";\n scopes: readonly string[];\n }\n | {\n type: \"oauth-bearer\";\n oauthProvider: string;\n tokenLabel: string;\n workspaceProvider?: string;\n }\n | {\n type: \"oauth-bearer-or-api-key-header\";\n oauthProvider: string;\n tokenLabel: string;\n key: string;\n fallbackKeys?: readonly string[];\n header: string;\n workspaceProvider: string;\n }\n | {\n type: \"oauth-bearer-or-bearer-key\";\n oauthProvider: string;\n tokenLabel: string;\n key: string;\n fallbackKeys?: readonly string[];\n workspaceProvider: string;\n }\n | {\n type: \"oauth-bearer-or-basic\";\n oauthProvider: string;\n tokenLabel: string;\n usernameKey: string;\n passwordKey: string;\n workspaceProvider: string;\n }\n | {\n type: \"prometheus\";\n };\n\nexport interface ProviderApiConfig {\n id: ProviderApiId;\n label: string;\n defaultBaseUrl: string;\n requiresConnectionId?: boolean;\n baseUrlCredentialKey?: string;\n auth: ProviderApiAuthKind;\n credentialKeys: readonly string[];\n docsUrls: readonly string[];\n specUrls?: readonly string[];\n allowedHostSuffixes?: readonly string[];\n defaultHeaders?: Record<string, string>;\n placeholders?: readonly ProviderApiPlaceholder[];\n examples?: readonly ProviderApiExample[];\n notes?: readonly string[];\n accessErrorGuidance?: string;\n corpusRecipes?: readonly ProviderApiCorpusRecipe[];\n templateUses?: readonly WorkspaceConnectionTemplateUse[];\n}\n\nexport interface ProviderApiPlaceholder {\n name: string;\n credentialKey: string;\n label: string;\n}\n\nexport interface ProviderApiExample {\n label: string;\n method: ProviderApiMethod;\n path: string;\n query?: unknown;\n body?: unknown;\n}\n\nexport interface ProviderApiCorpusRecipe {\n label: string;\n useWhen: string;\n workflow: readonly string[];\n request: {\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n query?: unknown;\n };\n pagination?: {\n itemsPath?: string;\n nextCursorPath?: string;\n cursorParam?: string;\n cursorBodyPath?: string;\n pageParam?: string;\n offsetParam?: string;\n pageSize?: number;\n maxPages?: number;\n };\n batch?: {\n inputValuePath?: string;\n itemBodyPath?: string;\n itemQueryParam?: string;\n responseItemsPath?: string;\n batchSize?: number;\n };\n search?: {\n textPaths?: readonly string[];\n idPaths?: readonly string[];\n metadataPaths?: readonly string[];\n };\n}\n\nexport interface ProviderApiResolvedCredential {\n key: string;\n value: string;\n source: string;\n provider: string;\n connectionId?: string;\n connectionLabel?: string;\n accountId?: string;\n accountLabel?: string | null;\n scope?: string;\n}\n\nexport interface ProviderApiCredentialLookupOptions {\n appId: string;\n provider: string;\n key: string;\n ctx: CredentialContext;\n workspaceProvider?: string;\n connectionId?: string | null;\n localCredentialSource: string;\n}\n\nexport type ProviderApiCredentialResolver = (\n options: ProviderApiCredentialLookupOptions,\n) => Promise<ProviderApiResolvedCredential | null>;\n\nexport interface ProviderApiRuntimeOptions {\n appId: string;\n providerIds?: readonly (ProviderApiId | string)[];\n /** App-owned definitions replace matching built-ins by id without dropping other providers. */\n providerOverrides?: readonly ProviderApiConfig[];\n localCredentialSource?: string;\n getCredentialContext?: () => CredentialContext | null;\n resolveCredential?: ProviderApiCredentialResolver;\n /**\n * Template-specific OAuth token provider overrides for built-in provider API\n * configs. Use when an app stores a provider's OAuth grant under a narrower\n * local provider id, e.g. Google Drive scoped to a \"google-docs\" connection.\n */\n oauthProviderOverrides?: Record<string, string>;\n /**\n * Optional loader for custom providers registered at runtime. When provided,\n * custom providers are merged with the static built-in registry for catalog,\n * docs, and request operations. Custom providers cannot shadow built-in ids.\n */\n getCustomProviders?: () => Promise<CustomProviderConfig[]>;\n}\n\nexport interface ProviderApiRuntime {\n providerIds: readonly ProviderApiId[];\n listCatalog(\n provider?: ProviderApiId | string,\n ): ReturnType<typeof listProviderApiCatalog> | Promise<unknown[]>;\n fetchDocs(options: ProviderApiDocsOptions): Promise<unknown>;\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n resolveOAuthAccessToken(args: {\n provider: ProviderApiId;\n connectionId?: string | null;\n accountId?: string | null;\n }): Promise<ProviderApiOAuthAccessToken>;\n listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n ): Promise<GitHubRepositoryFileListResult>;\n searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n ): Promise<GitHubRepositoryFileSearchResult>;\n readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n ): Promise<GitHubRepositoryFileReadResult>;\n writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n ): Promise<GitHubRepositoryFileWriteResult>;\n deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n ): Promise<GitHubRepositoryFileDeleteResult>;\n}\n\nexport interface ProviderApiOAuthAccessToken {\n accessToken: string;\n accountId: string | null;\n accountLabel: string | null;\n connectionId: string | null;\n connectionLabel: string | null;\n}\n\ninterface ResolvedAuth {\n headers: Record<string, string>;\n credentialSources: Array<Omit<ProviderApiResolvedCredential, \"value\">>;\n secretValues: string[];\n}\n\ninterface ProviderApiHttpResponse {\n status: number;\n statusText: string;\n ok: boolean;\n elapsedMs: number;\n headers: Record<string, string>;\n contentType: string | null;\n size: number;\n truncated: boolean;\n text?: string;\n json?: unknown;\n quota?: {\n exhausted: boolean;\n providerId: string;\n retryAfterMs: number;\n retryAt: string;\n reason: string;\n };\n}\n\ninterface ProviderApiFetchQuotaOptions {\n identity: ProviderQuotaIdentity;\n method: ProviderApiMethod;\n target: string;\n requestKey?: string;\n}\n\ninterface OAuthTokens {\n access_token?: string;\n accessToken?: string;\n refresh_token?: string;\n refreshToken?: string;\n expiry_date?: number;\n expiresAt?: number;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n}\n\nconst PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS = new Set([\n \"invalid_grant\",\n \"unauthorized_client\",\n \"invalid_client\",\n]);\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\nconst DEFAULT_MAX_BYTES = 1024 * 1024;\nconst MAX_MAX_BYTES = 4 * 1024 * 1024;\n/** When saveToFile is used, allow a much larger per-page response since the\n * content won't enter the model's context window. */\nconst SAVE_TO_FILE_MAX_BYTES = 20 * 1024 * 1024; // 20 MB\nconst FETCH_ALL_PAGES_MAX = 50;\nconst HEADER_NAME_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\nconst BLOCKED_OUTBOUND_HEADERS = new Set([\n \"connection\",\n \"content-length\",\n \"cookie\",\n \"forwarded\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"referer\",\n \"set-cookie\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n]);\n\nconst PROVIDER_CONFIGS: Record<ProviderApiId, ProviderApiConfig> = {\n amplitude: {\n id: \"amplitude\",\n label: \"Amplitude\",\n defaultBaseUrl: \"https://amplitude.com/api/2\",\n auth: {\n type: \"basic\",\n usernameKey: \"AMPLITUDE_API_KEY\",\n passwordKey: \"AMPLITUDE_SECRET_KEY\",\n },\n credentialKeys: [\"AMPLITUDE_API_KEY\", \"AMPLITUDE_SECRET_KEY\"],\n docsUrls: [\"https://amplitude.com/docs/apis\"],\n allowedHostSuffixes: [\"amplitude.com\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Export events\",\n method: \"GET\",\n path: \"/export?start=20260601T00&end=20260602T00\",\n },\n ],\n },\n apollo: {\n id: \"apollo\",\n label: \"Apollo\",\n defaultBaseUrl: \"https://api.apollo.io\",\n auth: {\n type: \"api-key-header\",\n key: \"APOLLO_API_KEY\",\n header: \"x-api-key\",\n },\n credentialKeys: [\"APOLLO_API_KEY\"],\n docsUrls: [\"https://docs.apollo.io/reference/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n {\n label: \"Search people\",\n method: \"POST\",\n path: \"/api/v1/mixed_people/search\",\n body: { q_keywords: \"vp marketing\", page: 1, per_page: 10 },\n },\n ],\n },\n bigquery: {\n id: \"bigquery\",\n label: \"BigQuery REST API\",\n defaultBaseUrl: \"https://bigquery.googleapis.com/bigquery/v2\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/bigquery/docs/reference/rest\"],\n specUrls: [\"https://bigquery.googleapis.com/$discovery/rest?version=v2\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured BigQuery project ID\",\n },\n ],\n examples: [\n {\n label: \"List datasets\",\n method: \"GET\",\n path: \"/projects/{projectId}/datasets\",\n },\n {\n label: \"Run query\",\n method: \"POST\",\n path: \"/projects/{projectId}/queries\",\n body: { query: \"SELECT 1\", useLegacySql: false },\n },\n ],\n },\n clay: {\n id: \"clay\",\n label: \"Clay Public API\",\n defaultBaseUrl: \"https://api.clay.com/public/v0\",\n auth: {\n type: \"api-key-header\",\n key: \"CLAY_PUBLIC_API_KEY\",\n header: \"clay-api-key\",\n },\n credentialKeys: [\"CLAY_PUBLIC_API_KEY\"],\n docsUrls: [\n \"https://developers.clay.com/llms.txt\",\n \"https://developers.clay.com/public-api/authentication\",\n \"https://developers.clay.com/concepts/execution-model.md\",\n ],\n specUrls: [\"https://developers.clay.com/openapi.json\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Get authenticated user and workspace\",\n method: \"GET\",\n path: \"/me\",\n },\n {\n label: \"List people search filter fields\",\n method: \"GET\",\n path: \"/search/filters-mode/fields\",\n query: { source_type: \"people\" },\n },\n {\n label: \"Create a people search\",\n method: \"POST\",\n path: \"/search/filters-mode\",\n body: {\n source_type: \"people\",\n filters: {\n job_title_keywords: [\"software engineer\"],\n location_cities_include: [\"New York\"],\n },\n },\n },\n ],\n notes: [\n \"Clay is a GTM provider API capability, not a messaging channel.\",\n \"The Public API key is tied to a Clay user and workspace. It is separate from the optional local clay CLI/MCP session created by clay login; hosted Agent Native access does not require that plugin session.\",\n \"Search results use a stateful forward-only iterator: repeat POST /search/filters-mode/{search_id}/run while has_more is true.\",\n \"The Tables API is query-only, requires an Enterprise plan, and needs a known table id; the Public API does not list, create, or update tables.\",\n \"Routine runs are asynchronous. Start a run, then poll the documented results endpoint or use a verified completion webhook.\",\n ],\n },\n commonroom: {\n id: \"commonroom\",\n label: \"Common Room\",\n defaultBaseUrl: \"https://api.commonroom.io/community/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"COMMONROOM_API_TOKEN\"],\n },\n credentialKeys: [\"COMMONROOM_API_TOKEN\"],\n docsUrls: [\"https://developer.commonroom.io/reference/overview\"],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List members\", method: \"GET\", path: \"/members\" }],\n },\n dataforseo: {\n id: \"dataforseo\",\n label: \"DataForSEO\",\n defaultBaseUrl: \"https://api.dataforseo.com/v3\",\n auth: {\n type: \"basic\",\n usernameKey: \"DATAFORSEO_LOGIN\",\n passwordKey: \"DATAFORSEO_PASSWORD\",\n },\n credentialKeys: [\"DATAFORSEO_LOGIN\", \"DATAFORSEO_PASSWORD\"],\n docsUrls: [\"https://docs.dataforseo.com/v3/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"SERP task post\",\n method: \"POST\",\n path: \"/serp/google/organic/task_post\",\n body: [\n { keyword: \"builder.io\", location_code: 2840, language_code: \"en\" },\n ],\n },\n ],\n },\n ga4: {\n id: \"ga4\",\n label: \"Google Analytics Data API\",\n defaultBaseUrl: \"https://analyticsdata.googleapis.com/v1beta\",\n auth: {\n type: \"google-service-account\",\n scopes: [\"https://www.googleapis.com/auth/analytics.readonly\"],\n },\n credentialKeys: [\"GOOGLE_APPLICATION_CREDENTIALS_JSON\", \"GA4_PROPERTY_ID\"],\n docsUrls: [\n \"https://developers.google.com/analytics/devguides/reporting/data/v1/rest\",\n ],\n specUrls: [\n \"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta\",\n ],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"propertyId\",\n credentialKey: \"GA4_PROPERTY_ID\",\n label: \"Configured GA4 property ID\",\n },\n ],\n examples: [\n {\n label: \"Run report\",\n method: \"POST\",\n path: \"/properties/{propertyId}:runReport\",\n body: {\n dateRanges: [{ startDate: \"30daysAgo\", endDate: \"today\" }],\n metrics: [{ name: \"activeUsers\" }],\n },\n },\n ],\n },\n gcloud: {\n id: \"gcloud\",\n label: \"Google Cloud APIs\",\n defaultBaseUrl: \"https://cloudresourcemanager.googleapis.com\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/monitoring.read\",\n \"https://www.googleapis.com/auth/logging.read\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/apis/docs/overview\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured Google Cloud project ID\",\n },\n ],\n examples: [\n {\n label: \"Get project\",\n method: \"GET\",\n path: \"https://cloudresourcemanager.googleapis.com/v1/projects/{projectId}\",\n },\n ],\n },\n github: {\n id: \"github\",\n label: \"GitHub REST API\",\n defaultBaseUrl: \"https://api.github.com\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"github\",\n tokenLabel: \"GitHub OAuth token\",\n key: \"GITHUB_TOKEN\",\n workspaceProvider: \"github\",\n },\n credentialKeys: [\"GITHUB_TOKEN\"],\n docsUrls: [\"https://docs.github.com/rest\"],\n specUrls: [\n \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n ],\n defaultHeaders: {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n },\n templateUses: [\"analytics\", \"brain\", \"design\", \"dispatch\"],\n examples: [\n { label: \"Authenticated user\", method: \"GET\", path: \"/user\" },\n { label: \"Search issues\", method: \"GET\", path: \"/search/issues\" },\n ],\n },\n figma: {\n id: \"figma\",\n label: \"Figma REST API\",\n defaultBaseUrl: \"https://api.figma.com/v1\",\n auth: {\n type: \"oauth-bearer-or-api-key-header\",\n oauthProvider: \"figma\",\n tokenLabel: \"Figma OAuth token\",\n key: \"FIGMA_ACCESS_TOKEN\",\n header: \"X-Figma-Token\",\n workspaceProvider: \"figma\",\n },\n credentialKeys: [\"FIGMA_ACCESS_TOKEN\"],\n docsUrls: [\n \"https://developers.figma.com/docs/rest-api/\",\n \"https://developers.figma.com/docs/rest-api/scopes/\",\n \"https://developers.figma.com/docs/rest-api/file-endpoints/\",\n ],\n allowedHostSuffixes: [\"figma.com\"],\n templateUses: [\"design\"],\n examples: [\n {\n label: \"Get file document\",\n method: \"GET\",\n path: \"/files/{fileKey}\",\n },\n {\n label: \"Get exact file nodes\",\n method: \"GET\",\n path: \"/files/{fileKey}/nodes\",\n query: { ids: \"1:2\" },\n },\n {\n label: \"List file components\",\n method: \"GET\",\n path: \"/files/{fileKey}/components\",\n },\n {\n label: \"Render file nodes\",\n method: \"GET\",\n path: \"/images/{fileKey}\",\n query: { ids: \"1:2\", format: \"svg\" },\n },\n ],\n notes: [\n \"Personal access tokens should include current_user:read for validation and file_content:read for file/node imports. Add library_content:read for file libraries, team_library_content:read for team libraries, or library_assets:read for individual published assets only when needed.\",\n \"Enterprise Variables endpoints require file_variables:read; writes additionally require file_variables:write, a Full seat, and edit access.\",\n \"The REST API cannot create arbitrary canvas frames or layers. Use Figma's official OAuth MCP write tools when connected, or export a Design selection as Figma-compatible SVG for visual handoff.\",\n ],\n },\n gmail: {\n id: \"gmail\",\n label: \"Gmail API\",\n defaultBaseUrl: \"https://gmail.googleapis.com/gmail/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/gmail/api/reference/rest\"],\n specUrls: [\"https://gmail.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"List messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n },\n {\n label: \"Search messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n body: undefined,\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n gong: {\n id: \"gong\",\n label: \"Gong\",\n defaultBaseUrl: \"https://api.gong.io/v2\",\n baseUrlCredentialKey: \"GONG_API_BASE\",\n auth: {\n type: \"basic\",\n usernameKey: \"GONG_ACCESS_KEY\",\n passwordKey: \"GONG_ACCESS_SECRET\",\n },\n credentialKeys: [\"GONG_ACCESS_KEY\", \"GONG_ACCESS_SECRET\", \"GONG_API_BASE\"],\n docsUrls: [\"https://gong.app.gong.io/settings/api/documentation\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n { label: \"List calls\", method: \"GET\", path: \"/calls\" },\n {\n label: \"Call transcript\",\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [\"<call-id>\"] } },\n },\n {\n label: \"Calls with parties/content\",\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: {\n exposedFields: {\n parties: true,\n content: { brief: true, keyPoints: true },\n },\n },\n },\n },\n ],\n notes: [\n \"For broad corpus work, call /calls/extensive with provider-api-request and stageAs/saveToFile. Gong returns the next cursor at records.cursor and expects the next cursor in the POST body at cursor, so use pagination { nextCursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for stageAs or fetchAllPages { cursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for saveToFile.\",\n \"Batch transcripts with POST /calls/transcript and body { filter: { callIds: [...] } } after narrowing or staging call ids.\",\n ],\n corpusRecipes: [\n {\n label: \"Batch-search Gong call transcripts from staged call ids\",\n useWhen:\n \"Use when the user asks to search, count, or prove absence across Gong transcript text for a bounded cohort of call ids.\",\n workflow: [\n \"Stage or otherwise collect the exact call ids in scope first.\",\n \"Start provider-corpus-job with mode=batch-search against /calls/transcript.\",\n \"Inject each batch into body path filter.callIds and search responseItemsPath callTranscripts.\",\n \"Search transcript.sentence text fields, then report call-id coverage, batches processed, matches, and gaps.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [] } },\n },\n batch: {\n inputValuePath: \"id\",\n itemBodyPath: \"filter.callIds\",\n responseItemsPath: \"callTranscripts\",\n batchSize: 20,\n },\n search: {\n textPaths: [\"transcript.sentences.text\", \"transcript\"],\n idPaths: [\"callId\"],\n metadataPaths: [\"callId\"],\n },\n },\n {\n label: \"Stage Gong calls with parties/content\",\n useWhen:\n \"Use when the user needs a complete Gong call cohort before a transcript/message join or coverage-sensitive search.\",\n workflow: [\n \"Call provider-api-request with stageAs and pagination.\",\n \"Use /calls/extensive when party fields or content summaries are needed; use /calls for lightweight metadata.\",\n \"Do not treat staged call metadata as transcript text.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: { exposedFields: { parties: true } },\n },\n },\n pagination: {\n itemsPath: \"calls\",\n nextCursorPath: \"records.cursor\",\n cursorBodyPath: \"cursor\",\n maxPages: 200,\n },\n },\n ],\n },\n google_calendar: {\n id: \"google_calendar\",\n label: \"Google Calendar API\",\n defaultBaseUrl: \"https://www.googleapis.com/calendar/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/calendar/api/v3/reference\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"calendar\", \"dispatch\", \"mail\"],\n examples: [\n {\n label: \"List calendars\",\n method: \"GET\",\n path: \"/users/me/calendarList\",\n },\n {\n label: \"Search events\",\n method: \"GET\",\n path: \"/calendars/primary/events\",\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_drive: {\n id: \"google_drive\",\n label: \"Google Drive API\",\n defaultBaseUrl: \"https://www.googleapis.com/drive/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n workspaceProvider: \"google_drive\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/drive/api/reference/rest/v3\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\", \"analytics\"],\n examples: [\n { label: \"List files\", method: \"GET\", path: \"/files\" },\n { label: \"Get file metadata\", method: \"GET\", path: \"/files/{fileId}\" },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_slides: {\n id: \"google_slides\",\n label: \"Google Slides API\",\n defaultBaseUrl: \"https://slides.googleapis.com/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n workspaceProvider: \"google_drive\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\n \"https://developers.google.com/workspace/slides/api/reference/rest\",\n ],\n specUrls: [\"https://slides.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n examples: [\n {\n label: \"Get presentation with slides and speaker notes\",\n method: \"GET\",\n path: \"/presentations/{presentationId}\",\n },\n ],\n notes: [\n \"Creative context imports use the non-sensitive drive.file scope. A user must choose each presentation through Google Picker before the Slides API can read it; unrestricted Drive-wide discovery is intentionally unavailable.\",\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n granola: {\n id: \"granola\",\n label: \"Granola Public API\",\n defaultBaseUrl: \"https://public-api.granola.ai/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"GRANOLA_API_KEY\"],\n workspaceProvider: \"granola\",\n },\n credentialKeys: [\"GRANOLA_API_KEY\"],\n docsUrls: [\"https://docs.granola.ai/\"],\n templateUses: [\"brain\", \"dispatch\"],\n examples: [\n { label: \"List notes\", method: \"GET\", path: \"/notes\" },\n { label: \"Get note\", method: \"GET\", path: \"/notes/<note-id>\" },\n ],\n },\n grafana: {\n id: \"grafana\",\n label: \"Grafana\",\n defaultBaseUrl: \"https://grafana.example.com\",\n baseUrlCredentialKey: \"GRAFANA_URL\",\n auth: {\n type: \"bearer\",\n keys: [\"GRAFANA_API_TOKEN\"],\n },\n credentialKeys: [\"GRAFANA_URL\", \"GRAFANA_API_TOKEN\"],\n docsUrls: [\"https://grafana.com/docs/grafana/latest/developers/http_api/\"],\n templateUses: [\"analytics\"],\n examples: [\n { label: \"List dashboards\", method: \"GET\", path: \"/api/search\" },\n ],\n },\n hubspot: {\n id: \"hubspot\",\n label: \"HubSpot\",\n defaultBaseUrl: \"https://api.hubapi.com\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"hubspot\",\n tokenLabel: \"HubSpot OAuth token\",\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n fallbackKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n workspaceProvider: \"hubspot\",\n },\n credentialKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n docsUrls: [\"https://developers.hubspot.com/docs/api/overview\"],\n templateUses: [\"analytics\", \"brain\", \"calendar\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"Search deals with any HubSpot CRM filter\",\n method: \"POST\",\n path: \"/crm/v3/objects/deals/search\",\n body: {\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"products\",\n operator: \"CONTAINS_TOKEN\",\n value: \"Publish\",\n },\n ],\n },\n ],\n properties: [\"dealname\", \"products\", \"dealstage\", \"closedate\"],\n limit: 100,\n },\n },\n {\n label: \"List deal property metadata\",\n method: \"GET\",\n path: \"/crm/v3/properties/deals\",\n },\n ],\n },\n salesforce: {\n id: \"salesforce\",\n label: \"Salesforce\",\n defaultBaseUrl: \"https://login.salesforce.com\",\n requiresConnectionId: true,\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"salesforce\",\n tokenLabel: \"Salesforce OAuth token\",\n workspaceProvider: \"salesforce\",\n },\n credentialKeys: [\"SALESFORCE_OAUTH_ACCOUNT\"],\n docsUrls: [\n \"https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/\",\n ],\n allowedHostSuffixes: [],\n templateUses: [\"analytics\", \"brain\", \"crm\", \"dispatch\"],\n examples: [\n {\n label: \"List recent Accounts\",\n method: \"GET\",\n path: \"/services/data/v60.0/sobjects/Account\",\n },\n {\n label: \"Query Opportunity records with SOQL\",\n method: \"GET\",\n path: \"/services/data/v60.0/query\",\n query: {\n q: \"SELECT Id, Name, StageName, Amount, CloseDate FROM Opportunity LIMIT 100\",\n },\n },\n ],\n notes: [\n \"Workspace OAuth stores the Salesforce instance URL on the connection. Requests with a connectionId use that instance instead of the login host.\",\n \"CRM templates own object allow-lists, field projections, and API-version selection.\",\n ],\n },\n jira: {\n id: \"jira\",\n label: \"Jira Cloud\",\n defaultBaseUrl: \"https://example.atlassian.net\",\n baseUrlCredentialKey: \"JIRA_BASE_URL\",\n auth: {\n type: \"oauth-bearer-or-basic\",\n oauthProvider: \"jira\",\n tokenLabel: \"Jira\",\n usernameKey: \"JIRA_USER_EMAIL\",\n passwordKey: \"JIRA_API_TOKEN\",\n workspaceProvider: \"jira\",\n },\n credentialKeys: [\"JIRA_BASE_URL\", \"JIRA_USER_EMAIL\", \"JIRA_API_TOKEN\"],\n docsUrls: [\n \"https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/\",\n ],\n specUrls: [\n \"https://dac-static.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"JQL search\",\n method: \"GET\",\n path: \"/rest/api/3/search/jql\",\n },\n ],\n },\n mixpanel: {\n id: \"mixpanel\",\n label: \"Mixpanel\",\n defaultBaseUrl: \"https://mixpanel.com/api/query\",\n auth: {\n type: \"basic-raw\",\n key: \"MIXPANEL_SERVICE_ACCOUNT\",\n },\n credentialKeys: [\"MIXPANEL_PROJECT_ID\", \"MIXPANEL_SERVICE_ACCOUNT\"],\n docsUrls: [\"https://developer.mixpanel.com/reference/overview\"],\n allowedHostSuffixes: [\"mixpanel.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"MIXPANEL_PROJECT_ID\",\n label: \"Configured Mixpanel project ID\",\n },\n ],\n examples: [\n {\n label: \"Query events\",\n method: \"GET\",\n path: \"/events\",\n },\n ],\n notes: [\n \"Mixpanel uses multiple API hosts. You may pass full URLs for mixpanel.com or data.mixpanel.com endpoints.\",\n ],\n },\n notion: {\n id: \"notion\",\n label: \"Notion\",\n defaultBaseUrl: \"https://api.notion.com/v1\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"notion\",\n tokenLabel: \"Notion OAuth token\",\n key: \"NOTION_API_KEY\",\n workspaceProvider: \"notion\",\n },\n credentialKeys: [\"NOTION_API_KEY\"],\n docsUrls: [\"https://developers.notion.com/reference/intro\"],\n defaultHeaders: { \"Notion-Version\": \"2026-03-11\" },\n templateUses: [\"analytics\", \"brain\", \"content\", \"dispatch\"],\n examples: [{ label: \"Search\", method: \"POST\", path: \"/search\", body: {} }],\n notes: [\n \"The name GET /users/me returns is the label whoever minted the token typed into Notion, so it often names an unrelated product or team. Call it the Notion-side integration label and never restate it as the workspace, app, or product the user is currently in.\",\n ],\n accessErrorGuidance:\n \"Notion 401/403/404 on a specific page or database usually means that object was never shared with the integration, not that the id is wrong or the key is invalid. Fix: open the page or database in Notion, then ••• → Connections → add the integration. When naming the integration, describe it as the Notion-side integration label from GET /users/me and note that it may not match this app or workspace.\",\n corpusRecipes: [\n {\n label: \"Search a Notion data source with complete cursor coverage\",\n useWhen:\n \"Use for coverage-sensitive searches across one known Notion data source's page properties. This does not search page block bodies.\",\n workflow: [\n \"Resolve the exact data source id and apply the narrowest provider-side filter and filter_properties projection first.\",\n \"Start provider-corpus-job with mode=paginated-search and pass next_cursor back as start_cursor in the POST body.\",\n \"Search only the returned properties and report the 10,000-result API ceiling plus any incomplete request_status.\",\n \"For page body text, stage page ids and fetch block children through a separate bounded data program; property search is not body search.\",\n ],\n request: {\n method: \"POST\",\n path: \"/data_sources/<data-source-id>/query\",\n body: { page_size: 100 },\n },\n pagination: {\n itemsPath: \"results\",\n nextCursorPath: \"next_cursor\",\n cursorBodyPath: \"start_cursor\",\n maxPages: 100,\n },\n search: {\n textPaths: [\"properties\"],\n idPaths: [\"id\"],\n metadataPaths: [\"id\", \"url\", \"created_time\", \"last_edited_time\"],\n },\n },\n ],\n },\n posthog: {\n id: \"posthog\",\n label: \"PostHog\",\n defaultBaseUrl: \"https://app.posthog.com\",\n baseUrlCredentialKey: \"POSTHOG_HOST\",\n auth: {\n type: \"bearer\",\n keys: [\"POSTHOG_API_KEY\"],\n },\n credentialKeys: [\"POSTHOG_API_KEY\", \"POSTHOG_PROJECT_ID\", \"POSTHOG_HOST\"],\n docsUrls: [\"https://posthog.com/docs/api\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"POSTHOG_PROJECT_ID\",\n label: \"Configured PostHog project ID\",\n },\n ],\n examples: [\n {\n label: \"Aggregate events with HogQL\",\n method: \"POST\",\n path: \"/api/projects/{projectId}/query/\",\n body: {\n query: {\n kind: \"HogQLQuery\",\n query:\n \"SELECT event, count() AS events FROM events WHERE timestamp >= now() - INTERVAL 7 DAY GROUP BY event ORDER BY events DESC LIMIT 100\",\n },\n },\n },\n ],\n notes: [\n \"Prefer the query endpoint with a bounded HogQL projection or server-side aggregation over paging raw events into the agent context.\",\n ],\n },\n prometheus: {\n id: \"prometheus\",\n label: \"Prometheus\",\n defaultBaseUrl: \"https://prometheus.example.com\",\n baseUrlCredentialKey: \"PROMETHEUS_URL\",\n auth: { type: \"prometheus\" },\n credentialKeys: [\n \"PROMETHEUS_URL\",\n \"PROMETHEUS_USERNAME\",\n \"PROMETHEUS_PASSWORD\",\n \"PROMETHEUS_BEARER_TOKEN\",\n ],\n docsUrls: [\"https://prometheus.io/docs/prometheus/latest/querying/api/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Instant query\",\n method: \"GET\",\n path: \"/api/v1/query\",\n },\n ],\n },\n pylon: {\n id: \"pylon\",\n label: \"Pylon\",\n defaultBaseUrl: \"https://api.usepylon.com\",\n auth: {\n type: \"bearer\",\n keys: [\"PYLON_API_KEY\"],\n },\n credentialKeys: [\"PYLON_API_KEY\"],\n docsUrls: [\"https://docs.usepylon.com/pylon-docs/developer/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [{ label: \"List issues\", method: \"GET\", path: \"/issues\" }],\n },\n sentry: {\n id: \"sentry\",\n label: \"Sentry\",\n defaultBaseUrl: \"https://sentry.io/api/0\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"sentry\",\n tokenLabel: \"Sentry OAuth token\",\n key: \"SENTRY_AUTH_TOKEN\",\n fallbackKeys: [\"SENTRY_AUTH_TOKEN\", \"SENTRY_SERVER_TOKEN\"],\n workspaceProvider: \"sentry\",\n },\n credentialKeys: [\n \"SENTRY_AUTH_TOKEN\",\n \"SENTRY_SERVER_TOKEN\",\n \"SENTRY_ORG_SLUG\",\n ],\n docsUrls: [\"https://docs.sentry.io/api/\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"orgSlug\",\n credentialKey: \"SENTRY_ORG_SLUG\",\n label: \"Configured Sentry organization slug\",\n },\n ],\n examples: [\n {\n label: \"List issues for org\",\n method: \"GET\",\n path: \"/organizations/{orgSlug}/issues/\",\n },\n ],\n },\n slack: {\n id: \"slack\",\n label: \"Slack Web API\",\n defaultBaseUrl: \"https://slack.com/api\",\n auth: {\n type: \"bearer\",\n keys: [\"SLACK_BOT_TOKEN\"],\n workspaceProvider: \"slack\",\n },\n credentialKeys: [\"SLACK_BOT_TOKEN\", \"SLACK_BOT_TOKEN_2\"],\n docsUrls: [\"https://api.slack.com/web\"],\n specUrls: [\n \"https://api.slack.com/specs/openapi/v2/slack_web_openapi_v2_without_examples.json\",\n ],\n templateUses: [\"analytics\", \"brain\", \"dispatch\"],\n examples: [\n { label: \"Search messages\", method: \"GET\", path: \"/search.messages\" },\n { label: \"Post message\", method: \"POST\", path: \"/chat.postMessage\" },\n ],\n notes: [\n \"Bot-token reads must not call conversations.join implicitly. A bot can read only conversations it is already a member of with the required history scope.\",\n \"search.messages requires a compatible user token; do not assume a bot token can use it. Use conversations.history for channel-scoped bot reads.\",\n ],\n corpusRecipes: [\n {\n label: \"Search complete Slack channel history\",\n useWhen:\n \"Use for all-message, mention, phrase, or absence-sensitive searches in one known Slack conversation without one agent turn per cursor page.\",\n workflow: [\n \"Resolve the exact channel id without joining or mutating membership.\",\n \"Start provider-corpus-job with mode=paginated-search against conversations.history, bounded by oldest/latest when possible.\",\n \"Pass response_metadata.next_cursor back as cursor and let quota_wait pause/resume rate-limited installations.\",\n \"Report channel id, time bounds, pages, messages searched, matches, and is_limited or access gaps.\",\n ],\n request: {\n method: \"GET\",\n path: \"/conversations.history\",\n query: { channel: \"<channel-id>\" },\n },\n pagination: {\n itemsPath: \"messages\",\n nextCursorPath: \"response_metadata.next_cursor\",\n cursorParam: \"cursor\",\n maxPages: 500,\n },\n search: {\n textPaths: [\"text\", \"blocks\", \"attachments\"],\n idPaths: [\"ts\", \"client_msg_id\"],\n metadataPaths: [\"ts\", \"user\", \"thread_ts\", \"type\", \"subtype\"],\n },\n },\n ],\n },\n stripe: {\n id: \"stripe\",\n label: \"Stripe\",\n defaultBaseUrl: \"https://api.stripe.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"STRIPE_SECRET_KEY\"],\n },\n credentialKeys: [\"STRIPE_SECRET_KEY\"],\n docsUrls: [\"https://docs.stripe.com/api\"],\n specUrls: [\n \"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List customers\", method: \"GET\", path: \"/customers\" }],\n },\n twitter: {\n id: \"twitter\",\n label: \"Twitter/X via twitterapi.io\",\n defaultBaseUrl: \"https://api.twitterapi.io\",\n auth: {\n type: \"api-key-header\",\n key: \"TWITTER_BEARER_TOKEN\",\n header: \"X-API-Key\",\n },\n credentialKeys: [\"TWITTER_BEARER_TOKEN\"],\n docsUrls: [\"https://twitterapi.io/docs\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"User tweets\",\n method: \"GET\",\n path: \"/twitter/user/last_tweets\",\n },\n ],\n },\n};\n\nexport function getProviderApiConfig(\n provider: ProviderApiId | string,\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiConfig {\n const config = mergeProviderApiConfigs(overrides).find(\n (candidate) => candidate.id === provider,\n );\n if (!config) throw new Error(`Unsupported provider API: ${provider}`);\n return config;\n}\n\nexport function mergeProviderApiConfigs(\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiConfig[] {\n for (const override of overrides) {\n if (!isProviderApiId(override.id)) {\n throw new Error(\n `Provider API overrides must replace a built-in id: ${override.id}`,\n );\n }\n }\n return mergeDefinitionsById(Object.values(PROVIDER_CONFIGS), overrides);\n}\n\nexport function isProviderApiId(provider: string): provider is ProviderApiId {\n return Object.prototype.hasOwnProperty.call(PROVIDER_CONFIGS, provider);\n}\n\nexport function listProviderApiIdsForTemplateUse(\n templateUse: WorkspaceConnectionTemplateUse,\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiId[] {\n const configs = new Map(\n mergeProviderApiConfigs(overrides).map((config) => [config.id, config]),\n );\n return PROVIDER_API_IDS.filter((id) =>\n (configs.get(id)?.templateUses ?? []).includes(templateUse),\n );\n}\n\nexport function listProviderApiCatalog(\n provider?: ProviderApiId | string,\n options: {\n providerIds?: readonly (ProviderApiId | string)[];\n providerOverrides?: readonly ProviderApiConfig[];\n } = {},\n) {\n const providerIds = normalizeProviderIds(options.providerIds);\n if (provider) {\n assertProviderAllowed(provider, providerIds);\n }\n const configs = provider\n ? [getProviderApiConfig(provider, options.providerOverrides)]\n : providerIds.map((id) =>\n getProviderApiConfig(id, options.providerOverrides),\n );\n return configs.map((config) => ({\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.defaultBaseUrl,\n requiresConnectionId: config.requiresConnectionId ?? false,\n baseUrlCredentialKey: config.baseUrlCredentialKey ?? null,\n auth: describeAuth(config.auth),\n credentialKeys: config.credentialKeys,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n allowedHostSuffixes: config.allowedHostSuffixes ?? [],\n placeholders: config.placeholders ?? [],\n defaultHeaders: config.defaultHeaders ?? {},\n examples: config.examples ?? [],\n notes: config.notes ?? [],\n accessErrorGuidance: config.accessErrorGuidance ?? null,\n corpusRecipes: config.corpusRecipes ?? [],\n templateUses: config.templateUses ?? [],\n }));\n}\n\nexport function createProviderApiRuntime(\n options: ProviderApiRuntimeOptions,\n): ProviderApiRuntime {\n mergeProviderApiConfigs(options.providerOverrides);\n const providerIds = normalizeProviderIds(options.providerIds);\n const runtimeOptions: Required<\n Pick<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\">\n > &\n Omit<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\"> = {\n ...options,\n providerIds,\n localCredentialSource: options.localCredentialSource ?? \"app_local\",\n };\n return {\n providerIds,\n listCatalog: (provider) =>\n listProviderApiCatalogWithCustom(\n provider,\n { providerIds, providerOverrides: options.providerOverrides },\n runtimeOptions,\n ),\n fetchDocs: (docsOptions) =>\n fetchProviderApiDocs(docsOptions, runtimeOptions),\n executeRequest: (args) => executeProviderApiRequest(args, runtimeOptions),\n resolveOAuthAccessToken: (args) =>\n resolveProviderApiOAuthAccessToken(args, runtimeOptions),\n listGitHubRepositoryFiles: (args) =>\n listGitHubRepositoryFiles(args, runtimeOptions),\n searchGitHubRepositoryFiles: (args) =>\n searchGitHubRepositoryFiles(args, runtimeOptions),\n readGitHubRepositoryFile: (args) =>\n readGitHubRepositoryFile(args, runtimeOptions),\n writeGitHubRepositoryFile: (args) =>\n writeGitHubRepositoryFile(args, runtimeOptions),\n deleteGitHubRepositoryFile: (args) =>\n deleteGitHubRepositoryFile(args, runtimeOptions),\n };\n}\n\nexport async function fetchProviderApiDocs(\n options: ProviderApiDocsOptions,\n runtime: ProviderApiRuntimeOptions = { appId: \"app\" },\n) {\n await assertProviderAllowedAsync(options.provider, runtime);\n\n // Resolve config — may be a built-in or a custom provider.\n const builtIn = isProviderApiId(options.provider)\n ? getProviderApiConfig(options.provider, runtime.providerOverrides)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(options.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${options.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const catalog = builtIn\n ? listProviderApiCatalog(options.provider, {\n providerOverrides: runtime.providerOverrides,\n })[0]\n : customProviderToCatalogEntry(customConfig!);\n\n if (!options.url) {\n return {\n provider: options.provider,\n catalog,\n guidance:\n \"provider-api-docs can fetch ANY public http(s) URL — pass url to retrieve API documentation, OpenAPI specs, changelogs, or any public web page. Registered docsUrls above are curated starting points.\",\n };\n }\n\n // Open docs fetching: allow ANY public https/http URL.\n // The SSRF guard still applies — private/internal addresses are blocked.\n let url: URL;\n try {\n url = new URL(options.url);\n } catch {\n throw new Error(`Invalid docs URL: ${options.url}`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`Docs URL must use https: or http: (got ${url.protocol})`);\n }\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal docs URL: ${url.href}`);\n }\n\n const response = await fetchWithTimeout(url.href, {\n method: \"GET\",\n maxBytes: clampMaxBytes(options.maxBytes),\n });\n\n const responseBody =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json, null, 2) : \"\");\n const content = processWebContent({\n url: url.href,\n body: responseBody,\n contentType: response.contentType,\n responseMode: options.responseMode ?? \"auto\",\n extract: options.extract ?? \"readability\",\n includeLinks: options.includeLinks ?? true,\n search: options.search,\n maxChars: options.maxChars,\n });\n const responseForOutput =\n content.mode === \"raw\" ? response : compactProviderDocsResponse(response);\n\n return {\n provider: options.provider,\n catalog,\n request: { url: url.href },\n response: responseForOutput,\n ...(content.mode === \"raw\" ? {} : { content }),\n };\n}\n\nfunction compactProviderDocsResponse(response: ProviderApiHttpResponse) {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n elapsedMs: response.elapsedMs,\n headers: response.headers,\n contentType: response.contentType,\n size: response.size,\n truncated: response.truncated,\n };\n}\n\nexport async function executeProviderApiRequest(\n args: ProviderApiRequestArgs,\n runtime: ProviderApiRuntimeOptions,\n) {\n await assertProviderAllowedAsync(args.provider, runtime);\n\n // Check whether this is a built-in or custom provider.\n const builtIn = isProviderApiId(args.provider)\n ? getProviderApiConfig(args.provider, runtime.providerOverrides)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(args.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${args.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n if (customConfig) {\n return executeCustomProviderApiRequest(args, customConfig, runtime);\n }\n\n // --- built-in provider path (original code) ---\n const config = builtIn!;\n if (config.requiresConnectionId && !args.connectionId?.trim()) {\n throw new Error(\n `${config.label} Provider API requests require a workspace connectionId.`,\n );\n }\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const baseUrl = await resolveBaseUrl(config, runtime, ctx, args);\n const placeholders = await resolvePlaceholders(config, runtime, ctx, args);\n const method = normalizeMethod(args.method);\n const url = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: substituteUnknown(args.query, placeholders),\n });\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveAuth(config, runtime, ctx, args);\n const extraHeaders = substituteUnknown(args.headers ?? {}, placeholders);\n const headers = sanitizeOutboundHeaders({\n ...(config.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n\n // Allow a much larger maxBytes ceiling when writing to a workspace file.\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: config.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor,\n } = await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(\n substituteUnknown(args.query, placeholders),\n extra.query,\n )\n : substituteUnknown(args.query, placeholders);\n const pageUrl = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n substituteUnknown(args.body, placeholders),\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : substituteUnknown(args.body, placeholders);\n const pageBody = prepareBody(bodyWithCursor, headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: { id: config.id, label: config.label },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n truncated,\n nextCursor,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n // --- Single request ---\n const body = prepareBody(substituteUnknown(args.body, placeholders), headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n });\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey,\n },\n });\n\n // saveToFile: write full body to workspace file and return compact summary.\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: { id: config.id, label: config.label },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: config.id,\n label: config.label,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth: args.auth === \"none\" ? \"none\" : describeAuth(config.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n ...(args.accountId ? { accountId: args.accountId } : {}),\n ...(args.connectionId ? { connectionId: args.connectionId } : {}),\n },\n response,\n guidance: [\n \"This was a raw provider API request. Use provider docs/spec URLs to choose endpoints and include method/path/status plus relevant filters in the methodology. Prefer this escape hatch whenever canned actions are too narrow.\",\n providerAccessErrorGuidance(config, response.status),\n ]\n .filter(Boolean)\n .join(\" \"),\n };\n}\n\nconst PROVIDER_ACCESS_ERROR_STATUSES = new Set([401, 403, 404]);\n\nfunction providerAccessErrorGuidance(\n config: ProviderApiConfig,\n status: number,\n): string | null {\n if (!PROVIDER_ACCESS_ERROR_STATUSES.has(status)) return null;\n return config.accessErrorGuidance ?? null;\n}\n\n/**\n * Resolve a provider OAuth token for a trusted server-side integration bridge\n * such as a CRM adapter or Google Picker. Callers must keep the result out of\n * agent, MCP, A2A, logs, persistence, and extension/tool surfaces.\n */\nexport async function resolveProviderApiOAuthAccessToken(\n args: {\n provider: ProviderApiId;\n connectionId?: string | null;\n accountId?: string | null;\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<ProviderApiOAuthAccessToken> {\n await assertProviderAllowedAsync(args.provider, runtime);\n const config = getProviderApiConfig(args.provider, runtime.providerOverrides);\n const auth = config.auth;\n const oauthAuth =\n auth.type === \"oauth-bearer\"\n ? auth\n : auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\"\n ? {\n type: \"oauth-bearer\" as const,\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n workspaceProvider: auth.workspaceProvider,\n }\n : auth.type === \"oauth-bearer-or-basic\"\n ? {\n type: \"oauth-bearer\" as const,\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n workspaceProvider: auth.workspaceProvider,\n }\n : null;\n if (!oauthAuth) {\n throw new Error(\n `Provider API ${args.provider} does not use a direct OAuth bearer token.`,\n );\n }\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const credential = oauthAuth.workspaceProvider\n ? await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: oauthAuth,\n runtime,\n ctx,\n workspaceProvider: oauthAuth.workspaceProvider,\n connectionId: args.connectionId,\n accountId: args.accountId,\n })\n : await resolveOAuthBearerToken({\n auth: oauthAuth,\n ctx,\n accountId: args.accountId,\n });\n if (!credential) {\n throw new Error(\n `${oauthAuth.tokenLabel} workspace connection is not available to ${runtime.appId}.`,\n );\n }\n return {\n accessToken: credential.value,\n accountId: credential.accountId ?? null,\n accountLabel: credential.accountLabel ?? null,\n connectionId: credential.connectionId ?? null,\n connectionLabel: credential.connectionLabel ?? null,\n };\n}\n\nconst GITHUB_REPO_FILES_DEFAULT_MAX = 1_000;\nconst GITHUB_REPO_FILES_MAX = 10_000;\nconst GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE = 30;\nconst GITHUB_CODE_SEARCH_MAX_PER_PAGE = 100;\n\nexport async function listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileListResult> {\n const repository = normalizeGitHubRepository(args);\n const pathPrefix = normalizeGitHubFilePath(args.path);\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n\n if (args.recursive) {\n const ref =\n args.ref?.trim() || (await resolveGitHubDefaultBranch(args, runtime));\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository tree\",\n args: {\n provider: \"github\",\n path: `${githubRepoApiPath(repository)}/git/trees/${encodeURIComponent(\n ref,\n )}`,\n query: { recursive: \"1\" },\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const tree = asRecord(json);\n const rawEntries = Array.isArray(tree.tree) ? tree.tree : [];\n const entries = rawEntries\n .map((entry) =>\n normalizeGitHubTreeEntry(entry, {\n owner: repository.owner,\n repo: repository.repo,\n ref,\n }),\n )\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\")\n .filter((entry) => githubPathMatchesPrefix(entry.path, pathPrefix));\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref,\n path: pathPrefix,\n recursive: true,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated:\n Boolean(tree.truncated) || entries.length > limitedEntries.length,\n providerTruncated: Boolean(tree.truncated),\n response: compactResponseStatus(response),\n };\n }\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository contents\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, pathPrefix),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const rawEntries = Array.isArray(json) ? json : [json];\n const entries = rawEntries\n .map(normalizeGitHubContentsEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\");\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref: args.ref?.trim() || null,\n path: pathPrefix,\n recursive: false,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated: entries.length > limitedEntries.length,\n providerTruncated: false,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileSearchResult> {\n const repository = normalizeGitHubRepository(args);\n const query = args.query?.trim() ?? \"\";\n\n if (!query) {\n const listed = await listGitHubRepositoryFiles(\n {\n owner: repository.owner,\n repo: repository.repo,\n path: args.path,\n ref: args.ref,\n recursive: true,\n includeDirectories: false,\n maxFiles: GITHUB_REPO_FILES_MAX,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n const filtered = listed.entries.filter((entry) =>\n githubTreeEntryMatchesSearchFilters(entry, args),\n );\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n const limitedItems = filtered.slice(0, maxFiles);\n return {\n repository,\n mode: \"tree-filter\",\n query: null,\n ref: listed.ref,\n items: limitedItems,\n totalCount: filtered.length,\n truncated: listed.truncated || filtered.length > limitedItems.length,\n incompleteResults: listed.providerTruncated,\n response: listed.response,\n };\n }\n\n const perPage = clampPositiveInt(\n args.perPage,\n GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE,\n GITHUB_CODE_SEARCH_MAX_PER_PAGE,\n );\n const page = clampPositiveInt(args.page, 1, 100);\n const q = buildGitHubCodeSearchQuery(repository, args, query);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"search repository code\",\n args: {\n provider: \"github\",\n path: \"/search/code\",\n query: { q, per_page: perPage, page },\n headers: args.includeTextMatches\n ? { Accept: \"application/vnd.github.text-match+json\" }\n : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const rawItems = Array.isArray(body.items) ? body.items : [];\n const items = rawItems\n .map(normalizeGitHubCodeSearchEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry);\n\n return {\n repository,\n mode: \"code-search\",\n query: q,\n ref: null,\n items,\n totalCount:\n typeof body.total_count === \"number\" && Number.isFinite(body.total_count)\n ? body.total_count\n : items.length,\n truncated: items.length >= perPage,\n incompleteResults: Boolean(body.incomplete_results),\n response: compactResponseStatus(response),\n };\n}\n\nexport async function readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileReadResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"read repository file\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, path),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n if (Array.isArray(json)) {\n throw new Error(\n `GitHub path \"${path}\" is a directory. Use listGitHubRepositoryFiles or the github-repo-files action with operation=\"list\".`,\n );\n }\n const file = asRecord(json);\n const encoding =\n typeof file.encoding === \"string\" ? file.encoding.toLowerCase() : null;\n const rawBase64 =\n encoding === \"base64\" && typeof file.content === \"string\"\n ? file.content.replace(/\\s+/g, \"\")\n : null;\n const content = rawBase64\n ? Buffer.from(rawBase64, \"base64\").toString(\"utf8\")\n : null;\n const sha = typeof file.sha === \"string\" ? file.sha : \"\";\n if (!sha) throw new Error(`GitHub read for \"${path}\" did not return a SHA.`);\n\n return {\n repository,\n path: typeof file.path === \"string\" ? file.path : path,\n ref: args.ref?.trim() || null,\n name: typeof file.name === \"string\" ? file.name : githubBasename(path),\n type: typeof file.type === \"string\" ? file.type : \"file\",\n sha,\n size: typeof file.size === \"number\" ? file.size : 0,\n encoding,\n content,\n contentBase64: rawBase64,\n url: typeof file.url === \"string\" ? file.url : null,\n htmlUrl: typeof file.html_url === \"string\" ? file.html_url : null,\n downloadUrl:\n typeof file.download_url === \"string\" ? file.download_url : null,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileWriteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) throw new Error(\"GitHub file write requires a commit message.\");\n\n let sha = args.sha?.trim();\n if (!sha && args.overwriteExisting) {\n try {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n } catch (error) {\n if (!isGitHubNotFoundError(error)) throw error;\n }\n }\n\n const body: Record<string, unknown> = {\n message,\n content: Buffer.from(args.content, \"utf8\").toString(\"base64\"),\n };\n if (sha) body.sha = sha;\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"write repository file\",\n args: {\n provider: \"github\",\n method: \"PUT\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const content = asRecord(result.content);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n content: {\n name: stringOrNull(content.name),\n path: stringOrNull(content.path),\n sha: stringOrNull(content.sha),\n url: stringOrNull(content.url),\n htmlUrl: stringOrNull(content.html_url),\n },\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nexport async function deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileDeleteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) {\n throw new Error(\"GitHub file delete requires a commit message.\");\n }\n\n let sha = args.sha?.trim();\n if (!sha) {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n }\n\n const body: Record<string, unknown> = { message, sha };\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"delete repository file\",\n args: {\n provider: \"github\",\n method: \"DELETE\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nasync function executeGitHubJsonRequest(options: {\n runtime: ProviderApiRuntimeOptions;\n label: string;\n args: Omit<ProviderApiRequestArgs, \"provider\"> & { provider?: \"github\" };\n}): Promise<{ json: unknown; response: ProviderApiHttpResponse }> {\n const result = (await executeProviderApiRequest(\n { provider: \"github\", ...options.args },\n options.runtime,\n )) as Record<string, unknown>;\n const response = result.response as ProviderApiHttpResponse | undefined;\n if (!response) {\n throw new Error(`GitHub ${options.label} returned an unexpected result.`);\n }\n if (!response.ok) {\n throw new Error(\n `GitHub ${options.label} failed with HTTP ${response.status}${\n response.statusText ? ` ${response.statusText}` : \"\"\n }${providerResponseErrorDetail(response)}`,\n );\n }\n return { json: response.json, response };\n}\n\nasync function resolveGitHubDefaultBranch(\n args: GitHubRepositoryRef & {\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<string> {\n const repository = normalizeGitHubRepository(args);\n const { json } = await executeGitHubJsonRequest({\n runtime,\n label: \"get repository metadata\",\n args: {\n provider: \"github\",\n path: githubRepoApiPath(repository),\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const defaultBranch = stringOrNull(body.default_branch);\n if (!defaultBranch) {\n throw new Error(\n `GitHub repository ${repository.owner}/${repository.repo} did not return a default branch.`,\n );\n }\n return defaultBranch;\n}\n\nfunction normalizeGitHubRepository(\n args: GitHubRepositoryRef,\n): GitHubRepositoryRef {\n const owner = args.owner.trim();\n const repo = args.repo.trim().replace(/\\.git$/i, \"\");\n if (!owner) throw new Error(\"GitHub repository owner is required.\");\n if (!repo) throw new Error(\"GitHub repository name is required.\");\n return { owner, repo };\n}\n\nfunction githubRepoApiPath(repository: GitHubRepositoryRef): string {\n return `/repos/${encodeURIComponent(repository.owner)}/${encodeURIComponent(\n repository.repo,\n )}`;\n}\n\nfunction githubContentsApiPath(\n repository: GitHubRepositoryRef,\n filePath: string,\n): string {\n const encodedPath = encodeGitHubFilePath(filePath);\n return `${githubRepoApiPath(repository)}/contents${\n encodedPath ? `/${encodedPath}` : \"\"\n }`;\n}\n\nfunction encodeGitHubFilePath(filePath: string): string {\n return normalizeGitHubFilePath(filePath)\n .split(\"/\")\n .filter(Boolean)\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n}\n\nfunction normalizeGitHubFilePath(filePath: string | undefined): string {\n return (filePath ?? \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction requireGitHubFilePath(filePath: string): string {\n const normalized = normalizeGitHubFilePath(filePath);\n if (!normalized) throw new Error(\"GitHub file path is required.\");\n return normalized;\n}\n\nfunction githubBasename(filePath: string): string {\n return filePath.split(\"/\").filter(Boolean).pop() ?? filePath;\n}\n\nfunction githubPathMatchesPrefix(path: string, prefix: string): boolean {\n if (!prefix) return true;\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nfunction normalizeGitHubTreeEntry(\n value: unknown,\n options: GitHubRepositoryRef & { ref: string },\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n const normalizedType =\n type === \"blob\"\n ? \"file\"\n : type === \"tree\"\n ? \"dir\"\n : type === \"commit\"\n ? \"submodule\"\n : \"unknown\";\n return {\n name: githubBasename(path),\n path,\n type: normalizedType,\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl:\n normalizedType === \"file\"\n ? githubWebFileUrl(options, path)\n : normalizedType === \"dir\"\n ? githubWebTreeUrl(options, path)\n : null,\n downloadUrl: null,\n };\n}\n\nfunction normalizeGitHubContentsEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n return {\n name: stringOrNull(entry.name) ?? githubBasename(path),\n path,\n type:\n type === \"file\" ||\n type === \"dir\" ||\n type === \"symlink\" ||\n type === \"submodule\"\n ? type\n : \"unknown\",\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl: stringOrNull(entry.html_url),\n downloadUrl: stringOrNull(entry.download_url),\n };\n}\n\nfunction normalizeGitHubCodeSearchEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n return normalizeGitHubContentsEntry({ ...asRecord(value), type: \"file\" });\n}\n\nfunction githubTreeEntryMatchesSearchFilters(\n entry: GitHubRepositoryFileEntry,\n args: GitHubRepositoryFileSearchArgs,\n): boolean {\n const filename = args.filename?.trim();\n if (filename && entry.name !== filename) return false;\n const extension = args.extension?.trim().replace(/^\\./, \"\");\n if (extension && !entry.path.endsWith(`.${extension}`)) return false;\n const pathFilter = normalizeGitHubFilePath(args.path);\n if (pathFilter && !entry.path.includes(pathFilter)) return false;\n return true;\n}\n\nfunction buildGitHubCodeSearchQuery(\n repository: GitHubRepositoryRef,\n args: GitHubRepositoryFileSearchArgs,\n query: string,\n): string {\n const qualifiers = [`repo:${repository.owner}/${repository.repo}`];\n const path = normalizeGitHubFilePath(args.path);\n if (path) qualifiers.push(`path:${quoteGitHubSearchQualifier(path)}`);\n if (args.filename?.trim()) {\n qualifiers.push(\n `filename:${quoteGitHubSearchQualifier(args.filename.trim())}`,\n );\n }\n if (args.extension?.trim()) {\n qualifiers.push(\n `extension:${quoteGitHubSearchQualifier(\n args.extension.trim().replace(/^\\./, \"\"),\n )}`,\n );\n }\n if (args.language?.trim()) {\n qualifiers.push(\n `language:${quoteGitHubSearchQualifier(args.language.trim())}`,\n );\n }\n return [query, \"in:file\", ...qualifiers].join(\" \");\n}\n\nfunction quoteGitHubSearchQualifier(value: string): string {\n return /\\s/.test(value) ? JSON.stringify(value) : value;\n}\n\nfunction githubWebFileUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/blob/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction githubWebTreeUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/tree/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction clampPositiveInt(\n value: number | undefined,\n defaultValue: number,\n maxValue: number,\n): number {\n if (!Number.isFinite(value) || value! <= 0) return defaultValue;\n return Math.min(maxValue, Math.floor(value!));\n}\n\nfunction compactResponseStatus(\n response: ProviderApiHttpResponse,\n): Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\"> {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n}\n\nfunction providerResponseErrorDetail(\n response: ProviderApiHttpResponse,\n): string {\n const body = asRecord(response.json);\n const message = stringOrNull(body.message);\n const detail =\n message ??\n (typeof response.text === \"string\"\n ? response.text.replace(/\\s+/g, \" \").trim().slice(0, 500)\n : \"\");\n return detail ? `: ${detail}` : \"\";\n}\n\nfunction isGitHubNotFoundError(error: unknown): boolean {\n return error instanceof Error && /\\bHTTP 404\\b/.test(error.message);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction stringOrNull(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\nfunction numberOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n// ---------------------------------------------------------------------------\n// Custom provider execution\n// ---------------------------------------------------------------------------\n\nasync function executeCustomProviderApiRequest(\n args: ProviderApiRequestArgs,\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown> {\n const ctx = requireRuntimeCredentialContext(runtime, customConfig.id);\n const method = normalizeMethod(args.method);\n const baseUrl = customConfig.baseUrl;\n\n // Build a lightweight ProviderApiConfig-like object so we can reuse\n // buildProviderUrl (which validates allowed hosts).\n const syntheticConfig: ProviderApiConfig = {\n id: customConfig.id as ProviderApiId,\n label: customConfig.label,\n defaultBaseUrl: baseUrl,\n auth: { type: \"none\" },\n credentialKeys: [],\n docsUrls: customConfig.docsUrls,\n allowedHostSuffixes: customConfig.allowedHostSuffixes,\n defaultHeaders: customConfig.defaultHeaders,\n };\n\n const url = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: args.query,\n });\n\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveCustomAuth(customConfig, runtime, ctx, args);\n\n const extraHeaders = args.headers ?? {};\n const headers = sanitizeOutboundHeaders({\n ...(customConfig.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n const body = prepareBody(args.body, headers);\n\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: customConfig.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode (same cursor pagination as built-in providers) ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor,\n } = await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(args.query, extra.query)\n : args.query;\n const pageUrl = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n args.body,\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : args.body;\n const pageBody = prepareBody(bodyWithCursor, headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n truncated,\n nextCursor,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey: createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n }),\n },\n });\n\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n docsUrls: customConfig.docsUrls,\n specUrls: [],\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth:\n args.auth === \"none\" ? \"none\" : describeCustomAuth(customConfig.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n },\n response,\n guidance:\n \"This was a raw provider API request to a custom provider. Use provider docs URLs to choose endpoints.\",\n };\n}\n\nasync function resolveCustomAuth(\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = customConfig.auth;\n if (auth.type === \"none\") return emptyAuth();\n\n if (auth.type === \"bearer\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.headerName]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n return emptyAuth();\n}\n\n/** Resolve a credential by key name (no workspace-provider lookup for custom). */\nasync function resolveRequiredCredentialByKey(options: {\n provider: string;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: undefined,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n const resolver =\n options.runtime.resolveCredential ?? defaultProviderApiCredentialResolver;\n const credential = await resolver(lookup);\n if (!credential?.value) {\n throw new Error(\n `Credential \"${options.key}\" not configured for custom provider \"${options.provider}\".`,\n );\n }\n return credential;\n}\n\nfunction describeCustomAuth(auth: CustomProviderAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"api-key-header\")\n return `api-key-header:${auth.headerName}`;\n return \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Catalog helpers with custom provider support\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a custom provider to the same catalog shape as built-in providers.\n */\nfunction customProviderToCatalogEntry(config: CustomProviderConfig) {\n return {\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.baseUrl,\n baseUrlCredentialKey: null,\n auth: describeCustomAuth(config.auth),\n credentialKeys: extractCredentialKeysFromCustomAuth(config.auth),\n docsUrls: config.docsUrls,\n specUrls: [] as string[],\n allowedHostSuffixes: config.allowedHostSuffixes,\n placeholders: [] as unknown[],\n defaultHeaders: config.defaultHeaders,\n examples: [] as unknown[],\n notes: config.notes ? [config.notes] : ([] as string[]),\n corpusRecipes: [] as unknown[],\n templateUses: [] as string[],\n custom: true,\n };\n}\n\nfunction extractCredentialKeysFromCustomAuth(\n auth: CustomProviderAuthKind,\n): string[] {\n if (auth.type === \"bearer\") return [auth.credentialKey];\n if (auth.type === \"basic\") {\n return auth.usernameKey === auth.passwordKey\n ? [auth.usernameKey]\n : [auth.usernameKey, auth.passwordKey];\n }\n if (auth.type === \"api-key-header\") return [auth.credentialKey];\n return [];\n}\n\n/**\n * List catalog entries including custom providers (merged after built-ins).\n */\nasync function listProviderApiCatalogWithCustom(\n provider: ProviderApiId | string | undefined,\n options: {\n providerIds?: readonly (ProviderApiId | string)[];\n providerOverrides?: readonly ProviderApiConfig[];\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown[]> {\n const customConfigs = runtime.getCustomProviders\n ? await runtime.getCustomProviders()\n : [];\n\n if (provider) {\n // Check built-ins first\n if (isProviderApiId(provider)) {\n return listProviderApiCatalog(provider, options) as unknown[];\n }\n // Check custom\n const custom = customConfigs.find((c) => c.id === provider);\n if (custom) return [customProviderToCatalogEntry(custom)];\n const known = [\n ...normalizeProviderIds(options.providerIds),\n ...customConfigs.map((c) => c.id),\n ];\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const builtInEntries = listProviderApiCatalog(\n undefined,\n options,\n ) as unknown[];\n const builtInIds = new Set(\n (options.providerIds ?? PROVIDER_API_IDS).map(String),\n );\n const customEntries = customConfigs\n .filter((c) => !builtInIds.has(c.id))\n .map(customProviderToCatalogEntry);\n return [...builtInEntries, ...customEntries];\n}\n\n/**\n * Look up a custom provider by id from the runtime loader.\n */\nasync function resolveCustomProvider(\n id: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<CustomProviderConfig | null> {\n if (!runtime.getCustomProviders) return null;\n const configs = await runtime.getCustomProviders();\n return configs.find((c) => c.id === id) ?? null;\n}\n\n/**\n * List all provider ids (built-in + custom) visible to this runtime.\n */\nasync function listAllProviderIds(\n runtime: ProviderApiRuntimeOptions,\n): Promise<string[]> {\n const builtIn = normalizeProviderIds(runtime.providerIds).map(String);\n if (!runtime.getCustomProviders) return builtIn;\n const custom = await runtime.getCustomProviders();\n return [...builtIn, ...custom.map((c) => c.id)];\n}\n\n/**\n * Assert that a provider is either a known built-in or a registered custom\n * provider. Throws with a descriptive message listing known providers.\n */\nasync function assertProviderAllowedAsync(\n provider: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<void> {\n // Built-in check (fast path)\n if (isProviderApiId(provider)) {\n // Still check the providerIds whitelist if set\n const allowed = normalizeProviderIds(runtime.providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n return;\n }\n // Custom provider check\n const custom = await resolveCustomProvider(provider, runtime);\n if (custom) return;\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n}\n\nexport async function defaultProviderApiCredentialResolver(\n options: ProviderApiCredentialLookupOptions,\n): Promise<ProviderApiResolvedCredential | null> {\n if (options.workspaceProvider) {\n const result = await resolveWorkspaceConnectionCredentialForApp({\n appId: options.appId,\n provider: options.workspaceProvider,\n key: options.key,\n connectionId: options.connectionId,\n userEmail: options.ctx.userEmail,\n orgId: options.ctx.orgId,\n });\n if (result.available && result.value) {\n return {\n key: result.provenance?.resolvedKey ?? result.key,\n value: result.value,\n source: \"workspace_connection\",\n provider: result.provider,\n connectionId: result.provenance?.connectionId,\n connectionLabel: result.provenance?.connectionLabel,\n scope:\n typeof result.provenance?.secretScope === \"string\"\n ? result.provenance.secretScope\n : undefined,\n };\n }\n }\n\n const value = await resolveCredential(options.key, options.ctx);\n if (!value) return null;\n return {\n key: options.key,\n value,\n source: options.localCredentialSource,\n provider: options.provider,\n };\n}\n\nfunction normalizeProviderIds(\n providerIds?: readonly (ProviderApiId | string)[],\n): ProviderApiId[] {\n if (!providerIds) return [...PROVIDER_API_IDS];\n const result: ProviderApiId[] = [];\n const seen = new Set<string>();\n for (const providerId of providerIds) {\n if (!isProviderApiId(providerId)) {\n throw new Error(`Unsupported provider API: ${providerId}`);\n }\n if (seen.has(providerId)) continue;\n seen.add(providerId);\n result.push(providerId);\n }\n return result;\n}\n\nfunction assertProviderAllowed(\n provider: ProviderApiId | string,\n providerIds?: readonly (ProviderApiId | string)[],\n) {\n const allowed = normalizeProviderIds(providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n}\n\nfunction describeAuth(auth: ProviderApiAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"basic-raw\") return \"basic\";\n if (auth.type === \"api-key-header\") return `api-key-header:${auth.header}`;\n if (auth.type === \"google-service-account\") return \"google-service-account\";\n if (auth.type === \"oauth-bearer\") return `oauth-bearer:${auth.oauthProvider}`;\n if (auth.type === \"oauth-bearer-or-api-key-header\") {\n return `oauth-bearer:${auth.oauthProvider}-or-api-key-header:${auth.header}:${(auth.fallbackKeys ?? [auth.key]).join(\",\")}`;\n }\n if (auth.type === \"oauth-bearer-or-bearer-key\") {\n return `oauth-bearer:${auth.oauthProvider}-or-bearer-key:${(auth.fallbackKeys ?? [auth.key]).join(\",\")}`;\n }\n if (auth.type === \"oauth-bearer-or-basic\") {\n return `oauth-bearer:${auth.oauthProvider}-or-basic:${auth.usernameKey}:${auth.passwordKey}`;\n }\n return \"prometheus-basic-or-bearer\";\n}\n\nfunction requireRuntimeCredentialContext(\n runtime: ProviderApiRuntimeOptions,\n credentialKey: string,\n): CredentialContext {\n const ctx = runtime.getCredentialContext?.() ?? getCredentialContext();\n if (!ctx) {\n throw new Error(\n `Cannot resolve credential \"${credentialKey}\" outside an authenticated request context.`,\n );\n }\n return ctx;\n}\n\nasync function resolveBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<string> {\n const oauthBaseUrl = await resolveWorkspaceOAuthBaseUrl(\n config,\n runtime,\n args,\n );\n if (oauthBaseUrl) return oauthBaseUrl;\n if (!config.baseUrlCredentialKey) return config.defaultBaseUrl;\n const auth = config.auth;\n const workspaceProvider =\n auth.type === \"oauth-bearer\" ||\n auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\" ||\n auth.type === \"oauth-bearer-or-basic\"\n ? auth.workspaceProvider\n : undefined;\n const configured = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: config.baseUrlCredentialKey,\n args,\n workspaceProvider,\n });\n return (configured || config.defaultBaseUrl).replace(/\\/+$/, \"\");\n}\n\nasync function resolveWorkspaceOAuthBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n args: ProviderApiRequestArgs,\n): Promise<string | null> {\n const auth = config.auth;\n const workspaceProvider =\n auth.type === \"oauth-bearer\" ||\n auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\" ||\n auth.type === \"oauth-bearer-or-basic\"\n ? auth.workspaceProvider\n : undefined;\n if (workspaceProvider !== \"jira\" && workspaceProvider !== \"salesforce\") {\n return null;\n }\n let resolved: Awaited<ReturnType<typeof resolveWorkspaceConnectionForApp>>;\n try {\n resolved = await resolveWorkspaceConnectionForApp({\n appId: runtime.appId,\n provider: workspaceProvider,\n connectionId: args.connectionId ?? undefined,\n requireConnected: true,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Workspace connections require an authenticated user.\"\n ) {\n return null;\n }\n throw error;\n }\n if (!resolved.available || !resolved.connection) return null;\n const connectionConfig = resolved.connection.config;\n if (connectionConfig.credentialMode !== \"oauth\") return null;\n const baseUrl =\n workspaceProvider === \"salesforce\"\n ? connectionConfig.salesforceInstanceUrl\n : connectionConfig.atlassianApiBaseUrl;\n if (typeof baseUrl !== \"string\" || !baseUrl.trim()) return null;\n if (workspaceProvider === \"salesforce\" && !isSalesforceInstanceUrl(baseUrl)) {\n return null;\n }\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction isSalesforceInstanceUrl(value: string): boolean {\n try {\n const url = new URL(value);\n const host = url.hostname.toLowerCase();\n return (\n url.protocol === \"https:\" &&\n !url.username &&\n !url.password &&\n !url.port &&\n (host === \"salesforce.com\" || host.endsWith(\".salesforce.com\"))\n );\n } catch {\n return false;\n }\n}\n\nasync function resolvePlaceholders(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<Record<string, string>> {\n const placeholders: Record<string, string> = {};\n for (const placeholder of config.placeholders ?? []) {\n const value = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: placeholder.credentialKey,\n args,\n });\n if (value) placeholders[placeholder.name] = value;\n }\n return placeholders;\n}\n\nasync function resolveCredentialValue(options: {\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n key: string;\n args: ProviderApiRequestArgs;\n workspaceProvider?: string;\n}): Promise<string | undefined> {\n const credential = await resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.workspaceProvider,\n key: options.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n return credential?.value;\n}\n\nfunction substituteString(\n value: string,\n placeholders: Record<string, string>,\n): string {\n let result = value;\n for (const [name, replacement] of Object.entries(placeholders)) {\n result = result.split(`{${name}}`).join(replacement);\n }\n return result;\n}\n\nfunction substituteUnknown(\n value: unknown,\n placeholders: Record<string, string>,\n): unknown {\n if (typeof value === \"string\") return substituteString(value, placeholders);\n if (Array.isArray(value)) {\n return value.map((item) => substituteUnknown(item, placeholders));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n substituteUnknown(entry, placeholders),\n ]),\n );\n }\n return value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction buildProviderUrl(options: {\n config: ProviderApiConfig;\n baseUrl: string;\n rawPath: string;\n query: unknown;\n}): URL {\n const base = new URL(options.baseUrl);\n const rawPath = options.rawPath.trim();\n const url = /^https?:\\/\\//i.test(rawPath)\n ? new URL(rawPath)\n : new URL(joinProviderUrlPath(base, rawPath), base.origin);\n\n if (!isAllowedProviderUrl(url, base, options.config)) {\n throw new Error(\n `${options.config.label} API requests must stay on the configured provider host or registered provider host suffix.`,\n );\n }\n\n for (const [key, value] of queryEntries(options.query)) {\n url.searchParams.append(key, value);\n }\n\n return url;\n}\n\nfunction joinProviderUrlPath(base: URL, rawPath: string): string {\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const providerPath = rawPath.replace(/^\\/+/, \"\");\n if (!providerPath) return basePath || \"/\";\n const baseSegments = basePath.split(\"/\").filter(Boolean);\n const providerSegments = providerPath.split(\"/\").filter(Boolean);\n if (\n baseSegments.length > 0 &&\n providerSegments.length >= baseSegments.length &&\n baseSegments.every((segment, index) => segment === providerSegments[index])\n ) {\n return `/${providerPath}`;\n }\n return `${basePath}/${providerPath}`;\n}\n\nfunction isAllowedProviderUrl(\n url: URL,\n base: URL,\n config: ProviderApiConfig,\n): boolean {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n if (url.origin === base.origin) return true;\n const host = url.hostname.toLowerCase();\n return (config.allowedHostSuffixes ?? []).some((suffix) => {\n const normalized = suffix.toLowerCase().replace(/^\\./, \"\");\n return host === normalized || host.endsWith(`.${normalized}`);\n });\n}\n\nfunction queryEntries(value: unknown): Array<[string, string]> {\n if (!value) return [];\n if (typeof value === \"string\") {\n const params = new URLSearchParams(value.replace(/^\\?/, \"\"));\n return Array.from(params.entries());\n }\n if (typeof value !== \"object\" || Array.isArray(value)) return [];\n const entries: Array<[string, string]> = [];\n for (const [key, raw] of Object.entries(value)) {\n if (raw === undefined || raw === null) continue;\n if (Array.isArray(raw)) {\n for (const item of raw) entries.push([key, String(item)]);\n } else {\n entries.push([key, String(raw)]);\n }\n }\n return entries;\n}\n\nasync function resolveAuth(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = config.auth;\n if (auth.type === \"none\") return emptyAuth();\n if (auth.type === \"bearer\") {\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.keys,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n if (auth.type === \"basic-raw\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(credential.value).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value, encoded],\n };\n }\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"google-service-account\") {\n const token = await getGoogleServiceAccountToken(auth.scopes, runtime, ctx);\n return {\n headers: { Authorization: `Bearer ${token}` },\n credentialSources: [\n {\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [token],\n };\n }\n if (auth.type === \"oauth-bearer\") {\n const oauthProvider =\n runtime.oauthProviderOverrides?.[config.id] ?? auth.oauthProvider;\n const credential =\n auth.workspaceProvider && args.connectionId\n ? await resolveConnectionBoundOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n runtime,\n ctx,\n workspaceProvider: auth.workspaceProvider,\n connectionId: args.connectionId,\n accountId: args.accountId,\n })\n : await resolveOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n ctx,\n accountId: args.accountId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-api-key-header\") {\n const explicitConnectionFallback =\n Boolean(args.connectionId?.trim()) && Boolean(runtime.resolveCredential);\n const resolvedFallback = explicitConnectionFallback\n ? await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n })\n : null;\n if (resolvedFallback) {\n return {\n headers: { [auth.header]: resolvedFallback.value },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n if (!explicitConnectionFallback) {\n const resolvedFallback = await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n });\n if (resolvedFallback) {\n return {\n headers: { [auth.header]: resolvedFallback.value },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n }\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.fallbackKeys ?? [auth.key],\n ctx,\n runtime,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-bearer-key\") {\n const explicitConnectionFallback =\n Boolean(args.connectionId?.trim()) && Boolean(runtime.resolveCredential);\n const resolvedFallback = explicitConnectionFallback\n ? await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n })\n : null;\n if (resolvedFallback) {\n return {\n headers: { Authorization: `Bearer ${resolvedFallback.value}` },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n if (!explicitConnectionFallback) {\n const resolvedFallback = await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n });\n if (resolvedFallback) {\n return {\n headers: { Authorization: `Bearer ${resolvedFallback.value}` },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n }\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.fallbackKeys ?? [auth.key],\n ctx,\n runtime,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-basic\") {\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n omitCredentialValue(password),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n const bearer = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_BEARER_TOKEN\",\n args,\n });\n if (bearer) {\n return {\n headers: { Authorization: `Bearer ${bearer}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_BEARER_TOKEN\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [bearer],\n };\n }\n const username = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_USERNAME\",\n args,\n });\n const password = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_PASSWORD\",\n args,\n });\n if (username && password) {\n const encoded = Buffer.from(`${username}:${password}`).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_USERNAME\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n {\n key: \"PROMETHEUS_PASSWORD\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [username, password, encoded],\n };\n }\n return emptyAuth();\n}\n\nfunction emptyAuth(): ResolvedAuth {\n return { headers: {}, credentialSources: [], secretValues: [] };\n}\n\nasync function resolveHybridFallbackCredential(options: {\n auth:\n | Extract<ProviderApiAuthKind, { type: \"oauth-bearer-or-api-key-header\" }>\n | Extract<ProviderApiAuthKind, { type: \"oauth-bearer-or-bearer-key\" }>;\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n args: ProviderApiRequestArgs;\n}): Promise<ProviderApiResolvedCredential | null> {\n // App-specific resolvers keep existing provider credentials working when a\n // caller explicitly selects a connection or account.\n if (!options.runtime.resolveCredential) return null;\n return resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.auth.workspaceProvider,\n key: options.auth.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n}\n\nasync function resolveAnyCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n keys: readonly string[];\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n for (const key of options.keys) {\n const credential = await resolveOptionalCredential({ ...options, key });\n if (credential?.value) return credential;\n }\n throw new Error(\n `${options.provider} credential not configured. Tried: ${options.keys.join(\n \", \",\n )}`,\n );\n}\n\nasync function resolveRequiredCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential = await resolveOptionalCredential(options);\n if (!credential?.value) throw new Error(`${options.key} not configured`);\n return credential;\n}\n\nasync function resolveOptionalCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential | null> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: options.workspaceProvider,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n if (options.runtime.resolveCredential) {\n return options.runtime.resolveCredential(lookup);\n }\n return defaultProviderApiCredentialResolver(lookup);\n}\n\nfunction omitCredentialValue(\n credential: ProviderApiResolvedCredential,\n): Omit<ProviderApiResolvedCredential, \"value\"> {\n const { value: _value, ...rest } = credential;\n return rest;\n}\n\nconst googleServiceTokenCache = new Map<\n string,\n { token: string; expiresAt: number }\n>();\n\nasync function getGoogleServiceAccountToken(\n scopes: readonly string[],\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n): Promise<string> {\n const cacheKey = createHash(\"sha256\")\n .update(\n `${runtime.appId}:${ctx.orgId ?? ctx.userEmail}:${scopes.join(\" \")}`,\n )\n .digest(\"hex\");\n const cached = googleServiceTokenCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt - 30_000) return cached.token;\n\n const credsJson = await resolveCredentialValue({\n config: getProviderApiConfig(\"gcloud\", runtime.providerOverrides),\n runtime,\n ctx,\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n args: { provider: \"gcloud\", path: \"/\" },\n });\n if (!credsJson) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS_JSON not configured\");\n }\n let creds: {\n type?: string;\n client_email?: string;\n private_key?: string;\n token_uri?: string;\n };\n try {\n creds = JSON.parse(credsJson) as typeof creds;\n } catch {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON is not valid JSON. Upload a service account JSON key.\",\n );\n }\n if (!creds.client_email || !creds.private_key) {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON must be a service account JSON key.\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const aud = creds.token_uri || \"https://oauth2.googleapis.com/token\";\n const jwt = await signRs256Jwt(\n {\n iss: creds.client_email,\n scope: scopes.join(\" \"),\n aud,\n iat: now,\n exp: now + 3600,\n },\n creds.private_key,\n );\n const res = await fetch(aud, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n assertion: jwt,\n }),\n });\n if (!res.ok) {\n throw new Error(`Google OAuth error ${res.status}: ${await res.text()}`);\n }\n const data = (await res.json()) as {\n access_token: string;\n expires_in?: number;\n };\n googleServiceTokenCache.set(cacheKey, {\n token: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n });\n return data.access_token;\n}\n\nasync function resolveOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n ctx: CredentialContext;\n accountId?: string | null;\n ownerEmail?: string | null;\n salesforceLoginUrl?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const ownerEmail = options.ownerEmail?.trim() || options.ctx.userEmail;\n const accounts = await listOAuthAccountsByOwner(\n options.auth.oauthProvider,\n ownerEmail,\n );\n if (accounts.length === 0) {\n throw new Error(\n `${options.auth.tokenLabel} is not connected for ${ownerEmail}.`,\n );\n }\n const accountId = options.accountId?.trim();\n const account = accountId\n ? accounts.find((entry) => entry.accountId === accountId)\n : accounts[0];\n if (!account) {\n throw new Error(\n `${options.auth.tokenLabel} account ${accountId} is not available to ${ownerEmail}.`,\n );\n }\n const tokens = account.tokens as OAuthTokens;\n const token = await getValidOAuthAccessToken({\n oauthProvider: options.auth.oauthProvider,\n accountId: account.accountId,\n ownerEmail,\n tokens,\n salesforceLoginUrl: options.salesforceLoginUrl,\n });\n return {\n key: `${options.auth.oauthProvider.toUpperCase()}_OAUTH_TOKEN`,\n value: token,\n source: \"oauth_token\",\n provider: options.auth.oauthProvider,\n accountId: account.accountId,\n accountLabel: account.displayName,\n };\n}\n\nasync function resolveConnectionBoundOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n workspaceProvider: string;\n connectionId?: string | null;\n accountId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential =\n await resolveOptionalConnectionBoundOAuthBearerToken(options);\n if (credential) return credential;\n throw new Error(\n `${options.auth.tokenLabel} requires an available workspace connection.`,\n );\n}\n\nasync function resolveOptionalConnectionBoundOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n workspaceProvider: string;\n connectionId?: string | null;\n accountId?: string | null;\n allowUnbound?: boolean;\n}): Promise<ProviderApiResolvedCredential | null> {\n const requestedConnectionId = options.connectionId?.trim();\n let resolved: Awaited<ReturnType<typeof resolveWorkspaceConnectionForApp>>;\n try {\n resolved = await resolveWorkspaceConnectionForApp({\n appId: options.runtime.appId,\n provider: options.workspaceProvider,\n connectionId: requestedConnectionId,\n requireConnected: true,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Workspace connections require an authenticated user.\"\n ) {\n return null;\n }\n throw error;\n }\n if (!resolved.available || !resolved.connection) {\n if (requestedConnectionId) throw new Error(resolved.reason);\n return null;\n }\n const connectionAccountId = resolved.connection.accountId?.trim();\n if (!connectionAccountId) {\n if (options.allowUnbound) return null;\n throw new Error(\n `${options.auth.tokenLabel} workspace connection ${resolved.connection.id} is missing its OAuth account binding.`,\n );\n }\n const requestedAccountId = options.accountId?.trim();\n if (requestedAccountId && requestedAccountId !== connectionAccountId) {\n throw new Error(\n `${options.auth.tokenLabel} account ${requestedAccountId} does not match workspace connection ${requestedConnectionId}.`,\n );\n }\n const credential = await resolveOAuthBearerToken({\n auth: options.auth,\n ctx: options.ctx,\n accountId: connectionAccountId,\n ownerEmail: resolved.connection.ownerEmail,\n salesforceLoginUrl:\n options.auth.oauthProvider === \"salesforce\" &&\n typeof resolved.connection.config?.salesforceLoginUrl === \"string\"\n ? resolved.connection.config.salesforceLoginUrl\n : null,\n });\n return {\n ...credential,\n connectionId: resolved.connection.id,\n connectionLabel: resolved.connection.label,\n };\n}\n\nasync function getValidOAuthAccessToken(options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n salesforceLoginUrl?: string | null;\n}): Promise<string> {\n const accessToken =\n options.tokens.access_token ?? options.tokens.accessToken ?? \"\";\n if (!accessToken) {\n throw new Error(\n `${options.oauthProvider} OAuth account has no access token.`,\n );\n }\n const expiresAt = options.tokens.expiry_date ?? options.tokens.expiresAt;\n if (\n !expiresAt ||\n !Number.isFinite(expiresAt) ||\n expiresAt > Date.now() + 60_000\n ) {\n return accessToken;\n }\n\n const refreshToken =\n options.tokens.refresh_token ?? options.tokens.refreshToken;\n if (!refreshToken) return accessToken;\n if (\n options.oauthProvider === \"google\" ||\n options.oauthProvider === \"google-docs\"\n ) {\n return refreshGoogleOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"figma\") {\n return refreshFigmaOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"notion\") {\n return refreshNotionOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"github\") {\n return refreshGitHubOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"hubspot\") {\n return refreshHubSpotOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"salesforce\") {\n return refreshSalesforceOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"jira\") {\n return refreshJiraOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"sentry\") {\n return refreshSentryOAuthToken(options, refreshToken);\n }\n throw new Error(\n `${options.oauthProvider} OAuth token is expired and automatic refresh is not configured for provider-api.`,\n );\n}\n\nasync function refreshFigmaOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [clientId, clientSecret] = await Promise.all([\n resolveSecret(\"FIGMA_CLIENT_ID\"),\n resolveSecret(\"FIGMA_CLIENT_SECRET\"),\n ]);\n if (!clientId || !clientSecret) {\n throw new Error(\n \"FIGMA_CLIENT_ID and FIGMA_CLIENT_SECRET are required to refresh Figma OAuth tokens.\",\n );\n }\n const { response, data } = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.figma.com/v1/oauth/token\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"Figma\",\n );\n if (!response.ok || !data.access_token) {\n throw new Error(`Figma OAuth refresh failed (${response.status}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n token_type: data.token_type ?? \"bearer\",\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1_000,\n refresh_token: data.refresh_token ?? refreshToken,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshNotionOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [clientId, clientSecret] = await Promise.all([\n resolveSecret(\"NOTION_CLIENT_ID\"),\n resolveSecret(\"NOTION_CLIENT_SECRET\"),\n ]);\n if (!clientId || !clientSecret) {\n throw new Error(\n \"NOTION_CLIENT_ID and NOTION_CLIENT_SECRET are required to refresh Notion OAuth tokens.\",\n );\n }\n const { response, data } = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.notion.com/v1/oauth/token\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2026-03-11\",\n },\n body: JSON.stringify({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"Notion\",\n );\n if (!response.ok || !data.access_token) {\n throw new Error(`Notion OAuth refresh failed (${response.status}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n token_type: data.token_type ?? \"bearer\",\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1_000,\n refresh_token: data.refresh_token ?? refreshToken,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshGitHubOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"GITHUB\");\n if (!credentials.length) {\n throw new Error(\n \"GITHUB_CLIENT_ID/SECRET not set for GitHub OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://github.com/login/oauth/access_token\",\n {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"GitHub\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`GitHub OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function saveOAuthTokensAndLinkedJiraAccounts(options: {\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n };\n previousRefreshToken: string;\n updated: OAuthTokens;\n}): Promise<void> {\n const serializedTokens = options.updated as unknown as Record<\n string,\n unknown\n >;\n await saveOAuthTokens(\n options.options.oauthProvider,\n options.options.accountId,\n serializedTokens,\n options.options.ownerEmail,\n );\n\n const accounts = await listOAuthAccountsByOwner(\n options.options.oauthProvider,\n options.options.ownerEmail,\n );\n for (const account of accounts) {\n if (account.accountId === options.options.accountId) continue;\n const accountRefreshToken =\n (account.tokens.refresh_token as string | undefined) ??\n (account.tokens.refreshToken as string | undefined);\n if (accountRefreshToken !== options.previousRefreshToken) continue;\n await saveOAuthTokens(\n options.options.oauthProvider,\n account.accountId,\n serializedTokens,\n options.options.ownerEmail,\n );\n }\n}\n\nasync function refreshHubSpotOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"HUBSPOT\");\n if (!credentials.length) {\n throw new Error(\n \"HUBSPOT_CLIENT_ID/SECRET not set for HubSpot OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.hubapi.com/oauth/v3/token\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"HubSpot\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`HubSpot OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshSalesforceOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n salesforceLoginUrl?: string | null;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials =\n await resolveOAuthClientCredentialCandidates(\"SALESFORCE\");\n if (!credentials.length) {\n throw new Error(\n \"SALESFORCE_CLIENT_ID/SECRET not set for Salesforce OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n salesforceOAuthRefreshUrl(options.salesforceLoginUrl),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Salesforce\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(\n `Salesforce OAuth refresh failed (${response?.status ?? 0}).`,\n );\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction salesforceOAuthRefreshUrl(value: string | null | undefined): string {\n const loginUrl = value?.trim() || \"https://login.salesforce.com\";\n try {\n const url = new URL(loginUrl);\n if (\n url.protocol !== \"https:\" ||\n url.username ||\n url.password ||\n url.port ||\n url.pathname !== \"/\" ||\n url.search ||\n url.hash ||\n (url.hostname !== \"login.salesforce.com\" &&\n url.hostname !== \"test.salesforce.com\")\n ) {\n throw new Error(\"Invalid Salesforce OAuth login URL.\");\n }\n return `${url.origin}/services/oauth2/token`;\n } catch {\n throw new Error(\"Invalid Salesforce OAuth login URL.\");\n }\n}\n\nasync function refreshJiraOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"JIRA\");\n if (!credentials.length) {\n throw new Error(\"JIRA_CLIENT_ID/SECRET not set for Jira OAuth refresh.\");\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://auth.atlassian.com/oauth/token\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Jira\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`Jira OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokensAndLinkedJiraAccounts({\n options,\n previousRefreshToken: refreshToken,\n updated,\n });\n return data.access_token;\n}\n\nasync function refreshSentryOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"SENTRY\");\n if (!credentials.length) {\n throw new Error(\n \"SENTRY_CLIENT_ID/SECRET not set for Sentry OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://sentry.io/oauth/token/\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Sentry\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`Sentry OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nconst OAUTH_REFRESH_TIMEOUT_MS = 10_000;\nconst OAUTH_REFRESH_MAX_BYTES = 256 * 1024;\n\nasync function fetchBoundedOAuthRefreshJson<T extends Record<string, unknown>>(\n url: string,\n init: RequestInit,\n providerLabel: string,\n): Promise<{ response: Response; data: T }> {\n let response: Response;\n try {\n response = await fetch(url, {\n ...init,\n signal: AbortSignal.timeout(OAUTH_REFRESH_TIMEOUT_MS),\n });\n } catch {\n throw new Error(`${providerLabel} OAuth refresh request failed.`);\n }\n const declaredLength = Number(response.headers.get(\"content-length\"));\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > OAUTH_REFRESH_MAX_BYTES\n ) {\n throw new Error(\n `${providerLabel} OAuth refresh response exceeded the size limit.`,\n );\n }\n if (!response.body) return { response, data: {} as T };\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let length = 0;\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n length += chunk.value.byteLength;\n if (length > OAUTH_REFRESH_MAX_BYTES) {\n await reader.cancel();\n break;\n }\n chunks.push(chunk.value);\n }\n } catch {\n throw new Error(`${providerLabel} OAuth refresh request failed.`);\n }\n if (length > OAUTH_REFRESH_MAX_BYTES) {\n throw new Error(\n `${providerLabel} OAuth refresh response exceeded the size limit.`,\n );\n }\n try {\n const parsed = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n return {\n response,\n data:\n parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as T)\n : ({} as T),\n };\n } catch {\n return { response, data: {} as T };\n }\n}\n\nasync function refreshGoogleOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [scopedClientId, scopedClientSecret] = await Promise.all([\n resolveSecret(\"GOOGLE_CLIENT_ID\"),\n resolveSecret(\"GOOGLE_CLIENT_SECRET\"),\n ]);\n const credentialCandidates = dedupeGoogleOAuthCredentials([\n ...(scopedClientId && scopedClientSecret\n ? [{ clientId: scopedClientId, clientSecret: scopedClientSecret }]\n : []),\n ...resolveGoogleProviderCredentialCandidates(),\n ]);\n if (!credentialCandidates.length) {\n throw new Error(\n \"GOOGLE_CLIENT_ID/SECRET not set for Google OAuth refresh.\",\n );\n }\n\n let data: {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n } | null = null;\n let lastStatusText = \"refresh failed\";\n for (const credentials of credentialCandidates) {\n const res = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n refresh_token: refreshToken,\n client_id: credentials.clientId,\n client_secret: credentials.clientSecret,\n grant_type: \"refresh_token\",\n }),\n });\n lastStatusText = res.statusText;\n data = (await res.json()) as {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n };\n if (res.ok && data.access_token) break;\n if (data.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n continue;\n }\n const detail = data.error_description ?? data.error ?? lastStatusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n\n if (!data?.access_token) {\n if (data?.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n await deleteOAuthTokens(options.oauthProvider, options.accountId);\n }\n const detail = data?.error_description ?? data?.error ?? lastStatusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n const merged: OAuthTokens = {\n ...options.tokens,\n access_token: data.access_token,\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1000,\n token_type: data.token_type ?? options.tokens.token_type,\n scope: data.scope ?? options.tokens.scope,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n merged as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction dedupeGoogleOAuthCredentials(\n candidates: Array<{ clientId: string; clientSecret: string }>,\n): Array<{ clientId: string; clientSecret: string }> {\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n if (seen.has(candidate.clientId)) return false;\n seen.add(candidate.clientId);\n return true;\n });\n}\n\nasync function resolveOAuthClientCredentialCandidates(\n provider: string,\n): Promise<Array<{ clientId: string; clientSecret: string }>> {\n const [clientId, clientSecret, integrationClientId, integrationClientSecret] =\n await Promise.all([\n resolveSecret(`${provider}_CLIENT_ID`),\n resolveSecret(`${provider}_CLIENT_SECRET`),\n resolveSecret(`${provider}_INTEGRATION_CLIENT_ID`),\n resolveSecret(`${provider}_INTEGRATION_CLIENT_SECRET`),\n ]);\n const candidates = [\n integrationClientId && integrationClientSecret\n ? { clientId: integrationClientId, clientSecret: integrationClientSecret }\n : null,\n clientId && clientSecret ? { clientId, clientSecret } : null,\n ].filter((value): value is { clientId: string; clientSecret: string } =>\n Boolean(value),\n );\n if (provider === \"SALESFORCE\") {\n const [consumerKey, consumerSecret] = await Promise.all([\n resolveSecret(\"SALESFORCE_CONSUMER_KEY\"),\n resolveSecret(\"SALESFORCE_CONSUMER_SECRET\"),\n ]);\n if (consumerKey && consumerSecret) {\n candidates.push({ clientId: consumerKey, clientSecret: consumerSecret });\n }\n }\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n if (seen.has(candidate.clientId)) return false;\n seen.add(candidate.clientId);\n return true;\n });\n}\n\nfunction normalizeMethod(\n method: ProviderApiMethod | undefined,\n): ProviderApiMethod {\n const normalized = String(method || \"GET\").toUpperCase();\n if (\n normalized === \"GET\" ||\n normalized === \"POST\" ||\n normalized === \"PUT\" ||\n normalized === \"PATCH\" ||\n normalized === \"DELETE\" ||\n normalized === \"HEAD\"\n ) {\n return normalized;\n }\n throw new Error(`Unsupported HTTP method: ${method}`);\n}\n\nfunction sanitizeOutboundHeaders(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const headers: Record<string, string> = {};\n for (const [name, rawValue] of Object.entries(value)) {\n const lower = name.toLowerCase();\n if (!HEADER_NAME_RE.test(name) || BLOCKED_OUTBOUND_HEADERS.has(lower)) {\n continue;\n }\n if (rawValue === undefined || rawValue === null) continue;\n const headerValue = String(rawValue);\n if (/[\\r\\n]/.test(headerValue)) continue;\n headers[name] = headerValue;\n }\n return headers;\n}\n\nfunction prepareBody(\n body: unknown,\n headers: Record<string, string>,\n): BodyInit | undefined {\n if (body === undefined || body === null) return undefined;\n if (typeof body === \"string\") return body;\n const hasContentType = Object.keys(headers).some(\n (name) => name.toLowerCase() === \"content-type\",\n );\n if (!hasContentType) headers[\"Content-Type\"] = \"application/json\";\n return JSON.stringify(body);\n}\n\nfunction runtimeOptionsAppId(runtime: ProviderApiRuntimeOptions): string {\n return runtime.appId || \"app\";\n}\n\nasync function fetchWithTimeout(\n optionsUrl: string,\n options: {\n method?: ProviderApiMethod;\n headers?: Record<string, string>;\n body?: BodyInit;\n timeoutMs?: number;\n maxBytes?: number;\n secretValues?: string[];\n quota?: ProviderApiFetchQuotaOptions;\n },\n): Promise<ProviderApiHttpResponse> {\n const runOnce = async (): Promise<ProviderApiHttpResponse> => {\n const controller = new AbortController();\n const timeoutMs = clampTimeout(options.timeoutMs);\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n const method = options.method ?? \"GET\";\n const secretValues = options.secretValues ?? [];\n try {\n const dispatcher = (await createSsrfSafeDispatcher()) ?? undefined;\n const fetchOptions: RequestInit & { dispatcher?: unknown } = {\n method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n redirect: \"manual\",\n };\n if (dispatcher) fetchOptions.dispatcher = dispatcher;\n try {\n return await fetchProviderResponse(optionsUrl, fetchOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n } catch (error) {\n if (dispatcher && isDispatcherCompatibilityError(error)) {\n const fallbackOptions = { ...fetchOptions };\n delete fallbackOptions.dispatcher;\n return await fetchProviderResponse(optionsUrl, fallbackOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n }\n throw error;\n }\n } catch (error) {\n throw normalizeFetchError(error, {\n method,\n url: optionsUrl,\n timeoutMs,\n secretValues,\n });\n } finally {\n clearTimeout(timeout);\n }\n };\n\n if (options.quota) {\n return executeWithProviderQuota({\n request: {\n identity: options.quota.identity,\n method: options.quota.method,\n target: options.quota.target,\n requestKey: options.quota.requestKey,\n },\n execute: runOnce,\n inspect: (result) => ({\n status: result.status,\n headers: result.headers,\n }),\n buildQuotaExhaustedResult: providerQuotaExhaustedResponse,\n });\n }\n\n return runOnce();\n}\n\nfunction providerQuotaExhaustedResponse(\n detail: ProviderQuotaExhaustedDetail,\n): ProviderApiHttpResponse {\n const retryAfterSeconds = Math.max(0, Math.ceil(detail.retryAfterMs / 1000));\n return {\n status: 429,\n statusText: \"Provider quota cooldown\",\n ok: false,\n elapsedMs: 0,\n headers: {\n \"retry-after\": String(retryAfterSeconds),\n \"x-agent-native-provider-quota\": \"exhausted\",\n },\n contentType: \"application/json\",\n size: 0,\n truncated: false,\n json: {\n error: \"provider_quota_exhausted\",\n provider: detail.providerId,\n message:\n `Provider API quota is cooling down for ${detail.providerId}. ` +\n `Retry after ${detail.retryAt}.`,\n retryAt: detail.retryAt,\n retryAfterMs: detail.retryAfterMs,\n reason: detail.reason,\n method: detail.method,\n target: detail.target,\n },\n quota: {\n exhausted: true,\n providerId: detail.providerId,\n retryAfterMs: detail.retryAfterMs,\n retryAt: detail.retryAt,\n reason: detail.reason,\n },\n };\n}\n\nasync function fetchProviderResponse(\n url: string,\n fetchOptions: RequestInit & { dispatcher?: unknown },\n options: {\n maxBytes?: number;\n secretValues: string[];\n },\n): Promise<ProviderApiHttpResponse> {\n const startedAt = Date.now();\n const res = await fetch(url, fetchOptions);\n const elapsedMs = Date.now() - startedAt;\n const rawText = await readResponseTextWithLimit(\n res,\n clampMaxBytes(options.maxBytes),\n );\n const redactedText = redactString(rawText.text, options.secretValues);\n const parsed = tryParseJson(redactedText);\n return {\n status: res.status,\n statusText: res.statusText,\n ok: res.ok,\n elapsedMs,\n headers: redactSecrets(headersToObject(res.headers), options.secretValues),\n contentType: res.headers.get(\"content-type\") ?? null,\n size: rawText.size,\n truncated: rawText.truncated,\n text: parsed === undefined ? redactedText : undefined,\n json: parsed,\n };\n}\n\nfunction isDispatcherCompatibilityError(error: unknown): boolean {\n const err = error as {\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n const code = typeof err?.cause?.code === \"string\" ? err.cause.code : \"\";\n const detail = [\n typeof err?.message === \"string\" ? err.message : \"\",\n typeof err?.cause?.message === \"string\" ? err.cause.message : \"\",\n ]\n .join(\" \")\n .toLowerCase();\n return (\n code === \"UND_ERR_INVALID_ARG\" &&\n detail.includes(\"invalid onrequeststart method\")\n );\n}\n\nfunction normalizeFetchError(\n error: unknown,\n options: {\n method: ProviderApiMethod;\n url: string;\n timeoutMs: number;\n secretValues: string[];\n },\n): Error {\n const target = describeProviderRequestTarget(\n options.url,\n options.secretValues,\n );\n const err = error as {\n name?: unknown;\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n if (err?.name === \"AbortError\") {\n return new Error(\n `Provider API request timed out after ${options.timeoutMs}ms: ${options.method} ${target}`,\n { cause: error },\n );\n }\n\n const causeCode =\n typeof err?.cause?.code === \"string\" && err.cause.code\n ? ` (${err.cause.code})`\n : \"\";\n const detail =\n typeof err?.cause?.message === \"string\" && err.cause.message\n ? err.cause.message\n : typeof err?.message === \"string\" && err.message\n ? err.message\n : String(error);\n return new Error(\n `Provider API request failed${causeCode}: ${options.method} ${target}: ${redactString(detail, options.secretValues)}`,\n { cause: error },\n );\n}\n\nfunction describeProviderRequestTarget(\n rawUrl: string,\n secretValues: string[],\n): string {\n try {\n const url = new URL(rawUrl);\n return redactString(\n `${url.host}${url.pathname}${url.search}`,\n secretValues,\n );\n } catch {\n return redactString(rawUrl, secretValues);\n }\n}\n\nasync function readResponseTextWithLimit(\n response: Response,\n maxBytes: number,\n): Promise<{ text: string; truncated: boolean; size: number }> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength && Number(contentLength) > maxBytes) {\n return {\n text: `(response too large - ${contentLength} bytes, max ${maxBytes})`,\n truncated: true,\n size: Number(contentLength),\n };\n }\n const buffer = await response.arrayBuffer();\n const size = buffer.byteLength;\n const bytes = new Uint8Array(buffer.slice(0, maxBytes));\n return {\n text: new TextDecoder().decode(bytes),\n truncated: size > maxBytes,\n size,\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n if (key.toLowerCase() !== \"set-cookie\") result[key] = value;\n });\n return result;\n}\n\nfunction tryParseJson(text: string): unknown | undefined {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return undefined;\n try {\n return JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n}\n\nfunction redactSecrets<T>(value: T, secretValues: string[]): T {\n if (secretValues.length === 0) return value;\n if (typeof value === \"string\") return redactString(value, secretValues) as T;\n if (Array.isArray(value)) {\n return value.map((item) => redactSecrets(item, secretValues)) as T;\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactSecrets(entry, secretValues),\n ]),\n ) as T;\n }\n return value;\n}\n\nfunction redactString(text: string, secretValues: string[]): string {\n let output = text;\n for (const secret of [...secretValues].sort((a, b) => b.length - a.length)) {\n if (!secret) continue;\n output = output.split(secret).join(\"[redacted]\");\n try {\n output = output.split(encodeURIComponent(secret)).join(\"[redacted]\");\n } catch {}\n }\n return output;\n}\n\nfunction mergeQueryObjects(\n base: unknown,\n extra: Record<string, string>,\n): unknown {\n if (!base) return extra;\n if (typeof base === \"string\") {\n const params = new URLSearchParams(base.replace(/^\\?/, \"\"));\n for (const [key, value] of Object.entries(extra)) {\n params.set(key, value);\n }\n return params.toString();\n }\n if (typeof base === \"object\" && !Array.isArray(base)) {\n return { ...(base as Record<string, unknown>), ...extra };\n }\n return extra;\n}\n\nfunction setValueAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\nfunction clampTimeout(timeoutMs: number | undefined): number {\n if (!Number.isFinite(timeoutMs)) return DEFAULT_TIMEOUT_MS;\n return Math.max(1_000, Math.min(MAX_TIMEOUT_MS, Math.floor(timeoutMs!)));\n}\n\nfunction clampMaxBytes(maxBytes: number | undefined): number {\n if (!Number.isFinite(maxBytes)) return DEFAULT_MAX_BYTES;\n return Math.max(1_000, Math.min(MAX_MAX_BYTES, Math.floor(maxBytes!)));\n}\n\n/** Resolve a dot-path from a parsed JSON object, e.g. \"meta.next_cursor\". */\nfunction dotGet(obj: unknown, path: string): unknown {\n if (!path) return obj;\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Handle saveToFile: write the full provider-api response body to a workspace\n * file and return a compact summary.\n */\nasync function handleSaveToFile(\n filePath: string,\n responseText: string,\n contentType: string | null,\n status: number,\n): Promise<unknown> {\n const { writeWorkspaceFile, SAVE_TO_FILE_MAX_BYTES: maxSaveBytes } =\n await import(\"../workspace-files/store.js\");\n const { getRequestOrgId, getRequestUserEmail } =\n await import(\"../server/request-context.js\");\n\n const orgId = getRequestOrgId();\n const email = getRequestUserEmail();\n const scope = orgId\n ? { scope: \"org\" as const, scopeId: orgId }\n : email\n ? { scope: \"user\" as const, scopeId: email }\n : null;\n\n if (!scope) {\n throw new Error(\n \"saveToFile requires an authenticated request context (no user email or orgId found).\",\n );\n }\n\n const mimeType = contentType?.split(\";\")[0].trim() ?? \"text/plain\";\n await writeWorkspaceFile(scope, filePath, responseText, mimeType, {\n maxFileBytes: maxSaveBytes,\n });\n const bytes = Buffer.byteLength(responseText, \"utf8\");\n const preview = responseText.slice(0, 2000);\n return {\n savedToFile: true,\n savedTo: filePath,\n status,\n bytes,\n contentType: mimeType,\n preview: preview.length < responseText.length ? `${preview}…` : preview,\n };\n}\n\n/**\n * Execute paginated requests, accumulating items across pages.\n * Returns the accumulated items array and the last response for metadata.\n */\nasync function fetchAllPages(\n config: FetchAllPagesConfig,\n executeOnePage: (extra?: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n }) => Promise<{\n text: string;\n contentType: string | null;\n status: number;\n ok: boolean;\n }>,\n): Promise<{\n items: unknown[];\n pageCount: number;\n lastStatus: number;\n lastContentType: string | null;\n truncated: boolean;\n nextCursor: string | null;\n}> {\n const maxPages = Math.min(\n Number.isFinite(config.maxPages) && config.maxPages! > 0\n ? config.maxPages!\n : 10,\n FETCH_ALL_PAGES_MAX,\n );\n\n const items: unknown[] = [];\n let cursor: string | undefined;\n let pageCount = 0;\n let lastStatus = 0;\n let lastContentType: string | null = null;\n let truncated = false;\n\n if (!config.cursorParam && !config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages requires cursorParam or cursorBodyPath to send the next cursor.\",\n );\n }\n if (config.cursorParam && config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages accepts exactly one cursor method: cursorParam or cursorBodyPath.\",\n );\n }\n\n while (pageCount < maxPages) {\n const extra: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n } = {};\n if (cursor) {\n if (config.cursorParam) extra.query = { [config.cursorParam]: cursor };\n if (config.cursorBodyPath) {\n extra.bodyCursor = { path: config.cursorBodyPath, value: cursor };\n }\n }\n\n const page = await executeOnePage(pageCount > 0 ? extra : undefined);\n lastStatus = page.status;\n lastContentType = page.contentType;\n pageCount++;\n\n if (!page.ok) {\n const preview = page.text.replace(/\\s+/g, \" \").trim().slice(0, 500);\n throw new Error(\n `fetchAllPages request failed with HTTP ${page.status}${\n preview ? `: ${preview}` : \"\"\n }`,\n );\n }\n\n let body: unknown;\n try {\n body = JSON.parse(page.text);\n } catch {\n body = page.text;\n }\n\n // Extract items\n if (config.itemsPath) {\n const extracted = dotGet(body, config.itemsPath);\n if (Array.isArray(extracted)) {\n items.push(...extracted);\n } else if (extracted !== undefined) {\n items.push(extracted);\n }\n } else {\n items.push(body);\n }\n\n // Extract next cursor\n const nextCursor = dotGet(body, config.cursorPath);\n if (\n !nextCursor ||\n nextCursor === \"\" ||\n nextCursor === null ||\n nextCursor === cursor\n ) {\n truncated = false;\n break;\n }\n cursor = String(nextCursor);\n truncated = pageCount >= maxPages;\n }\n\n return {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor: truncated ? (cursor ?? null) : null,\n };\n}\n\nfunction fingerprint(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nfunction base64UrlEncodeString(value: string): string {\n return base64UrlEncode(new TextEncoder().encode(value));\n}\n\nfunction pemToPkcs8(pem: string): Uint8Array {\n const body = pem\n .replace(/-----BEGIN [^-]+-----/g, \"\")\n .replace(/-----END [^-]+-----/g, \"\")\n .replace(/\\s+/g, \"\");\n const binary = atob(body);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n out[i] = binary.charCodeAt(i);\n }\n return out;\n}\n\nconst keyCache = new Map<string, Promise<CryptoKey>>();\n\nasync function privateKeyCacheKey(privateKeyPem: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(privateKeyPem) as BufferSource,\n );\n return `sha256:${base64UrlEncode(new Uint8Array(digest))}`;\n}\n\nasync function importRs256Key(privateKeyPem: string): Promise<CryptoKey> {\n const cacheKey = await privateKeyCacheKey(privateKeyPem);\n let cached = keyCache.get(cacheKey);\n if (!cached) {\n cached = crypto.subtle.importKey(\n \"pkcs8\",\n pemToPkcs8(privateKeyPem) as BufferSource,\n { name: \"RSASSA-PKCS1-v1_5\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n keyCache.set(cacheKey, cached);\n }\n return cached;\n}\n\nasync function signRs256Jwt(\n payload: Record<string, unknown>,\n privateKeyPem: string,\n): Promise<string> {\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const signingInput = `${base64UrlEncodeString(\n JSON.stringify(header),\n )}.${base64UrlEncodeString(JSON.stringify(payload))}`;\n\n const key = await importRs256Key(privateKeyPem);\n const signature = await crypto.subtle.sign(\n \"RSASSA-PKCS1-v1_5\",\n key,\n new TextEncoder().encode(signingInput) as BufferSource,\n );\n\n return `${signingInput}.${base64UrlEncode(new Uint8Array(signature))}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type { WorkspaceConnectionTemplateUse } from \"../connections/catalog.js\";\nimport {\n describeCredentialScopeGap,\n resolveCredential,\n type CredentialContext,\n} from \"../credentials/index.js\";\nimport {\n createSsrfSafeDispatcher,\n isBlockedExtensionUrlWithDns,\n} from \"../extensions/url-safety.js\";\nimport {\n processWebContent,\n type WebContentSearchOptions,\n type WebExtractMode,\n type WebResponseMode,\n} from \"../extensions/web-content.js\";\nimport {\n deleteOAuthTokens,\n listOAuthAccountsByOwner,\n saveOAuthTokens,\n} from \"../oauth-tokens/index.js\";\nimport { resolveSecret } from \"../server/credential-provider.js\";\nimport { resolveGoogleProviderCredentialCandidates } from \"../server/google-oauth-credentials.js\";\nimport { getCredentialContext } from \"../server/request-context.js\";\nimport { mergeDefinitionsById } from \"../shared/merge-by-id.js\";\nimport { resolveWorkspaceConnectionCredentialForApp } from \"../workspace-connections/credentials.js\";\nimport { resolveWorkspaceConnectionForApp } from \"../workspace-connections/store.js\";\nimport type {\n CustomProviderConfig,\n CustomProviderAuthKind,\n} from \"./custom-registry.js\";\nimport {\n createProviderQuotaIdentity,\n createProviderRequestDedupeKey,\n executeWithProviderQuota,\n type ProviderQuotaIdentity,\n type ProviderQuotaExhaustedDetail,\n} from \"./quota-governor.js\";\n\nexport type {\n CustomProviderConfig,\n CustomProviderScope,\n CustomProviderAuthKind,\n UpsertCustomProviderArgs,\n} from \"./custom-registry.js\";\nexport {\n upsertCustomProvider,\n deleteCustomProvider,\n listCustomProviders,\n getCustomProvider,\n validateCustomBaseUrl,\n assertCanMutateCustomProviderScope,\n CustomProviderAuthError,\n} from \"./custom-registry.js\";\n\nexport const PROVIDER_API_IDS = [\n \"amplitude\",\n \"apollo\",\n \"bigquery\",\n \"clay\",\n \"commonroom\",\n \"dataforseo\",\n \"ga4\",\n \"gcloud\",\n \"github\",\n \"figma\",\n \"gmail\",\n \"gong\",\n \"google_calendar\",\n \"google_drive\",\n \"google_slides\",\n \"granola\",\n \"grafana\",\n \"hubspot\",\n \"salesforce\",\n \"jira\",\n \"mixpanel\",\n \"notion\",\n \"posthog\",\n \"prometheus\",\n \"pylon\",\n \"sentry\",\n \"slack\",\n \"stripe\",\n \"twitter\",\n] as const;\n\nexport type ProviderApiId = (typeof PROVIDER_API_IDS)[number];\n\nexport type ProviderApiMethod =\n | \"GET\"\n | \"POST\"\n | \"PUT\"\n | \"PATCH\"\n | \"DELETE\"\n | \"HEAD\";\n\n/** Cursor-pagination config for fetchAllPages. */\nexport interface FetchAllPagesConfig {\n /**\n * Dot-path into the JSON response body where the next-page cursor lives,\n * e.g. \"meta.next_cursor\" or \"pagination.next_page_token\".\n */\n cursorPath: string;\n /**\n * Query parameter name to pass the cursor on the next request,\n * e.g. \"cursor\" or \"page_token\".\n */\n cursorParam?: string;\n /**\n * Dot-path in the JSON request body to set to the cursor on the next request.\n * Use this for POST-body pagination, e.g. Gong's top-level `cursor`.\n */\n cursorBodyPath?: string;\n /**\n * Dot-path to the items array in each response body.\n * When omitted, the whole response body is appended to the items array.\n */\n itemsPath?: string;\n /**\n * Maximum number of pages to fetch. Default 10, max 50.\n */\n maxPages?: number;\n}\n\nexport interface ProviderApiRequestArgs {\n provider: ProviderApiId | string;\n method?: ProviderApiMethod;\n path: string;\n query?: unknown;\n headers?: Record<string, unknown>;\n body?: unknown;\n auth?: \"default\" | \"none\";\n timeoutMs?: number;\n maxBytes?: number;\n connectionId?: string | null;\n accountId?: string | null;\n /**\n * When set, write the full response body to this workspace file path instead\n * of returning it in context. Returns a compact summary with status, bytes,\n * path, and a preview. Allows up to 20 MB (vs the normal 4 MB context limit).\n */\n saveToFile?: string;\n /**\n * When set, automatically paginate by cursor until the cursor field is empty\n * or maxPages is reached. Accumulates items from itemsPath (or whole bodies)\n * across all pages. Combine with saveToFile to write the full dataset.\n */\n fetchAllPages?: FetchAllPagesConfig;\n}\n\nexport interface GitHubRepositoryRef {\n owner: string;\n repo: string;\n}\n\nexport interface GitHubRepositoryFileEntry {\n name: string;\n path: string;\n type: \"file\" | \"dir\" | \"symlink\" | \"submodule\" | \"unknown\";\n sha: string | null;\n size: number | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n}\n\nexport interface GitHubRepositoryFileListArgs extends GitHubRepositoryRef {\n path?: string;\n ref?: string;\n recursive?: boolean;\n includeDirectories?: boolean;\n maxFiles?: number;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileSearchArgs extends GitHubRepositoryRef {\n query?: string;\n path?: string;\n filename?: string;\n extension?: string;\n language?: string;\n ref?: string;\n perPage?: number;\n page?: number;\n maxFiles?: number;\n includeTextMatches?: boolean;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileReadArgs extends GitHubRepositoryRef {\n path: string;\n ref?: string;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileWriteArgs extends GitHubRepositoryRef {\n path: string;\n content: string;\n message: string;\n branch?: string;\n sha?: string;\n overwriteExisting?: boolean;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryFileDeleteArgs extends GitHubRepositoryRef {\n path: string;\n message: string;\n branch?: string;\n sha?: string;\n committer?: GitHubRepositoryCommitIdentity;\n author?: GitHubRepositoryCommitIdentity;\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n}\n\nexport interface GitHubRepositoryCommitIdentity {\n name: string;\n email: string;\n date?: string;\n}\n\nexport interface GitHubRepositoryFileListResult {\n repository: GitHubRepositoryRef;\n ref: string | null;\n path: string;\n recursive: boolean;\n entries: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n providerTruncated: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileSearchResult {\n repository: GitHubRepositoryRef;\n mode: \"code-search\" | \"tree-filter\";\n query: string | null;\n ref: string | null;\n items: GitHubRepositoryFileEntry[];\n totalCount: number;\n truncated: boolean;\n incompleteResults: boolean;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileReadResult {\n repository: GitHubRepositoryRef;\n path: string;\n ref: string | null;\n name: string;\n type: string;\n sha: string;\n size: number;\n encoding: string | null;\n content: string | null;\n contentBase64: string | null;\n url: string | null;\n htmlUrl: string | null;\n downloadUrl: string | null;\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileWriteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n content: {\n name: string | null;\n path: string | null;\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n };\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface GitHubRepositoryFileDeleteResult {\n repository: GitHubRepositoryRef;\n path: string;\n branch: string | null;\n commit: {\n sha: string | null;\n url: string | null;\n htmlUrl: string | null;\n message: string | null;\n };\n response: Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\">;\n}\n\nexport interface ProviderApiDocsOptions {\n provider: ProviderApiId | string;\n url?: string;\n maxBytes?: number;\n maxChars?: number;\n responseMode?: WebResponseMode;\n extract?: WebExtractMode;\n includeLinks?: boolean;\n search?: WebContentSearchOptions;\n}\n\nexport type ProviderApiAuthKind =\n | { type: \"none\" }\n | {\n type: \"bearer\";\n keys: readonly string[];\n workspaceProvider?: string;\n }\n | {\n type: \"basic\";\n usernameKey: string;\n passwordKey: string;\n workspaceProvider?: string;\n }\n | {\n type: \"basic-raw\";\n key: string;\n workspaceProvider?: string;\n }\n | {\n type: \"api-key-header\";\n key: string;\n header: string;\n workspaceProvider?: string;\n }\n | {\n type: \"google-service-account\";\n scopes: readonly string[];\n }\n | {\n type: \"oauth-bearer\";\n oauthProvider: string;\n tokenLabel: string;\n workspaceProvider?: string;\n }\n | {\n type: \"oauth-bearer-or-api-key-header\";\n oauthProvider: string;\n tokenLabel: string;\n key: string;\n fallbackKeys?: readonly string[];\n header: string;\n workspaceProvider: string;\n }\n | {\n type: \"oauth-bearer-or-bearer-key\";\n oauthProvider: string;\n tokenLabel: string;\n key: string;\n fallbackKeys?: readonly string[];\n workspaceProvider: string;\n }\n | {\n type: \"oauth-bearer-or-basic\";\n oauthProvider: string;\n tokenLabel: string;\n usernameKey: string;\n passwordKey: string;\n workspaceProvider: string;\n }\n | {\n type: \"prometheus\";\n };\n\nexport interface ProviderApiConfig {\n id: ProviderApiId;\n label: string;\n defaultBaseUrl: string;\n requiresConnectionId?: boolean;\n baseUrlCredentialKey?: string;\n auth: ProviderApiAuthKind;\n credentialKeys: readonly string[];\n docsUrls: readonly string[];\n specUrls?: readonly string[];\n allowedHostSuffixes?: readonly string[];\n defaultHeaders?: Record<string, string>;\n placeholders?: readonly ProviderApiPlaceholder[];\n examples?: readonly ProviderApiExample[];\n notes?: readonly string[];\n accessErrorGuidance?: string;\n corpusRecipes?: readonly ProviderApiCorpusRecipe[];\n templateUses?: readonly WorkspaceConnectionTemplateUse[];\n}\n\nexport interface ProviderApiPlaceholder {\n name: string;\n credentialKey: string;\n label: string;\n}\n\nexport interface ProviderApiExample {\n label: string;\n method: ProviderApiMethod;\n path: string;\n query?: unknown;\n body?: unknown;\n}\n\nexport interface ProviderApiCorpusRecipe {\n label: string;\n useWhen: string;\n workflow: readonly string[];\n request: {\n method: ProviderApiMethod;\n path: string;\n body?: unknown;\n query?: unknown;\n };\n pagination?: {\n itemsPath?: string;\n nextCursorPath?: string;\n cursorParam?: string;\n cursorBodyPath?: string;\n pageParam?: string;\n offsetParam?: string;\n pageSize?: number;\n maxPages?: number;\n };\n batch?: {\n inputValuePath?: string;\n itemBodyPath?: string;\n itemQueryParam?: string;\n responseItemsPath?: string;\n batchSize?: number;\n };\n search?: {\n textPaths?: readonly string[];\n idPaths?: readonly string[];\n metadataPaths?: readonly string[];\n };\n}\n\nexport interface ProviderApiResolvedCredential {\n key: string;\n value: string;\n source: string;\n provider: string;\n connectionId?: string;\n connectionLabel?: string;\n accountId?: string;\n accountLabel?: string | null;\n scope?: string;\n}\n\nexport interface ProviderApiCredentialLookupOptions {\n appId: string;\n provider: string;\n key: string;\n ctx: CredentialContext;\n workspaceProvider?: string;\n connectionId?: string | null;\n localCredentialSource: string;\n}\n\nexport type ProviderApiCredentialResolver = (\n options: ProviderApiCredentialLookupOptions,\n) => Promise<ProviderApiResolvedCredential | null>;\n\nexport interface ProviderApiRuntimeOptions {\n appId: string;\n providerIds?: readonly (ProviderApiId | string)[];\n /** App-owned definitions replace matching built-ins by id without dropping other providers. */\n providerOverrides?: readonly ProviderApiConfig[];\n localCredentialSource?: string;\n getCredentialContext?: () => CredentialContext | null;\n resolveCredential?: ProviderApiCredentialResolver;\n /**\n * Template-specific OAuth token provider overrides for built-in provider API\n * configs. Use when an app stores a provider's OAuth grant under a narrower\n * local provider id, e.g. Google Drive scoped to a \"google-docs\" connection.\n */\n oauthProviderOverrides?: Record<string, string>;\n /**\n * Optional loader for custom providers registered at runtime. When provided,\n * custom providers are merged with the static built-in registry for catalog,\n * docs, and request operations. Custom providers cannot shadow built-in ids.\n */\n getCustomProviders?: () => Promise<CustomProviderConfig[]>;\n}\n\nexport interface ProviderApiRuntime {\n providerIds: readonly ProviderApiId[];\n listCatalog(\n provider?: ProviderApiId | string,\n ): ReturnType<typeof listProviderApiCatalog> | Promise<unknown[]>;\n fetchDocs(options: ProviderApiDocsOptions): Promise<unknown>;\n executeRequest(args: ProviderApiRequestArgs): Promise<unknown>;\n resolveOAuthAccessToken(args: {\n provider: ProviderApiId;\n connectionId?: string | null;\n accountId?: string | null;\n }): Promise<ProviderApiOAuthAccessToken>;\n listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n ): Promise<GitHubRepositoryFileListResult>;\n searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n ): Promise<GitHubRepositoryFileSearchResult>;\n readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n ): Promise<GitHubRepositoryFileReadResult>;\n writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n ): Promise<GitHubRepositoryFileWriteResult>;\n deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n ): Promise<GitHubRepositoryFileDeleteResult>;\n}\n\nexport interface ProviderApiOAuthAccessToken {\n accessToken: string;\n accountId: string | null;\n accountLabel: string | null;\n connectionId: string | null;\n connectionLabel: string | null;\n}\n\ninterface ResolvedAuth {\n headers: Record<string, string>;\n credentialSources: Array<Omit<ProviderApiResolvedCredential, \"value\">>;\n secretValues: string[];\n}\n\ninterface ProviderApiHttpResponse {\n status: number;\n statusText: string;\n ok: boolean;\n elapsedMs: number;\n headers: Record<string, string>;\n contentType: string | null;\n size: number;\n truncated: boolean;\n text?: string;\n json?: unknown;\n quota?: {\n exhausted: boolean;\n providerId: string;\n retryAfterMs: number;\n retryAt: string;\n reason: string;\n };\n}\n\ninterface ProviderApiFetchQuotaOptions {\n identity: ProviderQuotaIdentity;\n method: ProviderApiMethod;\n target: string;\n requestKey?: string;\n}\n\ninterface OAuthTokens {\n access_token?: string;\n accessToken?: string;\n refresh_token?: string;\n refreshToken?: string;\n expiry_date?: number;\n expiresAt?: number;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n}\n\nconst PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS = new Set([\n \"invalid_grant\",\n \"unauthorized_client\",\n \"invalid_client\",\n]);\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 120_000;\nconst DEFAULT_MAX_BYTES = 1024 * 1024;\nconst MAX_MAX_BYTES = 4 * 1024 * 1024;\n/** When saveToFile is used, allow a much larger per-page response since the\n * content won't enter the model's context window. */\nconst SAVE_TO_FILE_MAX_BYTES = 20 * 1024 * 1024; // 20 MB\nconst FETCH_ALL_PAGES_MAX = 50;\nconst HEADER_NAME_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\nconst BLOCKED_OUTBOUND_HEADERS = new Set([\n \"connection\",\n \"content-length\",\n \"cookie\",\n \"forwarded\",\n \"host\",\n \"keep-alive\",\n \"origin\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"referer\",\n \"set-cookie\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n]);\n\nconst PROVIDER_CONFIGS: Record<ProviderApiId, ProviderApiConfig> = {\n amplitude: {\n id: \"amplitude\",\n label: \"Amplitude\",\n defaultBaseUrl: \"https://amplitude.com/api/2\",\n auth: {\n type: \"basic\",\n usernameKey: \"AMPLITUDE_API_KEY\",\n passwordKey: \"AMPLITUDE_SECRET_KEY\",\n },\n credentialKeys: [\"AMPLITUDE_API_KEY\", \"AMPLITUDE_SECRET_KEY\"],\n docsUrls: [\"https://amplitude.com/docs/apis\"],\n allowedHostSuffixes: [\"amplitude.com\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Export events\",\n method: \"GET\",\n path: \"/export?start=20260601T00&end=20260602T00\",\n },\n ],\n },\n apollo: {\n id: \"apollo\",\n label: \"Apollo\",\n defaultBaseUrl: \"https://api.apollo.io\",\n auth: {\n type: \"api-key-header\",\n key: \"APOLLO_API_KEY\",\n header: \"x-api-key\",\n },\n credentialKeys: [\"APOLLO_API_KEY\"],\n docsUrls: [\"https://docs.apollo.io/reference/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n {\n label: \"Search people\",\n method: \"POST\",\n path: \"/api/v1/mixed_people/search\",\n body: { q_keywords: \"vp marketing\", page: 1, per_page: 10 },\n },\n ],\n },\n bigquery: {\n id: \"bigquery\",\n label: \"BigQuery REST API\",\n defaultBaseUrl: \"https://bigquery.googleapis.com/bigquery/v2\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/bigquery/docs/reference/rest\"],\n specUrls: [\"https://bigquery.googleapis.com/$discovery/rest?version=v2\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured BigQuery project ID\",\n },\n ],\n examples: [\n {\n label: \"List datasets\",\n method: \"GET\",\n path: \"/projects/{projectId}/datasets\",\n },\n {\n label: \"Run query\",\n method: \"POST\",\n path: \"/projects/{projectId}/queries\",\n body: { query: \"SELECT 1\", useLegacySql: false },\n },\n ],\n },\n clay: {\n id: \"clay\",\n label: \"Clay Public API\",\n defaultBaseUrl: \"https://api.clay.com/public/v0\",\n auth: {\n type: \"api-key-header\",\n key: \"CLAY_PUBLIC_API_KEY\",\n header: \"clay-api-key\",\n },\n credentialKeys: [\"CLAY_PUBLIC_API_KEY\"],\n docsUrls: [\n \"https://developers.clay.com/llms.txt\",\n \"https://developers.clay.com/public-api/authentication\",\n \"https://developers.clay.com/concepts/execution-model.md\",\n ],\n specUrls: [\"https://developers.clay.com/openapi.json\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Get authenticated user and workspace\",\n method: \"GET\",\n path: \"/me\",\n },\n {\n label: \"List people search filter fields\",\n method: \"GET\",\n path: \"/search/filters-mode/fields\",\n query: { source_type: \"people\" },\n },\n {\n label: \"Create a people search\",\n method: \"POST\",\n path: \"/search/filters-mode\",\n body: {\n source_type: \"people\",\n filters: {\n job_title_keywords: [\"software engineer\"],\n location_cities_include: [\"New York\"],\n },\n },\n },\n ],\n notes: [\n \"Clay is a GTM provider API capability, not a messaging channel.\",\n \"The Public API key is tied to a Clay user and workspace. It is separate from the optional local clay CLI/MCP session created by clay login; hosted Agent Native access does not require that plugin session.\",\n \"Search results use a stateful forward-only iterator: repeat POST /search/filters-mode/{search_id}/run while has_more is true.\",\n \"The Tables API is query-only, requires an Enterprise plan, and needs a known table id; the Public API does not list, create, or update tables.\",\n \"Routine runs are asynchronous. Start a run, then poll the documented results endpoint or use a verified completion webhook.\",\n ],\n },\n commonroom: {\n id: \"commonroom\",\n label: \"Common Room\",\n defaultBaseUrl: \"https://api.commonroom.io/community/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"COMMONROOM_API_TOKEN\"],\n },\n credentialKeys: [\"COMMONROOM_API_TOKEN\"],\n docsUrls: [\"https://developer.commonroom.io/reference/overview\"],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List members\", method: \"GET\", path: \"/members\" }],\n },\n dataforseo: {\n id: \"dataforseo\",\n label: \"DataForSEO\",\n defaultBaseUrl: \"https://api.dataforseo.com/v3\",\n auth: {\n type: \"basic\",\n usernameKey: \"DATAFORSEO_LOGIN\",\n passwordKey: \"DATAFORSEO_PASSWORD\",\n },\n credentialKeys: [\"DATAFORSEO_LOGIN\", \"DATAFORSEO_PASSWORD\"],\n docsUrls: [\"https://docs.dataforseo.com/v3/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"SERP task post\",\n method: \"POST\",\n path: \"/serp/google/organic/task_post\",\n body: [\n { keyword: \"builder.io\", location_code: 2840, language_code: \"en\" },\n ],\n },\n ],\n },\n ga4: {\n id: \"ga4\",\n label: \"Google Analytics Data API\",\n defaultBaseUrl: \"https://analyticsdata.googleapis.com/v1beta\",\n auth: {\n type: \"google-service-account\",\n scopes: [\"https://www.googleapis.com/auth/analytics.readonly\"],\n },\n credentialKeys: [\"GOOGLE_APPLICATION_CREDENTIALS_JSON\", \"GA4_PROPERTY_ID\"],\n docsUrls: [\n \"https://developers.google.com/analytics/devguides/reporting/data/v1/rest\",\n ],\n specUrls: [\n \"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta\",\n ],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"propertyId\",\n credentialKey: \"GA4_PROPERTY_ID\",\n label: \"Configured GA4 property ID\",\n },\n ],\n examples: [\n {\n label: \"Run report\",\n method: \"POST\",\n path: \"/properties/{propertyId}:runReport\",\n body: {\n dateRanges: [{ startDate: \"30daysAgo\", endDate: \"today\" }],\n metrics: [{ name: \"activeUsers\" }],\n },\n },\n ],\n },\n gcloud: {\n id: \"gcloud\",\n label: \"Google Cloud APIs\",\n defaultBaseUrl: \"https://cloudresourcemanager.googleapis.com\",\n auth: {\n type: \"google-service-account\",\n scopes: [\n \"https://www.googleapis.com/auth/cloud-platform\",\n \"https://www.googleapis.com/auth/monitoring.read\",\n \"https://www.googleapis.com/auth/logging.read\",\n \"https://www.googleapis.com/auth/bigquery\",\n ],\n },\n credentialKeys: [\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"BIGQUERY_PROJECT_ID\",\n ],\n docsUrls: [\"https://cloud.google.com/apis/docs/overview\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"BIGQUERY_PROJECT_ID\",\n label: \"Configured Google Cloud project ID\",\n },\n ],\n examples: [\n {\n label: \"Get project\",\n method: \"GET\",\n path: \"https://cloudresourcemanager.googleapis.com/v1/projects/{projectId}\",\n },\n ],\n },\n github: {\n id: \"github\",\n label: \"GitHub REST API\",\n defaultBaseUrl: \"https://api.github.com\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"github\",\n tokenLabel: \"GitHub OAuth token\",\n key: \"GITHUB_TOKEN\",\n workspaceProvider: \"github\",\n },\n credentialKeys: [\"GITHUB_TOKEN\"],\n docsUrls: [\"https://docs.github.com/rest\"],\n specUrls: [\n \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n ],\n defaultHeaders: {\n Accept: \"application/vnd.github+json\",\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n },\n templateUses: [\"analytics\", \"brain\", \"design\", \"dispatch\"],\n examples: [\n { label: \"Authenticated user\", method: \"GET\", path: \"/user\" },\n { label: \"Search issues\", method: \"GET\", path: \"/search/issues\" },\n ],\n },\n figma: {\n id: \"figma\",\n label: \"Figma REST API\",\n defaultBaseUrl: \"https://api.figma.com/v1\",\n auth: {\n type: \"oauth-bearer-or-api-key-header\",\n oauthProvider: \"figma\",\n tokenLabel: \"Figma OAuth token\",\n key: \"FIGMA_ACCESS_TOKEN\",\n header: \"X-Figma-Token\",\n workspaceProvider: \"figma\",\n },\n credentialKeys: [\"FIGMA_ACCESS_TOKEN\"],\n docsUrls: [\n \"https://developers.figma.com/docs/rest-api/\",\n \"https://developers.figma.com/docs/rest-api/scopes/\",\n \"https://developers.figma.com/docs/rest-api/file-endpoints/\",\n ],\n allowedHostSuffixes: [\"figma.com\"],\n templateUses: [\"design\"],\n examples: [\n {\n label: \"Get file document\",\n method: \"GET\",\n path: \"/files/{fileKey}\",\n },\n {\n label: \"Get exact file nodes\",\n method: \"GET\",\n path: \"/files/{fileKey}/nodes\",\n query: { ids: \"1:2\" },\n },\n {\n label: \"List file components\",\n method: \"GET\",\n path: \"/files/{fileKey}/components\",\n },\n {\n label: \"Render file nodes\",\n method: \"GET\",\n path: \"/images/{fileKey}\",\n query: { ids: \"1:2\", format: \"svg\" },\n },\n ],\n notes: [\n \"Personal access tokens should include current_user:read for validation and file_content:read for file/node imports. Add library_content:read for file libraries, team_library_content:read for team libraries, or library_assets:read for individual published assets only when needed.\",\n \"Enterprise Variables endpoints require file_variables:read; writes additionally require file_variables:write, a Full seat, and edit access.\",\n \"The REST API cannot create arbitrary canvas frames or layers. Use Figma's official OAuth MCP write tools when connected, or export a Design selection as Figma-compatible SVG for visual handoff.\",\n ],\n },\n gmail: {\n id: \"gmail\",\n label: \"Gmail API\",\n defaultBaseUrl: \"https://gmail.googleapis.com/gmail/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/gmail/api/reference/rest\"],\n specUrls: [\"https://gmail.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"List messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n },\n {\n label: \"Search messages\",\n method: \"GET\",\n path: \"/users/me/messages\",\n body: undefined,\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n gong: {\n id: \"gong\",\n label: \"Gong\",\n defaultBaseUrl: \"https://api.gong.io/v2\",\n baseUrlCredentialKey: \"GONG_API_BASE\",\n auth: {\n type: \"basic\",\n usernameKey: \"GONG_ACCESS_KEY\",\n passwordKey: \"GONG_ACCESS_SECRET\",\n },\n credentialKeys: [\"GONG_ACCESS_KEY\", \"GONG_ACCESS_SECRET\", \"GONG_API_BASE\"],\n docsUrls: [\"https://gong.app.gong.io/settings/api/documentation\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [\n { label: \"List calls\", method: \"GET\", path: \"/calls\" },\n {\n label: \"Call transcript\",\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [\"<call-id>\"] } },\n },\n {\n label: \"Calls with parties/content\",\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: {\n exposedFields: {\n parties: true,\n content: { brief: true, keyPoints: true },\n },\n },\n },\n },\n ],\n notes: [\n \"For broad corpus work, call /calls/extensive with provider-api-request and stageAs/saveToFile. Gong returns the next cursor at records.cursor and expects the next cursor in the POST body at cursor, so use pagination { nextCursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for stageAs or fetchAllPages { cursorPath: 'records.cursor', cursorBodyPath: 'cursor' } for saveToFile.\",\n \"Batch transcripts with POST /calls/transcript and body { filter: { callIds: [...] } } after narrowing or staging call ids.\",\n ],\n corpusRecipes: [\n {\n label: \"Batch-search Gong call transcripts from staged call ids\",\n useWhen:\n \"Use when the user asks to search, count, or prove absence across Gong transcript text for a bounded cohort of call ids.\",\n workflow: [\n \"Stage or otherwise collect the exact call ids in scope first.\",\n \"Start provider-corpus-job with mode=batch-search against /calls/transcript.\",\n \"Inject each batch into body path filter.callIds and search responseItemsPath callTranscripts.\",\n \"Search transcript.sentence text fields, then report call-id coverage, batches processed, matches, and gaps.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/transcript\",\n body: { filter: { callIds: [] } },\n },\n batch: {\n inputValuePath: \"id\",\n itemBodyPath: \"filter.callIds\",\n responseItemsPath: \"callTranscripts\",\n batchSize: 20,\n },\n search: {\n textPaths: [\"transcript.sentences.text\", \"transcript\"],\n idPaths: [\"callId\"],\n metadataPaths: [\"callId\"],\n },\n },\n {\n label: \"Stage Gong calls with parties/content\",\n useWhen:\n \"Use when the user needs a complete Gong call cohort before a transcript/message join or coverage-sensitive search.\",\n workflow: [\n \"Call provider-api-request with stageAs and pagination.\",\n \"Use /calls/extensive when party fields or content summaries are needed; use /calls for lightweight metadata.\",\n \"Do not treat staged call metadata as transcript text.\",\n ],\n request: {\n method: \"POST\",\n path: \"/calls/extensive\",\n body: {\n filter: { fromDateTime: \"<iso-date-time>\" },\n contentSelector: { exposedFields: { parties: true } },\n },\n },\n pagination: {\n itemsPath: \"calls\",\n nextCursorPath: \"records.cursor\",\n cursorBodyPath: \"cursor\",\n maxPages: 200,\n },\n },\n ],\n },\n google_calendar: {\n id: \"google_calendar\",\n label: \"Google Calendar API\",\n defaultBaseUrl: \"https://www.googleapis.com/calendar/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/calendar/api/v3/reference\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"calendar\", \"dispatch\", \"mail\"],\n examples: [\n {\n label: \"List calendars\",\n method: \"GET\",\n path: \"/users/me/calendarList\",\n },\n {\n label: \"Search events\",\n method: \"GET\",\n path: \"/calendars/primary/events\",\n },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_drive: {\n id: \"google_drive\",\n label: \"Google Drive API\",\n defaultBaseUrl: \"https://www.googleapis.com/drive/v3\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n workspaceProvider: \"google_drive\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\"https://developers.google.com/drive/api/reference/rest/v3\"],\n specUrls: [\"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\", \"analytics\"],\n examples: [\n { label: \"List files\", method: \"GET\", path: \"/files\" },\n { label: \"Get file metadata\", method: \"GET\", path: \"/files/{fileId}\" },\n ],\n notes: [\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n google_slides: {\n id: \"google_slides\",\n label: \"Google Slides API\",\n defaultBaseUrl: \"https://slides.googleapis.com/v1\",\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"google\",\n tokenLabel: \"Google OAuth token\",\n workspaceProvider: \"google_drive\",\n },\n credentialKeys: [\"GOOGLE_OAUTH_ACCOUNT\"],\n docsUrls: [\n \"https://developers.google.com/workspace/slides/api/reference/rest\",\n ],\n specUrls: [\"https://slides.googleapis.com/$discovery/rest?version=v1\"],\n allowedHostSuffixes: [\"googleapis.com\"],\n templateUses: [\"brain\", \"content\", \"slides\", \"dispatch\"],\n examples: [\n {\n label: \"Get presentation with slides and speaker notes\",\n method: \"GET\",\n path: \"/presentations/{presentationId}\",\n },\n ],\n notes: [\n \"Creative context imports use the non-sensitive drive.file scope. A user must choose each presentation through Google Picker before the Slides API can read it; unrestricted Drive-wide discovery is intentionally unavailable.\",\n \"Uses the current user's stored Google OAuth account. Pass accountId when the user has multiple Google accounts connected.\",\n ],\n },\n granola: {\n id: \"granola\",\n label: \"Granola Public API\",\n defaultBaseUrl: \"https://public-api.granola.ai/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"GRANOLA_API_KEY\"],\n workspaceProvider: \"granola\",\n },\n credentialKeys: [\"GRANOLA_API_KEY\"],\n docsUrls: [\"https://docs.granola.ai/\"],\n templateUses: [\"brain\", \"dispatch\"],\n examples: [\n { label: \"List notes\", method: \"GET\", path: \"/notes\" },\n { label: \"Get note\", method: \"GET\", path: \"/notes/<note-id>\" },\n ],\n },\n grafana: {\n id: \"grafana\",\n label: \"Grafana\",\n defaultBaseUrl: \"https://grafana.example.com\",\n baseUrlCredentialKey: \"GRAFANA_URL\",\n auth: {\n type: \"bearer\",\n keys: [\"GRAFANA_API_TOKEN\"],\n },\n credentialKeys: [\"GRAFANA_URL\", \"GRAFANA_API_TOKEN\"],\n docsUrls: [\"https://grafana.com/docs/grafana/latest/developers/http_api/\"],\n templateUses: [\"analytics\"],\n examples: [\n { label: \"List dashboards\", method: \"GET\", path: \"/api/search\" },\n ],\n },\n hubspot: {\n id: \"hubspot\",\n label: \"HubSpot\",\n defaultBaseUrl: \"https://api.hubapi.com\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"hubspot\",\n tokenLabel: \"HubSpot OAuth token\",\n key: \"HUBSPOT_PRIVATE_APP_TOKEN\",\n fallbackKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n workspaceProvider: \"hubspot\",\n },\n credentialKeys: [\"HUBSPOT_PRIVATE_APP_TOKEN\", \"HUBSPOT_ACCESS_TOKEN\"],\n docsUrls: [\"https://developers.hubspot.com/docs/api/overview\"],\n templateUses: [\"analytics\", \"brain\", \"calendar\", \"mail\", \"dispatch\"],\n examples: [\n {\n label: \"Search deals with any HubSpot CRM filter\",\n method: \"POST\",\n path: \"/crm/v3/objects/deals/search\",\n body: {\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"products\",\n operator: \"CONTAINS_TOKEN\",\n value: \"Publish\",\n },\n ],\n },\n ],\n properties: [\"dealname\", \"products\", \"dealstage\", \"closedate\"],\n limit: 100,\n },\n },\n {\n label: \"List deal property metadata\",\n method: \"GET\",\n path: \"/crm/v3/properties/deals\",\n },\n ],\n },\n salesforce: {\n id: \"salesforce\",\n label: \"Salesforce\",\n defaultBaseUrl: \"https://login.salesforce.com\",\n requiresConnectionId: true,\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: \"salesforce\",\n tokenLabel: \"Salesforce OAuth token\",\n workspaceProvider: \"salesforce\",\n },\n credentialKeys: [\"SALESFORCE_OAUTH_ACCOUNT\"],\n docsUrls: [\n \"https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/\",\n ],\n allowedHostSuffixes: [],\n templateUses: [\"analytics\", \"brain\", \"crm\", \"dispatch\"],\n examples: [\n {\n label: \"List recent Accounts\",\n method: \"GET\",\n path: \"/services/data/v60.0/sobjects/Account\",\n },\n {\n label: \"Query Opportunity records with SOQL\",\n method: \"GET\",\n path: \"/services/data/v60.0/query\",\n query: {\n q: \"SELECT Id, Name, StageName, Amount, CloseDate FROM Opportunity LIMIT 100\",\n },\n },\n ],\n notes: [\n \"Workspace OAuth stores the Salesforce instance URL on the connection. Requests with a connectionId use that instance instead of the login host.\",\n \"CRM templates own object allow-lists, field projections, and API-version selection.\",\n ],\n },\n jira: {\n id: \"jira\",\n label: \"Jira Cloud\",\n defaultBaseUrl: \"https://example.atlassian.net\",\n baseUrlCredentialKey: \"JIRA_BASE_URL\",\n auth: {\n type: \"oauth-bearer-or-basic\",\n oauthProvider: \"jira\",\n tokenLabel: \"Jira\",\n usernameKey: \"JIRA_USER_EMAIL\",\n passwordKey: \"JIRA_API_TOKEN\",\n workspaceProvider: \"jira\",\n },\n credentialKeys: [\"JIRA_BASE_URL\", \"JIRA_USER_EMAIL\", \"JIRA_API_TOKEN\"],\n docsUrls: [\n \"https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/\",\n ],\n specUrls: [\n \"https://dac-static.atlassian.com/cloud/jira/platform/swagger-v3.v3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"JQL search\",\n method: \"GET\",\n path: \"/rest/api/3/search/jql\",\n },\n ],\n },\n mixpanel: {\n id: \"mixpanel\",\n label: \"Mixpanel\",\n defaultBaseUrl: \"https://mixpanel.com/api/query\",\n auth: {\n type: \"basic-raw\",\n key: \"MIXPANEL_SERVICE_ACCOUNT\",\n },\n credentialKeys: [\"MIXPANEL_PROJECT_ID\", \"MIXPANEL_SERVICE_ACCOUNT\"],\n docsUrls: [\"https://developer.mixpanel.com/reference/overview\"],\n allowedHostSuffixes: [\"mixpanel.com\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"MIXPANEL_PROJECT_ID\",\n label: \"Configured Mixpanel project ID\",\n },\n ],\n examples: [\n {\n label: \"Query events\",\n method: \"GET\",\n path: \"/events\",\n },\n ],\n notes: [\n \"Mixpanel uses multiple API hosts. You may pass full URLs for mixpanel.com or data.mixpanel.com endpoints.\",\n ],\n },\n notion: {\n id: \"notion\",\n label: \"Notion\",\n defaultBaseUrl: \"https://api.notion.com/v1\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"notion\",\n tokenLabel: \"Notion OAuth token\",\n key: \"NOTION_API_KEY\",\n workspaceProvider: \"notion\",\n },\n credentialKeys: [\"NOTION_API_KEY\"],\n docsUrls: [\"https://developers.notion.com/reference/intro\"],\n defaultHeaders: { \"Notion-Version\": \"2026-03-11\" },\n templateUses: [\"analytics\", \"brain\", \"content\", \"dispatch\"],\n examples: [{ label: \"Search\", method: \"POST\", path: \"/search\", body: {} }],\n notes: [\n \"The name GET /users/me returns is the label whoever minted the token typed into Notion, so it often names an unrelated product or team. Call it the Notion-side integration label and never restate it as the workspace, app, or product the user is currently in.\",\n ],\n accessErrorGuidance:\n \"Notion 401/403/404 on a specific page or database usually means that object was never shared with the integration, not that the id is wrong or the key is invalid. Fix: open the page or database in Notion, then ••• → Connections → add the integration. When naming the integration, describe it as the Notion-side integration label from GET /users/me and note that it may not match this app or workspace.\",\n corpusRecipes: [\n {\n label: \"Search a Notion data source with complete cursor coverage\",\n useWhen:\n \"Use for coverage-sensitive searches across one known Notion data source's page properties. This does not search page block bodies.\",\n workflow: [\n \"Resolve the exact data source id and apply the narrowest provider-side filter and filter_properties projection first.\",\n \"Start provider-corpus-job with mode=paginated-search and pass next_cursor back as start_cursor in the POST body.\",\n \"Search only the returned properties and report the 10,000-result API ceiling plus any incomplete request_status.\",\n \"For page body text, stage page ids and fetch block children through a separate bounded data program; property search is not body search.\",\n ],\n request: {\n method: \"POST\",\n path: \"/data_sources/<data-source-id>/query\",\n body: { page_size: 100 },\n },\n pagination: {\n itemsPath: \"results\",\n nextCursorPath: \"next_cursor\",\n cursorBodyPath: \"start_cursor\",\n maxPages: 100,\n },\n search: {\n textPaths: [\"properties\"],\n idPaths: [\"id\"],\n metadataPaths: [\"id\", \"url\", \"created_time\", \"last_edited_time\"],\n },\n },\n ],\n },\n posthog: {\n id: \"posthog\",\n label: \"PostHog\",\n defaultBaseUrl: \"https://app.posthog.com\",\n baseUrlCredentialKey: \"POSTHOG_HOST\",\n auth: {\n type: \"bearer\",\n keys: [\"POSTHOG_API_KEY\"],\n },\n credentialKeys: [\"POSTHOG_API_KEY\", \"POSTHOG_PROJECT_ID\", \"POSTHOG_HOST\"],\n docsUrls: [\"https://posthog.com/docs/api\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"projectId\",\n credentialKey: \"POSTHOG_PROJECT_ID\",\n label: \"Configured PostHog project ID\",\n },\n ],\n examples: [\n {\n label: \"Aggregate events with HogQL\",\n method: \"POST\",\n path: \"/api/projects/{projectId}/query/\",\n body: {\n query: {\n kind: \"HogQLQuery\",\n query:\n \"SELECT event, count() AS events FROM events WHERE timestamp >= now() - INTERVAL 7 DAY GROUP BY event ORDER BY events DESC LIMIT 100\",\n },\n },\n },\n ],\n notes: [\n \"Prefer the query endpoint with a bounded HogQL projection or server-side aggregation over paging raw events into the agent context.\",\n ],\n },\n prometheus: {\n id: \"prometheus\",\n label: \"Prometheus\",\n defaultBaseUrl: \"https://prometheus.example.com\",\n baseUrlCredentialKey: \"PROMETHEUS_URL\",\n auth: { type: \"prometheus\" },\n credentialKeys: [\n \"PROMETHEUS_URL\",\n \"PROMETHEUS_USERNAME\",\n \"PROMETHEUS_PASSWORD\",\n \"PROMETHEUS_BEARER_TOKEN\",\n ],\n docsUrls: [\"https://prometheus.io/docs/prometheus/latest/querying/api/\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"Instant query\",\n method: \"GET\",\n path: \"/api/v1/query\",\n },\n ],\n },\n pylon: {\n id: \"pylon\",\n label: \"Pylon\",\n defaultBaseUrl: \"https://api.usepylon.com\",\n auth: {\n type: \"bearer\",\n keys: [\"PYLON_API_KEY\"],\n },\n credentialKeys: [\"PYLON_API_KEY\"],\n docsUrls: [\"https://docs.usepylon.com/pylon-docs/developer/api-reference\"],\n templateUses: [\"analytics\", \"calendar\"],\n examples: [{ label: \"List issues\", method: \"GET\", path: \"/issues\" }],\n },\n sentry: {\n id: \"sentry\",\n label: \"Sentry\",\n defaultBaseUrl: \"https://sentry.io/api/0\",\n auth: {\n type: \"oauth-bearer-or-bearer-key\",\n oauthProvider: \"sentry\",\n tokenLabel: \"Sentry OAuth token\",\n key: \"SENTRY_AUTH_TOKEN\",\n fallbackKeys: [\"SENTRY_AUTH_TOKEN\", \"SENTRY_SERVER_TOKEN\"],\n workspaceProvider: \"sentry\",\n },\n credentialKeys: [\n \"SENTRY_AUTH_TOKEN\",\n \"SENTRY_SERVER_TOKEN\",\n \"SENTRY_ORG_SLUG\",\n ],\n docsUrls: [\"https://docs.sentry.io/api/\"],\n templateUses: [\"analytics\"],\n placeholders: [\n {\n name: \"orgSlug\",\n credentialKey: \"SENTRY_ORG_SLUG\",\n label: \"Configured Sentry organization slug\",\n },\n ],\n examples: [\n {\n label: \"List issues for org\",\n method: \"GET\",\n path: \"/organizations/{orgSlug}/issues/\",\n },\n ],\n },\n slack: {\n id: \"slack\",\n label: \"Slack Web API\",\n defaultBaseUrl: \"https://slack.com/api\",\n auth: {\n type: \"bearer\",\n keys: [\"SLACK_BOT_TOKEN\"],\n workspaceProvider: \"slack\",\n },\n credentialKeys: [\"SLACK_BOT_TOKEN\", \"SLACK_BOT_TOKEN_2\"],\n docsUrls: [\"https://api.slack.com/web\"],\n specUrls: [\n \"https://api.slack.com/specs/openapi/v2/slack_web_openapi_v2_without_examples.json\",\n ],\n templateUses: [\"analytics\", \"brain\", \"dispatch\"],\n examples: [\n { label: \"Search messages\", method: \"GET\", path: \"/search.messages\" },\n { label: \"Post message\", method: \"POST\", path: \"/chat.postMessage\" },\n ],\n notes: [\n \"Bot-token reads must not call conversations.join implicitly. A bot can read only conversations it is already a member of with the required history scope.\",\n \"search.messages requires a compatible user token; do not assume a bot token can use it. Use conversations.history for channel-scoped bot reads.\",\n ],\n corpusRecipes: [\n {\n label: \"Search complete Slack channel history\",\n useWhen:\n \"Use for all-message, mention, phrase, or absence-sensitive searches in one known Slack conversation without one agent turn per cursor page.\",\n workflow: [\n \"Resolve the exact channel id without joining or mutating membership.\",\n \"Start provider-corpus-job with mode=paginated-search against conversations.history, bounded by oldest/latest when possible.\",\n \"Pass response_metadata.next_cursor back as cursor and let quota_wait pause/resume rate-limited installations.\",\n \"Report channel id, time bounds, pages, messages searched, matches, and is_limited or access gaps.\",\n ],\n request: {\n method: \"GET\",\n path: \"/conversations.history\",\n query: { channel: \"<channel-id>\" },\n },\n pagination: {\n itemsPath: \"messages\",\n nextCursorPath: \"response_metadata.next_cursor\",\n cursorParam: \"cursor\",\n maxPages: 500,\n },\n search: {\n textPaths: [\"text\", \"blocks\", \"attachments\"],\n idPaths: [\"ts\", \"client_msg_id\"],\n metadataPaths: [\"ts\", \"user\", \"thread_ts\", \"type\", \"subtype\"],\n },\n },\n ],\n },\n stripe: {\n id: \"stripe\",\n label: \"Stripe\",\n defaultBaseUrl: \"https://api.stripe.com/v1\",\n auth: {\n type: \"bearer\",\n keys: [\"STRIPE_SECRET_KEY\"],\n },\n credentialKeys: [\"STRIPE_SECRET_KEY\"],\n docsUrls: [\"https://docs.stripe.com/api\"],\n specUrls: [\n \"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json\",\n ],\n templateUses: [\"analytics\"],\n examples: [{ label: \"List customers\", method: \"GET\", path: \"/customers\" }],\n },\n twitter: {\n id: \"twitter\",\n label: \"Twitter/X via twitterapi.io\",\n defaultBaseUrl: \"https://api.twitterapi.io\",\n auth: {\n type: \"api-key-header\",\n key: \"TWITTER_BEARER_TOKEN\",\n header: \"X-API-Key\",\n },\n credentialKeys: [\"TWITTER_BEARER_TOKEN\"],\n docsUrls: [\"https://twitterapi.io/docs\"],\n templateUses: [\"analytics\"],\n examples: [\n {\n label: \"User tweets\",\n method: \"GET\",\n path: \"/twitter/user/last_tweets\",\n },\n ],\n },\n};\n\nexport function getProviderApiConfig(\n provider: ProviderApiId | string,\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiConfig {\n const config = mergeProviderApiConfigs(overrides).find(\n (candidate) => candidate.id === provider,\n );\n if (!config) throw new Error(`Unsupported provider API: ${provider}`);\n return config;\n}\n\nexport function mergeProviderApiConfigs(\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiConfig[] {\n for (const override of overrides) {\n if (!isProviderApiId(override.id)) {\n throw new Error(\n `Provider API overrides must replace a built-in id: ${override.id}`,\n );\n }\n }\n return mergeDefinitionsById(Object.values(PROVIDER_CONFIGS), overrides);\n}\n\nexport function isProviderApiId(provider: string): provider is ProviderApiId {\n return Object.prototype.hasOwnProperty.call(PROVIDER_CONFIGS, provider);\n}\n\nexport function listProviderApiIdsForTemplateUse(\n templateUse: WorkspaceConnectionTemplateUse,\n overrides: readonly ProviderApiConfig[] = [],\n): ProviderApiId[] {\n const configs = new Map(\n mergeProviderApiConfigs(overrides).map((config) => [config.id, config]),\n );\n return PROVIDER_API_IDS.filter((id) =>\n (configs.get(id)?.templateUses ?? []).includes(templateUse),\n );\n}\n\nexport function listProviderApiCatalog(\n provider?: ProviderApiId | string,\n options: {\n providerIds?: readonly (ProviderApiId | string)[];\n providerOverrides?: readonly ProviderApiConfig[];\n } = {},\n) {\n const providerIds = normalizeProviderIds(options.providerIds);\n if (provider) {\n assertProviderAllowed(provider, providerIds);\n }\n const configs = provider\n ? [getProviderApiConfig(provider, options.providerOverrides)]\n : providerIds.map((id) =>\n getProviderApiConfig(id, options.providerOverrides),\n );\n return configs.map((config) => ({\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.defaultBaseUrl,\n requiresConnectionId: config.requiresConnectionId ?? false,\n baseUrlCredentialKey: config.baseUrlCredentialKey ?? null,\n auth: describeAuth(config.auth),\n credentialKeys: config.credentialKeys,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n allowedHostSuffixes: config.allowedHostSuffixes ?? [],\n placeholders: config.placeholders ?? [],\n defaultHeaders: config.defaultHeaders ?? {},\n examples: config.examples ?? [],\n notes: config.notes ?? [],\n accessErrorGuidance: config.accessErrorGuidance ?? null,\n corpusRecipes: config.corpusRecipes ?? [],\n templateUses: config.templateUses ?? [],\n }));\n}\n\nexport function createProviderApiRuntime(\n options: ProviderApiRuntimeOptions,\n): ProviderApiRuntime {\n mergeProviderApiConfigs(options.providerOverrides);\n const providerIds = normalizeProviderIds(options.providerIds);\n const runtimeOptions: Required<\n Pick<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\">\n > &\n Omit<ProviderApiRuntimeOptions, \"appId\" | \"localCredentialSource\"> = {\n ...options,\n providerIds,\n localCredentialSource: options.localCredentialSource ?? \"app_local\",\n };\n return {\n providerIds,\n listCatalog: (provider) =>\n listProviderApiCatalogWithCustom(\n provider,\n { providerIds, providerOverrides: options.providerOverrides },\n runtimeOptions,\n ),\n fetchDocs: (docsOptions) =>\n fetchProviderApiDocs(docsOptions, runtimeOptions),\n executeRequest: (args) => executeProviderApiRequest(args, runtimeOptions),\n resolveOAuthAccessToken: (args) =>\n resolveProviderApiOAuthAccessToken(args, runtimeOptions),\n listGitHubRepositoryFiles: (args) =>\n listGitHubRepositoryFiles(args, runtimeOptions),\n searchGitHubRepositoryFiles: (args) =>\n searchGitHubRepositoryFiles(args, runtimeOptions),\n readGitHubRepositoryFile: (args) =>\n readGitHubRepositoryFile(args, runtimeOptions),\n writeGitHubRepositoryFile: (args) =>\n writeGitHubRepositoryFile(args, runtimeOptions),\n deleteGitHubRepositoryFile: (args) =>\n deleteGitHubRepositoryFile(args, runtimeOptions),\n };\n}\n\nexport async function fetchProviderApiDocs(\n options: ProviderApiDocsOptions,\n runtime: ProviderApiRuntimeOptions = { appId: \"app\" },\n) {\n await assertProviderAllowedAsync(options.provider, runtime);\n\n // Resolve config — may be a built-in or a custom provider.\n const builtIn = isProviderApiId(options.provider)\n ? getProviderApiConfig(options.provider, runtime.providerOverrides)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(options.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${options.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const catalog = builtIn\n ? listProviderApiCatalog(options.provider, {\n providerOverrides: runtime.providerOverrides,\n })[0]\n : customProviderToCatalogEntry(customConfig!);\n\n if (!options.url) {\n return {\n provider: options.provider,\n catalog,\n guidance:\n \"provider-api-docs can fetch ANY public http(s) URL — pass url to retrieve API documentation, OpenAPI specs, changelogs, or any public web page. Registered docsUrls above are curated starting points.\",\n };\n }\n\n // Open docs fetching: allow ANY public https/http URL.\n // The SSRF guard still applies — private/internal addresses are blocked.\n let url: URL;\n try {\n url = new URL(options.url);\n } catch {\n throw new Error(`Invalid docs URL: ${options.url}`);\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`Docs URL must use https: or http: (got ${url.protocol})`);\n }\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal docs URL: ${url.href}`);\n }\n\n const response = await fetchWithTimeout(url.href, {\n method: \"GET\",\n maxBytes: clampMaxBytes(options.maxBytes),\n });\n\n const responseBody =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json, null, 2) : \"\");\n const content = processWebContent({\n url: url.href,\n body: responseBody,\n contentType: response.contentType,\n responseMode: options.responseMode ?? \"auto\",\n extract: options.extract ?? \"readability\",\n includeLinks: options.includeLinks ?? true,\n search: options.search,\n maxChars: options.maxChars,\n });\n const responseForOutput =\n content.mode === \"raw\" ? response : compactProviderDocsResponse(response);\n\n return {\n provider: options.provider,\n catalog,\n request: { url: url.href },\n response: responseForOutput,\n ...(content.mode === \"raw\" ? {} : { content }),\n };\n}\n\nfunction compactProviderDocsResponse(response: ProviderApiHttpResponse) {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n elapsedMs: response.elapsedMs,\n headers: response.headers,\n contentType: response.contentType,\n size: response.size,\n truncated: response.truncated,\n };\n}\n\nexport async function executeProviderApiRequest(\n args: ProviderApiRequestArgs,\n runtime: ProviderApiRuntimeOptions,\n) {\n await assertProviderAllowedAsync(args.provider, runtime);\n\n // Check whether this is a built-in or custom provider.\n const builtIn = isProviderApiId(args.provider)\n ? getProviderApiConfig(args.provider, runtime.providerOverrides)\n : null;\n const customConfig = builtIn\n ? null\n : await resolveCustomProvider(args.provider, runtime);\n\n if (!builtIn && !customConfig) {\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${args.provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n if (customConfig) {\n return executeCustomProviderApiRequest(args, customConfig, runtime);\n }\n\n // --- built-in provider path (original code) ---\n const config = builtIn!;\n if (config.requiresConnectionId && !args.connectionId?.trim()) {\n throw new Error(\n `${config.label} Provider API requests require a workspace connectionId.`,\n );\n }\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const baseUrl = await resolveBaseUrl(config, runtime, ctx, args);\n const placeholders = await resolvePlaceholders(config, runtime, ctx, args);\n const method = normalizeMethod(args.method);\n const url = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: substituteUnknown(args.query, placeholders),\n });\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveAuth(config, runtime, ctx, args);\n const extraHeaders = substituteUnknown(args.headers ?? {}, placeholders);\n const headers = sanitizeOutboundHeaders({\n ...(config.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n\n // Allow a much larger maxBytes ceiling when writing to a workspace file.\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: config.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor,\n } = await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(\n substituteUnknown(args.query, placeholders),\n extra.query,\n )\n : substituteUnknown(args.query, placeholders);\n const pageUrl = buildProviderUrl({\n config,\n baseUrl,\n rawPath: substituteString(args.path, placeholders),\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n substituteUnknown(args.body, placeholders),\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : substituteUnknown(args.body, placeholders);\n const pageBody = prepareBody(bodyWithCursor, headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: { id: config.id, label: config.label },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n truncated,\n nextCursor,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n // --- Single request ---\n const body = prepareBody(substituteUnknown(args.body, placeholders), headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n });\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey,\n },\n });\n\n // saveToFile: write full body to workspace file and return compact summary.\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: { id: config.id, label: config.label },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: config.id,\n label: config.label,\n docsUrls: config.docsUrls,\n specUrls: config.specUrls ?? [],\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth: args.auth === \"none\" ? \"none\" : describeAuth(config.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n ...(args.accountId ? { accountId: args.accountId } : {}),\n ...(args.connectionId ? { connectionId: args.connectionId } : {}),\n },\n response,\n guidance: [\n \"This was a raw provider API request. Use provider docs/spec URLs to choose endpoints and include method/path/status plus relevant filters in the methodology. Prefer this escape hatch whenever canned actions are too narrow.\",\n providerAccessErrorGuidance(config, response.status),\n ]\n .filter(Boolean)\n .join(\" \"),\n };\n}\n\nconst PROVIDER_ACCESS_ERROR_STATUSES = new Set([401, 403, 404]);\n\nfunction providerAccessErrorGuidance(\n config: ProviderApiConfig,\n status: number,\n): string | null {\n if (!PROVIDER_ACCESS_ERROR_STATUSES.has(status)) return null;\n return config.accessErrorGuidance ?? null;\n}\n\n/**\n * Resolve a provider OAuth token for a trusted server-side integration bridge\n * such as a CRM adapter or Google Picker. Callers must keep the result out of\n * agent, MCP, A2A, logs, persistence, and extension/tool surfaces.\n */\nexport async function resolveProviderApiOAuthAccessToken(\n args: {\n provider: ProviderApiId;\n connectionId?: string | null;\n accountId?: string | null;\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<ProviderApiOAuthAccessToken> {\n await assertProviderAllowedAsync(args.provider, runtime);\n const config = getProviderApiConfig(args.provider, runtime.providerOverrides);\n const auth = config.auth;\n const oauthAuth =\n auth.type === \"oauth-bearer\"\n ? auth\n : auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\"\n ? {\n type: \"oauth-bearer\" as const,\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n workspaceProvider: auth.workspaceProvider,\n }\n : auth.type === \"oauth-bearer-or-basic\"\n ? {\n type: \"oauth-bearer\" as const,\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n workspaceProvider: auth.workspaceProvider,\n }\n : null;\n if (!oauthAuth) {\n throw new Error(\n `Provider API ${args.provider} does not use a direct OAuth bearer token.`,\n );\n }\n const ctx = requireRuntimeCredentialContext(\n runtime,\n config.credentialKeys[0] ?? config.id,\n );\n const credential = oauthAuth.workspaceProvider\n ? await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: oauthAuth,\n runtime,\n ctx,\n workspaceProvider: oauthAuth.workspaceProvider,\n connectionId: args.connectionId,\n accountId: args.accountId,\n })\n : await resolveOAuthBearerToken({\n auth: oauthAuth,\n ctx,\n accountId: args.accountId,\n });\n if (!credential) {\n throw new Error(\n `${oauthAuth.tokenLabel} workspace connection is not available to ${runtime.appId}.`,\n );\n }\n return {\n accessToken: credential.value,\n accountId: credential.accountId ?? null,\n accountLabel: credential.accountLabel ?? null,\n connectionId: credential.connectionId ?? null,\n connectionLabel: credential.connectionLabel ?? null,\n };\n}\n\nconst GITHUB_REPO_FILES_DEFAULT_MAX = 1_000;\nconst GITHUB_REPO_FILES_MAX = 10_000;\nconst GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE = 30;\nconst GITHUB_CODE_SEARCH_MAX_PER_PAGE = 100;\n\nexport async function listGitHubRepositoryFiles(\n args: GitHubRepositoryFileListArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileListResult> {\n const repository = normalizeGitHubRepository(args);\n const pathPrefix = normalizeGitHubFilePath(args.path);\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n\n if (args.recursive) {\n const ref =\n args.ref?.trim() || (await resolveGitHubDefaultBranch(args, runtime));\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository tree\",\n args: {\n provider: \"github\",\n path: `${githubRepoApiPath(repository)}/git/trees/${encodeURIComponent(\n ref,\n )}`,\n query: { recursive: \"1\" },\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const tree = asRecord(json);\n const rawEntries = Array.isArray(tree.tree) ? tree.tree : [];\n const entries = rawEntries\n .map((entry) =>\n normalizeGitHubTreeEntry(entry, {\n owner: repository.owner,\n repo: repository.repo,\n ref,\n }),\n )\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\")\n .filter((entry) => githubPathMatchesPrefix(entry.path, pathPrefix));\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref,\n path: pathPrefix,\n recursive: true,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated:\n Boolean(tree.truncated) || entries.length > limitedEntries.length,\n providerTruncated: Boolean(tree.truncated),\n response: compactResponseStatus(response),\n };\n }\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"list repository contents\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, pathPrefix),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const rawEntries = Array.isArray(json) ? json : [json];\n const entries = rawEntries\n .map(normalizeGitHubContentsEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry)\n .filter((entry) => args.includeDirectories || entry.type === \"file\");\n const limitedEntries = entries.slice(0, maxFiles);\n\n return {\n repository,\n ref: args.ref?.trim() || null,\n path: pathPrefix,\n recursive: false,\n entries: limitedEntries,\n totalCount: entries.length,\n truncated: entries.length > limitedEntries.length,\n providerTruncated: false,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function searchGitHubRepositoryFiles(\n args: GitHubRepositoryFileSearchArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileSearchResult> {\n const repository = normalizeGitHubRepository(args);\n const query = args.query?.trim() ?? \"\";\n\n if (!query) {\n const listed = await listGitHubRepositoryFiles(\n {\n owner: repository.owner,\n repo: repository.repo,\n path: args.path,\n ref: args.ref,\n recursive: true,\n includeDirectories: false,\n maxFiles: GITHUB_REPO_FILES_MAX,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n const filtered = listed.entries.filter((entry) =>\n githubTreeEntryMatchesSearchFilters(entry, args),\n );\n const maxFiles = clampPositiveInt(\n args.maxFiles,\n GITHUB_REPO_FILES_DEFAULT_MAX,\n GITHUB_REPO_FILES_MAX,\n );\n const limitedItems = filtered.slice(0, maxFiles);\n return {\n repository,\n mode: \"tree-filter\",\n query: null,\n ref: listed.ref,\n items: limitedItems,\n totalCount: filtered.length,\n truncated: listed.truncated || filtered.length > limitedItems.length,\n incompleteResults: listed.providerTruncated,\n response: listed.response,\n };\n }\n\n const perPage = clampPositiveInt(\n args.perPage,\n GITHUB_CODE_SEARCH_DEFAULT_PER_PAGE,\n GITHUB_CODE_SEARCH_MAX_PER_PAGE,\n );\n const page = clampPositiveInt(args.page, 1, 100);\n const q = buildGitHubCodeSearchQuery(repository, args, query);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"search repository code\",\n args: {\n provider: \"github\",\n path: \"/search/code\",\n query: { q, per_page: perPage, page },\n headers: args.includeTextMatches\n ? { Accept: \"application/vnd.github.text-match+json\" }\n : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const rawItems = Array.isArray(body.items) ? body.items : [];\n const items = rawItems\n .map(normalizeGitHubCodeSearchEntry)\n .filter((entry): entry is GitHubRepositoryFileEntry => !!entry);\n\n return {\n repository,\n mode: \"code-search\",\n query: q,\n ref: null,\n items,\n totalCount:\n typeof body.total_count === \"number\" && Number.isFinite(body.total_count)\n ? body.total_count\n : items.length,\n truncated: items.length >= perPage,\n incompleteResults: Boolean(body.incomplete_results),\n response: compactResponseStatus(response),\n };\n}\n\nexport async function readGitHubRepositoryFile(\n args: GitHubRepositoryFileReadArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileReadResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"read repository file\",\n args: {\n provider: \"github\",\n path: githubContentsApiPath(repository, path),\n query: args.ref ? { ref: args.ref } : undefined,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n if (Array.isArray(json)) {\n throw new Error(\n `GitHub path \"${path}\" is a directory. Use listGitHubRepositoryFiles or the github-repo-files action with operation=\"list\".`,\n );\n }\n const file = asRecord(json);\n const encoding =\n typeof file.encoding === \"string\" ? file.encoding.toLowerCase() : null;\n const rawBase64 =\n encoding === \"base64\" && typeof file.content === \"string\"\n ? file.content.replace(/\\s+/g, \"\")\n : null;\n const content = rawBase64\n ? Buffer.from(rawBase64, \"base64\").toString(\"utf8\")\n : null;\n const sha = typeof file.sha === \"string\" ? file.sha : \"\";\n if (!sha) throw new Error(`GitHub read for \"${path}\" did not return a SHA.`);\n\n return {\n repository,\n path: typeof file.path === \"string\" ? file.path : path,\n ref: args.ref?.trim() || null,\n name: typeof file.name === \"string\" ? file.name : githubBasename(path),\n type: typeof file.type === \"string\" ? file.type : \"file\",\n sha,\n size: typeof file.size === \"number\" ? file.size : 0,\n encoding,\n content,\n contentBase64: rawBase64,\n url: typeof file.url === \"string\" ? file.url : null,\n htmlUrl: typeof file.html_url === \"string\" ? file.html_url : null,\n downloadUrl:\n typeof file.download_url === \"string\" ? file.download_url : null,\n response: compactResponseStatus(response),\n };\n}\n\nexport async function writeGitHubRepositoryFile(\n args: GitHubRepositoryFileWriteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileWriteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) throw new Error(\"GitHub file write requires a commit message.\");\n\n let sha = args.sha?.trim();\n if (!sha && args.overwriteExisting) {\n try {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n } catch (error) {\n if (!isGitHubNotFoundError(error)) throw error;\n }\n }\n\n const body: Record<string, unknown> = {\n message,\n content: Buffer.from(args.content, \"utf8\").toString(\"base64\"),\n };\n if (sha) body.sha = sha;\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"write repository file\",\n args: {\n provider: \"github\",\n method: \"PUT\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const content = asRecord(result.content);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n content: {\n name: stringOrNull(content.name),\n path: stringOrNull(content.path),\n sha: stringOrNull(content.sha),\n url: stringOrNull(content.url),\n htmlUrl: stringOrNull(content.html_url),\n },\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nexport async function deleteGitHubRepositoryFile(\n args: GitHubRepositoryFileDeleteArgs,\n runtime: ProviderApiRuntimeOptions,\n): Promise<GitHubRepositoryFileDeleteResult> {\n const repository = normalizeGitHubRepository(args);\n const path = requireGitHubFilePath(args.path);\n const message = args.message.trim();\n if (!message) {\n throw new Error(\"GitHub file delete requires a commit message.\");\n }\n\n let sha = args.sha?.trim();\n if (!sha) {\n const existing = await readGitHubRepositoryFile(\n {\n owner: repository.owner,\n repo: repository.repo,\n path,\n ref: args.branch,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n runtime,\n );\n sha = existing.sha;\n }\n\n const body: Record<string, unknown> = { message, sha };\n if (args.branch?.trim()) body.branch = args.branch.trim();\n if (args.committer) body.committer = args.committer;\n if (args.author) body.author = args.author;\n\n const { json, response } = await executeGitHubJsonRequest({\n runtime,\n label: \"delete repository file\",\n args: {\n provider: \"github\",\n method: \"DELETE\",\n path: githubContentsApiPath(repository, path),\n body,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const result = asRecord(json);\n const commit = asRecord(result.commit);\n\n return {\n repository,\n path,\n branch: args.branch?.trim() || null,\n commit: {\n sha: stringOrNull(commit.sha),\n url: stringOrNull(commit.url),\n htmlUrl: stringOrNull(commit.html_url),\n message: stringOrNull(commit.message),\n },\n response: compactResponseStatus(response),\n };\n}\n\nasync function executeGitHubJsonRequest(options: {\n runtime: ProviderApiRuntimeOptions;\n label: string;\n args: Omit<ProviderApiRequestArgs, \"provider\"> & { provider?: \"github\" };\n}): Promise<{ json: unknown; response: ProviderApiHttpResponse }> {\n const result = (await executeProviderApiRequest(\n { provider: \"github\", ...options.args },\n options.runtime,\n )) as Record<string, unknown>;\n const response = result.response as ProviderApiHttpResponse | undefined;\n if (!response) {\n throw new Error(`GitHub ${options.label} returned an unexpected result.`);\n }\n if (!response.ok) {\n throw new Error(\n `GitHub ${options.label} failed with HTTP ${response.status}${\n response.statusText ? ` ${response.statusText}` : \"\"\n }${providerResponseErrorDetail(response)}`,\n );\n }\n return { json: response.json, response };\n}\n\nasync function resolveGitHubDefaultBranch(\n args: GitHubRepositoryRef & {\n connectionId?: string | null;\n timeoutMs?: number;\n maxBytes?: number;\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<string> {\n const repository = normalizeGitHubRepository(args);\n const { json } = await executeGitHubJsonRequest({\n runtime,\n label: \"get repository metadata\",\n args: {\n provider: \"github\",\n path: githubRepoApiPath(repository),\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n },\n });\n const body = asRecord(json);\n const defaultBranch = stringOrNull(body.default_branch);\n if (!defaultBranch) {\n throw new Error(\n `GitHub repository ${repository.owner}/${repository.repo} did not return a default branch.`,\n );\n }\n return defaultBranch;\n}\n\nfunction normalizeGitHubRepository(\n args: GitHubRepositoryRef,\n): GitHubRepositoryRef {\n const owner = args.owner.trim();\n const repo = args.repo.trim().replace(/\\.git$/i, \"\");\n if (!owner) throw new Error(\"GitHub repository owner is required.\");\n if (!repo) throw new Error(\"GitHub repository name is required.\");\n return { owner, repo };\n}\n\nfunction githubRepoApiPath(repository: GitHubRepositoryRef): string {\n return `/repos/${encodeURIComponent(repository.owner)}/${encodeURIComponent(\n repository.repo,\n )}`;\n}\n\nfunction githubContentsApiPath(\n repository: GitHubRepositoryRef,\n filePath: string,\n): string {\n const encodedPath = encodeGitHubFilePath(filePath);\n return `${githubRepoApiPath(repository)}/contents${\n encodedPath ? `/${encodedPath}` : \"\"\n }`;\n}\n\nfunction encodeGitHubFilePath(filePath: string): string {\n return normalizeGitHubFilePath(filePath)\n .split(\"/\")\n .filter(Boolean)\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n}\n\nfunction normalizeGitHubFilePath(filePath: string | undefined): string {\n return (filePath ?? \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction requireGitHubFilePath(filePath: string): string {\n const normalized = normalizeGitHubFilePath(filePath);\n if (!normalized) throw new Error(\"GitHub file path is required.\");\n return normalized;\n}\n\nfunction githubBasename(filePath: string): string {\n return filePath.split(\"/\").filter(Boolean).pop() ?? filePath;\n}\n\nfunction githubPathMatchesPrefix(path: string, prefix: string): boolean {\n if (!prefix) return true;\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nfunction normalizeGitHubTreeEntry(\n value: unknown,\n options: GitHubRepositoryRef & { ref: string },\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n const normalizedType =\n type === \"blob\"\n ? \"file\"\n : type === \"tree\"\n ? \"dir\"\n : type === \"commit\"\n ? \"submodule\"\n : \"unknown\";\n return {\n name: githubBasename(path),\n path,\n type: normalizedType,\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl:\n normalizedType === \"file\"\n ? githubWebFileUrl(options, path)\n : normalizedType === \"dir\"\n ? githubWebTreeUrl(options, path)\n : null,\n downloadUrl: null,\n };\n}\n\nfunction normalizeGitHubContentsEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n const entry = asRecord(value);\n const path = stringOrNull(entry.path);\n if (!path) return null;\n const type = stringOrNull(entry.type);\n return {\n name: stringOrNull(entry.name) ?? githubBasename(path),\n path,\n type:\n type === \"file\" ||\n type === \"dir\" ||\n type === \"symlink\" ||\n type === \"submodule\"\n ? type\n : \"unknown\",\n sha: stringOrNull(entry.sha),\n size: numberOrNull(entry.size),\n url: stringOrNull(entry.url),\n htmlUrl: stringOrNull(entry.html_url),\n downloadUrl: stringOrNull(entry.download_url),\n };\n}\n\nfunction normalizeGitHubCodeSearchEntry(\n value: unknown,\n): GitHubRepositoryFileEntry | null {\n return normalizeGitHubContentsEntry({ ...asRecord(value), type: \"file\" });\n}\n\nfunction githubTreeEntryMatchesSearchFilters(\n entry: GitHubRepositoryFileEntry,\n args: GitHubRepositoryFileSearchArgs,\n): boolean {\n const filename = args.filename?.trim();\n if (filename && entry.name !== filename) return false;\n const extension = args.extension?.trim().replace(/^\\./, \"\");\n if (extension && !entry.path.endsWith(`.${extension}`)) return false;\n const pathFilter = normalizeGitHubFilePath(args.path);\n if (pathFilter && !entry.path.includes(pathFilter)) return false;\n return true;\n}\n\nfunction buildGitHubCodeSearchQuery(\n repository: GitHubRepositoryRef,\n args: GitHubRepositoryFileSearchArgs,\n query: string,\n): string {\n const qualifiers = [`repo:${repository.owner}/${repository.repo}`];\n const path = normalizeGitHubFilePath(args.path);\n if (path) qualifiers.push(`path:${quoteGitHubSearchQualifier(path)}`);\n if (args.filename?.trim()) {\n qualifiers.push(\n `filename:${quoteGitHubSearchQualifier(args.filename.trim())}`,\n );\n }\n if (args.extension?.trim()) {\n qualifiers.push(\n `extension:${quoteGitHubSearchQualifier(\n args.extension.trim().replace(/^\\./, \"\"),\n )}`,\n );\n }\n if (args.language?.trim()) {\n qualifiers.push(\n `language:${quoteGitHubSearchQualifier(args.language.trim())}`,\n );\n }\n return [query, \"in:file\", ...qualifiers].join(\" \");\n}\n\nfunction quoteGitHubSearchQualifier(value: string): string {\n return /\\s/.test(value) ? JSON.stringify(value) : value;\n}\n\nfunction githubWebFileUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/blob/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction githubWebTreeUrl(\n options: GitHubRepositoryRef & { ref: string },\n filePath: string,\n): string {\n return `https://github.com/${encodeURIComponent(\n options.owner,\n )}/${encodeURIComponent(options.repo)}/tree/${encodeURIComponent(\n options.ref,\n )}/${encodeGitHubFilePath(filePath)}`;\n}\n\nfunction clampPositiveInt(\n value: number | undefined,\n defaultValue: number,\n maxValue: number,\n): number {\n if (!Number.isFinite(value) || value! <= 0) return defaultValue;\n return Math.min(maxValue, Math.floor(value!));\n}\n\nfunction compactResponseStatus(\n response: ProviderApiHttpResponse,\n): Pick<ProviderApiHttpResponse, \"status\" | \"statusText\" | \"ok\"> {\n return {\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n}\n\nfunction providerResponseErrorDetail(\n response: ProviderApiHttpResponse,\n): string {\n const body = asRecord(response.json);\n const message = stringOrNull(body.message);\n const detail =\n message ??\n (typeof response.text === \"string\"\n ? response.text.replace(/\\s+/g, \" \").trim().slice(0, 500)\n : \"\");\n return detail ? `: ${detail}` : \"\";\n}\n\nfunction isGitHubNotFoundError(error: unknown): boolean {\n return error instanceof Error && /\\bHTTP 404\\b/.test(error.message);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction stringOrNull(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\nfunction numberOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\n// ---------------------------------------------------------------------------\n// Custom provider execution\n// ---------------------------------------------------------------------------\n\nasync function executeCustomProviderApiRequest(\n args: ProviderApiRequestArgs,\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown> {\n const ctx = requireRuntimeCredentialContext(runtime, customConfig.id);\n const method = normalizeMethod(args.method);\n const baseUrl = customConfig.baseUrl;\n\n // Build a lightweight ProviderApiConfig-like object so we can reuse\n // buildProviderUrl (which validates allowed hosts).\n const syntheticConfig: ProviderApiConfig = {\n id: customConfig.id as ProviderApiId,\n label: customConfig.label,\n defaultBaseUrl: baseUrl,\n auth: { type: \"none\" },\n credentialKeys: [],\n docsUrls: customConfig.docsUrls,\n allowedHostSuffixes: customConfig.allowedHostSuffixes,\n defaultHeaders: customConfig.defaultHeaders,\n };\n\n const url = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: args.query,\n });\n\n if (await isBlockedExtensionUrlWithDns(url.href)) {\n throw new Error(`Blocked private/internal provider URL: ${url.href}`);\n }\n\n const auth =\n args.auth === \"none\"\n ? emptyAuth()\n : await resolveCustomAuth(customConfig, runtime, ctx, args);\n\n const extraHeaders = args.headers ?? {};\n const headers = sanitizeOutboundHeaders({\n ...(customConfig.defaultHeaders ?? {}),\n ...(isPlainRecord(extraHeaders) ? extraHeaders : {}),\n ...auth.headers,\n });\n const body = prepareBody(args.body, headers);\n\n const effectiveMaxBytes = args.saveToFile\n ? SAVE_TO_FILE_MAX_BYTES\n : clampMaxBytes(args.maxBytes);\n const quotaIdentity = createProviderQuotaIdentity({\n appId: runtimeOptionsAppId(runtime),\n providerId: customConfig.id,\n ctx,\n credentialSources: auth.credentialSources,\n connectionId: args.connectionId,\n accountId: args.accountId,\n });\n\n // --- fetchAllPages mode (same cursor pagination as built-in providers) ---\n if (args.fetchAllPages) {\n const pageCfg = args.fetchAllPages;\n const {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor,\n } = await fetchAllPages(pageCfg, async (extra) => {\n const queryWithCursor = extra?.query\n ? mergeQueryObjects(args.query, extra.query)\n : args.query;\n const pageUrl = buildProviderUrl({\n config: syntheticConfig,\n baseUrl,\n rawPath: args.path,\n query: queryWithCursor,\n });\n const bodyWithCursor = extra?.bodyCursor\n ? setValueAtPath(\n args.body,\n extra.bodyCursor.path,\n extra.bodyCursor.value,\n )\n : args.body;\n const pageBody = prepareBody(bodyWithCursor, headers);\n const requestKey = createProviderRequestDedupeKey({\n method,\n url: pageUrl.href,\n body: pageBody,\n headers,\n });\n const resp = await fetchWithTimeout(pageUrl.href, {\n method,\n headers,\n body: pageBody,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(\n pageUrl.href,\n auth.secretValues,\n ),\n requestKey,\n },\n });\n return {\n text:\n resp.text ??\n (resp.json !== undefined ? JSON.stringify(resp.json) : \"\"),\n contentType: resp.contentType,\n status: resp.status,\n ok: resp.ok,\n };\n });\n\n const allItemsJson = JSON.stringify(items, null, 2);\n const metadata = {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n pagesRead: pageCount,\n totalItems: Array.isArray(items) ? items.length : 0,\n lastStatus,\n truncated,\n nextCursor,\n };\n\n if (args.saveToFile) {\n const saved = (await handleSaveToFile(\n args.saveToFile,\n allItemsJson,\n lastContentType ?? \"application/json\",\n lastStatus,\n )) as Record<string, unknown>;\n return { ...metadata, ...saved };\n }\n\n return { ...metadata, items };\n }\n\n const response = await fetchWithTimeout(url.href, {\n method,\n headers,\n body,\n maxBytes: effectiveMaxBytes,\n timeoutMs: clampTimeout(args.timeoutMs),\n secretValues: auth.secretValues,\n quota: {\n identity: quotaIdentity,\n method,\n target: describeProviderRequestTarget(url.href, auth.secretValues),\n requestKey: createProviderRequestDedupeKey({\n method,\n url: url.href,\n body,\n headers,\n }),\n },\n });\n\n if (args.saveToFile) {\n const rawText =\n response.text ??\n (response.json !== undefined ? JSON.stringify(response.json) : \"\");\n const saved = (await handleSaveToFile(\n args.saveToFile,\n rawText,\n response.contentType,\n response.status,\n )) as Record<string, unknown>;\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n },\n ...saved,\n };\n }\n\n return {\n provider: {\n id: customConfig.id,\n label: customConfig.label,\n docsUrls: customConfig.docsUrls,\n specUrls: [],\n custom: true,\n },\n request: {\n method,\n url: redactString(url.href, auth.secretValues),\n path: redactString(`${url.pathname}${url.search}`, auth.secretValues),\n auth:\n args.auth === \"none\" ? \"none\" : describeCustomAuth(customConfig.auth),\n credentialSources: auth.credentialSources.map((source) => ({\n ...source,\n fingerprint: fingerprint(source.key),\n })),\n headerNames: Object.keys(headers).filter(\n (name) => name.toLowerCase() !== \"authorization\",\n ),\n },\n response,\n guidance:\n \"This was a raw provider API request to a custom provider. Use provider docs URLs to choose endpoints.\",\n };\n}\n\nasync function resolveCustomAuth(\n customConfig: CustomProviderConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = customConfig.auth;\n if (auth.type === \"none\") return emptyAuth();\n\n if (auth.type === \"bearer\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredentialByKey({\n provider: customConfig.id,\n key: auth.credentialKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.headerName]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n\n return emptyAuth();\n}\n\n/** Resolve a credential by key name (no workspace-provider lookup for custom). */\nasync function resolveRequiredCredentialByKey(options: {\n provider: string;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: undefined,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n const resolver =\n options.runtime.resolveCredential ?? defaultProviderApiCredentialResolver;\n const credential = await resolver(lookup);\n if (!credential?.value) {\n throw new Error(\n `Credential \"${options.key}\" not configured for custom provider \"${options.provider}\".`,\n );\n }\n return credential;\n}\n\nfunction describeCustomAuth(auth: CustomProviderAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"api-key-header\")\n return `api-key-header:${auth.headerName}`;\n return \"unknown\";\n}\n\n// ---------------------------------------------------------------------------\n// Catalog helpers with custom provider support\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a custom provider to the same catalog shape as built-in providers.\n */\nfunction customProviderToCatalogEntry(config: CustomProviderConfig) {\n return {\n id: config.id,\n label: config.label,\n defaultBaseUrl: config.baseUrl,\n baseUrlCredentialKey: null,\n auth: describeCustomAuth(config.auth),\n credentialKeys: extractCredentialKeysFromCustomAuth(config.auth),\n docsUrls: config.docsUrls,\n specUrls: [] as string[],\n allowedHostSuffixes: config.allowedHostSuffixes,\n placeholders: [] as unknown[],\n defaultHeaders: config.defaultHeaders,\n examples: [] as unknown[],\n notes: config.notes ? [config.notes] : ([] as string[]),\n corpusRecipes: [] as unknown[],\n templateUses: [] as string[],\n custom: true,\n };\n}\n\nfunction extractCredentialKeysFromCustomAuth(\n auth: CustomProviderAuthKind,\n): string[] {\n if (auth.type === \"bearer\") return [auth.credentialKey];\n if (auth.type === \"basic\") {\n return auth.usernameKey === auth.passwordKey\n ? [auth.usernameKey]\n : [auth.usernameKey, auth.passwordKey];\n }\n if (auth.type === \"api-key-header\") return [auth.credentialKey];\n return [];\n}\n\n/**\n * List catalog entries including custom providers (merged after built-ins).\n */\nasync function listProviderApiCatalogWithCustom(\n provider: ProviderApiId | string | undefined,\n options: {\n providerIds?: readonly (ProviderApiId | string)[];\n providerOverrides?: readonly ProviderApiConfig[];\n },\n runtime: ProviderApiRuntimeOptions,\n): Promise<unknown[]> {\n const customConfigs = runtime.getCustomProviders\n ? await runtime.getCustomProviders()\n : [];\n\n if (provider) {\n // Check built-ins first\n if (isProviderApiId(provider)) {\n return listProviderApiCatalog(provider, options) as unknown[];\n }\n // Check custom\n const custom = customConfigs.find((c) => c.id === provider);\n if (custom) return [customProviderToCatalogEntry(custom)];\n const known = [\n ...normalizeProviderIds(options.providerIds),\n ...customConfigs.map((c) => c.id),\n ];\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n }\n\n const builtInEntries = listProviderApiCatalog(\n undefined,\n options,\n ) as unknown[];\n const builtInIds = new Set(\n (options.providerIds ?? PROVIDER_API_IDS).map(String),\n );\n const customEntries = customConfigs\n .filter((c) => !builtInIds.has(c.id))\n .map(customProviderToCatalogEntry);\n return [...builtInEntries, ...customEntries];\n}\n\n/**\n * Look up a custom provider by id from the runtime loader.\n */\nasync function resolveCustomProvider(\n id: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<CustomProviderConfig | null> {\n if (!runtime.getCustomProviders) return null;\n const configs = await runtime.getCustomProviders();\n return configs.find((c) => c.id === id) ?? null;\n}\n\n/**\n * List all provider ids (built-in + custom) visible to this runtime.\n */\nasync function listAllProviderIds(\n runtime: ProviderApiRuntimeOptions,\n): Promise<string[]> {\n const builtIn = normalizeProviderIds(runtime.providerIds).map(String);\n if (!runtime.getCustomProviders) return builtIn;\n const custom = await runtime.getCustomProviders();\n return [...builtIn, ...custom.map((c) => c.id)];\n}\n\n/**\n * Assert that a provider is either a known built-in or a registered custom\n * provider. Throws with a descriptive message listing known providers.\n */\nasync function assertProviderAllowedAsync(\n provider: string,\n runtime: ProviderApiRuntimeOptions,\n): Promise<void> {\n // Built-in check (fast path)\n if (isProviderApiId(provider)) {\n // Still check the providerIds whitelist if set\n const allowed = normalizeProviderIds(runtime.providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n return;\n }\n // Custom provider check\n const custom = await resolveCustomProvider(provider, runtime);\n if (custom) return;\n const known = await listAllProviderIds(runtime);\n throw new Error(\n `Unknown provider \"${provider}\". Known providers: ${known.join(\", \")}`,\n );\n}\n\nexport async function defaultProviderApiCredentialResolver(\n options: ProviderApiCredentialLookupOptions,\n): Promise<ProviderApiResolvedCredential | null> {\n if (options.workspaceProvider) {\n const result = await resolveWorkspaceConnectionCredentialForApp({\n appId: options.appId,\n provider: options.workspaceProvider,\n key: options.key,\n connectionId: options.connectionId,\n userEmail: options.ctx.userEmail,\n orgId: options.ctx.orgId,\n });\n if (result.available && result.value) {\n return {\n key: result.provenance?.resolvedKey ?? result.key,\n value: result.value,\n source: \"workspace_connection\",\n provider: result.provider,\n connectionId: result.provenance?.connectionId,\n connectionLabel: result.provenance?.connectionLabel,\n scope:\n typeof result.provenance?.secretScope === \"string\"\n ? result.provenance.secretScope\n : undefined,\n };\n }\n }\n\n const value = await resolveCredential(options.key, options.ctx);\n if (!value) return null;\n return {\n key: options.key,\n value,\n source: options.localCredentialSource,\n provider: options.provider,\n };\n}\n\nfunction normalizeProviderIds(\n providerIds?: readonly (ProviderApiId | string)[],\n): ProviderApiId[] {\n if (!providerIds) return [...PROVIDER_API_IDS];\n const result: ProviderApiId[] = [];\n const seen = new Set<string>();\n for (const providerId of providerIds) {\n if (!isProviderApiId(providerId)) {\n throw new Error(`Unsupported provider API: ${providerId}`);\n }\n if (seen.has(providerId)) continue;\n seen.add(providerId);\n result.push(providerId);\n }\n return result;\n}\n\nfunction assertProviderAllowed(\n provider: ProviderApiId | string,\n providerIds?: readonly (ProviderApiId | string)[],\n) {\n const allowed = normalizeProviderIds(providerIds);\n if (!allowed.includes(provider as ProviderApiId)) {\n throw new Error(`Provider API ${provider} is not enabled for this app.`);\n }\n}\n\nfunction describeAuth(auth: ProviderApiAuthKind): string {\n if (auth.type === \"none\") return \"none\";\n if (auth.type === \"bearer\") return \"bearer\";\n if (auth.type === \"basic\") return \"basic\";\n if (auth.type === \"basic-raw\") return \"basic\";\n if (auth.type === \"api-key-header\") return `api-key-header:${auth.header}`;\n if (auth.type === \"google-service-account\") return \"google-service-account\";\n if (auth.type === \"oauth-bearer\") return `oauth-bearer:${auth.oauthProvider}`;\n if (auth.type === \"oauth-bearer-or-api-key-header\") {\n return `oauth-bearer:${auth.oauthProvider}-or-api-key-header:${auth.header}:${(auth.fallbackKeys ?? [auth.key]).join(\",\")}`;\n }\n if (auth.type === \"oauth-bearer-or-bearer-key\") {\n return `oauth-bearer:${auth.oauthProvider}-or-bearer-key:${(auth.fallbackKeys ?? [auth.key]).join(\",\")}`;\n }\n if (auth.type === \"oauth-bearer-or-basic\") {\n return `oauth-bearer:${auth.oauthProvider}-or-basic:${auth.usernameKey}:${auth.passwordKey}`;\n }\n return \"prometheus-basic-or-bearer\";\n}\n\nfunction requireRuntimeCredentialContext(\n runtime: ProviderApiRuntimeOptions,\n credentialKey: string,\n): CredentialContext {\n const ctx = runtime.getCredentialContext?.() ?? getCredentialContext();\n if (!ctx) {\n throw new Error(\n `Cannot resolve credential \"${credentialKey}\" outside an authenticated request context.`,\n );\n }\n return ctx;\n}\n\nasync function resolveBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<string> {\n const oauthBaseUrl = await resolveWorkspaceOAuthBaseUrl(\n config,\n runtime,\n args,\n );\n if (oauthBaseUrl) return oauthBaseUrl;\n if (!config.baseUrlCredentialKey) return config.defaultBaseUrl;\n const auth = config.auth;\n const workspaceProvider =\n auth.type === \"oauth-bearer\" ||\n auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\" ||\n auth.type === \"oauth-bearer-or-basic\"\n ? auth.workspaceProvider\n : undefined;\n const configured = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: config.baseUrlCredentialKey,\n args,\n workspaceProvider,\n });\n return (configured || config.defaultBaseUrl).replace(/\\/+$/, \"\");\n}\n\nasync function resolveWorkspaceOAuthBaseUrl(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n args: ProviderApiRequestArgs,\n): Promise<string | null> {\n const auth = config.auth;\n const workspaceProvider =\n auth.type === \"oauth-bearer\" ||\n auth.type === \"oauth-bearer-or-api-key-header\" ||\n auth.type === \"oauth-bearer-or-bearer-key\" ||\n auth.type === \"oauth-bearer-or-basic\"\n ? auth.workspaceProvider\n : undefined;\n if (workspaceProvider !== \"jira\" && workspaceProvider !== \"salesforce\") {\n return null;\n }\n let resolved: Awaited<ReturnType<typeof resolveWorkspaceConnectionForApp>>;\n try {\n resolved = await resolveWorkspaceConnectionForApp({\n appId: runtime.appId,\n provider: workspaceProvider,\n connectionId: args.connectionId ?? undefined,\n requireConnected: true,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Workspace connections require an authenticated user.\"\n ) {\n return null;\n }\n throw error;\n }\n if (!resolved.available || !resolved.connection) return null;\n const connectionConfig = resolved.connection.config;\n if (connectionConfig.credentialMode !== \"oauth\") return null;\n const baseUrl =\n workspaceProvider === \"salesforce\"\n ? connectionConfig.salesforceInstanceUrl\n : connectionConfig.atlassianApiBaseUrl;\n if (typeof baseUrl !== \"string\" || !baseUrl.trim()) return null;\n if (workspaceProvider === \"salesforce\" && !isSalesforceInstanceUrl(baseUrl)) {\n return null;\n }\n return baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction isSalesforceInstanceUrl(value: string): boolean {\n try {\n const url = new URL(value);\n const host = url.hostname.toLowerCase();\n return (\n url.protocol === \"https:\" &&\n !url.username &&\n !url.password &&\n !url.port &&\n (host === \"salesforce.com\" || host.endsWith(\".salesforce.com\"))\n );\n } catch {\n return false;\n }\n}\n\nasync function resolvePlaceholders(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<Record<string, string>> {\n const placeholders: Record<string, string> = {};\n for (const placeholder of config.placeholders ?? []) {\n const value = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: placeholder.credentialKey,\n args,\n });\n if (value) placeholders[placeholder.name] = value;\n }\n return placeholders;\n}\n\nasync function resolveCredentialValue(options: {\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n key: string;\n args: ProviderApiRequestArgs;\n workspaceProvider?: string;\n}): Promise<string | undefined> {\n const credential = await resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.workspaceProvider,\n key: options.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n return credential?.value;\n}\n\nfunction substituteString(\n value: string,\n placeholders: Record<string, string>,\n): string {\n let result = value;\n for (const [name, replacement] of Object.entries(placeholders)) {\n result = result.split(`{${name}}`).join(replacement);\n }\n return result;\n}\n\nfunction substituteUnknown(\n value: unknown,\n placeholders: Record<string, string>,\n): unknown {\n if (typeof value === \"string\") return substituteString(value, placeholders);\n if (Array.isArray(value)) {\n return value.map((item) => substituteUnknown(item, placeholders));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n substituteUnknown(entry, placeholders),\n ]),\n );\n }\n return value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction buildProviderUrl(options: {\n config: ProviderApiConfig;\n baseUrl: string;\n rawPath: string;\n query: unknown;\n}): URL {\n const base = new URL(options.baseUrl);\n const rawPath = options.rawPath.trim();\n const url = /^https?:\\/\\//i.test(rawPath)\n ? new URL(rawPath)\n : new URL(joinProviderUrlPath(base, rawPath), base.origin);\n\n if (!isAllowedProviderUrl(url, base, options.config)) {\n throw new Error(\n `${options.config.label} API requests must stay on the configured provider host or registered provider host suffix.`,\n );\n }\n\n for (const [key, value] of queryEntries(options.query)) {\n url.searchParams.append(key, value);\n }\n\n return url;\n}\n\nfunction joinProviderUrlPath(base: URL, rawPath: string): string {\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const providerPath = rawPath.replace(/^\\/+/, \"\");\n if (!providerPath) return basePath || \"/\";\n const baseSegments = basePath.split(\"/\").filter(Boolean);\n const providerSegments = providerPath.split(\"/\").filter(Boolean);\n if (\n baseSegments.length > 0 &&\n providerSegments.length >= baseSegments.length &&\n baseSegments.every((segment, index) => segment === providerSegments[index])\n ) {\n return `/${providerPath}`;\n }\n return `${basePath}/${providerPath}`;\n}\n\nfunction isAllowedProviderUrl(\n url: URL,\n base: URL,\n config: ProviderApiConfig,\n): boolean {\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return false;\n if (url.origin === base.origin) return true;\n const host = url.hostname.toLowerCase();\n return (config.allowedHostSuffixes ?? []).some((suffix) => {\n const normalized = suffix.toLowerCase().replace(/^\\./, \"\");\n return host === normalized || host.endsWith(`.${normalized}`);\n });\n}\n\nfunction queryEntries(value: unknown): Array<[string, string]> {\n if (!value) return [];\n if (typeof value === \"string\") {\n const params = new URLSearchParams(value.replace(/^\\?/, \"\"));\n return Array.from(params.entries());\n }\n if (typeof value !== \"object\" || Array.isArray(value)) return [];\n const entries: Array<[string, string]> = [];\n for (const [key, raw] of Object.entries(value)) {\n if (raw === undefined || raw === null) continue;\n if (Array.isArray(raw)) {\n for (const item of raw) entries.push([key, String(item)]);\n } else {\n entries.push([key, String(raw)]);\n }\n }\n return entries;\n}\n\nasync function resolveAuth(\n config: ProviderApiConfig,\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n args: ProviderApiRequestArgs,\n): Promise<ResolvedAuth> {\n const auth = config.auth;\n if (auth.type === \"none\") return emptyAuth();\n if (auth.type === \"bearer\") {\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.keys,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"basic\") {\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password =\n auth.passwordKey === auth.usernameKey\n ? username\n : await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n ...(password.key === username.key\n ? []\n : [omitCredentialValue(password)]),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n if (auth.type === \"basic-raw\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(credential.value).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value, encoded],\n };\n }\n if (auth.type === \"api-key-header\") {\n const credential = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.key,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"google-service-account\") {\n const token = await getGoogleServiceAccountToken(auth.scopes, runtime, ctx);\n return {\n headers: { Authorization: `Bearer ${token}` },\n credentialSources: [\n {\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [token],\n };\n }\n if (auth.type === \"oauth-bearer\") {\n const oauthProvider =\n runtime.oauthProviderOverrides?.[config.id] ?? auth.oauthProvider;\n const credential =\n auth.workspaceProvider && args.connectionId\n ? await resolveConnectionBoundOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n runtime,\n ctx,\n workspaceProvider: auth.workspaceProvider,\n connectionId: args.connectionId,\n accountId: args.accountId,\n })\n : await resolveOAuthBearerToken({\n auth: { ...auth, oauthProvider },\n ctx,\n accountId: args.accountId,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-api-key-header\") {\n const explicitConnectionFallback =\n Boolean(args.connectionId?.trim()) && Boolean(runtime.resolveCredential);\n const resolvedFallback = explicitConnectionFallback\n ? await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n })\n : null;\n if (resolvedFallback) {\n return {\n headers: { [auth.header]: resolvedFallback.value },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n if (!explicitConnectionFallback) {\n const resolvedFallback = await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n });\n if (resolvedFallback) {\n return {\n headers: { [auth.header]: resolvedFallback.value },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n }\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.fallbackKeys ?? [auth.key],\n ctx,\n runtime,\n });\n return {\n headers: { [auth.header]: credential.value },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-bearer-key\") {\n const explicitConnectionFallback =\n Boolean(args.connectionId?.trim()) && Boolean(runtime.resolveCredential);\n const resolvedFallback = explicitConnectionFallback\n ? await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n })\n : null;\n if (resolvedFallback) {\n return {\n headers: { Authorization: `Bearer ${resolvedFallback.value}` },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n if (!explicitConnectionFallback) {\n const resolvedFallback = await resolveHybridFallbackCredential({\n auth,\n config,\n runtime,\n ctx,\n args,\n });\n if (resolvedFallback) {\n return {\n headers: { Authorization: `Bearer ${resolvedFallback.value}` },\n credentialSources: [omitCredentialValue(resolvedFallback)],\n secretValues: [resolvedFallback.value],\n };\n }\n }\n const credential = await resolveAnyCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n keys: auth.fallbackKeys ?? [auth.key],\n ctx,\n runtime,\n });\n return {\n headers: { Authorization: `Bearer ${credential.value}` },\n credentialSources: [omitCredentialValue(credential)],\n secretValues: [credential.value],\n };\n }\n if (auth.type === \"oauth-bearer-or-basic\") {\n const workspaceCredential =\n await resolveOptionalConnectionBoundOAuthBearerToken({\n auth: {\n type: \"oauth-bearer\",\n oauthProvider: auth.oauthProvider,\n tokenLabel: auth.tokenLabel,\n },\n runtime,\n ctx,\n connectionId: args.connectionId,\n accountId: args.accountId,\n workspaceProvider: auth.workspaceProvider,\n allowUnbound: true,\n });\n if (workspaceCredential) {\n return {\n headers: { Authorization: `Bearer ${workspaceCredential.value}` },\n credentialSources: [omitCredentialValue(workspaceCredential)],\n secretValues: [workspaceCredential.value],\n };\n }\n const username = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.usernameKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const password = await resolveRequiredCredential({\n provider: config.id,\n workspaceProvider: auth.workspaceProvider,\n key: auth.passwordKey,\n ctx,\n runtime,\n connectionId: args.connectionId,\n });\n const encoded = Buffer.from(`${username.value}:${password.value}`).toString(\n \"base64\",\n );\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n omitCredentialValue(username),\n omitCredentialValue(password),\n ],\n secretValues: [username.value, password.value, encoded],\n };\n }\n\n const bearer = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_BEARER_TOKEN\",\n args,\n });\n if (bearer) {\n return {\n headers: { Authorization: `Bearer ${bearer}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_BEARER_TOKEN\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [bearer],\n };\n }\n const username = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_USERNAME\",\n args,\n });\n const password = await resolveCredentialValue({\n config,\n runtime,\n ctx,\n key: \"PROMETHEUS_PASSWORD\",\n args,\n });\n if (username && password) {\n const encoded = Buffer.from(`${username}:${password}`).toString(\"base64\");\n return {\n headers: { Authorization: `Basic ${encoded}` },\n credentialSources: [\n {\n key: \"PROMETHEUS_USERNAME\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n {\n key: \"PROMETHEUS_PASSWORD\",\n provider: config.id,\n source: runtime.localCredentialSource ?? \"app_local\",\n },\n ],\n secretValues: [username, password, encoded],\n };\n }\n return emptyAuth();\n}\n\nfunction emptyAuth(): ResolvedAuth {\n return { headers: {}, credentialSources: [], secretValues: [] };\n}\n\nasync function resolveHybridFallbackCredential(options: {\n auth:\n | Extract<ProviderApiAuthKind, { type: \"oauth-bearer-or-api-key-header\" }>\n | Extract<ProviderApiAuthKind, { type: \"oauth-bearer-or-bearer-key\" }>;\n config: ProviderApiConfig;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n args: ProviderApiRequestArgs;\n}): Promise<ProviderApiResolvedCredential | null> {\n // App-specific resolvers keep existing provider credentials working when a\n // caller explicitly selects a connection or account.\n if (!options.runtime.resolveCredential) return null;\n return resolveOptionalCredential({\n provider: options.config.id,\n workspaceProvider: options.auth.workspaceProvider,\n key: options.auth.key,\n ctx: options.ctx,\n runtime: options.runtime,\n connectionId: options.args.connectionId,\n });\n}\n\nasync function resolveAnyCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n keys: readonly string[];\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n for (const key of options.keys) {\n const credential = await resolveOptionalCredential({ ...options, key });\n if (credential?.value) return credential;\n }\n const scopeGap = await describeCredentialScopeGap(\n options.keys,\n options.ctx,\n ).catch(() => null);\n throw new Error(\n `${options.provider} credential not configured. Tried: ${options.keys.join(\n \", \",\n )}${scopeGap ? `. ${scopeGap}` : \"\"}`,\n );\n}\n\nasync function resolveRequiredCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential = await resolveOptionalCredential(options);\n if (!credential?.value) throw new Error(`${options.key} not configured`);\n return credential;\n}\n\nasync function resolveOptionalCredential(options: {\n provider: ProviderApiId;\n workspaceProvider: string | undefined;\n key: string;\n ctx: CredentialContext;\n runtime: ProviderApiRuntimeOptions;\n connectionId?: string | null;\n}): Promise<ProviderApiResolvedCredential | null> {\n const localCredentialSource =\n options.runtime.localCredentialSource ?? \"app_local\";\n const lookup: ProviderApiCredentialLookupOptions = {\n appId: options.runtime.appId,\n provider: options.provider,\n key: options.key,\n ctx: options.ctx,\n workspaceProvider: options.workspaceProvider,\n connectionId: options.connectionId,\n localCredentialSource,\n };\n if (options.runtime.resolveCredential) {\n return options.runtime.resolveCredential(lookup);\n }\n return defaultProviderApiCredentialResolver(lookup);\n}\n\nfunction omitCredentialValue(\n credential: ProviderApiResolvedCredential,\n): Omit<ProviderApiResolvedCredential, \"value\"> {\n const { value: _value, ...rest } = credential;\n return rest;\n}\n\nconst googleServiceTokenCache = new Map<\n string,\n { token: string; expiresAt: number }\n>();\n\nasync function getGoogleServiceAccountToken(\n scopes: readonly string[],\n runtime: ProviderApiRuntimeOptions,\n ctx: CredentialContext,\n): Promise<string> {\n const cacheKey = createHash(\"sha256\")\n .update(\n `${runtime.appId}:${ctx.orgId ?? ctx.userEmail}:${scopes.join(\" \")}`,\n )\n .digest(\"hex\");\n const cached = googleServiceTokenCache.get(cacheKey);\n if (cached && Date.now() < cached.expiresAt - 30_000) return cached.token;\n\n const credsJson = await resolveCredentialValue({\n config: getProviderApiConfig(\"gcloud\", runtime.providerOverrides),\n runtime,\n ctx,\n key: \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n args: { provider: \"gcloud\", path: \"/\" },\n });\n if (!credsJson) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS_JSON not configured\");\n }\n let creds: {\n type?: string;\n client_email?: string;\n private_key?: string;\n token_uri?: string;\n };\n try {\n creds = JSON.parse(credsJson) as typeof creds;\n } catch {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON is not valid JSON. Upload a service account JSON key.\",\n );\n }\n if (!creds.client_email || !creds.private_key) {\n throw new Error(\n \"GOOGLE_APPLICATION_CREDENTIALS_JSON must be a service account JSON key.\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const aud = creds.token_uri || \"https://oauth2.googleapis.com/token\";\n const jwt = await signRs256Jwt(\n {\n iss: creds.client_email,\n scope: scopes.join(\" \"),\n aud,\n iat: now,\n exp: now + 3600,\n },\n creds.private_key,\n );\n const res = await fetch(aud, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n assertion: jwt,\n }),\n });\n if (!res.ok) {\n throw new Error(`Google OAuth error ${res.status}: ${await res.text()}`);\n }\n const data = (await res.json()) as {\n access_token: string;\n expires_in?: number;\n };\n googleServiceTokenCache.set(cacheKey, {\n token: data.access_token,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n });\n return data.access_token;\n}\n\nasync function resolveOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n ctx: CredentialContext;\n accountId?: string | null;\n ownerEmail?: string | null;\n salesforceLoginUrl?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const ownerEmail = options.ownerEmail?.trim() || options.ctx.userEmail;\n const accounts = await listOAuthAccountsByOwner(\n options.auth.oauthProvider,\n ownerEmail,\n );\n if (accounts.length === 0) {\n throw new Error(\n `${options.auth.tokenLabel} is not connected for ${ownerEmail}.`,\n );\n }\n const accountId = options.accountId?.trim();\n const account = accountId\n ? accounts.find((entry) => entry.accountId === accountId)\n : accounts[0];\n if (!account) {\n throw new Error(\n `${options.auth.tokenLabel} account ${accountId} is not available to ${ownerEmail}.`,\n );\n }\n const tokens = account.tokens as OAuthTokens;\n const token = await getValidOAuthAccessToken({\n oauthProvider: options.auth.oauthProvider,\n accountId: account.accountId,\n ownerEmail,\n tokens,\n salesforceLoginUrl: options.salesforceLoginUrl,\n });\n return {\n key: `${options.auth.oauthProvider.toUpperCase()}_OAUTH_TOKEN`,\n value: token,\n source: \"oauth_token\",\n provider: options.auth.oauthProvider,\n accountId: account.accountId,\n accountLabel: account.displayName,\n };\n}\n\nasync function resolveConnectionBoundOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n workspaceProvider: string;\n connectionId?: string | null;\n accountId?: string | null;\n}): Promise<ProviderApiResolvedCredential> {\n const credential =\n await resolveOptionalConnectionBoundOAuthBearerToken(options);\n if (credential) return credential;\n throw new Error(\n `${options.auth.tokenLabel} requires an available workspace connection.`,\n );\n}\n\nasync function resolveOptionalConnectionBoundOAuthBearerToken(options: {\n auth: Extract<ProviderApiAuthKind, { type: \"oauth-bearer\" }>;\n runtime: ProviderApiRuntimeOptions;\n ctx: CredentialContext;\n workspaceProvider: string;\n connectionId?: string | null;\n accountId?: string | null;\n allowUnbound?: boolean;\n}): Promise<ProviderApiResolvedCredential | null> {\n const requestedConnectionId = options.connectionId?.trim();\n let resolved: Awaited<ReturnType<typeof resolveWorkspaceConnectionForApp>>;\n try {\n resolved = await resolveWorkspaceConnectionForApp({\n appId: options.runtime.appId,\n provider: options.workspaceProvider,\n connectionId: requestedConnectionId,\n requireConnected: true,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === \"Workspace connections require an authenticated user.\"\n ) {\n return null;\n }\n throw error;\n }\n if (!resolved.available || !resolved.connection) {\n if (requestedConnectionId) throw new Error(resolved.reason);\n return null;\n }\n const connectionAccountId = resolved.connection.accountId?.trim();\n if (!connectionAccountId) {\n if (options.allowUnbound) return null;\n throw new Error(\n `${options.auth.tokenLabel} workspace connection ${resolved.connection.id} is missing its OAuth account binding.`,\n );\n }\n const requestedAccountId = options.accountId?.trim();\n if (requestedAccountId && requestedAccountId !== connectionAccountId) {\n throw new Error(\n `${options.auth.tokenLabel} account ${requestedAccountId} does not match workspace connection ${requestedConnectionId}.`,\n );\n }\n const credential = await resolveOAuthBearerToken({\n auth: options.auth,\n ctx: options.ctx,\n accountId: connectionAccountId,\n ownerEmail: resolved.connection.ownerEmail,\n salesforceLoginUrl:\n options.auth.oauthProvider === \"salesforce\" &&\n typeof resolved.connection.config?.salesforceLoginUrl === \"string\"\n ? resolved.connection.config.salesforceLoginUrl\n : null,\n });\n return {\n ...credential,\n connectionId: resolved.connection.id,\n connectionLabel: resolved.connection.label,\n };\n}\n\nasync function getValidOAuthAccessToken(options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n salesforceLoginUrl?: string | null;\n}): Promise<string> {\n const accessToken =\n options.tokens.access_token ?? options.tokens.accessToken ?? \"\";\n if (!accessToken) {\n throw new Error(\n `${options.oauthProvider} OAuth account has no access token.`,\n );\n }\n const expiresAt = options.tokens.expiry_date ?? options.tokens.expiresAt;\n if (\n !expiresAt ||\n !Number.isFinite(expiresAt) ||\n expiresAt > Date.now() + 60_000\n ) {\n return accessToken;\n }\n\n const refreshToken =\n options.tokens.refresh_token ?? options.tokens.refreshToken;\n if (!refreshToken) return accessToken;\n if (\n options.oauthProvider === \"google\" ||\n options.oauthProvider === \"google-docs\"\n ) {\n return refreshGoogleOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"figma\") {\n return refreshFigmaOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"notion\") {\n return refreshNotionOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"github\") {\n return refreshGitHubOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"hubspot\") {\n return refreshHubSpotOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"salesforce\") {\n return refreshSalesforceOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"jira\") {\n return refreshJiraOAuthToken(options, refreshToken);\n }\n if (options.oauthProvider === \"sentry\") {\n return refreshSentryOAuthToken(options, refreshToken);\n }\n throw new Error(\n `${options.oauthProvider} OAuth token is expired and automatic refresh is not configured for provider-api.`,\n );\n}\n\nasync function refreshFigmaOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [clientId, clientSecret] = await Promise.all([\n resolveSecret(\"FIGMA_CLIENT_ID\"),\n resolveSecret(\"FIGMA_CLIENT_SECRET\"),\n ]);\n if (!clientId || !clientSecret) {\n throw new Error(\n \"FIGMA_CLIENT_ID and FIGMA_CLIENT_SECRET are required to refresh Figma OAuth tokens.\",\n );\n }\n const { response, data } = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.figma.com/v1/oauth/token\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"Figma\",\n );\n if (!response.ok || !data.access_token) {\n throw new Error(`Figma OAuth refresh failed (${response.status}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n token_type: data.token_type ?? \"bearer\",\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1_000,\n refresh_token: data.refresh_token ?? refreshToken,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshNotionOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [clientId, clientSecret] = await Promise.all([\n resolveSecret(\"NOTION_CLIENT_ID\"),\n resolveSecret(\"NOTION_CLIENT_SECRET\"),\n ]);\n if (!clientId || !clientSecret) {\n throw new Error(\n \"NOTION_CLIENT_ID and NOTION_CLIENT_SECRET are required to refresh Notion OAuth tokens.\",\n );\n }\n const { response, data } = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.notion.com/v1/oauth/token\",\n {\n method: \"POST\",\n headers: {\n Authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString(\"base64\")}`,\n \"Content-Type\": \"application/json\",\n \"Notion-Version\": \"2026-03-11\",\n },\n body: JSON.stringify({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"Notion\",\n );\n if (!response.ok || !data.access_token) {\n throw new Error(`Notion OAuth refresh failed (${response.status}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n token_type: data.token_type ?? \"bearer\",\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1_000,\n refresh_token: data.refresh_token ?? refreshToken,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshGitHubOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"GITHUB\");\n if (!credentials.length) {\n throw new Error(\n \"GITHUB_CLIENT_ID/SECRET not set for GitHub OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://github.com/login/oauth/access_token\",\n {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n }),\n },\n \"GitHub\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`GitHub OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function saveOAuthTokensAndLinkedJiraAccounts(options: {\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n };\n previousRefreshToken: string;\n updated: OAuthTokens;\n}): Promise<void> {\n const serializedTokens = options.updated as unknown as Record<\n string,\n unknown\n >;\n await saveOAuthTokens(\n options.options.oauthProvider,\n options.options.accountId,\n serializedTokens,\n options.options.ownerEmail,\n );\n\n const accounts = await listOAuthAccountsByOwner(\n options.options.oauthProvider,\n options.options.ownerEmail,\n );\n for (const account of accounts) {\n if (account.accountId === options.options.accountId) continue;\n const accountRefreshToken =\n (account.tokens.refresh_token as string | undefined) ??\n (account.tokens.refreshToken as string | undefined);\n if (accountRefreshToken !== options.previousRefreshToken) continue;\n await saveOAuthTokens(\n options.options.oauthProvider,\n account.accountId,\n serializedTokens,\n options.options.ownerEmail,\n );\n }\n}\n\nasync function refreshHubSpotOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"HUBSPOT\");\n if (!credentials.length) {\n throw new Error(\n \"HUBSPOT_CLIENT_ID/SECRET not set for HubSpot OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://api.hubapi.com/oauth/v3/token\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"HubSpot\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`HubSpot OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nasync function refreshSalesforceOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n salesforceLoginUrl?: string | null;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials =\n await resolveOAuthClientCredentialCandidates(\"SALESFORCE\");\n if (!credentials.length) {\n throw new Error(\n \"SALESFORCE_CLIENT_ID/SECRET not set for Salesforce OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n salesforceOAuthRefreshUrl(options.salesforceLoginUrl),\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Salesforce\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(\n `Salesforce OAuth refresh failed (${response?.status ?? 0}).`,\n );\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction salesforceOAuthRefreshUrl(value: string | null | undefined): string {\n const loginUrl = value?.trim() || \"https://login.salesforce.com\";\n try {\n const url = new URL(loginUrl);\n if (\n url.protocol !== \"https:\" ||\n url.username ||\n url.password ||\n url.port ||\n url.pathname !== \"/\" ||\n url.search ||\n url.hash ||\n (url.hostname !== \"login.salesforce.com\" &&\n url.hostname !== \"test.salesforce.com\")\n ) {\n throw new Error(\"Invalid Salesforce OAuth login URL.\");\n }\n return `${url.origin}/services/oauth2/token`;\n } catch {\n throw new Error(\"Invalid Salesforce OAuth login URL.\");\n }\n}\n\nasync function refreshJiraOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"JIRA\");\n if (!credentials.length) {\n throw new Error(\"JIRA_CLIENT_ID/SECRET not set for Jira OAuth refresh.\");\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://auth.atlassian.com/oauth/token\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Jira\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`Jira OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokensAndLinkedJiraAccounts({\n options,\n previousRefreshToken: refreshToken,\n updated,\n });\n return data.access_token;\n}\n\nasync function refreshSentryOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const credentials = await resolveOAuthClientCredentialCandidates(\"SENTRY\");\n if (!credentials.length) {\n throw new Error(\n \"SENTRY_CLIENT_ID/SECRET not set for Sentry OAuth refresh.\",\n );\n }\n\n let response: Response | null = null;\n let data: {\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n } = {};\n for (const credential of credentials) {\n const result = await fetchBoundedOAuthRefreshJson<{\n access_token?: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n }>(\n \"https://sentry.io/oauth/token/\",\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: credential.clientId,\n client_secret: credential.clientSecret,\n refresh_token: refreshToken,\n }),\n },\n \"Sentry\",\n );\n response = result.response;\n data = result.data;\n if (response.ok && data.access_token) break;\n }\n\n if (!response?.ok || !data.access_token) {\n throw new Error(`Sentry OAuth refresh failed (${response?.status ?? 0}).`);\n }\n const updated = {\n ...options.tokens,\n access_token: data.access_token,\n refresh_token: data.refresh_token ?? refreshToken,\n token_type: data.token_type ?? options.tokens.token_type,\n ...(Number.isFinite(data.expires_in) && (data.expires_in ?? 0) > 0\n ? { expiry_date: Date.now() + (data.expires_in as number) * 1_000 }\n : {}),\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n updated as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nconst OAUTH_REFRESH_TIMEOUT_MS = 10_000;\nconst OAUTH_REFRESH_MAX_BYTES = 256 * 1024;\n\nasync function fetchBoundedOAuthRefreshJson<T extends Record<string, unknown>>(\n url: string,\n init: RequestInit,\n providerLabel: string,\n): Promise<{ response: Response; data: T }> {\n let response: Response;\n try {\n response = await fetch(url, {\n ...init,\n signal: AbortSignal.timeout(OAUTH_REFRESH_TIMEOUT_MS),\n });\n } catch {\n throw new Error(`${providerLabel} OAuth refresh request failed.`);\n }\n const declaredLength = Number(response.headers.get(\"content-length\"));\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > OAUTH_REFRESH_MAX_BYTES\n ) {\n throw new Error(\n `${providerLabel} OAuth refresh response exceeded the size limit.`,\n );\n }\n if (!response.body) return { response, data: {} as T };\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let length = 0;\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n length += chunk.value.byteLength;\n if (length > OAUTH_REFRESH_MAX_BYTES) {\n await reader.cancel();\n break;\n }\n chunks.push(chunk.value);\n }\n } catch {\n throw new Error(`${providerLabel} OAuth refresh request failed.`);\n }\n if (length > OAUTH_REFRESH_MAX_BYTES) {\n throw new Error(\n `${providerLabel} OAuth refresh response exceeded the size limit.`,\n );\n }\n try {\n const parsed = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n return {\n response,\n data:\n parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as T)\n : ({} as T),\n };\n } catch {\n return { response, data: {} as T };\n }\n}\n\nasync function refreshGoogleOAuthToken(\n options: {\n oauthProvider: string;\n accountId: string;\n ownerEmail: string;\n tokens: OAuthTokens;\n },\n refreshToken: string,\n): Promise<string> {\n const [scopedClientId, scopedClientSecret] = await Promise.all([\n resolveSecret(\"GOOGLE_CLIENT_ID\"),\n resolveSecret(\"GOOGLE_CLIENT_SECRET\"),\n ]);\n const credentialCandidates = dedupeGoogleOAuthCredentials([\n ...(scopedClientId && scopedClientSecret\n ? [{ clientId: scopedClientId, clientSecret: scopedClientSecret }]\n : []),\n ...resolveGoogleProviderCredentialCandidates(),\n ]);\n if (!credentialCandidates.length) {\n throw new Error(\n \"GOOGLE_CLIENT_ID/SECRET not set for Google OAuth refresh.\",\n );\n }\n\n let data: {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n } | null = null;\n let lastStatusText = \"refresh failed\";\n for (const credentials of credentialCandidates) {\n const res = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams({\n refresh_token: refreshToken,\n client_id: credentials.clientId,\n client_secret: credentials.clientSecret,\n grant_type: \"refresh_token\",\n }),\n });\n lastStatusText = res.statusText;\n data = (await res.json()) as {\n access_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n error?: string;\n error_description?: string;\n };\n if (res.ok && data.access_token) break;\n if (data.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n continue;\n }\n const detail = data.error_description ?? data.error ?? lastStatusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n\n if (!data?.access_token) {\n if (data?.error && PERMANENT_GOOGLE_OAUTH_REFRESH_ERRORS.has(data.error)) {\n await deleteOAuthTokens(options.oauthProvider, options.accountId);\n }\n const detail = data?.error_description ?? data?.error ?? lastStatusText;\n throw new Error(`Google OAuth refresh failed: ${detail}`);\n }\n const merged: OAuthTokens = {\n ...options.tokens,\n access_token: data.access_token,\n expiry_date: Date.now() + (data.expires_in ?? 3600) * 1000,\n token_type: data.token_type ?? options.tokens.token_type,\n scope: data.scope ?? options.tokens.scope,\n };\n await saveOAuthTokens(\n options.oauthProvider,\n options.accountId,\n merged as unknown as Record<string, unknown>,\n options.ownerEmail,\n );\n return data.access_token;\n}\n\nfunction dedupeGoogleOAuthCredentials(\n candidates: Array<{ clientId: string; clientSecret: string }>,\n): Array<{ clientId: string; clientSecret: string }> {\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n if (seen.has(candidate.clientId)) return false;\n seen.add(candidate.clientId);\n return true;\n });\n}\n\nasync function resolveOAuthClientCredentialCandidates(\n provider: string,\n): Promise<Array<{ clientId: string; clientSecret: string }>> {\n const [clientId, clientSecret, integrationClientId, integrationClientSecret] =\n await Promise.all([\n resolveSecret(`${provider}_CLIENT_ID`),\n resolveSecret(`${provider}_CLIENT_SECRET`),\n resolveSecret(`${provider}_INTEGRATION_CLIENT_ID`),\n resolveSecret(`${provider}_INTEGRATION_CLIENT_SECRET`),\n ]);\n const candidates = [\n integrationClientId && integrationClientSecret\n ? { clientId: integrationClientId, clientSecret: integrationClientSecret }\n : null,\n clientId && clientSecret ? { clientId, clientSecret } : null,\n ].filter((value): value is { clientId: string; clientSecret: string } =>\n Boolean(value),\n );\n if (provider === \"SALESFORCE\") {\n const [consumerKey, consumerSecret] = await Promise.all([\n resolveSecret(\"SALESFORCE_CONSUMER_KEY\"),\n resolveSecret(\"SALESFORCE_CONSUMER_SECRET\"),\n ]);\n if (consumerKey && consumerSecret) {\n candidates.push({ clientId: consumerKey, clientSecret: consumerSecret });\n }\n }\n const seen = new Set<string>();\n return candidates.filter((candidate) => {\n if (seen.has(candidate.clientId)) return false;\n seen.add(candidate.clientId);\n return true;\n });\n}\n\nfunction normalizeMethod(\n method: ProviderApiMethod | undefined,\n): ProviderApiMethod {\n const normalized = String(method || \"GET\").toUpperCase();\n if (\n normalized === \"GET\" ||\n normalized === \"POST\" ||\n normalized === \"PUT\" ||\n normalized === \"PATCH\" ||\n normalized === \"DELETE\" ||\n normalized === \"HEAD\"\n ) {\n return normalized;\n }\n throw new Error(`Unsupported HTTP method: ${method}`);\n}\n\nfunction sanitizeOutboundHeaders(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const headers: Record<string, string> = {};\n for (const [name, rawValue] of Object.entries(value)) {\n const lower = name.toLowerCase();\n if (!HEADER_NAME_RE.test(name) || BLOCKED_OUTBOUND_HEADERS.has(lower)) {\n continue;\n }\n if (rawValue === undefined || rawValue === null) continue;\n const headerValue = String(rawValue);\n if (/[\\r\\n]/.test(headerValue)) continue;\n headers[name] = headerValue;\n }\n return headers;\n}\n\nfunction prepareBody(\n body: unknown,\n headers: Record<string, string>,\n): BodyInit | undefined {\n if (body === undefined || body === null) return undefined;\n if (typeof body === \"string\") return body;\n const hasContentType = Object.keys(headers).some(\n (name) => name.toLowerCase() === \"content-type\",\n );\n if (!hasContentType) headers[\"Content-Type\"] = \"application/json\";\n return JSON.stringify(body);\n}\n\nfunction runtimeOptionsAppId(runtime: ProviderApiRuntimeOptions): string {\n return runtime.appId || \"app\";\n}\n\nasync function fetchWithTimeout(\n optionsUrl: string,\n options: {\n method?: ProviderApiMethod;\n headers?: Record<string, string>;\n body?: BodyInit;\n timeoutMs?: number;\n maxBytes?: number;\n secretValues?: string[];\n quota?: ProviderApiFetchQuotaOptions;\n },\n): Promise<ProviderApiHttpResponse> {\n const runOnce = async (): Promise<ProviderApiHttpResponse> => {\n const controller = new AbortController();\n const timeoutMs = clampTimeout(options.timeoutMs);\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n const method = options.method ?? \"GET\";\n const secretValues = options.secretValues ?? [];\n try {\n const dispatcher = (await createSsrfSafeDispatcher()) ?? undefined;\n const fetchOptions: RequestInit & { dispatcher?: unknown } = {\n method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n redirect: \"manual\",\n };\n if (dispatcher) fetchOptions.dispatcher = dispatcher;\n try {\n return await fetchProviderResponse(optionsUrl, fetchOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n } catch (error) {\n if (dispatcher && isDispatcherCompatibilityError(error)) {\n const fallbackOptions = { ...fetchOptions };\n delete fallbackOptions.dispatcher;\n return await fetchProviderResponse(optionsUrl, fallbackOptions, {\n maxBytes: options.maxBytes,\n secretValues,\n });\n }\n throw error;\n }\n } catch (error) {\n throw normalizeFetchError(error, {\n method,\n url: optionsUrl,\n timeoutMs,\n secretValues,\n });\n } finally {\n clearTimeout(timeout);\n }\n };\n\n if (options.quota) {\n return executeWithProviderQuota({\n request: {\n identity: options.quota.identity,\n method: options.quota.method,\n target: options.quota.target,\n requestKey: options.quota.requestKey,\n },\n execute: runOnce,\n inspect: (result) => ({\n status: result.status,\n headers: result.headers,\n }),\n buildQuotaExhaustedResult: providerQuotaExhaustedResponse,\n });\n }\n\n return runOnce();\n}\n\nfunction providerQuotaExhaustedResponse(\n detail: ProviderQuotaExhaustedDetail,\n): ProviderApiHttpResponse {\n const retryAfterSeconds = Math.max(0, Math.ceil(detail.retryAfterMs / 1000));\n return {\n status: 429,\n statusText: \"Provider quota cooldown\",\n ok: false,\n elapsedMs: 0,\n headers: {\n \"retry-after\": String(retryAfterSeconds),\n \"x-agent-native-provider-quota\": \"exhausted\",\n },\n contentType: \"application/json\",\n size: 0,\n truncated: false,\n json: {\n error: \"provider_quota_exhausted\",\n provider: detail.providerId,\n message:\n `Provider API quota is cooling down for ${detail.providerId}. ` +\n `Retry after ${detail.retryAt}.`,\n retryAt: detail.retryAt,\n retryAfterMs: detail.retryAfterMs,\n reason: detail.reason,\n method: detail.method,\n target: detail.target,\n },\n quota: {\n exhausted: true,\n providerId: detail.providerId,\n retryAfterMs: detail.retryAfterMs,\n retryAt: detail.retryAt,\n reason: detail.reason,\n },\n };\n}\n\nasync function fetchProviderResponse(\n url: string,\n fetchOptions: RequestInit & { dispatcher?: unknown },\n options: {\n maxBytes?: number;\n secretValues: string[];\n },\n): Promise<ProviderApiHttpResponse> {\n const startedAt = Date.now();\n const res = await fetch(url, fetchOptions);\n const elapsedMs = Date.now() - startedAt;\n const rawText = await readResponseTextWithLimit(\n res,\n clampMaxBytes(options.maxBytes),\n );\n const redactedText = redactString(rawText.text, options.secretValues);\n const parsed = tryParseJson(redactedText);\n return {\n status: res.status,\n statusText: res.statusText,\n ok: res.ok,\n elapsedMs,\n headers: redactSecrets(headersToObject(res.headers), options.secretValues),\n contentType: res.headers.get(\"content-type\") ?? null,\n size: rawText.size,\n truncated: rawText.truncated,\n text: parsed === undefined ? redactedText : undefined,\n json: parsed,\n };\n}\n\nfunction isDispatcherCompatibilityError(error: unknown): boolean {\n const err = error as {\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n const code = typeof err?.cause?.code === \"string\" ? err.cause.code : \"\";\n const detail = [\n typeof err?.message === \"string\" ? err.message : \"\",\n typeof err?.cause?.message === \"string\" ? err.cause.message : \"\",\n ]\n .join(\" \")\n .toLowerCase();\n return (\n code === \"UND_ERR_INVALID_ARG\" &&\n detail.includes(\"invalid onrequeststart method\")\n );\n}\n\nfunction normalizeFetchError(\n error: unknown,\n options: {\n method: ProviderApiMethod;\n url: string;\n timeoutMs: number;\n secretValues: string[];\n },\n): Error {\n const target = describeProviderRequestTarget(\n options.url,\n options.secretValues,\n );\n const err = error as {\n name?: unknown;\n message?: unknown;\n cause?: { code?: unknown; message?: unknown };\n };\n if (err?.name === \"AbortError\") {\n return new Error(\n `Provider API request timed out after ${options.timeoutMs}ms: ${options.method} ${target}`,\n { cause: error },\n );\n }\n\n const causeCode =\n typeof err?.cause?.code === \"string\" && err.cause.code\n ? ` (${err.cause.code})`\n : \"\";\n const detail =\n typeof err?.cause?.message === \"string\" && err.cause.message\n ? err.cause.message\n : typeof err?.message === \"string\" && err.message\n ? err.message\n : String(error);\n return new Error(\n `Provider API request failed${causeCode}: ${options.method} ${target}: ${redactString(detail, options.secretValues)}`,\n { cause: error },\n );\n}\n\nfunction describeProviderRequestTarget(\n rawUrl: string,\n secretValues: string[],\n): string {\n try {\n const url = new URL(rawUrl);\n return redactString(\n `${url.host}${url.pathname}${url.search}`,\n secretValues,\n );\n } catch {\n return redactString(rawUrl, secretValues);\n }\n}\n\nasync function readResponseTextWithLimit(\n response: Response,\n maxBytes: number,\n): Promise<{ text: string; truncated: boolean; size: number }> {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength && Number(contentLength) > maxBytes) {\n return {\n text: `(response too large - ${contentLength} bytes, max ${maxBytes})`,\n truncated: true,\n size: Number(contentLength),\n };\n }\n const buffer = await response.arrayBuffer();\n const size = buffer.byteLength;\n const bytes = new Uint8Array(buffer.slice(0, maxBytes));\n return {\n text: new TextDecoder().decode(bytes),\n truncated: size > maxBytes,\n size,\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n if (key.toLowerCase() !== \"set-cookie\") result[key] = value;\n });\n return result;\n}\n\nfunction tryParseJson(text: string): unknown | undefined {\n const trimmed = text.trim();\n if (!trimmed || !/^[{[]/.test(trimmed)) return undefined;\n try {\n return JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n}\n\nfunction redactSecrets<T>(value: T, secretValues: string[]): T {\n if (secretValues.length === 0) return value;\n if (typeof value === \"string\") return redactString(value, secretValues) as T;\n if (Array.isArray(value)) {\n return value.map((item) => redactSecrets(item, secretValues)) as T;\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactSecrets(entry, secretValues),\n ]),\n ) as T;\n }\n return value;\n}\n\nfunction redactString(text: string, secretValues: string[]): string {\n let output = text;\n for (const secret of [...secretValues].sort((a, b) => b.length - a.length)) {\n if (!secret) continue;\n output = output.split(secret).join(\"[redacted]\");\n try {\n output = output.split(encodeURIComponent(secret)).join(\"[redacted]\");\n } catch {}\n }\n return output;\n}\n\nfunction mergeQueryObjects(\n base: unknown,\n extra: Record<string, string>,\n): unknown {\n if (!base) return extra;\n if (typeof base === \"string\") {\n const params = new URLSearchParams(base.replace(/^\\?/, \"\"));\n for (const [key, value] of Object.entries(extra)) {\n params.set(key, value);\n }\n return params.toString();\n }\n if (typeof base === \"object\" && !Array.isArray(base)) {\n return { ...(base as Record<string, unknown>), ...extra };\n }\n return extra;\n}\n\nfunction setValueAtPath(base: unknown, path: string, value: unknown): unknown {\n const root =\n base && typeof base === \"object\" && !Array.isArray(base)\n ? { ...(base as Record<string, unknown>) }\n : {};\n const parts = path.split(\".\").filter(Boolean);\n if (!parts.length) return root;\n\n let current: Record<string, unknown> = root;\n for (const part of parts.slice(0, -1)) {\n const existing = current[part];\n const next =\n existing && typeof existing === \"object\" && !Array.isArray(existing)\n ? { ...(existing as Record<string, unknown>) }\n : {};\n current[part] = next;\n current = next;\n }\n current[parts[parts.length - 1]!] = value;\n return root;\n}\n\nfunction clampTimeout(timeoutMs: number | undefined): number {\n if (!Number.isFinite(timeoutMs)) return DEFAULT_TIMEOUT_MS;\n return Math.max(1_000, Math.min(MAX_TIMEOUT_MS, Math.floor(timeoutMs!)));\n}\n\nfunction clampMaxBytes(maxBytes: number | undefined): number {\n if (!Number.isFinite(maxBytes)) return DEFAULT_MAX_BYTES;\n return Math.max(1_000, Math.min(MAX_MAX_BYTES, Math.floor(maxBytes!)));\n}\n\n/** Resolve a dot-path from a parsed JSON object, e.g. \"meta.next_cursor\". */\nfunction dotGet(obj: unknown, path: string): unknown {\n if (!path) return obj;\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Handle saveToFile: write the full provider-api response body to a workspace\n * file and return a compact summary.\n */\nasync function handleSaveToFile(\n filePath: string,\n responseText: string,\n contentType: string | null,\n status: number,\n): Promise<unknown> {\n const { writeWorkspaceFile, SAVE_TO_FILE_MAX_BYTES: maxSaveBytes } =\n await import(\"../workspace-files/store.js\");\n const { getRequestOrgId, getRequestUserEmail } =\n await import(\"../server/request-context.js\");\n\n const orgId = getRequestOrgId();\n const email = getRequestUserEmail();\n const scope = orgId\n ? { scope: \"org\" as const, scopeId: orgId }\n : email\n ? { scope: \"user\" as const, scopeId: email }\n : null;\n\n if (!scope) {\n throw new Error(\n \"saveToFile requires an authenticated request context (no user email or orgId found).\",\n );\n }\n\n const mimeType = contentType?.split(\";\")[0].trim() ?? \"text/plain\";\n await writeWorkspaceFile(scope, filePath, responseText, mimeType, {\n maxFileBytes: maxSaveBytes,\n });\n const bytes = Buffer.byteLength(responseText, \"utf8\");\n const preview = responseText.slice(0, 2000);\n return {\n savedToFile: true,\n savedTo: filePath,\n status,\n bytes,\n contentType: mimeType,\n preview: preview.length < responseText.length ? `${preview}…` : preview,\n };\n}\n\n/**\n * Execute paginated requests, accumulating items across pages.\n * Returns the accumulated items array and the last response for metadata.\n */\nasync function fetchAllPages(\n config: FetchAllPagesConfig,\n executeOnePage: (extra?: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n }) => Promise<{\n text: string;\n contentType: string | null;\n status: number;\n ok: boolean;\n }>,\n): Promise<{\n items: unknown[];\n pageCount: number;\n lastStatus: number;\n lastContentType: string | null;\n truncated: boolean;\n nextCursor: string | null;\n}> {\n const maxPages = Math.min(\n Number.isFinite(config.maxPages) && config.maxPages! > 0\n ? config.maxPages!\n : 10,\n FETCH_ALL_PAGES_MAX,\n );\n\n const items: unknown[] = [];\n let cursor: string | undefined;\n let pageCount = 0;\n let lastStatus = 0;\n let lastContentType: string | null = null;\n let truncated = false;\n\n if (!config.cursorParam && !config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages requires cursorParam or cursorBodyPath to send the next cursor.\",\n );\n }\n if (config.cursorParam && config.cursorBodyPath) {\n throw new Error(\n \"fetchAllPages accepts exactly one cursor method: cursorParam or cursorBodyPath.\",\n );\n }\n\n while (pageCount < maxPages) {\n const extra: {\n query?: Record<string, string>;\n bodyCursor?: { path: string; value: string };\n } = {};\n if (cursor) {\n if (config.cursorParam) extra.query = { [config.cursorParam]: cursor };\n if (config.cursorBodyPath) {\n extra.bodyCursor = { path: config.cursorBodyPath, value: cursor };\n }\n }\n\n const page = await executeOnePage(pageCount > 0 ? extra : undefined);\n lastStatus = page.status;\n lastContentType = page.contentType;\n pageCount++;\n\n if (!page.ok) {\n const preview = page.text.replace(/\\s+/g, \" \").trim().slice(0, 500);\n throw new Error(\n `fetchAllPages request failed with HTTP ${page.status}${\n preview ? `: ${preview}` : \"\"\n }`,\n );\n }\n\n let body: unknown;\n try {\n body = JSON.parse(page.text);\n } catch {\n body = page.text;\n }\n\n // Extract items\n if (config.itemsPath) {\n const extracted = dotGet(body, config.itemsPath);\n if (Array.isArray(extracted)) {\n items.push(...extracted);\n } else if (extracted !== undefined) {\n items.push(extracted);\n }\n } else {\n items.push(body);\n }\n\n // Extract next cursor\n const nextCursor = dotGet(body, config.cursorPath);\n if (\n !nextCursor ||\n nextCursor === \"\" ||\n nextCursor === null ||\n nextCursor === cursor\n ) {\n truncated = false;\n break;\n }\n cursor = String(nextCursor);\n truncated = pageCount >= maxPages;\n }\n\n return {\n items,\n pageCount,\n lastStatus,\n lastContentType,\n truncated,\n nextCursor: truncated ? (cursor ?? null) : null,\n };\n}\n\nfunction fingerprint(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nfunction base64UrlEncodeString(value: string): string {\n return base64UrlEncode(new TextEncoder().encode(value));\n}\n\nfunction pemToPkcs8(pem: string): Uint8Array {\n const body = pem\n .replace(/-----BEGIN [^-]+-----/g, \"\")\n .replace(/-----END [^-]+-----/g, \"\")\n .replace(/\\s+/g, \"\");\n const binary = atob(body);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n out[i] = binary.charCodeAt(i);\n }\n return out;\n}\n\nconst keyCache = new Map<string, Promise<CryptoKey>>();\n\nasync function privateKeyCacheKey(privateKeyPem: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(privateKeyPem) as BufferSource,\n );\n return `sha256:${base64UrlEncode(new Uint8Array(digest))}`;\n}\n\nasync function importRs256Key(privateKeyPem: string): Promise<CryptoKey> {\n const cacheKey = await privateKeyCacheKey(privateKeyPem);\n let cached = keyCache.get(cacheKey);\n if (!cached) {\n cached = crypto.subtle.importKey(\n \"pkcs8\",\n pemToPkcs8(privateKeyPem) as BufferSource,\n { name: \"RSASSA-PKCS1-v1_5\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n keyCache.set(cacheKey, cached);\n }\n return cached;\n}\n\nasync function signRs256Jwt(\n payload: Record<string, unknown>,\n privateKeyPem: string,\n): Promise<string> {\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const signingInput = `${base64UrlEncodeString(\n JSON.stringify(header),\n )}.${base64UrlEncodeString(JSON.stringify(payload))}`;\n\n const key = await importRs256Key(privateKeyPem);\n const signature = await crypto.subtle.sign(\n \"RSASSA-PKCS1-v1_5\",\n key,\n new TextEncoder().encode(signingInput) as BufferSource,\n );\n\n return `${signingInput}.${base64UrlEncode(new Uint8Array(signature))}`;\n}\n"]}
|