@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.
Files changed (497) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +34 -0
  3. package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
  4. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +55 -1
  5. package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +5 -0
  6. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +66 -1
  7. package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +5 -0
  8. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +65 -1
  9. package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
  10. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +64 -1
  11. package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
  12. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +59 -1
  13. package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
  14. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +62 -1
  15. package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
  16. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +58 -1
  17. package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
  18. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +62 -1
  19. package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
  20. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +50 -1
  21. package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
  22. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +52 -1
  23. package/corpus/core/docs/content/skills-guide.mdx +5 -0
  24. package/corpus/core/docs/content/template-design.mdx +59 -1
  25. package/corpus/core/package.json +2 -1
  26. package/corpus/core/src/agent/engine/index.ts +1 -0
  27. package/corpus/core/src/agent/engine/registry.ts +40 -0
  28. package/corpus/core/src/agent/production-agent.ts +6 -2
  29. package/corpus/core/src/application-state/handlers.ts +1 -1
  30. package/corpus/core/src/brand-kit/index.ts +1 -1
  31. package/corpus/core/src/cli/design-connect.ts +490 -0
  32. package/corpus/core/src/cli/index.ts +16 -0
  33. package/corpus/core/src/cli/skills.ts +144 -3
  34. package/corpus/core/src/client/AgentPanel.tsx +1 -1
  35. package/corpus/core/src/client/AssistantChat.tsx +43 -7
  36. package/corpus/core/src/client/MultiTabAssistantChat.tsx +1 -1
  37. package/corpus/core/src/client/agent-chat.ts +27 -3
  38. package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
  39. package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
  40. package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
  41. package/corpus/core/src/client/chat/message-components.tsx +1 -1
  42. package/corpus/core/src/client/chat-model-groups.ts +1 -2
  43. package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
  44. package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
  45. package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
  46. package/corpus/core/src/client/extensions/portable-extension.ts +1 -1
  47. package/corpus/core/src/client/frame-protocol.ts +17 -2
  48. package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
  49. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
  50. package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
  51. package/corpus/core/src/code-agents/transcript-normalizer.ts +1 -1
  52. package/corpus/core/src/extensions/path.ts +1 -4
  53. package/corpus/core/src/integrations/a2a-continuation-processor.ts +1 -1
  54. package/corpus/core/src/mcp/build-server.ts +1 -1
  55. package/corpus/core/src/org/handlers.ts +5 -5
  56. package/corpus/core/src/org/plugin.ts +2 -2
  57. package/corpus/core/src/scripts/call-agent.ts +1 -1
  58. package/corpus/core/src/scripts/db/safety.ts +1 -1
  59. package/corpus/core/src/server/auth.ts +3 -0
  60. package/corpus/core/src/server/builder-design-systems.ts +308 -0
  61. package/corpus/core/src/server/core-routes-plugin.ts +29 -3
  62. package/corpus/core/src/server/index.ts +8 -0
  63. package/corpus/core/src/server/transcribe-voice.ts +57 -22
  64. package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
  65. package/corpus/core/src/styles/agent-native.css +60 -4
  66. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  67. package/corpus/core/src/usage/store.ts +2 -2
  68. package/corpus/core/src/vite/client.ts +2 -0
  69. package/corpus/core/src/voice/index.ts +18 -0
  70. package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
  71. package/corpus/core/src/voice/voice-context.ts +217 -0
  72. package/corpus/core/src/voice/voice-replacements.ts +75 -0
  73. package/corpus/templates/analytics/AGENTS.md +4 -3
  74. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +298 -15
  75. package/corpus/templates/analytics/actions/get-sql-dashboard.ts +9 -4
  76. package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
  77. package/corpus/templates/analytics/actions/mutate-dashboard.ts +18 -2
  78. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +12 -2
  79. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
  80. package/corpus/templates/analytics/app/global.css +0 -4
  81. package/corpus/templates/analytics/app/hooks/use-replay-storage-status.ts +66 -0
  82. package/corpus/templates/analytics/app/i18n/zh-TW.ts +39 -0
  83. package/corpus/templates/analytics/app/i18n-data.ts +424 -0
  84. package/corpus/templates/analytics/app/pages/Settings.tsx +333 -0
  85. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
  86. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +121 -3
  87. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +82 -34
  88. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
  89. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +144 -36
  90. package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
  91. package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
  92. package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  93. package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
  94. package/corpus/templates/analytics/changelog/2026-06-29-analytics-agents-can-now-place-new-charts-into-requested-das.md +6 -0
  95. package/corpus/templates/analytics/changelog/2026-06-29-analytics-queries-now-report-failed-source-query-errors-inst.md +6 -0
  96. package/corpus/templates/analytics/changelog/2026-06-29-charts-can-now-be-dropped-between-full-dashboard-rows-to-cre.md +6 -0
  97. package/corpus/templates/analytics/changelog/2026-06-29-dashboard-email-reports-include-the-full-dashboard-image-wit.md +6 -0
  98. package/corpus/templates/analytics/changelog/2026-06-29-main-surface-border-reaches-the-top.md +6 -0
  99. package/corpus/templates/analytics/changelog/2026-06-29-session-replay-now-records-playable-sessions-in-production-a.md +6 -0
  100. package/corpus/templates/analytics/changelog/2026-06-29-set-up-session-replay-storage-from-settings-connect-builder-.md +6 -0
  101. package/corpus/templates/analytics/scripts/cleanup-empty-session-recordings.ts +102 -0
  102. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
  103. package/corpus/templates/analytics/server/lib/dashboard-report.ts +75 -30
  104. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
  105. package/corpus/templates/analytics/server/lib/real-data-actions.ts +81 -20
  106. package/corpus/templates/analytics/server/lib/replay-storage.ts +79 -0
  107. package/corpus/templates/analytics/server/lib/s3-upload-provider.ts +255 -0
  108. package/corpus/templates/analytics/server/lib/session-replay.ts +53 -12
  109. package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -2
  110. package/corpus/templates/analytics/server/plugins/onboarding.ts +97 -0
  111. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
  112. package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  113. package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
  114. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
  115. package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
  116. package/corpus/templates/brain/app/i18n-data.ts +20 -0
  117. package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  118. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
  119. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
  120. package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
  121. package/corpus/templates/calendar/app/i18n-data.ts +20 -0
  122. package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  123. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
  124. package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  125. package/corpus/templates/clips/AGENTS.md +4 -0
  126. package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
  127. package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
  128. package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
  129. package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
  130. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
  131. package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
  132. package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  133. package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
  134. package/corpus/templates/clips/desktop/src/lib/recorder.ts +24 -0
  135. package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +105 -5
  136. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
  137. package/corpus/templates/content/actions/set-image-alt-text.ts +1 -1
  138. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
  139. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
  140. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
  141. package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  142. package/corpus/templates/content/shared/document-export.ts +1 -1
  143. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -18
  144. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +154 -0
  145. package/corpus/templates/design/AGENTS.md +95 -5
  146. package/corpus/templates/design/DESIGN.md +82 -0
  147. package/corpus/templates/design/DEVELOPING.md +43 -0
  148. package/corpus/templates/design/actions/add-localhost-screens.ts +453 -0
  149. package/corpus/templates/design/actions/apply-shader.ts +277 -0
  150. package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
  151. package/corpus/templates/design/actions/connect-localhost.ts +183 -0
  152. package/corpus/templates/design/actions/edit-design.ts +195 -42
  153. package/corpus/templates/design/actions/generate-design.ts +71 -1
  154. package/corpus/templates/design/actions/generate-screens.ts +193 -0
  155. package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
  156. package/corpus/templates/design/actions/get-shader.ts +119 -0
  157. package/corpus/templates/design/actions/index-design-system-with-builder.ts +259 -0
  158. package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
  159. package/corpus/templates/design/actions/navigate.ts +55 -2
  160. package/corpus/templates/design/actions/update-file.ts +9 -2
  161. package/corpus/templates/design/actions/view-screen.ts +68 -1
  162. package/corpus/templates/design/agent-native.app-skill.json +10 -0
  163. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +719 -0
  164. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2120 -103
  165. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
  166. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +401 -0
  167. package/corpus/templates/design/app/components/design/EditPanel.tsx +3966 -440
  168. package/corpus/templates/design/app/components/design/LayersPanel.tsx +1473 -0
  169. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3940 -147
  170. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
  171. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +105 -63
  172. package/corpus/templates/design/app/components/design/index.ts +0 -5
  173. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +353 -0
  174. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +1589 -0
  175. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +511 -0
  176. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +395 -0
  177. package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +2010 -0
  178. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +601 -0
  179. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +242 -0
  180. package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
  181. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +238 -0
  182. package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
  183. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +575 -0
  184. package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
  185. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +423 -0
  186. package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +741 -0
  187. package/corpus/templates/design/app/components/design/inspector/index.ts +87 -0
  188. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
  189. package/corpus/templates/design/app/components/design/types.ts +23 -0
  190. package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
  191. package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
  192. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
  193. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
  194. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
  195. package/corpus/templates/design/app/global.css +149 -5
  196. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
  197. package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
  198. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
  199. package/corpus/templates/design/app/i18n/zh-TW.ts +277 -0
  200. package/corpus/templates/design/app/i18n-data.ts +3028 -1
  201. package/corpus/templates/design/app/pages/DesignEditor.tsx +5831 -904
  202. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +57 -221
  203. package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
  204. package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
  205. package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
  206. package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
  207. package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
  208. package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
  209. package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
  210. package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  211. package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
  212. package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
  213. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
  214. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
  215. package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
  216. package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
  217. package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
  218. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
  219. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
  220. package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
  221. package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
  222. package/corpus/templates/design/changelog/2026-06-29-canvas-selection-no-longer-flashes-broken-prototype-html-whe.md +6 -0
  223. package/corpus/templates/design/changelog/2026-06-29-command-menu-selections-are-clearer-in-dark-mode.md +6 -0
  224. package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
  225. package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
  226. package/corpus/templates/design/changelog/2026-06-29-design-mode-top-chrome-now-groups-collaborators-preview-shar.md +6 -0
  227. package/corpus/templates/design/changelog/2026-06-29-element-selection-now-stays-on-the-intended-layer-after-sele.md +6 -0
  228. package/corpus/templates/design/changelog/2026-06-29-screen-overview-full-view-controls-now-sit-above-frames-inst.md +6 -0
  229. package/corpus/templates/design/changelog/2026-06-29-screen-overview-tools-can-draw-shapes-create-screens-and-kee.md +6 -0
  230. package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
  231. package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-now-creates-anchor-based-bezier-vectors-with-ha.md +6 -0
  232. package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
  233. package/corpus/templates/design/package.json +1 -0
  234. package/corpus/templates/design/server/db/schema.ts +26 -0
  235. package/corpus/templates/design/server/handlers/import-figma-system.ts +38 -85
  236. package/corpus/templates/design/server/lib/design-snapshot.ts +9 -1
  237. package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
  238. package/corpus/templates/design/shared/api.ts +27 -0
  239. package/corpus/templates/design/shared/canvas-frames.ts +103 -0
  240. package/corpus/templates/design/shared/canvas-math.ts +1058 -0
  241. package/corpus/templates/design/shared/code-layer.ts +2412 -0
  242. package/corpus/templates/design/shared/color-utils.ts +180 -0
  243. package/corpus/templates/design/shared/generation-session.ts +61 -0
  244. package/corpus/templates/design/shared/html-content.ts +21 -0
  245. package/corpus/templates/design/shared/pen-path.ts +207 -0
  246. package/corpus/templates/design/shared/shader-presets.ts +782 -0
  247. package/corpus/templates/design/shared/shader-safety.ts +137 -0
  248. package/corpus/templates/design/shared/source-mode.ts +237 -0
  249. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
  250. package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
  251. package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
  252. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  253. package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
  254. package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
  255. package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
  256. package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
  257. package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
  258. package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
  259. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  260. package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
  261. package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  262. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
  263. package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  264. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
  265. package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
  266. package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
  267. package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
  268. package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
  269. package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
  270. package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
  271. package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
  272. package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
  273. package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
  274. package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
  275. package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
  276. package/corpus/templates/mail/app/lib/utils.ts +2 -2
  277. package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  278. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
  279. package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
  280. package/corpus/templates/plan/app/global.css +61 -78
  281. package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
  282. package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  283. package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
  284. package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
  285. package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +9 -10
  286. package/corpus/templates/slides/AGENTS.md +3 -2
  287. package/corpus/templates/slides/actions/import-file.ts +26 -17
  288. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +259 -0
  289. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +35 -167
  290. package/corpus/templates/slides/app/components/design-system/fig-import-response.ts +9 -13
  291. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
  292. package/corpus/templates/slides/app/context/DeckContext.tsx +1 -1
  293. package/corpus/templates/slides/app/i18n/ar-SA.ts +9 -37
  294. package/corpus/templates/slides/app/i18n/de-DE.ts +10 -25
  295. package/corpus/templates/slides/app/i18n/en-US.ts +9 -26
  296. package/corpus/templates/slides/app/i18n/es-ES.ts +10 -28
  297. package/corpus/templates/slides/app/i18n/fr-FR.ts +10 -28
  298. package/corpus/templates/slides/app/i18n/hi-IN.ts +9 -26
  299. package/corpus/templates/slides/app/i18n/ja-JP.ts +10 -22
  300. package/corpus/templates/slides/app/i18n/ko-KR.ts +9 -23
  301. package/corpus/templates/slides/app/i18n/pt-BR.ts +10 -28
  302. package/corpus/templates/slides/app/i18n/zh-CN.ts +9 -22
  303. package/corpus/templates/slides/app/i18n/zh-TW.ts +9 -22
  304. package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  305. package/corpus/templates/slides/server/handlers/import-figma-system.ts +44 -12
  306. package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
  307. package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +1 -1
  308. package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
  309. package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
  310. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
  311. package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
  312. package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
  313. package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
  314. package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
  315. package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
  316. package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
  317. package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
  318. package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
  319. package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
  320. package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
  321. package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
  322. package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  323. package/dist/agent/engine/index.d.ts +1 -1
  324. package/dist/agent/engine/index.d.ts.map +1 -1
  325. package/dist/agent/engine/index.js +1 -1
  326. package/dist/agent/engine/index.js.map +1 -1
  327. package/dist/agent/engine/registry.d.ts +9 -0
  328. package/dist/agent/engine/registry.d.ts.map +1 -1
  329. package/dist/agent/engine/registry.js +37 -0
  330. package/dist/agent/engine/registry.js.map +1 -1
  331. package/dist/agent/production-agent.d.ts.map +1 -1
  332. package/dist/agent/production-agent.js +4 -3
  333. package/dist/agent/production-agent.js.map +1 -1
  334. package/dist/application-state/handlers.js +1 -1
  335. package/dist/application-state/handlers.js.map +1 -1
  336. package/dist/brand-kit/index.d.ts +1 -1
  337. package/dist/brand-kit/index.js +1 -1
  338. package/dist/brand-kit/index.js.map +1 -1
  339. package/dist/cli/design-connect.d.ts +52 -0
  340. package/dist/cli/design-connect.d.ts.map +1 -0
  341. package/dist/cli/design-connect.js +409 -0
  342. package/dist/cli/design-connect.js.map +1 -0
  343. package/dist/cli/index.js +15 -0
  344. package/dist/cli/index.js.map +1 -1
  345. package/dist/cli/skills.d.ts +3 -0
  346. package/dist/cli/skills.d.ts.map +1 -1
  347. package/dist/cli/skills.js +139 -3
  348. package/dist/cli/skills.js.map +1 -1
  349. package/dist/client/AgentPanel.js +1 -1
  350. package/dist/client/AgentPanel.js.map +1 -1
  351. package/dist/client/AssistantChat.d.ts.map +1 -1
  352. package/dist/client/AssistantChat.js +38 -8
  353. package/dist/client/AssistantChat.js.map +1 -1
  354. package/dist/client/MultiTabAssistantChat.js +1 -1
  355. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  356. package/dist/client/agent-chat.d.ts +6 -0
  357. package/dist/client/agent-chat.d.ts.map +1 -1
  358. package/dist/client/agent-chat.js +17 -3
  359. package/dist/client/agent-chat.js.map +1 -1
  360. package/dist/client/blocks/library/MermaidBlock.js +1 -1
  361. package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
  362. package/dist/client/blocks/library/diagram.js +1 -1
  363. package/dist/client/blocks/library/diagram.js.map +1 -1
  364. package/dist/client/blocks/library/wireframe.js +1 -1
  365. package/dist/client/blocks/library/wireframe.js.map +1 -1
  366. package/dist/client/chat/message-components.js +1 -1
  367. package/dist/client/chat/message-components.js.map +1 -1
  368. package/dist/client/chat-model-groups.d.ts.map +1 -1
  369. package/dist/client/chat-model-groups.js +1 -2
  370. package/dist/client/chat-model-groups.js.map +1 -1
  371. package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
  372. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
  373. package/dist/client/components/LiveCursorOverlay.js +19 -40
  374. package/dist/client/components/LiveCursorOverlay.js.map +1 -1
  375. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  376. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  377. package/dist/client/composer/TiptapComposer.js +86 -24
  378. package/dist/client/composer/TiptapComposer.js.map +1 -1
  379. package/dist/client/composer/useVoiceDictation.d.ts +9 -0
  380. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  381. package/dist/client/composer/useVoiceDictation.js +154 -32
  382. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  383. package/dist/client/extensions/portable-extension.d.ts +1 -1
  384. package/dist/client/extensions/portable-extension.d.ts.map +1 -1
  385. package/dist/client/extensions/portable-extension.js.map +1 -1
  386. package/dist/client/frame-protocol.d.ts +17 -2
  387. package/dist/client/frame-protocol.d.ts.map +1 -1
  388. package/dist/client/frame-protocol.js.map +1 -1
  389. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
  390. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
  391. package/dist/client/sharing/ShareButton.d.ts +2 -0
  392. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  393. package/dist/client/sharing/ShareButton.js +7 -6
  394. package/dist/client/sharing/ShareButton.js.map +1 -1
  395. package/dist/client/use-agent-engine-configured.d.ts +5 -0
  396. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  397. package/dist/client/use-agent-engine-configured.js +51 -25
  398. package/dist/client/use-agent-engine-configured.js.map +1 -1
  399. package/dist/code-agents/transcript-normalizer.js +1 -1
  400. package/dist/code-agents/transcript-normalizer.js.map +1 -1
  401. package/dist/collab/routes.d.ts +1 -1
  402. package/dist/extensions/path.d.ts +1 -1
  403. package/dist/extensions/path.d.ts.map +1 -1
  404. package/dist/extensions/path.js.map +1 -1
  405. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  406. package/dist/integrations/a2a-continuation-processor.js +1 -1
  407. package/dist/integrations/a2a-continuation-processor.js.map +1 -1
  408. package/dist/mcp/build-server.d.ts +1 -1
  409. package/dist/mcp/build-server.d.ts.map +1 -1
  410. package/dist/mcp/build-server.js.map +1 -1
  411. package/dist/notifications/routes.d.ts +3 -3
  412. package/dist/observability/routes.d.ts +5 -5
  413. package/dist/org/handlers.js +5 -5
  414. package/dist/org/handlers.js.map +1 -1
  415. package/dist/org/plugin.js +2 -2
  416. package/dist/org/plugin.js.map +1 -1
  417. package/dist/scripts/call-agent.js +1 -1
  418. package/dist/scripts/call-agent.js.map +1 -1
  419. package/dist/scripts/db/safety.js +1 -1
  420. package/dist/scripts/db/safety.js.map +1 -1
  421. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  422. package/dist/server/auth.d.ts.map +1 -1
  423. package/dist/server/auth.js +3 -0
  424. package/dist/server/auth.js.map +1 -1
  425. package/dist/server/builder-design-systems.d.ts +28 -0
  426. package/dist/server/builder-design-systems.d.ts.map +1 -0
  427. package/dist/server/builder-design-systems.js +217 -0
  428. package/dist/server/builder-design-systems.js.map +1 -0
  429. package/dist/server/core-routes-plugin.d.ts +1 -0
  430. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  431. package/dist/server/core-routes-plugin.js +20 -3
  432. package/dist/server/core-routes-plugin.js.map +1 -1
  433. package/dist/server/index.d.ts +1 -0
  434. package/dist/server/index.d.ts.map +1 -1
  435. package/dist/server/index.js +1 -0
  436. package/dist/server/index.js.map +1 -1
  437. package/dist/server/transcribe-voice.d.ts +1 -1
  438. package/dist/server/transcribe-voice.d.ts.map +1 -1
  439. package/dist/server/transcribe-voice.js +40 -24
  440. package/dist/server/transcribe-voice.js.map +1 -1
  441. package/dist/shared/mcp-embed-headers.d.ts +1 -0
  442. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  443. package/dist/shared/mcp-embed-headers.js +20 -1
  444. package/dist/shared/mcp-embed-headers.js.map +1 -1
  445. package/dist/styles/agent-native.css +60 -4
  446. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  447. package/dist/usage/store.js +2 -2
  448. package/dist/usage/store.js.map +1 -1
  449. package/dist/vite/client.d.ts.map +1 -1
  450. package/dist/vite/client.js +2 -0
  451. package/dist/vite/client.js.map +1 -1
  452. package/dist/voice/index.d.ts +5 -0
  453. package/dist/voice/index.d.ts.map +1 -0
  454. package/dist/voice/index.js +4 -0
  455. package/dist/voice/index.js.map +1 -0
  456. package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
  457. package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
  458. package/dist/voice/voice-cleanup-prompt.js +26 -0
  459. package/dist/voice/voice-cleanup-prompt.js.map +1 -0
  460. package/dist/voice/voice-context.d.ts +25 -0
  461. package/dist/voice/voice-context.d.ts.map +1 -0
  462. package/dist/voice/voice-context.js +156 -0
  463. package/dist/voice/voice-context.js.map +1 -0
  464. package/dist/voice/voice-replacements.d.ts +4 -0
  465. package/dist/voice/voice-replacements.d.ts.map +1 -0
  466. package/dist/voice/voice-replacements.js +52 -0
  467. package/dist/voice/voice-replacements.js.map +1 -0
  468. package/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
  469. package/docs/content/locales/ar-SA/template-design.mdx +55 -1
  470. package/docs/content/locales/de-DE/skills-guide.mdx +5 -0
  471. package/docs/content/locales/de-DE/template-design.mdx +66 -1
  472. package/docs/content/locales/es-ES/skills-guide.mdx +5 -0
  473. package/docs/content/locales/es-ES/template-design.mdx +65 -1
  474. package/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
  475. package/docs/content/locales/fr-FR/template-design.mdx +64 -1
  476. package/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
  477. package/docs/content/locales/hi-IN/template-design.mdx +59 -1
  478. package/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
  479. package/docs/content/locales/ja-JP/template-design.mdx +62 -1
  480. package/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
  481. package/docs/content/locales/ko-KR/template-design.mdx +58 -1
  482. package/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
  483. package/docs/content/locales/pt-BR/template-design.mdx +62 -1
  484. package/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
  485. package/docs/content/locales/zh-CN/template-design.mdx +50 -1
  486. package/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
  487. package/docs/content/locales/zh-TW/template-design.mdx +52 -1
  488. package/docs/content/skills-guide.mdx +5 -0
  489. package/docs/content/template-design.mdx +59 -1
  490. package/package.json +2 -1
  491. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  492. package/corpus/templates/design/actions/import-figma-file.ts +0 -166
  493. package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
  494. package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
  495. package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
  496. package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
  497. 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
