@agent-native/core 0.149.1 → 0.149.3
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 +1 -1
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/analytics/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/analytics/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/analytics/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/analytics/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/analytics/.agents/skills/creative-context/SKILL.md +4 -2
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +2 -0
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/analytics/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/analytics/AGENTS.md +25 -32
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +150 -46
- package/corpus/templates/analytics/app/global.css +1 -1
- package/corpus/templates/analytics/app/i18n-data.ts +37 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +32 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +2 -0
- package/corpus/templates/analytics/changelog/2026-08-10-dashboard-tables-can-be-copied-and-sorted-by-multiple-column.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/assets/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/assets/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/assets/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/assets/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +4 -2
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/assets/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/assets/AGENTS.md +6 -9
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/assets/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/assets/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/brain/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/brain/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/brain/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/brain/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/brain/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/brain/AGENTS.md +5 -12
- package/corpus/templates/brain/app/global.css +1 -1
- package/corpus/templates/brain/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/brain/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/calendar/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/calendar/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/calendar/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/calendar/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/calendar/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/calendar/AGENTS.md +8 -9
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/chat/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/chat/AGENTS.md +32 -80
- package/corpus/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/clips/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/clips/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/clips/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/clips/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/clips/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/clips/AGENTS.md +25 -31
- package/corpus/templates/clips/changelog/2026-08-10-clips-desktop-sign-in-now-starts-with-magic-links-and-google.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.css +1 -0
- package/corpus/templates/clips/desktop/src/app.tsx +274 -137
- package/corpus/templates/clips/desktop/src/styles.css +35 -0
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/content/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/content/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/content/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/content/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +4 -2
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/content/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/content/AGENTS.md +5 -9
- package/corpus/templates/content/app/global.css +1 -0
- package/corpus/templates/crm/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/crm/AGENTS.md +7 -11
- package/corpus/templates/crm/app/global.css +1 -1
- package/corpus/templates/crm/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/crm/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/design/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/design/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/design/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/design/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +4 -2
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/design/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +70 -3
- package/corpus/templates/design/AGENTS.md +13 -21
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -0
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +19 -2
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +115 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +82 -7
- package/corpus/templates/design/app/components/design/design-trace.ts +120 -0
- package/corpus/templates/design/app/components/design/dnd-debug.ts +2 -1
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +40 -26
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +4 -1
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +12 -3
- package/corpus/templates/design/app/components/design/multi-screen/screen-content-cache.ts +4 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +7 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +3 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +1 -0
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +5 -5
- package/corpus/templates/design/app/pages/DesignSystems.tsx +3 -2
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +100 -13
- package/corpus/templates/design/app/pages/design-editor/cross-screen-text-color.ts +1 -1
- package/corpus/templates/design/app/pages/design-editor/data-operations.ts +14 -0
- package/corpus/templates/design/changelog/2026-08-10-marquee-selecting-layers-far-down-a-tall-screen-now-selects-.md +6 -0
- package/corpus/templates/design/changelog/2026-08-10-the-frame-tool-draws-a-plain-frame-by-default-with-screen-av.md +6 -0
- package/corpus/templates/design/e2e/global-setup.ts +27 -32
- package/corpus/templates/design/playwright.config.ts +3 -5
- package/corpus/templates/design/shared/breakpoint-media.ts +9 -2
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/dispatch/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/dispatch/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/dispatch/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/dispatch/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/dispatch/AGENTS.md +9 -16
- package/corpus/templates/dispatch/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/factory/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/factory/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/factory/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/factory/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/factory/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/factory/AGENTS.md +10 -24
- package/corpus/templates/factory/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/forms/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/forms/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/forms/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/forms/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/forms/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/forms/AGENTS.md +11 -17
- package/corpus/templates/forms/app/global.css +1 -0
- package/corpus/templates/forms/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/forms/changelog/2026-08-11-full-page-chat-composers-stay-at-a-focused-750px-width.md +6 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/macros/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/macros/AGENTS.md +8 -8
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/mail/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/mail/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/mail/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/mail/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/mail/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/mail/AGENTS.md +5 -6
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/plan/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/plan/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/plan/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/plan/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/plan/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/plan/AGENTS.md +5 -14
- package/corpus/templates/plan/app/global.css +1 -0
- package/corpus/templates/plan/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/corpus/templates/plan/changelog/2026-08-11-plan-no-longer-reloads-when-runtime-state-changes.md +6 -0
- package/corpus/templates/plan/server/ui-plan-html.ts +4 -1
- package/corpus/templates/plan/vite.config.ts +5 -0
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/slides/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/slides/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/slides/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +2 -2
- package/corpus/templates/slides/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +6 -3
- package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +6 -1
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/slides/.agents/skills/image-generation-via-a2a/SKILL.md +3 -2
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -0
- package/corpus/templates/slides/.agents/skills/slide-images/SKILL.md +3 -3
- package/corpus/templates/slides/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/slides/AGENTS.md +33 -35
- package/corpus/templates/slides/actions/add-deck.ts +2 -0
- package/corpus/templates/slides/actions/add-slide.ts +15 -1
- package/corpus/templates/slides/actions/create-deck.ts +18 -6
- package/corpus/templates/slides/actions/get-deck-reference-context.ts +2 -2
- package/corpus/templates/slides/actions/get-deck.ts +83 -7
- package/corpus/templates/slides/actions/import-file.ts +2 -1
- package/corpus/templates/slides/actions/patch-deck.ts +165 -9
- package/corpus/templates/slides/actions/save-deck.ts +24 -1
- package/corpus/templates/slides/actions/update-slide.ts +1 -1
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +2 -2
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +1 -23
- package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +2 -2
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +6 -6
- package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +3 -3
- package/corpus/templates/slides/app/components/editor/DeckEditorSkeleton.tsx +4 -4
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +432 -668
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +296 -259
- package/corpus/templates/slides/app/components/editor/GeneratingSlidePreview.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/GoogleDriveConnectionCta.tsx +13 -1
- package/corpus/templates/slides/app/components/editor/NewDeckReferenceStep.tsx +56 -174
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +241 -116
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +42 -14
- package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +6 -12
- package/corpus/templates/slides/app/components/editor/editor-command-model.ts +35 -0
- package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +1 -1
- package/corpus/templates/slides/app/components/layout/Layout.tsx +34 -35
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +8 -10
- package/corpus/templates/slides/app/components/layout/layout-route-policy.ts +2 -5
- package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +45 -40
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +63 -16
- package/corpus/templates/slides/app/context/DeckContext.tsx +2 -1
- package/corpus/templates/slides/app/global.css +76 -1
- package/corpus/templates/slides/app/hooks/use-generating-slide-preview.ts +25 -3
- package/corpus/templates/slides/app/i18n/en-US.ts +2 -0
- package/corpus/templates/slides/app/lib/create-deck-generation.ts +52 -23
- package/corpus/templates/slides/app/lib/recent-references.ts +23 -1
- package/corpus/templates/slides/app/lib/slide-animation-elements.ts +104 -3
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +17 -33
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +2 -2
- package/corpus/templates/slides/app/pages/Index.tsx +315 -151
- package/corpus/templates/slides/app/root.tsx +43 -0
- package/corpus/templates/slides/changelog/2026-08-10-ai-editing-avatar-badge.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-generated-decks-keep-a-clear-human-readable-title.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-new-deck-creation-now-shows-progress-opens-the-editor-direct.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-presentation-reveals-now-follow-valid-targets.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-slides-editing-controls-are-consolidated-into-one-focused-me.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-slides-now-verify-and-restyle-every-imported-slide-in-one-pa.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-slides-only-suggests-a-google-connection-for-relevant-reques.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-10-the-google-slides-import-option-is-now-labeled-slides.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-11-faster-slides-chat-deck-reads.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-11-slides-chat-can-read-one-slide-without-loading-the-full-deck.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-11-slides-clearly-indicate-when-an-ai-agent-is-editing-alongsid.md +6 -0
- package/corpus/templates/slides/package.json +1 -0
- package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
- package/corpus/templates/slides/server/lib/validate-slide-animations.ts +163 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +8 -5
- package/corpus/templates/slides/shared/api.ts +47 -15
- package/corpus/templates/slides/shared/deck-title.ts +135 -0
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +54 -488
- package/corpus/templates/tasks/.agents/skills/actions/references/action-fields.md +136 -0
- package/corpus/templates/tasks/.agents/skills/actions/references/examples.md +94 -0
- package/corpus/templates/tasks/.agents/skills/actions/references/provider-apis.md +95 -0
- package/corpus/templates/tasks/.agents/skills/agent-watchdog/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/create-skill/SKILL.md +9 -35
- package/corpus/templates/tasks/.agents/skills/efficient-fable/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/efficient-frontier/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +4 -5
- package/corpus/templates/tasks/.agents/skills/plan-arbiter/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/plow-ahead/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/quick-recap/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/read-the-damn-docs/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/stay-within-limits/SKILL.md +1 -0
- package/corpus/templates/tasks/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/corpus/templates/tasks/AGENTS.md +5 -20
- package/corpus/templates/tasks/app/components/tasks/TaskListRow.tsx +4 -1
- package/dist/agent/engine/ai-sdk-engine.js +1 -1
- package/dist/agent/production-agent.d.ts +21 -1
- package/dist/agent/production-agent.js +505 -355
- package/dist/agent/run-manager.js +156 -14
- package/dist/agent/run-store.d.ts +11 -10
- package/dist/agent/run-store.js +17 -13
- package/dist/agent/tool-approval-store.d.ts +18 -0
- package/dist/agent/tool-approval-store.js +122 -0
- package/dist/agent/types.d.ts +1 -1
- package/dist/cli/code-agent-executor.js +11 -2
- package/dist/client/AgentPanel.js +31 -6
- package/dist/client/AssistantChat.d.ts +9 -4
- package/dist/client/AssistantChat.js +221 -149
- package/dist/client/active-run-state.d.ts +9 -1
- package/dist/client/active-run-state.js +34 -3
- package/dist/client/agent-chat/index.d.ts +1 -1
- package/dist/client/agent-chat-adapter.d.ts +8 -0
- package/dist/client/agent-chat-adapter.js +125 -28
- package/dist/client/agent-chat.d.ts +1 -1
- package/dist/client/chat/markdown-renderer.js +14 -2
- package/dist/client/chat/message-components.d.ts +13 -3
- package/dist/client/chat/message-components.js +57 -52
- package/dist/client/chat/run-recovery.d.ts +1 -0
- package/dist/client/chat/run-recovery.js +8 -0
- package/dist/client/chat/tool-call-display.d.ts +5 -5
- package/dist/client/chat/tool-call-display.js +9 -212
- package/dist/client/chat-first/apps-rail.js +3 -3
- package/dist/client/chat-first/browser-pane.js +4 -1
- package/dist/client/chat-first/chat-history.d.ts +3 -1
- package/dist/client/chat-first/chat-history.js +7 -4
- package/dist/client/chat-first/surface-tabs.d.ts +1 -1
- package/dist/client/chat-first/surface-tabs.js +52 -41
- package/dist/client/chat-first/types.d.ts +3 -0
- package/dist/client/chat-first.d.ts +10 -0
- package/dist/client/chat-first.js +37 -2
- package/dist/client/components/ui/message-scroller.js +4 -1
- package/dist/client/i18n.js +3 -1
- package/dist/client/resources/McpConnectionSuggestion.js +9 -1
- package/dist/client/sse-event-processor.d.ts +4 -2
- package/dist/client/sse-event-processor.js +46 -6
- package/dist/client/use-chat-models.js +156 -80
- package/dist/client/use-run-stuck-detection.d.ts +2 -0
- package/dist/client/use-run-stuck-detection.js +85 -9
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/integrations/adapters/slack.d.ts +0 -4
- package/dist/integrations/adapters/slack.js +6 -30
- package/dist/integrations/catalog.js +1 -1
- package/dist/integrations/pending-tasks-store.d.ts +0 -8
- package/dist/integrations/pending-tasks-store.js +0 -21
- package/dist/integrations/slack-manifest.d.ts +2 -2
- package/dist/integrations/slack-manifest.js +0 -3
- package/dist/integrations/webhook-handler.js +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
- package/dist/provider-api/actions/provider-api.d.ts +8 -8
- package/dist/scripts/docs/source-search.js +2 -2
- package/dist/server/agent-chat/framework-prompts.js +7 -2
- package/dist/server/agent-chat/prompt-resources.js +2 -2
- package/dist/server/agent-chat/skill-frontmatter.d.ts +31 -2
- package/dist/server/agent-chat/skill-frontmatter.js +41 -15
- package/dist/server/agent-chat-plugin.js +3 -3
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agents-bundle.d.ts +16 -19
- package/dist/server/agents-bundle.js +19 -35
- package/dist/server/auth.js +262 -31
- package/dist/server/better-auth-instance.d.ts +1 -0
- package/dist/server/better-auth-instance.js +17 -2
- package/dist/server/onboarding-html.js +56 -9
- package/dist/server/prompts/framework-core-compact.d.ts +6 -1
- package/dist/server/prompts/framework-core-compact.js +12 -9
- package/dist/server/prompts/framework-core.d.ts +6 -1
- package/dist/server/prompts/framework-core.js +11 -9
- package/dist/server/prompts/index.d.ts +1 -1
- package/dist/server/prompts/index.js +1 -1
- package/dist/server/prompts/shared-rules.d.ts +15 -11
- package/dist/server/prompts/shared-rules.js +17 -13
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/shared/reasoning-effort.d.ts +8 -8
- package/dist/shared/reasoning-effort.js +10 -10
- package/dist/shared/streaming-text-smoothing.js +41 -11
- package/dist/styles/agent-native.css +19 -32
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +54 -488
- package/dist/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
- package/dist/templates/chat/.agents/skills/actions/references/examples.md +94 -0
- package/dist/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
- package/dist/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
- package/dist/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/dist/templates/chat/AGENTS.md +32 -80
- package/dist/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +54 -488
- package/dist/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
- package/dist/templates/default/.agents/skills/actions/references/examples.md +94 -0
- package/dist/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
- package/dist/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
- package/dist/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +54 -488
- package/dist/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
- package/dist/templates/headless/.agents/skills/actions/references/examples.md +94 -0
- package/dist/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
- package/dist/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
- package/dist/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
- package/dist/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
- package/dist/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
- package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
- package/dist/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
- package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
- package/dist/templates/workspace-core/AGENTS.md +7 -16
- package/docs/content/messaging.mdx +6 -7
- package/docs/content/template-chat.mdx +1 -1
- package/package.json +2 -2
- package/src/templates/chat/.agents/skills/actions/SKILL.md +54 -488
- package/src/templates/chat/.agents/skills/actions/references/action-fields.md +136 -0
- package/src/templates/chat/.agents/skills/actions/references/examples.md +94 -0
- package/src/templates/chat/.agents/skills/actions/references/provider-apis.md +95 -0
- package/src/templates/chat/.agents/skills/create-skill/SKILL.md +9 -35
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +4 -5
- package/src/templates/chat/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/src/templates/chat/AGENTS.md +32 -80
- package/src/templates/chat/changelog/2026-08-10-full-page-chat-now-uses-the-available-width-up-to-1000px-for.md +6 -0
- package/src/templates/default/.agents/skills/actions/SKILL.md +54 -488
- package/src/templates/default/.agents/skills/actions/references/action-fields.md +136 -0
- package/src/templates/default/.agents/skills/actions/references/examples.md +94 -0
- package/src/templates/default/.agents/skills/actions/references/provider-apis.md +95 -0
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +9 -35
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +4 -5
- package/src/templates/default/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/src/templates/headless/.agents/skills/actions/SKILL.md +54 -488
- package/src/templates/headless/.agents/skills/actions/references/action-fields.md +136 -0
- package/src/templates/headless/.agents/skills/actions/references/examples.md +94 -0
- package/src/templates/headless/.agents/skills/actions/references/provider-apis.md +95 -0
- package/src/templates/headless/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +54 -488
- package/src/templates/workspace-core/.agents/skills/actions/references/action-fields.md +136 -0
- package/src/templates/workspace-core/.agents/skills/actions/references/examples.md +94 -0
- package/src/templates/workspace-core/.agents/skills/actions/references/provider-apis.md +95 -0
- package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +1 -0
- package/src/templates/workspace-core/.agents/skills/agent-page/SKILL.md +1 -0
- package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +9 -35
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +4 -5
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +21 -29
- package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +18 -31
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +7 -17
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +3 -3
- package/src/templates/workspace-core/AGENTS.md +7 -16
|
@@ -4,39 +4,42 @@ Slides is an agent-native deck editor. The agent creates, edits, imports,
|
|
|
4
4
|
exports, styles, shares, and navigates decks through actions and shared SQL
|
|
5
5
|
state.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
## Skills
|
|
8
|
+
|
|
9
|
+
Read the relevant skill before deeper work:
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
`
|
|
11
|
+
- `create-deck` for new decks, reference decks, workspace defaults, outlines.
|
|
12
|
+
- `slide-editing` for targeted slide changes; covers fit, density, and overflow.
|
|
13
|
+
- `deck-management` for organization, sharing, import/export, and metadata.
|
|
14
|
+
- `slide-images` and `image-generation-via-a2a` for image work.
|
|
15
|
+
- `design-systems` for per-source design-system actions.
|
|
16
|
+
- `creative-context` for cross-app source reuse, pinned packs, provenance, and
|
|
17
|
+
context opt-out.
|
|
18
|
+
- `analytics-data-for-decks` for delegated data requests.
|
|
12
19
|
|
|
13
20
|
## Core Rules
|
|
14
21
|
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Never hardcode API keys, tokens, webhook URLs, signing secrets, private Builder/internal data, customer data, or credential-looking literals. Use secrets/OAuth/runtime configuration and obvious placeholders in examples.
|
|
22
|
+
- Keep large files/blobs in configured file storage, not SQL, settings, or
|
|
23
|
+
resources; persist only URLs, ids, or handles.
|
|
24
|
+
- Never hardcode secrets or private/customer data; use vault/OAuth/runtime
|
|
25
|
+
configuration and fake placeholders in examples.
|
|
20
26
|
- Use actions for deck lifecycle, slide edits, imports, exports, images, design
|
|
21
|
-
systems, and sharing. Do not write deck/slide rows directly.
|
|
22
|
-
|
|
23
|
-
tools. Read the action schema if a parameter is unclear.
|
|
27
|
+
systems, and sharing. Do not write deck/slide rows directly. Read the action
|
|
28
|
+
schema if a parameter is unclear.
|
|
24
29
|
- Use `view-screen` before editing when the active deck, selected slide, or
|
|
25
30
|
current layout is unclear.
|
|
26
31
|
- Preserve deck structure and visual consistency. Prefer focused slide edits over
|
|
27
32
|
regenerating whole decks unless requested.
|
|
28
|
-
- When an uploaded PPTX or PDF
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
use `update-slide` for bounded visual edits and verify with `get-deck`.
|
|
33
|
+
- When improving an uploaded PPTX or PDF, import it into the target deck first.
|
|
34
|
+
Treat `sourceImport` as the source-of-truth contract: preserve slide count,
|
|
35
|
+
order, IDs, copy, notes, images, and positioned objects; verify with
|
|
36
|
+
`get-deck`.
|
|
33
37
|
- A source import with `fidelity: partial` or `imagesSkipped` is not safe to
|
|
34
38
|
restyle automatically. Report the exact warning rather than silently
|
|
35
39
|
replacing missing content.
|
|
36
40
|
- Preserve freeform objects and their `data-slide-object-id` values. They are
|
|
37
41
|
absolutely positioned `.fmd-slide` children; keep generated flex/grid in
|
|
38
42
|
normal flow and mint ids only for duplicates. Use styled HTML, not inline SVG.
|
|
39
|
-
- Read `slide-editing` before creating slides; it covers fit, density, and overflow.
|
|
40
43
|
- Follow linked design-system tokens; read `design-systems` for per-source actions.
|
|
41
44
|
- Import/export actions are shortcuts, not capability limits. For exact Google
|
|
42
45
|
Drive API needs, use `provider-api-catalog`, `provider-api-docs`, and
|
|
@@ -46,21 +49,24 @@ Before building common workspace or agent UI, read `agent-native-toolkit` and
|
|
|
46
49
|
pasted URLs may need a one-time Google reconnect for Drive export. Preserve
|
|
47
50
|
imported PPTX timing metadata, including by-paragraph reveals, on slide
|
|
48
51
|
records.
|
|
52
|
+
- For per-click reveals, use ordered 0-based animation targets and patch the
|
|
53
|
+
complete animation list with content; stale or missing targets disable
|
|
54
|
+
reveals.
|
|
49
55
|
- For images, use `generate-image-api` with provenance; show results as
|
|
50
56
|
``.
|
|
51
57
|
- Ask a sibling app's agent with a natural-language `call-agent` message by
|
|
52
58
|
default. Let that specialist use its own instructions, skills, sources, and
|
|
53
59
|
tools. Direct action invocation is only for an exact bounded read with a
|
|
54
60
|
fully known schema; never use it as a workaround for slow or failed A2A.
|
|
55
|
-
- For data requests, read
|
|
56
|
-
|
|
61
|
+
- For data requests, read `analytics-data-for-decks` and delegate via Analytics
|
|
62
|
+
over A2A; do not write SQL or call providers directly.
|
|
57
63
|
- When the user names no reference deck or design system, call
|
|
58
64
|
`get-workspace-defaults` first so a bare "make a deck about X" is still on
|
|
59
65
|
brand.
|
|
60
|
-
- Before generation, follow
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
- Before generation, follow `creative-context`: explicit request/current deck,
|
|
67
|
+
then pinned/current pack, then narrow library search. Respect
|
|
68
|
+
`contextMode: "off"`. Submit governed context through the Context tab or
|
|
69
|
+
`manage-context-membership`; reuse only its opaque clone reference.
|
|
64
70
|
|
|
65
71
|
## Persistence Model
|
|
66
72
|
|
|
@@ -90,15 +96,7 @@ Deck data lives in SQL and all writes go through server-side actions. Read
|
|
|
90
96
|
PPTX and have the user import it into Google Slides. Creating a native Google
|
|
91
97
|
Slides file directly requires a separate Google Slides API batchUpdate path.
|
|
92
98
|
|
|
93
|
-
##
|
|
94
|
-
|
|
95
|
-
Read the relevant skill before deeper work:
|
|
99
|
+
## Source Changes
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- `deck-management` for organization, sharing, import/export, and metadata.
|
|
100
|
-
- `slide-images` and `image-generation-via-a2a` for image work.
|
|
101
|
-
- `design-systems`, `frontend-design`, `shadcn-ui`, and `actions` as needed.
|
|
102
|
-
- `creative-context` for cross-app source reuse, pinned packs, provenance, and
|
|
103
|
-
context opt-out.
|
|
104
|
-
- `analytics-data-for-decks` for delegated data.
|
|
101
|
+
Before building common workspace or agent UI, read `agent-native-toolkit`; read
|
|
102
|
+
`customizing-agent-native` before adapting shared UI.
|
|
@@ -16,6 +16,7 @@ import { z } from "zod";
|
|
|
16
16
|
|
|
17
17
|
import { getDb, schema } from "../server/db/index.js";
|
|
18
18
|
import { notifyClients } from "../server/handlers/decks.js";
|
|
19
|
+
import { assertHumanReadableDeckTitle } from "../shared/deck-title.js";
|
|
19
20
|
import {
|
|
20
21
|
assertDesignSystemReadable,
|
|
21
22
|
assertValidAspectRatio,
|
|
@@ -50,6 +51,7 @@ export default defineAction({
|
|
|
50
51
|
const now = new Date().toISOString();
|
|
51
52
|
deck.createdAt = deck.createdAt || now;
|
|
52
53
|
deck.updatedAt = now;
|
|
54
|
+
assertHumanReadableDeckTitle(deckTitle(deck));
|
|
53
55
|
|
|
54
56
|
const designSystemId = deckDesignSystemId(deck);
|
|
55
57
|
await assertDesignSystemReadable(designSystemId);
|
|
@@ -17,6 +17,7 @@ import { normalizeSlidePadding } from "../app/lib/normalize-slide-padding.js";
|
|
|
17
17
|
import { getDb, schema } from "../server/db/index.js";
|
|
18
18
|
import { notifyClients } from "../server/handlers/decks.js";
|
|
19
19
|
import { createDeckVersionSnapshot } from "../server/lib/deck-versions.js";
|
|
20
|
+
import { repairGeneratedDeckTitle } from "../shared/deck-title.js";
|
|
20
21
|
import { hashSlideContent } from "../shared/slide-fit.js";
|
|
21
22
|
import { slideLabelFor, touchAgentSlidePresence } from "./_agent-presence.js";
|
|
22
23
|
import {
|
|
@@ -308,11 +309,20 @@ export default defineAction({
|
|
|
308
309
|
typeof position === "number"
|
|
309
310
|
? Math.max(0, Math.min(position, slides.length))
|
|
310
311
|
: slides.length;
|
|
312
|
+
const shouldRepairTitle = slides.length === 0;
|
|
311
313
|
slides.splice(insertIndex, 0, newSlide);
|
|
312
314
|
|
|
313
315
|
const now = new Date().toISOString();
|
|
314
316
|
deck.slides = slides;
|
|
315
317
|
deck.updatedAt = now;
|
|
318
|
+
const currentTitle =
|
|
319
|
+
typeof row.title === "string" && row.title.trim()
|
|
320
|
+
? row.title
|
|
321
|
+
: deck.title;
|
|
322
|
+
const repairedTitle = shouldRepairTitle
|
|
323
|
+
? repairGeneratedDeckTitle(currentTitle, newSlide.content)
|
|
324
|
+
: null;
|
|
325
|
+
if (repairedTitle) deck.title = repairedTitle;
|
|
316
326
|
deck.creativeContext =
|
|
317
327
|
contextMode === "off" && existingContext
|
|
318
328
|
? existingContext
|
|
@@ -334,7 +344,11 @@ export default defineAction({
|
|
|
334
344
|
await db.transaction(async (tx: any) => {
|
|
335
345
|
await tx
|
|
336
346
|
.update(schema.decks)
|
|
337
|
-
.set({
|
|
347
|
+
.set({
|
|
348
|
+
...(repairedTitle ? { title: repairedTitle } : {}),
|
|
349
|
+
data: JSON.stringify(deck),
|
|
350
|
+
updatedAt: now,
|
|
351
|
+
})
|
|
338
352
|
.where(eq(schema.decks.id, deckId));
|
|
339
353
|
await recordGenerationCreativeContext(
|
|
340
354
|
{
|
|
@@ -20,6 +20,10 @@ import { notifyClients } from "../server/handlers/decks.js";
|
|
|
20
20
|
import { createDeckVersionSnapshot } from "../server/lib/deck-versions.js";
|
|
21
21
|
import { resolveDefaultDesignSystemId } from "../server/workspace-defaults.js";
|
|
22
22
|
import { ASPECT_RATIO_VALUES } from "../shared/aspect-ratios.js";
|
|
23
|
+
import {
|
|
24
|
+
assertHumanReadableDeckTitle,
|
|
25
|
+
repairGeneratedDeckTitle,
|
|
26
|
+
} from "../shared/deck-title.js";
|
|
23
27
|
import { getDeckUrl } from "./_app-url.js";
|
|
24
28
|
|
|
25
29
|
const ReuseLabelSchema = z
|
|
@@ -216,6 +220,9 @@ export default defineAction({
|
|
|
216
220
|
...s,
|
|
217
221
|
content: normalizeSlidePadding(s.content),
|
|
218
222
|
}));
|
|
223
|
+
const firstSlideContent = slides[0]?.content;
|
|
224
|
+
const resolvedTitle =
|
|
225
|
+
repairGeneratedDeckTitle(title, firstSlideContent) ?? title;
|
|
219
226
|
|
|
220
227
|
if (deckId) {
|
|
221
228
|
if (designSystemId) {
|
|
@@ -231,6 +238,10 @@ export default defineAction({
|
|
|
231
238
|
if (!existing[0]) {
|
|
232
239
|
throw new Error(`Deck not found: ${deckId}`);
|
|
233
240
|
}
|
|
241
|
+
const existingDeckTitle =
|
|
242
|
+
repairGeneratedDeckTitle(title, firstSlideContent, existing[0].title) ??
|
|
243
|
+
resolvedTitle;
|
|
244
|
+
assertHumanReadableDeckTitle(existingDeckTitle);
|
|
234
245
|
await createDeckVersionSnapshot(
|
|
235
246
|
{
|
|
236
247
|
id: existing[0].id,
|
|
@@ -242,7 +253,7 @@ export default defineAction({
|
|
|
242
253
|
);
|
|
243
254
|
const prevData = existing[0] ? JSON.parse(existing[0].data) : {};
|
|
244
255
|
const data = {
|
|
245
|
-
title,
|
|
256
|
+
title: existingDeckTitle,
|
|
246
257
|
slides,
|
|
247
258
|
updatedAt: now,
|
|
248
259
|
aspectRatio: aspectRatio ?? prevData.aspectRatio,
|
|
@@ -252,7 +263,7 @@ export default defineAction({
|
|
|
252
263
|
await db
|
|
253
264
|
.update(schema.decks)
|
|
254
265
|
.set({
|
|
255
|
-
title,
|
|
266
|
+
title: existingDeckTitle,
|
|
256
267
|
data: JSON.stringify(data),
|
|
257
268
|
designSystemId: designSystemId ?? existing[0]?.designSystemId ?? null,
|
|
258
269
|
updatedAt: now,
|
|
@@ -271,7 +282,7 @@ export default defineAction({
|
|
|
271
282
|
});
|
|
272
283
|
return {
|
|
273
284
|
id: deckId,
|
|
274
|
-
title,
|
|
285
|
+
title: existingDeckTitle,
|
|
275
286
|
slideCount: slides.length,
|
|
276
287
|
url: getDeckUrl(deckId),
|
|
277
288
|
deepLink: deckDeepLink(deckId),
|
|
@@ -282,6 +293,7 @@ export default defineAction({
|
|
|
282
293
|
|
|
283
294
|
const ownerEmail = getRequestUserEmail();
|
|
284
295
|
if (!ownerEmail) throw new Error("no authenticated user");
|
|
296
|
+
assertHumanReadableDeckTitle(resolvedTitle);
|
|
285
297
|
|
|
286
298
|
let resolvedDesignSystemId = designSystemId;
|
|
287
299
|
if (resolvedDesignSystemId) {
|
|
@@ -293,7 +305,7 @@ export default defineAction({
|
|
|
293
305
|
|
|
294
306
|
const id = `deck-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
|
|
295
307
|
const data: Record<string, unknown> = {
|
|
296
|
-
title,
|
|
308
|
+
title: resolvedTitle,
|
|
297
309
|
slides,
|
|
298
310
|
createdAt: now,
|
|
299
311
|
updatedAt: now,
|
|
@@ -303,7 +315,7 @@ export default defineAction({
|
|
|
303
315
|
data.creativeContext = creativeContextProvenance;
|
|
304
316
|
await db.insert(schema.decks).values({
|
|
305
317
|
id,
|
|
306
|
-
title,
|
|
318
|
+
title: resolvedTitle,
|
|
307
319
|
data: JSON.stringify(data),
|
|
308
320
|
designSystemId: resolvedDesignSystemId ?? null,
|
|
309
321
|
ownerEmail,
|
|
@@ -323,7 +335,7 @@ export default defineAction({
|
|
|
323
335
|
});
|
|
324
336
|
return {
|
|
325
337
|
id,
|
|
326
|
-
title,
|
|
338
|
+
title: resolvedTitle,
|
|
327
339
|
slideCount: slides.length,
|
|
328
340
|
url: getDeckUrl(id),
|
|
329
341
|
deepLink: deckDeepLink(id),
|
|
@@ -89,7 +89,7 @@ export function buildReferenceDeckContext({
|
|
|
89
89
|
|
|
90
90
|
lines.push(
|
|
91
91
|
"",
|
|
92
|
-
`These are samples, not the full deck. Call \`get-deck --id ${id}\` if you need
|
|
92
|
+
`These are samples, not the full deck. Call \`get-deck --id ${id} --compact false\` only if you need full slide HTML for a case the patterns above do not cover.`,
|
|
93
93
|
);
|
|
94
94
|
|
|
95
95
|
return truncate(lines.join("\n"), MAX_CONTEXT_CHARS);
|
|
@@ -99,7 +99,7 @@ export default defineAction({
|
|
|
99
99
|
description:
|
|
100
100
|
"Get an existing deck's visual language as a reusable pattern library so a new deck can be written in the same style. " +
|
|
101
101
|
"Returns one worked HTML example per layout as `agentContext`, deliberately without the deck's slide order — the new deck's structure comes from its own content. " +
|
|
102
|
-
"Use `get-deck` when you need
|
|
102
|
+
"Use `get-deck` with compact=false when you need full slide content instead.",
|
|
103
103
|
schema: z.object({
|
|
104
104
|
id: z.string().describe("Deck ID to use as the reference"),
|
|
105
105
|
}),
|
|
@@ -4,6 +4,7 @@ import { getRequestUserEmail } from "@agent-native/core/server/request-context";
|
|
|
4
4
|
import { resolveAccess } from "@agent-native/core/sharing";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
|
|
7
|
+
import { summarizeSlideAnimationTargets } from "../server/lib/validate-slide-animations.js";
|
|
7
8
|
import "../server/db/index.js"; // ensure registerShareableResource runs
|
|
8
9
|
|
|
9
10
|
function stripHtml(html: string): string {
|
|
@@ -16,6 +17,39 @@ function stripHtml(html: string): string {
|
|
|
16
17
|
.trim();
|
|
17
18
|
}
|
|
18
19
|
|
|
20
|
+
function compactAnimationSummary(value: unknown, content: string) {
|
|
21
|
+
if (!Array.isArray(value)) return null;
|
|
22
|
+
const targetSummaries = summarizeSlideAnimationTargets(content, value);
|
|
23
|
+
return {
|
|
24
|
+
count: value.length,
|
|
25
|
+
steps: value.map((entry, index) => {
|
|
26
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
27
|
+
return { order: index + 1, valid: false };
|
|
28
|
+
}
|
|
29
|
+
const animation = entry as Record<string, unknown>;
|
|
30
|
+
const targetSummary = targetSummaries[index];
|
|
31
|
+
return {
|
|
32
|
+
order: index + 1,
|
|
33
|
+
id: typeof animation.id === "string" ? animation.id : null,
|
|
34
|
+
elementIndex:
|
|
35
|
+
typeof animation.elementIndex === "number"
|
|
36
|
+
? animation.elementIndex
|
|
37
|
+
: null,
|
|
38
|
+
elementPath: Array.isArray(animation.elementPath)
|
|
39
|
+
? animation.elementPath
|
|
40
|
+
: null,
|
|
41
|
+
type: typeof animation.type === "string" ? animation.type : null,
|
|
42
|
+
targetPreview: targetSummary?.targetPreview ?? null,
|
|
43
|
+
resolvedPath: targetSummary?.resolvedPath ?? null,
|
|
44
|
+
targetValid: targetSummary?.targetValid ?? false,
|
|
45
|
+
targetIssue: targetSummary
|
|
46
|
+
? targetSummary.targetIssue
|
|
47
|
+
: "target-not-found",
|
|
48
|
+
};
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
19
53
|
function deckDeepLink(deckId: string): string {
|
|
20
54
|
return buildDeepLink({
|
|
21
55
|
app: "slides",
|
|
@@ -26,13 +60,22 @@ function deckDeepLink(deckId: string): string {
|
|
|
26
60
|
|
|
27
61
|
export default defineAction({
|
|
28
62
|
description:
|
|
29
|
-
"Get a specific deck
|
|
63
|
+
"Get a specific deck. Pass slideId to return only that slide; targeted agent reads include full HTML by default. In-app agent calls without slideId return compact slide metadata by default; set compact=false when full deck HTML is needed. Frontend and CLI reads remain full unless compact=true. User-visible slide numbers are 1-based and match the UI: slide 1 is the first slide. Use slideId for edits.",
|
|
64
|
+
timeoutMs: 60_000,
|
|
30
65
|
schema: z.object({
|
|
31
66
|
id: z.string().optional().describe("Deck ID (required)"),
|
|
67
|
+
slideId: z
|
|
68
|
+
.string()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe(
|
|
71
|
+
"Optional stable slide ID. When set, return only that slide for a targeted read.",
|
|
72
|
+
),
|
|
32
73
|
compact: z
|
|
33
74
|
.enum(["true", "false"])
|
|
34
75
|
.optional()
|
|
35
|
-
.describe(
|
|
76
|
+
.describe(
|
|
77
|
+
"Set to 'true' for compact slide summaries, or 'false' for full slide HTML. In-app agent calls without slideId default to compact output.",
|
|
78
|
+
),
|
|
36
79
|
}),
|
|
37
80
|
http: { method: "GET" },
|
|
38
81
|
mcpApp: {
|
|
@@ -45,7 +88,7 @@ export default defineAction({
|
|
|
45
88
|
height: 680,
|
|
46
89
|
}),
|
|
47
90
|
},
|
|
48
|
-
run: async (args) => {
|
|
91
|
+
run: async (args, ctx) => {
|
|
49
92
|
if (!args.id) {
|
|
50
93
|
throw new Error("--id is required.");
|
|
51
94
|
}
|
|
@@ -61,8 +104,31 @@ export default defineAction({
|
|
|
61
104
|
const data = JSON.parse(row.data);
|
|
62
105
|
const slides = data?.slides || [];
|
|
63
106
|
const ownerEmail = getRequestUserEmail();
|
|
107
|
+
const selectedSlideIndex =
|
|
108
|
+
args.slideId === undefined
|
|
109
|
+
? -1
|
|
110
|
+
: slides.findIndex((slide: any) => slide?.id === args.slideId);
|
|
111
|
+
|
|
112
|
+
if (args.slideId !== undefined && selectedSlideIndex < 0) {
|
|
113
|
+
throw Object.assign(new Error(`Slide not found: ${args.slideId}`), {
|
|
114
|
+
statusCode: 404,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
64
117
|
|
|
65
|
-
|
|
118
|
+
const selectedSlide =
|
|
119
|
+
selectedSlideIndex >= 0 ? slides[selectedSlideIndex] : null;
|
|
120
|
+
const slideEntries: Array<{ slide: any; index: number }> =
|
|
121
|
+
selectedSlideIndex >= 0
|
|
122
|
+
? [{ slide: selectedSlide, index: selectedSlideIndex }]
|
|
123
|
+
: slides.map((slide: any, index: number) => ({ slide, index }));
|
|
124
|
+
|
|
125
|
+
const compact =
|
|
126
|
+
args.compact === "true" ||
|
|
127
|
+
(args.compact === undefined &&
|
|
128
|
+
ctx?.caller === "tool" &&
|
|
129
|
+
selectedSlideIndex < 0);
|
|
130
|
+
|
|
131
|
+
if (compact) {
|
|
66
132
|
return {
|
|
67
133
|
id: row.id,
|
|
68
134
|
title: row.title || data?.title,
|
|
@@ -84,18 +150,27 @@ export default defineAction({
|
|
|
84
150
|
slideNumbering:
|
|
85
151
|
'User-visible slide numbers are 1-based and match the UI. "Slide 1" means slideNumber 1 / zeroBasedIndex 0. Use slideId for edits.',
|
|
86
152
|
deepLink: deckDeepLink(row.id),
|
|
87
|
-
|
|
153
|
+
...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
|
|
154
|
+
slides: slideEntries.map(({ slide: s, index: i }) => ({
|
|
88
155
|
slideNumber: i + 1,
|
|
89
156
|
zeroBasedIndex: i,
|
|
90
157
|
id: s.id,
|
|
91
158
|
layout: s.layout ?? null,
|
|
159
|
+
transition: s.transition ?? null,
|
|
160
|
+
animations: compactAnimationSummary(
|
|
161
|
+
s.animations,
|
|
162
|
+
typeof s.content === "string" ? s.content : "",
|
|
163
|
+
),
|
|
92
164
|
textPreview: stripHtml(s.content || "").slice(0, 120),
|
|
93
165
|
})),
|
|
94
166
|
};
|
|
95
167
|
}
|
|
96
168
|
|
|
169
|
+
const deckMetadata = { ...data };
|
|
170
|
+
delete deckMetadata.slides;
|
|
171
|
+
|
|
97
172
|
return {
|
|
98
|
-
...
|
|
173
|
+
...deckMetadata,
|
|
99
174
|
id: row.id,
|
|
100
175
|
title: row.title || data?.title,
|
|
101
176
|
visibility: row.visibility,
|
|
@@ -108,7 +183,8 @@ export default defineAction({
|
|
|
108
183
|
typeof data.createdAt === "string" ? data.createdAt : row.createdAt,
|
|
109
184
|
updatedAt: row.updatedAt,
|
|
110
185
|
deepLink: deckDeepLink(row.id),
|
|
111
|
-
|
|
186
|
+
...(selectedSlide ? { selectedSlideId: selectedSlide.id } : {}),
|
|
187
|
+
slides: slideEntries.map(({ slide: s, index: i }) => ({
|
|
112
188
|
...s,
|
|
113
189
|
slideNumber: i + 1,
|
|
114
190
|
zeroBasedIndex: i,
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
DEFAULT_ASPECT_RATIO,
|
|
29
29
|
type AspectRatio,
|
|
30
30
|
} from "../shared/aspect-ratios.js";
|
|
31
|
+
import { isOpaqueDeckTitle } from "../shared/deck-title.js";
|
|
31
32
|
import { readUserUploadedFile } from "./_uploaded-files.js";
|
|
32
33
|
import { withDeckLock } from "./patch-deck.js";
|
|
33
34
|
|
|
@@ -586,7 +587,7 @@ async function buildPptxSlide(
|
|
|
586
587
|
|
|
587
588
|
function titleFromPath(filePath: string): string {
|
|
588
589
|
const base = path.basename(filePath, path.extname(filePath)).trim();
|
|
589
|
-
return base
|
|
590
|
+
return base && !isOpaqueDeckTitle(base) ? base : "Imported File";
|
|
590
591
|
}
|
|
591
592
|
|
|
592
593
|
function normalizePdfPages(result: unknown): { num: number; text: string }[] {
|