@forgedevstack/ink 1.1.3 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/CHANGELOG.md +60 -1
  2. package/dist/common-components/Box/Box.cjs +1 -0
  3. package/dist/common-components/Box/Box.const.cjs +1 -0
  4. package/dist/common-components/Box/Box.const.d.ts +3 -0
  5. package/dist/common-components/Box/Box.const.d.ts.map +1 -0
  6. package/dist/common-components/Box/Box.const.js +5 -0
  7. package/dist/common-components/Box/Box.d.ts +4 -0
  8. package/dist/common-components/Box/Box.d.ts.map +1 -0
  9. package/dist/common-components/Box/Box.js +14 -0
  10. package/dist/common-components/Box/Box.types.d.ts +6 -0
  11. package/dist/common-components/Box/Box.types.d.ts.map +1 -0
  12. package/dist/common-components/Box/index.d.ts +3 -0
  13. package/dist/common-components/Box/index.d.ts.map +1 -0
  14. package/dist/common-components/Button/Button.cjs +1 -0
  15. package/dist/common-components/Button/Button.const.cjs +1 -0
  16. package/dist/common-components/Button/Button.const.d.ts +5 -0
  17. package/dist/common-components/Button/Button.const.d.ts.map +1 -0
  18. package/dist/common-components/Button/Button.const.js +7 -0
  19. package/dist/common-components/Button/Button.d.ts +4 -0
  20. package/dist/common-components/Button/Button.d.ts.map +1 -0
  21. package/dist/common-components/Button/Button.js +28 -0
  22. package/dist/common-components/Button/Button.types.d.ts +6 -0
  23. package/dist/common-components/Button/Button.types.d.ts.map +1 -0
  24. package/dist/common-components/Button/index.d.ts +3 -0
  25. package/dist/common-components/Button/index.d.ts.map +1 -0
  26. package/dist/common-components/Canvas/Canvas.cjs +1 -0
  27. package/dist/common-components/Canvas/Canvas.const.cjs +1 -0
  28. package/dist/common-components/Canvas/Canvas.const.d.ts +2 -0
  29. package/dist/common-components/Canvas/Canvas.const.d.ts.map +1 -0
  30. package/dist/common-components/Canvas/Canvas.const.js +4 -0
  31. package/dist/common-components/Canvas/Canvas.d.ts +4 -0
  32. package/dist/common-components/Canvas/Canvas.d.ts.map +1 -0
  33. package/dist/common-components/Canvas/Canvas.js +14 -0
  34. package/dist/common-components/Canvas/Canvas.types.d.ts +5 -0
  35. package/dist/common-components/Canvas/Canvas.types.d.ts.map +1 -0
  36. package/dist/common-components/Canvas/index.d.ts +3 -0
  37. package/dist/common-components/Canvas/index.d.ts.map +1 -0
  38. package/dist/common-components/ContextMenu/ContextMenu.cjs +1 -0
  39. package/dist/common-components/ContextMenu/ContextMenu.const.cjs +1 -0
  40. package/dist/common-components/ContextMenu/ContextMenu.const.d.ts +11 -0
  41. package/dist/common-components/ContextMenu/ContextMenu.const.d.ts.map +1 -0
  42. package/dist/common-components/ContextMenu/ContextMenu.const.js +14 -0
  43. package/dist/common-components/ContextMenu/ContextMenu.d.ts +4 -0
  44. package/dist/common-components/ContextMenu/ContextMenu.d.ts.map +1 -0
  45. package/dist/common-components/ContextMenu/ContextMenu.js +69 -0
  46. package/dist/common-components/ContextMenu/ContextMenu.types.d.ts +33 -0
  47. package/dist/common-components/ContextMenu/ContextMenu.types.d.ts.map +1 -0
  48. package/dist/common-components/ContextMenu/ContextMenu.utils.cjs +1 -0
  49. package/dist/common-components/ContextMenu/ContextMenu.utils.d.ts +3 -0
  50. package/dist/common-components/ContextMenu/ContextMenu.utils.d.ts.map +1 -0
  51. package/dist/common-components/ContextMenu/ContextMenu.utils.js +11 -0
  52. package/dist/common-components/ContextMenu/ContextMenu.utils.test.d.ts +2 -0
  53. package/dist/common-components/ContextMenu/ContextMenu.utils.test.d.ts.map +1 -0
  54. package/dist/common-components/ContextMenu/index.d.ts +5 -0
  55. package/dist/common-components/ContextMenu/index.d.ts.map +1 -0
  56. package/dist/common-components/Field/Field.cjs +1 -0
  57. package/dist/common-components/Field/Field.const.cjs +1 -0
  58. package/dist/common-components/Field/Field.const.d.ts +3 -0
  59. package/dist/common-components/Field/Field.const.d.ts.map +1 -0
  60. package/dist/common-components/Field/Field.const.js +5 -0
  61. package/dist/common-components/Field/Field.d.ts +4 -0
  62. package/dist/common-components/Field/Field.d.ts.map +1 -0
  63. package/dist/common-components/Field/Field.js +26 -0
  64. package/dist/common-components/Field/Field.types.d.ts +10 -0
  65. package/dist/common-components/Field/Field.types.d.ts.map +1 -0
  66. package/dist/common-components/Field/index.d.ts +3 -0
  67. package/dist/common-components/Field/index.d.ts.map +1 -0
  68. package/dist/common-components/icons/GripIcon.cjs +1 -0
  69. package/dist/common-components/icons/GripIcon.d.ts +3 -0
  70. package/dist/common-components/icons/GripIcon.d.ts.map +1 -0
  71. package/dist/common-components/icons/GripIcon.js +13 -0
  72. package/dist/common-components/icons/Icon.const.cjs +1 -0
  73. package/dist/common-components/icons/Icon.const.d.ts +7 -0
  74. package/dist/common-components/icons/Icon.const.d.ts.map +1 -0
  75. package/dist/common-components/icons/Icon.const.js +10 -0
  76. package/dist/common-components/icons/RedoIcon.cjs +1 -0
  77. package/dist/common-components/icons/RedoIcon.d.ts +3 -0
  78. package/dist/common-components/icons/RedoIcon.d.ts.map +1 -0
  79. package/dist/common-components/icons/RedoIcon.js +9 -0
  80. package/dist/common-components/icons/UndoIcon.cjs +1 -0
  81. package/dist/common-components/icons/UndoIcon.d.ts +3 -0
  82. package/dist/common-components/icons/UndoIcon.d.ts.map +1 -0
  83. package/dist/common-components/icons/UndoIcon.js +9 -0
  84. package/dist/common-components/icons/index.d.ts +4 -0
  85. package/dist/common-components/icons/index.d.ts.map +1 -0
  86. package/dist/common-components/index.d.ts +12 -0
  87. package/dist/common-components/index.d.ts.map +1 -0
  88. package/dist/components/InkEditor/InkEditor.cjs +1 -1
  89. package/dist/components/InkEditor/InkEditor.d.ts.map +1 -1
  90. package/dist/components/InkEditor/InkEditor.js +917 -432
  91. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.cjs +1 -0
  92. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.const.cjs +1 -0
  93. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.const.d.ts +7 -0
  94. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.const.d.ts.map +1 -0
  95. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.const.js +10 -0
  96. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.d.ts +4 -0
  97. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.d.ts.map +1 -0
  98. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.js +17 -0
  99. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.types.d.ts +12 -0
  100. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.types.d.ts.map +1 -0
  101. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.utils.cjs +1 -0
  102. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.utils.d.ts +4 -0
  103. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.utils.d.ts.map +1 -0
  104. package/dist/components/InkEditor/components/AiAutocomplete/AiAutocomplete.utils.js +25 -0
  105. package/dist/components/InkEditor/components/AiAutocomplete/index.d.ts +5 -0
  106. package/dist/components/InkEditor/components/AiAutocomplete/index.d.ts.map +1 -0
  107. package/dist/components/InkEditor/components/AiPanel/AiPanel.cjs +1 -1
  108. package/dist/components/InkEditor/components/AiPanel/AiPanel.d.ts +1 -0
  109. package/dist/components/InkEditor/components/AiPanel/AiPanel.d.ts.map +1 -1
  110. package/dist/components/InkEditor/components/AiPanel/AiPanel.js +53 -49
  111. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.cjs +1 -1
  112. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.const.cjs +1 -0
  113. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.const.d.ts +15 -0
  114. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.const.d.ts.map +1 -0
  115. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.const.js +18 -0
  116. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.d.ts +1 -6
  117. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.d.ts.map +1 -1
  118. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.js +53 -8
  119. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.types.d.ts +9 -0
  120. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.types.d.ts.map +1 -0
  121. package/dist/components/InkEditor/components/BlockHandles/index.d.ts +2 -1
  122. package/dist/components/InkEditor/components/BlockHandles/index.d.ts.map +1 -1
  123. package/dist/components/InkEditor/components/FindReplace/FindReplace.cjs +1 -1
  124. package/dist/components/InkEditor/components/FindReplace/FindReplace.d.ts.map +1 -1
  125. package/dist/components/InkEditor/components/FindReplace/FindReplace.js +63 -44
  126. package/dist/components/InkEditor/components/FindReplace/FindReplace.types.d.ts +2 -0
  127. package/dist/components/InkEditor/components/FindReplace/FindReplace.types.d.ts.map +1 -1
  128. package/dist/components/InkEditor/components/FindReplace/index.d.ts +1 -1
  129. package/dist/components/InkEditor/components/FindReplace/index.d.ts.map +1 -1
  130. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.cjs +1 -0
  131. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.const.cjs +1 -0
  132. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.const.d.ts +25 -0
  133. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.const.d.ts.map +1 -0
  134. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.const.js +28 -0
  135. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.d.ts +4 -0
  136. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.d.ts.map +1 -0
  137. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.js +140 -0
  138. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.types.d.ts +32 -0
  139. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.types.d.ts.map +1 -0
  140. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.cjs +1 -0
  141. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.d.ts +4 -0
  142. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.d.ts.map +1 -0
  143. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.js +16 -0
  144. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.test.d.ts +2 -0
  145. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.utils.test.d.ts.map +1 -0
  146. package/dist/components/InkEditor/components/InlineToolbar/index.d.ts +5 -0
  147. package/dist/components/InkEditor/components/InlineToolbar/index.d.ts.map +1 -0
  148. package/dist/components/InkEditor/components/SignPad/SignPad.cjs +1 -1
  149. package/dist/components/InkEditor/components/SignPad/SignPad.d.ts.map +1 -1
  150. package/dist/components/InkEditor/components/SignPad/SignPad.js +47 -51
  151. package/dist/components/InkEditor/components/ToolbarButton/ToolbarButton.cjs +1 -1
  152. package/dist/components/InkEditor/components/ToolbarButton/ToolbarButton.d.ts.map +1 -1
  153. package/dist/components/InkEditor/components/ToolbarButton/ToolbarButton.js +20 -16
  154. package/dist/components/InkEditor/components/ToolbarColorPicker/ToolbarColorPicker.cjs +1 -1
  155. package/dist/components/InkEditor/components/ToolbarColorPicker/ToolbarColorPicker.js +16 -12
  156. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.cjs +1 -0
  157. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.cjs +1 -0
  158. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.d.ts +10 -0
  159. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.d.ts.map +1 -0
  160. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.js +18 -0
  161. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.d.ts +4 -0
  162. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.d.ts.map +1 -0
  163. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.js +43 -0
  164. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.types.d.ts +12 -0
  165. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.types.d.ts.map +1 -0
  166. package/dist/components/InkEditor/components/ToolbarCustomize/index.d.ts +4 -0
  167. package/dist/components/InkEditor/components/ToolbarCustomize/index.d.ts.map +1 -0
  168. package/dist/components/InkEditor/components/index.d.ts +7 -1
  169. package/dist/components/InkEditor/components/index.d.ts.map +1 -1
  170. package/dist/components/InkEditor/helpers/format.utils.cjs +2 -1
  171. package/dist/components/InkEditor/helpers/format.utils.d.ts +9 -0
  172. package/dist/components/InkEditor/helpers/format.utils.d.ts.map +1 -1
  173. package/dist/components/InkEditor/helpers/format.utils.js +113 -20
  174. package/dist/components/InkEditor/helpers/index.d.ts +1 -1
  175. package/dist/components/InkEditor/helpers/index.d.ts.map +1 -1
  176. package/dist/constants/blocks.const.cjs +1 -0
  177. package/dist/constants/blocks.const.d.ts +11 -0
  178. package/dist/constants/blocks.const.d.ts.map +1 -0
  179. package/dist/constants/blocks.const.js +14 -0
  180. package/dist/constants/colorMode.const.cjs +1 -0
  181. package/dist/constants/colorMode.const.d.ts +6 -0
  182. package/dist/constants/colorMode.const.d.ts.map +1 -0
  183. package/dist/constants/colorMode.const.js +7 -0
  184. package/dist/constants/contextMenu.const.cjs +1 -0
  185. package/dist/constants/contextMenu.const.d.ts +37 -0
  186. package/dist/constants/contextMenu.const.d.ts.map +1 -0
  187. package/dist/constants/contextMenu.const.js +39 -0
  188. package/dist/constants/defaultIcons.cjs +1 -0
  189. package/dist/constants/defaultIcons.d.ts +4 -0
  190. package/dist/constants/defaultIcons.d.ts.map +1 -0
  191. package/dist/constants/defaultIcons.js +42 -0
  192. package/dist/constants/defaults.const.cjs +1 -1
  193. package/dist/constants/defaults.const.d.ts +4 -0
  194. package/dist/constants/defaults.const.d.ts.map +1 -1
  195. package/dist/constants/defaults.const.js +56 -48
  196. package/dist/constants/findReplaceMenu.const.cjs +1 -0
  197. package/dist/constants/findReplaceMenu.const.d.ts +10 -0
  198. package/dist/constants/findReplaceMenu.const.d.ts.map +1 -0
  199. package/dist/constants/findReplaceMenu.const.js +14 -0
  200. package/dist/constants/fonts.const.cjs +1 -0
  201. package/dist/constants/fonts.const.d.ts +25 -0
  202. package/dist/constants/fonts.const.d.ts.map +1 -0
  203. package/dist/constants/fonts.const.js +40 -0
  204. package/dist/constants/index.d.ts +11 -0
  205. package/dist/constants/index.d.ts.map +1 -1
  206. package/dist/constants/keyboard.const.cjs +1 -0
  207. package/dist/constants/keyboard.const.d.ts +5 -0
  208. package/dist/constants/keyboard.const.d.ts.map +1 -0
  209. package/dist/constants/keyboard.const.js +7 -0
  210. package/dist/constants/lists.const.cjs +1 -0
  211. package/dist/constants/lists.const.d.ts +24 -0
  212. package/dist/constants/lists.const.d.ts.map +1 -0
  213. package/dist/constants/lists.const.js +28 -0
  214. package/dist/constants/numbers.cjs +1 -1
  215. package/dist/constants/numbers.js +30 -15
  216. package/dist/constants/openai.const.cjs +1 -0
  217. package/dist/constants/openai.const.d.ts +42 -0
  218. package/dist/constants/openai.const.d.ts.map +1 -0
  219. package/dist/constants/openai.const.js +58 -0
  220. package/dist/constants/premium.const.cjs +1 -1
  221. package/dist/constants/premium.const.d.ts +1 -2
  222. package/dist/constants/premium.const.d.ts.map +1 -1
  223. package/dist/constants/premium.const.js +6 -34
  224. package/dist/constants/table.const.cjs +1 -0
  225. package/dist/constants/table.const.d.ts +8 -0
  226. package/dist/constants/table.const.d.ts.map +1 -0
  227. package/dist/constants/table.const.js +10 -0
  228. package/dist/constants/toolbar.const.cjs +1 -1
  229. package/dist/constants/toolbar.const.d.ts +7 -0
  230. package/dist/constants/toolbar.const.d.ts.map +1 -1
  231. package/dist/constants/toolbar.const.js +11 -4
  232. package/dist/constants/toolbarMenu.const.cjs +1 -0
  233. package/dist/constants/toolbarMenu.const.d.ts +20 -0
  234. package/dist/constants/toolbarMenu.const.d.ts.map +1 -0
  235. package/dist/constants/toolbarMenu.const.js +66 -0
  236. package/dist/index.cjs +1 -1
  237. package/dist/index.d.ts +7 -4
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +103 -47
  240. package/dist/plugins/ai/demoProvider.cjs +1 -1
  241. package/dist/plugins/ai/demoProvider.d.ts.map +1 -1
  242. package/dist/plugins/ai/demoProvider.js +65 -40
  243. package/dist/plugins/ai/index.cjs +1 -1
  244. package/dist/plugins/ai/index.d.ts +3 -1
  245. package/dist/plugins/ai/index.d.ts.map +1 -1
  246. package/dist/plugins/ai/index.js +28 -14
  247. package/dist/plugins/ai/inkServerProvider.cjs +1 -0
  248. package/dist/plugins/ai/inkServerProvider.d.ts +4 -0
  249. package/dist/plugins/ai/inkServerProvider.d.ts.map +1 -0
  250. package/dist/plugins/ai/inkServerProvider.js +52 -0
  251. package/dist/plugins/ai/inkServerProvider.types.d.ts +15 -0
  252. package/dist/plugins/ai/inkServerProvider.types.d.ts.map +1 -0
  253. package/dist/plugins/ai/openaiProvider.cjs +1 -0
  254. package/dist/plugins/ai/openaiProvider.d.ts +4 -0
  255. package/dist/plugins/ai/openaiProvider.d.ts.map +1 -0
  256. package/dist/plugins/ai/openaiProvider.js +128 -0
  257. package/dist/plugins/ai/openaiProvider.types.d.ts +32 -0
  258. package/dist/plugins/ai/openaiProvider.types.d.ts.map +1 -0
  259. package/dist/plugins/ai/openaiProvider.utils.cjs +5 -0
  260. package/dist/plugins/ai/openaiProvider.utils.d.ts +14 -0
  261. package/dist/plugins/ai/openaiProvider.utils.d.ts.map +1 -0
  262. package/dist/plugins/ai/openaiProvider.utils.js +57 -0
  263. package/dist/styles.css +1 -721
  264. package/dist/types/ai.types.d.ts +2 -1
  265. package/dist/types/ai.types.d.ts.map +1 -1
  266. package/dist/types/features.types.d.ts +3 -1
  267. package/dist/types/features.types.d.ts.map +1 -1
  268. package/dist/types/index.d.ts +1 -1
  269. package/dist/types/index.d.ts.map +1 -1
  270. package/dist/types/ink.types.d.ts +7 -2
  271. package/dist/types/ink.types.d.ts.map +1 -1
  272. package/dist/types/premium.types.d.ts +1 -1
  273. package/dist/types/premium.types.d.ts.map +1 -1
  274. package/dist/utils/blocks.utils.cjs +1 -1
  275. package/dist/utils/blocks.utils.d.ts +8 -0
  276. package/dist/utils/blocks.utils.d.ts.map +1 -1
  277. package/dist/utils/blocks.utils.js +61 -19
  278. package/dist/utils/blocks.utils.test.d.ts +2 -0
  279. package/dist/utils/blocks.utils.test.d.ts.map +1 -0
  280. package/dist/utils/comments.utils.cjs +1 -1
  281. package/dist/utils/comments.utils.js +23 -18
  282. package/dist/utils/history.utils.cjs +1 -1
  283. package/dist/utils/history.utils.js +7 -2
  284. package/dist/utils/index.d.ts +6 -2
  285. package/dist/utils/index.d.ts.map +1 -1
  286. package/dist/utils/license.utils.cjs +1 -1
  287. package/dist/utils/license.utils.js +15 -10
  288. package/dist/utils/paste.utils.cjs +1 -1
  289. package/dist/utils/paste.utils.js +27 -23
  290. package/dist/utils/premium.utils.cjs +1 -1
  291. package/dist/utils/premium.utils.js +23 -18
  292. package/dist/utils/selection.utils.cjs +1 -0
  293. package/dist/utils/selection.utils.d.ts +10 -0
  294. package/dist/utils/selection.utils.d.ts.map +1 -0
  295. package/dist/utils/selection.utils.js +58 -0
  296. package/dist/utils/selection.utils.test.d.ts +2 -0
  297. package/dist/utils/selection.utils.test.d.ts.map +1 -0
  298. package/dist/utils/slash.utils.cjs +1 -1
  299. package/dist/utils/slash.utils.js +13 -8
  300. package/dist/utils/table.utils.cjs +1 -1
  301. package/dist/utils/table.utils.d.ts +5 -0
  302. package/dist/utils/table.utils.d.ts.map +1 -1
  303. package/dist/utils/table.utils.js +69 -10
  304. package/dist/utils/table.utils.test.d.ts +2 -0
  305. package/dist/utils/table.utils.test.d.ts.map +1 -0
  306. package/dist/utils/toolbarStorage.utils.cjs +1 -0
  307. package/dist/utils/toolbarStorage.utils.d.ts +12 -0
  308. package/dist/utils/toolbarStorage.utils.d.ts.map +1 -0
  309. package/dist/utils/toolbarStorage.utils.js +92 -0
  310. package/dist/utils/toolbarStorage.utils.test.d.ts +2 -0
  311. package/dist/utils/toolbarStorage.utils.test.d.ts.map +1 -0
  312. package/dist/utils/trackChanges.utils.cjs +1 -1
  313. package/dist/utils/trackChanges.utils.js +14 -9
  314. package/dist/utils/typo.utils.cjs +1 -1
  315. package/dist/utils/typo.utils.js +15 -10
  316. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"demoProvider.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/demoProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAiI9E,eAAO,MAAM,oBAAoB,QAAO,aAYtC,CAAC"}
