@blade-hq/agent-react 2612.0.0-beta.4 → 2612.0.0-beta.6

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 (1147) hide show
  1. package/README.md +18 -0
  2. package/dist/chat/ChatPanel.d.ts +1 -3
  3. package/dist/chat/LightComposer.d.ts +1 -1
  4. package/dist/chat/ai-elements/reasoning.d.ts +4 -4
  5. package/dist/chat/customization.d.ts +1 -5
  6. package/dist/chat/lib/citations.d.ts +6 -2
  7. package/dist/chat/runtime/actions.d.ts +2 -0
  8. package/dist/chat/runtime/composer-channels.d.ts +4 -0
  9. package/dist/chat/runtime/input-cache-reset.d.ts +1 -1
  10. package/dist/chat/runtime/input-history-storage.d.ts +2 -0
  11. package/dist/{chunk-WCMGQJLE.js → chunk-IRBOKMF5.js} +2 -2
  12. package/dist/{chunk-FQQJP2GJ.js → chunk-UKQFSXGC.js} +168 -40
  13. package/dist/chunk-UKQFSXGC.js.map +1 -0
  14. package/dist/{chunk-5J54S5BK.js → chunk-XJLFFRQP.js} +401 -182
  15. package/dist/chunk-XJLFFRQP.js.map +1 -0
  16. package/dist/components/ChatInput.d.ts +3 -1
  17. package/dist/components/TopicAssetSubmitDialog.d.ts +14 -0
  18. package/dist/components/plugin-connector.d.ts +1 -0
  19. package/dist/embed/entry.d.ts +2 -0
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.js +8 -4
  22. package/dist/internal.d.ts +2 -0
  23. package/dist/internal.js +7 -3
  24. package/dist/internal.js.map +1 -1
  25. package/dist/lib/agent-computer-command.d.ts +1 -3
  26. package/dist/rich-input/ChatInput.d.ts +1 -1
  27. package/dist/rich-input/FileCompletionMenu.d.ts +4 -2
  28. package/dist/rich-input/SkillStatusBar.d.ts +2 -4
  29. package/dist/rich-input/extensions/plugin-mention.d.ts +15 -0
  30. package/dist/rich-input/extensions/skill-mention.d.ts +0 -1
  31. package/dist/rich-input/extensions/topic-asset-mention.d.ts +13 -0
  32. package/dist/rich-input/index.d.ts +6 -0
  33. package/dist/rich-input/lib/composer-content.d.ts +10 -1
  34. package/dist/rich-input/lib/input-history-document.d.ts +3 -0
  35. package/dist/rich-input/lib/plugin-suggestions.d.ts +7 -0
  36. package/dist/rich-input/lib/reference-candidates.d.ts +30 -0
  37. package/dist/rich-input/lib/topic-asset-suggestions.d.ts +6 -0
  38. package/dist/rich-input/use-input-history.d.ts +8 -8
  39. package/dist/rich-input/use-reference-candidates.d.ts +8 -0
  40. package/dist/rich-input.js +6404 -6008
  41. package/dist/rich-input.js.map +1 -1
  42. package/dist/style.full.css +1 -1
  43. package/node_modules/@floating-ui/core/LICENSE +20 -0
  44. package/node_modules/@floating-ui/core/README.md +4 -0
  45. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs +1 -0
  46. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs +1184 -0
  47. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts +531 -0
  48. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.ts +531 -0
  49. package/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js +1058 -0
  50. package/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +1058 -0
  51. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.js +1203 -0
  52. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.min.js +1 -0
  53. package/node_modules/@floating-ui/core/package.json +63 -0
  54. package/node_modules/@floating-ui/dom/LICENSE +20 -0
  55. package/node_modules/@floating-ui/dom/README.md +4 -0
  56. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs +1 -0
  57. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs +956 -0
  58. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts +358 -0
  59. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.ts +358 -0
  60. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +781 -0
  61. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +781 -0
  62. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js +975 -0
  63. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.js +1 -0
  64. package/node_modules/@floating-ui/dom/package.json +71 -0
  65. package/node_modules/@floating-ui/utils/LICENSE +20 -0
  66. package/node_modules/@floating-ui/utils/README.md +4 -0
  67. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts +103 -0
  68. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.ts +103 -0
  69. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts +47 -0
  70. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.ts +47 -0
  71. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.esm.js +165 -0
  72. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +165 -0
  73. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.js +192 -0
  74. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.min.js +1 -0
  75. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.esm.js +136 -0
  76. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +136 -0
  77. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.umd.js +167 -0
  78. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.umd.min.js +1 -0
  79. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.d.ts +47 -0
  80. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.esm.js +165 -0
  81. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.umd.js +192 -0
  82. package/node_modules/@floating-ui/utils/dom/package.json +6 -0
  83. package/node_modules/@floating-ui/utils/package.json +70 -0
  84. package/node_modules/@radix-ui/primitive/LICENSE +21 -0
  85. package/node_modules/@radix-ui/primitive/README.md +3 -0
  86. package/node_modules/@radix-ui/primitive/dist/index.d.mts +20 -0
  87. package/node_modules/@radix-ui/primitive/dist/index.d.ts +20 -0
  88. package/node_modules/@radix-ui/primitive/dist/index.js +76 -0
  89. package/node_modules/@radix-ui/primitive/dist/index.js.map +7 -0
  90. package/node_modules/@radix-ui/primitive/dist/index.mjs +53 -0
  91. package/node_modules/@radix-ui/primitive/dist/index.mjs.map +7 -0
  92. package/node_modules/@radix-ui/primitive/package.json +47 -0
  93. package/node_modules/@radix-ui/react-collapsible/LICENSE +21 -0
  94. package/node_modules/@radix-ui/react-collapsible/README.md +3 -0
  95. package/node_modules/@radix-ui/react-collapsible/dist/index.d.mts +33 -0
  96. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts +33 -0
  97. package/node_modules/@radix-ui/react-collapsible/dist/index.js +187 -0
  98. package/node_modules/@radix-ui/react-collapsible/dist/index.js.map +7 -0
  99. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs +155 -0
  100. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs.map +7 -0
  101. package/node_modules/@radix-ui/react-collapsible/package.json +75 -0
  102. package/node_modules/@radix-ui/react-compose-refs/README.md +13 -0
  103. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.mts +15 -0
  104. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts +15 -0
  105. package/node_modules/@radix-ui/react-compose-refs/dist/index.js +74 -0
  106. package/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +7 -0
  107. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs +41 -0
  108. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.map +7 -0
  109. package/node_modules/@radix-ui/react-compose-refs/package.json +75 -0
  110. package/node_modules/@radix-ui/react-context/README.md +13 -0
  111. package/node_modules/@radix-ui/react-context/dist/index.d.mts +21 -0
  112. package/node_modules/@radix-ui/react-context/dist/index.d.ts +21 -0
  113. package/node_modules/@radix-ui/react-context/dist/index.js +114 -0
  114. package/node_modules/@radix-ui/react-context/dist/index.js.map +7 -0
  115. package/node_modules/@radix-ui/react-context/dist/index.mjs +81 -0
  116. package/node_modules/@radix-ui/react-context/dist/index.mjs.map +7 -0
  117. package/node_modules/@radix-ui/react-context/package.json +75 -0
  118. package/node_modules/@radix-ui/react-id/README.md +13 -0
  119. package/node_modules/@radix-ui/react-id/dist/index.d.mts +3 -0
  120. package/node_modules/@radix-ui/react-id/dist/index.d.ts +3 -0
  121. package/node_modules/@radix-ui/react-id/dist/index.js +49 -0
  122. package/node_modules/@radix-ui/react-id/dist/index.js.map +7 -0
  123. package/node_modules/@radix-ui/react-id/dist/index.mjs +16 -0
  124. package/node_modules/@radix-ui/react-id/dist/index.mjs.map +7 -0
  125. package/node_modules/@radix-ui/react-id/package.json +78 -0
  126. package/node_modules/@radix-ui/react-presence/LICENSE +21 -0
  127. package/node_modules/@radix-ui/react-presence/README.md +3 -0
  128. package/node_modules/@radix-ui/react-presence/dist/index.d.mts +12 -0
  129. package/node_modules/@radix-ui/react-presence/dist/index.d.ts +12 -0
  130. package/node_modules/@radix-ui/react-presence/dist/index.js +171 -0
  131. package/node_modules/@radix-ui/react-presence/dist/index.js.map +7 -0
  132. package/node_modules/@radix-ui/react-presence/dist/index.mjs +139 -0
  133. package/node_modules/@radix-ui/react-presence/dist/index.mjs.map +7 -0
  134. package/node_modules/@radix-ui/react-presence/package.json +69 -0
  135. package/node_modules/@radix-ui/react-primitive/LICENSE +21 -0
  136. package/node_modules/@radix-ui/react-primitive/README.md +3 -0
  137. package/node_modules/@radix-ui/react-primitive/dist/index.d.mts +52 -0
  138. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts +52 -0
  139. package/node_modules/@radix-ui/react-primitive/dist/index.js +80 -0
  140. package/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -0
  141. package/node_modules/@radix-ui/react-primitive/dist/index.mjs +47 -0
  142. package/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -0
  143. package/node_modules/@radix-ui/react-primitive/package.json +68 -0
  144. package/node_modules/@radix-ui/react-slot/LICENSE +21 -0
  145. package/node_modules/@radix-ui/react-slot/README.md +3 -0
  146. package/node_modules/@radix-ui/react-slot/dist/index.d.mts +17 -0
  147. package/node_modules/@radix-ui/react-slot/dist/index.d.ts +17 -0
  148. package/node_modules/@radix-ui/react-slot/dist/index.js +138 -0
  149. package/node_modules/@radix-ui/react-slot/dist/index.js.map +7 -0
  150. package/node_modules/@radix-ui/react-slot/dist/index.mjs +105 -0
  151. package/node_modules/@radix-ui/react-slot/dist/index.mjs.map +7 -0
  152. package/node_modules/@radix-ui/react-slot/package.json +63 -0
  153. package/node_modules/@radix-ui/react-use-controllable-state/LICENSE +21 -0
  154. package/node_modules/@radix-ui/react-use-controllable-state/README.md +3 -0
  155. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.mts +40 -0
  156. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts +40 -0
  157. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +169 -0
  158. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +7 -0
  159. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs +136 -0
  160. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.map +7 -0
  161. package/node_modules/@radix-ui/react-use-controllable-state/package.json +64 -0
  162. package/node_modules/@radix-ui/react-use-effect-event/LICENSE +21 -0
  163. package/node_modules/@radix-ui/react-use-effect-event/README.md +5 -0
  164. package/node_modules/@radix-ui/react-use-effect-event/dist/index.d.mts +8 -0
  165. package/node_modules/@radix-ui/react-use-effect-event/dist/index.d.ts +8 -0
  166. package/node_modules/@radix-ui/react-use-effect-event/dist/index.js +60 -0
  167. package/node_modules/@radix-ui/react-use-effect-event/dist/index.js.map +7 -0
  168. package/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs +27 -0
  169. package/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs.map +7 -0
  170. package/node_modules/@radix-ui/react-use-effect-event/package.json +65 -0
  171. package/node_modules/@radix-ui/react-use-effect-event/src/index.ts +1 -0
  172. package/node_modules/@radix-ui/react-use-effect-event/src/use-effect-event.tsx +36 -0
  173. package/node_modules/@radix-ui/react-use-layout-effect/README.md +13 -0
  174. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.mts +12 -0
  175. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts +12 -0
  176. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +41 -0
  177. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +7 -0
  178. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +8 -0
  179. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.map +7 -0
  180. package/node_modules/@radix-ui/react-use-layout-effect/package.json +75 -0
  181. package/node_modules/@remirror/core-constants/LICENSE +21 -0
  182. package/node_modules/@remirror/core-constants/dist/_tsup-dts-rollup.d.cts +612 -0
  183. package/node_modules/@remirror/core-constants/dist/_tsup-dts-rollup.d.ts +612 -0
  184. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.cjs +314 -0
  185. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.d.cts +20 -0
  186. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.d.ts +20 -0
  187. package/node_modules/@remirror/core-constants/dist/remirror-core-constants.js +269 -0
  188. package/node_modules/@remirror/core-constants/dist-types/core-constants.d.ts +431 -0
  189. package/node_modules/@remirror/core-constants/dist-types/error-constants.d.ts +119 -0
  190. package/node_modules/@remirror/core-constants/dist-types/index.d.ts +2 -0
  191. package/node_modules/@remirror/core-constants/dist-types/tsconfig.tsbuildinfo +1 -0
  192. package/node_modules/@remirror/core-constants/package.json +45 -0
  193. package/node_modules/@remirror/core-constants/readme.md +17 -0
  194. package/node_modules/@tiptap/core/LICENSE.md +21 -0
  195. package/node_modules/@tiptap/core/README.md +18 -0
  196. package/node_modules/@tiptap/core/dist/index.cjs +7126 -0
  197. package/node_modules/@tiptap/core/dist/index.cjs.map +1 -0
  198. package/node_modules/@tiptap/core/dist/index.d.cts +4954 -0
  199. package/node_modules/@tiptap/core/dist/index.d.ts +4954 -0
  200. package/node_modules/@tiptap/core/dist/index.js +6992 -0
  201. package/node_modules/@tiptap/core/dist/index.js.map +1 -0
  202. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.cjs +56 -0
  203. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
  204. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.d.cts +23 -0
  205. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.d.ts +23 -0
  206. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +26 -0
  207. package/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +1 -0
  208. package/node_modules/@tiptap/core/jsx-dev-runtime/index.cjs +1 -0
  209. package/node_modules/@tiptap/core/jsx-dev-runtime/index.d.cts +1 -0
  210. package/node_modules/@tiptap/core/jsx-dev-runtime/index.d.ts +1 -0
  211. package/node_modules/@tiptap/core/jsx-dev-runtime/index.js +1 -0
  212. package/node_modules/@tiptap/core/jsx-runtime/index.cjs +1 -0
  213. package/node_modules/@tiptap/core/jsx-runtime/index.d.cts +1 -0
  214. package/node_modules/@tiptap/core/jsx-runtime/index.d.ts +1 -0
  215. package/node_modules/@tiptap/core/jsx-runtime/index.js +1 -0
  216. package/node_modules/@tiptap/core/package.json +70 -0
  217. package/node_modules/@tiptap/core/src/CommandManager.ts +138 -0
  218. package/node_modules/@tiptap/core/src/Editor.ts +806 -0
  219. package/node_modules/@tiptap/core/src/EventEmitter.ts +58 -0
  220. package/node_modules/@tiptap/core/src/Extendable.ts +602 -0
  221. package/node_modules/@tiptap/core/src/Extension.ts +55 -0
  222. package/node_modules/@tiptap/core/src/ExtensionManager.ts +440 -0
  223. package/node_modules/@tiptap/core/src/InputRule.ts +290 -0
  224. package/node_modules/@tiptap/core/src/Mark.ts +211 -0
  225. package/node_modules/@tiptap/core/src/MarkView.ts +122 -0
  226. package/node_modules/@tiptap/core/src/Node.ts +377 -0
  227. package/node_modules/@tiptap/core/src/NodePos.ts +257 -0
  228. package/node_modules/@tiptap/core/src/NodeView.ts +339 -0
  229. package/node_modules/@tiptap/core/src/PasteRule.ts +373 -0
  230. package/node_modules/@tiptap/core/src/Tracker.ts +36 -0
  231. package/node_modules/@tiptap/core/src/__tests__/transformPastedHTML.test.ts +575 -0
  232. package/node_modules/@tiptap/core/src/commands/blur.ts +29 -0
  233. package/node_modules/@tiptap/core/src/commands/clearContent.ts +25 -0
  234. package/node_modules/@tiptap/core/src/commands/clearNodes.ts +57 -0
  235. package/node_modules/@tiptap/core/src/commands/command.ts +22 -0
  236. package/node_modules/@tiptap/core/src/commands/createParagraphNear.ts +21 -0
  237. package/node_modules/@tiptap/core/src/commands/cut.ts +36 -0
  238. package/node_modules/@tiptap/core/src/commands/deleteCurrentNode.ts +44 -0
  239. package/node_modules/@tiptap/core/src/commands/deleteNode.ts +41 -0
  240. package/node_modules/@tiptap/core/src/commands/deleteRange.ts +26 -0
  241. package/node_modules/@tiptap/core/src/commands/deleteSelection.ts +21 -0
  242. package/node_modules/@tiptap/core/src/commands/enter.ts +19 -0
  243. package/node_modules/@tiptap/core/src/commands/exitCode.ts +21 -0
  244. package/node_modules/@tiptap/core/src/commands/extendMarkRange.ts +51 -0
  245. package/node_modules/@tiptap/core/src/commands/first.ts +26 -0
  246. package/node_modules/@tiptap/core/src/commands/focus.ts +108 -0
  247. package/node_modules/@tiptap/core/src/commands/forEach.ts +24 -0
  248. package/node_modules/@tiptap/core/src/commands/index.ts +57 -0
  249. package/node_modules/@tiptap/core/src/commands/insertContent.ts +46 -0
  250. package/node_modules/@tiptap/core/src/commands/insertContentAt.ts +212 -0
  251. package/node_modules/@tiptap/core/src/commands/join.ts +69 -0
  252. package/node_modules/@tiptap/core/src/commands/joinItemBackward.ts +37 -0
  253. package/node_modules/@tiptap/core/src/commands/joinItemForward.ts +37 -0
  254. package/node_modules/@tiptap/core/src/commands/joinTextblockBackward.ts +20 -0
  255. package/node_modules/@tiptap/core/src/commands/joinTextblockForward.ts +20 -0
  256. package/node_modules/@tiptap/core/src/commands/keyboardShortcut.ts +100 -0
  257. package/node_modules/@tiptap/core/src/commands/lift.ts +34 -0
  258. package/node_modules/@tiptap/core/src/commands/liftEmptyBlock.ts +21 -0
  259. package/node_modules/@tiptap/core/src/commands/liftListItem.ts +26 -0
  260. package/node_modules/@tiptap/core/src/commands/newlineInCode.ts +21 -0
  261. package/node_modules/@tiptap/core/src/commands/resetAttributes.ts +73 -0
  262. package/node_modules/@tiptap/core/src/commands/scrollIntoView.ts +23 -0
  263. package/node_modules/@tiptap/core/src/commands/selectAll.ts +27 -0
  264. package/node_modules/@tiptap/core/src/commands/selectNodeBackward.ts +21 -0
  265. package/node_modules/@tiptap/core/src/commands/selectNodeForward.ts +21 -0
  266. package/node_modules/@tiptap/core/src/commands/selectParentNode.ts +21 -0
  267. package/node_modules/@tiptap/core/src/commands/selectTextblockEnd.ts +23 -0
  268. package/node_modules/@tiptap/core/src/commands/selectTextblockStart.ts +23 -0
  269. package/node_modules/@tiptap/core/src/commands/setContent.ts +76 -0
  270. package/node_modules/@tiptap/core/src/commands/setMark.ts +118 -0
  271. package/node_modules/@tiptap/core/src/commands/setMeta.ts +25 -0
  272. package/node_modules/@tiptap/core/src/commands/setNode.ts +57 -0
  273. package/node_modules/@tiptap/core/src/commands/setNodeSelection.ts +31 -0
  274. package/node_modules/@tiptap/core/src/commands/setTextDirection.ts +51 -0
  275. package/node_modules/@tiptap/core/src/commands/setTextSelection.ts +35 -0
  276. package/node_modules/@tiptap/core/src/commands/sinkListItem.ts +26 -0
  277. package/node_modules/@tiptap/core/src/commands/splitBlock.ts +115 -0
  278. package/node_modules/@tiptap/core/src/commands/splitListItem.ts +149 -0
  279. package/node_modules/@tiptap/core/src/commands/toggleList.ts +159 -0
  280. package/node_modules/@tiptap/core/src/commands/toggleMark.ts +51 -0
  281. package/node_modules/@tiptap/core/src/commands/toggleNode.ts +47 -0
  282. package/node_modules/@tiptap/core/src/commands/toggleWrap.ts +32 -0
  283. package/node_modules/@tiptap/core/src/commands/undoInputRule.ts +49 -0
  284. package/node_modules/@tiptap/core/src/commands/unsetAllMarks.ts +32 -0
  285. package/node_modules/@tiptap/core/src/commands/unsetMark.ts +65 -0
  286. package/node_modules/@tiptap/core/src/commands/unsetTextDirection.ts +51 -0
  287. package/node_modules/@tiptap/core/src/commands/updateAttributes.ts +150 -0
  288. package/node_modules/@tiptap/core/src/commands/wrapIn.ts +27 -0
  289. package/node_modules/@tiptap/core/src/commands/wrapInList.ts +27 -0
  290. package/node_modules/@tiptap/core/src/extensions/clipboardTextSerializer.ts +44 -0
  291. package/node_modules/@tiptap/core/src/extensions/commands.ts +14 -0
  292. package/node_modules/@tiptap/core/src/extensions/delete.ts +89 -0
  293. package/node_modules/@tiptap/core/src/extensions/drop.ts +26 -0
  294. package/node_modules/@tiptap/core/src/extensions/editable.ts +18 -0
  295. package/node_modules/@tiptap/core/src/extensions/focusEvents.ts +41 -0
  296. package/node_modules/@tiptap/core/src/extensions/index.ts +10 -0
  297. package/node_modules/@tiptap/core/src/extensions/keymap.ts +160 -0
  298. package/node_modules/@tiptap/core/src/extensions/paste.ts +25 -0
  299. package/node_modules/@tiptap/core/src/extensions/tabindex.ts +18 -0
  300. package/node_modules/@tiptap/core/src/extensions/textDirection.ts +86 -0
  301. package/node_modules/@tiptap/core/src/helpers/MappablePosition.ts +66 -0
  302. package/node_modules/@tiptap/core/src/helpers/combineTransactionSteps.ts +21 -0
  303. package/node_modules/@tiptap/core/src/helpers/createChainableState.ts +39 -0
  304. package/node_modules/@tiptap/core/src/helpers/createDocument.ts +24 -0
  305. package/node_modules/@tiptap/core/src/helpers/createNodeFromContent.ts +119 -0
  306. package/node_modules/@tiptap/core/src/helpers/defaultBlockAt.ts +18 -0
  307. package/node_modules/@tiptap/core/src/helpers/findChildren.ts +24 -0
  308. package/node_modules/@tiptap/core/src/helpers/findChildrenInRange.ts +36 -0
  309. package/node_modules/@tiptap/core/src/helpers/findParentNode.ts +18 -0
  310. package/node_modules/@tiptap/core/src/helpers/findParentNodeClosestToPos.ts +37 -0
  311. package/node_modules/@tiptap/core/src/helpers/flattenExtensions.ts +30 -0
  312. package/node_modules/@tiptap/core/src/helpers/generateHTML.ts +18 -0
  313. package/node_modules/@tiptap/core/src/helpers/generateJSON.ts +18 -0
  314. package/node_modules/@tiptap/core/src/helpers/generateText.ts +34 -0
  315. package/node_modules/@tiptap/core/src/helpers/getAttributes.ts +29 -0
  316. package/node_modules/@tiptap/core/src/helpers/getAttributesFromExtensions.ts +122 -0
  317. package/node_modules/@tiptap/core/src/helpers/getChangedRanges.ts +85 -0
  318. package/node_modules/@tiptap/core/src/helpers/getDebugJSON.ts +54 -0
  319. package/node_modules/@tiptap/core/src/helpers/getExtensionField.ts +32 -0
  320. package/node_modules/@tiptap/core/src/helpers/getHTMLFromFragment.ts +13 -0
  321. package/node_modules/@tiptap/core/src/helpers/getMarkAttributes.ts +30 -0
  322. package/node_modules/@tiptap/core/src/helpers/getMarkRange.ts +90 -0
  323. package/node_modules/@tiptap/core/src/helpers/getMarkType.ts +13 -0
  324. package/node_modules/@tiptap/core/src/helpers/getMarksBetween.ts +44 -0
  325. package/node_modules/@tiptap/core/src/helpers/getNodeAtPosition.ts +29 -0
  326. package/node_modules/@tiptap/core/src/helpers/getNodeAttributes.ts +22 -0
  327. package/node_modules/@tiptap/core/src/helpers/getNodeType.ts +13 -0
  328. package/node_modules/@tiptap/core/src/helpers/getRenderedAttributes.ts +23 -0
  329. package/node_modules/@tiptap/core/src/helpers/getSchema.ts +12 -0
  330. package/node_modules/@tiptap/core/src/helpers/getSchemaByResolvedExtensions.ts +183 -0
  331. package/node_modules/@tiptap/core/src/helpers/getSchemaTypeByName.ts +11 -0
  332. package/node_modules/@tiptap/core/src/helpers/getSchemaTypeNameByName.ts +19 -0
  333. package/node_modules/@tiptap/core/src/helpers/getSplittedAttributes.ts +28 -0
  334. package/node_modules/@tiptap/core/src/helpers/getText.ts +28 -0
  335. package/node_modules/@tiptap/core/src/helpers/getTextBetween.ts +52 -0
  336. package/node_modules/@tiptap/core/src/helpers/getTextContentFromNodes.ts +29 -0
  337. package/node_modules/@tiptap/core/src/helpers/getTextSerializersFromSchema.ts +16 -0
  338. package/node_modules/@tiptap/core/src/helpers/index.ts +55 -0
  339. package/node_modules/@tiptap/core/src/helpers/injectExtensionAttributesToParseRule.ts +47 -0
  340. package/node_modules/@tiptap/core/src/helpers/isActive.ts +23 -0
  341. package/node_modules/@tiptap/core/src/helpers/isAtEndOfNode.ts +29 -0
  342. package/node_modules/@tiptap/core/src/helpers/isAtStartOfNode.ts +11 -0
  343. package/node_modules/@tiptap/core/src/helpers/isExtensionRulesEnabled.ts +13 -0
  344. package/node_modules/@tiptap/core/src/helpers/isList.ts +27 -0
  345. package/node_modules/@tiptap/core/src/helpers/isMarkActive.ts +94 -0
  346. package/node_modules/@tiptap/core/src/helpers/isNodeActive.ts +51 -0
  347. package/node_modules/@tiptap/core/src/helpers/isNodeEmpty.ts +62 -0
  348. package/node_modules/@tiptap/core/src/helpers/isNodeSelection.ts +5 -0
  349. package/node_modules/@tiptap/core/src/helpers/isTextSelection.ts +5 -0
  350. package/node_modules/@tiptap/core/src/helpers/posToDOMRect.ts +35 -0
  351. package/node_modules/@tiptap/core/src/helpers/resolveExtensions.ts +25 -0
  352. package/node_modules/@tiptap/core/src/helpers/resolveFocusPosition.ts +31 -0
  353. package/node_modules/@tiptap/core/src/helpers/rewriteUnknownContent.ts +149 -0
  354. package/node_modules/@tiptap/core/src/helpers/selectionToInsertionEnd.ts +29 -0
  355. package/node_modules/@tiptap/core/src/helpers/sortExtensions.ts +26 -0
  356. package/node_modules/@tiptap/core/src/helpers/splitExtensions.ts +16 -0
  357. package/node_modules/@tiptap/core/src/index.ts +28 -0
  358. package/node_modules/@tiptap/core/src/inputRules/index.ts +5 -0
  359. package/node_modules/@tiptap/core/src/inputRules/markInputRule.ts +68 -0
  360. package/node_modules/@tiptap/core/src/inputRules/nodeInputRule.ts +73 -0
  361. package/node_modules/@tiptap/core/src/inputRules/textInputRule.ts +35 -0
  362. package/node_modules/@tiptap/core/src/inputRules/textblockTypeInputRule.ts +35 -0
  363. package/node_modules/@tiptap/core/src/inputRules/wrappingInputRule.ts +82 -0
  364. package/node_modules/@tiptap/core/src/jsx-runtime.ts +65 -0
  365. package/node_modules/@tiptap/core/src/lib/ResizableNodeView.ts +1060 -0
  366. package/node_modules/@tiptap/core/src/lib/index.ts +1 -0
  367. package/node_modules/@tiptap/core/src/pasteRules/index.ts +3 -0
  368. package/node_modules/@tiptap/core/src/pasteRules/markPasteRule.ts +71 -0
  369. package/node_modules/@tiptap/core/src/pasteRules/nodePasteRule.ts +44 -0
  370. package/node_modules/@tiptap/core/src/pasteRules/textPasteRule.ts +34 -0
  371. package/node_modules/@tiptap/core/src/style.ts +71 -0
  372. package/node_modules/@tiptap/core/src/types.ts +1058 -0
  373. package/node_modules/@tiptap/core/src/utilities/callOrReturn.ts +21 -0
  374. package/node_modules/@tiptap/core/src/utilities/canInsertNode.ts +30 -0
  375. package/node_modules/@tiptap/core/src/utilities/createStyleTag.ts +21 -0
  376. package/node_modules/@tiptap/core/src/utilities/deleteProps.ts +16 -0
  377. package/node_modules/@tiptap/core/src/utilities/elementFromString.ts +27 -0
  378. package/node_modules/@tiptap/core/src/utilities/escapeForRegEx.ts +4 -0
  379. package/node_modules/@tiptap/core/src/utilities/findDuplicates.ts +8 -0
  380. package/node_modules/@tiptap/core/src/utilities/fromString.ts +19 -0
  381. package/node_modules/@tiptap/core/src/utilities/index.ts +26 -0
  382. package/node_modules/@tiptap/core/src/utilities/isAndroid.ts +3 -0
  383. package/node_modules/@tiptap/core/src/utilities/isEmptyObject.ts +3 -0
  384. package/node_modules/@tiptap/core/src/utilities/isFirefox.ts +11 -0
  385. package/node_modules/@tiptap/core/src/utilities/isFunction.ts +4 -0
  386. package/node_modules/@tiptap/core/src/utilities/isMacOS.ts +3 -0
  387. package/node_modules/@tiptap/core/src/utilities/isNumber.ts +3 -0
  388. package/node_modules/@tiptap/core/src/utilities/isPlainObject.ts +13 -0
  389. package/node_modules/@tiptap/core/src/utilities/isRegExp.ts +3 -0
  390. package/node_modules/@tiptap/core/src/utilities/isSafari.ts +11 -0
  391. package/node_modules/@tiptap/core/src/utilities/isString.ts +3 -0
  392. package/node_modules/@tiptap/core/src/utilities/isiOS.ts +7 -0
  393. package/node_modules/@tiptap/core/src/utilities/markdown/attributeUtils.ts +130 -0
  394. package/node_modules/@tiptap/core/src/utilities/markdown/createAtomBlockMarkdownSpec.ts +141 -0
  395. package/node_modules/@tiptap/core/src/utilities/markdown/createBlockMarkdownSpec.ts +225 -0
  396. package/node_modules/@tiptap/core/src/utilities/markdown/createInlineMarkdownSpec.ts +282 -0
  397. package/node_modules/@tiptap/core/src/utilities/markdown/index.ts +13 -0
  398. package/node_modules/@tiptap/core/src/utilities/markdown/parseIndentedBlocks.ts +194 -0
  399. package/node_modules/@tiptap/core/src/utilities/markdown/renderNestedMarkdownContent.ts +96 -0
  400. package/node_modules/@tiptap/core/src/utilities/mergeAttributes.ts +109 -0
  401. package/node_modules/@tiptap/core/src/utilities/mergeDeep.ts +17 -0
  402. package/node_modules/@tiptap/core/src/utilities/minMax.ts +3 -0
  403. package/node_modules/@tiptap/core/src/utilities/objectIncludes.ts +30 -0
  404. package/node_modules/@tiptap/core/src/utilities/removeDuplicates.ts +13 -0
  405. package/node_modules/@tiptap/extension-bubble-menu/LICENSE.md +21 -0
  406. package/node_modules/@tiptap/extension-bubble-menu/README.md +18 -0
  407. package/node_modules/@tiptap/extension-bubble-menu/dist/index.cjs +462 -0
  408. package/node_modules/@tiptap/extension-bubble-menu/dist/index.cjs.map +1 -0
  409. package/node_modules/@tiptap/extension-bubble-menu/dist/index.d.cts +169 -0
  410. package/node_modules/@tiptap/extension-bubble-menu/dist/index.d.ts +169 -0
  411. package/node_modules/@tiptap/extension-bubble-menu/dist/index.js +443 -0
  412. package/node_modules/@tiptap/extension-bubble-menu/dist/index.js.map +1 -0
  413. package/node_modules/@tiptap/extension-bubble-menu/package.json +54 -0
  414. package/node_modules/@tiptap/extension-bubble-menu/src/bubble-menu-plugin.ts +650 -0
  415. package/node_modules/@tiptap/extension-bubble-menu/src/bubble-menu.ts +50 -0
  416. package/node_modules/@tiptap/extension-bubble-menu/src/index.ts +6 -0
  417. package/node_modules/@tiptap/extension-floating-menu/LICENSE.md +21 -0
  418. package/node_modules/@tiptap/extension-floating-menu/README.md +18 -0
  419. package/node_modules/@tiptap/extension-floating-menu/dist/index.cjs +380 -0
  420. package/node_modules/@tiptap/extension-floating-menu/dist/index.cjs.map +1 -0
  421. package/node_modules/@tiptap/extension-floating-menu/dist/index.d.cts +179 -0
  422. package/node_modules/@tiptap/extension-floating-menu/dist/index.d.ts +179 -0
  423. package/node_modules/@tiptap/extension-floating-menu/dist/index.js +361 -0
  424. package/node_modules/@tiptap/extension-floating-menu/dist/index.js.map +1 -0
  425. package/node_modules/@tiptap/extension-floating-menu/package.json +53 -0
  426. package/node_modules/@tiptap/extension-floating-menu/src/floating-menu-plugin.ts +525 -0
  427. package/node_modules/@tiptap/extension-floating-menu/src/floating-menu.ts +77 -0
  428. package/node_modules/@tiptap/extension-floating-menu/src/index.ts +6 -0
  429. package/node_modules/@tiptap/extension-mention/LICENSE.md +21 -0
  430. package/node_modules/@tiptap/extension-mention/README.md +18 -0
  431. package/node_modules/@tiptap/extension-mention/dist/index.cjs +277 -0
  432. package/node_modules/@tiptap/extension-mention/dist/index.cjs.map +1 -0
  433. package/node_modules/@tiptap/extension-mention/dist/index.d.cts +93 -0
  434. package/node_modules/@tiptap/extension-mention/dist/index.d.ts +93 -0
  435. package/node_modules/@tiptap/extension-mention/dist/index.js +250 -0
  436. package/node_modules/@tiptap/extension-mention/dist/index.js.map +1 -0
  437. package/node_modules/@tiptap/extension-mention/package.json +52 -0
  438. package/node_modules/@tiptap/extension-mention/src/index.ts +5 -0
  439. package/node_modules/@tiptap/extension-mention/src/mention.ts +357 -0
  440. package/node_modules/@tiptap/extension-mention/src/utils/get-default-suggestion-attributes.ts +89 -0
  441. package/node_modules/@tiptap/pm/LICENSE.md +21 -0
  442. package/node_modules/@tiptap/pm/README.md +22 -0
  443. package/node_modules/@tiptap/pm/changeset/index.ts +1 -0
  444. package/node_modules/@tiptap/pm/collab/index.ts +1 -0
  445. package/node_modules/@tiptap/pm/commands/index.ts +1 -0
  446. package/node_modules/@tiptap/pm/dist/changeset/index.cjs +2 -0
  447. package/node_modules/@tiptap/pm/dist/changeset/index.d.cts +18 -0
  448. package/node_modules/@tiptap/pm/dist/changeset/index.d.ts +18 -0
  449. package/node_modules/@tiptap/pm/dist/changeset/index.js +2 -0
  450. package/node_modules/@tiptap/pm/dist/collab/index.cjs +2 -0
  451. package/node_modules/@tiptap/pm/dist/collab/index.d.cts +1 -0
  452. package/node_modules/@tiptap/pm/dist/collab/index.d.ts +1 -0
  453. package/node_modules/@tiptap/pm/dist/collab/index.js +2 -0
  454. package/node_modules/@tiptap/pm/dist/commands/index.cjs +2 -0
  455. package/node_modules/@tiptap/pm/dist/commands/index.d.cts +1 -0
  456. package/node_modules/@tiptap/pm/dist/commands/index.d.ts +1 -0
  457. package/node_modules/@tiptap/pm/dist/commands/index.js +2 -0
  458. package/node_modules/@tiptap/pm/dist/dropcursor/index.cjs +2 -0
  459. package/node_modules/@tiptap/pm/dist/dropcursor/index.d.cts +1 -0
  460. package/node_modules/@tiptap/pm/dist/dropcursor/index.d.ts +1 -0
  461. package/node_modules/@tiptap/pm/dist/dropcursor/index.js +2 -0
  462. package/node_modules/@tiptap/pm/dist/gapcursor/index.cjs +2 -0
  463. package/node_modules/@tiptap/pm/dist/gapcursor/index.d.cts +1 -0
  464. package/node_modules/@tiptap/pm/dist/gapcursor/index.d.ts +1 -0
  465. package/node_modules/@tiptap/pm/dist/gapcursor/index.js +2 -0
  466. package/node_modules/@tiptap/pm/dist/history/index.cjs +2 -0
  467. package/node_modules/@tiptap/pm/dist/history/index.d.cts +1 -0
  468. package/node_modules/@tiptap/pm/dist/history/index.d.ts +1 -0
  469. package/node_modules/@tiptap/pm/dist/history/index.js +2 -0
  470. package/node_modules/@tiptap/pm/dist/inputrules/index.cjs +2 -0
  471. package/node_modules/@tiptap/pm/dist/inputrules/index.d.cts +1 -0
  472. package/node_modules/@tiptap/pm/dist/inputrules/index.d.ts +1 -0
  473. package/node_modules/@tiptap/pm/dist/inputrules/index.js +2 -0
  474. package/node_modules/@tiptap/pm/dist/keymap/index.cjs +2 -0
  475. package/node_modules/@tiptap/pm/dist/keymap/index.d.cts +1 -0
  476. package/node_modules/@tiptap/pm/dist/keymap/index.d.ts +1 -0
  477. package/node_modules/@tiptap/pm/dist/keymap/index.js +2 -0
  478. package/node_modules/@tiptap/pm/dist/markdown/index.cjs +2 -0
  479. package/node_modules/@tiptap/pm/dist/markdown/index.d.cts +1 -0
  480. package/node_modules/@tiptap/pm/dist/markdown/index.d.ts +1 -0
  481. package/node_modules/@tiptap/pm/dist/markdown/index.js +2 -0
  482. package/node_modules/@tiptap/pm/dist/menu/index.cjs +2 -0
  483. package/node_modules/@tiptap/pm/dist/menu/index.d.cts +1 -0
  484. package/node_modules/@tiptap/pm/dist/menu/index.d.ts +1 -0
  485. package/node_modules/@tiptap/pm/dist/menu/index.js +2 -0
  486. package/node_modules/@tiptap/pm/dist/model/index.cjs +2 -0
  487. package/node_modules/@tiptap/pm/dist/model/index.d.cts +1 -0
  488. package/node_modules/@tiptap/pm/dist/model/index.d.ts +1 -0
  489. package/node_modules/@tiptap/pm/dist/model/index.js +2 -0
  490. package/node_modules/@tiptap/pm/dist/schema-basic/index.cjs +2 -0
  491. package/node_modules/@tiptap/pm/dist/schema-basic/index.d.cts +1 -0
  492. package/node_modules/@tiptap/pm/dist/schema-basic/index.d.ts +1 -0
  493. package/node_modules/@tiptap/pm/dist/schema-basic/index.js +2 -0
  494. package/node_modules/@tiptap/pm/dist/schema-list/index.cjs +2 -0
  495. package/node_modules/@tiptap/pm/dist/schema-list/index.d.cts +1 -0
  496. package/node_modules/@tiptap/pm/dist/schema-list/index.d.ts +1 -0
  497. package/node_modules/@tiptap/pm/dist/schema-list/index.js +2 -0
  498. package/node_modules/@tiptap/pm/dist/state/index.cjs +2 -0
  499. package/node_modules/@tiptap/pm/dist/state/index.d.cts +1 -0
  500. package/node_modules/@tiptap/pm/dist/state/index.d.ts +1 -0
  501. package/node_modules/@tiptap/pm/dist/state/index.js +2 -0
  502. package/node_modules/@tiptap/pm/dist/tables/index.cjs +2 -0
  503. package/node_modules/@tiptap/pm/dist/tables/index.d.cts +1 -0
  504. package/node_modules/@tiptap/pm/dist/tables/index.d.ts +1 -0
  505. package/node_modules/@tiptap/pm/dist/tables/index.js +2 -0
  506. package/node_modules/@tiptap/pm/dist/trailing-node/index.cjs +2 -0
  507. package/node_modules/@tiptap/pm/dist/trailing-node/index.d.cts +1 -0
  508. package/node_modules/@tiptap/pm/dist/trailing-node/index.d.ts +1 -0
  509. package/node_modules/@tiptap/pm/dist/trailing-node/index.js +2 -0
  510. package/node_modules/@tiptap/pm/dist/transform/index.cjs +2 -0
  511. package/node_modules/@tiptap/pm/dist/transform/index.d.cts +1 -0
  512. package/node_modules/@tiptap/pm/dist/transform/index.d.ts +1 -0
  513. package/node_modules/@tiptap/pm/dist/transform/index.js +2 -0
  514. package/node_modules/@tiptap/pm/dist/view/index.cjs +2 -0
  515. package/node_modules/@tiptap/pm/dist/view/index.d.cts +1 -0
  516. package/node_modules/@tiptap/pm/dist/view/index.d.ts +1 -0
  517. package/node_modules/@tiptap/pm/dist/view/index.js +2 -0
  518. package/node_modules/@tiptap/pm/dropcursor/index.ts +1 -0
  519. package/node_modules/@tiptap/pm/gapcursor/index.ts +1 -0
  520. package/node_modules/@tiptap/pm/history/index.ts +1 -0
  521. package/node_modules/@tiptap/pm/inputrules/index.ts +1 -0
  522. package/node_modules/@tiptap/pm/keymap/index.ts +1 -0
  523. package/node_modules/@tiptap/pm/markdown/index.ts +1 -0
  524. package/node_modules/@tiptap/pm/menu/index.ts +1 -0
  525. package/node_modules/@tiptap/pm/model/index.ts +1 -0
  526. package/node_modules/@tiptap/pm/package.json +211 -0
  527. package/node_modules/@tiptap/pm/schema-basic/index.ts +1 -0
  528. package/node_modules/@tiptap/pm/schema-list/index.ts +1 -0
  529. package/node_modules/@tiptap/pm/state/index.ts +1 -0
  530. package/node_modules/@tiptap/pm/tables/index.ts +1 -0
  531. package/node_modules/@tiptap/pm/trailing-node/index.ts +1 -0
  532. package/node_modules/@tiptap/pm/transform/index.ts +1 -0
  533. package/node_modules/@tiptap/pm/view/index.ts +1 -0
  534. package/node_modules/@tiptap/react/LICENSE.md +21 -0
  535. package/node_modules/@tiptap/react/README.md +18 -0
  536. package/node_modules/@tiptap/react/dist/index.cjs +1195 -0
  537. package/node_modules/@tiptap/react/dist/index.cjs.map +1 -0
  538. package/node_modules/@tiptap/react/dist/index.d.cts +534 -0
  539. package/node_modules/@tiptap/react/dist/index.d.ts +534 -0
  540. package/node_modules/@tiptap/react/dist/index.js +1131 -0
  541. package/node_modules/@tiptap/react/dist/index.js.map +1 -0
  542. package/node_modules/@tiptap/react/dist/menus/index.cjs +499 -0
  543. package/node_modules/@tiptap/react/dist/menus/index.cjs.map +1 -0
  544. package/node_modules/@tiptap/react/dist/menus/index.d.cts +19 -0
  545. package/node_modules/@tiptap/react/dist/menus/index.d.ts +19 -0
  546. package/node_modules/@tiptap/react/dist/menus/index.js +461 -0
  547. package/node_modules/@tiptap/react/dist/menus/index.js.map +1 -0
  548. package/node_modules/@tiptap/react/package.json +76 -0
  549. package/node_modules/@tiptap/react/src/Context.tsx +60 -0
  550. package/node_modules/@tiptap/react/src/Editor.ts +13 -0
  551. package/node_modules/@tiptap/react/src/EditorContent.tsx +229 -0
  552. package/node_modules/@tiptap/react/src/NodeViewContent.tsx +30 -0
  553. package/node_modules/@tiptap/react/src/NodeViewWrapper.tsx +27 -0
  554. package/node_modules/@tiptap/react/src/ReactMarkViewRenderer.tsx +106 -0
  555. package/node_modules/@tiptap/react/src/ReactNodeViewRenderer.tsx +387 -0
  556. package/node_modules/@tiptap/react/src/ReactRenderer.tsx +282 -0
  557. package/node_modules/@tiptap/react/src/Tiptap.tsx +224 -0
  558. package/node_modules/@tiptap/react/src/index.ts +13 -0
  559. package/node_modules/@tiptap/react/src/menus/BubbleMenu.spec.ts +174 -0
  560. package/node_modules/@tiptap/react/src/menus/BubbleMenu.tsx +153 -0
  561. package/node_modules/@tiptap/react/src/menus/FloatingMenu.spec.ts +164 -0
  562. package/node_modules/@tiptap/react/src/menus/FloatingMenu.tsx +137 -0
  563. package/node_modules/@tiptap/react/src/menus/getAutoPluginKey.ts +5 -0
  564. package/node_modules/@tiptap/react/src/menus/index.ts +2 -0
  565. package/node_modules/@tiptap/react/src/menus/useMenuElementProps.ts +354 -0
  566. package/node_modules/@tiptap/react/src/types.ts +6 -0
  567. package/node_modules/@tiptap/react/src/useEditor.ts +382 -0
  568. package/node_modules/@tiptap/react/src/useEditorState.ts +173 -0
  569. package/node_modules/@tiptap/react/src/useReactNodeView.ts +28 -0
  570. package/node_modules/@tiptap/suggestion/LICENSE.md +21 -0
  571. package/node_modules/@tiptap/suggestion/README.md +18 -0
  572. package/node_modules/@tiptap/suggestion/dist/index.cjs +369 -0
  573. package/node_modules/@tiptap/suggestion/dist/index.cjs.map +1 -0
  574. package/node_modules/@tiptap/suggestion/dist/index.d.cts +213 -0
  575. package/node_modules/@tiptap/suggestion/dist/index.d.ts +213 -0
  576. package/node_modules/@tiptap/suggestion/dist/index.js +339 -0
  577. package/node_modules/@tiptap/suggestion/dist/index.js.map +1 -0
  578. package/node_modules/@tiptap/suggestion/package.json +50 -0
  579. package/node_modules/@tiptap/suggestion/src/__tests__/suggestion.test.ts +127 -0
  580. package/node_modules/@tiptap/suggestion/src/findSuggestionMatch.ts +79 -0
  581. package/node_modules/@tiptap/suggestion/src/index.ts +8 -0
  582. package/node_modules/@tiptap/suggestion/src/suggestion.ts +585 -0
  583. package/node_modules/@types/linkify-it/LICENSE +21 -0
  584. package/node_modules/@types/linkify-it/README.md +15 -0
  585. package/node_modules/@types/linkify-it/build/index.cjs.d.ts +178 -0
  586. package/node_modules/@types/linkify-it/index.d.mts +174 -0
  587. package/node_modules/@types/linkify-it/index.d.ts +3 -0
  588. package/node_modules/@types/linkify-it/package.json +50 -0
  589. package/node_modules/@types/markdown-it/LICENSE +21 -0
  590. package/node_modules/@types/markdown-it/README.md +15 -0
  591. package/node_modules/@types/markdown-it/dist/index.cjs.d.ts +1236 -0
  592. package/node_modules/@types/markdown-it/dist/markdown-it.d.ts +5 -0
  593. package/node_modules/@types/markdown-it/dist/markdown-it.min.d.ts +5 -0
  594. package/node_modules/@types/markdown-it/index.d.mts +1 -0
  595. package/node_modules/@types/markdown-it/index.d.ts +3 -0
  596. package/node_modules/@types/markdown-it/lib/common/html_blocks.d.mts +7 -0
  597. package/node_modules/@types/markdown-it/lib/common/html_re.d.mts +2 -0
  598. package/node_modules/@types/markdown-it/lib/common/utils.d.mts +62 -0
  599. package/node_modules/@types/markdown-it/lib/helpers/index.d.mts +5 -0
  600. package/node_modules/@types/markdown-it/lib/helpers/parse_link_destination.d.mts +7 -0
  601. package/node_modules/@types/markdown-it/lib/helpers/parse_link_label.d.mts +3 -0
  602. package/node_modules/@types/markdown-it/lib/helpers/parse_link_title.d.mts +29 -0
  603. package/node_modules/@types/markdown-it/lib/index.d.mts +404 -0
  604. package/node_modules/@types/markdown-it/lib/parser_block.d.mts +25 -0
  605. package/node_modules/@types/markdown-it/lib/parser_core.d.mts +18 -0
  606. package/node_modules/@types/markdown-it/lib/parser_inline.d.mts +38 -0
  607. package/node_modules/@types/markdown-it/lib/renderer.d.mts +96 -0
  608. package/node_modules/@types/markdown-it/lib/ruler.d.mts +158 -0
  609. package/node_modules/@types/markdown-it/lib/rules_block/state_block.d.mts +124 -0
  610. package/node_modules/@types/markdown-it/lib/rules_core/state_core.d.mts +18 -0
  611. package/node_modules/@types/markdown-it/lib/rules_inline/state_inline.d.mts +73 -0
  612. package/node_modules/@types/markdown-it/lib/token.d.mts +108 -0
  613. package/node_modules/@types/markdown-it/package.json +54 -0
  614. package/node_modules/@types/mdurl/LICENSE +21 -0
  615. package/node_modules/@types/mdurl/README.md +15 -0
  616. package/node_modules/@types/mdurl/build/index.cjs.d.ts +52 -0
  617. package/node_modules/@types/mdurl/index.d.mts +6 -0
  618. package/node_modules/@types/mdurl/index.d.ts +3 -0
  619. package/node_modules/@types/mdurl/lib/decode.d.mts +10 -0
  620. package/node_modules/@types/mdurl/lib/encode.d.mts +15 -0
  621. package/node_modules/@types/mdurl/lib/format.d.mts +3 -0
  622. package/node_modules/@types/mdurl/lib/parse.d.mts +18 -0
  623. package/node_modules/@types/mdurl/package.json +36 -0
  624. package/node_modules/@types/use-sync-external-store/LICENSE +21 -0
  625. package/node_modules/@types/use-sync-external-store/README.md +15 -0
  626. package/node_modules/@types/use-sync-external-store/index.d.ts +5 -0
  627. package/node_modules/@types/use-sync-external-store/package.json +30 -0
  628. package/node_modules/@types/use-sync-external-store/shim/index.d.ts +1 -0
  629. package/node_modules/@types/use-sync-external-store/shim/with-selector.d.ts +1 -0
  630. package/node_modules/@types/use-sync-external-store/with-selector.d.ts +7 -0
  631. package/node_modules/argparse/LICENSE +254 -0
  632. package/node_modules/argparse/README.md +84 -0
  633. package/node_modules/argparse/argparse.js +3707 -0
  634. package/node_modules/argparse/lib/sub.js +67 -0
  635. package/node_modules/argparse/lib/textwrap.js +440 -0
  636. package/node_modules/argparse/package.json +31 -0
  637. package/node_modules/crelt/LICENSE +19 -0
  638. package/node_modules/crelt/README.md +23 -0
  639. package/node_modules/crelt/dist/index.cjs +31 -0
  640. package/node_modules/crelt/dist/index.d.cts +4 -0
  641. package/node_modules/crelt/index.d.ts +4 -0
  642. package/node_modules/crelt/index.js +28 -0
  643. package/node_modules/crelt/package.json +35 -0
  644. package/node_modules/crelt/rollup.config.js +13 -0
  645. package/node_modules/entities/LICENSE +11 -0
  646. package/node_modules/entities/lib/decode.d.ts +211 -0
  647. package/node_modules/entities/lib/decode.d.ts.map +1 -0
  648. package/node_modules/entities/lib/decode.js +536 -0
  649. package/node_modules/entities/lib/decode.js.map +1 -0
  650. package/node_modules/entities/lib/decode_codepoint.d.ts +19 -0
  651. package/node_modules/entities/lib/decode_codepoint.d.ts.map +1 -0
  652. package/node_modules/entities/lib/decode_codepoint.js +76 -0
  653. package/node_modules/entities/lib/decode_codepoint.js.map +1 -0
  654. package/node_modules/entities/lib/encode.d.ts +22 -0
  655. package/node_modules/entities/lib/encode.d.ts.map +1 -0
  656. package/node_modules/entities/lib/encode.js +77 -0
  657. package/node_modules/entities/lib/encode.js.map +1 -0
  658. package/node_modules/entities/lib/escape.d.ts +43 -0
  659. package/node_modules/entities/lib/escape.d.ts.map +1 -0
  660. package/node_modules/entities/lib/escape.js +122 -0
  661. package/node_modules/entities/lib/escape.js.map +1 -0
  662. package/node_modules/entities/lib/esm/decode.d.ts +211 -0
  663. package/node_modules/entities/lib/esm/decode.d.ts.map +1 -0
  664. package/node_modules/entities/lib/esm/decode.js +496 -0
  665. package/node_modules/entities/lib/esm/decode.js.map +1 -0
  666. package/node_modules/entities/lib/esm/decode_codepoint.d.ts +19 -0
  667. package/node_modules/entities/lib/esm/decode_codepoint.d.ts.map +1 -0
  668. package/node_modules/entities/lib/esm/decode_codepoint.js +71 -0
  669. package/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -0
  670. package/node_modules/entities/lib/esm/encode.d.ts +22 -0
  671. package/node_modules/entities/lib/esm/encode.d.ts.map +1 -0
  672. package/node_modules/entities/lib/esm/encode.js +69 -0
  673. package/node_modules/entities/lib/esm/encode.js.map +1 -0
  674. package/node_modules/entities/lib/esm/escape.d.ts +43 -0
  675. package/node_modules/entities/lib/esm/escape.d.ts.map +1 -0
  676. package/node_modules/entities/lib/esm/escape.js +116 -0
  677. package/node_modules/entities/lib/esm/escape.js.map +1 -0
  678. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts +3 -0
  679. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map +1 -0
  680. package/node_modules/entities/lib/esm/generated/decode-data-html.js +7 -0
  681. package/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -0
  682. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts +3 -0
  683. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map +1 -0
  684. package/node_modules/entities/lib/esm/generated/decode-data-xml.js +7 -0
  685. package/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -0
  686. package/node_modules/entities/lib/esm/generated/encode-html.d.ts +8 -0
  687. package/node_modules/entities/lib/esm/generated/encode-html.d.ts.map +1 -0
  688. package/node_modules/entities/lib/esm/generated/encode-html.js +10 -0
  689. package/node_modules/entities/lib/esm/generated/encode-html.js.map +1 -0
  690. package/node_modules/entities/lib/esm/index.d.ts +96 -0
  691. package/node_modules/entities/lib/esm/index.d.ts.map +1 -0
  692. package/node_modules/entities/lib/esm/index.js +99 -0
  693. package/node_modules/entities/lib/esm/index.js.map +1 -0
  694. package/node_modules/entities/lib/esm/package.json +1 -0
  695. package/node_modules/entities/lib/generated/decode-data-html.d.ts +3 -0
  696. package/node_modules/entities/lib/generated/decode-data-html.d.ts.map +1 -0
  697. package/node_modules/entities/lib/generated/decode-data-html.js +9 -0
  698. package/node_modules/entities/lib/generated/decode-data-html.js.map +1 -0
  699. package/node_modules/entities/lib/generated/decode-data-xml.d.ts +3 -0
  700. package/node_modules/entities/lib/generated/decode-data-xml.d.ts.map +1 -0
  701. package/node_modules/entities/lib/generated/decode-data-xml.js +9 -0
  702. package/node_modules/entities/lib/generated/decode-data-xml.js.map +1 -0
  703. package/node_modules/entities/lib/generated/encode-html.d.ts +8 -0
  704. package/node_modules/entities/lib/generated/encode-html.d.ts.map +1 -0
  705. package/node_modules/entities/lib/generated/encode-html.js +12 -0
  706. package/node_modules/entities/lib/generated/encode-html.js.map +1 -0
  707. package/node_modules/entities/lib/index.d.ts +96 -0
  708. package/node_modules/entities/lib/index.d.ts.map +1 -0
  709. package/node_modules/entities/lib/index.js +126 -0
  710. package/node_modules/entities/lib/index.js.map +1 -0
  711. package/node_modules/entities/package.json +90 -0
  712. package/node_modules/entities/readme.md +122 -0
  713. package/node_modules/escape-string-regexp/index.d.ts +18 -0
  714. package/node_modules/escape-string-regexp/index.js +13 -0
  715. package/node_modules/escape-string-regexp/license +9 -0
  716. package/node_modules/escape-string-regexp/package.json +38 -0
  717. package/node_modules/escape-string-regexp/readme.md +34 -0
  718. package/node_modules/fast-equals/LICENSE +21 -0
  719. package/node_modules/fast-equals/README.md +477 -0
  720. package/node_modules/fast-equals/dist/cjs/comparator.d.cts +60 -0
  721. package/node_modules/fast-equals/dist/cjs/equals.d.cts +62 -0
  722. package/node_modules/fast-equals/dist/cjs/index.cjs +653 -0
  723. package/node_modules/fast-equals/dist/cjs/index.cjs.map +1 -0
  724. package/node_modules/fast-equals/dist/cjs/index.d.cts +66 -0
  725. package/node_modules/fast-equals/dist/cjs/internalTypes.d.cts +178 -0
  726. package/node_modules/fast-equals/dist/cjs/utils.d.cts +33 -0
  727. package/node_modules/fast-equals/dist/es/comparator.d.mts +60 -0
  728. package/node_modules/fast-equals/dist/es/equals.d.mts +62 -0
  729. package/node_modules/fast-equals/dist/es/index.d.mts +66 -0
  730. package/node_modules/fast-equals/dist/es/index.mjs +642 -0
  731. package/node_modules/fast-equals/dist/es/index.mjs.map +1 -0
  732. package/node_modules/fast-equals/dist/es/internalTypes.d.mts +178 -0
  733. package/node_modules/fast-equals/dist/es/utils.d.mts +33 -0
  734. package/node_modules/fast-equals/dist/umd/comparator.d.ts +26 -0
  735. package/node_modules/fast-equals/dist/umd/equals.d.ts +62 -0
  736. package/node_modules/fast-equals/dist/umd/index.d.ts +47 -0
  737. package/node_modules/fast-equals/dist/umd/index.js +659 -0
  738. package/node_modules/fast-equals/dist/umd/index.js.map +1 -0
  739. package/node_modules/fast-equals/dist/umd/internalTypes.d.ts +159 -0
  740. package/node_modules/fast-equals/dist/umd/utils.d.ts +28 -0
  741. package/node_modules/fast-equals/index.d.ts +260 -0
  742. package/node_modules/fast-equals/package.json +113 -0
  743. package/node_modules/linkify-it/LICENSE +22 -0
  744. package/node_modules/linkify-it/README.md +196 -0
  745. package/node_modules/linkify-it/build/index.cjs.js +832 -0
  746. package/node_modules/linkify-it/index.mjs +642 -0
  747. package/node_modules/linkify-it/lib/re.mjs +189 -0
  748. package/node_modules/linkify-it/package.json +58 -0
  749. package/node_modules/markdown-it/LICENSE +22 -0
  750. package/node_modules/markdown-it/README.md +324 -0
  751. package/node_modules/markdown-it/bin/markdown-it.mjs +107 -0
  752. package/node_modules/markdown-it/dist/index.cjs.js +5547 -0
  753. package/node_modules/markdown-it/dist/markdown-it.js +6969 -0
  754. package/node_modules/markdown-it/dist/markdown-it.min.js +2 -0
  755. package/node_modules/markdown-it/index.mjs +1 -0
  756. package/node_modules/markdown-it/lib/common/html_blocks.mjs +67 -0
  757. package/node_modules/markdown-it/lib/common/html_re.mjs +25 -0
  758. package/node_modules/markdown-it/lib/common/utils.mjs +304 -0
  759. package/node_modules/markdown-it/lib/helpers/index.mjs +11 -0
  760. package/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs +77 -0
  761. package/node_modules/markdown-it/lib/helpers/parse_link_label.mjs +49 -0
  762. package/node_modules/markdown-it/lib/helpers/parse_link_title.mjs +66 -0
  763. package/node_modules/markdown-it/lib/index.mjs +565 -0
  764. package/node_modules/markdown-it/lib/parser_block.mjs +134 -0
  765. package/node_modules/markdown-it/lib/parser_core.mjs +62 -0
  766. package/node_modules/markdown-it/lib/parser_inline.mjs +197 -0
  767. package/node_modules/markdown-it/lib/presets/commonmark.mjs +88 -0
  768. package/node_modules/markdown-it/lib/presets/default.mjs +47 -0
  769. package/node_modules/markdown-it/lib/presets/zero.mjs +70 -0
  770. package/node_modules/markdown-it/lib/renderer.mjs +322 -0
  771. package/node_modules/markdown-it/lib/ruler.mjs +340 -0
  772. package/node_modules/markdown-it/lib/rules_block/blockquote.mjs +209 -0
  773. package/node_modules/markdown-it/lib/rules_block/code.mjs +30 -0
  774. package/node_modules/markdown-it/lib/rules_block/fence.mjs +94 -0
  775. package/node_modules/markdown-it/lib/rules_block/heading.mjs +51 -0
  776. package/node_modules/markdown-it/lib/rules_block/hr.mjs +40 -0
  777. package/node_modules/markdown-it/lib/rules_block/html_block.mjs +69 -0
  778. package/node_modules/markdown-it/lib/rules_block/lheading.mjs +82 -0
  779. package/node_modules/markdown-it/lib/rules_block/list.mjs +331 -0
  780. package/node_modules/markdown-it/lib/rules_block/paragraph.mjs +46 -0
  781. package/node_modules/markdown-it/lib/rules_block/reference.mjs +212 -0
  782. package/node_modules/markdown-it/lib/rules_block/state_block.mjs +220 -0
  783. package/node_modules/markdown-it/lib/rules_block/table.mjs +228 -0
  784. package/node_modules/markdown-it/lib/rules_core/block.mjs +13 -0
  785. package/node_modules/markdown-it/lib/rules_core/inline.mjs +11 -0
  786. package/node_modules/markdown-it/lib/rules_core/linkify.mjs +134 -0
  787. package/node_modules/markdown-it/lib/rules_core/normalize.mjs +17 -0
  788. package/node_modules/markdown-it/lib/rules_core/replacements.mjs +101 -0
  789. package/node_modules/markdown-it/lib/rules_core/smartquotes.mjs +193 -0
  790. package/node_modules/markdown-it/lib/rules_core/state_core.mjs +17 -0
  791. package/node_modules/markdown-it/lib/rules_core/text_join.mjs +43 -0
  792. package/node_modules/markdown-it/lib/rules_inline/autolink.mjs +72 -0
  793. package/node_modules/markdown-it/lib/rules_inline/backticks.mjs +60 -0
  794. package/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs +124 -0
  795. package/node_modules/markdown-it/lib/rules_inline/emphasis.mjs +123 -0
  796. package/node_modules/markdown-it/lib/rules_inline/entity.mjs +51 -0
  797. package/node_modules/markdown-it/lib/rules_inline/escape.mjs +69 -0
  798. package/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs +38 -0
  799. package/node_modules/markdown-it/lib/rules_inline/html_inline.mjs +50 -0
  800. package/node_modules/markdown-it/lib/rules_inline/image.mjs +138 -0
  801. package/node_modules/markdown-it/lib/rules_inline/link.mjs +139 -0
  802. package/node_modules/markdown-it/lib/rules_inline/linkify.mjs +63 -0
  803. package/node_modules/markdown-it/lib/rules_inline/newline.mjs +42 -0
  804. package/node_modules/markdown-it/lib/rules_inline/state_inline.mjs +123 -0
  805. package/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs +127 -0
  806. package/node_modules/markdown-it/lib/rules_inline/text.mjs +86 -0
  807. package/node_modules/markdown-it/lib/token.mjs +191 -0
  808. package/node_modules/markdown-it/package.json +92 -0
  809. package/node_modules/mdurl/LICENSE +45 -0
  810. package/node_modules/mdurl/README.md +102 -0
  811. package/node_modules/mdurl/build/index.cjs.js +534 -0
  812. package/node_modules/mdurl/index.mjs +11 -0
  813. package/node_modules/mdurl/lib/decode.mjs +112 -0
  814. package/node_modules/mdurl/lib/encode.mjs +89 -0
  815. package/node_modules/mdurl/lib/format.mjs +21 -0
  816. package/node_modules/mdurl/lib/parse.mjs +308 -0
  817. package/node_modules/mdurl/package.json +37 -0
  818. package/node_modules/orderedmap/LICENSE +19 -0
  819. package/node_modules/orderedmap/README.md +69 -0
  820. package/node_modules/orderedmap/dist/index.cjs +139 -0
  821. package/node_modules/orderedmap/dist/index.d.cts +33 -0
  822. package/node_modules/orderedmap/dist/index.d.ts +33 -0
  823. package/node_modules/orderedmap/dist/index.js +137 -0
  824. package/node_modules/orderedmap/package.json +39 -0
  825. package/node_modules/prosemirror-changeset/CHANGELOG.md +147 -0
  826. package/node_modules/prosemirror-changeset/LICENSE +19 -0
  827. package/node_modules/prosemirror-changeset/README.md +175 -0
  828. package/node_modules/prosemirror-changeset/dist/index.cjs +585 -0
  829. package/node_modules/prosemirror-changeset/dist/index.d.cts +186 -0
  830. package/node_modules/prosemirror-changeset/dist/index.d.ts +186 -0
  831. package/node_modules/prosemirror-changeset/dist/index.js +715 -0
  832. package/node_modules/prosemirror-changeset/package.json +40 -0
  833. package/node_modules/prosemirror-changeset/src/README.md +32 -0
  834. package/node_modules/prosemirror-changeset/src/change.ts +189 -0
  835. package/node_modules/prosemirror-changeset/src/changeset.ts +212 -0
  836. package/node_modules/prosemirror-changeset/src/diff.ts +151 -0
  837. package/node_modules/prosemirror-changeset/src/simplify.ts +132 -0
  838. package/node_modules/prosemirror-changeset/test/test-changed-range.ts +48 -0
  839. package/node_modules/prosemirror-changeset/test/test-changes.ts +211 -0
  840. package/node_modules/prosemirror-changeset/test/test-diff.ts +69 -0
  841. package/node_modules/prosemirror-changeset/test/test-merge.ts +56 -0
  842. package/node_modules/prosemirror-changeset/test/test-simplify.ts +71 -0
  843. package/node_modules/prosemirror-collab/.tern-project +8 -0
  844. package/node_modules/prosemirror-collab/CHANGELOG.md +77 -0
  845. package/node_modules/prosemirror-collab/CONTRIBUTING.md +104 -0
  846. package/node_modules/prosemirror-collab/LICENSE +19 -0
  847. package/node_modules/prosemirror-collab/README.md +28 -0
  848. package/node_modules/prosemirror-collab/dist/index.cjs +155 -0
  849. package/node_modules/prosemirror-collab/dist/index.d.cts +60 -0
  850. package/node_modules/prosemirror-collab/dist/index.d.ts +60 -0
  851. package/node_modules/prosemirror-collab/dist/index.js +156 -0
  852. package/node_modules/prosemirror-collab/package.json +40 -0
  853. package/node_modules/prosemirror-collab/src/README.md +11 -0
  854. package/node_modules/prosemirror-collab/src/collab.ts +184 -0
  855. package/node_modules/prosemirror-commands/.tern-project +8 -0
  856. package/node_modules/prosemirror-commands/CHANGELOG.md +322 -0
  857. package/node_modules/prosemirror-commands/CONTRIBUTING.md +104 -0
  858. package/node_modules/prosemirror-commands/LICENSE +19 -0
  859. package/node_modules/prosemirror-commands/README.md +28 -0
  860. package/node_modules/prosemirror-commands/dist/index.cjs +687 -0
  861. package/node_modules/prosemirror-commands/dist/index.d.cts +215 -0
  862. package/node_modules/prosemirror-commands/dist/index.d.ts +215 -0
  863. package/node_modules/prosemirror-commands/dist/index.js +850 -0
  864. package/node_modules/prosemirror-commands/package.json +39 -0
  865. package/node_modules/prosemirror-commands/src/README.md +40 -0
  866. package/node_modules/prosemirror-commands/src/commands.ts +783 -0
  867. package/node_modules/prosemirror-dropcursor/CHANGELOG.md +137 -0
  868. package/node_modules/prosemirror-dropcursor/CONTRIBUTING.md +100 -0
  869. package/node_modules/prosemirror-dropcursor/LICENSE +19 -0
  870. package/node_modules/prosemirror-dropcursor/README.md +50 -0
  871. package/node_modules/prosemirror-dropcursor/dist/index.cjs +185 -0
  872. package/node_modules/prosemirror-dropcursor/dist/index.d.cts +38 -0
  873. package/node_modules/prosemirror-dropcursor/dist/index.d.ts +38 -0
  874. package/node_modules/prosemirror-dropcursor/dist/index.js +146 -0
  875. package/node_modules/prosemirror-dropcursor/package.json +38 -0
  876. package/node_modules/prosemirror-dropcursor/src/dropcursor.ts +170 -0
  877. package/node_modules/prosemirror-gapcursor/CHANGELOG.md +122 -0
  878. package/node_modules/prosemirror-gapcursor/CONTRIBUTING.md +104 -0
  879. package/node_modules/prosemirror-gapcursor/LICENSE +19 -0
  880. package/node_modules/prosemirror-gapcursor/README.md +31 -0
  881. package/node_modules/prosemirror-gapcursor/dist/index.cjs +239 -0
  882. package/node_modules/prosemirror-gapcursor/dist/index.d.cts +31 -0
  883. package/node_modules/prosemirror-gapcursor/dist/index.d.ts +31 -0
  884. package/node_modules/prosemirror-gapcursor/dist/index.js +239 -0
  885. package/node_modules/prosemirror-gapcursor/package.json +43 -0
  886. package/node_modules/prosemirror-gapcursor/src/README.md +21 -0
  887. package/node_modules/prosemirror-gapcursor/src/gapcursor.ts +141 -0
  888. package/node_modules/prosemirror-gapcursor/src/index.ts +91 -0
  889. package/node_modules/prosemirror-gapcursor/style/gapcursor.css +25 -0
  890. package/node_modules/prosemirror-history/.tern-project +8 -0
  891. package/node_modules/prosemirror-history/CHANGELOG.md +170 -0
  892. package/node_modules/prosemirror-history/CONTRIBUTING.md +104 -0
  893. package/node_modules/prosemirror-history/LICENSE +19 -0
  894. package/node_modules/prosemirror-history/README.md +27 -0
  895. package/node_modules/prosemirror-history/dist/index.cjs +382 -0
  896. package/node_modules/prosemirror-history/dist/index.d.cts +64 -0
  897. package/node_modules/prosemirror-history/dist/index.d.ts +64 -0
  898. package/node_modules/prosemirror-history/dist/index.js +453 -0
  899. package/node_modules/prosemirror-history/package.json +40 -0
  900. package/node_modules/prosemirror-history/src/README.md +23 -0
  901. package/node_modules/prosemirror-history/src/history.ts +465 -0
  902. package/node_modules/prosemirror-inputrules/.tern-project +8 -0
  903. package/node_modules/prosemirror-inputrules/CHANGELOG.md +127 -0
  904. package/node_modules/prosemirror-inputrules/CONTRIBUTING.md +104 -0
  905. package/node_modules/prosemirror-inputrules/LICENSE +19 -0
  906. package/node_modules/prosemirror-inputrules/README.md +29 -0
  907. package/node_modules/prosemirror-inputrules/dist/index.cjs +194 -0
  908. package/node_modules/prosemirror-inputrules/dist/index.d.cts +131 -0
  909. package/node_modules/prosemirror-inputrules/dist/index.d.ts +131 -0
  910. package/node_modules/prosemirror-inputrules/dist/index.js +239 -0
  911. package/node_modules/prosemirror-inputrules/package.json +36 -0
  912. package/node_modules/prosemirror-inputrules/src/README.md +23 -0
  913. package/node_modules/prosemirror-inputrules/src/index.ts +4 -0
  914. package/node_modules/prosemirror-inputrules/src/inputrules.ts +167 -0
  915. package/node_modules/prosemirror-inputrules/src/rulebuilders.ts +59 -0
  916. package/node_modules/prosemirror-inputrules/src/rules.ts +17 -0
  917. package/node_modules/prosemirror-keymap/.tern-project +8 -0
  918. package/node_modules/prosemirror-keymap/CHANGELOG.md +104 -0
  919. package/node_modules/prosemirror-keymap/CONTRIBUTING.md +104 -0
  920. package/node_modules/prosemirror-keymap/LICENSE +19 -0
  921. package/node_modules/prosemirror-keymap/README.md +27 -0
  922. package/node_modules/prosemirror-keymap/dist/index.cjs +65 -0
  923. package/node_modules/prosemirror-keymap/dist/index.d.cts +47 -0
  924. package/node_modules/prosemirror-keymap/dist/index.d.ts +47 -0
  925. package/node_modules/prosemirror-keymap/dist/index.js +128 -0
  926. package/node_modules/prosemirror-keymap/package.json +38 -0
  927. package/node_modules/prosemirror-keymap/src/README.md +5 -0
  928. package/node_modules/prosemirror-keymap/src/keymap.ts +105 -0
  929. package/node_modules/prosemirror-markdown/.tern-project +8 -0
  930. package/node_modules/prosemirror-markdown/CHANGELOG.md +311 -0
  931. package/node_modules/prosemirror-markdown/CONTRIBUTING.md +100 -0
  932. package/node_modules/prosemirror-markdown/LICENSE +19 -0
  933. package/node_modules/prosemirror-markdown/README.md +276 -0
  934. package/node_modules/prosemirror-markdown/dist/index.cjs +966 -0
  935. package/node_modules/prosemirror-markdown/dist/index.d.cts +335 -0
  936. package/node_modules/prosemirror-markdown/dist/index.d.ts +335 -0
  937. package/node_modules/prosemirror-markdown/dist/index.js +878 -0
  938. package/node_modules/prosemirror-markdown/package.json +40 -0
  939. package/node_modules/prosemirror-markdown/src/README.md +42 -0
  940. package/node_modules/prosemirror-markdown/src/from_markdown.ts +272 -0
  941. package/node_modules/prosemirror-markdown/src/index.ts +5 -0
  942. package/node_modules/prosemirror-markdown/src/schema.ts +156 -0
  943. package/node_modules/prosemirror-markdown/src/to_markdown.ts +483 -0
  944. package/node_modules/prosemirror-menu/.tern-project +8 -0
  945. package/node_modules/prosemirror-menu/CHANGELOG.md +107 -0
  946. package/node_modules/prosemirror-menu/CONTRIBUTING.md +100 -0
  947. package/node_modules/prosemirror-menu/LICENSE +19 -0
  948. package/node_modules/prosemirror-menu/README.md +235 -0
  949. package/node_modules/prosemirror-menu/dist/index.cjs +798 -0
  950. package/node_modules/prosemirror-menu/dist/index.d.cts +281 -0
  951. package/node_modules/prosemirror-menu/dist/index.d.ts +281 -0
  952. package/node_modules/prosemirror-menu/dist/index.js +795 -0
  953. package/node_modules/prosemirror-menu/package.json +42 -0
  954. package/node_modules/prosemirror-menu/src/README.md +60 -0
  955. package/node_modules/prosemirror-menu/src/icons.ts +53 -0
  956. package/node_modules/prosemirror-menu/src/index.ts +4 -0
  957. package/node_modules/prosemirror-menu/src/menu.ts +628 -0
  958. package/node_modules/prosemirror-menu/src/menubar.ts +210 -0
  959. package/node_modules/prosemirror-menu/style/menu.css +169 -0
  960. package/node_modules/prosemirror-model/.tern-project +8 -0
  961. package/node_modules/prosemirror-model/CHANGELOG.md +730 -0
  962. package/node_modules/prosemirror-model/CONTRIBUTING.md +104 -0
  963. package/node_modules/prosemirror-model/LICENSE +19 -0
  964. package/node_modules/prosemirror-model/README.md +29 -0
  965. package/node_modules/prosemirror-model/dist/index.cjs +2898 -0
  966. package/node_modules/prosemirror-model/dist/index.d.cts +1679 -0
  967. package/node_modules/prosemirror-model/dist/index.d.ts +1679 -0
  968. package/node_modules/prosemirror-model/dist/index.js +3464 -0
  969. package/node_modules/prosemirror-model/package.json +38 -0
  970. package/node_modules/prosemirror-model/src/README.md +62 -0
  971. package/node_modules/prosemirror-model/src/comparedeep.ts +15 -0
  972. package/node_modules/prosemirror-model/src/content.ts +413 -0
  973. package/node_modules/prosemirror-model/src/diff.ts +52 -0
  974. package/node_modules/prosemirror-model/src/dom.ts +1 -0
  975. package/node_modules/prosemirror-model/src/fragment.ts +268 -0
  976. package/node_modules/prosemirror-model/src/from_dom.ts +848 -0
  977. package/node_modules/prosemirror-model/src/index.ts +11 -0
  978. package/node_modules/prosemirror-model/src/mark.ts +111 -0
  979. package/node_modules/prosemirror-model/src/node.ts +402 -0
  980. package/node_modules/prosemirror-model/src/replace.ts +225 -0
  981. package/node_modules/prosemirror-model/src/resolvedpos.ts +289 -0
  982. package/node_modules/prosemirror-model/src/schema.ts +705 -0
  983. package/node_modules/prosemirror-model/src/to_dom.ts +238 -0
  984. package/node_modules/prosemirror-schema-basic/.tern-project +8 -0
  985. package/node_modules/prosemirror-schema-basic/CHANGELOG.md +81 -0
  986. package/node_modules/prosemirror-schema-basic/CONTRIBUTING.md +100 -0
  987. package/node_modules/prosemirror-schema-basic/LICENSE +19 -0
  988. package/node_modules/prosemirror-schema-basic/README.md +28 -0
  989. package/node_modules/prosemirror-schema-basic/dist/index.cjs +246 -0
  990. package/node_modules/prosemirror-schema-basic/dist/index.d.cts +87 -0
  991. package/node_modules/prosemirror-schema-basic/dist/index.d.ts +87 -0
  992. package/node_modules/prosemirror-schema-basic/dist/index.js +183 -0
  993. package/node_modules/prosemirror-schema-basic/package.json +37 -0
  994. package/node_modules/prosemirror-schema-basic/src/README.md +8 -0
  995. package/node_modules/prosemirror-schema-basic/src/schema-basic.ts +166 -0
  996. package/node_modules/prosemirror-schema-list/.tern-project +8 -0
  997. package/node_modules/prosemirror-schema-list/CHANGELOG.md +140 -0
  998. package/node_modules/prosemirror-schema-list/CONTRIBUTING.md +100 -0
  999. package/node_modules/prosemirror-schema-list/LICENSE +19 -0
  1000. package/node_modules/prosemirror-schema-list/README.md +28 -0
  1001. package/node_modules/prosemirror-schema-list/dist/index.cjs +253 -0
  1002. package/node_modules/prosemirror-schema-list/dist/index.d.cts +71 -0
  1003. package/node_modules/prosemirror-schema-list/dist/index.d.ts +71 -0
  1004. package/node_modules/prosemirror-schema-list/dist/index.js +289 -0
  1005. package/node_modules/prosemirror-schema-list/package.json +40 -0
  1006. package/node_modules/prosemirror-schema-list/src/README.md +29 -0
  1007. package/node_modules/prosemirror-schema-list/src/schema-list.ts +267 -0
  1008. package/node_modules/prosemirror-state/.tern-project +8 -0
  1009. package/node_modules/prosemirror-state/CHANGELOG.md +296 -0
  1010. package/node_modules/prosemirror-state/CONTRIBUTING.md +104 -0
  1011. package/node_modules/prosemirror-state/LICENSE +19 -0
  1012. package/node_modules/prosemirror-state/README.md +28 -0
  1013. package/node_modules/prosemirror-state/dist/index.cjs +884 -0
  1014. package/node_modules/prosemirror-state/dist/index.d.cts +709 -0
  1015. package/node_modules/prosemirror-state/dist/index.d.ts +709 -0
  1016. package/node_modules/prosemirror-state/dist/index.js +1002 -0
  1017. package/node_modules/prosemirror-state/package.json +39 -0
  1018. package/node_modules/prosemirror-state/src/README.md +42 -0
  1019. package/node_modules/prosemirror-state/src/index.ts +7 -0
  1020. package/node_modules/prosemirror-state/src/plugin.ts +142 -0
  1021. package/node_modules/prosemirror-state/src/selection.ts +462 -0
  1022. package/node_modules/prosemirror-state/src/state.ts +266 -0
  1023. package/node_modules/prosemirror-state/src/transaction.ts +215 -0
  1024. package/node_modules/prosemirror-tables/LICENSE +19 -0
  1025. package/node_modules/prosemirror-tables/README.md +254 -0
  1026. package/node_modules/prosemirror-tables/dist/index.cjs +2683 -0
  1027. package/node_modules/prosemirror-tables/dist/index.d.cts +751 -0
  1028. package/node_modules/prosemirror-tables/dist/index.d.cts.map +1 -0
  1029. package/node_modules/prosemirror-tables/dist/index.d.ts +751 -0
  1030. package/node_modules/prosemirror-tables/dist/index.d.ts.map +1 -0
  1031. package/node_modules/prosemirror-tables/dist/index.js +2626 -0
  1032. package/node_modules/prosemirror-tables/dist/index.js.map +1 -0
  1033. package/node_modules/prosemirror-tables/package.json +80 -0
  1034. package/node_modules/prosemirror-tables/style/tables.css +48 -0
  1035. package/node_modules/prosemirror-trailing-node/LICENSE +21 -0
  1036. package/node_modules/prosemirror-trailing-node/dist/_tsup-dts-rollup.d.cts +41 -0
  1037. package/node_modules/prosemirror-trailing-node/dist/_tsup-dts-rollup.d.ts +41 -0
  1038. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.cjs +70 -0
  1039. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.d.cts +2 -0
  1040. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.d.ts +2 -0
  1041. package/node_modules/prosemirror-trailing-node/dist/prosemirror-trailing-node.js +43 -0
  1042. package/node_modules/prosemirror-trailing-node/dist-types/index.d.ts +2 -0
  1043. package/node_modules/prosemirror-trailing-node/dist-types/trailing-node-plugin.d.ts +33 -0
  1044. package/node_modules/prosemirror-trailing-node/dist-types/tsconfig.tsbuildinfo +1 -0
  1045. package/node_modules/prosemirror-trailing-node/package.json +57 -0
  1046. package/node_modules/prosemirror-trailing-node/readme.md +55 -0
  1047. package/node_modules/prosemirror-transform/.tern-project +8 -0
  1048. package/node_modules/prosemirror-transform/CHANGELOG.md +502 -0
  1049. package/node_modules/prosemirror-transform/CONTRIBUTING.md +104 -0
  1050. package/node_modules/prosemirror-transform/LICENSE +19 -0
  1051. package/node_modules/prosemirror-transform/README.md +29 -0
  1052. package/node_modules/prosemirror-transform/dist/index.cjs +1888 -0
  1053. package/node_modules/prosemirror-transform/dist/index.d.cts +847 -0
  1054. package/node_modules/prosemirror-transform/dist/index.d.ts +847 -0
  1055. package/node_modules/prosemirror-transform/dist/index.js +2181 -0
  1056. package/node_modules/prosemirror-transform/package.json +37 -0
  1057. package/node_modules/prosemirror-transform/src/README.md +59 -0
  1058. package/node_modules/prosemirror-transform/src/attr_step.ts +98 -0
  1059. package/node_modules/prosemirror-transform/src/index.ts +11 -0
  1060. package/node_modules/prosemirror-transform/src/map.ts +284 -0
  1061. package/node_modules/prosemirror-transform/src/mark.ts +106 -0
  1062. package/node_modules/prosemirror-transform/src/mark_step.ts +224 -0
  1063. package/node_modules/prosemirror-transform/src/replace.ts +460 -0
  1064. package/node_modules/prosemirror-transform/src/replace_step.ts +178 -0
  1065. package/node_modules/prosemirror-transform/src/step.ts +97 -0
  1066. package/node_modules/prosemirror-transform/src/structure.ts +349 -0
  1067. package/node_modules/prosemirror-transform/src/transform.ts +271 -0
  1068. package/node_modules/prosemirror-view/.tern-project +8 -0
  1069. package/node_modules/prosemirror-view/CHANGELOG.md +2447 -0
  1070. package/node_modules/prosemirror-view/CONTRIBUTING.md +104 -0
  1071. package/node_modules/prosemirror-view/LICENSE +19 -0
  1072. package/node_modules/prosemirror-view/README.md +28 -0
  1073. package/node_modules/prosemirror-view/dist/index.cjs +5381 -0
  1074. package/node_modules/prosemirror-view/dist/index.d.cts +904 -0
  1075. package/node_modules/prosemirror-view/dist/index.d.ts +904 -0
  1076. package/node_modules/prosemirror-view/dist/index.js +5900 -0
  1077. package/node_modules/prosemirror-view/package.json +43 -0
  1078. package/node_modules/prosemirror-view/src/README.md +38 -0
  1079. package/node_modules/prosemirror-view/src/browser.ts +24 -0
  1080. package/node_modules/prosemirror-view/src/capturekeys.ts +345 -0
  1081. package/node_modules/prosemirror-view/src/clipboard.ts +263 -0
  1082. package/node_modules/prosemirror-view/src/decoration.ts +793 -0
  1083. package/node_modules/prosemirror-view/src/dom.ts +159 -0
  1084. package/node_modules/prosemirror-view/src/domchange.ts +383 -0
  1085. package/node_modules/prosemirror-view/src/domcoords.ts +515 -0
  1086. package/node_modules/prosemirror-view/src/domobserver.ts +392 -0
  1087. package/node_modules/prosemirror-view/src/index.ts +825 -0
  1088. package/node_modules/prosemirror-view/src/input.ts +830 -0
  1089. package/node_modules/prosemirror-view/src/selection.ts +216 -0
  1090. package/node_modules/prosemirror-view/src/viewdesc.ts +1590 -0
  1091. package/node_modules/prosemirror-view/style/prosemirror.css +54 -0
  1092. package/node_modules/punycode.js/LICENSE-MIT.txt +20 -0
  1093. package/node_modules/punycode.js/README.md +148 -0
  1094. package/node_modules/punycode.js/package.json +58 -0
  1095. package/node_modules/punycode.js/punycode.es6.js +444 -0
  1096. package/node_modules/punycode.js/punycode.js +443 -0
  1097. package/node_modules/rope-sequence/LICENSE +19 -0
  1098. package/node_modules/rope-sequence/README.md +63 -0
  1099. package/node_modules/rope-sequence/dist/index.cjs +209 -0
  1100. package/node_modules/rope-sequence/dist/index.d.cts +11 -0
  1101. package/node_modules/rope-sequence/dist/index.d.ts +11 -0
  1102. package/node_modules/rope-sequence/dist/index.js +207 -0
  1103. package/node_modules/rope-sequence/index.js +190 -0
  1104. package/node_modules/rope-sequence/package.json +34 -0
  1105. package/node_modules/rope-sequence/test.js +78 -0
  1106. package/node_modules/uc.micro/LICENSE.txt +20 -0
  1107. package/node_modules/uc.micro/README.md +14 -0
  1108. package/node_modules/uc.micro/build/index.cjs.js +20 -0
  1109. package/node_modules/uc.micro/categories/Cc/regex.mjs +1 -0
  1110. package/node_modules/uc.micro/categories/Cf/regex.mjs +1 -0
  1111. package/node_modules/uc.micro/categories/P/regex.mjs +1 -0
  1112. package/node_modules/uc.micro/categories/S/regex.mjs +1 -0
  1113. package/node_modules/uc.micro/categories/Z/regex.mjs +1 -0
  1114. package/node_modules/uc.micro/index.mjs +8 -0
  1115. package/node_modules/uc.micro/package.json +37 -0
  1116. package/node_modules/uc.micro/properties/Any/regex.mjs +1 -0
  1117. package/node_modules/use-sync-external-store/LICENSE +21 -0
  1118. package/node_modules/use-sync-external-store/README.md +5 -0
  1119. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +97 -0
  1120. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +85 -0
  1121. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +95 -0
  1122. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.development.js +88 -0
  1123. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.production.js +59 -0
  1124. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +66 -0
  1125. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js +96 -0
  1126. package/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js +84 -0
  1127. package/node_modules/use-sync-external-store/cjs/use-sync-external-store.development.js +27 -0
  1128. package/node_modules/use-sync-external-store/cjs/use-sync-external-store.production.js +13 -0
  1129. package/node_modules/use-sync-external-store/index.js +7 -0
  1130. package/node_modules/use-sync-external-store/package.json +43 -0
  1131. package/node_modules/use-sync-external-store/shim/index.js +7 -0
  1132. package/node_modules/use-sync-external-store/shim/index.native.js +7 -0
  1133. package/node_modules/use-sync-external-store/shim/with-selector.js +7 -0
  1134. package/node_modules/use-sync-external-store/with-selector.js +7 -0
  1135. package/node_modules/w3c-keyname/.tern-port +1 -0
  1136. package/node_modules/w3c-keyname/LICENSE +19 -0
  1137. package/node_modules/w3c-keyname/README.md +18 -0
  1138. package/node_modules/w3c-keyname/index.cjs +127 -0
  1139. package/node_modules/w3c-keyname/index.d.cts +5 -0
  1140. package/node_modules/w3c-keyname/index.d.ts +5 -0
  1141. package/node_modules/w3c-keyname/index.js +119 -0
  1142. package/node_modules/w3c-keyname/package.json +37 -0
  1143. package/package.json +120 -3
  1144. package/public-api.md +23 -1
  1145. package/dist/chunk-5J54S5BK.js.map +0 -1
  1146. package/dist/chunk-FQQJP2GJ.js.map +0 -1
  1147. /package/dist/{chunk-WCMGQJLE.js.map → chunk-IRBOKMF5.js.map} +0 -0
