@agent-native/core 0.109.2 → 0.109.4

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 (334) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +16 -0
  3. package/corpus/core/docs/content/agent-native-toolkit.mdx +46 -13
  4. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +79 -55
  5. package/corpus/core/docs/content/locales/ar-SA/toolkit-capability-packages.mdx +21 -0
  6. package/corpus/core/docs/content/locales/ar-SA/toolkit-context-knowledge.mdx +12 -0
  7. package/corpus/core/docs/content/locales/ar-SA/toolkit-editors-canvases.mdx +17 -0
  8. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +82 -54
  9. package/corpus/core/docs/content/locales/de-DE/toolkit-capability-packages.mdx +21 -0
  10. package/corpus/core/docs/content/locales/de-DE/toolkit-context-knowledge.mdx +12 -0
  11. package/corpus/core/docs/content/locales/de-DE/toolkit-editors-canvases.mdx +17 -0
  12. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +81 -52
  13. package/corpus/core/docs/content/locales/es-ES/toolkit-capability-packages.mdx +21 -0
  14. package/corpus/core/docs/content/locales/es-ES/toolkit-context-knowledge.mdx +12 -0
  15. package/corpus/core/docs/content/locales/es-ES/toolkit-editors-canvases.mdx +21 -0
  16. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +84 -54
  17. package/corpus/core/docs/content/locales/fr-FR/toolkit-capability-packages.mdx +21 -0
  18. package/corpus/core/docs/content/locales/fr-FR/toolkit-context-knowledge.mdx +12 -0
  19. package/corpus/core/docs/content/locales/fr-FR/toolkit-editors-canvases.mdx +21 -0
  20. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +69 -62
  21. package/corpus/core/docs/content/locales/hi-IN/toolkit-capability-packages.mdx +21 -0
  22. package/corpus/core/docs/content/locales/hi-IN/toolkit-context-knowledge.mdx +12 -0
  23. package/corpus/core/docs/content/locales/hi-IN/toolkit-editors-canvases.mdx +17 -0
  24. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +69 -62
  25. package/corpus/core/docs/content/locales/ja-JP/toolkit-capability-packages.mdx +21 -0
  26. package/corpus/core/docs/content/locales/ja-JP/toolkit-context-knowledge.mdx +12 -0
  27. package/corpus/core/docs/content/locales/ja-JP/toolkit-editors-canvases.mdx +17 -0
  28. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +69 -62
  29. package/corpus/core/docs/content/locales/ko-KR/toolkit-capability-packages.mdx +21 -0
  30. package/corpus/core/docs/content/locales/ko-KR/toolkit-context-knowledge.mdx +12 -0
  31. package/corpus/core/docs/content/locales/ko-KR/toolkit-editors-canvases.mdx +17 -0
  32. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +82 -54
  33. package/corpus/core/docs/content/locales/pt-BR/toolkit-capability-packages.mdx +21 -0
  34. package/corpus/core/docs/content/locales/pt-BR/toolkit-context-knowledge.mdx +12 -0
  35. package/corpus/core/docs/content/locales/pt-BR/toolkit-editors-canvases.mdx +17 -0
  36. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +69 -62
  37. package/corpus/core/docs/content/locales/zh-CN/toolkit-capability-packages.mdx +21 -0
  38. package/corpus/core/docs/content/locales/zh-CN/toolkit-context-knowledge.mdx +12 -0
  39. package/corpus/core/docs/content/locales/zh-CN/toolkit-editors-canvases.mdx +17 -0
  40. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +69 -62
  41. package/corpus/core/docs/content/locales/zh-TW/toolkit-capability-packages.mdx +21 -0
  42. package/corpus/core/docs/content/locales/zh-TW/toolkit-context-knowledge.mdx +12 -0
  43. package/corpus/core/docs/content/locales/zh-TW/toolkit-editors-canvases.mdx +17 -0
  44. package/corpus/core/docs/content/toolkit-capability-packages.mdx +52 -0
  45. package/corpus/core/docs/content/toolkit-context-knowledge.mdx +46 -0
  46. package/corpus/core/docs/content/toolkit-editors-canvases.mdx +55 -0
  47. package/corpus/core/package.json +35 -34
  48. package/corpus/core/src/cli/create.ts +57 -15
  49. package/corpus/core/src/cli/package-lifecycle.ts +2 -0
  50. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +2 -0
  51. package/corpus/core/src/client/context-xray/ContextMeter.tsx +31 -111
  52. package/corpus/core/src/client/context-xray/ContextSegmentRow.tsx +8 -111
  53. package/corpus/core/src/client/context-xray/ContextTreemap.tsx +6 -111
  54. package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +31 -391
  55. package/corpus/core/src/client/context-xray/SegmentProvenancePopover.tsx +4 -52
  56. package/corpus/core/src/client/context-xray/format.ts +0 -33
  57. package/corpus/core/src/client/require-session.tsx +19 -3
  58. package/corpus/core/src/client/rich-markdown-editor/index.ts +42 -57
  59. package/corpus/core/src/client/rich-markdown-editor/uploadEditorImage.ts +2 -1
  60. package/corpus/core/src/client/use-action.ts +145 -2
  61. package/corpus/core/src/client/use-session.ts +79 -48
  62. package/corpus/core/src/client/visual-style-controls.tsx +1 -1088
  63. package/corpus/core/src/collab/agent-identity.ts +5 -22
  64. package/corpus/core/src/collab/client.ts +1 -53
  65. package/corpus/core/src/db/client.ts +13 -7
  66. package/corpus/core/src/db/create-get-db.ts +20 -13
  67. package/corpus/core/src/db/request-telemetry.ts +154 -0
  68. package/corpus/core/src/integrations/index.ts +1 -0
  69. package/corpus/core/src/integrations/plugin.ts +9 -3
  70. package/corpus/core/src/integrations/remote-push-delivery-job.ts +48 -0
  71. package/corpus/core/src/integrations/remote-push-delivery.ts +370 -0
  72. package/corpus/core/src/integrations/remote-push-store.ts +275 -26
  73. package/corpus/core/src/server/better-auth-instance.ts +11 -3
  74. package/corpus/core/src/server/core-routes-plugin.ts +36 -14
  75. package/corpus/core/src/server/framework-request-handler.ts +11 -1
  76. package/corpus/core/src/server/http-response-telemetry.ts +233 -31
  77. package/corpus/core/src/styles/rich-markdown-editor.css +1 -510
  78. package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +19 -0
  79. package/corpus/core/src/testing.ts +1 -1
  80. package/corpus/core/src/vite/client.ts +3 -0
  81. package/corpus/templates/clips/actions/finalize-recording.ts +3 -1
  82. package/corpus/templates/clips/actions/set-mobile-capture-state.ts +4 -1
  83. package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -6
  84. package/corpus/templates/clips/changelog/2026-07-18-new-recording-is-now-emphasized-as-the-primary-action-in-the.md +6 -0
  85. package/corpus/templates/clips/changelog/2026-07-18-recordings-now-remain-safely-recoverable-until-the-stored-me.md +6 -0
  86. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +5 -3
  87. package/corpus/templates/content/app/components/editor/extensions/DragHandle.tsx +4 -4
  88. package/corpus/templates/content/package.json +25 -25
  89. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +2 -1
  90. package/corpus/templates/design/package.json +1 -1
  91. package/corpus/templates/mail/package.json +9 -9
  92. package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +2 -0
  93. package/corpus/templates/plan/app/components/editor/PlanDocumentEditor.tsx +8 -8
  94. package/corpus/templates/plan/app/components/editor/planSlashCommands.ts +6 -6
  95. package/corpus/templates/plan/app/components/plan/PlanImageNode.tsx +4 -7
  96. package/corpus/templates/plan/app/components/plan/PlanMarkdownEditor.tsx +6 -4
  97. package/corpus/templates/plan/app/components/plan/PlanVisualSurface.tsx +1 -1
  98. package/corpus/templates/plan/changelog/2026-07-18-visual-plans-now-open-on-wireframes-by-default-when-a-protot.md +6 -0
  99. package/corpus/templates/plan/package.json +3 -3
  100. package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +2 -2
  101. package/corpus/templates/slides/app/components/editor/TweaksPanel.tsx +2 -2
  102. package/corpus/templates/slides/package.json +13 -13
  103. package/corpus/templates/tasks/AGENTS.md +3 -0
  104. package/corpus/templates/tasks/actions/render-task-list-inline.ts +202 -0
  105. package/corpus/templates/tasks/changelog/2026-07-18-task-lists-can-now-appear-as-interactive-widgets-inline-in-c.md +6 -0
  106. package/corpus/templates/tasks/docs/features/f8-chat.mdx +2 -0
  107. package/corpus/templates/tasks/server/plugins/agent-chat.ts +2 -0
  108. package/dist/catalog.json +39 -1
  109. package/dist/cli/create.d.ts +10 -1
  110. package/dist/cli/create.d.ts.map +1 -1
  111. package/dist/cli/create.js +49 -16
  112. package/dist/cli/create.js.map +1 -1
  113. package/dist/cli/package-lifecycle.d.ts.map +1 -1
  114. package/dist/cli/package-lifecycle.js +2 -0
  115. package/dist/cli/package-lifecycle.js.map +1 -1
  116. package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
  117. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
  118. package/dist/cli/skills-content/visual-plan-skill.js +2 -0
  119. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
  120. package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
  121. package/dist/client/context-xray/ContextMeter.js +8 -23
  122. package/dist/client/context-xray/ContextMeter.js.map +1 -1
  123. package/dist/client/context-xray/ContextSegmentRow.d.ts.map +1 -1
  124. package/dist/client/context-xray/ContextSegmentRow.js +3 -19
  125. package/dist/client/context-xray/ContextSegmentRow.js.map +1 -1
  126. package/dist/client/context-xray/ContextTreemap.d.ts.map +1 -1
  127. package/dist/client/context-xray/ContextTreemap.js +3 -54
  128. package/dist/client/context-xray/ContextTreemap.js.map +1 -1
  129. package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
  130. package/dist/client/context-xray/ContextXRayPanel.js +21 -163
  131. package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
  132. package/dist/client/context-xray/SegmentProvenancePopover.d.ts.map +1 -1
  133. package/dist/client/context-xray/SegmentProvenancePopover.js +3 -4
  134. package/dist/client/context-xray/SegmentProvenancePopover.js.map +1 -1
  135. package/dist/client/context-xray/format.d.ts +0 -4
  136. package/dist/client/context-xray/format.d.ts.map +1 -1
  137. package/dist/client/context-xray/format.js +0 -49
  138. package/dist/client/context-xray/format.js.map +1 -1
  139. package/dist/client/require-session.d.ts.map +1 -1
  140. package/dist/client/require-session.js +6 -3
  141. package/dist/client/require-session.js.map +1 -1
  142. package/dist/client/rich-markdown-editor/index.d.ts +1 -12
  143. package/dist/client/rich-markdown-editor/index.d.ts.map +1 -1
  144. package/dist/client/rich-markdown-editor/index.js +1 -12
  145. package/dist/client/rich-markdown-editor/index.js.map +1 -1
  146. package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts +1 -1
  147. package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts.map +1 -1
  148. package/dist/client/rich-markdown-editor/uploadEditorImage.js.map +1 -1
  149. package/dist/client/use-action.d.ts.map +1 -1
  150. package/dist/client/use-action.js +117 -1
  151. package/dist/client/use-action.js.map +1 -1
  152. package/dist/client/use-session.d.ts.map +1 -1
  153. package/dist/client/use-session.js +72 -50
  154. package/dist/client/use-session.js.map +1 -1
  155. package/dist/client/visual-style-controls.d.ts +1 -89
  156. package/dist/client/visual-style-controls.d.ts.map +1 -1
  157. package/dist/client/visual-style-controls.js +1 -498
  158. package/dist/client/visual-style-controls.js.map +1 -1
  159. package/dist/collab/agent-identity.d.ts +1 -14
  160. package/dist/collab/agent-identity.d.ts.map +1 -1
  161. package/dist/collab/agent-identity.js +1 -13
  162. package/dist/collab/agent-identity.js.map +1 -1
  163. package/dist/collab/awareness.d.ts +2 -2
  164. package/dist/collab/awareness.d.ts.map +1 -1
  165. package/dist/collab/client.d.ts +1 -19
  166. package/dist/collab/client.d.ts.map +1 -1
  167. package/dist/collab/client.js +1 -53
  168. package/dist/collab/client.js.map +1 -1
  169. package/dist/collab/struct-routes.d.ts +1 -1
  170. package/dist/db/client.d.ts.map +1 -1
  171. package/dist/db/client.js +7 -1
  172. package/dist/db/client.js.map +1 -1
  173. package/dist/db/create-get-db.d.ts +3 -6
  174. package/dist/db/create-get-db.d.ts.map +1 -1
  175. package/dist/db/create-get-db.js +9 -2
  176. package/dist/db/create-get-db.js.map +1 -1
  177. package/dist/db/request-telemetry.d.ts +23 -0
  178. package/dist/db/request-telemetry.d.ts.map +1 -0
  179. package/dist/db/request-telemetry.js +95 -0
  180. package/dist/db/request-telemetry.js.map +1 -0
  181. package/dist/integrations/index.d.ts +1 -0
  182. package/dist/integrations/index.d.ts.map +1 -1
  183. package/dist/integrations/index.js +1 -0
  184. package/dist/integrations/index.js.map +1 -1
  185. package/dist/integrations/plugin.d.ts.map +1 -1
  186. package/dist/integrations/plugin.js +8 -3
  187. package/dist/integrations/plugin.js.map +1 -1
  188. package/dist/integrations/remote-push-delivery-job.d.ts +4 -0
  189. package/dist/integrations/remote-push-delivery-job.d.ts.map +1 -0
  190. package/dist/integrations/remote-push-delivery-job.js +44 -0
  191. package/dist/integrations/remote-push-delivery-job.js.map +1 -0
  192. package/dist/integrations/remote-push-delivery.d.ts +11 -0
  193. package/dist/integrations/remote-push-delivery.d.ts.map +1 -0
  194. package/dist/integrations/remote-push-delivery.js +265 -0
  195. package/dist/integrations/remote-push-delivery.js.map +1 -0
  196. package/dist/integrations/remote-push-store.d.ts +33 -0
  197. package/dist/integrations/remote-push-store.d.ts.map +1 -1
  198. package/dist/integrations/remote-push-store.js +195 -26
  199. package/dist/integrations/remote-push-store.js.map +1 -1
  200. package/dist/notifications/routes.d.ts +3 -3
  201. package/dist/progress/routes.d.ts +1 -1
  202. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  203. package/dist/resources/handlers.d.ts +3 -3
  204. package/dist/secrets/routes.d.ts +9 -9
  205. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  206. package/dist/server/better-auth-instance.js +7 -3
  207. package/dist/server/better-auth-instance.js.map +1 -1
  208. package/dist/server/core-routes-plugin.d.ts +8 -0
  209. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  210. package/dist/server/core-routes-plugin.js +23 -8
  211. package/dist/server/core-routes-plugin.js.map +1 -1
  212. package/dist/server/framework-request-handler.d.ts.map +1 -1
  213. package/dist/server/framework-request-handler.js +9 -1
  214. package/dist/server/framework-request-handler.js.map +1 -1
  215. package/dist/server/http-response-telemetry.d.ts +3 -2
  216. package/dist/server/http-response-telemetry.d.ts.map +1 -1
  217. package/dist/server/http-response-telemetry.js +160 -27
  218. package/dist/server/http-response-telemetry.js.map +1 -1
  219. package/dist/server/transcribe-voice.d.ts +1 -1
  220. package/dist/styles/rich-markdown-editor.css +1 -510
  221. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +19 -0
  222. package/dist/testing.d.ts +1 -1
  223. package/dist/testing.d.ts.map +1 -1
  224. package/dist/testing.js +1 -1
  225. package/dist/testing.js.map +1 -1
  226. package/dist/vite/client.d.ts.map +1 -1
  227. package/dist/vite/client.js +3 -0
  228. package/dist/vite/client.js.map +1 -1
  229. package/docs/content/agent-native-toolkit.mdx +46 -13
  230. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +79 -55
  231. package/docs/content/locales/ar-SA/toolkit-capability-packages.mdx +21 -0
  232. package/docs/content/locales/ar-SA/toolkit-context-knowledge.mdx +12 -0
  233. package/docs/content/locales/ar-SA/toolkit-editors-canvases.mdx +17 -0
  234. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +82 -54
  235. package/docs/content/locales/de-DE/toolkit-capability-packages.mdx +21 -0
  236. package/docs/content/locales/de-DE/toolkit-context-knowledge.mdx +12 -0
  237. package/docs/content/locales/de-DE/toolkit-editors-canvases.mdx +17 -0
  238. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +81 -52
  239. package/docs/content/locales/es-ES/toolkit-capability-packages.mdx +21 -0
  240. package/docs/content/locales/es-ES/toolkit-context-knowledge.mdx +12 -0
  241. package/docs/content/locales/es-ES/toolkit-editors-canvases.mdx +21 -0
  242. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +84 -54
  243. package/docs/content/locales/fr-FR/toolkit-capability-packages.mdx +21 -0
  244. package/docs/content/locales/fr-FR/toolkit-context-knowledge.mdx +12 -0
  245. package/docs/content/locales/fr-FR/toolkit-editors-canvases.mdx +21 -0
  246. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +69 -62
  247. package/docs/content/locales/hi-IN/toolkit-capability-packages.mdx +21 -0
  248. package/docs/content/locales/hi-IN/toolkit-context-knowledge.mdx +12 -0
  249. package/docs/content/locales/hi-IN/toolkit-editors-canvases.mdx +17 -0
  250. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +69 -62
  251. package/docs/content/locales/ja-JP/toolkit-capability-packages.mdx +21 -0
  252. package/docs/content/locales/ja-JP/toolkit-context-knowledge.mdx +12 -0
  253. package/docs/content/locales/ja-JP/toolkit-editors-canvases.mdx +17 -0
  254. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +69 -62
  255. package/docs/content/locales/ko-KR/toolkit-capability-packages.mdx +21 -0
  256. package/docs/content/locales/ko-KR/toolkit-context-knowledge.mdx +12 -0
  257. package/docs/content/locales/ko-KR/toolkit-editors-canvases.mdx +17 -0
  258. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +82 -54
  259. package/docs/content/locales/pt-BR/toolkit-capability-packages.mdx +21 -0
  260. package/docs/content/locales/pt-BR/toolkit-context-knowledge.mdx +12 -0
  261. package/docs/content/locales/pt-BR/toolkit-editors-canvases.mdx +17 -0
  262. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +69 -62
  263. package/docs/content/locales/zh-CN/toolkit-capability-packages.mdx +21 -0
  264. package/docs/content/locales/zh-CN/toolkit-context-knowledge.mdx +12 -0
  265. package/docs/content/locales/zh-CN/toolkit-editors-canvases.mdx +17 -0
  266. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +69 -62
  267. package/docs/content/locales/zh-TW/toolkit-capability-packages.mdx +21 -0
  268. package/docs/content/locales/zh-TW/toolkit-context-knowledge.mdx +12 -0
  269. package/docs/content/locales/zh-TW/toolkit-editors-canvases.mdx +17 -0
  270. package/docs/content/toolkit-capability-packages.mdx +52 -0
  271. package/docs/content/toolkit-context-knowledge.mdx +46 -0
  272. package/docs/content/toolkit-editors-canvases.mdx +55 -0
  273. package/package.json +27 -26
  274. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +19 -0
  275. package/corpus/core/src/client/rich-markdown-editor/BubbleToolbar.tsx +0 -253
  276. package/corpus/core/src/client/rich-markdown-editor/CodeBlockNode.tsx +0 -258
  277. package/corpus/core/src/client/rich-markdown-editor/DragHandle.ts +0 -1437
  278. package/corpus/core/src/client/rich-markdown-editor/ImageExtension.ts +0 -306
  279. package/corpus/core/src/client/rich-markdown-editor/RichMarkdownEditor.tsx +0 -80
  280. package/corpus/core/src/client/rich-markdown-editor/RunId.ts +0 -61
  281. package/corpus/core/src/client/rich-markdown-editor/SharedRichEditor.tsx +0 -321
  282. package/corpus/core/src/client/rich-markdown-editor/SlashCommandMenu.tsx +0 -310
  283. package/corpus/core/src/client/rich-markdown-editor/extensions.ts +0 -402
  284. package/corpus/core/src/client/rich-markdown-editor/gfmDoc.ts +0 -92
  285. package/corpus/core/src/client/rich-markdown-editor/surgical-apply.ts +0 -192
  286. package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +0 -590
  287. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +0 -37
  288. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +0 -1
  289. package/dist/client/rich-markdown-editor/BubbleToolbar.js +0 -171
  290. package/dist/client/rich-markdown-editor/BubbleToolbar.js.map +0 -1
  291. package/dist/client/rich-markdown-editor/CodeBlockNode.d.ts +0 -49
  292. package/dist/client/rich-markdown-editor/CodeBlockNode.d.ts.map +0 -1
  293. package/dist/client/rich-markdown-editor/CodeBlockNode.js +0 -127
  294. package/dist/client/rich-markdown-editor/CodeBlockNode.js.map +0 -1
  295. package/dist/client/rich-markdown-editor/DragHandle.d.ts +0 -97
  296. package/dist/client/rich-markdown-editor/DragHandle.d.ts.map +0 -1
  297. package/dist/client/rich-markdown-editor/DragHandle.js +0 -1066
  298. package/dist/client/rich-markdown-editor/DragHandle.js.map +0 -1
  299. package/dist/client/rich-markdown-editor/ImageExtension.d.ts +0 -63
  300. package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +0 -1
  301. package/dist/client/rich-markdown-editor/ImageExtension.js +0 -243
  302. package/dist/client/rich-markdown-editor/ImageExtension.js.map +0 -1
  303. package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +0 -51
  304. package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts.map +0 -1
  305. package/dist/client/rich-markdown-editor/RichMarkdownEditor.js +0 -37
  306. package/dist/client/rich-markdown-editor/RichMarkdownEditor.js.map +0 -1
  307. package/dist/client/rich-markdown-editor/RunId.d.ts +0 -28
  308. package/dist/client/rich-markdown-editor/RunId.d.ts.map +0 -1
  309. package/dist/client/rich-markdown-editor/RunId.js +0 -60
  310. package/dist/client/rich-markdown-editor/RunId.js.map +0 -1
  311. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +0 -110
  312. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +0 -1
  313. package/dist/client/rich-markdown-editor/SharedRichEditor.js +0 -144
  314. package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +0 -1
  315. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +0 -41
  316. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +0 -1
  317. package/dist/client/rich-markdown-editor/SlashCommandMenu.js +0 -221
  318. package/dist/client/rich-markdown-editor/SlashCommandMenu.js.map +0 -1
  319. package/dist/client/rich-markdown-editor/extensions.d.ts +0 -178
  320. package/dist/client/rich-markdown-editor/extensions.d.ts.map +0 -1
  321. package/dist/client/rich-markdown-editor/extensions.js +0 -224
  322. package/dist/client/rich-markdown-editor/extensions.js.map +0 -1
  323. package/dist/client/rich-markdown-editor/gfmDoc.d.ts +0 -24
  324. package/dist/client/rich-markdown-editor/gfmDoc.d.ts.map +0 -1
  325. package/dist/client/rich-markdown-editor/gfmDoc.js +0 -83
  326. package/dist/client/rich-markdown-editor/gfmDoc.js.map +0 -1
  327. package/dist/client/rich-markdown-editor/surgical-apply.d.ts +0 -66
  328. package/dist/client/rich-markdown-editor/surgical-apply.d.ts.map +0 -1
  329. package/dist/client/rich-markdown-editor/surgical-apply.js +0 -147
  330. package/dist/client/rich-markdown-editor/surgical-apply.js.map +0 -1
  331. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts +0 -110
  332. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +0 -1
  333. package/dist/client/rich-markdown-editor/useCollabReconcile.js +0 -441
  334. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/client/context-xray/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO/D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAMnE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/C"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/client/context-xray/format.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO/D"}
