gsd-pi 2.8.3 → 2.10.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 (1162) hide show
  1. package/README.md +2 -1
  2. package/dist/cli.js +5 -0
  3. package/dist/loader.js +1 -1
  4. package/dist/update-check.d.ts +24 -0
  5. package/dist/update-check.js +93 -0
  6. package/node_modules/@gsd/native/package.json +59 -0
  7. package/node_modules/@gsd/native/src/__tests__/clipboard.test.mjs +79 -0
  8. package/node_modules/@gsd/native/src/__tests__/fd.test.mjs +164 -0
  9. package/node_modules/@gsd/native/src/__tests__/glob.test.mjs +237 -0
  10. package/node_modules/@gsd/native/src/__tests__/grep.test.mjs +162 -0
  11. package/node_modules/@gsd/native/src/__tests__/highlight.test.mjs +156 -0
  12. package/node_modules/@gsd/native/src/__tests__/html.test.mjs +98 -0
  13. package/node_modules/@gsd/native/src/__tests__/image.test.mjs +137 -0
  14. package/node_modules/@gsd/native/src/__tests__/ps.test.mjs +109 -0
  15. package/node_modules/@gsd/native/src/__tests__/text.test.mjs +262 -0
  16. package/node_modules/@gsd/native/src/ast/index.ts +12 -0
  17. package/node_modules/@gsd/native/src/ast/types.ts +75 -0
  18. package/node_modules/@gsd/native/src/clipboard/index.ts +40 -0
  19. package/node_modules/@gsd/native/src/clipboard/types.ts +7 -0
  20. package/node_modules/@gsd/native/src/fd/index.ts +35 -0
  21. package/node_modules/@gsd/native/src/fd/types.ts +31 -0
  22. package/node_modules/@gsd/native/src/glob/index.ts +44 -0
  23. package/node_modules/@gsd/native/src/glob/types.ts +53 -0
  24. package/node_modules/@gsd/native/src/grep/index.ts +48 -0
  25. package/node_modules/@gsd/native/src/grep/types.ts +105 -0
  26. package/node_modules/@gsd/native/src/highlight/index.ts +44 -0
  27. package/node_modules/@gsd/native/src/highlight/types.ts +25 -0
  28. package/node_modules/@gsd/native/src/html/index.ts +24 -0
  29. package/node_modules/@gsd/native/src/html/types.ts +7 -0
  30. package/node_modules/@gsd/native/src/image/index.ts +28 -0
  31. package/node_modules/@gsd/native/src/image/types.ts +41 -0
  32. package/node_modules/@gsd/native/src/index.ts +88 -0
  33. package/node_modules/@gsd/native/src/native.ts +94 -0
  34. package/node_modules/@gsd/native/src/ps/index.ts +52 -0
  35. package/node_modules/@gsd/native/src/ps/types.ts +5 -0
  36. package/node_modules/@gsd/native/src/text/index.ts +125 -0
  37. package/node_modules/@gsd/native/src/text/types.ts +29 -0
  38. package/node_modules/@gsd/native/src/ttsr/index.ts +39 -0
  39. package/node_modules/@gsd/native/src/ttsr/types.ts +10 -0
  40. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
  41. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
  42. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js +758 -0
  43. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
  44. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
  45. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
  46. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js +267 -0
  47. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
  48. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/defaults.json +456 -0
  49. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
  50. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
  51. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js +101 -0
  52. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
  53. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
  54. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
  55. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
  56. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
  57. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
  58. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
  59. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js +709 -0
  60. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
  61. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
  62. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
  63. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
  64. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
  65. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp.md +33 -0
  66. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
  67. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
  68. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
  69. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
  70. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
  71. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
  72. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js +64 -0
  73. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
  74. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
  75. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
  76. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js +574 -0
  77. package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
  78. package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  79. package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js +1 -0
  80. package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  81. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.d.ts +1 -1
  82. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  83. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.js +12 -77
  84. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  85. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.d.ts +60 -0
  86. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.d.ts.map +1 -0
  87. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.js +247 -0
  88. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -0
  89. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.d.ts +43 -0
  90. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -0
  91. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.js +146 -0
  92. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -0
  93. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.d.ts +114 -0
  94. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.d.ts.map +1 -0
  95. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.js +522 -0
  96. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.js.map +1 -0
  97. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.d.ts +2 -0
  98. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.d.ts.map +1 -0
  99. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.js +376 -0
  100. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -0
  101. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts +38 -0
  102. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  103. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js +27 -0
  104. package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  105. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
  106. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  107. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
  108. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  109. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  110. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -3
  111. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  112. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -1
  113. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  114. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  115. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  116. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  117. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.js +25 -40
  118. package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  119. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  120. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.js +17 -21
  121. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  122. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.d.ts +7 -6
  123. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
  124. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.js +7 -13
  125. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
  126. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -1
  127. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.js +3 -56
  128. package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.js.map +1 -1
  129. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -1
  130. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.js +7 -17
  131. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.js.map +1 -1
  132. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.d.ts +1 -2
  133. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  134. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.js +21 -29
  135. package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  136. package/node_modules/@gsd/pi-coding-agent/package.json +2 -5
  137. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/client.ts +880 -0
  138. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/config.ts +325 -0
  139. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/defaults.json +456 -0
  140. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/edits.ts +109 -0
  141. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
  142. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/index.ts +943 -0
  143. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
  144. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp.md +33 -0
  145. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
  146. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/types.ts +421 -0
  147. package/node_modules/@gsd/pi-coding-agent/src/core/lsp/utils.ts +682 -0
  148. package/node_modules/@gsd/pi-coding-agent/src/core/slash-commands.ts +1 -0
  149. package/node_modules/@gsd/pi-coding-agent/src/core/tools/find.ts +13 -88
  150. package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline-edit.ts +318 -0
  151. package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline-read.ts +196 -0
  152. package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline.test.ts +456 -0
  153. package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline.ts +594 -0
  154. package/node_modules/@gsd/pi-coding-agent/src/core/tools/index.ts +63 -0
  155. package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
  156. package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +5 -3
  157. package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/interactive-mode.ts +66 -12
  158. package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/theme/theme.ts +26 -42
  159. package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard-image.ts +17 -24
  160. package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard-native.ts +11 -21
  161. package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard.ts +3 -51
  162. package/node_modules/@gsd/pi-coding-agent/src/utils/image-convert.ts +7 -17
  163. package/node_modules/@gsd/pi-coding-agent/src/utils/image-resize.ts +28 -34
  164. package/node_modules/@gsd/pi-tui/dist/autocomplete.d.ts +1 -3
  165. package/node_modules/@gsd/pi-tui/dist/autocomplete.d.ts.map +1 -1
  166. package/node_modules/@gsd/pi-tui/dist/autocomplete.js +16 -95
  167. package/node_modules/@gsd/pi-tui/dist/autocomplete.js.map +1 -1
  168. package/node_modules/@gsd/pi-tui/dist/components/image.d.ts +7 -0
  169. package/node_modules/@gsd/pi-tui/dist/components/image.d.ts.map +1 -1
  170. package/node_modules/@gsd/pi-tui/dist/components/image.js +20 -1
  171. package/node_modules/@gsd/pi-tui/dist/components/image.js.map +1 -1
  172. package/node_modules/@gsd/pi-tui/dist/index.d.ts +1 -1
  173. package/node_modules/@gsd/pi-tui/dist/index.d.ts.map +1 -1
  174. package/node_modules/@gsd/pi-tui/dist/index.js +1 -1
  175. package/node_modules/@gsd/pi-tui/dist/index.js.map +1 -1
  176. package/node_modules/@gsd/pi-tui/dist/terminal-image.d.ts +5 -5
  177. package/node_modules/@gsd/pi-tui/dist/terminal-image.d.ts.map +1 -1
  178. package/node_modules/@gsd/pi-tui/dist/terminal-image.js +9 -120
  179. package/node_modules/@gsd/pi-tui/dist/terminal-image.js.map +1 -1
  180. package/node_modules/@gsd/pi-tui/dist/utils.d.ts +23 -26
  181. package/node_modules/@gsd/pi-tui/dist/utils.d.ts.map +1 -1
  182. package/node_modules/@gsd/pi-tui/dist/utils.js +47 -716
  183. package/node_modules/@gsd/pi-tui/dist/utils.js.map +1 -1
  184. package/node_modules/@gsd/pi-tui/package.json +1 -0
  185. package/node_modules/@gsd/pi-tui/src/autocomplete.ts +17 -112
  186. package/node_modules/@gsd/pi-tui/src/components/image.ts +23 -1
  187. package/node_modules/@gsd/pi-tui/src/index.ts +0 -4
  188. package/node_modules/@gsd/pi-tui/src/terminal-image.ts +9 -135
  189. package/node_modules/@gsd/pi-tui/src/utils.ts +51 -775
  190. package/package.json +4 -1
  191. package/packages/native/package.json +59 -0
  192. package/packages/native/src/__tests__/clipboard.test.mjs +79 -0
  193. package/packages/native/src/__tests__/fd.test.mjs +164 -0
  194. package/packages/native/src/__tests__/glob.test.mjs +237 -0
  195. package/packages/native/src/__tests__/grep.test.mjs +162 -0
  196. package/packages/native/src/__tests__/highlight.test.mjs +156 -0
  197. package/packages/native/src/__tests__/html.test.mjs +98 -0
  198. package/packages/native/src/__tests__/image.test.mjs +137 -0
  199. package/packages/native/src/__tests__/ps.test.mjs +109 -0
  200. package/packages/native/src/__tests__/text.test.mjs +262 -0
  201. package/packages/native/src/ast/index.ts +12 -0
  202. package/packages/native/src/ast/types.ts +75 -0
  203. package/packages/native/src/clipboard/index.ts +40 -0
  204. package/packages/native/src/clipboard/types.ts +7 -0
  205. package/packages/native/src/fd/index.ts +35 -0
  206. package/packages/native/src/fd/types.ts +31 -0
  207. package/packages/native/src/glob/index.ts +44 -0
  208. package/packages/native/src/glob/types.ts +53 -0
  209. package/packages/native/src/grep/index.ts +48 -0
  210. package/packages/native/src/grep/types.ts +105 -0
  211. package/packages/native/src/highlight/index.ts +44 -0
  212. package/packages/native/src/highlight/types.ts +25 -0
  213. package/packages/native/src/html/index.ts +24 -0
  214. package/packages/native/src/html/types.ts +7 -0
  215. package/packages/native/src/image/index.ts +28 -0
  216. package/packages/native/src/image/types.ts +41 -0
  217. package/packages/native/src/index.ts +88 -0
  218. package/packages/native/src/native.ts +94 -0
  219. package/packages/native/src/ps/index.ts +52 -0
  220. package/packages/native/src/ps/types.ts +5 -0
  221. package/packages/native/src/text/index.ts +125 -0
  222. package/packages/native/src/text/types.ts +29 -0
  223. package/packages/native/src/ttsr/index.ts +39 -0
  224. package/packages/native/src/ttsr/types.ts +10 -0
  225. package/packages/native/tsconfig.json +8 -0
  226. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
  227. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
  228. package/packages/pi-coding-agent/dist/core/lsp/client.js +758 -0
  229. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
  230. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
  231. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
  232. package/packages/pi-coding-agent/dist/core/lsp/config.js +267 -0
  233. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
  234. package/packages/pi-coding-agent/dist/core/lsp/defaults.json +456 -0
  235. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
  236. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
  237. package/packages/pi-coding-agent/dist/core/lsp/edits.js +101 -0
  238. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
  239. package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
  240. package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
  241. package/packages/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
  242. package/packages/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
  243. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
  244. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
  245. package/packages/pi-coding-agent/dist/core/lsp/index.js +709 -0
  246. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
  247. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
  248. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
  249. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
  250. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
  251. package/packages/pi-coding-agent/dist/core/lsp/lsp.md +33 -0
  252. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
  253. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
  254. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
  255. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
  256. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
  257. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
  258. package/packages/pi-coding-agent/dist/core/lsp/types.js +64 -0
  259. package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
  260. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
  261. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
  262. package/packages/pi-coding-agent/dist/core/lsp/utils.js +574 -0
  263. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
  264. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  265. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  266. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/tools/find.d.ts +1 -1
  268. package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/tools/find.js +12 -77
  270. package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.d.ts +60 -0
  272. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.d.ts.map +1 -0
  273. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js +247 -0
  274. package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -0
  275. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +43 -0
  276. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -0
  277. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +146 -0
  278. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -0
  279. package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts +114 -0
  280. package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts.map +1 -0
  281. package/packages/pi-coding-agent/dist/core/tools/hashline.js +522 -0
  282. package/packages/pi-coding-agent/dist/core/tools/hashline.js.map +1 -0
  283. package/packages/pi-coding-agent/dist/core/tools/hashline.test.d.ts +2 -0
  284. package/packages/pi-coding-agent/dist/core/tools/hashline.test.d.ts.map +1 -0
  285. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js +376 -0
  286. package/packages/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -0
  287. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +38 -0
  288. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/tools/index.js +27 -0
  290. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
  292. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  293. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
  294. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  295. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  296. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -3
  297. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  300. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  301. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  302. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  303. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +25 -40
  304. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  305. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +17 -21
  307. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/utils/clipboard-native.d.ts +7 -6
  309. package/packages/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/utils/clipboard-native.js +7 -13
  311. package/packages/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
  312. package/packages/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -1
  313. package/packages/pi-coding-agent/dist/utils/clipboard.js +3 -56
  314. package/packages/pi-coding-agent/dist/utils/clipboard.js.map +1 -1
  315. package/packages/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/utils/image-convert.js +7 -17
  317. package/packages/pi-coding-agent/dist/utils/image-convert.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/utils/image-resize.d.ts +1 -2
  319. package/packages/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  320. package/packages/pi-coding-agent/dist/utils/image-resize.js +21 -29
  321. package/packages/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  322. package/packages/pi-coding-agent/package.json +2 -5
  323. package/packages/pi-coding-agent/src/core/lsp/client.ts +880 -0
  324. package/packages/pi-coding-agent/src/core/lsp/config.ts +325 -0
  325. package/packages/pi-coding-agent/src/core/lsp/defaults.json +456 -0
  326. package/packages/pi-coding-agent/src/core/lsp/edits.ts +109 -0
  327. package/packages/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
  328. package/packages/pi-coding-agent/src/core/lsp/index.ts +943 -0
  329. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
  330. package/packages/pi-coding-agent/src/core/lsp/lsp.md +33 -0
  331. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
  332. package/packages/pi-coding-agent/src/core/lsp/types.ts +421 -0
  333. package/packages/pi-coding-agent/src/core/lsp/utils.ts +682 -0
  334. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  335. package/packages/pi-coding-agent/src/core/tools/find.ts +13 -88
  336. package/packages/pi-coding-agent/src/core/tools/hashline-edit.ts +318 -0
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +196 -0
  338. package/packages/pi-coding-agent/src/core/tools/hashline.test.ts +456 -0
  339. package/packages/pi-coding-agent/src/core/tools/hashline.ts +594 -0
  340. package/packages/pi-coding-agent/src/core/tools/index.ts +63 -0
  341. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
  342. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +5 -3
  343. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +66 -12
  344. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +26 -42
  345. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +17 -24
  346. package/packages/pi-coding-agent/src/utils/clipboard-native.ts +11 -21
  347. package/packages/pi-coding-agent/src/utils/clipboard.ts +3 -51
  348. package/packages/pi-coding-agent/src/utils/image-convert.ts +7 -17
  349. package/packages/pi-coding-agent/src/utils/image-resize.ts +28 -34
  350. package/packages/pi-tui/dist/autocomplete.d.ts +1 -3
  351. package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
  352. package/packages/pi-tui/dist/autocomplete.js +16 -95
  353. package/packages/pi-tui/dist/autocomplete.js.map +1 -1
  354. package/packages/pi-tui/dist/components/image.d.ts +7 -0
  355. package/packages/pi-tui/dist/components/image.d.ts.map +1 -1
  356. package/packages/pi-tui/dist/components/image.js +20 -1
  357. package/packages/pi-tui/dist/components/image.js.map +1 -1
  358. package/packages/pi-tui/dist/index.d.ts +1 -1
  359. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  360. package/packages/pi-tui/dist/index.js +1 -1
  361. package/packages/pi-tui/dist/index.js.map +1 -1
  362. package/packages/pi-tui/dist/terminal-image.d.ts +5 -5
  363. package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
  364. package/packages/pi-tui/dist/terminal-image.js +9 -120
  365. package/packages/pi-tui/dist/terminal-image.js.map +1 -1
  366. package/packages/pi-tui/dist/utils.d.ts +23 -26
  367. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  368. package/packages/pi-tui/dist/utils.js +47 -716
  369. package/packages/pi-tui/dist/utils.js.map +1 -1
  370. package/packages/pi-tui/package.json +1 -0
  371. package/packages/pi-tui/src/autocomplete.ts +17 -112
  372. package/packages/pi-tui/src/components/image.ts +23 -1
  373. package/packages/pi-tui/src/index.ts +0 -4
  374. package/packages/pi-tui/src/terminal-image.ts +9 -135
  375. package/packages/pi-tui/src/utils.ts +51 -775
  376. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  377. package/pkg/dist/modes/interactive/theme/theme.js +25 -40
  378. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  379. package/src/resources/extensions/ask-user-questions.ts +2 -2
  380. package/src/resources/extensions/bg-shell/index.ts +377 -51
  381. package/src/resources/extensions/browser-tools/core.d.ts +205 -0
  382. package/src/resources/extensions/browser-tools/index.ts +2 -2
  383. package/src/resources/extensions/browser-tools/refs.ts +1 -1
  384. package/src/resources/extensions/browser-tools/tools/session.ts +1 -1
  385. package/src/resources/extensions/context7/index.ts +2 -2
  386. package/src/resources/extensions/get-secrets-from-user.ts +3 -2
  387. package/src/resources/extensions/google-search/index.ts +1 -1
  388. package/src/resources/extensions/gsd/auto.ts +41 -4
  389. package/src/resources/extensions/gsd/commands.ts +218 -3
  390. package/src/resources/extensions/gsd/doctor.ts +1 -1
  391. package/src/resources/extensions/gsd/git-service.ts +129 -5
  392. package/src/resources/extensions/gsd/guided-flow.ts +19 -9
  393. package/src/resources/extensions/gsd/index.ts +17 -7
  394. package/src/resources/extensions/gsd/preferences.ts +1 -1
  395. package/src/resources/extensions/gsd/tests/git-service.test.ts +226 -0
  396. package/src/resources/extensions/gsd/tests/migrate-command.test.ts +2 -2
  397. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +1 -1
  398. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +10 -10
  399. package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +87 -0
  400. package/src/resources/extensions/gsd/tests/worktree.test.ts +352 -0
  401. package/src/resources/extensions/gsd/types.ts +1 -0
  402. package/src/resources/extensions/gsd/worktree.ts +20 -1
  403. package/src/resources/extensions/mac-tools/index.ts +1 -1
  404. package/src/resources/extensions/search-the-web/format.ts +1 -1
  405. package/src/resources/extensions/search-the-web/index.ts +5 -5
  406. package/src/resources/extensions/search-the-web/tool-fetch-page.ts +7 -7
  407. package/src/resources/extensions/search-the-web/tool-llm-context.ts +11 -11
  408. package/src/resources/extensions/search-the-web/tool-search.ts +10 -10
  409. package/src/resources/extensions/shared/interview-ui.ts +2 -2
  410. package/src/resources/extensions/universal-config/discovery.ts +78 -0
  411. package/src/resources/extensions/universal-config/format.ts +160 -0
  412. package/src/resources/extensions/universal-config/index.ts +118 -0
  413. package/src/resources/extensions/universal-config/package.json +11 -0
  414. package/src/resources/extensions/universal-config/scanners.ts +579 -0
  415. package/src/resources/extensions/universal-config/tests/discovery.test.ts +111 -0
  416. package/src/resources/extensions/universal-config/tests/format.test.ts +111 -0
  417. package/src/resources/extensions/universal-config/tests/scanners.test.ts +438 -0
  418. package/src/resources/extensions/universal-config/tools.ts +60 -0
  419. package/src/resources/extensions/universal-config/types.ts +116 -0
  420. package/node_modules/@mariozechner/clipboard/.yarnrc.yml +0 -1
  421. package/node_modules/@mariozechner/clipboard/Cargo.toml +0 -26
  422. package/node_modules/@mariozechner/clipboard/README.md +0 -58
  423. package/node_modules/@mariozechner/clipboard/build.rs +0 -5
  424. package/node_modules/@mariozechner/clipboard/exp.ts +0 -12
  425. package/node_modules/@mariozechner/clipboard/index.d.ts +0 -23
  426. package/node_modules/@mariozechner/clipboard/index.js +0 -317
  427. package/node_modules/@mariozechner/clipboard/package.json +0 -56
  428. package/node_modules/@mariozechner/clipboard/src/lib.rs +0 -191
  429. package/node_modules/@mariozechner/clipboard-darwin-arm64/README.md +0 -3
  430. package/node_modules/@mariozechner/clipboard-darwin-arm64/clipboard.darwin-arm64.node +0 -0
  431. package/node_modules/@mariozechner/clipboard-darwin-arm64/package.json +0 -22
  432. package/node_modules/@mariozechner/clipboard-darwin-universal/README.md +0 -3
  433. package/node_modules/@mariozechner/clipboard-darwin-universal/clipboard.darwin-universal.node +0 -0
  434. package/node_modules/@mariozechner/clipboard-darwin-universal/package.json +0 -19
  435. package/node_modules/ansi-styles/index.d.ts +0 -345
  436. package/node_modules/ansi-styles/index.js +0 -163
  437. package/node_modules/ansi-styles/license +0 -9
  438. package/node_modules/ansi-styles/package.json +0 -56
  439. package/node_modules/ansi-styles/readme.md +0 -152
  440. package/node_modules/any-promise/.jshintrc +0 -4
  441. package/node_modules/any-promise/.npmignore +0 -7
  442. package/node_modules/any-promise/LICENSE +0 -19
  443. package/node_modules/any-promise/README.md +0 -161
  444. package/node_modules/any-promise/implementation.d.ts +0 -3
  445. package/node_modules/any-promise/implementation.js +0 -1
  446. package/node_modules/any-promise/index.d.ts +0 -73
  447. package/node_modules/any-promise/index.js +0 -1
  448. package/node_modules/any-promise/loader.js +0 -78
  449. package/node_modules/any-promise/optional.js +0 -6
  450. package/node_modules/any-promise/package.json +0 -45
  451. package/node_modules/any-promise/register/bluebird.d.ts +0 -1
  452. package/node_modules/any-promise/register/bluebird.js +0 -2
  453. package/node_modules/any-promise/register/es6-promise.d.ts +0 -1
  454. package/node_modules/any-promise/register/es6-promise.js +0 -2
  455. package/node_modules/any-promise/register/lie.d.ts +0 -1
  456. package/node_modules/any-promise/register/lie.js +0 -2
  457. package/node_modules/any-promise/register/native-promise-only.d.ts +0 -1
  458. package/node_modules/any-promise/register/native-promise-only.js +0 -2
  459. package/node_modules/any-promise/register/pinkie.d.ts +0 -1
  460. package/node_modules/any-promise/register/pinkie.js +0 -2
  461. package/node_modules/any-promise/register/promise.d.ts +0 -1
  462. package/node_modules/any-promise/register/promise.js +0 -2
  463. package/node_modules/any-promise/register/q.d.ts +0 -1
  464. package/node_modules/any-promise/register/q.js +0 -2
  465. package/node_modules/any-promise/register/rsvp.d.ts +0 -1
  466. package/node_modules/any-promise/register/rsvp.js +0 -2
  467. package/node_modules/any-promise/register/vow.d.ts +0 -1
  468. package/node_modules/any-promise/register/vow.js +0 -2
  469. package/node_modules/any-promise/register/when.d.ts +0 -1
  470. package/node_modules/any-promise/register/when.js +0 -2
  471. package/node_modules/any-promise/register-shim.js +0 -18
  472. package/node_modules/any-promise/register.d.ts +0 -17
  473. package/node_modules/any-promise/register.js +0 -94
  474. package/node_modules/cli-highlight/LICENSE.txt +0 -15
  475. package/node_modules/cli-highlight/README.md +0 -88
  476. package/node_modules/cli-highlight/bin/highlight +0 -2
  477. package/node_modules/cli-highlight/dist/cli.d.ts +0 -1
  478. package/node_modules/cli-highlight/dist/cli.js +0 -102
  479. package/node_modules/cli-highlight/dist/cli.js.map +0 -1
  480. package/node_modules/cli-highlight/dist/index.d.ts +0 -53
  481. package/node_modules/cli-highlight/dist/index.js +0 -112
  482. package/node_modules/cli-highlight/dist/index.js.map +0 -1
  483. package/node_modules/cli-highlight/dist/test/test.d.ts +0 -1
  484. package/node_modules/cli-highlight/dist/test/test.js +0 -62
  485. package/node_modules/cli-highlight/dist/test/test.js.map +0 -1
  486. package/node_modules/cli-highlight/dist/theme.d.ts +0 -270
  487. package/node_modules/cli-highlight/dist/theme.js +0 -265
  488. package/node_modules/cli-highlight/dist/theme.js.map +0 -1
  489. package/node_modules/cli-highlight/node_modules/chalk/index.d.ts +0 -415
  490. package/node_modules/cli-highlight/node_modules/chalk/license +0 -9
  491. package/node_modules/cli-highlight/node_modules/chalk/package.json +0 -68
  492. package/node_modules/cli-highlight/node_modules/chalk/readme.md +0 -341
  493. package/node_modules/cli-highlight/node_modules/chalk/source/index.js +0 -229
  494. package/node_modules/cli-highlight/node_modules/chalk/source/templates.js +0 -134
  495. package/node_modules/cli-highlight/node_modules/chalk/source/util.js +0 -39
  496. package/node_modules/cli-highlight/package.json +0 -129
  497. package/node_modules/cliui/CHANGELOG.md +0 -121
  498. package/node_modules/cliui/LICENSE.txt +0 -14
  499. package/node_modules/cliui/README.md +0 -141
  500. package/node_modules/cliui/build/index.cjs +0 -302
  501. package/node_modules/cliui/build/lib/index.js +0 -287
  502. package/node_modules/cliui/build/lib/string-utils.js +0 -27
  503. package/node_modules/cliui/index.mjs +0 -13
  504. package/node_modules/cliui/node_modules/ansi-regex/index.d.ts +0 -37
  505. package/node_modules/cliui/node_modules/ansi-regex/index.js +0 -10
  506. package/node_modules/cliui/node_modules/ansi-regex/license +0 -9
  507. package/node_modules/cliui/node_modules/ansi-regex/package.json +0 -55
  508. package/node_modules/cliui/node_modules/ansi-regex/readme.md +0 -78
  509. package/node_modules/cliui/node_modules/strip-ansi/index.d.ts +0 -17
  510. package/node_modules/cliui/node_modules/strip-ansi/index.js +0 -4
  511. package/node_modules/cliui/node_modules/strip-ansi/license +0 -9
  512. package/node_modules/cliui/node_modules/strip-ansi/package.json +0 -54
  513. package/node_modules/cliui/node_modules/strip-ansi/readme.md +0 -46
  514. package/node_modules/cliui/package.json +0 -83
  515. package/node_modules/color-convert/CHANGELOG.md +0 -54
  516. package/node_modules/color-convert/LICENSE +0 -21
  517. package/node_modules/color-convert/README.md +0 -68
  518. package/node_modules/color-convert/conversions.js +0 -839
  519. package/node_modules/color-convert/index.js +0 -81
  520. package/node_modules/color-convert/package.json +0 -48
  521. package/node_modules/color-convert/route.js +0 -97
  522. package/node_modules/color-name/LICENSE +0 -8
  523. package/node_modules/color-name/README.md +0 -11
  524. package/node_modules/color-name/index.js +0 -152
  525. package/node_modules/color-name/package.json +0 -28
  526. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  527. package/node_modules/emoji-regex/README.md +0 -73
  528. package/node_modules/emoji-regex/es2015/index.js +0 -6
  529. package/node_modules/emoji-regex/es2015/text.js +0 -6
  530. package/node_modules/emoji-regex/index.d.ts +0 -23
  531. package/node_modules/emoji-regex/index.js +0 -6
  532. package/node_modules/emoji-regex/package.json +0 -50
  533. package/node_modules/emoji-regex/text.js +0 -6
  534. package/node_modules/escalade/dist/index.js +0 -22
  535. package/node_modules/escalade/dist/index.mjs +0 -22
  536. package/node_modules/escalade/index.d.mts +0 -11
  537. package/node_modules/escalade/index.d.ts +0 -15
  538. package/node_modules/escalade/license +0 -9
  539. package/node_modules/escalade/package.json +0 -74
  540. package/node_modules/escalade/readme.md +0 -211
  541. package/node_modules/escalade/sync/index.d.mts +0 -9
  542. package/node_modules/escalade/sync/index.d.ts +0 -13
  543. package/node_modules/escalade/sync/index.js +0 -18
  544. package/node_modules/escalade/sync/index.mjs +0 -18
  545. package/node_modules/esprima/ChangeLog +0 -235
  546. package/node_modules/get-caller-file/LICENSE.md +0 -6
  547. package/node_modules/get-caller-file/README.md +0 -41
  548. package/node_modules/get-caller-file/index.d.ts +0 -2
  549. package/node_modules/get-caller-file/index.js +0 -22
  550. package/node_modules/get-caller-file/index.js.map +0 -1
  551. package/node_modules/get-caller-file/package.json +0 -42
  552. package/node_modules/has-flag/index.d.ts +0 -39
  553. package/node_modules/has-flag/index.js +0 -8
  554. package/node_modules/has-flag/license +0 -9
  555. package/node_modules/has-flag/package.json +0 -46
  556. package/node_modules/has-flag/readme.md +0 -89
  557. package/node_modules/highlight.js/LICENSE +0 -29
  558. package/node_modules/highlight.js/README.md +0 -371
  559. package/node_modules/highlight.js/lib/core.js +0 -2517
  560. package/node_modules/highlight.js/lib/highlight.js +0 -2
  561. package/node_modules/highlight.js/lib/index.js +0 -195
  562. package/node_modules/highlight.js/lib/languages/1c.js +0 -521
  563. package/node_modules/highlight.js/lib/languages/abnf.js +0 -103
  564. package/node_modules/highlight.js/lib/languages/accesslog.js +0 -127
  565. package/node_modules/highlight.js/lib/languages/actionscript.js +0 -113
  566. package/node_modules/highlight.js/lib/languages/ada.js +0 -194
  567. package/node_modules/highlight.js/lib/languages/angelscript.js +0 -123
  568. package/node_modules/highlight.js/lib/languages/apache.js +0 -89
  569. package/node_modules/highlight.js/lib/languages/applescript.js +0 -189
  570. package/node_modules/highlight.js/lib/languages/arcade.js +0 -165
  571. package/node_modules/highlight.js/lib/languages/arduino.js +0 -576
  572. package/node_modules/highlight.js/lib/languages/armasm.js +0 -131
  573. package/node_modules/highlight.js/lib/languages/asciidoc.js +0 -303
  574. package/node_modules/highlight.js/lib/languages/aspectj.js +0 -186
  575. package/node_modules/highlight.js/lib/languages/autohotkey.js +0 -84
  576. package/node_modules/highlight.js/lib/languages/autoit.js +0 -183
  577. package/node_modules/highlight.js/lib/languages/avrasm.js +0 -80
  578. package/node_modules/highlight.js/lib/languages/awk.js +0 -73
  579. package/node_modules/highlight.js/lib/languages/axapta.js +0 -179
  580. package/node_modules/highlight.js/lib/languages/bash.js +0 -169
  581. package/node_modules/highlight.js/lib/languages/basic.js +0 -65
  582. package/node_modules/highlight.js/lib/languages/bnf.js +0 -38
  583. package/node_modules/highlight.js/lib/languages/brainfuck.js +0 -46
  584. package/node_modules/highlight.js/lib/languages/c-like.js +0 -501
  585. package/node_modules/highlight.js/lib/languages/c.js +0 -309
  586. package/node_modules/highlight.js/lib/languages/cal.js +0 -104
  587. package/node_modules/highlight.js/lib/languages/capnproto.js +0 -64
  588. package/node_modules/highlight.js/lib/languages/ceylon.js +0 -82
  589. package/node_modules/highlight.js/lib/languages/clean.js +0 -40
  590. package/node_modules/highlight.js/lib/languages/clojure-repl.js +0 -27
  591. package/node_modules/highlight.js/lib/languages/clojure.js +0 -158
  592. package/node_modules/highlight.js/lib/languages/cmake.js +0 -64
  593. package/node_modules/highlight.js/lib/languages/coffeescript.js +0 -356
  594. package/node_modules/highlight.js/lib/languages/coq.js +0 -79
  595. package/node_modules/highlight.js/lib/languages/cos.js +0 -138
  596. package/node_modules/highlight.js/lib/languages/cpp.js +0 -464
  597. package/node_modules/highlight.js/lib/languages/crmsh.js +0 -102
  598. package/node_modules/highlight.js/lib/languages/crystal.js +0 -326
  599. package/node_modules/highlight.js/lib/languages/csharp.js +0 -441
  600. package/node_modules/highlight.js/lib/languages/csp.js +0 -37
  601. package/node_modules/highlight.js/lib/languages/css.js +0 -608
  602. package/node_modules/highlight.js/lib/languages/d.js +0 -271
  603. package/node_modules/highlight.js/lib/languages/dart.js +0 -199
  604. package/node_modules/highlight.js/lib/languages/delphi.js +0 -126
  605. package/node_modules/highlight.js/lib/languages/diff.js +0 -85
  606. package/node_modules/highlight.js/lib/languages/django.js +0 -77
  607. package/node_modules/highlight.js/lib/languages/dns.js +0 -46
  608. package/node_modules/highlight.js/lib/languages/dockerfile.js +0 -34
  609. package/node_modules/highlight.js/lib/languages/dos.js +0 -70
  610. package/node_modules/highlight.js/lib/languages/dsconfig.js +0 -66
  611. package/node_modules/highlight.js/lib/languages/dts.js +0 -153
  612. package/node_modules/highlight.js/lib/languages/dust.js +0 -45
  613. package/node_modules/highlight.js/lib/languages/ebnf.js +0 -53
  614. package/node_modules/highlight.js/lib/languages/elixir.js +0 -259
  615. package/node_modules/highlight.js/lib/languages/elm.js +0 -129
  616. package/node_modules/highlight.js/lib/languages/erb.js +0 -29
  617. package/node_modules/highlight.js/lib/languages/erlang-repl.js +0 -86
  618. package/node_modules/highlight.js/lib/languages/erlang.js +0 -199
  619. package/node_modules/highlight.js/lib/languages/excel.js +0 -64
  620. package/node_modules/highlight.js/lib/languages/fix.js +0 -37
  621. package/node_modules/highlight.js/lib/languages/flix.js +0 -54
  622. package/node_modules/highlight.js/lib/languages/fortran.js +0 -159
  623. package/node_modules/highlight.js/lib/languages/fsharp.js +0 -86
  624. package/node_modules/highlight.js/lib/languages/gams.js +0 -208
  625. package/node_modules/highlight.js/lib/languages/gauss.js +0 -316
  626. package/node_modules/highlight.js/lib/languages/gcode.js +0 -88
  627. package/node_modules/highlight.js/lib/languages/gherkin.js +0 -49
  628. package/node_modules/highlight.js/lib/languages/glsl.js +0 -128
  629. package/node_modules/highlight.js/lib/languages/gml.js +0 -885
  630. package/node_modules/highlight.js/lib/languages/go.js +0 -74
  631. package/node_modules/highlight.js/lib/languages/golo.js +0 -33
  632. package/node_modules/highlight.js/lib/languages/gradle.js +0 -44
  633. package/node_modules/highlight.js/lib/languages/groovy.js +0 -174
  634. package/node_modules/highlight.js/lib/languages/haml.js +0 -117
  635. package/node_modules/highlight.js/lib/languages/handlebars.js +0 -324
  636. package/node_modules/highlight.js/lib/languages/haskell.js +0 -173
  637. package/node_modules/highlight.js/lib/languages/haxe.js +0 -157
  638. package/node_modules/highlight.js/lib/languages/hsp.js +0 -65
  639. package/node_modules/highlight.js/lib/languages/htmlbars.js +0 -352
  640. package/node_modules/highlight.js/lib/languages/http.js +0 -121
  641. package/node_modules/highlight.js/lib/languages/hy.js +0 -109
  642. package/node_modules/highlight.js/lib/languages/inform7.js +0 -70
  643. package/node_modules/highlight.js/lib/languages/ini.js +0 -173
  644. package/node_modules/highlight.js/lib/languages/irpf90.js +0 -141
  645. package/node_modules/highlight.js/lib/languages/isbl.js +0 -3207
  646. package/node_modules/highlight.js/lib/languages/java.js +0 -181
  647. package/node_modules/highlight.js/lib/languages/javascript.js +0 -604
  648. package/node_modules/highlight.js/lib/languages/jboss-cli.js +0 -63
  649. package/node_modules/highlight.js/lib/languages/json.js +0 -63
  650. package/node_modules/highlight.js/lib/languages/julia-repl.js +0 -50
  651. package/node_modules/highlight.js/lib/languages/julia.js +0 -416
  652. package/node_modules/highlight.js/lib/languages/kotlin.js +0 -284
  653. package/node_modules/highlight.js/lib/languages/lasso.js +0 -187
  654. package/node_modules/highlight.js/lib/languages/latex.js +0 -276
  655. package/node_modules/highlight.js/lib/languages/ldif.js +0 -42
  656. package/node_modules/highlight.js/lib/languages/leaf.js +0 -49
  657. package/node_modules/highlight.js/lib/languages/less.js +0 -666
  658. package/node_modules/highlight.js/lib/languages/lisp.js +0 -111
  659. package/node_modules/highlight.js/lib/languages/livecodeserver.js +0 -189
  660. package/node_modules/highlight.js/lib/languages/livescript.js +0 -374
  661. package/node_modules/highlight.js/lib/languages/llvm.js +0 -154
  662. package/node_modules/highlight.js/lib/languages/lsl.js +0 -95
  663. package/node_modules/highlight.js/lib/languages/lua.js +0 -82
  664. package/node_modules/highlight.js/lib/languages/makefile.js +0 -92
  665. package/node_modules/highlight.js/lib/languages/markdown.js +0 -258
  666. package/node_modules/highlight.js/lib/languages/mathematica.js +0 -6797
  667. package/node_modules/highlight.js/lib/languages/matlab.js +0 -106
  668. package/node_modules/highlight.js/lib/languages/maxima.js +0 -417
  669. package/node_modules/highlight.js/lib/languages/mel.js +0 -236
  670. package/node_modules/highlight.js/lib/languages/mercury.js +0 -121
  671. package/node_modules/highlight.js/lib/languages/mipsasm.js +0 -109
  672. package/node_modules/highlight.js/lib/languages/mizar.js +0 -29
  673. package/node_modules/highlight.js/lib/languages/mojolicious.js +0 -36
  674. package/node_modules/highlight.js/lib/languages/monkey.js +0 -89
  675. package/node_modules/highlight.js/lib/languages/moonscript.js +0 -147
  676. package/node_modules/highlight.js/lib/languages/n1ql.js +0 -77
  677. package/node_modules/highlight.js/lib/languages/nginx.js +0 -140
  678. package/node_modules/highlight.js/lib/languages/nim.js +0 -79
  679. package/node_modules/highlight.js/lib/languages/nix.js +0 -65
  680. package/node_modules/highlight.js/lib/languages/node-repl.js +0 -37
  681. package/node_modules/highlight.js/lib/languages/nsis.js +0 -119
  682. package/node_modules/highlight.js/lib/languages/objectivec.js +0 -121
  683. package/node_modules/highlight.js/lib/languages/ocaml.js +0 -82
  684. package/node_modules/highlight.js/lib/languages/openscad.js +0 -81
  685. package/node_modules/highlight.js/lib/languages/oxygene.js +0 -101
  686. package/node_modules/highlight.js/lib/languages/parser3.js +0 -57
  687. package/node_modules/highlight.js/lib/languages/perl.js +0 -515
  688. package/node_modules/highlight.js/lib/languages/pf.js +0 -59
  689. package/node_modules/highlight.js/lib/languages/pgsql.js +0 -630
  690. package/node_modules/highlight.js/lib/languages/php-template.js +0 -54
  691. package/node_modules/highlight.js/lib/languages/php.js +0 -204
  692. package/node_modules/highlight.js/lib/languages/plaintext.js +0 -19
  693. package/node_modules/highlight.js/lib/languages/pony.js +0 -89
  694. package/node_modules/highlight.js/lib/languages/powershell.js +0 -331
  695. package/node_modules/highlight.js/lib/languages/processing.js +0 -58
  696. package/node_modules/highlight.js/lib/languages/profile.js +0 -43
  697. package/node_modules/highlight.js/lib/languages/prolog.js +0 -102
  698. package/node_modules/highlight.js/lib/languages/properties.js +0 -85
  699. package/node_modules/highlight.js/lib/languages/protobuf.js +0 -47
  700. package/node_modules/highlight.js/lib/languages/puppet.js +0 -147
  701. package/node_modules/highlight.js/lib/languages/purebasic.js +0 -101
  702. package/node_modules/highlight.js/lib/languages/python-repl.js +0 -36
  703. package/node_modules/highlight.js/lib/languages/python.js +0 -446
  704. package/node_modules/highlight.js/lib/languages/q.js +0 -37
  705. package/node_modules/highlight.js/lib/languages/qml.js +0 -225
  706. package/node_modules/highlight.js/lib/languages/r.js +0 -231
  707. package/node_modules/highlight.js/lib/languages/reasonml.js +0 -321
  708. package/node_modules/highlight.js/lib/languages/rib.js +0 -37
  709. package/node_modules/highlight.js/lib/languages/roboconf.js +0 -82
  710. package/node_modules/highlight.js/lib/languages/routeros.js +0 -172
  711. package/node_modules/highlight.js/lib/languages/rsl.js +0 -49
  712. package/node_modules/highlight.js/lib/languages/ruby.js +0 -387
  713. package/node_modules/highlight.js/lib/languages/ruleslanguage.js +0 -78
  714. package/node_modules/highlight.js/lib/languages/rust.js +0 -146
  715. package/node_modules/highlight.js/lib/languages/sas.js +0 -133
  716. package/node_modules/highlight.js/lib/languages/scala.js +0 -140
  717. package/node_modules/highlight.js/lib/languages/scheme.js +0 -207
  718. package/node_modules/highlight.js/lib/languages/scilab.js +0 -73
  719. package/node_modules/highlight.js/lib/languages/scss.js +0 -545
  720. package/node_modules/highlight.js/lib/languages/shell.js +0 -30
  721. package/node_modules/highlight.js/lib/languages/smali.js +0 -135
  722. package/node_modules/highlight.js/lib/languages/smalltalk.js +0 -63
  723. package/node_modules/highlight.js/lib/languages/sml.js +0 -81
  724. package/node_modules/highlight.js/lib/languages/sqf.js +0 -448
  725. package/node_modules/highlight.js/lib/languages/sql.js +0 -699
  726. package/node_modules/highlight.js/lib/languages/sql_more.js +0 -183
  727. package/node_modules/highlight.js/lib/languages/stan.js +0 -548
  728. package/node_modules/highlight.js/lib/languages/stata.js +0 -60
  729. package/node_modules/highlight.js/lib/languages/step21.js +0 -66
  730. package/node_modules/highlight.js/lib/languages/stylus.js +0 -609
  731. package/node_modules/highlight.js/lib/languages/subunit.js +0 -51
  732. package/node_modules/highlight.js/lib/languages/swift.js +0 -873
  733. package/node_modules/highlight.js/lib/languages/taggerscript.js +0 -52
  734. package/node_modules/highlight.js/lib/languages/tap.js +0 -55
  735. package/node_modules/highlight.js/lib/languages/tcl.js +0 -115
  736. package/node_modules/highlight.js/lib/languages/thrift.js +0 -51
  737. package/node_modules/highlight.js/lib/languages/tp.js +0 -95
  738. package/node_modules/highlight.js/lib/languages/twig.js +0 -77
  739. package/node_modules/highlight.js/lib/languages/typescript.js +0 -697
  740. package/node_modules/highlight.js/lib/languages/vala.js +0 -61
  741. package/node_modules/highlight.js/lib/languages/vbnet.js +0 -214
  742. package/node_modules/highlight.js/lib/languages/vbscript-html.js +0 -24
  743. package/node_modules/highlight.js/lib/languages/vbscript.js +0 -109
  744. package/node_modules/highlight.js/lib/languages/verilog.js +0 -131
  745. package/node_modules/highlight.js/lib/languages/vhdl.js +0 -71
  746. package/node_modules/highlight.js/lib/languages/vim.js +0 -123
  747. package/node_modules/highlight.js/lib/languages/x86asm.js +0 -163
  748. package/node_modules/highlight.js/lib/languages/xl.js +0 -92
  749. package/node_modules/highlight.js/lib/languages/xml.js +0 -287
  750. package/node_modules/highlight.js/lib/languages/xquery.js +0 -197
  751. package/node_modules/highlight.js/lib/languages/yaml.js +0 -176
  752. package/node_modules/highlight.js/lib/languages/zephir.js +0 -140
  753. package/node_modules/highlight.js/package.json +0 -86
  754. package/node_modules/highlight.js/scss/a11y-dark.scss +0 -99
  755. package/node_modules/highlight.js/scss/a11y-light.scss +0 -99
  756. package/node_modules/highlight.js/scss/agate.scss +0 -108
  757. package/node_modules/highlight.js/scss/an-old-hope.scss +0 -89
  758. package/node_modules/highlight.js/scss/androidstudio.scss +0 -66
  759. package/node_modules/highlight.js/scss/arduino-light.scss +0 -87
  760. package/node_modules/highlight.js/scss/arta.scss +0 -73
  761. package/node_modules/highlight.js/scss/ascetic.scss +0 -45
  762. package/node_modules/highlight.js/scss/atelier-cave-dark.scss +0 -83
  763. package/node_modules/highlight.js/scss/atelier-cave-light.scss +0 -85
  764. package/node_modules/highlight.js/scss/atelier-dune-dark.scss +0 -69
  765. package/node_modules/highlight.js/scss/atelier-dune-light.scss +0 -69
  766. package/node_modules/highlight.js/scss/atelier-estuary-dark.scss +0 -84
  767. package/node_modules/highlight.js/scss/atelier-estuary-light.scss +0 -84
  768. package/node_modules/highlight.js/scss/atelier-forest-dark.scss +0 -69
  769. package/node_modules/highlight.js/scss/atelier-forest-light.scss +0 -69
  770. package/node_modules/highlight.js/scss/atelier-heath-dark.scss +0 -69
  771. package/node_modules/highlight.js/scss/atelier-heath-light.scss +0 -69
  772. package/node_modules/highlight.js/scss/atelier-lakeside-dark.scss +0 -69
  773. package/node_modules/highlight.js/scss/atelier-lakeside-light.scss +0 -69
  774. package/node_modules/highlight.js/scss/atelier-plateau-dark.scss +0 -84
  775. package/node_modules/highlight.js/scss/atelier-plateau-light.scss +0 -84
  776. package/node_modules/highlight.js/scss/atelier-savanna-dark.scss +0 -84
  777. package/node_modules/highlight.js/scss/atelier-savanna-light.scss +0 -84
  778. package/node_modules/highlight.js/scss/atelier-seaside-dark.scss +0 -69
  779. package/node_modules/highlight.js/scss/atelier-seaside-light.scss +0 -69
  780. package/node_modules/highlight.js/scss/atelier-sulphurpool-dark.scss +0 -69
  781. package/node_modules/highlight.js/scss/atelier-sulphurpool-light.scss +0 -69
  782. package/node_modules/highlight.js/scss/atom-one-dark-reasonable.scss +0 -75
  783. package/node_modules/highlight.js/scss/atom-one-dark.scss +0 -96
  784. package/node_modules/highlight.js/scss/atom-one-light.scss +0 -96
  785. package/node_modules/highlight.js/scss/brown-paper.scss +0 -64
  786. package/node_modules/highlight.js/scss/brown-papersq.png +0 -0
  787. package/node_modules/highlight.js/scss/codepen-embed.scss +0 -60
  788. package/node_modules/highlight.js/scss/color-brewer.scss +0 -71
  789. package/node_modules/highlight.js/scss/darcula.scss +0 -74
  790. package/node_modules/highlight.js/scss/dark.scss +0 -63
  791. package/node_modules/highlight.js/scss/default.scss +0 -99
  792. package/node_modules/highlight.js/scss/docco.scss +0 -97
  793. package/node_modules/highlight.js/scss/dracula.scss +0 -76
  794. package/node_modules/highlight.js/scss/far.scss +0 -71
  795. package/node_modules/highlight.js/scss/foundation.scss +0 -89
  796. package/node_modules/highlight.js/scss/github-gist.scss +0 -79
  797. package/node_modules/highlight.js/scss/github.scss +0 -99
  798. package/node_modules/highlight.js/scss/gml.scss +0 -78
  799. package/node_modules/highlight.js/scss/googlecode.scss +0 -89
  800. package/node_modules/highlight.js/scss/gradient-dark.scss +0 -122
  801. package/node_modules/highlight.js/scss/gradient-light.scss +0 -130
  802. package/node_modules/highlight.js/scss/grayscale.scss +0 -101
  803. package/node_modules/highlight.js/scss/gruvbox-dark.scss +0 -108
  804. package/node_modules/highlight.js/scss/gruvbox-light.scss +0 -108
  805. package/node_modules/highlight.js/scss/hopscotch.scss +0 -84
  806. package/node_modules/highlight.js/scss/hybrid.scss +0 -102
  807. package/node_modules/highlight.js/scss/idea.scss +0 -97
  808. package/node_modules/highlight.js/scss/ir-black.scss +0 -73
  809. package/node_modules/highlight.js/scss/isbl-editor-dark.scss +0 -112
  810. package/node_modules/highlight.js/scss/isbl-editor-light.scss +0 -111
  811. package/node_modules/highlight.js/scss/kimbie.dark.scss +0 -74
  812. package/node_modules/highlight.js/scss/kimbie.light.scss +0 -74
  813. package/node_modules/highlight.js/scss/lightfair.scss +0 -88
  814. package/node_modules/highlight.js/scss/lioshi.scss +0 -88
  815. package/node_modules/highlight.js/scss/magula.scss +0 -70
  816. package/node_modules/highlight.js/scss/mono-blue.scss +0 -56
  817. package/node_modules/highlight.js/scss/monokai-sublime.scss +0 -83
  818. package/node_modules/highlight.js/scss/monokai.scss +0 -71
  819. package/node_modules/highlight.js/scss/night-owl.scss +0 -182
  820. package/node_modules/highlight.js/scss/nnfx-dark.scss +0 -106
  821. package/node_modules/highlight.js/scss/nnfx.scss +0 -106
  822. package/node_modules/highlight.js/scss/nord.scss +0 -309
  823. package/node_modules/highlight.js/scss/obsidian.scss +0 -88
  824. package/node_modules/highlight.js/scss/ocean.scss +0 -74
  825. package/node_modules/highlight.js/scss/paraiso-dark.scss +0 -72
  826. package/node_modules/highlight.js/scss/paraiso-light.scss +0 -72
  827. package/node_modules/highlight.js/scss/pojoaque.jpg +0 -0
  828. package/node_modules/highlight.js/scss/pojoaque.scss +0 -83
  829. package/node_modules/highlight.js/scss/purebasic.scss +0 -96
  830. package/node_modules/highlight.js/scss/qtcreator_dark.scss +0 -83
  831. package/node_modules/highlight.js/scss/qtcreator_light.scss +0 -83
  832. package/node_modules/highlight.js/scss/railscasts.scss +0 -106
  833. package/node_modules/highlight.js/scss/rainbow.scss +0 -85
  834. package/node_modules/highlight.js/scss/routeros.scss +0 -108
  835. package/node_modules/highlight.js/scss/school-book.png +0 -0
  836. package/node_modules/highlight.js/scss/school-book.scss +0 -69
  837. package/node_modules/highlight.js/scss/shades-of-purple.scss +0 -96
  838. package/node_modules/highlight.js/scss/solarized-dark.scss +0 -84
  839. package/node_modules/highlight.js/scss/solarized-light.scss +0 -84
  840. package/node_modules/highlight.js/scss/srcery.scss +0 -78
  841. package/node_modules/highlight.js/scss/stackoverflow-dark.scss +0 -78
  842. package/node_modules/highlight.js/scss/stackoverflow-light.scss +0 -78
  843. package/node_modules/highlight.js/scss/sunburst.scss +0 -102
  844. package/node_modules/highlight.js/scss/tomorrow-night-blue.scss +0 -75
  845. package/node_modules/highlight.js/scss/tomorrow-night-bright.scss +0 -74
  846. package/node_modules/highlight.js/scss/tomorrow-night-eighties.scss +0 -74
  847. package/node_modules/highlight.js/scss/tomorrow-night.scss +0 -75
  848. package/node_modules/highlight.js/scss/tomorrow.scss +0 -72
  849. package/node_modules/highlight.js/scss/vs.scss +0 -68
  850. package/node_modules/highlight.js/scss/vs2015.scss +0 -115
  851. package/node_modules/highlight.js/scss/xcode.scss +0 -104
  852. package/node_modules/highlight.js/scss/xt256.scss +0 -92
  853. package/node_modules/highlight.js/scss/zenburn.scss +0 -80
  854. package/node_modules/highlight.js/styles/a11y-dark.css +0 -99
  855. package/node_modules/highlight.js/styles/a11y-light.css +0 -99
  856. package/node_modules/highlight.js/styles/agate.css +0 -108
  857. package/node_modules/highlight.js/styles/an-old-hope.css +0 -89
  858. package/node_modules/highlight.js/styles/androidstudio.css +0 -66
  859. package/node_modules/highlight.js/styles/arduino-light.css +0 -87
  860. package/node_modules/highlight.js/styles/arta.css +0 -73
  861. package/node_modules/highlight.js/styles/ascetic.css +0 -45
  862. package/node_modules/highlight.js/styles/atelier-cave-dark.css +0 -83
  863. package/node_modules/highlight.js/styles/atelier-cave-light.css +0 -85
  864. package/node_modules/highlight.js/styles/atelier-dune-dark.css +0 -69
  865. package/node_modules/highlight.js/styles/atelier-dune-light.css +0 -69
  866. package/node_modules/highlight.js/styles/atelier-estuary-dark.css +0 -84
  867. package/node_modules/highlight.js/styles/atelier-estuary-light.css +0 -84
  868. package/node_modules/highlight.js/styles/atelier-forest-dark.css +0 -69
  869. package/node_modules/highlight.js/styles/atelier-forest-light.css +0 -69
  870. package/node_modules/highlight.js/styles/atelier-heath-dark.css +0 -69
  871. package/node_modules/highlight.js/styles/atelier-heath-light.css +0 -69
  872. package/node_modules/highlight.js/styles/atelier-lakeside-dark.css +0 -69
  873. package/node_modules/highlight.js/styles/atelier-lakeside-light.css +0 -69
  874. package/node_modules/highlight.js/styles/atelier-plateau-dark.css +0 -84
  875. package/node_modules/highlight.js/styles/atelier-plateau-light.css +0 -84
  876. package/node_modules/highlight.js/styles/atelier-savanna-dark.css +0 -84
  877. package/node_modules/highlight.js/styles/atelier-savanna-light.css +0 -84
  878. package/node_modules/highlight.js/styles/atelier-seaside-dark.css +0 -69
  879. package/node_modules/highlight.js/styles/atelier-seaside-light.css +0 -69
  880. package/node_modules/highlight.js/styles/atelier-sulphurpool-dark.css +0 -69
  881. package/node_modules/highlight.js/styles/atelier-sulphurpool-light.css +0 -69
  882. package/node_modules/highlight.js/styles/atom-one-dark-reasonable.css +0 -75
  883. package/node_modules/highlight.js/styles/atom-one-dark.css +0 -96
  884. package/node_modules/highlight.js/styles/atom-one-light.css +0 -96
  885. package/node_modules/highlight.js/styles/brown-paper.css +0 -64
  886. package/node_modules/highlight.js/styles/brown-papersq.png +0 -0
  887. package/node_modules/highlight.js/styles/codepen-embed.css +0 -60
  888. package/node_modules/highlight.js/styles/color-brewer.css +0 -71
  889. package/node_modules/highlight.js/styles/darcula.css +0 -74
  890. package/node_modules/highlight.js/styles/dark.css +0 -63
  891. package/node_modules/highlight.js/styles/default.css +0 -99
  892. package/node_modules/highlight.js/styles/docco.css +0 -97
  893. package/node_modules/highlight.js/styles/dracula.css +0 -76
  894. package/node_modules/highlight.js/styles/far.css +0 -71
  895. package/node_modules/highlight.js/styles/foundation.css +0 -89
  896. package/node_modules/highlight.js/styles/github-gist.css +0 -79
  897. package/node_modules/highlight.js/styles/github.css +0 -99
  898. package/node_modules/highlight.js/styles/gml.css +0 -78
  899. package/node_modules/highlight.js/styles/googlecode.css +0 -89
  900. package/node_modules/highlight.js/styles/gradient-dark.css +0 -122
  901. package/node_modules/highlight.js/styles/gradient-light.css +0 -130
  902. package/node_modules/highlight.js/styles/grayscale.css +0 -101
  903. package/node_modules/highlight.js/styles/gruvbox-dark.css +0 -108
  904. package/node_modules/highlight.js/styles/gruvbox-light.css +0 -108
  905. package/node_modules/highlight.js/styles/hopscotch.css +0 -84
  906. package/node_modules/highlight.js/styles/hybrid.css +0 -102
  907. package/node_modules/highlight.js/styles/idea.css +0 -97
  908. package/node_modules/highlight.js/styles/ir-black.css +0 -73
  909. package/node_modules/highlight.js/styles/isbl-editor-dark.css +0 -112
  910. package/node_modules/highlight.js/styles/isbl-editor-light.css +0 -111
  911. package/node_modules/highlight.js/styles/kimbie.dark.css +0 -74
  912. package/node_modules/highlight.js/styles/kimbie.light.css +0 -74
  913. package/node_modules/highlight.js/styles/lightfair.css +0 -88
  914. package/node_modules/highlight.js/styles/lioshi.css +0 -88
  915. package/node_modules/highlight.js/styles/magula.css +0 -70
  916. package/node_modules/highlight.js/styles/mono-blue.css +0 -56
  917. package/node_modules/highlight.js/styles/monokai-sublime.css +0 -83
  918. package/node_modules/highlight.js/styles/monokai.css +0 -71
  919. package/node_modules/highlight.js/styles/night-owl.css +0 -182
  920. package/node_modules/highlight.js/styles/nnfx-dark.css +0 -106
  921. package/node_modules/highlight.js/styles/nnfx.css +0 -106
  922. package/node_modules/highlight.js/styles/nord.css +0 -309
  923. package/node_modules/highlight.js/styles/obsidian.css +0 -88
  924. package/node_modules/highlight.js/styles/ocean.css +0 -74
  925. package/node_modules/highlight.js/styles/paraiso-dark.css +0 -72
  926. package/node_modules/highlight.js/styles/paraiso-light.css +0 -72
  927. package/node_modules/highlight.js/styles/pojoaque.css +0 -83
  928. package/node_modules/highlight.js/styles/pojoaque.jpg +0 -0
  929. package/node_modules/highlight.js/styles/purebasic.css +0 -96
  930. package/node_modules/highlight.js/styles/qtcreator_dark.css +0 -83
  931. package/node_modules/highlight.js/styles/qtcreator_light.css +0 -83
  932. package/node_modules/highlight.js/styles/railscasts.css +0 -106
  933. package/node_modules/highlight.js/styles/rainbow.css +0 -85
  934. package/node_modules/highlight.js/styles/routeros.css +0 -108
  935. package/node_modules/highlight.js/styles/school-book.css +0 -69
  936. package/node_modules/highlight.js/styles/school-book.png +0 -0
  937. package/node_modules/highlight.js/styles/shades-of-purple.css +0 -96
  938. package/node_modules/highlight.js/styles/solarized-dark.css +0 -84
  939. package/node_modules/highlight.js/styles/solarized-light.css +0 -84
  940. package/node_modules/highlight.js/styles/srcery.css +0 -78
  941. package/node_modules/highlight.js/styles/stackoverflow-dark.css +0 -78
  942. package/node_modules/highlight.js/styles/stackoverflow-light.css +0 -78
  943. package/node_modules/highlight.js/styles/sunburst.css +0 -102
  944. package/node_modules/highlight.js/styles/tomorrow-night-blue.css +0 -75
  945. package/node_modules/highlight.js/styles/tomorrow-night-bright.css +0 -74
  946. package/node_modules/highlight.js/styles/tomorrow-night-eighties.css +0 -74
  947. package/node_modules/highlight.js/styles/tomorrow-night.css +0 -75
  948. package/node_modules/highlight.js/styles/tomorrow.css +0 -72
  949. package/node_modules/highlight.js/styles/vs.css +0 -68
  950. package/node_modules/highlight.js/styles/vs2015.css +0 -115
  951. package/node_modules/highlight.js/styles/xcode.css +0 -104
  952. package/node_modules/highlight.js/styles/xt256.css +0 -92
  953. package/node_modules/highlight.js/styles/zenburn.css +0 -80
  954. package/node_modules/highlight.js/types/index.d.ts +0 -261
  955. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  956. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  957. package/node_modules/is-fullwidth-code-point/license +0 -9
  958. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  959. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  960. package/node_modules/mz/HISTORY.md +0 -66
  961. package/node_modules/mz/LICENSE +0 -22
  962. package/node_modules/mz/README.md +0 -106
  963. package/node_modules/mz/child_process.js +0 -8
  964. package/node_modules/mz/crypto.js +0 -9
  965. package/node_modules/mz/dns.js +0 -16
  966. package/node_modules/mz/fs.js +0 -62
  967. package/node_modules/mz/index.js +0 -8
  968. package/node_modules/mz/package.json +0 -44
  969. package/node_modules/mz/readline.js +0 -64
  970. package/node_modules/mz/zlib.js +0 -13
  971. package/node_modules/object-assign/index.js +0 -90
  972. package/node_modules/object-assign/license +0 -21
  973. package/node_modules/object-assign/package.json +0 -42
  974. package/node_modules/object-assign/readme.md +0 -61
  975. package/node_modules/parse5/LICENSE +0 -19
  976. package/node_modules/parse5/README.md +0 -38
  977. package/node_modules/parse5/lib/common/doctype.js +0 -162
  978. package/node_modules/parse5/lib/common/error-codes.js +0 -65
  979. package/node_modules/parse5/lib/common/foreign-content.js +0 -265
  980. package/node_modules/parse5/lib/common/html.js +0 -272
  981. package/node_modules/parse5/lib/common/unicode.js +0 -109
  982. package/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
  983. package/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
  984. package/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
  985. package/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
  986. package/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
  987. package/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -222
  988. package/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
  989. package/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
  990. package/node_modules/parse5/lib/index.js +0 -29
  991. package/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
  992. package/node_modules/parse5/lib/parser/index.js +0 -2956
  993. package/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
  994. package/node_modules/parse5/lib/serializer/index.js +0 -176
  995. package/node_modules/parse5/lib/tokenizer/index.js +0 -2196
  996. package/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
  997. package/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
  998. package/node_modules/parse5/lib/tree-adapters/default.js +0 -217
  999. package/node_modules/parse5/lib/utils/merge-options.js +0 -13
  1000. package/node_modules/parse5/lib/utils/mixin.js +0 -39
  1001. package/node_modules/parse5/package.json +0 -35
  1002. package/node_modules/parse5-htmlparser2-tree-adapter/LICENSE +0 -19
  1003. package/node_modules/parse5-htmlparser2-tree-adapter/README.md +0 -34
  1004. package/node_modules/parse5-htmlparser2-tree-adapter/lib/index.js +0 -348
  1005. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/LICENSE +0 -19
  1006. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/README.md +0 -38
  1007. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/doctype.js +0 -162
  1008. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/error-codes.js +0 -65
  1009. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/foreign-content.js +0 -265
  1010. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/html.js +0 -272
  1011. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/unicode.js +0 -109
  1012. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
  1013. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
  1014. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
  1015. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
  1016. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
  1017. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -223
  1018. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
  1019. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
  1020. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/index.js +0 -29
  1021. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
  1022. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/index.js +0 -2956
  1023. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
  1024. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/serializer/index.js +0 -176
  1025. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/index.js +0 -2196
  1026. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
  1027. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
  1028. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tree-adapters/default.js +0 -221
  1029. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/merge-options.js +0 -13
  1030. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/mixin.js +0 -39
  1031. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/package.json +0 -35
  1032. package/node_modules/parse5-htmlparser2-tree-adapter/package.json +0 -27
  1033. package/node_modules/proper-lockfile/CHANGELOG.md +0 -108
  1034. package/node_modules/require-directory/.jshintrc +0 -67
  1035. package/node_modules/require-directory/.npmignore +0 -1
  1036. package/node_modules/require-directory/.travis.yml +0 -3
  1037. package/node_modules/require-directory/LICENSE +0 -22
  1038. package/node_modules/require-directory/README.markdown +0 -184
  1039. package/node_modules/require-directory/index.js +0 -86
  1040. package/node_modules/require-directory/package.json +0 -40
  1041. package/node_modules/source-map/CHANGELOG.md +0 -301
  1042. package/node_modules/string-width/index.d.ts +0 -29
  1043. package/node_modules/string-width/index.js +0 -47
  1044. package/node_modules/string-width/license +0 -9
  1045. package/node_modules/string-width/node_modules/ansi-regex/index.d.ts +0 -37
  1046. package/node_modules/string-width/node_modules/ansi-regex/index.js +0 -10
  1047. package/node_modules/string-width/node_modules/ansi-regex/license +0 -9
  1048. package/node_modules/string-width/node_modules/ansi-regex/package.json +0 -55
  1049. package/node_modules/string-width/node_modules/ansi-regex/readme.md +0 -78
  1050. package/node_modules/string-width/node_modules/strip-ansi/index.d.ts +0 -17
  1051. package/node_modules/string-width/node_modules/strip-ansi/index.js +0 -4
  1052. package/node_modules/string-width/node_modules/strip-ansi/license +0 -9
  1053. package/node_modules/string-width/node_modules/strip-ansi/package.json +0 -54
  1054. package/node_modules/string-width/node_modules/strip-ansi/readme.md +0 -46
  1055. package/node_modules/string-width/package.json +0 -56
  1056. package/node_modules/string-width/readme.md +0 -50
  1057. package/node_modules/supports-color/browser.js +0 -5
  1058. package/node_modules/supports-color/index.js +0 -135
  1059. package/node_modules/supports-color/license +0 -9
  1060. package/node_modules/supports-color/package.json +0 -53
  1061. package/node_modules/supports-color/readme.md +0 -76
  1062. package/node_modules/thenify/History.md +0 -11
  1063. package/node_modules/thenify/LICENSE +0 -22
  1064. package/node_modules/thenify/README.md +0 -120
  1065. package/node_modules/thenify/index.js +0 -77
  1066. package/node_modules/thenify/package.json +0 -31
  1067. package/node_modules/thenify-all/History.md +0 -11
  1068. package/node_modules/thenify-all/LICENSE +0 -22
  1069. package/node_modules/thenify-all/README.md +0 -66
  1070. package/node_modules/thenify-all/index.js +0 -73
  1071. package/node_modules/thenify-all/package.json +0 -34
  1072. package/node_modules/wrap-ansi/index.js +0 -216
  1073. package/node_modules/wrap-ansi/license +0 -9
  1074. package/node_modules/wrap-ansi/node_modules/ansi-regex/index.d.ts +0 -37
  1075. package/node_modules/wrap-ansi/node_modules/ansi-regex/index.js +0 -10
  1076. package/node_modules/wrap-ansi/node_modules/ansi-regex/license +0 -9
  1077. package/node_modules/wrap-ansi/node_modules/ansi-regex/package.json +0 -55
  1078. package/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md +0 -78
  1079. package/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts +0 -17
  1080. package/node_modules/wrap-ansi/node_modules/strip-ansi/index.js +0 -4
  1081. package/node_modules/wrap-ansi/node_modules/strip-ansi/license +0 -9
  1082. package/node_modules/wrap-ansi/node_modules/strip-ansi/package.json +0 -54
  1083. package/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md +0 -46
  1084. package/node_modules/wrap-ansi/package.json +0 -62
  1085. package/node_modules/wrap-ansi/readme.md +0 -91
  1086. package/node_modules/y18n/CHANGELOG.md +0 -100
  1087. package/node_modules/y18n/LICENSE +0 -13
  1088. package/node_modules/y18n/README.md +0 -127
  1089. package/node_modules/y18n/build/index.cjs +0 -203
  1090. package/node_modules/y18n/build/lib/cjs.js +0 -6
  1091. package/node_modules/y18n/build/lib/index.js +0 -174
  1092. package/node_modules/y18n/build/lib/platform-shims/node.js +0 -19
  1093. package/node_modules/y18n/index.mjs +0 -8
  1094. package/node_modules/y18n/package.json +0 -70
  1095. package/node_modules/yargs/CHANGELOG.md +0 -88
  1096. package/node_modules/yargs/LICENSE +0 -21
  1097. package/node_modules/yargs/README.md +0 -202
  1098. package/node_modules/yargs/browser.mjs +0 -7
  1099. package/node_modules/yargs/build/index.cjs +0 -2920
  1100. package/node_modules/yargs/build/lib/argsert.js +0 -62
  1101. package/node_modules/yargs/build/lib/command.js +0 -382
  1102. package/node_modules/yargs/build/lib/completion-templates.js +0 -47
  1103. package/node_modules/yargs/build/lib/completion.js +0 -128
  1104. package/node_modules/yargs/build/lib/middleware.js +0 -53
  1105. package/node_modules/yargs/build/lib/parse-command.js +0 -32
  1106. package/node_modules/yargs/build/lib/typings/common-types.js +0 -9
  1107. package/node_modules/yargs/build/lib/typings/yargs-parser-types.js +0 -1
  1108. package/node_modules/yargs/build/lib/usage.js +0 -548
  1109. package/node_modules/yargs/build/lib/utils/apply-extends.js +0 -59
  1110. package/node_modules/yargs/build/lib/utils/is-promise.js +0 -5
  1111. package/node_modules/yargs/build/lib/utils/levenshtein.js +0 -26
  1112. package/node_modules/yargs/build/lib/utils/obj-filter.js +0 -10
  1113. package/node_modules/yargs/build/lib/utils/process-argv.js +0 -17
  1114. package/node_modules/yargs/build/lib/utils/set-blocking.js +0 -12
  1115. package/node_modules/yargs/build/lib/utils/which-module.js +0 -10
  1116. package/node_modules/yargs/build/lib/validation.js +0 -308
  1117. package/node_modules/yargs/build/lib/yargs-factory.js +0 -1143
  1118. package/node_modules/yargs/build/lib/yerror.js +0 -7
  1119. package/node_modules/yargs/helpers/helpers.mjs +0 -10
  1120. package/node_modules/yargs/helpers/index.js +0 -14
  1121. package/node_modules/yargs/helpers/package.json +0 -3
  1122. package/node_modules/yargs/index.cjs +0 -39
  1123. package/node_modules/yargs/index.mjs +0 -8
  1124. package/node_modules/yargs/lib/platform-shims/browser.mjs +0 -92
  1125. package/node_modules/yargs/lib/platform-shims/esm.mjs +0 -67
  1126. package/node_modules/yargs/locales/be.json +0 -46
  1127. package/node_modules/yargs/locales/de.json +0 -46
  1128. package/node_modules/yargs/locales/en.json +0 -51
  1129. package/node_modules/yargs/locales/es.json +0 -46
  1130. package/node_modules/yargs/locales/fi.json +0 -49
  1131. package/node_modules/yargs/locales/fr.json +0 -53
  1132. package/node_modules/yargs/locales/hi.json +0 -49
  1133. package/node_modules/yargs/locales/hu.json +0 -46
  1134. package/node_modules/yargs/locales/id.json +0 -50
  1135. package/node_modules/yargs/locales/it.json +0 -46
  1136. package/node_modules/yargs/locales/ja.json +0 -51
  1137. package/node_modules/yargs/locales/ko.json +0 -49
  1138. package/node_modules/yargs/locales/nb.json +0 -44
  1139. package/node_modules/yargs/locales/nl.json +0 -49
  1140. package/node_modules/yargs/locales/nn.json +0 -44
  1141. package/node_modules/yargs/locales/pirate.json +0 -13
  1142. package/node_modules/yargs/locales/pl.json +0 -49
  1143. package/node_modules/yargs/locales/pt.json +0 -45
  1144. package/node_modules/yargs/locales/pt_BR.json +0 -48
  1145. package/node_modules/yargs/locales/ru.json +0 -46
  1146. package/node_modules/yargs/locales/th.json +0 -46
  1147. package/node_modules/yargs/locales/tr.json +0 -48
  1148. package/node_modules/yargs/locales/zh_CN.json +0 -48
  1149. package/node_modules/yargs/locales/zh_TW.json +0 -47
  1150. package/node_modules/yargs/package.json +0 -122
  1151. package/node_modules/yargs/yargs +0 -9
  1152. package/node_modules/yargs-parser/CHANGELOG.md +0 -263
  1153. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  1154. package/node_modules/yargs-parser/README.md +0 -518
  1155. package/node_modules/yargs-parser/browser.js +0 -29
  1156. package/node_modules/yargs-parser/build/index.cjs +0 -1042
  1157. package/node_modules/yargs-parser/build/lib/index.js +0 -59
  1158. package/node_modules/yargs-parser/build/lib/string-utils.js +0 -65
  1159. package/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +0 -40
  1160. package/node_modules/yargs-parser/build/lib/yargs-parser-types.js +0 -12
  1161. package/node_modules/yargs-parser/build/lib/yargs-parser.js +0 -1037
  1162. package/node_modules/yargs-parser/package.json +0 -87
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,mBAAmB,CAoBrE,CAAC"}
1
+ {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,mBAAmB,CAqBrE,CAAC"}
@@ -17,6 +17,7 @@ export const BUILTIN_SLASH_COMMANDS = [
17
17
  { name: "compact", description: "Manually compact the session context" },
18
18
  { name: "resume", description: "Resume a different session" },
19
19
  { name: "reload", description: "Reload extensions, skills, prompts, and themes" },
20
+ { name: "thinking", description: "Set thinking level (off/minimal/low/medium/high/xhigh)" },
20
21
  { name: "quit", description: "Quit pi" },
21
22
  ];
22
23
  //# sourceMappingURL=slash-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAClF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACvE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACzD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC3D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACjF,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;CACxC,CAAC","sourcesContent":["export type SlashCommandSource = \"extension\" | \"prompt\" | \"skill\";\n\nexport type SlashCommandLocation = \"user\" | \"project\" | \"path\";\n\nexport interface SlashCommandInfo {\n\tname: string;\n\tdescription?: string;\n\tsource: SlashCommandSource;\n\tlocation?: SlashCommandLocation;\n\tpath?: string;\n}\n\nexport interface BuiltinSlashCommand {\n\tname: string;\n\tdescription: string;\n}\n\nexport const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [\n\t{ name: \"settings\", description: \"Open settings menu\" },\n\t{ name: \"model\", description: \"Select model (opens selector UI)\" },\n\t{ name: \"scoped-models\", description: \"Enable/disable models for Ctrl+P cycling\" },\n\t{ name: \"export\", description: \"Export session to HTML file\" },\n\t{ name: \"share\", description: \"Share session as a secret GitHub gist\" },\n\t{ name: \"copy\", description: \"Copy last agent message to clipboard\" },\n\t{ name: \"name\", description: \"Set session display name\" },\n\t{ name: \"session\", description: \"Show session info and stats\" },\n\t{ name: \"changelog\", description: \"Show changelog entries\" },\n\t{ name: \"hotkeys\", description: \"Show all keyboard shortcuts\" },\n\t{ name: \"fork\", description: \"Create a new fork from a previous message\" },\n\t{ name: \"tree\", description: \"Navigate session tree (switch branches)\" },\n\t{ name: \"login\", description: \"Login with OAuth provider\" },\n\t{ name: \"logout\", description: \"Logout from OAuth provider\" },\n\t{ name: \"new\", description: \"Start a new session\" },\n\t{ name: \"compact\", description: \"Manually compact the session context\" },\n\t{ name: \"resume\", description: \"Resume a different session\" },\n\t{ name: \"reload\", description: \"Reload extensions, skills, prompts, and themes\" },\n\t{ name: \"quit\", description: \"Quit pi\" },\n];\n"]}
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAClF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACvE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACzD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC3D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACjF,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,wDAAwD,EAAE;IAC3F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;CACxC,CAAC","sourcesContent":["export type SlashCommandSource = \"extension\" | \"prompt\" | \"skill\";\n\nexport type SlashCommandLocation = \"user\" | \"project\" | \"path\";\n\nexport interface SlashCommandInfo {\n\tname: string;\n\tdescription?: string;\n\tsource: SlashCommandSource;\n\tlocation?: SlashCommandLocation;\n\tpath?: string;\n}\n\nexport interface BuiltinSlashCommand {\n\tname: string;\n\tdescription: string;\n}\n\nexport const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [\n\t{ name: \"settings\", description: \"Open settings menu\" },\n\t{ name: \"model\", description: \"Select model (opens selector UI)\" },\n\t{ name: \"scoped-models\", description: \"Enable/disable models for Ctrl+P cycling\" },\n\t{ name: \"export\", description: \"Export session to HTML file\" },\n\t{ name: \"share\", description: \"Share session as a secret GitHub gist\" },\n\t{ name: \"copy\", description: \"Copy last agent message to clipboard\" },\n\t{ name: \"name\", description: \"Set session display name\" },\n\t{ name: \"session\", description: \"Show session info and stats\" },\n\t{ name: \"changelog\", description: \"Show changelog entries\" },\n\t{ name: \"hotkeys\", description: \"Show all keyboard shortcuts\" },\n\t{ name: \"fork\", description: \"Create a new fork from a previous message\" },\n\t{ name: \"tree\", description: \"Navigate session tree (switch branches)\" },\n\t{ name: \"login\", description: \"Login with OAuth provider\" },\n\t{ name: \"logout\", description: \"Logout from OAuth provider\" },\n\t{ name: \"new\", description: \"Start a new session\" },\n\t{ name: \"compact\", description: \"Manually compact the session context\" },\n\t{ name: \"resume\", description: \"Resume a different session\" },\n\t{ name: \"reload\", description: \"Reload extensions, skills, prompts, and themes\" },\n\t{ name: \"thinking\", description: \"Set thinking level (off/minimal/low/medium/high/xhigh)\" },\n\t{ name: \"quit\", description: \"Quit pi\" },\n];\n"]}
@@ -25,7 +25,7 @@ export interface FindOperations {
25
25
  }) => Promise<string[]> | string[];
