@agent-native/core 0.83.0 → 0.84.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 (508) hide show
  1. package/README.md +2 -2
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +34 -0
  4. package/corpus/core/README.md +2 -2
  5. package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
  6. package/corpus/core/docs/content/evals.mdx +34 -12
  7. package/corpus/core/docs/content/faq.mdx +1 -1
  8. package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  9. package/corpus/core/docs/content/locales/ar-SA/evals.mdx +7 -0
  10. package/corpus/core/docs/content/locales/ar-SA/faq.mdx +1 -1
  11. package/corpus/core/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  12. package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  13. package/corpus/core/docs/content/locales/de-DE/evals.mdx +8 -0
  14. package/corpus/core/docs/content/locales/de-DE/faq.mdx +1 -1
  15. package/corpus/core/docs/content/locales/de-DE/template-chat.mdx +1 -1
  16. package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  17. package/corpus/core/docs/content/locales/es-ES/evals.mdx +8 -0
  18. package/corpus/core/docs/content/locales/es-ES/faq.mdx +1 -1
  19. package/corpus/core/docs/content/locales/es-ES/template-chat.mdx +1 -1
  20. package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  21. package/corpus/core/docs/content/locales/fr-FR/evals.mdx +8 -0
  22. package/corpus/core/docs/content/locales/fr-FR/faq.mdx +1 -1
  23. package/corpus/core/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  24. package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  25. package/corpus/core/docs/content/locales/hi-IN/evals.mdx +8 -0
  26. package/corpus/core/docs/content/locales/hi-IN/faq.mdx +1 -1
  27. package/corpus/core/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  28. package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  29. package/corpus/core/docs/content/locales/ja-JP/evals.mdx +7 -0
  30. package/corpus/core/docs/content/locales/ja-JP/faq.mdx +1 -1
  31. package/corpus/core/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  32. package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  33. package/corpus/core/docs/content/locales/ko-KR/evals.mdx +7 -0
  34. package/corpus/core/docs/content/locales/ko-KR/faq.mdx +1 -1
  35. package/corpus/core/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  36. package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  37. package/corpus/core/docs/content/locales/pt-BR/evals.mdx +8 -0
  38. package/corpus/core/docs/content/locales/pt-BR/faq.mdx +1 -1
  39. package/corpus/core/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  40. package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  41. package/corpus/core/docs/content/locales/zh-CN/evals.mdx +7 -0
  42. package/corpus/core/docs/content/locales/zh-CN/faq.mdx +1 -1
  43. package/corpus/core/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  44. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  45. package/corpus/core/docs/content/locales/zh-TW/evals.mdx +7 -0
  46. package/corpus/core/docs/content/locales/zh-TW/faq.mdx +1 -1
  47. package/corpus/core/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  48. package/corpus/core/docs/content/template-chat.mdx +1 -1
  49. package/corpus/core/package.json +1 -1
  50. package/corpus/core/src/agent/engine/builtin.ts +1 -1
  51. package/corpus/core/src/agent/engine/output-tokens.ts +1 -1
  52. package/corpus/core/src/agent/harness/acp-adapter.ts +28 -4
  53. package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +3 -0
  54. package/corpus/core/src/agent/harness/translate.ts +3 -0
  55. package/corpus/core/src/agent/harness/types.ts +1 -0
  56. package/corpus/core/src/agent/model-config.ts +34 -13
  57. package/corpus/core/src/agent/production-agent.ts +87 -10
  58. package/corpus/core/src/agent/thread-data-builder.ts +29 -4
  59. package/corpus/core/src/agent/tool-call-journal.ts +109 -48
  60. package/corpus/core/src/agent/types.ts +6 -1
  61. package/corpus/core/src/cli/design-connect.ts +106 -0
  62. package/corpus/core/src/cli/gateway-helpers.ts +17 -0
  63. package/corpus/core/src/cli/recap.ts +0 -2
  64. package/corpus/core/src/cli/skills.ts +54 -16
  65. package/corpus/core/src/cli/workspace-dev.ts +29 -5
  66. package/corpus/core/src/client/AssistantChat.tsx +89 -42
  67. package/corpus/core/src/client/DefaultSpinner.tsx +8 -1
  68. package/corpus/core/src/client/chat/message-components.tsx +49 -1
  69. package/corpus/core/src/client/chat/repo-helpers.ts +71 -0
  70. package/corpus/core/src/client/chat/run-recovery.tsx +15 -5
  71. package/corpus/core/src/client/components/ApiKeySettings.tsx +8 -8
  72. package/corpus/core/src/client/components/CodeRequiredDialog.tsx +26 -15
  73. package/corpus/core/src/client/components/MissingKeyCard.tsx +13 -6
  74. package/corpus/core/src/client/composer/TiptapComposer.tsx +4 -3
  75. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +0 -1
  76. package/corpus/core/src/client/guided-questions.tsx +21 -27
  77. package/corpus/core/src/client/integrations/IntegrationCard.tsx +1 -1
  78. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +1 -1
  79. package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +2 -2
  80. package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +23 -19
  81. package/corpus/core/src/client/resources/ResourceEditor.tsx +18 -10
  82. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  83. package/corpus/core/src/client/settings/SettingsPanel.tsx +8 -3
  84. package/corpus/core/src/client/settings/useBuilderStatus.ts +8 -41
  85. package/corpus/core/src/client/useProductionAgent.ts +6 -2
  86. package/corpus/core/src/deploy/build.ts +1 -1
  87. package/corpus/core/src/eval/define-eval.ts +4 -1
  88. package/corpus/core/src/eval/report.ts +23 -8
  89. package/corpus/core/src/eval/runner.ts +41 -6
  90. package/corpus/core/src/eval/types.ts +11 -0
  91. package/corpus/core/src/observability/traces.ts +3 -3
  92. package/corpus/core/src/onboarding/default-steps.ts +1 -1
  93. package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +1 -1
  94. package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +1 -1
  95. package/corpus/core/src/server/agent-chat-plugin.ts +177 -81
  96. package/corpus/core/src/server/core-routes-plugin.ts +7 -1
  97. package/corpus/core/src/server/open-route.ts +59 -40
  98. package/corpus/core/src/shared/reasoning-effort.ts +2 -0
  99. package/corpus/core/src/sharing/access.ts +22 -2
  100. package/corpus/core/src/sharing/registry.ts +18 -0
  101. package/corpus/core/src/styles/agent-native.css +104 -20
  102. package/corpus/core/src/styles/rich-markdown-editor.css +11 -10
  103. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +10 -10
  104. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +10 -10
  105. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +6 -5
  106. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +9 -9
  107. package/corpus/templates/analytics/app/global.css +4 -0
  108. package/corpus/templates/analytics/app/lib/chart-theme.ts +13 -0
  109. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +22 -24
  110. package/corpus/templates/analytics/changelog/2026-06-30-dashboard-charts-now-use-theme-aware-tooltip-and-grid-colors.md +6 -0
  111. package/corpus/templates/analytics/changelog/2026-06-30-fixed-ask-composer-spacing-so-the-chat-field-has-a-comfortab.md +6 -0
  112. package/corpus/templates/calendar/AGENTS.md +4 -0
  113. package/corpus/templates/calendar/actions/connect-google-calendar.ts +80 -0
  114. package/corpus/templates/calendar/changelog/2026-06-30-calendar-now-gives-the-agent-a-safe-google-connection-link-i.md +6 -0
  115. package/corpus/templates/calendar/server/plugins/agent-chat.ts +4 -0
  116. package/corpus/templates/content/AGENTS.md +9 -2
  117. package/corpus/templates/content/actions/_database-row-batch.ts +230 -0
  118. package/corpus/templates/content/actions/_database-utils.ts +17 -9
  119. package/corpus/templates/content/actions/_notion-action-utils.ts +26 -0
  120. package/corpus/templates/content/actions/connect-notion-status.ts +13 -4
  121. package/corpus/templates/content/actions/create-and-link-notion-page.ts +23 -0
  122. package/corpus/templates/content/actions/delete-database-items.ts +55 -0
  123. package/corpus/templates/content/actions/delete-document.ts +4 -4
  124. package/corpus/templates/content/actions/disconnect-notion.ts +16 -0
  125. package/corpus/templates/content/actions/duplicate-database-item.ts +1 -1
  126. package/corpus/templates/content/actions/duplicate-database-items.ts +191 -0
  127. package/corpus/templates/content/actions/link-notion-page.ts +10 -7
  128. package/corpus/templates/content/actions/list-notion-links.ts +3 -4
  129. package/corpus/templates/content/actions/pull-notion-page.ts +7 -9
  130. package/corpus/templates/content/actions/push-notion-page.ts +7 -9
  131. package/corpus/templates/content/actions/refresh-notion-sync-status.ts +24 -0
  132. package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +23 -0
  133. package/corpus/templates/content/actions/search-notion-pages.ts +67 -0
  134. package/corpus/templates/content/actions/unlink-notion-page.ts +23 -0
  135. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
  136. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +27 -34
  137. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +16 -13
  138. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +10 -10
  139. package/corpus/templates/content/app/components/editor/NotionConflictBanner.tsx +1 -1
  140. package/corpus/templates/content/app/components/editor/NotionSyncBar.tsx +18 -9
  141. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +27 -34
  142. package/corpus/templates/content/app/components/editor/database/navigation-state.ts +10 -4
  143. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +32 -17
  144. package/corpus/templates/content/app/global.css +6 -5
  145. package/corpus/templates/content/app/hooks/use-content-database.ts +35 -0
  146. package/corpus/templates/content/app/hooks/use-notion.ts +108 -99
  147. package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -0
  148. package/corpus/templates/content/package.json +3 -0
  149. package/corpus/templates/content/parity/README.md +69 -0
  150. package/corpus/templates/content/parity/eval-scenarios.ts +118 -0
  151. package/corpus/templates/content/parity/exceptions.allowlist.ts +17 -0
  152. package/corpus/templates/content/parity/matrix.md +28 -0
  153. package/corpus/templates/content/parity/matrix.ts +606 -0
  154. package/corpus/templates/content/parity/matrix.types.ts +42 -0
  155. package/corpus/templates/content/parity/parity-evals.eval.ts +4 -0
  156. package/corpus/templates/content/parity/render-matrix.ts +90 -0
  157. package/corpus/templates/content/parity/scenario-to-eval.ts +57 -0
  158. package/corpus/templates/content/shared/api.ts +11 -0
  159. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +6 -1
  160. package/corpus/templates/design/actions/add-localhost-screens.ts +63 -8
  161. package/corpus/templates/design/actions/apply-motion-edit.ts +12 -46
  162. package/corpus/templates/design/actions/list-design-native-assets.ts +2 -1
  163. package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +49 -1
  164. package/corpus/templates/design/actions/navigate.ts +3 -12
  165. package/corpus/templates/design/actions/open-visual-edit.ts +341 -0
  166. package/corpus/templates/design/actions/view-screen.ts +1 -1
  167. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
  168. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +345 -14
  169. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +71 -91
  170. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +25 -27
  171. package/corpus/templates/design/app/components/design/DeviceFrame.tsx +1 -1
  172. package/corpus/templates/design/app/components/design/DrawOverlay.tsx +2 -2
  173. package/corpus/templates/design/app/components/design/EditPanel.tsx +1111 -570
  174. package/corpus/templates/design/app/components/design/LayersPanel.tsx +162 -32
  175. package/corpus/templates/design/app/components/design/MotionDock.tsx +268 -240
  176. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1038 -150
  177. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -1
  178. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +81 -102
  179. package/corpus/templates/design/app/components/design/StatesPanel.tsx +6 -6
  180. package/corpus/templates/design/app/components/design/TokensPanel.tsx +11 -11
  181. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -7
  182. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1129 -155
  183. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +130 -37
  184. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +24 -11
  185. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +184 -162
  186. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +137 -79
  187. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +13 -13
  188. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +8 -8
  189. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +2 -2
  190. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +4 -4
  191. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +3 -3
  192. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +13 -7
  193. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -11
  194. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +4 -4
  195. package/corpus/templates/design/app/components/design/inspector/index.ts +2 -0
  196. package/corpus/templates/design/app/components/design/types.ts +19 -0
  197. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +61 -78
  198. package/corpus/templates/design/app/components/layout/Header.tsx +0 -1
  199. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -2
  200. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  201. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +5 -4
  202. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
  203. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +2 -2
  204. package/corpus/templates/design/app/global.css +56 -0
  205. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -5
  206. package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -7
  207. package/corpus/templates/design/app/hooks/use-question-flow.ts +3 -2
  208. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +6 -4
  209. package/corpus/templates/design/app/i18n/zh-TW.ts +5 -14
  210. package/corpus/templates/design/app/i18n-data.ts +63 -188
  211. package/corpus/templates/design/app/lib/agent-chat.ts +13 -0
  212. package/corpus/templates/design/app/pages/DesignEditor.tsx +1428 -384
  213. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +9 -5
  214. package/corpus/templates/design/app/pages/DesignSystems.tsx +2 -2
  215. package/corpus/templates/design/app/pages/Index.tsx +49 -26
  216. package/corpus/templates/design/app/pages/NotFound.tsx +25 -8
  217. package/corpus/templates/design/app/pages/VisualEdit.tsx +17 -5
  218. package/corpus/templates/design/app/routes/examples.tsx +1 -7
  219. package/corpus/templates/design/app/routes/templates.tsx +7 -4
  220. package/corpus/templates/design/changelog/2026-06-30-board-shapes-and-auto-layout-controls-are-clearer.md +6 -0
  221. package/corpus/templates/design/changelog/2026-06-30-component-selections-now-use-purple-component-chrome-and-sho.md +6 -0
  222. package/corpus/templates/design/changelog/2026-06-30-constraints-now-stay-tucked-into-a-compact-inspector-preview.md +6 -0
  223. package/corpus/templates/design/changelog/2026-06-30-creating-a-component-now-opens-in-a-compact-inspector-popove.md +6 -0
  224. package/corpus/templates/design/changelog/2026-06-30-design-cards-no-longer-show-legacy-project-type-badges.md +6 -0
  225. package/corpus/templates/design/changelog/2026-06-30-design-chat-now-keeps-new-turns-in-the-visible-design-agent-.md +6 -0
  226. package/corpus/templates/design/changelog/2026-06-30-design-editor-panels-now-keep-their-compact-text-sizing-cons.md +6 -0
  227. package/corpus/templates/design/changelog/2026-06-30-design-no-longer-shows-the-connected-local-code-warning-bann.md +6 -0
  228. package/corpus/templates/design/changelog/2026-06-30-design-now-opens-to-the-files-panel-unless-a-generation-is-a.md +6 -0
  229. package/corpus/templates/design/changelog/2026-06-30-design-opens-with-a-cleaner-empty-canvas-and-loading-preview.md +6 -0
  230. package/corpus/templates/design/changelog/2026-06-30-design-tools-use-simpler-less-decorative-icons.md +6 -0
  231. package/corpus/templates/design/changelog/2026-06-30-dragging-absolute-elements-no-longer-shows-coordinate-labels.md +6 -0
  232. package/corpus/templates/design/changelog/2026-06-30-fixed-all-screens-opening-too-zoomed-in-by-default.md +6 -0
  233. package/corpus/templates/design/changelog/2026-06-30-fixed-the-public-design-assets-sidebar-so-native-components-.md +6 -0
  234. package/corpus/templates/design/changelog/2026-06-30-fixed-the-screen-overview-board-so-empty-board-space-no-long.md +6 -0
  235. package/corpus/templates/design/changelog/2026-06-30-full-view-screens-can-now-scroll-while-remaining-editable.md +6 -0
  236. package/corpus/templates/design/changelog/2026-06-30-inspector-element-headers-show-the-selected-html-tag-and-the.md +6 -0
  237. package/corpus/templates/design/changelog/2026-06-30-inspector-inputs-stay-compact-across-desktop-breakpoints.md +6 -0
  238. package/corpus/templates/design/changelog/2026-06-30-layers-can-be-multi-selected-from-the-canvas-and-edited-toge.md +6 -0
  239. package/corpus/templates/design/changelog/2026-06-30-local-visual-edit-links-can-edit-localhost-frames-without-si.md +6 -0
  240. package/corpus/templates/design/changelog/2026-06-30-localhost-visual-edit-frames-can-now-be-selected-and-edited.md +6 -0
  241. package/corpus/templates/design/changelog/2026-06-30-marquee-selection-now-works-inside-screens-multi-selected-la.md +6 -0
  242. package/corpus/templates/design/changelog/2026-06-30-motion-is-now-available-from-the-persistent-left-rail-and-th.md +6 -0
  243. package/corpus/templates/design/changelog/2026-06-30-motion-timeline-collapse-and-reopen-animations-feel-smoother.md +6 -0
  244. package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +6 -0
  245. package/corpus/templates/design/changelog/2026-06-30-new-board-shapes-now-start-with-neutral-gray-styling.md +6 -0
  246. package/corpus/templates/design/changelog/2026-06-30-new-designs-open-into-a-steadier-loading-state-before-the-ed.md +6 -0
  247. package/corpus/templates/design/changelog/2026-06-30-new-designs-show-a-loading-state-during-handoff-and-keep-edi.md +6 -0
  248. package/corpus/templates/design/changelog/2026-06-30-public-visual-edit-design-links-now-open-directly-instead-of.md +6 -0
  249. package/corpus/templates/design/changelog/2026-06-30-removed-the-confusing-states-section-from-the-design-editor-.md +6 -0
  250. package/corpus/templates/design/changelog/2026-06-30-removed-the-templates-gallery-from-design-navigation.md +6 -0
  251. package/corpus/templates/design/changelog/2026-06-30-share-stays-visible-as-soon-as-editable-designs-load.md +6 -0
  252. package/corpus/templates/design/changelog/2026-06-30-signed-out-save-and-share-controls-use-simpler-labels-and-op.md +6 -0
  253. package/corpus/templates/design/changelog/2026-06-30-text-added-on-the-canvas-now-focuses-cleanly-with-the-right-.md +6 -0
  254. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-is-simpler-and-its-bottom.md +6 -0
  255. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-now-follows-the-current-t.md +6 -0
  256. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-child-layout-controls-o.md +6 -0
  257. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-the-ask-ai-section-abov.md +6 -0
  258. package/corpus/templates/design/changelog/2026-06-30-the-design-review-panel-no-longer-shows-a-separate-inline-au.md +6 -0
  259. package/corpus/templates/design/changelog/2026-06-30-the-empty-designs-page-now-focuses-on-a-single-primary-new-d.md +6 -0
  260. package/corpus/templates/design/changelog/2026-06-30-the-layers-panel-header-stays-as-layers-while-multiple-items.md +6 -0
  261. package/corpus/templates/design/changelog/2026-06-30-the-missing-design-screen-now-uses-a-neutral-back-button.md +6 -0
  262. package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-now-closes-without-squeezing-the-canvas-.md +6 -0
  263. package/corpus/templates/design/changelog/2026-06-30-the-new-design-connect-ai-setup-now-lines-up-with-the-compos.md +6 -0
  264. package/corpus/templates/design/changelog/2026-06-30-the-screen-overview-board-now-blends-into-the-canvas-and-new.md +6 -0
  265. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-drops-now-show-screen-guides.md +6 -0
  266. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-keep-a-transparent-backdrop-and-.md +6 -0
  267. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-select-reliably-from-all-screens.md +6 -0
  268. package/corpus/templates/design/changelog/2026-06-30-visual-edit-can-open-and-refresh-localhost-screens-in-one-au.md +6 -0
  269. package/corpus/templates/design/e2e/helpers.ts +15 -4
  270. package/corpus/templates/design/server/db/index.ts +52 -0
  271. package/corpus/templates/design/server/plugins/agent-chat.ts +5 -0
  272. package/corpus/templates/design/server/plugins/auth.ts +1 -0
  273. package/corpus/templates/design/server/plugins/core-routes.ts +4 -0
  274. package/corpus/templates/design/shared/board-file.ts +380 -5
  275. package/corpus/templates/design/shared/board-objects.ts +2 -2
  276. package/corpus/templates/design/shared/code-layer.ts +50 -6
  277. package/corpus/templates/design/shared/motion-compiler.ts +27 -0
  278. package/corpus/templates/macros/app/components/DailyProgress.tsx +41 -37
  279. package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
  280. package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
  281. package/corpus/templates/macros/app/components/VoiceDictation.tsx +1 -1
  282. package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +1 -1
  283. package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
  284. package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
  285. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -1
  286. package/corpus/templates/macros/app/routes/_index.tsx +5 -5
  287. package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
  288. package/corpus/templates/macros/changelog/2026-06-30-dashboard-loading-and-chart-surfaces-now-use-theme-aware-col.md +6 -0
  289. package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +14 -11
  290. package/corpus/templates/mail/app/global.css +3 -2
  291. package/corpus/templates/mail/changelog/2026-06-30-compose-floating-toolbars-now-use-theme-aware-colors-in-ligh.md +6 -0
  292. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
  293. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -3
  294. package/corpus/templates/slides/app/global.css +10 -0
  295. package/corpus/templates/slides/app/pages/Index.tsx +55 -51
  296. package/corpus/templates/slides/changelog/2026-06-30-deck-thumbnails-collapse-cleanly-to-one-column-when-the-chat.md +6 -0
  297. package/dist/agent/engine/anthropic-engine.d.ts +2 -2
  298. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  299. package/dist/agent/engine/builder-engine.d.ts +2 -2
  300. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  301. package/dist/agent/engine/builtin.js +1 -1
  302. package/dist/agent/engine/builtin.js.map +1 -1
  303. package/dist/agent/engine/output-tokens.js +1 -1
  304. package/dist/agent/engine/output-tokens.js.map +1 -1
  305. package/dist/agent/harness/acp-adapter.d.ts +4 -1
  306. package/dist/agent/harness/acp-adapter.d.ts.map +1 -1
  307. package/dist/agent/harness/acp-adapter.js +19 -2
  308. package/dist/agent/harness/acp-adapter.js.map +1 -1
  309. package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
  310. package/dist/agent/harness/ai-sdk-adapter.js +3 -0
  311. package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
  312. package/dist/agent/harness/translate.d.ts.map +1 -1
  313. package/dist/agent/harness/translate.js +3 -0
  314. package/dist/agent/harness/translate.js.map +1 -1
  315. package/dist/agent/harness/types.d.ts +1 -0
  316. package/dist/agent/harness/types.d.ts.map +1 -1
  317. package/dist/agent/harness/types.js.map +1 -1
  318. package/dist/agent/model-config.d.ts +21 -20
  319. package/dist/agent/model-config.d.ts.map +1 -1
  320. package/dist/agent/model-config.js +31 -13
  321. package/dist/agent/model-config.js.map +1 -1
  322. package/dist/agent/production-agent.d.ts.map +1 -1
  323. package/dist/agent/production-agent.js +85 -10
  324. package/dist/agent/production-agent.js.map +1 -1
  325. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  326. package/dist/agent/thread-data-builder.js +27 -6
  327. package/dist/agent/thread-data-builder.js.map +1 -1
  328. package/dist/agent/tool-call-journal.d.ts +11 -9
  329. package/dist/agent/tool-call-journal.d.ts.map +1 -1
  330. package/dist/agent/tool-call-journal.js +92 -40
  331. package/dist/agent/tool-call-journal.js.map +1 -1
  332. package/dist/agent/types.d.ts +5 -1
  333. package/dist/agent/types.d.ts.map +1 -1
  334. package/dist/agent/types.js.map +1 -1
  335. package/dist/cli/design-connect.d.ts.map +1 -1
  336. package/dist/cli/design-connect.js +84 -0
  337. package/dist/cli/design-connect.js.map +1 -1
  338. package/dist/cli/gateway-helpers.d.ts +4 -0
  339. package/dist/cli/gateway-helpers.d.ts.map +1 -1
  340. package/dist/cli/gateway-helpers.js +9 -0
  341. package/dist/cli/gateway-helpers.js.map +1 -1
  342. package/dist/cli/recap.d.ts.map +1 -1
  343. package/dist/cli/recap.js +0 -2
  344. package/dist/cli/recap.js.map +1 -1
  345. package/dist/cli/skills.d.ts.map +1 -1
  346. package/dist/cli/skills.js +54 -16
  347. package/dist/cli/skills.js.map +1 -1
  348. package/dist/cli/workspace-dev.d.ts.map +1 -1
  349. package/dist/cli/workspace-dev.js +33 -6
  350. package/dist/cli/workspace-dev.js.map +1 -1
  351. package/dist/client/AssistantChat.d.ts.map +1 -1
  352. package/dist/client/AssistantChat.js +72 -26
  353. package/dist/client/AssistantChat.js.map +1 -1
  354. package/dist/client/DefaultSpinner.d.ts.map +1 -1
  355. package/dist/client/DefaultSpinner.js +8 -1
  356. package/dist/client/DefaultSpinner.js.map +1 -1
  357. package/dist/client/chat/message-components.d.ts +7 -1
  358. package/dist/client/chat/message-components.d.ts.map +1 -1
  359. package/dist/client/chat/message-components.js +37 -1
  360. package/dist/client/chat/message-components.js.map +1 -1
  361. package/dist/client/chat/repo-helpers.d.ts +1 -0
  362. package/dist/client/chat/repo-helpers.d.ts.map +1 -1
  363. package/dist/client/chat/repo-helpers.js +59 -0
  364. package/dist/client/chat/repo-helpers.js.map +1 -1
  365. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  366. package/dist/client/chat/run-recovery.js +4 -4
  367. package/dist/client/chat/run-recovery.js.map +1 -1
  368. package/dist/client/components/ApiKeySettings.js +8 -8
  369. package/dist/client/components/ApiKeySettings.js.map +1 -1
  370. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  371. package/dist/client/components/CodeRequiredDialog.js +24 -15
  372. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  373. package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
  374. package/dist/client/components/MissingKeyCard.js +11 -6
  375. package/dist/client/components/MissingKeyCard.js.map +1 -1
  376. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  377. package/dist/client/composer/TiptapComposer.js +4 -3
  378. package/dist/client/composer/TiptapComposer.js.map +1 -1
  379. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  380. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  381. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  382. package/dist/client/guided-questions.d.ts.map +1 -1
  383. package/dist/client/guided-questions.js +6 -6
  384. package/dist/client/guided-questions.js.map +1 -1
  385. package/dist/client/integrations/IntegrationCard.js +1 -1
  386. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  387. package/dist/client/integrations/IntegrationsPanel.js +1 -1
  388. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  389. package/dist/client/onboarding/OnboardingBanner.js +2 -2
  390. package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
  391. package/dist/client/onboarding/OnboardingPanel.js +23 -19
  392. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  393. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  394. package/dist/client/resources/ResourceEditor.js +13 -10
  395. package/dist/client/resources/ResourceEditor.js.map +1 -1
  396. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  397. package/dist/client/resources/ResourcesPanel.js +2 -1
  398. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  399. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  400. package/dist/client/settings/SettingsPanel.js +8 -3
  401. package/dist/client/settings/SettingsPanel.js.map +1 -1
  402. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  403. package/dist/client/settings/useBuilderStatus.js +6 -38
  404. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  405. package/dist/client/useProductionAgent.d.ts +2 -1
  406. package/dist/client/useProductionAgent.d.ts.map +1 -1
  407. package/dist/client/useProductionAgent.js.map +1 -1
  408. package/dist/collab/awareness.d.ts +2 -2
  409. package/dist/collab/awareness.d.ts.map +1 -1
  410. package/dist/collab/routes.d.ts +1 -1
  411. package/dist/deploy/build.js +1 -1
  412. package/dist/deploy/build.js.map +1 -1
  413. package/dist/eval/define-eval.d.ts.map +1 -1
  414. package/dist/eval/define-eval.js +2 -1
  415. package/dist/eval/define-eval.js.map +1 -1
  416. package/dist/eval/report.d.ts.map +1 -1
  417. package/dist/eval/report.js +19 -4
  418. package/dist/eval/report.js.map +1 -1
  419. package/dist/eval/runner.d.ts.map +1 -1
  420. package/dist/eval/runner.js +38 -6
  421. package/dist/eval/runner.js.map +1 -1
  422. package/dist/eval/types.d.ts +11 -0
  423. package/dist/eval/types.d.ts.map +1 -1
  424. package/dist/eval/types.js.map +1 -1
  425. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  426. package/dist/notifications/routes.d.ts +3 -3
  427. package/dist/observability/routes.d.ts +5 -5
  428. package/dist/observability/traces.d.ts.map +1 -1
  429. package/dist/observability/traces.js.map +1 -1
  430. package/dist/onboarding/default-steps.js +1 -1
  431. package/dist/onboarding/default-steps.js.map +1 -1
  432. package/dist/progress/routes.d.ts +1 -1
  433. package/dist/resources/handlers.d.ts +1 -1
  434. package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
  435. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
  436. package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
  437. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  438. package/dist/server/agent-chat-plugin.d.ts +3 -0
  439. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  440. package/dist/server/agent-chat-plugin.js +134 -72
  441. package/dist/server/agent-chat-plugin.js.map +1 -1
  442. package/dist/server/core-routes-plugin.d.ts +3 -0
  443. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  444. package/dist/server/core-routes-plugin.js +4 -1
  445. package/dist/server/core-routes-plugin.js.map +1 -1
  446. package/dist/server/open-route.d.ts +9 -0
  447. package/dist/server/open-route.d.ts.map +1 -1
  448. package/dist/server/open-route.js +48 -38
  449. package/dist/server/open-route.js.map +1 -1
  450. package/dist/shared/reasoning-effort.js +3 -0
  451. package/dist/shared/reasoning-effort.js.map +1 -1
  452. package/dist/sharing/access.d.ts.map +1 -1
  453. package/dist/sharing/access.js +18 -2
  454. package/dist/sharing/access.js.map +1 -1
  455. package/dist/sharing/registry.d.ts +10 -0
  456. package/dist/sharing/registry.d.ts.map +1 -1
  457. package/dist/sharing/registry.js.map +1 -1
  458. package/dist/styles/agent-native.css +104 -20
  459. package/dist/styles/rich-markdown-editor.css +11 -10
  460. package/docs/content/cloneable-saas.mdx +2 -2
  461. package/docs/content/evals.mdx +34 -12
  462. package/docs/content/faq.mdx +1 -1
  463. package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  464. package/docs/content/locales/ar-SA/evals.mdx +7 -0
  465. package/docs/content/locales/ar-SA/faq.mdx +1 -1
  466. package/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  467. package/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  468. package/docs/content/locales/de-DE/evals.mdx +8 -0
  469. package/docs/content/locales/de-DE/faq.mdx +1 -1
  470. package/docs/content/locales/de-DE/template-chat.mdx +1 -1
  471. package/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  472. package/docs/content/locales/es-ES/evals.mdx +8 -0
  473. package/docs/content/locales/es-ES/faq.mdx +1 -1
  474. package/docs/content/locales/es-ES/template-chat.mdx +1 -1
  475. package/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  476. package/docs/content/locales/fr-FR/evals.mdx +8 -0
  477. package/docs/content/locales/fr-FR/faq.mdx +1 -1
  478. package/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  479. package/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  480. package/docs/content/locales/hi-IN/evals.mdx +8 -0
  481. package/docs/content/locales/hi-IN/faq.mdx +1 -1
  482. package/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  483. package/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  484. package/docs/content/locales/ja-JP/evals.mdx +7 -0
  485. package/docs/content/locales/ja-JP/faq.mdx +1 -1
  486. package/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  487. package/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  488. package/docs/content/locales/ko-KR/evals.mdx +7 -0
  489. package/docs/content/locales/ko-KR/faq.mdx +1 -1
  490. package/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  491. package/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  492. package/docs/content/locales/pt-BR/evals.mdx +8 -0
  493. package/docs/content/locales/pt-BR/faq.mdx +1 -1
  494. package/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  495. package/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  496. package/docs/content/locales/zh-CN/evals.mdx +7 -0
  497. package/docs/content/locales/zh-CN/faq.mdx +1 -1
  498. package/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  499. package/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  500. package/docs/content/locales/zh-TW/evals.mdx +7 -0
  501. package/docs/content/locales/zh-TW/faq.mdx +1 -1
  502. package/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  503. package/docs/content/template-chat.mdx +1 -1
  504. package/package.json +1 -1
  505. package/corpus/templates/content/server/routes/api/notion/disconnect.post.ts +0 -12
  506. package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +0 -157
  507. package/corpus/templates/design/app/lib/design-templates.ts +0 -1305
  508. package/corpus/templates/design/app/pages/Templates.tsx +0 -279
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceEditor.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport { Markdown } from \"tiptap-markdown\";\n\nimport {\n type ParsedFrontmatter,\n getRemoteAgentIdFromPath,\n getFrontmatterValue,\n isCustomAgentPath,\n isRemoteAgentPath,\n isSkillPath,\n parseFrontmatter,\n serializeFrontmatter,\n} from \"../../resources/metadata.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { cn } from \"../utils.js\";\nimport type { Resource } from \"./use-resources.js\";\n\nexport interface ResourceEditorProps {\n resource: Resource;\n onSave: (content: string) => void;\n /** Controlled view mode — if provided, the editor won't manage its own view state */\n view?: \"visual\" | \"code\";\n onViewChange?: (v: \"visual\" | \"code\") => void;\n /** When true, the editor's internal toolbar row is hidden */\n hideToolbar?: boolean;\n /** When true, content can be viewed and selected but not modified */\n readOnly?: boolean;\n}\n\nconst CONTROL_STYLE = { fontSize: 12, lineHeight: 1 } as const;\n\nconst VIEW_PREF_KEY = \"resource-editor-view\";\n\nfunction getViewPref(): \"visual\" | \"code\" {\n try {\n const v = localStorage.getItem(VIEW_PREF_KEY);\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n}\n\nfunction setViewPref(v: \"visual\" | \"code\") {\n try {\n localStorage.setItem(VIEW_PREF_KEY, v);\n } catch {}\n}\n\nconst FM_INPUT_STYLE: React.CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"inherit\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n width: \"100%\",\n padding: 0,\n};\n\nfunction FrontmatterBar({\n resourcePath,\n frontmatter,\n onChange,\n readOnly,\n}: {\n resourcePath: string;\n frontmatter: ParsedFrontmatter;\n onChange: (updated: ParsedFrontmatter) => void;\n readOnly?: boolean;\n}) {\n const getField = (key: string) => getFrontmatterValue(frontmatter, key) ?? \"\";\n\n const updateField = (key: string, value: string) => {\n if (readOnly) return;\n const exists = frontmatter.fields.some((f) => f.key === key);\n const newFields = exists\n ? frontmatter.fields.map((f) => (f.key === key ? { ...f, value } : f))\n : [...frontmatter.fields, { key, value }];\n const updated: ParsedFrontmatter = {\n ...frontmatter,\n raw: serializeFrontmatter(newFields),\n fields: newFields,\n };\n onChange(updated);\n };\n\n const name = getField(\"name\");\n const description = getField(\"description\");\n const isUserInvocable = getField(\"user-invocable\") === \"true\";\n const model = getField(\"model\") || \"inherit\";\n const tools = getField(\"tools\") || \"inherit\";\n const isCustomAgent = isCustomAgentPath(resourcePath);\n const isSkill = isSkillPath(resourcePath);\n\n return (\n <div\n style={{\n padding: \"8px 12px\",\n marginBottom: 8,\n borderRadius: 6,\n background: \"hsl(var(--muted) / 0.5)\",\n border: \"1px solid hsl(var(--border) / 0.5)\",\n fontSize: 12,\n lineHeight: 1.5,\n color: \"hsl(var(--muted-foreground))\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <input\n value={name}\n onChange={(e) => updateField(\"name\", e.target.value)}\n readOnly={readOnly}\n placeholder={isCustomAgent ? \"Agent name\" : \"Skill name\"}\n style={{\n ...FM_INPUT_STYLE,\n fontWeight: 600,\n color: \"hsl(var(--foreground))\",\n fontSize: 13,\n flex: 1,\n }}\n />\n {isSkill ? (\n <label\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n fontSize: 10,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n padding: \"1px 5px\",\n borderRadius: 3,\n background: isUserInvocable\n ? \"hsl(var(--primary) / 0.15)\"\n : \"transparent\",\n color: isUserInvocable\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\",\n border: isUserInvocable\n ? \"none\"\n : \"1px dashed hsl(var(--border))\",\n fontWeight: 500,\n }}\n >\n <input\n type=\"checkbox\"\n checked={isUserInvocable}\n disabled={readOnly}\n onChange={(e) =>\n updateField(\n \"user-invocable\",\n e.target.checked ? \"true\" : \"false\",\n )\n }\n style={{ display: \"none\" }}\n />\n /{name || \"command\"}\n </label>\n ) : null}\n {isCustomAgent ? (\n <select\n value={model}\n disabled={readOnly}\n onChange={(e) => updateField(\"model\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Default model</option>\n <option value=\"claude-fable-5\">Claude Fable 5</option>\n <option value=\"claude-opus-4-8\">Claude Opus 4.8</option>\n <option value=\"claude-sonnet-4-6\">Claude Sonnet 4.6</option>\n <option value=\"claude-haiku-4-5-20251001\">Claude Haiku 4.5</option>\n </select>\n ) : null}\n </div>\n <input\n value={description}\n readOnly={readOnly}\n onChange={(e) => updateField(\"description\", e.target.value)}\n placeholder={\n isCustomAgent\n ? \"Description — what this agent should handle\"\n : \"Description — what this skill does\"\n }\n style={{\n ...FM_INPUT_STYLE,\n marginTop: 2,\n opacity: 0.8,\n color: \"hsl(var(--muted-foreground))\",\n }}\n />\n {isCustomAgent ? (\n <div\n style={{\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n alignItems: \"center\",\n }}\n >\n <label\n style={{\n fontSize: 10,\n color: \"hsl(var(--muted-foreground))\",\n minWidth: 28,\n }}\n >\n Tools\n </label>\n <select\n value={tools}\n disabled={readOnly}\n onChange={(e) => updateField(\"tools\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Inherit</option>\n <option value=\"allowlist\">Allowlist later</option>\n <option value=\"denylist\">Denylist later</option>\n </select>\n </div>\n ) : null}\n </div>\n );\n}\n\n// --- Slash Command Menu ---\n\ninterface CommandItem {\n title: string;\n description: string;\n icon: string;\n action: (editor: any) => void;\n}\n\nconst slashCommands: CommandItem[] = [\n {\n title: \"Text\",\n description: \"Plain text\",\n icon: \"T\",\n action: (editor) => editor.chain().focus().setParagraph().run(),\n },\n {\n title: \"Heading 1\",\n description: \"Large heading\",\n icon: \"H1\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 1 }).run(),\n },\n {\n title: \"Heading 2\",\n description: \"Medium heading\",\n icon: \"H2\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 2 }).run(),\n },\n {\n title: \"Heading 3\",\n description: \"Small heading\",\n icon: \"H3\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 3 }).run(),\n },\n {\n title: \"Bullet List\",\n description: \"Unordered list\",\n icon: \"•\",\n action: (editor) => editor.chain().focus().toggleBulletList().run(),\n },\n {\n title: \"Numbered List\",\n description: \"Ordered list\",\n icon: \"1.\",\n action: (editor) => editor.chain().focus().toggleOrderedList().run(),\n },\n {\n title: \"Code Block\",\n description: \"Code snippet\",\n icon: \"<>\",\n action: (editor) => editor.chain().focus().toggleCodeBlock().run(),\n },\n {\n title: \"Quote\",\n description: \"Block quote\",\n icon: '\"',\n action: (editor) => editor.chain().focus().toggleBlockquote().run(),\n },\n {\n title: \"Divider\",\n description: \"Horizontal rule\",\n icon: \"—\",\n action: (editor) => editor.chain().focus().setHorizontalRule().run(),\n },\n];\n\nfunction SlashMenu({ editor }: { editor: any }) {\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n flipUp: boolean;\n } | null>(null);\n const slashPosRef = useRef<number | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const filteredCommands = useMemo(\n () =>\n slashCommands.filter(\n (cmd) =>\n cmd.title.toLowerCase().includes(query.toLowerCase()) ||\n cmd.description.toLowerCase().includes(query.toLowerCase()),\n ),\n [query],\n );\n\n const executeCommand = useCallback(\n (cmd: CommandItem) => {\n if (slashPosRef.current !== null) {\n const { from } = editor.state.selection;\n editor\n .chain()\n .focus()\n .deleteRange({ from: slashPosRef.current, to: from })\n .run();\n }\n cmd.action(editor);\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n },\n [editor],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((i) => (i + 1) % filteredCommands.length);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex(\n (i) => (i - 1 + filteredCommands.length) % filteredCommands.length,\n );\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n executeCommand(filteredCommands[selectedIndex]);\n }\n } else if (e.key === \"Escape\") {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown, true);\n return () => document.removeEventListener(\"keydown\", handleKeyDown, true);\n }, [isOpen, selectedIndex, filteredCommands, executeCommand, editor]);\n\n useEffect(() => {\n if (!editor) return;\n\n const handleTransaction = () => {\n const { state } = editor;\n const { from } = state.selection;\n const textBefore = state.doc.textBetween(\n Math.max(0, from - 20),\n from,\n \"\\n\",\n );\n\n const slashMatch = textBefore.match(/\\/([a-zA-Z0-9]*)$/);\n\n if (slashMatch) {\n const slashStart = from - slashMatch[0].length;\n slashPosRef.current = slashStart;\n setQuery(slashMatch[1]);\n setSelectedIndex(0);\n\n const coords = editor.view.coordsAtPos(from);\n // Estimate menu height (~320px max) and check if it fits below\n const menuHeight = 320;\n const spaceBelow = window.innerHeight - coords.bottom;\n const flipUp = spaceBelow < menuHeight && coords.top > menuHeight;\n\n setPosition({\n top: flipUp ? coords.top : coords.bottom + 4,\n left: Math.min(coords.left, window.innerWidth - 240),\n flipUp,\n });\n setIsOpen(true);\n } else {\n if (isOpen) {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n }\n };\n\n editor.on(\"transaction\", handleTransaction);\n return () => {\n editor.off(\"transaction\", handleTransaction);\n };\n }, [editor, isOpen]);\n\n if (!isOpen || !position || filteredCommands.length === 0) return null;\n\n return (\n <div\n ref={menuRef}\n style={{\n position: \"fixed\",\n ...(position.flipUp\n ? { bottom: window.innerHeight - position.top + 4 }\n : { top: position.top }),\n left: position.left,\n zIndex: 9999,\n }}\n className=\"re-slash-menu\"\n >\n <div className=\"py-1\">\n <div\n style={{\n padding: \"4px 10px\",\n fontSize: 10,\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.06em\",\n opacity: 0.5,\n }}\n >\n Blocks\n </div>\n {filteredCommands.map((cmd, i) => (\n <button\n key={cmd.title}\n onClick={() => executeCommand(cmd)}\n onMouseEnter={() => setSelectedIndex(i)}\n className={cn(\n \"re-slash-item\",\n i === selectedIndex && \"re-slash-item--active\",\n )}\n >\n <span className=\"re-slash-icon\">{cmd.icon}</span>\n <span>\n <span className=\"re-slash-title\">{cmd.title}</span>\n <span className=\"re-slash-desc\">{cmd.description}</span>\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n// --- Inline Bubble Toolbar ---\n\nfunction InlineBubbleToolbar({ editor }: { editor: any }) {\n const [visible, setVisible] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const toolbarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!editor) return;\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) {\n setVisible(false);\n return;\n }\n const range = domSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width === 0) {\n setVisible(false);\n return;\n }\n // Use fixed positioning with viewport coordinates\n setCoords({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n setVisible(true);\n };\n editor.on(\"selectionUpdate\", update);\n const onBlur = () => {\n // Delay so clicks on toolbar buttons register before hiding\n setTimeout(() => {\n if (!editor.isFocused) setVisible(false);\n }, 150);\n };\n editor.on(\"blur\", onBlur);\n return () => {\n editor.off(\"selectionUpdate\", update);\n editor.off(\"blur\", onBlur);\n };\n }, [editor]);\n\n const handleSetLink = () => {\n if (linkUrl.trim()) {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: linkUrl.trim() })\n .run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setShowLinkInput(false);\n setLinkUrl(\"\");\n };\n\n const toggleLink = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const previousUrl = editor.getAttributes(\"link\").href || \"\";\n setLinkUrl(previousUrl);\n setShowLinkInput(true);\n };\n\n const items = [\n {\n label: \"B\",\n title: \"Bold\",\n action: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive(\"bold\"),\n style: { fontWeight: 700 } as React.CSSProperties,\n },\n {\n label: \"I\",\n title: \"Italic\",\n action: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive(\"italic\"),\n style: { fontStyle: \"italic\" } as React.CSSProperties,\n },\n {\n label: \"S\",\n title: \"Strikethrough\",\n action: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive(\"strike\"),\n style: { textDecoration: \"line-through\" } as React.CSSProperties,\n },\n {\n label: \"<>\",\n title: \"Code\",\n action: () => editor.chain().focus().toggleCode().run(),\n isActive: () => editor.isActive(\"code\"),\n style: { fontFamily: \"monospace\", fontSize: 11 } as React.CSSProperties,\n },\n { type: \"divider\" as const },\n {\n label: \"H1\",\n title: \"Heading 1\",\n action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 1 }),\n },\n {\n label: \"H2\",\n title: \"Heading 2\",\n action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 2 }),\n },\n {\n label: \"H3\",\n title: \"Heading 3\",\n action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 3 }),\n },\n { type: \"divider\" as const },\n {\n label: \"Link\",\n title: \"Link\",\n action: toggleLink,\n isActive: () => editor.isActive(\"link\"),\n },\n ];\n\n if (!visible) return null;\n\n return (\n <div\n ref={toolbarRef}\n className=\"re-bubble-toolbar\"\n onMouseDown={(e) => e.preventDefault()}\n style={{\n position: \"fixed\",\n top: coords.top,\n left: coords.left,\n transform: \"translate(-50%, -100%)\",\n zIndex: 9999,\n }}\n >\n {showLinkInput ? (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: 4 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n <input\n autoFocus\n type=\"url\"\n placeholder=\"Paste link...\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSetLink();\n if (e.key === \"Escape\") {\n setShowLinkInput(false);\n setLinkUrl(\"\");\n }\n }}\n style={{\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"white\",\n fontSize: 12,\n width: 160,\n padding: \"2px 4px\",\n }}\n />\n <button\n onClick={handleSetLink}\n style={{\n fontSize: 11,\n color: \"#60a5fa\",\n padding: \"2px 6px\",\n fontWeight: 500,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n ) : (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 2 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n {items.map((item, i) => {\n if (\"type\" in item && item.type === \"divider\") {\n return (\n <div\n key={`d-${i}`}\n style={{\n width: 1,\n height: 16,\n background: \"rgba(255,255,255,0.2)\",\n margin: \"0 2px\",\n }}\n />\n );\n }\n const { label, title, action, isActive, style } = item as {\n label: string;\n title: string;\n action: () => void;\n isActive: () => boolean;\n style?: React.CSSProperties;\n };\n return (\n <Tooltip key={title}>\n <TooltipTrigger asChild>\n <button\n onClick={action}\n className={cn(\n \"re-bubble-btn\",\n isActive() && \"re-bubble-btn--active\",\n )}\n style={style}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipContent>{title}</TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// --- Visual Markdown Editor ---\n\n// --- Syntax-highlighted code editor (textarea + overlay) ---\n\nfunction highlightJson(text: string): string {\n // Escape HTML first\n const esc = text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n // Tokenize JSON with regex\n return esc.replace(\n /(\"(?:\\\\.|[^\"\\\\])*\")\\s*:|(\"(?:\\\\.|[^\"\\\\])*\")|((?:-?\\d+)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g,\n (match, key, str, num, lit) => {\n if (key) return `<span class=\"sh-key\">${key}</span>:`;\n if (str) return `<span class=\"sh-str\">${str}</span>`;\n if (num) return `<span class=\"sh-num\">${num}</span>`;\n if (lit) return `<span class=\"sh-lit\">${lit}</span>`;\n return match;\n },\n );\n}\n\nconst shStyles = `\n.sh-key { color: #7dd3fc; }\n.sh-str { color: #86efac; }\n.sh-num { color: #fca5a5; }\n.sh-lit { color: #c4b5fd; }\n`;\n\nfunction SyntaxHighlightEditor({\n value,\n onChange,\n language: _language,\n readOnly,\n}: {\n value: string;\n onChange: (v: string) => void;\n language: \"json\";\n readOnly?: boolean;\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const preRef = useRef<HTMLPreElement>(null);\n\n const highlighted = useMemo(() => highlightJson(value), [value]);\n\n const syncScroll = useCallback(() => {\n if (textareaRef.current && preRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n }, []);\n\n const monoFont =\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace';\n const sharedStyle: React.CSSProperties = {\n fontFamily: monoFont,\n fontSize: 13,\n lineHeight: 1.6,\n padding: 12,\n margin: 0,\n border: \"none\",\n whiteSpace: \"pre\",\n wordWrap: \"normal\",\n overflowWrap: \"normal\",\n tabSize: 2,\n };\n\n return (\n <>\n <style>{shStyles}</style>\n <div\n className=\"flex-1 min-h-0\"\n style={{ position: \"relative\", overflow: \"hidden\" }}\n >\n <pre\n ref={preRef}\n aria-hidden\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n overflow: \"auto\",\n pointerEvents: \"none\",\n color: \"hsl(var(--muted-foreground))\",\n background: \"transparent\",\n }}\n dangerouslySetInnerHTML={{ __html: highlighted + \"\\n\" }}\n />\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => {\n if (!readOnly) onChange(e.target.value);\n }}\n onScroll={syncScroll}\n readOnly={readOnly}\n spellCheck={false}\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n resize: \"none\",\n background: \"transparent\",\n color: \"transparent\",\n caretColor: \"hsl(var(--foreground))\",\n outline: \"none\",\n WebkitTextFillColor: \"transparent\",\n }}\n />\n </div>\n </>\n );\n}\n\nfunction VisualMarkdownEditor({\n content,\n onChange,\n resourcePath,\n readOnly,\n}: {\n content: string;\n onChange: (md: string) => void;\n resourcePath: string;\n readOnly?: boolean;\n}) {\n const isSettingContent = useRef(false);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Parse frontmatter — strip it from tiptap content, re-prepend on save\n const parsed = useMemo(() => parseFrontmatter(content), [content]);\n const frontmatterRef = useRef(parsed);\n frontmatterRef.current = parsed;\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n codeBlock: {},\n link: false,\n dropcursor: { color: \"hsl(var(--ring))\", width: 2 },\n }),\n Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === \"heading\") {\n const level = node.attrs.level;\n if (level === 1) return \"Heading 1\";\n if (level === 2) return \"Heading 2\";\n return \"Heading 3\";\n }\n return \"Type '/' for commands...\";\n },\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n }),\n Link.configure({\n openOnClick: false,\n HTMLAttributes: { class: \"re-link\" },\n }),\n Markdown.configure({\n html: true,\n transformPastedText: true,\n transformCopiedText: true,\n }),\n ],\n content: parsed?.body ?? content,\n editable: !readOnly,\n editorProps: {\n attributes: {\n class: \"re-prose\",\n },\n },\n onUpdate: ({ editor }) => {\n if (readOnly) return;\n if (isSettingContent.current) return;\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n // Re-prepend frontmatter if it existed\n const fm = frontmatterRef.current;\n const full = fm ? fm.raw + md : md;\n onChangeRef.current(full);\n } catch (err) {\n console.error(\"Markdown serialization error:\", err);\n }\n },\n });\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const currentMd = (editor.storage as any).markdown.getMarkdown();\n if (currentMd !== (parsed?.body ?? content)) {\n if (editor.isFocused) return;\n isSettingContent.current = true;\n editor.commands.setContent(parsed?.body ?? content);\n isSettingContent.current = false;\n }\n }, [content, editor, parsed]);\n\n useEffect(() => {\n return () => {\n editor?.destroy();\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const handleWrapperClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click was on the wrapper (empty area), not on editor content, focus at end\n const target = e.target as HTMLElement;\n if (\n target.classList.contains(\"re-editor-clickable\") ||\n target.classList.contains(\"re-editor-wrapper\")\n ) {\n editor.chain().focus(\"end\").run();\n }\n };\n\n return (\n <div\n className=\"re-editor-wrapper re-editor-clickable\"\n onClick={handleWrapperClick}\n style={{\n position: \"relative\",\n minHeight: \"100%\",\n cursor: readOnly ? \"default\" : \"text\",\n }}\n >\n {parsed && (\n <FrontmatterBar\n resourcePath={resourcePath}\n frontmatter={parsed}\n readOnly={readOnly}\n onChange={(updated) => {\n if (readOnly) return;\n frontmatterRef.current = updated;\n // Get current body and combine with updated frontmatter\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n onChangeRef.current(updated.raw + md);\n } catch {\n // fallback\n }\n }}\n />\n )}\n {!readOnly && <InlineBubbleToolbar editor={editor} />}\n {!readOnly && <SlashMenu editor={editor} />}\n <EditorContent editor={editor} />\n </div>\n );\n}\n\n// --- Main ResourceEditor ---\n\ninterface RemoteAgentFormValue {\n id?: string;\n name: string;\n description: string;\n url: string;\n color: string;\n}\n\nfunction parseRemoteAgentContent(\n content: string,\n path: string,\n): RemoteAgentFormValue {\n const fallbackId = getRemoteAgentIdFromPath(path);\n try {\n const data = JSON.parse(content || \"{}\");\n return {\n id: data.id || fallbackId,\n name: data.name ?? \"\",\n description: data.description ?? \"\",\n url: data.url ?? \"\",\n color: data.color ?? \"#6B7280\",\n };\n } catch {\n return {\n id: fallbackId,\n name: \"\",\n description: \"\",\n url: \"\",\n color: \"#6B7280\",\n };\n }\n}\n\nfunction serializeRemoteAgent(value: RemoteAgentFormValue): string {\n return (\n JSON.stringify(\n {\n id: value.id,\n name: value.name,\n description: value.description || undefined,\n url: value.url,\n color: value.color,\n },\n null,\n 2,\n ) + \"\\n\"\n );\n}\n\nfunction RemoteAgentFormEditor({\n resource,\n onChange,\n readOnly,\n}: {\n resource: Resource;\n onChange: (content: string) => void;\n readOnly?: boolean;\n}) {\n const [value, setValue] = useState<RemoteAgentFormValue>(() =>\n parseRemoteAgentContent(resource.content, resource.path),\n );\n const prevIdRef = useRef(resource.id);\n\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setValue(parseRemoteAgentContent(resource.content, resource.path));\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, resource.path]);\n\n const update = (patch: Partial<RemoteAgentFormValue>) => {\n if (readOnly) return;\n const next = { ...value, ...patch };\n setValue(next);\n onChange(serializeRemoteAgent(next));\n };\n\n const inputClass =\n \"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\";\n const labelClass = \"block text-[11px] font-medium text-muted-foreground mb-1\";\n\n return (\n <div className=\"flex flex-1 min-h-0 flex-col overflow-y-auto p-4\">\n <div className=\"max-w-md space-y-3\">\n <p className=\"text-[11px] text-muted-foreground/70 leading-snug\">\n Connected remote agent over the A2A protocol. @-mention it in chat to\n delegate tasks.\n </p>\n <div>\n <label className={labelClass}>Name</label>\n <input\n className={inputClass}\n value={value.name}\n readOnly={readOnly}\n onChange={(e) => update({ name: e.target.value })}\n placeholder=\"Analytics\"\n />\n </div>\n <div>\n <label className={labelClass}>URL</label>\n <input\n className={inputClass}\n value={value.url}\n readOnly={readOnly}\n onChange={(e) => update({ url: e.target.value })}\n placeholder=\"https://analytics.example.com\"\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground/50\">\n A2A endpoint. The agent card is served at{\" \"}\n <code>/.well-known/agent-card.json</code>.\n </p>\n </div>\n <div>\n <label className={labelClass}>Description</label>\n <textarea\n className={cn(inputClass, \"resize-y\")}\n rows={3}\n value={value.description}\n readOnly={readOnly}\n onChange={(e) => update({ description: e.target.value })}\n placeholder=\"What this agent is good at — helps the main agent decide when to delegate.\"\n />\n </div>\n <div>\n <label className={labelClass}>Color</label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value.color}\n disabled={readOnly}\n onChange={(e) => update({ color: e.target.value })}\n className=\"h-8 w-10 cursor-pointer rounded border border-border bg-transparent\"\n />\n <input\n className={cn(inputClass, \"flex-1\")}\n value={value.color}\n readOnly={readOnly}\n onChange={(e) => update({ color: e.target.value })}\n placeholder=\"#6B7280\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function ResourceEditor({\n resource,\n onSave,\n view: controlledView,\n onViewChange,\n hideToolbar,\n readOnly,\n}: ResourceEditorProps) {\n const [content, setContent] = useState(resource.content);\n const [internalView, setInternalView] = useState<\"visual\" | \"code\">(\n getViewPref,\n );\n const view = controlledView ?? internalView;\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const prevIdRef = useRef(resource.id);\n\n // Reset content when resource changes\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setContent(resource.content);\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content]);\n\n const handleChange = useCallback(\n (newContent: string) => {\n if (readOnly) return;\n setContent(newContent);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n onSave(newContent);\n }, 1000);\n },\n [onSave, readOnly],\n );\n\n const switchView = useCallback(\n (v: \"visual\" | \"code\") => {\n setInternalView(v);\n setViewPref(v);\n onViewChange?.(v);\n },\n [onViewChange],\n );\n\n // Cleanup debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const isMarkdown =\n resource.mimeType === \"text/markdown\" || resource.path.endsWith(\".md\");\n const isImage = resource.mimeType.startsWith(\"image/\");\n const isRemoteAgent = isRemoteAgentPath(resource.path);\n\n // Remote-agent manifest → form editor\n if (isRemoteAgent) {\n return (\n <div className=\"flex h-full flex-col\">\n <RemoteAgentFormEditor\n resource={resource}\n onChange={handleChange}\n readOnly={readOnly}\n />\n </div>\n );\n }\n\n // Image preview\n if (isImage) {\n return (\n <div className=\"flex h-full flex-col\">\n <div className=\"flex flex-1 items-center justify-center overflow-auto p-4\">\n <img\n src={agentNativePath(`/_agent-native/resources/${resource.id}?raw`)}\n alt={resource.path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n );\n }\n\n // Markdown files get visual/code toggle\n if (isMarkdown) {\n return (\n <div className=\"flex h-full flex-col\">\n <style>{editorStyles}</style>\n {!hideToolbar && (\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => switchView(\"visual\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Visual\n </button>\n <button\n onClick={() => switchView(\"code\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Code\n </button>\n </div>\n </div>\n )}\n {view === \"visual\" ? (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3\"\n key={resource.id + \"-visual\"}\n >\n <VisualMarkdownEditor\n content={content}\n onChange={handleChange}\n resourcePath={resource.path}\n readOnly={readOnly}\n />\n </div>\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n readOnly={readOnly}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n }\n\n // Non-markdown text files\n const isJson =\n resource.mimeType === \"application/json\" || resource.path.endsWith(\".json\");\n\n return (\n <div className=\"flex h-full flex-col\">\n {isJson ? (\n <SyntaxHighlightEditor\n value={content}\n onChange={handleChange}\n language=\"json\"\n readOnly={readOnly}\n />\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n readOnly={readOnly}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n}\n\n// --- Scoped editor styles (injected inline so no external CSS needed) ---\n\nconst editorStyles = `\n/* Prose styling for the visual editor */\n.re-prose {\n outline: none;\n color: hsl(var(--foreground));\n line-height: 1.65;\n font-size: 13px;\n min-height: 100%;\n}\n.re-prose > *:first-child { margin-top: 0; }\n\n.re-prose h1 {\n font-size: 1.5em;\n font-weight: 700;\n margin: 1em 0 0.25em;\n line-height: 1.25;\n}\n.re-prose h2 {\n font-size: 1.25em;\n font-weight: 600;\n margin: 0.8em 0 0.2em;\n line-height: 1.3;\n}\n.re-prose h3 {\n font-size: 1.1em;\n font-weight: 600;\n margin: 0.6em 0 0.15em;\n line-height: 1.35;\n}\n.re-prose p {\n margin: 0.35em 0;\n min-height: 1.65em;\n}\n.re-prose ul {\n list-style-type: disc;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose ol {\n list-style-type: decimal;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose li { margin: 0.05em 0; }\n.re-prose li p { margin: 0; }\n\n.re-prose blockquote {\n border-left: 2px solid hsl(var(--border));\n padding-left: 0.8em;\n margin: 0.3em 0;\n color: hsl(var(--muted-foreground));\n}\n.re-prose code {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 0.88em;\n background: hsl(var(--muted));\n padding: 0.1em 0.3em;\n border-radius: 3px;\n}\n.re-prose pre {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 12px;\n background: hsl(var(--muted));\n border-radius: 4px;\n padding: 0.7em 0.9em;\n margin: 0.3em 0;\n overflow-x: auto;\n line-height: 1.5;\n}\n.re-prose pre code {\n background: none;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n.re-prose hr {\n border: none;\n border-top: 1px solid hsl(var(--border));\n margin: 1em 0;\n}\n.re-prose strong { font-weight: 600; }\n.re-prose em { font-style: italic; }\n.re-prose s { text-decoration: line-through; }\n\n.re-link {\n color: hsl(var(--foreground));\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: hsl(var(--muted-foreground));\n cursor: pointer;\n}\n.re-link:hover {\n text-decoration-color: hsl(var(--foreground));\n}\n\n/* Placeholder */\n.re-prose p.is-editor-empty:first-child::before,\n.re-prose p.is-empty::before,\n.re-prose h1.is-empty::before,\n.re-prose h2.is-empty::before,\n.re-prose h3.is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: hsl(var(--muted-foreground));\n opacity: 0.5;\n pointer-events: none;\n height: 0;\n}\n\n/* Selection */\n.re-prose ::selection {\n background: hsl(210 100% 52% / 0.2);\n}\n\n/* Bubble toolbar */\n.re-bubble-toolbar {\n display: flex;\n align-items: center;\n background: hsl(0 0% 15%);\n border-radius: 6px;\n padding: 3px;\n box-shadow: 0 4px 16px rgb(0 0 0 / 0.25), 0 0 0 1px rgb(255 255 255 / 0.06);\n}\n.re-bubble-btn {\n padding: 3px 6px;\n border-radius: 4px;\n font-size: 12px;\n color: rgba(255,255,255,0.75);\n background: none;\n border: none;\n cursor: pointer;\n line-height: 1;\n}\n.re-bubble-btn:hover {\n background: rgba(255,255,255,0.12);\n color: white;\n}\n.re-bubble-btn--active {\n background: rgba(255,255,255,0.18);\n color: white;\n}\n\n/* Slash command menu */\n.re-slash-menu {\n background: hsl(var(--popover));\n border: 1px solid hsl(var(--border));\n border-radius: 6px;\n box-shadow: 0 4px 20px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.04);\n min-width: 220px;\n max-height: 320px;\n overflow-y: auto;\n color: hsl(var(--foreground));\n}\n.re-slash-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n color: hsl(var(--foreground));\n font-size: 13px;\n}\n.re-slash-item:hover,\n.re-slash-item--active {\n background: hsl(var(--accent));\n}\n.re-slash-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid hsl(var(--border));\n background: hsl(var(--background));\n font-size: 12px;\n font-weight: 600;\n color: hsl(var(--muted-foreground));\n flex-shrink: 0;\n}\n.re-slash-title {\n display: block;\n font-weight: 500;\n font-size: 13px;\n}\n.re-slash-desc {\n display: block;\n font-size: 11px;\n color: hsl(var(--muted-foreground));\n}\n`;\n"]}
1
+ {"version":3,"file":"ResourceEditor.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport { Markdown } from \"tiptap-markdown\";\n\nimport {\n CLAUDE_SONNET_MODEL_ID,\n CLAUDE_SONNET_MODEL_LABEL,\n} from \"../../agent/model-config.js\";\nimport {\n type ParsedFrontmatter,\n getRemoteAgentIdFromPath,\n getFrontmatterValue,\n isCustomAgentPath,\n isRemoteAgentPath,\n isSkillPath,\n parseFrontmatter,\n serializeFrontmatter,\n} from \"../../resources/metadata.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport { cn } from \"../utils.js\";\nimport type { Resource } from \"./use-resources.js\";\n\nexport interface ResourceEditorProps {\n resource: Resource;\n onSave: (content: string) => void;\n /** Controlled view mode — if provided, the editor won't manage its own view state */\n view?: \"visual\" | \"code\";\n onViewChange?: (v: \"visual\" | \"code\") => void;\n /** When true, the editor's internal toolbar row is hidden */\n hideToolbar?: boolean;\n /** When true, content can be viewed and selected but not modified */\n readOnly?: boolean;\n}\n\nconst CONTROL_STYLE = { fontSize: 12, lineHeight: 1 } as const;\n\nconst VIEW_PREF_KEY = \"resource-editor-view\";\n\nfunction getViewPref(): \"visual\" | \"code\" {\n try {\n const v = localStorage.getItem(VIEW_PREF_KEY);\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n}\n\nfunction setViewPref(v: \"visual\" | \"code\") {\n try {\n localStorage.setItem(VIEW_PREF_KEY, v);\n } catch {}\n}\n\nconst FM_INPUT_STYLE: React.CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"inherit\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n width: \"100%\",\n padding: 0,\n};\n\nfunction FrontmatterBar({\n resourcePath,\n frontmatter,\n onChange,\n readOnly,\n}: {\n resourcePath: string;\n frontmatter: ParsedFrontmatter;\n onChange: (updated: ParsedFrontmatter) => void;\n readOnly?: boolean;\n}) {\n const getField = (key: string) => getFrontmatterValue(frontmatter, key) ?? \"\";\n\n const updateField = (key: string, value: string) => {\n if (readOnly) return;\n const exists = frontmatter.fields.some((f) => f.key === key);\n const newFields = exists\n ? frontmatter.fields.map((f) => (f.key === key ? { ...f, value } : f))\n : [...frontmatter.fields, { key, value }];\n const updated: ParsedFrontmatter = {\n ...frontmatter,\n raw: serializeFrontmatter(newFields),\n fields: newFields,\n };\n onChange(updated);\n };\n\n const name = getField(\"name\");\n const description = getField(\"description\");\n const isUserInvocable = getField(\"user-invocable\") === \"true\";\n const model = getField(\"model\") || \"inherit\";\n const tools = getField(\"tools\") || \"inherit\";\n const isCustomAgent = isCustomAgentPath(resourcePath);\n const isSkill = isSkillPath(resourcePath);\n\n return (\n <div\n style={{\n padding: \"8px 12px\",\n marginBottom: 8,\n borderRadius: 6,\n background: \"hsl(var(--muted) / 0.5)\",\n border: \"1px solid hsl(var(--border) / 0.5)\",\n fontSize: 12,\n lineHeight: 1.5,\n color: \"hsl(var(--muted-foreground))\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <input\n value={name}\n onChange={(e) => updateField(\"name\", e.target.value)}\n readOnly={readOnly}\n placeholder={isCustomAgent ? \"Agent name\" : \"Skill name\"}\n style={{\n ...FM_INPUT_STYLE,\n fontWeight: 600,\n color: \"hsl(var(--foreground))\",\n fontSize: 13,\n flex: 1,\n }}\n />\n {isSkill ? (\n <label\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n fontSize: 10,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n padding: \"1px 5px\",\n borderRadius: 3,\n background: isUserInvocable\n ? \"hsl(var(--primary) / 0.15)\"\n : \"transparent\",\n color: isUserInvocable\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\",\n border: isUserInvocable\n ? \"none\"\n : \"1px dashed hsl(var(--border))\",\n fontWeight: 500,\n }}\n >\n <input\n type=\"checkbox\"\n checked={isUserInvocable}\n disabled={readOnly}\n onChange={(e) =>\n updateField(\n \"user-invocable\",\n e.target.checked ? \"true\" : \"false\",\n )\n }\n style={{ display: \"none\" }}\n />\n /{name || \"command\"}\n </label>\n ) : null}\n {isCustomAgent ? (\n <select\n value={model}\n disabled={readOnly}\n onChange={(e) => updateField(\"model\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Default model</option>\n <option value=\"claude-fable-5\">Claude Fable 5</option>\n <option value=\"claude-opus-4-8\">Claude Opus 4.8</option>\n <option value={CLAUDE_SONNET_MODEL_ID}>\n {CLAUDE_SONNET_MODEL_LABEL}\n </option>\n <option value=\"claude-haiku-4-5-20251001\">Claude Haiku 4.5</option>\n </select>\n ) : null}\n </div>\n <input\n value={description}\n readOnly={readOnly}\n onChange={(e) => updateField(\"description\", e.target.value)}\n placeholder={\n isCustomAgent\n ? \"Description — what this agent should handle\"\n : \"Description — what this skill does\"\n }\n style={{\n ...FM_INPUT_STYLE,\n marginTop: 2,\n opacity: 0.8,\n color: \"hsl(var(--muted-foreground))\",\n }}\n />\n {isCustomAgent ? (\n <div\n style={{\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n alignItems: \"center\",\n }}\n >\n <label\n style={{\n fontSize: 10,\n color: \"hsl(var(--muted-foreground))\",\n minWidth: 28,\n }}\n >\n Tools\n </label>\n <select\n value={tools}\n disabled={readOnly}\n onChange={(e) => updateField(\"tools\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Inherit</option>\n <option value=\"allowlist\">Allowlist later</option>\n <option value=\"denylist\">Denylist later</option>\n </select>\n </div>\n ) : null}\n </div>\n );\n}\n\n// --- Slash Command Menu ---\n\ninterface CommandItem {\n title: string;\n description: string;\n icon: string;\n action: (editor: any) => void;\n}\n\nconst slashCommands: CommandItem[] = [\n {\n title: \"Text\",\n description: \"Plain text\",\n icon: \"T\",\n action: (editor) => editor.chain().focus().setParagraph().run(),\n },\n {\n title: \"Heading 1\",\n description: \"Large heading\",\n icon: \"H1\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 1 }).run(),\n },\n {\n title: \"Heading 2\",\n description: \"Medium heading\",\n icon: \"H2\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 2 }).run(),\n },\n {\n title: \"Heading 3\",\n description: \"Small heading\",\n icon: \"H3\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 3 }).run(),\n },\n {\n title: \"Bullet List\",\n description: \"Unordered list\",\n icon: \"•\",\n action: (editor) => editor.chain().focus().toggleBulletList().run(),\n },\n {\n title: \"Numbered List\",\n description: \"Ordered list\",\n icon: \"1.\",\n action: (editor) => editor.chain().focus().toggleOrderedList().run(),\n },\n {\n title: \"Code Block\",\n description: \"Code snippet\",\n icon: \"<>\",\n action: (editor) => editor.chain().focus().toggleCodeBlock().run(),\n },\n {\n title: \"Quote\",\n description: \"Block quote\",\n icon: '\"',\n action: (editor) => editor.chain().focus().toggleBlockquote().run(),\n },\n {\n title: \"Divider\",\n description: \"Horizontal rule\",\n icon: \"—\",\n action: (editor) => editor.chain().focus().setHorizontalRule().run(),\n },\n];\n\nfunction SlashMenu({ editor }: { editor: any }) {\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n flipUp: boolean;\n } | null>(null);\n const slashPosRef = useRef<number | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const filteredCommands = useMemo(\n () =>\n slashCommands.filter(\n (cmd) =>\n cmd.title.toLowerCase().includes(query.toLowerCase()) ||\n cmd.description.toLowerCase().includes(query.toLowerCase()),\n ),\n [query],\n );\n\n const executeCommand = useCallback(\n (cmd: CommandItem) => {\n if (slashPosRef.current !== null) {\n const { from } = editor.state.selection;\n editor\n .chain()\n .focus()\n .deleteRange({ from: slashPosRef.current, to: from })\n .run();\n }\n cmd.action(editor);\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n },\n [editor],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((i) => (i + 1) % filteredCommands.length);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex(\n (i) => (i - 1 + filteredCommands.length) % filteredCommands.length,\n );\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n executeCommand(filteredCommands[selectedIndex]);\n }\n } else if (e.key === \"Escape\") {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown, true);\n return () => document.removeEventListener(\"keydown\", handleKeyDown, true);\n }, [isOpen, selectedIndex, filteredCommands, executeCommand, editor]);\n\n useEffect(() => {\n if (!editor) return;\n\n const handleTransaction = () => {\n const { state } = editor;\n const { from } = state.selection;\n const textBefore = state.doc.textBetween(\n Math.max(0, from - 20),\n from,\n \"\\n\",\n );\n\n const slashMatch = textBefore.match(/\\/([a-zA-Z0-9]*)$/);\n\n if (slashMatch) {\n const slashStart = from - slashMatch[0].length;\n slashPosRef.current = slashStart;\n setQuery(slashMatch[1]);\n setSelectedIndex(0);\n\n const coords = editor.view.coordsAtPos(from);\n // Estimate menu height (~320px max) and check if it fits below\n const menuHeight = 320;\n const spaceBelow = window.innerHeight - coords.bottom;\n const flipUp = spaceBelow < menuHeight && coords.top > menuHeight;\n\n setPosition({\n top: flipUp ? coords.top : coords.bottom + 4,\n left: Math.min(coords.left, window.innerWidth - 240),\n flipUp,\n });\n setIsOpen(true);\n } else {\n if (isOpen) {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n }\n };\n\n editor.on(\"transaction\", handleTransaction);\n return () => {\n editor.off(\"transaction\", handleTransaction);\n };\n }, [editor, isOpen]);\n\n if (!isOpen || !position || filteredCommands.length === 0) return null;\n\n return (\n <div\n ref={menuRef}\n style={{\n position: \"fixed\",\n ...(position.flipUp\n ? { bottom: window.innerHeight - position.top + 4 }\n : { top: position.top }),\n left: position.left,\n zIndex: 9999,\n }}\n className=\"re-slash-menu\"\n >\n <div className=\"py-1\">\n <div\n style={{\n padding: \"4px 10px\",\n fontSize: 10,\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.06em\",\n opacity: 0.5,\n }}\n >\n Blocks\n </div>\n {filteredCommands.map((cmd, i) => (\n <button\n key={cmd.title}\n onClick={() => executeCommand(cmd)}\n onMouseEnter={() => setSelectedIndex(i)}\n className={cn(\n \"re-slash-item\",\n i === selectedIndex && \"re-slash-item--active\",\n )}\n >\n <span className=\"re-slash-icon\">{cmd.icon}</span>\n <span>\n <span className=\"re-slash-title\">{cmd.title}</span>\n <span className=\"re-slash-desc\">{cmd.description}</span>\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n// --- Inline Bubble Toolbar ---\n\nfunction InlineBubbleToolbar({ editor }: { editor: any }) {\n const [visible, setVisible] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const toolbarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!editor) return;\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) {\n setVisible(false);\n return;\n }\n const range = domSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width === 0) {\n setVisible(false);\n return;\n }\n // Use fixed positioning with viewport coordinates\n setCoords({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n setVisible(true);\n };\n editor.on(\"selectionUpdate\", update);\n const onBlur = () => {\n // Delay so clicks on toolbar buttons register before hiding\n setTimeout(() => {\n if (!editor.isFocused) setVisible(false);\n }, 150);\n };\n editor.on(\"blur\", onBlur);\n return () => {\n editor.off(\"selectionUpdate\", update);\n editor.off(\"blur\", onBlur);\n };\n }, [editor]);\n\n const handleSetLink = () => {\n if (linkUrl.trim()) {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: linkUrl.trim() })\n .run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setShowLinkInput(false);\n setLinkUrl(\"\");\n };\n\n const toggleLink = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const previousUrl = editor.getAttributes(\"link\").href || \"\";\n setLinkUrl(previousUrl);\n setShowLinkInput(true);\n };\n\n const items = [\n {\n label: \"B\",\n title: \"Bold\",\n action: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive(\"bold\"),\n style: { fontWeight: 700 } as React.CSSProperties,\n },\n {\n label: \"I\",\n title: \"Italic\",\n action: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive(\"italic\"),\n style: { fontStyle: \"italic\" } as React.CSSProperties,\n },\n {\n label: \"S\",\n title: \"Strikethrough\",\n action: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive(\"strike\"),\n style: { textDecoration: \"line-through\" } as React.CSSProperties,\n },\n {\n label: \"<>\",\n title: \"Code\",\n action: () => editor.chain().focus().toggleCode().run(),\n isActive: () => editor.isActive(\"code\"),\n style: { fontFamily: \"monospace\", fontSize: 11 } as React.CSSProperties,\n },\n { type: \"divider\" as const },\n {\n label: \"H1\",\n title: \"Heading 1\",\n action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 1 }),\n },\n {\n label: \"H2\",\n title: \"Heading 2\",\n action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 2 }),\n },\n {\n label: \"H3\",\n title: \"Heading 3\",\n action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 3 }),\n },\n { type: \"divider\" as const },\n {\n label: \"Link\",\n title: \"Link\",\n action: toggleLink,\n isActive: () => editor.isActive(\"link\"),\n },\n ];\n\n if (!visible) return null;\n\n return (\n <div\n ref={toolbarRef}\n className=\"re-bubble-toolbar\"\n onMouseDown={(e) => e.preventDefault()}\n style={{\n position: \"fixed\",\n top: coords.top,\n left: coords.left,\n transform: \"translate(-50%, -100%)\",\n zIndex: 9999,\n }}\n >\n {showLinkInput ? (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: 4 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n <input\n autoFocus\n type=\"url\"\n placeholder=\"Paste link...\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSetLink();\n if (e.key === \"Escape\") {\n setShowLinkInput(false);\n setLinkUrl(\"\");\n }\n }}\n style={{\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"white\",\n fontSize: 12,\n width: 160,\n padding: \"2px 4px\",\n }}\n />\n <button\n onClick={handleSetLink}\n style={{\n fontSize: 11,\n color: \"hsl(var(--primary))\",\n padding: \"2px 6px\",\n fontWeight: 500,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n ) : (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 2 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n {items.map((item, i) => {\n if (\"type\" in item && item.type === \"divider\") {\n return (\n <div\n key={`d-${i}`}\n style={{\n width: 1,\n height: 16,\n background: \"hsl(var(--border))\",\n margin: \"0 2px\",\n }}\n />\n );\n }\n const { label, title, action, isActive, style } = item as {\n label: string;\n title: string;\n action: () => void;\n isActive: () => boolean;\n style?: React.CSSProperties;\n };\n return (\n <Tooltip key={title}>\n <TooltipTrigger asChild>\n <button\n onClick={action}\n className={cn(\n \"re-bubble-btn\",\n isActive() && \"re-bubble-btn--active\",\n )}\n style={style}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipContent>{title}</TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// --- Visual Markdown Editor ---\n\n// --- Syntax-highlighted code editor (textarea + overlay) ---\n\nfunction highlightJson(text: string): string {\n // Escape HTML first\n const esc = text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n // Tokenize JSON with regex\n return esc.replace(\n /(\"(?:\\\\.|[^\"\\\\])*\")\\s*:|(\"(?:\\\\.|[^\"\\\\])*\")|((?:-?\\d+)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g,\n (match, key, str, num, lit) => {\n if (key) return `<span class=\"sh-key\">${key}</span>:`;\n if (str) return `<span class=\"sh-str\">${str}</span>`;\n if (num) return `<span class=\"sh-num\">${num}</span>`;\n if (lit) return `<span class=\"sh-lit\">${lit}</span>`;\n return match;\n },\n );\n}\n\nconst shStyles = `\n.sh-key { color: #7dd3fc; }\n.sh-str { color: #86efac; }\n.sh-num { color: #fca5a5; }\n.sh-lit { color: #c4b5fd; }\n`;\n\nfunction SyntaxHighlightEditor({\n value,\n onChange,\n language: _language,\n readOnly,\n}: {\n value: string;\n onChange: (v: string) => void;\n language: \"json\";\n readOnly?: boolean;\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const preRef = useRef<HTMLPreElement>(null);\n\n const highlighted = useMemo(() => highlightJson(value), [value]);\n\n const syncScroll = useCallback(() => {\n if (textareaRef.current && preRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n }, []);\n\n const monoFont =\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace';\n const sharedStyle: React.CSSProperties = {\n fontFamily: monoFont,\n fontSize: 13,\n lineHeight: 1.6,\n padding: 12,\n margin: 0,\n border: \"none\",\n whiteSpace: \"pre\",\n wordWrap: \"normal\",\n overflowWrap: \"normal\",\n tabSize: 2,\n };\n\n return (\n <>\n <style>{shStyles}</style>\n <div\n className=\"flex-1 min-h-0\"\n style={{ position: \"relative\", overflow: \"hidden\" }}\n >\n <pre\n ref={preRef}\n aria-hidden\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n overflow: \"auto\",\n pointerEvents: \"none\",\n color: \"hsl(var(--muted-foreground))\",\n background: \"transparent\",\n }}\n dangerouslySetInnerHTML={{ __html: highlighted + \"\\n\" }}\n />\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => {\n if (!readOnly) onChange(e.target.value);\n }}\n onScroll={syncScroll}\n readOnly={readOnly}\n spellCheck={false}\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n resize: \"none\",\n background: \"transparent\",\n color: \"transparent\",\n caretColor: \"hsl(var(--foreground))\",\n outline: \"none\",\n WebkitTextFillColor: \"transparent\",\n }}\n />\n </div>\n </>\n );\n}\n\nfunction VisualMarkdownEditor({\n content,\n onChange,\n resourcePath,\n readOnly,\n}: {\n content: string;\n onChange: (md: string) => void;\n resourcePath: string;\n readOnly?: boolean;\n}) {\n const isSettingContent = useRef(false);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Parse frontmatter — strip it from tiptap content, re-prepend on save\n const parsed = useMemo(() => parseFrontmatter(content), [content]);\n const frontmatterRef = useRef(parsed);\n frontmatterRef.current = parsed;\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n codeBlock: {},\n link: false,\n dropcursor: { color: \"hsl(var(--ring))\", width: 2 },\n }),\n Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === \"heading\") {\n const level = node.attrs.level;\n if (level === 1) return \"Heading 1\";\n if (level === 2) return \"Heading 2\";\n return \"Heading 3\";\n }\n return \"Type '/' for commands...\";\n },\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n }),\n Link.configure({\n openOnClick: false,\n HTMLAttributes: { class: \"re-link\" },\n }),\n Markdown.configure({\n html: true,\n transformPastedText: true,\n transformCopiedText: true,\n }),\n ],\n content: parsed?.body ?? content,\n editable: !readOnly,\n editorProps: {\n attributes: {\n class: \"re-prose\",\n },\n },\n onUpdate: ({ editor }) => {\n if (readOnly) return;\n if (isSettingContent.current) return;\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n // Re-prepend frontmatter if it existed\n const fm = frontmatterRef.current;\n const full = fm ? fm.raw + md : md;\n onChangeRef.current(full);\n } catch (err) {\n console.error(\"Markdown serialization error:\", err);\n }\n },\n });\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const currentMd = (editor.storage as any).markdown.getMarkdown();\n if (currentMd !== (parsed?.body ?? content)) {\n if (editor.isFocused) return;\n isSettingContent.current = true;\n editor.commands.setContent(parsed?.body ?? content);\n isSettingContent.current = false;\n }\n }, [content, editor, parsed]);\n\n useEffect(() => {\n return () => {\n editor?.destroy();\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const handleWrapperClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click was on the wrapper (empty area), not on editor content, focus at end\n const target = e.target as HTMLElement;\n if (\n target.classList.contains(\"re-editor-clickable\") ||\n target.classList.contains(\"re-editor-wrapper\")\n ) {\n editor.chain().focus(\"end\").run();\n }\n };\n\n return (\n <div\n className=\"re-editor-wrapper re-editor-clickable\"\n onClick={handleWrapperClick}\n style={{\n position: \"relative\",\n minHeight: \"100%\",\n cursor: readOnly ? \"default\" : \"text\",\n }}\n >\n {parsed && (\n <FrontmatterBar\n resourcePath={resourcePath}\n frontmatter={parsed}\n readOnly={readOnly}\n onChange={(updated) => {\n if (readOnly) return;\n frontmatterRef.current = updated;\n // Get current body and combine with updated frontmatter\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n onChangeRef.current(updated.raw + md);\n } catch {\n // fallback\n }\n }}\n />\n )}\n {!readOnly && <InlineBubbleToolbar editor={editor} />}\n {!readOnly && <SlashMenu editor={editor} />}\n <EditorContent editor={editor} />\n </div>\n );\n}\n\n// --- Main ResourceEditor ---\n\ninterface RemoteAgentFormValue {\n id?: string;\n name: string;\n description: string;\n url: string;\n color: string;\n}\n\nfunction parseRemoteAgentContent(\n content: string,\n path: string,\n): RemoteAgentFormValue {\n const fallbackId = getRemoteAgentIdFromPath(path);\n try {\n const data = JSON.parse(content || \"{}\");\n return {\n id: data.id || fallbackId,\n name: data.name ?? \"\",\n description: data.description ?? \"\",\n url: data.url ?? \"\",\n color: data.color ?? \"#6B7280\",\n };\n } catch {\n return {\n id: fallbackId,\n name: \"\",\n description: \"\",\n url: \"\",\n color: \"#6B7280\",\n };\n }\n}\n\nfunction serializeRemoteAgent(value: RemoteAgentFormValue): string {\n return (\n JSON.stringify(\n {\n id: value.id,\n name: value.name,\n description: value.description || undefined,\n url: value.url,\n color: value.color,\n },\n null,\n 2,\n ) + \"\\n\"\n );\n}\n\nfunction RemoteAgentFormEditor({\n resource,\n onChange,\n readOnly,\n}: {\n resource: Resource;\n onChange: (content: string) => void;\n readOnly?: boolean;\n}) {\n const [value, setValue] = useState<RemoteAgentFormValue>(() =>\n parseRemoteAgentContent(resource.content, resource.path),\n );\n const prevIdRef = useRef(resource.id);\n\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setValue(parseRemoteAgentContent(resource.content, resource.path));\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, resource.path]);\n\n const update = (patch: Partial<RemoteAgentFormValue>) => {\n if (readOnly) return;\n const next = { ...value, ...patch };\n setValue(next);\n onChange(serializeRemoteAgent(next));\n };\n\n const inputClass =\n \"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\";\n const labelClass = \"block text-[11px] font-medium text-muted-foreground mb-1\";\n\n return (\n <div className=\"flex flex-1 min-h-0 flex-col overflow-y-auto p-4\">\n <div className=\"max-w-md space-y-3\">\n <p className=\"text-[11px] text-muted-foreground/70 leading-snug\">\n Connected remote agent over the A2A protocol. @-mention it in chat to\n delegate tasks.\n </p>\n <div>\n <label className={labelClass}>Name</label>\n <input\n className={inputClass}\n value={value.name}\n readOnly={readOnly}\n onChange={(e) => update({ name: e.target.value })}\n placeholder=\"Analytics\"\n />\n </div>\n <div>\n <label className={labelClass}>URL</label>\n <input\n className={inputClass}\n value={value.url}\n readOnly={readOnly}\n onChange={(e) => update({ url: e.target.value })}\n placeholder=\"https://analytics.example.com\"\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground/50\">\n A2A endpoint. The agent card is served at{\" \"}\n <code>/.well-known/agent-card.json</code>.\n </p>\n </div>\n <div>\n <label className={labelClass}>Description</label>\n <textarea\n className={cn(inputClass, \"resize-y\")}\n rows={3}\n value={value.description}\n readOnly={readOnly}\n onChange={(e) => update({ description: e.target.value })}\n placeholder=\"What this agent is good at — helps the main agent decide when to delegate.\"\n />\n </div>\n <div>\n <label className={labelClass}>Color</label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value.color}\n disabled={readOnly}\n onChange={(e) => update({ color: e.target.value })}\n className=\"h-8 w-10 cursor-pointer rounded border border-border bg-transparent\"\n />\n <input\n className={cn(inputClass, \"flex-1\")}\n value={value.color}\n readOnly={readOnly}\n onChange={(e) => update({ color: e.target.value })}\n placeholder=\"#6B7280\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function ResourceEditor({\n resource,\n onSave,\n view: controlledView,\n onViewChange,\n hideToolbar,\n readOnly,\n}: ResourceEditorProps) {\n const [content, setContent] = useState(resource.content);\n const [internalView, setInternalView] = useState<\"visual\" | \"code\">(\n getViewPref,\n );\n const view = controlledView ?? internalView;\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const prevIdRef = useRef(resource.id);\n\n // Reset content when resource changes\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setContent(resource.content);\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content]);\n\n const handleChange = useCallback(\n (newContent: string) => {\n if (readOnly) return;\n setContent(newContent);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n onSave(newContent);\n }, 1000);\n },\n [onSave, readOnly],\n );\n\n const switchView = useCallback(\n (v: \"visual\" | \"code\") => {\n setInternalView(v);\n setViewPref(v);\n onViewChange?.(v);\n },\n [onViewChange],\n );\n\n // Cleanup debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const isMarkdown =\n resource.mimeType === \"text/markdown\" || resource.path.endsWith(\".md\");\n const isImage = resource.mimeType.startsWith(\"image/\");\n const isRemoteAgent = isRemoteAgentPath(resource.path);\n\n // Remote-agent manifest → form editor\n if (isRemoteAgent) {\n return (\n <div className=\"flex h-full flex-col\">\n <RemoteAgentFormEditor\n resource={resource}\n onChange={handleChange}\n readOnly={readOnly}\n />\n </div>\n );\n }\n\n // Image preview\n if (isImage) {\n return (\n <div className=\"flex h-full flex-col\">\n <div className=\"flex flex-1 items-center justify-center overflow-auto p-4\">\n <img\n src={agentNativePath(`/_agent-native/resources/${resource.id}?raw`)}\n alt={resource.path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n );\n }\n\n // Markdown files get visual/code toggle\n if (isMarkdown) {\n return (\n <div className=\"flex h-full flex-col\">\n <style>{editorStyles}</style>\n {!hideToolbar && (\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => switchView(\"visual\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Visual\n </button>\n <button\n onClick={() => switchView(\"code\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Code\n </button>\n </div>\n </div>\n )}\n {view === \"visual\" ? (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3\"\n key={resource.id + \"-visual\"}\n >\n <VisualMarkdownEditor\n content={content}\n onChange={handleChange}\n resourcePath={resource.path}\n readOnly={readOnly}\n />\n </div>\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n readOnly={readOnly}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n }\n\n // Non-markdown text files\n const isJson =\n resource.mimeType === \"application/json\" || resource.path.endsWith(\".json\");\n\n return (\n <div className=\"flex h-full flex-col\">\n {isJson ? (\n <SyntaxHighlightEditor\n value={content}\n onChange={handleChange}\n language=\"json\"\n readOnly={readOnly}\n />\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n readOnly={readOnly}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n}\n\n// --- Scoped editor styles (injected inline so no external CSS needed) ---\n\nconst editorStyles = `\n/* Prose styling for the visual editor */\n.re-prose {\n outline: none;\n color: hsl(var(--foreground));\n line-height: 1.65;\n font-size: 13px;\n min-height: 100%;\n}\n.re-prose > *:first-child { margin-top: 0; }\n\n.re-prose h1 {\n font-size: 1.5em;\n font-weight: 700;\n margin: 1em 0 0.25em;\n line-height: 1.25;\n}\n.re-prose h2 {\n font-size: 1.25em;\n font-weight: 600;\n margin: 0.8em 0 0.2em;\n line-height: 1.3;\n}\n.re-prose h3 {\n font-size: 1.1em;\n font-weight: 600;\n margin: 0.6em 0 0.15em;\n line-height: 1.35;\n}\n.re-prose p {\n margin: 0.35em 0;\n min-height: 1.65em;\n}\n.re-prose ul {\n list-style-type: disc;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose ol {\n list-style-type: decimal;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose li { margin: 0.05em 0; }\n.re-prose li p { margin: 0; }\n\n.re-prose blockquote {\n border-left: 2px solid hsl(var(--border));\n padding-left: 0.8em;\n margin: 0.3em 0;\n color: hsl(var(--muted-foreground));\n}\n.re-prose code {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 0.88em;\n background: hsl(var(--muted));\n padding: 0.1em 0.3em;\n border-radius: 3px;\n}\n.re-prose pre {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 12px;\n background: hsl(var(--muted));\n border-radius: 4px;\n padding: 0.7em 0.9em;\n margin: 0.3em 0;\n overflow-x: auto;\n line-height: 1.5;\n}\n.re-prose pre code {\n background: none;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n.re-prose hr {\n border: none;\n border-top: 1px solid hsl(var(--border));\n margin: 1em 0;\n}\n.re-prose strong { font-weight: 600; }\n.re-prose em { font-style: italic; }\n.re-prose s { text-decoration: line-through; }\n\n.re-link {\n color: hsl(var(--foreground));\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: hsl(var(--muted-foreground));\n cursor: pointer;\n}\n.re-link:hover {\n text-decoration-color: hsl(var(--foreground));\n}\n\n/* Placeholder */\n.re-prose p.is-editor-empty:first-child::before,\n.re-prose p.is-empty::before,\n.re-prose h1.is-empty::before,\n.re-prose h2.is-empty::before,\n.re-prose h3.is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: hsl(var(--muted-foreground));\n opacity: 0.5;\n pointer-events: none;\n height: 0;\n}\n\n/* Selection */\n.re-prose ::selection {\n background: hsl(210 100% 52% / 0.2);\n}\n\n/* Bubble toolbar */\n.re-bubble-toolbar {\n display: flex;\n align-items: center;\n background: hsl(var(--popover));\n color: hsl(var(--popover-foreground));\n border: 1px solid hsl(var(--border));\n border-radius: 6px;\n padding: 3px;\n box-shadow: 0 4px 16px rgb(0 0 0 / 0.12);\n}\n.re-bubble-btn {\n padding: 3px 6px;\n border-radius: 4px;\n font-size: 12px;\n color: hsl(var(--muted-foreground));\n background: none;\n border: none;\n cursor: pointer;\n line-height: 1;\n}\n.re-bubble-btn:hover {\n background: hsl(var(--accent));\n color: hsl(var(--accent-foreground));\n}\n.re-bubble-btn--active {\n background: hsl(var(--accent));\n color: hsl(var(--accent-foreground));\n}\n\n/* Slash command menu */\n.re-slash-menu {\n background: hsl(var(--popover));\n border: 1px solid hsl(var(--border));\n border-radius: 6px;\n box-shadow: 0 4px 20px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.04);\n min-width: 220px;\n max-height: 320px;\n overflow-y: auto;\n color: hsl(var(--foreground));\n}\n.re-slash-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n color: hsl(var(--foreground));\n font-size: 13px;\n}\n.re-slash-item:hover,\n.re-slash-item--active {\n background: hsl(var(--accent));\n}\n.re-slash-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid hsl(var(--border));\n background: hsl(var(--background));\n font-size: 12px;\n font-weight: 600;\n color: hsl(var(--muted-foreground));\n flex-shrink: 0;\n}\n.re-slash-title {\n display: block;\n font-weight: 500;\n font-size: 13px;\n}\n.re-slash-desc {\n display: block;\n font-size: 11px;\n color: hsl(var(--muted-foreground));\n}\n`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAMN,MAAM,OAAO,CAAC;AAo9Bf,wBAAgB,cAAc,sBAwuB7B"}
1
+ {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAMN,MAAM,OAAO,CAAC;AAw9Bf,wBAAgB,cAAc,sBAwuB7B"}
@@ -1,6 +1,7 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { IconPlus, IconUpload, IconArrowLeft, IconPencil, IconBulb, IconBolt, IconTrash, IconEye, IconCode, IconClock, IconMessageChatbot, IconExternalLink, IconHelp, IconPlugConnected, } from "@tabler/icons-react";
3
3
  import React, { useState, useRef, useCallback, useEffect, useMemo, } from "react";
4
+ import { CLAUDE_SONNET_MODEL_ID, CLAUDE_SONNET_MODEL_LABEL, } from "../../agent/model-config.js";
4
5
  import { serializeFrontmatter } from "../../resources/metadata.js";
5
6
  import { sendToAgentChat } from "../agent-chat.js";
6
7
  import { agentNativePath } from "../api-path.js";
@@ -25,7 +26,7 @@ const AGENT_MODEL_OPTIONS = [
25
26
  { value: "inherit", label: "Default model" },
26
27
  { value: "claude-fable-5", label: "Claude Fable 5" },
27
28
  { value: "claude-opus-4-8", label: "Claude Opus 4.8" },
28
- { value: "claude-sonnet-4-6", label: "Claude Sonnet 4.6" },
29
+ { value: CLAUDE_SONNET_MODEL_ID, label: CLAUDE_SONNET_MODEL_LABEL },
29
30
  { value: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5" },
30
31
  ];
31
32
  function slugifyName(value) {