@agent-native/core 0.80.7 → 0.80.9
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 +18 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +6 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +10 -2
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +10 -2
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +7 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +9 -2
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +6 -0
- package/corpus/core/docs/content/template-design.mdx +9 -2
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/mcp.ts +10 -0
- package/corpus/core/src/cli/skills.ts +58 -12
- package/corpus/core/src/client/AssistantChat.tsx +70 -27
- package/corpus/core/src/client/analytics.ts +3 -1
- package/corpus/core/src/client/error-format.ts +25 -0
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +13 -11
- package/corpus/core/src/client/guided-questions.tsx +32 -4
- package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +33 -1
- package/corpus/core/src/client/resources/BuiltinCapabilityDetail.tsx +8 -0
- package/corpus/core/src/client/resources/use-builtin-capabilities.ts +4 -2
- package/corpus/core/src/client/session-replay.ts +34 -0
- package/corpus/core/src/client/sharing/ShareButton.tsx +106 -21
- package/corpus/core/src/coding-tools/index.ts +1 -1
- package/corpus/core/src/mcp/index.ts +2 -0
- package/corpus/core/src/mcp/screen-memory-stdio.ts +290 -0
- package/corpus/core/src/mcp-client/builtin-capabilities.ts +13 -1
- package/corpus/core/src/mcp-client/index.ts +9 -0
- package/corpus/core/src/mcp-client/screen-memory-local.ts +461 -0
- package/corpus/core/src/onboarding/types.ts +7 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +25 -0
- package/corpus/core/src/server/agents-bundle.ts +35 -7
- package/corpus/core/src/styles/agent-native.css +5 -0
- package/corpus/core/src/templates/default/app/global.css +35 -35
- package/corpus/templates/analytics/AGENTS.md +6 -0
- package/corpus/templates/analytics/actions/github-repo-files.ts +9 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +4 -4
- package/corpus/templates/analytics/app/global.css +144 -40
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +4 -4
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -9
- package/corpus/templates/analytics/changelog/2026-06-29-agents-can-search-and-read-connected-github-repositories-whe.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-sessions-and-explorer-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/assets/app/components/library/LibraryPresetGrid.tsx +1 -1
- package/corpus/templates/assets/app/global.css +99 -35
- package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -2
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +4 -4
- package/corpus/templates/assets/app/routes/library.tsx +4 -4
- package/corpus/templates/assets/changelog/2026-06-29-asset-library-and-detail-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/brain/app/global.css +63 -35
- package/corpus/templates/brain/app/routes/search.tsx +1 -1
- package/corpus/templates/brain/app/routes/settings.tsx +1 -1
- package/corpus/templates/brain/app/routes/sources.tsx +2 -2
- package/corpus/templates/brain/changelog/2026-06-29-search-settings-and-source-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +4 -4
- package/corpus/templates/calendar/app/components/calendar/FindTimePanel.tsx +3 -2
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +4 -2
- package/corpus/templates/calendar/app/global.css +69 -35
- package/corpus/templates/calendar/changelog/2026-06-29-event-and-find-time-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/global.css +35 -35
- package/corpus/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/clips/AGENTS.md +13 -0
- package/corpus/templates/clips/actions/get-screen-memory-status.ts +12 -0
- package/corpus/templates/clips/actions/query-screen-memory-context.ts +29 -0
- package/corpus/templates/clips/actions/view-screen.ts +2 -2
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/global.css +47 -35
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +3 -3
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +45 -18
- package/corpus/templates/clips/changelog/2026-06-29-meeting-detail-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-29-screen-memory-keeps-a-local-rolling-screen-buffer-for-agent-context.md +5 -0
- package/corpus/templates/clips/changelog/2026-06-29-video-chat-is-easier-to-find-on-recording-pages-and-s3-setup.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/styles.css +39 -39
- package/corpus/templates/clips/desktop/src/app.tsx +290 -1
- package/corpus/templates/clips/desktop/src/shared/config.ts +83 -0
- package/corpus/templates/clips/desktop/src/styles.css +67 -52
- package/corpus/templates/clips/desktop/src-tauri/src/config.rs +50 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +17 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +13 -13
- package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +990 -0
- package/corpus/templates/clips/server/plugins/onboarding.ts +2 -0
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +69 -16
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +3 -3
- package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/content/app/global.css +29 -15
- package/corpus/templates/content/changelog/2026-06-29-database-gallery-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/content/changelog/2026-06-29-read-only-pages-no-longer-try-to-autosave-or-open-editor-onl.md +6 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +25 -20
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
- package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +8 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +13 -0
- package/corpus/templates/design/AGENTS.md +24 -14
- package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +1054 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +24 -4
- package/corpus/templates/design/actions/edit-design.ts +6 -3
- package/corpus/templates/design/actions/export-coding-handoff.ts +12 -4
- package/corpus/templates/design/actions/generate-design.ts +6 -21
- package/corpus/templates/design/actions/generate-screens.ts +48 -5
- package/corpus/templates/design/actions/get-design.ts +1 -0
- package/corpus/templates/design/actions/present-design-variants.ts +355 -30
- package/corpus/templates/design/actions/update-design.ts +47 -10
- package/corpus/templates/design/actions/update-file.ts +33 -8
- package/corpus/templates/design/actions/view-screen.ts +89 -31
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +389 -71
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +1 -1
- package/corpus/templates/design/app/components/design/EditPanel.tsx +596 -95
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +428 -221
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1197 -228
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +94 -217
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +28 -14
- package/corpus/templates/design/app/components/design/index.ts +0 -1
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +228 -170
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +140 -13
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +39 -8
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +4 -2
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +75 -5
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +37 -12
- package/corpus/templates/design/app/components/design/inspector/index.ts +1 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +17 -4
- package/corpus/templates/design/app/components/design/types.ts +9 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +23 -5
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +448 -259
- package/corpus/templates/design/app/global.css +77 -49
- package/corpus/templates/design/app/hooks/use-question-flow.ts +2 -2
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +8 -1
- package/corpus/templates/design/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/design/app/i18n-data.ts +55 -3
- package/corpus/templates/design/app/pages/DesignEditor.tsx +2783 -658
- package/corpus/templates/design/app/root.tsx +1 -1
- package/corpus/templates/design/changelog/2026-06-29-agent-edits-to-a-design-are-no-longer-occasionally-dropped-o.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-box-shadow-and-gradient-colors-keep-named-css-colors-like-re.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-containers-no-longer-block-selecting-nested-elements-and-nor.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-cut-cmd-ctrl-x-now-removes-the-selected-element-to-the-clipb.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-deleting-with-multiple-layers-selected-in-the-layers-panel-n.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-agents-now-generate-and-refine-variants-from-stronger.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-questions-now-appear-as-a-cleaner-canvas-intake-with-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-variant-directions-now-appear-as-board-screens-with-chat-buttons.md +5 -0
- package/corpus/templates/design/changelog/2026-06-29-duplicating-a-screen-now-gives-the-copy-its-own-layer-ids-so.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-element-selection-no-longer-snaps-back-to-the-previous-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-frame-resize-measurements-now-stay-beside-the-cursor-while-d.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-hiding-and-re-showing-a-gradient-fill-now-preserves-each-sto.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-inspector-number-fields-have-cleaner-tooltips-and-draggable-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-locking-layer-nesting-generated-question-intake-and-im.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-names-in-the-sidebar-can-scroll-horizontally-instead-o.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layer-nesting-in-the-sidebar-now-uses-tighter-spacing-so-nam.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-layers-no-longer-repeat-document-wrapper-rows-when-a-screen-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-overview-previews-now-keep-element-hover-and-selection-tied-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-picking-a-design-direction-now-submits-to-the-agent-right-aw.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-pressing-escape-now-cancels-a-stuck-screen-drag-in-the-overv.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-only-highlights-screens-when-the-frame-or-ti.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-previews-now-resize-to-match-the-selected-de.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-now-uses-a-pointer-cursor-instead-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-outlines-now-stay-locked-to-the-se.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zoom-now-reports-real-screen-scale-separatel.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-feels-smoother-and-selection-outline.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-now-stays-on-the-overview-canvas-ins.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-selecting-a-nested-layer-from-all-screens-now-keeps-you-in-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-share-now-groups-link-sharing-exports-and-agent-handoff.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-style-changes-that-set-several-properties-at-once-fixed-size.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-design-editor-loading-skeleton-now-uses-a-softer-charcoa.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-device-preview-menu-now-sits-next-to-the-preview-button-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-editor-no-longer-crashes-when-a-screen-ends-up-with-dupl.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-inspector-stays-read-only-while-an-empty-design-is-still.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-missing-design-view-now-matches-the-rest-of-the-editor-c.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-icon-and-tool-option-menus-better-match-the-edi.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-typography-controls-now-keep-the-font-name-visible-and-move-.md +6 -0
- package/corpus/templates/design/e2e/README.md +4 -3
- package/corpus/templates/design/e2e/global-setup.ts +24 -23
- package/corpus/templates/design/e2e/helpers.ts +122 -11
- package/corpus/templates/design/playwright.config.ts +19 -4
- package/corpus/templates/design/server/lib/coding-handoff.ts +126 -2
- package/corpus/templates/design/server/plugins/core-routes.ts +1 -2
- package/corpus/templates/design/server/routes/api/design-handoff/[id].zip.get.ts +86 -0
- package/corpus/templates/design/shared/code-layer.ts +125 -22
- package/corpus/templates/design/shared/color-utils.ts +159 -0
- package/corpus/templates/design/shared/generation-session.ts +42 -0
- package/corpus/templates/dispatch/app/global.css +79 -35
- package/corpus/templates/dispatch/app/routes/integrations.tsx +8 -7
- package/corpus/templates/dispatch/changelog/2026-06-29-integration-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -2
- package/corpus/templates/forms/app/global.css +64 -35
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +2 -2
- package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +3 -3
- package/corpus/templates/forms/changelog/2026-06-29-form-list-and-insight-layouts-adapt-when-the-agent-sidebar.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -1
- package/corpus/templates/macros/app/global.css +25 -9
- package/corpus/templates/macros/changelog/2026-06-29-macro-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +6 -2
- package/corpus/templates/mail/app/global.css +42 -36
- package/corpus/templates/mail/app/pages/InboxPage.tsx +1 -1
- package/corpus/templates/mail/changelog/2026-06-29-the-contact-panel-now-adapts-to-the-available-mail-pane-width.md +6 -0
- package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +6 -7
- package/corpus/templates/plan/app/global.css +74 -42
- package/corpus/templates/plan/changelog/2026-06-29-plan-document-blocks-adapt-to-the-available-document-width.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-29-plan-titles-and-summaries-can-be-edited-inline-without-focus.md +6 -0
- package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/slides/app/global.css +49 -33
- package/corpus/templates/slides/changelog/2026-06-29-slide-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/corpus/templates/videos/app/components/layout/Layout.tsx +3 -1
- package/corpus/templates/videos/app/global.css +35 -35
- package/corpus/templates/videos/changelog/2026-06-29-video-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +10 -0
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +58 -12
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +54 -24
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +2 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +17 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +3 -4
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/guided-questions.d.ts +4 -0
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +16 -7
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +26 -1
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.js +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.js +2 -1
- package/dist/client/resources/use-builtin-capabilities.js.map +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +31 -0
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +14 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +36 -7
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/coding-tools/index.js +1 -1
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +6 -0
- package/dist/mcp/screen-memory-stdio.d.ts.map +1 -0
- package/dist/mcp/screen-memory-stdio.js +213 -0
- package/dist/mcp/screen-memory-stdio.js.map +1 -0
- package/dist/mcp-client/builtin-capabilities.d.ts +1 -1
- package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -1
- package/dist/mcp-client/builtin-capabilities.js +10 -0
- package/dist/mcp-client/builtin-capabilities.js.map +1 -1
- package/dist/mcp-client/index.d.ts +1 -0
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +1 -0
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/screen-memory-local.d.ts +61 -0
- package/dist/mcp-client/screen-memory-local.d.ts.map +1 -0
- package/dist/mcp-client/screen-memory-local.js +336 -0
- package/dist/mcp-client/screen-memory-local.js.map +1 -0
- package/dist/onboarding/types.d.ts +7 -0
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/onboarding/types.js.map +1 -1
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +26 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agents-bundle.d.ts.map +1 -1
- package/dist/server/agents-bundle.js +22 -7
- package/dist/server/agents-bundle.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +5 -0
- package/dist/templates/default/app/global.css +35 -35
- package/docs/content/locales/ar-SA/template-design.mdx +6 -0
- package/docs/content/locales/de-DE/template-design.mdx +8 -0
- package/docs/content/locales/es-ES/template-design.mdx +10 -2
- package/docs/content/locales/fr-FR/template-design.mdx +10 -2
- package/docs/content/locales/hi-IN/template-design.mdx +7 -0
- package/docs/content/locales/ja-JP/template-design.mdx +7 -0
- package/docs/content/locales/ko-KR/template-design.mdx +7 -0
- package/docs/content/locales/pt-BR/template-design.mdx +9 -2
- package/docs/content/locales/zh-CN/template-design.mdx +6 -0
- package/docs/content/locales/zh-TW/template-design.mdx +6 -0
- package/docs/content/template-design.mdx +9 -2
- package/package.json +1 -1
- package/src/templates/default/app/global.css +35 -35
- package/corpus/templates/design/app/components/design/VariantGrid.tsx +0 -189
- package/corpus/templates/design/app/components/design/VariantHandoffCard.tsx +0 -115
- package/corpus/templates/design/app/hooks/use-variant-flow.ts +0 -258
|
@@ -53,6 +53,8 @@ export default async (nitroApp: any): Promise<void> => {
|
|
|
53
53
|
"AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO, or any S3-compatible service.",
|
|
54
54
|
payload: {
|
|
55
55
|
writeScope: "workspace",
|
|
56
|
+
saveTo: "scoped-secrets",
|
|
57
|
+
secretDescription: "Clips S3-compatible storage",
|
|
56
58
|
fields: [
|
|
57
59
|
{
|
|
58
60
|
key: "S3_ENDPOINT",
|
|
@@ -157,10 +157,19 @@ interface DocumentEditorBodyProps {
|
|
|
157
157
|
type PendingDocumentSave = {
|
|
158
158
|
title: string;
|
|
159
159
|
content: string;
|
|
160
|
-
save: (
|
|
160
|
+
save: (
|
|
161
|
+
title: string,
|
|
162
|
+
content: string,
|
|
163
|
+
options?: DocumentSaveOptions,
|
|
164
|
+
) => unknown | Promise<unknown>;
|
|
165
|
+
canEditWhenQueued: boolean;
|
|
161
166
|
timeout: ReturnType<typeof setTimeout>;
|
|
162
167
|
};
|
|
163
168
|
|
|
169
|
+
type DocumentSaveOptions = {
|
|
170
|
+
allowQueuedSave?: boolean;
|
|
171
|
+
};
|
|
172
|
+
|
|
164
173
|
type DocumentSaveResult = {
|
|
165
174
|
contentPersisted: boolean;
|
|
166
175
|
};
|
|
@@ -274,6 +283,8 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
274
283
|
const updateDocument = useUpdateDocument();
|
|
275
284
|
const queryClient = useQueryClient();
|
|
276
285
|
const canEdit = document.canEdit ?? true;
|
|
286
|
+
const canEditRef = useRef(canEdit);
|
|
287
|
+
canEditRef.current = canEdit;
|
|
277
288
|
// The block render context (asset/upload resolvers, inline markdown reader,
|
|
278
289
|
// panel popover) is stable for the editor's lifetime. Created once here and
|
|
279
290
|
// provided alongside the content block registry so every registry block in the
|
|
@@ -324,6 +335,15 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
324
335
|
document.updatedAt ?? null,
|
|
325
336
|
);
|
|
326
337
|
documentUpdatedAtRef.current = document.updatedAt ?? null;
|
|
338
|
+
const handleBackgroundSaveError = useCallback(
|
|
339
|
+
(error: unknown) => {
|
|
340
|
+
toast.error(t("empty.genericError"), {
|
|
341
|
+
description:
|
|
342
|
+
error instanceof Error ? error.message : t("empty.genericError"),
|
|
343
|
+
});
|
|
344
|
+
},
|
|
345
|
+
[t],
|
|
346
|
+
);
|
|
327
347
|
const titleFocusedRef = useRef(false);
|
|
328
348
|
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
|
329
349
|
const titleInputRef = useRef<HTMLTextAreaElement>(null);
|
|
@@ -375,7 +395,8 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
375
395
|
}
|
|
376
396
|
: undefined;
|
|
377
397
|
|
|
378
|
-
// Collaborative editing
|
|
398
|
+
// Collaborative editing is write-only for now. Viewers get the SQL snapshot
|
|
399
|
+
// and skip collab endpoints that reject non-editor access.
|
|
379
400
|
const {
|
|
380
401
|
ydoc,
|
|
381
402
|
awareness,
|
|
@@ -384,7 +405,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
384
405
|
agentActive,
|
|
385
406
|
agentPresent,
|
|
386
407
|
} = useCollaborativeDoc({
|
|
387
|
-
docId: isLocalFileDocument ?
|
|
408
|
+
docId: canEdit && !isLocalFileDocument ? documentId : "",
|
|
388
409
|
requestSource: TAB_ID,
|
|
389
410
|
user: currentUser,
|
|
390
411
|
});
|
|
@@ -566,11 +587,16 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
566
587
|
}, [document, isLinkedLocalSourceDocument, localTitle, localContent]);
|
|
567
588
|
|
|
568
589
|
const persistDocumentUpdates = useCallback(
|
|
569
|
-
async (
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
590
|
+
async (
|
|
591
|
+
updates: {
|
|
592
|
+
title?: string;
|
|
593
|
+
content?: string;
|
|
594
|
+
icon?: string | null;
|
|
595
|
+
},
|
|
596
|
+
options: DocumentSaveOptions = {},
|
|
597
|
+
): Promise<Document> => {
|
|
598
|
+
if (!options.allowQueuedSave && !canEditRef.current) return document;
|
|
599
|
+
|
|
574
600
|
const localSource = document.source;
|
|
575
601
|
const isLinkedLocalSource = canWriteLinkedLocalSource(
|
|
576
602
|
documentId,
|
|
@@ -629,7 +655,11 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
629
655
|
);
|
|
630
656
|
|
|
631
657
|
const saveDocumentImmediately = useCallback(
|
|
632
|
-
async (
|
|
658
|
+
async (
|
|
659
|
+
title: string,
|
|
660
|
+
content: string,
|
|
661
|
+
options: DocumentSaveOptions = {},
|
|
662
|
+
): Promise<DocumentSaveResult> => {
|
|
633
663
|
// Never clobber a newer server version (e.g. an agent edit we haven't
|
|
634
664
|
// reconciled into the editor yet) with the editor's current — possibly
|
|
635
665
|
// stale — content. Guard per-field using the field's own watermark.
|
|
@@ -653,7 +683,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
653
683
|
return { contentPersisted: !contentChanged };
|
|
654
684
|
}
|
|
655
685
|
|
|
656
|
-
const saved = await persistDocumentUpdates(updates);
|
|
686
|
+
const saved = await persistDocumentUpdates(updates, options);
|
|
657
687
|
// Adopt the server updatedAt per saved field.
|
|
658
688
|
const savedAt = saved?.updatedAt ?? new Date().toISOString();
|
|
659
689
|
if (updates.title !== undefined) {
|
|
@@ -700,25 +730,38 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
700
730
|
queryClient,
|
|
701
731
|
],
|
|
702
732
|
);
|
|
733
|
+
const flushPendingDocumentSave = useCallback(
|
|
734
|
+
(pending: PendingDocumentSave) => {
|
|
735
|
+
if (!pending.canEditWhenQueued) return;
|
|
736
|
+
void Promise.resolve(
|
|
737
|
+
pending.save(pending.title, pending.content, {
|
|
738
|
+
allowQueuedSave: true,
|
|
739
|
+
}),
|
|
740
|
+
).catch(handleBackgroundSaveError);
|
|
741
|
+
},
|
|
742
|
+
[handleBackgroundSaveError],
|
|
743
|
+
);
|
|
703
744
|
const debouncedSave = useCallback(
|
|
704
745
|
(title: string, content: string) => {
|
|
746
|
+
if (!canEditRef.current) return;
|
|
705
747
|
if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
|
|
706
748
|
const pending: PendingDocumentSave = {
|
|
707
749
|
title,
|
|
708
750
|
content,
|
|
709
751
|
save: saveDocumentImmediately,
|
|
752
|
+
canEditWhenQueued: canEditRef.current,
|
|
710
753
|
timeout: setTimeout(() => {
|
|
711
754
|
if (pendingDocumentSaveRef.current === pending) {
|
|
712
755
|
pendingDocumentSaveRef.current = null;
|
|
713
756
|
}
|
|
714
757
|
saveTimeoutRef.current = null;
|
|
715
|
-
|
|
758
|
+
flushPendingDocumentSave(pending);
|
|
716
759
|
}, 500),
|
|
717
760
|
};
|
|
718
761
|
pendingDocumentSaveRef.current = pending;
|
|
719
762
|
saveTimeoutRef.current = pending.timeout;
|
|
720
763
|
},
|
|
721
|
-
[saveDocumentImmediately],
|
|
764
|
+
[flushPendingDocumentSave, saveDocumentImmediately],
|
|
722
765
|
);
|
|
723
766
|
|
|
724
767
|
useEffect(() => {
|
|
@@ -728,9 +771,19 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
728
771
|
clearTimeout(pending.timeout);
|
|
729
772
|
saveTimeoutRef.current = null;
|
|
730
773
|
pendingDocumentSaveRef.current = null;
|
|
731
|
-
|
|
774
|
+
flushPendingDocumentSave(pending);
|
|
732
775
|
};
|
|
733
|
-
}, [documentId]);
|
|
776
|
+
}, [documentId, flushPendingDocumentSave]);
|
|
777
|
+
|
|
778
|
+
useEffect(() => {
|
|
779
|
+
if (canEdit) return;
|
|
780
|
+
const pending = pendingDocumentSaveRef.current;
|
|
781
|
+
if (!pending) return;
|
|
782
|
+
clearTimeout(pending.timeout);
|
|
783
|
+
saveTimeoutRef.current = null;
|
|
784
|
+
pendingDocumentSaveRef.current = null;
|
|
785
|
+
flushPendingDocumentSave(pending);
|
|
786
|
+
}, [canEdit, documentId, flushPendingDocumentSave]);
|
|
734
787
|
|
|
735
788
|
// Collab-aware ingest flush: the `pull-document` action writes a one-shot
|
|
736
789
|
// `flush-request-<id>` app-state key when an external agent wants to ingest
|
|
@@ -846,7 +899,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
846
899
|
const [hoveredThreadId, setHoveredThreadId] = useState<string | null>(null);
|
|
847
900
|
const activeThreadId = hoveredThreadId ?? selectedThreadId;
|
|
848
901
|
const { data: threads, isLoading: commentsLoading } = useComments(
|
|
849
|
-
isLocalFileDocument ?
|
|
902
|
+
canEdit && !isLocalFileDocument ? documentId : null,
|
|
850
903
|
);
|
|
851
904
|
const hasComments =
|
|
852
905
|
!isLocalFileDocument &&
|
|
@@ -1061,7 +1114,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
|
|
|
1061
1114
|
onSelect={(emoji) => {
|
|
1062
1115
|
void (async () => {
|
|
1063
1116
|
await persistDocumentUpdates({ icon: emoji });
|
|
1064
|
-
})();
|
|
1117
|
+
})().catch(handleBackgroundSaveError);
|
|
1065
1118
|
}}
|
|
1066
1119
|
/>
|
|
1067
1120
|
) : document.icon ? (
|
|
@@ -7354,7 +7354,7 @@ function DatabaseGalleryView({
|
|
|
7354
7354
|
{dbText("loadingGallery")}
|
|
7355
7355
|
</div>
|
|
7356
7356
|
) : (
|
|
7357
|
-
<div className="grid gap-3 px-1 py-3
|
|
7357
|
+
<div className="content-database-gallery-grid grid gap-3 px-1 py-3">
|
|
7358
7358
|
{databaseViewHasNoMatchingPages(
|
|
7359
7359
|
items.length,
|
|
7360
7360
|
hasSearch,
|
|
@@ -7455,7 +7455,7 @@ function DatabaseGroupedGallerySection({
|
|
|
7455
7455
|
onCollapsedChange={onCollapsedChange}
|
|
7456
7456
|
/>
|
|
7457
7457
|
{!collapsed ? (
|
|
7458
|
-
<div className="
|
|
7458
|
+
<div className="content-database-gallery-grid grid gap-3">
|
|
7459
7459
|
{group.items.map((item, index) => (
|
|
7460
7460
|
<DatabaseGalleryCard
|
|
7461
7461
|
key={`${group.id}-${item.id}`}
|
|
@@ -7936,7 +7936,7 @@ function DatabaseDateViewNoDateSection({
|
|
|
7936
7936
|
{items.length}
|
|
7937
7937
|
</span>
|
|
7938
7938
|
</div>
|
|
7939
|
-
<div className="
|
|
7939
|
+
<div className="content-database-calendar-undated-grid grid gap-1">
|
|
7940
7940
|
{items.map((item) => (
|
|
7941
7941
|
<DatabaseCalendarCard
|
|
7942
7942
|
key={item.id}
|
|
@@ -162,7 +162,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
162
162
|
browserTabId={getBrowserTabId()}
|
|
163
163
|
>
|
|
164
164
|
<main
|
|
165
|
-
className="relative flex min-w-0 min-h-0 flex-1 flex-col overflow-x-hidden"
|
|
165
|
+
className="agent-native-app-main relative flex min-w-0 min-h-0 flex-1 flex-col overflow-x-hidden"
|
|
166
166
|
style={
|
|
167
167
|
{
|
|
168
168
|
"--content-sidebar-width": `${contentSidebarWidth}px`,
|
|
@@ -58,42 +58,42 @@
|
|
|
58
58
|
|
|
59
59
|
/* ===== Dark Mode ===== */
|
|
60
60
|
.dark {
|
|
61
|
-
--background:
|
|
61
|
+
--background: 0 0% 13%;
|
|
62
62
|
--foreground: 0 0% 90%;
|
|
63
63
|
|
|
64
|
-
--card:
|
|
64
|
+
--card: 0 0% 15%;
|
|
65
65
|
--card-foreground: 0 0% 90%;
|
|
66
66
|
|
|
67
|
-
--popover:
|
|
67
|
+
--popover: 0 0% 15%;
|
|
68
68
|
--popover-foreground: 0 0% 90%;
|
|
69
69
|
|
|
70
70
|
--primary: 0 0% 90%;
|
|
71
|
-
--primary-foreground:
|
|
71
|
+
--primary-foreground: 0 0% 10%;
|
|
72
72
|
|
|
73
|
-
--secondary:
|
|
73
|
+
--secondary: 0 0% 18%;
|
|
74
74
|
--secondary-foreground: 0 0% 90%;
|
|
75
75
|
|
|
76
|
-
--muted:
|
|
77
|
-
--muted-foreground:
|
|
76
|
+
--muted: 0 0% 16%;
|
|
77
|
+
--muted-foreground: 0 0% 60%;
|
|
78
78
|
|
|
79
|
-
--accent:
|
|
79
|
+
--accent: 0 0% 18%;
|
|
80
80
|
--accent-foreground: 0 0% 90%;
|
|
81
81
|
|
|
82
82
|
--destructive: 0 62% 50%;
|
|
83
83
|
--destructive-foreground: 0 0% 100%;
|
|
84
84
|
|
|
85
|
-
--border:
|
|
86
|
-
--input:
|
|
85
|
+
--border: 0 0% 24%;
|
|
86
|
+
--input: 0 0% 24%;
|
|
87
87
|
--ring: 0 0% 50%;
|
|
88
88
|
|
|
89
89
|
/* Sidebar dark */
|
|
90
|
-
--sidebar-background:
|
|
91
|
-
--sidebar-foreground:
|
|
90
|
+
--sidebar-background: 0 0% 10%;
|
|
91
|
+
--sidebar-foreground: 0 0% 60%;
|
|
92
92
|
--sidebar-primary: 0 0% 75%;
|
|
93
|
-
--sidebar-primary-foreground:
|
|
94
|
-
--sidebar-accent:
|
|
93
|
+
--sidebar-primary-foreground: 0 0% 10%;
|
|
94
|
+
--sidebar-accent: 0 0% 16%;
|
|
95
95
|
--sidebar-accent-foreground: 0 0% 90%;
|
|
96
|
-
--sidebar-border:
|
|
96
|
+
--sidebar-border: 0 0% 20%;
|
|
97
97
|
--sidebar-ring: 0 0% 60%;
|
|
98
98
|
--sidebar-muted: 0 0% 50%;
|
|
99
99
|
}
|
|
@@ -141,6 +141,20 @@
|
|
|
141
141
|
fill: var(--notion-logo-mark);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
@container agent-native-main (min-width: 560px) {
|
|
145
|
+
.content-database-calendar-undated-grid,
|
|
146
|
+
.content-database-gallery-grid {
|
|
147
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@container agent-native-main (min-width: 900px) {
|
|
152
|
+
.content-database-calendar-undated-grid,
|
|
153
|
+
.content-database-gallery-grid {
|
|
154
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
144
158
|
/* ===== Scrollbar ===== */
|
|
145
159
|
@layer utilities {
|
|
146
160
|
.scrollbar-thin::-webkit-scrollbar {
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-generation
|
|
3
|
+
description: >-
|
|
4
|
+
Generate or refine complete interactive HTML prototypes in Design. Use when
|
|
5
|
+
creating screens, variants, Alpine/Tailwind prototypes, tweaks, or visual
|
|
6
|
+
refinements from a prompt or selected design.
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Design Generation
|
|
2
10
|
|
|
3
11
|
How to generate complete, interactive HTML prototypes using Alpine.js + Tailwind CSS (via CDN). This is the core skill for the design agent.
|
|
@@ -90,8 +98,10 @@ pnpm action show-design-questions \
|
|
|
90
98
|
### Phase 2 — Generate side-by-side variations (2-5, three by default)
|
|
91
99
|
|
|
92
100
|
For new designs, default to **three** variations (`present-design-variants`
|
|
93
|
-
accepts 2-5; three is the sweet spot).
|
|
94
|
-
|
|
101
|
+
accepts 2-5; three is the sweet spot). Call `present-design-variants` for both
|
|
102
|
+
first-party and external MCP-host flows. It saves each candidate as a normal
|
|
103
|
+
overview-board screen, then renders an inline chat choice with one button per
|
|
104
|
+
screen name.
|
|
95
105
|
|
|
96
106
|
```json
|
|
97
107
|
{
|
|
@@ -107,24 +117,12 @@ candidates to `application-state/design-variants`:
|
|
|
107
117
|
|
|
108
118
|
Each `content` is a complete, self-contained document (Alpine.js + Tailwind via CDN, full `<head>`, CSS variables in `:root`). Variations should be **stylistically/structurally distinct** — different typography schools, layout grammars, color moods — never just color swaps. Label them with concrete style names ("Editorial Serif", not "Variant A").
|
|
109
119
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
the same editor variant picker as the first-party app and keeps the workflow
|
|
117
|
-
visible inside MCP Apps. After that, wait for the user's pick before refining.
|
|
118
|
-
|
|
119
|
-
For inline MCP-app hosts (ChatGPT / Claude / Claude Desktop main chat) the pick
|
|
120
|
-
rides the chat bridge automatically — no copy/paste. But if the Design app opens
|
|
121
|
-
as a browser link instead of inline (CLI hosts like Codex / Claude Code, where
|
|
122
|
-
the deep link carries `handoff=chat`), the user picks a direction there and the
|
|
123
|
-
editor shows a copyable handoff summary (auto-copied to the clipboard) — ask
|
|
124
|
-
them to paste it back into chat so you can continue from the chosen direction.
|
|
125
|
-
The user can also simply name the pick in words (e.g. "use variant A" / "the
|
|
126
|
-
editorial one") instead of pasting — honor either. The
|
|
127
|
-
`present-design-variants` result's `fallbackInstructions` describe this.
|
|
120
|
+
Wait for the user's pick before refining. Once they choose, keep the selected
|
|
121
|
+
screen, delete the unchosen variant screens with `delete-file`, and continue
|
|
122
|
+
from the kept screen. If inline chat choice buttons are unavailable in the host,
|
|
123
|
+
ask the user to tell you the preferred screen name. Do not ask them to paste HTML
|
|
124
|
+
or a generated handoff summary; the variants are already real screens on the
|
|
125
|
+
board.
|
|
128
126
|
|
|
129
127
|
### Phase 3 — Save with `generate-design` (when not using variants)
|
|
130
128
|
|
|
@@ -142,6 +140,13 @@ pnpm action generate-design \
|
|
|
142
140
|
|
|
143
141
|
`generate-design` accepts a `--tweaks` array — pass 3-6 of the most impactful knobs bound to CSS custom properties the design's `:root` block actually defines. Surface controls users will actually want to adjust (accent color, density, radius, dark-mode toggle, font choice). Don't ship a generic preset; let the design's structure pick the knobs.
|
|
144
142
|
|
|
143
|
+
### Phase 5 — Review before calling it ready
|
|
144
|
+
|
|
145
|
+
Open the generated screen or overview and inspect it like a design review:
|
|
146
|
+
hierarchy, overflow, mobile fit, contrast, keyboard focus, empty/loading/error
|
|
147
|
+
states for app UI, and whether the copy/content still sounds real. Fix obvious
|
|
148
|
+
issues before reporting the design as ready.
|
|
149
|
+
|
|
145
150
|
## HTML Structure Requirements
|
|
146
151
|
|
|
147
152
|
### Mandatory Elements
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-systems
|
|
3
|
+
description: >-
|
|
4
|
+
Manage and apply Design app brand systems. Use when creating, importing,
|
|
5
|
+
linking, inspecting, or following design-system tokens, assets, fonts, logos,
|
|
6
|
+
and custom instructions.
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Design Systems
|
|
2
10
|
|
|
3
11
|
Design systems store brand identity tokens (colors, fonts, spacing, logos) that are applied to all designs in a project.
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: export-handoff
|
|
3
|
+
description: >-
|
|
4
|
+
Export Design work and produce developer handoff materials. Use when the user
|
|
5
|
+
wants HTML, PNG, SVG, ZIP/code exports, implementation notes, or a coding
|
|
6
|
+
handoff for a selected design.
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Export and Handoff
|
|
2
10
|
|
|
3
11
|
How to export designs and generate handoff documentation for developers converting prototypes to production code.
|
|
@@ -3,6 +3,8 @@ name: visual-edit
|
|
|
3
3
|
description: >-
|
|
4
4
|
Open a running local app in Design overview mode as URL-backed iframe screens
|
|
5
5
|
for visual editing, flow review, duplication, and route-state exploration.
|
|
6
|
+
Use when the user asks to inspect, compare, or edit a real local app visually
|
|
7
|
+
in Design.
|
|
6
8
|
metadata:
|
|
7
9
|
visibility: exported
|
|
8
10
|
---
|
|
@@ -32,6 +34,17 @@ iframe-backed screens on the infinite canvas.
|
|
|
32
34
|
and create one screen per URL/path. Shorthand like
|
|
33
35
|
`localhost:1234/onboarding/1` means `http://localhost:1234/onboarding/1`.
|
|
34
36
|
|
|
37
|
+
## Review Quality
|
|
38
|
+
|
|
39
|
+
- Treat the running app as the truth. Preserve its component language, tokens,
|
|
40
|
+
route state, and real content unless the user explicitly asks for a new visual
|
|
41
|
+
direction.
|
|
42
|
+
- Use multiple URL states to reveal meaningful UX moments: empty/loading/error
|
|
43
|
+
states, focused panels, modals, responsive breakpoints, and completed flow
|
|
44
|
+
steps when those matter to the review.
|
|
45
|
+
- For visual edits, compare before/after at the relevant viewport sizes and
|
|
46
|
+
check key hover/focus/scroll states when the app exposes them.
|
|
47
|
+
|
|
35
48
|
## Required Local Bridge
|
|
36
49
|
|
|
37
50
|
From the target app repo, make sure its dev server is running, then run the
|
|
@@ -25,6 +25,13 @@ patterns live in `.agents/skills/`.
|
|
|
25
25
|
selected file is not already clear from context.
|
|
26
26
|
- Generated files must be complete, standalone HTML unless the user asks for a
|
|
27
27
|
different export format. They should render in the iframe without a build step.
|
|
28
|
+
- For design generation, ground the work in a concrete audience, primary job,
|
|
29
|
+
and visual thesis before writing. For existing products, inspect current
|
|
30
|
+
screens, linked design systems, tokens, and component language before
|
|
31
|
+
inventing a new direction. Use realistic content/copy and one signature choice
|
|
32
|
+
per direction; avoid lorem ipsum, generic SaaS filler, and decorative
|
|
33
|
+
placeholders. Include expected responsive/accessibility states and visually
|
|
34
|
+
inspect the result before calling it ready.
|
|
28
35
|
- For raster image generation, restyling, or editing existing screenshots/photos,
|
|
29
36
|
use the available first-party Assets MCP tool such as `generate-asset` instead
|
|
30
37
|
of placeholders or generic stock imagery. When the Assets picker returns a
|
|
@@ -97,9 +104,10 @@ patterns live in `.agents/skills/`.
|
|
|
97
104
|
generated CSS selectors as a compatibility fallback only. For localhost React
|
|
98
105
|
screens, resolve through build-time source/debug metadata (stable generated
|
|
99
106
|
ids, component name, file, and line) before falling back to selectors.
|
|
100
|
-
- For multi-variant work,
|
|
101
|
-
|
|
102
|
-
|
|
107
|
+
- For multi-variant work, use `present-design-variants` so every candidate is
|
|
108
|
+
saved as a normal overview-board screen and the user gets one inline chat
|
|
109
|
+
button per screen name. After the user picks, delete the unchosen variant
|
|
110
|
+
screens before continuing from the kept screen.
|
|
103
111
|
- Use framework sharing actions for design and design-system visibility/grants.
|
|
104
112
|
- `/visual-edit` is a public entry route and public `/design/:id` links may
|
|
105
113
|
render read-only public designs without a session. Do not open anonymous write
|
|
@@ -127,11 +135,15 @@ patterns live in `.agents/skills/`.
|
|
|
127
135
|
- `navigate` moves the UI and is auto-deleted after the client consumes it.
|
|
128
136
|
- `design-selection` includes active screen, selected element, overview mode,
|
|
129
137
|
inspector tab, zoom, and screen list for the current tab.
|
|
130
|
-
- `design-generation-session:<designId>` contains
|
|
131
|
-
generation
|
|
138
|
+
- `design-generation-session:<designId>` contains agent-facing multi-screen
|
|
139
|
+
generation planning state created by `generate-screens` (canvas region
|
|
140
|
+
assignments and per-frame instructions consumed by `generate-design` and
|
|
141
|
+
`view-screen`; not rendered as canvas overlays).
|
|
132
142
|
- `show-design-questions` opens focused pre-generation questions in the main
|
|
133
143
|
design canvas (`show-questions` application state).
|
|
134
|
-
- `
|
|
144
|
+
- `guided-questions` may contain a one-click chat choice for the current
|
|
145
|
+
variant set. Variants themselves are normal design files with `canvasFrames`
|
|
146
|
+
and `screenMetadata`.
|
|
135
147
|
|
|
136
148
|
## Code Layers
|
|
137
149
|
|
|
@@ -179,14 +191,12 @@ patterns live in `.agents/skills/`.
|
|
|
179
191
|
and open the editor in overview mode.
|
|
180
192
|
- For human-in-the-loop UI exploration, create a design shell, call
|
|
181
193
|
`present-design-variants` with 2-5 complete HTML directions (three by
|
|
182
|
-
default), wait for the user to pick one,
|
|
183
|
-
`
|
|
184
|
-
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
(also in `present-design-variants` result `fallbackInstructions`) — ask them
|
|
189
|
-
to paste it back into chat so you can continue from the chosen direction.
|
|
194
|
+
default), wait for the user to pick one in chat, delete the other generated
|
|
195
|
+
variant screens with `delete-file`, then use `get-design-snapshot` and
|
|
196
|
+
`generate-design` or `edit-design` for follow-up refinements.
|
|
197
|
+
- If inline chat choice buttons are unavailable, the user can tell you the
|
|
198
|
+
preferred screen name. Do not show a separate variant picker or ask them to
|
|
199
|
+
paste a copyable handoff summary.
|
|
190
200
|
|
|
191
201
|
## Skills
|
|
192
202
|
|