26
26
  }
27
27
  export interface FindToolOptions {
28
- /** Custom operations for find. Default: local filesystem + fd */
28
+ /** Custom operations for find. Default: local filesystem + native glob */
29
29
  operations?: FindOperations;
30
30
  }
31
31
  export declare function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAOtD,OAAO,EAAiC,KAAK,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAEnG,QAAA,MAAM,UAAU;;;;EAMd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAItD,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,2BAA2B;IAC3B,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7D,gEAAgE;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACnH;AAUD,MAAM,WAAW,eAAe;IAC/B,iEAAiE;IACjE,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CA0NnG;AAED,0EAA0E;AAC1E,eAAO,MAAM,QAAQ;;;;QAAgC,CAAC"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAItD,OAAO,EAAiC,KAAK,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAEnG,QAAA,MAAM,UAAU;;;;EAMd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAItD,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,2BAA2B;IAC3B,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7D,gEAAgE;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACnH;AAUD,MAAM,WAAW,eAAe;IAC/B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CAiJnG;AAED,0EAA0E;AAC1E,eAAO,MAAM,QAAQ;;;;QAAgC,CAAC"}
@@ -1,9 +1,7 @@
1
+ import { glob as nativeGlob } from "@gsd/native/glob";
1
2
  import { Type } from "@sinclair/typebox";
