@tyvm/knowhow 0.0.90 → 0.0.92

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 (272) hide show
  1. package/.depcheckrc +30 -0
  2. package/bin/knowhow.js +1 -1
  3. package/package.json +8 -34
  4. package/src/agents/configurable/ConfigAgent.ts +2 -2
  5. package/src/agents/tools/executeScript/index.ts +5 -0
  6. package/src/agents/tools/googleSearch.ts +2 -2
  7. package/src/agents/tools/index.ts +0 -3
  8. package/src/agents/tools/list.ts +0 -147
  9. package/src/agents/tools/loadWebpage.ts +3 -113
  10. package/src/auth/browserLogin.ts +10 -13
  11. package/src/chat/modules/AgentModule.ts +0 -1
  12. package/src/chat/types.ts +1 -1
  13. package/src/cli.ts +63 -3
  14. package/src/clients/gemini.ts +96 -25
  15. package/src/clients/http.ts +7 -11
  16. package/src/clients/pricing/google.ts +122 -26
  17. package/src/conversion.ts +24 -54
  18. package/src/index.ts +15 -20
  19. package/src/login.ts +5 -6
  20. package/src/plugins/language.ts +0 -4
  21. package/src/plugins/plugins.ts +0 -14
  22. package/src/plugins/url.ts +31 -12
  23. package/src/services/EmbeddingsService.ts +70 -0
  24. package/src/services/KnowhowClient.ts +34 -34
  25. package/src/{plugins/downloader/downloader.ts → services/MediaProcessorService.ts} +109 -267
  26. package/src/services/S3.ts +19 -87
  27. package/src/services/index.ts +8 -8
  28. package/src/services/modules/index.ts +12 -3
  29. package/src/services/modules/types.ts +8 -2
  30. package/src/services/script-execution/ScriptExecutor.ts +29 -10
  31. package/src/services/script-execution/ScriptPolicy.ts +6 -2
  32. package/src/types.ts +1 -0
  33. package/src/utils/http.ts +127 -0
  34. package/src/workers/auth/PasskeySetup.ts +7 -11
  35. package/tests/clients/AIClient.test.ts +24 -21
  36. package/tests/manual/file-edits/figma.test.ts +3 -70
  37. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +2 -0
  38. package/tests/plugins/language/languagePlugin.test.ts +2 -0
  39. package/tests/processors/ToolResponseCache.test.ts +2 -2
  40. package/tests/test.spec.ts +0 -14
  41. package/tests/unit/modules/moduleLoading.test.ts +12 -4
  42. package/tests/unit/plugins/pluginLoading.test.ts +6 -6
  43. package/ts_build/package.json +8 -34
  44. package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -1
  45. package/ts_build/src/agents/tools/ast/astAppendNode.js +2 -90
  46. package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -1
  47. package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -1
  48. package/ts_build/src/agents/tools/ast/astDeleteNode.js +2 -88
  49. package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -1
  50. package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -1
  51. package/ts_build/src/agents/tools/ast/astEditNode.js +2 -90
  52. package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -1
  53. package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -1
  54. package/ts_build/src/agents/tools/ast/astGetPathForLine.js +2 -72
  55. package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -1
  56. package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -1
  57. package/ts_build/src/agents/tools/ast/astListPaths.js +2 -72
  58. package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -1
  59. package/ts_build/src/agents/tools/executeScript/index.d.ts +3 -2
  60. package/ts_build/src/agents/tools/executeScript/index.js +4 -1
  61. package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
  62. package/ts_build/src/agents/tools/googleSearch.js +2 -2
  63. package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
  64. package/ts_build/src/agents/tools/index.d.ts +0 -3
  65. package/ts_build/src/agents/tools/index.js +0 -3
  66. package/ts_build/src/agents/tools/index.js.map +1 -1
  67. package/ts_build/src/agents/tools/list.js +0 -138
  68. package/ts_build/src/agents/tools/list.js.map +1 -1
  69. package/ts_build/src/agents/tools/loadWebpage.js +1 -89
  70. package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
  71. package/ts_build/src/agents/tools/textSearch.d.ts +1 -1
  72. package/ts_build/src/auth/browserLogin.js +7 -7
  73. package/ts_build/src/auth/browserLogin.js.map +1 -1
  74. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  75. package/ts_build/src/chat/types.d.ts +1 -1
  76. package/ts_build/src/cli.d.ts +1 -1
  77. package/ts_build/src/cli.js +47 -1
  78. package/ts_build/src/cli.js.map +1 -1
  79. package/ts_build/src/clients/gemini.d.ts +1 -73
  80. package/ts_build/src/clients/gemini.js +57 -19
  81. package/ts_build/src/clients/gemini.js.map +1 -1
  82. package/ts_build/src/clients/http.js +5 -9
  83. package/ts_build/src/clients/http.js.map +1 -1
  84. package/ts_build/src/clients/pricing/google.d.ts +17 -73
  85. package/ts_build/src/clients/pricing/google.js +47 -10
  86. package/ts_build/src/clients/pricing/google.js.map +1 -1
  87. package/ts_build/src/conversion.d.ts +1 -4
  88. package/ts_build/src/conversion.js +12 -27
  89. package/ts_build/src/conversion.js.map +1 -1
  90. package/ts_build/src/index.d.ts +4 -0
  91. package/ts_build/src/index.js +15 -14
  92. package/ts_build/src/index.js.map +1 -1
  93. package/ts_build/src/login.js +5 -4
  94. package/ts_build/src/login.js.map +1 -1
  95. package/ts_build/src/plugins/downloader/downloader.js +3 -3
  96. package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
  97. package/ts_build/src/plugins/language.js.map +1 -1
  98. package/ts_build/src/plugins/plugins.js +0 -14
  99. package/ts_build/src/plugins/plugins.js.map +1 -1
  100. package/ts_build/src/plugins/tree-sitter/editor.d.ts +3 -32
  101. package/ts_build/src/plugins/tree-sitter/editor.js +6 -208
  102. package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -1
  103. package/ts_build/src/plugins/tree-sitter/parser.d.ts +19 -54
  104. package/ts_build/src/plugins/tree-sitter/parser.js +19 -293
  105. package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -1
  106. package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +2 -15
  107. package/ts_build/src/plugins/tree-sitter/simple-paths.js +2 -324
  108. package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -1
  109. package/ts_build/src/plugins/url.js +27 -8
  110. package/ts_build/src/plugins/url.js.map +1 -1
  111. package/ts_build/src/services/EmbeddingsService.d.ts +14 -0
  112. package/ts_build/src/services/EmbeddingsService.js +33 -0
  113. package/ts_build/src/services/EmbeddingsService.js.map +1 -0
  114. package/ts_build/src/services/GitHub.js +2 -2
  115. package/ts_build/src/services/GitHub.js.map +1 -1
  116. package/ts_build/src/services/KnowhowClient.d.ts +29 -29
  117. package/ts_build/src/services/KnowhowClient.js +33 -33
  118. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  119. package/ts_build/src/services/MediaProcessorService.d.ts +22 -0
  120. package/ts_build/src/services/MediaProcessorService.js +215 -0
  121. package/ts_build/src/services/MediaProcessorService.js.map +1 -0
  122. package/ts_build/src/services/S3.d.ts +0 -4
  123. package/ts_build/src/services/S3.js +14 -60
  124. package/ts_build/src/services/S3.js.map +1 -1
  125. package/ts_build/src/services/index.d.ts +6 -5
  126. package/ts_build/src/services/index.js +6 -6
  127. package/ts_build/src/services/index.js.map +1 -1
  128. package/ts_build/src/services/modules/index.js +12 -3
  129. package/ts_build/src/services/modules/index.js.map +1 -1
  130. package/ts_build/src/services/modules/types.d.ts +8 -2
  131. package/ts_build/src/services/script-execution/ScriptExecutor.js +22 -7
  132. package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
  133. package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +1 -1
  134. package/ts_build/src/services/script-execution/ScriptPolicy.js +4 -2
  135. package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
  136. package/ts_build/src/types.d.ts +1 -0
  137. package/ts_build/src/types.js +1 -0
  138. package/ts_build/src/types.js.map +1 -1
  139. package/ts_build/src/utils/http.d.ts +27 -0
  140. package/ts_build/src/utils/http.js +98 -0
  141. package/ts_build/src/utils/http.js.map +1 -0
  142. package/ts_build/src/workers/auth/PasskeySetup.js +6 -7
  143. package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
  144. package/ts_build/tests/clients/AIClient.test.js +11 -14
  145. package/ts_build/tests/clients/AIClient.test.js.map +1 -1
  146. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -1
  147. package/ts_build/tests/manual/file-edits/figma.test.js +1 -46
  148. package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -1
  149. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +2 -0
  150. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
  151. package/ts_build/tests/plugins/language/languagePlugin.test.js +2 -0
  152. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
  153. package/ts_build/tests/processors/ToolResponseCache.test.js +2 -2
  154. package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
  155. package/ts_build/tests/test.spec.js +0 -14
  156. package/ts_build/tests/test.spec.js.map +1 -1
  157. package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +0 -1
  158. package/ts_build/tests/tree-sitter/tree-sitter.test.js +2 -183
  159. package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -1
  160. package/ts_build/tests/unit/modules/moduleLoading.test.js +11 -4
  161. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
  162. package/ts_build/tests/unit/plugins/pluginLoading.test.js +4 -4
  163. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
  164. package/benchmarks/.dockerignore +0 -7
  165. package/benchmarks/README.md +0 -166
  166. package/benchmarks/docker/Dockerfile +0 -68
  167. package/benchmarks/example-config.yml +0 -27
  168. package/benchmarks/jest.config.js +0 -13
  169. package/benchmarks/package-lock.json +0 -4297
  170. package/benchmarks/package.json +0 -39
  171. package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +0 -2909
  172. package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -1671
  173. package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +0 -2814
  174. package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -2014
  175. package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3121
  176. package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +0 -98
  177. package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +0 -3256
  178. package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +0 -4298
  179. package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3031
  180. package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -2990
  181. package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3256
  182. package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3007
  183. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -3256
  184. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +0 -3036
  185. package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +0 -3280
  186. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -1920
  187. package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +0 -3281
  188. package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +0 -2896
  189. package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3011
  190. package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +0 -3003
  191. package/benchmarks/scripts/build-and-run.sh +0 -47
  192. package/benchmarks/scripts/clone-exercism.sh +0 -92
  193. package/benchmarks/scripts/validate.sh +0 -48
  194. package/benchmarks/src/__tests__/runner.test.ts +0 -27
  195. package/benchmarks/src/cli.ts +0 -90
  196. package/benchmarks/src/evaluators/EvaluatorRegistry.ts +0 -64
  197. package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +0 -183
  198. package/benchmarks/src/evaluators/index.ts +0 -3
  199. package/benchmarks/src/evaluators/types.ts +0 -22
  200. package/benchmarks/src/index.ts +0 -3
  201. package/benchmarks/src/providers.ts +0 -13
  202. package/benchmarks/src/runner.ts +0 -824
  203. package/benchmarks/src/types.ts +0 -63
  204. package/benchmarks/tsconfig.json +0 -19
  205. package/leaderboard/README.md +0 -148
  206. package/leaderboard/app/api/benchmark-data/route.ts +0 -131
  207. package/leaderboard/app/api/benchmark-detail/route.ts +0 -172
  208. package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +0 -501
  209. package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +0 -375
  210. package/leaderboard/app/globals.css +0 -27
  211. package/leaderboard/app/layout.tsx +0 -21
  212. package/leaderboard/app/page.tsx +0 -170
  213. package/leaderboard/components/LeaderboardTable.tsx +0 -168
  214. package/leaderboard/components/PerformanceChart.tsx +0 -109
  215. package/leaderboard/next-env.d.ts +0 -5
  216. package/leaderboard/next.config.js +0 -4
  217. package/leaderboard/package-lock.json +0 -6363
  218. package/leaderboard/package.json +0 -28
  219. package/leaderboard/postcss.config.js +0 -6
  220. package/leaderboard/tailwind.config.js +0 -17
  221. package/leaderboard/tsconfig.json +0 -28
  222. package/leaderboard/types/benchmark.ts +0 -67
  223. package/leaderboard/utils/dataProcessor.ts +0 -33
  224. package/src/agents/tools/asana/definitions.ts +0 -199
  225. package/src/agents/tools/asana/index.ts +0 -108
  226. package/src/agents/tools/ast/astAppendNode.ts +0 -90
  227. package/src/agents/tools/ast/astDeleteNode.ts +0 -88
  228. package/src/agents/tools/ast/astEditNode.ts +0 -95
  229. package/src/agents/tools/ast/astGetPathForLine.ts +0 -73
  230. package/src/agents/tools/ast/astListPaths.ts +0 -66
  231. package/src/agents/tools/ast/index.ts +0 -7
  232. package/src/agents/tools/github/definitions.ts +0 -89
  233. package/src/agents/tools/github/index.ts +0 -67
  234. package/src/chat-old.ts +0 -446
  235. package/src/plugins/asana.ts +0 -146
  236. package/src/plugins/downloader/plugin.ts +0 -103
  237. package/src/plugins/downloader/types.ts +0 -92
  238. package/src/plugins/figma.ts +0 -158
  239. package/src/plugins/github.ts +0 -219
  240. package/src/plugins/jira.ts +0 -115
  241. package/src/plugins/linear.ts +0 -230
  242. package/src/plugins/notion.ts +0 -179
  243. package/src/plugins/tree-sitter/editor.ts +0 -369
  244. package/src/plugins/tree-sitter/lang-packs/index.ts +0 -23
  245. package/src/plugins/tree-sitter/lang-packs/java.ts +0 -59
  246. package/src/plugins/tree-sitter/lang-packs/javascript.ts +0 -57
  247. package/src/plugins/tree-sitter/lang-packs/python.ts +0 -45
  248. package/src/plugins/tree-sitter/lang-packs/types.ts +0 -79
  249. package/src/plugins/tree-sitter/lang-packs/typescript.ts +0 -49
  250. package/src/plugins/tree-sitter/parser.ts +0 -470
  251. package/src/plugins/tree-sitter/simple-paths.ts +0 -467
  252. package/src/services/GitHub.ts +0 -59
  253. package/tests/tree-sitter/editor.test.ts +0 -113
  254. package/tests/tree-sitter/invalid.test.ts +0 -299
  255. package/tests/tree-sitter/paths/common-edits.test.ts +0 -564
  256. package/tests/tree-sitter/paths/debug-exact-position.test.ts +0 -44
  257. package/tests/tree-sitter/paths/debug-line-indexing.test.ts +0 -49
  258. package/tests/tree-sitter/paths/debug-paths.test.ts +0 -90
  259. package/tests/tree-sitter/paths/paths.test.ts +0 -170
  260. package/tests/tree-sitter/paths/simple-paths.test.ts +0 -367
  261. package/tests/tree-sitter/sample-after.ts +0 -48
  262. package/tests/tree-sitter/sample-before.ts +0 -25
  263. package/tests/tree-sitter/test-files/completely-broken.ts +0 -7
  264. package/tests/tree-sitter/test-files/duplicate-braces.ts +0 -39
  265. package/tests/tree-sitter/test-files/invalid-nesting.ts +0 -39
  266. package/tests/tree-sitter/test-files/malformed-signature.ts +0 -39
  267. package/tests/tree-sitter/test-files/mismatched-parens.ts +0 -39
  268. package/tests/tree-sitter/test-files/missing-semicolon.ts +0 -39
  269. package/tests/tree-sitter/test-files/partially-broken.ts +0 -20
  270. package/tests/tree-sitter/test-files/specific-errors.ts +0 -14
  271. package/tests/tree-sitter/test-files/unclosed-string.ts +0 -39
  272. package/tests/tree-sitter/tree-sitter.test.ts +0 -251
