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.
Files changed (162) hide show
  1. package/dist/REPL-XPMCTX6L.js +49 -0
  2. package/dist/{acp-SMGE3N7N.js → acp-WP36SKSE.js} +30 -30
  3. package/dist/{agentsValidate-FJNQTZ6L.js → agentsValidate-RQL2SLGC.js} +7 -7
  4. package/dist/{ask-2XWNVTSB.js → ask-D3IZ5ZRJ.js} +29 -29
  5. package/dist/{autoUpdater-7PB65YC7.js → autoUpdater-OMUHLOGO.js} +3 -3
  6. package/dist/{chunk-CSP6P6NO.js → chunk-2NGXOHGX.js} +2 -2
  7. package/dist/{chunk-YNDZ73R7.js → chunk-35DF6XKC.js} +2 -2
  8. package/dist/{chunk-3JTP3A2Y.js → chunk-3JJGOOVV.js} +1 -1
  9. package/dist/{chunk-JJSCNIBA.js → chunk-4IZGIKGU.js} +1 -1
  10. package/dist/{chunk-LV4FISWZ.js → chunk-5Z6IMMMW.js} +3 -3
  11. package/dist/{chunk-I72YSEMN.js → chunk-6FUTCMZK.js} +4 -4
  12. package/dist/{chunk-UNDLA4M4.js → chunk-7KPYOLFD.js} +3 -3
  13. package/dist/{chunk-A5255NE3.js → chunk-7VNU2ZKH.js} +1 -1
  14. package/dist/{chunk-67D6QME2.js → chunk-B5AO2OEN.js} +9 -1
  15. package/dist/chunk-B5AO2OEN.js.map +7 -0
  16. package/dist/{chunk-THQLFNKQ.js → chunk-B7YI7BZU.js} +3 -3
  17. package/dist/{chunk-IUXFIASK.js → chunk-BZRGSGVE.js} +3 -3
  18. package/dist/{chunk-YVW2YZZ3.js → chunk-C2LGKJSR.js} +3 -3
  19. package/dist/{chunk-KHSTNHZE.js → chunk-CHTGXWNW.js} +4 -4
  20. package/dist/{chunk-JW3MBSMJ.js → chunk-FNYI3AHB.js} +79 -404
  21. package/dist/chunk-FNYI3AHB.js.map +7 -0
  22. package/dist/{chunk-DRHWOS44.js → chunk-FSSXF2YS.js} +1 -1
  23. package/dist/{chunk-JDMIFTZT.js → chunk-FZAPDUPC.js} +1 -1
  24. package/dist/{chunk-RLD57RVF.js → chunk-GZ3J3MB7.js} +1 -1
  25. package/dist/{chunk-NZPUVS6K.js → chunk-IRVS47LS.js} +1 -1
  26. package/dist/{chunk-5DBEI4U3.js → chunk-KLFTZBHM.js} +2 -2
  27. package/dist/{chunk-4CTXCXJV.js → chunk-KSWPVLIN.js} +2 -2
  28. package/dist/{chunk-FYLGTG5A.js → chunk-KXCSPC5I.js} +4 -4
  29. package/dist/{chunk-YAC4ZESX.js → chunk-L5FMWVFJ.js} +2 -2
  30. package/dist/{chunk-R2BVICE2.js → chunk-LMF7SSDW.js} +1 -1
  31. package/dist/{chunk-HVJRX43N.js → chunk-MNVUFKYB.js} +839 -270
  32. package/dist/chunk-MNVUFKYB.js.map +7 -0
  33. package/dist/{chunk-UAMS53ZK.js → chunk-OM7XZWUN.js} +2 -2
  34. package/dist/{chunk-UIGWD3MR.js → chunk-PAW3JPND.js} +1 -1
  35. package/dist/{chunk-XAABWNGX.js → chunk-U3LLCIIX.js} +4 -4
  36. package/dist/{chunk-5DKBPIUY.js → chunk-UULWYB2S.js} +2 -2
  37. package/dist/{chunk-3WX6M33B.js → chunk-W3Z3A6JG.js} +164 -8
  38. package/dist/chunk-W3Z3A6JG.js.map +7 -0
  39. package/dist/{chunk-5N4LX65G.js → chunk-XUPHN5RT.js} +3 -3
  40. package/dist/{chunk-JQBOODVQ.js → chunk-Z7TKBN4K.js} +3 -3
  41. package/dist/{cli-PTMHC2XV.js → cli-IOYAJ3RP.js} +89 -89
  42. package/dist/commands-XLJTAJDU.js +53 -0
  43. package/dist/{config-MCXPTUSG.js → config-QOBUIJ2T.js} +4 -4
  44. package/dist/{context-ZJZSHKCR.js → context-T72O7CNM.js} +6 -6
  45. package/dist/{conversationTracker-A33U2LAZ.js → conversationTracker-DGV5IOEO.js} +3 -3
  46. package/dist/{customCommands-M7HD5SVI.js → customCommands-TB4PW6BZ.js} +4 -4
  47. package/dist/{env-XWJBXPMS.js → env-EN4O7GDK.js} +2 -2
  48. package/dist/{file-HSVA6LNE.js → file-GOVYPFCU.js} +4 -4
  49. package/dist/index.js +3 -3
  50. package/dist/{llm-UGJYESRH.js → llm-VY6QQH5B.js} +30 -30
  51. package/dist/{llmLazy-QEOEBBKC.js → llmLazy-ZRBSOAI6.js} +1 -1
  52. package/dist/{loader-R2QFYVHX.js → loader-6F76UNRR.js} +4 -4
  53. package/dist/{lsp-YN2SPF7O.js → lsp-RE4N652Z.js} +6 -6
  54. package/dist/{lspAnchor-J4GMFONT.js → lspAnchor-KQ2FF4JY.js} +6 -6
  55. package/dist/{mcp-O625QZ5R.js → mcp-ZE7PLYMD.js} +7 -7
  56. package/dist/{mentionProcessor-UPKZXHO4.js → mentionProcessor-7UT4VG43.js} +5 -5
  57. package/dist/{messages-3EGLQBFT.js → messages-JCHA3R7R.js} +1 -1
  58. package/dist/{model-7P6UKMPN.js → model-3NZZUFFU.js} +5 -5
  59. package/dist/{openai-J43QDBDS.js → openai-5MV5ABZF.js} +5 -5
  60. package/dist/{outputStyles-HANCH32Z.js → outputStyles-2HZOTSRS.js} +4 -4
  61. package/dist/{pluginRuntime-GQDZD5BX.js → pluginRuntime-R57OZ4VU.js} +6 -6
  62. package/dist/{pluginValidation-NMBEAEQW.js → pluginValidation-3BCKLZYR.js} +6 -6
  63. package/dist/prompts-QAJNDKD2.js +55 -0
  64. package/dist/{pybAgentSessionLoad-F67ZDP5H.js → pybAgentSessionLoad-X4LXVK5R.js} +4 -4
  65. package/dist/{pybAgentSessionResume-UC66IPGZ.js → pybAgentSessionResume-U5GJDTHH.js} +4 -4
  66. package/dist/{pybAgentStreamJsonSession-IO42JQAR.js → pybAgentStreamJsonSession-3Z5BYBNJ.js} +1 -1
  67. package/dist/{pybHooks-RTLJ2AV5.js → pybHooks-6272ZZXC.js} +4 -4
  68. package/dist/query-Y66ZKOAY.js +57 -0
  69. package/dist/{registry-4NUGUWGX.js → registry-4E7E4FW7.js} +5 -5
  70. package/dist/{ripgrep-GXECIJXM.js → ripgrep-QSJWXAK7.js} +13 -5
  71. package/dist/{skillMarketplace-VM4XNPW4.js → skillMarketplace-Z3ZMMNEG.js} +3 -3
  72. package/dist/{state-QPNSGH4C.js → state-35W4BKTE.js} +2 -2
  73. package/dist/{theme-ME74IEH2.js → theme-YUI56RAR.js} +5 -5
  74. package/dist/{toolPermissionSettings-4DJ7GGUG.js → toolPermissionSettings-RULNIKWU.js} +6 -6
  75. package/dist/tools-VGH43OZ7.js +54 -0
  76. package/dist/{userInput-BEZBVV52.js → userInput-UNVIW76K.js} +31 -31
  77. package/package.json +9 -1
  78. package/resources/ripgrep/COPYING +3 -0
  79. package/resources/ripgrep/arm64-darwin/rg +0 -0
  80. package/resources/ripgrep/arm64-linux/rg +0 -0
  81. package/resources/ripgrep/manifest.json +32 -0
  82. package/resources/ripgrep/x64-darwin/rg +0 -0
  83. package/resources/ripgrep/x64-linux/rg +0 -0
  84. package/resources/ripgrep/x64-win32/rg.exe +0 -0
  85. package/resources/tree-sitter/manifest.json +14 -0
  86. package/scripts/postinstall.js +23 -0
  87. package/dist/REPL-VRZRANK3.js +0 -49
  88. package/dist/chunk-3WX6M33B.js.map +0 -7
  89. package/dist/chunk-67D6QME2.js.map +0 -7
  90. package/dist/chunk-HVJRX43N.js.map +0 -7
  91. package/dist/chunk-JW3MBSMJ.js.map +0 -7
  92. package/dist/commands-52E2E77C.js +0 -53
  93. package/dist/prompts-OFPZUEBC.js +0 -55
  94. package/dist/query-KHETENT7.js +0 -57
  95. package/dist/tools-7V7X7CNV.js +0 -54
  96. /package/dist/{REPL-VRZRANK3.js.map → REPL-XPMCTX6L.js.map} +0 -0
  97. /package/dist/{acp-SMGE3N7N.js.map → acp-WP36SKSE.js.map} +0 -0
  98. /package/dist/{agentsValidate-FJNQTZ6L.js.map → agentsValidate-RQL2SLGC.js.map} +0 -0
  99. /package/dist/{ask-2XWNVTSB.js.map → ask-D3IZ5ZRJ.js.map} +0 -0
  100. /package/dist/{autoUpdater-7PB65YC7.js.map → autoUpdater-OMUHLOGO.js.map} +0 -0
  101. /package/dist/{chunk-CSP6P6NO.js.map → chunk-2NGXOHGX.js.map} +0 -0
  102. /package/dist/{chunk-YNDZ73R7.js.map → chunk-35DF6XKC.js.map} +0 -0
  103. /package/dist/{chunk-3JTP3A2Y.js.map → chunk-3JJGOOVV.js.map} +0 -0
  104. /package/dist/{chunk-JJSCNIBA.js.map → chunk-4IZGIKGU.js.map} +0 -0
  105. /package/dist/{chunk-LV4FISWZ.js.map → chunk-5Z6IMMMW.js.map} +0 -0
  106. /package/dist/{chunk-I72YSEMN.js.map → chunk-6FUTCMZK.js.map} +0 -0
  107. /package/dist/{chunk-UNDLA4M4.js.map → chunk-7KPYOLFD.js.map} +0 -0
  108. /package/dist/{chunk-A5255NE3.js.map → chunk-7VNU2ZKH.js.map} +0 -0
  109. /package/dist/{chunk-THQLFNKQ.js.map → chunk-B7YI7BZU.js.map} +0 -0
  110. /package/dist/{chunk-IUXFIASK.js.map → chunk-BZRGSGVE.js.map} +0 -0
  111. /package/dist/{chunk-YVW2YZZ3.js.map → chunk-C2LGKJSR.js.map} +0 -0
  112. /package/dist/{chunk-KHSTNHZE.js.map → chunk-CHTGXWNW.js.map} +0 -0
  113. /package/dist/{chunk-DRHWOS44.js.map → chunk-FSSXF2YS.js.map} +0 -0
  114. /package/dist/{chunk-JDMIFTZT.js.map → chunk-FZAPDUPC.js.map} +0 -0
  115. /package/dist/{chunk-RLD57RVF.js.map → chunk-GZ3J3MB7.js.map} +0 -0
  116. /package/dist/{chunk-NZPUVS6K.js.map → chunk-IRVS47LS.js.map} +0 -0
  117. /package/dist/{chunk-5DBEI4U3.js.map → chunk-KLFTZBHM.js.map} +0 -0
  118. /package/dist/{chunk-4CTXCXJV.js.map → chunk-KSWPVLIN.js.map} +0 -0
  119. /package/dist/{chunk-FYLGTG5A.js.map → chunk-KXCSPC5I.js.map} +0 -0
  120. /package/dist/{chunk-YAC4ZESX.js.map → chunk-L5FMWVFJ.js.map} +0 -0
  121. /package/dist/{chunk-R2BVICE2.js.map → chunk-LMF7SSDW.js.map} +0 -0
  122. /package/dist/{chunk-UAMS53ZK.js.map → chunk-OM7XZWUN.js.map} +0 -0
  123. /package/dist/{chunk-UIGWD3MR.js.map → chunk-PAW3JPND.js.map} +0 -0
  124. /package/dist/{chunk-XAABWNGX.js.map → chunk-U3LLCIIX.js.map} +0 -0
  125. /package/dist/{chunk-5DKBPIUY.js.map → chunk-UULWYB2S.js.map} +0 -0
  126. /package/dist/{chunk-5N4LX65G.js.map → chunk-XUPHN5RT.js.map} +0 -0
  127. /package/dist/{chunk-JQBOODVQ.js.map → chunk-Z7TKBN4K.js.map} +0 -0
  128. /package/dist/{cli-PTMHC2XV.js.map → cli-IOYAJ3RP.js.map} +0 -0
  129. /package/dist/{commands-52E2E77C.js.map → commands-XLJTAJDU.js.map} +0 -0
  130. /package/dist/{config-MCXPTUSG.js.map → config-QOBUIJ2T.js.map} +0 -0
  131. /package/dist/{context-ZJZSHKCR.js.map → context-T72O7CNM.js.map} +0 -0
  132. /package/dist/{conversationTracker-A33U2LAZ.js.map → conversationTracker-DGV5IOEO.js.map} +0 -0
  133. /package/dist/{customCommands-M7HD5SVI.js.map → customCommands-TB4PW6BZ.js.map} +0 -0
  134. /package/dist/{env-XWJBXPMS.js.map → env-EN4O7GDK.js.map} +0 -0
  135. /package/dist/{file-HSVA6LNE.js.map → file-GOVYPFCU.js.map} +0 -0
  136. /package/dist/{llm-UGJYESRH.js.map → llm-VY6QQH5B.js.map} +0 -0
  137. /package/dist/{llmLazy-QEOEBBKC.js.map → llmLazy-ZRBSOAI6.js.map} +0 -0
  138. /package/dist/{loader-R2QFYVHX.js.map → loader-6F76UNRR.js.map} +0 -0
  139. /package/dist/{lsp-YN2SPF7O.js.map → lsp-RE4N652Z.js.map} +0 -0
  140. /package/dist/{lspAnchor-J4GMFONT.js.map → lspAnchor-KQ2FF4JY.js.map} +0 -0
  141. /package/dist/{mcp-O625QZ5R.js.map → mcp-ZE7PLYMD.js.map} +0 -0
  142. /package/dist/{mentionProcessor-UPKZXHO4.js.map → mentionProcessor-7UT4VG43.js.map} +0 -0
  143. /package/dist/{messages-3EGLQBFT.js.map → messages-JCHA3R7R.js.map} +0 -0
  144. /package/dist/{model-7P6UKMPN.js.map → model-3NZZUFFU.js.map} +0 -0
  145. /package/dist/{openai-J43QDBDS.js.map → openai-5MV5ABZF.js.map} +0 -0
  146. /package/dist/{outputStyles-HANCH32Z.js.map → outputStyles-2HZOTSRS.js.map} +0 -0
  147. /package/dist/{pluginRuntime-GQDZD5BX.js.map → pluginRuntime-R57OZ4VU.js.map} +0 -0
  148. /package/dist/{pluginValidation-NMBEAEQW.js.map → pluginValidation-3BCKLZYR.js.map} +0 -0
  149. /package/dist/{prompts-OFPZUEBC.js.map → prompts-QAJNDKD2.js.map} +0 -0
  150. /package/dist/{pybAgentSessionLoad-F67ZDP5H.js.map → pybAgentSessionLoad-X4LXVK5R.js.map} +0 -0
  151. /package/dist/{pybAgentSessionResume-UC66IPGZ.js.map → pybAgentSessionResume-U5GJDTHH.js.map} +0 -0
  152. /package/dist/{pybAgentStreamJsonSession-IO42JQAR.js.map → pybAgentStreamJsonSession-3Z5BYBNJ.js.map} +0 -0
  153. /package/dist/{pybHooks-RTLJ2AV5.js.map → pybHooks-6272ZZXC.js.map} +0 -0
  154. /package/dist/{query-KHETENT7.js.map → query-Y66ZKOAY.js.map} +0 -0
  155. /package/dist/{registry-4NUGUWGX.js.map → registry-4E7E4FW7.js.map} +0 -0
  156. /package/dist/{ripgrep-GXECIJXM.js.map → ripgrep-QSJWXAK7.js.map} +0 -0
  157. /package/dist/{skillMarketplace-VM4XNPW4.js.map → skillMarketplace-Z3ZMMNEG.js.map} +0 -0
  158. /package/dist/{state-QPNSGH4C.js.map → state-35W4BKTE.js.map} +0 -0
  159. /package/dist/{theme-ME74IEH2.js.map → theme-YUI56RAR.js.map} +0 -0
  160. /package/dist/{toolPermissionSettings-4DJ7GGUG.js.map → toolPermissionSettings-RULNIKWU.js.map} +0 -0
  161. /package/dist/{tools-7V7X7CNV.js.map → tools-VGH43OZ7.js.map} +0 -0
  162. /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-3WX6M33B.js";
