@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
|
@@ -37,15 +37,16 @@ const HELP = `npx @agent-native/core@latest skills
|
|
|
37
37
|
|
|
38
38
|
Usage:
|
|
39
39
|
npx @agent-native/core@latest skills list
|
|
40
|
-
npx @agent-native/core@latest skills status [assets|content|design-exploration|visual-plan|visual-recap|context-xray|scaffold] [--client codex|claude-code|pi|all] [--scope user|project] [--json]
|
|
41
|
-
npx @agent-native/core@latest skills update [assets|content|design-exploration|visual-plan|visual-recap|context-xray|scaffold] [--client codex|claude-code|pi|all] [--scope user|project] [--dry-run] [--json]
|
|
42
|
-
npx @agent-native/core@latest skills add assets|content|design-exploration|visual-plan|visual-recap|context-xray [--client codex|claude-code|cowork|cursor|opencode|github-copilot|all] [--scope user|project] [--mode hosted|local-files|self-hosted] [--mcp-url <url>] [--no-connect] [--with-github-action] [--yes] [--dry-run] [--json]
|
|
40
|
+
npx @agent-native/core@latest skills status [assets|content|design-exploration|visual-edit|visual-plan|visual-recap|context-xray|scaffold] [--client codex|claude-code|pi|all] [--scope user|project] [--json]
|
|
41
|
+
npx @agent-native/core@latest skills update [assets|content|design-exploration|visual-edit|visual-plan|visual-recap|context-xray|scaffold] [--client codex|claude-code|pi|all] [--scope user|project] [--dry-run] [--json]
|
|
42
|
+
npx @agent-native/core@latest skills add assets|content|design-exploration|visual-edit|visual-plan|visual-recap|context-xray [--client codex|claude-code|cowork|cursor|opencode|github-copilot|all] [--scope user|project] [--mode hosted|local-files|self-hosted] [--mcp-url <url>] [--no-connect] [--with-github-action] [--yes] [--dry-run] [--json]
|
|
43
43
|
npx @agent-native/core@latest skills add <manifest-or-app-dir|skill-repo> [--skill <name>] [--client ...] [--yes]
|
|
44
44
|
|
|
45
45
|
Examples:
|
|
46
46
|
npx @agent-native/core@latest skills add assets
|
|
47
47
|
npx @agent-native/core@latest skills add content --mode local-files
|
|
48
48
|
npx @agent-native/core@latest skills add design-exploration
|
|
49
|
+
npx @agent-native/core@latest skills add visual-edit
|
|
49
50
|
npx @agent-native/core@latest skills add visual-plan
|
|
50
51
|
npx @agent-native/core@latest skills add visual-recap
|
|
51
52
|
npx @agent-native/core@latest skills add visual-recap --with-github-action
|
|
@@ -376,6 +377,110 @@ iteration, or a human-in-the-loop choice among design directions.
|
|
|
376
377
|
and token values. Never paste bearer tokens into chat or logs.
|
|
377
378
|
`;
|
|
378
379
|
|
|
380
|
+
const DESIGN_VISUAL_EDIT_SKILL_MD = `---
|
|
381
|
+
name: visual-edit
|
|
382
|
+
description: >-
|
|
383
|
+
Open a running local app in Design overview mode as URL-backed iframe screens
|
|
384
|
+
for visual editing, flow review, duplication, and route-state exploration.
|
|
385
|
+
metadata:
|
|
386
|
+
visibility: exported
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
# Visual Edit
|
|
390
|
+
|
|
391
|
+
Use \`/visual-edit\` when the user wants to inspect or edit a real local app
|
|
392
|
+
visually instead of generating standalone Alpine HTML. The source of truth is
|
|
393
|
+
the running localhost app plus its route URLs. Design shows those routes as
|
|
394
|
+
iframe-backed screens on the infinite canvas.
|
|
395
|
+
|
|
396
|
+
## Core Model
|
|
397
|
+
|
|
398
|
+
- Each screen is a URL-backed iframe, not copied HTML.
|
|
399
|
+
- Each screen keeps URL metadata: \`connectionId\`, \`routeId\`, \`path\`,
|
|
400
|
+
\`url\`, \`bridgeUrl\`, title, and viewport size.
|
|
401
|
+
- Start in Design's screen overview mode. In overview, screens are static like
|
|
402
|
+
Figma frames; full-screen focus is for scrolling and app interaction.
|
|
403
|
+
- Alt-drag duplicates a screen. For localhost screens, duplication copies the
|
|
404
|
+
iframe frame and URL metadata; change the copy's path/query for a new state.
|
|
405
|
+
- Flow visualization is multiple URL states: \`/checkout?step=shipping\`,
|
|
406
|
+
\`/checkout?step=payment\`, \`/checkout?step=done\`, etc.
|
|
407
|
+
- When the user gives a named flow or numbered screen list, preserve that order
|
|
408
|
+
and create one screen per URL/path. Shorthand like
|
|
409
|
+
\`localhost:1234/onboarding/1\` means
|
|
410
|
+
\`http://localhost:1234/onboarding/1\`.
|
|
411
|
+
|
|
412
|
+
## Required Local Bridge
|
|
413
|
+
|
|
414
|
+
From the target app repo, make sure its dev server is running, then run:
|
|
415
|
+
|
|
416
|
+
\`\`\`bash
|
|
417
|
+
npx @agent-native/core@latest design connect --url http://localhost:5173 --root .
|
|
418
|
+
\`\`\`
|
|
419
|
+
|
|
420
|
+
Use the app's real port. The command starts a local bridge on
|
|
421
|
+
\`http://127.0.0.1:7331\` by default and exposes \`/manifest.json\`,
|
|
422
|
+
\`/routes.json\`, and \`/health\`.
|
|
423
|
+
|
|
424
|
+
For one-shot agent setup, ask for JSON and keep the long-running bridge open in
|
|
425
|
+
a second terminal if the user needs live updates:
|
|
426
|
+
|
|
427
|
+
\`\`\`bash
|
|
428
|
+
npx @agent-native/core@latest design connect --url http://localhost:5173 --root . --json
|
|
429
|
+
\`\`\`
|
|
430
|
+
|
|
431
|
+
## Action Flow
|
|
432
|
+
|
|
433
|
+
1. Register or refresh the bridge with \`connect-localhost\`, passing the
|
|
434
|
+
\`/manifest.json\` result as \`routeManifest\` and \`capabilities\`.
|
|
435
|
+
2. Create or reuse a Design project with \`create-design\`.
|
|
436
|
+
3. Place URL-backed screens with \`add-localhost-screens\`:
|
|
437
|
+
|
|
438
|
+
\`\`\`bash
|
|
439
|
+
pnpm action add-localhost-screens '{
|
|
440
|
+
"designId": "<design-id>",
|
|
441
|
+
"connectionId": "<connection-id>",
|
|
442
|
+
"paths": ["/", "/pricing", "/checkout?step=payment"]
|
|
443
|
+
}'
|
|
444
|
+
\`\`\`
|
|
445
|
+
|
|
446
|
+
For a numbered flow the user describes in chat, keep the labels and order:
|
|
447
|
+
|
|
448
|
+
\`\`\`bash
|
|
449
|
+
pnpm action add-localhost-screens '{
|
|
450
|
+
"designId": "<design-id>",
|
|
451
|
+
"connectionId": "<connection-id>",
|
|
452
|
+
"routes": [
|
|
453
|
+
{ "url": "localhost:1234/onboarding/1", "title": "Screen 1" },
|
|
454
|
+
{ "url": "localhost:1234/onboarding/2", "title": "Screen 2" },
|
|
455
|
+
{ "url": "localhost:1234/onboarding/3", "title": "Screen 3" }
|
|
456
|
+
]
|
|
457
|
+
}'
|
|
458
|
+
\`\`\`
|
|
459
|
+
|
|
460
|
+
If no \`routes\` or \`paths\` are supplied, \`add-localhost-screens\` uses every
|
|
461
|
+
route from the latest localhost manifest.
|
|
462
|
+
|
|
463
|
+
4. Navigate to overview mode:
|
|
464
|
+
|
|
465
|
+
\`\`\`bash
|
|
466
|
+
pnpm action navigate --view editor --designId "<design-id>" --editorView overview
|
|
467
|
+
\`\`\`
|
|
468
|
+
|
|
469
|
+
## Editing URLs
|
|
470
|
+
|
|
471
|
+
Keep localhost screens as URL files plus \`screenMetadata[fileId]\`. Do not
|
|
472
|
+
replace them with copied \`srcdoc\` HTML unless the user explicitly asks for a
|
|
473
|
+
frozen snapshot. To change a state, rerun \`add-localhost-screens\` with the new
|
|
474
|
+
path/query or duplicate the screen and update the copy's URL metadata.
|
|
475
|
+
|
|
476
|
+
## Verification
|
|
477
|
+
|
|
478
|
+
- \`list-localhost-connections\` returns the expected connection and routes.
|
|
479
|
+
- The Design editor opens in overview mode.
|
|
480
|
+
- Every requested screen renders the intended localhost URL.
|
|
481
|
+
- Alt-dragging a screen copies the URL-backed frame, not an inline HTML clone.
|
|
482
|
+
`;
|
|
483
|
+
|
|
379
484
|
/**
|
|
380
485
|
* Setup/auth block for the `/visual-plan` skill. Interpolated into
|
|
381
486
|
* `VISUAL_PLANS_SKILL_MD` below so the install + one-step authenticate
|
|
@@ -2458,6 +2563,9 @@ export const BUILT_IN_APP_SKILLS = {
|
|
|
2458
2563
|
},
|
|
2459
2564
|
design: {
|
|
2460
2565
|
skillName: "design-exploration",
|
|
2566
|
+
extraSkills: {
|
|
2567
|
+
"visual-edit": DESIGN_VISUAL_EDIT_SKILL_MD,
|
|
2568
|
+
},
|
|
2461
2569
|
manifest: normalizeAppSkillManifest({
|
|
2462
2570
|
schemaVersion: 1,
|
|
2463
2571
|
id: "design",
|
|
@@ -2480,6 +2588,11 @@ export const BUILT_IN_APP_SKILLS = {
|
|
|
2480
2588
|
action: "present-design-variants",
|
|
2481
2589
|
path: "/design",
|
|
2482
2590
|
},
|
|
2591
|
+
{
|
|
2592
|
+
id: "visual-edit",
|
|
2593
|
+
action: "add-localhost-screens",
|
|
2594
|
+
path: "/design",
|
|
2595
|
+
},
|
|
2483
2596
|
],
|
|
2484
2597
|
skills: [
|
|
2485
2598
|
{
|
|
@@ -2487,6 +2600,11 @@ export const BUILT_IN_APP_SKILLS = {
|
|
|
2487
2600
|
visibility: "exported",
|
|
2488
2601
|
exportAs: "design-exploration",
|
|
2489
2602
|
},
|
|
2603
|
+
{
|
|
2604
|
+
path: "skills/visual-edit",
|
|
2605
|
+
visibility: "exported",
|
|
2606
|
+
exportAs: "visual-edit",
|
|
2607
|
+
},
|
|
2490
2608
|
],
|
|
2491
2609
|
hostAdapters: [
|
|
2492
2610
|
"codex-plugin",
|
|
@@ -2653,6 +2771,9 @@ const BUILT_IN_APP_SKILL_ALIASES = {
|
|
|
2653
2771
|
"ui-design": "design",
|
|
2654
2772
|
"ux-design": "design",
|
|
2655
2773
|
"design-exploration": "design",
|
|
2774
|
+
"visual-edit": "design",
|
|
2775
|
+
"local-visual-edit": "design",
|
|
2776
|
+
"design-visual-edit": "design",
|
|
2656
2777
|
"ux-exploration": "design",
|
|
2657
2778
|
"agent-native-design": "design",
|
|
2658
2779
|
"agent-native-design-exploration": "design",
|
|
@@ -2686,6 +2807,8 @@ const BUILT_IN_APP_SKILL_DISPLAY_ALIASES = {
|
|
|
2686
2807
|
],
|
|
2687
2808
|
design: [
|
|
2688
2809
|
"design-exploration",
|
|
2810
|
+
"visual-edit",
|
|
2811
|
+
"local-visual-edit",
|
|
2689
2812
|
"ux-exploration",
|
|
2690
2813
|
"agent-native-design-exploration",
|
|
2691
2814
|
],
|
|
@@ -3117,6 +3240,19 @@ function builtInOnlySkillNames(target: string): string[] | undefined {
|
|
|
3117
3240
|
if (normalized === "visual-recap" || normalized === "visual-recaps") {
|
|
3118
3241
|
return ["visual-recap"];
|
|
3119
3242
|
}
|
|
3243
|
+
if (
|
|
3244
|
+
normalized === "design-exploration" ||
|
|
3245
|
+
normalized === "agent-native-design-exploration"
|
|
3246
|
+
) {
|
|
3247
|
+
return ["design-exploration"];
|
|
3248
|
+
}
|
|
3249
|
+
if (
|
|
3250
|
+
normalized === "visual-edit" ||
|
|
3251
|
+
normalized === "local-visual-edit" ||
|
|
3252
|
+
normalized === "design-visual-edit"
|
|
3253
|
+
) {
|
|
3254
|
+
return ["visual-edit"];
|
|
3255
|
+
}
|
|
3120
3256
|
return undefined;
|
|
3121
3257
|
}
|
|
3122
3258
|
|
|
@@ -4278,6 +4414,11 @@ const BUILT_IN_SKILL_PROMPT_OPTIONS: SkillsTargetPromptContext["options"] = [
|
|
|
4278
4414
|
label: "design-exploration",
|
|
4279
4415
|
hint: BUILT_IN_APP_SKILLS.design.manifest.description,
|
|
4280
4416
|
},
|
|
4417
|
+
{
|
|
4418
|
+
value: "visual-edit",
|
|
4419
|
+
label: "visual-edit",
|
|
4420
|
+
hint: "Open a running local app in Design overview mode as URL-backed iframe screens.",
|
|
4421
|
+
},
|
|
4281
4422
|
{
|
|
4282
4423
|
value: "context-xray",
|
|
4283
4424
|
label: "context-xray",
|
|
@@ -1318,7 +1318,7 @@ function AgentPanelInner({
|
|
|
1318
1318
|
data-agent-page-new-chat=""
|
|
1319
1319
|
aria-label={t("agentPanel.newChat")}
|
|
1320
1320
|
onClick={() => {
|
|
1321
|
-
|
|
1321
|
+
addTab();
|
|
1322
1322
|
}}
|
|
1323
1323
|
className="pointer-events-auto inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background/95 px-2.5 text-xs font-medium text-foreground shadow-sm backdrop-blur transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
1324
1324
|
>
|
|
@@ -34,6 +34,7 @@ import React, {
|
|
|
34
34
|
useImperativeHandle,
|
|
35
35
|
} from "react";
|
|
36
36
|
|
|
37
|
+
import { LLM_MISSING_CREDENTIALS_MESSAGE } from "../agent/engine/credential-errors.js";
|
|
37
38
|
import type { ReasoningEffort } from "../shared/reasoning-effort.js";
|
|
38
39
|
import {
|
|
39
40
|
getActiveRun,
|
|
@@ -48,9 +49,11 @@ import {
|
|
|
48
49
|
import {
|
|
49
50
|
appendAgentChatContextToMessage,
|
|
50
51
|
formatAgentChatContextItemsForPrompt,
|
|
52
|
+
getAgentChatContextState,
|
|
51
53
|
normalizeAgentChatContextItem,
|
|
52
54
|
publishAgentChatContextItems,
|
|
53
55
|
refreshAgentChatContext,
|
|
56
|
+
subscribeAgentChatContext,
|
|
54
57
|
type AgentChatContextItem,
|
|
55
58
|
} from "./agent-chat.js";
|
|
56
59
|
import { captureError } from "./analytics.js";
|
|
@@ -147,7 +150,10 @@ import {
|
|
|
147
150
|
readSSEStreamRaw,
|
|
148
151
|
settleInterruptedToolCalls,
|
|
149
152
|
} from "./sse-event-processor.js";
|
|
150
|
-
import {
|
|
153
|
+
import {
|
|
154
|
+
fetchAgentEngineConfiguredState,
|
|
155
|
+
useAgentEngineConfigured,
|
|
156
|
+
} from "./use-agent-engine-configured.js";
|
|
151
157
|
import type {
|
|
152
158
|
ChatThreadScope,
|
|
153
159
|
ChatThreadSnapshot,
|
|
@@ -223,6 +229,7 @@ function createUserMessageRunConfig(
|
|
|
223
229
|
const PENDING_SELECTION_KEY = "pending-selection-context";
|
|
224
230
|
const ACTIVE_RUN_CLEAR_TIMEOUT_MS = 5_000;
|
|
225
231
|
const ACTIVE_RUN_POLL_INTERVAL_MS = 150;
|
|
232
|
+
const SUBMIT_ENGINE_STATUS_TIMEOUT_MS = 1000;
|
|
226
233
|
|
|
227
234
|
type ActiveRunLookup = {
|
|
228
235
|
active?: boolean;
|
|
@@ -1131,15 +1138,32 @@ const AssistantChatInner = forwardRef<
|
|
|
1131
1138
|
}
|
|
1132
1139
|
};
|
|
1133
1140
|
}, [threadRuntime]);
|
|
1134
|
-
const
|
|
1141
|
+
const agentEngineConfigured = useAgentEngineConfigured(
|
|
1135
1142
|
providerStatusChecksEnabled,
|
|
1136
|
-
)
|
|
1143
|
+
);
|
|
1144
|
+
const missingApiKey = agentEngineConfigured.missing;
|
|
1137
1145
|
const isComposerDisabled = missingApiKey || composerDisabled;
|
|
1138
1146
|
const missingApiKeySetupAboveComposer =
|
|
1139
1147
|
missingApiKeySetupLayout === "sidebar";
|
|
1140
1148
|
// Increments each time the user tries to chat while no LLM is connected.
|
|
1141
1149
|
// `BuilderSetupCard` watches this to replay a one-shot bounce.
|
|
1142
1150
|
const [missingKeyBouncePulse, setMissingKeyBouncePulse] = useState(0);
|
|
1151
|
+
const ensureAgentEngineReadyForSubmit = useCallback(async () => {
|
|
1152
|
+
const state =
|
|
1153
|
+
agentEngineConfigured.state === "missing"
|
|
1154
|
+
? "missing"
|
|
1155
|
+
: await fetchAgentEngineConfiguredState(providerStatusChecksEnabled, {
|
|
1156
|
+
timeoutMs: SUBMIT_ENGINE_STATUS_TIMEOUT_MS,
|
|
1157
|
+
});
|
|
1158
|
+
if (state !== "missing") return true;
|
|
1159
|
+
|
|
1160
|
+
setComposerError(LLM_MISSING_CREDENTIALS_MESSAGE);
|
|
1161
|
+
setMissingKeyBouncePulse((p) => p + 1);
|
|
1162
|
+
if (typeof window !== "undefined") {
|
|
1163
|
+
window.dispatchEvent(new Event("agent-chat:missing-api-key"));
|
|
1164
|
+
}
|
|
1165
|
+
return false;
|
|
1166
|
+
}, [agentEngineConfigured.state, providerStatusChecksEnabled]);
|
|
1143
1167
|
const [authError, setAuthError] = useState<{
|
|
1144
1168
|
sessionExpired?: boolean;
|
|
1145
1169
|
} | null>(null);
|
|
@@ -1231,8 +1255,15 @@ const AssistantChatInner = forwardRef<
|
|
|
1231
1255
|
composerContextItemsRef.current = state.items;
|
|
1232
1256
|
setComposerContextItems(state.items);
|
|
1233
1257
|
});
|
|
1258
|
+
const unsubscribe = subscribeAgentChatContext(() => {
|
|
1259
|
+
if (cancelled || !isActiveComposerRef.current) return;
|
|
1260
|
+
const state = getAgentChatContextState();
|
|
1261
|
+
composerContextItemsRef.current = state.items;
|
|
1262
|
+
setComposerContextItems(state.items);
|
|
1263
|
+
});
|
|
1234
1264
|
return () => {
|
|
1235
1265
|
cancelled = true;
|
|
1266
|
+
unsubscribe();
|
|
1236
1267
|
};
|
|
1237
1268
|
}, [isActiveComposer]);
|
|
1238
1269
|
// Tracks the JSON of the last queue we successfully persisted so the
|
|
@@ -2152,9 +2183,9 @@ const AssistantChatInner = forwardRef<
|
|
|
2152
2183
|
}, [tabId]);
|
|
2153
2184
|
|
|
2154
2185
|
// Real activity means the next chunk has started — leave the auto-resume
|
|
2155
|
-
// ("Resuming") state so the indicator settles back to "
|
|
2186
|
+
// ("Resuming") state so the indicator settles back to "Thinking". The
|
|
2156
2187
|
// activity label itself is intentionally not surfaced: the running
|
|
2157
|
-
// indicator stays a steady "
|
|
2188
|
+
// indicator stays a steady "Thinking" rather than flipping through
|
|
2158
2189
|
// transient step labels.
|
|
2159
2190
|
useEffect(() => {
|
|
2160
2191
|
const handler = (e: Event) => {
|
|
@@ -2454,6 +2485,9 @@ const AssistantChatInner = forwardRef<
|
|
|
2454
2485
|
includeComposerContext = false,
|
|
2455
2486
|
trackInRunsTray = false,
|
|
2456
2487
|
) => {
|
|
2488
|
+
if (!(await ensureAgentEngineReadyForSubmit())) {
|
|
2489
|
+
return;
|
|
2490
|
+
}
|
|
2457
2491
|
materializeFrozenReconnectContent();
|
|
2458
2492
|
setShowContinue(false);
|
|
2459
2493
|
setLoopLimitInfo(null);
|
|
@@ -2660,6 +2694,7 @@ const AssistantChatInner = forwardRef<
|
|
|
2660
2694
|
[
|
|
2661
2695
|
applyLocalQueuedMessages,
|
|
2662
2696
|
buildComposerContextSubmission,
|
|
2697
|
+
ensureAgentEngineReadyForSubmit,
|
|
2663
2698
|
execMode,
|
|
2664
2699
|
isRunning,
|
|
2665
2700
|
materializeFrozenReconnectContent,
|
|
@@ -3254,10 +3289,10 @@ const AssistantChatInner = forwardRef<
|
|
|
3254
3289
|
? "Reconnecting"
|
|
3255
3290
|
: isAutoResuming
|
|
3256
3291
|
? "Resuming"
|
|
3257
|
-
: // Keep a steady "
|
|
3292
|
+
: // Keep a steady "Thinking" while the model works —
|
|
3258
3293
|
// never flip through transient activity labels
|
|
3259
3294
|
// (e.g. "Contacting model", "Preparing X action").
|
|
3260
|
-
"
|
|
3295
|
+
"Thinking"
|
|
3261
3296
|
}
|
|
3262
3297
|
/>
|
|
3263
3298
|
)}
|
|
@@ -3439,6 +3474,7 @@ const AssistantChatInner = forwardRef<
|
|
|
3439
3474
|
: undefined
|
|
3440
3475
|
}
|
|
3441
3476
|
onSlashCommand={onSlashCommand}
|
|
3477
|
+
onBeforeSubmit={ensureAgentEngineReadyForSubmit}
|
|
3442
3478
|
execMode={execMode}
|
|
3443
3479
|
onExecModeChange={onExecModeChange}
|
|
3444
3480
|
planModeDisabled={planModeDisabled}
|
|
@@ -73,6 +73,12 @@ export interface AgentChatMessage {
|
|
|
73
73
|
requestMode?: AgentChatRequestMode;
|
|
74
74
|
/** Scoped system prompt additions for this sub-agent */
|
|
75
75
|
instructions?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Message delivery target. Auto-submitted MCP App messages normally relay to
|
|
78
|
+
* the host chat; use "local" when a control explicitly targets this app's
|
|
79
|
+
* own AgentSidebar.
|
|
80
|
+
*/
|
|
81
|
+
chatTarget?: "auto" | "local";
|
|
76
82
|
/**
|
|
77
83
|
* Whether to open the agent sidebar if it's currently hidden.
|
|
78
84
|
* Defaults to true — submitting a chat should make the response visible.
|
|
@@ -527,7 +533,19 @@ function postAgentChatContextMessage(
|
|
|
527
533
|
): void {
|
|
528
534
|
if (typeof window === "undefined") return;
|
|
529
535
|
|
|
530
|
-
const
|
|
536
|
+
const shouldForwardOpenSidebar =
|
|
537
|
+
(type === AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE &&
|
|
538
|
+
options.openSidebar === false) ||
|
|
539
|
+
(type !== AGENT_CHAT_SET_CONTEXT_MESSAGE_TYPE &&
|
|
540
|
+
options.openSidebar === true);
|
|
541
|
+
const payloadData =
|
|
542
|
+
shouldForwardOpenSidebar && typeof data === "object" && data !== null
|
|
543
|
+
? {
|
|
544
|
+
...(data as Record<string, unknown>),
|
|
545
|
+
openSidebar: options.openSidebar,
|
|
546
|
+
}
|
|
547
|
+
: data;
|
|
548
|
+
const payload = { type, data: payloadData };
|
|
531
549
|
const targetSelf = isInBuilderFrame() || isDirectMcpAppEmbedSession();
|
|
532
550
|
const target = targetSelf
|
|
533
551
|
? window
|
|
@@ -728,6 +746,7 @@ function readStoredAgentChatRequestMode(): AgentChatRequestMode | undefined {
|
|
|
728
746
|
export function sendToAgentChat(opts: AgentChatMessage): string {
|
|
729
747
|
const tabId = opts.tabId ?? generateTabId();
|
|
730
748
|
const isCodeRequest = opts.type === "code" || opts.requiresCode === true;
|
|
749
|
+
const localChatTarget = opts.chatTarget === "local";
|
|
731
750
|
const requestMode =
|
|
732
751
|
normalizeAgentChatRequestMode(opts.requestMode ?? opts.mode) ??
|
|
733
752
|
readStoredAgentChatRequestMode();
|
|
@@ -752,7 +771,11 @@ export function sendToAgentChat(opts: AgentChatMessage): string {
|
|
|
752
771
|
},
|
|
753
772
|
};
|
|
754
773
|
|
|
755
|
-
if (
|
|
774
|
+
if (
|
|
775
|
+
opts.submit !== false &&
|
|
776
|
+
!localChatTarget &&
|
|
777
|
+
isMcpAppChatBridgeEnabled()
|
|
778
|
+
) {
|
|
756
779
|
const directHostMessage = sendMcpAppHostMessage({
|
|
757
780
|
message: opts.message,
|
|
758
781
|
context: opts.context,
|
|
@@ -783,7 +806,8 @@ export function sendToAgentChat(opts: AgentChatMessage): string {
|
|
|
783
806
|
const shouldOpenSidebar = opts.openSidebar !== false && !opts.background;
|
|
784
807
|
|
|
785
808
|
const targetSelf =
|
|
786
|
-
!isCodeRequest &&
|
|
809
|
+
!isCodeRequest &&
|
|
810
|
+
(localChatTarget || isInBuilderFrame() || isDirectMcpAppEmbedSession());
|
|
787
811
|
const target = targetSelf
|
|
788
812
|
? window
|
|
789
813
|
: window.parent !== window
|
|
@@ -268,7 +268,7 @@ function MermaidDiagram({
|
|
|
268
268
|
onClick={() => setExpanded(true)}
|
|
269
269
|
aria-label={copy.expandDiagram}
|
|
270
270
|
title={copy.expandDiagram}
|
|
271
|
-
className="an-diagram-expand-trigger absolute right-2 top-2 z-10 flex size-7 items-center justify-center rounded-md border border-border/60 bg-background
|
|
271
|
+
className="an-diagram-expand-trigger absolute right-2 top-2 z-10 flex size-7 items-center justify-center rounded-md border border-border/60 bg-background text-muted-foreground opacity-0 shadow-sm transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/mermaid:opacity-100"
|
|
272
272
|
>
|
|
273
273
|
<IconArrowsMaximize className="size-4" />
|
|
274
274
|
</button>
|
|
@@ -650,7 +650,7 @@ function ExpandableDiagramBody({
|
|
|
650
650
|
onClick={() => toggleWireframeStyle()}
|
|
651
651
|
aria-label={styleLabel}
|
|
652
652
|
aria-pressed={sketchy}
|
|
653
|
-
className="an-diagram-style-trigger flex size-7 items-center justify-center rounded-md border border-border/60 bg-background
|
|
653
|
+
className="an-diagram-style-trigger flex size-7 items-center justify-center rounded-md border border-border/60 bg-background text-muted-foreground opacity-0 shadow-sm transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/diagram:opacity-100"
|
|
654
654
|
>
|
|
655
655
|
{sketchy ? (
|
|
656
656
|
<IconScribble className="size-4" />
|
|
@@ -669,7 +669,7 @@ function ExpandableDiagramBody({
|
|
|
669
669
|
data-plan-interactive
|
|
670
670
|
onClick={() => setExpanded(true)}
|
|
671
671
|
aria-label={copy.expandDiagram}
|
|
672
|
-
className="an-diagram-expand-trigger flex size-7 items-center justify-center rounded-md border border-border/60 bg-background
|
|
672
|
+
className="an-diagram-expand-trigger flex size-7 items-center justify-center rounded-md border border-border/60 bg-background text-muted-foreground opacity-0 shadow-sm transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/diagram:opacity-100"
|
|
673
673
|
>
|
|
674
674
|
<IconArrowsMaximize className="size-4" />
|
|
675
675
|
</button>
|
|
@@ -313,7 +313,7 @@ function WireframeStyleToggleButton() {
|
|
|
313
313
|
event.stopPropagation();
|
|
314
314
|
toggleWireframeStyle();
|
|
315
315
|
}}
|
|
316
|
-
className="absolute right-2 top-2 z-30 inline-flex h-7 items-center gap-1 rounded-md border border-border/60 bg-background
|
|
316
|
+
className="absolute right-2 top-2 z-30 inline-flex h-7 items-center gap-1 rounded-md border border-border/60 bg-background px-2 text-xs font-medium text-muted-foreground opacity-0 shadow-sm transition-[color,opacity] hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring group-hover/wireframe-artboard:opacity-100"
|
|
317
317
|
>
|
|
318
318
|
<IconPencil className="size-3.5" aria-hidden="true" />
|
|
319
319
|
<span>{label}</span>
|
|
@@ -140,8 +140,7 @@ export function buildChatModelGroups({
|
|
|
140
140
|
),
|
|
141
141
|
configured:
|
|
142
142
|
requiredEnvVars.length === 0 ||
|
|
143
|
-
requiredEnvVars.some((key) => configured.has(key))
|
|
144
|
-
engine.name === currentEngineName,
|
|
143
|
+
requiredEnvVars.some((key) => configured.has(key)),
|
|
145
144
|
};
|
|
146
145
|
})
|
|
147
146
|
.filter((group) => group.models.length > 0);
|
|
@@ -7,13 +7,11 @@
|
|
|
7
7
|
* correctly. Pass a `mapCoords` prop to handle non-identity transforms
|
|
8
8
|
* (e.g. a zoomed canvas).
|
|
9
9
|
*
|
|
10
|
-
* The agent
|
|
11
|
-
* label, consistent with AgentPresenceChip.
|
|
10
|
+
* The agent uses the same pointer shape with an "AI" label.
|
|
12
11
|
*
|
|
13
12
|
* Cursors fade out after 10 seconds of no movement.
|
|
14
13
|
*/
|
|
15
14
|
|
|
16
|
-
import { IconSparkles } from "@tabler/icons-react";
|
|
17
15
|
import { useState, useEffect, useRef, memo } from "react";
|
|
18
16
|
|
|
19
17
|
import type { OtherPresence, NormalizedPoint } from "../../collab/presence.js";
|
|
@@ -48,50 +46,28 @@ export interface LiveCursorOverlayProps {
|
|
|
48
46
|
|
|
49
47
|
const STALE_MS = 10_000; // Fade out cursors older than 10s
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="22" viewBox="0 0 16 22" fill="none">
|
|
53
|
-
<path d="M0 0L0 18L4.5 13.5L7.5 20L9.5 19.5L6.5 13L12 13L0 0Z" fill="__COLOR__" stroke="white" stroke-width="1"/>
|
|
54
|
-
</svg>
|
|
55
|
-
`.trim();
|
|
56
|
-
|
|
57
|
-
function CursorPointer({
|
|
58
|
-
color,
|
|
59
|
-
isAgent,
|
|
60
|
-
}: {
|
|
61
|
-
color: string;
|
|
62
|
-
isAgent: boolean;
|
|
63
|
-
}) {
|
|
64
|
-
if (isAgent) {
|
|
65
|
-
return (
|
|
66
|
-
<div
|
|
67
|
-
style={{
|
|
68
|
-
display: "flex",
|
|
69
|
-
alignItems: "center",
|
|
70
|
-
justifyContent: "center",
|
|
71
|
-
width: 22,
|
|
72
|
-
height: 22,
|
|
73
|
-
borderRadius: "50%",
|
|
74
|
-
backgroundColor: color,
|
|
75
|
-
color: "#fff",
|
|
76
|
-
boxShadow: `0 0 0 2px #fff`,
|
|
77
|
-
}}
|
|
78
|
-
>
|
|
79
|
-
<IconSparkles size={12} stroke={2} />
|
|
80
|
-
</div>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const svgSrc =
|
|
85
|
-
"data:image/svg+xml;charset=utf-8," +
|
|
86
|
-
encodeURIComponent(CURSOR_SVG.replace("__COLOR__", color));
|
|
87
|
-
|
|
49
|
+
function CursorPointer({ color }: { color: string }) {
|
|
88
50
|
return (
|
|
89
|
-
<
|
|
90
|
-
|
|
91
|
-
|
|
51
|
+
<svg
|
|
52
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
53
|
+
width="25"
|
|
54
|
+
height="29"
|
|
55
|
+
viewBox="0 0 25 29"
|
|
56
|
+
fill="none"
|
|
92
57
|
aria-hidden
|
|
93
|
-
style={{
|
|
94
|
-
|
|
58
|
+
style={{
|
|
59
|
+
display: "block",
|
|
60
|
+
filter: "drop-shadow(0 2px 3px rgba(15, 23, 42, 0.3))",
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
<path
|
|
64
|
+
d="M2.5 2.5L21.5 11L12.6 14.1L8.3 24.5L2.5 2.5Z"
|
|
65
|
+
fill={color}
|
|
66
|
+
stroke="white"
|
|
67
|
+
strokeLinejoin="round"
|
|
68
|
+
strokeWidth="3"
|
|
69
|
+
/>
|
|
70
|
+
</svg>
|
|
95
71
|
);
|
|
96
72
|
}
|
|
97
73
|
|
|
@@ -123,39 +99,30 @@ const CursorLabel = memo(function CursorLabel({
|
|
|
123
99
|
transform: "translate(-2px, -2px)",
|
|
124
100
|
zIndex: 9999,
|
|
125
101
|
transition: "left 120ms linear, top 120ms linear",
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
alignItems: "flex-start",
|
|
129
|
-
gap: 2,
|
|
102
|
+
width: 0,
|
|
103
|
+
height: 0,
|
|
130
104
|
}}
|
|
131
105
|
>
|
|
132
|
-
<CursorPointer color={color}
|
|
106
|
+
<CursorPointer color={color} />
|
|
133
107
|
<div
|
|
134
108
|
style={{
|
|
109
|
+
position: "absolute",
|
|
110
|
+
left: 31,
|
|
111
|
+
top: 31,
|
|
135
112
|
backgroundColor: color,
|
|
136
113
|
color: "#fff",
|
|
137
|
-
fontSize:
|
|
138
|
-
fontWeight:
|
|
139
|
-
|
|
140
|
-
|
|
114
|
+
fontSize: 12,
|
|
115
|
+
fontWeight: 500,
|
|
116
|
+
lineHeight: "16px",
|
|
117
|
+
padding: "2px 7px",
|
|
118
|
+
borderRadius: 2,
|
|
141
119
|
whiteSpace: "nowrap",
|
|
142
|
-
|
|
143
|
-
boxShadow: "0 1px 3px rgba(0,0,0,0.25)",
|
|
120
|
+
boxShadow: "0 5px 12px rgba(15, 23, 42, 0.16)",
|
|
144
121
|
maxWidth: 120,
|
|
145
122
|
overflow: "hidden",
|
|
146
123
|
textOverflow: "ellipsis",
|
|
147
|
-
display: "flex",
|
|
148
|
-
alignItems: "center",
|
|
149
|
-
gap: 3,
|
|
150
124
|
}}
|
|
151
125
|
>
|
|
152
|
-
{other.isAgent && (
|
|
153
|
-
<IconSparkles
|
|
154
|
-
size={9}
|
|
155
|
-
stroke={2}
|
|
156
|
-
style={{ flexShrink: 0, opacity: 0.85 }}
|
|
157
|
-
/>
|
|
158
|
-
)}
|
|
159
126
|
{label}
|
|
160
127
|
</div>
|
|
161
128
|
</div>
|