@ecsplico/editor 0.0.0-stage → 1.0.0

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 (1286) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -2
  3. package/dist/code/CodeSurface.d.ts +24 -0
  4. package/dist/code/CodeSurface.js +57 -0
  5. package/dist/code/CodeSurface.js.map +1 -0
  6. package/dist/code/CodeSurface.vue.d.ts +29 -0
  7. package/dist/code/CodeSurface2.js +75 -0
  8. package/dist/code/CodeSurface2.js.map +1 -0
  9. package/dist/code/chrome-theme.js +76 -0
  10. package/dist/code/chrome-theme.js.map +1 -0
  11. package/dist/code/compartments.js +19 -0
  12. package/dist/code/compartments.js.map +1 -0
  13. package/dist/code/editor-factory.d.ts +41 -0
  14. package/dist/code/editor-factory.js +126 -0
  15. package/dist/code/editor-factory.js.map +1 -0
  16. package/dist/code/format-json.d.ts +27 -0
  17. package/dist/code/format-json.js +94 -0
  18. package/dist/code/format-json.js.map +1 -0
  19. package/dist/code/highlight-style.js +118 -0
  20. package/dist/code/highlight-style.js.map +1 -0
  21. package/dist/code/index.d.ts +6 -0
  22. package/dist/code/index.js +6 -0
  23. package/dist/code/jsonl-language.d.ts +6 -0
  24. package/dist/code/jsonl-language.js +33 -0
  25. package/dist/code/jsonl-language.js.map +1 -0
  26. package/dist/code/kind.d.ts +15 -0
  27. package/dist/code/kind.js +142 -0
  28. package/dist/code/kind.js.map +1 -0
  29. package/dist/code/lang-registry.d.ts +31 -0
  30. package/dist/code/lang-registry.js +54 -0
  31. package/dist/code/lang-registry.js.map +1 -0
  32. package/dist/code/react.d.ts +2 -0
  33. package/dist/code/react.js +1 -0
  34. package/dist/code/vue.d.ts +2 -0
  35. package/dist/code/vue.js +1 -0
  36. package/dist/core/abilities.d.ts +32 -0
  37. package/dist/core/abilities.js +160 -0
  38. package/dist/core/abilities.js.map +1 -0
  39. package/dist/core/block-convert.d.ts +59 -0
  40. package/dist/core/block-convert.js +164 -0
  41. package/dist/core/block-convert.js.map +1 -0
  42. package/dist/core/block-drag.d.ts +12 -0
  43. package/dist/core/block-drag.js +62 -0
  44. package/dist/core/block-drag.js.map +1 -0
  45. package/dist/core/block-flash.d.ts +19 -0
  46. package/dist/core/block-flash.js +66 -0
  47. package/dist/core/block-flash.js.map +1 -0
  48. package/dist/core/context.d.ts +63 -0
  49. package/dist/core/context.js +108 -0
  50. package/dist/core/context.js.map +1 -0
  51. package/dist/core/convert.d.ts +96 -0
  52. package/dist/core/convert.js +241 -0
  53. package/dist/core/convert.js.map +1 -0
  54. package/dist/core/core-feature.d.ts +17 -0
  55. package/dist/core/core-feature.js +100 -0
  56. package/dist/core/core-feature.js.map +1 -0
  57. package/dist/core/define-editor.d.ts +23 -0
  58. package/dist/core/define-editor.js +110 -0
  59. package/dist/core/define-editor.js.map +1 -0
  60. package/dist/core/doc-anchors.d.ts +67 -0
  61. package/dist/core/doc-anchors.js +112 -0
  62. package/dist/core/doc-anchors.js.map +1 -0
  63. package/dist/core/document-markdown.d.ts +13 -0
  64. package/dist/core/document-markdown.js +31 -0
  65. package/dist/core/document-markdown.js.map +1 -0
  66. package/dist/core/download.d.ts +5 -0
  67. package/dist/core/download.js +16 -0
  68. package/dist/core/download.js.map +1 -0
  69. package/dist/core/editor-ui.d.ts +45 -0
  70. package/dist/core/editor-ui.js +38 -0
  71. package/dist/core/editor-ui.js.map +1 -0
  72. package/dist/core/extension-points.d.ts +64 -0
  73. package/dist/core/feature-context.d.ts +32 -0
  74. package/dist/core/feature-context.js +46 -0
  75. package/dist/core/feature-context.js.map +1 -0
  76. package/dist/core/feature.d.ts +234 -0
  77. package/dist/core/feature.js +13 -0
  78. package/dist/core/feature.js.map +1 -0
  79. package/dist/core/fences.d.ts +16 -0
  80. package/dist/core/fences.js +105 -0
  81. package/dist/core/fences.js.map +1 -0
  82. package/dist/core/fetch-error.d.ts +5 -0
  83. package/dist/core/fetch-error.js +11 -0
  84. package/dist/core/fetch-error.js.map +1 -0
  85. package/dist/core/index.d.ts +28 -0
  86. package/dist/core/index.js +27 -0
  87. package/dist/core/metadata-types.d.ts +27 -0
  88. package/dist/core/metadata-types.js +10 -0
  89. package/dist/core/metadata-types.js.map +1 -0
  90. package/dist/core/metadata.d.ts +39 -0
  91. package/dist/core/metadata.js +76 -0
  92. package/dist/core/metadata.js.map +1 -0
  93. package/dist/core/notify.d.ts +31 -0
  94. package/dist/core/notify.js +7 -0
  95. package/dist/core/notify.js.map +1 -0
  96. package/dist/core/pipeline.d.ts +52 -0
  97. package/dist/core/pipeline.js +78 -0
  98. package/dist/core/pipeline.js.map +1 -0
  99. package/dist/core/schema/abilities.d.ts +55 -0
  100. package/dist/core/schema/abilities.js +113 -0
  101. package/dist/core/schema/abilities.js.map +1 -0
  102. package/dist/core/schema/block-ids.d.ts +29 -0
  103. package/dist/core/schema/block-ids.js +134 -0
  104. package/dist/core/schema/block-ids.js.map +1 -0
  105. package/dist/core/schema/hex-color.d.ts +5 -0
  106. package/dist/core/schema/hex-color.js +7 -0
  107. package/dist/core/schema/hex-color.js.map +1 -0
  108. package/dist/core/schema/index.d.ts +21 -0
  109. package/dist/core/schema/index.js +33 -0
  110. package/dist/core/schema/index.js.map +1 -0
  111. package/dist/core/schema/mark-flags.d.ts +12 -0
  112. package/dist/core/schema/node-flags.d.ts +23 -0
  113. package/dist/core/schema/node-flags.js +34 -0
  114. package/dist/core/schema/node-flags.js.map +1 -0
  115. package/dist/core/schema/opaque-fence.d.ts +11 -0
  116. package/dist/core/schema/opaque-fence.js +57 -0
  117. package/dist/core/schema/opaque-fence.js.map +1 -0
  118. package/dist/core/schema/strike.d.ts +4 -0
  119. package/dist/core/schema/strike.js +9 -0
  120. package/dist/core/schema/strike.js.map +1 -0
  121. package/dist/core/selection-range.d.ts +13 -0
  122. package/dist/core/selection-range.js +28 -0
  123. package/dist/core/selection-range.js.map +1 -0
  124. package/dist/core/slash.d.ts +24 -0
  125. package/dist/core/slash.js +60 -0
  126. package/dist/core/slash.js.map +1 -0
  127. package/dist/core/store.d.ts +22 -0
  128. package/dist/core/store.js +61 -0
  129. package/dist/core/store.js.map +1 -0
  130. package/dist/core/suggestion-popup.d.ts +63 -0
  131. package/dist/core/suggestion-popup.js +57 -0
  132. package/dist/core/suggestion-popup.js.map +1 -0
  133. package/dist/core/tag-name.js +11 -0
  134. package/dist/core/tag-name.js.map +1 -0
  135. package/dist/core/toolbar-items.d.ts +10 -0
  136. package/dist/core/toolbar-items.js +206 -0
  137. package/dist/core/toolbar-items.js.map +1 -0
  138. package/dist/core/toolbar.d.ts +74 -0
  139. package/dist/core/toolbar.js +45 -0
  140. package/dist/core/toolbar.js.map +1 -0
  141. package/dist/document/DocumentSurface.d.ts +38 -0
  142. package/dist/document/DocumentSurface.js +44 -0
  143. package/dist/document/DocumentSurface.js.map +1 -0
  144. package/dist/document/DocumentSurface.vue.d.ts +56 -0
  145. package/dist/document/DocumentSurface2.js +71 -0
  146. package/dist/document/DocumentSurface2.js.map +1 -0
  147. package/dist/document/react.d.ts +2 -0
  148. package/dist/document/react.js +1 -0
  149. package/dist/document/vue.d.ts +2 -0
  150. package/dist/document/vue.js +1 -0
  151. package/dist/features/ai/agent-op-review.d.ts +69 -0
  152. package/dist/features/ai/agent-op-review.js +182 -0
  153. package/dist/features/ai/agent-op-review.js.map +1 -0
  154. package/dist/features/ai/agent-ops.d.ts +15 -0
  155. package/dist/features/ai/agent-ops.js +228 -0
  156. package/dist/features/ai/agent-ops.js.map +1 -0
  157. package/dist/features/ai/ai-apply.d.ts +76 -0
  158. package/dist/features/ai/ai-apply.js +193 -0
  159. package/dist/features/ai/ai-apply.js.map +1 -0
  160. package/dist/features/ai/ai-menu.d.ts +38 -0
  161. package/dist/features/ai/ai-menu.js +20 -0
  162. package/dist/features/ai/ai-menu.js.map +1 -0
  163. package/dist/features/ai/ai-review.d.ts +136 -0
  164. package/dist/features/ai/ai-review.js +543 -0
  165. package/dist/features/ai/ai-review.js.map +1 -0
  166. package/dist/features/ai/ai-selection-highlight.d.ts +21 -0
  167. package/dist/features/ai/ai-selection-highlight.js +44 -0
  168. package/dist/features/ai/ai-selection-highlight.js.map +1 -0
  169. package/dist/features/ai/ai-sse.d.ts +28 -0
  170. package/dist/features/ai/ai-sse.js +82 -0
  171. package/dist/features/ai/ai-sse.js.map +1 -0
  172. package/dist/features/ai/assistant.d.ts +53 -0
  173. package/dist/features/ai/assistant.js +82 -0
  174. package/dist/features/ai/assistant.js.map +1 -0
  175. package/dist/features/ai/block-actions.d.ts +20 -0
  176. package/dist/features/ai/block-actions.js +55 -0
  177. package/dist/features/ai/block-actions.js.map +1 -0
  178. package/dist/features/ai/components/AiReviewBar.js +145 -0
  179. package/dist/features/ai/components/AiReviewBar.js.map +1 -0
  180. package/dist/features/ai/components/AiReviewBar.vue.d.ts +15 -0
  181. package/dist/features/ai/components/AiSelectionMenu.js +519 -0
  182. package/dist/features/ai/components/AiSelectionMenu.js.map +1 -0
  183. package/dist/features/ai/components/AiSelectionMenu.vue.d.ts +17 -0
  184. package/dist/features/ai/components/AiSidebar.js +378 -0
  185. package/dist/features/ai/components/AiSidebar.js.map +1 -0
  186. package/dist/features/ai/components/AiSidebar.vue.d.ts +26 -0
  187. package/dist/features/ai/components/DocumentChatAnswer.js +67 -0
  188. package/dist/features/ai/components/DocumentChatAnswer.js.map +1 -0
  189. package/dist/features/ai/components/DocumentChatAnswer.vue.d.ts +13 -0
  190. package/dist/features/ai/components/DocumentChatOps.js +113 -0
  191. package/dist/features/ai/components/DocumentChatOps.js.map +1 -0
  192. package/dist/features/ai/components/DocumentChatOps.vue.d.ts +27 -0
  193. package/dist/features/ai/components/ModelQuickSwitch.js +84 -0
  194. package/dist/features/ai/components/ModelQuickSwitch.js.map +1 -0
  195. package/dist/features/ai/components/ModelQuickSwitch.vue.d.ts +23 -0
  196. package/dist/features/ai/components/SettingsAiTab.js +88 -0
  197. package/dist/features/ai/components/SettingsAiTab.js.map +1 -0
  198. package/dist/features/ai/components/SettingsAiTab.vue.d.ts +6 -0
  199. package/dist/features/ai/components/SettingsModelProfiles.js +260 -0
  200. package/dist/features/ai/components/SettingsModelProfiles.js.map +1 -0
  201. package/dist/features/ai/components/SettingsModelProfiles.vue.d.ts +6 -0
  202. package/dist/features/ai/document-chat-model.d.ts +88 -0
  203. package/dist/features/ai/document-chat-model.js +190 -0
  204. package/dist/features/ai/document-chat-model.js.map +1 -0
  205. package/dist/features/ai/document-chat.d.ts +17 -0
  206. package/dist/features/ai/document-chat.js +112 -0
  207. package/dist/features/ai/document-chat.js.map +1 -0
  208. package/dist/features/ai/feature.d.ts +25 -0
  209. package/dist/features/ai/feature.js +89 -0
  210. package/dist/features/ai/feature.js.map +1 -0
  211. package/dist/features/ai/ghost-autocomplete.d.ts +47 -0
  212. package/dist/features/ai/ghost-autocomplete.js +204 -0
  213. package/dist/features/ai/ghost-autocomplete.js.map +1 -0
  214. package/dist/features/ai/index.d.ts +24 -0
  215. package/dist/features/ai/index.js +23 -0
  216. package/dist/features/ai/model-profiles.d.ts +36 -0
  217. package/dist/features/ai/model-profiles.js +111 -0
  218. package/dist/features/ai/model-profiles.js.map +1 -0
  219. package/dist/features/ai/preview-extensions.js +14 -0
  220. package/dist/features/ai/preview-extensions.js.map +1 -0
  221. package/dist/features/ai/protocol/agent-ops.d.ts +120 -0
  222. package/dist/features/ai/protocol/agent-ops.js +298 -0
  223. package/dist/features/ai/protocol/agent-ops.js.map +1 -0
  224. package/dist/features/ai/protocol/chat.d.ts +57 -0
  225. package/dist/features/ai/protocol/chat.js +146 -0
  226. package/dist/features/ai/protocol/chat.js.map +1 -0
  227. package/dist/features/ai/protocol/complete.d.ts +21 -0
  228. package/dist/features/ai/protocol/complete.js +81 -0
  229. package/dist/features/ai/protocol/complete.js.map +1 -0
  230. package/dist/features/ai/protocol/index.d.ts +7 -0
  231. package/dist/features/ai/protocol/index.js +7 -0
  232. package/dist/features/ai/protocol/models.d.ts +48 -0
  233. package/dist/features/ai/protocol/models.js +41 -0
  234. package/dist/features/ai/protocol/models.js.map +1 -0
  235. package/dist/features/ai/protocol/schemas.d.ts +36 -0
  236. package/dist/features/ai/protocol/schemas.js +40 -0
  237. package/dist/features/ai/protocol/schemas.js.map +1 -0
  238. package/dist/features/ai/protocol/tasks.d.ts +107 -0
  239. package/dist/features/ai/protocol/tasks.js +227 -0
  240. package/dist/features/ai/protocol/tasks.js.map +1 -0
  241. package/dist/features/ai/rate-limit.d.ts +9 -0
  242. package/dist/features/ai/rate-limit.js +20 -0
  243. package/dist/features/ai/rate-limit.js.map +1 -0
  244. package/dist/features/ai/react/AiReviewBar.d.ts +12 -0
  245. package/dist/features/ai/react/AiReviewBar.js +156 -0
  246. package/dist/features/ai/react/AiReviewBar.js.map +1 -0
  247. package/dist/features/ai/react/AiSelectionMenu.d.ts +14 -0
  248. package/dist/features/ai/react/AiSelectionMenu.js +513 -0
  249. package/dist/features/ai/react/AiSelectionMenu.js.map +1 -0
  250. package/dist/features/ai/react/AiSidebar.d.ts +19 -0
  251. package/dist/features/ai/react/AiSidebar.js +339 -0
  252. package/dist/features/ai/react/AiSidebar.js.map +1 -0
  253. package/dist/features/ai/react/DocumentChatAnswer.d.ts +10 -0
  254. package/dist/features/ai/react/DocumentChatAnswer.js +70 -0
  255. package/dist/features/ai/react/DocumentChatAnswer.js.map +1 -0
  256. package/dist/features/ai/react/DocumentChatOps.d.ts +19 -0
  257. package/dist/features/ai/react/DocumentChatOps.js +111 -0
  258. package/dist/features/ai/react/DocumentChatOps.js.map +1 -0
  259. package/dist/features/ai/react/ModelQuickSwitch.d.ts +19 -0
  260. package/dist/features/ai/react/ModelQuickSwitch.js +89 -0
  261. package/dist/features/ai/react/ModelQuickSwitch.js.map +1 -0
  262. package/dist/features/ai/react/SettingsAiTab.d.ts +5 -0
  263. package/dist/features/ai/react/SettingsAiTab.js +103 -0
  264. package/dist/features/ai/react/SettingsAiTab.js.map +1 -0
  265. package/dist/features/ai/react/SettingsModelProfiles.d.ts +8 -0
  266. package/dist/features/ai/react/SettingsModelProfiles.js +318 -0
  267. package/dist/features/ai/react/SettingsModelProfiles.js.map +1 -0
  268. package/dist/features/ai/react/use-ai-assistant.d.ts +22 -0
  269. package/dist/features/ai/react/use-ai-assistant.js +36 -0
  270. package/dist/features/ai/react/use-ai-assistant.js.map +1 -0
  271. package/dist/features/ai/react/use-document-chat.d.ts +32 -0
  272. package/dist/features/ai/react/use-document-chat.js +43 -0
  273. package/dist/features/ai/react/use-document-chat.js.map +1 -0
  274. package/dist/features/ai/react/use-model-profiles.d.ts +20 -0
  275. package/dist/features/ai/react/use-model-profiles.js +33 -0
  276. package/dist/features/ai/react/use-model-profiles.js.map +1 -0
  277. package/dist/features/ai/react.d.ts +23 -0
  278. package/dist/features/ai/react.js +28 -0
  279. package/dist/features/ai/react.js.map +1 -0
  280. package/dist/features/ai/sidebar-flow.d.ts +61 -0
  281. package/dist/features/ai/sidebar-flow.js +125 -0
  282. package/dist/features/ai/sidebar-flow.js.map +1 -0
  283. package/dist/features/ai/use-ai-assistant.d.ts +22 -0
  284. package/dist/features/ai/use-ai-assistant.js +39 -0
  285. package/dist/features/ai/use-ai-assistant.js.map +1 -0
  286. package/dist/features/ai/use-document-chat.d.ts +33 -0
  287. package/dist/features/ai/use-document-chat.js +45 -0
  288. package/dist/features/ai/use-document-chat.js.map +1 -0
  289. package/dist/features/ai/use-model-profiles.d.ts +23 -0
  290. package/dist/features/ai/use-model-profiles.js +50 -0
  291. package/dist/features/ai/use-model-profiles.js.map +1 -0
  292. package/dist/features/ai/vue.d.ts +21 -0
  293. package/dist/features/ai/vue.js +28 -0
  294. package/dist/features/ai/vue.js.map +1 -0
  295. package/dist/features/authors/attribution.d.ts +36 -0
  296. package/dist/features/authors/attribution.js +94 -0
  297. package/dist/features/authors/attribution.js.map +1 -0
  298. package/dist/features/authors/author-color-styles.d.ts +12 -0
  299. package/dist/features/authors/author-color-styles.js +24 -0
  300. package/dist/features/authors/author-color-styles.js.map +1 -0
  301. package/dist/features/authors/components/AuthorColorsButton.js +50 -0
  302. package/dist/features/authors/components/AuthorColorsButton.js.map +1 -0
  303. package/dist/features/authors/components/AuthorColorsButton.vue.d.ts +11 -0
  304. package/dist/features/authors/components/AuthorColorsPanel.js +72 -0
  305. package/dist/features/authors/components/AuthorColorsPanel.js.map +1 -0
  306. package/dist/features/authors/components/AuthorColorsPanel.vue.d.ts +11 -0
  307. package/dist/features/authors/components/SettingsAuthorsTab.js +49 -0
  308. package/dist/features/authors/components/SettingsAuthorsTab.js.map +1 -0
  309. package/dist/features/authors/components/SettingsAuthorsTab.vue.d.ts +6 -0
  310. package/dist/features/authors/feature.d.ts +22 -0
  311. package/dist/features/authors/feature.js +47 -0
  312. package/dist/features/authors/feature.js.map +1 -0
  313. package/dist/features/authors/index.d.ts +7 -0
  314. package/dist/features/authors/index.js +6 -0
  315. package/dist/features/authors/react/AuthorColorsButton.d.ts +8 -0
  316. package/dist/features/authors/react/AuthorColorsButton.js +41 -0
  317. package/dist/features/authors/react/AuthorColorsButton.js.map +1 -0
  318. package/dist/features/authors/react/AuthorColorsPanel.d.ts +8 -0
  319. package/dist/features/authors/react/AuthorColorsPanel.js +125 -0
  320. package/dist/features/authors/react/AuthorColorsPanel.js.map +1 -0
  321. package/dist/features/authors/react/SettingsAuthorsTab.d.ts +5 -0
  322. package/dist/features/authors/react/SettingsAuthorsTab.js +92 -0
  323. package/dist/features/authors/react/SettingsAuthorsTab.js.map +1 -0
  324. package/dist/features/authors/react.d.ts +11 -0
  325. package/dist/features/authors/react.js +16 -0
  326. package/dist/features/authors/react.js.map +1 -0
  327. package/dist/features/authors/schema.d.ts +22 -0
  328. package/dist/features/authors/schema.js +70 -0
  329. package/dist/features/authors/schema.js.map +1 -0
  330. package/dist/features/authors/vue.d.ts +10 -0
  331. package/dist/features/authors/vue.js +16 -0
  332. package/dist/features/authors/vue.js.map +1 -0
  333. package/dist/features/block-ui/block-actions.d.ts +17 -0
  334. package/dist/features/block-ui/block-actions.js +37 -0
  335. package/dist/features/block-ui/block-actions.js.map +1 -0
  336. package/dist/features/block-ui/components/BlockActionsOverlay.js +142 -0
  337. package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -0
  338. package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +25 -0
  339. package/dist/features/block-ui/components/BlockHandles.js +113 -0
  340. package/dist/features/block-ui/components/BlockHandles.js.map +1 -0
  341. package/dist/features/block-ui/components/BlockUi.js +181 -0
  342. package/dist/features/block-ui/components/BlockUi.js.map +1 -0
  343. package/dist/features/block-ui/components/BlockUi.vue.d.ts +17 -0
  344. package/dist/features/block-ui/feature.d.ts +21 -0
  345. package/dist/features/block-ui/feature.js +23 -0
  346. package/dist/features/block-ui/feature.js.map +1 -0
  347. package/dist/features/block-ui/handle-geometry.js +52 -0
  348. package/dist/features/block-ui/handle-geometry.js.map +1 -0
  349. package/dist/features/block-ui/index.d.ts +3 -0
  350. package/dist/features/block-ui/index.js +3 -0
  351. package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +19 -0
  352. package/dist/features/block-ui/react/BlockActionsOverlay.js +142 -0
  353. package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -0
  354. package/dist/features/block-ui/react/BlockHandles.d.ts +15 -0
  355. package/dist/features/block-ui/react/BlockHandles.js +104 -0
  356. package/dist/features/block-ui/react/BlockHandles.js.map +1 -0
  357. package/dist/features/block-ui/react/BlockUi.d.ts +14 -0
  358. package/dist/features/block-ui/react/BlockUi.js +174 -0
  359. package/dist/features/block-ui/react/BlockUi.js.map +1 -0
  360. package/dist/features/block-ui/react.d.ts +11 -0
  361. package/dist/features/block-ui/react.js +13 -0
  362. package/dist/features/block-ui/react.js.map +1 -0
  363. package/dist/features/block-ui/vue.d.ts +9 -0
  364. package/dist/features/block-ui/vue.js +12 -0
  365. package/dist/features/block-ui/vue.js.map +1 -0
  366. package/dist/features/collab/anchor-resolver.d.ts +7 -0
  367. package/dist/features/collab/anchor-resolver.js +92 -0
  368. package/dist/features/collab/anchor-resolver.js.map +1 -0
  369. package/dist/features/collab/feature.d.ts +22 -0
  370. package/dist/features/collab/feature.js +36 -0
  371. package/dist/features/collab/feature.js.map +1 -0
  372. package/dist/features/collab/index.d.ts +3 -0
  373. package/dist/features/collab/index.js +3 -0
  374. package/dist/features/collab/react.d.ts +7 -0
  375. package/dist/features/collab/react.js +10 -0
  376. package/dist/features/collab/react.js.map +1 -0
  377. package/dist/features/collab/vue.d.ts +6 -0
  378. package/dist/features/collab/vue.js +37 -0
  379. package/dist/features/collab/vue.js.map +1 -0
  380. package/dist/features/comments/comments-plugin.d.ts +71 -0
  381. package/dist/features/comments/comments-plugin.js +185 -0
  382. package/dist/features/comments/comments-plugin.js.map +1 -0
  383. package/dist/features/comments/components/CommentBubble.js +54 -0
  384. package/dist/features/comments/components/CommentBubble.js.map +1 -0
  385. package/dist/features/comments/components/CommentBubble.vue.d.ts +14 -0
  386. package/dist/features/comments/components/CommentComposer.js +87 -0
  387. package/dist/features/comments/components/CommentComposer.js.map +1 -0
  388. package/dist/features/comments/components/CommentComposer.vue.d.ts +21 -0
  389. package/dist/features/comments/components/CommentThreadView.js +255 -0
  390. package/dist/features/comments/components/CommentThreadView.js.map +1 -0
  391. package/dist/features/comments/components/CommentThreadView.vue.d.ts +29 -0
  392. package/dist/features/comments/components/CommentsListMenu.js +134 -0
  393. package/dist/features/comments/components/CommentsListMenu.js.map +1 -0
  394. package/dist/features/comments/components/CommentsListMenu.vue.d.ts +10 -0
  395. package/dist/features/comments/components/CommentsMargin.js +291 -0
  396. package/dist/features/comments/components/CommentsMargin.js.map +1 -0
  397. package/dist/features/comments/components/CommentsMargin.vue.d.ts +16 -0
  398. package/dist/features/comments/components/CommentsOverlay.js +39 -0
  399. package/dist/features/comments/components/CommentsOverlay.js.map +1 -0
  400. package/dist/features/comments/components/CommentsPopover.js +124 -0
  401. package/dist/features/comments/components/CommentsPopover.js.map +1 -0
  402. package/dist/features/comments/components/CommentsPopover.vue.d.ts +10 -0
  403. package/dist/features/comments/components/CommentsToolbarButton.js +61 -0
  404. package/dist/features/comments/components/CommentsToolbarButton.js.map +1 -0
  405. package/dist/features/comments/components/SettingsCommentsTab.js +46 -0
  406. package/dist/features/comments/components/SettingsCommentsTab.js.map +1 -0
  407. package/dist/features/comments/components/SettingsCommentsTab.vue.d.ts +6 -0
  408. package/dist/features/comments/feature.d.ts +39 -0
  409. package/dist/features/comments/feature.js +128 -0
  410. package/dist/features/comments/feature.js.map +1 -0
  411. package/dist/features/comments/index.d.ts +6 -0
  412. package/dist/features/comments/index.js +6 -0
  413. package/dist/features/comments/model.d.ts +87 -0
  414. package/dist/features/comments/model.js +390 -0
  415. package/dist/features/comments/model.js.map +1 -0
  416. package/dist/features/comments/react/CommentAvatar.js +24 -0
  417. package/dist/features/comments/react/CommentAvatar.js.map +1 -0
  418. package/dist/features/comments/react/CommentBubble.d.ts +11 -0
  419. package/dist/features/comments/react/CommentBubble.js +43 -0
  420. package/dist/features/comments/react/CommentBubble.js.map +1 -0
  421. package/dist/features/comments/react/CommentComposer.d.ts +15 -0
  422. package/dist/features/comments/react/CommentComposer.js +69 -0
  423. package/dist/features/comments/react/CommentComposer.js.map +1 -0
  424. package/dist/features/comments/react/CommentThreadView.d.ts +24 -0
  425. package/dist/features/comments/react/CommentThreadView.js +249 -0
  426. package/dist/features/comments/react/CommentThreadView.js.map +1 -0
  427. package/dist/features/comments/react/CommentsListMenu.d.ts +8 -0
  428. package/dist/features/comments/react/CommentsListMenu.js +115 -0
  429. package/dist/features/comments/react/CommentsListMenu.js.map +1 -0
  430. package/dist/features/comments/react/CommentsMargin.d.ts +16 -0
  431. package/dist/features/comments/react/CommentsMargin.js +294 -0
  432. package/dist/features/comments/react/CommentsMargin.js.map +1 -0
  433. package/dist/features/comments/react/CommentsOverlay.d.ts +11 -0
  434. package/dist/features/comments/react/CommentsOverlay.js +52 -0
  435. package/dist/features/comments/react/CommentsOverlay.js.map +1 -0
  436. package/dist/features/comments/react/CommentsPopover.d.ts +15 -0
  437. package/dist/features/comments/react/CommentsPopover.js +107 -0
  438. package/dist/features/comments/react/CommentsPopover.js.map +1 -0
  439. package/dist/features/comments/react/CommentsToolbarButton.d.ts +12 -0
  440. package/dist/features/comments/react/CommentsToolbarButton.js +52 -0
  441. package/dist/features/comments/react/CommentsToolbarButton.js.map +1 -0
  442. package/dist/features/comments/react/SettingsCommentsTab.d.ts +5 -0
  443. package/dist/features/comments/react/SettingsCommentsTab.js +77 -0
  444. package/dist/features/comments/react/SettingsCommentsTab.js.map +1 -0
  445. package/dist/features/comments/react/use-comments.d.ts +17 -0
  446. package/dist/features/comments/react/use-comments.js +37 -0
  447. package/dist/features/comments/react/use-comments.js.map +1 -0
  448. package/dist/features/comments/react.d.ts +23 -0
  449. package/dist/features/comments/react.js +28 -0
  450. package/dist/features/comments/react.js.map +1 -0
  451. package/dist/features/comments/schema.d.ts +51 -0
  452. package/dist/features/comments/schema.js +41 -0
  453. package/dist/features/comments/schema.js.map +1 -0
  454. package/dist/features/comments/shortcuts.js +34 -0
  455. package/dist/features/comments/shortcuts.js.map +1 -0
  456. package/dist/features/comments/use-comments.d.ts +37 -0
  457. package/dist/features/comments/use-comments.js +45 -0
  458. package/dist/features/comments/use-comments.js.map +1 -0
  459. package/dist/features/comments/vue.d.ts +20 -0
  460. package/dist/features/comments/vue.js +28 -0
  461. package/dist/features/comments/vue.js.map +1 -0
  462. package/dist/features/composites/ai-brief.d.ts +31 -0
  463. package/dist/features/composites/ai-brief.js +56 -0
  464. package/dist/features/composites/ai-brief.js.map +1 -0
  465. package/dist/features/composites/anchors.d.ts +47 -0
  466. package/dist/features/composites/anchors.js +137 -0
  467. package/dist/features/composites/anchors.js.map +1 -0
  468. package/dist/features/composites/components/CompositeChrome.js +243 -0
  469. package/dist/features/composites/components/CompositeChrome.js.map +1 -0
  470. package/dist/features/composites/components/CompositeChrome.vue.d.ts +19 -0
  471. package/dist/features/composites/components/CompositeDetails.js +158 -0
  472. package/dist/features/composites/components/CompositeDetails.js.map +1 -0
  473. package/dist/features/composites/components/CompositeDetails.vue.d.ts +19 -0
  474. package/dist/features/composites/components/CompositeFieldEditor.js +114 -0
  475. package/dist/features/composites/components/CompositeFieldEditor.js.map +1 -0
  476. package/dist/features/composites/components/CompositeFieldEditor.vue.d.ts +23 -0
  477. package/dist/features/composites/components/CompositeInspector.js +439 -0
  478. package/dist/features/composites/components/CompositeInspector.js.map +1 -0
  479. package/dist/features/composites/components/CompositeInspector.vue.d.ts +32 -0
  480. package/dist/features/composites/components/CompositeStatusMenu.js +51 -0
  481. package/dist/features/composites/components/CompositeStatusMenu.js.map +1 -0
  482. package/dist/features/composites/components/CompositeStatusMenu.vue.d.ts +28 -0
  483. package/dist/features/composites/components/CompositeSummaryEditor.js +79 -0
  484. package/dist/features/composites/components/CompositeSummaryEditor.js.map +1 -0
  485. package/dist/features/composites/components/CompositeSummaryEditor.vue.d.ts +18 -0
  486. package/dist/features/composites/components/CompositeTable.js +348 -0
  487. package/dist/features/composites/components/CompositeTable.js.map +1 -0
  488. package/dist/features/composites/components/CompositeTable.vue.d.ts +15 -0
  489. package/dist/features/composites/components/CompositeTagsEditor.js +95 -0
  490. package/dist/features/composites/components/CompositeTagsEditor.js.map +1 -0
  491. package/dist/features/composites/components/CompositeTagsEditor.vue.d.ts +13 -0
  492. package/dist/features/composites/components/CompositeView.js +46 -0
  493. package/dist/features/composites/components/CompositeView.js.map +1 -0
  494. package/dist/features/composites/components/CompositeView.vue.d.ts +96 -0
  495. package/dist/features/composites/components/SettingsEditingTab.js +119 -0
  496. package/dist/features/composites/components/SettingsEditingTab.js.map +1 -0
  497. package/dist/features/composites/components/SettingsEditingTab.vue.d.ts +11 -0
  498. package/dist/features/composites/convert.d.ts +24 -0
  499. package/dist/features/composites/convert.js +145 -0
  500. package/dist/features/composites/convert.js.map +1 -0
  501. package/dist/features/composites/editing-settings-keys.js +47 -0
  502. package/dist/features/composites/editing-settings-keys.js.map +1 -0
  503. package/dist/features/composites/feature.d.ts +30 -0
  504. package/dist/features/composites/feature.js +305 -0
  505. package/dist/features/composites/feature.js.map +1 -0
  506. package/dist/features/composites/fences.d.ts +20 -0
  507. package/dist/features/composites/fences.js +86 -0
  508. package/dist/features/composites/fences.js.map +1 -0
  509. package/dist/features/composites/heading-composites.d.ts +36 -0
  510. package/dist/features/composites/heading-composites.js +140 -0
  511. package/dist/features/composites/heading-composites.js.map +1 -0
  512. package/dist/features/composites/index.d.ts +20 -0
  513. package/dist/features/composites/index.js +20 -0
  514. package/dist/features/composites/kinds.d.ts +49 -0
  515. package/dist/features/composites/kinds.js +131 -0
  516. package/dist/features/composites/kinds.js.map +1 -0
  517. package/dist/features/composites/legacy.d.ts +8 -0
  518. package/dist/features/composites/legacy.js +25 -0
  519. package/dist/features/composites/legacy.js.map +1 -0
  520. package/dist/features/composites/markdown-export.d.ts +17 -0
  521. package/dist/features/composites/markdown-export.js +49 -0
  522. package/dist/features/composites/markdown-export.js.map +1 -0
  523. package/dist/features/composites/meta-display.js +46 -0
  524. package/dist/features/composites/meta-display.js.map +1 -0
  525. package/dist/features/composites/node-views.d.ts +17 -0
  526. package/dist/features/composites/node-views.js +18 -0
  527. package/dist/features/composites/node-views.js.map +1 -0
  528. package/dist/features/composites/nodes.d.ts +56 -0
  529. package/dist/features/composites/nodes.js +480 -0
  530. package/dist/features/composites/nodes.js.map +1 -0
  531. package/dist/features/composites/outline.d.ts +35 -0
  532. package/dist/features/composites/outline.js +69 -0
  533. package/dist/features/composites/outline.js.map +1 -0
  534. package/dist/features/composites/react/CompositeChrome.d.ts +16 -0
  535. package/dist/features/composites/react/CompositeChrome.js +234 -0
  536. package/dist/features/composites/react/CompositeChrome.js.map +1 -0
  537. package/dist/features/composites/react/CompositeDetails.d.ts +16 -0
  538. package/dist/features/composites/react/CompositeDetails.js +149 -0
  539. package/dist/features/composites/react/CompositeDetails.js.map +1 -0
  540. package/dist/features/composites/react/CompositeFieldEditor.d.ts +18 -0
  541. package/dist/features/composites/react/CompositeFieldEditor.js +131 -0
  542. package/dist/features/composites/react/CompositeFieldEditor.js.map +1 -0
  543. package/dist/features/composites/react/CompositeInspector.d.ts +23 -0
  544. package/dist/features/composites/react/CompositeInspector.js +506 -0
  545. package/dist/features/composites/react/CompositeInspector.js.map +1 -0
  546. package/dist/features/composites/react/CompositeStatusMenu.d.ts +15 -0
  547. package/dist/features/composites/react/CompositeStatusMenu.js +36 -0
  548. package/dist/features/composites/react/CompositeStatusMenu.js.map +1 -0
  549. package/dist/features/composites/react/CompositeSummaryEditor.d.ts +15 -0
  550. package/dist/features/composites/react/CompositeSummaryEditor.js +85 -0
  551. package/dist/features/composites/react/CompositeSummaryEditor.js.map +1 -0
  552. package/dist/features/composites/react/CompositeTable.d.ts +11 -0
  553. package/dist/features/composites/react/CompositeTable.js +342 -0
  554. package/dist/features/composites/react/CompositeTable.js.map +1 -0
  555. package/dist/features/composites/react/CompositeTagsEditor.d.ts +10 -0
  556. package/dist/features/composites/react/CompositeTagsEditor.js +122 -0
  557. package/dist/features/composites/react/CompositeTagsEditor.js.map +1 -0
  558. package/dist/features/composites/react/CompositeView.d.ts +6 -0
  559. package/dist/features/composites/react/CompositeView.js +30 -0
  560. package/dist/features/composites/react/CompositeView.js.map +1 -0
  561. package/dist/features/composites/react/SettingsEditingTab.d.ts +8 -0
  562. package/dist/features/composites/react/SettingsEditingTab.js +153 -0
  563. package/dist/features/composites/react/SettingsEditingTab.js.map +1 -0
  564. package/dist/features/composites/react/use-composite-anchors.d.ts +17 -0
  565. package/dist/features/composites/react/use-composite-anchors.js +46 -0
  566. package/dist/features/composites/react/use-composite-anchors.js.map +1 -0
  567. package/dist/features/composites/react/use-composite-rows.d.ts +11 -0
  568. package/dist/features/composites/react/use-composite-rows.js +26 -0
  569. package/dist/features/composites/react/use-composite-rows.js.map +1 -0
  570. package/dist/features/composites/react.d.ts +24 -0
  571. package/dist/features/composites/react.js +30 -0
  572. package/dist/features/composites/react.js.map +1 -0
  573. package/dist/features/composites/rows-model.d.ts +38 -0
  574. package/dist/features/composites/rows-model.js +92 -0
  575. package/dist/features/composites/rows-model.js.map +1 -0
  576. package/dist/features/composites/rows.d.ts +76 -0
  577. package/dist/features/composites/rows.js +159 -0
  578. package/dist/features/composites/rows.js.map +1 -0
  579. package/dist/features/composites/schema.d.ts +21 -0
  580. package/dist/features/composites/schema.js +26 -0
  581. package/dist/features/composites/schema.js.map +1 -0
  582. package/dist/features/composites/structure-mode.d.ts +11 -0
  583. package/dist/features/composites/structure-mode.js +16 -0
  584. package/dist/features/composites/structure-mode.js.map +1 -0
  585. package/dist/features/composites/structure.d.ts +19 -0
  586. package/dist/features/composites/structure.js +19 -0
  587. package/dist/features/composites/structure.js.map +1 -0
  588. package/dist/features/composites/table-model.js +117 -0
  589. package/dist/features/composites/table-model.js.map +1 -0
  590. package/dist/features/composites/tree-root.d.ts +11 -0
  591. package/dist/features/composites/tree-root.js +16 -0
  592. package/dist/features/composites/tree-root.js.map +1 -0
  593. package/dist/features/composites/use-composite-anchors.d.ts +18 -0
  594. package/dist/features/composites/use-composite-anchors.js +42 -0
  595. package/dist/features/composites/use-composite-anchors.js.map +1 -0
  596. package/dist/features/composites/use-composite-rows.d.ts +25 -0
  597. package/dist/features/composites/use-composite-rows.js +28 -0
  598. package/dist/features/composites/use-composite-rows.js.map +1 -0
  599. package/dist/features/composites/vue.d.ts +23 -0
  600. package/dist/features/composites/vue.js +30 -0
  601. package/dist/features/composites/vue.js.map +1 -0
  602. package/dist/features/media/assets.d.ts +30 -0
  603. package/dist/features/media/assets.js +26 -0
  604. package/dist/features/media/assets.js.map +1 -0
  605. package/dist/features/media/audio-recorder.d.ts +25 -0
  606. package/dist/features/media/audio-recorder.js +123 -0
  607. package/dist/features/media/audio-recorder.js.map +1 -0
  608. package/dist/features/media/components/AudioRecorderModal.js +152 -0
  609. package/dist/features/media/components/AudioRecorderModal.js.map +1 -0
  610. package/dist/features/media/components/AudioRecorderModal.vue.d.ts +15 -0
  611. package/dist/features/media/components/AudioView.js +46 -0
  612. package/dist/features/media/components/AudioView.js.map +1 -0
  613. package/dist/features/media/components/FileView.js +73 -0
  614. package/dist/features/media/components/FileView.js.map +1 -0
  615. package/dist/features/media/components/VideoView.js +47 -0
  616. package/dist/features/media/components/VideoView.js.map +1 -0
  617. package/dist/features/media/feature.d.ts +22 -0
  618. package/dist/features/media/feature.js +101 -0
  619. package/dist/features/media/feature.js.map +1 -0
  620. package/dist/features/media/file-import.d.ts +21 -0
  621. package/dist/features/media/file-import.js +76 -0
  622. package/dist/features/media/file-import.js.map +1 -0
  623. package/dist/features/media/index.d.ts +7 -0
  624. package/dist/features/media/index.js +7 -0
  625. package/dist/features/media/node-views.d.ts +28 -0
  626. package/dist/features/media/node-views.js +28 -0
  627. package/dist/features/media/node-views.js.map +1 -0
  628. package/dist/features/media/react/AudioRecorderModal.d.ts +12 -0
  629. package/dist/features/media/react/AudioRecorderModal.js +147 -0
  630. package/dist/features/media/react/AudioRecorderModal.js.map +1 -0
  631. package/dist/features/media/react/AudioView.js +32 -0
  632. package/dist/features/media/react/AudioView.js.map +1 -0
  633. package/dist/features/media/react/FileView.js +61 -0
  634. package/dist/features/media/react/FileView.js.map +1 -0
  635. package/dist/features/media/react/TitleField.js +30 -0
  636. package/dist/features/media/react/TitleField.js.map +1 -0
  637. package/dist/features/media/react/VideoView.js +33 -0
  638. package/dist/features/media/react/VideoView.js.map +1 -0
  639. package/dist/features/media/react/use-audio-recorder.d.ts +11 -0
  640. package/dist/features/media/react/use-audio-recorder.js +21 -0
  641. package/dist/features/media/react/use-audio-recorder.js.map +1 -0
  642. package/dist/features/media/react.d.ts +19 -0
  643. package/dist/features/media/react.js +37 -0
  644. package/dist/features/media/react.js.map +1 -0
  645. package/dist/features/media/schema.d.ts +59 -0
  646. package/dist/features/media/schema.js +194 -0
  647. package/dist/features/media/schema.js.map +1 -0
  648. package/dist/features/media/upload.d.ts +41 -0
  649. package/dist/features/media/upload.js +106 -0
  650. package/dist/features/media/upload.js.map +1 -0
  651. package/dist/features/media/use-audio-recorder.d.ts +12 -0
  652. package/dist/features/media/use-audio-recorder.js +21 -0
  653. package/dist/features/media/use-audio-recorder.js.map +1 -0
  654. package/dist/features/media/vue.d.ts +19 -0
  655. package/dist/features/media/vue.js +35 -0
  656. package/dist/features/media/vue.js.map +1 -0
  657. package/dist/features/mentions/index.d.ts +22 -0
  658. package/dist/features/mentions/index.js +34 -0
  659. package/dist/features/mentions/index.js.map +1 -0
  660. package/dist/features/mentions/mention-suggestion.d.ts +11 -0
  661. package/dist/features/mentions/mention-suggestion.js +34 -0
  662. package/dist/features/mentions/mention-suggestion.js.map +1 -0
  663. package/dist/features/mentions/mention-text.d.ts +18 -0
  664. package/dist/features/mentions/mention-text.js +75 -0
  665. package/dist/features/mentions/mention-text.js.map +1 -0
  666. package/dist/features/mentions/mention.d.ts +20 -0
  667. package/dist/features/mentions/mention.js +33 -0
  668. package/dist/features/mentions/mention.js.map +1 -0
  669. package/dist/features/mentions/metadata-defaults.d.ts +8 -0
  670. package/dist/features/mentions/metadata-defaults.js +30 -0
  671. package/dist/features/mentions/metadata-defaults.js.map +1 -0
  672. package/dist/features/mentions/normalize.d.ts +10 -0
  673. package/dist/features/mentions/normalize.js +31 -0
  674. package/dist/features/mentions/normalize.js.map +1 -0
  675. package/dist/features/mentions/schema.d.ts +10 -0
  676. package/dist/features/mentions/schema.js +10 -0
  677. package/dist/features/mentions/schema.js.map +1 -0
  678. package/dist/features/mentions/tag-suggestion.d.ts +11 -0
  679. package/dist/features/mentions/tag-suggestion.js +45 -0
  680. package/dist/features/mentions/tag-suggestion.js.map +1 -0
  681. package/dist/features/mentions/tag.d.ts +43 -0
  682. package/dist/features/mentions/tag.js +155 -0
  683. package/dist/features/mentions/tag.js.map +1 -0
  684. package/dist/features/tables/feature.d.ts +14 -0
  685. package/dist/features/tables/feature.js +100 -0
  686. package/dist/features/tables/feature.js.map +1 -0
  687. package/dist/features/tables/index.d.ts +3 -0
  688. package/dist/features/tables/index.js +3 -0
  689. package/dist/features/tables/schema.d.ts +6 -0
  690. package/dist/features/tables/schema.js +27 -0
  691. package/dist/features/tables/schema.js.map +1 -0
  692. package/dist/features/themes/components/SettingsAppearanceTab.js +227 -0
  693. package/dist/features/themes/components/SettingsAppearanceTab.js.map +1 -0
  694. package/dist/features/themes/components/SettingsAppearanceTab.vue.d.ts +6 -0
  695. package/dist/features/themes/feature.d.ts +24 -0
  696. package/dist/features/themes/feature.js +25 -0
  697. package/dist/features/themes/feature.js.map +1 -0
  698. package/dist/features/themes/index.d.ts +6 -0
  699. package/dist/features/themes/index.js +6 -0
  700. package/dist/features/themes/react/SettingsAppearanceTab.d.ts +5 -0
  701. package/dist/features/themes/react/SettingsAppearanceTab.js +221 -0
  702. package/dist/features/themes/react/SettingsAppearanceTab.js.map +1 -0
  703. package/dist/features/themes/react.d.ts +13 -0
  704. package/dist/features/themes/react.js +15 -0
  705. package/dist/features/themes/react.js.map +1 -0
  706. package/dist/features/themes/schema.d.ts +21 -0
  707. package/dist/features/themes/schema.js +16 -0
  708. package/dist/features/themes/schema.js.map +1 -0
  709. package/dist/features/themes/scope-css.d.ts +5 -0
  710. package/dist/features/themes/scope-css.js +142 -0
  711. package/dist/features/themes/scope-css.js.map +1 -0
  712. package/dist/features/themes/theme-runtime.d.ts +14 -0
  713. package/dist/features/themes/theme-runtime.js +147 -0
  714. package/dist/features/themes/theme-runtime.js.map +1 -0
  715. package/dist/features/themes/vue.d.ts +13 -0
  716. package/dist/features/themes/vue.js +29 -0
  717. package/dist/features/themes/vue.js.map +1 -0
  718. package/dist/features/transcript/TranscriptSegmentView.js +169 -0
  719. package/dist/features/transcript/TranscriptSegmentView.js.map +1 -0
  720. package/dist/features/transcript/TranscriptSegmentView.vue.d.ts +96 -0
  721. package/dist/features/transcript/convert.d.ts +11 -0
  722. package/dist/features/transcript/convert.js +40 -0
  723. package/dist/features/transcript/convert.js.map +1 -0
  724. package/dist/features/transcript/feature.d.ts +25 -0
  725. package/dist/features/transcript/feature.js +59 -0
  726. package/dist/features/transcript/feature.js.map +1 -0
  727. package/dist/features/transcript/index.d.ts +7 -0
  728. package/dist/features/transcript/index.js +7 -0
  729. package/dist/features/transcript/react/TranscriptSegmentView.d.ts +6 -0
  730. package/dist/features/transcript/react/TranscriptSegmentView.js +155 -0
  731. package/dist/features/transcript/react/TranscriptSegmentView.js.map +1 -0
  732. package/dist/features/transcript/react.d.ts +9 -0
  733. package/dist/features/transcript/react.js +12 -0
  734. package/dist/features/transcript/react.js.map +1 -0
  735. package/dist/features/transcript/schema.d.ts +9 -0
  736. package/dist/features/transcript/schema.js +9 -0
  737. package/dist/features/transcript/schema.js.map +1 -0
  738. package/dist/features/transcript/segment-node.d.ts +21 -0
  739. package/dist/features/transcript/segment-node.js +113 -0
  740. package/dist/features/transcript/segment-node.js.map +1 -0
  741. package/dist/features/transcript/segment.d.ts +10 -0
  742. package/dist/features/transcript/segment.js +26 -0
  743. package/dist/features/transcript/segment.js.map +1 -0
  744. package/dist/features/transcript/speakers.d.ts +8 -0
  745. package/dist/features/transcript/speakers.js +22 -0
  746. package/dist/features/transcript/speakers.js.map +1 -0
  747. package/dist/features/transcript/vue.d.ts +8 -0
  748. package/dist/features/transcript/vue.js +12 -0
  749. package/dist/features/transcript/vue.js.map +1 -0
  750. package/dist/i18n/de/ai.js +168 -0
  751. package/dist/i18n/de/ai.js.map +1 -0
  752. package/dist/i18n/de/authors.js +21 -0
  753. package/dist/i18n/de/authors.js.map +1 -0
  754. package/dist/i18n/de/block.js +16 -0
  755. package/dist/i18n/de/block.js.map +1 -0
  756. package/dist/i18n/de/comments.js +35 -0
  757. package/dist/i18n/de/comments.js.map +1 -0
  758. package/dist/i18n/de/common.js +11 -0
  759. package/dist/i18n/de/common.js.map +1 -0
  760. package/dist/i18n/de/composites.js +147 -0
  761. package/dist/i18n/de/composites.js.map +1 -0
  762. package/dist/i18n/de/integrations.js +42 -0
  763. package/dist/i18n/de/integrations.js.map +1 -0
  764. package/dist/i18n/de/markdown.js +16 -0
  765. package/dist/i18n/de/markdown.js.map +1 -0
  766. package/dist/i18n/de/media.js +27 -0
  767. package/dist/i18n/de/media.js.map +1 -0
  768. package/dist/i18n/de/mentions.js +10 -0
  769. package/dist/i18n/de/mentions.js.map +1 -0
  770. package/dist/i18n/de/outline.js +9 -0
  771. package/dist/i18n/de/outline.js.map +1 -0
  772. package/dist/i18n/de/settings.js +12 -0
  773. package/dist/i18n/de/settings.js.map +1 -0
  774. package/dist/i18n/de/tables.js +15 -0
  775. package/dist/i18n/de/tables.js.map +1 -0
  776. package/dist/i18n/de/themes.js +26 -0
  777. package/dist/i18n/de/themes.js.map +1 -0
  778. package/dist/i18n/de/toolbar.js +22 -0
  779. package/dist/i18n/de/toolbar.js.map +1 -0
  780. package/dist/i18n/de/transcript.js +10 -0
  781. package/dist/i18n/de/transcript.js.map +1 -0
  782. package/dist/i18n/de/tree.js +31 -0
  783. package/dist/i18n/de/tree.js.map +1 -0
  784. package/dist/i18n/de.d.ts +503 -0
  785. package/dist/i18n/de.js +42 -0
  786. package/dist/i18n/de.js.map +1 -0
  787. package/dist/i18n/en/ai.js +168 -0
  788. package/dist/i18n/en/ai.js.map +1 -0
  789. package/dist/i18n/en/authors.js +21 -0
  790. package/dist/i18n/en/authors.js.map +1 -0
  791. package/dist/i18n/en/block.js +16 -0
  792. package/dist/i18n/en/block.js.map +1 -0
  793. package/dist/i18n/en/comments.js +35 -0
  794. package/dist/i18n/en/comments.js.map +1 -0
  795. package/dist/i18n/en/common.js +11 -0
  796. package/dist/i18n/en/common.js.map +1 -0
  797. package/dist/i18n/en/composites.js +145 -0
  798. package/dist/i18n/en/composites.js.map +1 -0
  799. package/dist/i18n/en/integrations.js +42 -0
  800. package/dist/i18n/en/integrations.js.map +1 -0
  801. package/dist/i18n/en/markdown.js +16 -0
  802. package/dist/i18n/en/markdown.js.map +1 -0
  803. package/dist/i18n/en/media.js +27 -0
  804. package/dist/i18n/en/media.js.map +1 -0
  805. package/dist/i18n/en/mentions.js +10 -0
  806. package/dist/i18n/en/mentions.js.map +1 -0
  807. package/dist/i18n/en/outline.js +9 -0
  808. package/dist/i18n/en/outline.js.map +1 -0
  809. package/dist/i18n/en/settings.js +12 -0
  810. package/dist/i18n/en/settings.js.map +1 -0
  811. package/dist/i18n/en/tables.js +15 -0
  812. package/dist/i18n/en/tables.js.map +1 -0
  813. package/dist/i18n/en/themes.js +26 -0
  814. package/dist/i18n/en/themes.js.map +1 -0
  815. package/dist/i18n/en/toolbar.js +22 -0
  816. package/dist/i18n/en/toolbar.js.map +1 -0
  817. package/dist/i18n/en/transcript.js +10 -0
  818. package/dist/i18n/en/transcript.js.map +1 -0
  819. package/dist/i18n/en/tree.js +31 -0
  820. package/dist/i18n/en/tree.js.map +1 -0
  821. package/dist/i18n/en.js +42 -0
  822. package/dist/i18n/en.js.map +1 -0
  823. package/dist/i18n/index.d.ts +24 -0
  824. package/dist/i18n/index.js +31 -0
  825. package/dist/i18n/index.js.map +1 -0
  826. package/dist/index.d.ts +6 -0
  827. package/dist/index.js +0 -0
  828. package/dist/integrations/composite-ai/composite-fill.d.ts +17 -0
  829. package/dist/integrations/composite-ai/composite-fill.js +129 -0
  830. package/dist/integrations/composite-ai/composite-fill.js.map +1 -0
  831. package/dist/integrations/composite-ai/composite-summary.d.ts +28 -0
  832. package/dist/integrations/composite-ai/composite-summary.js +143 -0
  833. package/dist/integrations/composite-ai/composite-summary.js.map +1 -0
  834. package/dist/integrations/composite-ai/document-transcribe.d.ts +14 -0
  835. package/dist/integrations/composite-ai/document-transcribe.js +89 -0
  836. package/dist/integrations/composite-ai/document-transcribe.js.map +1 -0
  837. package/dist/integrations/composite-ai/index.d.ts +22 -0
  838. package/dist/integrations/composite-ai/index.js +80 -0
  839. package/dist/integrations/composite-ai/index.js.map +1 -0
  840. package/dist/integrations/composite-media/index.d.ts +19 -0
  841. package/dist/integrations/composite-media/index.js +72 -0
  842. package/dist/integrations/composite-media/index.js.map +1 -0
  843. package/dist/integrations/transcript-ai/index.d.ts +16 -0
  844. package/dist/integrations/transcript-ai/index.js +63 -0
  845. package/dist/integrations/transcript-ai/index.js.map +1 -0
  846. package/dist/integrations/transcript-ai/protocol.d.ts +68 -0
  847. package/dist/integrations/transcript-ai/protocol.js +132 -0
  848. package/dist/integrations/transcript-ai/protocol.js.map +1 -0
  849. package/dist/integrations/transcript-ai/transcript-cleanup.d.ts +35 -0
  850. package/dist/integrations/transcript-ai/transcript-cleanup.js +169 -0
  851. package/dist/integrations/transcript-ai/transcript-cleanup.js.map +1 -0
  852. package/dist/markdown/MarkdownSurface.d.ts +25 -0
  853. package/dist/markdown/MarkdownSurface.js +93 -0
  854. package/dist/markdown/MarkdownSurface.js.map +1 -0
  855. package/dist/markdown/MarkdownSurface.vue.d.ts +76 -0
  856. package/dist/markdown/MarkdownSurface2.js +237 -0
  857. package/dist/markdown/MarkdownSurface2.js.map +1 -0
  858. package/dist/markdown/clipboard.d.ts +17 -0
  859. package/dist/markdown/clipboard.js +125 -0
  860. package/dist/markdown/clipboard.js.map +1 -0
  861. package/dist/markdown/document.d.ts +36 -0
  862. package/dist/markdown/document.js +100 -0
  863. package/dist/markdown/document.js.map +1 -0
  864. package/dist/markdown/frontmatter.d.ts +18 -0
  865. package/dist/markdown/frontmatter.js +32 -0
  866. package/dist/markdown/frontmatter.js.map +1 -0
  867. package/dist/markdown/index.d.ts +6 -0
  868. package/dist/markdown/index.js +6 -0
  869. package/dist/markdown/policy.d.ts +34 -0
  870. package/dist/markdown/policy.js +78 -0
  871. package/dist/markdown/policy.js.map +1 -0
  872. package/dist/markdown/react.d.ts +2 -0
  873. package/dist/markdown/react.js +1 -0
  874. package/dist/markdown/source-mode.d.ts +49 -0
  875. package/dist/markdown/source-mode.js +86 -0
  876. package/dist/markdown/source-mode.js.map +1 -0
  877. package/dist/markdown/vue.d.ts +2 -0
  878. package/dist/markdown/vue.js +1 -0
  879. package/dist/nuxt/module.d.ts +68 -0
  880. package/dist/nuxt/module.js +103 -0
  881. package/dist/nuxt/module.js.map +1 -0
  882. package/dist/nuxt/runtime/install-context.d.ts +17 -0
  883. package/dist/nuxt/runtime/install-context.js +26 -0
  884. package/dist/nuxt/runtime/install-context.js.map +1 -0
  885. package/dist/nuxt/runtime/plugins/editor-context-nuxt-ui.client.ts +8 -0
  886. package/dist/nuxt/runtime/plugins/editor-context-primevue.client.ts +8 -0
  887. package/dist/nuxt/runtime/server/api/ai/chat.post.d.ts +5 -0
  888. package/dist/nuxt/runtime/server/api/ai/chat.post.js +8 -0
  889. package/dist/nuxt/runtime/server/api/ai/chat.post.js.map +1 -0
  890. package/dist/nuxt/runtime/server/api/ai/complete.post.d.ts +5 -0
  891. package/dist/nuxt/runtime/server/api/ai/complete.post.js +8 -0
  892. package/dist/nuxt/runtime/server/api/ai/complete.post.js.map +1 -0
  893. package/dist/nuxt/runtime/server/api/ai/generate.post.d.ts +5 -0
  894. package/dist/nuxt/runtime/server/api/ai/generate.post.js +8 -0
  895. package/dist/nuxt/runtime/server/api/ai/generate.post.js.map +1 -0
  896. package/dist/nuxt/runtime/server/api/ai/models.get.d.ts +5 -0
  897. package/dist/nuxt/runtime/server/api/ai/models.get.js +8 -0
  898. package/dist/nuxt/runtime/server/api/ai/models.get.js.map +1 -0
  899. package/dist/nuxt/runtime/server/api/ai/transcribe.post.d.ts +5 -0
  900. package/dist/nuxt/runtime/server/api/ai/transcribe.post.js +8 -0
  901. package/dist/nuxt/runtime/server/api/ai/transcribe.post.js.map +1 -0
  902. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.d.ts +5 -0
  903. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js +8 -0
  904. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js.map +1 -0
  905. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.d.ts +5 -0
  906. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js +8 -0
  907. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js.map +1 -0
  908. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.d.ts +5 -0
  909. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js +8 -0
  910. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js.map +1 -0
  911. package/dist/nuxt/runtime/server/api/editor/settings.get.d.ts +5 -0
  912. package/dist/nuxt/runtime/server/api/editor/settings.get.js +8 -0
  913. package/dist/nuxt/runtime/server/api/editor/settings.get.js.map +1 -0
  914. package/dist/nuxt/runtime/server/api/editor/settings.put.d.ts +5 -0
  915. package/dist/nuxt/runtime/server/api/editor/settings.put.js +8 -0
  916. package/dist/nuxt/runtime/server/api/editor/settings.put.js.map +1 -0
  917. package/dist/nuxt/runtime/server/api/editor/tags.get.d.ts +5 -0
  918. package/dist/nuxt/runtime/server/api/editor/tags.get.js +8 -0
  919. package/dist/nuxt/runtime/server/api/editor/tags.get.js.map +1 -0
  920. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.d.ts +5 -0
  921. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js +8 -0
  922. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js.map +1 -0
  923. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.d.ts +5 -0
  924. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js +8 -0
  925. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js.map +1 -0
  926. package/dist/nuxt/runtime/server/api/editor/themes/index.get.d.ts +5 -0
  927. package/dist/nuxt/runtime/server/api/editor/themes/index.get.js +8 -0
  928. package/dist/nuxt/runtime/server/api/editor/themes/index.get.js.map +1 -0
  929. package/dist/nuxt/runtime/server/api/editor/themes/index.post.d.ts +5 -0
  930. package/dist/nuxt/runtime/server/api/editor/themes/index.post.js +8 -0
  931. package/dist/nuxt/runtime/server/api/editor/themes/index.post.js.map +1 -0
  932. package/dist/nuxt/runtime/server/api/editor/users.get.d.ts +5 -0
  933. package/dist/nuxt/runtime/server/api/editor/users.get.js +8 -0
  934. package/dist/nuxt/runtime/server/api/editor/users.get.js.map +1 -0
  935. package/dist/nuxt/runtime/server/plugins/collab.d.ts +5 -0
  936. package/dist/nuxt/runtime/server/plugins/collab.js +10 -0
  937. package/dist/nuxt/runtime/server/plugins/collab.js.map +1 -0
  938. package/dist/nuxt/runtime/server/plugins/editor-server.d.ts +5 -0
  939. package/dist/nuxt/runtime/server/plugins/editor-server.js +20 -0
  940. package/dist/nuxt/runtime/server/plugins/editor-server.js.map +1 -0
  941. package/dist/nuxt/runtime/server/routes/collab/[id].d.ts +5 -0
  942. package/dist/nuxt/runtime/server/routes/collab/[id].js +35 -0
  943. package/dist/nuxt/runtime/server/routes/collab/[id].js.map +1 -0
  944. package/dist/nuxt/runtime/server/utils/editor-route.d.ts +11 -0
  945. package/dist/nuxt/runtime/server/utils/editor-route.js +49 -0
  946. package/dist/nuxt/runtime/server/utils/editor-route.js.map +1 -0
  947. package/dist/outline/EditorOutline.js +124 -0
  948. package/dist/outline/EditorOutline.js.map +1 -0
  949. package/dist/outline/EditorOutline.vue.d.ts +15 -0
  950. package/dist/outline/heading-outline.d.ts +26 -0
  951. package/dist/outline/heading-outline.js +46 -0
  952. package/dist/outline/heading-outline.js.map +1 -0
  953. package/dist/outline/index.d.ts +2 -0
  954. package/dist/outline/index.js +1 -0
  955. package/dist/outline/react/EditorOutline.d.ts +12 -0
  956. package/dist/outline/react/EditorOutline.js +112 -0
  957. package/dist/outline/react/EditorOutline.js.map +1 -0
  958. package/dist/outline/react.d.ts +2 -0
  959. package/dist/outline/react.js +1 -0
  960. package/dist/outline/vue.d.ts +2 -0
  961. package/dist/outline/vue.js +1 -0
  962. package/dist/presets/advanced.d.ts +33 -0
  963. package/dist/presets/advanced.js +50 -0
  964. package/dist/presets/advanced.js.map +1 -0
  965. package/dist/presets/simple.d.ts +9 -0
  966. package/dist/presets/simple.js +12 -0
  967. package/dist/presets/simple.js.map +1 -0
  968. package/dist/react/AdvancedEditor.d.ts +23 -0
  969. package/dist/react/AdvancedEditor.js +24 -0
  970. package/dist/react/AdvancedEditor.js.map +1 -0
  971. package/dist/react/EditorSettingsModal.d.ts +14 -0
  972. package/dist/react/EditorSettingsModal.js +40 -0
  973. package/dist/react/EditorSettingsModal.js.map +1 -0
  974. package/dist/react/EditorSettingsPanel.d.ts +18 -0
  975. package/dist/react/EditorSettingsPanel.js +40 -0
  976. package/dist/react/EditorSettingsPanel.js.map +1 -0
  977. package/dist/react/EditorSurface.d.ts +61 -0
  978. package/dist/react/EditorSurface.js +277 -0
  979. package/dist/react/EditorSurface.js.map +1 -0
  980. package/dist/react/EditorToolbar.d.ts +15 -0
  981. package/dist/react/EditorToolbar.js +182 -0
  982. package/dist/react/EditorToolbar.js.map +1 -0
  983. package/dist/react/Icon.d.ts +13 -0
  984. package/dist/react/Icon.js +19 -0
  985. package/dist/react/Icon.js.map +1 -0
  986. package/dist/react/SettingsSection.d.ts +10 -0
  987. package/dist/react/SettingsSection.js +22 -0
  988. package/dist/react/SettingsSection.js.map +1 -0
  989. package/dist/react/SimpleEditor.d.ts +27 -0
  990. package/dist/react/SimpleEditor.js +22 -0
  991. package/dist/react/SimpleEditor.js.map +1 -0
  992. package/dist/react/advanced-preset.d.ts +11 -0
  993. package/dist/react/advanced-preset.js +31 -0
  994. package/dist/react/advanced-preset.js.map +1 -0
  995. package/dist/react/advanced.d.ts +4 -0
  996. package/dist/react/advanced.js +3 -0
  997. package/dist/react/context.d.ts +12 -0
  998. package/dist/react/context.js +21 -0
  999. package/dist/react/context.js.map +1 -0
  1000. package/dist/react/editor-ui.d.ts +14 -0
  1001. package/dist/react/editor-ui.js +20 -0
  1002. package/dist/react/editor-ui.js.map +1 -0
  1003. package/dist/react/index.d.ts +17 -0
  1004. package/dist/react/index.js +17 -0
  1005. package/dist/react/notify.d.ts +6 -0
  1006. package/dist/react/notify.js +25 -0
  1007. package/dist/react/notify.js.map +1 -0
  1008. package/dist/react/settings.d.ts +17 -0
  1009. package/dist/react/settings.js +27 -0
  1010. package/dist/react/settings.js.map +1 -0
  1011. package/dist/react/simple.d.ts +2 -0
  1012. package/dist/react/simple.js +1 -0
  1013. package/dist/react/styles/advanced.css +18 -0
  1014. package/dist/react/styles/themes-bridge.css +26 -0
  1015. package/dist/react/styles/ui-vars.css +20 -0
  1016. package/dist/react/suggestion-renderer.d.ts +12 -0
  1017. package/dist/react/suggestion-renderer.js +90 -0
  1018. package/dist/react/suggestion-renderer.js.map +1 -0
  1019. package/dist/react/ui/alert.js +38 -0
  1020. package/dist/react/ui/alert.js.map +1 -0
  1021. package/dist/react/ui/avatar.js +24 -0
  1022. package/dist/react/ui/avatar.js.map +1 -0
  1023. package/dist/react/ui/badge.js +30 -0
  1024. package/dist/react/ui/badge.js.map +1 -0
  1025. package/dist/react/ui/button.js +50 -0
  1026. package/dist/react/ui/button.js.map +1 -0
  1027. package/dist/react/ui/collapsible.js +19 -0
  1028. package/dist/react/ui/collapsible.js.map +1 -0
  1029. package/dist/react/ui/command.js +47 -0
  1030. package/dist/react/ui/command.js.map +1 -0
  1031. package/dist/react/ui/dialog.js +88 -0
  1032. package/dist/react/ui/dialog.js.map +1 -0
  1033. package/dist/react/ui/dropdown-menu.js +70 -0
  1034. package/dist/react/ui/dropdown-menu.js.map +1 -0
  1035. package/dist/react/ui/input-group.js +57 -0
  1036. package/dist/react/ui/input-group.js.map +1 -0
  1037. package/dist/react/ui/input.js +16 -0
  1038. package/dist/react/ui/input.js.map +1 -0
  1039. package/dist/react/ui/label.js +17 -0
  1040. package/dist/react/ui/label.js.map +1 -0
  1041. package/dist/react/ui/popover.js +36 -0
  1042. package/dist/react/ui/popover.js.map +1 -0
  1043. package/dist/react/ui/radio-group.js +29 -0
  1044. package/dist/react/ui/radio-group.js.map +1 -0
  1045. package/dist/react/ui/select.js +88 -0
  1046. package/dist/react/ui/select.js.map +1 -0
  1047. package/dist/react/ui/separator.js +18 -0
  1048. package/dist/react/ui/separator.js.map +1 -0
  1049. package/dist/react/ui/switch.js +21 -0
  1050. package/dist/react/ui/switch.js.map +1 -0
  1051. package/dist/react/ui/table.js +44 -0
  1052. package/dist/react/ui/table.js.map +1 -0
  1053. package/dist/react/ui/tabs.js +41 -0
  1054. package/dist/react/ui/tabs.js.map +1 -0
  1055. package/dist/react/ui/textarea.js +15 -0
  1056. package/dist/react/ui/textarea.js.map +1 -0
  1057. package/dist/react/ui/tooltip.js +37 -0
  1058. package/dist/react/ui/tooltip.js.map +1 -0
  1059. package/dist/react/ui/utils.d.ts +5 -0
  1060. package/dist/react/ui/utils.js +10 -0
  1061. package/dist/react/ui/utils.js.map +1 -0
  1062. package/dist/react/use-editor-i18n.d.ts +12 -0
  1063. package/dist/react/use-editor-i18n.js +17 -0
  1064. package/dist/react/use-editor-i18n.js.map +1 -0
  1065. package/dist/react/use-notifier.d.ts +11 -0
  1066. package/dist/react/use-notifier.js +25 -0
  1067. package/dist/react/use-notifier.js.map +1 -0
  1068. package/dist/react/use-store.d.ts +6 -0
  1069. package/dist/react/use-store.js +10 -0
  1070. package/dist/react/use-store.js.map +1 -0
  1071. package/dist/schema/advanced.d.ts +14 -0
  1072. package/dist/schema/advanced.js +43 -0
  1073. package/dist/schema/advanced.js.map +1 -0
  1074. package/dist/schema/simple.d.ts +10 -0
  1075. package/dist/schema/simple.js +13 -0
  1076. package/dist/schema/simple.js.map +1 -0
  1077. package/dist/server/adapter.d.ts +101 -0
  1078. package/dist/server/ai.d.ts +101 -0
  1079. package/dist/server/ai.js +105 -0
  1080. package/dist/server/ai.js.map +1 -0
  1081. package/dist/server/collab-state.d.ts +16 -0
  1082. package/dist/server/collab-state.js +43 -0
  1083. package/dist/server/collab-state.js.map +1 -0
  1084. package/dist/server/collab.d.ts +68 -0
  1085. package/dist/server/collab.js +187 -0
  1086. package/dist/server/collab.js.map +1 -0
  1087. package/dist/server/errors.d.ts +17 -0
  1088. package/dist/server/errors.js +26 -0
  1089. package/dist/server/errors.js.map +1 -0
  1090. package/dist/server/handlers/ai.d.ts +223 -0
  1091. package/dist/server/handlers/ai.js +422 -0
  1092. package/dist/server/handlers/ai.js.map +1 -0
  1093. package/dist/server/handlers/context.d.ts +64 -0
  1094. package/dist/server/handlers/context.js +85 -0
  1095. package/dist/server/handlers/context.js.map +1 -0
  1096. package/dist/server/handlers/editor.d.ts +107 -0
  1097. package/dist/server/handlers/editor.js +241 -0
  1098. package/dist/server/handlers/editor.js.map +1 -0
  1099. package/dist/server/handlers/index.d.ts +4 -0
  1100. package/dist/server/handlers/index.js +4 -0
  1101. package/dist/server/host.d.ts +61 -0
  1102. package/dist/server/host.js +105 -0
  1103. package/dist/server/host.js.map +1 -0
  1104. package/dist/server/index.d.ts +8 -0
  1105. package/dist/server/index.js +7 -0
  1106. package/dist/server/node.d.ts +24 -0
  1107. package/dist/server/node.js +54 -0
  1108. package/dist/server/node.js.map +1 -0
  1109. package/dist/server/rate-limit.d.ts +22 -0
  1110. package/dist/server/rate-limit.js +34 -0
  1111. package/dist/server/rate-limit.js.map +1 -0
  1112. package/dist/settings/index.d.ts +110 -0
  1113. package/dist/settings/index.js +114 -0
  1114. package/dist/settings/index.js.map +1 -0
  1115. package/dist/settings/values.d.ts +35 -0
  1116. package/dist/settings/values.js +41 -0
  1117. package/dist/settings/values.js.map +1 -0
  1118. package/dist/styles/ai.css +77 -0
  1119. package/dist/styles/authors.css +18 -0
  1120. package/dist/styles/block-ui.css +16 -0
  1121. package/dist/styles/collab.css +26 -0
  1122. package/dist/styles/comments.css +11 -0
  1123. package/dist/styles/composites.css +56 -0
  1124. package/dist/styles/core.css +99 -0
  1125. package/dist/styles/media.css +8 -0
  1126. package/dist/styles/mentions.css +24 -0
  1127. package/dist/styles/tables.css +25 -0
  1128. package/dist/styles/themes.css +622 -0
  1129. package/dist/styles/tokens.css +29 -0
  1130. package/dist/styles/transcript.css +13 -0
  1131. package/dist/tree/DocumentTree.js +595 -0
  1132. package/dist/tree/DocumentTree.js.map +1 -0
  1133. package/dist/tree/DocumentTree.vue.d.ts +36 -0
  1134. package/dist/tree/folder-paths.js +11 -0
  1135. package/dist/tree/folder-paths.js.map +1 -0
  1136. package/dist/tree/index.d.ts +4 -0
  1137. package/dist/tree/index.js +1 -0
  1138. package/dist/tree/react/DocumentTree.d.ts +24 -0
  1139. package/dist/tree/react/DocumentTree.js +579 -0
  1140. package/dist/tree/react/DocumentTree.js.map +1 -0
  1141. package/dist/tree/react/use-tree-view.d.ts +14 -0
  1142. package/dist/tree/react/use-tree-view.js +21 -0
  1143. package/dist/tree/react/use-tree-view.js.map +1 -0
  1144. package/dist/tree/react.d.ts +3 -0
  1145. package/dist/tree/react.js +3 -0
  1146. package/dist/tree/store.d.ts +45 -0
  1147. package/dist/tree/tree-items.js +221 -0
  1148. package/dist/tree/tree-items.js.map +1 -0
  1149. package/dist/tree/tree-view-model.d.ts +29 -0
  1150. package/dist/tree/tree-view-model.js +71 -0
  1151. package/dist/tree/tree-view-model.js.map +1 -0
  1152. package/dist/tree/tree-view.d.ts +15 -0
  1153. package/dist/tree/tree-view.js +21 -0
  1154. package/dist/tree/tree-view.js.map +1 -0
  1155. package/dist/tree/types.d.ts +23 -0
  1156. package/dist/tree/types.js +0 -0
  1157. package/dist/tree/vue.d.ts +3 -0
  1158. package/dist/tree/vue.js +3 -0
  1159. package/dist/vue/AdvancedEditor.js +100 -0
  1160. package/dist/vue/AdvancedEditor.js.map +1 -0
  1161. package/dist/vue/AdvancedEditor.vue.d.ts +71 -0
  1162. package/dist/vue/SimpleEditor.js +61 -0
  1163. package/dist/vue/SimpleEditor.js.map +1 -0
  1164. package/dist/vue/SimpleEditor.vue.d.ts +36 -0
  1165. package/dist/vue/advanced-preset.d.ts +13 -0
  1166. package/dist/vue/advanced-preset.js +33 -0
  1167. package/dist/vue/advanced-preset.js.map +1 -0
  1168. package/dist/vue/advanced.d.ts +3 -0
  1169. package/dist/vue/advanced.js +3 -0
  1170. package/dist/vue/components/EditorSettingsModal.js +69 -0
  1171. package/dist/vue/components/EditorSettingsModal.js.map +1 -0
  1172. package/dist/vue/components/EditorSettingsModal.vue.d.ts +24 -0
  1173. package/dist/vue/components/EditorSettingsPanel.js +58 -0
  1174. package/dist/vue/components/EditorSettingsPanel.js.map +1 -0
  1175. package/dist/vue/components/EditorSettingsPanel.vue.d.ts +29 -0
  1176. package/dist/vue/components/EditorSurface.js +229 -0
  1177. package/dist/vue/components/EditorSurface.js.map +1 -0
  1178. package/dist/vue/components/EditorSurface.vue.d.ts +68 -0
  1179. package/dist/vue/components/EditorToolbar.js +189 -0
  1180. package/dist/vue/components/EditorToolbar.js.map +1 -0
  1181. package/dist/vue/components/EditorToolbar.vue.d.ts +17 -0
  1182. package/dist/vue/components/SettingsSection.js +26 -0
  1183. package/dist/vue/components/SettingsSection.js.map +1 -0
  1184. package/dist/vue/components/SettingsSection.vue.d.ts +21 -0
  1185. package/dist/vue/components/SuggestionList.js +91 -0
  1186. package/dist/vue/components/SuggestionList.js.map +1 -0
  1187. package/dist/vue/components/SuggestionList.vue.d.ts +19 -0
  1188. package/dist/vue/context.d.ts +24 -0
  1189. package/dist/vue/context.js +41 -0
  1190. package/dist/vue/context.js.map +1 -0
  1191. package/dist/vue/index.d.ts +26 -0
  1192. package/dist/vue/index.js +16 -0
  1193. package/dist/vue/kit/index.d.ts +3 -0
  1194. package/dist/vue/kit/index.js +1 -0
  1195. package/dist/vue/kit/nuxt-ui.css +24 -0
  1196. package/dist/vue/kit/nuxt-ui.d.ts +31 -0
  1197. package/dist/vue/kit/nuxt-ui.js +101 -0
  1198. package/dist/vue/kit/nuxt-ui.js.map +1 -0
  1199. package/dist/vue/kit/primevue/Alert.js +49 -0
  1200. package/dist/vue/kit/primevue/Alert.js.map +1 -0
  1201. package/dist/vue/kit/primevue/Avatar.js +54 -0
  1202. package/dist/vue/kit/primevue/Avatar.js.map +1 -0
  1203. package/dist/vue/kit/primevue/Badge.js +41 -0
  1204. package/dist/vue/kit/primevue/Badge.js.map +1 -0
  1205. package/dist/vue/kit/primevue/Button.js +112 -0
  1206. package/dist/vue/kit/primevue/Button.js.map +1 -0
  1207. package/dist/vue/kit/primevue/Chip.js +38 -0
  1208. package/dist/vue/kit/primevue/Chip.js.map +1 -0
  1209. package/dist/vue/kit/primevue/DropdownMenu.js +98 -0
  1210. package/dist/vue/kit/primevue/DropdownMenu.js.map +1 -0
  1211. package/dist/vue/kit/primevue/FieldGroup.js +22 -0
  1212. package/dist/vue/kit/primevue/FieldGroup.js.map +1 -0
  1213. package/dist/vue/kit/primevue/FormField.js +56 -0
  1214. package/dist/vue/kit/primevue/FormField.js.map +1 -0
  1215. package/dist/vue/kit/primevue/Icon.js +23 -0
  1216. package/dist/vue/kit/primevue/Icon.js.map +1 -0
  1217. package/dist/vue/kit/primevue/Input.js +96 -0
  1218. package/dist/vue/kit/primevue/Input.js.map +1 -0
  1219. package/dist/vue/kit/primevue/InputMenu.js +122 -0
  1220. package/dist/vue/kit/primevue/InputMenu.js.map +1 -0
  1221. package/dist/vue/kit/primevue/Modal.js +59 -0
  1222. package/dist/vue/kit/primevue/Modal.js.map +1 -0
  1223. package/dist/vue/kit/primevue/Popover.js +135 -0
  1224. package/dist/vue/kit/primevue/Popover.js.map +1 -0
  1225. package/dist/vue/kit/primevue/RadioGroup.js +58 -0
  1226. package/dist/vue/kit/primevue/RadioGroup.js.map +1 -0
  1227. package/dist/vue/kit/primevue/Select.js +68 -0
  1228. package/dist/vue/kit/primevue/Select.js.map +1 -0
  1229. package/dist/vue/kit/primevue/SelectMenu.js +94 -0
  1230. package/dist/vue/kit/primevue/SelectMenu.js.map +1 -0
  1231. package/dist/vue/kit/primevue/Separator.js +16 -0
  1232. package/dist/vue/kit/primevue/Separator.js.map +1 -0
  1233. package/dist/vue/kit/primevue/Switch.js +46 -0
  1234. package/dist/vue/kit/primevue/Switch.js.map +1 -0
  1235. package/dist/vue/kit/primevue/Table.js +54 -0
  1236. package/dist/vue/kit/primevue/Table.js.map +1 -0
  1237. package/dist/vue/kit/primevue/Tabs.js +49 -0
  1238. package/dist/vue/kit/primevue/Tabs.js.map +1 -0
  1239. package/dist/vue/kit/primevue/Textarea.js +55 -0
  1240. package/dist/vue/kit/primevue/Textarea.js.map +1 -0
  1241. package/dist/vue/kit/primevue/Tooltip.js +43 -0
  1242. package/dist/vue/kit/primevue/Tooltip.js.map +1 -0
  1243. package/dist/vue/kit/primevue/Tree.js +75 -0
  1244. package/dist/vue/kit/primevue/Tree.js.map +1 -0
  1245. package/dist/vue/kit/primevue/select-options.js +55 -0
  1246. package/dist/vue/kit/primevue/select-options.js.map +1 -0
  1247. package/dist/vue/kit/primevue/shared.js +49 -0
  1248. package/dist/vue/kit/primevue/shared.js.map +1 -0
  1249. package/dist/vue/kit/primevue/trigger.js +25 -0
  1250. package/dist/vue/kit/primevue/trigger.js.map +1 -0
  1251. package/dist/vue/kit/primevue.css +86 -0
  1252. package/dist/vue/kit/primevue.d.ts +33 -0
  1253. package/dist/vue/kit/primevue.js +96 -0
  1254. package/dist/vue/kit/primevue.js.map +1 -0
  1255. package/dist/vue/kit/types.d.ts +370 -0
  1256. package/dist/vue/kit/use-ui-kit.d.ts +12 -0
  1257. package/dist/vue/kit/use-ui-kit.js +17 -0
  1258. package/dist/vue/kit/use-ui-kit.js.map +1 -0
  1259. package/dist/vue/notify.d.ts +12 -0
  1260. package/dist/vue/notify.js +27 -0
  1261. package/dist/vue/notify.js.map +1 -0
  1262. package/dist/vue/settings.d.ts +16 -0
  1263. package/dist/vue/settings.js +64 -0
  1264. package/dist/vue/settings.js.map +1 -0
  1265. package/dist/vue/simple.d.ts +2 -0
  1266. package/dist/vue/simple.js +1 -0
  1267. package/dist/vue/store-ref.d.ts +20 -0
  1268. package/dist/vue/store-ref.js +59 -0
  1269. package/dist/vue/store-ref.js.map +1 -0
  1270. package/dist/vue/suggestion-renderer.d.ts +6 -0
  1271. package/dist/vue/suggestion-renderer.js +20 -0
  1272. package/dist/vue/suggestion-renderer.js.map +1 -0
  1273. package/dist/vue/use-editor-i18n.d.ts +12 -0
  1274. package/dist/vue/use-editor-i18n.js +17 -0
  1275. package/dist/vue/use-editor-i18n.js.map +1 -0
  1276. package/dist/vue/use-editor-ui.d.ts +15 -0
  1277. package/dist/vue/use-editor-ui.js +23 -0
  1278. package/dist/vue/use-editor-ui.js.map +1 -0
  1279. package/dist/vue/use-notifier.d.ts +11 -0
  1280. package/dist/vue/use-notifier.js +19 -0
  1281. package/dist/vue/use-notifier.js.map +1 -0
  1282. package/docs/extending.md +538 -0
  1283. package/docs/integration.md +537 -0
  1284. package/docs/llms.md +375 -0
  1285. package/docs/usage.md +1071 -0
  1286. package/package.json +634 -4