- void addTab();
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 { useAgentEngineConfigured } from "./use-agent-engine-configured.js";
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 missingApiKey = useAgentEngineConfigured(
1141
+ const agentEngineConfigured = useAgentEngineConfigured(
1135
1142
  providerStatusChecksEnabled,
1136
- ).missing;
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 "thinking". The
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 "thinking" rather than flipping through
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 "thinking" while the model works —
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
- "thinking"
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}
@@ -1625,7 +1625,7 @@ export function MultiTabAssistantChat({
1625
1625
  return next;
1626
1626
  });
1627
1627
  if (shouldRefreshThreads) {
1628
- void refreshThreads();
1628
+ refreshThreads();
1629
1629
  }
1630
1630
  }
1631
1631
  }
@@ -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 payload = { type, data };
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 (opts.submit !== false && isMcpAppChatBridgeEnabled()) {
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 && (isInBuilderFrame() || isDirectMcpAppEmbedSession());
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/90 text-muted-foreground opacity-0 shadow-sm backdrop-blur 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"
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/90 text-muted-foreground opacity-0 shadow-sm backdrop-blur 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"
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/90 text-muted-foreground opacity-0 shadow-sm backdrop-blur 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"
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/90 px-2 text-xs font-medium text-muted-foreground opacity-0 shadow-sm backdrop-blur 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"
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>
@@ -950,7 +950,7 @@ export function RunningActivityStatus({ label }: { label: string }) {
950
950
  }
951
951
 
952
952
  export function ThinkingIndicator({
953
- label = "thinking",
953
+ label = "Thinking",
954
954
  }: { label?: string } = {}) {
955
955
  return (
956
956
  <div
@@ -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's cursor is styled distinctly with a sparkle variant + "AI"
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
- const CURSOR_SVG = `
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
- <img
90
- src={svgSrc}
91
- alt=""
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={{ width: 16, height: 22, display: "block", flexShrink: 0 }}
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
- display: "flex",
127
- flexDirection: "column",
128
- alignItems: "flex-start",
129
- gap: 2,
102
+ width: 0,
103
+ height: 0,
130
104
  }}
131
105
  >
132
- <CursorPointer color={color} isAgent={other.isAgent} />
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: 11,
138
- fontWeight: 600,
139
- padding: "1px 5px",
140
- borderRadius: 4,
114
+ fontSize: 12,
115
+ fontWeight: 500,
116
+ lineHeight: "16px",
117
+ padding: "2px 7px",
118
+ borderRadius: 2,
141
119
  whiteSpace: "nowrap",
142
- marginLeft: other.isAgent ? 0 : 4,
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>