@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,7 @@
1
+
2
+ class {{{ invalid syntax here
3
+ function missing_name() {
4
+ return "broken"
5
+ missing closing brace
6
+ export const = undefined;
7
+
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0;
3
+
4
+ add(value: number): Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value: number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }}
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", () => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe(7);
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0;
3
+
4
+ add(value: number): Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value: number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", (() => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe(7);
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0;
3
+
4
+ add(value: number): Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", () => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe(7);
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0;
3
+
4
+ add(value: number: Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value: number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", () => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe(7);
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0
3
+
4
+ add(value: number): Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value: number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", () => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe(7);
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,20 @@
1
+
2
+ export class Calculator {
3
+ private result: number = 0;
4
+
5
+ add(value: number): Calculator {
6
+ this.result += value;
7
+ return this;
8
+ }
9
+
10
+ // This method has broken syntax
11
+ subtract(value number): Calculator { // Missing colon
12
+ this.result -= value;
13
+ return this;
14
+ }
15
+
16
+ multiply(value: number): Calculator {
17
+ this.result *= value;
18
+ return this;
19
+ }
20
+ }
@@ -0,0 +1,14 @@
1
+
2
+ export class TestClass {
3
+ method1() {
4
+ return "valid";
5
+ }
6
+
7
+ method2( { // Missing parameter, extra opening brace
8
+ return "broken";
9
+ }
10
+
11
+ method3() {
12
+ return "valid again";
13
+ }
14
+ }
@@ -0,0 +1,39 @@
1
+ export class Calculator {
2
+ private result: number = 0;
3
+
4
+ add(value: number): Calculator {
5
+ this.result += value;
6
+ return this;
7
+ }
8
+
9
+ subtract(value: number): Calculator {
10
+ this.result -= value;
11
+ return this;
12
+ }
13
+
14
+ multiply(value: number): Calculator {
15
+ this.result *= value;
16
+ return this;
17
+ }
18
+
19
+ getResult(): number {
20
+ return this.result;
21
+ }
22
+ }
23
+
24
+ export function createCalculator(): Calculator {
25
+ return new Calculator();
26
+ }
27
+
28
+ describe("Calculator Tests", () => {
29
+ it("should perform basic arithmetic", () => {
30
+ const calc = createCalculator();
31
+ const result = calc.add(5).multiply(2).subtract(3).getResult();
32
+ expect(result).toBe("unclosed string;
33
+ });
34
+
35
+ it("should chain operations correctly", () => {
36
+ const calc = new Calculator();
37
+ expect(calc.add(10).add(5).getResult()).toBe(15);
38
+ });
39
+ });
@@ -0,0 +1,251 @@
1
+ import {
2
+ LanguageAgnosticParser,
3
+ compareTreeStructures,
4
+ } from "../../src/plugins/tree-sitter/parser";
5
+ import { join } from "path";
6
+
7
+ describe("Tree-sitter TypeScript Parser", () => {
8
+ let parser: LanguageAgnosticParser;
9
+ const beforeFilePath = join(__dirname, "sample-before.ts");
10
+ const afterFilePath = join(__dirname, "sample-after.ts");
11
+
12
+ beforeEach(() => {
13
+ parser = LanguageAgnosticParser.createTypeScriptParser();
14
+
15
+ // Debug: Check if parser is properly initialized
16
+ const testTree = parser.parseString("class Test {}");
17
+ console.log("Test parse successful:", !!testTree);
18
+ console.log("Test tree has rootNode:", !!testTree.rootNode);
19
+ console.log(testTree);
20
+ console.log(
21
+ "Test rootNode type:",
22
+ testTree.rootNode ? testTree.rootNode.type : "undefined"
23
+ );
24
+ });
25
+
26
+ test("should parse TypeScript files", () => {
27
+ const beforeTree = parser.parseFile(beforeFilePath);
28
+ const afterTree = parser.parseFile(afterFilePath);
29
+
30
+ expect(beforeTree).toBeDefined();
31
+ expect(beforeTree.rootNode).toBeDefined();
32
+ expect(afterTree).toBeDefined();
33
+ expect(afterTree.rootNode).toBeDefined();
34
+ });
35
+
36
+ test("should find class declarations", () => {
37
+ const beforeTree = parser.parseFile(beforeFilePath);
38
+ const afterTree = parser.parseFile(afterFilePath);
39
+
40
+ const beforeClasses = parser.findClassDeclarations(beforeTree);
41
+ const afterClasses = parser.findClassDeclarations(afterTree);
42
+
43
+ expect(beforeClasses).toHaveLength(1);
44
+ expect(afterClasses).toHaveLength(1);
45
+ expect(beforeClasses[0].text).toContain("Calculator");
46
+ expect(afterClasses[0].text).toContain("Calculator");
47
+ });
48
+
49
+ test("should find method declarations", () => {
50
+ const beforeTree = parser.parseFile(beforeFilePath);
51
+ const afterTree = parser.parseFile(afterFilePath);
52
+
53
+ const beforeMethods = parser.findMethodDeclarations(beforeTree);
54
+ const afterMethods = parser.findMethodDeclarations(afterTree);
55
+
56
+ // Both should have methods, but after might have more
57
+ expect(beforeMethods.length).toBeGreaterThan(0);
58
+ expect(afterMethods.length).toBeGreaterThan(0);
59
+
60
+ const methodNames = beforeMethods.map((method) => {
61
+ const nameNode = method.children.find(
62
+ (child) => child.type === "property_identifier"
63
+ );
64
+ return nameNode ? nameNode.text : "unknown";
65
+ });
66
+
67
+ expect(methodNames).toContain("add");
68
+ expect(methodNames).toContain("multiply");
69
+ });
70
+
71
+ test("should convert nodes to objects", () => {
72
+ const beforeTree = parser.parseFile(beforeFilePath);
73
+ const rootObj = parser.nodeToObject(beforeTree.rootNode);
74
+
75
+ expect(rootObj).toHaveProperty("type");
76
+ expect(rootObj).toHaveProperty("text");
77
+ expect(rootObj).toHaveProperty("startPosition");
78
+ expect(rootObj).toHaveProperty("endPosition");
79
+ expect(rootObj).toHaveProperty("children");
80
+ expect(Array.isArray(rootObj.children)).toBe(true);
81
+ });
82
+
83
+ test("should print tree structure", () => {
84
+ const beforeTree = parser.parseFile(beforeFilePath);
85
+ const treeString = parser.printTree(beforeTree.rootNode);
86
+
87
+ expect(typeof treeString).toBe("string");
88
+ expect(treeString.length).toBeGreaterThan(0);
89
+ expect(treeString).toContain("program");
90
+ expect(treeString).toContain("export_statement");
91
+ });
92
+
93
+ test("should compare tree structures and find differences", () => {
94
+ const beforeTree = parser.parseFile(beforeFilePath);
95
+ const afterTree = parser.parseFile(afterFilePath);
96
+
97
+ const comparison = compareTreeStructures(beforeTree, afterTree);
98
+
99
+ expect(comparison).toHaveProperty("differences");
100
+ expect(comparison).toHaveProperty("summary");
101
+ expect(Array.isArray(comparison.differences)).toBe(true);
102
+ expect(typeof comparison.summary).toBe("string");
103
+
104
+ // We expect differences since the files have different content
105
+ expect(comparison.differences.length).toBeGreaterThan(0);
106
+
107
+ console.log("\n=== Tree Comparison Results ===");
108
+ console.log(comparison.summary);
109
+ console.log("\nDifferences:");
110
+ comparison.differences.forEach((diff, index) => {
111
+ console.log(`${index + 1}. ${diff}`);
112
+ });
113
+ });
114
+
115
+ test("should display tree structures for visual inspection", () => {
116
+ const beforeTree = parser.parseFile(beforeFilePath);
117
+ const afterTree = parser.parseFile(afterFilePath);
118
+
119
+ console.log("\n=== BEFORE FILE TREE STRUCTURE ===");
120
+ console.log(parser.printTree(beforeTree.rootNode));
121
+
122
+ console.log("\n=== AFTER FILE TREE STRUCTURE ===");
123
+ console.log(parser.printTree(afterTree.rootNode));
124
+
125
+ // Focus on method nodes specifically
126
+ const beforeMethods = parser.findMethodDeclarations(beforeTree);
127
+ const afterMethods = parser.findMethodDeclarations(afterTree);
128
+
129
+ console.log("\n=== BEFORE FILE METHODS ===");
130
+ beforeMethods.forEach((method, index) => {
131
+ console.log(`Method ${index + 1}:`);
132
+ console.log(parser.printTree(method));
133
+ });
134
+
135
+ console.log("\n=== AFTER FILE METHODS ===");
136
+ afterMethods.forEach((method, index) => {
137
+ console.log(`Method ${index + 1}:`);
138
+ console.log(parser.printTree(method));
139
+ });
140
+ });
141
+
142
+ test("should parse string content directly", () => {
143
+ const simpleClass = `
144
+ class Test {
145
+ method(): string {
146
+ return "hello";
147
+ }
148
+ }`;
149
+
150
+ const tree = parser.parseString(simpleClass);
151
+ const methods = parser.findMethodDeclarations(tree);
152
+
153
+ expect(tree).toBeDefined();
154
+ expect(methods).toHaveLength(1);
155
+ expect(methods[0].text).toContain("method");
156
+ });
157
+ });
158
+
159
+ describe("Language Agnostic Parser", () => {
160
+ let parser: LanguageAgnosticParser;
161
+ const beforeFilePath = join(__dirname, "sample-before.ts");
162
+ const afterFilePath = join(__dirname, "sample-after.ts");
163
+
164
+ afterEach(() => {
165
+ // Clean up parser instance
166
+ parser = null as any;
167
+ });
168
+
169
+ beforeEach(() => {
170
+ parser = LanguageAgnosticParser.createTypeScriptParser();
171
+ console.log("Language Agnostic Parser created:", !!parser);
172
+ const testTree = parser.parseString("class Test {}");
173
+ console.log(
174
+ "Language Agnostic test parse successful:",
175
+ !!testTree && !!testTree.rootNode
176
+ );
177
+ });
178
+
179
+ test("should create TypeScript parser", () => {
180
+ const tsParser = LanguageAgnosticParser.createTypeScriptParser();
181
+ expect(tsParser).toBeInstanceOf(LanguageAgnosticParser);
182
+
183
+ const tree = tsParser.parseString("class Test { method() {} }");
184
+ expect(tree).toBeDefined();
185
+ });
186
+
187
+ test("should create JavaScript parser", () => {
188
+ const jsParser = LanguageAgnosticParser.createJavaScriptParser();
189
+ expect(jsParser).toBeInstanceOf(LanguageAgnosticParser);
190
+
191
+ const tree = jsParser.parseString("class Test { method() {} }");
192
+ expect(tree).toBeDefined();
193
+ });
194
+
195
+ test("should get file text from tree", () => {
196
+ const sourceCode = 'class Test { method() { return "hello"; } }';
197
+ const tree = parser.parseString(sourceCode);
198
+ const fileText = parser.getFileText(tree);
199
+
200
+ expect(fileText).toBe(sourceCode);
201
+ });
202
+
203
+ test("should find paths for a given line/text", () => {
204
+ const tree = parser.parseFile(beforeFilePath);
205
+ const paths = parser.findPathsForLine(tree, "add");
206
+
207
+ expect(paths.length).toBeGreaterThan(0);
208
+
209
+ const addMethodPath = paths.find((p) => p.text === "add");
210
+ expect(addMethodPath).toBeDefined();
211
+ expect(addMethodPath!.path).toBeDefined();
212
+ expect(addMethodPath!.row).toBeGreaterThanOrEqual(0);
213
+ expect(addMethodPath!.column).toBeGreaterThanOrEqual(0);
214
+
215
+ console.log('Found paths for "add":', paths);
216
+ });
217
+
218
+ test("should find multiple occurrences of text", () => {
219
+ const sourceCode = `
220
+ class Test {
221
+ method test() { return test; }
222
+ test() { return "test"; }
223
+ }`;
224
+ const tree = parser.parseString(sourceCode);
225
+ const paths = parser.findPathsForLine(tree, "test");
226
+
227
+ expect(paths.length).toBeGreaterThan(1);
228
+ console.log('Multiple "test" occurrences:', paths);
229
+ });
230
+
231
+ test("should find method and class declarations with configurable types", () => {
232
+ const tree = parser.parseFile(beforeFilePath);
233
+
234
+ const methods = parser.findMethodDeclarations(tree);
235
+ const classes = parser.findClassDeclarations(tree);
236
+
237
+ expect(methods.length).toBeGreaterThan(0);
238
+ expect(classes.length).toBe(1);
239
+
240
+ const methodNames = methods.map((method) => {
241
+ const nameNode = method.children.find(
242
+ (child) => child.type === "property_identifier"
243
+ );
244
+ return nameNode ? nameNode.text : "unknown";
245
+ });
246
+
247
+ console.log("Found methods:", methodNames);
248
+ expect(methodNames).toContain("add");
249
+ expect(methodNames).toContain("multiply");
250
+ });
251
+ });
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@tyvm/knowhow",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "description": "ai cli with plugins and agents",
5
5
  "main": "ts_build/src/index.js",
6
6
  "bin": {
7
7
  "knowhow": "ts_build/src/cli.js"
8
8
  },
9
9
  "scripts": {
10
- "test": "jest --detectOpenHandles --forceExit --testTimeout 300000",
10
+ "test": "jest --testTimeout 300000",
11
11
  "test:debug": "node --inspect-brk ../../node_modules/jest/bin/jest.js --detectOpenHandles --forceExit --testTimeout 300000",
12
12
  "compile": "tsc",
13
13
  "start": "npm run compile && node ts_build/src/server/index.js",
@@ -41,7 +41,7 @@
41
41
  "@anthropic-ai/sdk": "^0.39.0",
42
42
  "@aws-sdk/client-s3": "^3.588.0",
43
43
  "@google/genai": "^0.14.1",
44
- "@inquirer/editor": "^1.2.13",
44
+ "@inquirer/editor": "^4.2.18",
45
45
  "@linear/sdk": "^12.0.0",
46
46
  "@modelcontextprotocol/sdk": "^1.13.3",
47
47
  "@notionhq/client": "^2.2.14",
@@ -56,11 +56,13 @@
56
56
  "express": "^4.19.2",
57
57
  "figma-js": "^1.16.1-0",
58
58
  "gitignore-to-glob": "^0.3.0",
59
+ "glob": "11.0.3",
59
60
  "ink": "^6.0.1",
60
61
  "isolated-vm": "^5.0.4",
61
62
  "jira-client": "^8.2.2",
62
63
  "marked": "^10.0.0",
63
64
  "marked-terminal": "^6.2.0",
65
+ "minimatch": "^10.0.3",
64
66
  "morgan": "^1.10.0",
65
67
  "node-fetch": "^3.2.3",
66
68
  "node-jq": "^6.0.1",
@@ -77,6 +79,9 @@
77
79
  "puppeteer-extra-plugin-stealth": "^2.11.2",
78
80
  "react": "^19.1.0",
79
81
  "source-map-support": "^0.5.21",
82
+ "tree-sitter": "^0.21.1",
83
+ "tree-sitter-javascript": "^0.23.1",
84
+ "tree-sitter-typescript": "^0.23.1",
80
85
  "typescript": "^4.6.3",
81
86
  "ws": "^8.18.1",
82
87
  "youtube-dl-exec": "^2.5.5",
@@ -40,6 +40,7 @@ export declare abstract class BaseAgent implements IAgent {
40
40
  protected pendingUserMessages: Message[];
41
41
  protected taskBreakdown: string;
42
42
  protected summaries: string[];
43
+ protected currentTaskId: string | null;
43
44
  agentEvents: EventEmitter<[never]>;
44
45
  eventTypes: {
45
46
  newThread: string;
@@ -60,7 +61,7 @@ export declare abstract class BaseAgent implements IAgent {
60
61
  setMaxTurns(maxTurns: number | null): void;
61
62
  setMaxSpend(maxSpend: number | null): void;
62
63
  setMaxRunTime(maxRunTimeMs: number | null): void;
63
- newTask(): void;
64
+ newTask(taskId?: string): void;
64
65
  register(): void;
65
66
  setModelPreferences(value: ModelPreference[]): void;
66
67
  updatePreferences(value: ModelPreference): void;
@@ -100,7 +101,6 @@ export declare abstract class BaseAgent implements IAgent {
100
101
  pause(): void;
101
102
  unpause(): void;
102
103
  unpaused(): Promise<unknown>;
103
- resume(resumeReason: string): Promise<void>;
104
104
  kill(): Promise<void>;
105
105
  call(userInput: string, _messages?: Message[]): any;
106
106
  addPendingUserMessage(message: Message): void;