@agent-native/core 0.145.5 → 0.145.7
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 +1 -1
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +17 -1
- package/corpus/templates/analytics/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +22 -3
- package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/analytics/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/analytics/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/analytics/AGENTS.md +2 -1
- package/corpus/templates/analytics/actions/account-deep-dive.ts +83 -47
- package/corpus/templates/analytics/actions/create-dashboard-folder.ts +27 -0
- package/corpus/templates/analytics/actions/gong-calls.ts +3 -3
- package/corpus/templates/analytics/actions/list-dashboard-folders.ts +26 -0
- package/corpus/templates/analytics/actions/list-sql-dashboards.ts +1 -0
- package/corpus/templates/analytics/actions/set-dashboard-folder.ts +26 -0
- package/corpus/templates/analytics/app/components/ProviderCorpusJobNotifier.tsx +18 -3
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +6 -4
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +12 -2
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +35 -20
- package/corpus/templates/analytics/app/global.css +17 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-revisions.ts +29 -15
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -3
- package/corpus/templates/analytics/app/i18n-data.ts +296 -0
- package/corpus/templates/analytics/app/lib/prefetch-keys.ts +23 -2
- package/corpus/templates/analytics/app/pages/DashboardOverview.tsx +642 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +66 -31
- package/corpus/templates/analytics/app/root.tsx +4 -0
- package/corpus/templates/analytics/app/routes/dashboards._index.tsx +5 -1
- package/corpus/templates/analytics/changelog/2026-08-07-added-a-dashboards-overview-with-personal-and-shared-folders.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-07-analytics-no-longer-stalls-under-bursts-of-event-ingest-key-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-07-analytics-tracking-and-chat-startup-no-longer-emit-avoidable.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-07-dashboard-panels-now-load-custom-api-data-programs-reliably.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-07-gong-searches-conserve-api-quota-and-report-incomplete-coverage.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-07-searchable-dashboards-make-personal-and-shared-folders-easie.md +6 -0
- package/corpus/templates/analytics/netlify.toml +3 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +112 -0
- package/corpus/templates/analytics/server/db/index.ts +12 -0
- package/corpus/templates/analytics/server/db/schema.ts +14 -0
- package/corpus/templates/analytics/server/jobs/analytics-rollup-backfill.ts +4 -0
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +1 -0
- package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +85 -15
- package/corpus/templates/analytics/server/lib/dashboard-folders-store.ts +168 -0
- package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +9 -4
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +116 -1
- package/corpus/templates/analytics/server/lib/first-party-analytics-rollups.ts +4 -8
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +65 -10
- package/corpus/templates/analytics/server/lib/gong.ts +139 -78
- package/corpus/templates/analytics/server/lib/session-replay.ts +5 -5
- package/corpus/templates/analytics/server/plugins/db.ts +55 -15
- package/corpus/templates/analytics/server/plugins/session-replay-retention-jobs.ts +6 -2
- package/corpus/templates/analytics/server/routes/api/session-replay/retention.post.ts +65 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/assets/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/assets/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/assets/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/brain/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/brain/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/calendar/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/calendar/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/calendar/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/chat/.env.example +3 -0
- package/corpus/templates/chat/AGENTS.md +4 -0
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/clips/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/clips/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/clips/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/clips/actions/lib/audio-only-transcription.ts +4 -0
- package/corpus/templates/clips/actions/request-transcript.ts +52 -3
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +3 -10
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +1 -0
- package/corpus/templates/clips/changelog/2026-08-07-screen-recordings-now-capture-tab-and-system-audio-even-when.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-07-transcription-now-retries-transient-cloud-failures-automatic.md +6 -0
- package/corpus/templates/clips/server/db/schema.ts +7 -0
- package/corpus/templates/clips/server/plugins/db.ts +8 -0
- package/corpus/templates/clips/shared/recording-capture.ts +38 -0
- package/corpus/templates/clips/shared/transcript-failure.ts +89 -0
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/content/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/content/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/content/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/content/.env.example +9 -3
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -0
- package/corpus/templates/content/changelog/2026-08-07-collapsed-sidebar-utility-buttons-stay-anchored-at-the-botto.md +6 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/crm/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/crm/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/design/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/design/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/design/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/dispatch/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/factory/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/factory/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/factory/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/factory/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/factory/actions/babysit-agent-native-pull-request.ts +279 -0
- package/corpus/templates/factory/actions/get-factory-automation-health.ts +23 -4
- package/corpus/templates/factory/app/components/factory/FactoryCanvas.tsx +1 -1
- package/corpus/templates/factory/app/routes/factory.tsx +21 -3
- package/corpus/templates/factory/changelog/2026-08-07-factory-can-keep-builder-bot-pull-requests-moving-by-request.md +6 -0
- package/corpus/templates/factory/server/lib/require-factory-automation.ts +1 -0
- package/corpus/templates/factory/server/plugins/agent-chat.ts +4 -1
- package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +81 -12
- package/corpus/templates/factory/server/triage/github-client.ts +31 -0
- package/corpus/templates/factory/server/triage/pr-babysit.ts +75 -1
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/forms/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/forms/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/forms/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/macros/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/macros/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/mail/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/mail/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/mail/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/plan/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/plan/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -1
- package/corpus/templates/plan/changelog/2026-08-07-inline-help-icons-now-stay-visually-balanced-with-nearby-tex.md +6 -0
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/slides/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/slides/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/slides/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/slides/.env.example +5 -0
- package/corpus/templates/slides/changelog/2026-08-07-fixed-generated-slides-briefly-disappearing-while-they-are-b.md +6 -0
- package/corpus/templates/slides/server/plugins/collab.ts +20 -8
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +18 -0
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/corpus/templates/tasks/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/corpus/templates/tasks/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/corpus/templates/tasks/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/corpus/templates/tasks/.env.example +3 -0
- package/dist/agent/production-agent.js +24 -3
- package/dist/client/AgentPanel.d.ts +6 -0
- package/dist/client/AgentPanel.js +176 -30
- package/dist/client/AssistantChat.d.ts +2 -0
- package/dist/client/AssistantChat.js +4 -1
- package/dist/client/ConnectBuilderCard.js +6 -11
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/RuntimeConfigNotice.d.ts +1 -0
- package/dist/client/RuntimeConfigNotice.js +94 -0
- package/dist/client/agent-chat/index.d.ts +1 -1
- package/dist/client/agent-chat/index.js +1 -1
- package/dist/client/agent-chat-adapter.js +85 -4
- package/dist/client/agent-page/AgentTabsPage.js +1 -1
- package/dist/client/agent-sidebar-state.d.ts +6 -0
- package/dist/client/agent-sidebar-state.js +25 -0
- package/dist/client/app-providers.js +2 -1
- package/dist/client/assistant-ui-recovery.js +1 -1
- package/dist/client/chat/index.d.ts +1 -1
- package/dist/client/chat/index.js +1 -1
- package/dist/client/chat/markdown-renderer.d.ts +2 -1
- package/dist/client/chat/markdown-renderer.js +48 -2
- package/dist/client/chat/message-components.d.ts +6 -0
- package/dist/client/chat/message-components.js +182 -53
- package/dist/client/chat/tool-call-display.d.ts +16 -4
- package/dist/client/chat/tool-call-display.js +225 -18
- package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
- package/dist/client/frame-protocol.d.ts +4 -0
- package/dist/client/i18n.js +9 -0
- package/dist/client/integrations/IntegrationsPanel.js +2 -5
- package/dist/client/onboarding/FirstRunOnboarding.js +2 -3
- package/dist/client/org/TeamPage.js +49 -6
- package/dist/client/org/hooks.d.ts +7 -2
- package/dist/client/org/hooks.js +11 -4
- package/dist/client/resources/McpConnectionSuggestion.js +2 -3
- package/dist/client/resources/McpIntegrationDialog.js +2 -16
- package/dist/client/resources/McpIntegrationLogo.d.ts +11 -0
- package/dist/client/resources/McpIntegrationLogo.js +14 -0
- package/dist/client/resources/ResourceTree.js +1 -1
- package/dist/client/resources/mcp-integration-logos.d.ts +1 -0
- package/dist/client/resources/mcp-integration-logos.js +47 -18
- package/dist/client/settings/useBuilderStatus.js +6 -0
- package/dist/client/ui/index.d.ts +1 -0
- package/dist/client/ui/index.js +1 -0
- package/dist/client/use-db-sync.js +4 -0
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/config.d.ts +26 -3
- package/dist/config.js +106 -14
- package/dist/db/ddl-guard.d.ts +15 -2
- package/dist/db/ddl-guard.js +53 -5
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/jobs/scheduler.js +7 -0
- package/dist/localization/default-messages.d.ts +17 -0
- package/dist/localization/default-messages.js +17 -0
- package/dist/mcp/oauth-client-metadata.js +5 -1
- package/dist/mcp/oauth-route.d.ts +5 -4
- package/dist/mcp/oauth-route.js +25 -9
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.js +9 -10
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +3 -3
- package/dist/org/handlers.d.ts +1 -0
- package/dist/org/handlers.js +17 -2
- package/dist/provider-api/actions/custom-provider-registration.d.ts +5 -5
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/provider-api/corpus-jobs.d.ts +12 -2
- package/dist/provider-api/corpus-jobs.js +31 -1
- package/dist/provider-api/index.d.ts +2 -0
- package/dist/provider-api/index.js +7 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +1 -1
- package/dist/server/agent-chat/recurring-jobs-runtime.js +14 -2
- package/dist/server/agent-chat/script-entries.js +12 -1
- package/dist/server/agent-chat-plugin.js +2 -2
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts +1 -0
- package/dist/server/auth.js +85 -1
- package/dist/server/better-auth-instance.d.ts +9 -0
- package/dist/server/better-auth-instance.js +25 -11
- package/dist/server/core-routes-plugin.d.ts +7 -0
- package/dist/server/core-routes-plugin.js +51 -5
- package/dist/server/create-server.js +23 -2
- package/dist/server/db-pressure.d.ts +38 -0
- package/dist/server/db-pressure.js +147 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +1 -0
- package/dist/server/legacy-auth-migration.d.ts +10 -0
- package/dist/server/legacy-auth-migration.js +37 -0
- package/dist/server/onboarding-html.js +206 -2
- package/dist/server/poll.d.ts +26 -0
- package/dist/server/poll.js +108 -13
- package/dist/server/ssr-handler.js +4 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -0
- package/dist/shared/runtime-config.d.ts +44 -0
- package/dist/shared/runtime-config.js +284 -0
- package/dist/styles/agent-native.css +48 -1
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +18 -0
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
- package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/dist/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/dist/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/dist/templates/chat/.env.example +3 -0
- package/dist/templates/chat/AGENTS.md +4 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +18 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -0
- package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/dist/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/dist/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/dist/templates/default/AGENTS.md +6 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
- package/dist/templates/default/app/i18n/de-DE.ts +6 -0
- package/dist/templates/default/app/i18n/en-US.ts +6 -0
- package/dist/templates/default/app/i18n/es-ES.ts +6 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +18 -0
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/dist/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/dist/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +18 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -0
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +8 -0
- package/dist/templates/workspace-core/AGENTS.md +7 -2
- package/dist/templates/workspace-root/AGENTS.md +5 -0
- package/dist/vite/client.d.ts +3 -3
- package/dist/vite/client.js +47 -1
- package/dist/vite/index.d.ts +1 -1
- package/docs/content/agent-native-config.mdx +240 -139
- package/docs/content/authentication.mdx +17 -0
- package/docs/content/deployment.mdx +19 -14
- package/docs/content/drop-in-agent.mdx +19 -2
- package/docs/content/environment-variables.mdx +63 -38
- package/docs/content/getting-started-actions.mdx +15 -6
- package/docs/content/getting-started-database.mdx +14 -10
- package/docs/content/getting-started-pages.mdx +32 -35
- package/docs/content/getting-started.mdx +7 -6
- package/package.json +1 -1
- package/src/templates/chat/.agents/skills/actions/SKILL.md +18 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/chat/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -0
- package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/src/templates/chat/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/src/templates/chat/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/src/templates/chat/.env.example +3 -0
- package/src/templates/chat/AGENTS.md +4 -0
- package/src/templates/default/.agents/skills/actions/SKILL.md +18 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -0
- package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/src/templates/default/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/src/templates/default/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/src/templates/default/AGENTS.md +6 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/src/templates/default/app/i18n/en-US.ts +6 -0
- package/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/src/templates/headless/.agents/skills/actions/SKILL.md +18 -0
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/src/templates/headless/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/src/templates/headless/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +18 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +45 -47
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -0
- package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +76 -23
- package/src/templates/workspace-core/.agents/skills/turn-into-app/agents/openai.yaml +2 -2
- package/src/templates/workspace-core/.agents/skills/turn-into-app/references/fresh-project.md +64 -0
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +4 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +8 -0
- package/src/templates/workspace-core/AGENTS.md +7 -2
- package/src/templates/workspace-root/AGENTS.md +5 -0
- package/corpus/templates/dispatch/app/routes/admin.apps.$appId.tsx +0 -1
- package/corpus/templates/dispatch/app/routes/admin.apps.tsx +0 -1
package/dist/client/org/hooks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
2
2
|
import { canInviteOrgMembers, canManageOrg, canManageOrgDomain, } from "../../org/permissions.js";
|
|
3
3
|
import { agentNativePath } from "../api-path.js";
|
|
4
4
|
const ORG_BASE = agentNativePath("/_agent-native/org");
|
|
@@ -51,14 +51,21 @@ export function useOrgRole() {
|
|
|
51
51
|
error: query.error,
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
export
|
|
54
|
+
export const ORG_MEMBER_PAGE_SIZE = 25;
|
|
55
|
+
export function useOrgMembers(offset = 0) {
|
|
55
56
|
// Scope the cache by active orgId so switching or creating an org forces a
|
|
56
57
|
// fresh fetch rather than briefly showing the previous org's members.
|
|
57
58
|
const { data: org } = useOrg();
|
|
59
|
+
const params = new URLSearchParams({
|
|
60
|
+
limit: String(ORG_MEMBER_PAGE_SIZE),
|
|
61
|
+
offset: String(offset),
|
|
62
|
+
});
|
|
58
63
|
return useQuery({
|
|
59
|
-
queryKey: ["org-members", org?.orgId ?? null],
|
|
60
|
-
queryFn: () => apiFetch(`${ORG_BASE}/members`),
|
|
64
|
+
queryKey: ["org-members", org?.orgId ?? null, offset],
|
|
65
|
+
queryFn: () => apiFetch(`${ORG_BASE}/members?${params}`),
|
|
66
|
+
enabled: Boolean(org?.orgId),
|
|
61
67
|
staleTime: 30_000,
|
|
68
|
+
placeholderData: (previousData, previousQuery) => previousQuery?.queryKey[1] === org?.orgId ? previousData : undefined,
|
|
62
69
|
});
|
|
63
70
|
}
|
|
64
71
|
export function useOrgInvitations() {
|
|
@@ -7,6 +7,7 @@ import { useT } from "../i18n.js";
|
|
|
7
7
|
import { clearMcpConnectionResume, notifyMcpConnectionComplete, saveMcpConnectionResume, } from "./mcp-connection-resume.js";
|
|
8
8
|
import { buildMcpOAuthStartUrl, findMcpIntegrationForText, getMcpIntegrationApiFallback, getDefaultMcpIntegrations, isMcpConnectionFailureText, navigateToMcpOAuthStart, shouldOfferMcpIntegrationOrganizationScope, } from "./mcp-integration-catalog.js";
|
|
9
9
|
import { McpIntegrationDialog } from "./McpIntegrationDialog.js";
|
|
10
|
+
import { McpIntegrationLogo } from "./McpIntegrationLogo.js";
|
|
10
11
|
import { useCreateMcpServer, useMcpServers, } from "./use-mcp-servers.js";
|
|
11
12
|
export function findMcpConnectionSuggestionIntegration({ text, contextText = "", variant = "composer", integrations = getDefaultMcpIntegrations(), }) {
|
|
12
13
|
return findMcpIntegrationForText(variant === "response" ? contextText : text, integrations);
|
|
@@ -51,7 +52,6 @@ export function McpConnectionSuggestion({ text, contextText = "", variant = "com
|
|
|
51
52
|
const [dismissedId, setDismissedId] = useState(null);
|
|
52
53
|
const [connecting, setConnecting] = useState(false);
|
|
53
54
|
const [error, setError] = useState(null);
|
|
54
|
-
const [logoLoadFailed, setLogoLoadFailed] = useState(false);
|
|
55
55
|
const integrations = useMemo(() => integrationOptions ?? getDefaultMcpIntegrations(), [integrationOptions]);
|
|
56
56
|
const integration = useMemo(() => findMcpConnectionSuggestionIntegration({
|
|
57
57
|
text,
|
|
@@ -81,7 +81,6 @@ export function McpConnectionSuggestion({ text, contextText = "", variant = "com
|
|
|
81
81
|
useEffect(() => {
|
|
82
82
|
setError(null);
|
|
83
83
|
setConnecting(false);
|
|
84
|
-
setLogoLoadFailed(false);
|
|
85
84
|
}, [integration?.id, integration?.logoUrl, variant]);
|
|
86
85
|
if (!shouldSuggest)
|
|
87
86
|
return null;
|
|
@@ -146,7 +145,7 @@ export function McpConnectionSuggestion({ text, contextText = "", variant = "com
|
|
|
146
145
|
: t("mcpIntegrations.connect");
|
|
147
146
|
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: variant === "response"
|
|
148
147
|
? "agent-mcp-connection-suggestion agent-mcp-connection-suggestion--response mt-3 flex max-w-[520px] items-center gap-2 rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-[12px]"
|
|
149
|
-
: "agent-mcp-connection-suggestion agent-mcp-connection-suggestion--composer mx-auto mb-2 flex w-[min(calc(100%_-_1.5rem),684px)] items-center gap-2 rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-[12px]", "data-mcp-connection-suggestion": integration.id, "data-mcp-connection-suggestion-variant": variant, children: [
|
|
148
|
+
: "agent-mcp-connection-suggestion agent-mcp-connection-suggestion--composer mx-auto mb-2 flex w-[min(calc(100%_-_1.5rem),684px)] items-center gap-2 rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-[12px]", "data-mcp-connection-suggestion": integration.id, "data-mcp-connection-suggestion-variant": variant, children: [_jsx(McpIntegrationLogo, { name: integration.name, logoUrl: integration.logoUrl, integrationId: integration.id, className: "size-6 rounded-md text-[10px]", imageClassName: "size-5" }), _jsx("span", { className: "min-w-0 flex-1 leading-snug text-foreground", children: t(hasApiFallback(apiFallback)
|
|
150
149
|
? "mcpIntegrations.connectSuggestionWithApiToken"
|
|
151
150
|
: "mcpIntegrations.connectSuggestion", { name: integration.name }) }), _jsxs("button", { type: "button", onClick: () => void connect(), disabled: connecting, "aria-busy": connecting, className: "inline-flex shrink-0 items-center gap-1 rounded-md bg-primary px-2.5 py-1.5 text-[11px] font-medium text-primary-foreground hover:bg-primary/90 disabled:pointer-events-none disabled:opacity-60", children: [connecting && _jsx(IconLoader2, { className: "h-3 w-3 animate-spin" }), !connecting &&
|
|
152
151
|
canStartOAuth(integration) &&
|
|
@@ -8,22 +8,8 @@ import { Tooltip, TooltipContent, TooltipTrigger, } from "../components/ui/toolt
|
|
|
8
8
|
import { useT } from "../i18n.js";
|
|
9
9
|
import { cn } from "../utils.js";
|
|
10
10
|
import { buildMcpOAuthStartUrl, createMcpIntegrationFormDefaults, filterMcpIntegrations, getMcpIntegrationApiFallback, getDefaultMcpIntegrations, isCustomMcpIntegrationEnabled, navigateToMcpOAuthStart, resolveMcpIntegrationScope, shouldOfferMcpIntegrationOrganizationScope, shouldOfferMcpOrganizationScope, } from "./mcp-integration-catalog.js";
|
|
11
|
+
import { McpIntegrationLogo } from "./McpIntegrationLogo.js";
|
|
11
12
|
import { formatMcpServerError, getMcpUrlValidationError, testMcpServerUrl, useMcpServers, } from "./use-mcp-servers.js";
|
|
12
|
-
function IntegrationLogo({ name, logoUrl }) {
|
|
13
|
-
const [loaded, setLoaded] = useState(false);
|
|
14
|
-
const [loadFailed, setLoadFailed] = useState(false);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
setLoaded(false);
|
|
17
|
-
setLoadFailed(false);
|
|
18
|
-
}, [logoUrl]);
|
|
19
|
-
return (_jsxs("div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-md border border-border bg-background text-[11px] font-semibold text-muted-foreground", children: [_jsx("span", { "aria-hidden": "true", hidden: loaded, children: name.slice(0, 1) }), _jsx("img", { src: logoUrl, alt: "", loading: "lazy", decoding: "async", className: "absolute inset-1 h-6 w-6 object-contain", hidden: loadFailed, onLoad: () => {
|
|
20
|
-
setLoadFailed(false);
|
|
21
|
-
setLoaded(true);
|
|
22
|
-
}, onError: () => {
|
|
23
|
-
setLoadFailed(true);
|
|
24
|
-
setLoaded(false);
|
|
25
|
-
} })] }));
|
|
26
|
-
}
|
|
27
13
|
function parseHeaderLines(text) {
|
|
28
14
|
const out = {};
|
|
29
15
|
for (const line of text.split(/\r?\n/)) {
|
|
@@ -306,7 +292,7 @@ export function McpIntegrationDialog({ open, onOpenChange, initialIntegrationId
|
|
|
306
292
|
const connected = connectedUrls.has(compareUrl(integration.url));
|
|
307
293
|
const requiresHeaders = integration.authMode === "headers";
|
|
308
294
|
const setupOnly = requiresMcpIntegrationSetup(integration);
|
|
309
|
-
return (_jsxs("article", { className: "flex min-h-[128px] flex-col rounded-md border border-border bg-card p-4 transition-colors hover:border-border/80 hover:bg-accent/20", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(
|
|
295
|
+
return (_jsxs("article", { className: "flex min-h-[128px] flex-col rounded-md border border-border bg-card p-4 transition-colors hover:border-border/80 hover:bg-accent/20", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(McpIntegrationLogo, { name: integration.name, logoUrl: integration.logoUrl, integrationId: integration.id, className: "size-8 rounded-md", imageClassName: "size-6" }), _jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "truncate text-[13px] font-semibold text-foreground", children: integration.name }), integration.availability !== "ready" && (_jsx("span", { className: "mt-0.5 inline-flex rounded-full border border-border/70 bg-muted/40 px-1.5 py-0.5 text-[9px] font-medium text-muted-foreground", children: integration.availability === "beta"
|
|
310
296
|
? t("mcpIntegrations.status.beta")
|
|
311
297
|
: integration.availability ===
|
|
312
298
|
"client-restricted"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
export interface McpIntegrationLogoProps {
|
|
3
|
+
name: string;
|
|
4
|
+
logoUrl: string;
|
|
5
|
+
integrationId?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
imageClassName?: string;
|
|
8
|
+
style?: CSSProperties;
|
|
9
|
+
title?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function McpIntegrationLogo({ name, logoUrl, integrationId, className, imageClassName, style, title, }: McpIntegrationLogoProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { cn } from "../utils.js";
|
|
4
|
+
import { mcpIntegrationLogoNeedsDarkModeFilter } from "./mcp-integration-logos.js";
|
|
5
|
+
export function McpIntegrationLogo({ name, logoUrl, integrationId, className, imageClassName, style, title, }) {
|
|
6
|
+
const [failedLogoUrl, setFailedLogoUrl] = useState(null);
|
|
7
|
+
const showFallback = !logoUrl || failedLogoUrl === logoUrl;
|
|
8
|
+
const invertOnDark = integrationId !== undefined &&
|
|
9
|
+
mcpIntegrationLogoNeedsDarkModeFilter(integrationId);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
setFailedLogoUrl(null);
|
|
12
|
+
}, [logoUrl]);
|
|
13
|
+
return (_jsx("span", { className: cn("relative flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-background text-xs font-semibold text-muted-foreground", className), style: style, title: title, children: showFallback ? (_jsx("span", { "aria-hidden": "true", children: name.slice(0, 1) })) : (_jsx("img", { src: logoUrl, alt: "", loading: "lazy", decoding: "async", className: cn("size-7 object-contain", invertOnDark && "dark:invert dark:hue-rotate-180", imageClassName), title: title, onError: () => setFailedLogoUrl(logoUrl) })) }));
|
|
14
|
+
}
|
|
@@ -262,7 +262,7 @@ export function ResourceTree({ tree, variant = "tree", selectedId, onSelect, onC
|
|
|
262
262
|
? "overflow-hidden rounded-xl border border-border/70 bg-card text-card-foreground"
|
|
263
263
|
: "p-1", dragOver && !readOnly && "ring-1 ring-inset ring-accent"), onDragOver: readOnly ? undefined : handleDragOver, onDragLeave: readOnly ? undefined : handleDragLeave, onDrop: readOnly ? undefined : handleDrop, children: [_jsx("div", { className: cn("group/root flex items-center justify-between", variant === "collection" ? "px-4 py-3" : "px-1.5 py-1"), children: _jsxs(TooltipProvider, { delayDuration: 200, children: [_jsxs("span", { className: cn("flex items-center gap-1.5 font-medium text-muted-foreground", variant === "collection"
|
|
264
264
|
? "text-sm"
|
|
265
|
-
: "text-[11px] uppercase tracking-wide text-muted-foreground/60"), children: [title, headingHint && (_jsx("span", { className: "text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50", children: headingHint })), titleTooltip && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": `About ${title}`, className: "flex h-3.5 w-3.5 items-center justify-center rounded-full text-muted-foreground/40 hover:text-muted-foreground", children: _jsx(IconHelpCircle, { className: "h-
|
|
265
|
+
: "text-[11px] uppercase tracking-wide text-muted-foreground/60"), children: [title, headingHint && (_jsx("span", { className: "text-[10px] font-normal normal-case tracking-normal text-muted-foreground/50", children: headingHint })), titleTooltip && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": `About ${title}`, className: "flex h-3.5 w-3.5 items-center justify-center rounded-full text-muted-foreground/40 hover:text-muted-foreground", children: _jsx(IconHelpCircle, { className: "h-2.5 w-2.5" }) }) }), _jsx(TooltipContent, { children: titleTooltip })] }))] }), sectionAction ??
|
|
266
266
|
(variant === "tree" && !readOnly && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => handleStartCreate("", "file"), "aria-label": "New file", className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground/50 opacity-0 group-hover/root:opacity-100 hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { className: "h-3 w-3" }) }) }), _jsx(TooltipContent, { children: "New file" })] })))] }) }), variant === "collection"
|
|
267
267
|
? leafResources.length > 0 && (_jsx("div", { className: "divide-y divide-border/60 px-4", children: leafResources.map((node) => (_jsx(CollectionResourceRow, { node: node, selectedId: selectedId, deletingId: deletingId, readOnly: readOnly, onSelect: onSelect, onDelete: onDelete }, node.resource.id))) }))
|
|
268
268
|
: tree.map((node) => (_jsx(TreeNodeRow, { node: node, depth: 0, expanded: expanded, selectedId: selectedId, deletingId: deletingId, readOnly: readOnly, onToggle: toggleExpand, onSelect: onSelect, onDelete: onDelete, onStartCreate: handleStartCreate }, node.resource?.id ?? node.path))), isLoading && isEmpty && (_jsx("div", { className: cn("px-1 py-1"), children: Array.from({ length: 3 }).map((_, i) => (_jsxs("div", { className: cn("flex items-center gap-2 px-1.5 py-1", variant === "collection" && "gap-3 px-2.5 py-3"), children: [_jsx("div", { className: cn("rounded bg-muted-foreground/10 animate-pulse", variant === "collection" ? "size-8" : "h-3.5 w-3.5"), style: { animationDelay: `${i * 75}ms` } }), _jsx("div", { className: "h-3 rounded bg-muted-foreground/10 animate-pulse", style: {
|
|
@@ -107,26 +107,55 @@ const LOGOS = {
|
|
|
107
107
|
mime: "image/svg+xml",
|
|
108
108
|
data: "PHN2ZyBmaWxsPSIjRkY0RjAwIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+WmFwaWVyPC90aXRsZT48cGF0aCBkPSJNNC4xNTcgMEE0LjE1MSA0LjE1MSAwIDAgMCAwIDQuMTYxdjE1LjY3OEE0LjE1MSA0LjE1MSAwIDAgMCA0LjE1NyAyNGgxNS42ODJBNC4xNTIgNC4xNTIgMCAwIDAgMjQgMTkuODM5VjQuMTYxQTQuMTUyIDQuMTUyIDAgMCAwIDE5LjgzOSAwSDQuMTU3Wm0xMC42MSA4Ljc2MWguMDNhLjU3Ny41NzcgMCAwIDEgLjIzLjAzOC41ODUuNTg1IDAgMCAxIC4yMDEuMTI0LjYzLjYzIDAgMCAxIC4xNjIuNDMxLjYxMi42MTIgMCAwIDEtLjE2Mi40MzUuNTguNTggMCAwIDEtLjIwMS4xMjguNTguNTggMCAwIDEtLjIzLjA0Mi41MjkuNTI5IDAgMCAxLS4yMzUtLjA0Mi41ODUuNTg1IDAgMCAxLS4zMzItLjMyOC41NTkuNTU5IDAgMCAxLS4wMzgtLjIzNS42MTMuNjEzIDAgMCAxIC4xNy0uNDMxLjU5LjU5IDAgMCAxIC40MDUtLjE2MlptMi44NTMgMS41NzJjLjAzLjAwNC4wNjEuMDA0LjA5NS4wMDQuMzI1LS4wMTEuNjQ2LjA2NC45MzcuMjE5LjIzOC4xNDQuNDMxLjM1NS41NTIuNjA5LjEyOC4yNzkuMTg5LjU4Mi4xODUuODg4di4xOTNhMiAyIDAgMCAxIDAgLjIxOWgtMi40OThjLjAwMy4yMjcuMDc1LjQ1LjIwNC42NDJhLjc4Ljc4IDAgMCAwIC42NDYuMjY1LjcxNC43MTQgMCAwIDAgLjQ4NC0uMTM2LjY0Mi42NDIgMCAwIDAgLjIzLS4zMThsLjkxNS4yNTdhMS4zOTggMS4zOTggMCAwIDEtLjI4LjUzN2MtLjE0LjE1OS0uMzIxLjI4NC0uNTIxLjM1NWEyLjIzNCAyLjIzNCAwIDAgMS0uODM2LjEzNiAxLjkyMyAxLjkyMyAwIDAgMS0xLjAwMS0uMjQ1IDEuNjE4IDEuNjE4IDAgMCAxLS42NjUtLjcwMyAyLjIyMSAyLjIyMSAwIDAgMS0uMjI3LTEuMDM2IDEuOTUgMS45NSAwIDAgMSAuNDgtMS4zOTggMS45IDEuOSAwIDAgMSAxLjMtLjQ4OFptLTkuNjA3LjAyM2MuMTYyLjAwNC4zMjUuMDI2LjQ4LjA3OS4yMDcuMDY1LjQuMTc0LjU2My4zMTQuMjYuMzAyLjM5My42OTIuMzY2IDEuMDg4djIuMjc2SDguNTNsLS4xMDktLjcxMWgtLjA2NWMtLjA2NC4xNjMtLjE1NS4zMS0uMjcyLjQzOWExLjEyMiAxLjEyMiAwIDAgMS0uMzc0LjI2NCAxLjAyMyAxLjAyMyAwIDAgMS0uNDUzLjA4MyAxLjMzNCAxLjMzNCAwIDAgMS0uODY2LS4yNjQuOTY1Ljk2NSAwIDAgMS0uMzI5LS44MDEuOTkzLjk5MyAwIDAgMSAuMDc2LS40MzEgMS4wMiAxLjAyIDAgMCAxIC4yNDItLjM2MyAxLjQ3OCAxLjQ3OCAwIDAgMSAxLjA0My0uMzAzaC45NTJ2LS4xODFhLjY5Ni42OTYgMCAwIDAtLjEzNi0uNDU0LjU1My41NTMgMCAwIDAtLjQzOC0uMTU0LjY5NS42OTUgMCAwIDAtLjM3OC4wODYuNDguNDggMCAwIDAtLjE5My4yNTRsLS45OS0uMTQ0YTEuMjYgMS4yNiAwIDAgMSAuMjU3LS41NjNjLjE0LS4xNzQuMzIxLS4zMDIuNTMzLS4zNzguMjYxLS4wOTEuNTQtLjEzNi44Mi0uMTI5LjA1My0uMDAzLjEwNi0uMDA3LjE2My0uMDA3Wm00LjM4NC4wMDdjLjE3NCAwIC4zNDcuMDM4LjUwNi4xMTQuMTgyLjA4My4zNC4yMTEuNDU4LjM3NC4yNTcuNDIzLjM3Ny45MTEuMzUxIDEuNDA2YTIuNTMgMi41MyAwIDAgMS0uMzU1IDEuNDQ4IDEuMTQ4IDEuMTQ4IDAgMCAxLTEuMDA5LjUxN2MtLjIwNCAwLS40MDEtLjA0NS0uNTgyLS4xMzZhMS4wNTIgMS4wNTIgMCAwIDEtLjQ4LS40NTcgMS4yOTggMS4yOTggMCAwIDEtLjExNC0uMjM0aC0uMDQ1bC4wMDQgMS43ODRoLTEuMDU5di00LjcxM2guOTA0bC4xMTcuODA1aC4wNTdjLjA2OC0uMjA4LjE3Ny0uNDAxLjMyOC0uNTZhMS4xMjkgMS4xMjkgMCAwIDEgLjg0My0uMzQ0aC4wNzZ2LS4wMDRabTcuNTU5LjA4NGguOTAzbC4xMTMuODA1aC4wNTNhMS4zNyAxLjM3IDAgMCAxIC4yMzUtLjQ4NC44MTMuODEzIDAgMCAxIC4zMTMtLjI0Mi44Mi44MiAwIDAgMSAuMzktLjA3NmguMjM0djEuMDUxaC0uNDAxYS42NjIuNjYyIDAgMCAwLS4zMTMuMDA4LjYyMy42MjMgMCAwIDAtLjI3Mi4xNTUuNjYzLjY2MyAwIDAgMC0uMTc0LjI2LjY4My42ODMgMCAwIDAtLjAyNy4zMTR2MS44NzVoLTEuMDU0di0zLjY2NlptLTE3LjUxNS4wMDNoMy4yNjJ2Ljg5NkwzLjczIDEzLjEwNGwuMDM0LjExM2gxLjk3M2wuMDQyLjlIMi40di0uOWwxLjkzMS0xLjc1NC0uMDQ1LS4xMTdIMi40NDF2LS44OTZabTExLjgxNSAwaDEuMDU1djMuNjU5aC0xLjA1NVYxMC40NVptMy40NDMuNjg0LjAxOS4wMTZhLjY5LjY5IDAgMCAwLS4zNTEuMDQ1Ljc1Ni43NTYgMCAwIDAtLjI4Ny4yMDRjLS4xMS4xNTUtLjE3NC4zMzYtLjE4OS41MjJoMS41NDVjLS4wMzQtLjUyNi0uMjU3LS43ODctLjc0LS43ODdoLjAwM1ptLTUuNzE4LjE2M2MtLjAyNiAwLS4wNTcgMC0uMDgzLjAwNGEuNzguNzggMCAwIDAtLjMxLjA1My43NDYuNzQ2IDAgMCAwLS4yNTcuMTg5IDEuMDE2IDEuMDE2IDAgMCAwLS4yMDQuNjk1di4wNjRjLS4wMTUuMjU3LjA1Ny41MDcuMjA0LjcxMWEuNjM0LjYzNCAwIDAgMCAuMjUzLjE5Ni42MzguNjM4IDAgMCAwIC4zMTQuMDYxLjY0NC42NDQgMCAwIDAgLjU3OC0uMjY1Yy4xNC0uMjIzLjIwNC0uNDguMTg5LS43NGExLjIxNiAxLjIxNiAwIDAgMC0uMTgxLS43MTEuNjc3LjY3NyAwIDAgMC0uNTAzLS4yNTdabS00LjUwOSAxLjI2NmEuNDY0LjQ2NCAwIDAgMC0uMjY4LjEwMi4zNzMuMzczIDAgMCAwLS4xMTQuMjc2YzAgLjA1My4wMDguMTA2LjAyNy4xNTVhLjM3NS4zNzUgMCAwIDAgLjA4Ny4xMzIuNTc2LjU3NiAwIDAgMCAuMzk3LjExdi4wMDRhLjg2My44NjMgMCAwIDAgLjU2My0uMTgyLjU3My41NzMgMCAwIDAgLjIxMS0uNDU3di0uMTRoLS45MDNaIi8+PC9zdmc+",
|
|
109
109
|
},
|
|
110
|
+
amplitude: {
|
|
111
|
+
mime: "image/png",
|
|
112
|
+
data: "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",
|
|
113
|
+
},
|
|
114
|
+
apollo: {
|
|
115
|
+
mime: "image/png",
|
|
116
|
+
data: "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",
|
|
117
|
+
},
|
|
118
|
+
"common-room": {
|
|
119
|
+
mime: "image/svg+xml",
|
|
120
|
+
data: "PHN2ZyB3aWR0aD0iMTAxIiBoZWlnaHQ9IjEwMSIgdmlld0JveD0iMCAwIDEwMSAxMDEiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNy41ODQgNTIuMDM2NUw0Ni4yOTQzIDE2Ljk5NjNDNDkuNTM0NiAxOS4wMzA5IDU2LjA2MDQgMjMuMjM1OCA1Ni4yNDEyIDIzLjc3ODNDNTYuNDY3MyAyNC40NTY1IDc1LjkwOSA0NS4wMjg1IDc2LjEzNSA0Ni44MzdDNzYuMzYxMSA0OC42NDU2IDczLjY0ODMgNjcuNjM1MSA3MS44Mzk4IDcyLjM4MjVDNzAuMzkzIDc2LjE4MDQgNTYuMDE1MiA4My45MTE4IDQ5LjAwNzEgODcuMzAyOEwxNy41ODQgNTIuMDM2NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik05NS42Nzc2IDM5LjE2OTZMNjEuMDgzMyA0LjU3NTAyQzU1LjA4NDEgLTEuNDI0MjYgNDUuMjcwNyAtMS40MjQyNiAzOS4yNzE1IDQuNTc1MDJMNC42NzcxNiAzOS4xNjk2Qy0xLjMyMjA3IDQ1LjE2ODggLTEuMzIyMDcgNTQuOTgyMyA0LjY3NzE2IDYwLjk4MTZMMzkuMjcxNSA5NS41NzYxQzQ1LjI3MDcgMTAxLjU3NSA1NS4wODk2IDEwMS41NzUgNjEuMDg4OSA5NS41NzYxTDk1LjY4MzIgNjAuOTgxNkMxMDEuNjc3IDU0Ljk4MjMgMTAxLjY3NyA0NS4xNjg4IDk1LjY3NzYgMzkuMTY5NlpNNjQuMTE5MSA2NC4wMTczTDUwLjE4MDIgNzcuOTU2NEwyMi4zMDIzIDUwLjA3ODNMNTAuMTgwMiAyMi4yMDAzTDY0LjExOTEgMzYuMTM5M0w1MC4xODAyIDUwLjA3ODNMNjQuMTE5MSA2NC4wMTczWiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==",
|
|
121
|
+
},
|
|
122
|
+
exa: {
|
|
123
|
+
mime: "image/png",
|
|
124
|
+
data: "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACgUlEQVR42u2XXUiTYRTHf8/euem7V6sbQcFMsgyJQoigizDqIuhDiW6iksBISrGS7MsP3JhWlBUqWnThjX2RBGlSRCREF0UEkURkGWYSUhCpe7e5ue3pQmaY6Eq3hNq5ex8O5/lxzvn/eR+Ruu6bZA7DwBxHFCAKYAyVUF+hkb06ZkbFS07pdD4bnR2AGieYFy8YdEhudHhCXmo2wZ5tsSgG0F1y9h0Ixvx4QW+/n1v3p4ewH7agGOB6h4fnXb7w7ICU0NPnx3ZIZUmqMmXexrUm8nLNvOnxY2twhW8JpYQim44AGq0acWYxKScp0cCZUgtOl6TYruPxyvCqoLvXT80lF0sXKVQUqhPnqEBDpcaCBMHRs04+fPJHRoYtbR7udnrZlWMmZ4Np/PxIvsqq5Uaab49w77E3sj5QftFJ/0CAmhILKUkG1mTFULAjlldvfZy+7Aq/D/waw7rkYLVOa10CjVUayYkGHE5JoVVn1EdkAISAq7XxE850t2RFhhEpYW+Zg89fAv+oFQdluLvUMf6dlWmktS6Brm4fyYkGLpRpbN43NKMu/HEHEjRBfYWG2yMpsukU253EWwRNVo0Y418YQXD7g2p4+nKUKzdHWLnMyMn9amQB8nLNbF1v4lq7h/ZHP/V+vtnFi9c+8rfHsinbFBmAjDSF8gMq7z76qW6aqHefH4rtOt+HJeeOWVi8UAkvgBDQWKUhgSKrjtsz2ecHvgY4UevEogoaKjXMJhFegPRUhao6F+/7pvb5B0+8tLR5yExXqCpWw+uEgw5JWorC8YLpC4/6JP4A7Nxi5s7D0P8EIQFcbsmQQyIYK/o7oTvHRqSpoccgoi+jKMB/D/ADRpbjdBgK8S0AAAAASUVORK5CYII=",
|
|
125
|
+
},
|
|
126
|
+
gong: {
|
|
127
|
+
mime: "image/svg+xml",
|
|
128
|
+
data: "PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiByeD0iODUuMzMzMyIgZmlsbD0iIzgwMzlERiIvPgo8cmVjdCB4PSI1My40NDQ2IiB5PSI1My40NDQ2IiB3aWR0aD0iMjEuMzMzMyIgaGVpZ2h0PSIyMS4zMzMzIiBmaWxsPSIjM0UwMDc1Ii8+CjxyZWN0IHg9IjQzNy4zMzMiIHk9IjUzLjMzMzMiIHdpZHRoPSIyMS4zMzMzIiBoZWlnaHQ9IjIxLjMzMzMiIGZpbGw9IiMzRTAwNzUiLz4KPHJlY3QgeD0iNDM3LjMzMyIgeT0iNDM3LjMzMyIgd2lkdGg9IjIxLjMzMzMiIGhlaWdodD0iMjEuMzMzMyIgZmlsbD0iIzNFMDA3NSIvPgo8cmVjdCB4PSI1My4zMzMzIiB5PSI0MzcuMzMzIiB3aWR0aD0iMjEuMzMzMyIgaGVpZ2h0PSIyMS4zMzMzIiBmaWxsPSIjM0UwMDc1Ii8+CjxwYXRoIGQ9Ik00MjcuMiAyMjkuODE0SDMyOC4xNDZDMzIyLjY3NyAyMjkuODE0IDMxOC40MjMgMjM1Ljg4NyAzMjAuMjQ2IDI0MC43NDVMMzQzLjk0NiAzMDIuMDc1QzM0NS4xNjIgMzA0LjUwNCAzNDIuNzMxIDMwNy41NCAzMzkuNjkzIDMwNy41NEwzMDkuMzA4IDMwNS43MTlDMzA4LjA5MyAzMDUuNzE5IDMwNi44NzcgMzA2LjMyNiAzMDUuNjYyIDMwNy41NEwyODIuNTcgMzQwLjkzOEMyODEuMzU0IDM0Mi43NiAyNzguOTI0IDM0My4zNjcgMjc2LjQ5MyAzNDIuMTUzTDI0MS4yNDcgMzE4LjQ3MUMyNDAuMDMxIDMxNy4yNTYgMjM4LjIwOCAzMTcuMjU2IDIzNi4zODUgMzE4LjQ3MUwxODcuNzcgMzUxLjI2MUMxODQuNzMyIDM1My42OSAxODAuNDc4IDM1MC42NTQgMTgxLjY5MyAzNDcuMDExTDE5NS42NyAyOTguNDMyQzE5Ni4yNzggMjk2LjYxIDE5NS4wNjIgMjk0LjE4MSAxOTMuMjM5IDI5My41NzRMMTY3LjcxNiAyODMuMjUxQzE2NS4yODUgMjgyLjAzNyAxNjQuMDcgMjc5IDE2NS44OTMgMjc3LjE3OUwxODguMzc4IDI0OS4yNDZDMTg5LjU5MyAyNDguMDMxIDE4OS41OTMgMjQ1LjYwMiAxODguMzc4IDI0NC4zODhMMTY5LjUzOSAyMTcuMDYyQzE2Ny43MTYgMjE0LjYzNCAxNjkuNTM5IDIxMC45OSAxNzIuNTc4IDIxMC45OUwyMDIuMzU1IDIwOC41NjFDMjA0Ljc4NSAyMDguNTYxIDIwNi4wMDEgMjA2Ljc0IDIwNi4wMDEgMjA0LjMxMUwyMDMuNTcgMTYzLjAxOUMyMDMuNTcgMTU5Ljk4MiAyMDYuNjA4IDE1OC4xNjEgMjA5LjAzOSAxNTguNzY4TDI0NS41MDEgMTczLjk0OUMyNDcuMzI0IDE3NC41NTYgMjQ5LjE0NyAxNzMuOTQ5IDI1MC4zNjIgMTcyLjczNEwyNzUuODg1IDE0NC44MDJDMjc3LjcwOCAxNDIuMzczIDI4MS4zNTQgMTQyLjk4IDI4Mi41NyAxNDYuMDE2TDI5Ny43NjIgMTg0Ljg3OUMyOTkuNTg1IDE4OS43MzcgMzA1LjY2MiAxOTEuNTU5IDMwOS45MTYgMTg4LjUyMkwzNjkuNDY5IDE0NC4xOTRDMzc2LjE1NCAxMzkuMzM3IDM3MS45IDEyOC40MDYgMzYzLjM5MiAxMjkuNjIxTDMyNS4xMDggMTM0LjQ3OUMzMjMuMjg1IDEzNC40NzkgMzIxLjQ2MiAxMzMuODcxIDMyMC44NTQgMTMyLjA1TDMwMC4xOTMgNzkuMjIwM0MyOTcuNzYyIDczLjc1NTIgMjkxLjA3NyA3Mi41NDA4IDI4Ni44MjMgNzYuNzkxNEwyNDEuODU0IDEyNS4zN0MyNDAuNjM5IDEyNi41ODUgMjM4LjgxNiAxMjcuMTkyIDIzNi45OTMgMTI2LjU4NUwxNzguMDQ3IDEwMS42ODhDMTcyLjU3OCA5OS4yNTkxIDE2Ny4xMDkgMTAyLjkwMiAxNjYuNTAxIDEwOC45NzVMMTY0LjA3IDE2OS42OThDMTY0LjA3IDE3Mi4xMjcgMTYyLjI0NyAxNzMuMzQyIDE2MC40MjQgMTczLjM0MkwxMDYuMzM5IDE3Ni45ODVDMTAwLjI2MyAxNzcuNTkyIDk2LjYxNjQgMTg0LjI3MiAxMDAuMjYzIDE4OS43MzdMMTM2LjExNiAyNDIuNTY2QzEzNy4zMzIgMjQzLjc4MSAxMzcuMzMyIDI0Ni4yMSAxMzYuMTE2IDI0Ny40MjRMOTkuNjU0OSAyODkuMzIzQzk2LjYxNjQgMjkyLjM2IDk4LjQzOTUgMjk5LjAzOSAxMDMuMzAxIDMwMC44NjFMMTQ1LjIzMiAzMTkuMDc4QzE0Ny4wNTUgMzE5LjY4NSAxNDguMjcgMzIyLjExNCAxNDcuNjYyIDMyMy45MzZMMTIwLjkyNCA0MjcuNzczQzExOS4xMDEgNDM1LjA2IDEyNy42MDkgNDQwLjUyNSAxMzMuNjg2IDQzNi4yNzRMMjMzLjk1NCAzNjQuNjJDMjM1LjE3IDM2My40MDYgMjM2Ljk5MyAzNjMuNDA2IDIzOC44MTYgMzY0LjYyTDI4NC4zOTMgMzk2LjgwNEMyODguMDM5IDM5OS4yMzMgMjkzLjUwOCAzOTguNjI2IDI5NS45MzkgMzk0LjM3NUwzMjQuNSAzNTAuNjU0QzMyNS4xMDggMzQ5LjQ0IDMyNi45MzEgMzQ4LjgzMiAzMjguMTQ2IDM0OC44MzJMMzk2LjIwOCAzNTcuMzM0QzQwMS42NzcgMzU3Ljk0MSA0MDcuMTQ2IDM1My42OSA0MDUuMzIzIDM0OC4yMjVMMzc2Ljc2MiAyNzQuNzVDMzc2LjE1NCAyNzIuOTI4IDM3Ni43NjIgMjcwLjQ5OSAzNzkuMTkyIDI2OS4yODVMNDMwLjg0NiAyNDQuOTk1QzQzOC4xMzggMjQxLjM1MiA0MzUuNzA4IDIyOS44MTQgNDI3LjIgMjI5LjgxNFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
|
|
129
|
+
},
|
|
130
|
+
grafana: {
|
|
131
|
+
mime: "image/x-icon",
|
|
132
|
+
data: "AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAAAAAAAAACnA+AApuvgAKcH4RSnB+FkpwPgcJ8H4Bii/+BEpwfhHKMP40yjD+KQpv/gGKcH4AAAAAAAAAAAAAAAAAAAAAAAqufgAKrn4Biq7+LQqu/j8Krr4zSq5+LAquvjMKrv46Sq7+P8qu/jmKrr4Kiq6+AAw0vgAAAAAAAAAAAAAAAAALLP3ACyz9wYssfe1LLH3/yyx9/8ssff/LLH3+Syx9/Qssff9LLH3/iyw96ErrPcSK633AAAAAAAAAAAALbD3ACuk9gArpPYmK6f21Cun9v8rqPbjK6r3hCus90Irrfc2K6v3ayuo99grp/b9K6b2pCuj9kgsofUKLJj1ACuY9RIsmvVbLJ31vCye9f8snvXZLKH2PSWX8wArlfQZLJb1LiuS9A0sofY5LJ714Sye9f8snvXhLJ71LSuQ9CUrk/S1K5T0+yuU9P8rlPT5K5b0XiuS9AArkfRGK5T0kyuX9ForlvQtKYbzACuV9JArlPT/K5X0liyc9QYsjfQ+LIv06SyL9P8si/T/LIv01SuN9Bgsh/MLLIv0pyuN9DgsjPQAK4/0ACyL9AAsi/RuLIv0/yyL9Fgsi/QALYr0AyyD83QsgfPyLIHz/yyB874sgfMHLILzFSyB87osf/MsLIDzACt88wArefMELIDznCyB8/MsgvM4LIX0ACt98wAqhPQDLHjyeSx38v8sd/LMLHXyECuA8wQsePKjLHXyoCxx8iIscfIdLHTydCx38vMsePKlLHbyICx08jUAAAAALG3yACxt8jgsbPLyLGzy7yxq8jcsbfIALHDyLixu8sQsa/LfLGvy4Cxs8vIsbvKsLHHyHixq8lcsbfJTK1rxACtg8QArX/FOK2Dx9ith8f8rX/GZK1jxBith8QArZ/EaK2bxWStl8WwrZvFEK2ryCitc8SgrYPGqK2TxJita8QArWfEBK1rxnita8f8rWvH/K1rx9Sta8XwrWvEQK1rxACta8QArV/EAK1TxAita8TgrWvHAK1rxeitU8QArWvEAK1rxCSta8b0rWvH/K1rx/yta8f8rWvH6K1rxwyta8YArWvFiK1rxbCta8aMrWvHsK1rxvCta8RErWvEAK1rxACta8QIrWvFFK1rxgSta8XwrWvF1K1rxySta8forWvH/K1rx/yta8fgrWvHlK1rx+Cta8Y4rWvEAK1rxAAAAAAAAAAAAAAAAAAAAAAArWvEAK1rxACta8RQrWvGqK1rx/yta8d4rWvFSK1rxICta8T0rWvEjK1rxACta8QAAAAAAAAAAAAAAAAAAAAAAAAAAACta8QArWvEAK1rxNSta8dErWvFsK1rxACta8QAAAAAAAAAAAAAAAAAAAAAA4AcAAOAHAADgAwAA4AAAAIAAAAACEAAAAFEAAABhAACAAAAAwgAAAMEAAACA4QAAgAEAAIADAAD8AwAA/h8AAA==",
|
|
133
|
+
},
|
|
134
|
+
"google-workspace": {
|
|
135
|
+
mime: "image/png",
|
|
136
|
+
data: "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAADN0lEQVQ4jZ2US2icVRTHf+d+r3k0GZXYGAwzbRBFlDYQcCNIFbFUUExLXVTqA6QI3SSFUlAQEXQjqbgtWVSkokELPgo2YhMEpWIXQZSWWkiMFpOaNI/JZOab7373uJgkbZKRUg/czeF/fpz/PedeoUnooZ6AP/K9pGYv0I3QBSYGueZMdN6QniGOh2R01G6slU2w/Y/0kngDWLONenBDpgLigwQ4L0TFjGPkiP/VZ1/8J1Bfe+g4sd9HHMBSCPWwAVJpSCUEE64CQTxAXvG/PPXhKsOswT7YOkDbch9hCq0xZBPwLKgDtAJcRxzKutJhbzH49OamDICeDZ/jnmo/7VXIptBWg9Z6max7G9/bLsMjLTL8XRth1CFijoEsgDvjRcmzMnqyts6yDuHRGl1hISxxLd+wWon+ZCq7SwZ/GW86tGf2F+m48285cSLZNBT9OXoaK1+zbGA+gGW/TlV2yKGZy81gtwqfIDiA78AHwgRmdVAOLv4vGICvWn8Y8RFfIAfYdLCZsPtddc3yRh1uZVkyWu8z6upFFBCDGoHOysXb6cghII0Tm6BkNimqhdztAJEbq+wwvg9MovaOVJU6ik3TB4Efm5SOKgqkgNdgQRdQXH0fAtN+Cr86Z3fUcCwqVFQPNAOOvS5PbMztfMedFqG4llAmjHN8PK9Qdo45VWZUXv3kp+j+Wzl94L3qduvFe6xYEhPjcE6Eb0WH8M4XuTKtlCoqJPhcVX/y93ph18nHpyaawToHf7vLxuZsKtITJVsI0wxRkj938Vj2SSPPk6rQDzCjhnHn8Y8GxVmTH9t57tE37x3Z07lGGnlrS3j6/RdmspculPN/9cTh4ppZMfrGyj02YuAHMzDpcv3zRCxohsu2iyXNs0QLqYZl6/LXnYYlTQpQ64SkgNhWgqRArtoxMHX4vqPrgAD7vm8/vqi5viVyXLUl6uSINYNiUDxSF6JpHhe3g22BtAWJt360fPCplxFRuOn7Avj8sekjVc3sm3MtExYh1nBleAZVQcRiTA0RC+rPitQOL7+4+6VV2KYOV6PnQk8wPretN5XcXpBukC7AojKFRmMuLXxTNnefYvfRysbafwFOiFhxqOMpZwAAAABJRU5ErkJggg==",
|
|
137
|
+
},
|
|
138
|
+
pylon: {
|
|
139
|
+
mime: "image/png",
|
|
140
|
+
data: "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAHlBMVEVHcExbDv9bDv9bDv9bDv9bDv9bDv9bDf9bDf9bDv+pPS6zAAAACXRSTlMAVfTGGuCHNaEilxe2AAAD/ElEQVR4nO1b2XbjIAw1u/3/Pzw4aVJrAcRiqw+j9iU5AV20IUDatn7yPhkTdxeCPTLZ4NwejUneD0zWz91kzm/GByCbgezmXgzeRIfYYrIu3gUiL73B/AviDkGk5tqRHNJK7t44OfMPuXViMD2Lv4rBrOA+tPqFUkgT7F8Q5mzBxzDH/zhCnBCCmWb/gjBsClK/b5Hdh9i3tG+LHyiNWIKpzGnPzSdev4nn5lRD0a2GWJwtxLzvnQjx/HmPLNus7bNFv5eW/htiCYAXlUP23oHAF9S/p8skPIDXpsWPdmIEiRUkdugSgK0YPoLQFFnzp/GkAqAEQeYMHH+706FVAHkaLopIEHgGOjuuAYBfSWjaAWN/BQ9qAsh6oHO1LJHxv5LY2gBYITS8kWIuDpAA4BYUa/xJ/LXln4sAMCHVVqJywj+u7aRCAMyeXnYFrLEaWDEAKlZX+iXWVz1yiQHQyFrIDzBSW48acgBEtbxkcQRqZVIdAIgdsPEIeWBV/70AiHQZ50KKqvjfCAC8PGpeOARb16QuANjCSUg2ByKbD/xH7Q9QGwBaIdHw5AFIkHMmJIKGANYDwGYAhpSSwKUAEBNgBbVDwDIAKB4BK5gVgPDcAT3hYgWpMO1qACjW/MYCmobcAwAx+sa6aRMUA4D7zdcMp01QfvaM7KjCUeoOAB6M+skLPPSOICQ7AgAu1r51AKKgNV5IfbvhhxKDG+hFfoQdAwAN/u0HzFf3AUDLfWECQpFf5gwCAEHPkquWIJ5oFMAW8Dhgl3INDAMAOtixVXRMNAoAjMs2D6Jj4yiwBABwxJyfg89yJxwHAESeVww2gp471VEAwOhyVgLm6bDBcQARDoyj8wwDQEsGAolGTsPIE1Q68ELbQccoAOB3bj4fnQWw5FGk7zb+uuawrXkVGQZgtyX8xwEc/wHoA1A3QnU3fB7AX4uEw5vRPgoAbUbq27F6QgLmeTwlywPVk1L1tFz9YKJ+NNM/nKofz9UvKPSvaNAl1ZYhSP7XXVJBIwjtt5o3EWMSEXdNp35RqXZV+30xUL+sVr+u13+weOrJBgrg+nCn/mil/myn/nD5yNMtVDOu45gUQffjNR1BCli6bqnaAJAC6K6LK02aUy4uYNAv4dAvYlEv46F5Qb38sKOQCRt48QSoXcr1UDFbTbXa5XxcalKsiL6loJHbE54t6Vxc1ErTjPbBhynrtU+W9eoXNhcQPFjarV/cPlven6bL+8sInmpw2O5o8ehiv61ucmmmNww12nxgTnhDm8+m3ui06bd66Te7bertficpNzy+IWi2fJ6k3fR6Ul/b77G47fdFyo3PPxg0W7+/ID7N74T3/c3vHww/7f9uRfv/P8Ai/iCGtYjKAAAAAElFTkSuQmCC",
|
|
141
|
+
},
|
|
142
|
+
"builder-cms": {
|
|
143
|
+
mime: "image/png",
|
|
144
|
+
data: "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",
|
|
145
|
+
},
|
|
110
146
|
};
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"builder-cms": "B",
|
|
121
|
-
};
|
|
147
|
+
const DARK_MODE_FILTER_LOGO_IDS = new Set([
|
|
148
|
+
"common-room",
|
|
149
|
+
"github",
|
|
150
|
+
"notion",
|
|
151
|
+
"vercel",
|
|
152
|
+
]);
|
|
153
|
+
export function mcpIntegrationLogoNeedsDarkModeFilter(id) {
|
|
154
|
+
return DARK_MODE_FILTER_LOGO_IDS.has(id);
|
|
155
|
+
}
|
|
122
156
|
export function mcpIntegrationLogo(id) {
|
|
123
157
|
const logo = LOGOS[id];
|
|
124
|
-
if (!logo)
|
|
125
|
-
|
|
126
|
-
if (!label)
|
|
127
|
-
return "";
|
|
128
|
-
const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><text x="12" y="12" text-anchor="middle" dominant-baseline="central" font-family="Arial,sans-serif" font-size="${label.length > 1 ? 8 : 14}" font-weight="700" fill="currentColor">${label}</text></svg>`;
|
|
129
|
-
return `data:image/svg+xml,${encodeURIComponent(svg)}`;
|
|
130
|
-
}
|
|
158
|
+
if (!logo)
|
|
159
|
+
return "";
|
|
131
160
|
return `data:${logo.mime};base64,${logo.data}`;
|
|
132
161
|
}
|
|
@@ -584,6 +584,7 @@ export function useBuilderConnectFlow(opts = {}) {
|
|
|
584
584
|
return;
|
|
585
585
|
if (s) {
|
|
586
586
|
setHasFetchedStatus(true);
|
|
587
|
+
setStatusResolved(true);
|
|
587
588
|
setConfigured(!!s.configured);
|
|
588
589
|
setEnvManaged(!!s.envManaged);
|
|
589
590
|
setBuilderEnabled(!!s.builderEnabled);
|
|
@@ -622,6 +623,7 @@ export function useBuilderConnectFlow(opts = {}) {
|
|
|
622
623
|
}
|
|
623
624
|
if (s) {
|
|
624
625
|
setHasFetchedStatus(true);
|
|
626
|
+
setStatusResolved(true);
|
|
625
627
|
setConfigured(!!s.configured);
|
|
626
628
|
setEnvManaged(!!s.envManaged);
|
|
627
629
|
setBuilderEnabled(!!s.builderEnabled);
|
|
@@ -685,6 +687,8 @@ export function useBuilderConnectFlow(opts = {}) {
|
|
|
685
687
|
const s = await fetchStatus(signal);
|
|
686
688
|
if (!mountedRef.current)
|
|
687
689
|
return;
|
|
690
|
+
if (s)
|
|
691
|
+
setStatusResolved(true);
|
|
688
692
|
if (s?.configured) {
|
|
689
693
|
setConfigured(true);
|
|
690
694
|
setEnvManaged(!!s.envManaged);
|
|
@@ -769,6 +773,7 @@ export function useBuilderConnectFlow(opts = {}) {
|
|
|
769
773
|
: null;
|
|
770
774
|
setHasFetchedStatus(true);
|
|
771
775
|
if (s) {
|
|
776
|
+
setStatusResolved(true);
|
|
772
777
|
setConfigured(false);
|
|
773
778
|
setEnvManaged(!!s.envManaged);
|
|
774
779
|
setBuilderEnabled(!!s.builderEnabled);
|
|
@@ -785,6 +790,7 @@ export function useBuilderConnectFlow(opts = {}) {
|
|
|
785
790
|
return;
|
|
786
791
|
}
|
|
787
792
|
setHasFetchedStatus(true);
|
|
793
|
+
setStatusResolved(true);
|
|
788
794
|
setConfigured(true);
|
|
789
795
|
setEnvManaged(!!s.envManaged);
|
|
790
796
|
setBuilderEnabled(!!s.builderEnabled);
|
|
@@ -11,6 +11,7 @@ export { getClientSurface, type ClientSurface } from "../client-surface.js";
|
|
|
11
11
|
export { ErrorBoundary } from "../ErrorBoundary.js";
|
|
12
12
|
export { ClientOnly } from "../ClientOnly.js";
|
|
13
13
|
export { DefaultSpinner } from "../DefaultSpinner.js";
|
|
14
|
+
export { RuntimeConfigNotice } from "../RuntimeConfigNotice.js";
|
|
14
15
|
export { RouteTransitionIndicator, ROUTE_TRANSITION_INDICATOR_DELAY_MS, } from "../RouteTransitionIndicator.js";
|
|
15
16
|
export { getThemeInitScript, themeInitScript, type ThemePreference, } from "../theme.js";
|
|
16
17
|
export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance, useAppearanceSync, type AppearancePresetId, } from "../appearance.js";
|
package/dist/client/ui/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export { getClientSurface } from "../client-surface.js";
|
|
|
11
11
|
export { ErrorBoundary } from "../ErrorBoundary.js";
|
|
12
12
|
export { ClientOnly } from "../ClientOnly.js";
|
|
13
13
|
export { DefaultSpinner } from "../DefaultSpinner.js";
|
|
14
|
+
export { RuntimeConfigNotice } from "../RuntimeConfigNotice.js";
|
|
14
15
|
export { RouteTransitionIndicator, ROUTE_TRANSITION_INDICATOR_DELAY_MS, } from "../RouteTransitionIndicator.js";
|
|
15
16
|
export { getThemeInitScript, themeInitScript, } from "../theme.js";
|
|
16
17
|
export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance, useAppearanceSync, } from "../appearance.js";
|
|
@@ -335,6 +335,10 @@ class SyncTransport {
|
|
|
335
335
|
// collab on its fast presence cadence against the local stream. Subscribers
|
|
336
336
|
// are re-notified via the close/connect cycle below.
|
|
337
337
|
this.capabilities = [];
|
|
338
|
+
// The failure count was earned against the gateway. Carrying it over would
|
|
339
|
+
// back the local endpoint off by 2^failures (already 8min at the threshold)
|
|
340
|
+
// before its first poll, even though it just served this page.
|
|
341
|
+
this.consecutiveFailures = 0;
|
|
338
342
|
if (this.gatewayReconnectTimer) {
|
|
339
343
|
clearTimeout(this.gatewayReconnectTimer);
|
|
340
344
|
this.gatewayReconnectTimer = null;
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
|
|
14
14
|
*/
|
|
15
15
|
export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
16
|
-
ok?: undefined;
|
|
17
16
|
error: string;
|
|
17
|
+
ok?: undefined;
|
|
18
18
|
} | {
|
|
19
19
|
error?: undefined;
|
|
20
20
|
ok: boolean;
|
package/dist/config.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Public, non-secret configuration for an Agent-Native app.
|
|
3
3
|
*
|
|
4
4
|
* This module is intentionally free of Node and framework imports so it can be
|
|
5
|
-
* used from a typed `agent-native.
|
|
6
|
-
*
|
|
5
|
+
* used from a typed `agent-native.ts` file and from browser code after Vite
|
|
6
|
+
* serializes the resolved config into the client bundle.
|
|
7
7
|
*/
|
|
8
8
|
export declare const AGENT_NATIVE_CONFIG_VERSION: 1;
|
|
9
9
|
export type AgentNativeFirstRunOnboardingMode = "off" | "connect" | "connect-and-integrations";
|
|
@@ -21,9 +21,32 @@ export interface AgentNativeOnboardingConfig {
|
|
|
21
21
|
*/
|
|
22
22
|
firstRun?: AgentNativeFirstRunOnboardingSetting;
|
|
23
23
|
}
|
|
24
|
+
export interface AgentNativeRuntimeAuthConfig {
|
|
25
|
+
/** Whether the app expects the framework or a custom auth layer to run. */
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface AgentNativeRuntimeDatabaseConfig {
|
|
29
|
+
/** Whether production needs a persistent remote database. */
|
|
30
|
+
required?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface AgentNativeRuntimeEnvironmentConfig {
|
|
33
|
+
/** Additional non-secret environment keys required by this app. */
|
|
34
|
+
required?: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface AgentNativeRuntimeConfig {
|
|
37
|
+
auth?: AgentNativeRuntimeAuthConfig;
|
|
38
|
+
database?: AgentNativeRuntimeDatabaseConfig;
|
|
39
|
+
environment?: AgentNativeRuntimeEnvironmentConfig;
|
|
40
|
+
}
|
|
41
|
+
export interface AgentNativeDiagnosticsConfig {
|
|
42
|
+
/** Fail a production Vite build when runtime configuration has issues. */
|
|
43
|
+
failOnBuild?: boolean;
|
|
44
|
+
}
|
|
24
45
|
export interface AgentNativeConfig {
|
|
25
46
|
version?: typeof AGENT_NATIVE_CONFIG_VERSION;
|
|
26
47
|
onboarding?: AgentNativeOnboardingConfig;
|
|
48
|
+
runtime?: AgentNativeRuntimeConfig;
|
|
49
|
+
diagnostics?: AgentNativeDiagnosticsConfig;
|
|
27
50
|
}
|
|
28
51
|
export interface AgentNativeConfigContext {
|
|
29
52
|
command: "serve" | "build";
|
|
@@ -34,7 +57,7 @@ export interface AgentNativeConfigContext {
|
|
|
34
57
|
export type AgentNativeConfigFactory = (context: AgentNativeConfigContext) => AgentNativeConfig;
|
|
35
58
|
export type AgentNativeConfigInput = AgentNativeConfig | AgentNativeConfigFactory;
|
|
36
59
|
/**
|
|
37
|
-
* Type-safe authoring helper for `agent-native.
|
|
60
|
+
* Type-safe authoring helper for `agent-native.ts`.
|
|
38
61
|
*
|
|
39
62
|
* Like Next's typed config file, this is deliberately identity-like: the
|
|
40
63
|
* framework evaluates the exported object or factory in the Vite config
|
package/dist/config.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Public, non-secret configuration for an Agent-Native app.
|
|
3
3
|
*
|
|
4
4
|
* This module is intentionally free of Node and framework imports so it can be
|
|
5
|
-
* used from a typed `agent-native.
|
|
6
|
-
*
|
|
5
|
+
* used from a typed `agent-native.ts` file and from browser code after Vite
|
|
6
|
+
* serializes the resolved config into the client bundle.
|
|
7
7
|
*/
|
|
8
8
|
export const AGENT_NATIVE_CONFIG_VERSION = 1;
|
|
9
9
|
/**
|
|
10
|
-
* Type-safe authoring helper for `agent-native.
|
|
10
|
+
* Type-safe authoring helper for `agent-native.ts`.
|
|
11
11
|
*
|
|
12
12
|
* Like Next's typed config file, this is deliberately identity-like: the
|
|
13
13
|
* framework evaluates the exported object or factory in the Vite config
|
|
@@ -25,21 +25,27 @@ export function normalizeAgentNativeConfig(input, source = "agent-native config"
|
|
|
25
25
|
throw new Error(`${source}.version must be ${AGENT_NATIVE_CONFIG_VERSION} when provided`);
|
|
26
26
|
}
|
|
27
27
|
const onboardingValue = input.onboarding;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
: { version: AGENT_NATIVE_CONFIG_VERSION };
|
|
32
|
-
}
|
|
33
|
-
if (!isRecord(onboardingValue)) {
|
|
34
|
-
throw new Error(`${source}.onboarding must be an object`);
|
|
35
|
-
}
|
|
36
|
-
const firstRun = normalizeFirstRunSetting(onboardingValue.firstRun, `${source}.onboarding.firstRun`);
|
|
37
|
-
return {
|
|
28
|
+
const runtimeValue = input.runtime;
|
|
29
|
+
const diagnosticsValue = input.diagnostics;
|
|
30
|
+
const normalized = {
|
|
38
31
|
...(input.version === undefined
|
|
39
32
|
? {}
|
|
40
33
|
: { version: AGENT_NATIVE_CONFIG_VERSION }),
|
|
41
|
-
onboarding: firstRun === undefined ? {} : { firstRun },
|
|
42
34
|
};
|
|
35
|
+
if (onboardingValue !== undefined) {
|
|
36
|
+
if (!isRecord(onboardingValue)) {
|
|
37
|
+
throw new Error(`${source}.onboarding must be an object`);
|
|
38
|
+
}
|
|
39
|
+
const firstRun = normalizeFirstRunSetting(onboardingValue.firstRun, `${source}.onboarding.firstRun`);
|
|
40
|
+
normalized.onboarding = firstRun === undefined ? {} : { firstRun };
|
|
41
|
+
}
|
|
42
|
+
if (runtimeValue !== undefined) {
|
|
43
|
+
normalized.runtime = normalizeRuntimeConfig(runtimeValue, `${source}.runtime`);
|
|
44
|
+
}
|
|
45
|
+
if (diagnosticsValue !== undefined) {
|
|
46
|
+
normalized.diagnostics = normalizeDiagnosticsConfig(diagnosticsValue, `${source}.diagnostics`);
|
|
47
|
+
}
|
|
48
|
+
return normalized;
|
|
43
49
|
}
|
|
44
50
|
export function mergeAgentNativeConfigs(base, override) {
|
|
45
51
|
return {
|
|
@@ -54,6 +60,37 @@ export function mergeAgentNativeConfigs(base, override) {
|
|
|
54
60
|
...override.onboarding,
|
|
55
61
|
}
|
|
56
62
|
: undefined,
|
|
63
|
+
runtime: base.runtime || override.runtime
|
|
64
|
+
? {
|
|
65
|
+
...base.runtime,
|
|
66
|
+
...override.runtime,
|
|
67
|
+
auth: base.runtime?.auth || override.runtime?.auth
|
|
68
|
+
? {
|
|
69
|
+
...base.runtime?.auth,
|
|
70
|
+
...override.runtime?.auth,
|
|
71
|
+
}
|
|
72
|
+
: undefined,
|
|
73
|
+
database: base.runtime?.database || override.runtime?.database
|
|
74
|
+
? {
|
|
75
|
+
...base.runtime?.database,
|
|
76
|
+
...override.runtime?.database,
|
|
77
|
+
}
|
|
78
|
+
: undefined,
|
|
79
|
+
environment: base.runtime?.environment || override.runtime?.environment
|
|
80
|
+
? {
|
|
81
|
+
...base.runtime?.environment,
|
|
82
|
+
...override.runtime?.environment,
|
|
83
|
+
required: mergeStringLists(base.runtime?.environment?.required, override.runtime?.environment?.required),
|
|
84
|
+
}
|
|
85
|
+
: undefined,
|
|
86
|
+
}
|
|
87
|
+
: undefined,
|
|
88
|
+
diagnostics: base.diagnostics || override.diagnostics
|
|
89
|
+
? {
|
|
90
|
+
...base.diagnostics,
|
|
91
|
+
...override.diagnostics,
|
|
92
|
+
}
|
|
93
|
+
: undefined,
|
|
57
94
|
};
|
|
58
95
|
}
|
|
59
96
|
export function resolveAgentNativeConfig(input, context) {
|
|
@@ -100,6 +137,61 @@ function normalizeFirstRunSetting(value, source) {
|
|
|
100
137
|
}
|
|
101
138
|
return result;
|
|
102
139
|
}
|
|
140
|
+
function normalizeRuntimeConfig(value, source) {
|
|
141
|
+
if (!isRecord(value)) {
|
|
142
|
+
throw new Error(`${source} must be an object`);
|
|
143
|
+
}
|
|
144
|
+
const result = {};
|
|
145
|
+
for (const section of ["auth", "database", "environment"]) {
|
|
146
|
+
const sectionValue = value[section];
|
|
147
|
+
if (sectionValue === undefined)
|
|
148
|
+
continue;
|
|
149
|
+
if (!isRecord(sectionValue)) {
|
|
150
|
+
throw new Error(`${source}.${section} must be an object`);
|
|
151
|
+
}
|
|
152
|
+
if (section === "environment") {
|
|
153
|
+
const required = normalizeRequiredEnvKeys(sectionValue.required, `${source}.environment.required`);
|
|
154
|
+
result.environment = required === undefined ? {} : { required };
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const field = section === "auth" ? "enabled" : "required";
|
|
158
|
+
const fieldValue = sectionValue[field];
|
|
159
|
+
if (fieldValue !== undefined && typeof fieldValue !== "boolean") {
|
|
160
|
+
throw new Error(`${source}.${section}.${field} must be a boolean`);
|
|
161
|
+
}
|
|
162
|
+
result[section] = fieldValue === undefined ? {} : { [field]: fieldValue };
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
function normalizeDiagnosticsConfig(value, source) {
|
|
167
|
+
if (!isRecord(value)) {
|
|
168
|
+
throw new Error(`${source} must be an object`);
|
|
169
|
+
}
|
|
170
|
+
if (value.failOnBuild !== undefined &&
|
|
171
|
+
typeof value.failOnBuild !== "boolean") {
|
|
172
|
+
throw new Error(`${source}.failOnBuild must be a boolean`);
|
|
173
|
+
}
|
|
174
|
+
return value.failOnBuild === undefined
|
|
175
|
+
? {}
|
|
176
|
+
: { failOnBuild: value.failOnBuild };
|
|
177
|
+
}
|
|
178
|
+
function normalizeRequiredEnvKeys(value, source) {
|
|
179
|
+
if (value === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
if (!Array.isArray(value) || value.some((key) => typeof key !== "string")) {
|
|
182
|
+
throw new Error(`${source} must be an array of environment variable names`);
|
|
183
|
+
}
|
|
184
|
+
const keys = value.map((key) => key.trim());
|
|
185
|
+
if (keys.some((key) => !/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))) {
|
|
186
|
+
throw new Error(`${source} must contain valid environment variable names`);
|
|
187
|
+
}
|
|
188
|
+
return [...new Set(keys)];
|
|
189
|
+
}
|
|
190
|
+
function mergeStringLists(base, override) {
|
|
191
|
+
if (base === undefined && override === undefined)
|
|
192
|
+
return undefined;
|
|
193
|
+
return [...new Set([...(base ?? []), ...(override ?? [])])];
|
|
194
|
+
}
|
|
103
195
|
function isFirstRunMode(value) {
|
|
104
196
|
return (value === "off" ||
|
|
105
197
|
value === "connect" ||
|
package/dist/db/ddl-guard.d.ts
CHANGED
|
@@ -57,8 +57,8 @@ export declare function pgTableExists(table: string, injectedClient?: DbExec, di
|
|
|
57
57
|
*/
|
|
58
58
|
export declare function pgColumnExists(table: string, column: string, injectedClient?: DbExec): Promise<boolean | undefined>;
|
|
59
59
|
/**
|
|
60
|
-
* True when running against Postgres AND
|
|
61
|
-
* exists in the `public` schema. Returns `false` on SQLite, for invalid
|
|
60
|
+
* True when running against Postgres AND a valid, ready index with the given
|
|
61
|
+
* name already exists in the `public` schema. Returns `false` on SQLite, for invalid
|
|
62
62
|
* identifiers, and `undefined` when `pg_indexes` is unreadable.
|
|
63
63
|
*
|
|
64
64
|
* `CREATE INDEX` (without CONCURRENTLY) takes a `SHARE` lock that blocks
|
|
@@ -134,6 +134,19 @@ export declare function ensureIndexExists(indexName: string, createIndexSql: str
|
|
|
134
134
|
injectedClient?: DbExec;
|
|
135
135
|
dialectIsPostgres?: boolean;
|
|
136
136
|
}): Promise<boolean>;
|
|
137
|
+
/**
|
|
138
|
+
* Ensure an additive Postgres index with `CREATE INDEX CONCURRENTLY`.
|
|
139
|
+
*
|
|
140
|
+
* This is deliberately separate from `ensureIndexExists`: the normal helper
|
|
141
|
+
* wraps DDL in a transaction so it can scope `lock_timeout`, but PostgreSQL
|
|
142
|
+
* forbids `CREATE INDEX CONCURRENTLY` inside a transaction. The caller must
|
|
143
|
+
* supply the concurrent form of the statement; direct execution keeps the
|
|
144
|
+
* build outside a transaction and avoids blocking writes on a large table.
|
|
145
|
+
*/
|
|
146
|
+
export declare function ensureIndexExistsConcurrently(indexName: string, createIndexSql: string, options?: {
|
|
147
|
+
injectedClient?: DbExec;
|
|
148
|
+
dialectIsPostgres?: boolean;
|
|
149
|
+
}): Promise<boolean>;
|
|
137
150
|
/** True when an error looks like a Postgres `lock_timeout` (SQLSTATE 55P03). */
|
|
138
151
|
export declare function isLockTimeoutError(err: unknown): boolean;
|
|
139
152
|
/**
|