5
+ } from "./chunk-W3Z3A6JG.js";
6
6
  import {
7
7
  getCwd,
8
8
  logError
9
- } from "./chunk-DRHWOS44.js";
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
  import {
4
4
  SESSION_ID,
5
5
  resolveXdgCachePath
6
- } from "./chunk-DRHWOS44.js";
6
+ } from "./chunk-FSSXF2YS.js";
7
7
 
8
8
  // src/utils/log/debugLogger.ts
9
9
  import { existsSync, mkdirSync, appendFileSync } from "fs";
@@ -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-UGJYESRH.js");
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-UGJYESRH.js");
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-UGJYESRH.js");
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-UGJYESRH.js");
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-5N4LX65G.js";
9
+ } from "./chunk-XUPHN5RT.js";
10
10
  import {
11
11
  debug,
12
12
  getCurrentRequest,
13
13
  logAPIError
14
- } from "./chunk-UIGWD3MR.js";
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-DRHWOS44.js";
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)) return 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 preferBundled = isTruthyEnv(process.env.USE_BUILTIN_RIPGREP);
209
- if (!preferBundled) {
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
- const cached = await ensureCachedRipgrep();
217
- d("Using cached ripgrep: %s", cached);
218
- return cached;
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-UIGWD3MR.js";
8
+ } from "./chunk-PAW3JPND.js";
9
9
  import {
10
10
  getCwd,
11
11
  getGlobalConfigFilePath,
12
12
  getLegacyGlobalConfigFilePath,
13
13
  logError
14
- } from "./chunk-DRHWOS44.js";
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-7P6UKMPN.js").then(({ reloadModelManager }) => {
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-NZPUVS6K.js";
5
+ } from "./chunk-IRVS47LS.js";
6
6
  import {
7
7
  parseFrontmatter
8
- } from "./chunk-YNDZ73R7.js";
8
+ } from "./chunk-35DF6XKC.js";
9
9
  import {
10
10
  getCwd
11
- } from "./chunk-DRHWOS44.js";
11
+ } from "./chunk-FSSXF2YS.js";
12
12
 
13
13
  // src/services/plugins/pluginValidation.ts
14
14
  import { existsSync, lstatSync, readFileSync } from "node:fs";