@@ -23,53 +23,4 @@ export function formatTokens(tokens) {
23
23
  }
24
24
  return String(value);
25
25
  }
26
- export function statusLabel(segment) {
27
- if (segment.protected)
28
- return "Protected";
29
- if (segment.status === "pinned")
30
- return "Pinned";
31
- if (segment.status === "evicted")
32
- return "Evicted";
33
- if (segment.status === "summarized")
34
- return "Summarized";
35
- return "Active";
36
- }
37
- export function groupColor(group) {
38
- if (group === "Pinned")
39
- return "bg-emerald-500";
40
- if (group === "Tool results")
41
- return "bg-amber-500";
42
- if (group === "Files read")
43
- return "bg-sky-500";
44
- if (group === "Thinking")
45
- return "bg-violet-500";
46
- if (group === "Task & instructions")
47
- return "bg-rose-500";
48
- if (group === "System · required")
49
- return "bg-slate-700";
50
- if (group === "System · inherited")
51
- return "bg-indigo-500";
52
- if (group === "System · user")
53
- return "bg-teal-500";
54
- return "bg-slate-400";
55
- }
56
- export function groupFill(group) {
57
- if (group === "Pinned")
58
- return "#10b981";
59
- if (group === "Tool results")
60
- return "#f59e0b";
61
- if (group === "Files read")
62
- return "#0ea5e9";
63
- if (group === "Thinking")
64
- return "#8b5cf6";
65
- if (group === "Task & instructions")
66
- return "#f43f5e";
67
- if (group === "System · required")
68
- return "#334155";
69
- if (group === "System · inherited")
70
- return "#6366f1";
71
- if (group === "System · user")
72
- return "#14b8a6";
73
- return "#94a3b8";
74
- }
75
26
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/client/context-xray/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,wBAAwB,CAAC;IAC9C,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;QAC7B,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA+B;IACzD,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACzD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC;IAChD,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IACpD,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAChD,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,eAAe,CAAC;IACjD,IAAI,KAAK,KAAK,qBAAqB;QAAE,OAAO,aAAa,CAAC;IAC1D,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,cAAc,CAAC;IACzD,IAAI,KAAK,KAAK,oBAAoB;QAAE,OAAO,eAAe,CAAC;IAC3D,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,aAAa,CAAC;IACpD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,KAAK,KAAK,qBAAqB;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,KAAK,KAAK,oBAAoB;QAAE,OAAO,SAAS,CAAC;IACrD,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { getContextWindowForModel } from \"../../agent/model-config.js\";\nimport type { ContextManifestSegment } from \"../../shared/context-xray.js\";\n\n/**\n * Fallback context-window limit used when no model ID is available.\n * Kept as a named export so existing callers that import this constant\n * directly still compile without changes.\n */\nexport const CONTEXT_XRAY_MODEL_LIMIT = 200_000;\n\n/**\n * Resolve the effective context-window limit for the given model ID.\n * Falls back to {@link CONTEXT_XRAY_MODEL_LIMIT} (200 K) when the model is\n * unknown or not provided — matching the pre-existing hard-coded behaviour.\n */\nexport function resolveContextWindow(modelId?: string | null): number {\n if (!modelId) return CONTEXT_XRAY_MODEL_LIMIT;\n return getContextWindowForModel(modelId);\n}\n\nexport function formatTokens(tokens: number | undefined): string {\n const value = Math.max(0, Math.round(tokens ?? 0));\n if (value >= 1000) {\n const compact = value / 1000;\n return `${compact >= 100 ? compact.toFixed(0) : compact.toFixed(1)}k`;\n }\n return String(value);\n}\n\nexport function statusLabel(segment: ContextManifestSegment): string {\n if (segment.protected) return \"Protected\";\n if (segment.status === \"pinned\") return \"Pinned\";\n if (segment.status === \"evicted\") return \"Evicted\";\n if (segment.status === \"summarized\") return \"Summarized\";\n return \"Active\";\n}\n\nexport function groupColor(group: string): string {\n if (group === \"Pinned\") return \"bg-emerald-500\";\n if (group === \"Tool results\") return \"bg-amber-500\";\n if (group === \"Files read\") return \"bg-sky-500\";\n if (group === \"Thinking\") return \"bg-violet-500\";\n if (group === \"Task & instructions\") return \"bg-rose-500\";\n if (group === \"System · required\") return \"bg-slate-700\";\n if (group === \"System · inherited\") return \"bg-indigo-500\";\n if (group === \"System · user\") return \"bg-teal-500\";\n return \"bg-slate-400\";\n}\n\nexport function groupFill(group: string): string {\n if (group === \"Pinned\") return \"#10b981\";\n if (group === \"Tool results\") return \"#f59e0b\";\n if (group === \"Files read\") return \"#0ea5e9\";\n if (group === \"Thinking\") return \"#8b5cf6\";\n if (group === \"Task & instructions\") return \"#f43f5e\";\n if (group === \"System · required\") return \"#334155\";\n if (group === \"System · inherited\") return \"#6366f1\";\n if (group === \"System · user\") return \"#14b8a6\";\n return \"#94a3b8\";\n}\n"]}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/client/context-xray/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,wBAAwB,CAAC;IAC9C,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;QAC7B,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import { getContextWindowForModel } from \"../../agent/model-config.js\";\n\n/**\n * Fallback context-window limit used when no model ID is available.\n * Kept as a named export so existing callers that import this constant\n * directly still compile without changes.\n */\nexport const CONTEXT_XRAY_MODEL_LIMIT = 200_000;\n\n/**\n * Resolve the effective context-window limit for the given model ID.\n * Falls back to {@link CONTEXT_XRAY_MODEL_LIMIT} (200 K) when the model is\n * unknown or not provided — matching the pre-existing hard-coded behaviour.\n */\nexport function resolveContextWindow(modelId?: string | null): number {\n if (!modelId) return CONTEXT_XRAY_MODEL_LIMIT;\n return getContextWindowForModel(modelId);\n}\n\nexport function formatTokens(tokens: number | undefined): string {\n const value = Math.max(0, Math.round(tokens ?? 0));\n if (value >= 1000) {\n const compact = value / 1000;\n return `${compact >= 100 ? compact.toFixed(0) : compact.toFixed(1)}k`;\n }\n return String(value);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"require-session.d.ts","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAe,EACf,SAAS,EACT,MAAc,GACf,EAAE,mBAAmB,qBA6BrB"}
1
+ {"version":3,"file":"require-session.d.ts","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAe,EACf,SAAS,EACT,MAAc,GACf,EAAE,mBAAmB,qBAWrB"}
@@ -59,12 +59,17 @@ export function isOnSignInPage() {
59
59
  return window.location.pathname === agentNativePath("/_agent-native/sign-in");
60
60
  }
