@tyvm/knowhow 0.0.46 → 0.0.48

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 (461) hide show
  1. package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +2909 -0
  2. package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +1671 -0
  3. package/jest.config.js +2 -2
  4. package/package.json +8 -3
  5. package/src/agents/base/base.ts +30 -24
  6. package/src/agents/patcher/patcher.ts +26 -5
  7. package/src/agents/tools/agentCall.ts +4 -2
  8. package/src/agents/tools/aiClient.ts +3 -11
  9. package/src/agents/tools/ast/astAppendNode.ts +90 -0
  10. package/src/agents/tools/ast/astDeleteNode.ts +88 -0
  11. package/src/agents/tools/ast/astEditNode.ts +95 -0
  12. package/src/agents/tools/ast/astGetPathForLine.ts +73 -0
  13. package/src/agents/tools/ast/astListPaths.ts +66 -0
  14. package/src/agents/tools/ast/index.ts +7 -0
  15. package/src/agents/tools/callPlugin.ts +8 -2
  16. package/src/agents/tools/embeddingSearch.ts +2 -1
  17. package/src/agents/tools/execCommand.ts +239 -94
  18. package/src/agents/tools/fileSearch.ts +15 -17
  19. package/src/agents/tools/index.ts +1 -0
  20. package/src/agents/tools/language/definitions.ts +10 -2
  21. package/src/agents/tools/language/index.ts +3 -2
  22. package/src/agents/tools/lintFile.ts +4 -2
  23. package/src/agents/tools/list.ts +203 -62
  24. package/src/agents/tools/patch.ts +48 -14
  25. package/src/agents/tools/readBlocks.ts +34 -0
  26. package/src/agents/tools/readFile.ts +23 -0
  27. package/src/agents/tools/stringReplace.ts +33 -9
  28. package/src/agents/tools/writeFile.ts +55 -0
  29. package/src/agents/tools/ycmd/server.ts +14 -4
  30. package/src/chat/CliChatService.ts +6 -1
  31. package/src/chat/modules/AgentModule.ts +107 -64
  32. package/src/chat/modules/AskModule.ts +0 -1
  33. package/src/chat/modules/SetupModule.ts +4 -4
  34. package/src/chat/modules/SystemModule.ts +28 -5
  35. package/src/chat/types.ts +2 -0
  36. package/src/chat-old.ts +2 -2
  37. package/src/clients/anthropic.ts +22 -1
  38. package/src/clients/openai.ts +1 -1
  39. package/src/clients/types.ts +1 -1
  40. package/src/clients/xai.ts +15 -5
  41. package/src/config.ts +17 -5
  42. package/src/dataset/diffs/generate.ts +2 -2
  43. package/src/dataset/diffs/jsonl.ts +0 -1
  44. package/src/embeddings.ts +6 -4
  45. package/src/index.ts +11 -5
  46. package/src/plugins/GitPlugin.ts +530 -0
  47. package/src/plugins/LinterPlugin.ts +89 -0
  48. package/src/plugins/PluginBase.ts +4 -2
  49. package/src/plugins/asana.ts +4 -2
  50. package/src/plugins/downloader/plugin.ts +5 -2
  51. package/src/plugins/embedding.ts +24 -4
  52. package/src/plugins/figma.ts +7 -3
  53. package/src/plugins/github.ts +4 -2
  54. package/src/plugins/jira.ts +4 -2
  55. package/src/plugins/language.ts +134 -27
  56. package/src/plugins/linear.ts +4 -2
  57. package/src/plugins/notion.ts +4 -2
  58. package/src/plugins/plugins.ts +27 -16
  59. package/src/plugins/tree-sitter/editor.ts +369 -0
  60. package/src/plugins/tree-sitter/lang-packs/index.ts +23 -0
  61. package/src/plugins/tree-sitter/lang-packs/java.ts +59 -0
  62. package/src/plugins/tree-sitter/lang-packs/javascript.ts +57 -0
  63. package/src/plugins/tree-sitter/lang-packs/python.ts +45 -0
  64. package/src/plugins/tree-sitter/lang-packs/types.ts +79 -0
  65. package/src/plugins/tree-sitter/lang-packs/typescript.ts +49 -0
  66. package/src/plugins/tree-sitter/parser.ts +444 -0
  67. package/src/plugins/tree-sitter/simple-paths.ts +467 -0
  68. package/src/plugins/types.ts +11 -0
  69. package/src/plugins/url.ts +5 -3
  70. package/src/plugins/vim.ts +8 -5
  71. package/src/processors/CustomVariables.ts +19 -7
  72. package/src/processors/TokenCompressor.ts +13 -13
  73. package/src/processors/ToolResponseCache.ts +15 -6
  74. package/src/services/EmbeddingService.ts +18 -9
  75. package/src/services/EventService.ts +80 -0
  76. package/src/services/Mcp.ts +5 -0
  77. package/src/services/S3.ts +4 -3
  78. package/src/services/Tools.ts +125 -53
  79. package/src/services/index.ts +16 -11
  80. package/src/services/types.ts +3 -3
  81. package/src/types.ts +7 -2
  82. package/src/worker.ts +14 -1
  83. package/test-comprehensive.ts +31 -0
  84. package/tests/clients/AIClient.test.ts +490 -0
  85. package/tests/manual/agent-events/run-test.ts +203 -0
  86. package/tests/{integration → manual/file-edits}/figma.test.ts +1 -1
  87. package/tests/{integration → manual/file-edits}/fileblocks/readwrite.test.ts +7 -3
  88. package/tests/{integration → manual/file-edits}/patching.test.ts +11 -8
  89. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +332 -0
  90. package/tests/plugins/language/languagePlugin-integration.test.ts +456 -0
  91. package/tests/plugins/language/languagePlugin.test.ts +363 -0
  92. package/tests/processors/Base64ImageDetector.test.ts +403 -0
  93. package/tests/processors/CustomVariables.test.ts +430 -0
  94. package/tests/processors/HarmonyToolProcessor.test.ts +490 -0
  95. package/tests/processors/TokenCompressor.test.ts +391 -0
  96. package/tests/processors/ToolResponseCache.test.ts +688 -0
  97. package/tests/services/Tools.test.ts +1339 -0
  98. package/tests/test.spec.ts +162 -117
  99. package/tests/tree-sitter/editor.test.ts +113 -0
  100. package/tests/tree-sitter/invalid.test.ts +299 -0
  101. package/tests/tree-sitter/paths/common-edits.test.ts +564 -0
  102. package/tests/tree-sitter/paths/debug-exact-position.test.ts +44 -0
  103. package/tests/tree-sitter/paths/debug-line-indexing.test.ts +49 -0
  104. package/tests/tree-sitter/paths/debug-paths.test.ts +90 -0
  105. package/tests/tree-sitter/paths/paths.test.ts +170 -0
  106. package/tests/tree-sitter/paths/simple-paths.test.ts +367 -0
  107. package/tests/tree-sitter/sample-after.ts +48 -0
  108. package/tests/tree-sitter/sample-before.ts +25 -0
  109. package/tests/tree-sitter/test-files/completely-broken.ts +7 -0
  110. package/tests/tree-sitter/test-files/duplicate-braces.ts +39 -0
  111. package/tests/tree-sitter/test-files/invalid-nesting.ts +39 -0
  112. package/tests/tree-sitter/test-files/malformed-signature.ts +39 -0
  113. package/tests/tree-sitter/test-files/mismatched-parens.ts +39 -0
  114. package/tests/tree-sitter/test-files/missing-semicolon.ts +39 -0
  115. package/tests/tree-sitter/test-files/partially-broken.ts +20 -0
  116. package/tests/tree-sitter/test-files/specific-errors.ts +14 -0
  117. package/tests/tree-sitter/test-files/unclosed-string.ts +39 -0
  118. package/tests/tree-sitter/tree-sitter.test.ts +251 -0
  119. package/ts_build/package.json +8 -3
  120. package/ts_build/src/agents/base/base.d.ts +2 -2
  121. package/ts_build/src/agents/base/base.js +24 -20
  122. package/ts_build/src/agents/base/base.js.map +1 -1
  123. package/ts_build/src/agents/patcher/patcher.js +26 -5
  124. package/ts_build/src/agents/patcher/patcher.js.map +1 -1
  125. package/ts_build/src/agents/tools/agentCall.js +2 -1
  126. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  127. package/ts_build/src/agents/tools/aiClient.d.ts +7 -8
  128. package/ts_build/src/agents/tools/aiClient.js.map +1 -1
  129. package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -0
  130. package/ts_build/src/agents/tools/ast/astAppendNode.js +96 -0
  131. package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -0
  132. package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -0
  133. package/ts_build/src/agents/tools/ast/astDeleteNode.js +94 -0
  134. package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -0
  135. package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -0
  136. package/ts_build/src/agents/tools/ast/astEditNode.js +96 -0
  137. package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -0
  138. package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -0
  139. package/ts_build/src/agents/tools/ast/astGetPathForLine.js +78 -0
  140. package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -0
  141. package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -0
  142. package/ts_build/src/agents/tools/ast/astListPaths.js +78 -0
  143. package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -0
  144. package/ts_build/src/agents/tools/ast/index.d.ts +5 -0
  145. package/ts_build/src/agents/tools/ast/index.js +14 -0
  146. package/ts_build/src/agents/tools/ast/index.js.map +1 -0
  147. package/ts_build/src/agents/tools/astAppendNode.d.ts +1 -0
  148. package/ts_build/src/agents/tools/astAppendNode.js +98 -0
  149. package/ts_build/src/agents/tools/astAppendNode.js.map +1 -0
  150. package/ts_build/src/agents/tools/astDeleteNode.d.ts +1 -0
  151. package/ts_build/src/agents/tools/astDeleteNode.js +95 -0
  152. package/ts_build/src/agents/tools/astDeleteNode.js.map +1 -0
  153. package/ts_build/src/agents/tools/astEditNode.d.ts +1 -0
  154. package/ts_build/src/agents/tools/astEditNode.js +98 -0
  155. package/ts_build/src/agents/tools/astEditNode.js.map +1 -0
  156. package/ts_build/src/agents/tools/astGetPathForLine.d.ts +1 -0
  157. package/ts_build/src/agents/tools/astGetPathForLine.js +89 -0
  158. package/ts_build/src/agents/tools/astGetPathForLine.js.map +1 -0
  159. package/ts_build/src/agents/tools/astListPaths.d.ts +1 -0
  160. package/ts_build/src/agents/tools/astListPaths.js +82 -0
  161. package/ts_build/src/agents/tools/astListPaths.js.map +1 -0
  162. package/ts_build/src/agents/tools/callPlugin.js +4 -2
  163. package/ts_build/src/agents/tools/callPlugin.js.map +1 -1
  164. package/ts_build/src/agents/tools/embeddingSearch.js +3 -2
  165. package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -1
  166. package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
  167. package/ts_build/src/agents/tools/execCommand.js +201 -67
  168. package/ts_build/src/agents/tools/execCommand.js.map +1 -1
  169. package/ts_build/src/agents/tools/fileSearch.d.ts +1 -1
  170. package/ts_build/src/agents/tools/fileSearch.js +11 -15
  171. package/ts_build/src/agents/tools/fileSearch.js.map +1 -1
  172. package/ts_build/src/agents/tools/github/index.d.ts +1 -1
  173. package/ts_build/src/agents/tools/index.d.ts +1 -0
  174. package/ts_build/src/agents/tools/index.js +1 -0
  175. package/ts_build/src/agents/tools/index.js.map +1 -1
  176. package/ts_build/src/agents/tools/language/definitions.js +11 -2
  177. package/ts_build/src/agents/tools/language/definitions.js.map +1 -1
  178. package/ts_build/src/agents/tools/language/index.js +4 -3
  179. package/ts_build/src/agents/tools/language/index.js.map +1 -1
  180. package/ts_build/src/agents/tools/lintFile.js +4 -2
  181. package/ts_build/src/agents/tools/lintFile.js.map +1 -1
  182. package/ts_build/src/agents/tools/list.js +185 -49
  183. package/ts_build/src/agents/tools/list.js.map +1 -1
  184. package/ts_build/src/agents/tools/patch.js +33 -10
  185. package/ts_build/src/agents/tools/patch.js.map +1 -1
  186. package/ts_build/src/agents/tools/readBlocks.js +23 -0
  187. package/ts_build/src/agents/tools/readBlocks.js.map +1 -1
  188. package/ts_build/src/agents/tools/readFile.js +14 -0
  189. package/ts_build/src/agents/tools/readFile.js.map +1 -1
  190. package/ts_build/src/agents/tools/stringReplace.js +19 -2
  191. package/ts_build/src/agents/tools/stringReplace.js.map +1 -1
  192. package/ts_build/src/agents/tools/writeFile.js +40 -0
  193. package/ts_build/src/agents/tools/writeFile.js.map +1 -1
  194. package/ts_build/src/agents/tools/ycmd/server.js +5 -0
  195. package/ts_build/src/agents/tools/ycmd/server.js.map +1 -1
  196. package/ts_build/src/chat/CliChatService.d.ts +1 -0
  197. package/ts_build/src/chat/CliChatService.js +6 -2
  198. package/ts_build/src/chat/CliChatService.js.map +1 -1
  199. package/ts_build/src/chat/modules/AgentModule.d.ts +5 -1
  200. package/ts_build/src/chat/modules/AgentModule.js +53 -31
  201. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  202. package/ts_build/src/chat/modules/AskModule.js.map +1 -1
  203. package/ts_build/src/chat/modules/SetupModule.js +4 -3
  204. package/ts_build/src/chat/modules/SetupModule.js.map +1 -1
  205. package/ts_build/src/chat/modules/SystemModule.js +19 -4
  206. package/ts_build/src/chat/modules/SystemModule.js.map +1 -1
  207. package/ts_build/src/chat/modules/index.d.ts +5 -0
  208. package/ts_build/src/chat/modules/index.js +14 -0
  209. package/ts_build/src/chat/modules/index.js.map +1 -0
  210. package/ts_build/src/chat/types.d.ts +2 -0
  211. package/ts_build/src/chat-old.js +3 -3
  212. package/ts_build/src/chat-old.js.map +1 -1
  213. package/ts_build/src/clients/anthropic.d.ts +1 -0
  214. package/ts_build/src/clients/anthropic.js +22 -1
  215. package/ts_build/src/clients/anthropic.js.map +1 -1
  216. package/ts_build/src/clients/openai.js +1 -1
  217. package/ts_build/src/clients/openai.js.map +1 -1
  218. package/ts_build/src/clients/types.d.ts +1 -1
  219. package/ts_build/src/clients/xai.d.ts +7 -0
  220. package/ts_build/src/clients/xai.js +13 -4
  221. package/ts_build/src/clients/xai.js.map +1 -1
  222. package/ts_build/src/config.js +14 -3
  223. package/ts_build/src/config.js.map +1 -1
  224. package/ts_build/src/dataset/diffs/generate.js +2 -2
  225. package/ts_build/src/dataset/diffs/generate.js.map +1 -1
  226. package/ts_build/src/dataset/diffs/jsonl.js.map +1 -1
  227. package/ts_build/src/embeddings.js +7 -9
  228. package/ts_build/src/embeddings.js.map +1 -1
  229. package/ts_build/src/index.js +10 -10
  230. package/ts_build/src/index.js.map +1 -1
  231. package/ts_build/src/plugins/GitPlugin.d.ts +39 -0
  232. package/ts_build/src/plugins/GitPlugin.js +439 -0
  233. package/ts_build/src/plugins/GitPlugin.js.map +1 -0
  234. package/ts_build/src/plugins/LinterPlugin.d.ts +15 -0
  235. package/ts_build/src/plugins/LinterPlugin.js +65 -0
  236. package/ts_build/src/plugins/LinterPlugin.js.map +1 -0
  237. package/ts_build/src/plugins/PluginBase.d.ts +4 -3
  238. package/ts_build/src/plugins/PluginBase.js +3 -3
  239. package/ts_build/src/plugins/PluginBase.js.map +1 -1
  240. package/ts_build/src/plugins/asana.d.ts +3 -1
  241. package/ts_build/src/plugins/asana.js +3 -2
  242. package/ts_build/src/plugins/asana.js.map +1 -1
  243. package/ts_build/src/plugins/downloader/plugin.d.ts +3 -1
  244. package/ts_build/src/plugins/downloader/plugin.js +3 -2
  245. package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
  246. package/ts_build/src/plugins/embedding.d.ts +5 -1
  247. package/ts_build/src/plugins/embedding.js +15 -3
  248. package/ts_build/src/plugins/embedding.js.map +1 -1
  249. package/ts_build/src/plugins/figma.d.ts +3 -1
  250. package/ts_build/src/plugins/figma.js +28 -4
  251. package/ts_build/src/plugins/figma.js.map +1 -1
  252. package/ts_build/src/plugins/github.d.ts +3 -1
  253. package/ts_build/src/plugins/github.js +3 -2
  254. package/ts_build/src/plugins/github.js.map +1 -1
  255. package/ts_build/src/plugins/jira.d.ts +3 -1
  256. package/ts_build/src/plugins/jira.js +3 -2
  257. package/ts_build/src/plugins/jira.js.map +1 -1
  258. package/ts_build/src/plugins/language.d.ts +7 -4
  259. package/ts_build/src/plugins/language.js +85 -20
  260. package/ts_build/src/plugins/language.js.map +1 -1
  261. package/ts_build/src/plugins/linear.d.ts +3 -1
  262. package/ts_build/src/plugins/linear.js +3 -2
  263. package/ts_build/src/plugins/linear.js.map +1 -1
  264. package/ts_build/src/plugins/notion.d.ts +3 -1
  265. package/ts_build/src/plugins/notion.js +3 -2
  266. package/ts_build/src/plugins/notion.js.map +1 -1
  267. package/ts_build/src/plugins/plugins.d.ts +4 -3
  268. package/ts_build/src/plugins/plugins.js +24 -14
  269. package/ts_build/src/plugins/plugins.js.map +1 -1
  270. package/ts_build/src/plugins/tree-sitter/editor.d.ts +34 -0
  271. package/ts_build/src/plugins/tree-sitter/editor.js +218 -0
  272. package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -0
  273. package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.d.ts +29 -0
  274. package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js +538 -0
  275. package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js.map +1 -0
  276. package/ts_build/src/plugins/tree-sitter/human-readable-paths.d.ts +22 -0
  277. package/ts_build/src/plugins/tree-sitter/human-readable-paths.js +332 -0
  278. package/ts_build/src/plugins/tree-sitter/human-readable-paths.js.map +1 -0
  279. package/ts_build/src/plugins/tree-sitter/lang-packs/index.d.ts +8 -0
  280. package/ts_build/src/plugins/tree-sitter/lang-packs/index.js +26 -0
  281. package/ts_build/src/plugins/tree-sitter/lang-packs/index.js.map +1 -0
  282. package/ts_build/src/plugins/tree-sitter/lang-packs/java.d.ts +2 -0
  283. package/ts_build/src/plugins/tree-sitter/lang-packs/java.js +61 -0
  284. package/ts_build/src/plugins/tree-sitter/lang-packs/java.js.map +1 -0
  285. package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.d.ts +2 -0
  286. package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js +59 -0
  287. package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js.map +1 -0
  288. package/ts_build/src/plugins/tree-sitter/lang-packs/python.d.ts +2 -0
  289. package/ts_build/src/plugins/tree-sitter/lang-packs/python.js +47 -0
  290. package/ts_build/src/plugins/tree-sitter/lang-packs/python.js.map +1 -0
  291. package/ts_build/src/plugins/tree-sitter/lang-packs/types.d.ts +43 -0
  292. package/ts_build/src/plugins/tree-sitter/lang-packs/types.js +3 -0
  293. package/ts_build/src/plugins/tree-sitter/lang-packs/types.js.map +1 -0
  294. package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.d.ts +2 -0
  295. package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js +50 -0
  296. package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js.map +1 -0
  297. package/ts_build/src/plugins/tree-sitter/parser.d.ts +75 -0
  298. package/ts_build/src/plugins/tree-sitter/parser.js +306 -0
  299. package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -0
  300. package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +22 -0
  301. package/ts_build/src/plugins/tree-sitter/simple-paths.js +332 -0
  302. package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -0
  303. package/ts_build/src/plugins/types.d.ts +10 -0
  304. package/ts_build/src/plugins/url.d.ts +3 -2
  305. package/ts_build/src/plugins/url.js +3 -2
  306. package/ts_build/src/plugins/url.js.map +1 -1
  307. package/ts_build/src/plugins/vim.d.ts +4 -2
  308. package/ts_build/src/plugins/vim.js +6 -8
  309. package/ts_build/src/plugins/vim.js.map +1 -1
  310. package/ts_build/src/processors/CustomVariables.js +12 -3
  311. package/ts_build/src/processors/CustomVariables.js.map +1 -1
  312. package/ts_build/src/processors/TokenCompressor.js +8 -11
  313. package/ts_build/src/processors/TokenCompressor.js.map +1 -1
  314. package/ts_build/src/processors/ToolResponseCache.d.ts +2 -2
  315. package/ts_build/src/processors/ToolResponseCache.js +12 -2
  316. package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
  317. package/ts_build/src/services/EmbeddingService.d.ts +10 -1
  318. package/ts_build/src/services/EmbeddingService.js +12 -12
  319. package/ts_build/src/services/EmbeddingService.js.map +1 -1
  320. package/ts_build/src/services/EventService.d.ts +7 -0
  321. package/ts_build/src/services/EventService.js +49 -0
  322. package/ts_build/src/services/EventService.js.map +1 -1
  323. package/ts_build/src/services/Mcp.js +8 -0
  324. package/ts_build/src/services/Mcp.js.map +1 -1
  325. package/ts_build/src/services/S3.js +4 -3
  326. package/ts_build/src/services/S3.js.map +1 -1
  327. package/ts_build/src/services/Tools.d.ts +1 -0
  328. package/ts_build/src/services/Tools.js +97 -35
  329. package/ts_build/src/services/Tools.js.map +1 -1
  330. package/ts_build/src/services/index.d.ts +4 -5
  331. package/ts_build/src/services/index.js +14 -9
  332. package/ts_build/src/services/index.js.map +1 -1
  333. package/ts_build/src/services/types.js +3 -3
  334. package/ts_build/src/services/types.js.map +1 -1
  335. package/ts_build/src/types.d.ts +7 -1
  336. package/ts_build/src/types.js +4 -0
  337. package/ts_build/src/types.js.map +1 -1
  338. package/ts_build/src/worker.js +12 -1
  339. package/ts_build/src/worker.js.map +1 -1
  340. package/ts_build/tests/clients/AIClient.test.d.ts +1 -0
  341. package/ts_build/tests/clients/AIClient.test.js +377 -0
  342. package/ts_build/tests/clients/AIClient.test.js.map +1 -0
  343. package/ts_build/tests/languagePlugin.test.js +217 -11
  344. package/ts_build/tests/languagePlugin.test.js.map +1 -1
  345. package/ts_build/tests/manual/agent-events/event-handler-reliability.test.d.ts +1 -0
  346. package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js +315 -0
  347. package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js.map +1 -0
  348. package/ts_build/tests/manual/agent-events/run-test.d.ts +2 -0
  349. package/ts_build/tests/manual/agent-events/run-test.js +148 -0
  350. package/ts_build/tests/manual/agent-events/run-test.js.map +1 -0
  351. package/ts_build/tests/manual/file-edits/figma.test.d.ts +1 -0
  352. package/ts_build/tests/manual/file-edits/figma.test.js +47 -0
  353. package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -0
  354. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +1 -0
  355. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +100 -0
  356. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +1 -0
  357. package/ts_build/tests/manual/file-edits/patching.test.d.ts +1 -0
  358. package/ts_build/tests/manual/file-edits/patching.test.js +119 -0
  359. package/ts_build/tests/manual/file-edits/patching.test.js.map +1 -0
  360. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +1 -0
  361. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +277 -0
  362. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -0
  363. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +1 -0
  364. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +331 -0
  365. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +1 -0
  366. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +1 -0
  367. package/ts_build/tests/plugins/language/languagePlugin.test.js +286 -0
  368. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -0
  369. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +1 -0
  370. package/ts_build/tests/processors/Base64ImageDetector.test.js +351 -0
  371. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +1 -0
  372. package/ts_build/tests/processors/CustomVariables.test.d.ts +1 -0
  373. package/ts_build/tests/processors/CustomVariables.test.js +351 -0
  374. package/ts_build/tests/processors/CustomVariables.test.js.map +1 -0
  375. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +1 -0
  376. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +382 -0
  377. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +1 -0
  378. package/ts_build/tests/processors/TokenCompressor.test.d.ts +1 -0
  379. package/ts_build/tests/processors/TokenCompressor.test.js +300 -0
  380. package/ts_build/tests/processors/TokenCompressor.test.js.map +1 -0
  381. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +1 -0
  382. package/ts_build/tests/processors/ToolResponseCache.test.js +539 -0
  383. package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -0
  384. package/ts_build/tests/services/Plugins/plugin-event-integration.test.d.ts +1 -0
  385. package/ts_build/tests/services/Plugins/plugin-event-integration.test.js +232 -0
  386. package/ts_build/tests/services/Plugins/plugin-event-integration.test.js.map +1 -0
  387. package/ts_build/tests/services/Tools.test.d.ts +1 -0
  388. package/ts_build/tests/services/Tools.test.js +1059 -0
  389. package/ts_build/tests/services/Tools.test.js.map +1 -0
  390. package/ts_build/tests/test.spec.js +110 -68
  391. package/ts_build/tests/test.spec.js.map +1 -1
  392. package/ts_build/tests/tree-sitter/editor.test.d.ts +1 -0
  393. package/ts_build/tests/tree-sitter/editor.test.js +85 -0
  394. package/ts_build/tests/tree-sitter/editor.test.js.map +1 -0
  395. package/ts_build/tests/tree-sitter/invalid.test.d.ts +1 -0
  396. package/ts_build/tests/tree-sitter/invalid.test.js +198 -0
  397. package/ts_build/tests/tree-sitter/invalid.test.js.map +1 -0
  398. package/ts_build/tests/tree-sitter/paths/common-edits.test.d.ts +1 -0
  399. package/ts_build/tests/tree-sitter/paths/common-edits.test.js +347 -0
  400. package/ts_build/tests/tree-sitter/paths/common-edits.test.js.map +1 -0
  401. package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.d.ts +1 -0
  402. package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js +35 -0
  403. package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js.map +1 -0
  404. package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.d.ts +1 -0
  405. package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js +38 -0
  406. package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js.map +1 -0
  407. package/ts_build/tests/tree-sitter/paths/debug-paths.test.d.ts +1 -0
  408. package/ts_build/tests/tree-sitter/paths/debug-paths.test.js +74 -0
  409. package/ts_build/tests/tree-sitter/paths/debug-paths.test.js.map +1 -0
  410. package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.d.ts +1 -0
  411. package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js +302 -0
  412. package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js.map +1 -0
  413. package/ts_build/tests/tree-sitter/paths/paths.test.d.ts +1 -0
  414. package/ts_build/tests/tree-sitter/paths/paths.test.js +116 -0
  415. package/ts_build/tests/tree-sitter/paths/paths.test.js.map +1 -0
  416. package/ts_build/tests/tree-sitter/paths/simple-paths.test.d.ts +1 -0
  417. package/ts_build/tests/tree-sitter/paths/simple-paths.test.js +302 -0
  418. package/ts_build/tests/tree-sitter/paths/simple-paths.test.js.map +1 -0
  419. package/ts_build/tests/tree-sitter/sample-after.d.ts +11 -0
  420. package/ts_build/tests/tree-sitter/sample-after.js +44 -0
  421. package/ts_build/tests/tree-sitter/sample-after.js.map +1 -0
  422. package/ts_build/tests/tree-sitter/sample-before.d.ts +9 -0
  423. package/ts_build/tests/tree-sitter/sample-before.js +28 -0
  424. package/ts_build/tests/tree-sitter/sample-before.js.map +1 -0
  425. package/ts_build/tests/tree-sitter/test-files/completely-broken.d.ts +2 -0
  426. package/ts_build/tests/tree-sitter/test-files/completely-broken.js +17 -0
  427. package/ts_build/tests/tree-sitter/test-files/completely-broken.js.map +1 -0
  428. package/ts_build/tests/tree-sitter/test-files/duplicate-braces.d.ts +8 -0
  429. package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js +38 -0
  430. package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js.map +1 -0
  431. package/ts_build/tests/tree-sitter/test-files/invalid-nesting.d.ts +8 -0
  432. package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js +38 -0
  433. package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js.map +1 -0
  434. package/ts_build/tests/tree-sitter/test-files/malformed-signature.d.ts +8 -0
  435. package/ts_build/tests/tree-sitter/test-files/malformed-signature.js +38 -0
  436. package/ts_build/tests/tree-sitter/test-files/malformed-signature.js.map +1 -0
  437. package/ts_build/tests/tree-sitter/test-files/mismatched-parens.d.ts +10 -0
  438. package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js +38 -0
  439. package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js.map +1 -0
  440. package/ts_build/tests/tree-sitter/test-files/missing-semicolon.d.ts +8 -0
  441. package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js +38 -0
  442. package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js.map +1 -0
  443. package/ts_build/tests/tree-sitter/test-files/partially-broken.d.ts +6 -0
  444. package/ts_build/tests/tree-sitter/test-files/partially-broken.js +20 -0
  445. package/ts_build/tests/tree-sitter/test-files/partially-broken.js.map +1 -0
  446. package/ts_build/tests/tree-sitter/test-files/specific-errors.d.ts +7 -0
  447. package/ts_build/tests/tree-sitter/test-files/specific-errors.js +14 -0
  448. package/ts_build/tests/tree-sitter/test-files/specific-errors.js.map +1 -0
  449. package/ts_build/tests/tree-sitter/test-files/unclosed-string.d.ts +8 -0
  450. package/ts_build/tests/tree-sitter/test-files/unclosed-string.js +38 -0
  451. package/ts_build/tests/tree-sitter/test-files/unclosed-string.js.map +1 -0
  452. package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +1 -0
  453. package/ts_build/tests/tree-sitter/tree-sitter.test.js +185 -0
  454. package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -0
  455. package/tsconfig.json +2 -1
  456. package/tests/languagePlugin.test.ts +0 -74
  457. /package/src/chat/modules/{index.js → index.ts} +0 -0
  458. /package/tests/{integration → manual/file-edits}/patching/input.txt +0 -0
  459. /package/tests/{integration → manual/file-edits}/patching/output.txt +0 -0
  460. /package/tests/{integration → manual/file-edits}/patching/patch.txt +0 -0
  461. /package/tests/{integration → manual/file-edits}/patching/unseen.txt +0 -0
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parser_1 = require("../../../src/plugins/tree-sitter/parser");
4
+ const editor_1 = require("../../../src/plugins/tree-sitter/editor");
5
+ describe("Common Code Editing Operations with Tree Editor", () => {
6
+ let parser;
7
+ let editor;
8
+ const initialCode = `export class Calculator {
9
+ private history: number[] = [];
10
+ private operationCount: number = 0;
11
+
12
+ constructor(private precision: number = 2) {}
13
+
14
+ add(a: number, b: number): number {
15
+ const result = a + b;
16
+ this.history.push(result);
17
+ this.operationCount++;
18
+ return result;
19
+ }
20
+
21
+ multiply(a: number, b: number): number {
22
+ const result = a * b;
23
+ this.history.push(result);
24
+ this.operationCount++;
25
+ return result;
26
+ }
27
+
28
+ getHistory(): number[] {
29
+ return [...this.history];
30
+ }
31
+
32
+ getOperationCount(): number {
33
+ return this.operationCount;
34
+ }
35
+ }`;
36
+ beforeEach(() => {
37
+ parser = parser_1.LanguageAgnosticParser.createTypeScriptParser();
38
+ editor = new editor_1.TreeEditor(parser, initialCode);
39
+ });
40
+ describe("Class Method Operations", () => {
41
+ test("should create new method on a class using addMethodToClass", () => {
42
+ console.log("=== Creating new method on Calculator class ===");
43
+ const newMethodContent = ` subtract(a: number, b: number): number {
44
+ const result = a - b;
45
+ this.history.push(result);
46
+ this.operationCount++;
47
+ return result;
48
+ }`;
49
+ const modifiedEditor = editor.addMethodToClass("Calculator", newMethodContent);
50
+ const modifiedText = modifiedEditor.getCurrentText();
51
+ expect(modifiedText).toContain("subtract(a: number, b: number): number");
52
+ expect(modifiedText).toContain("const result = a - b;");
53
+ console.log("✓ Successfully added subtract method to Calculator class");
54
+ console.log("New method content:", newMethodContent.trim());
55
+ });
56
+ test("should automatically match 4-space indentation when adding methods", () => {
57
+ console.log("=== Testing 4-space indentation matching ===");
58
+ const fourSpaceIndentedCode = `export class FourSpaceCalculator {
59
+ private history: number[] = [];
60
+ private operationCount: number = 0;
61
+
62
+ constructor(private precision: number = 2) {}
63
+
64
+ add(a: number, b: number): number {
65
+ const result = a + b;
66
+ this.history.push(result);
67
+ this.operationCount++;
68
+ return result;
69
+ }
70
+
71
+ multiply(a: number, b: number): number {
72
+ const result = a * b;
73
+ this.history.push(result);
74
+ this.operationCount++;
75
+ return result;
76
+ }
77
+ }`;
78
+ const fourSpaceEditor = new editor_1.TreeEditor(parser, fourSpaceIndentedCode);
79
+ const newMethodContent = ` subtract(a: number, b: number): number {
80
+ const result = a - b;
81
+ this.history.push(result);
82
+ this.operationCount++;
83
+ return result;
84
+ }`;
85
+ const modifiedEditor = fourSpaceEditor.addMethodToClass("FourSpaceCalculator", newMethodContent);
86
+ const modifiedText = modifiedEditor.getCurrentText();
87
+ expect(modifiedText).toContain("subtract(a: number, b: number): number");
88
+ expect(modifiedText).toContain("const result = a - b;");
89
+ const lines = modifiedText.split('\n');
90
+ const subtractMethodLine = lines.find(line => line.includes('subtract(a: number, b: number)'));
91
+ const resultLine = lines.find(line => line.includes('const result = a - b;'));
92
+ expect(subtractMethodLine).toMatch(/^ subtract/);
93
+ expect(resultLine).toMatch(/^ const result = a - b;/);
94
+ console.log("✓ Successfully preserved 4-space indentation when adding method");
95
+ console.log("Method line indentation:", subtractMethodLine?.match(/^ */)?.[0].length, "spaces");
96
+ console.log("Body line indentation:", resultLine?.match(/^ */)?.[0].length, "spaces");
97
+ });
98
+ test("should rename a method on a class", () => {
99
+ console.log("=== Renaming multiply method to times ===");
100
+ const matches = editor.findNodesBySimplePath("Calculator.multiply");
101
+ expect(matches.length).toBe(1);
102
+ const methodNode = matches[0].node;
103
+ console.log(`Found multiply method at path: ${matches[0].path}`);
104
+ const methodNameNode = methodNode.children.find((child) => child.type === "property_identifier" && child.text === "multiply");
105
+ expect(methodNameNode).toBeDefined();
106
+ const methodNamePath = parser.getNodePath(editor.getTree().rootNode, methodNameNode);
107
+ const modifiedEditor = editor.updateNodeByPath(methodNamePath, "times");
108
+ const modifiedText = modifiedEditor.getCurrentText();
109
+ expect(modifiedText).not.toContain("multiply(a: number, b: number)");
110
+ expect(modifiedText).toContain("times(a: number, b: number)");
111
+ expect(modifiedText).toContain("const result = a * b;");
112
+ console.log("✓ Successfully renamed multiply method to times");
113
+ });
114
+ test("should move a method from one class to another using appendChild", () => {
115
+ console.log("=== Moving getHistory method to a new MathUtils class ===");
116
+ const newClassDefinition = `export class MathUtils {
117
+ static formatNumber(num: number, precision: number = 2): string {
118
+ return num.toFixed(precision);
119
+ }
120
+ }`;
121
+ const editorWithNewClass = editor.appendChild("", newClassDefinition);
122
+ const historyMatches = editorWithNewClass.findNodesBySimplePath("Calculator.getHistory");
123
+ expect(historyMatches.length).toBe(1);
124
+ const historyMethodNode = historyMatches[0].node;
125
+ const historyMethodText = historyMethodNode.text;
126
+ console.log(`Found getHistory method: ${historyMethodText}`);
127
+ const historyMethodPath = historyMatches[0].path;
128
+ const editorWithoutHistory = editorWithNewClass.updateNodeByPath(historyMethodPath, "");
129
+ const modifiedHistoryMethod = ` static getHistoryForArray(history: number[]): number[] {
130
+ return [...history];
131
+ }`;
132
+ const finalEditor = editorWithoutHistory.appendChild("MathUtils", modifiedHistoryMethod);
133
+ const finalModifiedText = finalEditor.getCurrentText();
134
+ expect(finalModifiedText).toContain("export class MathUtils");
135
+ expect(finalModifiedText).toContain("getHistoryForArray(history: number[])");
136
+ expect(finalModifiedText).not.toContain("getHistory(): number[]");
137
+ console.log("✓ Successfully moved method from Calculator to MathUtils");
138
+ });
139
+ });
140
+ describe("Class Creation", () => {
141
+ test("should define a new class using appendChild", () => {
142
+ console.log("=== Defining a new Statistics class ===");
143
+ const newClassDefinition = `export class Statistics {
144
+ private data: number[] = [];
145
+
146
+ constructor(initialData: number[] = []) {
147
+ this.data = [...initialData];
148
+ }
149
+
150
+ addValue(value: number): void {
151
+ this.data.push(value);
152
+ }
153
+
154
+ getMean(): number {
155
+ if (this.data.length === 0) return 0;
156
+ return this.data.reduce((sum, val) => sum + val, 0) / this.data.length;
157
+ }
158
+
159
+ getMedian(): number {
160
+ if (this.data.length === 0) return 0;
161
+ const sorted = [...this.data].sort((a, b) => a - b);
162
+ const mid = Math.floor(sorted.length / 2);
163
+ return sorted.length % 2 === 0
164
+ ? (sorted[mid - 1] + sorted[mid]) / 2
165
+ : sorted[mid];
166
+ }
167
+ }`;
168
+ const modifiedEditor = editor.appendChild("", newClassDefinition);
169
+ const modifiedText = modifiedEditor.getCurrentText();
170
+ expect(modifiedText).toContain("export class Statistics");
171
+ expect(modifiedText).toContain("getMean(): number");
172
+ expect(modifiedText).toContain("getMedian(): number");
173
+ const statsMatches = modifiedEditor.findNodesBySimplePath("Statistics");
174
+ expect(statsMatches.length).toBe(1);
175
+ expect(statsMatches[0].description).toContain("Class declaration: Statistics");
176
+ const meanMatches = modifiedEditor.findNodesBySimplePath("Statistics.getMean");
177
+ expect(meanMatches.length).toBe(1);
178
+ expect(meanMatches[0].description).toContain("getMean method in class Statistics");
179
+ console.log("✓ Successfully defined Statistics class with methods");
180
+ console.log("Available human paths:", modifiedEditor
181
+ .getAllSimplePaths()
182
+ .filter((p) => p.includes("Statistics")));
183
+ });
184
+ });
185
+ describe("Test Structure Operations", () => {
186
+ test("should define a describe block with a test using appendChild", () => {
187
+ console.log("=== Creating test structure with describe blocks ===");
188
+ const testCode = `describe("Calculator Basic Operations", () => {
189
+ test("should add two numbers correctly", () => {
190
+ const calc = new Calculator();
191
+ const result = calc.add(2, 3);
192
+ expect(result).toBe(5);
193
+ });
194
+ });`;
195
+ const modifiedEditor = editor.appendChild("", testCode);
196
+ const modifiedText = modifiedEditor.getCurrentText();
197
+ expect(modifiedText).toContain('describe("Calculator Basic Operations"');
198
+ expect(modifiedText).toContain('test("should add two numbers correctly"');
199
+ expect(modifiedText).toContain("expect(result).toBe(5)");
200
+ console.log("✓ Successfully created describe block with test");
201
+ });
202
+ test("should update logic of a specific test", () => {
203
+ console.log("=== Updating test assertion logic ===");
204
+ const testCode = `describe("Calculator Operations", () => {
205
+ test("multiplication test", () => {
206
+ const calc = new Calculator();
207
+ const result = calc.multiply(3, 4);
208
+ expect(result).toBe(11); // This is wrong, should be 12
209
+ });
210
+ });`;
211
+ const modifiedEditor = editor.appendChild("", testCode);
212
+ const currentText = modifiedEditor.getCurrentText();
213
+ const wrongAssertion = "expect(result).toBe(11);";
214
+ const correctAssertion = "expect(result).toBe(12);";
215
+ const updatedText = currentText.replace(wrongAssertion, correctAssertion);
216
+ const finalEditor = new editor_1.TreeEditor(parser, updatedText);
217
+ const finalText = finalEditor.getCurrentText();
218
+ expect(finalText).toContain("expect(result).toBe(12);");
219
+ expect(finalText).not.toContain("expect(result).toBe(11);");
220
+ console.log("✓ Successfully updated test assertion from 11 to 12");
221
+ });
222
+ test("should add new test to existing describe block using appendToBlock", () => {
223
+ console.log("=== Adding new test to existing describe block ===");
224
+ const initialTestCode = `describe("Calculator Advanced Operations", () => {
225
+ test("should add numbers", () => {
226
+ const calc = new Calculator();
227
+ expect(calc.add(1, 2)).toBe(3);
228
+ });
229
+ });`;
230
+ const modifiedEditor = editor.appendChild("", initialTestCode);
231
+ const newTest = ` test("should multiply numbers", () => {
232
+ const calc = new Calculator();
233
+ expect(calc.multiply(2, 3)).toBe(6);
234
+ });`;
235
+ const finalEditor = modifiedEditor.appendToBlock("describe(\"Calculator Advanced Operations\")", newTest);
236
+ const finalText = finalEditor.getCurrentText();
237
+ expect(finalText).toContain('test("should add numbers"');
238
+ expect(finalText).toContain('test("should multiply numbers"');
239
+ expect(finalText).toContain("expect(calc.multiply(2, 3)).toBe(6)");
240
+ console.log("✓ Successfully added new test to existing describe block");
241
+ });
242
+ });
243
+ describe("Path Resolution and Validation", () => {
244
+ test("should validate human-readable paths work correctly", () => {
245
+ console.log("=== Validating path resolution functionality ===");
246
+ const classMatches = editor.findNodesBySimplePath("Calculator");
247
+ expect(classMatches.length).toBe(1);
248
+ expect(classMatches[0].description).toContain("Class declaration: Calculator");
249
+ const addMatches = editor.findNodesBySimplePath("Calculator.add");
250
+ expect(addMatches.length).toBe(1);
251
+ expect(addMatches[0].description).toContain("add method in class Calculator");
252
+ const multiplyMatches = editor.findNodesBySimplePath("Calculator.multiply");
253
+ expect(multiplyMatches.length).toBe(1);
254
+ const node = addMatches[0].node;
255
+ const path = addMatches[0].path;
256
+ const retrievedNode = editor.findNodeByPath(path);
257
+ expect(retrievedNode).not.toBeNull();
258
+ expect(retrievedNode.text).toBe(node.text);
259
+ console.log("✓ Path resolution validation successful");
260
+ console.log("Available human paths:", editor.getAllSimplePaths().slice(0, 5));
261
+ });
262
+ test("should maintain syntax validation after edits", () => {
263
+ console.log("=== Validating syntax after modifications ===");
264
+ const newMethod = ` divide(a: number, b: number): number {
265
+ if (b === 0) throw new Error('Division by zero');
266
+ const result = a / b;
267
+ this.history.push(result);
268
+ this.operationCount++;
269
+ return result;
270
+ }`;
271
+ const currentEditor = editor.addMethodToClass("Calculator", newMethod);
272
+ const generatedCode = currentEditor.getCurrentText();
273
+ console.log("Generated code after adding divide method:");
274
+ console.log(generatedCode);
275
+ const tree = currentEditor.getTree();
276
+ expect(tree.rootNode.hasError).toBe(false);
277
+ const divideMatches = currentEditor.findNodesBySimplePath("Calculator.divide");
278
+ expect(divideMatches.length).toBe(1);
279
+ console.log("✓ Syntax remains valid after edits");
280
+ });
281
+ test("should demonstrate complex workflow with simplified utility methods", () => {
282
+ console.log("=== Complex workflow demonstration ===");
283
+ const newProperty = ` private lastOperation: string = '';`;
284
+ let currentEditor = editor.addPropertyToClass("Calculator", newProperty);
285
+ const getterMethod = ` getLastOperation(): string {
286
+ return this.lastOperation;
287
+ }`;
288
+ currentEditor = currentEditor.addMethodToClass("Calculator", getterMethod);
289
+ const newClass = `export class OperationLogger {
290
+ private logs: string[] = [];
291
+
292
+ log(operation: string): void {
293
+ this.logs.push(\`\${new Date().toISOString()}: \${operation}\`);
294
+ }
295
+
296
+ getLogs(): string[] {
297
+ return [...this.logs];
298
+ }
299
+ }`;
300
+ currentEditor = currentEditor.appendChild("", newClass);
301
+ const finalText = currentEditor.getCurrentText();
302
+ console.log("Generated code in complex workflow:");
303
+ console.log(finalText);
304
+ expect(finalText).toContain("lastOperation: string");
305
+ expect(finalText).toContain("getLastOperation(): string");
306
+ expect(finalText).toContain("export class OperationLogger");
307
+ expect(currentEditor.getTree().rootNode.hasError).toBe(false);
308
+ const allPaths = currentEditor.getAllSimplePaths();
309
+ expect(allPaths.some((path) => path.includes("getLastOperation"))).toBe(true);
310
+ expect(allPaths.some((path) => path.includes("OperationLogger"))).toBe(true);
311
+ console.log("✓ Complex workflow completed successfully with utility methods");
312
+ console.log(`Final code has ${finalText.split("\n").length} lines`);
313
+ });
314
+ test("should demonstrate the power of utility methods vs manual approach", () => {
315
+ console.log("=== Comparing utility methods vs manual approach ===");
316
+ const newMethod = ` modulo(a: number, b: number): number {
317
+ const result = a % b;
318
+ this.history.push(result);
319
+ this.operationCount++;
320
+ return result;
321
+ }`;
322
+ const modifiedEditor = editor.addMethodToClass("Calculator", newMethod);
323
+ expect(modifiedEditor.getCurrentText()).toContain("modulo(a: number, b: number)");
324
+ const newProperty = ` private operationTimestamps: Date[] = [];`;
325
+ const editorWithProperty = modifiedEditor.addPropertyToClass("Calculator", newProperty);
326
+ expect(editorWithProperty.getCurrentText()).toContain("operationTimestamps: Date[]");
327
+ const testBlock = `describe("Calculator Modulo Tests", () => {
328
+ test("should handle basic modulo", () => {
329
+ const calc = new Calculator();
330
+ expect(calc.modulo(10, 3)).toBe(1);
331
+ });
332
+ });`;
333
+ const editorWithTest = editorWithProperty.appendChild("", testBlock);
334
+ const newTest = ` test("should handle zero modulo", () => {
335
+ const calc = new Calculator();
336
+ expect(calc.modulo(0, 5)).toBe(0);
337
+ });`;
338
+ const finalEditor = editorWithTest.appendToBlock(`describe("Calculator Modulo Tests")`, newTest);
339
+ const finalText = finalEditor.getCurrentText();
340
+ expect(finalText).toContain('test("should handle basic modulo"');
341
+ expect(finalText).toContain('test("should handle zero modulo"');
342
+ console.log("✓ Utility methods demonstrate massive code simplification");
343
+ console.log("Complex manual insertion logic replaced with simple method calls!");
344
+ });
345
+ });
346
+ });
347
+ //# sourceMappingURL=common-edits.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-edits.test.js","sourceRoot":"","sources":["../../../../tests/tree-sitter/paths/common-edits.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parser_1 = require("../../../src/plugins/tree-sitter/parser");
4
+ describe("Debug Exact Position Finding", () => {
5
+ test("should debug findPathsForLine position calculation", () => {
6
+ const parser = parser_1.LanguageAgnosticParser.createTypeScriptParser();
7
+ const sampleCode = `
8
+ export class Calculator {
9
+ add(a: number, b: number): number {
10
+ const result = a + b;
11
+ return result;
12
+ }
13
+ }`;
14
+ const tree = parser.parseString(sampleCode);
15
+ console.log("=== Full source code ===");
16
+ console.log(tree.rootNode.text);
17
+ console.log("=== Lines breakdown ===");
18
+ const lines = tree.rootNode.text.split("\n");
19
+ lines.forEach((line, index) => {
20
+ console.log(`Line ${index}: "${line}"`);
21
+ const resultIndex = line.indexOf("result");
22
+ if (resultIndex !== -1) {
23
+ console.log(` Found "result" at column ${resultIndex}`);
24
+ const node = tree.rootNode.descendantForPosition({ row: index, column: resultIndex }, { row: index, column: resultIndex + "result".length });
25
+ console.log(` Node at position: type="${node?.type}", text="${node?.text}"`);
26
+ console.log(` Node position: start=${JSON.stringify(node?.startPosition)}, end=${JSON.stringify(node?.endPosition)}`);
27
+ if (node) {
28
+ const path = parser.getNodePath(tree.rootNode, node);
29
+ console.log(` Generated path: ${path}`);
30
+ }
31
+ }
32
+ });
33
+ });
34
+ });
35
+ //# sourceMappingURL=debug-exact-position.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-exact-position.test.js","sourceRoot":"","sources":["../../../../tests/tree-sitter/paths/debug-exact-position.test.ts"],"names":[],"mappings":";;AAAA,oEAAiF;AAGjF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,+BAAsB,CAAC,sBAAsB,EAAE,CAAC;QAE/D,MAAM,UAAU,GAAG;;;;;;EAMrB,CAAC;QAEC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;gBAGzD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAC9C,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EACnC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,CACtD,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;gBAEvH,IAAI,IAAI,EAAE;oBACR,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACrD,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;iBAC1C;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parser_1 = require("../../../src/plugins/tree-sitter/parser");
4
+ describe("Debug Line Indexing", () => {
5
+ test("should debug line indexing in tree-sitter", () => {
6
+ const parser = parser_1.LanguageAgnosticParser.createTypeScriptParser();
7
+ const sampleCode = `export class Calculator {
8
+ add(a: number, b: number): number {
9
+ const result = a + b;
10
+ return result;
11
+ }
12
+ }`;
13
+ console.log("=== Source without leading newline ===");
14
+ console.log(`"${sampleCode}"`);
15
+ const tree = parser.parseString(sampleCode);
16
+ const lines = sampleCode.split("\n");
17
+ lines.forEach((line, index) => {
18
+ console.log(`Line ${index}: "${line}"`);
19
+ });
20
+ console.log("\n=== Finding formal_parameters node manually ===");
21
+ function traverseNode(node, depth = 0) {
22
+ const indent = " ".repeat(depth);
23
+ console.log(`${indent}${node.type} [${node.startPosition.row}:${node.startPosition.column}-${node.endPosition.row}:${node.endPosition.column}] "${node.text.substring(0, 50)}${node.text.length > 50 ? '...' : ''}"`);
24
+ if (node.type === 'formal_parameters') {
25
+ console.log(`${indent}*** FOUND formal_parameters at row ${node.startPosition.row} ***`);
26
+ }
27
+ for (let i = 0; i < node.childCount; i++) {
28
+ traverseNode(node.child(i), depth + 1);
29
+ }
30
+ }
31
+ traverseNode(tree.rootNode);
32
+ console.log("\n=== Testing descendantForPosition for line 2, col 10 ===");
33
+ const testNode = tree.rootNode.descendantForPosition({ row: 2, column: 10 }, { row: 2, column: 16 });
34
+ console.log(`Found node: type="${testNode?.type}", text="${testNode?.text}"`);
35
+ console.log(`Node position: ${JSON.stringify(testNode?.startPosition)} to ${JSON.stringify(testNode?.endPosition)}`);
36
+ });
37
+ });
38
+ //# sourceMappingURL=debug-line-indexing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-line-indexing.test.js","sourceRoot":"","sources":["../../../../tests/tree-sitter/paths/debug-line-indexing.test.ts"],"names":[],"mappings":";;AAAA,oEAAiF;AAEjF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,+BAAsB,CAAC,sBAAsB,EAAE,CAAC;QAE/D,MAAM,UAAU,GAAG;;;;;EAKrB,CAAC;QAEC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAEjE,SAAS,YAAY,CAAC,IAAS,EAAE,KAAK,GAAG,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAEtN,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,sCAAsC,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,CAAC;aAC1F;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;gBACxC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;aACxC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAClD,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EACtB,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACvB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,IAAI,YAAY,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parser_1 = require("../../../src/plugins/tree-sitter/parser");
4
+ const editor_1 = require("../../../src/plugins/tree-sitter/editor");
5
+ describe("Debug Tree Path Consistency", () => {
6
+ it("should analyze parser vs editor tree differences", () => {
7
+ const parser = parser_1.LanguageAgnosticParser.createTypeScriptParser();
8
+ const content = `export class Calculator {
9
+ private history: number[] = [];
10
+
11
+ constructor(private precision: number = 2) {}
12
+
13
+ add(a: number, b: number): number {
14
+ const result = a + b;
15
+ this.history.push(result);
16
+ return Math.round(result * Math.pow(10, this.precision)) / Math.pow(10, this.precision);
17
+ }
18
+
19
+ multiply(a: number, b: number): number {
20
+ const result = a * b;
21
+ this.history.push(result);
22
+ return result;
23
+ }
24
+
25
+ getHistory(): number[] {
26
+ return [...this.history];
27
+ }
28
+
29
+ clear(): void {
30
+ this.history = [];
31
+ }
32
+ }`;
33
+ const tree = parser.parseString(content);
34
+ console.log("=== Sample content ===");
35
+ console.log("");
36
+ console.log(content);
37
+ console.log("=== End content ===");
38
+ console.log("=== Comparing Parser vs Editor Trees ===");
39
+ const editor = editor_1.TreeEditor.fromTree(parser, tree);
40
+ console.log(`Parser tree root: ${tree.rootNode.type}, children: ${tree.rootNode.children.length}`);
41
+ console.log(`Parser children types: [${tree.rootNode.children.map(c => c.type).join(', ')}]`);
42
+ console.log(`Parser instances identical: ${parser === editor.parser}`);
43
+ console.log(`Editor tree root: ${editor.tree.rootNode.type}, children: ${editor.tree.rootNode.children.length}`);
44
+ console.log(`Editor children types: [${editor.tree.rootNode.children.map(c => c.type).join(', ')}]`);
45
+ console.log(`Trees identical: ${tree === editor.tree}`);
46
+ console.log("==========================================");
47
+ const resultPaths = parser.findPathsForLine(tree, "result");
48
+ const historyPaths = parser.findPathsForLine(tree, "history");
49
+ const addPaths = parser.findPathsForLine(tree, "add");
50
+ console.log("=== All paths containing 'result' ===");
51
+ resultPaths.forEach((pathInfo, i) => {
52
+ console.log(`${i}: ${pathInfo.path} at row ${pathInfo.row}, col ${pathInfo.column}: "${pathInfo.text}"`);
53
+ });
54
+ console.log("\n=== Testing path round-trip ===");
55
+ if (resultPaths.length > 0) {
56
+ const firstPath = resultPaths[0];
57
+ console.log(`Testing path: ${firstPath.path}`);
58
+ const foundNode = editor.findNodeByPath(firstPath.path);
59
+ if (foundNode) {
60
+ console.log(`✓ Node found! Text: "${foundNode.text}", Type: ${foundNode.type}`);
61
+ console.log(`Position: row ${foundNode.startPosition.row}, col ${foundNode.startPosition.column}`);
62
+ const regeneratedPath = parser.getNodePath(tree.rootNode, foundNode);
63
+ console.log(`Original path: ${firstPath.path}`);
64
+ console.log(`Regenerated path: ${regeneratedPath}`);
65
+ console.log(`Paths match: ${regeneratedPath === firstPath.path}`);
66
+ }
67
+ else {
68
+ console.log(`✗ Node NOT found for path: ${firstPath.path}`);
69
+ }
70
+ }
71
+ expect(tree === editor.tree).toBe(true);
72
+ });
73
+ });
74
+ //# sourceMappingURL=debug-paths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-paths.test.js","sourceRoot":"","sources":["../../../../tests/tree-sitter/paths/debug-paths.test.ts"],"names":[],"mappings":"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"}