@agent-native/core 0.79.27 → 0.80.1
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 +34 -0
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/corpus/core/docs/content/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/template-design.mdx +59 -1
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/agent/engine/index.ts +1 -0
- package/corpus/core/src/agent/engine/registry.ts +40 -0
- package/corpus/core/src/agent/production-agent.ts +6 -2
- package/corpus/core/src/application-state/handlers.ts +1 -1
- package/corpus/core/src/brand-kit/index.ts +1 -1
- package/corpus/core/src/cli/design-connect.ts +490 -0
- package/corpus/core/src/cli/index.ts +16 -0
- package/corpus/core/src/cli/skills.ts +144 -3
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/AssistantChat.tsx +43 -7
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +1 -1
- package/corpus/core/src/client/agent-chat.ts +27 -3
- package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
- package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
- package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
- package/corpus/core/src/client/chat/message-components.tsx +1 -1
- package/corpus/core/src/client/chat-model-groups.ts +1 -2
- package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
- package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
- package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
- package/corpus/core/src/client/extensions/portable-extension.ts +1 -1
- package/corpus/core/src/client/frame-protocol.ts +17 -2
- package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
- package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
- package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
- package/corpus/core/src/code-agents/transcript-normalizer.ts +1 -1
- package/corpus/core/src/extensions/path.ts +1 -4
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +1 -1
- package/corpus/core/src/mcp/build-server.ts +1 -1
- package/corpus/core/src/org/handlers.ts +5 -5
- package/corpus/core/src/org/plugin.ts +2 -2
- package/corpus/core/src/scripts/call-agent.ts +1 -1
- package/corpus/core/src/scripts/db/safety.ts +1 -1
- package/corpus/core/src/server/auth.ts +3 -0
- package/corpus/core/src/server/builder-design-systems.ts +308 -0
- package/corpus/core/src/server/core-routes-plugin.ts +29 -3
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/server/transcribe-voice.ts +57 -22
- package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
- package/corpus/core/src/styles/agent-native.css +60 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/core/src/usage/store.ts +2 -2
- package/corpus/core/src/vite/client.ts +2 -0
- package/corpus/core/src/voice/index.ts +18 -0
- package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
- package/corpus/core/src/voice/voice-context.ts +217 -0
- package/corpus/core/src/voice/voice-replacements.ts +75 -0
- package/corpus/templates/analytics/AGENTS.md +4 -3
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +298 -15
- package/corpus/templates/analytics/actions/get-sql-dashboard.ts +9 -4
- package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +18 -2
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +12 -2
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
- package/corpus/templates/analytics/app/global.css +0 -4
- package/corpus/templates/analytics/app/hooks/use-replay-storage-status.ts +66 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +39 -0
- package/corpus/templates/analytics/app/i18n-data.ts +424 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +333 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +121 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +82 -34
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +144 -36
- package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-agents-can-now-place-new-charts-into-requested-das.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-queries-now-report-failed-source-query-errors-inst.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-charts-can-now-be-dropped-between-full-dashboard-rows-to-cre.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-dashboard-email-reports-include-the-full-dashboard-image-wit.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-main-surface-border-reaches-the-top.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-session-replay-now-records-playable-sessions-in-production-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-set-up-session-replay-storage-from-settings-connect-builder-.md +6 -0
- package/corpus/templates/analytics/scripts/cleanup-empty-session-recordings.ts +102 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +75 -30
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +81 -20
- package/corpus/templates/analytics/server/lib/replay-storage.ts +79 -0
- package/corpus/templates/analytics/server/lib/s3-upload-provider.ts +255 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +53 -12
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -2
- package/corpus/templates/analytics/server/plugins/onboarding.ts +97 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
- package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/brain/app/i18n-data.ts +20 -0
- package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
- package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
- package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
- package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
- package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +24 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +105 -5
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
- package/corpus/templates/content/actions/set-image-alt-text.ts +1 -1
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
- package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/content/shared/document-export.ts +1 -1
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -18
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +154 -0
- package/corpus/templates/design/AGENTS.md +95 -5
- package/corpus/templates/design/DESIGN.md +82 -0
- package/corpus/templates/design/DEVELOPING.md +43 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +453 -0
- package/corpus/templates/design/actions/apply-shader.ts +277 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
- package/corpus/templates/design/actions/connect-localhost.ts +183 -0
- package/corpus/templates/design/actions/edit-design.ts +195 -42
- package/corpus/templates/design/actions/generate-design.ts +71 -1
- package/corpus/templates/design/actions/generate-screens.ts +193 -0
- package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
- package/corpus/templates/design/actions/get-shader.ts +119 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
- package/corpus/templates/design/actions/navigate.ts +55 -2
- package/corpus/templates/design/actions/update-file.ts +9 -2
- package/corpus/templates/design/actions/view-screen.ts +68 -1
- package/corpus/templates/design/agent-native.app-skill.json +10 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +719 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2120 -103
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +401 -0
- package/corpus/templates/design/app/components/design/EditPanel.tsx +3966 -440
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +1473 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3940 -147
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +105 -63
- package/corpus/templates/design/app/components/design/index.ts +0 -5
- package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +353 -0
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +1589 -0
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +511 -0
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +395 -0
- package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +2010 -0
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +601 -0
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +242 -0
- package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +238 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +575 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +423 -0
- package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +741 -0
- package/corpus/templates/design/app/components/design/inspector/index.ts +87 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
- package/corpus/templates/design/app/components/design/types.ts +23 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
- package/corpus/templates/design/app/global.css +149 -5
- package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +277 -0
- package/corpus/templates/design/app/i18n-data.ts +3028 -1
- package/corpus/templates/design/app/pages/DesignEditor.tsx +5831 -904
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +57 -221
- package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-canvas-selection-no-longer-flashes-broken-prototype-html-whe.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-command-menu-selections-are-clearer-in-dark-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-mode-top-chrome-now-groups-collaborators-preview-shar.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-element-selection-now-stays-on-the-intended-layer-after-sele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-full-view-controls-now-sit-above-frames-inst.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-tools-can-draw-shapes-create-screens-and-kee.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-now-creates-anchor-based-bezier-vectors-with-ha.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/server/db/schema.ts +26 -0
- package/corpus/templates/design/server/handlers/import-figma-system.ts +38 -85
- package/corpus/templates/design/server/lib/design-snapshot.ts +9 -1
- package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
- package/corpus/templates/design/shared/api.ts +27 -0
- package/corpus/templates/design/shared/canvas-frames.ts +103 -0
- package/corpus/templates/design/shared/canvas-math.ts +1058 -0
- package/corpus/templates/design/shared/code-layer.ts +2412 -0
- package/corpus/templates/design/shared/color-utils.ts +180 -0
- package/corpus/templates/design/shared/generation-session.ts +61 -0
- package/corpus/templates/design/shared/html-content.ts +21 -0
- package/corpus/templates/design/shared/pen-path.ts +207 -0
- package/corpus/templates/design/shared/shader-presets.ts +782 -0
- package/corpus/templates/design/shared/shader-safety.ts +137 -0
- package/corpus/templates/design/shared/source-mode.ts +237 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
- package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
- package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/mail/app/lib/utils.ts +2 -2
- package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
- package/corpus/templates/plan/app/global.css +61 -78
- package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
- package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +9 -10
- package/corpus/templates/slides/AGENTS.md +3 -2
- package/corpus/templates/slides/actions/import-file.ts +26 -17
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +35 -167
- package/corpus/templates/slides/app/components/design-system/fig-import-response.ts +9 -13
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
- package/corpus/templates/slides/app/context/DeckContext.tsx +1 -1
- package/corpus/templates/slides/app/i18n/ar-SA.ts +9 -37
- package/corpus/templates/slides/app/i18n/de-DE.ts +10 -25
- package/corpus/templates/slides/app/i18n/en-US.ts +9 -26
- package/corpus/templates/slides/app/i18n/es-ES.ts +10 -28
- package/corpus/templates/slides/app/i18n/fr-FR.ts +10 -28
- package/corpus/templates/slides/app/i18n/hi-IN.ts +9 -26
- package/corpus/templates/slides/app/i18n/ja-JP.ts +10 -22
- package/corpus/templates/slides/app/i18n/ko-KR.ts +9 -23
- package/corpus/templates/slides/app/i18n/pt-BR.ts +10 -28
- package/corpus/templates/slides/app/i18n/zh-CN.ts +9 -22
- package/corpus/templates/slides/app/i18n/zh-TW.ts +9 -22
- package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/slides/server/handlers/import-figma-system.ts +44 -12
- package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +1 -1
- package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
- package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
- package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +9 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +37 -0
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +4 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/application-state/handlers.js +1 -1
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/brand-kit/index.d.ts +1 -1
- package/dist/brand-kit/index.js +1 -1
- package/dist/brand-kit/index.js.map +1 -1
- package/dist/cli/design-connect.d.ts +52 -0
- package/dist/cli/design-connect.d.ts.map +1 -0
- package/dist/cli/design-connect.js +409 -0
- package/dist/cli/design-connect.js.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +139 -3
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +38 -8
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +6 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +17 -3
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/blocks/library/MermaidBlock.js +1 -1
- package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/wireframe.js +1 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/message-components.js +1 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +1 -2
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js +19 -40
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +86 -24
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts +9 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +154 -32
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/frame-protocol.d.ts +17 -2
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame-protocol.js.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +2 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +7 -6
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +5 -0
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +51 -25
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +1 -1
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/extensions/path.d.ts +1 -1
- package/dist/extensions/path.d.ts.map +1 -1
- package/dist/extensions/path.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/integrations/a2a-continuation-processor.js +1 -1
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/mcp/build-server.d.ts +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/org/handlers.js +5 -5
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/plugin.js +2 -2
- package/dist/org/plugin.js.map +1 -1
- package/dist/scripts/call-agent.js +1 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/db/safety.js +1 -1
- package/dist/scripts/db/safety.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +3 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +28 -0
- package/dist/server/builder-design-systems.d.ts.map +1 -0
- package/dist/server/builder-design-systems.js +217 -0
- package/dist/server/builder-design-systems.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +20 -3
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +40 -24
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/shared/mcp-embed-headers.d.ts +1 -0
- package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
- package/dist/shared/mcp-embed-headers.js +20 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/styles/agent-native.css +60 -4
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/dist/usage/store.js +2 -2
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +2 -0
- package/dist/vite/client.js.map +1 -1
- package/dist/voice/index.d.ts +5 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +4 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
- package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
- package/dist/voice/voice-cleanup-prompt.js +26 -0
- package/dist/voice/voice-cleanup-prompt.js.map +1 -0
- package/dist/voice/voice-context.d.ts +25 -0
- package/dist/voice/voice-context.d.ts.map +1 -0
- package/dist/voice/voice-context.js +156 -0
- package/dist/voice/voice-context.js.map +1 -0
- package/dist/voice/voice-replacements.d.ts +4 -0
- package/dist/voice/voice-replacements.d.ts.map +1 -0
- package/dist/voice/voice-replacements.js +52 -0
- package/dist/voice/voice-replacements.js.map +1 -0
- package/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/docs/content/skills-guide.mdx +5 -0
- package/docs/content/template-design.mdx +59 -1
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/templates/design/actions/import-figma-file.ts +0 -166
- package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
- package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
- package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
- package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
- package/corpus/templates/slides/server/lib/fig-design-system.ts +0 -110
|
@@ -338,7 +338,7 @@ UI 中的路由位于 `templates/design/app/routes/` 下:`_index.tsx`(列表
|
|
|
338
338
|
- **设计** - `create-design`(空壳)、`generate-design`(写入生成的 HTML/JSX 内容)、`update-design`、`get-design`、`list-designs`、`duplicate-design`、`delete-design` 和 `apply-tweaks` 用于持久保存实时调整旋钮值(强调色、密度等)。
|
|
339
339
|
- **文件** - `create-file`、`update-file`、`list-files`、`delete-file` 用于设计项目内的文件。
|
|
340
340
|
- **设计系统** - `create-design-system`、`update-design-system`、`get-design-system`、`list-design-systems`、`delete-design-system`、`set-default-design-system` 和 `analyze-brand-assets` 用于在分析之前收集品牌数据。
|
|
341
|
-
- **导入**
|
|
341
|
+
- **导入** — `index-design-system-with-builder` for Builder-backed code/GitHub design-system indexing, plus `import-figma`, `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **导出和移交** - `export-html`、`export-pdf`、`export-svg`、`export-zip` 和 `export-coding-handoff` 将设计转变为编码工具移交。
|
|
343
343
|
- **上下文和导航** - `view-screen`(当前设计、打开的文件、视图、待决问题或变体网格)、`get-design-snapshot`(外部代理继续的当前状态)和 `navigate`。
|
|
344
344
|
|
|
@@ -348,6 +348,55 @@ UI 中的路由位于 `templates/design/app/routes/` 下:`_index.tsx`(列表
|
|
|
348
348
|
|
|
349
349
|
因为设计只是独立的 HTML/JSX 文件,所以代理编辑 iframe 渲染和每个导出来自的相同源 - 没有单独的“AI 模型”格式需要翻译。链接设计系统提供代币和代理在每一代通行证上兑现的 `custom_instructions`。在预览中选择文本或区域,然后按 Cmd+I 将代理集中在该部分上。
|
|
350
350
|
|
|
351
|
+
### 编辑器模型
|
|
352
|
+
|
|
353
|
+
Design 对多屏工作采用概览优先。生成或进行大范围更新后,编辑器会打开屏幕
|
|
354
|
+
概览:一个无限画布,其中每个屏幕都是可选择、移动、调整大小、拖放或复制的
|
|
355
|
+
静态框架。需要聚焦滚动或原型交互时,请使用框架的完整视图按钮。
|
|
356
|
+
|
|
357
|
+
单屏模式用于滚动、与原型行为交互,以及编辑一个已渲染文件内的 DOM/代码
|
|
358
|
+
层。图层面板也反映这种分工:屏幕是顶层框架,活动屏幕下嵌套 DOM/代码层。
|
|
359
|
+
|
|
360
|
+
当编码代理需要在 Design 中打开正在运行的本地应用,而不是生成独立原型 HTML
|
|
361
|
+
时,请安装 `/visual-edit`:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
目标应用的开发服务器运行后,`/visual-edit` 会结合
|
|
368
|
+
`npx @agent-native/core@latest design connect` 和 `add-localhost-screens`,把每个
|
|
369
|
+
请求的 path 或 URL 放置为独立的 URL-backed iframe 屏幕。像
|
|
370
|
+
`localhost:1234/onboarding/1`、`/onboarding/2`、`/onboarding/3` 这样的编号流程
|
|
371
|
+
会在 overview 模式中保持为分开的有序屏幕。
|
|
372
|
+
|
|
373
|
+
为了获得稳定的图层名称,请在有意义的元素上添加
|
|
374
|
+
`data-agent-native-layer-name`。Design 会优先使用它,然后才使用语义/文本回
|
|
375
|
+
退,并且可以通过编辑该属性来持久保存图层重命名。Inline HTML 支持本地代
|
|
376
|
+
码层编辑,包括文本、class、style、attribute、源顺序和小型结构调整;可视
|
|
377
|
+
代码层编辑目前仅支持 HTML。Localhost source mode 可以注册并解析本地路由
|
|
378
|
+
artboard,但本地文件读写仍是桥接合同,直到显式权限控制完成加固。
|
|
379
|
+
|
|
380
|
+
### Design 编辑器扩展
|
|
381
|
+
|
|
382
|
+
编辑器在 **Tweaks** 之后包含一个 **Extensions** 检查器标签。它像 Design
|
|
383
|
+
专属的插件通道:用户可以点击 **+ Extension** 让代理创建扩展,也可以安装声
|
|
384
|
+
明 `design.editor.inspector` slot 的扩展。
|
|
385
|
+
|
|
386
|
+
Design 扩展通过标准扩展 sandbox 内嵌渲染在 artboard 旁边。宿主会通过
|
|
387
|
+
`window.slotContext` 和 `window.onSlotContext(...)` 更新传入当前
|
|
388
|
+
`designId`、活动文件、屏幕列表、已选屏幕 id、已选元素元数据、视图模式、
|
|
389
|
+
缩放、活动工具和 tweak 值。这样扩展就可以显示当前选择的信息、提供样式控
|
|
390
|
+
件,或围绕打开的设计构建紧凑工作流。
|
|
391
|
+
|
|
392
|
+
对于确定性的工作,扩展可以通过扩展桥调用 app actions。对于 AI 驱动的变
|
|
393
|
+
更,让扩展调用 `agentNative.chat.send(...)`,并附带已选元素的 selector/source
|
|
394
|
+
id 和请求的更改。代理应先调用 `view-screen`,然后用 `apply-visual-edit`
|
|
395
|
+
处理元素 style、class、text 或 move 更改,或用带 `canvasFrames` 的
|
|
396
|
+
`update-design` / `generate-design` 处理 artboard placement 更改。有关
|
|
397
|
+
sandbox、持久状态和桥接 API,请参阅
|
|
398
|
+
[Extensions](/docs/extensions#what-an-extension-can-do)。
|
|
399
|
+
|
|
351
400
|
### 自定义它
|
|
352
401
|
|
|
353
402
|
设计是一个完整的、可克隆的模板。一些实用的扩展想法:
|
|
@@ -118,6 +118,10 @@ Skills 位於 `.agents/skills/<name>/SKILL.md`,包含針對代理的詳細指
|
|
|
118
118
|
|
|
119
119
|
## 應用程式支援的 skills {#app-backed-skills}
|
|
120
120
|
|
|
121
|
+
目前應用支援的 skills 包括 Plan 的 `visual-plan` 和 `visual-recap`、Design
|
|
122
|
+
的 `visual-edit`、Assets 的 `assets`,以及用於儲存庫內 docs/blog/MDX 編輯的
|
|
123
|
+
`content`。
|
|
124
|
+
|
|
121
125
|
應用程式支援的 skills 將 Agent-Native 應用程式打包為技能市場工件。該捆綁包可以包含代理指令、匯出的 skills、MCP 連線器中繼資料、託管/本機啟動指令和 UI 表面(例如 MCP 應用程式)。
|
|
122
126
|
|
|
123
127
|
> **完整詳細資訊如下:** [App-backed skills — full details](#app-backed-skills-full) 中介紹了應用程式支援的 skills 的機制(清單格式、CLI 指令、市場轉接器、自動更新哈希)。
|
|
@@ -328,6 +332,7 @@ Hosted 是預設安裝路徑。本機啟動是明確的定制,
|
|
|
328
332
|
```bash
|
|
329
333
|
# 愉快的路徑:匯出的指令加上託管的 MCP 連線器。
|
|
330
334
|
npx @agent-native/core@latest skills add visual-plan
|
|
335
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
331
336
|
npx @agent-native/core@latest skills add assets
|
|
332
337
|
|
|
333
338
|
# 回購優先內容 docs/blog/MDX 編輯。
|
|
@@ -338,7 +338,7 @@ UI 中的路由位於 `templates/design/app/routes/` 下:`_index.tsx`(清單
|
|
|
338
338
|
- **設計** - `create-design`(空殼)、`generate-design`(寫入產生的 HTML/JSX 內容)、`update-design`、`get-design`、`list-designs`、`duplicate-design`、`delete-design` 和 `apply-tweaks` 用於持久儲存即時調整旋鈕值(強調色、密度等)。
|
|
339
339
|
- **檔案** - `create-file`、`update-file`、`list-files`、`delete-file` 用於設計專案內的檔案。
|
|
340
340
|
- **設計系統** - `create-design-system`、`update-design-system`、`get-design-system`、`list-design-systems`、`delete-design-system`、`set-default-design-system` 和 `analyze-brand-assets` 用於在分析之前收集品牌資料。
|
|
341
|
-
- **匯入**
|
|
341
|
+
- **匯入** — `index-design-system-with-builder` for Builder-backed code/GitHub design-system indexing, plus `import-figma`, `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **匯出和移交** - `export-html`、`export-pdf`、`export-svg`、`export-zip` 和 `export-coding-handoff` 將設計轉變為編碼工具移交。
|
|
343
343
|
- **脈絡和導覽** - `view-screen`(目前設計、開啟的檔案、檢視、待決問題或變體網格)、`get-design-snapshot`(外部代理繼續的目前狀態)和 `navigate`。
|
|
344
344
|
|
|
@@ -348,6 +348,57 @@ UI 中的路由位於 `templates/design/app/routes/` 下:`_index.tsx`(清單
|
|
|
348
348
|
|
|
349
349
|
因為設計只是獨立的 HTML/JSX 檔案,所以代理編輯 iframe 渲染和每個匯出來自的相同來源 - 沒有單獨的“AI 模型”格式需要翻譯。連結設計系統提供代幣和代理在每一代通行證上兌現的 `custom_instructions`。在預覽中選取文字或區域,然後按 Cmd+I 將代理集中在該部分上。
|
|
350
350
|
|
|
351
|
+
### 編輯器模型
|
|
352
|
+
|
|
353
|
+
Design 對多畫面工作採用概覽優先。產生或進行大範圍更新後,編輯器會開啟
|
|
354
|
+
畫面概覽:一個無限畫布,其中每個畫面都是可選取、移動、調整大小、拖放或
|
|
355
|
+
複製的靜態框架。需要聚焦捲動或原型互動時,請使用框架的完整檢視按鈕。
|
|
356
|
+
|
|
357
|
+
單畫面模式用於捲動、與原型行為互動,以及編輯一個已渲染檔案內的 DOM/程
|
|
358
|
+
式碼圖層。圖層面板也反映這種分工:畫面是頂層框架,作用中畫面下嵌套
|
|
359
|
+
DOM/程式碼圖層。
|
|
360
|
+
|
|
361
|
+
當編碼代理需要在 Design 中開啟正在執行的本機應用,而不是產生獨立原型 HTML
|
|
362
|
+
時,請安裝 `/visual-edit`:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
目標應用的開發伺服器執行後,`/visual-edit` 會結合
|
|
369
|
+
`npx @agent-native/core@latest design connect` 和 `add-localhost-screens`,把每個
|
|
370
|
+
要求的 path 或 URL 放置為獨立的 URL-backed iframe 畫面。像
|
|
371
|
+
`localhost:1234/onboarding/1`、`/onboarding/2`、`/onboarding/3` 這樣的編號流程
|
|
372
|
+
會在 overview 模式中保持為分開的有序畫面。
|
|
373
|
+
|
|
374
|
+
若要取得穩定的圖層名稱,請在有意義的元素上加入
|
|
375
|
+
`data-agent-native-layer-name`。Design 會優先使用它,然後才使用語意/文字
|
|
376
|
+
後備,並且可以透過編輯該屬性來持久保存圖層重新命名。Inline HTML 支援本
|
|
377
|
+
機程式碼圖層編輯,包括文字、class、style、attribute、來源順序和小型結構
|
|
378
|
+
調整;視覺程式碼圖層編輯目前僅支援 HTML。Localhost source mode 可以註冊
|
|
379
|
+
並解析本機路由 artboard,但本機檔案讀寫仍是橋接合約,直到明確權限控制
|
|
380
|
+
完成加固。
|
|
381
|
+
|
|
382
|
+
### Design 編輯器擴充功能
|
|
383
|
+
|
|
384
|
+
編輯器在 **Tweaks** 之後包含一個 **Extensions** 檢查器標籤。它像 Design
|
|
385
|
+
專屬的外掛通道:使用者可以點擊 **+ Extension** 讓代理建立擴充功能,也可
|
|
386
|
+
以安裝宣告 `design.editor.inspector` slot 的擴充功能。
|
|
387
|
+
|
|
388
|
+
Design 擴充功能會透過標準擴充 sandbox 內嵌渲染在 artboard 旁邊。host 會
|
|
389
|
+
透過 `window.slotContext` 和 `window.onSlotContext(...)` 更新傳入目前的
|
|
390
|
+
`designId`、作用中檔案、畫面清單、已選畫面 id、已選元素中繼資料、檢視模
|
|
391
|
+
式、縮放、作用中工具和 tweak 值。這讓擴充功能可以顯示目前選取項目的資
|
|
392
|
+
訊、提供樣式控制,或圍繞開啟的設計建立精簡工作流程。
|
|
393
|
+
|
|
394
|
+
對於確定性的工作,擴充功能可以透過擴充橋接呼叫 app actions。對於 AI 驅
|
|
395
|
+
動的變更,讓擴充功能呼叫 `agentNative.chat.send(...)`,並附上已選元素的
|
|
396
|
+
selector/source id 和要求的變更。代理應先呼叫 `view-screen`,再用
|
|
397
|
+
`apply-visual-edit` 處理元素 style、class、text 或 move 變更,或用帶有
|
|
398
|
+
`canvasFrames` 的 `update-design` / `generate-design` 處理 artboard placement
|
|
399
|
+
變更。關於 sandbox、持久狀態和橋接 API,請參閱
|
|
400
|
+
[Extensions](/docs/extensions#what-an-extension-can-do)。
|
|
401
|
+
|
|
351
402
|
### 自訂它
|
|
352
403
|
|
|
353
404
|
設計是一個完整的、可克隆的範本。一些實用的擴充功能想法:
|
|
@@ -120,6 +120,10 @@ Domain skills follow the same format as framework skills. They encode patterns s
|
|
|
120
120
|
|
|
121
121
|
App-backed skills package an agent-native app as a skill marketplace artifact. The bundle can include agent instructions, exported skills, MCP connector metadata, hosted/local launch instructions, and UI surfaces such as MCP Apps.
|
|
122
122
|
|
|
123
|
+
Current app-backed skills include `visual-plan` and `visual-recap` from Plan,
|
|
124
|
+
`visual-edit` from Design, `assets` from Assets, and `content` for repo-backed
|
|
125
|
+
docs/blog/MDX editing.
|
|
126
|
+
|
|
123
127
|
> **Full details below:** the mechanics of app-backed skills (manifest format, CLI commands, marketplace adapters, auto-update hashing) are covered in [App-backed skills — full details](#app-backed-skills-full).
|
|
124
128
|
|
|
125
129
|
## Creating custom skills {#creating-skills}
|
|
@@ -328,6 +332,7 @@ offline work, or privacy-sensitive use.
|
|
|
328
332
|
```bash
|
|
329
333
|
# Happy path: exported instructions plus hosted MCP connector.
|
|
330
334
|
npx @agent-native/core@latest skills add visual-plan
|
|
335
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
331
336
|
npx @agent-native/core@latest skills add assets
|
|
332
337
|
|
|
333
338
|
# Repo-first Content docs/blog/MDX editing.
|
|
@@ -338,7 +338,7 @@ Every agent-callable operation is a TypeScript file in `templates/design/actions
|
|
|
338
338
|
- **Designs** — `create-design` (empty shell), `generate-design` (write generated HTML/JSX content), `update-design`, `get-design`, `list-designs`, `duplicate-design`, `delete-design`, and `apply-tweaks` for persisting live tweak-knob values (accent color, density, etc.).
|
|
339
339
|
- **Files** — `create-file`, `update-file`, `list-files`, `delete-file` for the files inside a design project.
|
|
340
340
|
- **Design systems** — `create-design-system`, `update-design-system`, `get-design-system`, `list-design-systems`, `delete-design-system`, `set-default-design-system`, and `analyze-brand-assets` for gathering brand data ahead of analysis.
|
|
341
|
-
- **Import** — `
|
|
341
|
+
- **Import** — `index-design-system-with-builder` for Builder-backed code/GitHub design-system indexing, plus `import-figma`, `import-from-url`, `import-document` (DOCX/PPTX/PDF/XLSX), and `import-design-project` for other sources.
|
|
342
342
|
- **Export & handoff** — `export-html`, `export-pdf`, `export-svg`, `export-zip`, and `export-coding-handoff` to turn a design into a coding-tool handoff.
|
|
343
343
|
- **Context & navigation** — `view-screen` (current design, open file, view, pending question or variant grid), `get-design-snapshot` (current state for an external agent to continue from), and `navigate`.
|
|
344
344
|
|
|
@@ -348,6 +348,64 @@ The agent always knows what you have open. The current design, the open file, th
|
|
|
348
348
|
|
|
349
349
|
Because a design is just standalone HTML/JSX files, the agent edits the same source the iframe renders and every export comes from — there is no separate "AI mockup" format to translate. A linked design system supplies tokens and `custom_instructions` the agent honors on every generation pass. Select text or a region in the preview and hit Cmd+I to focus the agent on exactly that part.
|
|
350
350
|
|
|
351
|
+
### Editor model
|
|
352
|
+
|
|
353
|
+
Design is overview-first for multi-screen work. After generation or broad
|
|
354
|
+
updates, the editor opens the screen overview: an infinite canvas where each
|
|
355
|
+
screen is a static frame you can select, move, resize, drop, or duplicate.
|
|
356
|
+
Use a frame's full-view button when one screen needs focused scrolling or
|
|
357
|
+
prototype interaction.
|
|
358
|
+
|
|
359
|
+
Single-screen mode is for scrolling, interacting with prototype behavior, and
|
|
360
|
+
editing the DOM/code layers inside one rendered file. The layers panel reflects
|
|
361
|
+
that split: screens are top-level frames, with nested DOM/code layers for the
|
|
362
|
+
active screen.
|
|
363
|
+
|
|
364
|
+
Install `/visual-edit` when a coding agent should open a running local app in
|
|
365
|
+
Design instead of generating standalone prototype HTML:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
After the target app dev server is running, `/visual-edit` uses
|
|
372
|
+
`npx @agent-native/core@latest design connect` plus `add-localhost-screens` to
|
|
373
|
+
place each requested path or URL as its own URL-backed iframe screen. Numbered
|
|
374
|
+
flows such as `localhost:1234/onboarding/1`, `/onboarding/2`, and
|
|
375
|
+
`/onboarding/3` stay as separate ordered screens in overview mode.
|
|
376
|
+
|
|
377
|
+
For stable layer names, add `data-agent-native-layer-name` to meaningful
|
|
378
|
+
elements. Design uses it before semantic/text fallbacks and can persist layer
|
|
379
|
+
renames by editing that attribute. Inline HTML supports local code-layer edits
|
|
380
|
+
for text, classes, styles, attributes, source order, and small structural
|
|
381
|
+
changes; visual code-layer edits are HTML-only today. Localhost source mode can
|
|
382
|
+
register and resolve local route artboards, but local file reads/writes remain a
|
|
383
|
+
bridge contract until explicit permission controls are hardened.
|
|
384
|
+
|
|
385
|
+
### Design editor extensions
|
|
386
|
+
|
|
387
|
+
The editor includes an **Extensions** inspector tab after **Tweaks**. It works
|
|
388
|
+
like a Design-specific plugin lane: users can click **+ Extension** to ask the
|
|
389
|
+
agent to build an extension, or install an extension that declares the
|
|
390
|
+
`design.editor.inspector` slot.
|
|
391
|
+
|
|
392
|
+
Design extensions render inline beside the artboard through the standard
|
|
393
|
+
extension sandbox. The host passes `window.slotContext` and
|
|
394
|
+
`window.onSlotContext(...)` updates with the current `designId`, active file,
|
|
395
|
+
screen list, selected screen ids, selected element metadata, view mode, zoom,
|
|
396
|
+
active tool, and tweak values. That lets an extension show information about
|
|
397
|
+
the current selection, offer style controls, or build compact workflows around
|
|
398
|
+
the open design.
|
|
399
|
+
|
|
400
|
+
For deterministic work, extensions can call app actions through the extension
|
|
401
|
+
bridge. For AI-driven changes, have the extension call
|
|
402
|
+
`agentNative.chat.send(...)` with the selected element selector/source id and
|
|
403
|
+
requested change. The agent should call `view-screen` first, then use
|
|
404
|
+
`apply-visual-edit` for element style, class, text, or move changes, or
|
|
405
|
+
`update-design` / `generate-design` with `canvasFrames` for artboard placement
|
|
406
|
+
changes. See [Extensions](/docs/extensions#what-an-extension-can-do) for the
|
|
407
|
+
sandbox, persistent state, and bridge APIs.
|
|
408
|
+
|
|
351
409
|
### Customizing it
|
|
352
410
|
|
|
353
411
|
Design is a complete, cloneable template. Some practical extension ideas:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.1",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"./embedding/react": "./dist/embedding/react.js",
|
|
90
90
|
"./onboarding": "./dist/onboarding/index.js",
|
|
91
91
|
"./shared": "./dist/shared/index.js",
|
|
92
|
+
"./voice": "./dist/voice/index.js",
|
|
92
93
|
"./scripts": "./dist/scripts/index.js",
|
|
93
94
|
"./application-state": "./dist/application-state/index.js",
|
|
94
95
|
"./settings": "./dist/settings/index.js",
|
|
@@ -86,6 +86,7 @@ Default behavior:
|
|
|
86
86
|
| `packages/core/src/client/transcription/use-live-transcription.ts` | Web Speech live-transcription hook for recordings |
|
|
87
87
|
| `packages/core/src/server/transcribe-voice.ts` | Route handler (routes to Builder/Gemini/Groq/Whisper) |
|
|
88
88
|
| `packages/core/src/transcription/builder-transcription.ts` | Builder proxy transcription client |
|
|
89
|
+
| `packages/core/src/voice/` | Shared voice context pack, prompt, and replacement helpers |
|
|
89
90
|
| `packages/core/src/secrets/register-framework-secrets.ts` | Framework-level provider key registration |
|
|
90
91
|
|
|
91
92
|
## Key resolution (server)
|
|
@@ -114,6 +115,15 @@ provider. Gemini uses them in the transcription prompt, Builder receives them
|
|
|
114
115
|
as transcription/cleanup instructions, and Whisper-compatible providers receive
|
|
115
116
|
them as provider prompt/context.
|
|
116
117
|
|
|
118
|
+
Requests may also include a multipart `voiceContext` JSON field. Parse it with
|
|
119
|
+
`parseVoiceContextPack()` from `@agent-native/core/voice` and pass the resulting
|
|
120
|
+
context through `buildVoiceGuidanceBlock()`; do not hand-roll separate prompt
|
|
121
|
+
formats. The context pack is for bounded snippets, active references, route/page
|
|
122
|
+
metadata, and preferred vocabulary/replacements only. Browser-native and Google
|
|
123
|
+
realtime final text can POST `{ text, provider, instructions, voiceContext }` to
|
|
124
|
+
`/_agent-native/transcribe-voice` when AI cleanup is enabled; batch audio can
|
|
125
|
+
send the same `voiceContext` field with its audio upload.
|
|
126
|
+
|
|
117
127
|
Never hardcode a shared key. Never log the value. Never echo it back to the
|
|
118
128
|
client.
|
|
119
129
|
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { defineAction } from "@agent-native/core";
|
|
2
|
-
import {
|
|
3
|
-
buildImageMap,
|
|
4
|
-
decodeFig,
|
|
5
|
-
extractDesignSystemFromFig,
|
|
6
|
-
renderHtmlTemplates,
|
|
7
|
-
} from "@agent-native/core/brand-kit/fig";
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
|
|
10
|
-
/** Per-frame HTML is capped so the tool result stays a manageable size. The
|
|
11
|
-
* agent can re-run with a smaller selection or fetch the full design via the
|
|
12
|
-
* editor if it needs the complete markup. */
|
|
13
|
-
const MAX_FRAMES = 24;
|
|
14
|
-
const MAX_HTML_BYTES = 120 * 1024; // ~120 KB per frame
|
|
15
|
-
const MAX_FIG_BYTES = 80 * 1024 * 1024; // 80 MB upload guard
|
|
16
|
-
|
|
17
|
-
/** Accepts either a bare base64 string or a `data:...;base64,<payload>` URL
|
|
18
|
-
* and returns the decoded bytes. */
|
|
19
|
-
function decodeBase64Input(input: string): Buffer {
|
|
20
|
-
const trimmed = input.trim();
|
|
21
|
-
const comma = trimmed.indexOf(",");
|
|
22
|
-
const payload =
|
|
23
|
-
trimmed.startsWith("data:") && comma >= 0
|
|
24
|
-
? trimmed.slice(comma + 1)
|
|
25
|
-
: trimmed;
|
|
26
|
-
return Buffer.from(payload, "base64");
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export default defineAction({
|
|
30
|
-
description:
|
|
31
|
-
"Deeply parse an uploaded Figma `.fig` binary (modern fig-kiwi or legacy " +
|
|
32
|
-
"zip format) entirely in-process — no Figma account or MCP needed. " +
|
|
33
|
-
"Decodes the document node tree, renders each top-level frame to " +
|
|
34
|
-
"standalone HTML, and extracts a design-system token set (colors, " +
|
|
35
|
-
"typography, spacing, border radius, shadows). " +
|
|
36
|
-
"Provide the file as a base64 string or data URL in `fileBase64` (or " +
|
|
37
|
-
"`fileDataUrl`). This is read-only and writes nothing. " +
|
|
38
|
-
"WORKFLOW: (1) call this action with the .fig contents; (2) review the " +
|
|
39
|
-
"returned `designSystem` tokens and call `create-design-system` with them " +
|
|
40
|
-
"(optionally set as default); (3) review the returned `frames` and call " +
|
|
41
|
-
"`create-design` + `generate-design` with the frame HTML to import screens. " +
|
|
42
|
-
"Convert nothing yourself — the colors are already hex, effects already " +
|
|
43
|
-
"CSS, and spacing already snapped to a 4/8px scale.",
|
|
44
|
-
schema: z
|
|
45
|
-
.object({
|
|
46
|
-
fileBase64: z
|
|
47
|
-
.string()
|
|
48
|
-
.optional()
|
|
49
|
-
.describe(
|
|
50
|
-
"The .fig file contents as a base64 string (or a data: URL). " +
|
|
51
|
-
"Either fileBase64 or fileDataUrl is required.",
|
|
52
|
-
),
|
|
53
|
-
fileDataUrl: z
|
|
54
|
-
.string()
|
|
55
|
-
.optional()
|
|
56
|
-
.describe(
|
|
57
|
-
"The .fig file as a data URL (data:application/octet-stream;base64,...). " +
|
|
58
|
-
"Alias for fileBase64.",
|
|
59
|
-
),
|
|
60
|
-
title: z
|
|
61
|
-
.string()
|
|
62
|
-
.optional()
|
|
63
|
-
.describe("Optional title for the design being imported."),
|
|
64
|
-
})
|
|
65
|
-
.refine((v) => !!(v.fileBase64 || v.fileDataUrl), {
|
|
66
|
-
message: "Provide the .fig file in fileBase64 or fileDataUrl",
|
|
67
|
-
}),
|
|
68
|
-
readOnly: true,
|
|
69
|
-
run: async ({ fileBase64, fileDataUrl, title }) => {
|
|
70
|
-
const raw = (fileBase64 ?? fileDataUrl) as string;
|
|
71
|
-
let buffer: Buffer;
|
|
72
|
-
try {
|
|
73
|
-
buffer = decodeBase64Input(raw);
|
|
74
|
-
} catch {
|
|
75
|
-
throw new Error("Could not decode the provided base64 .fig payload.");
|
|
76
|
-
}
|
|
77
|
-
if (buffer.length === 0) {
|
|
78
|
-
throw new Error("The provided .fig payload was empty.");
|
|
79
|
-
}
|
|
80
|
-
if (buffer.length > MAX_FIG_BYTES) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`The .fig file is too large to parse in-process (${buffer.length} bytes > ${MAX_FIG_BYTES}).`,
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
let decoded;
|
|
87
|
-
try {
|
|
88
|
-
decoded = decodeFig(buffer);
|
|
89
|
-
} catch (err) {
|
|
90
|
-
throw new Error(
|
|
91
|
-
`Failed to decode .fig file: ${err instanceof Error ? err.message : String(err)}`,
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (!decoded.document) {
|
|
96
|
-
throw new Error(
|
|
97
|
-
"The .fig file decoded, but its document payload was empty or " +
|
|
98
|
-
"malformed (no node tree). It may be an unsupported format version.",
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Render frames. Image URLs line up with the hash-based filenames the
|
|
103
|
-
// decoder emits, so a downstream importer can attach the images under an
|
|
104
|
-
// `images/` directory if desired.
|
|
105
|
-
const imageMap = buildImageMap(decoded.images);
|
|
106
|
-
const rendered = renderHtmlTemplates(decoded.document, {
|
|
107
|
-
imageMap,
|
|
108
|
-
imageRefBase: "images",
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
const allFrames = rendered.frames;
|
|
112
|
-
const truncatedFrames = allFrames.slice(0, MAX_FRAMES).map((frame) => {
|
|
113
|
-
const safeName = frame.relativePath.replace(/\//g, ".");
|
|
114
|
-
let html = frame.html;
|
|
115
|
-
let truncated = false;
|
|
116
|
-
if (Buffer.byteLength(html, "utf8") > MAX_HTML_BYTES) {
|
|
117
|
-
html = html.slice(0, MAX_HTML_BYTES);
|
|
118
|
-
truncated = true;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
filename: safeName,
|
|
122
|
-
pageName: frame.pageName,
|
|
123
|
-
frameName: frame.frameName,
|
|
124
|
-
html,
|
|
125
|
-
...(truncated ? { truncated: true } : {}),
|
|
126
|
-
};
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
const designSystem = extractDesignSystemFromFig(decoded.document);
|
|
130
|
-
|
|
131
|
-
const thumbnailDataUrl = decoded.thumbnail
|
|
132
|
-
? `data:image/png;base64,${decoded.thumbnail.toString("base64")}`
|
|
133
|
-
: undefined;
|
|
134
|
-
|
|
135
|
-
return {
|
|
136
|
-
source: "fig-file",
|
|
137
|
-
title: title ?? null,
|
|
138
|
-
format: decoded.format,
|
|
139
|
-
version: decoded.version ?? null,
|
|
140
|
-
frames: truncatedFrames,
|
|
141
|
-
frameCount: rendered.frameCount,
|
|
142
|
-
pageCount: rendered.pageCount,
|
|
143
|
-
framesTruncated: allFrames.length > MAX_FRAMES,
|
|
144
|
-
designSystem,
|
|
145
|
-
imageCount: decoded.images.length,
|
|
146
|
-
images: decoded.images.map((img) => ({
|
|
147
|
-
filename: `${img.hash}.${img.ext}`,
|
|
148
|
-
ext: img.ext,
|
|
149
|
-
sizeBytes: img.bytes.length,
|
|
150
|
-
})),
|
|
151
|
-
thumbnailDataUrl,
|
|
152
|
-
instructions: [
|
|
153
|
-
"Parsed the .fig file in-process. Next steps:",
|
|
154
|
-
"1. Build the design system: call create-design-system using the " +
|
|
155
|
-
"`designSystem` tokens above (colors are hex, effects are CSS, " +
|
|
156
|
-
"spacing is snapped to a 4/8px scale). Set it as default if the " +
|
|
157
|
-
"user wants it applied to new designs.",
|
|
158
|
-
"2. Import screens: call create-design, then generate-design with the " +
|
|
159
|
-
"`frames` HTML (one file per frame, or the most relevant frames). " +
|
|
160
|
-
"Each frame is complete standalone HTML.",
|
|
161
|
-
"3. Image fills reference `images/<hash>.<ext>` — upload those bytes " +
|
|
162
|
-
"as design assets if you need the images to render.",
|
|
163
|
-
].join("\n"),
|
|
164
|
-
};
|
|
165
|
-
},
|
|
166
|
-
});
|