61
61
  export function RequireSession({ children, fallback, redirect = true, signedOut, bypass = false, }) {
62
+ if (bypass)
63
+ return _jsx(_Fragment, { children: children });
64
+ return (_jsx(ResolvedSessionGate, { fallback: fallback, redirect: redirect, signedOut: signedOut, children: children }));
65
+ }
66
+ function ResolvedSessionGate({ children, fallback, redirect = true, signedOut, }) {
62
67
  const { session, isLoading } = useSession();
63
68
  // Guard against firing the redirect more than once (effect re-runs, React
64
69
  // StrictMode double-invoke) — a second navigation while the first is in
65
70
  // flight is harmless but noisy.
66
71
  const redirectedRef = useRef(false);
67
- const mustRedirect = !bypass && !isLoading && !session && redirect && !isOnSignInPage();
72
+ const mustRedirect = !isLoading && !session && redirect && !isOnSignInPage();
68
73
  useEffect(() => {
69
74
  if (!mustRedirect)
70
75
  return;
@@ -77,8 +82,6 @@ export function RequireSession({ children, fallback, redirect = true, signedOut,
77
82
  // history — pressing Back after signing in shouldn't bounce here again.
78
83
  window.location.replace(buildSignInReturnHref());
79
84
  }, [mustRedirect]);
80
- if (bypass)
81
- return _jsx(_Fragment, { children: children });
82
85
  // Still resolving, or redirect already in flight: show the loading fallback
83
86
  // rather than flashing app chrome the visitor can't use.
84
87
  if (isLoading)
@@ -1 +1 @@
1
- {"version":3,"file":"require-session.js","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8B9C,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,GAAG,GACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3E,OAAO,GAAG,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,MAAM,GAAG,KAAK,GACM;IACpB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,YAAY,GAChB,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAI,MAAM;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACnC,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,SAAS;QAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;QAC3D,OAAO,4BAAG,SAAS,IAAI,IAAI,GAAI,CAAC;IAClC,CAAC;IACD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["/**\n * Client-side session gate for an authenticated app shell.\n *\n * Wrap a template's private app shell with <RequireSession> so a logged-out\n * visitor is sent to the framework sign-in page instead of being left staring\n * at an infinite loading spinner.\n *\n * Why this exists in addition to the server-side auth guard (`runAuthGuard`,\n * which serves the onboarding/sign-in HTML for unauthenticated requests):\n * the server guard only protects requests that actually reach the Nitro\n * function. A statically-served / CDN-cached SPA shell, or a client-side\n * (React Router) navigation made after the session expired, never re-hits the\n * guard — so the app boots with no session, every data query 401s, and the UI\n * sticks on its loading state forever. This component closes that gap by\n * resolving the session on the client and redirecting when there is none.\n *\n * Place it INSIDE your providers (so the fallback is themed) but AROUND the\n * routed app layout:\n *\n * <AppProviders ...>\n * <RequireSession>\n * <AppLayout><Outlet /></AppLayout>\n * </RequireSession>\n * </AppProviders>\n *\n * Templates with public/anonymous routes (share pages, embeds) must NOT wrap\n * their whole app — gate only the private subtree, or pass `bypass` for the\n * surfaces that authenticate by another mechanism.\n */\nimport React, { useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"./api-path.js\";\nimport { DefaultSpinner } from \"./DefaultSpinner.js\";\nimport { useSession } from \"./use-session.js\";\n\nexport interface RequireSessionProps {\n children: React.ReactNode;\n /**\n * Rendered while the session is being resolved and while a redirect is in\n * flight. Defaults to the framework `<DefaultSpinner />`.\n */\n fallback?: React.ReactNode;\n /**\n * When true (default), unauthenticated visitors are redirected to the\n * framework sign-in entry point (`/_agent-native/sign-in`) with a `return`\n * query pointing back at the current URL — so they land back here once\n * signed in. When false, `signedOut` is rendered instead and no navigation\n * happens.\n */\n redirect?: boolean;\n /**\n * Rendered for unauthenticated visitors when `redirect` is false. Ignored\n * when `redirect` is true.\n */\n signedOut?: React.ReactNode;\n /**\n * Skip the gate entirely and always render children. Use for surfaces that\n * authenticate by another mechanism (e.g. an embed/popout iframe carrying\n * its own token) so they are never bounced to the sign-in page.\n */\n bypass?: boolean;\n}\n\n/** Build the framework sign-in URL that returns to the current location. */\nexport function buildSignInReturnHref(): string {\n const base = agentNativePath(\"/_agent-native/sign-in\");\n if (typeof window === \"undefined\") return base;\n const ret =\n window.location.pathname + window.location.search + window.location.hash;\n return `${base}?return=${encodeURIComponent(ret)}`;\n}\n\n/**\n * True when the browser is already sitting on the framework sign-in entry\n * point. Redirecting to sign-in from here would append the current sign-in\n * URL as a fresh `?return=`, re-encode it, and navigate again — an infinite\n * loop of ever-growing `…sign-in?return=%252F…sign-in%253Freturn%253D…` URLs.\n *\n * This happens when the authenticated app shell (wrapped in `RequireSession`)\n * is served at the sign-in path instead of the framework login HTML — e.g.\n * under a base-path deploy where the SPA shell answers `/<app>/_agent-native/\n * sign-in`. The sign-in page is the framework's job, not the gate's: never\n * redirect to ourselves. Compared against `agentNativePath(...)` so it matches\n * whether or not the app is mounted under a base path.\n */\nexport function isOnSignInPage(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.location.pathname === agentNativePath(\"/_agent-native/sign-in\");\n}\n\nexport function RequireSession({\n children,\n fallback,\n redirect = true,\n signedOut,\n bypass = false,\n}: RequireSessionProps) {\n const { session, isLoading } = useSession();\n // Guard against firing the redirect more than once (effect re-runs, React\n // StrictMode double-invoke) — a second navigation while the first is in\n // flight is harmless but noisy.\n const redirectedRef = useRef(false);\n\n const mustRedirect =\n !bypass && !isLoading && !session && redirect && !isOnSignInPage();\n\n useEffect(() => {\n if (!mustRedirect) return;\n if (redirectedRef.current) return;\n if (typeof window === \"undefined\") return;\n redirectedRef.current = true;\n // `replace` (not `assign`) so the dead authenticated URL doesn't land in\n // history — pressing Back after signing in shouldn't bounce here again.\n window.location.replace(buildSignInReturnHref());\n }, [mustRedirect]);\n\n if (bypass) return <>{children}</>;\n // Still resolving, or redirect already in flight: show the loading fallback\n // rather than flashing app chrome the visitor can't use.\n if (isLoading) return <>{fallback ?? <DefaultSpinner />}</>;\n if (!session) {\n if (redirect) return <>{fallback ?? <DefaultSpinner />}</>;\n return <>{signedOut ?? null}</>;\n }\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"require-session.js","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8B9C,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,GAAG,GACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3E,OAAO,GAAG,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,MAAM,GAAG,KAAK,GACM;IACpB,IAAI,MAAM;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACnC,OAAO,CACL,KAAC,mBAAmB,IAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,YAEnB,QAAQ,GACW,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,SAAS,GAC2B;IACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;IAE7E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,SAAS;QAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;QAC3D,OAAO,4BAAG,SAAS,IAAI,IAAI,GAAI,CAAC;IAClC,CAAC;IACD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["/**\n * Client-side session gate for an authenticated app shell.\n *\n * Wrap a template's private app shell with <RequireSession> so a logged-out\n * visitor is sent to the framework sign-in page instead of being left staring\n * at an infinite loading spinner.\n *\n * Why this exists in addition to the server-side auth guard (`runAuthGuard`,\n * which serves the onboarding/sign-in HTML for unauthenticated requests):\n * the server guard only protects requests that actually reach the Nitro\n * function. A statically-served / CDN-cached SPA shell, or a client-side\n * (React Router) navigation made after the session expired, never re-hits the\n * guard — so the app boots with no session, every data query 401s, and the UI\n * sticks on its loading state forever. This component closes that gap by\n * resolving the session on the client and redirecting when there is none.\n *\n * Place it INSIDE your providers (so the fallback is themed) but AROUND the\n * routed app layout:\n *\n * <AppProviders ...>\n * <RequireSession>\n * <AppLayout><Outlet /></AppLayout>\n * </RequireSession>\n * </AppProviders>\n *\n * Templates with public/anonymous routes (share pages, embeds) must NOT wrap\n * their whole app — gate only the private subtree, or pass `bypass` for the\n * surfaces that authenticate by another mechanism.\n */\nimport React, { useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"./api-path.js\";\nimport { DefaultSpinner } from \"./DefaultSpinner.js\";\nimport { useSession } from \"./use-session.js\";\n\nexport interface RequireSessionProps {\n children: React.ReactNode;\n /**\n * Rendered while the session is being resolved and while a redirect is in\n * flight. Defaults to the framework `<DefaultSpinner />`.\n */\n fallback?: React.ReactNode;\n /**\n * When true (default), unauthenticated visitors are redirected to the\n * framework sign-in entry point (`/_agent-native/sign-in`) with a `return`\n * query pointing back at the current URL — so they land back here once\n * signed in. When false, `signedOut` is rendered instead and no navigation\n * happens.\n */\n redirect?: boolean;\n /**\n * Rendered for unauthenticated visitors when `redirect` is false. Ignored\n * when `redirect` is true.\n */\n signedOut?: React.ReactNode;\n /**\n * Skip the gate entirely and always render children. Use for surfaces that\n * authenticate by another mechanism (e.g. an embed/popout iframe carrying\n * its own token) so they are never bounced to the sign-in page.\n */\n bypass?: boolean;\n}\n\n/** Build the framework sign-in URL that returns to the current location. */\nexport function buildSignInReturnHref(): string {\n const base = agentNativePath(\"/_agent-native/sign-in\");\n if (typeof window === \"undefined\") return base;\n const ret =\n window.location.pathname + window.location.search + window.location.hash;\n return `${base}?return=${encodeURIComponent(ret)}`;\n}\n\n/**\n * True when the browser is already sitting on the framework sign-in entry\n * point. Redirecting to sign-in from here would append the current sign-in\n * URL as a fresh `?return=`, re-encode it, and navigate again — an infinite\n * loop of ever-growing `…sign-in?return=%252F…sign-in%253Freturn%253D…` URLs.\n *\n * This happens when the authenticated app shell (wrapped in `RequireSession`)\n * is served at the sign-in path instead of the framework login HTML — e.g.\n * under a base-path deploy where the SPA shell answers `/<app>/_agent-native/\n * sign-in`. The sign-in page is the framework's job, not the gate's: never\n * redirect to ourselves. Compared against `agentNativePath(...)` so it matches\n * whether or not the app is mounted under a base path.\n */\nexport function isOnSignInPage(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.location.pathname === agentNativePath(\"/_agent-native/sign-in\");\n}\n\nexport function RequireSession({\n children,\n fallback,\n redirect = true,\n signedOut,\n bypass = false,\n}: RequireSessionProps) {\n if (bypass) return <>{children}</>;\n return (\n <ResolvedSessionGate\n fallback={fallback}\n redirect={redirect}\n signedOut={signedOut}\n >\n {children}\n </ResolvedSessionGate>\n );\n}\n\nfunction ResolvedSessionGate({\n children,\n fallback,\n redirect = true,\n signedOut,\n}: Omit<RequireSessionProps, \"bypass\">) {\n const { session, isLoading } = useSession();\n // Guard against firing the redirect more than once (effect re-runs, React\n // StrictMode double-invoke) — a second navigation while the first is in\n // flight is harmless but noisy.\n const redirectedRef = useRef(false);\n\n const mustRedirect = !isLoading && !session && redirect && !isOnSignInPage();\n\n useEffect(() => {\n if (!mustRedirect) return;\n if (redirectedRef.current) return;\n if (typeof window === \"undefined\") return;\n redirectedRef.current = true;\n // `replace` (not `assign`) so the dead authenticated URL doesn't land in\n // history — pressing Back after signing in shouldn't bounce here again.\n window.location.replace(buildSignInReturnHref());\n }, [mustRedirect]);\n\n // Still resolving, or redirect already in flight: show the loading fallback\n // rather than flashing app chrome the visitor can't use.\n if (isLoading) return <>{fallback ?? <DefaultSpinner />}</>;\n if (!session) {\n if (redirect) return <>{fallback ?? <DefaultSpinner />}</>;\n return <>{signedOut ?? null}</>;\n }\n return <>{children}</>;\n}\n"]}
@@ -1,16 +1,5 @@
1
- export { createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, type RichMarkdownDialect, type RichMarkdownEditorPreset, type RichMarkdownCollabUser, type SharedEditorCollab, type SharedEditorFeatures, type CreateSharedEditorExtensionsOptions, } from "./extensions.js";
2
- export { useCollabReconcile, getEditorMarkdown, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, type UseCollabReconcileOptions, type UseCollabReconcileResult, } from "./useCollabReconcile.js";
3
- export { applyDocSurgically, defaultParseValue, diffTopLevel, type TopLevelDiff, } from "./surgical-apply.js";
4
- export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, type SlashCommandItem, type SlashCommandMenuProps, } from "./SlashCommandMenu.js";
5
- export { SharedImage, createImageExtension, pickAndInsertImage, type ImageUploadFn, type SharedImageOptions, } from "./ImageExtension.js";
1
+ export { applyDocSurgically, BubbleToolbar, buildDefaultBubbleItems, createCodeBlockNode, createImageExtension, createImageSlashCommand, createRichMarkdownExtensions, createSharedEditorExtensions, DEFAULT_CODE_LANGUAGES, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR, DEFAULT_SLASH_COMMANDS, defaultParseValue, diffTopLevel, DragHandle, getEditorMarkdown, gfmToProseJSON, MARKDOWN_DIALECT_CONFIG, pickAndInsertImage, proseJSONToGfm, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, RichMarkdownEditor, RunId, RUN_ID_NODE_TYPES, SharedImage, SharedRichEditor, SlashCommandMenu, useCollabReconcile, type BubbleToolbarItem, type BubbleToolbarProps, type CodeBlockClassNames, type CodeLanguageOption, type CreateCodeBlockNodeOptions, type CreateRichMarkdownExtensionsOptions, type CreateSharedEditorExtensionsOptions, type DragHandleDropContext, type DragHandleDropPlacement, type DragHandleOptions, type ImageUploadFn, type RichMarkdownCollabUser, type RichMarkdownDialect, type RichMarkdownEditorPreset, type RichMarkdownEditorProps, type SharedEditorCollab, type SharedEditorFeatures, type SharedImageOptions, type SharedRichEditorProps, type SlashCommandItem, type SlashCommandMenuProps, type TopLevelDiff, type UseCollabReconcileOptions, type UseCollabReconcileResult, } from "@agent-native/toolkit/editor";
6
2
  export { uploadEditorImage } from "./uploadEditorImage.js";
7
- export { BubbleToolbar, buildDefaultBubbleItems, type BubbleToolbarItem, type BubbleToolbarProps, } from "./BubbleToolbar.js";
8
- export { SharedRichEditor, type SharedRichEditorProps, } from "./SharedRichEditor.js";
9
- export { createCodeBlockNode, DEFAULT_CODE_LANGUAGES, type CodeLanguageOption, type CodeBlockClassNames, type CreateCodeBlockNodeOptions, } from "./CodeBlockNode.js";
10
- export { RichMarkdownEditor, createRichMarkdownExtensions, type RichMarkdownEditorProps, type CreateRichMarkdownExtensionsOptions, } from "./RichMarkdownEditor.js";
11
- export { RunId, RUN_ID_NODE_TYPES } from "./RunId.js";
12
- export { gfmToProseJSON, proseJSONToGfm } from "./gfmDoc.js";
13
- export { DragHandle, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR, type DragHandleDropContext, type DragHandleDropPlacement, type DragHandleOptions, } from "./DragHandle.js";
14
3
  export { createRegistryBlockNode, RegistryBlockNodeView, RegistryBlockDataProvider, useRegistryBlockData, type CreateRegistryBlockNodeOptions, type RegistryBlockDataValue, type RegistryBlockSideMapBlock, } from "./RegistryBlockNode.js";
15
4
  export { buildRegistryBlockSlashItems, getRegistryBlockSlashDescription, getRegistryBlockSlashSearchText, type BuildRegistryBlockSlashItemsOptions, } from "./registrySlashCommands.js";
16
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mCAAmC,GACzC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,mCAAmC,GACzC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,EACpC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mCAAmC,GACzC,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,oCAAoC,EACpC,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,sCAAsC,EACtC,kBAAkB,EAClB,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,mCAAmC,EACxC,KAAK,mCAAmC,EACxC,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,mCAAmC,GACzC,MAAM,4BAA4B,CAAC"}
@@ -1,16 +1,5 @@
1
- export { createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, } from "./extensions.js";
2
- export { useCollabReconcile, getEditorMarkdown, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, } from "./useCollabReconcile.js";
3
- export { applyDocSurgically, defaultParseValue, diffTopLevel, } from "./surgical-apply.js";
4
- export { SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, } from "./SlashCommandMenu.js";
5
- export { SharedImage, createImageExtension, pickAndInsertImage, } from "./ImageExtension.js";
1
+ export { applyDocSurgically, BubbleToolbar, buildDefaultBubbleItems, createCodeBlockNode, createImageExtension, createImageSlashCommand, createRichMarkdownExtensions, createSharedEditorExtensions, DEFAULT_CODE_LANGUAGES, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR, DEFAULT_SLASH_COMMANDS, defaultParseValue, diffTopLevel, DragHandle, getEditorMarkdown, gfmToProseJSON, MARKDOWN_DIALECT_CONFIG, pickAndInsertImage, proseJSONToGfm, RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION, RichMarkdownEditor, RunId, RUN_ID_NODE_TYPES, SharedImage, SharedRichEditor, SlashCommandMenu, useCollabReconcile, } from "@agent-native/toolkit/editor";
6
2
  export { uploadEditorImage } from "./uploadEditorImage.js";
7
- export { BubbleToolbar, buildDefaultBubbleItems, } from "./BubbleToolbar.js";
8
- export { SharedRichEditor, } from "./SharedRichEditor.js";
9
- export { createCodeBlockNode, DEFAULT_CODE_LANGUAGES, } from "./CodeBlockNode.js";
10
- export { RichMarkdownEditor, createRichMarkdownExtensions, } from "./RichMarkdownEditor.js";
11
- export { RunId, RUN_ID_NODE_TYPES } from "./RunId.js";
12
- export { gfmToProseJSON, proseJSONToGfm } from "./gfmDoc.js";
13
- export { DragHandle, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR, } from "./DragHandle.js";
14
3
  export { createRegistryBlockNode, RegistryBlockNodeView, RegistryBlockDataProvider, useRegistryBlockData, } from "./RegistryBlockNode.js";
15
4
  export { buildRegistryBlockSlashItems, getRegistryBlockSlashDescription, getRegistryBlockSlashSearchText, } from "./registrySlashCommands.js";
16
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,GAOxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sCAAsC,GAGvC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAEb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,GAGxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,GAG7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,oCAAoC,GAIrC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,GAIrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,GAEhC,MAAM,4BAA4B,CAAC","sourcesContent":["export {\n createSharedEditorExtensions,\n MARKDOWN_DIALECT_CONFIG,\n type RichMarkdownDialect,\n type RichMarkdownEditorPreset,\n type RichMarkdownCollabUser,\n type SharedEditorCollab,\n type SharedEditorFeatures,\n type CreateSharedEditorExtensionsOptions,\n} from \"./extensions.js\";\nexport {\n useCollabReconcile,\n getEditorMarkdown,\n RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION,\n type UseCollabReconcileOptions,\n type UseCollabReconcileResult,\n} from \"./useCollabReconcile.js\";\nexport {\n applyDocSurgically,\n defaultParseValue,\n diffTopLevel,\n type TopLevelDiff,\n} from \"./surgical-apply.js\";\nexport {\n SlashCommandMenu,\n DEFAULT_SLASH_COMMANDS,\n createImageSlashCommand,\n type SlashCommandItem,\n type SlashCommandMenuProps,\n} from \"./SlashCommandMenu.js\";\nexport {\n SharedImage,\n createImageExtension,\n pickAndInsertImage,\n type ImageUploadFn,\n type SharedImageOptions,\n} from \"./ImageExtension.js\";\nexport { uploadEditorImage } from \"./uploadEditorImage.js\";\nexport {\n BubbleToolbar,\n buildDefaultBubbleItems,\n type BubbleToolbarItem,\n type BubbleToolbarProps,\n} from \"./BubbleToolbar.js\";\nexport {\n SharedRichEditor,\n type SharedRichEditorProps,\n} from \"./SharedRichEditor.js\";\nexport {\n createCodeBlockNode,\n DEFAULT_CODE_LANGUAGES,\n type CodeLanguageOption,\n type CodeBlockClassNames,\n type CreateCodeBlockNodeOptions,\n} from \"./CodeBlockNode.js\";\nexport {\n RichMarkdownEditor,\n createRichMarkdownExtensions,\n type RichMarkdownEditorProps,\n type CreateRichMarkdownExtensionsOptions,\n} from \"./RichMarkdownEditor.js\";\nexport { RunId, RUN_ID_NODE_TYPES } from \"./RunId.js\";\nexport { gfmToProseJSON, proseJSONToGfm } from \"./gfmDoc.js\";\nexport {\n DragHandle,\n DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,\n type DragHandleDropContext,\n type DragHandleDropPlacement,\n type DragHandleOptions,\n} from \"./DragHandle.js\";\nexport {\n createRegistryBlockNode,\n RegistryBlockNodeView,\n RegistryBlockDataProvider,\n useRegistryBlockData,\n type CreateRegistryBlockNodeOptions,\n type RegistryBlockDataValue,\n type RegistryBlockSideMapBlock,\n} from \"./RegistryBlockNode.js\";\nexport {\n buildRegistryBlockSlashItems,\n getRegistryBlockSlashDescription,\n getRegistryBlockSlashSearchText,\n type BuildRegistryBlockSlashItemsOptions,\n} from \"./registrySlashCommands.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,oCAAoC,EACpC,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,sCAAsC,EACtC,kBAAkB,EAClB,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GAyBnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,GAIrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,GAEhC,MAAM,4BAA4B,CAAC","sourcesContent":["export {\n applyDocSurgically,\n BubbleToolbar,\n buildDefaultBubbleItems,\n createCodeBlockNode,\n createImageExtension,\n createImageSlashCommand,\n createRichMarkdownExtensions,\n createSharedEditorExtensions,\n DEFAULT_CODE_LANGUAGES,\n DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,\n DEFAULT_SLASH_COMMANDS,\n defaultParseValue,\n diffTopLevel,\n DragHandle,\n getEditorMarkdown,\n gfmToProseJSON,\n MARKDOWN_DIALECT_CONFIG,\n pickAndInsertImage,\n proseJSONToGfm,\n RICH_MARKDOWN_PROGRAMMATIC_TRANSACTION,\n RichMarkdownEditor,\n RunId,\n RUN_ID_NODE_TYPES,\n SharedImage,\n SharedRichEditor,\n SlashCommandMenu,\n useCollabReconcile,\n type BubbleToolbarItem,\n type BubbleToolbarProps,\n type CodeBlockClassNames,\n type CodeLanguageOption,\n type CreateCodeBlockNodeOptions,\n type CreateRichMarkdownExtensionsOptions,\n type CreateSharedEditorExtensionsOptions,\n type DragHandleDropContext,\n type DragHandleDropPlacement,\n type DragHandleOptions,\n type ImageUploadFn,\n type RichMarkdownCollabUser,\n type RichMarkdownDialect,\n type RichMarkdownEditorPreset,\n type RichMarkdownEditorProps,\n type SharedEditorCollab,\n type SharedEditorFeatures,\n type SharedImageOptions,\n type SharedRichEditorProps,\n type SlashCommandItem,\n type SlashCommandMenuProps,\n type TopLevelDiff,\n type UseCollabReconcileOptions,\n type UseCollabReconcileResult,\n} from \"@agent-native/toolkit/editor\";\n\nexport { uploadEditorImage } from \"./uploadEditorImage.js\";\nexport {\n createRegistryBlockNode,\n RegistryBlockNodeView,\n RegistryBlockDataProvider,\n useRegistryBlockData,\n type CreateRegistryBlockNodeOptions,\n type RegistryBlockDataValue,\n type RegistryBlockSideMapBlock,\n} from \"./RegistryBlockNode.js\";\nexport {\n buildRegistryBlockSlashItems,\n getRegistryBlockSlashDescription,\n getRegistryBlockSlashSearchText,\n type BuildRegistryBlockSlashItemsOptions,\n} from \"./registrySlashCommands.js\";\n"]}
@@ -1,4 +1,4 @@
1
- import type { ImageUploadFn } from "./ImageExtension.js";
1
+ import type { ImageUploadFn } from "@agent-native/toolkit/editor";
2
2
  /**
3
3
  * The shared editor's default image uploader: upload a picked / pasted /
4
4
  * dropped image File through the framework `upload-image` action and return the
@@ -1 +1 @@
1
- {"version":3,"file":"uploadEditorImage.d.ts","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/uploadEditorImage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgCzD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAsB/B,CAAC"}
1
+ {"version":3,"file":"uploadEditorImage.d.ts","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/uploadEditorImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAkClE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAsB/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadEditorImage.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/uploadEditorImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CACpB,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAkB,KAAK,EAAE,IAAU,EAAE,EAAE;IACnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAA0B,cAAc,EAAE;QACvE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,MAAM,EAAE,KAAK;YACX,qFAAqF,CACxF,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC,CAAC","sourcesContent":["import { callAction } from \"../use-action.js\";\nimport type { ImageUploadFn } from \"./ImageExtension.js\";\n\n/**\n * Read a {@link File} as a base64 data URL (`data:image/...;base64,...`).\n *\n * The framework `upload-image` action accepts a data URL (`data`) or a remote\n * URL (`url`) — not raw multipart — so a browser file-picker must convert the\n * File to a data URL first.\n */\nfunction fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n resolve(result);\n } else {\n reject(new Error(\"Failed to read image file.\"));\n }\n };\n reader.onerror = () =>\n reject(reader.error ?? new Error(\"Failed to read image file.\"));\n reader.readAsDataURL(file);\n });\n}\n\ninterface UploadImageActionResult {\n url?: string;\n error?: string;\n configured?: boolean;\n}\n\n/**\n * The shared editor's default image uploader: upload a picked / pasted /\n * dropped image File through the framework `upload-image` action and return the\n * hosted CDN URL.\n *\n * This is the {@link ImageUploadFn} embedders pass to the shared image block so\n * any app gets a real uploading image block with zero per-app upload code. The\n * action re-hosts the bytes on the configured provider (Builder.io by default),\n * is session-scoped, and returns a stable `![alt](url)` source — so a plan's\n * inserted image autosaves as plain markdown through the existing\n * `update-rich-text` path with no new persistence channel.\n *\n * @throws when the file cannot be read, the action returns no URL, or upload is\n * not configured (with the action's \"connect Builder.io\" guidance).\n */\nexport const uploadEditorImage: ImageUploadFn = async (file: File) => {\n if (!file.type.startsWith(\"image/\")) {\n throw new Error(\"Only image files can be uploaded.\");\n }\n\n const dataUrl = await fileToDataUrl(file);\n\n const result = await callAction<UploadImageActionResult>(\"upload-image\", {\n data: dataUrl,\n filename: file.name || undefined,\n });\n\n if (!result || typeof result.url !== \"string\" || !result.url) {\n throw new Error(\n result?.error ||\n \"Image upload failed. Connect Builder.io in Settings → File uploads, then try again.\",\n );\n }\n\n // Use the filename (sans extension) as a reasonable default alt text.\n const alt = file.name ? file.name.replace(/\\.[^./\\\\]+$/, \"\") : \"\";\n return { src: result.url, alt };\n};\n"]}
1
+ {"version":3,"file":"uploadEditorImage.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/uploadEditorImage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CACpB,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAkB,KAAK,EAAE,IAAU,EAAE,EAAE;IACnE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAA0B,cAAc,EAAE;QACvE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,MAAM,EAAE,KAAK;YACX,qFAAqF,CACxF,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC,CAAC","sourcesContent":["import type { ImageUploadFn } from \"@agent-native/toolkit/editor\";\n\nimport { callAction } from \"../use-action.js\";\n\n/**\n * Read a {@link File} as a base64 data URL (`data:image/...;base64,...`).\n *\n * The framework `upload-image` action accepts a data URL (`data`) or a remote\n * URL (`url`) — not raw multipart — so a browser file-picker must convert the\n * File to a data URL first.\n */\nfunction fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === \"string\") {\n resolve(result);\n } else {\n reject(new Error(\"Failed to read image file.\"));\n }\n };\n reader.onerror = () =>\n reject(reader.error ?? new Error(\"Failed to read image file.\"));\n reader.readAsDataURL(file);\n });\n}\n\ninterface UploadImageActionResult {\n url?: string;\n error?: string;\n configured?: boolean;\n}\n\n/**\n * The shared editor's default image uploader: upload a picked / pasted /\n * dropped image File through the framework `upload-image` action and return the\n * hosted CDN URL.\n *\n * This is the {@link ImageUploadFn} embedders pass to the shared image block so\n * any app gets a real uploading image block with zero per-app upload code. The\n * action re-hosts the bytes on the configured provider (Builder.io by default),\n * is session-scoped, and returns a stable `![alt](url)` source — so a plan's\n * inserted image autosaves as plain markdown through the existing\n * `update-rich-text` path with no new persistence channel.\n *\n * @throws when the file cannot be read, the action returns no URL, or upload is\n * not configured (with the action's \"connect Builder.io\" guidance).\n */\nexport const uploadEditorImage: ImageUploadFn = async (file: File) => {\n if (!file.type.startsWith(\"image/\")) {\n throw new Error(\"Only image files can be uploaded.\");\n }\n\n const dataUrl = await fileToDataUrl(file);\n\n const result = await callAction<UploadImageActionResult>(\"upload-image\", {\n data: dataUrl,\n filename: file.name || undefined,\n });\n\n if (!result || typeof result.url !== \"string\" || !result.url) {\n throw new Error(\n result?.error ||\n \"Image upload failed. Connect Builder.io in Settings → File uploads, then try again.\",\n );\n }\n\n // Use the filename (sans extension) as a reasonable default alt text.\n const alt = file.name ? file.name.replace(/\\.[^./\\\\]+$/, \"\") : \"\";\n return { src: result.url, alt };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-action.d.ts","sourceRoot":"","sources":["../../src/client/use-action.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAmC/B,mCAAmC;AACnC,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,OAAO,GACb,OAAO,CAaT;AAED,+CAA+C;AAC/C,eAAO,MAAM,8BAA8B,gCAA0B,CAAC;AAwBtE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzE;AAMD;;;;;GAKG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,yBAAyB;KAAG;CACvC;AAED,MAAM,WAAW,cAAe,SAAQ,yBAAyB;CAAG;AAEpE,2FAA2F;AAC3F,KAAK,UAAU,GAAG,MAAM,cAAc,SAAS,KAAK,GAChD,MAAM,GACN,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEpD,8EAA8E;AAC9E,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,cAAc,GAChE,cAAc,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC3C,CAAC,GACD,GAAG,GACL,GAAG,CAAC;AAER,iGAAiG;AACjG,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,cAAc,GAChE,cAAc,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC3C,CAAC,GACD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACrB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,MAAM,CAMR;AAmBD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,QAAS,CAAC;AA+LzD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAG,SAAS,EACnB,KAAK,SAAS,UAAU,GAAG,UAAU,EAErC,UAAU,EAAE,KAAK,EACjB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,OAAO,SAAS,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAOpE;AAED,MAAM,MAAM,kCAAkC,GAC1C,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,yBAAyB,CAAC,OAAO,IACzC;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B,GACD;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kCAAkC,CAAC;IAC3C,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC;AAEN;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAG,SAAS,EACnB,KAAK,SAAS,UAAU,GAAG,UAAU,EAErC,UAAU,EAAE,KAAK,EACjB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAM,GACpD,yBAAyB,CAC1B,OAAO,SAAS,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAC1D,CAwCA;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,OAAO,GAAG,SAAS,EACnB,KAAK,SAAS,UAAU,GAAG,UAAU,EAErC,UAAU,EAAE,KAAK,EACjB,MAAM,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAC5B,OAAO,CAAC,EAAE,IAAI,CACZ,eAAe,CAAC,OAAO,SAAS,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAC1E,UAAU,GAAG,SAAS,CACvB,6HAcF;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,GAAG,SAAS,EACjB,UAAU,GAAG,SAAS,EACtB,KAAK,SAAS,UAAU,GAAG,UAAU,EAErC,UAAU,EAAE,KAAK,EACjB,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAChB,KAAK,SAAS,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,EACrD,KAAK,EACL,UAAU,SAAS,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,UAAU,CAChE,EACD,YAAY,CACb,GAAG;IACF,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,6LA2BF"}
1
+ {"version":3,"file":"use-action.d.ts","sourceRoot":"","sources":["../../src/client/use-action.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@
22
22
  * compatibility.
23
23
  */
24
24
  import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
25
+ import { trackEvent } from "./analytics.js";
25
26
  import { agentNativePath } from "./api-path.js";
26
27
  import { getBrowserTabId } from "./browser-tab-id.js";
27
28
  import { ensureEmbedAuthFetchInterceptor } from "./embed-auth.js";
@@ -156,7 +157,7 @@ function utf8ByteLength(value) {
156
157
  }
157
158
  return bytes;
158
159
  }
159
- async function actionFetch(name, method, params, options) {
160
+ async function performActionFetch(name, method, params, options) {
160
161
  ensureEmbedAuthFetchInterceptor();
161
162
  let url = `${ACTION_PREFIX}/${name}`;
162
163
  const headers = {
@@ -231,6 +232,7 @@ async function actionFetch(name, method, params, options) {
231
232
  try {
232
233
  try {
233
234
  res = await fetch(url, init);
235
+ options?.onResponse?.(res);
234
236
  }
235
237
  catch (err) {
236
238
  if (timedOut)
@@ -314,6 +316,120 @@ async function actionFetch(name, method, params, options) {
314
316
  }
315
317
  return (data ?? null);
316
318
  }
319
+ function actionTelemetryNow() {
320
+ return typeof performance !== "undefined" ? performance.now() : Date.now();
321
+ }
322
+ function parseServerTiming(response) {
323
+ const timings = new Map();
324
+ const value = response?.headers.get("server-timing");
325
+ if (!value)
326
+ return timings;
327
+ for (const entry of value.split(",")) {
328
+ const [rawName, ...params] = entry.trim().split(";");
329
+ const name = rawName?.trim();
330
+ if (!name)
331
+ continue;
332
+ const duration = params
333
+ .map((param) => /^dur=(.+)$/i.exec(param.trim())?.[1])
334
+ .find(Boolean);
335
+ const parsed = duration === undefined ? NaN : Number(duration);
336
+ if (Number.isFinite(parsed))
337
+ timings.set(name, parsed);
338
+ }
339
+ return timings;
340
+ }
341
+ function shouldTrackActionResponse(error, durationMs, response) {
342
+ if (error || durationMs >= 1_000)
343
+ return true;
344
+ if (response && response.status >= 400 && response.status < 500)
345
+ return true;
346
+ if (/\bstartup(?:-db)?\s*;/i.test(response?.headers.get("server-timing") ?? "")) {
347
+ return true;
348
+ }
349
+ const raw = import.meta.env
350
+ ?.VITE_AGENT_NATIVE_ACTION_TELEMETRY_SAMPLE_RATE;
351
+ const parsed = raw === undefined ? 0.1 : Number(raw);
352
+ const rate = Number.isFinite(parsed) ? Math.max(0, Math.min(1, parsed)) : 0.1;
353
+ return Math.random() < rate;
354
+ }
355
+ async function actionFetch(name, method, params, options) {
356
+ const startedAt = actionTelemetryNow();
357
+ let response;
358
+ let responseAt;
359
+ let error;
360
+ try {
361
+ return await performActionFetch(name, method, params, {
362
+ ...options,
363
+ onResponse: (nextResponse) => {
364
+ response = nextResponse;
365
+ responseAt = actionTelemetryNow();
366
+ },
367
+ });
368
+ }
369
+ catch (caught) {
370
+ error = caught;
371
+ throw caught;
372
+ }
373
+ finally {
374
+ try {
375
+ const completedAt = actionTelemetryNow();
376
+ const durationMs = Math.max(0, completedAt - startedAt);
377
+ if (shouldTrackActionResponse(error, durationMs, response)) {
378
+ const ttfbMs = responseAt === undefined
379
+ ? undefined
380
+ : Math.max(0, responseAt - startedAt);
381
+ const serverTiming = parseServerTiming(response);
382
+ const serverDurationMs = serverTiming.get("app");
383
+ const errorStatus = Number(error?.status);
384
+ const statusCode = response?.status ??
385
+ (Number.isFinite(errorStatus) ? errorStatus : undefined);
386
+ const timedOut = error?.timedOut === true;
387
+ const cancelled = options?.signal?.aborted === true && !timedOut;
388
+ const contentLength = Number(response?.headers.get("content-length"));
389
+ trackEvent("action.response", {
390
+ request_id: response?.headers.get("x-agent-native-request-id") ?? undefined,
391
+ action: name,
392
+ method,
393
+ status_code: statusCode,
394
+ status_class: statusCode === undefined
395
+ ? "network"
396
+ : `${Math.floor(statusCode / 100)}xx`,
397
+ success: !error,
398
+ outcome: !error
399
+ ? "success"
400
+ : timedOut
401
+ ? "timeout"
402
+ : cancelled
403
+ ? "cancelled"
404
+ : response
405
+ ? "http-error"
406
+ : "network-error",
407
+ duration_ms: Math.round(durationMs),
408
+ ttfb_ms: ttfbMs === undefined ? undefined : Math.round(ttfbMs),
409
+ body_ms: ttfbMs === undefined ? undefined : Math.round(durationMs - ttfbMs),
410
+ server_duration_ms: serverDurationMs === undefined
411
+ ? undefined
412
+ : Math.round(serverDurationMs),
413
+ network_overhead_ms: ttfbMs === undefined || serverDurationMs === undefined
414
+ ? undefined
415
+ : Math.max(0, Math.round(ttfbMs - serverDurationMs)),
416
+ framework_ready_wait_ms: serverTiming.get("startup"),
417
+ db_operation_wall_ms: serverTiming.get("db"),
418
+ db_connect_total_ms: serverTiming.get("db-connect"),
419
+ db_slowest_operation_ms: serverTiming.get("db-slowest"),
420
+ startup_db_operation_wall_ms: serverTiming.get("startup-db"),
421
+ startup_db_connect_total_ms: serverTiming.get("startup-db-connect"),
422
+ response_bytes: Number.isFinite(contentLength) && contentLength >= 0
423
+ ? contentLength
424
+ : undefined,
425
+ });
426
+ }
427
+ }
428
+ catch {
429
+ // Performance telemetry must never change the action result.
430
+ }
431
+ }
432
+ }
317
433
  /**
318
434
  * Imperatively call an action from browser/client code.
319
435
  *