pybao-cli 1.4.89 → 1.4.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/dist/REPL-XPMCTX6L.js +49 -0
- package/dist/{acp-SMGE3N7N.js → acp-WP36SKSE.js} +30 -30
- package/dist/{agentsValidate-FJNQTZ6L.js → agentsValidate-RQL2SLGC.js} +7 -7
- package/dist/{ask-2XWNVTSB.js → ask-D3IZ5ZRJ.js} +29 -29
- package/dist/{autoUpdater-7PB65YC7.js → autoUpdater-OMUHLOGO.js} +3 -3
- package/dist/{chunk-CSP6P6NO.js → chunk-2NGXOHGX.js} +2 -2
- package/dist/{chunk-YNDZ73R7.js → chunk-35DF6XKC.js} +2 -2
- package/dist/{chunk-3JTP3A2Y.js → chunk-3JJGOOVV.js} +1 -1
- package/dist/{chunk-JJSCNIBA.js → chunk-4IZGIKGU.js} +1 -1
- package/dist/{chunk-LV4FISWZ.js → chunk-5Z6IMMMW.js} +3 -3
- package/dist/{chunk-I72YSEMN.js → chunk-6FUTCMZK.js} +4 -4
- package/dist/{chunk-UNDLA4M4.js → chunk-7KPYOLFD.js} +3 -3
- package/dist/{chunk-A5255NE3.js → chunk-7VNU2ZKH.js} +1 -1
- package/dist/{chunk-67D6QME2.js → chunk-B5AO2OEN.js} +9 -1
- package/dist/chunk-B5AO2OEN.js.map +7 -0
- package/dist/{chunk-THQLFNKQ.js → chunk-B7YI7BZU.js} +3 -3
- package/dist/{chunk-IUXFIASK.js → chunk-BZRGSGVE.js} +3 -3
- package/dist/{chunk-YVW2YZZ3.js → chunk-C2LGKJSR.js} +3 -3
- package/dist/{chunk-KHSTNHZE.js → chunk-CHTGXWNW.js} +4 -4
- package/dist/{chunk-JW3MBSMJ.js → chunk-FNYI3AHB.js} +79 -404
- package/dist/chunk-FNYI3AHB.js.map +7 -0
- package/dist/{chunk-DRHWOS44.js → chunk-FSSXF2YS.js} +1 -1
- package/dist/{chunk-JDMIFTZT.js → chunk-FZAPDUPC.js} +1 -1
- package/dist/{chunk-RLD57RVF.js → chunk-GZ3J3MB7.js} +1 -1
- package/dist/{chunk-NZPUVS6K.js → chunk-IRVS47LS.js} +1 -1
- package/dist/{chunk-5DBEI4U3.js → chunk-KLFTZBHM.js} +2 -2
- package/dist/{chunk-4CTXCXJV.js → chunk-KSWPVLIN.js} +2 -2
- package/dist/{chunk-FYLGTG5A.js → chunk-KXCSPC5I.js} +4 -4
- package/dist/{chunk-YAC4ZESX.js → chunk-L5FMWVFJ.js} +2 -2
- package/dist/{chunk-R2BVICE2.js → chunk-LMF7SSDW.js} +1 -1
- package/dist/{chunk-HVJRX43N.js → chunk-MNVUFKYB.js} +839 -270
- package/dist/chunk-MNVUFKYB.js.map +7 -0
- package/dist/{chunk-UAMS53ZK.js → chunk-OM7XZWUN.js} +2 -2
- package/dist/{chunk-UIGWD3MR.js → chunk-PAW3JPND.js} +1 -1
- package/dist/{chunk-XAABWNGX.js → chunk-U3LLCIIX.js} +4 -4
- package/dist/{chunk-5DKBPIUY.js → chunk-UULWYB2S.js} +2 -2
- package/dist/{chunk-3WX6M33B.js → chunk-W3Z3A6JG.js} +164 -8
- package/dist/chunk-W3Z3A6JG.js.map +7 -0
- package/dist/{chunk-5N4LX65G.js → chunk-XUPHN5RT.js} +3 -3
- package/dist/{chunk-JQBOODVQ.js → chunk-Z7TKBN4K.js} +3 -3
- package/dist/{cli-PTMHC2XV.js → cli-IOYAJ3RP.js} +89 -89
- package/dist/commands-XLJTAJDU.js +53 -0
- package/dist/{config-MCXPTUSG.js → config-QOBUIJ2T.js} +4 -4
- package/dist/{context-ZJZSHKCR.js → context-T72O7CNM.js} +6 -6
- package/dist/{conversationTracker-A33U2LAZ.js → conversationTracker-DGV5IOEO.js} +3 -3
- package/dist/{customCommands-M7HD5SVI.js → customCommands-TB4PW6BZ.js} +4 -4
- package/dist/{env-XWJBXPMS.js → env-EN4O7GDK.js} +2 -2
- package/dist/{file-HSVA6LNE.js → file-GOVYPFCU.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-UGJYESRH.js → llm-VY6QQH5B.js} +30 -30
- package/dist/{llmLazy-QEOEBBKC.js → llmLazy-ZRBSOAI6.js} +1 -1
- package/dist/{loader-R2QFYVHX.js → loader-6F76UNRR.js} +4 -4
- package/dist/{lsp-YN2SPF7O.js → lsp-RE4N652Z.js} +6 -6
- package/dist/{lspAnchor-J4GMFONT.js → lspAnchor-KQ2FF4JY.js} +6 -6
- package/dist/{mcp-O625QZ5R.js → mcp-ZE7PLYMD.js} +7 -7
- package/dist/{mentionProcessor-UPKZXHO4.js → mentionProcessor-7UT4VG43.js} +5 -5
- package/dist/{messages-3EGLQBFT.js → messages-JCHA3R7R.js} +1 -1
- package/dist/{model-7P6UKMPN.js → model-3NZZUFFU.js} +5 -5
- package/dist/{openai-J43QDBDS.js → openai-5MV5ABZF.js} +5 -5
- package/dist/{outputStyles-HANCH32Z.js → outputStyles-2HZOTSRS.js} +4 -4
- package/dist/{pluginRuntime-GQDZD5BX.js → pluginRuntime-R57OZ4VU.js} +6 -6
- package/dist/{pluginValidation-NMBEAEQW.js → pluginValidation-3BCKLZYR.js} +6 -6
- package/dist/prompts-QAJNDKD2.js +55 -0
- package/dist/{pybAgentSessionLoad-F67ZDP5H.js → pybAgentSessionLoad-X4LXVK5R.js} +4 -4
- package/dist/{pybAgentSessionResume-UC66IPGZ.js → pybAgentSessionResume-U5GJDTHH.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-IO42JQAR.js → pybAgentStreamJsonSession-3Z5BYBNJ.js} +1 -1
- package/dist/{pybHooks-RTLJ2AV5.js → pybHooks-6272ZZXC.js} +4 -4
- package/dist/query-Y66ZKOAY.js +57 -0
- package/dist/{registry-4NUGUWGX.js → registry-4E7E4FW7.js} +5 -5
- package/dist/{ripgrep-GXECIJXM.js → ripgrep-QSJWXAK7.js} +13 -5
- package/dist/{skillMarketplace-VM4XNPW4.js → skillMarketplace-Z3ZMMNEG.js} +3 -3
- package/dist/{state-QPNSGH4C.js → state-35W4BKTE.js} +2 -2
- package/dist/{theme-ME74IEH2.js → theme-YUI56RAR.js} +5 -5
- package/dist/{toolPermissionSettings-4DJ7GGUG.js → toolPermissionSettings-RULNIKWU.js} +6 -6
- package/dist/tools-VGH43OZ7.js +54 -0
- package/dist/{userInput-BEZBVV52.js → userInput-UNVIW76K.js} +31 -31
- package/package.json +9 -1
- package/resources/ripgrep/COPYING +3 -0
- package/resources/ripgrep/arm64-darwin/rg +0 -0
- package/resources/ripgrep/arm64-linux/rg +0 -0
- package/resources/ripgrep/manifest.json +32 -0
- package/resources/ripgrep/x64-darwin/rg +0 -0
- package/resources/ripgrep/x64-linux/rg +0 -0
- package/resources/ripgrep/x64-win32/rg.exe +0 -0
- package/resources/tree-sitter/manifest.json +14 -0
- package/scripts/postinstall.js +23 -0
- package/dist/REPL-VRZRANK3.js +0 -49
- package/dist/chunk-3WX6M33B.js.map +0 -7
- package/dist/chunk-67D6QME2.js.map +0 -7
- package/dist/chunk-HVJRX43N.js.map +0 -7
- package/dist/chunk-JW3MBSMJ.js.map +0 -7
- package/dist/commands-52E2E77C.js +0 -53
- package/dist/prompts-OFPZUEBC.js +0 -55
- package/dist/query-KHETENT7.js +0 -57
- package/dist/tools-7V7X7CNV.js +0 -54
- /package/dist/{REPL-VRZRANK3.js.map → REPL-XPMCTX6L.js.map} +0 -0
- /package/dist/{acp-SMGE3N7N.js.map → acp-WP36SKSE.js.map} +0 -0
- /package/dist/{agentsValidate-FJNQTZ6L.js.map → agentsValidate-RQL2SLGC.js.map} +0 -0
- /package/dist/{ask-2XWNVTSB.js.map → ask-D3IZ5ZRJ.js.map} +0 -0
- /package/dist/{autoUpdater-7PB65YC7.js.map → autoUpdater-OMUHLOGO.js.map} +0 -0
- /package/dist/{chunk-CSP6P6NO.js.map → chunk-2NGXOHGX.js.map} +0 -0
- /package/dist/{chunk-YNDZ73R7.js.map → chunk-35DF6XKC.js.map} +0 -0
- /package/dist/{chunk-3JTP3A2Y.js.map → chunk-3JJGOOVV.js.map} +0 -0
- /package/dist/{chunk-JJSCNIBA.js.map → chunk-4IZGIKGU.js.map} +0 -0
- /package/dist/{chunk-LV4FISWZ.js.map → chunk-5Z6IMMMW.js.map} +0 -0
- /package/dist/{chunk-I72YSEMN.js.map → chunk-6FUTCMZK.js.map} +0 -0
- /package/dist/{chunk-UNDLA4M4.js.map → chunk-7KPYOLFD.js.map} +0 -0
- /package/dist/{chunk-A5255NE3.js.map → chunk-7VNU2ZKH.js.map} +0 -0
- /package/dist/{chunk-THQLFNKQ.js.map → chunk-B7YI7BZU.js.map} +0 -0
- /package/dist/{chunk-IUXFIASK.js.map → chunk-BZRGSGVE.js.map} +0 -0
- /package/dist/{chunk-YVW2YZZ3.js.map → chunk-C2LGKJSR.js.map} +0 -0
- /package/dist/{chunk-KHSTNHZE.js.map → chunk-CHTGXWNW.js.map} +0 -0
- /package/dist/{chunk-DRHWOS44.js.map → chunk-FSSXF2YS.js.map} +0 -0
- /package/dist/{chunk-JDMIFTZT.js.map → chunk-FZAPDUPC.js.map} +0 -0
- /package/dist/{chunk-RLD57RVF.js.map → chunk-GZ3J3MB7.js.map} +0 -0
- /package/dist/{chunk-NZPUVS6K.js.map → chunk-IRVS47LS.js.map} +0 -0
- /package/dist/{chunk-5DBEI4U3.js.map → chunk-KLFTZBHM.js.map} +0 -0
- /package/dist/{chunk-4CTXCXJV.js.map → chunk-KSWPVLIN.js.map} +0 -0
- /package/dist/{chunk-FYLGTG5A.js.map → chunk-KXCSPC5I.js.map} +0 -0
- /package/dist/{chunk-YAC4ZESX.js.map → chunk-L5FMWVFJ.js.map} +0 -0
- /package/dist/{chunk-R2BVICE2.js.map → chunk-LMF7SSDW.js.map} +0 -0
- /package/dist/{chunk-UAMS53ZK.js.map → chunk-OM7XZWUN.js.map} +0 -0
- /package/dist/{chunk-UIGWD3MR.js.map → chunk-PAW3JPND.js.map} +0 -0
- /package/dist/{chunk-XAABWNGX.js.map → chunk-U3LLCIIX.js.map} +0 -0
- /package/dist/{chunk-5DKBPIUY.js.map → chunk-UULWYB2S.js.map} +0 -0
- /package/dist/{chunk-5N4LX65G.js.map → chunk-XUPHN5RT.js.map} +0 -0
- /package/dist/{chunk-JQBOODVQ.js.map → chunk-Z7TKBN4K.js.map} +0 -0
- /package/dist/{cli-PTMHC2XV.js.map → cli-IOYAJ3RP.js.map} +0 -0
- /package/dist/{commands-52E2E77C.js.map → commands-XLJTAJDU.js.map} +0 -0
- /package/dist/{config-MCXPTUSG.js.map → config-QOBUIJ2T.js.map} +0 -0
- /package/dist/{context-ZJZSHKCR.js.map → context-T72O7CNM.js.map} +0 -0
- /package/dist/{conversationTracker-A33U2LAZ.js.map → conversationTracker-DGV5IOEO.js.map} +0 -0
- /package/dist/{customCommands-M7HD5SVI.js.map → customCommands-TB4PW6BZ.js.map} +0 -0
- /package/dist/{env-XWJBXPMS.js.map → env-EN4O7GDK.js.map} +0 -0
- /package/dist/{file-HSVA6LNE.js.map → file-GOVYPFCU.js.map} +0 -0
- /package/dist/{llm-UGJYESRH.js.map → llm-VY6QQH5B.js.map} +0 -0
- /package/dist/{llmLazy-QEOEBBKC.js.map → llmLazy-ZRBSOAI6.js.map} +0 -0
- /package/dist/{loader-R2QFYVHX.js.map → loader-6F76UNRR.js.map} +0 -0
- /package/dist/{lsp-YN2SPF7O.js.map → lsp-RE4N652Z.js.map} +0 -0
- /package/dist/{lspAnchor-J4GMFONT.js.map → lspAnchor-KQ2FF4JY.js.map} +0 -0
- /package/dist/{mcp-O625QZ5R.js.map → mcp-ZE7PLYMD.js.map} +0 -0
- /package/dist/{mentionProcessor-UPKZXHO4.js.map → mentionProcessor-7UT4VG43.js.map} +0 -0
- /package/dist/{messages-3EGLQBFT.js.map → messages-JCHA3R7R.js.map} +0 -0
- /package/dist/{model-7P6UKMPN.js.map → model-3NZZUFFU.js.map} +0 -0
- /package/dist/{openai-J43QDBDS.js.map → openai-5MV5ABZF.js.map} +0 -0
- /package/dist/{outputStyles-HANCH32Z.js.map → outputStyles-2HZOTSRS.js.map} +0 -0
- /package/dist/{pluginRuntime-GQDZD5BX.js.map → pluginRuntime-R57OZ4VU.js.map} +0 -0
- /package/dist/{pluginValidation-NMBEAEQW.js.map → pluginValidation-3BCKLZYR.js.map} +0 -0
- /package/dist/{prompts-OFPZUEBC.js.map → prompts-QAJNDKD2.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-F67ZDP5H.js.map → pybAgentSessionLoad-X4LXVK5R.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-UC66IPGZ.js.map → pybAgentSessionResume-U5GJDTHH.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-IO42JQAR.js.map → pybAgentStreamJsonSession-3Z5BYBNJ.js.map} +0 -0
- /package/dist/{pybHooks-RTLJ2AV5.js.map → pybHooks-6272ZZXC.js.map} +0 -0
- /package/dist/{query-KHETENT7.js.map → query-Y66ZKOAY.js.map} +0 -0
- /package/dist/{registry-4NUGUWGX.js.map → registry-4E7E4FW7.js.map} +0 -0
- /package/dist/{ripgrep-GXECIJXM.js.map → ripgrep-QSJWXAK7.js.map} +0 -0
- /package/dist/{skillMarketplace-VM4XNPW4.js.map → skillMarketplace-Z3ZMMNEG.js.map} +0 -0
- /package/dist/{state-QPNSGH4C.js.map → state-35W4BKTE.js.map} +0 -0
- /package/dist/{theme-ME74IEH2.js.map → theme-YUI56RAR.js.map} +0 -0
- /package/dist/{toolPermissionSettings-4DJ7GGUG.js.map → toolPermissionSettings-RULNIKWU.js.map} +0 -0
- /package/dist/{tools-7V7X7CNV.js.map → tools-VGH43OZ7.js.map} +0 -0
- /package/dist/{userInput-BEZBVV52.js.map → userInput-UNVIW76K.js.map} +0 -0
|
@@ -2,11 +2,11 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
listAllContentFiles
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-W3Z3A6JG.js";
|
|
6
6
|
import {
|
|
7
7
|
getCwd,
|
|
8
8
|
logError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-FSSXF2YS.js";
|
|
10
10
|
|
|
11
11
|
// src/utils/fs/file.ts
|
|
12
12
|
import {
|
|
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
|
|
4
4
|
// src/services/ai/llmLazy.ts
|
|
5
5
|
async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
|
|
6
|
-
const { queryLLM: inner } = await import("./llm-
|
|
6
|
+
const { queryLLM: inner } = await import("./llm-VY6QQH5B.js");
|
|
7
7
|
return inner(
|
|
8
8
|
messages,
|
|
9
9
|
systemPrompt,
|
|
@@ -14,15 +14,15 @@ async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal
|
|
|
14
14
|
);
|
|
15
15
|
}
|
|
16
16
|
async function queryQuick(args) {
|
|
17
|
-
const { queryQuick: inner } = await import("./llm-
|
|
17
|
+
const { queryQuick: inner } = await import("./llm-VY6QQH5B.js");
|
|
18
18
|
return inner(args);
|
|
19
19
|
}
|
|
20
20
|
async function verifyApiKey(apiKey, baseURL, provider) {
|
|
21
|
-
const { verifyApiKey: inner } = await import("./llm-
|
|
21
|
+
const { verifyApiKey: inner } = await import("./llm-VY6QQH5B.js");
|
|
22
22
|
return inner(apiKey, baseURL, provider);
|
|
23
23
|
}
|
|
24
24
|
async function fetchAnthropicModels(apiKey, baseURL) {
|
|
25
|
-
const { fetchAnthropicModels: inner } = await import("./llm-
|
|
25
|
+
const { fetchAnthropicModels: inner } = await import("./llm-VY6QQH5B.js");
|
|
26
26
|
return inner(apiKey, baseURL);
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
} from "./chunk-XKYHFZEC.js";
|
|
7
7
|
import {
|
|
8
8
|
getGlobalConfig
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XUPHN5RT.js";
|
|
10
10
|
import {
|
|
11
11
|
debug,
|
|
12
12
|
getCurrentRequest,
|
|
13
13
|
logAPIError
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PAW3JPND.js";
|
|
15
15
|
|
|
16
16
|
// src/services/ai/openai.ts
|
|
17
17
|
import { ProxyAgent, fetch } from "undici";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
BunShell,
|
|
5
5
|
execFileNoThrow,
|
|
6
6
|
logError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FSSXF2YS.js";
|
|
8
8
|
|
|
9
9
|
// src/utils/system/ripgrep.ts
|
|
10
10
|
import { findActualExecutable } from "spawn-rx";
|
|
@@ -18,15 +18,18 @@ import {
|
|
|
18
18
|
mkdtempSync,
|
|
19
19
|
openSync,
|
|
20
20
|
readdirSync,
|
|
21
|
+
readFileSync,
|
|
21
22
|
rmSync,
|
|
22
23
|
writeFileSync
|
|
23
24
|
} from "node:fs";
|
|
25
|
+
import { createHash } from "node:crypto";
|
|
24
26
|
import { execFile, spawn } from "child_process";
|
|
25
27
|
import debug from "debug";
|
|
26
28
|
import { quote } from "shell-quote";
|
|
27
|
-
import { basename, isAbsolute, join, relative, sep } from "path";
|
|
29
|
+
import { basename, dirname, isAbsolute, join, relative, sep } from "path";
|
|
28
30
|
import envPaths from "env-paths";
|
|
29
31
|
import { unzipSync } from "fflate";
|
|
32
|
+
import { fileURLToPath } from "node:url";
|
|
30
33
|
var d = debug("pyb:ripgrep");
|
|
31
34
|
var DEFAULT_RIPGREP_VERSION = "14.1.1";
|
|
32
35
|
var PLATFORM_CONFIG = {
|
|
@@ -55,6 +58,118 @@ function getPlatformConfig() {
|
|
|
55
58
|
}
|
|
56
59
|
return { platformKey, ...config };
|
|
57
60
|
}
|
|
61
|
+
function getDirname() {
|
|
62
|
+
try {
|
|
63
|
+
return __dirname;
|
|
64
|
+
} catch {
|
|
65
|
+
return dirname(fileURLToPath(import.meta.url));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function resolveRipgrepResourcesDir() {
|
|
69
|
+
const dirname2 = getDirname();
|
|
70
|
+
if (dirname2.includes("dist") || dirname2.includes("node_modules")) {
|
|
71
|
+
return join(dirname2, "../../../../resources/ripgrep");
|
|
72
|
+
}
|
|
73
|
+
return join(dirname2, "../../../resources/ripgrep");
|
|
74
|
+
}
|
|
75
|
+
function getRipgrepManifestPath() {
|
|
76
|
+
return join(resolveRipgrepResourcesDir(), "manifest.json");
|
|
77
|
+
}
|
|
78
|
+
function isVendorFallbackEnabled(env = process.env) {
|
|
79
|
+
return isTruthyEnv(env.PYB_RIPGREP_VENDOR_ENABLED);
|
|
80
|
+
}
|
|
81
|
+
function isFalsyEnv(value) {
|
|
82
|
+
if (!value) return false;
|
|
83
|
+
return ["0", "false", "no", "off"].includes(value.trim().toLowerCase());
|
|
84
|
+
}
|
|
85
|
+
function readBooleanEnv(env, key, defaultValue) {
|
|
86
|
+
const raw = env[key];
|
|
87
|
+
if (raw === void 0) return defaultValue;
|
|
88
|
+
if (isTruthyEnv(raw)) return true;
|
|
89
|
+
if (isFalsyEnv(raw)) return false;
|
|
90
|
+
return defaultValue;
|
|
91
|
+
}
|
|
92
|
+
function resolveRipgrepPolicy(env = process.env) {
|
|
93
|
+
const offlineStrict = readBooleanEnv(env, "PYB_OFFLINE_STRICT", false);
|
|
94
|
+
const vendorFirst = readBooleanEnv(env, "PYB_VENDOR_FIRST", true);
|
|
95
|
+
const allowNetworkFallback = !offlineStrict && readBooleanEnv(env, "PYB_ALLOW_NETWORK_FALLBACK", false);
|
|
96
|
+
const preferBundled = isTruthyEnv(env.USE_BUILTIN_RIPGREP);
|
|
97
|
+
const allowPathFallback = !offlineStrict && !preferBundled;
|
|
98
|
+
const allowVendorFallback = vendorFirst || isVendorFallbackEnabled(env) || offlineStrict;
|
|
99
|
+
return {
|
|
100
|
+
vendorFirst,
|
|
101
|
+
offlineStrict,
|
|
102
|
+
allowNetworkFallback,
|
|
103
|
+
allowPathFallback,
|
|
104
|
+
allowVendorFallback
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function getRipgrepPolicyMode(policy) {
|
|
108
|
+
if (policy.offlineStrict) {
|
|
109
|
+
return "strict-offline";
|
|
110
|
+
}
|
|
111
|
+
return policy.vendorFirst ? "vendor-first" : "path-first";
|
|
112
|
+
}
|
|
113
|
+
function loadRipgrepManifest() {
|
|
114
|
+
const manifestPath = getRipgrepManifestPath();
|
|
115
|
+
if (!existsSync(manifestPath)) {
|
|
116
|
+
throw new Error(`ripgrep checksum mismatch: manifest missing at ${manifestPath}`);
|
|
117
|
+
}
|
|
118
|
+
const rawBuffer = readFileSync(manifestPath);
|
|
119
|
+
const raw = decodeManifestContent(rawBuffer);
|
|
120
|
+
const parsed = JSON.parse(raw);
|
|
121
|
+
if (!parsed.platforms || typeof parsed.platforms !== "object") {
|
|
122
|
+
throw new Error("ripgrep checksum mismatch: manifest platforms missing");
|
|
123
|
+
}
|
|
124
|
+
return parsed;
|
|
125
|
+
}
|
|
126
|
+
function decodeManifestContent(buffer) {
|
|
127
|
+
if (buffer.length >= 2) {
|
|
128
|
+
if (buffer[0] === 255 && buffer[1] === 254) {
|
|
129
|
+
return buffer.subarray(2).toString("utf16le");
|
|
130
|
+
}
|
|
131
|
+
if (buffer[0] === 254 && buffer[1] === 255) {
|
|
132
|
+
throw new Error("ripgrep checksum mismatch: utf16be manifest is not supported");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return buffer.toString("utf8").replace(/^\uFEFF/, "");
|
|
136
|
+
}
|
|
137
|
+
function sha256File(filePath) {
|
|
138
|
+
return createHash("sha256").update(readFileSync(filePath)).digest("hex");
|
|
139
|
+
}
|
|
140
|
+
function verifyRipgrepBinaryIntegrity(input) {
|
|
141
|
+
const manifest = loadRipgrepManifest();
|
|
142
|
+
const platformEntry = manifest.platforms?.[input.platformKey];
|
|
143
|
+
if (!platformEntry?.sha256) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
`ripgrep checksum mismatch: sha256 missing for platform ${input.platformKey}`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
const actualSha256 = sha256File(input.binaryPath);
|
|
149
|
+
if (actualSha256 !== platformEntry.sha256) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`ripgrep checksum mismatch for ${input.platformKey}: expected ${platformEntry.sha256}, got ${actualSha256}`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function resolveVendorRipgrepBinaryPath() {
|
|
156
|
+
const { platformKey } = getPlatformConfig();
|
|
157
|
+
const manifest = loadRipgrepManifest();
|
|
158
|
+
const platformEntry = manifest.platforms?.[platformKey];
|
|
159
|
+
if (!platformEntry?.binary) {
|
|
160
|
+
throw new Error(`vendor ripgrep binary missing for ${platformKey}`);
|
|
161
|
+
}
|
|
162
|
+
const vendorBinaryPath = join(
|
|
163
|
+
resolveRipgrepResourcesDir(),
|
|
164
|
+
platformKey,
|
|
165
|
+
platformEntry.binary
|
|
166
|
+
);
|
|
167
|
+
if (!existsSync(vendorBinaryPath)) {
|
|
168
|
+
throw new Error(`vendor ripgrep binary missing for ${platformKey}`);
|
|
169
|
+
}
|
|
170
|
+
verifyRipgrepBinaryIntegrity({ binaryPath: vendorBinaryPath, platformKey });
|
|
171
|
+
return vendorBinaryPath;
|
|
172
|
+
}
|
|
58
173
|
function getRipgrepCacheRoot() {
|
|
59
174
|
const override = process.env.PYB_RIPGREP_CACHE_DIR?.trim();
|
|
60
175
|
if (override) return override;
|
|
@@ -179,7 +294,10 @@ async function ensureCachedRipgrep() {
|
|
|
179
294
|
const cacheRoot = getRipgrepCacheRoot();
|
|
180
295
|
const cacheDir = join(cacheRoot, version, platformKey);
|
|
181
296
|
const binaryPath = join(cacheDir, getRipgrepBinaryName());
|
|
182
|
-
if (existsSync(binaryPath))
|
|
297
|
+
if (existsSync(binaryPath)) {
|
|
298
|
+
verifyRipgrepBinaryIntegrity({ binaryPath, platformKey });
|
|
299
|
+
return binaryPath;
|
|
300
|
+
}
|
|
183
301
|
mkdirSync(cacheDir, { recursive: true });
|
|
184
302
|
const lockPath = join(cacheDir, ".lock");
|
|
185
303
|
const lockFd = await acquireLock(lockPath, binaryPath);
|
|
@@ -188,6 +306,7 @@ async function ensureCachedRipgrep() {
|
|
|
188
306
|
if (!existsSync(binaryPath)) {
|
|
189
307
|
await downloadRipgrepTo(cacheDir);
|
|
190
308
|
}
|
|
309
|
+
verifyRipgrepBinaryIntegrity({ binaryPath, platformKey });
|
|
191
310
|
return binaryPath;
|
|
192
311
|
} finally {
|
|
193
312
|
try {
|
|
@@ -205,17 +324,50 @@ async function resolveRipgrepPathOrThrow() {
|
|
|
205
324
|
}
|
|
206
325
|
return explicit;
|
|
207
326
|
}
|
|
208
|
-
const
|
|
209
|
-
|
|
327
|
+
const policy = resolveRipgrepPolicy();
|
|
328
|
+
const resolutionErrors = [];
|
|
329
|
+
if (policy.allowVendorFallback && (policy.vendorFirst || policy.offlineStrict)) {
|
|
330
|
+
try {
|
|
331
|
+
const vendorBinaryPath = resolveVendorRipgrepBinaryPath();
|
|
332
|
+
d("Using vendor ripgrep: %s", vendorBinaryPath);
|
|
333
|
+
return vendorBinaryPath;
|
|
334
|
+
} catch (error) {
|
|
335
|
+
resolutionErrors.push(String(error instanceof Error ? error.message : error));
|
|
336
|
+
if (policy.offlineStrict) {
|
|
337
|
+
throw new Error(
|
|
338
|
+
`ripgrep strict offline mode: vendor resolution failed: ${resolutionErrors.join("; ")}`
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (policy.allowPathFallback) {
|
|
210
344
|
const { cmd } = findActualExecutable("rg", []);
|
|
211
345
|
d(`ripgrep initially resolved as: ${cmd}`);
|
|
212
346
|
if (cmd !== "rg") {
|
|
213
347
|
return cmd;
|
|
214
348
|
}
|
|
215
349
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
350
|
+
if (policy.allowNetworkFallback) {
|
|
351
|
+
try {
|
|
352
|
+
const cached = await ensureCachedRipgrep();
|
|
353
|
+
d("Using cached ripgrep: %s", cached);
|
|
354
|
+
return cached;
|
|
355
|
+
} catch (error) {
|
|
356
|
+
resolutionErrors.push(String(error instanceof Error ? error.message : error));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (policy.allowVendorFallback) {
|
|
360
|
+
try {
|
|
361
|
+
const vendorBinaryPath = resolveVendorRipgrepBinaryPath();
|
|
362
|
+
d("Using vendor ripgrep fallback: %s", vendorBinaryPath);
|
|
363
|
+
return vendorBinaryPath;
|
|
364
|
+
} catch (error) {
|
|
365
|
+
resolutionErrors.push(String(error instanceof Error ? error.message : error));
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
throw new Error(
|
|
369
|
+
`Unable to resolve ripgrep path under current policy (${getRipgrepPolicyMode(policy)}): ${resolutionErrors.join("; ") || "no eligible fallback"}`
|
|
370
|
+
);
|
|
219
371
|
}
|
|
220
372
|
var getRipgrepPath = memoize(
|
|
221
373
|
async () => resolveRipgrepPathOrThrow()
|
|
@@ -468,6 +620,10 @@ async function tree(cwd, limit = 50, abortSignal) {
|
|
|
468
620
|
}
|
|
469
621
|
|
|
470
622
|
export {
|
|
623
|
+
resolveRipgrepPolicy,
|
|
624
|
+
getRipgrepPolicyMode,
|
|
625
|
+
verifyRipgrepBinaryIntegrity,
|
|
626
|
+
resolveVendorRipgrepBinaryPath,
|
|
471
627
|
getRipgrepPath,
|
|
472
628
|
ripGrepWithStatus,
|
|
473
629
|
ripGrep,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/system/ripgrep.ts"],
|
|
4
|
+
"sourcesContent": ["import { findActualExecutable } from 'spawn-rx'\nimport { memoize } from 'lodash-es'\nimport {\n chmodSync,\n closeSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n openSync,\n readdirSync,\n readFileSync,\n rmSync,\n statSync,\n writeFileSync,\n} from 'node:fs'\nimport { createHash } from 'node:crypto'\nimport { execFile, spawn } from 'child_process'\nimport debug from 'debug'\nimport { quote } from 'shell-quote'\nimport { logError } from '@utils/log'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport type { BunShellSandboxOptions } from '@utils/bun/shell'\nimport { BunShell } from '@utils/bun/shell'\nimport { basename, dirname, isAbsolute, join, relative, sep } from 'path'\nimport envPaths from 'env-paths'\nimport { unzipSync } from 'fflate'\nimport { fileURLToPath } from 'node:url'\n\nconst d = debug('pyb:ripgrep')\n\nconst DEFAULT_RIPGREP_VERSION = '14.1.1'\nconst PLATFORM_CONFIG = {\n 'arm64-darwin': { platform: 'aarch64-apple-darwin', extension: 'tar.gz' },\n 'arm64-linux': { platform: 'aarch64-unknown-linux-gnu', extension: 'tar.gz' },\n 'x64-darwin': { platform: 'x86_64-apple-darwin', extension: 'tar.gz' },\n 'x64-linux': { platform: 'x86_64-unknown-linux-musl', extension: 'tar.gz' },\n 'x64-win32': { platform: 'x86_64-pc-windows-msvc', extension: 'zip' },\n} as const\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n if (!value) return false\n return ['1', 'true', 'yes', 'on'].includes(value.trim().toLowerCase())\n}\n\nfunction getRipgrepVersion(): string {\n const override = process.env.PYB_RIPGREP_VERSION?.trim()\n return override || DEFAULT_RIPGREP_VERSION\n}\n\nfunction getRipgrepBinaryName(): string {\n return process.platform === 'win32' ? 'rg.exe' : 'rg'\n}\n\nfunction getPlatformConfig() {\n const platformKey = `${process.arch}-${process.platform}` as keyof typeof PLATFORM_CONFIG\n const config = PLATFORM_CONFIG[platformKey]\n if (!config) {\n throw new Error(`Unsupported ripgrep platform: ${platformKey}`)\n }\n return { platformKey, ...config }\n}\n\nfunction getDirname() {\n try {\n return __dirname\n } catch {\n return dirname(fileURLToPath(import.meta.url))\n }\n}\n\nfunction resolveRipgrepResourcesDir() {\n const dirname = getDirname()\n if (dirname.includes('dist') || dirname.includes('node_modules')) {\n return join(dirname, '../../../../resources/ripgrep')\n }\n return join(dirname, '../../../resources/ripgrep')\n}\n\nfunction getRipgrepManifestPath() {\n return join(resolveRipgrepResourcesDir(), 'manifest.json')\n}\n\nfunction isVendorFallbackEnabled(env: NodeJS.ProcessEnv = process.env) {\n return isTruthyEnv(env.PYB_RIPGREP_VENDOR_ENABLED)\n}\n\nfunction isFalsyEnv(value: string | undefined): boolean {\n if (!value) return false\n return ['0', 'false', 'no', 'off'].includes(value.trim().toLowerCase())\n}\n\nfunction readBooleanEnv(\n env: NodeJS.ProcessEnv,\n key: string,\n defaultValue: boolean,\n): boolean {\n const raw = env[key]\n if (raw === undefined) return defaultValue\n if (isTruthyEnv(raw)) return true\n if (isFalsyEnv(raw)) return false\n return defaultValue\n}\n\nexport type RipgrepPolicy = {\n vendorFirst: boolean\n offlineStrict: boolean\n allowNetworkFallback: boolean\n allowPathFallback: boolean\n allowVendorFallback: boolean\n}\n\nexport function resolveRipgrepPolicy(\n env: NodeJS.ProcessEnv = process.env,\n): RipgrepPolicy {\n const offlineStrict = readBooleanEnv(env, 'PYB_OFFLINE_STRICT', false)\n const vendorFirst = readBooleanEnv(env, 'PYB_VENDOR_FIRST', true)\n const allowNetworkFallback =\n !offlineStrict && readBooleanEnv(env, 'PYB_ALLOW_NETWORK_FALLBACK', false)\n const preferBundled = isTruthyEnv(env.USE_BUILTIN_RIPGREP)\n const allowPathFallback = !offlineStrict && !preferBundled\n const allowVendorFallback = vendorFirst || isVendorFallbackEnabled(env) || offlineStrict\n return {\n vendorFirst,\n offlineStrict,\n allowNetworkFallback,\n allowPathFallback,\n allowVendorFallback,\n }\n}\n\nexport function getRipgrepPolicyMode(policy: RipgrepPolicy): string {\n if (policy.offlineStrict) {\n return 'strict-offline'\n }\n return policy.vendorFirst ? 'vendor-first' : 'path-first'\n}\n\ntype RipgrepManifest = {\n version?: string\n platforms?: Record<string, { binary?: string; sha256?: string }>\n}\n\nfunction loadRipgrepManifest(): RipgrepManifest {\n const manifestPath = getRipgrepManifestPath()\n if (!existsSync(manifestPath)) {\n throw new Error(`ripgrep checksum mismatch: manifest missing at ${manifestPath}`)\n }\n const rawBuffer = readFileSync(manifestPath)\n const raw = decodeManifestContent(rawBuffer)\n const parsed = JSON.parse(raw) as RipgrepManifest\n if (!parsed.platforms || typeof parsed.platforms !== 'object') {\n throw new Error('ripgrep checksum mismatch: manifest platforms missing')\n }\n return parsed\n}\n\nfunction decodeManifestContent(buffer: Buffer) {\n if (buffer.length >= 2) {\n if (buffer[0] === 0xff && buffer[1] === 0xfe) {\n return buffer.subarray(2).toString('utf16le')\n }\n if (buffer[0] === 0xfe && buffer[1] === 0xff) {\n throw new Error('ripgrep checksum mismatch: utf16be manifest is not supported')\n }\n }\n return buffer.toString('utf8').replace(/^\\uFEFF/, '')\n}\n\nfunction sha256File(filePath: string) {\n return createHash('sha256').update(readFileSync(filePath)).digest('hex')\n}\n\nexport function verifyRipgrepBinaryIntegrity(input: {\n binaryPath: string\n platformKey: keyof typeof PLATFORM_CONFIG\n}) {\n const manifest = loadRipgrepManifest()\n const platformEntry = manifest.platforms?.[input.platformKey]\n if (!platformEntry?.sha256) {\n throw new Error(\n `ripgrep checksum mismatch: sha256 missing for platform ${input.platformKey}`,\n )\n }\n const actualSha256 = sha256File(input.binaryPath)\n if (actualSha256 !== platformEntry.sha256) {\n throw new Error(\n `ripgrep checksum mismatch for ${input.platformKey}: expected ${platformEntry.sha256}, got ${actualSha256}`,\n )\n }\n}\n\nexport function resolveVendorRipgrepBinaryPath() {\n const { platformKey } = getPlatformConfig()\n const manifest = loadRipgrepManifest()\n const platformEntry = manifest.platforms?.[platformKey]\n if (!platformEntry?.binary) {\n throw new Error(`vendor ripgrep binary missing for ${platformKey}`)\n }\n const vendorBinaryPath = join(\n resolveRipgrepResourcesDir(),\n platformKey,\n platformEntry.binary,\n )\n if (!existsSync(vendorBinaryPath)) {\n throw new Error(`vendor ripgrep binary missing for ${platformKey}`)\n }\n verifyRipgrepBinaryIntegrity({ binaryPath: vendorBinaryPath, platformKey })\n return vendorBinaryPath\n}\n\nfunction getRipgrepCacheRoot(): string {\n const override = process.env.PYB_RIPGREP_CACHE_DIR?.trim()\n if (override) return override\n const paths = envPaths('pyb')\n return join(paths.cache, 'ripgrep')\n}\n\nfunction getDownloadBaseUrl(version: string): string {\n const override = process.env.PYB_RIPGREP_DOWNLOAD_BASE_URL?.trim()\n if (!override) {\n return `https://github.com/BurntSushi/ripgrep/releases/download/${version}`\n }\n if (override.includes('{version}')) {\n return override.replace('{version}', version)\n }\n return `${override.replace(/\\/$/, '')}/${version}`\n}\n\nasync function delay(ms: number): Promise<void> {\n await new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction findFileRecursive(root: string, filename: string): string | null {\n const entries = readdirSync(root, { withFileTypes: true })\n for (const entry of entries) {\n const full = join(root, entry.name)\n if (entry.isDirectory()) {\n const found = findFileRecursive(full, filename)\n if (found) return found\n } else if (entry.isFile() && entry.name === filename) {\n return full\n }\n }\n return null\n}\n\nasync function execFileChecked(\n command: string,\n args: string[],\n options: { cwd: string },\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n execFile(\n command,\n args,\n { cwd: options.cwd, maxBuffer: 1_000_000 },\n (error, _stdout, stderr) => {\n if (error) {\n reject(\n new Error(\n `${command} ${args.join(' ')} failed: ${stderr || error.message}`,\n ),\n )\n } else {\n resolve()\n }\n },\n )\n })\n}\n\nasync function acquireLock(\n lockPath: string,\n readyPath: string,\n): Promise<number | null> {\n const start = Date.now()\n while (true) {\n try {\n return openSync(lockPath, 'wx')\n } catch (error: any) {\n if (error?.code !== 'EEXIST') {\n throw error\n }\n if (existsSync(readyPath)) return null\n if (Date.now() - start > 20000) {\n throw new Error('Timed out waiting for ripgrep download lock')\n }\n await delay(100)\n }\n }\n}\n\nasync function downloadRipgrepTo(cacheDir: string): Promise<string> {\n const { platform, extension, platformKey } = getPlatformConfig()\n const version = getRipgrepVersion()\n const filename = `ripgrep-${version}-${platform}.${extension}`\n const url = `${getDownloadBaseUrl(version)}/${filename}`\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(\n `Failed to download ripgrep (${response.status}): ${url}`,\n )\n }\n const buffer = new Uint8Array(await response.arrayBuffer())\n const tempDir = mkdtempSync(join(cacheDir, 'tmp-'))\n try {\n const binaryName = getRipgrepBinaryName()\n const targetPath = join(cacheDir, binaryName)\n if (extension === 'zip') {\n const files = unzipSync(buffer)\n const entryName = Object.keys(files).find(name =>\n name.endsWith(binaryName),\n )\n if (!entryName) {\n throw new Error(`ripgrep binary not found in zip: ${filename}`)\n }\n writeFileSync(targetPath, files[entryName]!)\n } else {\n const archivePath = join(tempDir, filename)\n const extractDir = join(tempDir, 'extract')\n mkdirSync(extractDir, { recursive: true })\n writeFileSync(archivePath, buffer)\n await execFileChecked('tar', ['-xzf', archivePath, '-C', extractDir], {\n cwd: tempDir,\n })\n const extracted = findFileRecursive(extractDir, binaryName)\n if (!extracted) {\n throw new Error(\n `ripgrep binary not found after extraction: ${platformKey}`,\n )\n }\n copyFileSync(extracted, targetPath)\n }\n if (process.platform !== 'win32') {\n chmodSync(targetPath, 0o755)\n }\n return targetPath\n } finally {\n rmSync(tempDir, { recursive: true, force: true })\n }\n}\n\nasync function ensureCachedRipgrep(): Promise<string> {\n const version = getRipgrepVersion()\n const { platformKey } = getPlatformConfig()\n const cacheRoot = getRipgrepCacheRoot()\n const cacheDir = join(cacheRoot, version, platformKey)\n const binaryPath = join(cacheDir, getRipgrepBinaryName())\n if (existsSync(binaryPath)) {\n verifyRipgrepBinaryIntegrity({ binaryPath, platformKey })\n return binaryPath\n }\n mkdirSync(cacheDir, { recursive: true })\n const lockPath = join(cacheDir, '.lock')\n const lockFd = await acquireLock(lockPath, binaryPath)\n if (!lockFd) return binaryPath\n try {\n if (!existsSync(binaryPath)) {\n await downloadRipgrepTo(cacheDir)\n }\n verifyRipgrepBinaryIntegrity({ binaryPath, platformKey })\n return binaryPath\n } finally {\n try {\n closeSync(lockFd)\n } catch {}\n rmSync(lockPath, { force: true })\n }\n}\n\nasync function resolveRipgrepPathOrThrow(): Promise<string> {\n const explicit = process.env.PYB_RIPGREP_PATH\n if (explicit) {\n if (!existsSync(explicit)) {\n throw new Error(`PYB_RIPGREP_PATH points to a missing file: ${explicit}`)\n }\n return explicit\n }\n const policy = resolveRipgrepPolicy()\n const resolutionErrors: string[] = []\n\n if (policy.allowVendorFallback && (policy.vendorFirst || policy.offlineStrict)) {\n try {\n const vendorBinaryPath = resolveVendorRipgrepBinaryPath()\n d('Using vendor ripgrep: %s', vendorBinaryPath)\n return vendorBinaryPath\n } catch (error) {\n resolutionErrors.push(String(error instanceof Error ? error.message : error))\n if (policy.offlineStrict) {\n throw new Error(\n `ripgrep strict offline mode: vendor resolution failed: ${resolutionErrors.join('; ')}`,\n )\n }\n }\n }\n\n if (policy.allowPathFallback) {\n const { cmd } = findActualExecutable('rg', [])\n d(`ripgrep initially resolved as: ${cmd}`)\n if (cmd !== 'rg') {\n return cmd\n }\n }\n\n if (policy.allowNetworkFallback) {\n try {\n const cached = await ensureCachedRipgrep()\n d('Using cached ripgrep: %s', cached)\n return cached\n } catch (error) {\n resolutionErrors.push(String(error instanceof Error ? error.message : error))\n }\n }\n\n if (policy.allowVendorFallback) {\n try {\n const vendorBinaryPath = resolveVendorRipgrepBinaryPath()\n d('Using vendor ripgrep fallback: %s', vendorBinaryPath)\n return vendorBinaryPath\n } catch (error) {\n resolutionErrors.push(String(error instanceof Error ? error.message : error))\n }\n }\n\n throw new Error(\n `Unable to resolve ripgrep path under current policy (${getRipgrepPolicyMode(policy)}): ${resolutionErrors.join('; ') || 'no eligible fallback'}`,\n )\n}\n\nexport const getRipgrepPath = memoize(\n async (): Promise<string> => resolveRipgrepPathOrThrow(),\n)\n\ntype RipGrepStatus = {\n files: string[]\n status: 'ok' | 'error'\n code?: number\n}\n\nexport async function ripGrepWithStatus(\n args: string[],\n target: string,\n abortSignal: AbortSignal,\n options?: { sandbox?: BunShellSandboxOptions },\n): Promise<RipGrepStatus> {\n await codesignRipgrepIfNecessary()\n const rg = await getRipgrepPath()\n d('ripgrep called: %s %o', rg, target, args)\n\n if (options?.sandbox?.enabled === true) {\n const cmd = quote([rg, ...args, target])\n const result = await BunShell.getInstance().exec(cmd, abortSignal, 10_000, {\n sandbox: options.sandbox,\n })\n if (result.code === 1) return { files: [], status: 'ok', code: 1 }\n if (result.code !== 0) {\n logError(`ripgrep failed with exit code ${result.code}: ${result.stderr}`)\n return { files: [], status: 'error', code: result.code }\n }\n return {\n files: result.stdout.trim().split('\\n').filter(Boolean),\n status: 'ok',\n code: 0,\n }\n }\n\n return new Promise(resolve => {\n const bun = (globalThis as any).Bun\n if (bun?.spawn && typeof bun.spawn === 'function') {\n const files: string[] = []\n let buffer = ''\n let stderr = ''\n const decoder = new TextDecoder()\n const proc = bun.spawn([rg, ...args, target], {\n stdout: 'pipe',\n stderr: 'pipe',\n signal: abortSignal,\n })\n const readStdout = async () => {\n const reader = proc.stdout.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const parts = buffer.split(/\\r?\\n/)\n buffer = parts.pop() ?? ''\n for (const line of parts) {\n if (line) files.push(line)\n }\n }\n reader.releaseLock()\n }\n const readStderr = async () => {\n const reader = proc.stderr.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n stderr += decoder.decode(value, { stream: true })\n }\n reader.releaseLock()\n }\n Promise.all([readStdout(), readStderr(), proc.exited])\n .then(([_, __, exitCode]) => {\n if (buffer) files.push(buffer)\n if (exitCode && exitCode !== 1) {\n if (stderr) {\n logError(`ripgrep failed with exit code ${exitCode}: ${stderr}`)\n }\n resolve({ files: [], status: 'error', code: exitCode })\n return\n }\n resolve({ files, status: 'ok', code: exitCode ?? 0 })\n })\n .catch(error => {\n d('ripgrep error: %o', error)\n logError(error)\n resolve({ files: [], status: 'error' })\n })\n return\n }\n const proc = spawn(rg, [...args, target], {\n signal: abortSignal,\n timeout: 10_000,\n })\n const files: string[] = []\n let buffer = ''\n let stderr = ''\n proc.stdout?.on('data', chunk => {\n buffer += chunk.toString()\n const parts = buffer.split(/\\r?\\n/)\n buffer = parts.pop() ?? ''\n for (const line of parts) {\n if (line) files.push(line)\n }\n })\n proc.stderr?.on('data', chunk => {\n stderr += chunk.toString()\n })\n proc.on('error', error => {\n d('ripgrep error: %o', error)\n logError(error)\n })\n proc.on('close', code => {\n if (buffer.trim().length > 0) files.push(buffer.trim())\n if (code && code !== 1) {\n if (stderr) {\n logError(`ripgrep failed with exit code ${code}: ${stderr}`)\n }\n resolve({ files: [], status: 'error', code })\n return\n }\n resolve({\n files,\n status: 'ok',\n code: code ?? 0,\n })\n })\n })\n}\n\nexport async function ripGrep(\n args: string[],\n target: string,\n abortSignal: AbortSignal,\n options?: { sandbox?: BunShellSandboxOptions },\n): Promise<string[]> {\n const result = await ripGrepWithStatus(args, target, abortSignal, options)\n return result.files\n}\n\nexport async function listAllContentFiles(\n path: string,\n abortSignal: AbortSignal,\n limit: number,\n): Promise<string[]> {\n try {\n d('listAllContentFiles called: %s', path)\n return (await ripGrep(['-l', '.', path], path, abortSignal)).slice(0, limit)\n } catch (e) {\n d('listAllContentFiles failed: %o', e)\n\n logError(e)\n return []\n }\n}\n\nlet alreadyDoneSignCheck = false\nasync function codesignRipgrepIfNecessary(): Promise<void> {\n if (process.platform !== 'darwin' || alreadyDoneSignCheck) {\n return\n }\n\n alreadyDoneSignCheck = true\n\n d('checking if ripgrep is already signed')\n const lines = (\n await execFileNoThrow(\n 'codesign',\n ['-vv', '-d', await getRipgrepPath()],\n undefined,\n undefined,\n false,\n )\n ).stdout.split('\\n')\n\n const needsSigned = lines.find(line => line.includes('linker-signed'))\n if (!needsSigned) {\n d('seems to be already signed')\n return\n }\n\n try {\n d('signing ripgrep')\n const signResult = await execFileNoThrow('codesign', [\n '--sign',\n '-',\n '--force',\n '--preserve-metadata=entitlements,requirements,flags,runtime',\n await getRipgrepPath(),\n ])\n\n if (signResult.code !== 0) {\n d('failed to sign ripgrep: %o', signResult)\n logError(\n `Failed to sign ripgrep: ${signResult.stdout} ${signResult.stderr}`,\n )\n }\n\n d('removing quarantine')\n const quarantineResult = await execFileNoThrow('xattr', [\n '-d',\n 'com.apple.quarantine',\n await getRipgrepPath(),\n ])\n\n if (quarantineResult.code !== 0) {\n d('failed to remove quarantine: %o', quarantineResult)\n logError(\n `Failed to remove quarantine: ${quarantineResult.stdout} ${quarantineResult.stderr}`,\n )\n }\n } catch (e) {\n d('failed during sign: %o', e)\n logError(e)\n }\n}\n\nexport function resetRipgrepPathCacheForTests(): void {\n ;(getRipgrepPath as any).cache?.clear?.()\n alreadyDoneSignCheck = false\n}\n\nexport function filesToTree(\n files: string[],\n cwd: string,\n limit: number = 50,\n): string {\n if (files.length === 0) return ''\n\n const relFiles = files.map(f => {\n if (isAbsolute(f)) return relative(cwd, f)\n return f\n })\n\n // Build Trie\n type Node = { [key: string]: Node }\n const treeRoot: Node = {}\n for (const f of relFiles) {\n const parts = f.split(sep)\n let cur = treeRoot\n for (const p of parts) {\n if (!cur[p]) cur[p] = {}\n cur = cur[p]\n }\n }\n\n // BFS to mark visible nodes\n const visible = new Set<Node>()\n const queue: Node[] = [treeRoot]\n visible.add(treeRoot)\n let visibleCount = 0\n\n while (queue.length > 0) {\n const node = queue.shift()!\n const children = Object.values(node)\n\n // Check if we can add children\n for (const child of children) {\n if (visibleCount < limit) {\n visible.add(child)\n visibleCount++\n queue.push(child)\n } else {\n break\n }\n }\n if (visibleCount >= limit) break\n }\n\n // Render DFS\n let output = ''\n\n function render(node: Node, prefix: string, isLast: boolean, name: string) {\n if (node !== treeRoot) {\n const connector = isLast ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 '\n output += `${prefix}${connector}${name}\\n`\n } else {\n output += `${name}\\n`\n }\n\n const childrenKeys = Object.keys(node).sort()\n const visibleChildren = childrenKeys.filter(k => visible.has(node[k]))\n const hiddenCount = childrenKeys.length - visibleChildren.length\n\n const childPrefix =\n node === treeRoot ? '' : prefix + (isLast ? ' ' : '\u2502 ')\n\n for (let i = 0; i < visibleChildren.length; i++) {\n const key = visibleChildren[i]\n const isChildLast = i === visibleChildren.length - 1 && hiddenCount === 0\n render(node[key], childPrefix, isChildLast, key)\n }\n\n if (hiddenCount > 0) {\n // If we have hidden children, we append truncation info.\n // The connector depends on whether we showed any children.\n // If visibleChildren.length > 0, the last one used \u251C\u2500\u2500, so we use \u2514\u2500\u2500.\n // If visibleChildren.length == 0, we use \u2514\u2500\u2500.\n const connector = '\u2514\u2500\u2500 '\n output += `${childPrefix}${connector}... [${hiddenCount} truncated]\\n`\n }\n }\n\n render(treeRoot, '', true, basename(cwd) || '.')\n return output\n}\n\nexport async function tree(\n cwd: string,\n limit: number = 50,\n abortSignal: AbortSignal,\n): Promise<string> {\n const files = await ripGrep(['--files'], cwd, abortSignal)\n return filesToTree(files, cwd, limit)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["dirname", "files", "buffer", "stderr", "proc"]
|
|
7
|
+
}
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
} from "./chunk-RQVLBMP7.js";
|
|
6
6
|
import {
|
|
7
7
|
debug
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PAW3JPND.js";
|
|
9
9
|
import {
|
|
10
10
|
getCwd,
|
|
11
11
|
getGlobalConfigFilePath,
|
|
12
12
|
getLegacyGlobalConfigFilePath,
|
|
13
13
|
logError
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-FSSXF2YS.js";
|
|
15
15
|
|
|
16
16
|
// src/core/config/schema.ts
|
|
17
17
|
function isAutoUpdaterStatus(value) {
|
|
@@ -688,7 +688,7 @@ function setModelPointer(pointer, modelName) {
|
|
|
688
688
|
}
|
|
689
689
|
};
|
|
690
690
|
saveGlobalConfig(updatedConfig);
|
|
691
|
-
import("./model-
|
|
691
|
+
import("./model-3NZZUFFU.js").then(({ reloadModelManager }) => {
|
|
692
692
|
reloadModelManager();
|
|
693
693
|
});
|
|
694
694
|
}
|
|
@@ -2,13 +2,13 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
MarketplaceManifestSchema
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-IRVS47LS.js";
|
|
6
6
|
import {
|
|
7
7
|
parseFrontmatter
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-35DF6XKC.js";
|
|
9
9
|
import {
|
|
10
10
|
getCwd
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-FSSXF2YS.js";
|
|
12
12
|
|
|
13
13
|
// src/services/plugins/pluginValidation.ts
|
|
14
14
|
import { existsSync, lstatSync, readFileSync } from "node:fs";
|