@@ -1,3 +1,4 @@
1
+ import { type KeyboardEvent } from "react";
1
2
  interface Props {
2
3
  /** 受控输入内容(由 ChatView 持有,便于 attach/insertText 注入)。 */
3
4
  value: string;
@@ -28,11 +29,12 @@ interface Props {
28
29
  toolbarClassName?: string;
29
30
  queueKey?: string;
30
31
  hasAttachments?: boolean;
32
+ onKeyDown?: (event: KeyboardEvent<HTMLTextAreaElement>) => void;
31
33
  }
32
34
  /**
33
35
  * 轻量聊天输入框:textarea(Enter 发送 / Shift+Enter 换行)+ 发送/停止按钮。
34
36
  * 不含第一方版本的富文本编辑、@ 补全、技能菜单、语音输入与模型选择。
35
37
  * 内容受控,session.attach() / insertText() 通过 ChatView 注入到这里。
36
38
  */
37
- export declare function ChatInput({ value, onValueChange, onSend, onStop, isStreaming, isStopping, queueWhileRunning, mergesWithPanelAbove, placeholder, className, innerClassName, textareaClassName, toolbarClassName, queueKey, hasAttachments, }: Props): import("react/jsx-runtime").JSX.Element;
39
+ export declare function ChatInput({ value, onValueChange, onSend, onStop, isStreaming, isStopping, queueWhileRunning, mergesWithPanelAbove, placeholder, className, innerClassName, textareaClassName, toolbarClassName, queueKey, hasAttachments, onKeyDown, }: Props): import("react/jsx-runtime").JSX.Element;
38
40
  export {};
@@ -0,0 +1,14 @@
1
+ /** Shared permission decision for any session-file UI. The server checks again on submission. */
2
+ export declare function useTopicAssetSubmissionAccess(sessionId: string | null): {
3
+ data: import("@blade-hq/agent-client").ChatGroup | null | undefined;
4
+ error: Error | null;
5
+ };
6
+ export interface TopicAssetSubmitDialogProps {
7
+ sessionId: string;
8
+ topicId: string;
9
+ path: string;
10
+ onClose: () => void;
11
+ onSubmitted?: () => void;
12
+ }
13
+ /** Copy an existing sandbox file into the topic; never move or rewrite the draft. */
14
+ export declare function TopicAssetSubmitDialog({ sessionId, topicId, path, onClose, onSubmitted }: TopicAssetSubmitDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -13,6 +13,7 @@ export interface PluginConnectorItem {
13
13
  icon: string | null;
14
14
  /** 图标从哪个接口取:账号级目录,还是会话内已准备的包。 */
15
15
  iconSource: "account" | "session";
16
+ auth_status?: PluginCatalogEntry["auth_status"];
16
17
  installed: boolean | null;
17
18
  /** 会话里已提交的选择;首页候选恒为 false。 */
18
19
  active: boolean;
@@ -70,6 +70,8 @@ declare const BladeAgent: {
70
70
  groupMessagesByLoop: typeof agentClient.groupMessagesByLoop;
71
71
  transformSlashCommand: typeof agentClient.transformSlashCommand;
72
72
  userFacingErrorText: typeof agentClient.userFacingErrorText;
73
+ normalizeTopicAssetRefs: typeof agentClient.normalizeTopicAssetRefs;
74
+ normalizePluginRefs: typeof agentClient.normalizePluginRefs;
73
75
  getChat: typeof getChat;
74
76
  BladeChatElement: typeof BladeChatElement;
75
77
  };
package/dist/index.d.ts CHANGED
@@ -19,3 +19,5 @@ export type { LlmChatHandle } from "./components/LlmChat";
19
19
  export type { ChatCompletionTool, LlmChatOptions, LlmToolCall } from "./hooks/use-llm-chat";
20
20
  export { MarkdownContent } from "./chat/markdown/MarkdownContent";
21
21
  export type { MarkdownContentProps } from "./chat/markdown/MarkdownContent";
22
+ export { TopicAssetSubmitDialog, useTopicAssetSubmissionAccess } from "./components/TopicAssetSubmitDialog";
23
+ export type { TopicAssetSubmitDialogProps } from "./components/TopicAssetSubmitDialog";
package/dist/index.js CHANGED
@@ -3,13 +3,15 @@ import {
3
3
  MarkdownContent,
4
4
  ReplayBar,
5
5
  ReplayMismatchPrompt,
6
+ TopicAssetSubmitDialog,
6
7
  useAgentSession,
7
- useReplay
8
- } from "./chunk-5J54S5BK.js";
8
+ useReplay,
9
+ useTopicAssetSubmissionAccess
10
+ } from "./chunk-XJLFFRQP.js";
9
11
  import {
10
12
  BladeProvider,
11
13
  useBladeClient
12
- } from "./chunk-FQQJP2GJ.js";
14
+ } from "./chunk-UKQFSXGC.js";
13
15
  import "./chunk-PR4QN5HX.js";
14
16
  export {
15
17
  BladeProvider,
@@ -17,8 +19,10 @@ export {
17
19
  MarkdownContent,
18
20
  ReplayBar,
19
21
  ReplayMismatchPrompt,
22
+ TopicAssetSubmitDialog,
20
23
  useAgentSession,
21
24
  useBladeClient,
22
- useReplay
25
+ useReplay,
26
+ useTopicAssetSubmissionAccess
23
27
  };
24
28
  //# sourceMappingURL=index.js.map
@@ -58,3 +58,5 @@ export { SessionBranchPicker } from "./components/SessionBranchPicker";
58
58
  export type { SessionBranchPickerProps } from "./components/SessionBranchPicker";
59
59
  export { MessageImage, type MessageImageProps } from "./components/MessageImage";
60
60
  export { BackgroundWakeNotice } from "./components/BackgroundWakeNotice";
61
+ export { TopicAssetSubmitDialog, useTopicAssetSubmissionAccess } from "./components/TopicAssetSubmitDialog";
62
+ export type { TopicAssetSubmitDialogProps } from "./components/TopicAssetSubmitDialog";
package/dist/internal.js CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  SessionQueuePanel,
17
17
  TURN_NAV_HIGHLIGHT_CLASS,
18
18
  ToolUiCardView,
19
+ TopicAssetSubmitDialog,
19
20
  WhatIfUserBubble,
20
21
  isQueuePanelVisible,
21
22
  latestUserSpeechEntryId,
@@ -25,16 +26,17 @@ import {
25
26
  useLlmChat,
26
27
  useMessagePin,
27
28
  useReplay,
29
+ useTopicAssetSubmissionAccess,
28
30
  useTurnNavigation,
29
31
  useTypewriterReveal
30
- } from "./chunk-5J54S5BK.js";
32
+ } from "./chunk-XJLFFRQP.js";
31
33
  import {
32
34
  ConnectorPanel,
33
35
  PluginTriggerStack,
34
36
  TRIGGER_ICON_LIMIT,
35
37
  selectionFromItem,
36
38
  triggerSummary
37
- } from "./chunk-WCMGQJLE.js";
39
+ } from "./chunk-IRBOKMF5.js";
38
40
  import {
39
41
  BladeProvider,
40
42
  Content2,
@@ -61,7 +63,7 @@ import {
61
63
  useBladeHost,
62
64
  useOptionalBladeClient,
63
65
  useSessionPluginActivation
64
- } from "./chunk-FQQJP2GJ.js";
66
+ } from "./chunk-UKQFSXGC.js";
65
67
  import "./chunk-PR4QN5HX.js";
