@agent-native/core 0.103.1 → 0.105.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 +61 -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/deploy/build.ts +23 -0
- 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/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/app/routes.ts +3 -1
- 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/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/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +17 -0
- package/dist/deploy/build.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/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/notifications/routes.d.ts +2 -2
- 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/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/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/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
|
@@ -69,6 +69,7 @@ interface SessionReplayState {
|
|
|
69
69
|
startGeneration: number;
|
|
70
70
|
replayId: string | null;
|
|
71
71
|
startedAtMs: number | null;
|
|
72
|
+
replayLinkBaseUrl: string | null;
|
|
72
73
|
sequence: number;
|
|
73
74
|
/** Pre-serialized + scrubbed event JSON strings, ready to splice at flush. */
|
|
74
75
|
queue: QueuedReplayEvent[];
|
|
@@ -117,6 +118,7 @@ interface StoredReplaySession {
|
|
|
117
118
|
replayId?: string;
|
|
118
119
|
startedAtMs?: number;
|
|
119
120
|
sequence?: number;
|
|
121
|
+
linkBaseUrl?: string;
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
/** Broadcast on `SESSION_REPLAY_BROADCAST_CHANNEL_NAME` by a tab resuming a
|
|
@@ -183,6 +185,8 @@ export interface SessionReplayOptions {
|
|
|
183
185
|
shouldStart?: () => boolean;
|
|
184
186
|
publicKey?: string;
|
|
185
187
|
endpoint?: string;
|
|
188
|
+
/** Analytics app origin used to build timestamped replay links. */
|
|
189
|
+
linkBaseUrl?: string;
|
|
186
190
|
requireSignedInUser?: boolean;
|
|
187
191
|
sampleRate?: number;
|
|
188
192
|
samplingSalt?: string;
|
|
@@ -234,6 +238,22 @@ export interface SessionReplayOptions {
|
|
|
234
238
|
| (() => Record<string, unknown> | undefined);
|
|
235
239
|
}
|
|
236
240
|
|
|
241
|
+
export interface SessionReplayContext {
|
|
242
|
+
replayId: string;
|
|
243
|
+
sessionId: string;
|
|
244
|
+
startedAtMs: number;
|
|
245
|
+
startedAt: string;
|
|
246
|
+
linkBaseUrl: string | null;
|
|
247
|
+
active: boolean;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface SessionReplayLinkOptions {
|
|
251
|
+
/** Event time to seek to when the replay link opens. */
|
|
252
|
+
at?: Date | number | string;
|
|
253
|
+
/** Overrides the configured Analytics app origin for this link. */
|
|
254
|
+
linkBaseUrl?: string;
|
|
255
|
+
}
|
|
256
|
+
|
|
237
257
|
export interface SessionReplayStartResult {
|
|
238
258
|
started: boolean;
|
|
239
259
|
reason?:
|
|
@@ -255,6 +275,7 @@ export interface SessionReplayStartResult {
|
|
|
255
275
|
interface NormalizedSessionReplayOptions {
|
|
256
276
|
publicKey: string;
|
|
257
277
|
endpoint: string;
|
|
278
|
+
linkBaseUrl: string | null;
|
|
258
279
|
requireSignedInUser: boolean;
|
|
259
280
|
sampleRate: number;
|
|
260
281
|
samplingSalt: string;
|
|
@@ -439,6 +460,7 @@ function getState(): SessionReplayState {
|
|
|
439
460
|
startGeneration: 0,
|
|
440
461
|
replayId: null,
|
|
441
462
|
startedAtMs: null,
|
|
463
|
+
replayLinkBaseUrl: null,
|
|
442
464
|
sequence: 0,
|
|
443
465
|
queue: [],
|
|
444
466
|
queuedBytes: 0,
|
|
@@ -472,6 +494,7 @@ function getState(): SessionReplayState {
|
|
|
472
494
|
state.pendingFlushWaiters ??= [];
|
|
473
495
|
state.awaitingFullSnapshot ??= false;
|
|
474
496
|
state.startGeneration ??= 0;
|
|
497
|
+
state.replayLinkBaseUrl ??= null;
|
|
475
498
|
return state;
|
|
476
499
|
}
|
|
477
500
|
|
|
@@ -579,10 +602,14 @@ function removeStoredReplaySession(replayId: string): void {
|
|
|
579
602
|
* `sessionStorage` snapshot, which is what the `BroadcastChannel` claim
|
|
580
603
|
* check in `startSessionReplayRecorder` guards against.
|
|
581
604
|
*/
|
|
582
|
-
function getOrCreateReplaySession(
|
|
605
|
+
function getOrCreateReplaySession(
|
|
606
|
+
sessionId: string,
|
|
607
|
+
linkBaseUrl?: string | null,
|
|
608
|
+
): {
|
|
583
609
|
replayId: string;
|
|
584
610
|
startedAtMs: number;
|
|
585
611
|
sequence: number;
|
|
612
|
+
linkBaseUrl?: string;
|
|
586
613
|
/** True when resuming a session found in this tab's `sessionStorage`
|
|
587
614
|
* (e.g. a reload), as opposed to minting a brand-new id. Only the resumed
|
|
588
615
|
* case needs the duplicated-tab claim check -- a fresh id can never
|
|
@@ -604,12 +631,34 @@ function getOrCreateReplaySession(sessionId: string): {
|
|
|
604
631
|
parsed.sequence >= 0
|
|
605
632
|
? Math.floor(parsed.sequence)
|
|
606
633
|
: 0;
|
|
607
|
-
|
|
634
|
+
const resolvedLinkBaseUrl = linkBaseUrl ?? parsed.linkBaseUrl;
|
|
635
|
+
if (linkBaseUrl && parsed.linkBaseUrl !== linkBaseUrl) {
|
|
636
|
+
writeStoredReplaySession({ ...parsed, linkBaseUrl });
|
|
637
|
+
}
|
|
638
|
+
return {
|
|
639
|
+
replayId: parsed.replayId,
|
|
640
|
+
startedAtMs,
|
|
641
|
+
sequence,
|
|
642
|
+
...(resolvedLinkBaseUrl ? { linkBaseUrl: resolvedLinkBaseUrl } : {}),
|
|
643
|
+
resumed: true,
|
|
644
|
+
};
|
|
608
645
|
}
|
|
609
646
|
const replayId = generateReplayId();
|
|
610
647
|
const startedAtMs = Date.now();
|
|
611
|
-
writeStoredReplaySession({
|
|
612
|
-
|
|
648
|
+
writeStoredReplaySession({
|
|
649
|
+
sessionId,
|
|
650
|
+
replayId,
|
|
651
|
+
startedAtMs,
|
|
652
|
+
sequence: 0,
|
|
653
|
+
...(linkBaseUrl ? { linkBaseUrl } : {}),
|
|
654
|
+
});
|
|
655
|
+
return {
|
|
656
|
+
replayId,
|
|
657
|
+
startedAtMs,
|
|
658
|
+
sequence: 0,
|
|
659
|
+
...(linkBaseUrl ? { linkBaseUrl } : {}),
|
|
660
|
+
resumed: false,
|
|
661
|
+
};
|
|
613
662
|
}
|
|
614
663
|
|
|
615
664
|
/**
|
|
@@ -732,12 +781,17 @@ function persistReplaySequence(
|
|
|
732
781
|
replayId: string,
|
|
733
782
|
startedAtMs: number | null,
|
|
734
783
|
sequence: number,
|
|
784
|
+
linkBaseUrl?: string | null,
|
|
735
785
|
): void {
|
|
786
|
+
const existing = readStoredReplaySession();
|
|
736
787
|
writeStoredReplaySession({
|
|
737
788
|
sessionId,
|
|
738
789
|
replayId,
|
|
739
790
|
startedAtMs: startedAtMs ?? Date.now(),
|
|
740
791
|
sequence,
|
|
792
|
+
...(linkBaseUrl || existing?.linkBaseUrl
|
|
793
|
+
? { linkBaseUrl: linkBaseUrl ?? existing?.linkBaseUrl }
|
|
794
|
+
: {}),
|
|
741
795
|
});
|
|
742
796
|
}
|
|
743
797
|
|
|
@@ -820,6 +874,22 @@ function defaultReplayEndpoint(): string {
|
|
|
820
874
|
: DEFAULT_REPLAY_PATH;
|
|
821
875
|
}
|
|
822
876
|
|
|
877
|
+
function normalizeReplayLinkBaseUrl(value?: string): string | null {
|
|
878
|
+
const raw =
|
|
879
|
+
value?.trim() ||
|
|
880
|
+
readEnvString("VITE_AGENT_NATIVE_ANALYTICS_APP_URL") ||
|
|
881
|
+
(typeof window !== "undefined" ? window.location.origin : "");
|
|
882
|
+
if (!raw) return null;
|
|
883
|
+
try {
|
|
884
|
+
return new URL(
|
|
885
|
+
raw,
|
|
886
|
+
typeof window !== "undefined" ? window.location.href : undefined,
|
|
887
|
+
).origin;
|
|
888
|
+
} catch {
|
|
889
|
+
return null;
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
|
|
823
893
|
export function getSessionReplaySamplingScore(
|
|
824
894
|
sessionId: string,
|
|
825
895
|
salt = DEFAULT_SAMPLING_SALT,
|
|
@@ -886,6 +956,7 @@ function normalizeOptions(
|
|
|
886
956
|
return {
|
|
887
957
|
publicKey,
|
|
888
958
|
endpoint,
|
|
959
|
+
linkBaseUrl: normalizeReplayLinkBaseUrl(options.linkBaseUrl),
|
|
889
960
|
requireSignedInUser:
|
|
890
961
|
options.requireSignedInUser ??
|
|
891
962
|
readEnvBoolean("VITE_AGENT_NATIVE_SESSION_REPLAY_REQUIRE_AUTH") ??
|
|
@@ -1694,6 +1765,7 @@ function advanceReplaySequence(
|
|
|
1694
1765
|
payload.replayId,
|
|
1695
1766
|
state.startedAtMs,
|
|
1696
1767
|
state.sequence,
|
|
1768
|
+
state.replayLinkBaseUrl,
|
|
1697
1769
|
);
|
|
1698
1770
|
}
|
|
1699
1771
|
|
|
@@ -1709,6 +1781,7 @@ function rollbackReplaySequenceReservation(
|
|
|
1709
1781
|
payload.replayId,
|
|
1710
1782
|
state.startedAtMs,
|
|
1711
1783
|
state.sequence,
|
|
1784
|
+
state.replayLinkBaseUrl,
|
|
1712
1785
|
);
|
|
1713
1786
|
}
|
|
1714
1787
|
|
|
@@ -2988,7 +3061,10 @@ async function startSessionReplayRecorder(
|
|
|
2988
3061
|
return { started: false, reason: "disabled", sessionId, sampled };
|
|
2989
3062
|
}
|
|
2990
3063
|
|
|
2991
|
-
let replaySession = getOrCreateReplaySession(
|
|
3064
|
+
let replaySession = getOrCreateReplaySession(
|
|
3065
|
+
sessionId,
|
|
3066
|
+
normalized.linkBaseUrl,
|
|
3067
|
+
);
|
|
2992
3068
|
const instanceNonce = generateReplayId();
|
|
2993
3069
|
const { channel: replayChannel, probeClaim } = createReplayClaimChannel(
|
|
2994
3070
|
state,
|
|
@@ -3007,11 +3083,17 @@ async function startSessionReplayRecorder(
|
|
|
3007
3083
|
replayId: freshReplayId,
|
|
3008
3084
|
startedAtMs: freshStartedAtMs,
|
|
3009
3085
|
sequence: 0,
|
|
3086
|
+
...(normalized.linkBaseUrl
|
|
3087
|
+
? { linkBaseUrl: normalized.linkBaseUrl }
|
|
3088
|
+
: {}),
|
|
3010
3089
|
});
|
|
3011
3090
|
replaySession = {
|
|
3012
3091
|
replayId: freshReplayId,
|
|
3013
3092
|
startedAtMs: freshStartedAtMs,
|
|
3014
3093
|
sequence: 0,
|
|
3094
|
+
...(normalized.linkBaseUrl
|
|
3095
|
+
? { linkBaseUrl: normalized.linkBaseUrl }
|
|
3096
|
+
: {}),
|
|
3015
3097
|
resumed: false,
|
|
3016
3098
|
};
|
|
3017
3099
|
}
|
|
@@ -3033,6 +3115,8 @@ async function startSessionReplayRecorder(
|
|
|
3033
3115
|
state.options = normalized;
|
|
3034
3116
|
state.replayId = replaySession.replayId;
|
|
3035
3117
|
state.startedAtMs = replaySession.startedAtMs;
|
|
3118
|
+
state.replayLinkBaseUrl =
|
|
3119
|
+
replaySession.linkBaseUrl ?? normalized.linkBaseUrl ?? null;
|
|
3036
3120
|
state.sequence = replaySession.sequence;
|
|
3037
3121
|
state.queue = [];
|
|
3038
3122
|
state.queuedBytes = 0;
|
|
@@ -3195,6 +3279,75 @@ export function getSessionReplayId(): string | null {
|
|
|
3195
3279
|
return stored?.replayId ?? null;
|
|
3196
3280
|
}
|
|
3197
3281
|
|
|
3282
|
+
/**
|
|
3283
|
+
* Return the replay identity associated with this browser tab. The context is
|
|
3284
|
+
* intentionally small so it can be attached to analytics events without
|
|
3285
|
+
* exposing replay content or credentials.
|
|
3286
|
+
*/
|
|
3287
|
+
export function getSessionReplayContext(): SessionReplayContext | null {
|
|
3288
|
+
const state = getState();
|
|
3289
|
+
if (state.active && state.replayId && state.startedAtMs) {
|
|
3290
|
+
const sessionId = getOrCreateAnalyticsSessionId();
|
|
3291
|
+
if (!sessionId) return null;
|
|
3292
|
+
return {
|
|
3293
|
+
replayId: state.replayId,
|
|
3294
|
+
sessionId,
|
|
3295
|
+
startedAtMs: state.startedAtMs,
|
|
3296
|
+
startedAt: new Date(state.startedAtMs).toISOString(),
|
|
3297
|
+
linkBaseUrl: state.replayLinkBaseUrl,
|
|
3298
|
+
active: true,
|
|
3299
|
+
};
|
|
3300
|
+
}
|
|
3301
|
+
|
|
3302
|
+
const stored = readStoredReplaySession();
|
|
3303
|
+
if (!stored?.replayId || !stored.sessionId || !stored.startedAtMs) {
|
|
3304
|
+
return null;
|
|
3305
|
+
}
|
|
3306
|
+
return {
|
|
3307
|
+
replayId: stored.replayId,
|
|
3308
|
+
sessionId: stored.sessionId,
|
|
3309
|
+
startedAtMs: stored.startedAtMs,
|
|
3310
|
+
startedAt: new Date(stored.startedAtMs).toISOString(),
|
|
3311
|
+
linkBaseUrl: stored.linkBaseUrl ?? null,
|
|
3312
|
+
active: false,
|
|
3313
|
+
};
|
|
3314
|
+
}
|
|
3315
|
+
|
|
3316
|
+
/**
|
|
3317
|
+
* Build a scoped Analytics replay lookup link. The Analytics server resolves
|
|
3318
|
+
* the client replay id to its server recording id and converts the event time
|
|
3319
|
+
* into the replay player's offset before redirecting to the detail page.
|
|
3320
|
+
*/
|
|
3321
|
+
export function getSessionReplayUrl(
|
|
3322
|
+
options: SessionReplayLinkOptions = {},
|
|
3323
|
+
): string | null {
|
|
3324
|
+
const context = getSessionReplayContext();
|
|
3325
|
+
if (!context) return null;
|
|
3326
|
+
const base = normalizeReplayLinkBaseUrl(
|
|
3327
|
+
options.linkBaseUrl ?? context.linkBaseUrl ?? undefined,
|
|
3328
|
+
);
|
|
3329
|
+
if (!base) return null;
|
|
3330
|
+
|
|
3331
|
+
try {
|
|
3332
|
+
const url = new URL("/sessions/lookup", base);
|
|
3333
|
+
url.searchParams.set("sessionId", context.sessionId);
|
|
3334
|
+
url.searchParams.set("replayId", context.replayId);
|
|
3335
|
+
const at = options.at === undefined ? Date.now() : options.at;
|
|
3336
|
+
const timestamp =
|
|
3337
|
+
typeof at === "number"
|
|
3338
|
+
? new Date(at)
|
|
3339
|
+
: typeof at === "string"
|
|
3340
|
+
? new Date(at)
|
|
3341
|
+
: at;
|
|
3342
|
+
if (!Number.isNaN(timestamp.getTime())) {
|
|
3343
|
+
url.searchParams.set("at", timestamp.toISOString());
|
|
3344
|
+
}
|
|
3345
|
+
return url.toString();
|
|
3346
|
+
} catch {
|
|
3347
|
+
return null;
|
|
3348
|
+
}
|
|
3349
|
+
}
|
|
3350
|
+
|
|
3198
3351
|
/**
|
|
3199
3352
|
* Surface a manually captured exception on the active session replay timeline
|
|
3200
3353
|
* as an `agent-native.console` custom event, reusing the diagnostics contract
|
|
@@ -9,15 +9,17 @@ import {
|
|
|
9
9
|
IconPlus,
|
|
10
10
|
IconTrash,
|
|
11
11
|
} from "@tabler/icons-react";
|
|
12
|
-
import { useCallback, useState } from "react";
|
|
12
|
+
import { useCallback, useState, type ReactNode } from "react";
|
|
13
13
|
|
|
14
14
|
import { sendToAgentChat } from "../agent-chat.js";
|
|
15
|
+
import { AgentEmptyState } from "../agent-page/AgentEmptyState.js";
|
|
15
16
|
import {
|
|
16
17
|
useAutomations,
|
|
17
18
|
useManageAutomation,
|
|
18
19
|
type Automation,
|
|
19
20
|
type JobsScope,
|
|
20
21
|
} from "../agent-page/use-jobs.js";
|
|
22
|
+
import { AgentAskPopover } from "../AgentAskPopover.js";
|
|
21
23
|
import { agentNativePath } from "../api-path.js";
|
|
22
24
|
import {
|
|
23
25
|
Dialog,
|
|
@@ -39,6 +41,7 @@ export interface AutomationsListProps {
|
|
|
39
41
|
scope?: JobsScope;
|
|
40
42
|
compact?: boolean;
|
|
41
43
|
emptyMessage?: string;
|
|
44
|
+
emptyState?: ReactNode;
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
export const AUTOMATION_CREATION_SCOPE = "personal" as const;
|
|
@@ -51,6 +54,7 @@ export function AutomationsList({
|
|
|
51
54
|
scope = "user",
|
|
52
55
|
compact = false,
|
|
53
56
|
emptyMessage,
|
|
57
|
+
emptyState,
|
|
54
58
|
}: AutomationsListProps) {
|
|
55
59
|
const t = useT();
|
|
56
60
|
const { formatDate } = useFormatters();
|
|
@@ -93,14 +97,31 @@ export function AutomationsList({
|
|
|
93
97
|
|
|
94
98
|
const automations = query.data ?? [];
|
|
95
99
|
if (automations.length === 0) {
|
|
100
|
+
if (emptyState) return emptyState;
|
|
96
101
|
return (
|
|
97
|
-
<
|
|
98
|
-
{
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
<AgentEmptyState
|
|
103
|
+
icon={IconBolt}
|
|
104
|
+
title={t("jobs.automationsEmptyTitle", {
|
|
105
|
+
defaultValue: "No automations yet",
|
|
106
|
+
})}
|
|
107
|
+
description={
|
|
108
|
+
emptyMessage ??
|
|
109
|
+
t("jobs.automationsEmptyDescription", {
|
|
110
|
+
defaultValue: "Describe what should happen and when.",
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
action={
|
|
114
|
+
<AgentAskPopover
|
|
115
|
+
context={automationCreationContext()}
|
|
116
|
+
prompt={t("jobs.automationPrompt", {
|
|
117
|
+
defaultValue: "Create an automation that does this: ",
|
|
118
|
+
})}
|
|
119
|
+
title={t("jobs.automationsCreateTitle", {
|
|
120
|
+
defaultValue: "Create an automation",
|
|
121
|
+
})}
|
|
122
|
+
/>
|
|
123
|
+
}
|
|
124
|
+
/>
|
|
104
125
|
);
|
|
105
126
|
}
|
|
106
127
|
|
|
@@ -487,8 +508,7 @@ export function AutomationsSection() {
|
|
|
487
508
|
scope="user"
|
|
488
509
|
compact
|
|
489
510
|
emptyMessage={t("jobs.automationsEmptySettings", {
|
|
490
|
-
defaultValue:
|
|
491
|
-
'No automations yet. Click "New automation" or ask the agent to set one up.',
|
|
511
|
+
defaultValue: "Describe what should happen and when.",
|
|
492
512
|
})}
|
|
493
513
|
/>
|
|
494
514
|
</div>
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
IconCheck,
|
|
6
6
|
IconExternalLink,
|
|
7
7
|
IconBrain,
|
|
8
|
+
IconHierarchy2,
|
|
8
9
|
IconBrowser,
|
|
9
10
|
IconGitBranch,
|
|
10
11
|
IconCloud,
|
|
@@ -3104,7 +3105,7 @@ export function useAgentSettingsTabs(): SettingsTabItem[] {
|
|
|
3104
3105
|
id: "agent" | "connections" | "organization" | "workspace",
|
|
3105
3106
|
) => {
|
|
3106
3107
|
const tab = searchTabs.find((candidate) => candidate.id === id);
|
|
3107
|
-
if (!tab) throw new Error(`Missing agent
|
|
3108
|
+
if (!tab) throw new Error(`Missing agent workspace tab: ${id}`);
|
|
3108
3109
|
return tab;
|
|
3109
3110
|
};
|
|
3110
3111
|
const agent = searchTab("agent");
|
|
@@ -3114,7 +3115,7 @@ export function useAgentSettingsTabs(): SettingsTabItem[] {
|
|
|
3114
3115
|
return [
|
|
3115
3116
|
{
|
|
3116
3117
|
...agent,
|
|
3117
|
-
icon:
|
|
3118
|
+
icon: IconHierarchy2,
|
|
3118
3119
|
group: "agent",
|
|
3119
3120
|
content: (
|
|
3120
3121
|
<SettingsPanelContent
|
|
@@ -49,6 +49,8 @@ export interface SettingsTabItem {
|
|
|
49
49
|
label: string;
|
|
50
50
|
icon?: SettingsTabIcon;
|
|
51
51
|
content: ReactNode;
|
|
52
|
+
/** Whether a parent surface may expose a personal/organization scope for this tab. */
|
|
53
|
+
scopeAware?: boolean;
|
|
52
54
|
/**
|
|
53
55
|
* Optional visual navigation group. Adjacent tabs with the same group render
|
|
54
56
|
* together; a quiet divider separates each group on desktop while mobile
|
|
@@ -194,8 +194,8 @@ export function getAgentSettingsSearchTabs(): AgentSettingsSearchTab[] {
|
|
|
194
194
|
return [
|
|
195
195
|
{
|
|
196
196
|
id: "agent",
|
|
197
|
-
label: "Agent",
|
|
198
|
-
keywords: "agent model llm limits voice automations",
|
|
197
|
+
label: "Agent workspace",
|
|
198
|
+
keywords: "agent workspace model llm limits voice automations",
|
|
199
199
|
searchEntries: buildSectionSearchEntries(AGENT_SETTINGS_SECTIONS),
|
|
200
200
|
},
|
|
201
201
|
{
|
|
@@ -22,6 +22,7 @@ export type WorkspaceConnectionTemplateUse =
|
|
|
22
22
|
export type WorkspaceConnectionProviderId =
|
|
23
23
|
| "slack"
|
|
24
24
|
| "github"
|
|
25
|
+
| "figma"
|
|
25
26
|
| "notion"
|
|
26
27
|
| "gmail"
|
|
27
28
|
| "google_drive"
|
|
@@ -44,6 +45,13 @@ export interface WorkspaceConnectionProvider {
|
|
|
44
45
|
credentialKeys: readonly WorkspaceConnectionCredentialKey[];
|
|
45
46
|
capabilities: readonly WorkspaceConnectionCapability[];
|
|
46
47
|
recommendedTemplateUses: readonly WorkspaceConnectionTemplateUse[];
|
|
48
|
+
oauth?: {
|
|
49
|
+
provider: string;
|
|
50
|
+
authorizationUrl: string;
|
|
51
|
+
tokenUrl: string;
|
|
52
|
+
refreshUrl?: string;
|
|
53
|
+
scopes: readonly string[];
|
|
54
|
+
};
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
export interface ListWorkspaceConnectionProvidersOptions {
|
|
@@ -93,19 +101,47 @@ export const WORKSPACE_CONNECTION_PROVIDERS = [
|
|
|
93
101
|
recommendedTemplateUses: ["brain", "analytics", "dispatch"],
|
|
94
102
|
}),
|
|
95
103
|
defineWorkspaceConnectionProvider({
|
|
96
|
-
id: "
|
|
97
|
-
label: "
|
|
104
|
+
id: "figma",
|
|
105
|
+
label: "Figma",
|
|
98
106
|
description:
|
|
99
|
-
"
|
|
107
|
+
"Design files, frames, components, rendered previews, and library context for creative workflows.",
|
|
100
108
|
credentialKeys: [
|
|
101
109
|
{
|
|
102
|
-
key: "
|
|
103
|
-
label: "
|
|
110
|
+
key: "FIGMA_ACCESS_TOKEN",
|
|
111
|
+
label: "Figma personal access token (fallback)",
|
|
104
112
|
description:
|
|
105
|
-
"
|
|
106
|
-
required:
|
|
113
|
+
"Optional fallback for local or individual use. Workspace OAuth is preferred.",
|
|
114
|
+
required: false,
|
|
107
115
|
},
|
|
108
116
|
],
|
|
117
|
+
oauth: {
|
|
118
|
+
provider: "figma",
|
|
119
|
+
authorizationUrl: "https://www.figma.com/oauth",
|
|
120
|
+
tokenUrl: "https://api.figma.com/v1/oauth/token",
|
|
121
|
+
refreshUrl: "https://api.figma.com/v1/oauth/token",
|
|
122
|
+
scopes: [
|
|
123
|
+
"current_user:read",
|
|
124
|
+
"file_content:read",
|
|
125
|
+
"file_metadata:read",
|
|
126
|
+
"projects:read",
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
capabilities: ["search", "import", "docs"],
|
|
130
|
+
recommendedTemplateUses: ["brain", "design", "slides", "content"],
|
|
131
|
+
}),
|
|
132
|
+
defineWorkspaceConnectionProvider({
|
|
133
|
+
id: "notion",
|
|
134
|
+
label: "Notion",
|
|
135
|
+
description:
|
|
136
|
+
"Workspace docs, wikis, pages, and databases for knowledge capture and search.",
|
|
137
|
+
credentialKeys: [],
|
|
138
|
+
oauth: {
|
|
139
|
+
provider: "notion",
|
|
140
|
+
authorizationUrl: "https://api.notion.com/v1/oauth/authorize",
|
|
141
|
+
tokenUrl: "https://api.notion.com/v1/oauth/token",
|
|
142
|
+
refreshUrl: "https://api.notion.com/v1/oauth/token",
|
|
143
|
+
scopes: [],
|
|
144
|
+
},
|
|
109
145
|
capabilities: ["search", "import", "docs"],
|
|
110
146
|
recommendedTemplateUses: ["brain", "content", "dispatch"],
|
|
111
147
|
}),
|
|
@@ -148,6 +184,12 @@ export const WORKSPACE_CONNECTION_PROVIDERS = [
|
|
|
148
184
|
],
|
|
149
185
|
capabilities: ["search", "import", "docs"],
|
|
150
186
|
recommendedTemplateUses: ["brain", "content", "slides", "dispatch"],
|
|
187
|
+
oauth: {
|
|
188
|
+
provider: "google",
|
|
189
|
+
authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
190
|
+
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
191
|
+
scopes: ["https://www.googleapis.com/auth/drive.file"],
|
|
192
|
+
},
|
|
151
193
|
}),
|
|
152
194
|
defineWorkspaceConnectionProvider({
|
|
153
195
|
id: "hubspot",
|
|
@@ -31,11 +31,16 @@ export async function createDb(config: DbConfig) {
|
|
|
31
31
|
export type DrizzleDb = Awaited<ReturnType<typeof createDb>>;
|
|
32
32
|
|
|
33
33
|
export { createGetDb } from "./create-get-db.js";
|
|
34
|
-
export {
|
|
34
|
+
export {
|
|
35
|
+
runMigrations,
|
|
36
|
+
type MigrationEntry,
|
|
37
|
+
type MigrationSql,
|
|
38
|
+
} from "./migrations.js";
|
|
35
39
|
export {
|
|
36
40
|
getDbExec,
|
|
37
41
|
createDbExec,
|
|
38
42
|
getDialect,
|
|
43
|
+
isLocalDatabase,
|
|
39
44
|
isPostgres,
|
|
40
45
|
intType,
|
|
41
46
|
closeDbExec,
|
|
@@ -2519,6 +2519,14 @@ function hasUnsupportedYjsSubpathImport(source: string): boolean {
|
|
|
2519
2519
|
);
|
|
2520
2520
|
}
|
|
2521
2521
|
|
|
2522
|
+
function hasBundledVitestRuntime(source: string): boolean {
|
|
2523
|
+
return (
|
|
2524
|
+
/["'`]@vitest\//.test(source) ||
|
|
2525
|
+
/["'`]vitest\/(?:dist|src)\//.test(source) ||
|
|
2526
|
+
/__vitest_\d+__/.test(source)
|
|
2527
|
+
);
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2522
2530
|
function walkServerJavaScriptFiles(
|
|
2523
2531
|
dir: string,
|
|
2524
2532
|
onFile: (filePath: string) => void,
|
|
@@ -2734,6 +2742,21 @@ export function assertSingleTemplateNetlifyBuildOutput(
|
|
|
2734
2742
|
);
|
|
2735
2743
|
}
|
|
2736
2744
|
|
|
2745
|
+
// React Router's filesystem route discovery can accidentally treat a
|
|
2746
|
+
// co-located *.test.ts route as production code. That bundles Vitest into
|
|
2747
|
+
// SSR and only fails when the first request executes the test helpers.
|
|
2748
|
+
const bundledVitestRuntime: string[] = [];
|
|
2749
|
+
walkServerJavaScriptFiles(serverDir, (filePath) => {
|
|
2750
|
+
if (hasBundledVitestRuntime(fs.readFileSync(filePath, "utf-8"))) {
|
|
2751
|
+
bundledVitestRuntime.push(path.relative(projectCwd, filePath));
|
|
2752
|
+
}
|
|
2753
|
+
});
|
|
2754
|
+
if (bundledVitestRuntime.length > 0) {
|
|
2755
|
+
failures.push(
|
|
2756
|
+
`Netlify server bundle contains Vitest test runtime code: ${bundledVitestRuntime.join(", ")}`,
|
|
2757
|
+
);
|
|
2758
|
+
}
|
|
2759
|
+
|
|
2737
2760
|
if (isDurableBackgroundDeployEnabled()) {
|
|
2738
2761
|
const backgroundDir = path.join(
|
|
2739
2762
|
internalDir,
|