@agent-native/core 0.103.0 → 0.104.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 +36 -0
- package/corpus/core/package.json +9 -2
- package/corpus/core/src/agent/engine/credential-errors.ts +2 -2
- package/corpus/core/src/agent/production-agent.ts +30 -0
- package/corpus/core/src/agent/run-store.ts +12 -2
- package/corpus/core/src/cli/create.ts +1 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +30 -11
- package/corpus/core/src/cli/templates-meta.ts +4 -3
- package/corpus/core/src/client/AgentAskPopover.tsx +89 -0
- package/corpus/core/src/client/AgentChatHome.tsx +4 -0
- package/corpus/core/src/client/AgentPanel.tsx +321 -223
- package/corpus/core/src/client/AssistantChat.tsx +6 -10
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +53 -372
- package/corpus/core/src/client/agent-chat-adapter.ts +13 -1
- package/corpus/core/src/client/agent-page/AgentContextTab.tsx +133 -149
- package/corpus/core/src/client/agent-page/AgentEmptyState.tsx +44 -0
- package/corpus/core/src/client/agent-page/AgentJobsTab.tsx +153 -82
- package/corpus/core/src/client/agent-page/AgentTabFrame.tsx +39 -0
- package/corpus/core/src/client/agent-page/AgentTabsPage.tsx +368 -356
- package/corpus/core/src/client/agent-page/types.ts +1 -1
- package/corpus/core/src/client/analytics.ts +51 -5
- package/corpus/core/src/client/chat/run-recovery.tsx +12 -4
- package/corpus/core/src/client/composer/PromptComposer.tsx +5 -15
- package/corpus/core/src/client/composer/TiptapComposer.tsx +32 -3
- package/corpus/core/src/client/dynamic-suggestions.ts +3 -3
- package/corpus/core/src/client/index.ts +16 -1
- package/corpus/core/src/client/resources/ResourceTree.tsx +249 -38
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +307 -140
- package/corpus/core/src/client/session-replay.ts +158 -5
- package/corpus/core/src/client/settings/AutomationsSection.tsx +30 -10
- package/corpus/core/src/client/settings/SettingsPanel.tsx +3 -2
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +2 -0
- package/corpus/core/src/client/settings/agent-settings-search.ts +2 -2
- package/corpus/core/src/client/use-chat-threads.ts +2 -0
- package/corpus/core/src/connections/catalog.ts +49 -7
- package/corpus/core/src/db/index.ts +6 -1
- package/corpus/core/src/extensions/actions.ts +106 -16
- package/corpus/core/src/extensions/content-patch.ts +22 -0
- package/corpus/core/src/extensions/routes.ts +18 -0
- package/corpus/core/src/extensions/store.ts +8 -0
- package/corpus/core/src/index.ts +3 -0
- package/corpus/core/src/ingestion/docx.ts +158 -0
- package/corpus/core/src/ingestion/figma-node-to-html.ts +1860 -0
- package/corpus/core/src/ingestion/figma.ts +548 -0
- package/corpus/core/src/ingestion/index.ts +107 -0
- package/corpus/core/src/ingestion/media.ts +264 -0
- package/corpus/core/src/ingestion/notion.ts +121 -0
- package/corpus/core/src/ingestion/office.ts +214 -0
- package/corpus/core/src/ingestion/orchestration.ts +160 -0
- package/corpus/core/src/ingestion/pptx.ts +333 -0
- package/corpus/core/src/ingestion/selection.ts +81 -0
- package/corpus/core/src/ingestion/website.ts +151 -0
- package/corpus/core/src/integrations/plugin.ts +45 -37
- package/corpus/core/src/localization/default-messages.ts +35 -12
- package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
- package/corpus/core/src/observability/traces.ts +5 -3
- package/corpus/core/src/provider-api/index.ts +452 -8
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +18 -1
- package/corpus/core/src/search-utils/index.ts +112 -0
- package/corpus/core/src/secrets/register-framework-secrets.ts +61 -0
- package/corpus/core/src/server/action-discovery.ts +33 -8
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +2 -2
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +144 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
- package/corpus/core/src/server/core-routes-plugin.ts +12 -0
- package/corpus/core/src/server/index.ts +30 -0
- package/corpus/core/src/server/workspace-provider-oauth.ts +583 -0
- package/corpus/core/src/styles/agent-native.css +9 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +3 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/corpus/core/src/templates/workspace-root/.env.example +12 -0
- package/corpus/core/src/vite/client.ts +2 -0
- package/corpus/core/src/workspace-connections/index.ts +6 -0
- package/corpus/core/src/workspace-connections/lifecycle.ts +43 -0
- package/corpus/core/src/workspace-connections/store.ts +16 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +46 -3
- package/corpus/templates/analytics/AGENTS.md +9 -0
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +120 -6
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +92 -30
- package/corpus/templates/analytics/actions/update-dashboard.ts +5 -5
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +313 -220
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -2
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +9 -6
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +90 -64
- package/corpus/templates/analytics/app/i18n-data.ts +3 -3
- package/corpus/templates/analytics/app/lib/dashboard-list-loading.ts +25 -0
- package/corpus/templates/analytics/app/lib/item-popularity.ts +13 -4
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/pivot.ts +8 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +1 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +15 -3
- package/corpus/templates/analytics/changelog/2026-07-16-dashboard-filter-defaults-can-now-be-changed-reliably-withou.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-dashboard-lists-load-in-one-stable-order-without-popping-bet.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-fixed-dashboard-filter-dropdown-text-alignment.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-recurring-signed-in-users-can-now-be-viewed-as-weekly-bars-b.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-16-the-analytics-agent-can-now-duplicate-a-chart-and-place-the-.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +41 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -1
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +47 -1
- package/corpus/templates/analytics/server/lib/session-replay.ts +68 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/analytics/server/routes/sessions/lookup.get.ts +47 -0
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +16 -9
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +86 -0
- package/corpus/templates/assets/AGENTS.md +10 -0
- package/corpus/templates/assets/actions/create-generation-session.ts +59 -1
- package/corpus/templates/assets/actions/edit-image.ts +2 -0
- package/corpus/templates/assets/actions/generate-asset.ts +52 -0
- package/corpus/templates/assets/actions/generate-image-batch.ts +55 -0
- package/corpus/templates/assets/actions/generate-image.ts +219 -1
- package/corpus/templates/assets/actions/open-asset-picker.ts +14 -0
- package/corpus/templates/assets/actions/refine-image.ts +3 -0
- package/corpus/templates/assets/actions/restyle-image.ts +2 -0
- package/corpus/templates/assets/agent-native.app-skill.json +4 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/assets/app/i18n-data.ts +29 -13
- package/corpus/templates/assets/app/routes/agent.tsx +7 -1
- package/corpus/templates/assets/app/routes/library.tsx +9 -0
- package/corpus/templates/assets/app/routes/settings.tsx +3 -0
- package/corpus/templates/assets/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/assets/package.json +1 -0
- package/corpus/templates/assets/server/lib/image-processing.ts +1 -22
- package/corpus/templates/assets/server/plugins/creative-context.ts +205 -0
- package/corpus/templates/brain/app/i18n-data.ts +3 -3
- package/corpus/templates/brain/app/lib/brain.ts +1 -1
- package/corpus/templates/brain/server/lib/search.ts +17 -67
- package/corpus/templates/calendar/app/i18n-data.ts +3 -3
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +19 -18
- package/corpus/templates/chat/app/i18n/en-US.ts +3 -3
- package/corpus/templates/chat/app/lib/agent-page.tsx +10 -1
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +1 -1
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +35 -4
- package/corpus/templates/clips/actions/create-meeting.ts +6 -2
- package/corpus/templates/clips/actions/create-organization.ts +3 -2
- package/corpus/templates/clips/actions/create-recording.ts +4 -1
- package/corpus/templates/clips/actions/finalize-recording.ts +44 -7
- package/corpus/templates/clips/actions/import-loom-recording.ts +4 -1
- package/corpus/templates/clips/actions/lib/create-recording-schema.ts +2 -2
- package/corpus/templates/clips/actions/list-meetings.ts +23 -5
- package/corpus/templates/clips/actions/list-organization-state.ts +1 -1
- package/corpus/templates/clips/actions/remove-silences.ts +10 -1
- package/corpus/templates/clips/actions/request-transcript.ts +53 -11
- package/corpus/templates/clips/actions/search-recordings-utils.ts +7 -0
- package/corpus/templates/clips/actions/search-recordings.ts +5 -8
- package/corpus/templates/clips/actions/set-organization-branding.ts +2 -2
- package/corpus/templates/clips/actions/stitch-recordings.ts +10 -5
- package/corpus/templates/clips/actions/update-ai-request-status.ts +38 -0
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +3 -4
- package/corpus/templates/clips/app/components/editor/editor-selection.ts +19 -0
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +10 -10
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +1 -2
- package/corpus/templates/clips/app/components/library/library-grid.tsx +101 -93
- package/corpus/templates/clips/app/components/player/video-player.tsx +11 -0
- package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +53 -1
- package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +10 -4
- package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +6 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +6 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +5 -9
- package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +6 -2
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +129 -27
- package/corpus/templates/clips/app/routes/record.tsx +23 -2
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +6 -2
- package/corpus/templates/clips/changelog/2026-07-16-authorized-viewers-can-open-shared-private-clips-without-a-m.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-camera-bubble-hover-controls-appear-above-the-face.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-chrome-extension-recovers-stale-recorder-state.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-clips-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-clips-search-now-matches-recording-content-without-requiring.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-declined-meetings-no-longer-show-desktop-reminders.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-failed-desktop-saves-now-show-their-local-recovery-copy.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-long-desktop-clips-now-preserve-complete-playback-synced-aud.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-long-recording-lists-keep-stitch-and-library-actions-visible.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-organization-admins-can-choose-new-recording-visibility.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-remove-silences-now-shows-queued-active-completed-and-failed.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-settings-no-longer-repeats-the-builder-connection-status-in-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-16-transcripts-now-appear-from-native-browser-speech-sooner-wit.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
- package/corpus/templates/clips/chrome-extension/src/background.ts +73 -1
- package/corpus/templates/clips/chrome-extension/src/native-recording-state.ts +32 -0
- package/corpus/templates/clips/chrome-extension/src/native-transcription.ts +248 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +106 -0
- package/corpus/templates/clips/desktop/src/app.tsx +66 -28
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +335 -285
- package/corpus/templates/clips/desktop/src/lib/single-flight.ts +7 -0
- package/corpus/templates/clips/desktop/src/lib/upload-verification.ts +51 -0
- package/corpus/templates/clips/desktop/src/overlays/bubble.tsx +2 -2
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +10 -2
- package/corpus/templates/clips/desktop/src/styles.css +13 -11
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +8 -9
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +88 -13
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +13 -2
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +241 -6
- package/corpus/templates/clips/server/db/schema.ts +2 -2
- package/corpus/templates/clips/server/lib/builder-media-compression.ts +64 -67
- package/corpus/templates/clips/server/lib/calendar-event-classification.ts +19 -0
- package/corpus/templates/clips/server/lib/google-calendar-client.ts +1 -0
- package/corpus/templates/clips/server/lib/recordings.ts +40 -1
- package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/clips/server/plugins/db.ts +2 -2
- package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +1 -1
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +51 -1
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +1 -64
- package/corpus/templates/clips/shared/media-worker-contract.ts +32 -15
- package/corpus/templates/content/.agents/skills/content/SKILL.md +16 -0
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +85 -0
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +8 -0
- package/corpus/templates/content/AGENTS.md +9 -0
- package/corpus/templates/content/actions/create-document.ts +94 -0
- package/corpus/templates/content/actions/edit-document.ts +144 -4
- package/corpus/templates/content/actions/update-document.ts +138 -0
- package/corpus/templates/content/agent-native.app-skill.json +4 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +13 -4
- package/corpus/templates/content/app/routes/_app.agent.tsx +2 -1
- package/corpus/templates/content/app/routes/_app.settings.tsx +3 -0
- package/corpus/templates/content/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/content/package.json +1 -0
- package/corpus/templates/content/server/plugins/creative-context.ts +31 -0
- package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +116 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
- package/corpus/templates/design/AGENTS.md +6 -0
- package/corpus/templates/design/actions/clone-creative-context-design.ts +176 -0
- package/corpus/templates/design/actions/edit-design.ts +128 -0
- package/corpus/templates/design/actions/generate-design.ts +278 -14
- package/corpus/templates/design/actions/generate-screens.ts +42 -1
- package/corpus/templates/design/agent-native.app-skill.json +4 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +7 -3
- package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +10 -4
- package/corpus/templates/design/app/routes/agent.tsx +2 -1
- package/corpus/templates/design/app/routes/settings.tsx +3 -0
- package/corpus/templates/design/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/design/changelog/2026-07-16-design-agent-chat-no-longer-shows-a-separate-workspace-header.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/server/lib/figma-design-context.ts +5 -335
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +1 -1859
- package/corpus/templates/design/server/lib/import-design-files.ts +6 -8
- package/corpus/templates/design/server/plugins/creative-context.ts +31 -0
- package/corpus/templates/design/shared/generation-session.ts +7 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +3 -3
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -3
- package/corpus/templates/macros/app/i18n/en-US.ts +3 -3
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +35 -5
- package/corpus/templates/mail/app/i18n/en-US.ts +3 -3
- package/corpus/templates/mail/changelog/2026-07-16-mail-previews-now-expand-to-show-the-full-message-without-an.md +6 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +30 -11
- package/corpus/templates/plan/AGENTS.md +21 -1
- package/corpus/templates/plan/actions/get-visual-plan.ts +1 -1
- package/corpus/templates/plan/actions/patch-visual-plan-source.ts +161 -0
- package/corpus/templates/plan/actions/read-visual-plan-source.ts +1 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +126 -10
- package/corpus/templates/plan/app/hooks/use-plans.ts +2 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +3 -3
- package/corpus/templates/plan/app/pages/PlansPage.tsx +65 -62
- package/corpus/templates/plan/changelog/2026-07-16-local-plan-previews-now-load-annotations-containing-html-lik.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-16-plan-agents-now-prevent-stale-edits-from-overwriting-newer-p.md +6 -0
- package/corpus/templates/plan/server/plan-mdx.ts +75 -2
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +21 -4
- package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +122 -0
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +11 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +12 -3
- package/corpus/templates/slides/AGENTS.md +6 -0
- package/corpus/templates/slides/actions/add-slide.ts +230 -14
- package/corpus/templates/slides/actions/clone-context-slide.ts +302 -0
- package/corpus/templates/slides/actions/create-deck.ts +130 -0
- package/corpus/templates/slides/actions/extract-pdf.ts +6 -2
- package/corpus/templates/slides/actions/import-file.ts +5 -4
- package/corpus/templates/slides/actions/patch-deck.ts +200 -10
- package/corpus/templates/slides/actions/update-slide.ts +208 -15
- package/corpus/templates/slides/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +16 -1
- package/corpus/templates/slides/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -3
- package/corpus/templates/slides/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/slides/app/lib/validate-native-slide-html.ts +176 -0
- package/corpus/templates/slides/app/routes/agent.tsx +7 -1
- package/corpus/templates/slides/app/routes/settings.tsx +3 -0
- package/corpus/templates/slides/changelog/2026-07-16-creative-context-library.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-16-google-slides-native-cloning.md +6 -0
- package/corpus/templates/slides/package.json +1 -0
- package/corpus/templates/slides/server/handlers/import/docx-parser.ts +4 -85
- package/corpus/templates/slides/server/handlers/import/pptx-parser.ts +7 -421
- package/corpus/templates/slides/server/plugins/creative-context.ts +166 -0
- package/dist/agent/engine/credential-errors.d.ts +1 -1
- package/dist/agent/engine/credential-errors.d.ts.map +1 -1
- package/dist/agent/engine/credential-errors.js +2 -2
- package/dist/agent/engine/credential-errors.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +25 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +12 -2
- package/dist/agent/run-store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +1 -0
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js +30 -11
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +4 -3
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AgentAskPopover.d.ts +11 -0
- package/dist/client/AgentAskPopover.d.ts.map +1 -0
- package/dist/client/AgentAskPopover.js +30 -0
- package/dist/client/AgentAskPopover.js.map +1 -0
- package/dist/client/AgentChatHome.d.ts +1 -1
- package/dist/client/AgentChatHome.d.ts.map +1 -1
- package/dist/client/AgentChatHome.js +2 -2
- package/dist/client/AgentChatHome.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +9 -19
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +119 -80
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +4 -4
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +3 -9
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +49 -189
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +12 -1
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-page/AgentContextTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentContextTab.js +26 -28
- package/dist/client/agent-page/AgentContextTab.js.map +1 -1
- package/dist/client/agent-page/AgentEmptyState.d.ts +13 -0
- package/dist/client/agent-page/AgentEmptyState.d.ts.map +1 -0
- package/dist/client/agent-page/AgentEmptyState.js +6 -0
- package/dist/client/agent-page/AgentEmptyState.js.map +1 -0
- package/dist/client/agent-page/AgentJobsTab.d.ts +1 -1
- package/dist/client/agent-page/AgentJobsTab.d.ts.map +1 -1
- package/dist/client/agent-page/AgentJobsTab.js +90 -58
- package/dist/client/agent-page/AgentJobsTab.js.map +1 -1
- package/dist/client/agent-page/AgentTabFrame.d.ts +12 -0
- package/dist/client/agent-page/AgentTabFrame.d.ts.map +1 -0
- package/dist/client/agent-page/AgentTabFrame.js +7 -0
- package/dist/client/agent-page/AgentTabFrame.js.map +1 -0
- package/dist/client/agent-page/AgentTabsPage.d.ts +9 -1
- package/dist/client/agent-page/AgentTabsPage.d.ts.map +1 -1
- package/dist/client/agent-page/AgentTabsPage.js +135 -99
- package/dist/client/agent-page/AgentTabsPage.js.map +1 -1
- package/dist/client/agent-page/types.d.ts +1 -1
- package/dist/client/agent-page/types.d.ts.map +1 -1
- package/dist/client/agent-page/types.js.map +1 -1
- package/dist/client/analytics.d.ts +10 -3
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +37 -2
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +10 -3
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +2 -2
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +15 -3
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/dynamic-suggestions.js +3 -3
- package/dist/client/dynamic-suggestions.js.map +1 -1
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts +5 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +74 -5
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts +11 -2
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +105 -31
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/session-replay.d.ts +28 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +122 -8
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts +3 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +16 -6
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +3 -3
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +2 -0
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/agent-settings-search.js +2 -2
- package/dist/client/settings/agent-settings-search.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts +2 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.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/connections/catalog.d.ts +41 -7
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +40 -7
- package/dist/connections/catalog.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -2
- package/dist/db/index.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +85 -15
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/content-patch.d.ts +4 -0
- package/dist/extensions/content-patch.d.ts.map +1 -1
- package/dist/extensions/content-patch.js +18 -0
- package/dist/extensions/content-patch.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +14 -0
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/store.d.ts +1 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +4 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ingestion/docx.d.ts +16 -0
- package/dist/ingestion/docx.d.ts.map +1 -0
- package/dist/ingestion/docx.js +129 -0
- package/dist/ingestion/docx.js.map +1 -0
- package/dist/ingestion/figma-node-to-html.d.ts +304 -0
- package/dist/ingestion/figma-node-to-html.d.ts.map +1 -0
- package/dist/ingestion/figma-node-to-html.js +1292 -0
- package/dist/ingestion/figma-node-to-html.js.map +1 -0
- package/dist/ingestion/figma.d.ts +115 -0
- package/dist/ingestion/figma.d.ts.map +1 -0
- package/dist/ingestion/figma.js +399 -0
- package/dist/ingestion/figma.js.map +1 -0
- package/dist/ingestion/index.d.ts +11 -0
- package/dist/ingestion/index.d.ts.map +1 -0
- package/dist/ingestion/index.js +11 -0
- package/dist/ingestion/index.js.map +1 -0
- package/dist/ingestion/media.d.ts +36 -0
- package/dist/ingestion/media.d.ts.map +1 -0
- package/dist/ingestion/media.js +178 -0
- package/dist/ingestion/media.js.map +1 -0
- package/dist/ingestion/notion.d.ts +12 -0
- package/dist/ingestion/notion.d.ts.map +1 -0
- package/dist/ingestion/notion.js +104 -0
- package/dist/ingestion/notion.js.map +1 -0
- package/dist/ingestion/office.d.ts +45 -0
- package/dist/ingestion/office.d.ts.map +1 -0
- package/dist/ingestion/office.js +141 -0
- package/dist/ingestion/office.js.map +1 -0
- package/dist/ingestion/orchestration.d.ts +52 -0
- package/dist/ingestion/orchestration.d.ts.map +1 -0
- package/dist/ingestion/orchestration.js +89 -0
- package/dist/ingestion/orchestration.js.map +1 -0
- package/dist/ingestion/pptx.d.ts +28 -0
- package/dist/ingestion/pptx.d.ts.map +1 -0
- package/dist/ingestion/pptx.js +255 -0
- package/dist/ingestion/pptx.js.map +1 -0
- package/dist/ingestion/selection.d.ts +20 -0
- package/dist/ingestion/selection.d.ts.map +1 -0
- package/dist/ingestion/selection.js +52 -0
- package/dist/ingestion/selection.js.map +1 -0
- package/dist/ingestion/website.d.ts +27 -0
- package/dist/ingestion/website.d.ts.map +1 -0
- package/dist/ingestion/website.js +100 -0
- package/dist/ingestion/website.js.map +1 -0
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +32 -27
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/localization/default-messages.d.ts +22 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +31 -9
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/observability/hosted-model-experiment.d.ts +39 -0
- package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
- package/dist/observability/hosted-model-experiment.js +90 -0
- package/dist/observability/hosted-model-experiment.js.map +1 -0
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +5 -3
- package/dist/observability/traces.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/index.d.ts +35 -4
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +339 -8
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +18 -1
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/search-utils/index.d.ts +12 -0
- package/dist/search-utils/index.d.ts.map +1 -0
- package/dist/search-utils/index.js +95 -0
- package/dist/search-utils/index.js.map +1 -0
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +57 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-discovery.d.ts +8 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +26 -9
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +2 -2
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/prompt-resources.d.ts +19 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
- package/dist/server/agent-chat/prompt-resources.js +95 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +7 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +5 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +5 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +5 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/workspace-provider-oauth.d.ts +48 -0
- package/dist/server/workspace-provider-oauth.d.ts.map +1 -0
- package/dist/server/workspace-provider-oauth.js +415 -0
- package/dist/server/workspace-provider-oauth.js.map +1 -0
- package/dist/styles/agent-native.css +9 -0
- package/dist/templates/chat/app/i18n/en-US.ts +3 -3
- package/dist/templates/chat/app/lib/agent-page.tsx +10 -1
- package/dist/templates/default/app/i18n/en-US.ts +3 -3
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/dist/templates/workspace-root/.env.example +12 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +2 -0
- package/dist/vite/client.js.map +1 -1
- package/dist/workspace-connections/index.d.ts +1 -0
- package/dist/workspace-connections/index.d.ts.map +1 -1
- package/dist/workspace-connections/index.js +1 -0
- package/dist/workspace-connections/index.js.map +1 -1
- package/dist/workspace-connections/lifecycle.d.ts +16 -0
- package/dist/workspace-connections/lifecycle.d.ts.map +1 -0
- package/dist/workspace-connections/lifecycle.js +14 -0
- package/dist/workspace-connections/lifecycle.js.map +1 -0
- package/dist/workspace-connections/store.d.ts.map +1 -1
- package/dist/workspace-connections/store.js +16 -0
- package/dist/workspace-connections/store.js.map +1 -1
- package/package.json +10 -3
- package/src/templates/chat/app/i18n/en-US.ts +3 -3
- package/src/templates/chat/app/lib/agent-page.spec.tsx +10 -1
- package/src/templates/chat/app/lib/agent-page.tsx +10 -1
- package/src/templates/default/app/i18n/en-US.ts +3 -3
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +14 -5
- package/src/templates/workspace-root/.env.example +12 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import safeRegex from "safe-regex2";
|
|
2
|
+
|
|
3
|
+
export type SearchMatchMode = "allTerms" | "anyTerm" | "phrase" | "regex";
|
|
4
|
+
|
|
5
|
+
const STOPWORDS = new Set([
|
|
6
|
+
"about",
|
|
7
|
+
"and",
|
|
8
|
+
"did",
|
|
9
|
+
"does",
|
|
10
|
+
"for",
|
|
11
|
+
"from",
|
|
12
|
+
"have",
|
|
13
|
+
"our",
|
|
14
|
+
"the",
|
|
15
|
+
"what",
|
|
16
|
+
"when",
|
|
17
|
+
"where",
|
|
18
|
+
"which",
|
|
19
|
+
"while",
|
|
20
|
+
"why",
|
|
21
|
+
"with",
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
export function escapeLikeTerm(value: string): string {
|
|
25
|
+
return value.replace(/[\\%_]/g, (match) => `\\${match}`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function normalizeSearchTerms(query: string): string[] {
|
|
29
|
+
const phrase = query
|
|
30
|
+
.toLowerCase()
|
|
31
|
+
.split(/[^\p{L}\p{N}-]+/u)
|
|
32
|
+
.map((token) => token.trim())
|
|
33
|
+
.filter(Boolean)
|
|
34
|
+
.join(" ");
|
|
35
|
+
if (!phrase) return [];
|
|
36
|
+
const tokens = phrase
|
|
37
|
+
.split(/[^\p{L}\p{N}-]+/u)
|
|
38
|
+
.map((token) => token.trim())
|
|
39
|
+
.filter((token) => token.length > 2 && !STOPWORDS.has(token));
|
|
40
|
+
return Array.from(new Set([phrase, ...tokens])).slice(0, 12);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function matchesSearchMode(
|
|
44
|
+
value: string,
|
|
45
|
+
query: string,
|
|
46
|
+
mode: SearchMatchMode,
|
|
47
|
+
): boolean {
|
|
48
|
+
const normalizedValue = normalizeText(value).toLowerCase();
|
|
49
|
+
if (mode === "regex") {
|
|
50
|
+
if (query.length > 240 || !safeRegex(query)) return false;
|
|
51
|
+
try {
|
|
52
|
+
return new RegExp(query, "iu").test(value);
|
|
53
|
+
} catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const terms = normalizeSearchTerms(query);
|
|
58
|
+
if (!terms.length) return false;
|
|
59
|
+
if (mode === "phrase") return normalizedValue.includes(terms[0] ?? "");
|
|
60
|
+
const tokens = terms.slice(1).length ? terms.slice(1) : terms;
|
|
61
|
+
return mode === "allTerms"
|
|
62
|
+
? tokens.every((term) => normalizedValue.includes(term))
|
|
63
|
+
: tokens.some((term) => normalizedValue.includes(term));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function buildSearchSnippet(
|
|
67
|
+
value: string,
|
|
68
|
+
terms: string[],
|
|
69
|
+
maxLength = 260,
|
|
70
|
+
): string {
|
|
71
|
+
const text = normalizeText(value);
|
|
72
|
+
if (text.length <= maxLength) return text;
|
|
73
|
+
const lower = text.toLowerCase();
|
|
74
|
+
const firstIndex = terms.reduce((best, term) => {
|
|
75
|
+
const index = lower.indexOf(term.toLowerCase());
|
|
76
|
+
return index >= 0 && (best < 0 || index < best) ? index : best;
|
|
77
|
+
}, -1);
|
|
78
|
+
const start = Math.max(
|
|
79
|
+
0,
|
|
80
|
+
(firstIndex < 0 ? 0 : firstIndex) - Math.floor(maxLength / 3),
|
|
81
|
+
);
|
|
82
|
+
const end = Math.min(text.length, start + maxLength);
|
|
83
|
+
return `${start > 0 ? "..." : ""}${text.slice(start, end).trim()}${end < text.length ? "..." : ""}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function scoreSearchText(
|
|
87
|
+
fields: {
|
|
88
|
+
title?: string | null;
|
|
89
|
+
summary?: string | null;
|
|
90
|
+
body?: string | null;
|
|
91
|
+
metadata?: string | null;
|
|
92
|
+
},
|
|
93
|
+
terms: string[],
|
|
94
|
+
): number {
|
|
95
|
+
const title = normalizeText(fields.title).toLowerCase();
|
|
96
|
+
const summary = normalizeText(fields.summary).toLowerCase();
|
|
97
|
+
const body = normalizeText(fields.body).toLowerCase();
|
|
98
|
+
const metadata = normalizeText(fields.metadata).toLowerCase();
|
|
99
|
+
let score = 0;
|
|
100
|
+
terms.forEach((term, index) => {
|
|
101
|
+
const phraseBoost = index === 0 ? 2 : 1;
|
|
102
|
+
if (title.includes(term)) score += 40 * phraseBoost;
|
|
103
|
+
if (summary.includes(term)) score += 20 * phraseBoost;
|
|
104
|
+
if (body.includes(term)) score += 8 * phraseBoost;
|
|
105
|
+
if (metadata.includes(term)) score += 6 * phraseBoost;
|
|
106
|
+
});
|
|
107
|
+
return score;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function normalizeText(value: string | null | undefined): string {
|
|
111
|
+
return (value ?? "").replace(/\s+/g, " ").trim();
|
|
112
|
+
}
|
|
@@ -17,6 +17,67 @@
|
|
|
17
17
|
import { getRequiredSecret, registerRequiredSecret } from "./register.js";
|
|
18
18
|
|
|
19
19
|
export function registerFrameworkSecrets(): void {
|
|
20
|
+
const workspaceOAuthProviders = [
|
|
21
|
+
{
|
|
22
|
+
id: "figma",
|
|
23
|
+
credentialPrefix: "FIGMA",
|
|
24
|
+
oauthProvider: "figma",
|
|
25
|
+
label: "Figma",
|
|
26
|
+
docsUrl: "https://developers.figma.com/docs/rest-api/oauth-apps/",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "google_drive",
|
|
30
|
+
credentialPrefix: "GOOGLE",
|
|
31
|
+
oauthProvider: "google",
|
|
32
|
+
label: "Google Drive",
|
|
33
|
+
docsUrl:
|
|
34
|
+
"https://developers.google.com/identity/protocols/oauth2/web-server",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "notion",
|
|
38
|
+
credentialPrefix: "NOTION",
|
|
39
|
+
oauthProvider: "notion",
|
|
40
|
+
label: "Notion",
|
|
41
|
+
docsUrl: "https://developers.notion.com/docs/authorization",
|
|
42
|
+
},
|
|
43
|
+
] as const;
|
|
44
|
+
|
|
45
|
+
for (const provider of workspaceOAuthProviders) {
|
|
46
|
+
const prefix = provider.credentialPrefix;
|
|
47
|
+
for (const credential of [
|
|
48
|
+
{ suffix: "CLIENT_ID", label: "OAuth client ID" },
|
|
49
|
+
{ suffix: "CLIENT_SECRET", label: "OAuth client secret" },
|
|
50
|
+
] as const) {
|
|
51
|
+
const key = `${prefix}_${credential.suffix}`;
|
|
52
|
+
if (!getRequiredSecret(key)) {
|
|
53
|
+
registerRequiredSecret({
|
|
54
|
+
key,
|
|
55
|
+
label: `${provider.label} ${credential.label}`,
|
|
56
|
+
description: `Workspace-owned ${provider.label} OAuth application credential. Tokens granted by users are stored separately and encrypted.`,
|
|
57
|
+
docsUrl: provider.docsUrl,
|
|
58
|
+
scope: "workspace",
|
|
59
|
+
kind: "api-key",
|
|
60
|
+
required: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const connectionKey = `${prefix}_CONNECTED`;
|
|
66
|
+
if (!getRequiredSecret(connectionKey)) {
|
|
67
|
+
registerRequiredSecret({
|
|
68
|
+
key: connectionKey,
|
|
69
|
+
label: `${provider.label} account`,
|
|
70
|
+
description: `Connect a ${provider.label} account for scoped workspace imports.`,
|
|
71
|
+
docsUrl: provider.docsUrl,
|
|
72
|
+
scope: "user",
|
|
73
|
+
kind: "oauth",
|
|
74
|
+
required: false,
|
|
75
|
+
oauthProvider: provider.oauthProvider,
|
|
76
|
+
oauthConnectUrl: `/_agent-native/connections/oauth/${provider.id}/start`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
20
81
|
if (!getRequiredSecret("OPENAI_API_KEY")) {
|
|
21
82
|
registerRequiredSecret({
|
|
22
83
|
key: "OPENAI_API_KEY",
|
|
@@ -68,7 +68,23 @@ function isRuntimeSourceFile(filename: string): boolean {
|
|
|
68
68
|
* consumers can override a packaged action by dropping a same-named file
|
|
69
69
|
* in their own `actions/` dir.
|
|
70
70
|
*/
|
|
71
|
-
const
|
|
71
|
+
const PACKAGE_ACTION_REGISTRY_KEY = Symbol.for(
|
|
72
|
+
"@agent-native/core.package-action-registry",
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
function getPackageActionRegistry(): Record<string, ActionEntry> {
|
|
76
|
+
const sharedGlobal = globalThis as typeof globalThis & {
|
|
77
|
+
[key: symbol]: unknown;
|
|
78
|
+
};
|
|
79
|
+
const existing = sharedGlobal[PACKAGE_ACTION_REGISTRY_KEY];
|
|
80
|
+
if (existing && typeof existing === "object") {
|
|
81
|
+
return existing as Record<string, ActionEntry>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const registry: Record<string, ActionEntry> = {};
|
|
85
|
+
sharedGlobal[PACKAGE_ACTION_REGISTRY_KEY] = registry;
|
|
86
|
+
return registry;
|
|
87
|
+
}
|
|
72
88
|
|
|
73
89
|
/**
|
|
74
90
|
* Register a map of actions contributed by a published package.
|
|
@@ -87,15 +103,27 @@ const packageActionRegistry: Record<string, ActionEntry> = {};
|
|
|
87
103
|
export function registerPackageActions(
|
|
88
104
|
actions: Record<string, ActionEntry>,
|
|
89
105
|
): void {
|
|
106
|
+
const packageActionRegistry = getPackageActionRegistry();
|
|
90
107
|
for (const [name, entry] of Object.entries(actions)) {
|
|
91
108
|
if (packageActionRegistry[name]) continue;
|
|
92
109
|
packageActionRegistry[name] = entry;
|
|
93
110
|
}
|
|
94
111
|
}
|
|
95
112
|
|
|
96
|
-
/**
|
|
97
|
-
|
|
98
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Merge package-contributed actions without replacing app-local actions.
|
|
115
|
+
*
|
|
116
|
+
* This is intentionally callable even when the app passes an explicit static
|
|
117
|
+
* action registry. Published packages register through import side effects,
|
|
118
|
+
* while generated app registries only contain app-local action files.
|
|
119
|
+
*/
|
|
120
|
+
export function mergePackageActions(
|
|
121
|
+
registry: Record<string, ActionEntry>,
|
|
122
|
+
): void {
|
|
123
|
+
for (const [name, entry] of Object.entries(getPackageActionRegistry())) {
|
|
124
|
+
if (registry[name]) continue;
|
|
125
|
+
registry[name] = entry;
|
|
126
|
+
}
|
|
99
127
|
}
|
|
100
128
|
|
|
101
129
|
/**
|
|
@@ -518,10 +546,7 @@ export async function autoDiscoverActions(
|
|
|
518
546
|
// (e.g. @agent-native/dispatch) via `registerPackageActions()` from
|
|
519
547
|
// import side effects. Merged with skip-existing so the template's
|
|
520
548
|
// own actions/ files always win on name collision.
|
|
521
|
-
|
|
522
|
-
if (registry[name]) continue;
|
|
523
|
-
registry[name] = entry;
|
|
524
|
-
}
|
|
549
|
+
mergePackageActions(registry);
|
|
525
550
|
|
|
526
551
|
// 2. Workspace-core actions — merged in with skipExisting so they can't
|
|
527
552
|
// overwrite template entries.
|
|
@@ -74,7 +74,7 @@ Keep \`create-extension\` payloads compact enough to finish quickly. For complex
|
|
|
74
74
|
|
|
75
75
|
Generated UI content can use appAction(), appFetch(), dbQuery(), extensionFetch(), extensionData, agentNative.ui.output(value, opts?), and agentNative.chat.send(...)/sendToAgentChat(...). Use appAction() for app data writes, and dbQuery() only for read-only inspection of known app SQL tables. It can receive chat inputs through slotContext/window.onSlotContext. Use agentNative.ui.output for passive current values from knobs, sliders, selections, and controls; it writes application state at \`inline-ui:<extensionId>:output\` scoped to the inline extension id returned by \`render-inline-extension\` or \`show-extension-inline\`. When the user later says "use that value", "apply the current setting", or similar, read it with \`readAppState("inline-ui:<id>:output")\` instead of asking them to send it again. Use agentNative.chat.send for visible submit/apply actions that should put a message into chat. Transient extensionData is browser-local and not agent-readable, synced, promoted, or garbage-collected; use application_state/appFetch, appAction, ui.output, or chat.send for anything the agent or app must observe. Use semantic Tailwind classes like bg-background, text-foreground, bg-primary, border-border, and text-muted-foreground so the UI inherits the parent app theme.
|
|
76
76
|
|
|
77
|
-
If the user asks to change, edit, fix, style, rename, or add behavior to an existing extension/widget/dashboard/calculator/mini-app, use the current extension id from \`<current-screen>\` or \`<current-url>\` when present. Call \`get-extension\` only if you need to inspect its content, then \`update-extension\` with that id. After one content read, keep the body in working memory and move to focused \`update-extension\` \`edits\`/\`patches\`; do not loop on repeated \`get-extension\` + \`run-code\` string scans before writing. Use \`list-extensions\` only when no current id/name is available. Existing extension edits are SQL data updates, not source-code changes, even when the request says "change the UI" or "fix this". Do **NOT** call \`connect-builder\` for existing extension edits.
|
|
77
|
+
If the user asks to change, edit, fix, style, rename, or add behavior to an existing extension/widget/dashboard/calculator/mini-app, use the current extension id from \`<current-screen>\` or \`<current-url>\` when present. Call \`get-extension\` only if you need to inspect its content, then \`update-extension\` with that id. After one content read, keep the body in working memory and move to focused \`update-extension\` \`edits\`/\`patches\`; do not loop on repeated \`get-extension\` + \`run-code\` string scans before writing. For a data-only repair, preserve the existing layout, CSS, copy, and interactions: never send a reconstructed full \`content\` body. The update action blocks full-body replacement by default; use \`allowFullReplacement=true\` only when the user explicitly requests a broad visual rewrite or supplies a complete replacement body. If a focused patch fails, read the current body and change the target rather than retrying identical arguments. Use \`list-extensions\` only when no current id/name is available. Existing extension edits are SQL data updates, not source-code changes, even when the request says "change the UI" or "fix this". Do **NOT** call \`connect-builder\` for existing extension edits.
|
|
78
78
|
|
|
79
79
|
In Act mode, when in doubt — if the request asks for a new small interactive utility and does not need reuse, choose \`render-inline-extension\`; if it mentions saving/reuse or asks for an extension/widget/dashboard/calculator/mini-app, choose \`create-extension\`. If it references an existing one or the current extension page, choose \`update-extension\`. Do **not** preface the call with planning text like "let me build the dashboard…" — just call the right extension action directly.
|
|
80
80
|
|
|
@@ -115,7 +115,7 @@ Keep the first \`create-extension\` call compact and working. If the request is
|
|
|
115
115
|
|
|
116
116
|
Generated UI can read chat inputs from slotContext/window.onSlotContext, see/update app state through appFetch/appAction, use extensionData, record passive current values through agentNative.ui.output(value, opts?), and send visible results through agentNative.chat.send(...) or sendToAgentChat(...). ui.output writes \`inline-ui:<extensionId>:output\` in application state; when the user asks to use the current slider/selection/value, read \`readAppState("inline-ui:<id>:output")\`. Transient extensionData is browser-local only, so do not rely on it for values the agent or app must observe. Use semantic Tailwind theme classes.
|
|
117
117
|
|
|
118
|
-
If the user asks to change, edit, fix, style, rename, or add behavior to an existing extension/widget/dashboard/calculator/mini-app, use the current extension id from \`<current-screen>\` or \`<current-url>\` when present. Call \`get-extension\` only if you need to inspect its content, then \`update-extension\` with that id. After one content read, use focused \`update-extension\` \`edits\`/\`patches\`; do not repeatedly re-read and scan the same HTML with \`run-code\` before writing. Use \`list-extensions\` only when no current id/name is available. Existing extension edits are SQL data updates, not source-code changes. Do NOT call \`connect-builder\` for them.
|
|
118
|
+
If the user asks to change, edit, fix, style, rename, or add behavior to an existing extension/widget/dashboard/calculator/mini-app, use the current extension id from \`<current-screen>\` or \`<current-url>\` when present. Call \`get-extension\` only if you need to inspect its content, then \`update-extension\` with that id. After one content read, use focused \`update-extension\` \`edits\`/\`patches\`; do not repeatedly re-read and scan the same HTML with \`run-code\` before writing. For a data-only repair, preserve the existing layout, CSS, copy, and interactions: never send a reconstructed full \`content\` body. The update action blocks full-body replacement by default; use \`allowFullReplacement=true\` only when the user explicitly requests a broad visual rewrite or supplies a complete replacement body. If a focused patch fails, read the current body and change the target rather than retrying identical arguments. Use \`list-extensions\` only when no current id/name is available. Existing extension edits are SQL data updates, not source-code changes. Do NOT call \`connect-builder\` for them.
|
|
119
119
|
|
|
120
120
|
For existing extensions, use \`get-extension\` or \`update-extension\` directly when \`<current-screen>\` or \`<current-url>\` provides an \`extensionId\`. Use \`list-extensions\` only to browse or resolve an unknown name. Use \`hide-extension\` when the user wants a shared extension removed only from their own view. Do not query the legacy \`tools\` table directly.
|
|
121
121
|
|
|
@@ -33,6 +33,97 @@ import { parseSkillFrontmatter } from "./skill-frontmatter.js";
|
|
|
33
33
|
const SHARED_PROMPT_RESOURCE_MAX_CHARS = 30_000;
|
|
34
34
|
export const COMPACT_PROMPT_RESOURCE_MAX_CHARS = 6_000;
|
|
35
35
|
const COMPACT_PROMPT_RESOURCES_TOTAL_MAX_CHARS = 48_000;
|
|
36
|
+
const PROMPT_CONTEXT_PROVIDER_MAX_CHARS = 8_000;
|
|
37
|
+
|
|
38
|
+
export interface PromptContextProviderContext {
|
|
39
|
+
owner: string;
|
|
40
|
+
compact: boolean;
|
|
41
|
+
selfAppId?: string;
|
|
42
|
+
orgId: string | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface PromptContextProviderContribution {
|
|
46
|
+
content: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
provenance?: ContextSystemProvenance;
|
|
49
|
+
governance?: ContextGovernanceTier;
|
|
50
|
+
sourceRef?: ContextManifestSourceRef;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface PromptContextProvider {
|
|
54
|
+
id: string;
|
|
55
|
+
load(
|
|
56
|
+
context: PromptContextProviderContext,
|
|
57
|
+
):
|
|
58
|
+
| Promise<PromptContextProviderContribution | null | undefined>
|
|
59
|
+
| PromptContextProviderContribution
|
|
60
|
+
| null
|
|
61
|
+
| undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const promptContextProviders = new Map<string, PromptContextProvider>();
|
|
65
|
+
|
|
66
|
+
/** Register a package-owned, request-scoped system-context contribution. */
|
|
67
|
+
export function registerPromptContextProvider(
|
|
68
|
+
provider: PromptContextProvider,
|
|
69
|
+
): () => void {
|
|
70
|
+
const id = provider.id.trim();
|
|
71
|
+
if (!/^[a-z][a-z0-9-]{1,63}$/.test(id)) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
"Prompt context provider ids must be 2-64 lowercase letters, digits, or hyphens",
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
const registered = { ...provider, id };
|
|
77
|
+
promptContextProviders.set(id, registered);
|
|
78
|
+
return () => {
|
|
79
|
+
if (promptContextProviders.get(id) === registered) {
|
|
80
|
+
promptContextProviders.delete(id);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function xmlAttributeEscape(value: string): string {
|
|
86
|
+
return value
|
|
87
|
+
.replace(/&/g, "&")
|
|
88
|
+
.replace(/"/g, """)
|
|
89
|
+
.replace(/</g, "<")
|
|
90
|
+
.replace(/>/g, ">");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function loadPromptContextProviderBlocks(
|
|
94
|
+
context: PromptContextProviderContext,
|
|
95
|
+
): Promise<string[]> {
|
|
96
|
+
const providers = [...promptContextProviders.values()].sort((a, b) =>
|
|
97
|
+
a.id.localeCompare(b.id),
|
|
98
|
+
);
|
|
99
|
+
const settled = await Promise.allSettled(
|
|
100
|
+
providers.map(async (provider) => ({
|
|
101
|
+
provider,
|
|
102
|
+
contribution: await provider.load(context),
|
|
103
|
+
})),
|
|
104
|
+
);
|
|
105
|
+
const blocks: string[] = [];
|
|
106
|
+
for (const result of settled) {
|
|
107
|
+
if (result.status !== "fulfilled") continue;
|
|
108
|
+
const { provider, contribution } = result.value;
|
|
109
|
+
if (!contribution) continue;
|
|
110
|
+
const content = contribution.content.trim();
|
|
111
|
+
if (!content) continue;
|
|
112
|
+
const boundedContent =
|
|
113
|
+
content.length <= PROMPT_CONTEXT_PROVIDER_MAX_CHARS
|
|
114
|
+
? content
|
|
115
|
+
: `${content.slice(0, PROMPT_CONTEXT_PROVIDER_MAX_CHARS)}\n[truncated after ${PROMPT_CONTEXT_PROVIDER_MAX_CHARS.toLocaleString()} characters]`;
|
|
116
|
+
const label = contribution.label?.trim() || provider.id;
|
|
117
|
+
const provenance = contribution.provenance ?? "runtime-context";
|
|
118
|
+
const governance = contribution.governance ?? "inherited";
|
|
119
|
+
const sourceScope = contribution.sourceRef?.scope?.trim() || "provider";
|
|
120
|
+
const sourcePath = contribution.sourceRef?.path?.trim() || provider.id;
|
|
121
|
+
blocks.push(
|
|
122
|
+
`<prompt-context-provider id="${xmlAttributeEscape(provider.id)}" label="${xmlAttributeEscape(label)}" provenance="${provenance}" governance="${governance}" scope="${xmlAttributeEscape(sourceScope)}" path="${xmlAttributeEscape(sourcePath)}">\n${boundedContent.replace(/<\/prompt-context-provider>/gi, "</prompt-context-provider>")}\n</prompt-context-provider>`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
return blocks;
|
|
126
|
+
}
|
|
36
127
|
|
|
37
128
|
export function compactPromptLine(value: string, maxChars: number): string {
|
|
38
129
|
const line = value.replace(/\s+/g, " ").trim();
|
|
@@ -144,6 +235,50 @@ export function promptResourceManifestSections(
|
|
|
144
235
|
});
|
|
145
236
|
}
|
|
146
237
|
|
|
238
|
+
const providerPattern =
|
|
239
|
+
/<prompt-context-provider\b([^>]*)>([\s\S]*?)<\/prompt-context-provider>/g;
|
|
240
|
+
while ((match = providerPattern.exec(prompt))) {
|
|
241
|
+
const attrs = match[1] ?? "";
|
|
242
|
+
const id = xmlAttribute(attrs, "id") ?? "prompt-context-provider";
|
|
243
|
+
const label = xmlAttribute(attrs, "label") ?? id;
|
|
244
|
+
const provenanceValue = xmlAttribute(attrs, "provenance");
|
|
245
|
+
const governanceValue = xmlAttribute(attrs, "governance");
|
|
246
|
+
const provenance = (
|
|
247
|
+
[
|
|
248
|
+
"framework-core",
|
|
249
|
+
"actions-prompt",
|
|
250
|
+
"template",
|
|
251
|
+
"enterprise-workspace-core",
|
|
252
|
+
"sql-workspace",
|
|
253
|
+
"legacy-app-default",
|
|
254
|
+
"organization",
|
|
255
|
+
"personal",
|
|
256
|
+
"memory",
|
|
257
|
+
"db-schema",
|
|
258
|
+
"tools",
|
|
259
|
+
"model-overlay",
|
|
260
|
+
"runtime-context",
|
|
261
|
+
] as const
|
|
262
|
+
).includes(provenanceValue as ContextSystemProvenance)
|
|
263
|
+
? (provenanceValue as ContextSystemProvenance)
|
|
264
|
+
: "runtime-context";
|
|
265
|
+
const governance = (["required", "inherited", "user"] as const).includes(
|
|
266
|
+
governanceValue as ContextGovernanceTier,
|
|
267
|
+
)
|
|
268
|
+
? (governanceValue as ContextGovernanceTier)
|
|
269
|
+
: "inherited";
|
|
270
|
+
sections.push({
|
|
271
|
+
label,
|
|
272
|
+
provenance,
|
|
273
|
+
governance,
|
|
274
|
+
content: match[2] ?? "",
|
|
275
|
+
sourceRef: {
|
|
276
|
+
path: xmlAttribute(attrs, "path") ?? id,
|
|
277
|
+
scope: xmlAttribute(attrs, "scope") ?? "provider",
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
|
|
147
282
|
const taggedSections = [
|
|
148
283
|
{
|
|
149
284
|
tag: "skills-summary",
|
|
@@ -831,6 +966,15 @@ export async function loadResourcesForPrompt(
|
|
|
831
966
|
if (organizationResourceIndex) sections.push(organizationResourceIndex);
|
|
832
967
|
}
|
|
833
968
|
|
|
969
|
+
sections.push(
|
|
970
|
+
...(await loadPromptContextProviderBlocks({
|
|
971
|
+
owner,
|
|
972
|
+
compact,
|
|
973
|
+
selfAppId,
|
|
974
|
+
orgId,
|
|
975
|
+
})),
|
|
976
|
+
);
|
|
977
|
+
|
|
834
978
|
try {
|
|
835
979
|
const agents = (await discoverAgents(selfAppId)).slice(0, 30);
|
|
836
980
|
if (agents.length > 0) {
|
|
@@ -497,6 +497,12 @@ export function createAgentChatPlugin(
|
|
|
497
497
|
// Filesystem discovery unavailable (serverless bundle) — skip.
|
|
498
498
|
}
|
|
499
499
|
}
|
|
500
|
+
try {
|
|
501
|
+
const { mergePackageActions } = await import("./action-discovery.js");
|
|
502
|
+
mergePackageActions(templateScriptsAll);
|
|
503
|
+
} catch {
|
|
504
|
+
// Package action registration is optional.
|
|
505
|
+
}
|
|
500
506
|
|
|
501
507
|
// Resource, chat, docs, db, and cross-agent scripts are available in both prod and dev modes
|
|
502
508
|
const resourceScripts = await createResourceScriptEntries();
|
|
@@ -180,6 +180,7 @@ import {
|
|
|
180
180
|
} from "./scoped-key-storage.js";
|
|
181
181
|
import { createTranscribeVoiceHandler } from "./transcribe-voice.js";
|
|
182
182
|
import { createVoiceProvidersStatusHandler } from "./voice-providers-status.js";
|
|
183
|
+
import { createWorkspaceProviderOAuthHandler } from "./workspace-provider-oauth.js";
|
|
183
184
|
|
|
184
185
|
/**
|
|
185
186
|
* The base path prefix for all framework-level routes.
|
|
@@ -1203,6 +1204,17 @@ export function createCoreRoutesPlugin(
|
|
|
1203
1204
|
|
|
1204
1205
|
const P = FRAMEWORK_ROUTE_PREFIX;
|
|
1205
1206
|
|
|
1207
|
+
for (const provider of ["figma", "google_drive", "notion"] as const) {
|
|
1208
|
+
getH3App(nitroApp).use(
|
|
1209
|
+
`${P}/connections/oauth/${provider}/start`,
|
|
1210
|
+
createWorkspaceProviderOAuthHandler(provider, "start"),
|
|
1211
|
+
);
|
|
1212
|
+
getH3App(nitroApp).use(
|
|
1213
|
+
`${P}/connections/oauth/${provider}/callback`,
|
|
1214
|
+
createWorkspaceProviderOAuthHandler(provider, "callback"),
|
|
1215
|
+
);
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1206
1218
|
getH3App(nitroApp).use(createHttpResponseTelemetryMiddleware());
|
|
1207
1219
|
|
|
1208
1220
|
// Security response headers — emitted on every framework response.
|
|
@@ -311,6 +311,15 @@ export {
|
|
|
311
311
|
markDefaultPluginProvided,
|
|
312
312
|
type H3AppShim,
|
|
313
313
|
} from "./framework-request-handler.js";
|
|
314
|
+
export {
|
|
315
|
+
fireInternalDispatch,
|
|
316
|
+
resolveSelfDispatchBaseUrl,
|
|
317
|
+
type FireInternalDispatchOptions,
|
|
318
|
+
} from "./self-dispatch.js";
|
|
319
|
+
export {
|
|
320
|
+
extractBearerToken as extractInternalBearerToken,
|
|
321
|
+
verifyInternalToken,
|
|
322
|
+
} from "../integrations/internal-token.js";
|
|
314
323
|
export {
|
|
315
324
|
autoDiscoverActions,
|
|
316
325
|
autoDiscoverScripts,
|
|
@@ -318,6 +327,12 @@ export {
|
|
|
318
327
|
mergeCoreSharingActions,
|
|
319
328
|
registerPackageActions,
|
|
320
329
|
} from "./action-discovery.js";
|
|
330
|
+
export {
|
|
331
|
+
registerPromptContextProvider,
|
|
332
|
+
type PromptContextProvider,
|
|
333
|
+
type PromptContextProviderContext,
|
|
334
|
+
type PromptContextProviderContribution,
|
|
335
|
+
} from "./agent-chat/prompt-resources.js";
|
|
321
336
|
export {
|
|
322
337
|
mountActionRoutes,
|
|
323
338
|
type MountActionRoutesOptions,
|
|
@@ -417,6 +432,20 @@ export {
|
|
|
417
432
|
type OAuthSessionResult,
|
|
418
433
|
} from "./google-oauth.js";
|
|
419
434
|
|
|
435
|
+
export {
|
|
436
|
+
buildWorkspaceProviderAuthorizationUrl,
|
|
437
|
+
createWorkspaceProviderOAuthHandler,
|
|
438
|
+
exchangeWorkspaceProviderOAuthCode,
|
|
439
|
+
handleWorkspaceProviderOAuthCallback,
|
|
440
|
+
handleWorkspaceProviderOAuthStart,
|
|
441
|
+
isWorkspaceProviderOAuthFlowValid,
|
|
442
|
+
mergeWorkspaceOAuthValues,
|
|
443
|
+
resolveWorkspaceProviderIdentity,
|
|
444
|
+
workspaceProviderOAuthPath,
|
|
445
|
+
type GenericWorkspaceOAuthProvider,
|
|
446
|
+
type WorkspaceProviderOAuthFlow,
|
|
447
|
+
} from "./workspace-provider-oauth.js";
|
|
448
|
+
|
|
420
449
|
export {
|
|
421
450
|
FeatureNotConfiguredError,
|
|
422
451
|
hasBuilderPrivateKey,
|
|
@@ -462,6 +491,7 @@ export {
|
|
|
462
491
|
export {
|
|
463
492
|
getBuilderBranchProjectId,
|
|
464
493
|
isBuilderBranchingEnabled,
|
|
494
|
+
requestBuilderBrowserConnection,
|
|
465
495
|
resolveBuilderBranchProjectId,
|
|
466
496
|
resolveIsBuilderBranchingEnabled,
|
|
467
497
|
runBuilderAgent,
|