66
68
 
67
69
  // src/internal.ts
@@ -623,6 +625,7 @@ export {
623
625
  TRIGGER_ICON_LIMIT,
624
626
  TURN_NAV_HIGHLIGHT_CLASS,
625
627
  ToolUiCardView,
628
+ TopicAssetSubmitDialog,
626
629
  WhatIfUserBubble,
627
630
  catalogToConnectorItems,
628
631
  classifyAgentComputerLaunchOutcome,
@@ -650,6 +653,7 @@ export {
650
653
  useOptionalBladeClient,
651
654
  useReplay,
652
655
  useSessionPluginActivation,
656
+ useTopicAssetSubmissionAccess,
653
657
  useTurnNavigation,
654
658
  useTypewriterReveal
655
659
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal.ts","../src/lib/mount-renderers.tsx","../src/components/SessionMemoryToggle.tsx","../src/lib/agent-computer-command.ts","../src/components/SessionBranchPicker.tsx"],"sourcesContent":["// 第一方内部入口(`@blade-hq/agent-react/internal`):内置 Web、浏览器插件用的聊天内部块、\n// 判定逻辑与连接器组件。包含公开入口的全部内容;不进 public-api.md、README 不写,\n// 版本之间不做任何兼容保证。\nexport * from \"./index\"\n// 迁入的聊天组件、会话来源、聊天环境与宿主桥接(内置 Web、插件共用同一份)\nexport * from \"./chat\"\nexport { useBladeHost, useOptionalBladeClient } from \"./context\"\nexport { MountHostContext, MountSlot, mountRenderersToReact } from \"./lib/mount-renderers\"\n\nexport { useLlmChat } from \"./hooks/use-llm-chat\"\nexport { useMessagePin } from \"./hooks/use-message-pin\"\nexport type { UseMessagePinOptions } from \"./hooks/use-message-pin\"\nexport { useTypewriterReveal } from \"./hooks/use-typewriter-reveal\"\nexport type { UseTypewriterRevealResult } from \"./hooks/use-typewriter-reveal\"\nexport {\n latestUserSpeechEntryId,\n TURN_NAV_HIGHLIGHT_CLASS,\n turnNavItemsFromMessages,\n useTurnNavigation,\n} from \"./hooks/use-turn-navigation\"\nexport type {\n TurnNavigationOptions,\n TurnNavigationResult,\n TurnNavigationSource,\n} from \"./hooks/use-turn-navigation\"\nexport type { UseLlmChatResult } from \"./hooks/use-llm-chat\"\n\n// ============================== 连接器与插件 ==============================\nexport { ConnectorPanel } from \"./components/ConnectorPanel\"\nexport type { ConnectorPanelProps } from \"./components/ConnectorPanel\"\nexport { PluginConnectorList } from \"./components/PluginConnectorList\"\nexport type { ConfiguringPlugin, PluginConnectorListProps } from \"./components/PluginConnectorList\"\nexport { useSessionPluginActivation } from \"./components/use-session-plugin-activation\"\nexport type { UseSessionPluginActivationResult } from \"./components/use-session-plugin-activation\"\nexport {\n catalogToConnectorItems,\n filterConnectorItems,\n mergeConnectorItems,\n} from \"./components/plugin-connector\"\nexport type { PluginConnectorItem } from \"./components/plugin-connector\"\nexport { selectionFromItem, triggerSummary, TRIGGER_ICON_LIMIT } from \"./components/connector-panel-types\"\nexport type {\n PluginConnectorSelection,\n TriggerSummary,\n} from \"./components/connector-panel-types\"\nexport { SessionPluginSelector } from \"./components/SessionPluginSelector\"\nexport type { SessionPluginSelectorProps } from \"./components/SessionPluginSelector\"\nexport { SessionPluginIcon, sessionPluginLabel } from \"./components/SessionPluginIcon\"\nexport type { SessionPluginIconProps, SessionPluginLabelProps } from \"./components/SessionPluginIcon\"\nexport { PluginTriggerStack } from \"./components/PluginTriggerStack\"\nexport type { PluginTriggerStackProps } from \"./components/PluginTriggerStack\"\nexport { SessionPluginConfigDialog } from \"./components/SessionPluginConfigDialog\"\nexport type { SessionPluginConfigDialogProps } from \"./components/SessionPluginConfigDialog\"\nexport { SessionPluginConfigForm } from \"./components/SessionPluginConfigForm\"\nexport type {\n SessionPluginConfigDraft,\n SessionPluginConfigFormProps,\n} from \"./components/SessionPluginConfigForm\"\nexport { AgentChat } from \"./components/AgentChat\"\nexport type { AgentChatProps } from \"./components/AgentChat\"\nexport { LlmChat } from \"./components/LlmChat\"\nexport type { LlmChatProps } from \"./components/LlmChat\"\nexport type { LlmAdvancedSettings, LlmOverride } from \"./components/LlmAdvancedSettings\"\nexport { DEFAULT_ALLOWED_TAGS, MarkdownRenderer } from \"./components/markdown\"\nexport type {\n AllowedTags,\n CodeBlockOverrides,\n LinkSafetyConfig,\n MarkdownComponents,\n MarkdownRendererProps,\n RawHtmlPlugin,\n} from \"./components/markdown\"\nexport { WhatIfUserBubble } from \"./components/WhatIfUserBubble\"\nexport type { WhatIfUserBubbleProps } from \"./components/WhatIfUserBubble\"\nexport { parseWhatIfPrompt } from \"./lib/whatif-prompt\"\nexport type { ParsedWhatIfPrompt, WhatIfQuote } from \"./lib/whatif-prompt\"\nexport {\n getPlanUpdateDisplayState,\n isPlanUpdateTool,\n PLAN_AUTO_COLLAPSE_MS,\n parsePlanUpdate,\n pickCurrentPlanStep,\n PlanUpdateBlock,\n} from \"./components/PlanUpdateBlock\"\nexport type { PlanUpdateDisplayState } from \"./components/PlanUpdateBlock\"\nexport { ContextCard, ContextGroupCard } from \"./components/ContextCard\"\nexport type { ContextCardProps, ContextGroupCardProps } from \"./components/ContextCard\"\nexport { ToolUiCardView } from \"./components/ToolUiCardView\"\nexport { McpAppCard } from \"./components/McpAppCard\"\nexport type { McpAppMessage } from \"./components/McpAppCard\"\nexport { SessionMemoryToggle } from \"./components/SessionMemoryToggle\"\nexport type { SessionMemoryToggleProps } from \"./components/SessionMemoryToggle\"\nexport { SessionQueuePanel, isQueuePanelVisible } from \"./components/SessionQueuePanel\"\nexport type { SessionQueuePanelProps } from \"./components/SessionQueuePanel\"\n\n// ============================== 判定逻辑(不许各写一份) ==============================\n// apps/web 已开始按能力逐步消费这个包(见仓库 CLAUDE.md「聊天界面的能力先进\n// SDK」一节),但两端 UI 尚未整体收敛。这里先把电脑镜像的判定规则导出,让它可以被\n// SDK 接入方真正拿到、而不是完全不可达的死代码;接入方要自己实现「电脑镜像」\n// 标签页 UI 时可以直接复用这份判定,不用重新猜一遍规则。\n//\n// `isAgentComputerCommand`/`isAgentComputerToolCall` 只回答\"是不是一次 launch\n// 尝试\",`classifyAgentComputerLaunchOutcome` 才回答\"这次 launch 最终成不成功\"\n// ——只导出前者会让接入方把\"尝试过\"当成\"已经展示\",对失败/待定的 launch 也\n// 展示出电脑镜像面板,跟内置 Web 的实际行为不一致(Codex review 指出),所以\n// 完整判定也要一并导出。\nexport {\n isAgentComputerCommand,\n isAgentComputerToolCall,\n classifyAgentComputerLaunchOutcome,\n} from \"./lib/agent-computer-command\"\nexport type { AgentComputerLaunchOutcome } from \"./lib/agent-computer-command\"\n\n\nexport { SessionBranchPicker } from \"./components/SessionBranchPicker\"\nexport type { SessionBranchPickerProps } from \"./components/SessionBranchPicker\"\n\nexport { MessageImage, type MessageImageProps } from \"./components/MessageImage\"\n\nexport { BackgroundWakeNotice } from \"./components/BackgroundWakeNotice\"\n","import type {\n BladeChatMountRenderers,\n MountHandle,\n MountRenderer,\n MountRendererObject,\n MountResult,\n} from \"@blade-hq/agent-client\"\nimport { createContext, useContext, useId, useLayoutEffect, useRef, type ReactNode } from \"react\"\nimport type { ChatViewRenderers } from \"../chat/customization\"\n\n/**\n * 挂载节点放在哪里。\n *\n * `<blade-chat>` 把它设成元素本身:挂载节点作为元素的 light DOM 子节点,经 Shadow DOM\n * 里的 `<slot>` 显示在区块位置,宿主页面的样式(包括 Vue 的 scoped 样式)直接生效。\n * 没有设置时(npm 包里),挂载节点就是组件内的一个 div。\n */\nexport const MountHostContext = createContext<HTMLElement | null>(null)\n\nfunction normalizeResult<T>(result: MountResult<T>): MountHandle<T> {\n if (typeof result === \"function\") return { destroy: result }\n if (result && typeof result === \"object\") return result\n return { destroy: () => {} }\n}\n\nfunction toObject<T>(renderer: MountRenderer<T>): MountRendererObject<T> {\n return typeof renderer === \"function\" ? { mount: renderer } : renderer\n}\n\n/** 两份数据的顶层字段逐个相同时不必通知宿主(渲染器每次都会新建数据对象)。 */\nfunction sameData(a: object, b: object): boolean {\n const aKeys = Object.keys(a)\n if (aKeys.length !== Object.keys(b).length) return false\n return aKeys.every((key) => Object.is((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]))\n}\n\ninterface MountSlotProps<T extends object> {\n renderer: MountRendererObject<T>\n data: T\n}\n\n/** 给宿主一个 DOM 节点挂自己的内容;数据变化时原地更新或清理后重挂,卸载时清理。 */\nexport function MountSlot<T extends object>({ renderer, data }: MountSlotProps<T>) {\n const host = useContext(MountHostContext)\n const slotName = `blade-mount-${useId().replace(/[^a-zA-Z0-9_-]/g, \"\")}`\n const localRef = useRef<HTMLDivElement>(null)\n const dataRef = useRef(data)\n const mountedRef = useRef<{ target: HTMLElement; handle: MountHandle<T>; data: T } | null>(null)\n\n useLayoutEffect(() => {\n dataRef.current = data\n })\n\n // 与外部系统(宿主挂载的 DOM)同步:挂载一次,渲染器或挂载位置变了才重挂\n useLayoutEffect(() => {\n let target: HTMLElement\n if (host) {\n target = document.createElement(\"div\")\n target.slot = slotName\n host.appendChild(target)\n } else {\n if (!localRef.current) return\n target = localRef.current\n }\n const initial = dataRef.current\n mountedRef.current = { target, handle: normalizeResult(renderer.mount(target, initial)), data: initial }\n return () => {\n const mounted = mountedRef.current\n mountedRef.current = null\n mounted?.handle.destroy()\n if (host) target.remove()\n else target.replaceChildren()\n }\n }, [host, renderer, slotName])\n\n useLayoutEffect(() => {\n const mounted = mountedRef.current\n if (!mounted || sameData(mounted.data, data)) return\n mounted.data = data\n if (mounted.handle.update) {\n mounted.handle.update(data)\n return\n }\n mounted.handle.destroy()\n mounted.target.replaceChildren()\n mounted.handle = normalizeResult(renderer.mount(mounted.target, data))\n }, [data, renderer])\n\n return host ? <slot name={slotName} /> : <div ref={localRef} data-blade-mount=\"\" />\n}\n\nfunction slotFor<T extends object>(renderer: MountRendererObject<T>, data: T): ReactNode | null {\n if (renderer.match && !renderer.match(data)) return null\n return <MountSlot renderer={renderer} data={data} />\n}\n\n/**\n * 把挂载式渲染器转成普通 React 渲染器:两种写法走同一条渲染路径,`match` 返回\n * false 等于 React 渲染器返回 null(走默认渲染)。调用方要按 `renderers` 对象缓存结果,\n * 否则每次渲染都会得到新的渲染器、挂载内容被反复重建。\n */\nexport function mountRenderersToReact(\n renderers: BladeChatMountRenderers | null | undefined,\n context: { sessionId?: string } = {},\n): ChatViewRenderers | undefined {\n if (!renderers) return undefined\n const result: ChatViewRenderers = {}\n if (renderers.toolCall) {\n const renderer = toObject(renderers.toolCall)\n result.toolCall = (toolCall) => slotFor(renderer, { toolCall, sessionId: context.sessionId })\n }\n if (renderers.userMessage) {\n const renderer = toObject(renderers.userMessage)\n result.userMessage = ({ message }) => slotFor(renderer, { message })\n }\n if (renderers.assistantText) {\n const renderer = toObject(renderers.assistantText)\n result.assistantText = ({ message, streaming, compact, sessionId }) =>\n slotFor(renderer, { message, streaming, compact, sessionId })\n }\n return result\n}\n","import type { BladeClient } from \"@blade-hq/agent-client\"\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from \"react\"\nimport { useOptionalBladeClient } from \"../context\"\nimport { cn } from \"../lib/utils\"\n\ninterface SaveState {\n saving: boolean\n listeners: Set<() => void>\n}\n\nconst saveStates = new WeakMap<BladeClient, Map<string, SaveState>>()\n\nfunction getSaveState(client: BladeClient, sessionId: string): SaveState {\n let clientStates = saveStates.get(client)\n if (!clientStates) {\n clientStates = new Map()\n saveStates.set(client, clientStates)\n }\n let state = clientStates.get(sessionId)\n if (!state) {\n state = { saving: false, listeners: new Set() }\n clientStates.set(sessionId, state)\n }\n return state\n}\n\nfunction notify(state: SaveState) {\n for (const listener of state.listeners) listener()\n}\n\nfunction cleanupSaveState(client: BladeClient, sessionId: string, state: SaveState) {\n if (state.saving || state.listeners.size > 0) return\n const clientStates = saveStates.get(client)\n if (clientStates?.get(sessionId) === state) clientStates.delete(sessionId)\n}\n\nexport interface SessionMemoryToggleProps {\n sessionId: string\n enabled: boolean\n /** 不在 BladeProvider 内使用时显式传入,与宿主现有 BladeClient 复用连接和鉴权。 */\n client?: BladeClient\n disabled?: boolean\n label?: string\n className?: string\n labelClassName?: string\n inputClassName?: string\n onSaved?: (sessionId: string, enabled: boolean) => void\n onError?: (error: unknown) => void\n}\n\n/**\n * 当前会话记忆开关。同一 client + sessionId 的所有实例共享保存锁,避免多个聊天入口\n * 或会话切换时发出乱序更新;服务端成功后才通过 onSaved 交还权威值。\n */\nexport function SessionMemoryToggle({\n sessionId,\n enabled,\n client: clientProp,\n disabled = false,\n label = \"当前会话使用记忆\",\n className,\n labelClassName,\n inputClassName,\n onSaved,\n onError,\n}: SessionMemoryToggleProps) {\n const contextClient = useOptionalBladeClient()\n const client = clientProp ?? contextClient\n if (!client) {\n throw new Error(\"SessionMemoryToggle 必须在 <BladeProvider> 内使用或显式传入 client\")\n }\n\n const saveState = getSaveState(client, sessionId)\n const subscribe = useCallback(\n (listener: () => void) => {\n saveState.listeners.add(listener)\n return () => {\n saveState.listeners.delete(listener)\n cleanupSaveState(client, sessionId, saveState)\n }\n },\n [client, saveState, sessionId],\n )\n const getSaving = useCallback(() => saveState.saving, [saveState])\n const saving = useSyncExternalStore(\n subscribe,\n getSaving,\n getSaving,\n )\n const [draftEnabled, setDraftEnabled] = useState(enabled)\n const activeSessionIdRef = useRef(sessionId)\n activeSessionIdRef.current = sessionId\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: a new session must discard this component instance's optimistic value even when both sessions share the same enabled prop\n useEffect(() => {\n setDraftEnabled(enabled)\n }, [enabled, sessionId])\n\n const update = useCallback(\n (nextEnabled: boolean) => {\n const currentSaveState = getSaveState(client, sessionId)\n if (currentSaveState.saving) return\n currentSaveState.saving = true\n notify(currentSaveState)\n setDraftEnabled(nextEnabled)\n\n void client.sessions.updateSessionMemory(sessionId, nextEnabled).then(\n (updated) => {\n if (activeSessionIdRef.current === sessionId) {\n setDraftEnabled(updated.memory_enabled)\n }\n onSaved?.(sessionId, updated.memory_enabled)\n },\n (error) => {\n if (activeSessionIdRef.current === sessionId) setDraftEnabled(enabled)\n onError?.(error)\n },\n ).finally(() => {\n currentSaveState.saving = false\n notify(currentSaveState)\n cleanupSaveState(client, sessionId, currentSaveState)\n })\n },\n [client, enabled, onError, onSaved, sessionId],\n )\n\n return (\n <label className={cn(\"flex items-center justify-between\", className)}>\n <span className={labelClassName}>{label}</span>\n <input\n type=\"checkbox\"\n checked={draftEnabled}\n onChange={(event) => update(event.target.checked)}\n disabled={disabled || saving}\n className={inputClassName}\n />\n </label>\n )\n}\n","/** 智能体是否在沙盒里启动了通用应用镜像(computer launch)。\n *\n * 只认「命令位置」上的 `computer launch`(行首 / `;` / `&&` / `|` / 换行 / 子 shell\n * 之后),避免路径、参数里恰好含 computer 的误判。\n *\n * 只认 `launch` 子命令,不认 `status`/`screenshot`/`click` 等——判据是「agent 启动过\n * 一个目标」,不是「agent 调用过任意 computer 子命令」。\n *\n * 与 apps/web/src/agent/lib/agent-computer-command.ts 保持同名同签名(判定逻辑不许\n * 各写一份,见仓库 CLAUDE.md),从 src/index.ts 导出给 SDK 接入方直接用。\n *\n * 注意:`isAgentComputerCommand`/`isAgentComputerToolCall` 只回答\"这条命令是不是\n * 一次 launch 尝试\",不回答\"这次 launch 最终成不成功\"——待处理/已失败的 launch\n * 也会命中这两个判定。SDK 接入方如果只用这两个函数就决定要不要展示自己的「电脑\n * 镜像」UI,会在启动失败/还没跑完时也展示出来,跟内置 Web 的实际行为不一致\n * (Codex review 指出:内置 Web 用下面的 `classifyAgentComputerLaunchOutcome`\n * 做完整判定,SDK 侧之前只导出了弱判据,等于把这道判断题的一半留给接入方自己\n * 猜)。下面把完整判定也一并导出,接入方要自己实现「电脑镜像」面板时不用重新\n * 猜一遍这条规则。\n */\nconst COMPUTER_LAUNCH_COMMAND_PATTERN = /(?:^|[\\n;&|(]\\s*)computer\\s+launch(?:\\s|$)/\n\nexport function isAgentComputerCommand(command: string): boolean {\n return COMPUTER_LAUNCH_COMMAND_PATTERN.test(command)\n}\n\n/** 工具调用的 JSON 参数里是不是一条 computer launch 命令。 */\nexport function isAgentComputerToolCall(argumentsJson: string | null | undefined): boolean {\n if (!argumentsJson) return false\n let command: unknown\n try {\n const parsed: unknown = JSON.parse(argumentsJson)\n if (typeof parsed !== \"object\" || parsed === null) return false\n command = (parsed as { command?: unknown }).command\n } catch {\n return false\n }\n return typeof command === \"string\" && isAgentComputerCommand(command)\n}\n\nexport type AgentComputerLaunchOutcome = \"pending\" | \"succeeded\" | \"failed\" | \"unknown\"\n\n// computer launch 自己成功时唯一打印的这行文本(见 appmirrord/cmd/computer/\n// launch.go 的 cmdLaunch),不会被任何其它 computer 子命令打印。判定\"launch\n// 是不是真的成功了\"首选看这个标记有没有出现在输出里,而不是看整条 Bash\n// 命令的最终退出码——同一次 Bash 调用可能是 `computer launch ... && computer\n// screenshot` 这种复合命令,launch 自己成功、后面的 screenshot 失败时,整条\n// 命令的退出码是非零,但 launch 明明是成功的。这个标记不受复合命令后半段成\n// 不成功的影响,直接对应 launch 自己有没有跑到成功打印那一步。\n//\n// 与 apps/web/src/agent/lib/agent-computer-command.ts 保持同名同签名——两边\n// 内容目前完全一致,改一处记得同步另一处。\nconst LAUNCH_SUCCESS_MARKER = \"已启动 \"\n\nfunction resultContainsLaunchSuccessMarker(result: unknown, depth = 0): boolean {\n if (depth > 2) return false // 防止极端嵌套结构把这段扫描拖成性能问题,正常数据不会嵌这么深\n if (typeof result === \"string\") {\n if (result.includes(LAUNCH_SUCCESS_MARKER)) return true\n try {\n return resultContainsLaunchSuccessMarker(JSON.parse(result), depth + 1)\n } catch {\n return false\n }\n }\n if (typeof result === \"object\" && result !== null) {\n for (const value of Object.values(result as Record<string, unknown>)) {\n if (typeof value === \"string\" && value.includes(LAUNCH_SUCCESS_MARKER)) return true\n }\n }\n return false\n}\n\n/** `computer launch` 这条 Bash 工具调用最终是不是真的启动成功了——不能只看\n * `isAgentComputerToolCall` 命中参数就当作成功:可执行文件缺失/不可执行、\n * 启动后随即退出这些 appmirrord 侧的失败,Bash 工具调用本身仍然会走完\n * `status: \"done\"`(Bash 工具的职责是\"跑完这条命令\",命令自己返回非零退出码\n * 不算工具调用失败)。\n *\n * 唯一的判据是输出里有没有出现 `LAUNCH_SUCCESS_MARKER`——launch.go 的\n * cmdLaunch 只要走到成功分支就一定会打印这行文本,不存在\"成功了但没打印\"\n * 的路径。标记缺失就等价于没有走到那条成功路径,不再退回看 `result.exit_code`\n * 当兜底:那样会给 `computer launch ... || echo failed` 这类复合命令开口子,\n * 让真实失败的 launch 被误判成 succeeded。\n *\n * \"pending\":还没跑完(status 既不是终态失败也不是 done),调用方不该现在\n * 就下结论,也不该把这次调用标记成\"已处理\"——等下一次状态更新再重新判断。\n *\n * \"unknown\":`status: \"done\"` 但 `result` 本身缺失(不是\"有 result、没有标记\",\n * 是根本没有 result 这个字段)——历史会话被整理(compaction)之后,归档的\n * 工具调用只保留 `arguments`/`status` 这类摘要字段,完整 `result` payload 不\n * 会重新序列化进历史投影,这是已知且刻意的压缩形状,不是数据丢失异常。这种\n * 情况下\"没看到成功标记\"不能说明\"这次 launch 失败了\",只能说明\"证据被裁剪\n * 了\"——跟\"result 确实回来了、里面就是没有这行文本\"是两种不同性质的证据,\n * 前者不能定性为 failed,接入方要按自己的场景(标签页展示可以偏宽松,自动\n * 跳转/替用户做决定的场景应该偏保守)自己决定怎么用。\n *\n * 与 apps/web/src/agent/lib/agent-computer-command.ts 保持同名同签名——两边\n * 内容目前完全一致,改一处记得同步另一处。 */\nexport function classifyAgentComputerLaunchOutcome(toolCall: {\n status?: string\n result?: unknown\n}): AgentComputerLaunchOutcome {\n if (toolCall.status === \"error\" || toolCall.status === \"cancelled\") return \"failed\"\n if (toolCall.status !== \"done\") return \"pending\"\n if (toolCall.result === undefined || toolCall.result === null) return \"unknown\"\n return resultContainsLaunchSuccessMarker(toolCall.result) ? \"succeeded\" : \"failed\"\n}\n","import type { BladeClient } from \"@blade-hq/agent-client\"\nimport * as Tooltip from \"@radix-ui/react-tooltip\"\nimport { useMemo, useState } from \"react\"\nimport { cn } from \"../lib/utils\"\n\ntype CheckpointTree = Awaited<ReturnType<BladeClient[\"sessions\"][\"getSessionCheckpoints\"]>>\ntype CheckpointNode = CheckpointTree[\"nodes\"][number]\n\nexport interface SessionBranchPickerProps {\n tree: CheckpointTree\n /** Disable changes while this session is running or read-only. */\n disabled?: boolean\n /** Restore only the conversation; the host owns history refresh and composer drafts. */\n onCheckout: (checkpointId: string, position: \"before\" | \"turn_end\") => Promise<void>\n}\n\nconst ROW_HEIGHT = 32\nconst SVG_WIDTH = 44\n\ninterface LayoutNode {\n id: string\n column: number\n row: number\n parentRow: number | null\n parentColumn: number | null\n isActive: boolean\n isCurrent: boolean\n isVirtual: boolean\n preview: string\n content: string\n}\n\ninterface LayoutGraph {\n nodes: LayoutNode[]\n hasCycle: boolean\n maxColumn: number\n maxRow: number\n}\n\nexport function SessionBranchPicker({\n tree,\n disabled = false,\n onCheckout,\n}: SessionBranchPickerProps) {\n const [checkoutError, setCheckoutError] = useState<string | null>(null)\n const [pendingNodeId, setPendingNodeId] = useState<string | null>(null)\n const hasHistory = tree.nodes.length > 0\n const layout = useMemo(() => buildLayoutNodes(tree), [tree])\n const nodeMap = useMemo(() => new Map(tree.nodes.map((node) => [node.id, node])), [tree])\n const isBusy = disabled || pendingNodeId !== null\n const graphHeight = Math.max((layout.maxRow + 1) * ROW_HEIGHT, ROW_HEIGHT)\n const graphWidth = Math.max(SVG_WIDTH, getColumnX(layout.maxColumn) + 12)\n\n async function checkoutNode(node: CheckpointNode, position: \"before\" | \"turn_end\") {\n if (isBusy) return\n setCheckoutError(null)\n setPendingNodeId(node.id)\n try {\n await onCheckout(node.id, position)\n } catch (error) {\n setCheckoutError(error instanceof Error ? error.message : \"切换失败,请稍后重试\")\n } finally {\n setPendingNodeId(null)\n }\n }\n\n async function handleVirtualClick(node: LayoutNode) {\n if (isBusy || !node.isVirtual || node.isActive) return\n const sourceNode = nodeMap.get(node.content)\n if (sourceNode) await checkoutNode(sourceNode, \"turn_end\")\n }\n\n async function handleNodeSelect(node: LayoutNode) {\n if (isBusy) return\n const sourceNode = nodeMap.get(node.id)\n if (sourceNode) await checkoutNode(sourceNode, \"before\")\n }\n\n if (!hasHistory) return null\n\n return (\n <Tooltip.Provider delayDuration={200}>\n {checkoutError ? (\n <p role=\"alert\" className=\"mb-2 text-xs text-destructive\">\n {checkoutError}\n </p>\n ) : null}\n <div className=\"flex max-h-52 justify-center overflow-x-auto overflow-y-auto\">\n <div className=\"relative\" style={{ height: graphHeight, width: graphWidth }}>\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-0 top-0 z-10 overflow-visible\"\n width={graphWidth}\n height={graphHeight}\n viewBox={`0 0 ${graphWidth} ${graphHeight}`}\n fill=\"none\"\n >\n {layout.nodes.map((node) => {\n if (node.parentRow == null || node.parentColumn == null) {\n return null\n }\n\n const childStroke = node.isActive\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\"\n\n return (\n <path\n key={`path-${node.id}`}\n d={buildEdgePath(\n getColumnX(node.parentColumn),\n getRowY(node.parentRow),\n getColumnX(node.column),\n getRowY(node.row),\n )}\n stroke={childStroke}\n strokeOpacity={node.isActive ? 0.95 : 0.45}\n strokeWidth={node.isActive ? 1.8 : 1.4}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray={node.isVirtual ? \"3 3\" : undefined}\n />\n )\n })}\n </svg>\n\n <div className=\"relative z-0 h-full\">\n {layout.nodes.map((node) => {\n const isPendingNode = pendingNodeId === node.id\n const color = node.isActive ? \"hsl(var(--primary))\" : \"hsl(var(--muted-foreground))\"\n const previewText = node.isVirtual\n ? isPendingNode\n ? \"切换中...\"\n : \"\"\n : isPendingNode\n ? \"切换中...\"\n : node.preview\n const shouldShowTooltip = !node.isVirtual || Boolean(previewText)\n const button = (\n <button\n type=\"button\"\n onClick={() =>\n void (node.isVirtual ? handleVirtualClick(node) : handleNodeSelect(node))\n }\n disabled={isBusy}\n aria-current={!node.isVirtual && node.isCurrent ? \"step\" : undefined}\n aria-label={node.isVirtual ? \"切换到该分支\" : node.preview}\n className={cn(\n \"absolute z-20 m-0 h-8 w-6 overflow-visible border-0 bg-transparent p-0\",\n isBusy ? \"cursor-not-allowed opacity-60\" : \"cursor-pointer\",\n )}\n style={{\n top: node.row * ROW_HEIGHT,\n left: getColumnX(node.column) - 12,\n }}\n >\n <span aria-hidden=\"true\" className=\"absolute left-0 top-0 h-8 w-6\">\n <svg\n aria-hidden=\"true\"\n role=\"img\"\n className=\"pointer-events-none absolute left-0 top-0 h-full w-full overflow-visible\"\n width={24}\n height={ROW_HEIGHT}\n viewBox={`0 0 24 ${ROW_HEIGHT}`}\n fill=\"none\"\n >\n {node.isVirtual ? (\n <circle\n cx={12}\n cy={ROW_HEIGHT / 2}\n r={3.5}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.2}\n strokeDasharray=\"2 2\"\n opacity={0.7}\n />\n ) : (\n <g>\n {node.isCurrent ? (\n <circle cx={12} cy={ROW_HEIGHT / 2} r={9} fill={color} opacity={0.18} />\n ) : null}\n <circle\n cx={12}\n cy={ROW_HEIGHT / 2}\n r={node.isCurrent ? 5.5 : 4}\n fill={color}\n />\n </g>\n )}\n </svg>\n </span>\n </button>\n )\n\n if (!shouldShowTooltip) {\n return <div key={node.id}>{button}</div>\n }\n\n return (\n <Tooltip.Root key={node.id}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n side=\"right\"\n sideOffset={8}\n className={cn(\n // z-[60]:这张图会被放进回溯弹层(z-50 且背景不透明),\n // 消息预览不抬到弹层之上就会被它的背景吃掉。\n \"z-[60] rounded-md border border-border bg-popover px-2 py-1 text-xs text-foreground shadow-md\",\n !node.isVirtual && node.isCurrent && \"font-semibold\",\n )}\n >\n {previewText}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )\n })}\n </div>\n </div>\n </div>\n </Tooltip.Provider>\n )\n}\nfunction buildLayoutNodes(tree: CheckpointTree | undefined): LayoutGraph {\n if (!tree || tree.nodes.length === 0) {\n return { nodes: [], hasCycle: false, maxColumn: 0, maxRow: 0 }\n }\n\n const nodeMap = new Map(tree.nodes.map((node) => [node.id, node]))\n const order = new Map(tree.nodes.map((node, index) => [node.id, index]))\n const childrenMap = new Map<string | null, CheckpointNode[]>()\n\n for (const node of tree.nodes) {\n const parentId = node.parent_id && nodeMap.has(node.parent_id) ? node.parent_id : null\n const siblings = childrenMap.get(parentId) ?? []\n siblings.push(node)\n childrenMap.set(parentId, siblings)\n }\n\n const activeIds = new Set<string>()\n const activeVisited = new Set<string>()\n const leafId = tree.leaf_id\n let current = tree.leaf_id\n\n while (current && nodeMap.has(current) && !activeVisited.has(current)) {\n activeIds.add(current)\n activeVisited.add(current)\n current = nodeMap.get(current)?.parent_id ?? null\n }\n\n const layoutNodes: LayoutNode[] = []\n const placed = new Set<string>()\n const visiting = new Set<string>()\n let nextColumn = 1\n let maxColumn = 0\n let maxRow = 0\n let hasCycle = false\n\n const rootSort = (a: CheckpointNode, b: CheckpointNode) =>\n (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0)\n\n const childSort = (a: CheckpointNode, b: CheckpointNode) =>\n (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0)\n\n const allocateColumn = () => {\n const fresh = nextColumn\n nextColumn += 1\n return fresh\n }\n\n function walk(node: CheckpointNode, parent: LayoutNode | null, column: number, row: number) {\n if (visiting.has(node.id)) {\n hasCycle = true\n return\n }\n\n if (placed.has(node.id)) {\n return\n }\n\n visiting.add(node.id)\n maxColumn = Math.max(maxColumn, column)\n maxRow = Math.max(maxRow, row)\n\n const layoutNode: LayoutNode = {\n id: node.id,\n column,\n row,\n parentRow: parent?.row ?? null,\n parentColumn: parent?.column ?? null,\n isActive: activeIds.has(node.id),\n isCurrent: node.id === leafId,\n isVirtual: false,\n preview: formatPreview(node.content_preview),\n content: node.content,\n }\n\n layoutNodes.push(layoutNode)\n placed.add(node.id)\n\n const children = [...(childrenMap.get(node.id) ?? [])].sort(childSort)\n\n if (children.length === 0) {\n const virtualRow = row + 1\n maxRow = Math.max(maxRow, virtualRow)\n layoutNodes.push({\n id: `__virtual__${node.id}`,\n column,\n row: virtualRow,\n parentRow: layoutNode.row,\n parentColumn: layoutNode.column,\n isActive: activeIds.has(node.id),\n isCurrent: false,\n isVirtual: true,\n preview: \"\",\n content: node.id,\n })\n } else {\n for (const [index, child] of children.entries()) {\n if (visiting.has(child.id)) {\n hasCycle = true\n continue\n }\n\n const childColumn = index === 0 ? column : allocateColumn()\n walk(child, layoutNode, childColumn, row + 1)\n }\n }\n\n visiting.delete(node.id)\n }\n\n const roots = [...(childrenMap.get(null) ?? [])].sort(rootSort)\n for (const [index, root] of roots.entries()) {\n const rootColumn = index === 0 ? 0 : allocateColumn()\n walk(root, null, rootColumn, 0)\n }\n\n for (const node of [...tree.nodes].sort(rootSort)) {\n if (!placed.has(node.id)) {\n hasCycle = true\n const rootColumn = layoutNodes.length === 0 ? 0 : allocateColumn()\n walk(node, null, rootColumn, 0)\n }\n }\n\n return {\n nodes: layoutNodes,\n hasCycle,\n maxColumn,\n maxRow,\n }\n}\n\nfunction formatPreview(preview: string): string {\n const normalized = preview.replace(/\\s+/g, \" \").trim()\n return normalized.length > 0 ? normalized : \"(空消息)\"\n}\n\nfunction getColumnX(column: number): number {\n return 12 + column * 24\n}\n\nfunction getRowY(row: number): number {\n return row * ROW_HEIGHT + ROW_HEIGHT / 2\n}\n\nfunction buildEdgePath(fromX: number, fromY: number, toX: number, toY: number): string {\n if (fromX === toX || fromY === toY) {\n return `M ${fromX} ${fromY} L ${toX} ${toY}`\n }\n\n // Branch line: horizontal from parent to child column, then vertical down\n const r = Math.min(5, Math.abs(toX - fromX), Math.abs(toY - fromY))\n const dx = toX > fromX ? 1 : -1\n\n return [\n `M ${fromX} ${fromY}`,\n `H ${toX - dx * r}`,\n `A ${r} ${r} 0 0 ${dx > 0 ? 1 : 0} ${toX} ${fromY + r}`,\n `V ${toY}`,\n ].join(\" \")\n}\n"],"mappings":"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","names":["useRef","jsx","useRef","useState","jsx","jsxs","useState"]}
1
+ {"version":3,"sources":["../src/internal.ts","../src/lib/mount-renderers.tsx","../src/components/SessionMemoryToggle.tsx","../src/lib/agent-computer-command.ts","../src/components/SessionBranchPicker.tsx"],"sourcesContent":["// 第一方内部入口(`@blade-hq/agent-react/internal`):内置 Web、浏览器插件用的聊天内部块、\n// 判定逻辑与连接器组件。包含公开入口的全部内容;不进 public-api.md、README 不写,\n// 版本之间不做任何兼容保证。\nexport * from \"./index\"\n// 迁入的聊天组件、会话来源、聊天环境与宿主桥接(内置 Web、插件共用同一份)\nexport * from \"./chat\"\nexport { useBladeHost, useOptionalBladeClient } from \"./context\"\nexport { MountHostContext, MountSlot, mountRenderersToReact } from \"./lib/mount-renderers\"\n\nexport { useLlmChat } from \"./hooks/use-llm-chat\"\nexport { useMessagePin } from \"./hooks/use-message-pin\"\nexport type { UseMessagePinOptions } from \"./hooks/use-message-pin\"\nexport { useTypewriterReveal } from \"./hooks/use-typewriter-reveal\"\nexport type { UseTypewriterRevealResult } from \"./hooks/use-typewriter-reveal\"\nexport {\n latestUserSpeechEntryId,\n TURN_NAV_HIGHLIGHT_CLASS,\n turnNavItemsFromMessages,\n useTurnNavigation,\n} from \"./hooks/use-turn-navigation\"\nexport type {\n TurnNavigationOptions,\n TurnNavigationResult,\n TurnNavigationSource,\n} from \"./hooks/use-turn-navigation\"\nexport type { UseLlmChatResult } from \"./hooks/use-llm-chat\"\n\n// ============================== 连接器与插件 ==============================\nexport { ConnectorPanel } from \"./components/ConnectorPanel\"\nexport type { ConnectorPanelProps } from \"./components/ConnectorPanel\"\nexport { PluginConnectorList } from \"./components/PluginConnectorList\"\nexport type { ConfiguringPlugin, PluginConnectorListProps } from \"./components/PluginConnectorList\"\nexport { useSessionPluginActivation } from \"./components/use-session-plugin-activation\"\nexport type { UseSessionPluginActivationResult } from \"./components/use-session-plugin-activation\"\nexport {\n catalogToConnectorItems,\n filterConnectorItems,\n mergeConnectorItems,\n} from \"./components/plugin-connector\"\nexport type { PluginConnectorItem } from \"./components/plugin-connector\"\nexport { selectionFromItem, triggerSummary, TRIGGER_ICON_LIMIT } from \"./components/connector-panel-types\"\nexport type {\n PluginConnectorSelection,\n TriggerSummary,\n} from \"./components/connector-panel-types\"\nexport { SessionPluginSelector } from \"./components/SessionPluginSelector\"\nexport type { SessionPluginSelectorProps } from \"./components/SessionPluginSelector\"\nexport { SessionPluginIcon, sessionPluginLabel } from \"./components/SessionPluginIcon\"\nexport type { SessionPluginIconProps, SessionPluginLabelProps } from \"./components/SessionPluginIcon\"\nexport { PluginTriggerStack } from \"./components/PluginTriggerStack\"\nexport type { PluginTriggerStackProps } from \"./components/PluginTriggerStack\"\nexport { SessionPluginConfigDialog } from \"./components/SessionPluginConfigDialog\"\nexport type { SessionPluginConfigDialogProps } from \"./components/SessionPluginConfigDialog\"\nexport { SessionPluginConfigForm } from \"./components/SessionPluginConfigForm\"\nexport type {\n SessionPluginConfigDraft,\n SessionPluginConfigFormProps,\n} from \"./components/SessionPluginConfigForm\"\nexport { AgentChat } from \"./components/AgentChat\"\nexport type { AgentChatProps } from \"./components/AgentChat\"\nexport { LlmChat } from \"./components/LlmChat\"\nexport type { LlmChatProps } from \"./components/LlmChat\"\nexport type { LlmAdvancedSettings, LlmOverride } from \"./components/LlmAdvancedSettings\"\nexport { DEFAULT_ALLOWED_TAGS, MarkdownRenderer } from \"./components/markdown\"\nexport type {\n AllowedTags,\n CodeBlockOverrides,\n LinkSafetyConfig,\n MarkdownComponents,\n MarkdownRendererProps,\n RawHtmlPlugin,\n} from \"./components/markdown\"\nexport { WhatIfUserBubble } from \"./components/WhatIfUserBubble\"\nexport type { WhatIfUserBubbleProps } from \"./components/WhatIfUserBubble\"\nexport { parseWhatIfPrompt } from \"./lib/whatif-prompt\"\nexport type { ParsedWhatIfPrompt, WhatIfQuote } from \"./lib/whatif-prompt\"\nexport {\n getPlanUpdateDisplayState,\n isPlanUpdateTool,\n PLAN_AUTO_COLLAPSE_MS,\n parsePlanUpdate,\n pickCurrentPlanStep,\n PlanUpdateBlock,\n} from \"./components/PlanUpdateBlock\"\nexport type { PlanUpdateDisplayState } from \"./components/PlanUpdateBlock\"\nexport { ContextCard, ContextGroupCard } from \"./components/ContextCard\"\nexport type { ContextCardProps, ContextGroupCardProps } from \"./components/ContextCard\"\nexport { ToolUiCardView } from \"./components/ToolUiCardView\"\nexport { McpAppCard } from \"./components/McpAppCard\"\nexport type { McpAppMessage } from \"./components/McpAppCard\"\nexport { SessionMemoryToggle } from \"./components/SessionMemoryToggle\"\nexport type { SessionMemoryToggleProps } from \"./components/SessionMemoryToggle\"\nexport { SessionQueuePanel, isQueuePanelVisible } from \"./components/SessionQueuePanel\"\nexport type { SessionQueuePanelProps } from \"./components/SessionQueuePanel\"\n\n// ============================== 判定逻辑(不许各写一份) ==============================\n// apps/web 已开始按能力逐步消费这个包(见仓库 CLAUDE.md「聊天界面的能力先进\n// SDK」一节),但两端 UI 尚未整体收敛。这里先把电脑镜像的判定规则导出,让它可以被\n// SDK 接入方真正拿到、而不是完全不可达的死代码;接入方要自己实现「电脑镜像」\n// 标签页 UI 时可以直接复用这份判定,不用重新猜一遍规则。\n//\n// `isAgentComputerCommand`/`isAgentComputerToolCall` 只回答\"是不是一次 launch\n// 尝试\",`classifyAgentComputerLaunchOutcome` 才回答\"这次 launch 最终成不成功\"\n// ——只导出前者会让接入方把\"尝试过\"当成\"已经展示\",对失败/待定的 launch 也\n// 展示出电脑镜像面板,跟内置 Web 的实际行为不一致(Codex review 指出),所以\n// 完整判定也要一并导出。\nexport {\n isAgentComputerCommand,\n isAgentComputerToolCall,\n classifyAgentComputerLaunchOutcome,\n} from \"./lib/agent-computer-command\"\nexport type { AgentComputerLaunchOutcome } from \"./lib/agent-computer-command\"\n\n\nexport { SessionBranchPicker } from \"./components/SessionBranchPicker\"\nexport type { SessionBranchPickerProps } from \"./components/SessionBranchPicker\"\n\nexport { MessageImage, type MessageImageProps } from \"./components/MessageImage\"\n\nexport { BackgroundWakeNotice } from \"./components/BackgroundWakeNotice\"\n\nexport { TopicAssetSubmitDialog, useTopicAssetSubmissionAccess } from \"./components/TopicAssetSubmitDialog\"\nexport type { TopicAssetSubmitDialogProps } from \"./components/TopicAssetSubmitDialog\"\n","import type {\n BladeChatMountRenderers,\n MountHandle,\n MountRenderer,\n MountRendererObject,\n MountResult,\n} from \"@blade-hq/agent-client\"\nimport { createContext, useContext, useId, useLayoutEffect, useRef, type ReactNode } from \"react\"\nimport type { ChatViewRenderers } from \"../chat/customization\"\n\n/**\n * 挂载节点放在哪里。\n *\n * `<blade-chat>` 把它设成元素本身:挂载节点作为元素的 light DOM 子节点,经 Shadow DOM\n * 里的 `<slot>` 显示在区块位置,宿主页面的样式(包括 Vue 的 scoped 样式)直接生效。\n * 没有设置时(npm 包里),挂载节点就是组件内的一个 div。\n */\nexport const MountHostContext = createContext<HTMLElement | null>(null)\n\nfunction normalizeResult<T>(result: MountResult<T>): MountHandle<T> {\n if (typeof result === \"function\") return { destroy: result }\n if (result && typeof result === \"object\") return result\n return { destroy: () => {} }\n}\n\nfunction toObject<T>(renderer: MountRenderer<T>): MountRendererObject<T> {\n return typeof renderer === \"function\" ? { mount: renderer } : renderer\n}\n\n/** 两份数据的顶层字段逐个相同时不必通知宿主(渲染器每次都会新建数据对象)。 */\nfunction sameData(a: object, b: object): boolean {\n const aKeys = Object.keys(a)\n if (aKeys.length !== Object.keys(b).length) return false\n return aKeys.every((key) => Object.is((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]))\n}\n\ninterface MountSlotProps<T extends object> {\n renderer: MountRendererObject<T>\n data: T\n}\n\n/** 给宿主一个 DOM 节点挂自己的内容;数据变化时原地更新或清理后重挂,卸载时清理。 */\nexport function MountSlot<T extends object>({ renderer, data }: MountSlotProps<T>) {\n const host = useContext(MountHostContext)\n const slotName = `blade-mount-${useId().replace(/[^a-zA-Z0-9_-]/g, \"\")}`\n const localRef = useRef<HTMLDivElement>(null)\n const dataRef = useRef(data)\n const mountedRef = useRef<{ target: HTMLElement; handle: MountHandle<T>; data: T } | null>(null)\n\n useLayoutEffect(() => {\n dataRef.current = data\n })\n\n // 与外部系统(宿主挂载的 DOM)同步:挂载一次,渲染器或挂载位置变了才重挂\n useLayoutEffect(() => {\n let target: HTMLElement\n if (host) {\n target = document.createElement(\"div\")\n target.slot = slotName\n host.appendChild(target)\n } else {\n if (!localRef.current) return\n target = localRef.current\n }\n const initial = dataRef.current\n mountedRef.current = { target, handle: normalizeResult(renderer.mount(target, initial)), data: initial }\n return () => {\n const mounted = mountedRef.current\n mountedRef.current = null\n mounted?.handle.destroy()\n if (host) target.remove()\n else target.replaceChildren()\n }\n }, [host, renderer, slotName])\n\n useLayoutEffect(() => {\n const mounted = mountedRef.current\n if (!mounted || sameData(mounted.data, data)) return\n mounted.data = data\n if (mounted.handle.update) {\n mounted.handle.update(data)\n return\n }\n mounted.handle.destroy()\n mounted.target.replaceChildren()\n mounted.handle = normalizeResult(renderer.mount(mounted.target, data))\n }, [data, renderer])\n\n return host ? <slot name={slotName} /> : <div ref={localRef} data-blade-mount=\"\" />\n}\n\nfunction slotFor<T extends object>(renderer: MountRendererObject<T>, data: T): ReactNode | null {\n if (renderer.match && !renderer.match(data)) return null\n return <MountSlot renderer={renderer} data={data} />\n}\n\n/**\n * 把挂载式渲染器转成普通 React 渲染器:两种写法走同一条渲染路径,`match` 返回\n * false 等于 React 渲染器返回 null(走默认渲染)。调用方要按 `renderers` 对象缓存结果,\n * 否则每次渲染都会得到新的渲染器、挂载内容被反复重建。\n */\nexport function mountRenderersToReact(\n renderers: BladeChatMountRenderers | null | undefined,\n context: { sessionId?: string } = {},\n): ChatViewRenderers | undefined {\n if (!renderers) return undefined\n const result: ChatViewRenderers = {}\n if (renderers.toolCall) {\n const renderer = toObject(renderers.toolCall)\n result.toolCall = (toolCall) => slotFor(renderer, { toolCall, sessionId: context.sessionId })\n }\n if (renderers.userMessage) {\n const renderer = toObject(renderers.userMessage)\n result.userMessage = ({ message }) => slotFor(renderer, { message })\n }\n if (renderers.assistantText) {\n const renderer = toObject(renderers.assistantText)\n result.assistantText = ({ message, streaming, compact, sessionId }) =>\n slotFor(renderer, { message, streaming, compact, sessionId })\n }\n return result\n}\n","import type { BladeClient } from \"@blade-hq/agent-client\"\nimport { useCallback, useEffect, useRef, useState, useSyncExternalStore } from \"react\"\nimport { useOptionalBladeClient } from \"../context\"\nimport { cn } from \"../lib/utils\"\n\ninterface SaveState {\n saving: boolean\n listeners: Set<() => void>\n}\n\nconst saveStates = new WeakMap<BladeClient, Map<string, SaveState>>()\n\nfunction getSaveState(client: BladeClient, sessionId: string): SaveState {\n let clientStates = saveStates.get(client)\n if (!clientStates) {\n clientStates = new Map()\n saveStates.set(client, clientStates)\n }\n let state = clientStates.get(sessionId)\n if (!state) {\n state = { saving: false, listeners: new Set() }\n clientStates.set(sessionId, state)\n }\n return state\n}\n\nfunction notify(state: SaveState) {\n for (const listener of state.listeners) listener()\n}\n\nfunction cleanupSaveState(client: BladeClient, sessionId: string, state: SaveState) {\n if (state.saving || state.listeners.size > 0) return\n const clientStates = saveStates.get(client)\n if (clientStates?.get(sessionId) === state) clientStates.delete(sessionId)\n}\n\nexport interface SessionMemoryToggleProps {\n sessionId: string\n enabled: boolean\n /** 不在 BladeProvider 内使用时显式传入,与宿主现有 BladeClient 复用连接和鉴权。 */\n client?: BladeClient\n disabled?: boolean\n label?: string\n className?: string\n labelClassName?: string\n inputClassName?: string\n onSaved?: (sessionId: string, enabled: boolean) => void\n onError?: (error: unknown) => void\n}\n\n/**\n * 当前会话记忆开关。同一 client + sessionId 的所有实例共享保存锁,避免多个聊天入口\n * 或会话切换时发出乱序更新;服务端成功后才通过 onSaved 交还权威值。\n */\nexport function SessionMemoryToggle({\n sessionId,\n enabled,\n client: clientProp,\n disabled = false,\n label = \"当前会话使用记忆\",\n className,\n labelClassName,\n inputClassName,\n onSaved,\n onError,\n}: SessionMemoryToggleProps) {\n const contextClient = useOptionalBladeClient()\n const client = clientProp ?? contextClient\n if (!client) {\n throw new Error(\"SessionMemoryToggle 必须在 <BladeProvider> 内使用或显式传入 client\")\n }\n\n const saveState = getSaveState(client, sessionId)\n const subscribe = useCallback(\n (listener: () => void) => {\n saveState.listeners.add(listener)\n return () => {\n saveState.listeners.delete(listener)\n cleanupSaveState(client, sessionId, saveState)\n }\n },\n [client, saveState, sessionId],\n )\n const getSaving = useCallback(() => saveState.saving, [saveState])\n const saving = useSyncExternalStore(\n subscribe,\n getSaving,\n getSaving,\n )\n const [draftEnabled, setDraftEnabled] = useState(enabled)\n const activeSessionIdRef = useRef(sessionId)\n activeSessionIdRef.current = sessionId\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: a new session must discard this component instance's optimistic value even when both sessions share the same enabled prop\n useEffect(() => {\n setDraftEnabled(enabled)\n }, [enabled, sessionId])\n\n const update = useCallback(\n (nextEnabled: boolean) => {\n const currentSaveState = getSaveState(client, sessionId)\n if (currentSaveState.saving) return\n currentSaveState.saving = true\n notify(currentSaveState)\n setDraftEnabled(nextEnabled)\n\n void client.sessions.updateSessionMemory(sessionId, nextEnabled).then(\n (updated) => {\n if (activeSessionIdRef.current === sessionId) {\n setDraftEnabled(updated.memory_enabled)\n }\n onSaved?.(sessionId, updated.memory_enabled)\n },\n (error) => {\n if (activeSessionIdRef.current === sessionId) setDraftEnabled(enabled)\n onError?.(error)\n },\n ).finally(() => {\n currentSaveState.saving = false\n notify(currentSaveState)\n cleanupSaveState(client, sessionId, currentSaveState)\n })\n },\n [client, enabled, onError, onSaved, sessionId],\n )\n\n return (\n <label className={cn(\"flex items-center justify-between\", className)}>\n <span className={labelClassName}>{label}</span>\n <input\n type=\"checkbox\"\n checked={draftEnabled}\n onChange={(event) => update(event.target.checked)}\n disabled={disabled || saving}\n className={inputClassName}\n />\n </label>\n )\n}\n","/** 智能体是否在沙盒里启动了通用应用镜像(computer launch)。\n *\n * 只认「命令位置」上的 `computer launch`(行首 / `;` / `&&` / `|` / 换行 / 子 shell\n * 之后),避免路径、参数里恰好含 computer 的误判。\n *\n * 只认 `launch` 子命令,不认 `status`/`screenshot`/`click` 等——判据是「agent 启动过\n * 一个目标」,不是「agent 调用过任意 computer 子命令」。\n *\n * Web 通过 @blade-hq/agent-react/internal 的导入门面复用这份判定。\n *\n * 注意:`isAgentComputerCommand`/`isAgentComputerToolCall` 只回答\"这条命令是不是\n * 一次 launch 尝试\",不回答\"这次 launch 最终成不成功\"——待处理/已失败的 launch\n * 也会命中这两个判定。SDK 接入方如果只用这两个函数就决定要不要展示自己的「电脑\n * 镜像」UI,会在启动失败/还没跑完时也展示出来,跟内置 Web 的实际行为不一致\n * (Codex review 指出:内置 Web 用下面的 `classifyAgentComputerLaunchOutcome`\n * 做完整判定,SDK 侧之前只导出了弱判据,等于把这道判断题的一半留给接入方自己\n * 猜)。下面把完整判定也一并导出,接入方要自己实现「电脑镜像」面板时不用重新\n * 猜一遍这条规则。\n */\nconst COMPUTER_LAUNCH_COMMAND_PATTERN = /(?:^|[\\n;&|(]\\s*)computer\\s+launch(?:\\s|$)/\n\nexport function isAgentComputerCommand(command: string): boolean {\n return COMPUTER_LAUNCH_COMMAND_PATTERN.test(command)\n}\n\n/** 工具调用的 JSON 参数里是不是一条 computer launch 命令。 */\nexport function isAgentComputerToolCall(argumentsJson: string | null | undefined): boolean {\n if (!argumentsJson) return false\n let command: unknown\n try {\n const parsed: unknown = JSON.parse(argumentsJson)\n if (typeof parsed !== \"object\" || parsed === null) return false\n command = (parsed as { command?: unknown }).command\n } catch {\n return false\n }\n return typeof command === \"string\" && isAgentComputerCommand(command)\n}\n\nexport type AgentComputerLaunchOutcome = \"pending\" | \"succeeded\" | \"failed\" | \"unknown\"\n\n// computer launch 自己成功时唯一打印的这行文本(见 appmirrord/cmd/computer/\n// launch.go 的 cmdLaunch),不会被任何其它 computer 子命令打印。判定\"launch\n// 是不是真的成功了\"首选看这个标记有没有出现在输出里,而不是看整条 Bash\n// 命令的最终退出码——同一次 Bash 调用可能是 `computer launch ... && computer\n// screenshot` 这种复合命令,launch 自己成功、后面的 screenshot 失败时,整条\n// 命令的退出码是非零,但 launch 明明是成功的。这个标记不受复合命令后半段成\n// 不成功的影响,直接对应 launch 自己有没有跑到成功打印那一步。\nconst LAUNCH_SUCCESS_MARKER = \"已启动 \"\n\nfunction resultContainsLaunchSuccessMarker(result: unknown, depth = 0): boolean {\n if (depth > 2) return false // 防止极端嵌套结构把这段扫描拖成性能问题,正常数据不会嵌这么深\n if (typeof result === \"string\") {\n if (result.includes(LAUNCH_SUCCESS_MARKER)) return true\n try {\n return resultContainsLaunchSuccessMarker(JSON.parse(result), depth + 1)\n } catch {\n return false\n }\n }\n if (typeof result === \"object\" && result !== null) {\n for (const value of Object.values(result as Record<string, unknown>)) {\n if (typeof value === \"string\" && value.includes(LAUNCH_SUCCESS_MARKER)) return true\n }\n }\n return false\n}\n\n/** `computer launch` 这条 Bash 工具调用最终是不是真的启动成功了——不能只看\n * `isAgentComputerToolCall` 命中参数就当作成功:可执行文件缺失/不可执行、\n * 启动后随即退出这些 appmirrord 侧的失败,Bash 工具调用本身仍然会走完\n * `status: \"done\"`(Bash 工具的职责是\"跑完这条命令\",命令自己返回非零退出码\n * 不算工具调用失败)。\n *\n * 唯一的判据是输出里有没有出现 `LAUNCH_SUCCESS_MARKER`——launch.go 的\n * cmdLaunch 只要走到成功分支就一定会打印这行文本,不存在\"成功了但没打印\"\n * 的路径。标记缺失就等价于没有走到那条成功路径,不再退回看 `result.exit_code`\n * 当兜底:那样会给 `computer launch ... || echo failed` 这类复合命令开口子,\n * 让真实失败的 launch 被误判成 succeeded。\n *\n * \"pending\":还没跑完(status 既不是终态失败也不是 done),调用方不该现在\n * 就下结论,也不该把这次调用标记成\"已处理\"——等下一次状态更新再重新判断。\n *\n * \"unknown\":`status: \"done\"` 但 `result` 本身缺失(不是\"有 result、没有标记\",\n * 是根本没有 result 这个字段)——历史会话被整理(compaction)之后,归档的\n * 工具调用只保留 `arguments`/`status` 这类摘要字段,完整 `result` payload 不\n * 会重新序列化进历史投影,这是已知且刻意的压缩形状,不是数据丢失异常。这种\n * 情况下\"没看到成功标记\"不能说明\"这次 launch 失败了\",只能说明\"证据被裁剪\n * 了\"——跟\"result 确实回来了、里面就是没有这行文本\"是两种不同性质的证据,\n * 前者不能定性为 failed,接入方要按自己的场景(标签页展示可以偏宽松,自动\n * 跳转/替用户做决定的场景应该偏保守)自己决定怎么用。\n */\nexport function classifyAgentComputerLaunchOutcome(toolCall: {\n status?: string\n result?: unknown\n}): AgentComputerLaunchOutcome {\n if (toolCall.status === \"error\" || toolCall.status === \"cancelled\") return \"failed\"\n if (toolCall.status !== \"done\") return \"pending\"\n if (toolCall.result === undefined || toolCall.result === null) return \"unknown\"\n return resultContainsLaunchSuccessMarker(toolCall.result) ? \"succeeded\" : \"failed\"\n}\n","import type { BladeClient } from \"@blade-hq/agent-client\"\nimport * as Tooltip from \"@radix-ui/react-tooltip\"\nimport { useMemo, useState } from \"react\"\nimport { cn } from \"../lib/utils\"\n\ntype CheckpointTree = Awaited<ReturnType<BladeClient[\"sessions\"][\"getSessionCheckpoints\"]>>\ntype CheckpointNode = CheckpointTree[\"nodes\"][number]\n\nexport interface SessionBranchPickerProps {\n tree: CheckpointTree\n /** Disable changes while this session is running or read-only. */\n disabled?: boolean\n /** Restore only the conversation; the host owns history refresh and composer drafts. */\n onCheckout: (checkpointId: string, position: \"before\" | \"turn_end\") => Promise<void>\n}\n\nconst ROW_HEIGHT = 32\nconst SVG_WIDTH = 44\n\ninterface LayoutNode {\n id: string\n column: number\n row: number\n parentRow: number | null\n parentColumn: number | null\n isActive: boolean\n isCurrent: boolean\n isVirtual: boolean\n preview: string\n content: string\n}\n\ninterface LayoutGraph {\n nodes: LayoutNode[]\n hasCycle: boolean\n maxColumn: number\n maxRow: number\n}\n\nexport function SessionBranchPicker({\n tree,\n disabled = false,\n onCheckout,\n}: SessionBranchPickerProps) {\n const [checkoutError, setCheckoutError] = useState<string | null>(null)\n const [pendingNodeId, setPendingNodeId] = useState<string | null>(null)\n const hasHistory = tree.nodes.length > 0\n const layout = useMemo(() => buildLayoutNodes(tree), [tree])\n const nodeMap = useMemo(() => new Map(tree.nodes.map((node) => [node.id, node])), [tree])\n const isBusy = disabled || pendingNodeId !== null\n const graphHeight = Math.max((layout.maxRow + 1) * ROW_HEIGHT, ROW_HEIGHT)\n const graphWidth = Math.max(SVG_WIDTH, getColumnX(layout.maxColumn) + 12)\n\n async function checkoutNode(node: CheckpointNode, position: \"before\" | \"turn_end\") {\n if (isBusy) return\n setCheckoutError(null)\n setPendingNodeId(node.id)\n try {\n await onCheckout(node.id, position)\n } catch (error) {\n setCheckoutError(error instanceof Error ? error.message : \"切换失败,请稍后重试\")\n } finally {\n setPendingNodeId(null)\n }\n }\n\n async function handleVirtualClick(node: LayoutNode) {\n if (isBusy || !node.isVirtual || node.isActive) return\n const sourceNode = nodeMap.get(node.content)\n if (sourceNode) await checkoutNode(sourceNode, \"turn_end\")\n }\n\n async function handleNodeSelect(node: LayoutNode) {\n if (isBusy) return\n const sourceNode = nodeMap.get(node.id)\n if (sourceNode) await checkoutNode(sourceNode, \"before\")\n }\n\n if (!hasHistory) return null\n\n return (\n <Tooltip.Provider delayDuration={200}>\n {checkoutError ? (\n <p role=\"alert\" className=\"mb-2 text-xs text-destructive\">\n {checkoutError}\n </p>\n ) : null}\n <div className=\"flex max-h-52 justify-center overflow-x-auto overflow-y-auto\">\n <div className=\"relative\" style={{ height: graphHeight, width: graphWidth }}>\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-0 top-0 z-10 overflow-visible\"\n width={graphWidth}\n height={graphHeight}\n viewBox={`0 0 ${graphWidth} ${graphHeight}`}\n fill=\"none\"\n >\n {layout.nodes.map((node) => {\n if (node.parentRow == null || node.parentColumn == null) {\n return null\n }\n\n const childStroke = node.isActive\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\"\n\n return (\n <path\n key={`path-${node.id}`}\n d={buildEdgePath(\n getColumnX(node.parentColumn),\n getRowY(node.parentRow),\n getColumnX(node.column),\n getRowY(node.row),\n )}\n stroke={childStroke}\n strokeOpacity={node.isActive ? 0.95 : 0.45}\n strokeWidth={node.isActive ? 1.8 : 1.4}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray={node.isVirtual ? \"3 3\" : undefined}\n />\n )\n })}\n </svg>\n\n <div className=\"relative z-0 h-full\">\n {layout.nodes.map((node) => {\n const isPendingNode = pendingNodeId === node.id\n const color = node.isActive ? \"hsl(var(--primary))\" : \"hsl(var(--muted-foreground))\"\n const previewText = node.isVirtual\n ? isPendingNode\n ? \"切换中...\"\n : \"\"\n : isPendingNode\n ? \"切换中...\"\n : node.preview\n const shouldShowTooltip = !node.isVirtual || Boolean(previewText)\n const button = (\n <button\n type=\"button\"\n onClick={() =>\n void (node.isVirtual ? handleVirtualClick(node) : handleNodeSelect(node))\n }\n disabled={isBusy}\n aria-current={!node.isVirtual && node.isCurrent ? \"step\" : undefined}\n aria-label={node.isVirtual ? \"切换到该分支\" : node.preview}\n className={cn(\n \"absolute z-20 m-0 h-8 w-6 overflow-visible border-0 bg-transparent p-0\",\n isBusy ? \"cursor-not-allowed opacity-60\" : \"cursor-pointer\",\n )}\n style={{\n top: node.row * ROW_HEIGHT,\n left: getColumnX(node.column) - 12,\n }}\n >\n <span aria-hidden=\"true\" className=\"absolute left-0 top-0 h-8 w-6\">\n <svg\n aria-hidden=\"true\"\n role=\"img\"\n className=\"pointer-events-none absolute left-0 top-0 h-full w-full overflow-visible\"\n width={24}\n height={ROW_HEIGHT}\n viewBox={`0 0 24 ${ROW_HEIGHT}`}\n fill=\"none\"\n >\n {node.isVirtual ? (\n <circle\n cx={12}\n cy={ROW_HEIGHT / 2}\n r={3.5}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.2}\n strokeDasharray=\"2 2\"\n opacity={0.7}\n />\n ) : (\n <g>\n {node.isCurrent ? (\n <circle cx={12} cy={ROW_HEIGHT / 2} r={9} fill={color} opacity={0.18} />\n ) : null}\n <circle\n cx={12}\n cy={ROW_HEIGHT / 2}\n r={node.isCurrent ? 5.5 : 4}\n fill={color}\n />\n </g>\n )}\n </svg>\n </span>\n </button>\n )\n\n if (!shouldShowTooltip) {\n return <div key={node.id}>{button}</div>\n }\n\n return (\n <Tooltip.Root key={node.id}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content\n side=\"right\"\n sideOffset={8}\n className={cn(\n // z-[60]:这张图会被放进回溯弹层(z-50 且背景不透明),\n // 消息预览不抬到弹层之上就会被它的背景吃掉。\n \"z-[60] rounded-md border border-border bg-popover px-2 py-1 text-xs text-foreground shadow-md\",\n !node.isVirtual && node.isCurrent && \"font-semibold\",\n )}\n >\n {previewText}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )\n })}\n </div>\n </div>\n </div>\n </Tooltip.Provider>\n )\n}\nfunction buildLayoutNodes(tree: CheckpointTree | undefined): LayoutGraph {\n if (!tree || tree.nodes.length === 0) {\n return { nodes: [], hasCycle: false, maxColumn: 0, maxRow: 0 }\n }\n\n const nodeMap = new Map(tree.nodes.map((node) => [node.id, node]))\n const order = new Map(tree.nodes.map((node, index) => [node.id, index]))\n const childrenMap = new Map<string | null, CheckpointNode[]>()\n\n for (const node of tree.nodes) {\n const parentId = node.parent_id && nodeMap.has(node.parent_id) ? node.parent_id : null\n const siblings = childrenMap.get(parentId) ?? []\n siblings.push(node)\n childrenMap.set(parentId, siblings)\n }\n\n const activeIds = new Set<string>()\n const activeVisited = new Set<string>()\n const leafId = tree.leaf_id\n let current = tree.leaf_id\n\n while (current && nodeMap.has(current) && !activeVisited.has(current)) {\n activeIds.add(current)\n activeVisited.add(current)\n current = nodeMap.get(current)?.parent_id ?? null\n }\n\n const layoutNodes: LayoutNode[] = []\n const placed = new Set<string>()\n const visiting = new Set<string>()\n let nextColumn = 1\n let maxColumn = 0\n let maxRow = 0\n let hasCycle = false\n\n const rootSort = (a: CheckpointNode, b: CheckpointNode) =>\n (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0)\n\n const childSort = (a: CheckpointNode, b: CheckpointNode) =>\n (order.get(a.id) ?? 0) - (order.get(b.id) ?? 0)\n\n const allocateColumn = () => {\n const fresh = nextColumn\n nextColumn += 1\n return fresh\n }\n\n function walk(node: CheckpointNode, parent: LayoutNode | null, column: number, row: number) {\n if (visiting.has(node.id)) {\n hasCycle = true\n return\n }\n\n if (placed.has(node.id)) {\n return\n }\n\n visiting.add(node.id)\n maxColumn = Math.max(maxColumn, column)\n maxRow = Math.max(maxRow, row)\n\n const layoutNode: LayoutNode = {\n id: node.id,\n column,\n row,\n parentRow: parent?.row ?? null,\n parentColumn: parent?.column ?? null,\n isActive: activeIds.has(node.id),\n isCurrent: node.id === leafId,\n isVirtual: false,\n preview: formatPreview(node.content_preview),\n content: node.content,\n }\n\n layoutNodes.push(layoutNode)\n placed.add(node.id)\n\n const children = [...(childrenMap.get(node.id) ?? [])].sort(childSort)\n\n if (children.length === 0) {\n const virtualRow = row + 1\n maxRow = Math.max(maxRow, virtualRow)\n layoutNodes.push({\n id: `__virtual__${node.id}`,\n column,\n row: virtualRow,\n parentRow: layoutNode.row,\n parentColumn: layoutNode.column,\n isActive: activeIds.has(node.id),\n isCurrent: false,\n isVirtual: true,\n preview: \"\",\n content: node.id,\n })\n } else {\n for (const [index, child] of children.entries()) {\n if (visiting.has(child.id)) {\n hasCycle = true\n continue\n }\n\n const childColumn = index === 0 ? column : allocateColumn()\n walk(child, layoutNode, childColumn, row + 1)\n }\n }\n\n visiting.delete(node.id)\n }\n\n const roots = [...(childrenMap.get(null) ?? [])].sort(rootSort)\n for (const [index, root] of roots.entries()) {\n const rootColumn = index === 0 ? 0 : allocateColumn()\n walk(root, null, rootColumn, 0)\n }\n\n for (const node of [...tree.nodes].sort(rootSort)) {\n if (!placed.has(node.id)) {\n hasCycle = true\n const rootColumn = layoutNodes.length === 0 ? 0 : allocateColumn()\n walk(node, null, rootColumn, 0)\n }\n }\n\n return {\n nodes: layoutNodes,\n hasCycle,\n maxColumn,\n maxRow,\n }\n}\n\nfunction formatPreview(preview: string): string {\n const normalized = preview.replace(/\\s+/g, \" \").trim()\n return normalized.length > 0 ? normalized : \"(空消息)\"\n}\n\nfunction getColumnX(column: number): number {\n return 12 + column * 24\n}\n\nfunction getRowY(row: number): number {\n return row * ROW_HEIGHT + ROW_HEIGHT / 2\n}\n\nfunction buildEdgePath(fromX: number, fromY: number, toX: number, toY: number): string {\n if (fromX === toX || fromY === toY) {\n return `M ${fromX} ${fromY} L ${toX} ${toY}`\n }\n\n // Branch line: horizontal from parent to child column, then vertical down\n const r = Math.min(5, Math.abs(toX - fromX), Math.abs(toY - fromY))\n const dx = toX > fromX ? 1 : -1\n\n return [\n `M ${fromX} ${fromY}`,\n `H ${toX - dx * r}`,\n `A ${r} ${r} 0 0 ${dx > 0 ? 1 : 0} ${toX} ${fromY + r}`,\n `V ${toY}`,\n ].join(\" \")\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,cAAc;;;ACEd,SAAS,eAAe,YAAY,OAAO,iBAAiB,cAA8B;AAiF1E;AAvET,IAAM,mBAAmB,cAAkC,IAAI;AAEtE,SAAS,gBAAmB,QAAwC;AAClE,MAAI,OAAO,WAAW,WAAY,QAAO,EAAE,SAAS,OAAO;AAC3D,MAAI,UAAU,OAAO,WAAW,SAAU,QAAO;AACjD,SAAO,EAAE,SAAS,MAAM;AAAA,EAAC,EAAE;AAC7B;AAEA,SAAS,SAAY,UAAoD;AACvE,SAAO,OAAO,aAAa,aAAa,EAAE,OAAO,SAAS,IAAI;AAChE;AAGA,SAAS,SAAS,GAAW,GAAoB;AAC/C,QAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,MAAI,MAAM,WAAW,OAAO,KAAK,CAAC,EAAE,OAAQ,QAAO;AACnD,SAAO,MAAM,MAAM,CAAC,QAAQ,OAAO,GAAI,EAA8B,GAAG,GAAI,EAA8B,GAAG,CAAC,CAAC;AACjH;AAQO,SAAS,UAA4B,EAAE,UAAU,KAAK,GAAsB;AACjF,QAAM,OAAO,WAAW,gBAAgB;AACxC,QAAM,WAAW,eAAe,MAAM,EAAE,QAAQ,mBAAmB,EAAE,CAAC;AACtE,QAAM,WAAW,OAAuB,IAAI;AAC5C,QAAM,UAAU,OAAO,IAAI;AAC3B,QAAM,aAAa,OAAwE,IAAI;AAE/F,kBAAgB,MAAM;AACpB,YAAQ,UAAU;AAAA,EACpB,CAAC;AAGD,kBAAgB,MAAM;AACpB,QAAI;AACJ,QAAI,MAAM;AACR,eAAS,SAAS,cAAc,KAAK;AACrC,aAAO,OAAO;AACd,WAAK,YAAY,MAAM;AAAA,IACzB,OAAO;AACL,UAAI,CAAC,SAAS,QAAS;AACvB,eAAS,SAAS;AAAA,IACpB;AACA,UAAM,UAAU,QAAQ;AACxB,eAAW,UAAU,EAAE,QAAQ,QAAQ,gBAAgB,SAAS,MAAM,QAAQ,OAAO,CAAC,GAAG,MAAM,QAAQ;AACvG,WAAO,MAAM;AACX,YAAM,UAAU,WAAW;AAC3B,iBAAW,UAAU;AACrB,eAAS,OAAO,QAAQ;AACxB,UAAI,KAAM,QAAO,OAAO;AAAA,UACnB,QAAO,gBAAgB;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,QAAQ,CAAC;AAE7B,kBAAgB,MAAM;AACpB,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,WAAW,SAAS,QAAQ,MAAM,IAAI,EAAG;AAC9C,YAAQ,OAAO;AACf,QAAI,QAAQ,OAAO,QAAQ;AACzB,cAAQ,OAAO,OAAO,IAAI;AAC1B;AAAA,IACF;AACA,YAAQ,OAAO,QAAQ;AACvB,YAAQ,OAAO,gBAAgB;AAC/B,YAAQ,SAAS,gBAAgB,SAAS,MAAM,QAAQ,QAAQ,IAAI,CAAC;AAAA,EACvE,GAAG,CAAC,MAAM,QAAQ,CAAC;AAEnB,SAAO,OAAO,oBAAC,UAAK,MAAM,UAAU,IAAK,oBAAC,SAAI,KAAK,UAAU,oBAAiB,IAAG;AACnF;AAEA,SAAS,QAA0B,UAAkC,MAA2B;AAC9F,MAAI,SAAS,SAAS,CAAC,SAAS,MAAM,IAAI,EAAG,QAAO;AACpD,SAAO,oBAAC,aAAU,UAAoB,MAAY;AACpD;AAOO,SAAS,sBACd,WACA,UAAkC,CAAC,GACJ;AAC/B,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,SAA4B,CAAC;AACnC,MAAI,UAAU,UAAU;AACtB,UAAM,WAAW,SAAS,UAAU,QAAQ;AAC5C,WAAO,WAAW,CAAC,aAAa,QAAQ,UAAU,EAAE,UAAU,WAAW,QAAQ,UAAU,CAAC;AAAA,EAC9F;AACA,MAAI,UAAU,aAAa;AACzB,UAAM,WAAW,SAAS,UAAU,WAAW;AAC/C,WAAO,cAAc,CAAC,EAAE,QAAQ,MAAM,QAAQ,UAAU,EAAE,QAAQ,CAAC;AAAA,EACrE;AACA,MAAI,UAAU,eAAe;AAC3B,UAAM,WAAW,SAAS,UAAU,aAAa;AACjD,WAAO,gBAAgB,CAAC,EAAE,SAAS,WAAW,SAAS,UAAU,MAC/D,QAAQ,UAAU,EAAE,SAAS,WAAW,SAAS,UAAU,CAAC;AAAA,EAChE;AACA,SAAO;AACT;;;ACxHA,SAAS,aAAa,WAAW,UAAAA,SAAQ,UAAU,4BAA4B;AA8H3E,SACE,OAAAC,MADF;AArHJ,IAAM,aAAa,oBAAI,QAA6C;AAEpE,SAAS,aAAa,QAAqB,WAA8B;AACvE,MAAI,eAAe,WAAW,IAAI,MAAM;AACxC,MAAI,CAAC,cAAc;AACjB,mBAAe,oBAAI,IAAI;AACvB,eAAW,IAAI,QAAQ,YAAY;AAAA,EACrC;AACA,MAAI,QAAQ,aAAa,IAAI,SAAS;AACtC,MAAI,CAAC,OAAO;AACV,YAAQ,EAAE,QAAQ,OAAO,WAAW,oBAAI,IAAI,EAAE;AAC9C,iBAAa,IAAI,WAAW,KAAK;AAAA,EACnC;AACA,SAAO;AACT;AAEA,SAAS,OAAO,OAAkB;AAChC,aAAW,YAAY,MAAM,UAAW,UAAS;AACnD;AAEA,SAAS,iBAAiB,QAAqB,WAAmB,OAAkB;AAClF,MAAI,MAAM,UAAU,MAAM,UAAU,OAAO,EAAG;AAC9C,QAAM,eAAe,WAAW,IAAI,MAAM;AAC1C,MAAI,cAAc,IAAI,SAAS,MAAM,MAAO,cAAa,OAAO,SAAS;AAC3E;AAoBO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,gBAAgB,uBAAuB;AAC7C,QAAM,SAAS,cAAc;AAC7B,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,gHAAyD;AAAA,EAC3E;AAEA,QAAM,YAAY,aAAa,QAAQ,SAAS;AAChD,QAAM,YAAY;AAAA,IAChB,CAAC,aAAyB;AACxB,gBAAU,UAAU,IAAI,QAAQ;AAChC,aAAO,MAAM;AACX,kBAAU,UAAU,OAAO,QAAQ;AACnC,yBAAiB,QAAQ,WAAW,SAAS;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,WAAW,SAAS;AAAA,EAC/B;AACA,QAAM,YAAY,YAAY,MAAM,UAAU,QAAQ,CAAC,SAAS,CAAC;AACjE,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,OAAO;AACxD,QAAM,qBAAqBC,QAAO,SAAS;AAC3C,qBAAmB,UAAU;AAG7B,YAAU,MAAM;AACd,oBAAgB,OAAO;AAAA,EACzB,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,QAAM,SAAS;AAAA,IACb,CAAC,gBAAyB;AACxB,YAAM,mBAAmB,aAAa,QAAQ,SAAS;AACvD,UAAI,iBAAiB,OAAQ;AAC7B,uBAAiB,SAAS;AAC1B,aAAO,gBAAgB;AACvB,sBAAgB,WAAW;AAE3B,WAAK,OAAO,SAAS,oBAAoB,WAAW,WAAW,EAAE;AAAA,QAC/D,CAAC,YAAY;AACX,cAAI,mBAAmB,YAAY,WAAW;AAC5C,4BAAgB,QAAQ,cAAc;AAAA,UACxC;AACA,oBAAU,WAAW,QAAQ,cAAc;AAAA,QAC7C;AAAA,QACA,CAAC,UAAU;AACT,cAAI,mBAAmB,YAAY,UAAW,iBAAgB,OAAO;AACrE,oBAAU,KAAK;AAAA,QACjB;AAAA,MACF,EAAE,QAAQ,MAAM;AACd,yBAAiB,SAAS;AAC1B,eAAO,gBAAgB;AACvB,yBAAiB,QAAQ,WAAW,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ,SAAS,SAAS,SAAS,SAAS;AAAA,EAC/C;AAEA,SACE,qBAAC,WAAM,WAAW,GAAG,qCAAqC,SAAS,GACjE;AAAA,oBAAAD,KAAC,UAAK,WAAW,gBAAiB,iBAAM;AAAA,IACxC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU,CAAC,UAAU,OAAO,MAAM,OAAO,OAAO;AAAA,QAChD,UAAU,YAAY;AAAA,QACtB,WAAW;AAAA;AAAA,IACb;AAAA,KACF;AAEJ;;;ACvHA,IAAM,kCAAkC;AAEjC,SAAS,uBAAuB,SAA0B;AAC/D,SAAO,gCAAgC,KAAK,OAAO;AACrD;AAGO,SAAS,wBAAwB,eAAmD;AACzF,MAAI,CAAC,cAAe,QAAO;AAC3B,MAAI;AACJ,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,aAAa;AAChD,QAAI,OAAO,WAAW,YAAY,WAAW,KAAM,QAAO;AAC1D,cAAW,OAAiC;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO,OAAO,YAAY,YAAY,uBAAuB,OAAO;AACtE;AAWA,IAAM,wBAAwB;AAE9B,SAAS,kCAAkC,QAAiB,QAAQ,GAAY;AAC9E,MAAI,QAAQ,EAAG,QAAO;AACtB,MAAI,OAAO,WAAW,UAAU;AAC9B,QAAI,OAAO,SAAS,qBAAqB,EAAG,QAAO;AACnD,QAAI;AACF,aAAO,kCAAkC,KAAK,MAAM,MAAM,GAAG,QAAQ,CAAC;AAAA,IACxE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,eAAW,SAAS,OAAO,OAAO,MAAiC,GAAG;AACpE,UAAI,OAAO,UAAU,YAAY,MAAM,SAAS,qBAAqB,EAAG,QAAO;AAAA,IACjF;AAAA,EACF;AACA,SAAO;AACT;AA0BO,SAAS,mCAAmC,UAGpB;AAC7B,MAAI,SAAS,WAAW,WAAW,SAAS,WAAW,YAAa,QAAO;AAC3E,MAAI,SAAS,WAAW,OAAQ,QAAO;AACvC,MAAI,SAAS,WAAW,UAAa,SAAS,WAAW,KAAM,QAAO;AACtE,SAAO,kCAAkC,SAAS,MAAM,IAAI,cAAc;AAC5E;;;AClGA,SAAS,SAAS,YAAAE,iBAAgB;AAiF1B,gBAAAC,MA+FgB,QAAAC,aA/FhB;AAnER,IAAM,aAAa;AACnB,IAAM,YAAY;AAsBX,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAA6B;AAC3B,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAwB,IAAI;AACtE,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAwB,IAAI;AACtE,QAAM,aAAa,KAAK,MAAM,SAAS;AACvC,QAAM,SAAS,QAAQ,MAAM,iBAAiB,IAAI,GAAG,CAAC,IAAI,CAAC;AAC3D,QAAM,UAAU,QAAQ,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACxF,QAAM,SAAS,YAAY,kBAAkB;AAC7C,QAAM,cAAc,KAAK,KAAK,OAAO,SAAS,KAAK,YAAY,UAAU;AACzE,QAAM,aAAa,KAAK,IAAI,WAAW,WAAW,OAAO,SAAS,IAAI,EAAE;AAExE,iBAAe,aAAa,MAAsB,UAAiC;AACjF,QAAI,OAAQ;AACZ,qBAAiB,IAAI;AACrB,qBAAiB,KAAK,EAAE;AACxB,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,QAAQ;AAAA,IACpC,SAAS,OAAO;AACd,uBAAiB,iBAAiB,QAAQ,MAAM,UAAU,8DAAY;AAAA,IACxE,UAAE;AACA,uBAAiB,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,iBAAe,mBAAmB,MAAkB;AAClD,QAAI,UAAU,CAAC,KAAK,aAAa,KAAK,SAAU;AAChD,UAAM,aAAa,QAAQ,IAAI,KAAK,OAAO;AAC3C,QAAI,WAAY,OAAM,aAAa,YAAY,UAAU;AAAA,EAC3D;AAEA,iBAAe,iBAAiB,MAAkB;AAChD,QAAI,OAAQ;AACZ,UAAM,aAAa,QAAQ,IAAI,KAAK,EAAE;AACtC,QAAI,WAAY,OAAM,aAAa,YAAY,QAAQ;AAAA,EACzD;AAEA,MAAI,CAAC,WAAY,QAAO;AAExB,SACE,gBAAAD,MAAS,UAAR,EAAiB,eAAe,KAC9B;AAAA,oBACC,gBAAAD,KAAC,OAAE,MAAK,SAAQ,WAAU,iCACvB,yBACH,IACE;AAAA,IACJ,gBAAAA,KAAC,SAAI,WAAU,gEACb,0BAAAC,MAAC,SAAI,WAAU,YAAW,OAAO,EAAE,QAAQ,aAAa,OAAO,WAAW,GACxE;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS,OAAO,UAAU,IAAI,WAAW;AAAA,UACzC,MAAK;AAAA,UAEJ,iBAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,gBAAI,KAAK,aAAa,QAAQ,KAAK,gBAAgB,MAAM;AACvD,qBAAO;AAAA,YACT;AAEA,kBAAM,cAAc,KAAK,WACrB,wBACA;AAEJ,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,GAAG;AAAA,kBACD,WAAW,KAAK,YAAY;AAAA,kBAC5B,QAAQ,KAAK,SAAS;AAAA,kBACtB,WAAW,KAAK,MAAM;AAAA,kBACtB,QAAQ,KAAK,GAAG;AAAA,gBAClB;AAAA,gBACA,QAAQ;AAAA,gBACR,eAAe,KAAK,WAAW,OAAO;AAAA,gBACtC,aAAa,KAAK,WAAW,MAAM;AAAA,gBACnC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,iBAAiB,KAAK,YAAY,QAAQ;AAAA;AAAA,cAZrC,QAAQ,KAAK,EAAE;AAAA,YAatB;AAAA,UAEJ,CAAC;AAAA;AAAA,MACH;AAAA,MAEA,gBAAAA,KAAC,SAAI,WAAU,uBACZ,iBAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,cAAM,gBAAgB,kBAAkB,KAAK;AAC7C,cAAM,QAAQ,KAAK,WAAW,wBAAwB;AACtD,cAAM,cAAc,KAAK,YACrB,gBACE,0BACA,KACF,gBACE,0BACA,KAAK;AACX,cAAM,oBAAoB,CAAC,KAAK,aAAa,QAAQ,WAAW;AAChE,cAAM,SACJ,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MACP,MAAM,KAAK,YAAY,mBAAmB,IAAI,IAAI,iBAAiB,IAAI;AAAA,YAEzE,UAAU;AAAA,YACV,gBAAc,CAAC,KAAK,aAAa,KAAK,YAAY,SAAS;AAAA,YAC3D,cAAY,KAAK,YAAY,yCAAW,KAAK;AAAA,YAC7C,WAAW;AAAA,cACT;AAAA,cACA,SAAS,kCAAkC;AAAA,YAC7C;AAAA,YACA,OAAO;AAAA,cACL,KAAK,KAAK,MAAM;AAAA,cAChB,MAAM,WAAW,KAAK,MAAM,IAAI;AAAA,YAClC;AAAA,YAEA,0BAAAA,KAAC,UAAK,eAAY,QAAO,WAAU,iCACjC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,SAAS,UAAU,UAAU;AAAA,gBAC7B,MAAK;AAAA,gBAEJ,eAAK,YACJ,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,IAAI;AAAA,oBACJ,IAAI,aAAa;AAAA,oBACjB,GAAG;AAAA,oBACH,MAAK;AAAA,oBACL,QAAQ;AAAA,oBACR,aAAa;AAAA,oBACb,iBAAgB;AAAA,oBAChB,SAAS;AAAA;AAAA,gBACX,IAEA,gBAAAC,MAAC,OACE;AAAA,uBAAK,YACJ,gBAAAD,KAAC,YAAO,IAAI,IAAI,IAAI,aAAa,GAAG,GAAG,GAAG,MAAM,OAAO,SAAS,MAAM,IACpE;AAAA,kBACJ,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAI;AAAA,sBACJ,IAAI,aAAa;AAAA,sBACjB,GAAG,KAAK,YAAY,MAAM;AAAA,sBAC1B,MAAM;AAAA;AAAA,kBACR;AAAA,mBACF;AAAA;AAAA,YAEJ,GACF;AAAA;AAAA,QACF;AAGF,YAAI,CAAC,mBAAmB;AACtB,iBAAO,gBAAAA,KAAC,SAAmB,oBAAV,KAAK,EAAY;AAAA,QACpC;AAEA,eACE,gBAAAC,MAAS,OAAR,EACC;AAAA,0BAAAD,KAAS,SAAR,EAAgB,SAAO,MAAE,kBAAO;AAAA,UACjC,gBAAAA,KAAS,QAAR,EACC,0BAAAA;AAAA,YAAS;AAAA,YAAR;AAAA,cACC,MAAK;AAAA,cACL,YAAY;AAAA,cACZ,WAAW;AAAA;AAAA;AAAA,gBAGT;AAAA,gBACA,CAAC,KAAK,aAAa,KAAK,aAAa;AAAA,cACvC;AAAA,cAEC;AAAA;AAAA,UACH,GACF;AAAA,aAfiB,KAAK,EAgBxB;AAAA,MAEJ,CAAC,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AACA,SAAS,iBAAiB,MAA+C;AACvE,MAAI,CAAC,QAAQ,KAAK,MAAM,WAAW,GAAG;AACpC,WAAO,EAAE,OAAO,CAAC,GAAG,UAAU,OAAO,WAAW,GAAG,QAAQ,EAAE;AAAA,EAC/D;AAEA,QAAM,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACjE,QAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;AACvE,QAAM,cAAc,oBAAI,IAAqC;AAE7D,aAAW,QAAQ,KAAK,OAAO;AAC7B,UAAM,WAAW,KAAK,aAAa,QAAQ,IAAI,KAAK,SAAS,IAAI,KAAK,YAAY;AAClF,UAAM,WAAW,YAAY,IAAI,QAAQ,KAAK,CAAC;AAC/C,aAAS,KAAK,IAAI;AAClB,gBAAY,IAAI,UAAU,QAAQ;AAAA,EACpC;AAEA,QAAM,YAAY,oBAAI,IAAY;AAClC,QAAM,gBAAgB,oBAAI,IAAY;AACtC,QAAM,SAAS,KAAK;AACpB,MAAI,UAAU,KAAK;AAEnB,SAAO,WAAW,QAAQ,IAAI,OAAO,KAAK,CAAC,cAAc,IAAI,OAAO,GAAG;AACrE,cAAU,IAAI,OAAO;AACrB,kBAAc,IAAI,OAAO;AACzB,cAAU,QAAQ,IAAI,OAAO,GAAG,aAAa;AAAA,EAC/C;AAEA,QAAM,cAA4B,CAAC;AACnC,QAAM,SAAS,oBAAI,IAAY;AAC/B,QAAM,WAAW,oBAAI,IAAY;AACjC,MAAI,aAAa;AACjB,MAAI,YAAY;AAChB,MAAI,SAAS;AACb,MAAI,WAAW;AAEf,QAAM,WAAW,CAAC,GAAmB,OAClC,MAAM,IAAI,EAAE,EAAE,KAAK,MAAM,MAAM,IAAI,EAAE,EAAE,KAAK;AAE/C,QAAM,YAAY,CAAC,GAAmB,OACnC,MAAM,IAAI,EAAE,EAAE,KAAK,MAAM,MAAM,IAAI,EAAE,EAAE,KAAK;AAE/C,QAAM,iBAAiB,MAAM;AAC3B,UAAM,QAAQ;AACd,kBAAc;AACd,WAAO;AAAA,EACT;AAEA,WAAS,KAAK,MAAsB,QAA2B,QAAgB,KAAa;AAC1F,QAAI,SAAS,IAAI,KAAK,EAAE,GAAG;AACzB,iBAAW;AACX;AAAA,IACF;AAEA,QAAI,OAAO,IAAI,KAAK,EAAE,GAAG;AACvB;AAAA,IACF;AAEA,aAAS,IAAI,KAAK,EAAE;AACpB,gBAAY,KAAK,IAAI,WAAW,MAAM;AACtC,aAAS,KAAK,IAAI,QAAQ,GAAG;AAE7B,UAAM,aAAyB;AAAA,MAC7B,IAAI,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,OAAO;AAAA,MAC1B,cAAc,QAAQ,UAAU;AAAA,MAChC,UAAU,UAAU,IAAI,KAAK,EAAE;AAAA,MAC/B,WAAW,KAAK,OAAO;AAAA,MACvB,WAAW;AAAA,MACX,SAAS,cAAc,KAAK,eAAe;AAAA,MAC3C,SAAS,KAAK;AAAA,IAChB;AAEA,gBAAY,KAAK,UAAU;AAC3B,WAAO,IAAI,KAAK,EAAE;AAElB,UAAM,WAAW,CAAC,GAAI,YAAY,IAAI,KAAK,EAAE,KAAK,CAAC,CAAE,EAAE,KAAK,SAAS;AAErE,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,aAAa,MAAM;AACzB,eAAS,KAAK,IAAI,QAAQ,UAAU;AACpC,kBAAY,KAAK;AAAA,QACf,IAAI,cAAc,KAAK,EAAE;AAAA,QACzB;AAAA,QACA,KAAK;AAAA,QACL,WAAW,WAAW;AAAA,QACtB,cAAc,WAAW;AAAA,QACzB,UAAU,UAAU,IAAI,KAAK,EAAE;AAAA,QAC/B,WAAW;AAAA,QACX,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,IACH,OAAO;AACL,iBAAW,CAAC,OAAO,KAAK,KAAK,SAAS,QAAQ,GAAG;AAC/C,YAAI,SAAS,IAAI,MAAM,EAAE,GAAG;AAC1B,qBAAW;AACX;AAAA,QACF;AAEA,cAAM,cAAc,UAAU,IAAI,SAAS,eAAe;AAC1D,aAAK,OAAO,YAAY,aAAa,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF;AAEA,aAAS,OAAO,KAAK,EAAE;AAAA,EACzB;AAEA,QAAM,QAAQ,CAAC,GAAI,YAAY,IAAI,IAAI,KAAK,CAAC,CAAE,EAAE,KAAK,QAAQ;AAC9D,aAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG;AAC3C,UAAM,aAAa,UAAU,IAAI,IAAI,eAAe;AACpD,SAAK,MAAM,MAAM,YAAY,CAAC;AAAA,EAChC;AAEA,aAAW,QAAQ,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,QAAQ,GAAG;AACjD,QAAI,CAAC,OAAO,IAAI,KAAK,EAAE,GAAG;AACxB,iBAAW;AACX,YAAM,aAAa,YAAY,WAAW,IAAI,IAAI,eAAe;AACjE,WAAK,MAAM,MAAM,YAAY,CAAC;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,cAAc,SAAyB;AAC9C,QAAM,aAAa,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACrD,SAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEA,SAAS,WAAW,QAAwB;AAC1C,SAAO,KAAK,SAAS;AACvB;AAEA,SAAS,QAAQ,KAAqB;AACpC,SAAO,MAAM,aAAa,aAAa;AACzC;AAEA,SAAS,cAAc,OAAe,OAAe,KAAa,KAAqB;AACrF,MAAI,UAAU,OAAO,UAAU,KAAK;AAClC,WAAO,KAAK,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG;AAAA,EAC5C;AAGA,QAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,KAAK,CAAC;AAClE,QAAM,KAAK,MAAM,QAAQ,IAAI;AAE7B,SAAO;AAAA,IACL,KAAK,KAAK,IAAI,KAAK;AAAA,IACnB,KAAK,MAAM,KAAK,CAAC;AAAA,IACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC;AAAA,IACrD,KAAK,GAAG;AAAA,EACV,EAAE,KAAK,GAAG;AACZ;","names":["useRef","jsx","useRef","useState","jsx","jsxs","useState"]}
@@ -25,9 +25,7 @@ export type AgentComputerLaunchOutcome = "pending" | "succeeded" | "failed" | "u
25
25
  * 了"——跟"result 确实回来了、里面就是没有这行文本"是两种不同性质的证据,
26
26
  * 前者不能定性为 failed,接入方要按自己的场景(标签页展示可以偏宽松,自动
27
27
  * 跳转/替用户做决定的场景应该偏保守)自己决定怎么用。
28
- *
29
- * 与 apps/web/src/agent/lib/agent-computer-command.ts 保持同名同签名——两边
30
- * 内容目前完全一致,改一处记得同步另一处。 */
28
+ */
31
29
  export declare function classifyAgentComputerLaunchOutcome(toolCall: {
32
30
  status?: string;
33
31
  result?: unknown;
@@ -56,4 +56,4 @@ export declare function buildSubmitPayload(text: string, attachments: ComposerAt
56
56
  }[], onBeforeSend?: (content: MessageContent) => MessageContent | Promise<MessageContent>): Promise<MessageContent>;
57
57
  export declare function isSubmittedComposerStillCurrent(submittedSessionId: string | null, currentSessionId: string | null, submittedEditorJson: unknown, currentEditorJson: unknown, submittedAttachmentIds: string[], currentAttachmentIds: string[]): boolean;
58
58
  export declare function mergeSubmittedAttachmentUpdates(current: ComposerAttachment[], updated: ComposerAttachment[], submittedAttachmentIds: string[]): ComposerAttachment[];
59
- export declare function ChatInput({ sessionId: sessionIdProp, onSend, onStop, isStreaming, queueWhileRunning, isCompacting, isStopping, mode, onToggleMode, renderAttachments, onBeforeSend, ensureSession, onCommand, canShareSession, slotAboveTextarea, slotBeforeSend, planPanel, externalDraft, externalAttachments, maxWidthClassName, mergesWithPanelAbove, className, innerClassName, SkillStatusBarComponent: SkillStatusBarOverride, skillStatusBarClassName, skillStatusBarInnerClassName, onResyncSkills, isResyncingSkills, onOpenSkills, inputLabel, placeholderText, typewriterPlaceholder, onDoubleEscape, composerHint, statusBarAddon, slotBelowActions, initialDraft, initialDraftKey, lite, canCreateBoardTask, }: ChatInputProps): import("react/jsx-runtime").JSX.Element;
59
+ export declare function ChatInput({ sessionId: sessionIdProp, onSend, onStop, isStreaming, queueWhileRunning, isCompacting, isStopping, mode, onToggleMode, renderAttachments, onBeforeSend, ensureSession, onCommand, canShareSession, slotAboveTextarea, slotBeforeSend, planPanel, externalDraft, externalAttachments, maxWidthClassName, mergesWithPanelAbove, className, innerClassName, SkillStatusBarComponent: SkillStatusBarOverride, skillStatusBarClassName, skillStatusBarInnerClassName, onOpenSkills, inputLabel, placeholderText, typewriterPlaceholder, onDoubleEscape, composerHint, statusBarAddon, slotBelowActions, initialDraft, initialDraftKey, lite, canCreateBoardTask, }: ChatInputProps): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,5 @@
1
+ import { type PluginSuggestionItem, type PluginSuggestionError } from "./extensions/plugin-mention";
2
+ import { type TopicAssetSuggestionItem, type TopicAssetSuggestionError } from "./extensions/topic-asset-mention";
1
3
  import type { SuggestionProps } from "@tiptap/suggestion";
2
4
  import type { BladeClient, FileEntry } from "@blade-hq/agent-client";
3
5
  import { type UserHomeRuntime } from "./lib/user-home";
@@ -10,14 +12,14 @@ import { type KbSuggestionItem } from "./extensions/kb-mention";
10
12
  */
11
13
  export type FileBrowseScope = "session" | "userHome";
12
14
  /** `@` 菜单选中的条目:文件(插 fileMention)或知识库(插 kbMention)。 */
13
- export type MentionSuggestionItem = FileSuggestionItem | KbSuggestionItem;
15
+ export type MentionSuggestionItem = FileSuggestionItem | PluginSuggestionItem | KbSuggestionItem | TopicAssetSuggestionItem;
14
16
  /**
15
17
  * `items` 里可以混着知识库候选(`kind: "kb"`)和文件条目:知识库来自 blade_hub
16
18
  * `/api/kb`,文件来自会话工作区或云电脑 HOME。菜单把两者拆成「知识库 / 文件」
17
19
  * 两组渲染,键盘上下键跨组连续移动。
18
20
  */
19
21
  export interface FileCompletionMenuProps extends Omit<SuggestionProps<FileSuggestionItem, FileSuggestionItem>, "command" | "items"> {
20
- items: Array<FileEntry | KbSuggestionItem>;
22
+ items: Array<FileEntry | PluginSuggestionError | PluginSuggestionItem | KbSuggestionItem | TopicAssetSuggestionItem | TopicAssetSuggestionError>;
21
23
  command: (props: MentionSuggestionItem) => void;
22
24
  onExit?: () => void;
23
25
  sessionId?: string | null;
@@ -1,7 +1,5 @@
1
- export declare function SkillStatusBar({ sessionId, onResync, isResyncing, vertical, className, innerClassName, onOpenSkills, }: {
1
+ export declare function SkillStatusBar({ sessionId, vertical, className, innerClassName, onOpenSkills, }: {
2
2
  sessionId: string;
3
- onResync?: () => void;
4
- isResyncing?: boolean;
5
3
  vertical?: boolean;
6
4
  className?: string;
7
5
  innerClassName?: string;
@@ -9,7 +7,7 @@ export declare function SkillStatusBar({ sessionId, onResync, isResyncing, verti
9
7
  * 打开技能页。「已安装 N 个技能」是一条可点的导航,不是状态。
10
8
  *
11
9
  * 只有「已安装」可点:「已加载 N 个技能」是本次会话实际生效的技能,它的
12
- * 详情与同步是另一件事,两者不能因为长得像就合成同一个动作。
10
+ * 详情是另一件事,两者不能因为长得像就合成同一个动作。
13
11
  */
14
12
  onOpenSkills?: () => void;
15
13
  }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import type { PluginRef } from "@blade-hq/agent-client";
2
+ export interface PluginSuggestionError {
3
+ kind: "pluginError";
4
+ message: string;
5
+ }
6
+ export declare function isPluginSuggestionError(value: unknown): value is PluginSuggestionError;
7
+ export interface PluginSuggestionItem extends PluginRef {
8
+ kind: "plugin";
9
+ name: string;
10
+ display_name: string;
11
+ description?: string;
12
+ icon?: string;
13
+ }
14
+ export declare function isPluginSuggestionItem(value: unknown): value is PluginSuggestionItem;
15
+ export declare const PluginMention: import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any>;
@@ -43,6 +43,5 @@ export type SkillSuggestionItem = SkillSuggestionSkillItem | SkillCommandSuggest
43
43
  /** 工作流胶囊后跟的参数模板文本:用户把「=」后补上值,模型按 key=value 填 inputs。 */
44
44
  export declare function workflowParamsTail(item: SkillWorkflowSuggestionItem): string;
45
45
  export declare function workflowRunText(item: SkillWorkflowSuggestionItem): string;
46
- export declare const COMMANDS: SkillCommandSuggestionItem[];
47
46
  export declare const skillMentionSuggestionKey: PluginKey<any>;
48
47
  export declare const SkillMention: import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any>;
@@ -0,0 +1,13 @@
1
+ import type { TopicAssetRef } from "@blade-hq/agent-client";
2
+ export interface TopicAssetSuggestionItem extends TopicAssetRef {
3
+ kind: "topicAsset";
4
+ name: string;
5
+ }
6
+ export interface TopicAssetSuggestionError {
7
+ kind: "topicAssetError";
8
+ message: string;
9
+ }
10
+ export declare function isTopicAssetSuggestionItem(value: unknown): value is TopicAssetSuggestionItem;
11
+ export declare function isTopicAssetSuggestionError(value: unknown): value is TopicAssetSuggestionError;
12
+ /** The existing file completion owns @. This node only stores the explicit identity. */
13
+ export declare const TopicAssetMention: import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any>;
@@ -46,3 +46,9 @@ export * from "./voice/VoiceWaveform";
46
46
  export * from "./voice/use-tiptap-voice-input";
47
47
  export * from "./voice/use-voice-input";
48
48
  export * from "./voice/voice-input-support";
49
+ export * from "./extensions/topic-asset-mention";
50
+ export * from "./lib/topic-asset-suggestions";
51
+ export * from "./use-reference-candidates";
52
+ export { PluginMention, isPluginSuggestionItem } from "./extensions/plugin-mention";
53
+ export { getPluginSuggestionItems } from "./lib/plugin-suggestions";
54
+ export { collectPluginMentions } from "./lib/composer-content";
@@ -1,4 +1,4 @@
1
- import type { SkillMentionAvailability } from "@blade-hq/agent-client";
1
+ import { type PluginRef, type TopicAssetRef, type SkillMentionAvailability } from "@blade-hq/agent-client";
2
2
  /**
3
3
  * 输入框(tiptap)文档的最小结构,以及把它翻译成待发送文本的规则。
4
4
  *
@@ -9,6 +9,9 @@ export interface EditorJSON {
9
9
  type?: string;
10
10
  text?: string;
11
11
  attrs?: Record<string, unknown>;
12
+ marks?: {
13
+ type: string;
14
+ }[];
12
15
  content?: EditorJSON[];
13
16
  }
14
17
  export declare function serializeEditorContent(node: EditorJSON | null | undefined): string;
@@ -40,3 +43,9 @@ export declare function collectKbMentions(node: EditorJSON | null | undefined):
40
43
  * 找不到就原样留成文字,不强行拼接、不假装恢复成功。
41
44
  */
42
45
  export declare function buildEditorDocumentWithKbMentions(text: string, kbMentions: readonly KbMentionRef[]): EditorJSON;
46
+ /** Asset identity travels separately; no metadata or retrieval instruction enters the user's text. */
47
+ export declare function collectTopicAssetMentions(node: EditorJSON | null | undefined): TopicAssetRef[];
48
+ export declare function buildEditorDocumentWithMentions(text: string, kbMentions?: readonly KbMentionRef[], topicAssetRefs?: readonly TopicAssetRef[]): EditorJSON;
49
+ /** Switching the explicitly selected topic must not leave pills from the previous one. */
50
+ export declare function retainTopicAssetMentions(node: EditorJSON, topicId: string | null): EditorJSON;
51
+ export declare function collectPluginMentions(node: EditorJSON | null | undefined): PluginRef[];
@@ -0,0 +1,3 @@
1
+ import type { EditorJSON } from "./composer-content";
2
+ /** Copy only the composer schema. Stored JSON must never introduce arbitrary nodes or attrs. */
3
+ export declare function copyEditorDocument(value: unknown): EditorJSON | null;
@@ -0,0 +1,7 @@
1
+ import type { BladeClient, PluginRef } from "@blade-hq/agent-client";
2
+ import type { PluginSuggestionItem, PluginSuggestionError } from "../extensions/plugin-mention";
3
+ export declare function pluginRefsForSend(refs: PluginRef[], turns?: readonly {
4
+ role: string;
5
+ refs?: PluginRef[] | null;
6
+ }[]): PluginRef[] | undefined;
7
+ export declare function getPluginSuggestionItems(client: BladeClient, session: string | null | undefined, query: string): Promise<Array<PluginSuggestionItem | PluginSuggestionError>>;
@@ -0,0 +1,30 @@
1
+ import type { PluginSuggestionItem, PluginSuggestionError } from "../extensions/plugin-mention";
2
+ import type { FileEntry } from "@blade-hq/agent-client";
3
+ import type { KbSuggestionItem } from "../extensions/kb-mention";
4
+ import type { TopicAssetSuggestionError, TopicAssetSuggestionItem } from "../extensions/topic-asset-mention";
5
+ export interface ReferenceCandidateGroups {
6
+ plugins: Array<PluginSuggestionItem | PluginSuggestionError>;
7
+ kbs: KbSuggestionItem[];
8
+ topics: Array<TopicAssetSuggestionItem | TopicAssetSuggestionError>;
9
+ files: FileEntry[];
10
+ }
11
+ export type ReferenceCandidateItem = ReferenceCandidateGroups[keyof ReferenceCandidateGroups][number];
12
+ export interface ReferenceCandidateSnapshot {
13
+ groups: ReferenceCandidateGroups;
14
+ items: ReferenceCandidateItem[];
15
+ loading: Record<keyof ReferenceCandidateGroups, boolean>;
16
+ errors: Partial<Record<keyof ReferenceCandidateGroups, unknown>>;
17
+ }
18
+ export interface ReferenceCandidateSources {
19
+ plugins?: (query: string) => Promise<Array<PluginSuggestionItem | PluginSuggestionError>>;
20
+ kbs: (query: string) => Promise<ReferenceCandidateGroups["kbs"]>;
21
+ topics: (query: string) => Promise<ReferenceCandidateGroups["topics"]>;
22
+ files: (query: string) => Promise<ReferenceCandidateGroups["files"]>;
23
+ }
24
+ /** Fixed @ sources only. Hosts own data access and the menu owns rendering. */
25
+ export declare function createReferenceCandidateController(getScope: () => readonly unknown[], sources: ReferenceCandidateSources, timeoutMs?: number): {
26
+ cancel: () => void;
27
+ query(query: string): Promise<ReferenceCandidateItem[]>;
28
+ /** Bind by result identity, never by label/query: closing and reopening @ is a new request. */
29
+ observe(items: ReferenceCandidateItem[], listener: (snapshot: ReferenceCandidateSnapshot) => void): void;
30
+ };
@@ -0,0 +1,6 @@
1
+ import type { BladeClient, TopicAssetRef } from "@blade-hq/agent-client";
2
+ import type { TopicAssetSuggestionItem, TopicAssetSuggestionError } from "../extensions/topic-asset-mention";
3
+ /** Dedicated source, intentionally independent of a generic mention registry. */
4
+ export declare function getTopicAssetSuggestionItems(client: BladeClient, topicId: string | null | undefined, query: string): Promise<Array<TopicAssetSuggestionItem | TopicAssetSuggestionError>>;
5
+ /** May be called before navigating. The matching session composer consumes it once. */
6
+ export declare function queueTopicAssetReference(sessionId: string, ref: TopicAssetRef): void;