2
- import { spawnSync } from "child_process";
3
3
  import { existsSync } from "fs";
4
- import { globSync } from "glob";
5
4
  import path from "path";
6
- import { ensureTool } from "../../utils/tools-manager.js";
7
5
  import { resolveToCwd } from "./path-utils.js";
8
6
  import { DEFAULT_MAX_BYTES, formatSize, truncateHead } from "./truncate.js";
9
7
  const findSchema = Type.Object({
@@ -17,7 +15,7 @@ const DEFAULT_LIMIT = 1000;
17
15
  const defaultFindOperations = {
18
16
  exists: existsSync,
19
17
  glob: (_pattern, _searchCwd, _options) => {
20
- // This is a placeholder - actual fd execution happens in execute
18
+ // Placeholder actual native glob execution happens in execute
21
19
  return [];
22
20
  },
23
21
  };
@@ -89,87 +87,24 @@ export function createFindTool(cwd, options) {
89
87
  });
90
88
  return;
91
89
  }
92
- // Default: use fd
93
- const fdPath = await ensureTool("fd", true);
94
- if (!fdPath) {
95
- reject(new Error("fd is not available and could not be downloaded"));
96
- return;
97
- }
98
- // Build fd arguments
99
- const args = [
100
- "--glob",
101
- "--color=never",
102
- "--hidden",
103
- "--max-results",
104
- String(effectiveLimit),
105
- ];
106
- // Include .gitignore files
107
- const gitignoreFiles = new Set();
108
- const rootGitignore = path.join(searchPath, ".gitignore");
109
- if (existsSync(rootGitignore)) {
110
- gitignoreFiles.add(rootGitignore);
111
- }
112
- try {
113
- const nestedGitignores = globSync("**/.gitignore", {
114
- cwd: searchPath,
115
- dot: true,
116
- absolute: true,
117
- ignore: ["**/node_modules/**", "**/.git/**"],
118
- });
119
- for (const file of nestedGitignores) {
120
- gitignoreFiles.add(file);
121
- }
122
- }
123
- catch {
124
- // Ignore glob errors
125
- }
126
- for (const gitignorePath of gitignoreFiles) {
127
- args.push("--ignore-file", gitignorePath);
128
- }
129
- args.push(pattern, searchPath);
130
- const result = spawnSync(fdPath, args, {
131
- encoding: "utf-8",
132
- maxBuffer: 10 * 1024 * 1024,
90
+ // Default: use native Rust glob
91
+ const globResult = await nativeGlob({
92
+ pattern,
93
+ path: searchPath,
94
+ hidden: true,
95
+ gitignore: true,
96
+ maxResults: effectiveLimit,
133
97
  });
134
98
  signal?.removeEventListener("abort", onAbort);
135
- if (result.error) {
136
- reject(new Error(`Failed to run fd: ${result.error.message}`));
137
- return;
138
- }
139
- const output = result.stdout?.trim() || "";
140
- if (result.status !== 0) {
141
- const errorMsg = result.stderr?.trim() || `fd exited with code ${result.status}`;
142
- if (!output) {
143
- reject(new Error(errorMsg));
144
- return;
145
- }
146
- }
147
- if (!output) {
99
+ if (globResult.matches.length === 0) {
148
100
  resolve({
149
101
  content: [{ type: "text", text: "No files found matching pattern" }],
150
102
  details: undefined,
151
103
  });
152
104
  return;
153
105
  }
154
- const lines = output.split("\n");
155
- const relativized = [];
156
- for (const rawLine of lines) {
157
- const line = rawLine.replace(/\r$/, "").trim();
158
- if (!line)
159
- continue;
160
- const hadTrailingSlash = line.endsWith("/") || line.endsWith("\\");
161
- let relativePath = line;
162
- if (line.startsWith(searchPath)) {
163
- relativePath = line.slice(searchPath.length + 1);
164
- }
165
- else {
166
- relativePath = path.relative(searchPath, line);
167
- }
168
- if (hadTrailingSlash && !relativePath.endsWith("/")) {
169
- relativePath += "/";
170
- }
171
- relativized.push(relativePath);
172
- }
106
+ // Native glob returns paths relative to the search root
107
+ const relativized = globResult.matches.map((m) => m.path);
173
108
  const resultLimitReached = relativized.length >= effectiveLimit;
174
109
  const rawOutput = relativized.join("\n");
175
110
  const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { spawnSync } from \"child_process\";\nimport { existsSync } from \"fs\";\nimport { globSync } from \"glob\";\nimport path from \"path\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { resolveToCwd } from \"./path-utils.js\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription: \"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(Type.String({ description: \"Directory to search in (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of results (default: 1000)\" })),\n});\n\nexport type FindToolInput = Static<typeof findSchema>;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport interface FindToolDetails {\n\ttruncation?: TruncationResult;\n\tresultLimitReached?: number;\n}\n\n/**\n * Pluggable operations for the find tool.\n * Override these to delegate file search to remote systems (e.g., SSH).\n */\nexport interface FindOperations {\n\t/** Check if path exists */\n\texists: (absolutePath: string) => Promise<boolean> | boolean;\n\t/** Find files matching glob pattern. Returns relative paths. */\n\tglob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];\n}\n\nconst defaultFindOperations: FindOperations = {\n\texists: existsSync,\n\tglob: (_pattern, _searchCwd, _options) => {\n\t\t// This is a placeholder - actual fd execution happens in execute\n\t\treturn [];\n\t},\n};\n\nexport interface FindToolOptions {\n\t/** Custom operations for find. Default: local filesystem + fd */\n\toperations?: FindOperations;\n}\n\nexport function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema> {\n\tconst customOps = options?.operations;\n\n\treturn {\n\t\tname: \"find\",\n\t\tlabel: \"find\",\n\t\tdescription: `Search for files by glob pattern. Returns matching file paths relative to the search directory. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} results or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tparameters: findSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\t{ pattern, path: searchDir, limit }: { pattern: string; path?: string; limit?: number },\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst searchPath = resolveToCwd(searchDir || \".\", cwd);\n\t\t\t\t\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\t\t\t\t\t\tconst ops = customOps ?? defaultFindOperations;\n\n\t\t\t\t\t\t// If custom operations provided with glob, use that\n\t\t\t\t\t\tif (customOps?.glob) {\n\t\t\t\t\t\t\tif (!(await ops.exists(searchPath))) {\n\t\t\t\t\t\t\t\treject(new Error(`Path not found: ${searchPath}`));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst results = await ops.glob(pattern, searchPath, {\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t\tlimit: effectiveLimit,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\t\tif (results.length === 0) {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Relativize paths\n\t\t\t\t\t\t\tconst relativized = results.map((p) => {\n\t\t\t\t\t\t\t\tif (p.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\t\treturn p.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn path.relative(searchPath, p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\t\tnotices.push(`${effectiveLimit} results limit reached`);\n\t\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Default: use fd\n\t\t\t\t\t\tconst fdPath = await ensureTool(\"fd\", true);\n\t\t\t\t\t\tif (!fdPath) {\n\t\t\t\t\t\t\treject(new Error(\"fd is not available and could not be downloaded\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Build fd arguments\n\t\t\t\t\t\tconst args: string[] = [\n\t\t\t\t\t\t\t\"--glob\",\n\t\t\t\t\t\t\t\"--color=never\",\n\t\t\t\t\t\t\t\"--hidden\",\n\t\t\t\t\t\t\t\"--max-results\",\n\t\t\t\t\t\t\tString(effectiveLimit),\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\t// Include .gitignore files\n\t\t\t\t\t\tconst gitignoreFiles = new Set<string>();\n\t\t\t\t\t\tconst rootGitignore = path.join(searchPath, \".gitignore\");\n\t\t\t\t\t\tif (existsSync(rootGitignore)) {\n\t\t\t\t\t\t\tgitignoreFiles.add(rootGitignore);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst nestedGitignores = globSync(\"**/.gitignore\", {\n\t\t\t\t\t\t\t\tcwd: searchPath,\n\t\t\t\t\t\t\t\tdot: true,\n\t\t\t\t\t\t\t\tabsolute: true,\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const file of nestedGitignores) {\n\t\t\t\t\t\t\t\tgitignoreFiles.add(file);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Ignore glob errors\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const gitignorePath of gitignoreFiles) {\n\t\t\t\t\t\t\targs.push(\"--ignore-file\", gitignorePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\targs.push(pattern, searchPath);\n\n\t\t\t\t\t\tconst result = spawnSync(fdPath, args, {\n\t\t\t\t\t\t\tencoding: \"utf-8\",\n\t\t\t\t\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\treject(new Error(`Failed to run fd: ${result.error.message}`));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst output = result.stdout?.trim() || \"\";\n\n\t\t\t\t\t\tif (result.status !== 0) {\n\t\t\t\t\t\t\tconst errorMsg = result.stderr?.trim() || `fd exited with code ${result.status}`;\n\t\t\t\t\t\t\tif (!output) {\n\t\t\t\t\t\t\t\treject(new Error(errorMsg));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!output) {\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst relativized: string[] = [];\n\n\t\t\t\t\t\tfor (const rawLine of lines) {\n\t\t\t\t\t\t\tconst line = rawLine.replace(/\\r$/, \"\").trim();\n\t\t\t\t\t\t\tif (!line) continue;\n\n\t\t\t\t\t\t\tconst hadTrailingSlash = line.endsWith(\"/\") || line.endsWith(\"\\\\\");\n\t\t\t\t\t\t\tlet relativePath = line;\n\t\t\t\t\t\t\tif (line.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\trelativePath = line.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trelativePath = path.relative(searchPath, line);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hadTrailingSlash && !relativePath.endsWith(\"/\")) {\n\t\t\t\t\t\t\t\trelativePath += \"/\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trelativized.push(relativePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\tnotices.push(\n\t\t\t\t\t\t\t\t`${effectiveLimit} results limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default find tool using process.cwd() - for backwards compatibility */\nexport const findTool = createFindTool(process.cwd());\n"]}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { glob as nativeGlob } from \"@gsd/native/glob\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { existsSync } from \"fs\";\nimport path from \"path\";\nimport { resolveToCwd } from \"./path-utils.js\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription: \"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(Type.String({ description: \"Directory to search in (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of results (default: 1000)\" })),\n});\n\nexport type FindToolInput = Static<typeof findSchema>;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport interface FindToolDetails {\n\ttruncation?: TruncationResult;\n\tresultLimitReached?: number;\n}\n\n/**\n * Pluggable operations for the find tool.\n * Override these to delegate file search to remote systems (e.g., SSH).\n */\nexport interface FindOperations {\n\t/** Check if path exists */\n\texists: (absolutePath: string) => Promise<boolean> | boolean;\n\t/** Find files matching glob pattern. Returns relative paths. */\n\tglob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];\n}\n\nconst defaultFindOperations: FindOperations = {\n\texists: existsSync,\n\tglob: (_pattern, _searchCwd, _options) => {\n\t\t// Placeholder — actual native glob execution happens in execute\n\t\treturn [];\n\t},\n};\n\nexport interface FindToolOptions {\n\t/** Custom operations for find. Default: local filesystem + native glob */\n\toperations?: FindOperations;\n}\n\nexport function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema> {\n\tconst customOps = options?.operations;\n\n\treturn {\n\t\tname: \"find\",\n\t\tlabel: \"find\",\n\t\tdescription: `Search for files by glob pattern. Returns matching file paths relative to the search directory. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} results or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tparameters: findSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\t{ pattern, path: searchDir, limit }: { pattern: string; path?: string; limit?: number },\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst searchPath = resolveToCwd(searchDir || \".\", cwd);\n\t\t\t\t\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\t\t\t\t\t\tconst ops = customOps ?? defaultFindOperations;\n\n\t\t\t\t\t\t// If custom operations provided with glob, use that\n\t\t\t\t\t\tif (customOps?.glob) {\n\t\t\t\t\t\t\tif (!(await ops.exists(searchPath))) {\n\t\t\t\t\t\t\t\treject(new Error(`Path not found: ${searchPath}`));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst results = await ops.glob(pattern, searchPath, {\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t\tlimit: effectiveLimit,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\t\tif (results.length === 0) {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Relativize paths\n\t\t\t\t\t\t\tconst relativized = results.map((p) => {\n\t\t\t\t\t\t\t\tif (p.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\t\treturn p.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn path.relative(searchPath, p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\t\tnotices.push(`${effectiveLimit} results limit reached`);\n\t\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Default: use native Rust glob\n\t\t\t\t\t\tconst globResult = await nativeGlob({\n\t\t\t\t\t\t\tpattern,\n\t\t\t\t\t\t\tpath: searchPath,\n\t\t\t\t\t\t\thidden: true,\n\t\t\t\t\t\t\tgitignore: true,\n\t\t\t\t\t\t\tmaxResults: effectiveLimit,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tif (globResult.matches.length === 0) {\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Native glob returns paths relative to the search root\n\t\t\t\t\t\tconst relativized = globResult.matches.map((m: { path: string }) => m.path);\n\n\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\tnotices.push(\n\t\t\t\t\t\t\t\t`${effectiveLimit} results limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default find tool using process.cwd() - for backwards compatibility */\nexport const findTool = createFindTool(process.cwd());\n"]}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Hashline edit tool — applies file edits using line-hash anchors.