@@ -1,95 +0,0 @@
1
- import * as fs from "fs";
2
- import { fileExists } from "../../../utils";
3
- import { services, ToolsService } from "../../../services";
4
- import { LanguageAgnosticParser } from "../../../plugins/tree-sitter/parser";
5
- import { TreeEditor } from "../../../plugins/tree-sitter/editor";
6
-
7
- /**
8
- * Update a node at a specific path in a file using tree-sitter AST parsing
9
- */
10
- export async function astEditNode(
11
- filePath: string,
12
- path: string,
13
- newContent: string
14
- ): Promise<string> {
15
- // Get context from bound ToolsService
16
- const toolService = (
17
- this instanceof ToolsService ? this : services().Tools
18
- ) as ToolsService;
19
-
20
- const context = toolService.getContext();
21
-
22
- const exists = await fileExists(filePath);
23
- if (!exists) {
24
- throw new Error(`File not found: ${filePath}`);
25
- }
26
-
27
- // Read original content for event emission
28
- let originalContent = "";
29
- try {
30
- originalContent = fs.readFileSync(filePath, "utf8");
31
- } catch (error) {
32
- throw new Error(`Failed to read file ${filePath}: ${error.message}`);
33
- }
34
-
35
- // Emit pre-edit blocking event
36
- if (context.Events) {
37
- await context.Events.emitBlocking("file:pre-edit", {
38
- filePath,
39
- operation: "ast-edit-node",
40
- content: newContent,
41
- originalContent,
42
- astPath: path,
43
- });
44
- }
45
-
46
- try {
47
- if (!LanguageAgnosticParser.supportsFile(filePath)) {
48
- throw new Error(`Unsupported file type for AST parsing: ${filePath}`);
49
- }
50
-
51
- const parser = LanguageAgnosticParser.createParserForFile(filePath);
52
- const editor = new TreeEditor(parser, originalContent);
53
- const updatedEditor = editor.updateNodeByPath(path, newContent);
54
- const updatedContent = updatedEditor.getCurrentText();
55
-
56
- // Write the updated content back to the file
57
- fs.writeFileSync(filePath, updatedContent, "utf8");
58
-
59
- // Emit post-edit blocking event
60
- let eventResults: any[] = [];
61
- if (context.Events) {
62
- eventResults = await context.Events.emitBlocking("file:post-edit", {
63
- filePath,
64
- operation: "ast-edit-node",
65
- content: newContent,
66
- originalContent,
67
- updatedContent,
68
- astPath: path,
69
- success: true,
70
- });
71
- }
72
-
73
- const result = {
74
- file: filePath,
75
- path,
76
- action: "update",
77
- success: true,
78
- message: `Successfully updated node at path: ${path}`,
79
- };
80
-
81
- // Format event results
82
- let eventResultsText = "";
83
- if (eventResults && eventResults.length > 0) {
84
- eventResultsText =
85
- "\n\nAdditional Information:\n" +
86
- JSON.stringify(eventResults, null, 2);
87
- }
88
-
89
- return JSON.stringify(result, null, 2) + eventResultsText;
90
- } catch (error: any) {
91
- // Do NOT emit post-edit event on error
92
-
93
- throw new Error(`Failed to edit node in ${filePath}: ${error.message}`);
94
- }
95
- }
@@ -1,73 +0,0 @@
1
- import * as fs from "fs";
2
- import { fileExists } from "../../../utils";
3
- import { services, ToolsService } from "../../../services";
4
- import { LanguageAgnosticParser } from "../../../plugins/tree-sitter/parser";
5
- import { TreeEditor } from "../../../plugins/tree-sitter/editor";
6
-
7
- /**
8
- * Get the AST path for a specific line of text in a file using tree-sitter parsing
9
- */
10
- export async function astGetPathForLine(
11
- filePath: string,
12
- searchText: string
13
- ): Promise<string> {
14
- // Get context from bound ToolsService
15
- const toolService = (
16
- this instanceof ToolsService ? this : services().Tools
17
- ) as ToolsService;
18
-
19
- const context = toolService.getContext();
20
-
21
- // Emit pre-action event
22
- if (context.Events) {
23
- await context.Events.emitBlocking("ast:pre-get-path-for-line", {
24
- filePath,
25
- searchText,
26
- });
27
- }
28
-
29
- const exists = await fileExists(filePath);
30
- if (!exists) {
31
- throw new Error(`File not found: ${filePath}`);
32
- }
33
-
34
- try {
35
- const content = fs.readFileSync(filePath, "utf8");
36
-
37
- if (!LanguageAgnosticParser.supportsFile(filePath)) {
38
- throw new Error(`Unsupported file type for AST parsing: ${filePath}`);
39
- }
40
-
41
- const parser = LanguageAgnosticParser.createParserForFile(filePath);
42
- const tree = parser.parseString(content);
43
- const pathLocations = parser.findPathsForLine(tree, searchText);
44
-
45
- // Emit post-action event
46
- if (context.Events) {
47
- await context.Events.emitNonBlocking("ast:post-get-path-for-line", {
48
- filePath,
49
- searchText,
50
- pathCount: pathLocations.length,
51
- });
52
- }
53
-
54
- const result = {
55
- file: filePath,
56
- searchText,
57
- language: parser.getLanguage(),
58
- totalMatches: pathLocations.length,
59
- matches: pathLocations.map((loc) => ({
60
- path: loc.path,
61
- line: loc.row + 1, // Convert from 0-based to 1-based line numbering
62
- column: loc.column + 1, // Convert from 0-based to 1-based column numbering
63
- text: loc.text,
64
- })),
65
- };
66
-
67
- return JSON.stringify(result, null, 2);
68
- } catch (error: any) {
69
- throw new Error(
70
- `Failed to get path for line in ${filePath}: ${error.message}`
71
- );
72
- }
73
- }
@@ -1,66 +0,0 @@
1
- import * as fs from "fs";
2
- import { fileExists } from "../../../utils";
3
- import { services, ToolsService } from "../../../services";
4
- import { LanguageAgnosticParser } from "../../../plugins/tree-sitter/parser";
5
- import { TreeEditor } from "../../../plugins/tree-sitter/editor";
6
-
7
- /**
8
- * List all available simple paths in a file using tree-sitter AST parsing
9
- */
10
- export async function astListPaths(filePath: string): Promise<string> {
11
- // Get context from bound ToolsService
12
- const toolService = (
13
- this instanceof ToolsService ? this : services().Tools
14
- ) as ToolsService;
15
-
16
- const context = toolService.getContext();
17
-
18
- if (context.Events) {
19
- await context.Events.emitBlocking("file:pre-read", {
20
- filePath,
21
- });
22
- await context.Events.emitNonBlocking("ast:pre-list-paths", {
23
- filePath,
24
- });
25
- }
26
-
27
- const exists = await fileExists(filePath);
28
- if (!exists) {
29
- throw new Error(`File not found: ${filePath}`);
30
- }
31
-
32
- try {
33
- const content = fs.readFileSync(filePath, "utf8");
34
-
35
- if (!LanguageAgnosticParser.supportsFile(filePath)) {
36
- throw new Error(`Unsupported file type for AST parsing: ${filePath}`);
37
- }
38
-
39
- const parser = LanguageAgnosticParser.createParserForFile(filePath);
40
- const editor = new TreeEditor(parser, content);
41
- const paths = editor.getAllSimplePaths();
42
-
43
- // Emit post-action event
44
- if (context.Events) {
45
- await context.Events.emitNonBlocking("file:post-read", {
46
- filePath,
47
- content,
48
- });
49
- await context.Events.emitNonBlocking("ast:post-list-paths", {
50
- filePath,
51
- paths,
52
- });
53
- }
54
-
55
- const result = {
56
- file: filePath,
57
- language: parser.getLanguage(),
58
- totalPaths: paths.length,
59
- paths: paths.sort(),
60
- };
61
-
62
- return JSON.stringify(result, null, 2);
63
- } catch (error: any) {
64
- throw new Error(`Failed to parse file ${filePath}: ${error.message}`);
65
- }
66
- }
@@ -1,7 +0,0 @@
1
- // AST Tools - Tree-sitter based tools for parsing and modifying code structure
2
-
3
- export { astEditNode } from "./astEditNode";
4
- export { astAppendNode } from "./astAppendNode";
5
- export { astDeleteNode } from "./astDeleteNode";
6
- export { astListPaths } from "./astListPaths";
7
- export { astGetPathForLine } from "./astGetPathForLine";
@@ -1,89 +0,0 @@
1
- export const definitions = [
2
- {
3
- type: "function",
4
- function: {
5
- name: "getPullRequest",
6
- description:
7
- "Fetches a pull request from GitHub using the provided URL. Requires a valid GITHUB_TOKEN.",
8
- parameters: {
9
- type: "object",
10
- positional: true,
11
- properties: {
12
- url: {
13
- type: "string",
14
- description: "The URL of the pull request to fetch.",
15
- },
16
- },
17
- required: ["url"],
18
- },
19
- },
20
- },
21
- {
22
- type: "function",
23
- function: {
24
- name: "getPullRequestBuildStatuses",
25
- description:
26
- "Fetches the build statuses for a pull request using the provided URL. Requires a valid GITHUB_TOKEN.",
27
- parameters: {
28
- type: "object",
29
- positional: true,
30
- properties: {
31
- url: {
32
- type: "string",
33
- description:
34
- "The URL of the pull request to fetch build statuses for.",
35
- },
36
- },
37
- required: ["url"],
38
- },
39
- },
40
- },
41
- {
42
- type: "function",
43
- function: {
44
- name: "getRunLogs",
45
- description:
46
- "Retrieves the run logs for a specified GitHub Actions run ID in the specified repository.",
47
- parameters: {
48
- type: "object",
49
- positional: true,
50
- properties: {
51
- runId: {
52
- type: "number",
53
- description:
54
- "The ID of the GitHub Actions run to retrieve logs for.",
55
- },
56
- owner: {
57
- type: "string",
58
- description: "The owner of the repository containing the run.",
59
- },
60
- repo: {
61
- type: "string",
62
- description: "The name of the repository containing the run.",
63
- },
64
- },
65
- required: ["runId", "owner", "repo"],
66
- },
67
- },
68
- },
69
- {
70
- type: "function",
71
- function: {
72
- name: "getPullRequestBuildFailureLogs",
73
- description:
74
- "Fetches the build failure logs for a pull request using the provided URL. Specifically focuses on failures.",
75
- parameters: {
76
- type: "object",
77
- positional: true,
78
- properties: {
79
- url: {
80
- type: "string",
81
- description:
82
- "The URL of the pull request to fetch failure logs for.",
83
- },
84
- },
85
- required: ["url"],
86
- },
87
- },
88
- },
89
- ];
@@ -1,67 +0,0 @@
1
- import { Octokit } from "@octokit/rest";
2
- import * as fs from "fs";
3
- import { execCommand } from "../execCommand";
4
-
5
- const octokit = new Octokit({
6
- auth: process.env.GITHUB_TOKEN,
7
- });
8
-
9
- export async function getPullRequest(url: string) {
10
- const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
11
- const pullRequest = await octokit.rest.pulls.get({
12
- owner,
13
- repo,
14
- pull_number: parseInt(pullNumber, 10),
15
- });
16
-
17
- return pullRequest;
18
- }
19
-
20
- export async function getPullRequestBuildStatuses(url: string) {
21
- const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
22
-
23
- const pullRequest = await octokit.rest.pulls.get({
24
- owner,
25
- repo,
26
- pull_number: parseInt(pullNumber, 10),
27
- });
28
-
29
- const { data: statuses } = await octokit.rest.checks.listForRef({
30
- owner,
31
- repo,
32
- ref: pullRequest.data.head.sha,
33
- });
34
-
35
- return statuses;
36
- }
37
-
38
- export async function getRunLogs(runId: number, owner: string, repo: string) {
39
- const logs = await execCommand(
40
- `gh run view ${runId} -R ${owner}/${repo} --log`
41
- );
42
- return logs;
43
- }
44
-
45
- export async function getPullRequestBuildFailureLogs(url: string) {
46
- const [owner, repo, _, pullNumber] = url.split("/").slice(-4);
47
- const statuses = await getPullRequestBuildStatuses(url);
48
- const failures = statuses.check_runs.filter(
49
- (status) => status.conclusion === "failure"
50
- );
51
-
52
- if (failures.length === 0) {
53
- return "No failures found";
54
- }
55
-
56
- const allLogs = [];
57
- for (const fail of failures) {
58
- const [runId, __, jobId] = fail.details_url.split("/").slice(-3);
59
- const logs = await execCommand(
60
- `gh run view ${runId} -R ${owner}/${repo} --log | grep -E 'FAIL|ERROR' -A 25 -B 25`
61
- );
62
- return logs;
63
- allLogs.push(logs);
64
- }
65
-
66
- return allLogs;
67
- }