@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
package/.depcheckrc
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ignores": [
|
|
3
|
+
"typescript",
|
|
4
|
+
"ts-jest",
|
|
5
|
+
"jest",
|
|
6
|
+
"ts-node",
|
|
7
|
+
"prettier",
|
|
8
|
+
"tslint",
|
|
9
|
+
"tslint-config-prettier",
|
|
10
|
+
"@types/jest",
|
|
11
|
+
"@types/node",
|
|
12
|
+
"@types/mocha",
|
|
13
|
+
"@types/diff",
|
|
14
|
+
"@types/express",
|
|
15
|
+
"@types/asana",
|
|
16
|
+
"@types/jira-client",
|
|
17
|
+
"@types/pdf-parse",
|
|
18
|
+
"@types/ws",
|
|
19
|
+
"@babel/preset-typescript"
|
|
20
|
+
],
|
|
21
|
+
"skip-missing": true,
|
|
22
|
+
"ignore-patterns": [
|
|
23
|
+
"src/dataset/**",
|
|
24
|
+
"ts_build/**",
|
|
25
|
+
"node_modules/**",
|
|
26
|
+
"tests/**"
|
|
27
|
+
],
|
|
28
|
+
"specials": [
|
|
29
|
+
"depcheck-special-bin"
|
|
30
|
+
]
|
|
31
|
+
}
|
package/bin/knowhow.js
CHANGED
|
@@ -10,7 +10,7 @@ if (!process.execArgv.includes("--no-node-snapshot")) {
|
|
|
10
10
|
|
|
11
11
|
const result = spawnSync(
|
|
12
12
|
process.execPath,
|
|
13
|
-
["--no-node-snapshot", cliEntrypoint, ...process.argv.slice(2)],
|
|
13
|
+
["--no-node-snapshot", "--enable-source-maps", cliEntrypoint, ...process.argv.slice(2)],
|
|
14
14
|
{
|
|
15
15
|
stdio: "inherit",
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tyvm/knowhow",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.91",
|
|
4
4
|
"description": "ai cli with plugins and agents",
|
|
5
5
|
"main": "ts_build/src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
"dataset:diffs:generate": "ts-node src/dataset/diffs/generate.ts",
|
|
15
15
|
"dataset:diffs:jsonl": "ts-node src/dataset/diffs/jsonl.ts",
|
|
16
16
|
"prepublishOnly": "npm run compile",
|
|
17
|
-
"lint": "tslint ./src/**/*.ts"
|
|
17
|
+
"lint": "tslint ./src/**/*.ts",
|
|
18
|
+
"lint:deps": "depcheck --config=.depcheckrc",
|
|
19
|
+
"lint:all": "npm run lint && npm run lint:deps"
|
|
18
20
|
},
|
|
19
21
|
"keywords": [],
|
|
20
22
|
"author": "Micah Riggan",
|
|
21
23
|
"license": "MIT",
|
|
22
24
|
"devDependencies": {
|
|
23
25
|
"@babel/preset-typescript": "^7.23.3",
|
|
24
|
-
"@types/asana": "^0.18.16",
|
|
25
26
|
"@types/diff": "^5.2.1",
|
|
26
27
|
"@types/express": "^4.17.13",
|
|
27
28
|
"@types/jest": "^29.5.13",
|
|
28
|
-
"@types/jira-client": "^7.1.9",
|
|
29
29
|
"@types/mocha": "^10.0.8",
|
|
30
30
|
"@types/node": "^20.6.3",
|
|
31
31
|
"@types/pdf-parse": "^1.1.4",
|
|
@@ -42,52 +42,24 @@
|
|
|
42
42
|
"@aws-sdk/client-s3": "^3.588.0",
|
|
43
43
|
"@google/genai": "^0.14.1",
|
|
44
44
|
"@inquirer/editor": "^4.2.18",
|
|
45
|
-
"@linear/sdk": "^12.0.0",
|
|
46
45
|
"@modelcontextprotocol/sdk": "^1.13.3",
|
|
47
|
-
"@notionhq/client": "^2.2.14",
|
|
48
|
-
"@octokit/rest": "^20.0.2",
|
|
49
46
|
"@simplewebauthn/server": "^13.3.0",
|
|
50
|
-
"@types/react": "^19.1.8",
|
|
51
47
|
"@tyvm/knowhow-tunnel": "0.0.4",
|
|
52
|
-
"asana": "^3.0.16",
|
|
53
|
-
"axios": "^1.5.0",
|
|
54
|
-
"cheerio": "^1.0.0",
|
|
55
48
|
"commander": "^14.0.0",
|
|
56
49
|
"diff": "^5.2.0",
|
|
57
|
-
"esbuild": "^0.25.8",
|
|
58
50
|
"express": "^4.19.2",
|
|
59
|
-
"figma-js": "^1.16.1-0",
|
|
60
51
|
"gitignore-to-glob": "^0.3.0",
|
|
61
52
|
"glob": "11.0.3",
|
|
62
|
-
"ink": "^6.0.1",
|
|
63
53
|
"isolated-vm": "^5.0.4",
|
|
64
|
-
"jira-client": "^8.2.2",
|
|
65
54
|
"jiti": "^2.6.1",
|
|
66
55
|
"marked": "^10.0.0",
|
|
67
56
|
"marked-terminal": "^6.2.0",
|
|
68
57
|
"minimatch": "^10.1.2",
|
|
69
|
-
"morgan": "^1.10.0",
|
|
70
|
-
"node-fetch": "^3.2.3",
|
|
71
58
|
"node-jq": "^6.0.1",
|
|
72
|
-
"node-pty": "^1.0.0",
|
|
73
|
-
"node-record-lpcm16": "^1.0.1",
|
|
74
59
|
"openai": "4.89.1",
|
|
75
|
-
"ora": "^5.4.1",
|
|
76
|
-
"parse-diff": "^0.11.1",
|
|
77
60
|
"pdf-parse": "^1.1.1",
|
|
78
|
-
"playwright": "^1.52.0",
|
|
79
|
-
"playwright-extra": "^4.3.6",
|
|
80
|
-
"progress-estimator": "^0.3.1",
|
|
81
|
-
"puppeteer": "^24.4.0",
|
|
82
|
-
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
|
83
|
-
"react": "^19.1.0",
|
|
84
|
-
"source-map-support": "^0.5.21",
|
|
85
|
-
"tree-sitter": "^0.21.1",
|
|
86
|
-
"tree-sitter-javascript": "^0.23.1",
|
|
87
|
-
"tree-sitter-typescript": "^0.23.1",
|
|
88
61
|
"typescript": "^4.6.3",
|
|
89
62
|
"ws": "^8.18.1",
|
|
90
|
-
"youtube-dl-exec": "^2.5.5",
|
|
91
63
|
"zod": "^3.24.2"
|
|
92
64
|
},
|
|
93
65
|
"directories": {
|
|
@@ -12,12 +12,14 @@ export async function executeScript({
|
|
|
12
12
|
maxTokens,
|
|
13
13
|
maxExecutionTimeMs,
|
|
14
14
|
maxCostUsd,
|
|
15
|
+
allowNetworkAccess,
|
|
15
16
|
}: {
|
|
16
17
|
script: string;
|
|
17
18
|
maxToolCalls?: number;
|
|
18
19
|
maxTokens?: number;
|
|
19
20
|
maxExecutionTimeMs?: number;
|
|
20
21
|
maxCostUsd?: number;
|
|
22
|
+
allowNetworkAccess?: boolean;
|
|
21
23
|
}) {
|
|
22
24
|
try {
|
|
23
25
|
// Get context from bound ToolsService
|
|
@@ -44,6 +46,9 @@ export async function executeScript({
|
|
|
44
46
|
maxCostUsd: maxCostUsd || 1.0,
|
|
45
47
|
maxMemoryMb: 100,
|
|
46
48
|
},
|
|
49
|
+
policy: {
|
|
50
|
+
allowNetworkAccess: allowNetworkAccess ?? false,
|
|
51
|
+
},
|
|
47
52
|
});
|
|
48
53
|
|
|
49
54
|
// If there were policy violations, include them in the response
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import http from "../../utils/http";
|
|
2
2
|
import { Tool } from "../../clients/types";
|
|
3
3
|
|
|
4
4
|
interface GoogleSearchParams {
|
|
@@ -180,7 +180,7 @@ export async function googleSearch(params: GoogleSearchParams) {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
try {
|
|
183
|
-
const response = await
|
|
183
|
+
const response = await http.get<GoogleSearchResponse>(url.toString());
|
|
184
184
|
return transformGoogleSearchResponseForLLM(response.data);
|
|
185
185
|
} catch (error) {
|
|
186
186
|
console.error("Error performing Google search:", error);
|
|
@@ -14,8 +14,6 @@ export * from "./scanFile";
|
|
|
14
14
|
export * from "./textSearch";
|
|
15
15
|
export * from "./visionTool";
|
|
16
16
|
export * from "./writeFile";
|
|
17
|
-
export * from "./asana";
|
|
18
|
-
export * from "./github";
|
|
19
17
|
export * from "./fileSearch";
|
|
20
18
|
export * from "./language";
|
|
21
19
|
export * from "./askHuman";
|
|
@@ -24,7 +22,6 @@ export * from "./googleSearch";
|
|
|
24
22
|
export * from "./loadWebpage";
|
|
25
23
|
export * from "./stringReplace";
|
|
26
24
|
export * from "./executeScript";
|
|
27
|
-
export * from "./ast";
|
|
28
25
|
export * from "./startAgentTask";
|
|
29
26
|
export * from "./ycmd";
|
|
30
27
|
export * from "./mcp";
|
package/src/agents/tools/list.ts
CHANGED
|
@@ -2,8 +2,6 @@ import { Tool } from "../../clients/types";
|
|
|
2
2
|
import { ChatCompletionTool } from "openai/resources/chat";
|
|
3
3
|
|
|
4
4
|
import { services } from "../../services";
|
|
5
|
-
import * as github from "./github/definitions";
|
|
6
|
-
import * as asana from "./asana/definitions";
|
|
7
5
|
import * as ycmd from "./ycmd/definitions";
|
|
8
6
|
import * as language from "./language/definitions";
|
|
9
7
|
import * as mcp from "./mcp/definitions";
|
|
@@ -710,152 +708,7 @@ export const includedTools = [
|
|
|
710
708
|
executeScriptDefinition,
|
|
711
709
|
googleSearchDefinition,
|
|
712
710
|
startAgentTaskDefinition,
|
|
713
|
-
{
|
|
714
|
-
type: "function",
|
|
715
|
-
function: {
|
|
716
|
-
name: "astListPaths",
|
|
717
|
-
description:
|
|
718
|
-
"List all available simple paths in a file using tree-sitter AST parsing. Useful for understanding the structure of a file before making targeted edits.",
|
|
719
|
-
parameters: {
|
|
720
|
-
type: "object",
|
|
721
|
-
positional: true,
|
|
722
|
-
properties: {
|
|
723
|
-
filePath: {
|
|
724
|
-
type: "string",
|
|
725
|
-
description: "The path to the file to analyze",
|
|
726
|
-
},
|
|
727
|
-
},
|
|
728
|
-
required: ["filePath"],
|
|
729
|
-
},
|
|
730
|
-
returns: {
|
|
731
|
-
type: "string",
|
|
732
|
-
description:
|
|
733
|
-
"JSON object containing all available AST paths in the file",
|
|
734
|
-
},
|
|
735
|
-
},
|
|
736
|
-
},
|
|
737
|
-
{
|
|
738
|
-
type: "function",
|
|
739
|
-
function: {
|
|
740
|
-
name: "astEditNode",
|
|
741
|
-
description:
|
|
742
|
-
"Update a node at a specific AST path in a file using tree-sitter parsing. Use astListPaths first to find available paths.",
|
|
743
|
-
parameters: {
|
|
744
|
-
type: "object",
|
|
745
|
-
positional: true,
|
|
746
|
-
properties: {
|
|
747
|
-
filePath: {
|
|
748
|
-
type: "string",
|
|
749
|
-
description: "The path to the file to edit",
|
|
750
|
-
},
|
|
751
|
-
path: {
|
|
752
|
-
type: "string",
|
|
753
|
-
description:
|
|
754
|
-
"The AST path to the node to update (from astListPaths)",
|
|
755
|
-
},
|
|
756
|
-
newContent: {
|
|
757
|
-
type: "string",
|
|
758
|
-
description: "The new content to replace the node with",
|
|
759
|
-
},
|
|
760
|
-
},
|
|
761
|
-
required: ["filePath", "path", "newContent"],
|
|
762
|
-
},
|
|
763
|
-
returns: {
|
|
764
|
-
type: "string",
|
|
765
|
-
description: "JSON object with edit result and updated file content",
|
|
766
|
-
},
|
|
767
|
-
},
|
|
768
|
-
},
|
|
769
|
-
{
|
|
770
|
-
type: "function",
|
|
771
|
-
function: {
|
|
772
|
-
name: "astAppendNode",
|
|
773
|
-
description:
|
|
774
|
-
"Append a child node to a specific AST path in a file using tree-sitter parsing. Use astListPaths first to find available paths.",
|
|
775
|
-
parameters: {
|
|
776
|
-
type: "object",
|
|
777
|
-
positional: true,
|
|
778
|
-
properties: {
|
|
779
|
-
filePath: {
|
|
780
|
-
type: "string",
|
|
781
|
-
description: "The path to the file to edit",
|
|
782
|
-
},
|
|
783
|
-
parentPath: {
|
|
784
|
-
type: "string",
|
|
785
|
-
description: "The AST path to the parent node (from astListPaths)",
|
|
786
|
-
},
|
|
787
|
-
newContent: {
|
|
788
|
-
type: "string",
|
|
789
|
-
description: "The content of the child node to append",
|
|
790
|
-
},
|
|
791
|
-
},
|
|
792
|
-
required: ["filePath", "parentPath", "newContent"],
|
|
793
|
-
},
|
|
794
|
-
returns: {
|
|
795
|
-
type: "string",
|
|
796
|
-
description: "JSON object with append result and updated file content",
|
|
797
|
-
},
|
|
798
|
-
},
|
|
799
|
-
},
|
|
800
|
-
{
|
|
801
|
-
type: "function",
|
|
802
|
-
function: {
|
|
803
|
-
name: "astDeleteNode",
|
|
804
|
-
description:
|
|
805
|
-
"Delete a node at a specific AST path in a file using tree-sitter parsing. Use astListPaths first to find available paths.",
|
|
806
|
-
parameters: {
|
|
807
|
-
type: "object",
|
|
808
|
-
positional: true,
|
|
809
|
-
properties: {
|
|
810
|
-
filePath: {
|
|
811
|
-
type: "string",
|
|
812
|
-
description: "The path to the file to edit",
|
|
813
|
-
},
|
|
814
|
-
path: {
|
|
815
|
-
type: "string",
|
|
816
|
-
description:
|
|
817
|
-
"The AST path to the node to delete (from astListPaths)",
|
|
818
|
-
},
|
|
819
|
-
},
|
|
820
|
-
required: ["filePath", "path"],
|
|
821
|
-
},
|
|
822
|
-
returns: {
|
|
823
|
-
type: "string",
|
|
824
|
-
description: "JSON object with delete result and updated file content",
|
|
825
|
-
},
|
|
826
|
-
},
|
|
827
|
-
},
|
|
828
|
-
{
|
|
829
|
-
type: "function",
|
|
830
|
-
function: {
|
|
831
|
-
name: "astGetPathForLine",
|
|
832
|
-
description:
|
|
833
|
-
"Get the AST path for a specific line of text in a file using tree-sitter parsing. Useful for finding the structural location of specific code.",
|
|
834
|
-
parameters: {
|
|
835
|
-
type: "object",
|
|
836
|
-
positional: true,
|
|
837
|
-
properties: {
|
|
838
|
-
filePath: {
|
|
839
|
-
type: "string",
|
|
840
|
-
description: "The path to the file to analyze",
|
|
841
|
-
},
|
|
842
|
-
searchText: {
|
|
843
|
-
type: "string",
|
|
844
|
-
description: "The text to search for in the file",
|
|
845
|
-
},
|
|
846
|
-
},
|
|
847
|
-
required: ["filePath", "searchText"],
|
|
848
|
-
},
|
|
849
|
-
returns: {
|
|
850
|
-
type: "string",
|
|
851
|
-
description:
|
|
852
|
-
"JSON object containing AST paths and locations for the matching text",
|
|
853
|
-
},
|
|
854
|
-
},
|
|
855
|
-
},
|
|
856
|
-
...asana.definitions,
|
|
857
711
|
...ycmd.definitions,
|
|
858
|
-
...github.definitions,
|
|
859
712
|
...language.definitions,
|
|
860
713
|
...mcp.definitions,
|
|
861
714
|
] as Tool[];
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { chromium } from "playwright-extra";
|
|
2
|
-
import stealth from "puppeteer-extra-plugin-stealth";
|
|
3
|
-
|
|
4
1
|
export interface LoadWebpageOptions {
|
|
5
2
|
url: string;
|
|
6
3
|
mode?: "text" | "screenshot";
|
|
@@ -14,116 +11,9 @@ export async function loadWebpage(
|
|
|
14
11
|
waitForSelector?: string,
|
|
15
12
|
timeout: number = 30000
|
|
16
13
|
): Promise<string> {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
console.log(`Loading webpage: ${url} in ${mode} mode`);
|
|
22
|
-
|
|
23
|
-
chromium.use(stealth());
|
|
24
|
-
|
|
25
|
-
// Launch browser with stealth settings
|
|
26
|
-
browser = await chromium.launch({
|
|
27
|
-
headless: true,
|
|
28
|
-
args: [
|
|
29
|
-
"--disable-setuid-sandbox",
|
|
30
|
-
"--disable-dev-shm-usage",
|
|
31
|
-
"--disable-accelerated-2d-canvas",
|
|
32
|
-
"--no-first-run",
|
|
33
|
-
"--no-zygote",
|
|
34
|
-
"--disable-gpu",
|
|
35
|
-
"--disable-blink-features=AutomationControlled",
|
|
36
|
-
process.env.DISABLE_CHROME_SANDBOX === "true" ? "--no-sandbox" : "",
|
|
37
|
-
],
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const context = await browser.newContext({
|
|
41
|
-
userAgent:
|
|
42
|
-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
43
|
-
viewport: { width: 1366, height: 768 },
|
|
44
|
-
extraHTTPHeaders: {
|
|
45
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
page = await context.newPage();
|
|
50
|
-
|
|
51
|
-
// Capture console logs for text mode
|
|
52
|
-
const consoleLogs: string[] = [];
|
|
53
|
-
if (mode === "text") {
|
|
54
|
-
page.on("console", (msg) => {
|
|
55
|
-
consoleLogs.push(`[${msg.type()}] ${msg.text()}`);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Navigate to the URL
|
|
60
|
-
await page.goto(url, {
|
|
61
|
-
waitUntil: "networkidle",
|
|
62
|
-
timeout,
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Wait for specific selector if provided
|
|
66
|
-
if (waitForSelector) {
|
|
67
|
-
await page.waitForSelector(waitForSelector, { timeout });
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
let result: string;
|
|
71
|
-
|
|
72
|
-
if (mode === "screenshot") {
|
|
73
|
-
// Take screenshot and return base64 encoded image
|
|
74
|
-
const screenshot = await page.screenshot({
|
|
75
|
-
fullPage: true,
|
|
76
|
-
type: "png",
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const base64Screenshot = screenshot.toString("base64");
|
|
80
|
-
result = `data:image/png;base64,${base64Screenshot}`;
|
|
81
|
-
} else {
|
|
82
|
-
// Extract text content
|
|
83
|
-
const textContent = await page.evaluate(() => {
|
|
84
|
-
// Remove script and style elements
|
|
85
|
-
const scripts = document.querySelectorAll("script, style");
|
|
86
|
-
scripts.forEach((el) => el.remove());
|
|
87
|
-
|
|
88
|
-
// Get the text content
|
|
89
|
-
return document.body?.innerText || document.body?.textContent || "";
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// Get page title
|
|
93
|
-
const title = await page.title();
|
|
94
|
-
|
|
95
|
-
// Format the result
|
|
96
|
-
result = `# ${title}\n\n## Page Content:\n${textContent}`;
|
|
97
|
-
|
|
98
|
-
if (consoleLogs.length > 0) {
|
|
99
|
-
result += `\n\n## Console Logs:\n${consoleLogs.join("\n")}`;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return result;
|
|
104
|
-
} catch (error) {
|
|
105
|
-
console.error("Error loading webpage:", error);
|
|
106
|
-
return `Error loading webpage: ${
|
|
107
|
-
error instanceof Error ? error.message : String(error)
|
|
108
|
-
}`;
|
|
109
|
-
} finally {
|
|
110
|
-
// Always close the browser
|
|
111
|
-
if (page) {
|
|
112
|
-
try {
|
|
113
|
-
await page.close();
|
|
114
|
-
} catch (e) {
|
|
115
|
-
console.warn("Error closing page:", e);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (browser) {
|
|
120
|
-
try {
|
|
121
|
-
await browser.close();
|
|
122
|
-
} catch (e) {
|
|
123
|
-
console.warn("Error closing browser:", e);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
14
|
+
throw new Error(
|
|
15
|
+
"loadWebpage requires @tyvm/knowhow-module-load-webpage to be installed and configured in knowhow.json modules."
|
|
16
|
+
);
|
|
127
17
|
}
|
|
128
18
|
|
|
129
19
|
export default loadWebpage;
|
package/src/auth/browserLogin.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import http from "../utils/http";
|
|
2
2
|
import { exec } from "child_process";
|
|
3
3
|
import { promisify } from "util";
|
|
4
4
|
import * as os from "os";
|
|
@@ -81,7 +81,7 @@ export class BrowserLoginService {
|
|
|
81
81
|
);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
const statusResponse = await
|
|
84
|
+
const statusResponse = await http.get(
|
|
85
85
|
`${this.baseUrl}/api/cli-login/session/${sessionData.sessionId}/status`,
|
|
86
86
|
{ timeout: 10000 }
|
|
87
87
|
);
|
|
@@ -93,7 +93,7 @@ export class BrowserLoginService {
|
|
|
93
93
|
spinner.start("Authentication successful! Retrieving token");
|
|
94
94
|
|
|
95
95
|
// Step 4: Retrieve JWT token
|
|
96
|
-
const tokenResponse = await
|
|
96
|
+
const tokenResponse = await http.post(
|
|
97
97
|
`${this.baseUrl}/api/cli-login/session/${sessionData.sessionId}/token`
|
|
98
98
|
);
|
|
99
99
|
|
|
@@ -113,7 +113,7 @@ export class BrowserLoginService {
|
|
|
113
113
|
);
|
|
114
114
|
}
|
|
115
115
|
} catch (error) {
|
|
116
|
-
if (
|
|
116
|
+
if (http.isHttpError(error) && error.status !== 408) {
|
|
117
117
|
throw new BrowserLoginError(
|
|
118
118
|
`Network error: ${error.message}`,
|
|
119
119
|
"NETWORK_ERROR"
|
|
@@ -139,23 +139,20 @@ export class BrowserLoginService {
|
|
|
139
139
|
*/
|
|
140
140
|
private async createSession(): Promise<CreateSessionResponse> {
|
|
141
141
|
try {
|
|
142
|
-
const response = await
|
|
142
|
+
const response = await http.post<CreateSessionResponse>(
|
|
143
143
|
`${this.baseUrl}/api/cli-login/session`,
|
|
144
|
-
{}
|
|
145
|
-
{ timeout: 10000 }
|
|
144
|
+
{}
|
|
146
145
|
);
|
|
147
146
|
return response.data;
|
|
148
147
|
} catch (error) {
|
|
149
|
-
if (
|
|
148
|
+
if (http.isHttpError(error)) {
|
|
150
149
|
throw new BrowserLoginError(
|
|
151
|
-
`Failed to create login session: ${
|
|
152
|
-
error.response?.data?.message || error.message
|
|
153
|
-
}`,
|
|
150
|
+
`Failed to create login session: ${error.message}`,
|
|
154
151
|
"SESSION_CREATE_FAILED"
|
|
155
152
|
);
|
|
156
153
|
}
|
|
157
154
|
throw new BrowserLoginError(
|
|
158
|
-
`Unexpected error creating session: ${error.message}`
|
|
155
|
+
`Unexpected error creating session: ${(error as Error).message}`
|
|
159
156
|
);
|
|
160
157
|
}
|
|
161
158
|
}
|
|
@@ -226,7 +223,7 @@ export async function openBrowser(url: string): Promise<void> {
|
|
|
226
223
|
} catch (error) {
|
|
227
224
|
// If we can't open the browser automatically, that's not a fatal error
|
|
228
225
|
// The user can still manually navigate to the URL
|
|
229
|
-
console.warn(`Could not automatically open browser: ${error.message}`);
|
|
226
|
+
console.warn(`Could not automatically open browser: ${(error as Error).message}`);
|
|
230
227
|
}
|
|
231
228
|
}
|
|
232
229
|
|
package/src/cli.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node --no-node-snapshot
|
|
2
|
-
import "source-map-support/register";
|
|
3
2
|
import * as fs from "fs";
|
|
4
3
|
import * as fsPromises from "fs/promises";
|
|
5
4
|
import * as path from "path";
|
|
@@ -26,7 +25,6 @@ import {
|
|
|
26
25
|
} from "./workerRegistry";
|
|
27
26
|
import { agents } from "./agents";
|
|
28
27
|
import { startChat } from "./chat";
|
|
29
|
-
import { askAI } from "./chat-old";
|
|
30
28
|
import { getConfiguredEmbeddingMap, queryEmbedding } from "./embeddings";
|
|
31
29
|
import { getConfig } from "./config";
|
|
32
30
|
import { getEnabledPlugins } from "./types";
|
|
@@ -42,7 +40,7 @@ import { CliChatService } from "./chat/CliChatService";
|
|
|
42
40
|
|
|
43
41
|
async function setupServices() {
|
|
44
42
|
const { Agents, Mcp, Clients, Tools: OldTools } = services();
|
|
45
|
-
const Tools = new LazyToolsService();
|
|
43
|
+
const Tools = new LazyToolsService(); // eslint-disable-line no-shadow
|
|
46
44
|
|
|
47
45
|
// We need to wireup the LazyTools to be connected to the same singletons that are in services()
|
|
48
46
|
Tools.setContext({
|
|
@@ -80,6 +78,9 @@ async function setupServices() {
|
|
|
80
78
|
console.log("Connecting to clients...");
|
|
81
79
|
await Clients.registerConfiguredModels();
|
|
82
80
|
console.log("✓ Services are set up and ready to go!");
|
|
81
|
+
|
|
82
|
+
// Return both LazyToolsService (for agents) and OldTools (plain ToolsService with all tools for scripts)
|
|
83
|
+
return { Tools, Clients, PlainTools: OldTools };
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
// Utility function to read from stdin
|
|
@@ -488,6 +489,65 @@ async function main() {
|
|
|
488
489
|
}
|
|
489
490
|
});
|
|
490
491
|
|
|
492
|
+
program
|
|
493
|
+
.command("script")
|
|
494
|
+
.description("Run a local tool script file using the executeScript sandbox")
|
|
495
|
+
.option("--input-file <path>", "Path to a local .js/.ts script file to run")
|
|
496
|
+
.option(
|
|
497
|
+
"--allow-network",
|
|
498
|
+
"Allow fetch() calls in the script (disabled by default for security)"
|
|
499
|
+
)
|
|
500
|
+
.action(async (options) => {
|
|
501
|
+
try {
|
|
502
|
+
if (!options.inputFile) {
|
|
503
|
+
console.error(
|
|
504
|
+
"Error: Provide --input-file <path> to the script file to run"
|
|
505
|
+
);
|
|
506
|
+
process.exit(1);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// Run a local script file
|
|
510
|
+
const scriptPath = path.resolve(options.inputFile);
|
|
511
|
+
if (!fs.existsSync(scriptPath)) {
|
|
512
|
+
console.error(`Error: Script file not found: ${scriptPath}`);
|
|
513
|
+
process.exit(1);
|
|
514
|
+
}
|
|
515
|
+
const scriptContent = fs.readFileSync(scriptPath, "utf-8");
|
|
516
|
+
|
|
517
|
+
const { Tools, Clients } = await setupServices();
|
|
518
|
+
|
|
519
|
+
// Enable all tools on the LazyToolsService so scripts can access MCP tools
|
|
520
|
+
// (LazyToolsService starts with only meta-tools enabled; we need all for scripts)
|
|
521
|
+
Tools.enableTools(["*"]);
|
|
522
|
+
|
|
523
|
+
const { ScriptExecutor } = await import(
|
|
524
|
+
"./services/script-execution/ScriptExecutor"
|
|
525
|
+
);
|
|
526
|
+
const executor = new ScriptExecutor(Tools, Clients);
|
|
527
|
+
const result = await executor.execute({
|
|
528
|
+
script: scriptContent,
|
|
529
|
+
policy: {
|
|
530
|
+
allowNetworkAccess: !!options.allowNetwork,
|
|
531
|
+
},
|
|
532
|
+
quotas: {
|
|
533
|
+
maxExecutionTimeMs: 5 * 60 * 1000, // 5 minutes for CLI scripts
|
|
534
|
+
},
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
if (result.consoleOutput?.length) {
|
|
538
|
+
console.log(result.consoleOutput.join("\n"));
|
|
539
|
+
}
|
|
540
|
+
console.log(JSON.stringify(result.result, null, 2));
|
|
541
|
+
if (!result.success) {
|
|
542
|
+
console.error("Script error:", result.error);
|
|
543
|
+
process.exit(1);
|
|
544
|
+
}
|
|
545
|
+
} catch (error) {
|
|
546
|
+
console.error("Error running script:", error);
|
|
547
|
+
process.exit(1);
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
|
|
491
551
|
program
|
|
492
552
|
.command("github-credentials [action]")
|
|
493
553
|
.description(
|