1
+ {"version":3,"file":"demoProvider.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/demoProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AA6J9E,eAAO,MAAM,oBAAoB,QAAO,aAYtC,CAAC"}
@@ -1,37 +1,42 @@
1
- import { INK_DEMO_AI_DELAY_MS as u } from "../../constants/numbers.js";
2
- import { INK_AI_DEMO_MODEL_ID as d, INK_AI_DEMO_PROVIDER_ID as g } from "../../constants/aiModels.const.js";
3
- import { createInkId as i } from "../../utils/id.utils.js";
4
- const p = (t) => new Promise((o) => {
5
- window.setTimeout(o, t);
6
- }), a = (t) => t.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim(), n = (t) => `<p>${t}</p>`, f = async (t) => {
7
- var c, l;
8
- await p(u);
9
- const o = t.selectionHtml || t.html || "", s = a(o) || "your content", m = ((c = t.prompt) == null ? void 0 : c.trim()) || "";
1
+ import { INK_DEMO_AI_DELAY_MS as f } from "../../constants/numbers.js";
2
+ import { INK_AI_DEMO_MODEL_ID as r, INK_AI_DEMO_PROVIDER_ID as a } from "../../constants/aiModels.const.js";
3
+ import "../../constants/openai.const.js";
4
+ import "react/jsx-runtime";
5
+ import { createInkId as s } from "../../utils/id.utils.js";
6
+ import "../../utils/paste.utils.js";
7
+ import "react";
8
+ import "react-dom";
9
+ const h = (t) => new Promise((i) => {
10
+ window.setTimeout(i, t);
11
+ }), l = (t) => t.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim(), n = (t) => `<p>${t}</p>`, y = async (t) => {
12
+ var d, p;
13
+ await h(f);
14
+ const i = t.selectionHtml || t.html || "", o = l(i) || "your content", c = ((d = t.prompt) == null ? void 0 : d.trim()) || "";
10
15
  switch (t.capability) {
11
16
  case "chat": {
12
- const e = m ? `Demo assistant: regarding “${m.slice(0, 120)}”, here’s a concise take based on the current document (${s.slice(0, 80)}…). Connect your own LLM provider for production answers.` : `Demo assistant ready. Ask a question about: ${s.slice(0, 100)}…`;
17
+ const e = c ? `Demo assistant: regarding “${c.slice(0, 120)}”, here’s a concise take based on the current document (${o.slice(0, 80)}…). Connect your own LLM provider for production answers.` : `Demo assistant ready. Ask a question about: ${o.slice(0, 100)}…`;
13
18
  return {
14
19
  text: e,
15
20
  turns: [
16
21
  {
17
- id: i("turn"),
22
+ id: s("turn"),
18
23
  role: "assistant",
19
24
  content: e,
20
25
  timestamp: Date.now(),
21
26
  capability: "chat"
22
27
  }
23
28
  ],
24
- meta: { provider: g, model: d }
29
+ meta: { provider: a, model: r }
25
30
  };
26
31
  }
27
32
  case "summarize": {
28
- const e = n(`Summary (demo): ${s.slice(0, 160)}${s.length > 160 ? "…" : ""}`);
33
+ const e = n(`Summary (demo): ${o.slice(0, 160)}${o.length > 160 ? "…" : ""}`);
29
34
  return {
30
35
  html: e,
31
- text: a(e),
36
+ text: l(e),
32
37
  diff: {
33
- id: i("diff"),
34
- originalHtml: o,
38
+ id: s("diff"),
39
+ originalHtml: i,
35
40
  suggestedHtml: e,
36
41
  summary: "Demo summary of the selection"
37
42
  }
@@ -39,39 +44,39 @@ const p = (t) => new Promise((o) => {
39
44
  }
40
45
  case "expand": {
41
46
  const e = n(
42
- `${s} Additionally, this demo expansion adds clarifying context, examples, and a short closing sentence so you can preview apply/reject flows.`
47
+ `${o} Additionally, this demo expansion adds clarifying context, examples, and a short closing sentence so you can preview apply/reject flows.`
43
48
  );
44
49
  return {
45
50
  html: e,
46
51
  diff: {
47
- id: i("diff"),
48
- originalHtml: o,
52
+ id: s("diff"),
53
+ originalHtml: i,
49
54
  suggestedHtml: e,
50
55
  summary: "Demo expansion"
51
56
  }
52
57
  };
53
58
  }
54
59
  case "tone": {
55
- const e = n(`In a clearer, more professional tone: ${s}`);
60
+ const e = n(`In a clearer, more professional tone: ${o}`);
56
61
  return {
57
62
  html: e,
58
63
  diff: {
59
- id: i("diff"),
60
- originalHtml: o,
64
+ id: s("diff"),
65
+ originalHtml: i,
61
66
  suggestedHtml: e,
62
67
  summary: "Demo tone adjustment"
63
68
  }
64
69
  };
65
70
  }
66
71
  case "translate": {
67
- const e = ((l = t.options) == null ? void 0 : l.language) || "Spanish", r = n(`[${e} demo] ${s}`);
72
+ const e = ((p = t.options) == null ? void 0 : p.language) || "Spanish", m = n(`[${e} demo] ${o}`);
68
73
  return {
69
- html: r,
70
- text: a(r),
74
+ html: m,
75
+ text: l(m),
71
76
  diff: {
72
- id: i("diff"),
73
- originalHtml: o,
74
- suggestedHtml: r,
77
+ id: s("diff"),
78
+ originalHtml: i,
79
+ suggestedHtml: m,
75
80
  summary: `Demo translation to ${e}`
76
81
  }
77
82
  };
@@ -81,14 +86,14 @@ const p = (t) => new Promise((o) => {
81
86
  text: "Demo review complete",
82
87
  reviewSuggestions: [
83
88
  {
84
- id: i("rev"),
89
+ id: s("rev"),
85
90
  message: "Consider shortening long sentences for clarity.",
86
91
  severity: "info",
87
- originalText: s.slice(0, 40),
88
- suggestedText: s.slice(0, 40)
92
+ originalText: o.slice(0, 40),
93
+ suggestedText: o.slice(0, 40)
89
94
  },
90
95
  {
91
- id: i("rev"),
96
+ id: s("rev"),
92
97
  message: "Possible passive voice — prefer active constructions.",
93
98
  severity: "warning",
94
99
  originalText: "was processed",
@@ -96,35 +101,55 @@ const p = (t) => new Promise((o) => {
96
101
  }
97
102
  ]
98
103
  };
104
+ case "autocomplete": {
105
+ const e = (c || o).trim(), u = [
106
+ { match: /\bhi[,]?\s*how$/i, completion: " are you?" },
107
+ { match: /\bhow are$/i, completion: " you today?" },
108
+ { match: /\bthank$/i, completion: " you!" },
109
+ { match: /\bplease$/i, completion: " review this draft." },
110
+ { match: /\blet'?s$/i, completion: " continue with the next section." },
111
+ { match: /\bin conclusion$/i, completion: ", the key takeaway is clear." }
112
+ ].find((g) => g.match.test(e));
113
+ return u ? {
114
+ text: u.completion,
115
+ meta: { provider: a, model: r }
116
+ } : e.length ? {
117
+ text: " — continue with a clear next phrase.",
118
+ meta: { provider: a, model: r }
119
+ } : {
120
+ text: "Start typing to see a demo completion.",
121
+ meta: { provider: a, model: r }
122
+ };
123
+ }
99
124
  case "suggestDiff":
100
125
  case "quickAction":
101
126
  case "rewrite":
102
127
  default: {
103
- const e = n(`Rewritten (demo): ${s}`);
128
+ const e = n(`Rewritten (demo): ${o}`);
104
129
  return {
105
130
  html: e,
106
131
  diff: {
107
- id: i("diff"),
108
- originalHtml: o,
132
+ id: s("diff"),
133
+ originalHtml: i,
109
134
  suggestedHtml: e,
110
135
  summary: "Demo rewrite suggestion"
111
136
  }
112
137
  };
113
138
  }
114
139
  }
115
- }, h = () => ({
116
- id: g,
140
+ }, _ = () => ({
141
+ id: a,
117
142
  name: "Ink Demo Provider",
118
143
  models: [
119
144
  {
120
- id: d,
145
+ id: r,
121
146
  provider: "demo",
122
147
  label: "Ink Demo (local)",
123
148
  family: "Demo"
124
149
  }
125
150
  ],
126
- run: f
151
+ run: y
127
152
  });
128
153
  export {
129
- h as createDemoAiProvider
154
+ _ as createDemoAiProvider
130
155
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./aiPlugin.cjs"),t=require("./demoProvider.cjs"),e=require("./stubs.cjs"),o=require("../../constants/aiModels.const.cjs");exports.createInkAiPlugin=r.createInkAiPlugin;exports.inkAi=r.inkAi;exports.createDemoAiProvider=t.createDemoAiProvider;exports.createNoopCostControl=e.createNoopCostControl;exports.createNoopExternalKnowledge=e.createNoopExternalKnowledge;exports.createNoopModeration=e.createNoopModeration;exports.createNoopQualityEval=e.createNoopQualityEval;exports.createOpenPermissions=e.createOpenPermissions;exports.INK_AI_DEMO_MODEL_ID=o.INK_AI_DEMO_MODEL_ID;exports.INK_AI_DEMO_PROVIDER_ID=o.INK_AI_DEMO_PROVIDER_ID;exports.INK_AI_MODEL_CATALOG=o.INK_AI_MODEL_CATALOG;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("./aiPlugin.cjs"),o=require("./demoProvider.cjs"),i=require("./openaiProvider.cjs"),t=require("./inkServerProvider.cjs"),e=require("./stubs.cjs"),_=require("../../constants/aiModels.const.cjs"),r=require("../../constants/openai.const.cjs");require("react/jsx-runtime");require("../../utils/paste.utils.cjs");require("react");require("react-dom");exports.createInkAiPlugin=I.createInkAiPlugin;exports.inkAi=I.inkAi;exports.createDemoAiProvider=o.createDemoAiProvider;exports.createOpenAiProvider=i.createOpenAiProvider;exports.createInkServerAiProvider=t.createInkServerAiProvider;exports.createNoopCostControl=e.createNoopCostControl;exports.createNoopExternalKnowledge=e.createNoopExternalKnowledge;exports.createNoopModeration=e.createNoopModeration;exports.createNoopQualityEval=e.createNoopQualityEval;exports.createOpenPermissions=e.createOpenPermissions;exports.INK_AI_DEMO_MODEL_ID=_.INK_AI_DEMO_MODEL_ID;exports.INK_AI_DEMO_PROVIDER_ID=_.INK_AI_DEMO_PROVIDER_ID;exports.INK_AI_MODEL_CATALOG=_.INK_AI_MODEL_CATALOG;exports.INK_AI_INK_SERVER_PROVIDER_ID=r.INK_AI_INK_SERVER_PROVIDER_ID;exports.INK_AI_OPENAI_MODEL_GPT_4_1=r.INK_AI_OPENAI_MODEL_GPT_4_1;exports.INK_AI_OPENAI_MODEL_GPT_4_1_MINI=r.INK_AI_OPENAI_MODEL_GPT_4_1_MINI;exports.INK_AI_OPENAI_PROVIDER_ID=r.INK_AI_OPENAI_PROVIDER_ID;exports.INK_AI_OPENAI_PROVIDER_NAME=r.INK_AI_OPENAI_PROVIDER_NAME;
@@ -1,6 +1,8 @@
1
1
  export { createInkAiPlugin, inkAi } from './aiPlugin';
2
2
  export { createDemoAiProvider } from './demoProvider';
3
+ export { createOpenAiProvider } from './openaiProvider';
4
+ export { createInkServerAiProvider } from './inkServerProvider';
3
5
  export { createNoopCostControl, createNoopModeration, createOpenPermissions, createNoopExternalKnowledge, createNoopQualityEval, } from './stubs';
4
- export { INK_AI_MODEL_CATALOG, INK_AI_DEMO_PROVIDER_ID, INK_AI_DEMO_MODEL_ID } from '../../constants';
6
+ export { INK_AI_MODEL_CATALOG, INK_AI_DEMO_PROVIDER_ID, INK_AI_DEMO_MODEL_ID, INK_AI_OPENAI_PROVIDER_ID, INK_AI_OPENAI_PROVIDER_NAME, INK_AI_OPENAI_MODEL_GPT_4_1_MINI, INK_AI_OPENAI_MODEL_GPT_4_1, INK_AI_INK_SERVER_PROVIDER_ID, } from '../../constants';
5
7
  export type { InkAiCapability, InkAiRequest, InkAiResponse, InkAiAgent, InkAiPlugin, InkAiChatTurn, InkAiDiffSuggestion, InkAiReviewSuggestion, InkAiContextFile, InkAiDocumentSnapshot, InkAiModelCatalogEntry, InkAiProvider, InkAiCostControlHooks, InkAiModerationHook, InkAiPermissionsHook, InkAiExternalKnowledgeHook, InkAiQualityEvalHook, InkAiFallbackChain, InkAiUiTheme, InkAiConfig, } from '../../types';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACtG,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAC"}
@@ -1,17 +1,31 @@
1
- import { createInkAiPlugin as r, inkAi as t } from "./aiPlugin.js";
2
- import { createDemoAiProvider as _ } from "./demoProvider.js";
3
- import { createNoopCostControl as I, createNoopExternalKnowledge as n, createNoopModeration as p, createNoopQualityEval as A, createOpenPermissions as D } from "./stubs.js";
4
- import { INK_AI_DEMO_MODEL_ID as E, INK_AI_DEMO_PROVIDER_ID as N, INK_AI_MODEL_CATALOG as O } from "../../constants/aiModels.const.js";
1
+ import { createInkAiPlugin as A, inkAi as E } from "./aiPlugin.js";
2
+ import { createDemoAiProvider as i } from "./demoProvider.js";
3
+ import { createOpenAiProvider as O } from "./openaiProvider.js";
4
+ import { createInkServerAiProvider as P } from "./inkServerProvider.js";
5
+ import { createNoopCostControl as m, createNoopExternalKnowledge as n, createNoopModeration as K, createNoopQualityEval as R, createOpenPermissions as c } from "./stubs.js";
6
+ import { INK_AI_DEMO_MODEL_ID as x, INK_AI_DEMO_PROVIDER_ID as f, INK_AI_MODEL_CATALOG as l } from "../../constants/aiModels.const.js";
7
+ import { INK_AI_INK_SERVER_PROVIDER_ID as v, INK_AI_OPENAI_MODEL_GPT_4_1 as L, INK_AI_OPENAI_MODEL_GPT_4_1_MINI as V, INK_AI_OPENAI_PROVIDER_ID as s, INK_AI_OPENAI_PROVIDER_NAME as k } from "../../constants/openai.const.js";
8
+ import "react/jsx-runtime";
9
+ import "../../utils/paste.utils.js";
10
+ import "react";
11
+ import "react-dom";
5
12
  export {
6
- E as INK_AI_DEMO_MODEL_ID,
7
- N as INK_AI_DEMO_PROVIDER_ID,
8
- O as INK_AI_MODEL_CATALOG,
9
- _ as createDemoAiProvider,
10
- r as createInkAiPlugin,
11
- I as createNoopCostControl,
13
+ x as INK_AI_DEMO_MODEL_ID,
14
+ f as INK_AI_DEMO_PROVIDER_ID,
15
+ v as INK_AI_INK_SERVER_PROVIDER_ID,
16
+ l as INK_AI_MODEL_CATALOG,
17
+ L as INK_AI_OPENAI_MODEL_GPT_4_1,
18
+ V as INK_AI_OPENAI_MODEL_GPT_4_1_MINI,
19
+ s as INK_AI_OPENAI_PROVIDER_ID,
20
+ k as INK_AI_OPENAI_PROVIDER_NAME,
21
+ i as createDemoAiProvider,
22
+ A as createInkAiPlugin,
23
+ P as createInkServerAiProvider,
24
+ m as createNoopCostControl,
12
25
  n as createNoopExternalKnowledge,
13
- p as createNoopModeration,
14
- A as createNoopQualityEval,
15
- D as createOpenPermissions,
16
- t as inkAi
26
+ K as createNoopModeration,
27
+ R as createNoopQualityEval,
28
+ O as createOpenAiProvider,
29
+ c as createOpenPermissions,
30
+ E as inkAi
17
31
  };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../../constants/openai.const.cjs"),N=require("../../constants/generals.const.cjs"),c=require("./openaiProvider.utils.cjs"),O=e=>`${e.replace(/\/+$/,N.EMPTY_STRING)}${_.INK_AI_INK_SERVER_COMPLETE_PATH}`,P=(e,n)=>{var I,E;const t=e.text||e.html||N.EMPTY_STRING,r=(I=e.meta)==null?void 0:I[_.INK_AI_OPENAI_META_TOKENS_KEY];return{...e,meta:{...e.meta,[_.INK_AI_OPENAI_META_PROVIDER_KEY]:_.INK_AI_INK_SERVER_PROVIDER_ID,[_.INK_AI_OPENAI_META_MODEL_KEY]:((E=e.meta)==null?void 0:E[_.INK_AI_OPENAI_META_MODEL_KEY])||n,[_.INK_AI_OPENAI_META_TOKENS_KEY]:r||c.estimateTokens(t)}}},T=e=>{const n=e.modelId||_.INK_AI_OPENAI_MODEL_GPT_4_1_MINI;return{id:_.INK_AI_INK_SERVER_PROVIDER_ID,name:_.INK_AI_INK_SERVER_PROVIDER_NAME,models:_.INK_AI_OPENAI_MODELS,run:async t=>{const r=t.modelId||n,I=e.getToken(),E={[_.INK_AI_OPENAI_CONTENT_TYPE_HEADER]:_.INK_AI_OPENAI_CONTENT_TYPE_JSON};I&&(E[_.INK_AI_OPENAI_AUTH_HEADER]=`${_.INK_AI_OPENAI_BEARER_PREFIX}${I}`);const s={prompt:t.prompt,capability:t.capability,html:t.html,selectionHtml:t.selectionHtml,options:t.options,modelId:r},o=await fetch(O(e.apiUrl),{method:"POST",headers:E,body:JSON.stringify(s)});if(!o.ok){const i=await o.text();throw new Error(`Ink server AI request failed (${o.status}): ${i||o.statusText}`)}const A=await o.json();return P(A,r)}}};exports.createInkServerAiProvider=T;
@@ -0,0 +1,4 @@
1
+ import { InkAiProvider } from '../../types';
2
+ import { CreateInkServerAiProviderOptions } from './inkServerProvider.types';
3
+ export declare const createInkServerAiProvider: (options: CreateInkServerAiProviderOptions) => InkAiProvider;
4
+ //# sourceMappingURL=inkServerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inkServerProvider.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/inkServerProvider.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EACV,gCAAgC,EAEjC,MAAM,2BAA2B,CAAC;AA0BnC,eAAO,MAAM,yBAAyB,GACpC,SAAS,gCAAgC,KACxC,aAuCF,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { INK_AI_OPENAI_MODEL_GPT_4_1_MINI as O, INK_AI_OPENAI_MODELS as P, INK_AI_INK_SERVER_PROVIDER_NAME as T, INK_AI_INK_SERVER_PROVIDER_ID as s, INK_AI_OPENAI_CONTENT_TYPE_JSON as a, INK_AI_INK_SERVER_COMPLETE_PATH as l, INK_AI_OPENAI_CONTENT_TYPE_HEADER as K, INK_AI_OPENAI_META_TOKENS_KEY as r, INK_AI_OPENAI_META_MODEL_KEY as N, INK_AI_OPENAI_META_PROVIDER_KEY as R, INK_AI_OPENAI_BEARER_PREFIX as d, INK_AI_OPENAI_AUTH_HEADER as p } from "../../constants/openai.const.js";
2
+ import { EMPTY_STRING as A } from "../../constants/generals.const.js";
3
+ import { estimateTokens as M } from "./openaiProvider.utils.js";
4
+ const S = (t) => `${t.replace(/\/+$/, A)}${l}`, f = (t, E) => {
5
+ var e, I;
6
+ const _ = t.text || t.html || A, n = (e = t.meta) == null ? void 0 : e[r];
7
+ return {
8
+ ...t,
9
+ meta: {
10
+ ...t.meta,
11
+ [R]: s,
12
+ [N]: ((I = t.meta) == null ? void 0 : I[N]) || E,
13
+ [r]: n || M(_)
14
+ }
15
+ };
16
+ }, $ = (t) => {
17
+ const E = t.modelId || O;
18
+ return {
19
+ id: s,
20
+ name: T,
21
+ models: P,
22
+ run: async (_) => {
23
+ const n = _.modelId || E, e = t.getToken(), I = {
24
+ [K]: a
25
+ };
26
+ e && (I[p] = `${d}${e}`);
27
+ const m = {
28
+ prompt: _.prompt,
29
+ capability: _.capability,
30
+ html: _.html,
31
+ selectionHtml: _.selectionHtml,
32
+ options: _.options,
33
+ modelId: n
34
+ }, o = await fetch(S(t.apiUrl), {
35
+ method: "POST",
36
+ headers: I,
37
+ body: JSON.stringify(m)
38
+ });
39
+ if (!o.ok) {
40
+ const c = await o.text();
41
+ throw new Error(
42
+ `Ink server AI request failed (${o.status}): ${c || o.statusText}`
43
+ );
44
+ }
45
+ const i = await o.json();
46
+ return f(i, n);
47
+ }
48
+ };
49
+ };
50
+ export {
51
+ $ as createInkServerAiProvider
52
+ };
@@ -0,0 +1,15 @@
1
+ import { InkAiCapability } from '../../types';
2
+ export interface CreateInkServerAiProviderOptions {
3
+ apiUrl: string;
4
+ getToken: () => string | null;
5
+ modelId?: string;
6
+ }
7
+ export interface InkServerAiCompleteBody {
8
+ prompt?: string;
9
+ capability: InkAiCapability;
10
+ html: string;
11
+ selectionHtml?: string;
12
+ options?: Record<string, string>;
13
+ modelId?: string;
14
+ }
15
+ //# sourceMappingURL=inkServerProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inkServerProvider.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/inkServerProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../constants/openai.const.cjs"),o=require("../../constants/generals.const.cjs"),O=require("../../utils/id.utils.cjs"),i=require("./openaiProvider.utils.cjs"),T=new Set(["rewrite","summarize","expand","tone","translate","suggestDiff","quickAction"]),m=_=>{switch(_){case"summarize":return t.INK_AI_OPENAI_DIFF_SUMMARY_SUMMARIZE;case"expand":return t.INK_AI_OPENAI_DIFF_SUMMARY_EXPAND;case"tone":return t.INK_AI_OPENAI_DIFF_SUMMARY_TONE;case"translate":return t.INK_AI_OPENAI_DIFF_SUMMARY_TRANSLATE;case"suggestDiff":return t.INK_AI_OPENAI_DIFF_SUMMARY_SUGGEST;case"rewrite":case"quickAction":default:return t.INK_AI_OPENAI_DIFF_SUMMARY_REWRITE}},p=(_,e,I)=>({id:O.createInkId("diff"),originalHtml:_,suggestedHtml:e,summary:I}),d=_=>`${_.replace(/\/+$/,o.EMPTY_STRING)}${t.INK_AI_OPENAI_CHAT_COMPLETIONS_PATH}`,M=async(_,e)=>{const I=_.baseUrl||t.INK_AI_OPENAI_DEFAULT_BASE_URL,a=await fetch(d(I),{method:"POST",headers:{[t.INK_AI_OPENAI_AUTH_HEADER]:`${t.INK_AI_OPENAI_BEARER_PREFIX}${_.apiKey}`,[t.INK_AI_OPENAI_CONTENT_TYPE_HEADER]:t.INK_AI_OPENAI_CONTENT_TYPE_JSON},body:JSON.stringify(e)});if(!a.ok){const A=await a.text();throw new Error(`OpenAI request failed (${a.status}): ${A||a.statusText}`)}return await a.json()},R=(_,e,I,a)=>{const A=_.selectionHtml||_.html||o.EMPTY_STRING,s=i.stripTags(A),r={[t.INK_AI_OPENAI_META_PROVIDER_KEY]:t.INK_AI_OPENAI_PROVIDER_ID,[t.INK_AI_OPENAI_META_MODEL_KEY]:I,[t.INK_AI_OPENAI_META_TOKENS_KEY]:i.estimateTokens(e,a)};if(_.capability==="autocomplete")return{text:i.cleanAutocompleteText(e),meta:r};if(_.capability==="review")return{text:e,reviewSuggestions:i.parseReviewSuggestions(e,s),meta:r};if(_.capability==="chat")return{text:e.trim(),turns:[{id:O.createInkId("turn"),role:"assistant",content:e.trim(),timestamp:Date.now(),capability:"chat"}],meta:r};if(T.has(_.capability)){const E=i.toSimpleHtml(e);return{html:E,text:i.stripTags(E),diff:p(A,E,m(_.capability)),meta:r}}return{html:i.toSimpleHtml(e),text:e.trim(),meta:r}},S=_=>{const e=_.modelId||t.INK_AI_OPENAI_MODEL_GPT_4_1_MINI;return{id:t.INK_AI_OPENAI_PROVIDER_ID,name:t.INK_AI_OPENAI_PROVIDER_NAME,models:t.INK_AI_OPENAI_MODELS,run:async I=>{var n,N,c,l;const a=I.modelId||e,A=I.selectionHtml||I.html||o.EMPTY_STRING,s=I.capability==="autocomplete",r=s?I.prompt||i.stripTags(A):i.buildUserPrompt({capability:I.capability,source:A,prompt:I.prompt,options:I.options}),E=await M(_,{model:a,messages:[{role:t.INK_AI_OPENAI_ROLE_SYSTEM,content:t.INK_AI_OPENAI_SYSTEM_PROMPTS[I.capability]},{role:t.INK_AI_OPENAI_ROLE_USER,content:r}],max_tokens:s?t.INK_AI_OPENAI_AUTOCOMPLETE_MAX_TOKENS:t.INK_AI_OPENAI_DEFAULT_MAX_TOKENS,temperature:s?t.INK_AI_OPENAI_TEMPERATURE_AUTOCOMPLETE:t.INK_AI_OPENAI_TEMPERATURE_DEFAULT}),P=((c=(N=(n=E.choices)==null?void 0:n[0])==null?void 0:N.message)==null?void 0:c.content)||o.EMPTY_STRING;return R(I,P,a,(l=E.usage)==null?void 0:l.total_tokens)}}};exports.createOpenAiProvider=S;
@@ -0,0 +1,4 @@
1
+ import { InkAiProvider } from '../../types';
2
+ import { CreateOpenAiProviderOptions } from './openaiProvider.types';
3
+ export declare const createOpenAiProvider: (options: CreateOpenAiProviderOptions) => InkAiProvider;
4
+ //# sourceMappingURL=openaiProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiProvider.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/openaiProvider.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAuB,aAAa,EAA+B,MAAM,aAAa,CAAC;AAEnG,OAAO,KAAK,EACV,2BAA2B,EAG5B,MAAM,wBAAwB,CAAC;AAqIhC,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B,KAAG,aA0C3E,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { INK_AI_OPENAI_MODEL_GPT_4_1_MINI as T, INK_AI_OPENAI_MODELS as p, INK_AI_OPENAI_PROVIDER_NAME as M, INK_AI_OPENAI_PROVIDER_ID as O, INK_AI_OPENAI_SYSTEM_PROMPTS as K, INK_AI_OPENAI_ROLE_SYSTEM as R, INK_AI_OPENAI_ROLE_USER as d, INK_AI_OPENAI_DEFAULT_BASE_URL as S, INK_AI_OPENAI_CONTENT_TYPE_JSON as u, INK_AI_OPENAI_BEARER_PREFIX as f, INK_AI_OPENAI_CONTENT_TYPE_HEADER as D, INK_AI_OPENAI_AUTH_HEADER as U, INK_AI_OPENAI_TEMPERATURE_AUTOCOMPLETE as F, INK_AI_OPENAI_TEMPERATURE_DEFAULT as y, INK_AI_OPENAI_AUTOCOMPLETE_MAX_TOKENS as b, INK_AI_OPENAI_DEFAULT_MAX_TOKENS as h, INK_AI_OPENAI_META_TOKENS_KEY as w, INK_AI_OPENAI_CHAT_COMPLETIONS_PATH as L, INK_AI_OPENAI_META_MODEL_KEY as Y, INK_AI_OPENAI_META_PROVIDER_KEY as g, INK_AI_OPENAI_DIFF_SUMMARY_REWRITE as x, INK_AI_OPENAI_DIFF_SUMMARY_SUGGEST as C, INK_AI_OPENAI_DIFF_SUMMARY_TRANSLATE as H, INK_AI_OPENAI_DIFF_SUMMARY_TONE as k, INK_AI_OPENAI_DIFF_SUMMARY_EXPAND as $, INK_AI_OPENAI_DIFF_SUMMARY_SUMMARIZE as v } from "../../constants/openai.const.js";
2
+ import { EMPTY_STRING as o } from "../../constants/generals.const.js";
3
+ import { createInkId as l } from "../../utils/id.utils.js";
4
+ import { stripTags as r, buildUserPrompt as G, estimateTokens as X, cleanAutocompleteText as B, parseReviewSuggestions as V, toSimpleHtml as m } from "./openaiProvider.utils.js";
5
+ const z = /* @__PURE__ */ new Set([
6
+ "rewrite",
7
+ "summarize",
8
+ "expand",
9
+ "tone",
10
+ "translate",
11
+ "suggestDiff",
12
+ "quickAction"
13
+ ]), J = (t) => {
14
+ switch (t) {
15
+ case "summarize":
16
+ return v;
17
+ case "expand":
18
+ return $;
19
+ case "tone":
20
+ return k;
21
+ case "translate":
22
+ return H;
23
+ case "suggestDiff":
24
+ return C;
25
+ case "rewrite":
26
+ case "quickAction":
27
+ default:
28
+ return x;
29
+ }
30
+ }, j = (t, _, I) => ({
31
+ id: l("diff"),
32
+ originalHtml: t,
33
+ suggestedHtml: _,
34
+ summary: I
35
+ }), W = (t) => `${t.replace(/\/+$/, o)}${L}`, Z = async (t, _) => {
36
+ const I = t.baseUrl || S, e = await fetch(W(I), {
37
+ method: "POST",
38
+ headers: {
39
+ [U]: `${f}${t.apiKey}`,
40
+ [D]: u
41
+ },
42
+ body: JSON.stringify(_)
43
+ });
44
+ if (!e.ok) {
45
+ const A = await e.text();
46
+ throw new Error(`OpenAI request failed (${e.status}): ${A || e.statusText}`);
47
+ }
48
+ return await e.json();
49
+ }, Q = (t, _, I, e) => {
50
+ const A = t.selectionHtml || t.html || o, i = r(A), a = {
51
+ [g]: O,
52
+ [Y]: I,
53
+ [w]: X(_, e)
54
+ };
55
+ if (t.capability === "autocomplete")
56
+ return {
57
+ text: B(_),
58
+ meta: a
59
+ };
60
+ if (t.capability === "review")
61
+ return {
62
+ text: _,
63
+ reviewSuggestions: V(_, i),
64
+ meta: a
65
+ };
66
+ if (t.capability === "chat")
67
+ return {
68
+ text: _.trim(),
69
+ turns: [
70
+ {
71
+ id: l("turn"),
72
+ role: "assistant",
73
+ content: _.trim(),
74
+ timestamp: Date.now(),
75
+ capability: "chat"
76
+ }
77
+ ],
78
+ meta: a
79
+ };
80
+ if (z.has(t.capability)) {
81
+ const E = m(_);
82
+ return {
83
+ html: E,
84
+ text: r(E),
85
+ diff: j(A, E, J(t.capability)),
86
+ meta: a
87
+ };
88
+ }
89
+ return {
90
+ html: m(_),
91
+ text: _.trim(),
92
+ meta: a
93
+ };
94
+ }, et = (t) => {
95
+ const _ = t.modelId || T;
96
+ return {
97
+ id: O,
98
+ name: M,
99
+ models: p,
100
+ run: async (I) => {
101
+ var s, n, N, c;
102
+ const e = I.modelId || _, A = I.selectionHtml || I.html || o, i = I.capability === "autocomplete", a = i ? I.prompt || r(A) : G({
103
+ capability: I.capability,
104
+ source: A,
105
+ prompt: I.prompt,
106
+ options: I.options
107
+ }), E = await Z(t, {
108
+ model: e,
109
+ messages: [
110
+ {
111
+ role: R,
112
+ content: K[I.capability]
113
+ },
114
+ {
115
+ role: d,
116
+ content: a
117
+ }
118
+ ],
119
+ max_tokens: i ? b : h,
120
+ temperature: i ? F : y
121
+ }), P = ((N = (n = (s = E.choices) == null ? void 0 : s[0]) == null ? void 0 : n.message) == null ? void 0 : N.content) || o;
122
+ return Q(I, P, e, (c = E.usage) == null ? void 0 : c.total_tokens);
123
+ }
124
+ };
125
+ };
126
+ export {
127
+ et as createOpenAiProvider
128
+ };
@@ -0,0 +1,32 @@
1
+ export interface CreateOpenAiProviderOptions {
2
+ apiKey: string;
3
+ modelId?: string;
4
+ baseUrl?: string;
5
+ }
6
+ export interface OpenAiChatMessage {
7
+ role: string;
8
+ content: string;
9
+ }
10
+ export interface OpenAiChatCompletionsRequestBody {
11
+ model: string;
12
+ messages: OpenAiChatMessage[];
13
+ max_tokens: number;
14
+ temperature: number;
15
+ }
16
+ export interface OpenAiChatCompletionsResponse {
17
+ choices?: Array<{
18
+ message?: {
19
+ content?: string | null;
20
+ };
21
+ }>;
22
+ usage?: {
23
+ total_tokens?: number;
24
+ };
25
+ }
26
+ export interface ParsedReviewItem {
27
+ message?: unknown;
28
+ severity?: unknown;
29
+ originalText?: unknown;
30
+ suggestedText?: unknown;
31
+ }
32
+ //# sourceMappingURL=openaiProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiProvider.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/openaiProvider.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SACzB,CAAC;KACH,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,5 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../constants/openai.const.cjs"),i=require("../../utils/id.utils.cjs"),o=require("../../constants/generals.const.cjs"),E=require("../../constants/numbers.cjs"),a=e=>e.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim(),A=e=>`${s.INK_AI_OPENAI_PARAGRAPH_OPEN}${e}${s.INK_AI_OPENAI_PARAGRAPH_CLOSE}`,N=e=>{const t=e.trim();return t?s.INK_AI_OPENAI_HTML_TAG_PATTERN.test(t)?t:A(t):A(o.EMPTY_STRING)},g=(e,t)=>{if(typeof t=="number"&&t>E.NUMBER_ZERO)return String(t);const I=Math.ceil(e.length/s.INK_AI_OPENAI_CHARS_PER_TOKEN_ESTIMATE);return String(I)},T=e=>e.replace(s.INK_AI_OPENAI_QUOTE_TRIM_PATTERN,o.EMPTY_STRING).trim(),R=e=>e===s.INK_AI_OPENAI_REVIEW_SEVERITY_INFO||e===s.INK_AI_OPENAI_REVIEW_SEVERITY_WARNING||e===s.INK_AI_OPENAI_REVIEW_SEVERITY_ERROR,u=(e,t)=>{const I=e.match(s.INK_AI_OPENAI_JSON_ARRAY_PATTERN),n=I==null?void 0:I[E.NUMBER_ZERO];if(n){const _=(()=>{try{return JSON.parse(n)}catch{return null}})();if(Array.isArray(_)&&_.length>E.NUMBER_ZERO)return _.map(r=>({id:i.createInkId("rev"),message:typeof r.message=="string"&&r.message?r.message:s.INK_AI_OPENAI_REVIEW_FALLBACK_MESSAGE,severity:R(r.severity)?r.severity:s.INK_AI_OPENAI_REVIEW_SEVERITY_INFO,originalText:typeof r.originalText=="string"?r.originalText:t,suggestedText:typeof r.suggestedText=="string"?r.suggestedText:t}))}return[{id:i.createInkId("rev"),message:e.trim()||s.INK_AI_OPENAI_REVIEW_FALLBACK_MESSAGE,severity:s.INK_AI_OPENAI_REVIEW_SEVERITY_INFO,originalText:t,suggestedText:t}]},c=e=>{const{capability:t,source:I,prompt:n,options:_}=e,r=[`Capability: ${t}`,`Content:
2
+ ${I||"(empty)"}`];return n&&r.push(`User prompt:
3
+ ${n}`),_!=null&&_.language&&r.push(`Target language: ${_.language}`),_!=null&&_.tone&&r.push(`Tone: ${_.tone}`),r.join(`
4
+
5
+ `)};exports.buildUserPrompt=c;exports.cleanAutocompleteText=T;exports.estimateTokens=g;exports.parseReviewSuggestions=u;exports.stripTags=a;exports.toSimpleHtml=N;exports.wrapParagraph=A;
@@ -0,0 +1,14 @@
1
+ import { InkAiReviewSuggestion } from '../../types';
2
+ export declare const stripTags: (html: string) => string;
3
+ export declare const wrapParagraph: (text: string) => string;
4
+ export declare const toSimpleHtml: (content: string) => string;
5
+ export declare const estimateTokens: (text: string, reported?: number) => string;
6
+ export declare const cleanAutocompleteText: (content: string) => string;
7
+ export declare const parseReviewSuggestions: (content: string, fallbackOriginal: string) => InkAiReviewSuggestion[];
8
+ export declare const buildUserPrompt: (params: {
9
+ capability: string;
10
+ source: string;
11
+ prompt?: string;
12
+ options?: Record<string, string>;
13
+ }) => string;
14
+ //# sourceMappingURL=openaiProvider.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openaiProvider.utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/ai/openaiProvider.utils.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MACkB,CAAC;AAE5D,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAC6B,CAAC;AAE3E,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAK9C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,WAAW,MAAM,KAAG,MAMhE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,KAAG,MACgB,CAAC;AASzE,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,kBAAkB,MAAM,KACvB,qBAAqB,EAqCvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,KAAG,MAOH,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { INK_AI_OPENAI_CHARS_PER_TOKEN_ESTIMATE as N, INK_AI_OPENAI_QUOTE_TRIM_PATTERN as T, INK_AI_OPENAI_JSON_ARRAY_PATTERN as a, INK_AI_OPENAI_REVIEW_SEVERITY_INFO as I, INK_AI_OPENAI_REVIEW_FALLBACK_MESSAGE as E, INK_AI_OPENAI_HTML_TAG_PATTERN as p, INK_AI_OPENAI_REVIEW_SEVERITY_WARNING as R, INK_AI_OPENAI_REVIEW_SEVERITY_ERROR as u, INK_AI_OPENAI_PARAGRAPH_OPEN as c, INK_AI_OPENAI_PARAGRAPH_CLOSE as m } from "../../constants/openai.const.js";
2
+ import { createInkId as o } from "../../utils/id.utils.js";
3
+ import { EMPTY_STRING as g } from "../../constants/generals.const.js";
4
+ import { NUMBER_ZERO as A } from "../../constants/numbers.js";
5
+ const K = (e) => e.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim(), i = (e) => `${c}${e}${m}`, l = (e) => {
6
+ const t = e.trim();
7
+ return t ? p.test(t) ? t : i(t) : i(g);
8
+ }, x = (e, t) => {
9
+ if (typeof t == "number" && t > A)
10
+ return String(t);
11
+ const _ = Math.ceil(e.length / N);
12
+ return String(_);
13
+ }, d = (e) => e.replace(T, g).trim(), P = (e) => e === I || e === R || e === u, h = (e, t) => {
14
+ const _ = e.match(a), n = _ == null ? void 0 : _[A];
15
+ if (n) {
16
+ const s = (() => {
17
+ try {
18
+ return JSON.parse(n);
19
+ } catch {
20
+ return null;
21
+ }
22
+ })();
23
+ if (Array.isArray(s) && s.length > A)
24
+ return s.map((r) => ({
25
+ id: o("rev"),
26
+ message: typeof r.message == "string" && r.message ? r.message : E,
27
+ severity: P(r.severity) ? r.severity : I,
28
+ originalText: typeof r.originalText == "string" ? r.originalText : t,
29
+ suggestedText: typeof r.suggestedText == "string" ? r.suggestedText : t
30
+ }));
31
+ }
32
+ return [
33
+ {
34
+ id: o("rev"),
35
+ message: e.trim() || E,
36
+ severity: I,
37
+ originalText: t,
38
+ suggestedText: t
39
+ }
40
+ ];
41
+ }, $ = (e) => {
42
+ const { capability: t, source: _, prompt: n, options: s } = e, r = [`Capability: ${t}`, `Content:
43
+ ${_ || "(empty)"}`];
44
+ return n && r.push(`User prompt:
45
+ ${n}`), s != null && s.language && r.push(`Target language: ${s.language}`), s != null && s.tone && r.push(`Tone: ${s.tone}`), r.join(`
46
+
47
+ `);
48
+ };
49
+ export {
50
+ $ as buildUserPrompt,
51
+ d as cleanAutocompleteText,
52
+ x as estimateTokens,
53
+ h as parseReviewSuggestions,
54
+ K as stripTags,
55
+ l as toSimpleHtml,
56
+ i as wrapParagraph
57
+ };