@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
|
@@ -166,7 +166,7 @@ const messages = {
|
|
|
166
166
|
"桌面录音机完成并保存了本地副本,但Clips无法上传。您可以从 Clips 菜单重试,而无需再次录制。",
|
|
167
167
|
retryLibrary: "您可以从库中重试。",
|
|
168
168
|
processingStuck:
|
|
169
|
-
"
|
|
169
|
+
"保存时间比预期更长(状态={{status}})。如果你使用桌面应用录制,请从菜单栏打开 Clips 以重试上传或下载已保存的本地副本,然后再次检查。",
|
|
170
170
|
uploadingAssembling: "上传和组合视频——通常只需要几秒钟。",
|
|
171
171
|
connectStorageImportLoom: "连接存储导入这个Loom。",
|
|
172
172
|
connectStorageFinishClip: "连接存储以完成此剪辑的保存。",
|
|
@@ -208,6 +208,9 @@ const messages = {
|
|
|
208
208
|
autoChapters: "汽车章节",
|
|
209
209
|
removeFillerWords: "删除填充词",
|
|
210
210
|
removeSilences: "消除静音 (>1.2s)",
|
|
211
|
+
silenceWorking: "正在消除静音…",
|
|
212
|
+
silenceCompleted: "静音消除完成",
|
|
213
|
+
silenceFailed: "静音消除失败",
|
|
211
214
|
generatePrSummary: "生成公关摘要",
|
|
212
215
|
generateSop: "生成SOP",
|
|
213
216
|
generateSopTooltip:
|
|
@@ -518,6 +521,8 @@ const messages = {
|
|
|
518
521
|
brandingUpdated: "品牌更新",
|
|
519
522
|
saveFailed: "保存失败",
|
|
520
523
|
organizationName: "组织名称",
|
|
524
|
+
defaultVisibility: "新录制内容的默认可见性",
|
|
525
|
+
defaultVisibilityDescription: "应用于新录制内容,除非你选择其他可见性。",
|
|
521
526
|
brandColor: "品牌颜色",
|
|
522
527
|
brandColorPicker: "品牌颜色选择器",
|
|
523
528
|
useColor: "使用 {{color}}",
|
|
@@ -166,7 +166,7 @@ const messages = {
|
|
|
166
166
|
"桌面錄影程式已完成並儲存本機副本,但 Clips 無法上傳。您可以從 Clips 選單重試,不需要重新錄製。",
|
|
167
167
|
retryLibrary: "您可以從媒體庫重試。",
|
|
168
168
|
processingStuck:
|
|
169
|
-
"
|
|
169
|
+
"儲存時間比預期更久(狀態={{status}})。如果你使用桌面應用程式錄製,請從選單列開啟 Clips 以重試上傳或下載已儲存的本機副本,然後再次檢查。",
|
|
170
170
|
uploadingAssembling: "正在上傳並組裝影片,通常只需要幾秒鐘。",
|
|
171
171
|
connectStorageImportLoom: "連線儲存以匯入這個 Loom。",
|
|
172
172
|
connectStorageFinishClip: "連線儲存以完成此剪輯的儲存。",
|
|
@@ -208,6 +208,9 @@ const messages = {
|
|
|
208
208
|
autoChapters: "自動章節",
|
|
209
209
|
removeFillerWords: "移除口頭禪",
|
|
210
210
|
removeSilences: "消除靜音 (>1.2s)",
|
|
211
|
+
silenceWorking: "正在消除靜音…",
|
|
212
|
+
silenceCompleted: "靜音消除完成",
|
|
213
|
+
silenceFailed: "靜音消除失敗",
|
|
211
214
|
generatePrSummary: "產生 PR 摘要",
|
|
212
215
|
generateSop: "產生 SOP",
|
|
213
216
|
generateSopTooltip:
|
|
@@ -518,6 +521,8 @@ const messages = {
|
|
|
518
521
|
brandingUpdated: "品牌更新",
|
|
519
522
|
saveFailed: "儲存失敗",
|
|
520
523
|
organizationName: "組織名稱",
|
|
524
|
+
defaultVisibility: "新錄製內容的預設可見性",
|
|
525
|
+
defaultVisibilityDescription: "套用於新錄製內容,除非你選擇其他可見性。",
|
|
521
526
|
brandColor: "品牌顏色",
|
|
522
527
|
brandColorPicker: "品牌顏色選取器",
|
|
523
528
|
useColor: "使用 {{color}}",
|
|
@@ -1187,7 +1187,7 @@ export default function SettingsIndexRoute() {
|
|
|
1187
1187
|
className={cn(
|
|
1188
1188
|
"flex flex-col gap-3 rounded-md border px-3 py-3 sm:flex-row sm:items-center sm:justify-between",
|
|
1189
1189
|
builderConnected
|
|
1190
|
-
? "border-
|
|
1190
|
+
? "border-border bg-muted/20"
|
|
1191
1191
|
: "border-border bg-accent/30",
|
|
1192
1192
|
)}
|
|
1193
1193
|
>
|
|
@@ -1201,20 +1201,16 @@ export default function SettingsIndexRoute() {
|
|
|
1201
1201
|
{builderStatusLoading
|
|
1202
1202
|
? t("settings.checkingBuilder")
|
|
1203
1203
|
: builderConnected
|
|
1204
|
-
? t("settings.
|
|
1204
|
+
? t("settings.builderAiAvailable")
|
|
1205
1205
|
: t("settings.builderEasySetup")}
|
|
1206
1206
|
</div>
|
|
1207
1207
|
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
1208
1208
|
{builderConnected
|
|
1209
|
-
? t("settings.
|
|
1209
|
+
? t("settings.apiSetupDescription")
|
|
1210
1210
|
: t("settings.builderAiDescription")}
|
|
1211
1211
|
</p>
|
|
1212
1212
|
</div>
|
|
1213
|
-
{builderConnected ? (
|
|
1214
|
-
<Badge variant="secondary" className="shrink-0">
|
|
1215
|
-
{t("common.connected")}
|
|
1216
|
-
</Badge>
|
|
1217
|
-
) : (
|
|
1213
|
+
{!builderConnected ? (
|
|
1218
1214
|
<Button
|
|
1219
1215
|
type="button"
|
|
1220
1216
|
variant="outline"
|
|
@@ -1237,7 +1233,7 @@ export default function SettingsIndexRoute() {
|
|
|
1237
1233
|
)}
|
|
1238
1234
|
{t("settings.connectBuilder")}
|
|
1239
1235
|
</Button>
|
|
1240
|
-
)}
|
|
1236
|
+
) : null}
|
|
1241
1237
|
</div>
|
|
1242
1238
|
|
|
1243
1239
|
{builderCreditsPaused ? (
|
|
@@ -14,7 +14,10 @@ import {
|
|
|
14
14
|
TableHeader,
|
|
15
15
|
TableRow,
|
|
16
16
|
} from "@/components/ui/table";
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
BrandingEditor,
|
|
19
|
+
type RecordingVisibility,
|
|
20
|
+
} from "@/components/workspace/branding-editor";
|
|
18
21
|
import { InviteDialog } from "@/components/workspace/invite-dialog";
|
|
19
22
|
import {
|
|
20
23
|
MembersList,
|
|
@@ -32,7 +35,7 @@ interface OrganizationStateResponse {
|
|
|
32
35
|
name: string;
|
|
33
36
|
brandColor: string;
|
|
34
37
|
brandLogoUrl: string | null;
|
|
35
|
-
defaultVisibility:
|
|
38
|
+
defaultVisibility: RecordingVisibility;
|
|
36
39
|
ownerEmail?: string;
|
|
37
40
|
} | null;
|
|
38
41
|
members: {
|
|
@@ -130,6 +133,7 @@ export default function OrganizationSettingsRoute() {
|
|
|
130
133
|
initialName={organization.name}
|
|
131
134
|
initialBrandColor={organization.brandColor}
|
|
132
135
|
initialBrandLogoUrl={organization.brandLogoUrl}
|
|
136
|
+
initialDefaultVisibility={organization.defaultVisibility}
|
|
133
137
|
/>
|
|
134
138
|
) : (
|
|
135
139
|
<Card>
|
|
@@ -89,6 +89,8 @@ import { parsePlaybackSpeed } from "@/lib/playback-speed";
|
|
|
89
89
|
import { isStorageSetupFailureReason } from "@/lib/storage-failures";
|
|
90
90
|
import { cn } from "@/lib/utils";
|
|
91
91
|
|
|
92
|
+
import { STALE_PENDING_TRANSCRIPT_REASON } from "../../shared/transcript-status";
|
|
93
|
+
|
|
92
94
|
const UPLOAD_STUCK_TIMEOUT_MS = 5 * 60 * 1000;
|
|
93
95
|
const PROCESSING_STUCK_TIMEOUT_MS = 2 * 60 * 1000;
|
|
94
96
|
const READY_MEDIA_SETTLE_POLL_MS = 20 * 1000;
|
|
@@ -125,6 +127,13 @@ interface GeneratedWorkflowState {
|
|
|
125
127
|
error?: string;
|
|
126
128
|
}
|
|
127
129
|
|
|
130
|
+
interface SilenceRemovalStatus {
|
|
131
|
+
kind?: "remove-silences";
|
|
132
|
+
status?: "queued" | "working" | "completed" | "failed";
|
|
133
|
+
message?: string | null;
|
|
134
|
+
updatedAt?: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
128
137
|
function useIsCompactRecordingLayout() {
|
|
129
138
|
const [isCompact, setIsCompact] = useState(false);
|
|
130
139
|
|
|
@@ -219,7 +228,7 @@ export default function RecordingPage() {
|
|
|
219
228
|
const [searchParams] = useSearchParams();
|
|
220
229
|
const startMs = parseTimeParam(searchParams.get("t"));
|
|
221
230
|
const panelParam = searchParams.get("panel");
|
|
222
|
-
const { session } = useSession();
|
|
231
|
+
const { session, isLoading: sessionLoading } = useSession();
|
|
223
232
|
const playerRef = useRef<VideoPlayerHandle | null>(null);
|
|
224
233
|
|
|
225
234
|
const [panel, setPanel] = useState<SidePanel>("agent");
|
|
@@ -290,7 +299,11 @@ export default function RecordingPage() {
|
|
|
290
299
|
recordingId: recordingId ?? "",
|
|
291
300
|
},
|
|
292
301
|
{
|
|
293
|
-
|
|
302
|
+
// `/r/*` is intentionally reachable before auth so signed-out visitors
|
|
303
|
+
// can see the sign-in state. Do not send the protected action until the
|
|
304
|
+
// browser has finished resolving the session, or an authenticated viewer
|
|
305
|
+
// can be rendered as signed out from the initial 403.
|
|
306
|
+
enabled: !!recordingId && !sessionLoading,
|
|
294
307
|
refetchInterval: (q) => {
|
|
295
308
|
const data = q.state.data as any;
|
|
296
309
|
const rec = data?.recording;
|
|
@@ -451,10 +464,36 @@ export default function RecordingPage() {
|
|
|
451
464
|
);
|
|
452
465
|
},
|
|
453
466
|
});
|
|
467
|
+
const silenceRemovalStatusQ = useQuery<SilenceRemovalStatus | null>({
|
|
468
|
+
queryKey: [
|
|
469
|
+
"app-state",
|
|
470
|
+
"clips-ai-request-status",
|
|
471
|
+
recording?.id ?? "",
|
|
472
|
+
appStateVersion,
|
|
473
|
+
],
|
|
474
|
+
enabled: Boolean(recording?.id),
|
|
475
|
+
placeholderData: (previous) => previous,
|
|
476
|
+
refetchInterval: (query) =>
|
|
477
|
+
query.state.data?.status === "queued" ||
|
|
478
|
+
query.state.data?.status === "working"
|
|
479
|
+
? 2000
|
|
480
|
+
: false,
|
|
481
|
+
queryFn: async ({ signal }) => {
|
|
482
|
+
if (!recording?.id) return null;
|
|
483
|
+
return readClientAppState<SilenceRemovalStatus>(
|
|
484
|
+
`clips-ai-request-status-${recording.id}`,
|
|
485
|
+
{ signal },
|
|
486
|
+
);
|
|
487
|
+
},
|
|
488
|
+
});
|
|
454
489
|
const generatedWorkflow =
|
|
455
490
|
generatedWorkflowQ.data?.recordingId === recording?.id
|
|
456
491
|
? generatedWorkflowQ.data
|
|
457
492
|
: null;
|
|
493
|
+
const silenceRemovalStatus =
|
|
494
|
+
silenceRemovalStatusQ.data?.kind === "remove-silences"
|
|
495
|
+
? silenceRemovalStatusQ.data
|
|
496
|
+
: null;
|
|
458
497
|
|
|
459
498
|
const isLoomEmbedBacked = isLoomEmbedBackedRecording(recording);
|
|
460
499
|
const isLoomRecording = isLoomRecordingSource(recording);
|
|
@@ -564,7 +603,10 @@ export default function RecordingPage() {
|
|
|
564
603
|
const handleAiError = (err: Error) =>
|
|
565
604
|
toast.error(err?.message ?? t("recordingPage.aiRequestFailed"));
|
|
566
605
|
const requestTranscript = useActionMutation("request-transcript" as any, {
|
|
567
|
-
onSuccess: () =>
|
|
606
|
+
onSuccess: (result: any) => {
|
|
607
|
+
void playerDataQ.refetch();
|
|
608
|
+
if (result?.queued) toast.success(t("transcriptPanel.transcribing"));
|
|
609
|
+
},
|
|
568
610
|
onError: (err: Error) =>
|
|
569
611
|
toast.error(
|
|
570
612
|
t("recordingPage.retryFailed", {
|
|
@@ -609,9 +651,16 @@ export default function RecordingPage() {
|
|
|
609
651
|
onError: handleAiError,
|
|
610
652
|
});
|
|
611
653
|
const removeSilences = useActionMutation("remove-silences" as any, {
|
|
612
|
-
onSuccess: () =>
|
|
654
|
+
onSuccess: () => {
|
|
655
|
+
toast.success(t("recordingPage.silenceQueued"));
|
|
656
|
+
void silenceRemovalStatusQ.refetch();
|
|
657
|
+
},
|
|
613
658
|
onError: handleAiError,
|
|
614
659
|
});
|
|
660
|
+
const silenceRemovalBusy =
|
|
661
|
+
removeSilences.isPending ||
|
|
662
|
+
silenceRemovalStatus?.status === "queued" ||
|
|
663
|
+
silenceRemovalStatus?.status === "working";
|
|
615
664
|
const generateWorkflow = useActionMutation("generate-workflow" as any, {
|
|
616
665
|
onSuccess: () => {
|
|
617
666
|
toast.success(t("recordingPage.workflowQueued"));
|
|
@@ -685,24 +734,37 @@ export default function RecordingPage() {
|
|
|
685
734
|
|
|
686
735
|
// Self-heal stuck transcripts. Older recordings (before finalize-recording
|
|
687
736
|
// learned to auto-trigger transcription) can sit in `pending` forever with no
|
|
688
|
-
// worker to pick them up.
|
|
689
|
-
//
|
|
690
|
-
// does not duplicate the finalize-recording background worker during HMR.
|
|
737
|
+
// worker to pick them up. A stale pending presentation gets a forced retry so
|
|
738
|
+
// a transient worker/provider failure does not require a manual click.
|
|
691
739
|
useEffect(() => {
|
|
692
740
|
if (!recording) return;
|
|
693
741
|
if (role !== "owner" && role !== "admin" && role !== "editor") return;
|
|
694
742
|
if (recording.status !== "ready") return;
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
743
|
+
const stalePending =
|
|
744
|
+
transcriptStatus === "failed" &&
|
|
745
|
+
transcriptFailureReason === STALE_PENDING_TRANSCRIPT_REASON;
|
|
746
|
+
if (transcriptStatus !== "pending" && !stalePending) return;
|
|
747
|
+
const recoveryKey = `${recording.id}:${stalePending ? "stale" : "pending"}`;
|
|
748
|
+
if (transcriptKickedRef.current === recoveryKey) return;
|
|
749
|
+
transcriptKickedRef.current = recoveryKey;
|
|
698
750
|
fetch(agentNativePath("/_agent-native/actions/request-transcript"), {
|
|
699
751
|
method: "POST",
|
|
700
752
|
headers: { "Content-Type": "application/json" },
|
|
701
|
-
body: JSON.stringify({
|
|
753
|
+
body: JSON.stringify({
|
|
754
|
+
recordingId: recording.id,
|
|
755
|
+
...(stalePending ? { force: true } : {}),
|
|
756
|
+
}),
|
|
702
757
|
})
|
|
703
758
|
.catch(() => {})
|
|
704
759
|
.finally(() => playerDataQ.refetch());
|
|
705
|
-
}, [
|
|
760
|
+
}, [
|
|
761
|
+
recording?.id,
|
|
762
|
+
recording?.status,
|
|
763
|
+
transcriptStatus,
|
|
764
|
+
transcriptFailureReason,
|
|
765
|
+
role,
|
|
766
|
+
playerDataQ,
|
|
767
|
+
]);
|
|
706
768
|
|
|
707
769
|
// Long browser-extension clips can still be uploading chunks or assembling
|
|
708
770
|
// for more than 30s. Keep polling before surfacing a stuck-state fallback.
|
|
@@ -757,6 +819,13 @@ export default function RecordingPage() {
|
|
|
757
819
|
typeof window === "undefined"
|
|
758
820
|
? `/r/${recordingId}`
|
|
759
821
|
: window.location.pathname + window.location.search;
|
|
822
|
+
if (sessionLoading) {
|
|
823
|
+
return (
|
|
824
|
+
<div className="flex items-center justify-center h-screen w-full bg-background">
|
|
825
|
+
<Spinner className="h-8 w-8" />
|
|
826
|
+
</div>
|
|
827
|
+
);
|
|
828
|
+
}
|
|
760
829
|
return (
|
|
761
830
|
<div className="flex flex-col items-center justify-center h-screen w-full bg-background px-6">
|
|
762
831
|
<h1 className="text-xl font-semibold mb-2">
|
|
@@ -802,12 +871,11 @@ export default function RecordingPage() {
|
|
|
802
871
|
const nativeSaveFailed =
|
|
803
872
|
searchParams.get("saveFailed") === "1" ||
|
|
804
873
|
isNativeSaveFailureReason(rawFailureReason);
|
|
805
|
-
//
|
|
806
|
-
//
|
|
807
|
-
// silently dies (e.g. chunk route 401s, storage provider throws).
|
|
874
|
+
// Give a long-running desktop save an actionable recovery state without
|
|
875
|
+
// claiming the upload failed while its bounded final request is still live.
|
|
808
876
|
const stuckFailure = !explicitFailure && processingTimeout;
|
|
809
|
-
const isFailure =
|
|
810
|
-
|
|
877
|
+
const isFailure = explicitFailure || waitingForStorage || nativeSaveFailed;
|
|
878
|
+
const showRecoveryState = isFailure || stuckFailure;
|
|
811
879
|
const displayReason = explicitFailure
|
|
812
880
|
? storedButUnservableFailure
|
|
813
881
|
? t("recordingPage.clipDataPreserved")
|
|
@@ -825,16 +893,18 @@ export default function RecordingPage() {
|
|
|
825
893
|
: t("recordingPage.connectStorageFinishClip")
|
|
826
894
|
: nativeSaveFailed
|
|
827
895
|
? t("recordingPage.uploadPausedSaved")
|
|
828
|
-
:
|
|
829
|
-
? t("recordingPage.
|
|
830
|
-
:
|
|
896
|
+
: stuckFailure
|
|
897
|
+
? t("recordingPage.finishingClip")
|
|
898
|
+
: isFailure
|
|
899
|
+
? t("recordingPage.savingWentWrong")
|
|
900
|
+
: t("recordingPage.finishingClip");
|
|
831
901
|
const failureReason = storageSetupFailure
|
|
832
902
|
? loomStorageSetupFailure
|
|
833
903
|
? t("recordingPage.loomSourcePreserved")
|
|
834
904
|
: t("recordingPage.clipDataPreserved")
|
|
835
905
|
: displayReason;
|
|
836
906
|
const detail = failureDetail(rawFailureReason);
|
|
837
|
-
if (!
|
|
907
|
+
if (!showRecoveryState) {
|
|
838
908
|
return (
|
|
839
909
|
<div className="flex min-h-screen w-full flex-col bg-background">
|
|
840
910
|
<header className="flex min-w-0 shrink-0 items-center gap-3 border-b border-border px-3 py-2 sm:px-4 sm:py-3">
|
|
@@ -1069,16 +1139,16 @@ export default function RecordingPage() {
|
|
|
1069
1139
|
value="agent"
|
|
1070
1140
|
className="mt-0 flex flex-1 min-h-0 flex-col data-[state=inactive]:hidden"
|
|
1071
1141
|
>
|
|
1142
|
+
{generatedWorkflow ? (
|
|
1143
|
+
<GeneratedWorkflowNotice workflow={generatedWorkflow} />
|
|
1144
|
+
) : null}
|
|
1072
1145
|
<AgentPanel
|
|
1073
1146
|
browserTabId={browserTabId}
|
|
1074
1147
|
scope={recordingScope}
|
|
1148
|
+
showHeader={false}
|
|
1149
|
+
showTabBar={false}
|
|
1075
1150
|
emptyStateText={t("recordingPage.askAboutClip")}
|
|
1076
1151
|
dynamicSuggestions={false}
|
|
1077
|
-
chatNotice={
|
|
1078
|
-
generatedWorkflow ? (
|
|
1079
|
-
<GeneratedWorkflowNotice workflow={generatedWorkflow} />
|
|
1080
|
-
) : null
|
|
1081
|
-
}
|
|
1082
1152
|
suggestions={
|
|
1083
1153
|
canEdit
|
|
1084
1154
|
? [
|
|
@@ -1223,6 +1293,38 @@ export default function RecordingPage() {
|
|
|
1223
1293
|
{titleGenerationPaused ? (
|
|
1224
1294
|
<BuilderCreditsTitleNotice className="mt-2" />
|
|
1225
1295
|
) : null}
|
|
1296
|
+
{silenceRemovalStatus ? (
|
|
1297
|
+
<div
|
|
1298
|
+
className="mt-1 flex items-center gap-1.5 text-xs text-muted-foreground"
|
|
1299
|
+
role="status"
|
|
1300
|
+
aria-live="polite"
|
|
1301
|
+
>
|
|
1302
|
+
{silenceRemovalStatus.status === "queued" ||
|
|
1303
|
+
silenceRemovalStatus.status === "working" ? (
|
|
1304
|
+
<Spinner className="size-3" />
|
|
1305
|
+
) : null}
|
|
1306
|
+
<span>
|
|
1307
|
+
{silenceRemovalStatus.status === "queued"
|
|
1308
|
+
? t("recordingPage.silenceQueued")
|
|
1309
|
+
: silenceRemovalStatus.status === "working"
|
|
1310
|
+
? t("recordingPage.silenceWorking", {
|
|
1311
|
+
defaultValue: "Removing silences…",
|
|
1312
|
+
})
|
|
1313
|
+
: silenceRemovalStatus.status === "completed"
|
|
1314
|
+
? t("recordingPage.silenceCompleted", {
|
|
1315
|
+
defaultValue: "Silence removal complete",
|
|
1316
|
+
})
|
|
1317
|
+
: t("recordingPage.silenceFailed", {
|
|
1318
|
+
defaultValue: "Silence removal failed",
|
|
1319
|
+
})}
|
|
1320
|
+
</span>
|
|
1321
|
+
{silenceRemovalStatus.message ? (
|
|
1322
|
+
<span className="truncate">
|
|
1323
|
+
· {silenceRemovalStatus.message}
|
|
1324
|
+
</span>
|
|
1325
|
+
) : null}
|
|
1326
|
+
</div>
|
|
1327
|
+
) : null}
|
|
1226
1328
|
</div>
|
|
1227
1329
|
|
|
1228
1330
|
{canUseNativeEditor ? (
|
|
@@ -1313,7 +1415,7 @@ export default function RecordingPage() {
|
|
|
1313
1415
|
{t("recordingPage.removeFillerWords")}
|
|
1314
1416
|
</DropdownMenuItem>
|
|
1315
1417
|
<DropdownMenuItem
|
|
1316
|
-
disabled={
|
|
1418
|
+
disabled={silenceRemovalBusy}
|
|
1317
1419
|
onSelect={() =>
|
|
1318
1420
|
removeSilences.mutate({
|
|
1319
1421
|
recordingId: recording.id,
|
|
@@ -1238,7 +1238,7 @@ export default function RecordRoute() {
|
|
|
1238
1238
|
sourceWindowTitle: captureTitle.sourceWindowTitle,
|
|
1239
1239
|
hasCamera: opts.mode !== "screen",
|
|
1240
1240
|
hasAudio: wantsMic,
|
|
1241
|
-
visibility: reportContext ? "org" :
|
|
1241
|
+
visibility: reportContext ? "org" : undefined,
|
|
1242
1242
|
spaceIds: spaceIdFromUrl ? [spaceIdFromUrl] : undefined,
|
|
1243
1243
|
folderId: folderIdFromUrl ?? undefined,
|
|
1244
1244
|
mimeType: pickMimeType() || undefined,
|
|
@@ -1561,7 +1561,7 @@ export default function RecordRoute() {
|
|
|
1561
1561
|
hasAudio: true,
|
|
1562
1562
|
width: meta.width,
|
|
1563
1563
|
height: meta.height,
|
|
1564
|
-
visibility: reportContext ? "org" :
|
|
1564
|
+
visibility: reportContext ? "org" : undefined,
|
|
1565
1565
|
spaceIds: spaceIdFromUrl ? [spaceIdFromUrl] : undefined,
|
|
1566
1566
|
folderId: folderIdFromUrl ?? undefined,
|
|
1567
1567
|
mimeType: uploadMimeType,
|
|
@@ -2117,6 +2117,27 @@ export default function RecordRoute() {
|
|
|
2117
2117
|
transcriptRes.status,
|
|
2118
2118
|
);
|
|
2119
2119
|
}
|
|
2120
|
+
} else {
|
|
2121
|
+
await fetch(
|
|
2122
|
+
agentNativePath("/_agent-native/actions/save-browser-transcript"),
|
|
2123
|
+
{
|
|
2124
|
+
method: "POST",
|
|
2125
|
+
headers: { "Content-Type": "application/json" },
|
|
2126
|
+
body: JSON.stringify({
|
|
2127
|
+
recordingId: pending.id,
|
|
2128
|
+
fullText: "",
|
|
2129
|
+
source: "web-speech",
|
|
2130
|
+
failureReason: liveTranscription.supported
|
|
2131
|
+
? "Browser native transcription returned no speech before recording stopped."
|
|
2132
|
+
: "Browser Web Speech recognition is unavailable in this browser.",
|
|
2133
|
+
}),
|
|
2134
|
+
},
|
|
2135
|
+
).catch((err) => {
|
|
2136
|
+
console.warn(
|
|
2137
|
+
"[recorder] native transcript failure save failed:",
|
|
2138
|
+
err,
|
|
2139
|
+
);
|
|
2140
|
+
});
|
|
2120
2141
|
}
|
|
2121
2142
|
|
|
2122
2143
|
const stopResult = await engine.stop();
|
|
@@ -443,7 +443,10 @@ export default function ShareRoute() {
|
|
|
443
443
|
const data = await res.json().catch(() => ({}));
|
|
444
444
|
return { ok: res.ok, status: res.status, data };
|
|
445
445
|
},
|
|
446
|
-
|
|
446
|
+
// Private/org share links are public-shell routes, so the first render can
|
|
447
|
+
// happen before the browser session is known. Waiting avoids a transient
|
|
448
|
+
// anonymous 401/404 becoming the authenticated viewer's final state.
|
|
449
|
+
enabled: !!shareId && !sessionLoading,
|
|
447
450
|
refetchInterval: (q) => {
|
|
448
451
|
const payload = (q.state.data as { data?: any } | undefined)?.data;
|
|
449
452
|
const rec = payload?.recording;
|
|
@@ -616,7 +619,7 @@ export default function ShareRoute() {
|
|
|
616
619
|
}
|
|
617
620
|
}
|
|
618
621
|
|
|
619
|
-
if (dataQ.isLoading) {
|
|
622
|
+
if (sessionLoading || dataQ.isLoading) {
|
|
620
623
|
return (
|
|
621
624
|
<>
|
|
622
625
|
{agentDiscovery}
|
|
@@ -1066,6 +1069,7 @@ export default function ShareRoute() {
|
|
|
1066
1069
|
]}
|
|
1067
1070
|
browserTabId={getBrowserTabId()}
|
|
1068
1071
|
showHeader={false}
|
|
1072
|
+
showTabBar={false}
|
|
1069
1073
|
/>
|
|
1070
1074
|
) : (
|
|
1071
1075
|
<PublicAgentEmptyState
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Agent-Native Clips",
|
|
4
4
|
"short_name": "Clips",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.17",
|
|
6
6
|
"description": "Start Clips recordings from Chrome, capture optional diagnostics, and preview Clips links on GitHub.",
|
|
7
7
|
"minimum_chrome_version": "116",
|
|
8
8
|
"action": {
|