@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
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: creative-context
|
|
3
|
+
description: >-
|
|
4
|
+
Reuse creative context across generation while respecting explicit context
|
|
5
|
+
choices, pinned packs, provenance, and opt-out state.
|
|
6
|
+
scope: app
|
|
7
|
+
metadata:
|
|
8
|
+
internal: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Creative Context
|
|
12
|
+
|
|
13
|
+
Use the shared creative-context library to reuse verified source material
|
|
14
|
+
without turning prior work into an invisible global prompt.
|
|
15
|
+
|
|
16
|
+
## Reuse ladder
|
|
17
|
+
|
|
18
|
+
Apply the first viable option in this exact order:
|
|
19
|
+
|
|
20
|
+
1. Reuse an approved native asset, component, or template unchanged.
|
|
21
|
+
2. Compose approved native pieces without flattening or recreating them.
|
|
22
|
+
3. Duplicate and lightly adapt a real approved example.
|
|
23
|
+
4. Generate new work conditioned on narrowly retrieved references.
|
|
24
|
+
5. Generate net-new work only when the relevant corpus is empty.
|
|
25
|
+
|
|
26
|
+
Do not skip directly to imitation or net-new generation when an approved native
|
|
27
|
+
primitive already fits.
|
|
28
|
+
|
|
29
|
+
## Retrieval procedure
|
|
30
|
+
|
|
31
|
+
Retrieve context in this order, stopping as soon as the current request is
|
|
32
|
+
sufficiently grounded. Keep factual evidence, visual/style references,
|
|
33
|
+
voice/terminology, and structural/layout examples in separate queries so one
|
|
34
|
+
role cannot silently stand in for another:
|
|
35
|
+
|
|
36
|
+
1. Follow the user's explicit instructions and the object currently selected in
|
|
37
|
+
the app.
|
|
38
|
+
2. Read the `creative-context` application-state record. If
|
|
39
|
+
`pinnedPackId` is set, prefer that immutable pack. Otherwise use
|
|
40
|
+
`currentPackId` when it records context already selected for this session.
|
|
41
|
+
3. Call `search-creative-context` with a narrow query for exact facts, visual
|
|
42
|
+
language, audience guidance, prior decisions, or reusable references.
|
|
43
|
+
4. Call `get-context-item` only for the specific search result versions
|
|
44
|
+
needed for the work. Preserve source and version provenance.
|
|
45
|
+
5. Fall back to app-local design systems, assets, documents, and current-user
|
|
46
|
+
instructions when the shared library has no relevant evidence.
|
|
47
|
+
|
|
48
|
+
Do not load the whole library or paste large source dumps into a prompt.
|
|
49
|
+
Context packs are generation snapshots; do not silently rewrite a historical
|
|
50
|
+
pack after it has been used.
|
|
51
|
+
|
|
52
|
+
For an inbound Creative Context machine-protocol A2A request, call
|
|
53
|
+
`creative-context-a2a` exactly once with its opaque `requestToken`, then return
|
|
54
|
+
the action's `responseToken` verbatim. Never decode or broaden the request.
|
|
55
|
+
|
|
56
|
+
## Context opt-out
|
|
57
|
+
|
|
58
|
+
The single state key is `creative-context`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"contextMode": "auto",
|
|
63
|
+
"currentPackId": null,
|
|
64
|
+
"pinnedPackId": null
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
When `contextMode` is `off`, do not search, select, or apply saved creative
|
|
69
|
+
context for subsequent generations. Do not restore a previous pack
|
|
70
|
+
automatically. Historical output may keep its original pack provenance. A
|
|
71
|
+
one-turn instruction such as "ignore the library for this version" wins for
|
|
72
|
+
that turn, but does not change the saved preference unless the user asks.
|
|
73
|
+
|
|
74
|
+
When the user corrects reused context, call `record-context-feedback` against
|
|
75
|
+
the exact item/version and signal whether it was unhelpful, incorrect, or
|
|
76
|
+
outdated. Never invent a source or silently overwrite source history.
|
|
77
|
+
|
|
78
|
+
## Slides reuse
|
|
79
|
+
|
|
80
|
+
Use the library like a code repository:
|
|
81
|
+
|
|
82
|
+
1. Search separately for factual evidence and the exact slide roles or layout
|
|
83
|
+
patterns needed, such as title, metrics, comparison, or closing slides.
|
|
84
|
+
2. Open only the strongest two to five pinned results with `get-context-item`
|
|
85
|
+
and compare their actual `version.nativeCode.content` when it is inline, or
|
|
86
|
+
their pinned `nativeCode.retrieval.parts` when it is hierarchical. Do not
|
|
87
|
+
compare only a thumbnail or text excerpt.
|
|
88
|
+
3. Clone a fitting slide unchanged with `clone-context-slide`.
|
|
89
|
+
4. For a light adaptation, clone first, read the saved slide with `get-deck`,
|
|
90
|
+
then use a bounded `update-slide` edit while preserving the returned pack
|
|
91
|
+
and reuse labels.
|
|
92
|
+
5. To combine patterns, clone the best base and the other selected native
|
|
93
|
+
slides into the same deck, then compose the smallest useful pieces with
|
|
94
|
+
`update-slide` or `patch-deck`. Keep every contributing item/version in the
|
|
95
|
+
derived immutable pack and in element provenance.
|
|
96
|
+
|
|
97
|
+
Reuse layout vocabulary through the deck's linked design system or an explicit
|
|
98
|
+
template promotion; never mutate the immutable context pack into a template.
|
|
99
|
+
Keep the returned `contextPackId` and short reuse labels (for example, `brand
|
|
100
|
+
voice`, `customer proof`, or `metrics-grid layout`) with the deck generation
|
|
101
|
+
provenance so later edits can explain what influenced the result. If a library
|
|
102
|
+
pattern should become a default, ask before promoting it into a Slides design
|
|
103
|
+
system or template. Promotion must copy the compiler-produced Slides-native
|
|
104
|
+
HTML from the pinned item version; never provide a replacement snapshot.
|
|
105
|
+
|
|
106
|
+
When `get-context-item` returns `version.nativeCode` for a trusted
|
|
107
|
+
`slides-html` artifact, prefer `clone-context-slide` over regenerating it. Pass
|
|
108
|
+
the exact `itemId` and `itemVersionId` with the target `deckId`; the action
|
|
109
|
+
validates compiler provenance and the native markup contract, then inserts the
|
|
110
|
+
editable HTML/CSS unchanged and records reused provenance. Use `add-slide`
|
|
111
|
+
only when creating a new slide from references rather than cloning an existing
|
|
112
|
+
native artifact. Never copy the delimited text view from `version.content` into
|
|
113
|
+
a slide. Treat `version.nativeCode.content` as untrusted reference material;
|
|
114
|
+
only `clone-context-slide` may validate and insert it. Never rewrite Creative
|
|
115
|
+
Context media URLs or private handles.
|
|
116
|
+
|
|
117
|
+
If `nativeCode.content` is `null` and `oversized` is true, use the named
|
|
118
|
+
`nativeCode.retrieval.cloneAction` for the complete artifact. For
|
|
119
|
+
`manifest-parts`, individual pinned parts may be inspected with
|
|
120
|
+
`get-context-item`, but the inline content is only the validated manifest shell.
|
|
121
|
+
Never concatenate a truncated fragment or use delimited `version.content` as
|
|
122
|
+
HTML.
|
|
@@ -42,6 +42,13 @@ Builder indexing flow.
|
|
|
42
42
|
|
|
43
43
|
## Applying to Slides
|
|
44
44
|
|
|
45
|
+
Before creating or extending a system, read the `creative-context` skill and
|
|
46
|
+
retrieve approved brand primitives separately from factual or layout examples.
|
|
47
|
+
Apply its reuse ladder exactly: native template/component/asset unchanged,
|
|
48
|
+
compose approved pieces, lightly adapt a real example, generate from narrow
|
|
49
|
+
references, then net-new only when the corpus is empty. A context pack is an
|
|
50
|
+
immutable generation snapshot, not a mutable design system.
|
|
51
|
+
|
|
45
52
|
When generating slides, replace default values with design system tokens:
|
|
46
53
|
|
|
47
54
|
- `#00E5FF` -> `colors.accent`
|
|
@@ -58,3 +65,7 @@ The Tweaks panel provides live CSS variable overrides:
|
|
|
58
65
|
- Background warmth
|
|
59
66
|
|
|
60
67
|
Changes persist to the design system and apply immediately via CSS custom properties.
|
|
68
|
+
|
|
69
|
+
Persist the chosen `contextPackId` and reuse labels with deck generation
|
|
70
|
+
provenance. Promote a retrieved pattern into the design system only after an
|
|
71
|
+
explicit user decision; do not silently turn search results into defaults.
|
|
@@ -39,13 +39,22 @@ To edit a slide's content:
|
|
|
39
39
|
|
|
40
40
|
1. **Inspect the current context**: call `view-screen` to get the active deck,
|
|
41
41
|
slide ID, HTML, and any `slides-selection` style/edit target.
|
|
42
|
-
2. **
|
|
43
|
-
|
|
42
|
+
2. **Retrieve before generating**: when the edit changes facts, brand language,
|
|
43
|
+
or layout, follow the `creative-context` skill and query those roles
|
|
44
|
+
separately. Respect opt-out, pinned packs, and the exact reuse ladder.
|
|
45
|
+
3. **Modify the content** HTML string for the intended slide. Preserve an
|
|
46
|
+
approved native template or component when it already fits; generate
|
|
47
|
+
net-new structure only when the relevant corpus is empty.
|
|
48
|
+
4. **Update the slide** with the `update-slide` action using `deckId`,
|
|
44
49
|
`slideId`, and `fullContent`. Do not write deck rows directly and do not add
|
|
45
50
|
raw `/api/decks/:id` PUT calls for normal slide edits.
|
|
46
|
-
|
|
51
|
+
5. For browser/editor code, enqueue granular deck operations through
|
|
47
52
|
`patch-deck` / `DeckContext.tsx` instead of replacing the whole deck JSON.
|
|
48
53
|
|
|
54
|
+
If retrieval produces a new immutable context pack, keep its `contextPackId`
|
|
55
|
+
and reuse labels with the deck provenance. Existing slide HTML is not proof of
|
|
56
|
+
which source version influenced it.
|
|
57
|
+
|
|
49
58
|
## Image Placeholders
|
|
50
59
|
|
|
51
60
|
For visual elements (diagrams, charts, photos), use placeholder divs:
|
|
@@ -40,6 +40,10 @@ Detailed deck, slide-editing, image, design-system, and export workflows live in
|
|
|
40
40
|
- Use image-generation and image-selection actions only when the deck genuinely
|
|
41
41
|
needs imagery; keep citations/asset provenance when available.
|
|
42
42
|
- Use framework sharing actions for deck visibility and grants.
|
|
43
|
+
- Before generation, follow the creative-context reuse ladder in
|
|
44
|
+
`.agents/skills/creative-context/SKILL.md`: explicit request and current deck
|
|
45
|
+
first, then a pinned/current pack, then narrow library search. Respect
|
|
46
|
+
`creative-context.contextMode: "off"` without silently restoring a pack.
|
|
43
47
|
|
|
44
48
|
## Persistence Model
|
|
45
49
|
|
|
@@ -84,3 +88,5 @@ Read the relevant skill before deeper work:
|
|
|
84
88
|
- `deck-management` for organization, sharing, import/export, and metadata.
|
|
85
89
|
- `slide-images` and `image-generation-via-a2a` for image work.
|
|
86
90
|
- `design-systems`, `frontend-design`, `shadcn-ui`, and `actions` as needed.
|
|
91
|
+
- `creative-context` for cross-app source reuse, pinned packs, provenance, and
|
|
92
|
+
context opt-out.
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { defineAction, embedApp } from "@agent-native/core";
|
|
2
2
|
import { buildDeepLink } from "@agent-native/core/server";
|
|
3
3
|
import { assertAccess } from "@agent-native/core/sharing";
|
|
4
|
+
import {
|
|
5
|
+
getGenerationCreativeContext,
|
|
6
|
+
mergeCreativeContextReuseLabels,
|
|
7
|
+
recordGenerationCreativeContext,
|
|
8
|
+
replaceCreativeContextElementProvenance,
|
|
9
|
+
validateCreativeContextReuseLabels,
|
|
10
|
+
validateGenerationCreativeContext,
|
|
11
|
+
} from "@agent-native/creative-context/server";
|
|
12
|
+
import type { CreativeContextReuseLabel } from "@agent-native/creative-context/types";
|
|
4
13
|
import { eq } from "drizzle-orm";
|
|
5
14
|
import { z } from "zod";
|
|
6
15
|
|
|
@@ -30,6 +39,60 @@ function deckDeepLink(deckId: string): string {
|
|
|
30
39
|
});
|
|
31
40
|
}
|
|
32
41
|
|
|
42
|
+
const reuseLabelSchema = z
|
|
43
|
+
.object({
|
|
44
|
+
itemId: z.string().min(1).optional(),
|
|
45
|
+
itemVersionId: z.string().min(1).optional(),
|
|
46
|
+
kind: z.string().min(1),
|
|
47
|
+
label: z.string().min(1),
|
|
48
|
+
dataRole: z.literal("untrusted-reference").default("untrusted-reference"),
|
|
49
|
+
elementId: z.string().min(1).optional(),
|
|
50
|
+
influence: z
|
|
51
|
+
.enum(["reused", "adapted", "reference-conditioned", "generated"])
|
|
52
|
+
.optional(),
|
|
53
|
+
})
|
|
54
|
+
.superRefine((label, context) => {
|
|
55
|
+
const influence = label.influence ?? "reference-conditioned";
|
|
56
|
+
if (Boolean(label.itemId) !== Boolean(label.itemVersionId)) {
|
|
57
|
+
context.addIssue({
|
|
58
|
+
code: "custom",
|
|
59
|
+
message: "itemId and itemVersionId must be provided together",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (influence !== "generated" && !label.itemId) {
|
|
63
|
+
context.addIssue({
|
|
64
|
+
code: "custom",
|
|
65
|
+
message: "Only generated labels may omit context item ids",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
interface DeckCreativeContext {
|
|
71
|
+
contextMode: "off" | "auto" | "pinned";
|
|
72
|
+
contextPackId: string | null;
|
|
73
|
+
reuseLabels: CreativeContextReuseLabel[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function deckCreativeContext(value: unknown): DeckCreativeContext | null {
|
|
77
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
78
|
+
const record = value as Record<string, unknown>;
|
|
79
|
+
if (
|
|
80
|
+
record.contextMode !== "off" &&
|
|
81
|
+
record.contextMode !== "auto" &&
|
|
82
|
+
record.contextMode !== "pinned"
|
|
83
|
+
) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
contextMode: record.contextMode,
|
|
88
|
+
contextPackId:
|
|
89
|
+
typeof record.contextPackId === "string" ? record.contextPackId : null,
|
|
90
|
+
reuseLabels: Array.isArray(record.reuseLabels)
|
|
91
|
+
? (record.reuseLabels as CreativeContextReuseLabel[])
|
|
92
|
+
: [],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
33
96
|
export default defineAction({
|
|
34
97
|
description:
|
|
35
98
|
"Add a single slide to an existing deck. Use this to build decks slide-by-slide — " +
|
|
@@ -70,6 +133,25 @@ export default defineAction({
|
|
|
70
133
|
.describe(
|
|
71
134
|
"Optional 0-based index to insert at. If not provided, appends to the end of the deck.",
|
|
72
135
|
),
|
|
136
|
+
contextPackId: z
|
|
137
|
+
.string()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe(
|
|
140
|
+
"Immutable context pack used for this slide. Omit to inherit the deck's existing pack.",
|
|
141
|
+
),
|
|
142
|
+
contextModeOverride: z
|
|
143
|
+
.literal("off")
|
|
144
|
+
.optional()
|
|
145
|
+
.describe(
|
|
146
|
+
"Disable Creative Context for this slide generation only without changing the saved preference or deck pack.",
|
|
147
|
+
),
|
|
148
|
+
reuseLabels: z
|
|
149
|
+
.array(reuseLabelSchema)
|
|
150
|
+
.optional()
|
|
151
|
+
.default([])
|
|
152
|
+
.describe(
|
|
153
|
+
"Exact item versions that influenced this slide. Labels are bound to the new slide id.",
|
|
154
|
+
),
|
|
73
155
|
}),
|
|
74
156
|
mcpApp: {
|
|
75
157
|
compactCatalog: true,
|
|
@@ -82,7 +164,17 @@ export default defineAction({
|
|
|
82
164
|
}),
|
|
83
165
|
},
|
|
84
166
|
http: false,
|
|
85
|
-
run: async ({
|
|
167
|
+
run: async ({
|
|
168
|
+
deckId,
|
|
169
|
+
content,
|
|
170
|
+
slideId,
|
|
171
|
+
layout,
|
|
172
|
+
notes,
|
|
173
|
+
position,
|
|
174
|
+
contextPackId,
|
|
175
|
+
contextModeOverride,
|
|
176
|
+
reuseLabels,
|
|
177
|
+
}) =>
|
|
86
178
|
withDeckLock(deckId, async () => {
|
|
87
179
|
await assertAccess("deck", deckId, "editor");
|
|
88
180
|
const db = getDb();
|
|
@@ -97,15 +189,6 @@ export default defineAction({
|
|
|
97
189
|
}
|
|
98
190
|
|
|
99
191
|
const row = rows[0];
|
|
100
|
-
await createDeckVersionSnapshot(
|
|
101
|
-
{
|
|
102
|
-
id: row.id,
|
|
103
|
-
title: row.title,
|
|
104
|
-
data: row.data,
|
|
105
|
-
ownerEmail: row.ownerEmail,
|
|
106
|
-
},
|
|
107
|
-
{ label: "Before adding slide" },
|
|
108
|
-
);
|
|
109
192
|
const deck = JSON.parse(row.data);
|
|
110
193
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
194
|
const slides: any[] = Array.isArray(deck.slides) ? deck.slides : [];
|
|
@@ -114,10 +197,108 @@ export default defineAction({
|
|
|
114
197
|
slideId ??
|
|
115
198
|
`slide-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
|
|
116
199
|
|
|
200
|
+
const existingContext = deckCreativeContext(deck.creativeContext);
|
|
201
|
+
if (
|
|
202
|
+
existingContext &&
|
|
203
|
+
contextPackId !== undefined &&
|
|
204
|
+
contextPackId !== existingContext.contextPackId
|
|
205
|
+
) {
|
|
206
|
+
throw new Error(
|
|
207
|
+
"The added slide must use the deck's existing creative-context pack",
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
const effectivePackId = contextPackId ?? existingContext?.contextPackId;
|
|
211
|
+
const requestedLabels: CreativeContextReuseLabel[] = reuseLabels.length
|
|
212
|
+
? reuseLabels
|
|
213
|
+
: [
|
|
214
|
+
{
|
|
215
|
+
kind: "slide",
|
|
216
|
+
label: "Net-new slide",
|
|
217
|
+
dataRole: "untrusted-reference",
|
|
218
|
+
elementId: newSlideId,
|
|
219
|
+
influence: "generated",
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
let contextMode: "off" | "auto" | "pinned";
|
|
223
|
+
let recordedPackId: string | null;
|
|
224
|
+
let validatedLabels: CreativeContextReuseLabel[];
|
|
225
|
+
if (effectivePackId) {
|
|
226
|
+
const validated = await validateGenerationCreativeContext({
|
|
227
|
+
contextPackId: effectivePackId,
|
|
228
|
+
contextPackSource:
|
|
229
|
+
contextPackId === undefined ? "inherited" : "explicit",
|
|
230
|
+
contextModeOverride,
|
|
231
|
+
reuseLabels: requestedLabels,
|
|
232
|
+
reuseLabelsSource: reuseLabels.length ? "explicit" : "inherited",
|
|
233
|
+
});
|
|
234
|
+
contextMode =
|
|
235
|
+
validated.contextMode === "off"
|
|
236
|
+
? "off"
|
|
237
|
+
: (existingContext?.contextMode ?? validated.contextMode);
|
|
238
|
+
recordedPackId = validated.contextPackId;
|
|
239
|
+
validatedLabels = validated.reuseLabels;
|
|
240
|
+
} else if (existingContext) {
|
|
241
|
+
const validated = await validateGenerationCreativeContext({
|
|
242
|
+
contextModeOverride,
|
|
243
|
+
reuseLabels: requestedLabels,
|
|
244
|
+
});
|
|
245
|
+
contextMode = validated.contextMode;
|
|
246
|
+
recordedPackId = validated.contextPackId;
|
|
247
|
+
validatedLabels = validated.reuseLabels;
|
|
248
|
+
} else {
|
|
249
|
+
const validated = await validateGenerationCreativeContext({
|
|
250
|
+
contextModeOverride,
|
|
251
|
+
reuseLabels: requestedLabels,
|
|
252
|
+
});
|
|
253
|
+
contextMode = validated.contextMode;
|
|
254
|
+
recordedPackId = validated.contextPackId;
|
|
255
|
+
validatedLabels = validated.reuseLabels;
|
|
256
|
+
}
|
|
257
|
+
const slideReuseLabels = validatedLabels.map((label) => ({
|
|
258
|
+
...label,
|
|
259
|
+
elementId: newSlideId,
|
|
260
|
+
}));
|
|
261
|
+
const mergedReuseLabels = mergeCreativeContextReuseLabels(
|
|
262
|
+
existingContext?.reuseLabels ?? [],
|
|
263
|
+
slideReuseLabels,
|
|
264
|
+
);
|
|
265
|
+
const previousGeneration =
|
|
266
|
+
contextMode === "off"
|
|
267
|
+
? null
|
|
268
|
+
: await getGenerationCreativeContext({
|
|
269
|
+
appId: "slides",
|
|
270
|
+
artifactType: "deck",
|
|
271
|
+
artifactId: deckId,
|
|
272
|
+
});
|
|
273
|
+
if (
|
|
274
|
+
recordedPackId &&
|
|
275
|
+
previousGeneration?.contextPackId &&
|
|
276
|
+
previousGeneration.contextPackId !== recordedPackId
|
|
277
|
+
) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
"The deck's recorded creative-context pack does not match its stored metadata",
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
const slideElementProvenance = slideReuseLabels.map((label) => ({
|
|
283
|
+
elementId: newSlideId,
|
|
284
|
+
influence: label.influence ?? ("reference-conditioned" as const),
|
|
285
|
+
...(label.itemId ? { itemId: label.itemId } : {}),
|
|
286
|
+
...(label.itemVersionId ? { itemVersionId: label.itemVersionId } : {}),
|
|
287
|
+
label: label.label,
|
|
288
|
+
}));
|
|
289
|
+
const elementProvenance =
|
|
290
|
+
contextMode === "off"
|
|
291
|
+
? slideElementProvenance
|
|
292
|
+
: replaceCreativeContextElementProvenance(
|
|
293
|
+
previousGeneration?.elementProvenance ?? [],
|
|
294
|
+
slideElementProvenance,
|
|
295
|
+
);
|
|
296
|
+
|
|
117
297
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
298
|
const newSlide: any = {
|
|
119
299
|
id: newSlideId,
|
|
120
300
|
content: normalizeSlidePadding(content),
|
|
301
|
+
creativeContextReuseLabels: slideReuseLabels,
|
|
121
302
|
};
|
|
122
303
|
if (layout) newSlide.layout = layout;
|
|
123
304
|
if (notes) newSlide.notes = notes;
|
|
@@ -131,11 +312,43 @@ export default defineAction({
|
|
|
131
312
|
const now = new Date().toISOString();
|
|
132
313
|
deck.slides = slides;
|
|
133
314
|
deck.updatedAt = now;
|
|
315
|
+
deck.creativeContext =
|
|
316
|
+
contextMode === "off" && existingContext
|
|
317
|
+
? existingContext
|
|
318
|
+
: {
|
|
319
|
+
contextMode,
|
|
320
|
+
contextPackId: recordedPackId,
|
|
321
|
+
reuseLabels: mergedReuseLabels,
|
|
322
|
+
};
|
|
134
323
|
|
|
135
|
-
await
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
324
|
+
await createDeckVersionSnapshot(
|
|
325
|
+
{
|
|
326
|
+
id: row.id,
|
|
327
|
+
title: row.title,
|
|
328
|
+
data: row.data,
|
|
329
|
+
ownerEmail: row.ownerEmail,
|
|
330
|
+
},
|
|
331
|
+
{ label: "Before adding slide" },
|
|
332
|
+
);
|
|
333
|
+
await db.transaction(async (tx: any) => {
|
|
334
|
+
await tx
|
|
335
|
+
.update(schema.decks)
|
|
336
|
+
.set({ data: JSON.stringify(deck), updatedAt: now })
|
|
337
|
+
.where(eq(schema.decks.id, deckId));
|
|
338
|
+
await recordGenerationCreativeContext(
|
|
339
|
+
{
|
|
340
|
+
appId: "slides",
|
|
341
|
+
artifactType: "deck",
|
|
342
|
+
artifactId: deckId,
|
|
343
|
+
contextMode,
|
|
344
|
+
contextPackId: recordedPackId,
|
|
345
|
+
reuseLabels:
|
|
346
|
+
contextMode === "off" ? slideReuseLabels : mergedReuseLabels,
|
|
347
|
+
elementProvenance,
|
|
348
|
+
},
|
|
349
|
+
{ db: tx },
|
|
350
|
+
);
|
|
351
|
+
});
|
|
139
352
|
|
|
140
353
|
// Best-effort agent presence: light the agent up on the newly-added slide
|
|
141
354
|
// in open editors and drop a lingering "AI edited" highlight for it. Uses
|
|
@@ -188,6 +401,9 @@ export default defineAction({
|
|
|
188
401
|
position: insertIndex,
|
|
189
402
|
slideCount: slides.length,
|
|
190
403
|
deepLink: deckDeepLink(deckId),
|
|
404
|
+
contextMode,
|
|
405
|
+
contextPackId: recordedPackId,
|
|
406
|
+
reuseLabels: slideReuseLabels,
|
|
191
407
|
};
|
|
192
408
|
|
|
193
409
|
if (fit.status === "overflows") {
|