@agent-native/core 0.103.1 → 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 +30 -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/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/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/notifications/routes.d.ts +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/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/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/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/agent-engine-api-key-route.d.ts +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
|
@@ -147,6 +147,49 @@ function affectedPlanBlockIds(
|
|
|
147
147
|
return Array.from(ids).slice(0, 12);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
function collectPlanBlockIds(blocks: PlanBlock[], ids = new Set<string>()) {
|
|
151
|
+
for (const block of blocks) {
|
|
152
|
+
ids.add(block.id);
|
|
153
|
+
if (block.type === "tabs") {
|
|
154
|
+
for (const tab of block.data.tabs) {
|
|
155
|
+
collectPlanBlockIds(tab.blocks, ids);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return ids;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function destructiveStructuredReplacementWarnings(
|
|
163
|
+
before: PlanContent,
|
|
164
|
+
after: PlanContent,
|
|
165
|
+
) {
|
|
166
|
+
const afterBlockIds = collectPlanBlockIds(after.blocks);
|
|
167
|
+
const removedBlockIds = Array.from(collectPlanBlockIds(before.blocks)).filter(
|
|
168
|
+
(id) => !afterBlockIds.has(id),
|
|
169
|
+
);
|
|
170
|
+
const warnings: string[] = [];
|
|
171
|
+
if (removedBlockIds.length > 0) {
|
|
172
|
+
const excerpt = removedBlockIds.slice(0, 8).join(", ");
|
|
173
|
+
const remaining = removedBlockIds.length - 8;
|
|
174
|
+
warnings.push(
|
|
175
|
+
`remove ${removedBlockIds.length} existing block ID${removedBlockIds.length === 1 ? "" : "s"} (${excerpt}${remaining > 0 ? `, and ${remaining} more` : ""})`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
if (
|
|
179
|
+
(before.canvas?.frames.length ?? 0) > 0 &&
|
|
180
|
+
(after.canvas?.frames.length ?? 0) === 0
|
|
181
|
+
) {
|
|
182
|
+
warnings.push("collapse a nonempty canvas to zero frames");
|
|
183
|
+
}
|
|
184
|
+
if (
|
|
185
|
+
(before.prototype?.screens.length ?? 0) > 0 &&
|
|
186
|
+
(after.prototype?.screens.length ?? 0) === 0
|
|
187
|
+
) {
|
|
188
|
+
warnings.push("collapse a nonempty prototype to zero screens");
|
|
189
|
+
}
|
|
190
|
+
return warnings;
|
|
191
|
+
}
|
|
192
|
+
|
|
150
193
|
function isNewOpenHumanComment(comment: {
|
|
151
194
|
id?: string;
|
|
152
195
|
status: string;
|
|
@@ -406,9 +449,9 @@ function contentPatchDetails(input: {
|
|
|
406
449
|
}
|
|
407
450
|
|
|
408
451
|
const CONTENT_DESCRIPTION =
|
|
409
|
-
"
|
|
452
|
+
"Destructive full structured content replacement. Read the latest plan first and pass its updatedAt as expectedUpdatedAt. Prefer granular contentPatches for ordinary edits; use this only for intentional broad restructuring.";
|
|
410
453
|
const CONTENT_PATCHES_DESCRIPTION =
|
|
411
|
-
"Targeted structured content edits addressed by stable id.
|
|
454
|
+
"Targeted structured content edits addressed by stable id. Prefer granular operations for live plans. The destructive replace-blocks operation requires expectedUpdatedAt from a fresh read. patch-visual-plan-source is only for exported MDX folders. Supported ops: set-metadata for title/brief, set-prototype / remove-prototype / update-prototype-screen / patch-prototype-html for live prototype surfaces; update-block / replace-block, update-rich-text, patch-wireframe-html, patch-diagram-html, update-wireframe-node, replace-wireframe-screen, update-canvas-frame, update-canvas-annotation / append-canvas-annotation, append-block / remove-block, update-custom-html.";
|
|
412
455
|
|
|
413
456
|
// Named so `agentInputSchema` below can `.extend()` it with compact
|
|
414
457
|
// `content`/`contentPatches` fields instead of duplicating every other key.
|
|
@@ -428,11 +471,24 @@ const updateVisualPlanSchema = z.object({
|
|
|
428
471
|
.string()
|
|
429
472
|
.optional()
|
|
430
473
|
.describe("Current agent focus label shown in the review surface."),
|
|
474
|
+
expectedUpdatedAt: z
|
|
475
|
+
.string()
|
|
476
|
+
.optional()
|
|
477
|
+
.describe(
|
|
478
|
+
"Required optimistic-concurrency base revision for full content replacement and replace-blocks. Read the latest plan, copy plan.updatedAt exactly, and do not reuse a revision after another write succeeds. Granular patches do not require it.",
|
|
479
|
+
),
|
|
480
|
+
allowDestructive: z
|
|
481
|
+
.boolean()
|
|
482
|
+
.optional()
|
|
483
|
+
.default(false)
|
|
484
|
+
.describe(
|
|
485
|
+
"Explicit confirmation for a full content replacement or replace-blocks call that removes existing block IDs, collapses a nonempty canvas to zero frames, or collapses a nonempty prototype to zero screens. Keep false for normal rewrites. Set true only after reviewing the latest plan and intentionally accepting those losses; expectedUpdatedAt is still required.",
|
|
486
|
+
),
|
|
431
487
|
html: z
|
|
432
488
|
.string()
|
|
433
489
|
.optional()
|
|
434
490
|
.describe(
|
|
435
|
-
"Legacy
|
|
491
|
+
"Legacy-only standalone HTML. Allowed only while the current plan has no structured content. Structured plans reject this field because it would shadow blocks, inline editing, and MDX round-trip. Never use it for new plans.",
|
|
436
492
|
),
|
|
437
493
|
content: planContentSchema.optional().describe(CONTENT_DESCRIPTION),
|
|
438
494
|
contentPatches: planContentPatchesSchema
|
|
@@ -442,7 +498,9 @@ const updateVisualPlanSchema = z.object({
|
|
|
442
498
|
markdown: z
|
|
443
499
|
.string()
|
|
444
500
|
.optional()
|
|
445
|
-
.describe(
|
|
501
|
+
.describe(
|
|
502
|
+
"Legacy-only markdown source. Allowed only while the current plan has no structured content. Structured plans reject explicit markdown, including calls that also carry contentPatches; structured edits generate their MDX projection automatically.",
|
|
503
|
+
),
|
|
446
504
|
sections: z
|
|
447
505
|
.array(sectionInputSchema)
|
|
448
506
|
.optional()
|
|
@@ -459,7 +517,9 @@ const updateVisualPlanSchema = z.object({
|
|
|
459
517
|
.array(z.string())
|
|
460
518
|
.optional()
|
|
461
519
|
.default([])
|
|
462
|
-
.describe(
|
|
520
|
+
.describe(
|
|
521
|
+
"Prefer consume-plan-feedback for marking feedback consumed. WARNING: consuming feedback does not resolve or hide its comments; after the requested change is verified, resolve handled comments with resolve-plan-comment.",
|
|
522
|
+
),
|
|
463
523
|
note: z
|
|
464
524
|
.string()
|
|
465
525
|
.optional()
|
|
@@ -577,24 +637,80 @@ export default defineAction({
|
|
|
577
637
|
const db = getDb();
|
|
578
638
|
const now = nowIso();
|
|
579
639
|
const insertedCommentIds: string[] = [];
|
|
640
|
+
const hasReplaceBlocksPatch = args.contentPatches.some(
|
|
641
|
+
(patch) => patch.op === "replace-blocks",
|
|
642
|
+
);
|
|
643
|
+
const isDestructiveStructuredWrite =
|
|
644
|
+
args.content !== undefined || hasReplaceBlocksPatch;
|
|
580
645
|
let nextContent =
|
|
581
646
|
args.content !== undefined ? normalizePlanContent(args.content) : null;
|
|
582
647
|
let versionAtLoad: string | null = null;
|
|
583
648
|
let bundleAtLoad: Awaited<ReturnType<typeof loadPlanBundle>> | null = null;
|
|
649
|
+
|
|
650
|
+
if (
|
|
651
|
+
args.content !== undefined ||
|
|
652
|
+
args.contentPatches.length > 0 ||
|
|
653
|
+
args.html !== undefined ||
|
|
654
|
+
args.markdown !== undefined
|
|
655
|
+
) {
|
|
656
|
+
bundleAtLoad = await loadPlanBundle(args.planId);
|
|
657
|
+
versionAtLoad = bundleAtLoad.plan.updatedAt;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
if (
|
|
661
|
+
bundleAtLoad?.plan.content &&
|
|
662
|
+
(args.html !== undefined || args.markdown !== undefined)
|
|
663
|
+
) {
|
|
664
|
+
const legacyFields = [
|
|
665
|
+
args.html !== undefined ? "html" : null,
|
|
666
|
+
args.markdown !== undefined ? "markdown" : null,
|
|
667
|
+
].filter((field): field is string => Boolean(field));
|
|
668
|
+
throw new Error(
|
|
669
|
+
`Structured plans do not accept explicit legacy ${legacyFields.join(" or ")} writes. Use granular contentPatches; the structured content's markdown projection is generated automatically.`,
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
if (isDestructiveStructuredWrite) {
|
|
674
|
+
if (!args.expectedUpdatedAt) {
|
|
675
|
+
throw new Error(
|
|
676
|
+
"expectedUpdatedAt is required for full content replacement and replace-blocks. Read the latest plan, pass its plan.updatedAt, and retry.",
|
|
677
|
+
);
|
|
678
|
+
}
|
|
679
|
+
if (bundleAtLoad?.plan.updatedAt !== args.expectedUpdatedAt) {
|
|
680
|
+
throw new Error(
|
|
681
|
+
"This destructive update was prepared from an outdated plan revision. Reload the plan and retry with the latest expectedUpdatedAt.",
|
|
682
|
+
);
|
|
683
|
+
}
|
|
684
|
+
versionAtLoad = args.expectedUpdatedAt;
|
|
685
|
+
}
|
|
686
|
+
|
|
584
687
|
if (args.content === undefined && args.contentPatches.length > 0) {
|
|
585
|
-
|
|
586
|
-
bundleAtLoad = bundle;
|
|
587
|
-
versionAtLoad = bundle.plan.updatedAt;
|
|
588
|
-
if (!bundle.plan.content) {
|
|
688
|
+
if (!bundleAtLoad?.plan.content) {
|
|
589
689
|
throw new Error(
|
|
590
690
|
"Targeted content patches require a structured plan. Pass content for a full conversion, or html for legacy artifacts.",
|
|
591
691
|
);
|
|
592
692
|
}
|
|
593
693
|
nextContent = applyPlanContentPatches(
|
|
594
|
-
|
|
694
|
+
bundleAtLoad.plan.content,
|
|
595
695
|
args.contentPatches,
|
|
596
696
|
);
|
|
597
697
|
}
|
|
698
|
+
if (
|
|
699
|
+
isDestructiveStructuredWrite &&
|
|
700
|
+
!args.allowDestructive &&
|
|
701
|
+
bundleAtLoad?.plan.content &&
|
|
702
|
+
nextContent
|
|
703
|
+
) {
|
|
704
|
+
const warnings = destructiveStructuredReplacementWarnings(
|
|
705
|
+
bundleAtLoad.plan.content,
|
|
706
|
+
nextContent,
|
|
707
|
+
);
|
|
708
|
+
if (warnings.length > 0) {
|
|
709
|
+
throw new Error(
|
|
710
|
+
`Destructive structured replacement would ${warnings.join(" and ")}. Reload and review the latest plan, then pass allowDestructive: true with its expectedUpdatedAt only if those losses are intentional.`,
|
|
711
|
+
);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
598
714
|
const sourceBundleForMarkdown =
|
|
599
715
|
nextContent && args.markdown === undefined
|
|
600
716
|
? (bundleAtLoad ?? (await loadPlanBundle(args.planId)))
|
|
@@ -30,10 +30,10 @@ const messages = {
|
|
|
30
30
|
"Manage team members, organization access, and shared workspace preferences.",
|
|
31
31
|
openTeamSettings: "Open team settings",
|
|
32
32
|
openResourceSettings: "Open resource settings",
|
|
33
|
-
agentTitle: "Agent
|
|
33
|
+
agentTitle: "Agent workspace",
|
|
34
34
|
agentDescription:
|
|
35
|
-
"Open the agent
|
|
36
|
-
openAgentSettings: "Open agent
|
|
35
|
+
"Open the agent workspace for model, API keys, automations, voice, and other agent controls.",
|
|
36
|
+
openAgentSettings: "Open agent workspace",
|
|
37
37
|
editorTitle: "VS Code extension",
|
|
38
38
|
editorDescription:
|
|
39
39
|
"Open and review plans in a side panel inside VS Code instead of a separate browser tab.",
|
|
@@ -4050,6 +4050,7 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4050
4050
|
}
|
|
4051
4051
|
await updatePlan.mutateAsync({
|
|
4052
4052
|
planId: bundle.plan.id,
|
|
4053
|
+
expectedUpdatedAt: bundle.plan.updatedAt,
|
|
4053
4054
|
content,
|
|
4054
4055
|
note: "Updated structured visual plan content.",
|
|
4055
4056
|
});
|
|
@@ -4081,6 +4082,9 @@ export function PlansPage({ localPlanSlug }: { localPlanSlug?: string } = {}) {
|
|
|
4081
4082
|
await updatePlan.mutateAsync(
|
|
4082
4083
|
{
|
|
4083
4084
|
planId: bundle.plan.id,
|
|
4085
|
+
...(patch.op === "replace-blocks"
|
|
4086
|
+
? { expectedUpdatedAt: bundle.plan.updatedAt }
|
|
4087
|
+
: {}),
|
|
4084
4088
|
contentPatches: [patch],
|
|
4085
4089
|
note:
|
|
4086
4090
|
patch.op === "update-rich-text"
|
|
@@ -6800,6 +6804,7 @@ function PlanLoadError({
|
|
|
6800
6804
|
}) {
|
|
6801
6805
|
const t = useT();
|
|
6802
6806
|
const [emailOpen, setEmailOpen] = useState(false);
|
|
6807
|
+
const [switchAccountOpen, setSwitchAccountOpen] = useState(false);
|
|
6803
6808
|
const [emailMode, setEmailMode] = useState<"sign-in" | "create">("sign-in");
|
|
6804
6809
|
const [email, setEmail] = useState("");
|
|
6805
6810
|
const [password, setPassword] = useState("");
|
|
@@ -6934,11 +6939,9 @@ function PlanLoadError({
|
|
|
6934
6939
|
: t("plansPage.loadError.maybeOtherOrgBody")
|
|
6935
6940
|
: t("plansPage.loadError.privateBody")
|
|
6936
6941
|
: message;
|
|
6937
|
-
const reportMessage = `${body}${message && message !== body ? `\n${message}` : ""}`;
|
|
6938
|
-
|
|
6939
6942
|
return (
|
|
6940
6943
|
<div className="flex h-full flex-col items-center justify-center bg-background p-8">
|
|
6941
|
-
<div className="w-full max-w-
|
|
6944
|
+
<div className="w-full max-w-sm rounded-xl border border-border bg-background p-6 text-start shadow-sm">
|
|
6942
6945
|
<div className={cn("flex items-start", !showAccessHelp && "gap-3")}>
|
|
6943
6946
|
{!showAccessHelp && !planMissing && (
|
|
6944
6947
|
<div className="flex size-10 shrink-0 items-center justify-center rounded-lg border border-amber-500/25 bg-amber-500/10 text-amber-600 dark:text-amber-300">
|
|
@@ -6946,14 +6949,14 @@ function PlanLoadError({
|
|
|
6946
6949
|
</div>
|
|
6947
6950
|
)}
|
|
6948
6951
|
<div className="min-w-0">
|
|
6949
|
-
<h2 className="text-
|
|
6950
|
-
<p className="mt-
|
|
6952
|
+
<h2 className="text-lg font-semibold tracking-tight">{title}</h2>
|
|
6953
|
+
<p className="mt-2 text-sm leading-6 text-muted-foreground">
|
|
6951
6954
|
{body}
|
|
6952
6955
|
</p>
|
|
6953
6956
|
{showAccessHelp && signedInEmail ? (
|
|
6954
|
-
<div className="mt-3 flex items-center gap-
|
|
6955
|
-
<IconAt className="size-4 shrink-0
|
|
6956
|
-
<span className="min-w-0 truncate
|
|
6957
|
+
<div className="mt-3 flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground">
|
|
6958
|
+
<IconAt className="size-4 shrink-0" />
|
|
6959
|
+
<span className="min-w-0 truncate">
|
|
6957
6960
|
{t("plansPage.loadError.signedInAs")}{" "}
|
|
6958
6961
|
<span className="font-medium text-foreground">
|
|
6959
6962
|
{signedInEmail}
|
|
@@ -6975,7 +6978,7 @@ function PlanLoadError({
|
|
|
6975
6978
|
</div>
|
|
6976
6979
|
|
|
6977
6980
|
{showAccessHelp || !planMissing ? (
|
|
6978
|
-
<div className="mt-
|
|
6981
|
+
<div className="mt-6 flex flex-col gap-3">
|
|
6979
6982
|
{showAccessHelp ? (
|
|
6980
6983
|
<>
|
|
6981
6984
|
{signedIn ? (
|
|
@@ -7002,24 +7005,57 @@ function PlanLoadError({
|
|
|
7002
7005
|
</Button>
|
|
7003
7006
|
)}
|
|
7004
7007
|
{signedIn ? (
|
|
7005
|
-
<
|
|
7006
|
-
|
|
7007
|
-
|
|
7008
|
-
|
|
7009
|
-
|
|
7010
|
-
|
|
7011
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7008
|
+
<Collapsible
|
|
7009
|
+
open={switchAccountOpen}
|
|
7010
|
+
onOpenChange={setSwitchAccountOpen}
|
|
7011
|
+
>
|
|
7012
|
+
<CollapsibleTrigger asChild>
|
|
7013
|
+
<Button
|
|
7014
|
+
type="button"
|
|
7015
|
+
variant="ghost"
|
|
7016
|
+
size="sm"
|
|
7017
|
+
className="h-8 w-full justify-between px-1.5 text-muted-foreground hover:text-foreground"
|
|
7018
|
+
>
|
|
7019
|
+
<span className="inline-flex items-center gap-2">
|
|
7020
|
+
<IconLogin2 className="size-4" />
|
|
7021
|
+
{t("plansPage.loadError.switchAccount")}
|
|
7022
|
+
</span>
|
|
7023
|
+
<IconChevronDown
|
|
7024
|
+
className={cn(
|
|
7025
|
+
"size-4 transition-transform",
|
|
7026
|
+
switchAccountOpen ? "rotate-180" : "",
|
|
7027
|
+
)}
|
|
7028
|
+
/>
|
|
7029
|
+
</Button>
|
|
7030
|
+
</CollapsibleTrigger>
|
|
7031
|
+
<CollapsibleContent className="pt-1">
|
|
7032
|
+
<Button
|
|
7033
|
+
type="button"
|
|
7034
|
+
onClick={() => void startGoogle()}
|
|
7035
|
+
disabled={googlePending}
|
|
7036
|
+
className="h-9 w-full gap-2.5 rounded-md bg-white px-2 text-sm font-medium text-black shadow-none hover:bg-[#e5e5e5] hover:text-black dark:bg-white dark:text-black dark:hover:bg-[#e5e5e5]"
|
|
7037
|
+
>
|
|
7038
|
+
{googlePending ? (
|
|
7039
|
+
<IconLoader2 className="size-[18px] animate-spin" />
|
|
7040
|
+
) : (
|
|
7041
|
+
<GoogleLogoIcon className="size-[18px]" />
|
|
7042
|
+
)}
|
|
7043
|
+
{t("plansPage.loadError.continueWithGoogle")}
|
|
7044
|
+
</Button>
|
|
7045
|
+
</CollapsibleContent>
|
|
7046
|
+
</Collapsible>
|
|
7016
7047
|
) : null}
|
|
7017
|
-
<Collapsible
|
|
7048
|
+
<Collapsible
|
|
7049
|
+
open={emailOpen}
|
|
7050
|
+
onOpenChange={setEmailOpen}
|
|
7051
|
+
className={cn(signedIn && !switchAccountOpen && "hidden")}
|
|
7052
|
+
>
|
|
7018
7053
|
<CollapsibleTrigger asChild>
|
|
7019
7054
|
<Button
|
|
7020
7055
|
type="button"
|
|
7021
7056
|
variant="ghost"
|
|
7022
|
-
|
|
7057
|
+
size="sm"
|
|
7058
|
+
className="w-full justify-between px-1.5 text-muted-foreground"
|
|
7023
7059
|
>
|
|
7024
7060
|
<span className="inline-flex items-center gap-2">
|
|
7025
7061
|
<IconMail className="size-4" />
|
|
@@ -7035,7 +7071,7 @@ function PlanLoadError({
|
|
|
7035
7071
|
</CollapsibleTrigger>
|
|
7036
7072
|
<CollapsibleContent className="pt-2">
|
|
7037
7073
|
<form
|
|
7038
|
-
className="space-y-3 rounded-
|
|
7074
|
+
className="space-y-3 rounded-lg border border-border bg-muted/20 p-3"
|
|
7039
7075
|
onSubmit={submitEmailAuth}
|
|
7040
7076
|
>
|
|
7041
7077
|
<div className="space-y-1.5">
|
|
@@ -7120,45 +7156,7 @@ function PlanLoadError({
|
|
|
7120
7156
|
)}
|
|
7121
7157
|
</div>
|
|
7122
7158
|
) : null}
|
|
7123
|
-
<div className="mt-4 border-t border-border/70 pt-3">
|
|
7124
|
-
<PlanErrorFeedbackActions
|
|
7125
|
-
title={title}
|
|
7126
|
-
message={reportMessage}
|
|
7127
|
-
status={status}
|
|
7128
|
-
extraDebug={[
|
|
7129
|
-
{ label: "Plan id", value: planId }, // i18n-ignore debug label
|
|
7130
|
-
accessStatus?.visibility
|
|
7131
|
-
? {
|
|
7132
|
-
label: "Plan visibility", // i18n-ignore debug label
|
|
7133
|
-
value: accessStatus.visibility,
|
|
7134
|
-
}
|
|
7135
|
-
: {
|
|
7136
|
-
label: "Plan visibility", // i18n-ignore debug label
|
|
7137
|
-
value: null,
|
|
7138
|
-
},
|
|
7139
|
-
accessStatus?.hasAccess !== undefined
|
|
7140
|
-
? {
|
|
7141
|
-
label: "Has access", // i18n-ignore debug label
|
|
7142
|
-
value: accessStatus.hasAccess,
|
|
7143
|
-
}
|
|
7144
|
-
: {
|
|
7145
|
-
label: "Has access", // i18n-ignore debug label
|
|
7146
|
-
value: null,
|
|
7147
|
-
},
|
|
7148
|
-
]}
|
|
7149
|
-
/>
|
|
7150
|
-
</div>
|
|
7151
7159
|
</div>
|
|
7152
|
-
<Button
|
|
7153
|
-
type="button"
|
|
7154
|
-
variant="ghost"
|
|
7155
|
-
size="sm"
|
|
7156
|
-
onClick={onRetry}
|
|
7157
|
-
className="mt-3 gap-1.5 text-muted-foreground hover:text-foreground"
|
|
7158
|
-
>
|
|
7159
|
-
<IconRefresh className="size-3.5" />
|
|
7160
|
-
{t("plansPage.loadError.retry")}
|
|
7161
|
-
</Button>
|
|
7162
7160
|
</div>
|
|
7163
7161
|
);
|
|
7164
7162
|
}
|
|
@@ -7243,7 +7241,12 @@ function SignedInPlanAccessActions({
|
|
|
7243
7241
|
})}
|
|
7244
7242
|
</div>
|
|
7245
7243
|
) : null}
|
|
7246
|
-
<Button
|
|
7244
|
+
<Button
|
|
7245
|
+
type="button"
|
|
7246
|
+
className="w-full"
|
|
7247
|
+
onClick={handleOrgAccess}
|
|
7248
|
+
disabled={disabled}
|
|
7249
|
+
>
|
|
7247
7250
|
{pending ? (
|
|
7248
7251
|
<IconLoader2 className="size-4 animate-spin" />
|
|
7249
7252
|
) : orgAccessPrompt?.kind === "domain" ? (
|
|
@@ -967,7 +967,7 @@ function serializeCanvas(content: PlanContent, visualUrl?: string): string {
|
|
|
967
967
|
const annotations = annotationsSource
|
|
968
968
|
.map(
|
|
969
969
|
(annotation) =>
|
|
970
|
-
` <Annotation${prop("id", annotation.id)}${prop("type", annotation.type)}${prop("title", annotation.title)}${prop("points", annotation.points)}${prop("style", annotation.style)}${prop("targetId", annotation.targetId)}${prop("placement", annotation.placement)}${prop("x", annotation.x)}${prop("y", annotation.y)}
|
|
970
|
+
` <Annotation${prop("id", annotation.id)}${prop("type", annotation.type)}${prop("title", annotation.title)}${prop("points", annotation.points)}${prop("style", annotation.style)}${prop("targetId", annotation.targetId)}${prop("placement", annotation.placement)}${prop("x", annotation.x)}${prop("y", annotation.y)}${prop("text", annotation.text.trim())} />`,
|
|
971
971
|
)
|
|
972
972
|
.join("\n\n");
|
|
973
973
|
const connectors = (canvas.flow ?? [])
|
|
@@ -1015,6 +1015,79 @@ function parseMdx(source: string): MdxNode {
|
|
|
1015
1015
|
return tree;
|
|
1016
1016
|
}
|
|
1017
1017
|
|
|
1018
|
+
function findMdxTagEnd(source: string, start: number): number {
|
|
1019
|
+
let quote: '"' | "'" | "`" | null = null;
|
|
1020
|
+
let expressionDepth = 0;
|
|
1021
|
+
for (let index = start; index < source.length; index += 1) {
|
|
1022
|
+
const char = source[index];
|
|
1023
|
+
if (quote) {
|
|
1024
|
+
if (char === "\\") {
|
|
1025
|
+
index += 1;
|
|
1026
|
+
} else if (char === quote) {
|
|
1027
|
+
quote = null;
|
|
1028
|
+
}
|
|
1029
|
+
continue;
|
|
1030
|
+
}
|
|
1031
|
+
if (char === '"' || char === "'" || char === "`") {
|
|
1032
|
+
quote = char;
|
|
1033
|
+
continue;
|
|
1034
|
+
}
|
|
1035
|
+
if (char === "{") {
|
|
1036
|
+
expressionDepth += 1;
|
|
1037
|
+
continue;
|
|
1038
|
+
}
|
|
1039
|
+
if (char === "}" && expressionDepth > 0) {
|
|
1040
|
+
expressionDepth -= 1;
|
|
1041
|
+
continue;
|
|
1042
|
+
}
|
|
1043
|
+
if (char === ">" && expressionDepth === 0) return index;
|
|
1044
|
+
}
|
|
1045
|
+
return -1;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
function rewriteCanvasAnnotationBodies(source: string): string {
|
|
1049
|
+
const annotationStart = /<Annotation\b/g;
|
|
1050
|
+
let cursor = 0;
|
|
1051
|
+
let changed = false;
|
|
1052
|
+
let output = "";
|
|
1053
|
+
let match: RegExpExecArray | null;
|
|
1054
|
+
|
|
1055
|
+
while ((match = annotationStart.exec(source))) {
|
|
1056
|
+
const start = match.index;
|
|
1057
|
+
const openEnd = findMdxTagEnd(source, start + match[0].length);
|
|
1058
|
+
if (openEnd < 0) break;
|
|
1059
|
+
const openTag = source.slice(start, openEnd + 1);
|
|
1060
|
+
if (openTag.trimEnd().endsWith("/>") || openTag.includes(" text=")) {
|
|
1061
|
+
continue;
|
|
1062
|
+
}
|
|
1063
|
+
const closeStart = source.indexOf("</Annotation>", openEnd + 1);
|
|
1064
|
+
if (closeStart < 0) break;
|
|
1065
|
+
const closeEnd = closeStart + "</Annotation>".length;
|
|
1066
|
+
const text = source.slice(openEnd + 1, closeStart).trim();
|
|
1067
|
+
output += source.slice(cursor, start);
|
|
1068
|
+
output += `${openTag.slice(0, -1).trimEnd()}${prop("text", text)} />`;
|
|
1069
|
+
cursor = closeEnd;
|
|
1070
|
+
annotationStart.lastIndex = closeEnd;
|
|
1071
|
+
changed = true;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
return changed ? `${output}${source.slice(cursor)}` : source;
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
function parseCanvasMdxFile(source: string): MdxNode {
|
|
1078
|
+
try {
|
|
1079
|
+
return parsePlanMdxFile("canvas.mdx", source);
|
|
1080
|
+
} catch (initialError) {
|
|
1081
|
+
const rewritten = rewriteCanvasAnnotationBodies(source);
|
|
1082
|
+
if (rewritten === source) throw initialError;
|
|
1083
|
+
try {
|
|
1084
|
+
return parsePlanMdxFile("canvas.mdx", rewritten);
|
|
1085
|
+
} catch {
|
|
1086
|
+
throw initialError;
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1018
1091
|
type MdxParseError = {
|
|
1019
1092
|
column?: unknown;
|
|
1020
1093
|
line?: unknown;
|
|
@@ -1774,7 +1847,7 @@ export async function parsePlanMdxFolder(
|
|
|
1774
1847
|
});
|
|
1775
1848
|
|
|
1776
1849
|
const canvas = files["canvas.mdx"]
|
|
1777
|
-
? parseCanvas(
|
|
1850
|
+
? parseCanvas(parseCanvasMdxFile(files["canvas.mdx"]))
|
|
1778
1851
|
: undefined;
|
|
1779
1852
|
const prototype = files["prototype.mdx"]
|
|
1780
1853
|
? parsePrototype(parsePlanMdxFile("prototype.mdx", files["prototype.mdx"]))
|
|
@@ -9,10 +9,27 @@ description: How to create a new deck with slides from scratch. Read this before
|
|
|
9
9
|
|
|
10
10
|
## Workflow
|
|
11
11
|
|
|
12
|
-
1.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
1. Read the `creative-context` skill and retrieve factual evidence separately
|
|
13
|
+
from presentation structure. Respect `contextMode: "off"`.
|
|
14
|
+
2. Plan the slides (title, section dividers, content slides).
|
|
15
|
+
3. Call `create-deck --title "..." --slides '[]'` to create an empty deck.
|
|
16
|
+
4. Navigate to the new deck.
|
|
17
|
+
5. Call `add-slide` once per slide in slide order, waiting for each result.
|
|
18
|
+
|
|
19
|
+
Follow the creative-context reuse ladder before inventing a slide language:
|
|
20
|
+
reuse an approved native template unchanged, compose approved pieces, lightly
|
|
21
|
+
adapt a real approved example, generate from narrowly retrieved references,
|
|
22
|
+
then go net-new only when the relevant corpus is empty. Retrieval is a separate
|
|
23
|
+
step from generation. Persist the immutable `contextPackId` and concise reuse
|
|
24
|
+
labels with the deck's generation provenance; never infer provenance later from
|
|
25
|
+
rendered slide HTML.
|
|
26
|
+
|
|
27
|
+
When creative context is available, pass the pre-generation search result's
|
|
28
|
+
`contextPackId` to `create-deck`, pass deck-wide `reuseLabels`, and add
|
|
29
|
+
`creativeContextReuseLabels` to each slide that reused a specific item/version.
|
|
30
|
+
Do not omit these fields and let the final write action search after the HTML
|
|
31
|
+
has already been authored; that would fabricate influence. With an empty
|
|
32
|
+
library, omit them. With Library mode Off, omit them and create normally.
|
|
16
33
|
before adding the next slide
|
|
17
34
|
|
|
18
35
|
Do not create multiple slides in parallel for the same deck. Do not spawn
|