3
+ *
4
+ * The model references lines by `LINE#ID` tags from read output.
5
+ * Each tag uniquely identifies a line, so edits remain stable even when lines shift.
6
+ */
7
+ import type { AgentTool } from "@gsd/pi-agent-core";
8
+ import { type Static } from "@sinclair/typebox";
9
+ declare const hashlineEditItemSchema: import("@sinclair/typebox").TObject<{
10
+ op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
11
+ pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
12
+ end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
13
+ lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
14
+ }>;
15
+ declare const hashlineEditSchema: import("@sinclair/typebox").TObject<{
16
+ path: import("@sinclair/typebox").TString;
17
+ edits: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
18
+ op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
19
+ pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
20
+ end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
21
+ lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
22
+ }>>;
23
+ delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
24
+ move: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
25
+ }>;
26
+ export type HashlineEditInput = Static<typeof hashlineEditSchema>;
27
+ export type HashlineEditItem = Static<typeof hashlineEditItemSchema>;
28
+ export interface HashlineEditToolDetails {
29
+ /** Unified diff of the changes made */
30
+ diff: string;
31
+ /** Line number of the first change in the new file */
32
+ firstChangedLine?: number;
33
+ }
34
+ /**
35
+ * Pluggable operations for the hashline edit tool.
36
+ */
37
+ export interface HashlineEditOperations {
38
+ readFile: (absolutePath: string) => Promise<Buffer>;
39
+ writeFile: (absolutePath: string, content: string) => Promise<void>;
40
+ access: (absolutePath: string) => Promise<void>;
41
+ unlink: (absolutePath: string) => Promise<void>;
42
+ }
43
+ export interface HashlineEditToolOptions {
44
+ operations?: HashlineEditOperations;
45
+ }
46
+ export declare function createHashlineEditTool(cwd: string, options?: HashlineEditToolOptions): AgentTool<typeof hashlineEditSchema>;
47
+ /** Default hashline edit tool using process.cwd() */
48
+ export declare const hashlineEditTool: AgentTool<import("@sinclair/typebox").TObject<{
49
+ path: import("@sinclair/typebox").TString;
50
+ edits: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
51
+ op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
52
+ pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
53
+ end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
54
+ lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
55
+ }>>;
56
+ delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
57
+ move: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
58
+ }>, any>;
59
+ export {};
60
+ //# sourceMappingURL=hashline-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashline-edit.d.ts","sourceRoot":"","sources":["../../../src/core/tools/hashline-edit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAwBtD,QAAA,MAAM,sBAAsB;;;;;EAY3B,CAAC;AAEF,QAAA,MAAM,kBAAkB;;;;;;;;;;EAQvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACvC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AASD,MAAM,WAAW,uBAAuB;IACvC,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAyDD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC,OAAO,kBAAkB,CAAC,CA6K3H;AAED,qDAAqD;AACrD,eAAO,MAAM,gBAAgB;;;;;;;;;;QAAwC,CAAC"}
@@ -0,0 +1,247 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { constants } from "fs";
3
+ import { access as fsAccess, readFile as fsReadFile, unlink as fsUnlink, writeFile as fsWriteFile } from "fs/promises";
4
+ import { detectLineEnding, generateDiffString, normalizeToLF, restoreLineEndings, stripBom, } from "./edit-diff.js";
5
+ import { applyHashlineEdits, hashlineParseText, parseTag, } from "./hashline.js";
6
+ import { resolveToCwd } from "./path-utils.js";
7
+ // ═══════════════════════════════════════════════════════════════════════════
8
+ // Schema
9
+ // ═══════════════════════════════════════════════════════════════════════════
10
+ const hashlineEditItemSchema = Type.Object({
11
+ op: Type.Union([Type.Literal("replace"), Type.Literal("append"), Type.Literal("prepend")]),
12
+ pos: Type.Optional(Type.String({ description: "Anchor tag (e.g. \"5#QQ\")" })),
13
+ end: Type.Optional(Type.String({ description: "End anchor for range replace" })),
14
+ lines: Type.Union([
15
+ Type.Array(Type.String(), { description: "Replacement content lines" }),
16
+ Type.String(),
17
+ Type.Null(),
18
+ ]),
19
+ }, { additionalProperties: false });
20
+ const hashlineEditSchema = Type.Object({
21
+ path: Type.String({ description: "Path to the file to edit" }),
22
+ edits: Type.Array(hashlineEditItemSchema, { description: "Edits to apply (referenced by LINE#ID tags from read output)" }),
23
+ delete: Type.Optional(Type.Boolean({ description: "If true, delete the file" })),
24
+ move: Type.Optional(Type.String({ description: "If set, move/rename the file to this path" })),
25
+ }, { additionalProperties: false });
26
+ const defaultHashlineEditOperations = {
27
+ readFile: (path) => fsReadFile(path),
28
+ writeFile: (path, content) => fsWriteFile(path, content, "utf-8"),
29
+ access: (path) => fsAccess(path, constants.R_OK | constants.W_OK),
30
+ unlink: (path) => fsUnlink(path),
31
+ };
32
+ /** Parse a tag, returning undefined instead of throwing on garbage. */
33
+ function tryParseTag(raw) {
34
+ try {
35
+ return parseTag(raw);
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ /**
42
+ * Map flat tool-schema edits into typed HashlineEdit objects.
43
+ */
44
+ function resolveEditAnchors(edits) {
45
+ const result = [];
46
+ for (const edit of edits) {
47
+ const lines = hashlineParseText(edit.lines);
48
+ const tag = edit.pos ? tryParseTag(edit.pos) : undefined;
49
+ const end = edit.end ? tryParseTag(edit.end) : undefined;
50
+ const op = edit.op === "append" || edit.op === "prepend" ? edit.op : "replace";
51
+ switch (op) {
52
+ case "replace": {
53
+ if (tag && end) {
54
+ result.push({ op: "replace", pos: tag, end, lines });
55
+ }
56
+ else if (tag || end) {
57
+ result.push({ op: "replace", pos: tag || end, lines });
58
+ }
59
+ else {
60
+ throw new Error("Replace requires at least one anchor (pos or end).");
61
+ }
62
+ break;
63
+ }
64
+ case "append": {
65
+ result.push({ op: "append", pos: tag ?? end, lines });
66
+ break;
67
+ }
68
+ case "prepend": {
69
+ result.push({ op: "prepend", pos: end ?? tag, lines });
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ const HASHLINE_EDIT_DESCRIPTION = `Edit a file by referencing LINE#ID tags from read output. Each tag uniquely identifies a line via content hash, so edits remain stable even when lines shift.
77
+
78
+ Read the file first to get fresh tags. Submit one edit call per file with all operations batched.
79
+
80
+ Operations:
81
+ - replace: Replace line(s) at pos (and optionally through end) with lines content
82
+ - append: Insert lines after pos (omit pos for end of file)
83
+ - prepend: Insert lines before pos (omit pos for beginning of file)
84
+
85
+ Set lines to null or [] to delete lines. Set delete:true to delete the file.`;
86
+ export function createHashlineEditTool(cwd, options) {
87
+ const ops = options?.operations ?? defaultHashlineEditOperations;
88
+ return {
89
+ name: "hashline_edit",
90
+ label: "hashline_edit",
91
+ description: HASHLINE_EDIT_DESCRIPTION,
92
+ parameters: hashlineEditSchema,
93
+ execute: async (_toolCallId, params, signal) => {
94
+ const { path, edits, delete: deleteFile, move } = params;
95
+ const absolutePath = resolveToCwd(path, cwd);
96
+ return new Promise((resolve, reject) => {
97
+ if (signal?.aborted) {
98
+ reject(new Error("Operation aborted"));
99
+ return;
100
+ }
101
+ let aborted = false;
102
+ const onAbort = () => {
103
+ aborted = true;
104
+ reject(new Error("Operation aborted"));
105
+ };
106
+ if (signal) {
107
+ signal.addEventListener("abort", onAbort, { once: true });
108
+ }
109
+ (async () => {
110
+ try {
111
+ // Handle delete
112
+ if (deleteFile) {
113
+ let fileExists = true;
114
+ try {
115
+ await ops.access(absolutePath);
116
+ }
117
+ catch {
118
+ fileExists = false;
119
+ }
120
+ if (fileExists) {
121
+ await ops.unlink(absolutePath);
122
+ }
123
+ if (signal)
124
+ signal.removeEventListener("abort", onAbort);
125
+ resolve({
126
+ content: [{ type: "text", text: fileExists ? `Deleted ${path}` : `File not found, nothing to delete: ${path}` }],
127
+ details: { diff: "" },
128
+ });
129
+ return;
130
+ }
131
+ // Handle file creation (no existing file, anchorless appends/prepends)
132
+ let fileExists = true;
133
+ try {
134
+ await ops.access(absolutePath);
135
+ }
136
+ catch {
137
+ fileExists = false;
138
+ }
139
+ if (!fileExists) {
140
+ const lines = [];
141
+ for (const edit of edits) {
142
+ if ((edit.op === "append" || edit.op === "prepend") && !edit.pos && !edit.end) {
143
+ if (edit.op === "prepend") {
144
+ lines.unshift(...hashlineParseText(edit.lines));
145
+ }
146
+ else {
147
+ lines.push(...hashlineParseText(edit.lines));
148
+ }
149
+ }
150
+ else {
151
+ throw new Error(`File not found: ${path}`);
152
+ }
153
+ }
154
+ await ops.writeFile(absolutePath, lines.join("\n"));
155
+ if (signal)
156
+ signal.removeEventListener("abort", onAbort);
157
+ resolve({
158
+ content: [{ type: "text", text: `Created ${path}` }],
159
+ details: { diff: "" },
160
+ });
161
+ return;
162
+ }
163
+ if (aborted)
164
+ return;
165
+ // Read file
166
+ const rawContent = (await ops.readFile(absolutePath)).toString("utf-8");
167
+ const { bom, text } = stripBom(rawContent);
168
+ const originalEnding = detectLineEnding(text);
169
+ const originalNormalized = normalizeToLF(text);
170
+ if (aborted)
171
+ return;
172
+ // Resolve and apply edits
173
+ const anchorEdits = resolveEditAnchors(edits);
174
+ const result = applyHashlineEdits(originalNormalized, anchorEdits);
175
+ if (originalNormalized === result.lines && !move) {
176
+ let diagnostic = `No changes made to ${path}. The edits produced identical content.`;
177
+ if (result.noopEdits && result.noopEdits.length > 0) {
178
+ const details = result.noopEdits
179
+ .map(e => `Edit ${e.editIndex}: replacement for ${e.loc} is identical to current content:\n ${e.loc}| ${e.current}`)
180
+ .join("\n");
181
+ diagnostic += `\n${details}`;
182
+ diagnostic +=
183
+ "\nYour content must differ from what the file already contains. Re-read the file to see the current state.";
184
+ }
185
+ throw new Error(diagnostic);
186
+ }
187
+ if (aborted)
188
+ return;
189
+ // Write result
190
+ const finalContent = bom + restoreLineEndings(result.lines, originalEnding);
191
+ const writePath = move ? resolveToCwd(move, cwd) : absolutePath;
192
+ // Prevent silent overwrite when moving to an existing file
193
+ if (move && writePath !== absolutePath) {
194
+ try {
195
+ await ops.access(writePath);
196
+ // If access succeeds, the file exists — refuse the move
197
+ throw new Error(`Destination file already exists: ${writePath}. Use a different path or delete the existing file first.`);
198
+ }
199
+ catch (err) {
200
+ // Re-throw our own error; swallow only "file not found"
201
+ if (err.message?.startsWith("Destination file already exists:"))
202
+ throw err;
203
+ // File doesn't exist — safe to proceed
204
+ }
205
+ }
206
+ await ops.writeFile(writePath, finalContent);
207
+ // If moved, delete original
208
+ if (move && writePath !== absolutePath) {
209
+ await ops.unlink(absolutePath);
210
+ }
211
+ if (aborted)
212
+ return;
213
+ if (signal)
214
+ signal.removeEventListener("abort", onAbort);
215
+ const diffResult = generateDiffString(originalNormalized, result.lines);
216
+ const resultText = move ? `Moved ${path} to ${move}` : `Updated ${path}`;
217
+ const warningsBlock = result.warnings?.length
218
+ ? `\nWarnings:\n${result.warnings.join("\n")}`
219
+ : "";
220
+ resolve({
221
+ content: [
222
+ {
223
+ type: "text",
224
+ text: `${resultText}${warningsBlock}`,
225
+ },
226
+ ],
227
+ details: {
228
+ diff: diffResult.diff,
229
+ firstChangedLine: result.firstChangedLine ?? diffResult.firstChangedLine,
230
+ },
231
+ });
232
+ }
233
+ catch (error) {
234
+ if (signal)
235
+ signal.removeEventListener("abort", onAbort);
236
+ if (!aborted) {
237
+ reject(error);
238
+ }
239
+ }
240
+ })();
241
+ });
242
+ },
243
+ };
244
+ }
245
+ /** Default hashline edit tool using process.cwd() */
246
+ export const hashlineEditTool = createHashlineEditTool(process.cwd());
247
+ //# sourceMappingURL=hashline-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashline-edit.js","sourceRoot":"","sources":["../../../src/core/tools/hashline-edit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hashline edit tool — applies file edits using line-hash anchors.\n *\n * The model references lines by `LINE#ID` tags from read output.\n * Each tag uniquely identifies a line, so edits remain stable even when lines shift.\n */\nimport type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { constants } from \"fs\";\nimport { access as fsAccess, readFile as fsReadFile, unlink as fsUnlink, writeFile as fsWriteFile } from \"fs/promises\";\nimport {\n\tdetectLineEnding,\n\tgenerateDiffString,\n\tnormalizeToLF,\n\trestoreLineEndings,\n\tstripBom,\n} from \"./edit-diff.js\";\nimport {\n\ttype Anchor,\n\tapplyHashlineEdits,\n\tcomputeLineHash,\n\ttype HashlineEdit,\n\thashlineParseText,\n\tparseTag,\n} from \"./hashline.js\";\nimport { resolveToCwd } from \"./path-utils.js\";\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Schema\n// ═══════════════════════════════════════════════════════════════════════════\n\nconst hashlineEditItemSchema = Type.Object(\n\t{\n\t\top: Type.Union([Type.Literal(\"replace\"), Type.Literal(\"append\"), Type.Literal(\"prepend\")]),\n\t\tpos: Type.Optional(Type.String({ description: \"Anchor tag (e.g. \\\"5#QQ\\\")\" })),\n\t\tend: Type.Optional(Type.String({ description: \"End anchor for range replace\" })),\n\t\tlines: Type.Union([\n\t\t\tType.Array(Type.String(), { description: \"Replacement content lines\" }),\n\t\t\tType.String(),\n\t\t\tType.Null(),\n\t\t]),\n\t},\n\t{ additionalProperties: false },\n);\n\nconst hashlineEditSchema = Type.Object(\n\t{\n\t\tpath: Type.String({ description: \"Path to the file to edit\" }),\n\t\tedits: Type.Array(hashlineEditItemSchema, { description: \"Edits to apply (referenced by LINE#ID tags from read output)\" }),\n\t\tdelete: Type.Optional(Type.Boolean({ description: \"If true, delete the file\" })),\n\t\tmove: Type.Optional(Type.String({ description: \"If set, move/rename the file to this path\" })),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type HashlineEditInput = Static<typeof hashlineEditSchema>;\nexport type HashlineEditItem = Static<typeof hashlineEditItemSchema>;\n\nexport interface HashlineEditToolDetails {\n\t/** Unified diff of the changes made */\n\tdiff: string;\n\t/** Line number of the first change in the new file */\n\tfirstChangedLine?: number;\n}\n\n/**\n * Pluggable operations for the hashline edit tool.\n */\nexport interface HashlineEditOperations {\n\treadFile: (absolutePath: string) => Promise<Buffer>;\n\twriteFile: (absolutePath: string, content: string) => Promise<void>;\n\taccess: (absolutePath: string) => Promise<void>;\n\tunlink: (absolutePath: string) => Promise<void>;\n}\n\nconst defaultHashlineEditOperations: HashlineEditOperations = {\n\treadFile: (path) => fsReadFile(path),\n\twriteFile: (path, content) => fsWriteFile(path, content, \"utf-8\"),\n\taccess: (path) => fsAccess(path, constants.R_OK | constants.W_OK),\n\tunlink: (path) => fsUnlink(path),\n};\n\nexport interface HashlineEditToolOptions {\n\toperations?: HashlineEditOperations;\n}\n\n/** Parse a tag, returning undefined instead of throwing on garbage. */\nfunction tryParseTag(raw: string): Anchor | undefined {\n\ttry {\n\t\treturn parseTag(raw);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Map flat tool-schema edits into typed HashlineEdit objects.\n */\nfunction resolveEditAnchors(edits: HashlineEditItem[]): HashlineEdit[] {\n\tconst result: HashlineEdit[] = [];\n\tfor (const edit of edits) {\n\t\tconst lines = hashlineParseText(edit.lines);\n\t\tconst tag = edit.pos ? tryParseTag(edit.pos) : undefined;\n\t\tconst end = edit.end ? tryParseTag(edit.end) : undefined;\n\n\t\tconst op = edit.op === \"append\" || edit.op === \"prepend\" ? edit.op : \"replace\";\n\t\tswitch (op) {\n\t\t\tcase \"replace\": {\n\t\t\t\tif (tag && end) {\n\t\t\t\t\tresult.push({ op: \"replace\", pos: tag, end, lines });\n\t\t\t\t} else if (tag || end) {\n\t\t\t\t\tresult.push({ op: \"replace\", pos: tag || end!, lines });\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Replace requires at least one anchor (pos or end).\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"append\": {\n\t\t\t\tresult.push({ op: \"append\", pos: tag ?? end, lines });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"prepend\": {\n\t\t\t\tresult.push({ op: \"prepend\", pos: end ?? tag, lines });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nconst HASHLINE_EDIT_DESCRIPTION = `Edit a file by referencing LINE#ID tags from read output. Each tag uniquely identifies a line via content hash, so edits remain stable even when lines shift.\n\nRead the file first to get fresh tags. Submit one edit call per file with all operations batched.\n\nOperations:\n- replace: Replace line(s) at pos (and optionally through end) with lines content\n- append: Insert lines after pos (omit pos for end of file)\n- prepend: Insert lines before pos (omit pos for beginning of file)\n\nSet lines to null or [] to delete lines. Set delete:true to delete the file.`;\n\nexport function createHashlineEditTool(cwd: string, options?: HashlineEditToolOptions): AgentTool<typeof hashlineEditSchema> {\n\tconst ops = options?.operations ?? defaultHashlineEditOperations;\n\n\treturn {\n\t\tname: \"hashline_edit\",\n\t\tlabel: \"hashline_edit\",\n\t\tdescription: HASHLINE_EDIT_DESCRIPTION,\n\t\tparameters: hashlineEditSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\tparams: HashlineEditInput,\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\tconst { path, edits, delete: deleteFile, move } = params;\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\n\t\t\treturn new Promise<{\n\t\t\t\tcontent: Array<{ type: \"text\"; text: string }>;\n\t\t\t\tdetails: HashlineEditToolDetails | undefined;\n\t\t\t}>((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet aborted = false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t};\n\t\t\t\tif (signal) {\n\t\t\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t}\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Handle delete\n\t\t\t\t\t\tif (deleteFile) {\n\t\t\t\t\t\t\tlet fileExists = true;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait ops.access(absolutePath);\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tfileExists = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fileExists) {\n\t\t\t\t\t\t\t\tawait ops.unlink(absolutePath);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: fileExists ? `Deleted ${path}` : `File not found, nothing to delete: ${path}` }],\n\t\t\t\t\t\t\t\tdetails: { diff: \"\" },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Handle file creation (no existing file, anchorless appends/prepends)\n\t\t\t\t\t\tlet fileExists = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ops.access(absolutePath);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tfileExists = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!fileExists) {\n\t\t\t\t\t\t\tconst lines: string[] = [];\n\t\t\t\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\t\t\t\tif ((edit.op === \"append\" || edit.op === \"prepend\") && !edit.pos && !edit.end) {\n\t\t\t\t\t\t\t\t\tif (edit.op === \"prepend\") {\n\t\t\t\t\t\t\t\t\t\tlines.unshift(...hashlineParseText(edit.lines));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tlines.push(...hashlineParseText(edit.lines));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new Error(`File not found: ${path}`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait ops.writeFile(absolutePath, lines.join(\"\\n\"));\n\t\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Created ${path}` }],\n\t\t\t\t\t\t\t\tdetails: { diff: \"\" },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Read file\n\t\t\t\t\t\tconst rawContent = (await ops.readFile(absolutePath)).toString(\"utf-8\");\n\t\t\t\t\t\tconst { bom, text } = stripBom(rawContent);\n\t\t\t\t\t\tconst originalEnding = detectLineEnding(text);\n\t\t\t\t\t\tconst originalNormalized = normalizeToLF(text);\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Resolve and apply edits\n\t\t\t\t\t\tconst anchorEdits = resolveEditAnchors(edits);\n\t\t\t\t\t\tconst result = applyHashlineEdits(originalNormalized, anchorEdits);\n\n\t\t\t\t\t\tif (originalNormalized === result.lines && !move) {\n\t\t\t\t\t\t\tlet diagnostic = `No changes made to ${path}. The edits produced identical content.`;\n\t\t\t\t\t\t\tif (result.noopEdits && result.noopEdits.length > 0) {\n\t\t\t\t\t\t\t\tconst details = result.noopEdits\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\te =>\n\t\t\t\t\t\t\t\t\t\t\t`Edit ${e.editIndex}: replacement for ${e.loc} is identical to current content:\\n ${e.loc}| ${e.current}`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\t\t\t\tdiagnostic += `\\n${details}`;\n\t\t\t\t\t\t\t\tdiagnostic +=\n\t\t\t\t\t\t\t\t\t\"\\nYour content must differ from what the file already contains. Re-read the file to see the current state.\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow new Error(diagnostic);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Write result\n\t\t\t\t\t\tconst finalContent = bom + restoreLineEndings(result.lines, originalEnding);\n\t\t\t\t\t\tconst writePath = move ? resolveToCwd(move, cwd) : absolutePath;\n\n\t\t\t\t\t\t// Prevent silent overwrite when moving to an existing file\n\t\t\t\t\t\tif (move && writePath !== absolutePath) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait ops.access(writePath);\n\t\t\t\t\t\t\t\t// If access succeeds, the file exists — refuse the move\n\t\t\t\t\t\t\t\tthrow new Error(`Destination file already exists: ${writePath}. Use a different path or delete the existing file first.`);\n\t\t\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\t\t\t// Re-throw our own error; swallow only \"file not found\"\n\t\t\t\t\t\t\t\tif (err.message?.startsWith(\"Destination file already exists:\")) throw err;\n\t\t\t\t\t\t\t\t// File doesn't exist — safe to proceed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait ops.writeFile(writePath, finalContent);\n\n\t\t\t\t\t\t// If moved, delete original\n\t\t\t\t\t\tif (move && writePath !== absolutePath) {\n\t\t\t\t\t\t\tawait ops.unlink(absolutePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tconst diffResult = generateDiffString(originalNormalized, result.lines);\n\t\t\t\t\t\tconst resultText = move ? `Moved ${path} to ${move}` : `Updated ${path}`;\n\t\t\t\t\t\tconst warningsBlock = result.warnings?.length\n\t\t\t\t\t\t\t? `\\nWarnings:\\n${result.warnings.join(\"\\n\")}`\n\t\t\t\t\t\t\t: \"\";\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: `${resultText}${warningsBlock}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\tdiff: diffResult.diff,\n\t\t\t\t\t\t\t\tfirstChangedLine: result.firstChangedLine ?? diffResult.firstChangedLine,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\tif (!aborted) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default hashline edit tool using process.cwd() */\nexport const hashlineEditTool = createHashlineEditTool(process.cwd());\n"]}