@@ -0,0 +1,298 @@
1
+ //#region src/features/ai/protocol/agent-ops.ts
2
+ /** Name of the tool the chat model calls to propose edits. */
3
+ const AGENT_TOOL = "edit_document";
4
+ /** Per-turn limits: operations, Markdown per operation, IDs in a selection scope; retries after invalid IDs. */
5
+ const AGENT_LIMITS = {
6
+ ops: 50,
7
+ markdown: 8e3,
8
+ scope: 5e3,
9
+ retries: 2
10
+ };
11
+ const AGENT_OP_TYPES = [
12
+ "add",
13
+ "update",
14
+ "delete",
15
+ "convert"
16
+ ];
17
+ /**
18
+ * What became of an operation: decided in the review (`accepted`, `rejected`, `partial` for mixed hunks, `invalid`
19
+ * when its text changed underneath), still `pending`, or never reviewed: the review found nothing to show
20
+ * (`unchanged`, `missing` block, `overlap` with open AI changes, `empty` result), or the client refused it as out of
21
+ * scope (`blocked`).
22
+ */
23
+ const AGENT_OP_OUTCOMES = [
24
+ "accepted",
25
+ "rejected",
26
+ "partial",
27
+ "invalid",
28
+ "pending",
29
+ "unchanged",
30
+ "missing",
31
+ "overlap",
32
+ "empty",
33
+ "blocked"
34
+ ];
35
+ /** Block IDs of the chat document text (`[<id>] …` per line, see documentChatText). */
36
+ function documentBlockIds(document) {
37
+ const ids = /* @__PURE__ */ new Set();
38
+ for (const match of document.matchAll(/^\[([^\]\s]+)\] /gm)) ids.add(match[1]);
39
+ return ids;
40
+ }
41
+ /** The block an operation targets: `update`/`delete` its `id`, `add` its `afterId` (null: document start). */
42
+ function agentOpTarget(op) {
43
+ return op.type === "add" ? op.afterId : op.id;
44
+ }
45
+ const AGENT_TEXTS = {
46
+ de: {
47
+ outcome: {
48
+ accepted: "übernommen",
49
+ rejected: "abgelehnt",
50
+ partial: "teilweise übernommen",
51
+ invalid: "verfallen, weil der Text inzwischen anders geändert wurde",
52
+ pending: "noch nicht entschieden",
53
+ unchanged: "nicht angezeigt, weil er dem vorhandenen Text entspricht",
54
+ missing: "nicht angezeigt, weil der Block nicht mehr existiert",
55
+ overlap: "nicht angezeigt, weil an der Stelle noch andere KI-Änderungen offen sind",
56
+ empty: "nicht angezeigt, weil der Inhalt leer ist",
57
+ blocked: "blockiert, weil er außerhalb des erlaubten Bereichs liegt"
58
+ },
59
+ summary: {
60
+ convert: (target, to) => `convert Block ${target} → ${to}`,
61
+ block: (type, target) => `${type} Block ${target}`,
62
+ addStart: "add am Dokumentanfang",
63
+ addAfter: (target) => `add nach Block ${target}`
64
+ },
65
+ problem: {
66
+ limit: (max) => `mehr als ${max} Operationen`,
67
+ type: (allowed) => `unbekannter oder fehlender Typ (erlaubt: ${allowed})`,
68
+ addAtStart: "Einfügen am Dokumentanfang liegt außerhalb der Auswahl; afterId muss ein ausgewählter Block sein",
69
+ idMissing: (field) => `${field} fehlt`,
70
+ unknownId: (id) => `die ID „${id}“ gibt es im Dokument nicht`,
71
+ outsideScope: (id) => `die ID „${id}“ liegt außerhalb der Auswahl`,
72
+ duplicate: (id) => `der Block „${id}“ wird mehrfach geändert oder gelöscht`,
73
+ toMissing: "to fehlt",
74
+ badTarget: (to, allowed) => `„${to}“ ist kein erlaubter Blocktyp für to (erlaubt: ${allowed})`,
75
+ markdownMissing: "markdown fehlt",
76
+ markdownMissingUpdate: "markdown fehlt (zum Entfernen „delete“ verwenden)",
77
+ markdownTooLong: (max) => `markdown ist länger als ${max} Zeichen`,
78
+ unreadable: "die Eingabe war kein Objekt mit der Liste „ops“"
79
+ },
80
+ retry: {
81
+ failed: "Fehler: Die Operationen wurden nicht angewendet, weil einige ungültig sind.",
82
+ failedPartial: "Fehler: Einige Operationen sind ungültig und wurden verworfen; die übrigen werden zur Prüfung angezeigt.",
83
+ invalidIds: (ids) => `Ungültige IDs: ${ids}`,
84
+ operation: (index, type, detail) => `- Operation ${index}${type ? ` (${type})` : ""}: ${detail}`,
85
+ scoped: "Verwende nur IDs aus dem Bearbeitungsbereich (siehe Nachricht); erfinde keine IDs.",
86
+ unscoped: "Verwende nur IDs, die im Dokument in eckigen Klammern stehen; erfinde keine IDs.",
87
+ again: (tool) => `Rufe ${tool} erneut mit der vollständigen, korrigierten Liste aller Operationen auf. Lass Operationen weg, die sich nicht korrigieren lassen.`,
88
+ againPartial: (tool) => `Rufe ${tool} erneut nur mit den korrigierten Fassungen der oben genannten Operationen auf; wiederhole die angezeigten nicht. Lass Operationen weg, die sich nicht korrigieren lassen.`
89
+ },
90
+ shown: {
91
+ shown: (ops) => `Zur Prüfung im Dokument angezeigt: ${ops}.`,
92
+ none: "Keine der Operationen wurde angezeigt.",
93
+ dropped: (count) => `${count} Operation(en) mit ungültigen IDs wurden verworfen; die Nutzerin bzw. der Nutzer wurde darauf hingewiesen.`,
94
+ decisions: "Die Nutzerin bzw. der Nutzer übernimmt oder verwirft jede Änderung im Dokument; die Entscheidungen folgen mit einer späteren Nachricht."
95
+ },
96
+ feedback: (decisions) => `Entscheidungen zu deinen letzten Vorschlägen: ${decisions}.`
97
+ },
98
+ en: {
99
+ outcome: {
100
+ accepted: "accepted",
101
+ rejected: "rejected",
102
+ partial: "partially accepted",
103
+ invalid: "lapsed because the text was changed in the meantime",
104
+ pending: "not decided yet",
105
+ unchanged: "not shown because it matches the existing text",
106
+ missing: "not shown because the block no longer exists",
107
+ overlap: "not shown because other AI changes are still open at that place",
108
+ empty: "not shown because the content is empty",
109
+ blocked: "blocked because it lies outside the allowed scope"
110
+ },
111
+ summary: {
112
+ convert: (target, to) => `convert block ${target} → ${to}`,
113
+ block: (type, target) => `${type} block ${target}`,
114
+ addStart: "add at the start of the document",
115
+ addAfter: (target) => `add after block ${target}`
116
+ },
117
+ problem: {
118
+ limit: (max) => `more than ${max} operations`,
119
+ type: (allowed) => `unknown or missing type (allowed: ${allowed})`,
120
+ addAtStart: "inserting at the start of the document is outside the selection; afterId must be a selected block",
121
+ idMissing: (field) => `${field} is missing`,
122
+ unknownId: (id) => `the ID "${id}" does not exist in the document`,
123
+ outsideScope: (id) => `the ID "${id}" is outside the selection`,
124
+ duplicate: (id) => `the block "${id}" is changed or deleted more than once`,
125
+ toMissing: "to is missing",
126
+ badTarget: (to, allowed) => `"${to}" is not an allowed block type for to (allowed: ${allowed})`,
127
+ markdownMissing: "markdown is missing",
128
+ markdownMissingUpdate: "markdown is missing (use \"delete\" to remove a block)",
129
+ markdownTooLong: (max) => `markdown is longer than ${max} characters`,
130
+ unreadable: "the input was not an object with the list \"ops\""
131
+ },
132
+ retry: {
133
+ failed: "Error: The operations were not applied because some of them are invalid.",
134
+ failedPartial: "Error: Some operations are invalid and were dropped; the others are shown for review.",
135
+ invalidIds: (ids) => `Invalid IDs: ${ids}`,
136
+ operation: (index, type, detail) => `- Operation ${index}${type ? ` (${type})` : ""}: ${detail}`,
137
+ scoped: "Use only IDs from the editing scope (see message); do not invent IDs.",
138
+ unscoped: "Use only IDs that appear in square brackets in the document; do not invent IDs.",
139
+ again: (tool) => `Call ${tool} again with the complete, corrected list of all operations. Leave out operations that cannot be corrected.`,
140
+ againPartial: (tool) => `Call ${tool} again with corrected versions of only the operations listed above; do not repeat the shown ones. Leave out operations that cannot be corrected.`
141
+ },
142
+ shown: {
143
+ shown: (ops) => `Shown in the document for review: ${ops}.`,
144
+ none: "None of the operations were shown.",
145
+ dropped: (count) => `${count} operation(s) with invalid IDs were dropped; the user has been notified.`,
146
+ decisions: "The user accepts or rejects each change in the document; the decisions follow with a later message."
147
+ },
148
+ feedback: (decisions) => `Decisions on your latest proposals: ${decisions}.`
149
+ }
150
+ };
151
+ /** How an outcome reads for the model, per locale; the chat shows the catalog's `ai.opTitle.*` texts. */
152
+ const AGENT_OP_OUTCOME_TEXT = {
153
+ de: AGENT_TEXTS.de.outcome,
154
+ en: AGENT_TEXTS.en.outcome
155
+ };
156
+ /** `update Block X`, `add nach Block X`, `add am Dokumentanfang`, `convert Block X → composite:task` (`to` when known); English with `locale: 'en'`. */
157
+ function agentOpSummary(op, { locale = "de" } = {}) {
158
+ const text = AGENT_TEXTS[locale].summary;
159
+ if (op.type === "convert" && op.to) return text.convert(op.target, op.to);
160
+ if (op.type !== "add") return text.block(op.type, op.target);
161
+ return op.target === null ? text.addStart : text.addAfter(op.target);
162
+ }
163
+ /** Removes an echoed `[<id>] ` line prefix of a known block from the model's Markdown. */
164
+ function stripIdPrefixes(markdown, known) {
165
+ return markdown.replace(/^\[([^\]\s]+)\] ?/gm, (prefix, id) => known(id) ? "" : prefix);
166
+ }
167
+ /**
168
+ * Drops the indentation all non-blank lines share: lines echoed from a composite's body carry its two-space indent
169
+ * (see documentChatText), which would turn deeper nested lines into indented code.
170
+ */
171
+ function dedent(markdown) {
172
+ const indents = markdown.split("\n").filter((line) => line.trim()).map((line) => /^[ \t]*/.exec(line)[0].length);
173
+ const common = indents.length ? Math.min(...indents) : 0;
174
+ return common ? markdown.replace(new RegExp(`^[ \\t]{0,${common}}`, "gm"), "") : markdown;
175
+ }
176
+ /**
177
+ * Checks the raw `ops` of `edit_document` calls: every ID must exist and lie in the scope (`add` in a selection scope
178
+ * needs an `afterId` from the selection), fields must be present, a `convert` target must be one of `targets`, and a
179
+ * block is updated, converted or deleted at most once. Returns the valid operations in order and the problems of the others;
180
+ * the problems' `detail` is written in `context.locale` (default `de`).
181
+ */
182
+ function checkAgentOps(raw, context) {
183
+ const valid = [];
184
+ const problems = [];
185
+ const edited = /* @__PURE__ */ new Set();
186
+ const text = AGENT_TEXTS[context.locale ?? "de"].problem;
187
+ raw.forEach((entry, i) => {
188
+ const index = i + 1;
189
+ const value = entry && typeof entry === "object" ? entry : {};
190
+ const type = typeof value.type === "string" ? value.type : null;
191
+ const problem = (reason, id, detail) => problems.push({
192
+ index,
193
+ type,
194
+ id,
195
+ reason,
196
+ detail
197
+ });
198
+ if (index > AGENT_LIMITS.ops) return problem("limit", null, text.limit(AGENT_LIMITS.ops));
199
+ if (!type || !AGENT_OP_TYPES.includes(type)) return problem("field", null, text.type(AGENT_OP_TYPES.join(", ")));
200
+ const idField = type === "add" ? "afterId" : "id";
201
+ const rawId = value[idField];
202
+ if (type === "add" && (rawId === null || rawId === void 0)) {
203
+ if (context.allowed) return problem("scope", null, text.addAtStart);
204
+ } else if (typeof rawId !== "string" || !rawId.trim()) return problem("field", null, text.idMissing(idField));
205
+ const id = typeof rawId === "string" ? rawId.trim() : null;
206
+ if (id !== null) {
207
+ if (!context.known(id)) return problem("unknown", id, text.unknownId(id));
208
+ if (context.allowed && !context.allowed.has(id)) return problem("scope", id, text.outsideScope(id));
209
+ }
210
+ if (type === "delete") {
211
+ if (edited.has(id)) return problem("duplicate", id, text.duplicate(id));
212
+ edited.add(id);
213
+ return valid.push({
214
+ type,
215
+ id
216
+ });
217
+ }
218
+ if (type === "convert") {
219
+ const to = typeof value.to === "string" ? value.to.trim() : "";
220
+ if (!to) return problem("field", id, text.toMissing);
221
+ if (!context.targets.has(to)) return problem("target", id, text.badTarget(to, [...context.targets].join(", ")));
222
+ if (edited.has(id)) return problem("duplicate", id, text.duplicate(id));
223
+ edited.add(id);
224
+ return valid.push({
225
+ type,
226
+ id,
227
+ to
228
+ });
229
+ }
230
+ const markdown = typeof value.markdown === "string" ? dedent(stripIdPrefixes(value.markdown, context.known)).trim() : "";
231
+ if (!markdown) return problem("field", id, type === "update" ? text.markdownMissingUpdate : text.markdownMissing);
232
+ if (markdown.length > AGENT_LIMITS.markdown) return problem("field", id, text.markdownTooLong(AGENT_LIMITS.markdown));
233
+ if (type === "add") return valid.push({
234
+ type,
235
+ afterId: id,
236
+ markdown
237
+ });
238
+ if (edited.has(id)) return problem("duplicate", id, text.duplicate(id));
239
+ edited.add(id);
240
+ valid.push({
241
+ type: "update",
242
+ id,
243
+ markdown
244
+ });
245
+ });
246
+ return {
247
+ valid,
248
+ problems
249
+ };
250
+ }
251
+ /** The problem for a tool call whose input was no object with the list `ops` (index 0), worded in `locale` (default `de`). */
252
+ function agentUnreadableProblem({ locale = "de" } = {}) {
253
+ return {
254
+ index: 0,
255
+ type: null,
256
+ id: null,
257
+ reason: "field",
258
+ detail: AGENT_TEXTS[locale].problem.unreadable
259
+ };
260
+ }
261
+ /**
262
+ * Tool result asking the model to call `tool` (default `edit_document`, the host's own tool name when it exposes the
263
+ * operations under another one) again without the invalid operations' mistakes; worded in `locale` (default `de`).
264
+ * By default nothing was applied and the model resends the whole list; with `partial` the host already shows the
265
+ * valid operations, so the model resends only corrected versions of the listed ones.
266
+ */
267
+ function agentRetryMessage(problems, scoped, { locale = "de", tool = AGENT_TOOL, partial = false } = {}) {
268
+ const text = AGENT_TEXTS[locale].retry;
269
+ const ids = [...new Set(problems.map((p) => p.id).filter((id) => !!id))];
270
+ return [
271
+ partial ? text.failedPartial : text.failed,
272
+ ...ids.length ? [text.invalidIds(ids.join(", "))] : [],
273
+ ...problems.map((p) => text.operation(p.index, p.type, p.detail)),
274
+ scoped ? text.scoped : text.unscoped,
275
+ partial ? text.againPartial(tool) : text.again(tool)
276
+ ].join("\n");
277
+ }
278
+ /** Tool result of a past `edit_document` call: which operations were shown for review, and how many were dropped; worded in `locale` (default `de`). */
279
+ function agentShownMessage(ops, dropped, { locale = "de" } = {}) {
280
+ const text = AGENT_TEXTS[locale].shown;
281
+ const lines = ops.length ? [text.shown(ops.map((op) => `${op.op} (${agentOpSummary({
282
+ ...op,
283
+ target: agentOpTarget(op)
284
+ }, { locale })})`).join(", "))] : [text.none];
285
+ if (dropped) lines.push(text.dropped(dropped));
286
+ lines.push(text.decisions);
287
+ return lines.join(" ");
288
+ }
289
+ /** „Entscheidungen zu deinen letzten Vorschlägen: op1 (update Block X) abgelehnt; …“ (English with `locale: 'en'`), or '' without feedback. */
290
+ function agentFeedbackText(feedback, { locale = "de" } = {}) {
291
+ if (!feedback.length) return "";
292
+ const outcome = AGENT_TEXTS[locale].outcome;
293
+ return AGENT_TEXTS[locale].feedback(feedback.map((f) => `${f.op} (${agentOpSummary(f, { locale })}) ${outcome[f.outcome]}`).join("; "));
294
+ }
295
+ //#endregion
296
+ export { AGENT_LIMITS, AGENT_OP_OUTCOMES, AGENT_OP_OUTCOME_TEXT, AGENT_OP_TYPES, AGENT_TOOL, agentFeedbackText, agentOpSummary, agentOpTarget, agentRetryMessage, agentShownMessage, agentUnreadableProblem, checkAgentOps, documentBlockIds };
297
+
298
+ //# sourceMappingURL=agent-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ops.js","names":[],"sources":["../../../../src/features/ai/protocol/agent-ops.ts"],"sourcesContent":["// i18n-ignore-file: model-facing tool results, operation checks and decision texts (German by default, English on request; the model's language is not the editor's)\n/**\n * Agent operations of the document chat: the model proposes block edits through the `edit_document` tool, the server\n * checks every block ID against the document and the scope, and the client shows the valid ones as in-document review.\n */\nimport type { Locale } from '../../../i18n'\n\n/** Name of the tool the chat model calls to propose edits. */\nexport const AGENT_TOOL = 'edit_document'\n\n/** Per-turn limits: operations, Markdown per operation, IDs in a selection scope; retries after invalid IDs. */\nexport const AGENT_LIMITS = { ops: 50, markdown: 8000, scope: 5000, retries: 2 } as const\n\nexport const AGENT_OP_TYPES = ['add', 'update', 'delete', 'convert'] as const\nexport type AgentOpType = typeof AGENT_OP_TYPES[number]\n\n/**\n * One proposed edit as the model writes it: `update` replaces block `id` by `markdown`, `delete` removes block `id`,\n * `add` inserts `markdown` (one or more blocks) after block `afterId` (`null`: at the start of the document), `convert`\n * turns block `id` into the block type `to` (a `CONVERT_TARGET_IDS` entry or `composite:<kind>`), keeping its content.\n */\nexport type ModelAgentOp =\n | { type: 'update', id: string, markdown: string }\n | { type: 'delete', id: string }\n | { type: 'add', afterId: string | null, markdown: string }\n | { type: 'convert', id: string, to: string }\n\n/** A checked operation with the conversation-wide ID (`op1`, `op2`, …) that decisions refer to. */\nexport type AgentOp = ModelAgentOp & { op: string }\n\n/**\n * What became of an operation: decided in the review (`accepted`, `rejected`, `partial` for mixed hunks, `invalid`\n * when its text changed underneath), still `pending`, or never reviewed: the review found nothing to show\n * (`unchanged`, `missing` block, `overlap` with open AI changes, `empty` result), or the client refused it as out of\n * scope (`blocked`).\n */\nexport const AGENT_OP_OUTCOMES = ['accepted', 'rejected', 'partial', 'invalid', 'pending', 'unchanged', 'missing', 'overlap', 'empty', 'blocked'] as const\nexport type AgentOpOutcome = typeof AGENT_OP_OUTCOMES[number]\n\n/** Decision state of an earlier operation, sent with the next user message. */\nexport interface AgentOpFeedback { op: string, type: AgentOpType, target: string | null, outcome: AgentOpOutcome }\n\n/**\n * Why an operation was dropped: unknown block ID, ID outside the scope, a missing/invalid field, a block edited twice,\n * too many ops, a `convert` target that is not offered.\n */\nexport type AgentOpProblemReason = 'unknown' | 'scope' | 'field' | 'duplicate' | 'limit' | 'target'\n\n/** A dropped operation: its 1-based position in the tool call, type and target as far as readable, and the offending ID. */\nexport interface AgentOpProblem { index: number, type: string | null, id: string | null, reason: AgentOpProblemReason, detail: string }\n\n/**\n * Where operations may point: `known` IDs of the document; `allowed` the selection scope (null: the whole document);\n * `targets` the block types `convert` may turn a block into; `locale` the language of the problem details (default `de`).\n */\nexport interface AgentOpContext { known: (id: string) => boolean, allowed: ReadonlySet<string> | null, targets: ReadonlySet<string>, locale?: Locale }\n\n/** Block IDs of the chat document text (`[<id>] …` per line, see documentChatText). */\nexport function documentBlockIds(document: string): Set<string> {\n const ids = new Set<string>()\n for (const match of document.matchAll(/^\\[([^\\]\\s]+)\\] /gm)) ids.add(match[1]!)\n return ids\n}\n\n/** The block an operation targets: `update`/`delete` its `id`, `add` its `afterId` (null: document start). */\nexport function agentOpTarget(op: ModelAgentOp): string | null {\n return op.type === 'add' ? op.afterId : op.id\n}\n\n/**\n * Every model-facing text of the agent protocol, per locale (the editor's own prompts in chat.ts stay German). Selected\n * by the `locale` option of the functions below; `de` is the default and what existing hosts receive.\n */\ninterface AgentTexts {\n /** How an outcome reads for the model. */\n outcome: Record<AgentOpOutcome, string>\n summary: {\n convert: (target: string | null, to: string) => string\n block: (type: string, target: string | null) => string\n addStart: string\n addAfter: (target: string) => string\n }\n problem: {\n limit: (max: number) => string\n type: (allowed: string) => string\n addAtStart: string\n idMissing: (field: string) => string\n unknownId: (id: string) => string\n outsideScope: (id: string) => string\n duplicate: (id: string) => string\n toMissing: string\n badTarget: (to: string, allowed: string) => string\n markdownMissing: string\n markdownMissingUpdate: string\n markdownTooLong: (max: number) => string\n unreadable: string\n }\n retry: {\n failed: string\n failedPartial: string\n invalidIds: (ids: string) => string\n operation: (index: number, type: string | null, detail: string) => string\n scoped: string\n unscoped: string\n again: (tool: string) => string\n againPartial: (tool: string) => string\n }\n shown: {\n shown: (ops: string) => string\n none: string\n dropped: (count: number) => string\n decisions: string\n }\n feedback: (decisions: string) => string\n}\n\nconst AGENT_TEXTS: Record<Locale, AgentTexts> = {\n de: {\n outcome: {\n accepted: 'übernommen',\n rejected: 'abgelehnt',\n partial: 'teilweise übernommen',\n invalid: 'verfallen, weil der Text inzwischen anders geändert wurde',\n pending: 'noch nicht entschieden',\n unchanged: 'nicht angezeigt, weil er dem vorhandenen Text entspricht',\n missing: 'nicht angezeigt, weil der Block nicht mehr existiert',\n overlap: 'nicht angezeigt, weil an der Stelle noch andere KI-Änderungen offen sind',\n empty: 'nicht angezeigt, weil der Inhalt leer ist',\n blocked: 'blockiert, weil er außerhalb des erlaubten Bereichs liegt',\n },\n summary: {\n convert: (target, to) => `convert Block ${target} → ${to}`,\n block: (type, target) => `${type} Block ${target}`,\n addStart: 'add am Dokumentanfang',\n addAfter: target => `add nach Block ${target}`,\n },\n problem: {\n limit: max => `mehr als ${max} Operationen`,\n type: allowed => `unbekannter oder fehlender Typ (erlaubt: ${allowed})`,\n addAtStart: 'Einfügen am Dokumentanfang liegt außerhalb der Auswahl; afterId muss ein ausgewählter Block sein',\n idMissing: field => `${field} fehlt`,\n unknownId: id => `die ID „${id}“ gibt es im Dokument nicht`,\n outsideScope: id => `die ID „${id}“ liegt außerhalb der Auswahl`,\n duplicate: id => `der Block „${id}“ wird mehrfach geändert oder gelöscht`,\n toMissing: 'to fehlt',\n badTarget: (to, allowed) => `„${to}“ ist kein erlaubter Blocktyp für to (erlaubt: ${allowed})`,\n markdownMissing: 'markdown fehlt',\n markdownMissingUpdate: 'markdown fehlt (zum Entfernen „delete“ verwenden)',\n markdownTooLong: max => `markdown ist länger als ${max} Zeichen`,\n unreadable: 'die Eingabe war kein Objekt mit der Liste „ops“',\n },\n retry: {\n failed: 'Fehler: Die Operationen wurden nicht angewendet, weil einige ungültig sind.',\n failedPartial: 'Fehler: Einige Operationen sind ungültig und wurden verworfen; die übrigen werden zur Prüfung angezeigt.',\n invalidIds: ids => `Ungültige IDs: ${ids}`,\n operation: (index, type, detail) => `- Operation ${index}${type ? ` (${type})` : ''}: ${detail}`,\n scoped: 'Verwende nur IDs aus dem Bearbeitungsbereich (siehe Nachricht); erfinde keine IDs.',\n unscoped: 'Verwende nur IDs, die im Dokument in eckigen Klammern stehen; erfinde keine IDs.',\n again: tool => `Rufe ${tool} erneut mit der vollständigen, korrigierten Liste aller Operationen auf. Lass Operationen weg, die sich nicht korrigieren lassen.`,\n againPartial: tool => `Rufe ${tool} erneut nur mit den korrigierten Fassungen der oben genannten Operationen auf; wiederhole die angezeigten nicht. Lass Operationen weg, die sich nicht korrigieren lassen.`,\n },\n shown: {\n shown: ops => `Zur Prüfung im Dokument angezeigt: ${ops}.`,\n none: 'Keine der Operationen wurde angezeigt.',\n dropped: count => `${count} Operation(en) mit ungültigen IDs wurden verworfen; die Nutzerin bzw. der Nutzer wurde darauf hingewiesen.`,\n decisions: 'Die Nutzerin bzw. der Nutzer übernimmt oder verwirft jede Änderung im Dokument; die Entscheidungen folgen mit einer späteren Nachricht.',\n },\n feedback: decisions => `Entscheidungen zu deinen letzten Vorschlägen: ${decisions}.`,\n },\n en: {\n outcome: {\n accepted: 'accepted',\n rejected: 'rejected',\n partial: 'partially accepted',\n invalid: 'lapsed because the text was changed in the meantime',\n pending: 'not decided yet',\n unchanged: 'not shown because it matches the existing text',\n missing: 'not shown because the block no longer exists',\n overlap: 'not shown because other AI changes are still open at that place',\n empty: 'not shown because the content is empty',\n blocked: 'blocked because it lies outside the allowed scope',\n },\n summary: {\n convert: (target, to) => `convert block ${target} → ${to}`,\n block: (type, target) => `${type} block ${target}`,\n addStart: 'add at the start of the document',\n addAfter: target => `add after block ${target}`,\n },\n problem: {\n limit: max => `more than ${max} operations`,\n type: allowed => `unknown or missing type (allowed: ${allowed})`,\n addAtStart: 'inserting at the start of the document is outside the selection; afterId must be a selected block',\n idMissing: field => `${field} is missing`,\n unknownId: id => `the ID \"${id}\" does not exist in the document`,\n outsideScope: id => `the ID \"${id}\" is outside the selection`,\n duplicate: id => `the block \"${id}\" is changed or deleted more than once`,\n toMissing: 'to is missing',\n badTarget: (to, allowed) => `\"${to}\" is not an allowed block type for to (allowed: ${allowed})`,\n markdownMissing: 'markdown is missing',\n markdownMissingUpdate: 'markdown is missing (use \"delete\" to remove a block)',\n markdownTooLong: max => `markdown is longer than ${max} characters`,\n unreadable: 'the input was not an object with the list \"ops\"',\n },\n retry: {\n failed: 'Error: The operations were not applied because some of them are invalid.',\n failedPartial: 'Error: Some operations are invalid and were dropped; the others are shown for review.',\n invalidIds: ids => `Invalid IDs: ${ids}`,\n operation: (index, type, detail) => `- Operation ${index}${type ? ` (${type})` : ''}: ${detail}`,\n scoped: 'Use only IDs from the editing scope (see message); do not invent IDs.',\n unscoped: 'Use only IDs that appear in square brackets in the document; do not invent IDs.',\n again: tool => `Call ${tool} again with the complete, corrected list of all operations. Leave out operations that cannot be corrected.`,\n againPartial: tool => `Call ${tool} again with corrected versions of only the operations listed above; do not repeat the shown ones. Leave out operations that cannot be corrected.`,\n },\n shown: {\n shown: ops => `Shown in the document for review: ${ops}.`,\n none: 'None of the operations were shown.',\n dropped: count => `${count} operation(s) with invalid IDs were dropped; the user has been notified.`,\n decisions: 'The user accepts or rejects each change in the document; the decisions follow with a later message.',\n },\n feedback: decisions => `Decisions on your latest proposals: ${decisions}.`,\n },\n}\n\n/** How an outcome reads for the model, per locale; the chat shows the catalog's `ai.opTitle.*` texts. */\nexport const AGENT_OP_OUTCOME_TEXT: Record<Locale, Record<AgentOpOutcome, string>> = {\n de: AGENT_TEXTS.de.outcome,\n en: AGENT_TEXTS.en.outcome,\n}\n\n/** Text options of the model-facing functions: `locale` selects the language (default `de`). */\nexport interface AgentTextOptions { locale?: Locale }\n\n/** `update Block X`, `add nach Block X`, `add am Dokumentanfang`, `convert Block X → composite:task` (`to` when known); English with `locale: 'en'`. */\nexport function agentOpSummary(op: { type: AgentOpType, target: string | null, to?: string }, { locale = 'de' }: AgentTextOptions = {}): string {\n const text = AGENT_TEXTS[locale].summary\n if (op.type === 'convert' && op.to) return text.convert(op.target, op.to)\n if (op.type !== 'add') return text.block(op.type, op.target)\n return op.target === null ? text.addStart : text.addAfter(op.target)\n}\n\n/** Removes an echoed `[<id>] ` line prefix of a known block from the model's Markdown. */\nfunction stripIdPrefixes(markdown: string, known: AgentOpContext['known']): string {\n return markdown.replace(/^\\[([^\\]\\s]+)\\] ?/gm, (prefix, id: string) => known(id) ? '' : prefix)\n}\n\n/**\n * Drops the indentation all non-blank lines share: lines echoed from a composite's body carry its two-space indent\n * (see documentChatText), which would turn deeper nested lines into indented code.\n */\nfunction dedent(markdown: string): string {\n const indents = markdown.split('\\n').filter(line => line.trim()).map(line => /^[ \\t]*/.exec(line)![0].length)\n const common = indents.length ? Math.min(...indents) : 0\n return common ? markdown.replace(new RegExp(`^[ \\\\t]{0,${common}}`, 'gm'), '') : markdown\n}\n\n/**\n * Checks the raw `ops` of `edit_document` calls: every ID must exist and lie in the scope (`add` in a selection scope\n * needs an `afterId` from the selection), fields must be present, a `convert` target must be one of `targets`, and a\n * block is updated, converted or deleted at most once. Returns the valid operations in order and the problems of the others;\n * the problems' `detail` is written in `context.locale` (default `de`).\n */\nexport function checkAgentOps(raw: readonly unknown[], context: AgentOpContext): { valid: ModelAgentOp[], problems: AgentOpProblem[] } {\n const valid: ModelAgentOp[] = []\n const problems: AgentOpProblem[] = []\n const edited = new Set<string>()\n const text = AGENT_TEXTS[context.locale ?? 'de'].problem\n\n raw.forEach((entry, i) => {\n const index = i + 1\n const value = (entry && typeof entry === 'object' ? entry : {}) as Record<string, unknown>\n const type = typeof value.type === 'string' ? value.type : null\n const problem = (reason: AgentOpProblemReason, id: string | null, detail: string) => problems.push({ index, type, id, reason, detail })\n\n if (index > AGENT_LIMITS.ops) return problem('limit', null, text.limit(AGENT_LIMITS.ops))\n if (!type || !(AGENT_OP_TYPES as readonly string[]).includes(type)) return problem('field', null, text.type(AGENT_OP_TYPES.join(', ')))\n\n const idField = type === 'add' ? 'afterId' : 'id'\n const rawId = value[idField]\n if (type === 'add' && (rawId === null || rawId === undefined)) {\n if (context.allowed) return problem('scope', null, text.addAtStart)\n }\n else if (typeof rawId !== 'string' || !rawId.trim()) {\n return problem('field', null, text.idMissing(idField))\n }\n const id = typeof rawId === 'string' ? rawId.trim() : null\n if (id !== null) {\n if (!context.known(id)) return problem('unknown', id, text.unknownId(id))\n if (context.allowed && !context.allowed.has(id)) return problem('scope', id, text.outsideScope(id))\n }\n\n if (type === 'delete') {\n if (edited.has(id!)) return problem('duplicate', id, text.duplicate(id!))\n edited.add(id!)\n return valid.push({ type, id: id! })\n }\n\n if (type === 'convert') {\n const to = typeof value.to === 'string' ? value.to.trim() : ''\n if (!to) return problem('field', id, text.toMissing)\n if (!context.targets.has(to)) return problem('target', id, text.badTarget(to, [...context.targets].join(', ')))\n if (edited.has(id!)) return problem('duplicate', id, text.duplicate(id!))\n edited.add(id!)\n return valid.push({ type, id: id!, to })\n }\n\n const markdown = typeof value.markdown === 'string' ? dedent(stripIdPrefixes(value.markdown, context.known)).trim() : ''\n if (!markdown) return problem('field', id, type === 'update' ? text.markdownMissingUpdate : text.markdownMissing)\n if (markdown.length > AGENT_LIMITS.markdown) return problem('field', id, text.markdownTooLong(AGENT_LIMITS.markdown))\n if (type === 'add') return valid.push({ type, afterId: id, markdown })\n if (edited.has(id!)) return problem('duplicate', id, text.duplicate(id!))\n edited.add(id!)\n valid.push({ type: 'update', id: id!, markdown })\n })\n return { valid, problems }\n}\n\n/** The problem for a tool call whose input was no object with the list `ops` (index 0), worded in `locale` (default `de`). */\nexport function agentUnreadableProblem({ locale = 'de' }: AgentTextOptions = {}): AgentOpProblem {\n return { index: 0, type: null, id: null, reason: 'field', detail: AGENT_TEXTS[locale].problem.unreadable }\n}\n\n/**\n * Tool result asking the model to call `tool` (default `edit_document`, the host's own tool name when it exposes the\n * operations under another one) again without the invalid operations' mistakes; worded in `locale` (default `de`).\n * By default nothing was applied and the model resends the whole list; with `partial` the host already shows the\n * valid operations, so the model resends only corrected versions of the listed ones.\n */\nexport function agentRetryMessage(\n problems: readonly AgentOpProblem[],\n scoped: boolean,\n { locale = 'de', tool = AGENT_TOOL, partial = false }: AgentTextOptions & { tool?: string, partial?: boolean } = {},\n): string {\n const text = AGENT_TEXTS[locale].retry\n const ids = [...new Set(problems.map(p => p.id).filter((id): id is string => !!id))]\n return [\n partial ? text.failedPartial : text.failed,\n ...(ids.length ? [text.invalidIds(ids.join(', '))] : []),\n ...problems.map(p => text.operation(p.index, p.type, p.detail)),\n scoped ? text.scoped : text.unscoped,\n partial ? text.againPartial(tool) : text.again(tool),\n ].join('\\n')\n}\n\n/** Tool result of a past `edit_document` call: which operations were shown for review, and how many were dropped; worded in `locale` (default `de`). */\nexport function agentShownMessage(ops: readonly AgentOp[], dropped: number, { locale = 'de' }: AgentTextOptions = {}): string {\n const text = AGENT_TEXTS[locale].shown\n const lines = ops.length\n ? [text.shown(ops.map(op => `${op.op} (${agentOpSummary({ ...op, target: agentOpTarget(op) }, { locale })})`).join(', '))]\n : [text.none]\n if (dropped) lines.push(text.dropped(dropped))\n lines.push(text.decisions)\n return lines.join(' ')\n}\n\n/** „Entscheidungen zu deinen letzten Vorschlägen: op1 (update Block X) abgelehnt; …“ (English with `locale: 'en'`), or '' without feedback. */\nexport function agentFeedbackText(feedback: readonly AgentOpFeedback[], { locale = 'de' }: AgentTextOptions = {}): string {\n if (!feedback.length) return ''\n const outcome = AGENT_TEXTS[locale].outcome\n return AGENT_TEXTS[locale].feedback(feedback.map(f => `${f.op} (${agentOpSummary(f, { locale })}) ${outcome[f.outcome]}`).join('; '))\n}\n"],"mappings":";;AAQA,MAAa,aAAa;;AAG1B,MAAa,eAAe;CAAE,KAAK;CAAI,UAAU;CAAM,OAAO;CAAM,SAAS;AAAE;AAE/E,MAAa,iBAAiB;CAAC;CAAO;CAAU;CAAU;AAAS;;;;;;;AAuBnE,MAAa,oBAAoB;CAAC;CAAY;CAAY;CAAW;CAAW;CAAW;CAAa;CAAW;CAAW;CAAS;AAAS;;AAsBhJ,SAAgB,iBAAiB,UAA+B;CAC9D,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,SAAS,SAAS,SAAS,oBAAoB,GAAG,IAAI,IAAI,MAAM,EAAG;CAC9E,OAAO;AACT;;AAGA,SAAgB,cAAc,IAAiC;CAC7D,OAAO,GAAG,SAAS,QAAQ,GAAG,UAAU,GAAG;AAC7C;AAiDA,MAAM,cAA0C;CAC9C,IAAI;EACF,SAAS;GACP,UAAU;GACV,UAAU;GACV,SAAS;GACT,SAAS;GACT,SAAS;GACT,WAAW;GACX,SAAS;GACT,SAAS;GACT,OAAO;GACP,SAAS;EACX;EACA,SAAS;GACP,UAAU,QAAQ,OAAO,iBAAiB,OAAO,KAAK;GACtD,QAAQ,MAAM,WAAW,GAAG,KAAK,SAAS;GAC1C,UAAU;GACV,WAAU,WAAU,kBAAkB;EACxC;EACA,SAAS;GACP,QAAO,QAAO,YAAY,IAAI;GAC9B,OAAM,YAAW,4CAA4C,QAAQ;GACrE,YAAY;GACZ,YAAW,UAAS,GAAG,MAAM;GAC7B,YAAW,OAAM,WAAW,GAAG;GAC/B,eAAc,OAAM,WAAW,GAAG;GAClC,YAAW,OAAM,cAAc,GAAG;GAClC,WAAW;GACX,YAAY,IAAI,YAAY,IAAI,GAAG,iDAAiD,QAAQ;GAC5F,iBAAiB;GACjB,uBAAuB;GACvB,kBAAiB,QAAO,2BAA2B,IAAI;GACvD,YAAY;EACd;EACA,OAAO;GACL,QAAQ;GACR,eAAe;GACf,aAAY,QAAO,kBAAkB;GACrC,YAAY,OAAO,MAAM,WAAW,eAAe,QAAQ,OAAO,KAAK,KAAK,KAAK,GAAG,IAAI;GACxF,QAAQ;GACR,UAAU;GACV,QAAO,SAAQ,QAAQ,KAAK;GAC5B,eAAc,SAAQ,QAAQ,KAAK;EACrC;EACA,OAAO;GACL,QAAO,QAAO,sCAAsC,IAAI;GACxD,MAAM;GACN,UAAS,UAAS,GAAG,MAAM;GAC3B,WAAW;EACb;EACA,WAAU,cAAa,iDAAiD,UAAU;CACpF;CACA,IAAI;EACF,SAAS;GACP,UAAU;GACV,UAAU;GACV,SAAS;GACT,SAAS;GACT,SAAS;GACT,WAAW;GACX,SAAS;GACT,SAAS;GACT,OAAO;GACP,SAAS;EACX;EACA,SAAS;GACP,UAAU,QAAQ,OAAO,iBAAiB,OAAO,KAAK;GACtD,QAAQ,MAAM,WAAW,GAAG,KAAK,SAAS;GAC1C,UAAU;GACV,WAAU,WAAU,mBAAmB;EACzC;EACA,SAAS;GACP,QAAO,QAAO,aAAa,IAAI;GAC/B,OAAM,YAAW,qCAAqC,QAAQ;GAC9D,YAAY;GACZ,YAAW,UAAS,GAAG,MAAM;GAC7B,YAAW,OAAM,WAAW,GAAG;GAC/B,eAAc,OAAM,WAAW,GAAG;GAClC,YAAW,OAAM,cAAc,GAAG;GAClC,WAAW;GACX,YAAY,IAAI,YAAY,IAAI,GAAG,kDAAkD,QAAQ;GAC7F,iBAAiB;GACjB,uBAAuB;GACvB,kBAAiB,QAAO,2BAA2B,IAAI;GACvD,YAAY;EACd;EACA,OAAO;GACL,QAAQ;GACR,eAAe;GACf,aAAY,QAAO,gBAAgB;GACnC,YAAY,OAAO,MAAM,WAAW,eAAe,QAAQ,OAAO,KAAK,KAAK,KAAK,GAAG,IAAI;GACxF,QAAQ;GACR,UAAU;GACV,QAAO,SAAQ,QAAQ,KAAK;GAC5B,eAAc,SAAQ,QAAQ,KAAK;EACrC;EACA,OAAO;GACL,QAAO,QAAO,qCAAqC,IAAI;GACvD,MAAM;GACN,UAAS,UAAS,GAAG,MAAM;GAC3B,WAAW;EACb;EACA,WAAU,cAAa,uCAAuC,UAAU;CAC1E;AACF;;AAGA,MAAa,wBAAwE;CACnF,IAAI,YAAY,GAAG;CACnB,IAAI,YAAY,GAAG;AACrB;;AAMA,SAAgB,eAAe,IAA+D,EAAE,SAAS,SAA2B,CAAC,GAAW;CAC9I,MAAM,OAAO,YAAY,OAAO,CAAC;CACjC,IAAI,GAAG,SAAS,aAAa,GAAG,IAAI,OAAO,KAAK,QAAQ,GAAG,QAAQ,GAAG,EAAE;CACxE,IAAI,GAAG,SAAS,OAAO,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;CAC3D,OAAO,GAAG,WAAW,OAAO,KAAK,WAAW,KAAK,SAAS,GAAG,MAAM;AACrE;;AAGA,SAAS,gBAAgB,UAAkB,OAAwC;CACjF,OAAO,SAAS,QAAQ,wBAAwB,QAAQ,OAAe,MAAM,EAAE,IAAI,KAAK,MAAM;AAChG;;;;;AAMA,SAAS,OAAO,UAA0B;CACxC,MAAM,UAAU,SAAS,MAAM,IAAI,CAAC,CAAC,QAAO,SAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAI,SAAQ,UAAU,KAAK,IAAI,CAAC,CAAE,EAAE,CAAC,MAAM;CAC5G,MAAM,SAAS,QAAQ,SAAS,KAAK,IAAI,GAAG,OAAO,IAAI;CACvD,OAAO,SAAS,SAAS,QAAQ,IAAI,OAAO,aAAa,OAAO,IAAI,IAAI,GAAG,EAAE,IAAI;AACnF;;;;;;;AAQA,SAAgB,cAAc,KAAyB,SAAgF;CACrI,MAAM,QAAwB,CAAC;CAC/B,MAAM,WAA6B,CAAC;CACpC,MAAM,yBAAS,IAAI,IAAY;CAC/B,MAAM,OAAO,YAAY,QAAQ,UAAU,KAAK,CAAC;CAEjD,IAAI,SAAS,OAAO,MAAM;EACxB,MAAM,QAAQ,IAAI;EAClB,MAAM,QAAS,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAC;EAC7D,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;EAC3D,MAAM,WAAW,QAA8B,IAAmB,WAAmB,SAAS,KAAK;GAAE;GAAO;GAAM;GAAI;GAAQ;EAAO,CAAC;EAEtI,IAAI,QAAQ,aAAa,KAAK,OAAO,QAAQ,SAAS,MAAM,KAAK,MAAM,aAAa,GAAG,CAAC;EACxF,IAAI,CAAC,QAAQ,CAAE,eAAqC,SAAS,IAAI,GAAG,OAAO,QAAQ,SAAS,MAAM,KAAK,KAAK,eAAe,KAAK,IAAI,CAAC,CAAC;EAEtI,MAAM,UAAU,SAAS,QAAQ,YAAY;EAC7C,MAAM,QAAQ,MAAM;EACpB,IAAI,SAAS,UAAU,UAAU,QAAQ,UAAU,KAAA,IAC7C;OAAA,QAAQ,SAAS,OAAO,QAAQ,SAAS,MAAM,KAAK,UAAU;EAAA,OAE/D,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,GAChD,OAAO,QAAQ,SAAS,MAAM,KAAK,UAAU,OAAO,CAAC;EAEvD,MAAM,KAAK,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;EACtD,IAAI,OAAO,MAAM;GACf,IAAI,CAAC,QAAQ,MAAM,EAAE,GAAG,OAAO,QAAQ,WAAW,IAAI,KAAK,UAAU,EAAE,CAAC;GACxE,IAAI,QAAQ,WAAW,CAAC,QAAQ,QAAQ,IAAI,EAAE,GAAG,OAAO,QAAQ,SAAS,IAAI,KAAK,aAAa,EAAE,CAAC;EACpG;EAEA,IAAI,SAAS,UAAU;GACrB,IAAI,OAAO,IAAI,EAAG,GAAG,OAAO,QAAQ,aAAa,IAAI,KAAK,UAAU,EAAG,CAAC;GACxE,OAAO,IAAI,EAAG;GACd,OAAO,MAAM,KAAK;IAAE;IAAU;GAAI,CAAC;EACrC;EAEA,IAAI,SAAS,WAAW;GACtB,MAAM,KAAK,OAAO,MAAM,OAAO,WAAW,MAAM,GAAG,KAAK,IAAI;GAC5D,IAAI,CAAC,IAAI,OAAO,QAAQ,SAAS,IAAI,KAAK,SAAS;GACnD,IAAI,CAAC,QAAQ,QAAQ,IAAI,EAAE,GAAG,OAAO,QAAQ,UAAU,IAAI,KAAK,UAAU,IAAI,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;GAC9G,IAAI,OAAO,IAAI,EAAG,GAAG,OAAO,QAAQ,aAAa,IAAI,KAAK,UAAU,EAAG,CAAC;GACxE,OAAO,IAAI,EAAG;GACd,OAAO,MAAM,KAAK;IAAE;IAAU;IAAK;GAAG,CAAC;EACzC;EAEA,MAAM,WAAW,OAAO,MAAM,aAAa,WAAW,OAAO,gBAAgB,MAAM,UAAU,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;EACtH,IAAI,CAAC,UAAU,OAAO,QAAQ,SAAS,IAAI,SAAS,WAAW,KAAK,wBAAwB,KAAK,eAAe;EAChH,IAAI,SAAS,SAAS,aAAa,UAAU,OAAO,QAAQ,SAAS,IAAI,KAAK,gBAAgB,aAAa,QAAQ,CAAC;EACpH,IAAI,SAAS,OAAO,OAAO,MAAM,KAAK;GAAE;GAAM,SAAS;GAAI;EAAS,CAAC;EACrE,IAAI,OAAO,IAAI,EAAG,GAAG,OAAO,QAAQ,aAAa,IAAI,KAAK,UAAU,EAAG,CAAC;EACxE,OAAO,IAAI,EAAG;EACd,MAAM,KAAK;GAAE,MAAM;GAAc;GAAK;EAAS,CAAC;CAClD,CAAC;CACD,OAAO;EAAE;EAAO;CAAS;AAC3B;;AAGA,SAAgB,uBAAuB,EAAE,SAAS,SAA2B,CAAC,GAAmB;CAC/F,OAAO;EAAE,OAAO;EAAG,MAAM;EAAM,IAAI;EAAM,QAAQ;EAAS,QAAQ,YAAY,OAAO,CAAC,QAAQ;CAAW;AAC3G;;;;;;;AAQA,SAAgB,kBACd,UACA,QACA,EAAE,SAAS,MAAM,OAAO,YAAY,UAAU,UAAmE,CAAC,GAC1G;CACR,MAAM,OAAO,YAAY,OAAO,CAAC;CACjC,MAAM,MAAM,CAAC,GAAG,IAAI,IAAI,SAAS,KAAI,MAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,OAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;CACnF,OAAO;EACL,UAAU,KAAK,gBAAgB,KAAK;EACpC,GAAI,IAAI,SAAS,CAAC,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;EACtD,GAAG,SAAS,KAAI,MAAK,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;EAC9D,SAAS,KAAK,SAAS,KAAK;EAC5B,UAAU,KAAK,aAAa,IAAI,IAAI,KAAK,MAAM,IAAI;CACrD,CAAC,CAAC,KAAK,IAAI;AACb;;AAGA,SAAgB,kBAAkB,KAAyB,SAAiB,EAAE,SAAS,SAA2B,CAAC,GAAW;CAC5H,MAAM,OAAO,YAAY,OAAO,CAAC;CACjC,MAAM,QAAQ,IAAI,SACd,CAAC,KAAK,MAAM,IAAI,KAAI,OAAM,GAAG,GAAG,GAAG,IAAI,eAAe;EAAE,GAAG;EAAI,QAAQ,cAAc,EAAE;CAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IACvH,CAAC,KAAK,IAAI;CACd,IAAI,SAAS,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC;CAC7C,MAAM,KAAK,KAAK,SAAS;CACzB,OAAO,MAAM,KAAK,GAAG;AACvB;;AAGA,SAAgB,kBAAkB,UAAsC,EAAE,SAAS,SAA2B,CAAC,GAAW;CACxH,IAAI,CAAC,SAAS,QAAQ,OAAO;CAC7B,MAAM,UAAU,YAAY,OAAO,CAAC;CACpC,OAAO,YAAY,OAAO,CAAC,SAAS,SAAS,KAAI,MAAK,GAAG,EAAE,GAAG,IAAI,eAAe,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC;AACtI"}
@@ -0,0 +1,57 @@
1
+ import { StructureMode } from "../../../settings/values.js";
2
+ import "../../../settings/index.js";
3
+ import { AiBlock, AiContextKind } from "../../../core/feature.js";
4
+ import { AgentOp, AgentOpFeedback } from "./agent-ops.js";
5
+ import { ModelMessage } from "ai";
6
+ //#region src/features/ai/protocol/chat.d.ts
7
+ /**
8
+ * One turn of the document chat; the conversation lives on the client and is sent in full with every message.
9
+ * A user turn carries the decisions on earlier proposals made since the previous turn (`feedback`); an assistant turn
10
+ * the edit operations it proposed (`ops`, possibly without any text) and how many invalid ones were dropped.
11
+ */
12
+ export type DocumentChatMessage = {
13
+ role: 'user';
14
+ content: string;
15
+ feedback?: AgentOpFeedback[];
16
+ } | {
17
+ role: 'assistant';
18
+ content: string;
19
+ ops?: AgentOp[];
20
+ dropped?: number;
21
+ };
22
+ /** Input limits (characters / messages) of `POST /api/ai/chat`; the client trims to fit before sending. */
23
+ export declare const CHAT_LIMITS: {
24
+ readonly document: 120000;
25
+ readonly message: 8000;
26
+ readonly messages: 40;
27
+ };
28
+ /** Link target prefix of a quote citation: `[„Zitat“](#block-<id>)`. */
29
+ export declare const CITATION_HREF_PREFIX = "#block-";
30
+ /**
31
+ * The block ID a citation link points to, or `null` for any other href. Also accepts a bare `#<id>`, which models
32
+ * write now and then despite the instructions; whether the ID exists is up to the caller.
33
+ */
34
+ export declare function citationBlockId(href: unknown): string | null;
35
+ /** A composite kind as the chat model learns it: the client sends the kinds of the editor's `aiContext` with every message. */
36
+ export type ChatCompositeKind = Pick<AiContextKind, 'id' | 'label' | 'fields' | 'purpose'>;
37
+ /** A host-defined block as the chat model learns it: the editor's `aiContext.blocks`, sent with every message. */
38
+ export type ChatBlock = AiBlock;
39
+ /**
40
+ * What the model may build and convert into: the editor's composite kinds and host blocks, the `convert` targets it
41
+ * offers, and the user's preferred structure of new content (settings `blocks.structure`).
42
+ */
43
+ export interface ChatBlockModel {
44
+ kinds: readonly ChatCompositeKind[];
45
+ blocks: readonly ChatBlock[];
46
+ targets: readonly string[];
47
+ structure: StructureMode;
48
+ }
49
+ /**
50
+ * Model messages for a chat turn: the history as sent (proposed operations as `edit_document` tool calls), with the
51
+ * current document placed in the last (user) message next to the scope, the latest decisions and the message —
52
+ * document content never goes into the system prompt (the editor's block model does). `scope`: IDs the edits are
53
+ * limited to (null: whole document).
54
+ */
55
+ export declare function documentChatMessages(messages: readonly DocumentChatMessage[], document: string, scope: readonly string[] | null, blockModel: ChatBlockModel): ModelMessage[];
56
+ //#endregion
57
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1,146 @@
1
+ import { AGENT_TOOL, agentFeedbackText, agentShownMessage } from "./agent-ops.js";
2
+ //#region src/features/ai/protocol/chat.ts
3
+ /** Input limits (characters / messages) of `POST /api/ai/chat`; the client trims to fit before sending. */
4
+ const CHAT_LIMITS = {
5
+ document: 12e4,
6
+ message: 8e3,
7
+ messages: 40
8
+ };
9
+ /** Link target prefix of a quote citation: `[„Zitat“](#block-<id>)`. */
10
+ const CITATION_HREF_PREFIX = "#block-";
11
+ /**
12
+ * The block ID a citation link points to, or `null` for any other href. Also accepts a bare `#<id>`, which models
13
+ * write now and then despite the instructions; whether the ID exists is up to the caller.
14
+ */
15
+ function citationBlockId(href) {
16
+ if (typeof href !== "string" || !href.startsWith("#")) return null;
17
+ return (href.startsWith("#block-") ? href.slice(7) : href.slice(1)) || null;
18
+ }
19
+ const EXAMPLE_ID = "0f3c9a52-7d1e-4b8a-9c2f-5e6d7a8b9c0d";
20
+ const FIELD_TYPES = {
21
+ text: "Text",
22
+ textarea: "Langtext",
23
+ date: "Datum JJJJ-MM-TT",
24
+ number: "Zahl",
25
+ select: "Auswahl"
26
+ };
27
+ /** `status (Status: open = Offen, doing = In Arbeit, done = Erledigt)`, `due (Fällig, Datum JJJJ-MM-TT)`. */
28
+ function fieldText(field) {
29
+ const values = field.options?.length ? `: ${field.options.map((option) => `${option.value} = ${option.label}`).join(", ")}` : `, ${FIELD_TYPES[field.type ?? "text"]}`;
30
+ return `${field.key} (${field.label}${values})`;
31
+ }
32
+ /** „Blockmodell“: the document's line format for composites and host blocks holding blocks, the fence the model writes composites in, and `convert`. */
33
+ function blockModelText({ kinds, blocks, targets, structure }) {
34
+ const composites = structure === "composite" && kinds.length > 0;
35
+ const example = kinds.find((kind) => kind.fields.some((field) => field.options?.length)) ?? kinds[0];
36
+ const exampleField = example?.fields.find((field) => field.options?.length);
37
+ const exampleMeta = exampleField ? ` {"${exampleField.key}":"${exampleField.options.at(-1).value}"}` : "";
38
+ return [
39
+ "Blockmodell:",
40
+ "Blocktypen: Absatz, Überschrift (#, ##, ###), Aufzählung („- “), nummerierte Liste („1. “), Zitat („> “), Codeblock, Redebeitrag („**Name:** Text“) und Bausteine. Listenpunkte und Zitate stehen nach der ID mit ihrem Zeichen; jeder Absatz darin hat eine eigene ID.",
41
+ ...blocks.length ? [`Eigene Blöcke: ${blocks.map((block) => `${block.id} (${block.label}): ${block.description} Markdown-Form: „${block.syntax.replace(/\n/g, "\\n")}“. Beispiel: „${block.example.replace(/\n/g, "\\n")}“`).join(" ")}`, "Im Dokument beginnt ein eigener Block mit Inhaltsblöcken mit der Zeile „[ID] <erste Zeile seiner Markdown-Form>“; seine Inhaltsblöcke folgen als eigene Zeilen mit IDs, um zwei Leerzeichen eingerückt. „update“ auf seine ID mit vollständigem Markdown ersetzt den ganzen Block; „add“ nach einem seiner Inhaltsblöcke fügt innerhalb des Blocks ein, ein Block derselben Art danach."] : [],
42
+ composites ? "Bevorzugte Gliederung: Bausteine. Neue Inhalte gliederst du mit Bausteinen statt mit Überschriften; Unterabschnitte sind verschachtelte Bausteine (Zaun im Zaun, jeder Zaun endet mit einer eigenen Zeile „:::“). Markdown-Überschriften schreibst du nur als Titelzeile eines Bausteins." : "Bevorzugte Gliederung: Überschriften. Neue Inhalte gliederst du mit Überschriften (##, ###) statt mit Bausteinen; einen Baustein schreibst du nur, wenn ausdrücklich ein Baustein (Abschnitt, Aufgabe, Notiz …) verlangt wird oder du einen bestehenden Baustein änderst.",
43
+ ...kinds.length ? [
44
+ `Bausteine sind Blöcke mit Titel, Beschreibung, Tags, Feldern und eigenen Inhaltsblöcken. Im Dokument beginnt ein Baustein mit der Kopfzeile „[ID] ::: Art {"feld":"wert"} | Titel | Beschreibung | Tags: #a #b“ (die Felder als JSON nur, wenn welche gesetzt sind; leere Teile fehlen samt ihrem „|“). Seine Inhaltsblöcke folgen als eigene Zeilen mit ihren IDs, um zwei Leerzeichen eingerückt; eine Zeile „ :::“ ohne ID schließt ihn.`,
45
+ `Arten von Bausteinen: ${kinds.map((kind) => `${kind.id} (${kind.label}${kind.purpose ? `: ${kind.purpose}` : ""}; ${kind.fields.length ? `Felder: ${kind.fields.map(fieldText).join(", ")}` : "keine Felder"})`).join("; ")}.`,
46
+ `In „markdown“ schreibst du einen Baustein ohne IDs und ohne Einrückung als Zaun: die Zeile „::: Art {"feld":"wert"}“ (Felder als JSON, nur gesetzte), dann „## Titel“, „> Beschreibung“ und „Tags: #a #b“ (jeweils nur, wenn vorhanden), dann die Inhaltsblöcke als Markdown, zuletzt die Zeile „:::“. Beispiel: „::: ${example?.id ?? "note"}${exampleMeta}\\n## Angebot prüfen\\n- Preise vergleichen\\n- Rückmeldung an Anna\\n:::“.`,
47
+ "„update“ auf einen Baustein mit Markdown ohne :::-Zaun ersetzt nur seinen Inhalt (Kinder); mit Zaun den ganzen Baustein (Art, Felder, Titel, Beschreibung, Tags und Inhalt)."
48
+ ] : [],
49
+ `„convert“ wandelt den Block „id“ in den Blocktyp „to“ um und behält seinen Inhalt. Erlaubte Werte für „to“: ${targets.join(", ")}. Eine Überschrift, die zum Baustein wird, nimmt die folgenden Blöcke bis zur nächsten Überschrift gleicher oder höherer Ebene als Inhalt mit; ein Baustein, der zu einem anderen Blocktyp wird, behält Beschreibung, Tags und Felder als Textzeilen; wird er zur Überschrift, werden seine inneren Bausteine zu Unterüberschriften.`,
50
+ "Sollen sich Blocktyp und Inhalt oder Felder zugleich ändern (z. B. ein Absatz wird zu einer Aufgabe mit Status), nimm statt „convert“ ein „update“ mit dem vollständigen neuen Markdown samt :::-Zaun; jeder Block bekommt höchstens eine Operation."
51
+ ];
52
+ }
53
+ /** The system prompt: answering with citations, editing through `edit_document`, and the editor's block model. */
54
+ function chatSystem(blockModel) {
55
+ return [
56
+ "Du beantwortest Fragen zu einem Dokument, meist dem Transkript eines Gesprächs, und bearbeitest es auf Wunsch. Das Dokument steht in der letzten Nachricht der Nutzerin bzw. des Nutzers und ist der aktuelle Stand; frühere Nachrichten bezogen sich womöglich auf einen älteren Stand.",
57
+ `Jede Zeile des Dokuments beginnt mit der ID ihres Blocks in eckigen Klammern, z. B. \`[${EXAMPLE_ID}] **Anna:** Wir starten im Mai.\`. Redebeiträge beginnen nach der ID mit dem fett gesetzten Namen der Sprecherin bzw. des Sprechers und einem Doppelpunkt.`,
58
+ "",
59
+ "Fragen:",
60
+ `Belege deine Antworten mit wörtlichen Zitaten: ein zusammenhängender, unveränderter Ausschnitt aus einem einzigen Block. Jedes Zitat ist ein Markdown-Link, dessen Ziel „${CITATION_HREF_PREFIX}“ gefolgt von der vollständigen ID dieses Blocks ist: [„Zitat“](${CITATION_HREF_PREFIX}ID).`,
61
+ `Beispiel zur Zeile oben: Anna kündigt den Start an: [„Wir starten im Mai.“](${CITATION_HREF_PREFIX}${EXAMPLE_ID})`,
62
+ "Verwende nur IDs, die im Dokument vorkommen, und nenne IDs nie außerhalb solcher Links.",
63
+ "Steht die Antwort nicht im Dokument, sag das ehrlich, statt etwas zu erfinden.",
64
+ "Antworte knapp in Markdown (Absätze, Aufzählungen, **fett**) und in der Sprache der Frage.",
65
+ "",
66
+ "Änderungen:",
67
+ `Bittet die Nutzerin bzw. der Nutzer darum, das Dokument zu ändern (kürzen, umformulieren, ergänzen, löschen, umwandeln …), rufe das Werkzeug ${AGENT_TOOL} auf, statt den neuen Text im Chat zu schreiben. Schreib davor höchstens ein bis zwei Sätze dazu, was du änderst. Bei Fragen rufst du das Werkzeug nicht auf.`,
68
+ "Operationen: „update“ ersetzt den Inhalt des Blocks „id“ durch „markdown“; „delete“ löscht den Block „id“; „add“ fügt „markdown“ (ein oder mehrere Blöcke, durch Leerzeilen getrennt) nach dem Block „afterId“ ein, afterId null bedeutet am Dokumentanfang; „convert“ wandelt den Block „id“ in den Blocktyp „to“ um.",
69
+ "„markdown“ enthält nur den neuen Inhalt, ohne Block-ID und ohne das Listen- oder Zitatzeichen der Zeile. Redebeiträge behalten den fett gesetzten Namen mit Doppelpunkt am Anfang; ein anderer Name wechselt die Sprecherin bzw. den Sprecher. Neue Redebeiträge schreibst du ebenso als „**Name:** Text“.",
70
+ "Ändere nur die Blöcke, die die Bitte betrifft; lass unveränderte Blöcke weg. Jeder Block höchstens einmal. Verwende nur IDs aus dem Dokument. Nennt die Nachricht einen Bearbeitungsbereich, beziehen sich alle IDs und afterIds ausschließlich auf Blöcke daraus.",
71
+ "Jede Änderung wird der Nutzerin bzw. dem Nutzer im Dokument zur Prüfung angezeigt und einzeln übernommen oder abgelehnt. Die Entscheidungen erhältst du mit einer späteren Nachricht („Entscheidungen zu deinen letzten Vorschlägen: …“). Geh auf abgelehnte Vorschläge ein und wiederhole sie nicht unverändert.",
72
+ "",
73
+ ...blockModelText(blockModel)
74
+ ].join("\n");
75
+ }
76
+ /** A user turn as the model reads it: decisions on earlier proposals first, then the message. */
77
+ function userText(content, feedback) {
78
+ const decisions = agentFeedbackText(feedback ?? []);
79
+ return decisions ? `${decisions}\n\nNachricht: ${content}` : content;
80
+ }
81
+ /**
82
+ * Model messages for a chat turn: the history as sent (proposed operations as `edit_document` tool calls), with the
83
+ * current document placed in the last (user) message next to the scope, the latest decisions and the message —
84
+ * document content never goes into the system prompt (the editor's block model does). `scope`: IDs the edits are
85
+ * limited to (null: whole document).
86
+ */
87
+ function documentChatMessages(messages, document, scope, blockModel) {
88
+ const history = messages.slice(0, -1).flatMap((message, index) => {
89
+ if (message.role === "user") return [{
90
+ role: "user",
91
+ content: userText(message.content, message.feedback)
92
+ }];
93
+ if (!message.ops?.length && !message.dropped) return [{
94
+ role: "assistant",
95
+ content: message.content
96
+ }];
97
+ const ops = message.ops ?? [];
98
+ const toolCallId = `edit_${index}`;
99
+ return [{
100
+ role: "assistant",
101
+ content: [...message.content ? [{
102
+ type: "text",
103
+ text: message.content
104
+ }] : [], {
105
+ type: "tool-call",
106
+ toolCallId,
107
+ toolName: AGENT_TOOL,
108
+ input: { ops: ops.map(({ op: _op, ...rest }) => rest) }
109
+ }]
110
+ }, {
111
+ role: "tool",
112
+ content: [{
113
+ type: "tool-result",
114
+ toolCallId,
115
+ toolName: AGENT_TOOL,
116
+ output: {
117
+ type: "text",
118
+ value: agentShownMessage(ops, message.dropped ?? 0)
119
+ }
120
+ }]
121
+ }];
122
+ });
123
+ const last = messages.at(-1);
124
+ const range = scope ? `Bearbeitungsbereich: die Auswahl der Nutzerin bzw. des Nutzers. Änderungen (id und afterId) nur an diesen Blöcken: ${scope.join(", ")}` : "Bearbeitungsbereich: das ganze Dokument.";
125
+ const decisions = agentFeedbackText(last.feedback ?? []);
126
+ return [
127
+ {
128
+ role: "system",
129
+ content: chatSystem(blockModel)
130
+ },
131
+ ...history,
132
+ {
133
+ role: "user",
134
+ content: [
135
+ `Dokument (aktueller Stand, eine Zeile pro Block, beginnend mit der Block-ID):\n"""\n${document}\n"""`,
136
+ range,
137
+ ...decisions ? [decisions] : [],
138
+ `Nachricht: ${last.content}`
139
+ ].join("\n\n")
140
+ }
141
+ ];
142
+ }
143
+ //#endregion
144
+ export { CHAT_LIMITS, CITATION_HREF_PREFIX, citationBlockId, documentChatMessages };
145
+
146
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","names":[],"sources":["../../../../src/features/ai/protocol/chat.ts"],"sourcesContent":["// i18n-ignore-file: model-facing chat system prompt and messages (German prompts stay German whatever the editor's language)\nimport type { ModelMessage } from 'ai'\nimport type { AiBlock, AiContextKind } from '../../../core/feature'\nimport type { StructureMode } from '../../../settings'\nimport { AGENT_TOOL, type AgentOp, type AgentOpFeedback, agentFeedbackText, agentShownMessage } from './agent-ops'\n\n/**\n * One turn of the document chat; the conversation lives on the client and is sent in full with every message.\n * A user turn carries the decisions on earlier proposals made since the previous turn (`feedback`); an assistant turn\n * the edit operations it proposed (`ops`, possibly without any text) and how many invalid ones were dropped.\n */\nexport type DocumentChatMessage =\n | { role: 'user', content: string, feedback?: AgentOpFeedback[] }\n | { role: 'assistant', content: string, ops?: AgentOp[], dropped?: number }\n\n/** Input limits (characters / messages) of `POST /api/ai/chat`; the client trims to fit before sending. */\nexport const CHAT_LIMITS = { document: 120000, message: 8000, messages: 40 } as const\n\n/** Link target prefix of a quote citation: `[„Zitat“](#block-<id>)`. */\nexport const CITATION_HREF_PREFIX = '#block-'\n\n/**\n * The block ID a citation link points to, or `null` for any other href. Also accepts a bare `#<id>`, which models\n * write now and then despite the instructions; whether the ID exists is up to the caller.\n */\nexport function citationBlockId(href: unknown): string | null {\n if (typeof href !== 'string' || !href.startsWith('#')) return null\n return (href.startsWith(CITATION_HREF_PREFIX) ? href.slice(CITATION_HREF_PREFIX.length) : href.slice(1)) || null\n}\n\nconst EXAMPLE_ID = '0f3c9a52-7d1e-4b8a-9c2f-5e6d7a8b9c0d'\n\n/** A composite kind as the chat model learns it: the client sends the kinds of the editor's `aiContext` with every message. */\nexport type ChatCompositeKind = Pick<AiContextKind, 'id' | 'label' | 'fields' | 'purpose'>\ntype ChatField = ChatCompositeKind['fields'][number]\n\n/** A host-defined block as the chat model learns it: the editor's `aiContext.blocks`, sent with every message. */\nexport type ChatBlock = AiBlock\n\n/**\n * What the model may build and convert into: the editor's composite kinds and host blocks, the `convert` targets it\n * offers, and the user's preferred structure of new content (settings `blocks.structure`).\n */\nexport interface ChatBlockModel { kinds: readonly ChatCompositeKind[], blocks: readonly ChatBlock[], targets: readonly string[], structure: StructureMode }\n\nconst FIELD_TYPES: Record<NonNullable<ChatField['type']>, string> = { text: 'Text', textarea: 'Langtext', date: 'Datum JJJJ-MM-TT', number: 'Zahl', select: 'Auswahl' }\n\n/** `status (Status: open = Offen, doing = In Arbeit, done = Erledigt)`, `due (Fällig, Datum JJJJ-MM-TT)`. */\nfunction fieldText(field: ChatField): string {\n const values = field.options?.length ? `: ${field.options.map(option => `${option.value} = ${option.label}`).join(', ')}` : `, ${FIELD_TYPES[field.type ?? 'text']}`\n return `${field.key} (${field.label}${values})`\n}\n\n/** „Blockmodell“: the document's line format for composites and host blocks holding blocks, the fence the model writes composites in, and `convert`. */\nfunction blockModelText({ kinds, blocks, targets, structure }: ChatBlockModel): string[] {\n const composites = structure === 'composite' && kinds.length > 0\n const example = kinds.find(kind => kind.fields.some(field => field.options?.length)) ?? kinds[0]\n const exampleField = example?.fields.find(field => field.options?.length)\n const exampleMeta = exampleField ? ` {\"${exampleField.key}\":\"${exampleField.options!.at(-1)!.value}\"}` : ''\n return [\n 'Blockmodell:',\n 'Blocktypen: Absatz, Überschrift (#, ##, ###), Aufzählung („- “), nummerierte Liste („1. “), Zitat („> “), Codeblock, Redebeitrag („**Name:** Text“) und Bausteine. Listenpunkte und Zitate stehen nach der ID mit ihrem Zeichen; jeder Absatz darin hat eine eigene ID.',\n ...(blocks.length\n ? [\n `Eigene Blöcke: ${blocks.map(block => `${block.id} (${block.label}): ${block.description} Markdown-Form: „${block.syntax.replace(/\\n/g, '\\\\n')}“. Beispiel: „${block.example.replace(/\\n/g, '\\\\n')}“`).join(' ')}`,\n 'Im Dokument beginnt ein eigener Block mit Inhaltsblöcken mit der Zeile „[ID] <erste Zeile seiner Markdown-Form>“; seine Inhaltsblöcke folgen als eigene Zeilen mit IDs, um zwei Leerzeichen eingerückt. „update“ auf seine ID mit vollständigem Markdown ersetzt den ganzen Block; „add“ nach einem seiner Inhaltsblöcke fügt innerhalb des Blocks ein, ein Block derselben Art danach.',\n ]\n : []),\n composites\n ? 'Bevorzugte Gliederung: Bausteine. Neue Inhalte gliederst du mit Bausteinen statt mit Überschriften; Unterabschnitte sind verschachtelte Bausteine (Zaun im Zaun, jeder Zaun endet mit einer eigenen Zeile „:::“). Markdown-Überschriften schreibst du nur als Titelzeile eines Bausteins.'\n : 'Bevorzugte Gliederung: Überschriften. Neue Inhalte gliederst du mit Überschriften (##, ###) statt mit Bausteinen; einen Baustein schreibst du nur, wenn ausdrücklich ein Baustein (Abschnitt, Aufgabe, Notiz …) verlangt wird oder du einen bestehenden Baustein änderst.',\n ...(kinds.length\n ? [\n `Bausteine sind Blöcke mit Titel, Beschreibung, Tags, Feldern und eigenen Inhaltsblöcken. Im Dokument beginnt ein Baustein mit der Kopfzeile „[ID] ::: Art {\"feld\":\"wert\"} | Titel | Beschreibung | Tags: #a #b“ (die Felder als JSON nur, wenn welche gesetzt sind; leere Teile fehlen samt ihrem „|“). Seine Inhaltsblöcke folgen als eigene Zeilen mit ihren IDs, um zwei Leerzeichen eingerückt; eine Zeile „ :::“ ohne ID schließt ihn.`,\n `Arten von Bausteinen: ${kinds.map(kind => `${kind.id} (${kind.label}${kind.purpose ? `: ${kind.purpose}` : ''}; ${kind.fields.length ? `Felder: ${kind.fields.map(fieldText).join(', ')}` : 'keine Felder'})`).join('; ')}.`,\n `In „markdown“ schreibst du einen Baustein ohne IDs und ohne Einrückung als Zaun: die Zeile „::: Art {\"feld\":\"wert\"}“ (Felder als JSON, nur gesetzte), dann „## Titel“, „> Beschreibung“ und „Tags: #a #b“ (jeweils nur, wenn vorhanden), dann die Inhaltsblöcke als Markdown, zuletzt die Zeile „:::“. Beispiel: „::: ${example?.id ?? 'note'}${exampleMeta}\\\\n## Angebot prüfen\\\\n- Preise vergleichen\\\\n- Rückmeldung an Anna\\\\n:::“.`,\n '„update“ auf einen Baustein mit Markdown ohne :::-Zaun ersetzt nur seinen Inhalt (Kinder); mit Zaun den ganzen Baustein (Art, Felder, Titel, Beschreibung, Tags und Inhalt).',\n ]\n : []),\n `„convert“ wandelt den Block „id“ in den Blocktyp „to“ um und behält seinen Inhalt. Erlaubte Werte für „to“: ${targets.join(', ')}. Eine Überschrift, die zum Baustein wird, nimmt die folgenden Blöcke bis zur nächsten Überschrift gleicher oder höherer Ebene als Inhalt mit; ein Baustein, der zu einem anderen Blocktyp wird, behält Beschreibung, Tags und Felder als Textzeilen; wird er zur Überschrift, werden seine inneren Bausteine zu Unterüberschriften.`,\n 'Sollen sich Blocktyp und Inhalt oder Felder zugleich ändern (z. B. ein Absatz wird zu einer Aufgabe mit Status), nimm statt „convert“ ein „update“ mit dem vollständigen neuen Markdown samt :::-Zaun; jeder Block bekommt höchstens eine Operation.',\n ]\n}\n\n/** The system prompt: answering with citations, editing through `edit_document`, and the editor's block model. */\nfunction chatSystem(blockModel: ChatBlockModel): string {\n return [\n 'Du beantwortest Fragen zu einem Dokument, meist dem Transkript eines Gesprächs, und bearbeitest es auf Wunsch. Das Dokument steht in der letzten Nachricht der Nutzerin bzw. des Nutzers und ist der aktuelle Stand; frühere Nachrichten bezogen sich womöglich auf einen älteren Stand.',\n `Jede Zeile des Dokuments beginnt mit der ID ihres Blocks in eckigen Klammern, z. B. \\`[${EXAMPLE_ID}] **Anna:** Wir starten im Mai.\\`. Redebeiträge beginnen nach der ID mit dem fett gesetzten Namen der Sprecherin bzw. des Sprechers und einem Doppelpunkt.`,\n '',\n 'Fragen:',\n `Belege deine Antworten mit wörtlichen Zitaten: ein zusammenhängender, unveränderter Ausschnitt aus einem einzigen Block. Jedes Zitat ist ein Markdown-Link, dessen Ziel „${CITATION_HREF_PREFIX}“ gefolgt von der vollständigen ID dieses Blocks ist: [„Zitat“](${CITATION_HREF_PREFIX}ID).`,\n `Beispiel zur Zeile oben: Anna kündigt den Start an: [„Wir starten im Mai.“](${CITATION_HREF_PREFIX}${EXAMPLE_ID})`,\n 'Verwende nur IDs, die im Dokument vorkommen, und nenne IDs nie außerhalb solcher Links.',\n 'Steht die Antwort nicht im Dokument, sag das ehrlich, statt etwas zu erfinden.',\n 'Antworte knapp in Markdown (Absätze, Aufzählungen, **fett**) und in der Sprache der Frage.',\n '',\n 'Änderungen:',\n `Bittet die Nutzerin bzw. der Nutzer darum, das Dokument zu ändern (kürzen, umformulieren, ergänzen, löschen, umwandeln …), rufe das Werkzeug ${AGENT_TOOL} auf, statt den neuen Text im Chat zu schreiben. Schreib davor höchstens ein bis zwei Sätze dazu, was du änderst. Bei Fragen rufst du das Werkzeug nicht auf.`,\n 'Operationen: „update“ ersetzt den Inhalt des Blocks „id“ durch „markdown“; „delete“ löscht den Block „id“; „add“ fügt „markdown“ (ein oder mehrere Blöcke, durch Leerzeilen getrennt) nach dem Block „afterId“ ein, afterId null bedeutet am Dokumentanfang; „convert“ wandelt den Block „id“ in den Blocktyp „to“ um.',\n '„markdown“ enthält nur den neuen Inhalt, ohne Block-ID und ohne das Listen- oder Zitatzeichen der Zeile. Redebeiträge behalten den fett gesetzten Namen mit Doppelpunkt am Anfang; ein anderer Name wechselt die Sprecherin bzw. den Sprecher. Neue Redebeiträge schreibst du ebenso als „**Name:** Text“.',\n 'Ändere nur die Blöcke, die die Bitte betrifft; lass unveränderte Blöcke weg. Jeder Block höchstens einmal. Verwende nur IDs aus dem Dokument. Nennt die Nachricht einen Bearbeitungsbereich, beziehen sich alle IDs und afterIds ausschließlich auf Blöcke daraus.',\n 'Jede Änderung wird der Nutzerin bzw. dem Nutzer im Dokument zur Prüfung angezeigt und einzeln übernommen oder abgelehnt. Die Entscheidungen erhältst du mit einer späteren Nachricht („Entscheidungen zu deinen letzten Vorschlägen: …“). Geh auf abgelehnte Vorschläge ein und wiederhole sie nicht unverändert.',\n '',\n ...blockModelText(blockModel),\n ].join('\\n')\n}\n\n/** A user turn as the model reads it: decisions on earlier proposals first, then the message. */\nfunction userText(content: string, feedback: readonly AgentOpFeedback[] | undefined): string {\n const decisions = agentFeedbackText(feedback ?? [])\n return decisions ? `${decisions}\\n\\nNachricht: ${content}` : content\n}\n\n/**\n * Model messages for a chat turn: the history as sent (proposed operations as `edit_document` tool calls), with the\n * current document placed in the last (user) message next to the scope, the latest decisions and the message —\n * document content never goes into the system prompt (the editor's block model does). `scope`: IDs the edits are\n * limited to (null: whole document).\n */\nexport function documentChatMessages(messages: readonly DocumentChatMessage[], document: string, scope: readonly string[] | null, blockModel: ChatBlockModel): ModelMessage[] {\n const history = messages.slice(0, -1).flatMap((message, index): ModelMessage[] => {\n if (message.role === 'user') return [{ role: 'user', content: userText(message.content, message.feedback) }]\n if (!message.ops?.length && !message.dropped) return [{ role: 'assistant', content: message.content }]\n const ops = message.ops ?? []\n const toolCallId = `edit_${index}`\n return [\n {\n role: 'assistant',\n content: [\n ...(message.content ? [{ type: 'text' as const, text: message.content }] : []),\n { type: 'tool-call', toolCallId, toolName: AGENT_TOOL, input: { ops: ops.map(({ op: _op, ...rest }) => rest) } },\n ],\n },\n {\n role: 'tool',\n content: [{ type: 'tool-result', toolCallId, toolName: AGENT_TOOL, output: { type: 'text', value: agentShownMessage(ops, message.dropped ?? 0) } }],\n },\n ]\n })\n const last = messages.at(-1)! as Extract<DocumentChatMessage, { role: 'user' }>\n const range = scope\n ? `Bearbeitungsbereich: die Auswahl der Nutzerin bzw. des Nutzers. Änderungen (id und afterId) nur an diesen Blöcken: ${scope.join(', ')}`\n : 'Bearbeitungsbereich: das ganze Dokument.'\n const decisions = agentFeedbackText(last.feedback ?? [])\n return [\n { role: 'system', content: chatSystem(blockModel) },\n ...history,\n {\n role: 'user',\n content: [\n `Dokument (aktueller Stand, eine Zeile pro Block, beginnend mit der Block-ID):\\n\"\"\"\\n${document}\\n\"\"\"`,\n range,\n ...(decisions ? [decisions] : []),\n `Nachricht: ${last.content}`,\n ].join('\\n\\n'),\n },\n ]\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ //#region src/features/ai/protocol/complete.d.ts
2
+ /** Inline autocomplete (ghost text): input and output limits in characters. The client truncates `before` to fit. */
3
+ export declare const AI_COMPLETE_LIMITS: {
4
+ readonly before: 4000;
5
+ readonly output: 160;
6
+ };
7
+ export interface AiCompleteMessage {
8
+ role: 'system' | 'user' | 'assistant';
9
+ content: string;
10
+ }
11
+ /** Chat messages for a continuation of `before`; the document text stays out of the system prompt. */
12
+ export declare function completeMessages(before: string): AiCompleteMessage[];
13
+ /** True once the streamed `raw` output holds a full suggestion, so the upstream request can stop early. */
14
+ export declare function completionReady(raw: string): boolean;
15
+ /**
16
+ * Turns raw model output into one ghost suggestion for the text `before` the caret: one line, one sentence, capped
17
+ * length, '' when the output does not fit the caret.
18
+ */
19
+ export declare function cleanCompletion(raw: string, before: string): string;
20
+ //#endregion
21
+ //# sourceMappingURL=complete.d.ts.map