@tyvm/knowhow 0.0.90 → 0.0.91
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.
- package/.depcheckrc +31 -0
- package/bin/knowhow.js +1 -1
- package/package.json +4 -32
- package/src/agents/tools/executeScript/index.ts +5 -0
- package/src/agents/tools/googleSearch.ts +2 -2
- package/src/agents/tools/index.ts +0 -3
- package/src/agents/tools/list.ts +0 -147
- package/src/agents/tools/loadWebpage.ts +3 -113
- package/src/auth/browserLogin.ts +10 -13
- package/src/cli.ts +63 -3
- package/src/clients/gemini.ts +96 -25
- package/src/clients/http.ts +7 -11
- package/src/clients/pricing/google.ts +122 -26
- package/src/conversion.ts +24 -54
- package/src/index.ts +8 -1
- package/src/login.ts +5 -6
- package/src/plugins/language.ts +0 -4
- package/src/plugins/plugins.ts +0 -14
- package/src/plugins/url.ts +31 -12
- package/src/services/GitHub.ts +2 -2
- package/src/services/KnowhowClient.ts +34 -34
- package/src/{plugins/downloader/downloader.ts → services/MediaProcessorService.ts} +109 -267
- package/src/services/S3.ts +16 -16
- package/src/services/index.ts +4 -4
- package/src/services/modules/index.ts +10 -2
- package/src/services/modules/types.ts +5 -2
- package/src/services/script-execution/ScriptExecutor.ts +29 -10
- package/src/services/script-execution/ScriptPolicy.ts +6 -2
- package/src/types.ts +1 -0
- package/src/utils/http.ts +127 -0
- package/src/workers/auth/PasskeySetup.ts +7 -11
- package/tests/clients/AIClient.test.ts +24 -21
- package/tests/manual/file-edits/figma.test.ts +3 -70
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +2 -0
- package/tests/plugins/language/languagePlugin.test.ts +2 -0
- package/tests/processors/ToolResponseCache.test.ts +2 -2
- package/tests/test.spec.ts +0 -14
- package/tests/unit/modules/moduleLoading.test.ts +7 -4
- package/tests/unit/plugins/pluginLoading.test.ts +6 -6
- package/ts_build/package.json +4 -32
- package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astAppendNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.js +2 -88
- package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js +2 -72
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.js +2 -72
- package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +3 -2
- package/ts_build/src/agents/tools/executeScript/index.js +4 -1
- package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
- package/ts_build/src/agents/tools/googleSearch.js +2 -2
- package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
- package/ts_build/src/agents/tools/index.d.ts +0 -3
- package/ts_build/src/agents/tools/index.js +0 -3
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +0 -138
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/loadWebpage.js +1 -89
- package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
- package/ts_build/src/agents/tools/textSearch.d.ts +1 -1
- package/ts_build/src/auth/browserLogin.js +7 -7
- package/ts_build/src/auth/browserLogin.js.map +1 -1
- package/ts_build/src/cli.d.ts +1 -1
- package/ts_build/src/cli.js +47 -1
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +1 -73
- package/ts_build/src/clients/gemini.js +57 -19
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.js +5 -9
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/pricing/google.d.ts +17 -73
- package/ts_build/src/clients/pricing/google.js +47 -10
- package/ts_build/src/clients/pricing/google.js.map +1 -1
- package/ts_build/src/conversion.d.ts +1 -4
- package/ts_build/src/conversion.js +12 -27
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/index.d.ts +4 -0
- package/ts_build/src/index.js +7 -1
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/login.js +5 -4
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.js +3 -3
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/language.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +0 -14
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/editor.d.ts +3 -32
- package/ts_build/src/plugins/tree-sitter/editor.js +6 -208
- package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/parser.d.ts +19 -54
- package/ts_build/src/plugins/tree-sitter/parser.js +19 -293
- package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +2 -15
- package/ts_build/src/plugins/tree-sitter/simple-paths.js +2 -324
- package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -1
- package/ts_build/src/plugins/url.js +27 -8
- package/ts_build/src/plugins/url.js.map +1 -1
- package/ts_build/src/services/GitHub.js +2 -2
- package/ts_build/src/services/GitHub.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.d.ts +29 -29
- package/ts_build/src/services/KnowhowClient.js +33 -33
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/MediaProcessorService.d.ts +22 -0
- package/ts_build/src/services/MediaProcessorService.js +215 -0
- package/ts_build/src/services/MediaProcessorService.js.map +1 -0
- package/ts_build/src/services/S3.js +12 -18
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/index.d.ts +3 -2
- package/ts_build/src/services/index.js +3 -3
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/modules/index.js +10 -2
- package/ts_build/src/services/modules/index.js.map +1 -1
- package/ts_build/src/services/modules/types.d.ts +5 -2
- package/ts_build/src/services/script-execution/ScriptExecutor.js +22 -7
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.js +4 -2
- package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
- package/ts_build/src/types.d.ts +1 -0
- package/ts_build/src/types.js +1 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/http.d.ts +27 -0
- package/ts_build/src/utils/http.js +98 -0
- package/ts_build/src/utils/http.js.map +1 -0
- package/ts_build/src/workers/auth/PasskeySetup.js +6 -7
- package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
- package/ts_build/tests/clients/AIClient.test.js +11 -14
- package/ts_build/tests/clients/AIClient.test.js.map +1 -1
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/figma.test.js +1 -46
- package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
- package/ts_build/tests/processors/ToolResponseCache.test.js +2 -2
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
- package/ts_build/tests/test.spec.js +0 -14
- package/ts_build/tests/test.spec.js.map +1 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +0 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.js +2 -183
- package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +6 -4
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +4 -4
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
- package/benchmarks/.dockerignore +0 -7
- package/benchmarks/README.md +0 -166
- package/benchmarks/docker/Dockerfile +0 -68
- package/benchmarks/example-config.yml +0 -27
- package/benchmarks/jest.config.js +0 -13
- package/benchmarks/package-lock.json +0 -4297
- package/benchmarks/package.json +0 -39
- package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +0 -2909
- package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -1671
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +0 -2814
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -2014
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3121
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +0 -98
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +0 -3256
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +0 -4298
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3031
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -2990
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3007
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +0 -3036
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +0 -3280
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -1920
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +0 -3281
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +0 -2896
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3011
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +0 -3003
- package/benchmarks/scripts/build-and-run.sh +0 -47
- package/benchmarks/scripts/clone-exercism.sh +0 -92
- package/benchmarks/scripts/validate.sh +0 -48
- package/benchmarks/src/__tests__/runner.test.ts +0 -27
- package/benchmarks/src/cli.ts +0 -90
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +0 -64
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +0 -183
- package/benchmarks/src/evaluators/index.ts +0 -3
- package/benchmarks/src/evaluators/types.ts +0 -22
- package/benchmarks/src/index.ts +0 -3
- package/benchmarks/src/providers.ts +0 -13
- package/benchmarks/src/runner.ts +0 -824
- package/benchmarks/src/types.ts +0 -63
- package/benchmarks/tsconfig.json +0 -19
- package/leaderboard/README.md +0 -148
- package/leaderboard/app/api/benchmark-data/route.ts +0 -131
- package/leaderboard/app/api/benchmark-detail/route.ts +0 -172
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +0 -501
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +0 -375
- package/leaderboard/app/globals.css +0 -27
- package/leaderboard/app/layout.tsx +0 -21
- package/leaderboard/app/page.tsx +0 -170
- package/leaderboard/components/LeaderboardTable.tsx +0 -168
- package/leaderboard/components/PerformanceChart.tsx +0 -109
- package/leaderboard/next-env.d.ts +0 -5
- package/leaderboard/next.config.js +0 -4
- package/leaderboard/package-lock.json +0 -6363
- package/leaderboard/package.json +0 -28
- package/leaderboard/postcss.config.js +0 -6
- package/leaderboard/tailwind.config.js +0 -17
- package/leaderboard/tsconfig.json +0 -28
- package/leaderboard/types/benchmark.ts +0 -67
- package/leaderboard/utils/dataProcessor.ts +0 -33
- package/src/agents/tools/asana/definitions.ts +0 -199
- package/src/agents/tools/asana/index.ts +0 -108
- package/src/agents/tools/ast/astAppendNode.ts +0 -90
- package/src/agents/tools/ast/astDeleteNode.ts +0 -88
- package/src/agents/tools/ast/astEditNode.ts +0 -95
- package/src/agents/tools/ast/astGetPathForLine.ts +0 -73
- package/src/agents/tools/ast/astListPaths.ts +0 -66
- package/src/agents/tools/ast/index.ts +0 -7
- package/src/agents/tools/github/definitions.ts +0 -89
- package/src/agents/tools/github/index.ts +0 -67
- package/src/chat-old.ts +0 -446
- package/src/plugins/asana.ts +0 -146
- package/src/plugins/downloader/plugin.ts +0 -103
- package/src/plugins/downloader/types.ts +0 -92
- package/src/plugins/figma.ts +0 -158
- package/src/plugins/github.ts +0 -219
- package/src/plugins/jira.ts +0 -115
- package/src/plugins/linear.ts +0 -230
- package/src/plugins/notion.ts +0 -179
- package/src/plugins/tree-sitter/editor.ts +0 -369
- package/src/plugins/tree-sitter/lang-packs/index.ts +0 -23
- package/src/plugins/tree-sitter/lang-packs/java.ts +0 -59
- package/src/plugins/tree-sitter/lang-packs/javascript.ts +0 -57
- package/src/plugins/tree-sitter/lang-packs/python.ts +0 -45
- package/src/plugins/tree-sitter/lang-packs/types.ts +0 -79
- package/src/plugins/tree-sitter/lang-packs/typescript.ts +0 -49
- package/src/plugins/tree-sitter/parser.ts +0 -470
- package/src/plugins/tree-sitter/simple-paths.ts +0 -467
- package/tests/tree-sitter/editor.test.ts +0 -113
- package/tests/tree-sitter/invalid.test.ts +0 -299
- package/tests/tree-sitter/paths/common-edits.test.ts +0 -564
- package/tests/tree-sitter/paths/debug-exact-position.test.ts +0 -44
- package/tests/tree-sitter/paths/debug-line-indexing.test.ts +0 -49
- package/tests/tree-sitter/paths/debug-paths.test.ts +0 -90
- package/tests/tree-sitter/paths/paths.test.ts +0 -170
- package/tests/tree-sitter/paths/simple-paths.test.ts +0 -367
- package/tests/tree-sitter/sample-after.ts +0 -48
- package/tests/tree-sitter/sample-before.ts +0 -25
- package/tests/tree-sitter/test-files/completely-broken.ts +0 -7
- package/tests/tree-sitter/test-files/duplicate-braces.ts +0 -39
- package/tests/tree-sitter/test-files/invalid-nesting.ts +0 -39
- package/tests/tree-sitter/test-files/malformed-signature.ts +0 -39
- package/tests/tree-sitter/test-files/mismatched-parens.ts +0 -39
- package/tests/tree-sitter/test-files/missing-semicolon.ts +0 -39
- package/tests/tree-sitter/test-files/partially-broken.ts +0 -20
- package/tests/tree-sitter/test-files/specific-errors.ts +0 -14
- package/tests/tree-sitter/test-files/unclosed-string.ts +0 -39
- 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
|
-
}
|