pybao-cli 1.4.27 → 1.4.29

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 (146) hide show
  1. package/dist/REPL-CKBYHDK3.js +47 -0
  2. package/dist/{acp-NNI4HVLX.js → acp-N75DTAIV.js} +29 -29
  3. package/dist/{agentsValidate-54IQO7GG.js → agentsValidate-VWJH3H3U.js} +7 -7
  4. package/dist/{ask-2MCI6N5B.js → ask-I4KTE43M.js} +28 -28
  5. package/dist/{autoUpdater-5FE4HSWC.js → autoUpdater-7HYOD2BT.js} +3 -3
  6. package/dist/{chunk-5L3ARDVS.js → chunk-27BQKSDM.js} +2 -2
  7. package/dist/{chunk-KOMJCJ4D.js → chunk-4O4C7OKR.js} +1 -1
  8. package/dist/{chunk-2ROHFSTR.js → chunk-4U65JT46.js} +3 -3
  9. package/dist/{chunk-CM4URADW.js → chunk-5KXIU35T.js} +1 -1
  10. package/dist/{chunk-BGF4W5W6.js → chunk-5W757UCV.js} +2 -2
  11. package/dist/{chunk-5ECWBTEN.js → chunk-6CZ6UNIO.js} +3 -3
  12. package/dist/{chunk-WDUQZ5JN.js → chunk-A7QUTDP5.js} +3 -3
  13. package/dist/{chunk-JGLQ7WFP.js → chunk-AOYXI755.js} +2 -2
  14. package/dist/{chunk-KFQXCTMP.js → chunk-D24WQYDQ.js} +1 -1
  15. package/dist/{chunk-3QVMMVBR.js → chunk-EVNLZXJ4.js} +1 -1
  16. package/dist/{chunk-HOQRRLIY.js → chunk-EXPUK6E3.js} +1 -1
  17. package/dist/{chunk-7J2VUSTU.js → chunk-FGQMSQUH.js} +2 -2
  18. package/dist/{chunk-DMARM5KQ.js → chunk-GCS5LV5W.js} +2 -2
  19. package/dist/{chunk-JGJ76XUO.js → chunk-GEXZOUS6.js} +1 -1
  20. package/dist/{chunk-355UILXX.js → chunk-HWF6D4H6.js} +3 -3
  21. package/dist/{chunk-6UXXOPX4.js → chunk-HWTYAVXS.js} +2 -2
  22. package/dist/{chunk-UOPELSQO.js → chunk-ICVVWNHE.js} +60 -40
  23. package/dist/{chunk-UOPELSQO.js.map → chunk-ICVVWNHE.js.map} +2 -2
  24. package/dist/{chunk-QA4EWB66.js → chunk-JRD3OTYR.js} +13 -5
  25. package/dist/chunk-JRD3OTYR.js.map +7 -0
  26. package/dist/{chunk-CC3KGKTT.js → chunk-M2VDOLUT.js} +2 -2
  27. package/dist/{chunk-I66GIBKG.js → chunk-MMG23SWX.js} +3 -3
  28. package/dist/{chunk-LUIB4PY2.js → chunk-MUJWH4JZ.js} +16 -16
  29. package/dist/{chunk-W55ADXHF.js → chunk-NYHIJQJX.js} +4 -4
  30. package/dist/{chunk-KAKZTDPU.js → chunk-O2ADQYIA.js} +1 -1
  31. package/dist/{chunk-KAKZTDPU.js.map → chunk-O2ADQYIA.js.map} +1 -1
  32. package/dist/{chunk-DG2RH364.js → chunk-QEQNZOZO.js} +9 -1
  33. package/dist/{chunk-DG2RH364.js.map → chunk-QEQNZOZO.js.map} +2 -2
  34. package/dist/{chunk-62WLN2YP.js → chunk-U2ABHLKU.js} +1 -1
  35. package/dist/{chunk-MISYR6PB.js → chunk-W3ATDMY7.js} +3 -3
  36. package/dist/{chunk-GHEIYY4G.js → chunk-WHLMRUUT.js} +4 -4
  37. package/dist/{chunk-4TGSJU6E.js → chunk-YM7J5GEO.js} +3 -3
  38. package/dist/{chunk-RTNHI5RE.js → chunk-Z7LVK2X3.js} +1 -1
  39. package/dist/{chunk-TAIA77SV.js → chunk-ZPXFENPY.js} +4 -4
  40. package/dist/{cli-FKQWMAB5.js → cli-PQPQODFU.js} +87 -87
  41. package/dist/commands-AYSI2F5P.js +51 -0
  42. package/dist/{config-T5UDL4KT.js → config-IXA7AFRU.js} +4 -4
  43. package/dist/{context-CILXFQL4.js → context-TLUDE4J4.js} +6 -6
  44. package/dist/{customCommands-HASOMTWM.js → customCommands-PEAA3TWU.js} +4 -4
  45. package/dist/{env-IGLKIBTH.js → env-5RVJS4UF.js} +4 -2
  46. package/dist/{file-AIE26E73.js → file-EW7TWPAL.js} +4 -4
  47. package/dist/index.js +3 -3
  48. package/dist/{llm-AGMBZ7QN.js → llm-COKXNZGA.js} +29 -29
  49. package/dist/{llmLazy-45ESL6DI.js → llmLazy-EAPF27MH.js} +1 -1
  50. package/dist/{loader-TEW67UY2.js → loader-GMGIS4OB.js} +4 -4
  51. package/dist/{lsp-N647675R.js → lsp-QY4Z5MCU.js} +6 -6
  52. package/dist/{lspAnchor-4OBXUA56.js → lspAnchor-YLB5JPH6.js} +6 -6
  53. package/dist/{mcp-AHPAG3DJ.js → mcp-Y4EGO3AH.js} +7 -7
  54. package/dist/{mentionProcessor-INSGZLAI.js → mentionProcessor-4B7UW53K.js} +5 -5
  55. package/dist/{messages-72V4KIJG.js → messages-6CJHDRQL.js} +1 -1
  56. package/dist/{model-34ZHETZL.js → model-MH3HRXJ7.js} +5 -5
  57. package/dist/{openai-QGGNMKBA.js → openai-WBPVC4E2.js} +5 -5
  58. package/dist/{outputStyles-CEEQJEMV.js → outputStyles-2HRG5RUL.js} +4 -4
  59. package/dist/{pluginRuntime-2MOZK3KW.js → pluginRuntime-PYE32UNF.js} +6 -6
  60. package/dist/{pluginValidation-G7Z4GXLI.js → pluginValidation-LY64HJ2N.js} +6 -6
  61. package/dist/prompts-OB7MYIEG.js +53 -0
  62. package/dist/{pybAgentSessionLoad-C5IYRNIJ.js → pybAgentSessionLoad-SRMOUOYX.js} +4 -4
  63. package/dist/{pybAgentSessionResume-HVXEOMEZ.js → pybAgentSessionResume-GBAF22CZ.js} +4 -4
  64. package/dist/{pybAgentStreamJsonSession-NRRO6CLR.js → pybAgentStreamJsonSession-EGFG3K6P.js} +1 -1
  65. package/dist/{pybHooks-P72AHDTH.js → pybHooks-WYFPM6VD.js} +4 -4
  66. package/dist/query-654ZTH3Z.js +55 -0
  67. package/dist/{registry-NP3M3ZD4.js → registry-N6XLX7M4.js} +5 -5
  68. package/dist/{ripgrep-RYH45M5I.js → ripgrep-TEUYP2Y5.js} +3 -3
  69. package/dist/{skillMarketplace-GRTLI7FP.js → skillMarketplace-D7QIQ2EL.js} +3 -3
  70. package/dist/{state-LCDP6BGJ.js → state-N6Q3VHEA.js} +2 -2
  71. package/dist/{theme-4QXAWX7A.js → theme-YOJ4DXC2.js} +5 -5
  72. package/dist/{toolPermissionSettings-QT2IMWPC.js → toolPermissionSettings-ZIDTVUGB.js} +6 -6
  73. package/dist/tools-TYCJ6NHP.js +52 -0
  74. package/dist/{userInput-D64FK76X.js → userInput-HHY7VY5X.js} +30 -30
  75. package/package.json +1 -1
  76. package/dist/REPL-CFM3DD5T.js +0 -47
  77. package/dist/chunk-QA4EWB66.js.map +0 -7
  78. package/dist/commands-PMEJTOPE.js +0 -51
  79. package/dist/prompts-UZKMMFKF.js +0 -53
  80. package/dist/query-GSPSO3LE.js +0 -55
  81. package/dist/tools-VKNN642P.js +0 -52
  82. /package/dist/{REPL-CFM3DD5T.js.map → REPL-CKBYHDK3.js.map} +0 -0
  83. /package/dist/{acp-NNI4HVLX.js.map → acp-N75DTAIV.js.map} +0 -0
  84. /package/dist/{agentsValidate-54IQO7GG.js.map → agentsValidate-VWJH3H3U.js.map} +0 -0
  85. /package/dist/{ask-2MCI6N5B.js.map → ask-I4KTE43M.js.map} +0 -0
  86. /package/dist/{autoUpdater-5FE4HSWC.js.map → autoUpdater-7HYOD2BT.js.map} +0 -0
  87. /package/dist/{chunk-5L3ARDVS.js.map → chunk-27BQKSDM.js.map} +0 -0
  88. /package/dist/{chunk-KOMJCJ4D.js.map → chunk-4O4C7OKR.js.map} +0 -0
  89. /package/dist/{chunk-2ROHFSTR.js.map → chunk-4U65JT46.js.map} +0 -0
  90. /package/dist/{chunk-CM4URADW.js.map → chunk-5KXIU35T.js.map} +0 -0
  91. /package/dist/{chunk-BGF4W5W6.js.map → chunk-5W757UCV.js.map} +0 -0
  92. /package/dist/{chunk-5ECWBTEN.js.map → chunk-6CZ6UNIO.js.map} +0 -0
  93. /package/dist/{chunk-WDUQZ5JN.js.map → chunk-A7QUTDP5.js.map} +0 -0
  94. /package/dist/{chunk-JGLQ7WFP.js.map → chunk-AOYXI755.js.map} +0 -0
  95. /package/dist/{chunk-KFQXCTMP.js.map → chunk-D24WQYDQ.js.map} +0 -0
  96. /package/dist/{chunk-3QVMMVBR.js.map → chunk-EVNLZXJ4.js.map} +0 -0
  97. /package/dist/{chunk-HOQRRLIY.js.map → chunk-EXPUK6E3.js.map} +0 -0
  98. /package/dist/{chunk-7J2VUSTU.js.map → chunk-FGQMSQUH.js.map} +0 -0
  99. /package/dist/{chunk-DMARM5KQ.js.map → chunk-GCS5LV5W.js.map} +0 -0
  100. /package/dist/{chunk-JGJ76XUO.js.map → chunk-GEXZOUS6.js.map} +0 -0
  101. /package/dist/{chunk-355UILXX.js.map → chunk-HWF6D4H6.js.map} +0 -0
  102. /package/dist/{chunk-6UXXOPX4.js.map → chunk-HWTYAVXS.js.map} +0 -0
  103. /package/dist/{chunk-CC3KGKTT.js.map → chunk-M2VDOLUT.js.map} +0 -0
  104. /package/dist/{chunk-I66GIBKG.js.map → chunk-MMG23SWX.js.map} +0 -0
  105. /package/dist/{chunk-LUIB4PY2.js.map → chunk-MUJWH4JZ.js.map} +0 -0
  106. /package/dist/{chunk-W55ADXHF.js.map → chunk-NYHIJQJX.js.map} +0 -0
  107. /package/dist/{chunk-62WLN2YP.js.map → chunk-U2ABHLKU.js.map} +0 -0
  108. /package/dist/{chunk-MISYR6PB.js.map → chunk-W3ATDMY7.js.map} +0 -0
  109. /package/dist/{chunk-GHEIYY4G.js.map → chunk-WHLMRUUT.js.map} +0 -0
  110. /package/dist/{chunk-4TGSJU6E.js.map → chunk-YM7J5GEO.js.map} +0 -0
  111. /package/dist/{chunk-RTNHI5RE.js.map → chunk-Z7LVK2X3.js.map} +0 -0
  112. /package/dist/{chunk-TAIA77SV.js.map → chunk-ZPXFENPY.js.map} +0 -0
  113. /package/dist/{cli-FKQWMAB5.js.map → cli-PQPQODFU.js.map} +0 -0
  114. /package/dist/{commands-PMEJTOPE.js.map → commands-AYSI2F5P.js.map} +0 -0
  115. /package/dist/{config-T5UDL4KT.js.map → config-IXA7AFRU.js.map} +0 -0
  116. /package/dist/{context-CILXFQL4.js.map → context-TLUDE4J4.js.map} +0 -0
  117. /package/dist/{customCommands-HASOMTWM.js.map → customCommands-PEAA3TWU.js.map} +0 -0
  118. /package/dist/{env-IGLKIBTH.js.map → env-5RVJS4UF.js.map} +0 -0
  119. /package/dist/{file-AIE26E73.js.map → file-EW7TWPAL.js.map} +0 -0
  120. /package/dist/{llm-AGMBZ7QN.js.map → llm-COKXNZGA.js.map} +0 -0
  121. /package/dist/{llmLazy-45ESL6DI.js.map → llmLazy-EAPF27MH.js.map} +0 -0
  122. /package/dist/{loader-TEW67UY2.js.map → loader-GMGIS4OB.js.map} +0 -0
  123. /package/dist/{lsp-N647675R.js.map → lsp-QY4Z5MCU.js.map} +0 -0
  124. /package/dist/{lspAnchor-4OBXUA56.js.map → lspAnchor-YLB5JPH6.js.map} +0 -0
  125. /package/dist/{mcp-AHPAG3DJ.js.map → mcp-Y4EGO3AH.js.map} +0 -0
  126. /package/dist/{mentionProcessor-INSGZLAI.js.map → mentionProcessor-4B7UW53K.js.map} +0 -0
  127. /package/dist/{messages-72V4KIJG.js.map → messages-6CJHDRQL.js.map} +0 -0
  128. /package/dist/{model-34ZHETZL.js.map → model-MH3HRXJ7.js.map} +0 -0
  129. /package/dist/{openai-QGGNMKBA.js.map → openai-WBPVC4E2.js.map} +0 -0
  130. /package/dist/{outputStyles-CEEQJEMV.js.map → outputStyles-2HRG5RUL.js.map} +0 -0
  131. /package/dist/{pluginRuntime-2MOZK3KW.js.map → pluginRuntime-PYE32UNF.js.map} +0 -0
  132. /package/dist/{pluginValidation-G7Z4GXLI.js.map → pluginValidation-LY64HJ2N.js.map} +0 -0
  133. /package/dist/{prompts-UZKMMFKF.js.map → prompts-OB7MYIEG.js.map} +0 -0
  134. /package/dist/{pybAgentSessionLoad-C5IYRNIJ.js.map → pybAgentSessionLoad-SRMOUOYX.js.map} +0 -0
  135. /package/dist/{pybAgentSessionResume-HVXEOMEZ.js.map → pybAgentSessionResume-GBAF22CZ.js.map} +0 -0
  136. /package/dist/{pybAgentStreamJsonSession-NRRO6CLR.js.map → pybAgentStreamJsonSession-EGFG3K6P.js.map} +0 -0
  137. /package/dist/{pybHooks-P72AHDTH.js.map → pybHooks-WYFPM6VD.js.map} +0 -0
  138. /package/dist/{query-GSPSO3LE.js.map → query-654ZTH3Z.js.map} +0 -0
  139. /package/dist/{registry-NP3M3ZD4.js.map → registry-N6XLX7M4.js.map} +0 -0
  140. /package/dist/{ripgrep-RYH45M5I.js.map → ripgrep-TEUYP2Y5.js.map} +0 -0
  141. /package/dist/{skillMarketplace-GRTLI7FP.js.map → skillMarketplace-D7QIQ2EL.js.map} +0 -0
  142. /package/dist/{state-LCDP6BGJ.js.map → state-N6Q3VHEA.js.map} +0 -0
  143. /package/dist/{theme-4QXAWX7A.js.map → theme-YOJ4DXC2.js.map} +0 -0
  144. /package/dist/{toolPermissionSettings-QT2IMWPC.js.map → toolPermissionSettings-ZIDTVUGB.js.map} +0 -0
  145. /package/dist/{tools-VKNN642P.js.map → tools-TYCJ6NHP.js.map} +0 -0
  146. /package/dist/{userInput-D64FK76X.js.map → userInput-HHY7VY5X.js.map} +0 -0
@@ -2,23 +2,24 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  ripGrepWithStatus
5
- } from "./chunk-KFQXCTMP.js";
5
+ } from "./chunk-D24WQYDQ.js";
6
6
  import {
7
7
  getCurrentProjectConfig,
8
8
  getGlobalConfig,
9
9
  getOrCreateUserID,
10
10
  saveCurrentProjectConfig
11
- } from "./chunk-MISYR6PB.js";
11
+ } from "./chunk-W3ATDMY7.js";
12
12
  import {
13
13
  SESSION_ID,
14
14
  env,
15
15
  execFileNoThrow,
16
16
  getCwd,
17
+ isContextScanDisabled,
17
18
  logError
18
- } from "./chunk-DG2RH364.js";
19
+ } from "./chunk-QEQNZOZO.js";
19
20
  import {
20
21
  MACRO
21
- } from "./chunk-KAKZTDPU.js";
22
+ } from "./chunk-O2ADQYIA.js";
22
23
  import {
23
24
  __require
24
25
  } from "./chunk-I3J4JYES.js";
@@ -364,6 +365,9 @@ function getProjectRules(cwd) {
364
365
  import { minimatch as minimatch2 } from "minimatch";
365
366
  async function getInstructionFilesNote() {
366
367
  try {
368
+ if (isContextScanDisabled()) {
369
+ return null;
370
+ }
367
371
  const cwd = getCwd();
368
372
  const instructionFiles = getProjectInstructionFiles(cwd);
369
373
  const legacyPath = join3(cwd, "CLAUDE.md");
@@ -537,7 +541,7 @@ var getContext = memoize4(
537
541
  async () => {
538
542
  const codeStyle = getCodeStyle();
539
543
  const projectConfig = getCurrentProjectConfig();
540
- const dontCrawl = projectConfig.dontCrawlDirectory;
544
+ const dontCrawl = projectConfig.dontCrawlDirectory || isContextScanDisabled();
541
545
  const [
542
546
  gitStatus,
543
547
  directoryStructure,
@@ -564,6 +568,9 @@ var getContext = memoize4(
564
568
  );
565
569
  var getDirectoryStructure = memoize4(
566
570
  async function() {
571
+ if (isContextScanDisabled()) {
572
+ return "";
573
+ }
567
574
  let lines;
568
575
  try {
569
576
  lines = buildDirectoryStructure();
@@ -625,6 +632,7 @@ async function getWorkingDirectoryStructureStats() {
625
632
  return computeWorkingDirectoryStructureStats();
626
633
  }
627
634
  async function getProjectStructureStatisticsBlock() {
635
+ if (isContextScanDisabled()) return "";
628
636
  const stats = await getWorkingDirectoryStructureStats();
629
637
  if (!stats) return "";
630
638
  const statsLine = `\u5F53\u524D\u9879\u76EE\u7EDF\u8BA1\u4FE1\u606F: \u9876\u5C42\u76EE\u5F55\u6570\uFF1A${stats.topLevelDirectoryCount}\u4E2A\uFF0C\u9876\u5C42\u6587\u4EF6\u6570\uFF1A${stats.topLevelFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55\u6570\uFF1A${stats.totalDirectoryCount}\u4E2A\uFF0C\u603B\u6587\u4EF6\u6570\uFF1A${stats.totalFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B=${stats.directoryFileRatio}\uFF0C\u6700\u6DF1\u76EE\u5F55\u5C42\u7EA7=${stats.maxDepth}\u3002\uFF08\u7EDF\u8BA1\u6570\u636E\u4E0D\u5305\u542B\u7A7A\u76EE\u5F55\u4EE5\u53CA\u5E38\u89C1\u975E\u6838\u5FC3\u76EE\u5F55/\u6784\u5EFA\u4EA7\u7269/\u4F9D\u8D56\u7F13\u5B58\u7B49\u6587\u4EF6\u6216\u76EE\u5F55\uFF09`;
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/config/style.ts", "../src/utils/config/projectInstructions.ts", "../src/context/index.ts", "../src/utils/system/git.ts", "../src/utils/identity/user.ts", "../src/utils/config/rules.ts"],
4
+ "sourcesContent": ["import { readFileSync } from 'fs'\nimport { memoize } from 'lodash-es'\nimport { getCwd } from '@utils/state'\nimport { getProjectInstructionFiles } from './projectInstructions'\n\nconst STYLE_PROMPT =\n 'The codebase follows strict style guidelines shown below. All code changes must strictly adhere to these guidelines to maintain consistency and quality.'\n\nexport const getCodeStyle = memoize((): string => {\n const styles: string[] = []\n\n const instructionFiles = getProjectInstructionFiles(getCwd())\n for (const file of instructionFiles) {\n try {\n styles.push(\n `Contents of ${file.absolutePath}:\\n\\n${readFileSync(file.absolutePath, 'utf-8')}`,\n )\n } catch {\n }\n }\n\n if (styles.length === 0) {\n return ''\n }\n\n return `${STYLE_PROMPT}\\n\\n${styles.join('\\n\\n')}`\n})\n", "import { existsSync, readFileSync } from 'fs'\nimport { dirname, join, parse, relative, resolve, sep } from 'path'\n\nexport type ProjectInstructionFile = {\n absolutePath: string\n relativePathFromGitRoot: string\n filename: 'AGENTS.override.md' | 'AGENTS.md'\n}\n\nconst DEFAULT_PROJECT_DOC_MAX_BYTES = 32 * 1024\n\nfunction isRegularFile(path: string): boolean {\n try {\n return existsSync(path)\n } catch {\n return false\n }\n}\n\nexport function findGitRoot(startDir: string): string | null {\n let currentDir = resolve(startDir)\n const fsRoot = parse(currentDir).root\n\n while (true) {\n const dotGitPath = join(currentDir, '.git')\n if (existsSync(dotGitPath)) {\n return currentDir\n }\n if (currentDir === fsRoot) {\n return null\n }\n currentDir = dirname(currentDir)\n }\n}\n\nexport function getDirsFromGitRootToCwd(gitRoot: string, cwd: string): string[] {\n const absoluteGitRoot = resolve(gitRoot)\n const absoluteCwd = resolve(cwd)\n\n const rel = relative(absoluteGitRoot, absoluteCwd)\n if (!rel || rel === '.') {\n return [absoluteGitRoot]\n }\n\n const parts = rel.split(sep).filter(Boolean)\n const dirs: string[] = [absoluteGitRoot]\n for (let i = 0; i < parts.length; i++) {\n dirs.push(join(absoluteGitRoot, ...parts.slice(0, i + 1)))\n }\n return dirs\n}\n\nexport function getProjectInstructionFiles(\n cwd: string,\n): ProjectInstructionFile[] {\n const gitRoot = findGitRoot(cwd)\n const root = gitRoot ?? resolve(cwd)\n const dirs = getDirsFromGitRootToCwd(root, cwd)\n\n const results: ProjectInstructionFile[] = []\n for (const dir of dirs) {\n const overridePath = join(dir, 'AGENTS.override.md')\n const agentsPath = join(dir, 'AGENTS.md')\n\n if (isRegularFile(overridePath)) {\n results.push({\n absolutePath: overridePath,\n relativePathFromGitRoot:\n relative(root, overridePath) || 'AGENTS.override.md',\n filename: 'AGENTS.override.md',\n })\n continue\n }\n\n if (isRegularFile(agentsPath)) {\n results.push({\n absolutePath: agentsPath,\n relativePathFromGitRoot: relative(root, agentsPath) || 'AGENTS.md',\n filename: 'AGENTS.md',\n })\n }\n }\n\n return results\n}\n\nexport function getProjectDocMaxBytes(): number {\n const raw = process.env.PYB_PROJECT_DOC_MAX_BYTES\n if (!raw) return DEFAULT_PROJECT_DOC_MAX_BYTES\n const parsed = Number.parseInt(raw, 10)\n if (!Number.isFinite(parsed) || parsed <= 0)\n return DEFAULT_PROJECT_DOC_MAX_BYTES\n return parsed\n}\n\nexport function readAndConcatProjectInstructionFiles(\n files: ProjectInstructionFile[],\n {\n maxBytes = getProjectDocMaxBytes(),\n includeHeadings = true,\n }: { maxBytes?: number; includeHeadings?: boolean } = {},\n): { content: string; truncated: boolean } {\n let totalBytes = 0\n let truncated = false\n\n const parts: string[] = []\n\n const truncateUtf8ToBytes = (value: string, bytes: number): string => {\n const buf = Buffer.from(value, 'utf8')\n if (buf.length <= bytes) return value\n return buf.subarray(0, Math.max(0, bytes)).toString('utf8')\n }\n\n for (const file of files) {\n if (totalBytes >= maxBytes) {\n truncated = true\n break\n }\n\n let raw: string\n try {\n raw = readFileSync(file.absolutePath, 'utf-8')\n } catch {\n continue\n }\n\n if (!raw.trim()) continue\n\n const separator = parts.length > 0 ? '\\n\\n' : ''\n const separatorBytes = Buffer.byteLength(separator, 'utf8')\n const remainingAfterSeparator = maxBytes - totalBytes - separatorBytes\n if (remainingAfterSeparator <= 0) {\n truncated = true\n break\n }\n\n const heading = includeHeadings\n ? `# ${file.filename}\\n\\n_Path: ${file.relativePathFromGitRoot}_\\n\\n`\n : ''\n\n const block = `${heading}${raw}`.trimEnd()\n const blockBytes = Buffer.byteLength(block, 'utf8')\n\n if (blockBytes <= remainingAfterSeparator) {\n parts.push(`${separator}${block}`)\n totalBytes += separatorBytes + blockBytes\n continue\n }\n\n truncated = true\n const suffix = `\\n\\n... (truncated: project instruction files exceeded ${maxBytes} bytes)`\n const suffixBytes = Buffer.byteLength(suffix, 'utf8')\n\n let finalBlock = ''\n if (suffixBytes >= remainingAfterSeparator) {\n finalBlock = truncateUtf8ToBytes(suffix, remainingAfterSeparator)\n } else {\n const prefixBudget = remainingAfterSeparator - suffixBytes\n const prefix = truncateUtf8ToBytes(block, prefixBudget)\n finalBlock = `${prefix}${suffix}`\n }\n\n parts.push(`${separator}${finalBlock}`)\n totalBytes += separatorBytes + Buffer.byteLength(finalBlock, 'utf8')\n break\n }\n\n return { content: parts.join(''), truncated }\n}\n", "import {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\nimport { logError } from '@utils/log'\nimport { getCodeStyle } from '@utils/config/style'\nimport { isContextScanDisabled } from '@utils/config/env'\nimport { getCwd } from '@utils/state'\nimport { memoize, omit } from 'lodash-es'\nimport { getIsGit } from '@utils/system/git'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport { isAbsolute, join, relative, resolve, sep } from 'path'\nimport { readFile } from 'fs/promises'\nimport { existsSync, readdirSync } from 'fs'\nimport { getModelManager } from '@utils/model'\nimport { lastX } from '@utils/text/generators'\nimport { getGitEmail } from '@utils/identity/user'\nimport {\n getProjectInstructionFiles,\n readAndConcatProjectInstructionFiles,\n} from '@utils/config/projectInstructions'\nimport { getProjectRules } from '@utils/config/rules'\nimport { ripGrepWithStatus } from '@utils/system/ripgrep'\nimport { minimatch } from 'minimatch'\n\nexport async function getInstructionFilesNote(): Promise<string | null> {\n try {\n if (isContextScanDisabled()) {\n return null\n }\n const cwd = getCwd()\n const instructionFiles = getProjectInstructionFiles(cwd)\n const legacyPath = join(cwd, 'CLAUDE.md')\n const hasLegacy = existsSync(legacyPath)\n\n if (instructionFiles.length === 0 && !hasLegacy) {\n return null\n }\n\n const fileTypes = new Set<string>()\n for (const f of instructionFiles) fileTypes.add(f.filename)\n if (hasLegacy) fileTypes.add('CLAUDE.md (legacy)')\n\n const allFiles = [\n ...instructionFiles.map(f => f.absolutePath),\n ...(hasLegacy ? [legacyPath] : []),\n ]\n\n return `NOTE: Additional project instruction files (${Array.from(fileTypes).join(', ')}) were found. When working in these directories, make sure to read and follow the instructions in the corresponding files:\\n${allFiles\n .map(_ => `- ${_}`)\n .join('\\n')}`\n } catch (error) {\n logError(error)\n return null\n }\n}\n\nexport function setContext(key: string, value: string): void {\n const projectConfig = getCurrentProjectConfig()\n const context = omit(\n { ...projectConfig.context, [key]: value },\n 'codeStyle',\n 'directoryStructure',\n )\n saveCurrentProjectConfig({ ...projectConfig, context })\n}\n\nexport function removeContext(key: string): void {\n const projectConfig = getCurrentProjectConfig()\n const context = omit(\n projectConfig.context,\n key,\n 'codeStyle',\n 'directoryStructure',\n )\n saveCurrentProjectConfig({ ...projectConfig, context })\n}\n\nexport const getReadme = memoize(async (): Promise<string | null> => {\n try {\n const readmePath = join(getCwd(), 'README.md')\n if (!existsSync(readmePath)) {\n return null\n }\n const content = await readFile(readmePath, 'utf-8')\n return content\n } catch (e) {\n logError(e)\n return null\n }\n})\n\nexport async function getProjectDocsForCwd(\n cwd: string,\n): Promise<string | null> {\n try {\n const instructionFiles = getProjectInstructionFiles(cwd)\n const legacyPath = join(cwd, 'CLAUDE.md')\n\n const docs = []\n\n if (instructionFiles.length > 0) {\n const { content } = readAndConcatProjectInstructionFiles(\n instructionFiles,\n { includeHeadings: true },\n )\n if (content.trim().length > 0) docs.push(content)\n }\n\n const rules = getProjectRules(cwd)\n if (rules.length > 0) {\n const formattedRules = `\n# Project Rules (MANDATORY)\nThe following content represents the immutable rules for this project.\n<project_rules>\n${rules.join('\\n\\n')}\n</project_rules>\n`.trim()\n docs.unshift(formattedRules)\n }\n\n if (existsSync(legacyPath)) {\n try {\n const content = await readFile(legacyPath, 'utf-8')\n docs.push(\n `# Legacy instructions (CLAUDE.md)\\n\\n${content}`,\n )\n } catch (e) {\n logError(e)\n }\n }\n\n return docs.length > 0 ? docs.join('\\n\\n---\\n\\n') : null\n } catch (e) {\n logError(e)\n return null\n }\n}\n\nexport const getProjectDocs = memoize(async (): Promise<string | null> => {\n return getProjectDocsForCwd(getCwd())\n})\n\nexport const getGitStatus = memoize(async (): Promise<string | null> => {\n if (process.env.NODE_ENV === 'test') {\n return null\n }\n if (!(await getIsGit())) {\n return null\n }\n\n try {\n const [branch, mainBranch, status, log, authorLog] = await Promise.all([\n execFileNoThrow(\n 'git',\n ['branch', '--show-current'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'origin/HEAD'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.replace('origin/', '').trim()),\n execFileNoThrow(\n 'git',\n ['status', '--short'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n ['log', '--oneline', '-n', '5'],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n execFileNoThrow(\n 'git',\n [\n 'log',\n '--oneline',\n '-n',\n '5',\n '--author',\n (await getGitEmail()) || '',\n ],\n undefined,\n undefined,\n false,\n ).then(({ stdout }) => stdout.trim()),\n ])\n const statusLines = status.split('\\n').length\n const truncatedStatus =\n statusLines > 200\n ? status.split('\\n').slice(0, 200).join('\\n') +\n '\\n... (truncated because there are more than 200 lines. If you need more information, run \"git status\" using BashTool)'\n : status\n\n return `This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation.\\nCurrent branch: ${branch}\\n\\nMain branch (you will usually use this for PRs): ${mainBranch}\\n\\nStatus:\\n${truncatedStatus || '(clean)'}\\n\\nRecent commits:\\n${log}\\n\\nYour recent commits:\\n${authorLog || '(no recent commits)'}`\n } catch (error) {\n logError(error)\n return null\n }\n})\n\nexport const getContext = memoize(\n async (): Promise<{\n [k: string]: string\n }> => {\n const codeStyle = getCodeStyle()\n const projectConfig = getCurrentProjectConfig()\n const dontCrawl = projectConfig.dontCrawlDirectory || isContextScanDisabled()\n const [\n gitStatus,\n directoryStructure,\n instructionFilesNote,\n readme,\n projectDocs,\n ] = await Promise.all([\n getGitStatus(),\n dontCrawl ? Promise.resolve('') : getDirectoryStructure(),\n dontCrawl ? Promise.resolve('') : getInstructionFilesNote(),\n getReadme(),\n getProjectDocs(),\n ])\n return {\n ...projectConfig.context,\n ...(directoryStructure ? { directoryStructure } : {}),\n ...(gitStatus ? { gitStatus } : {}),\n ...(codeStyle ? { codeStyle } : {}),\n ...(instructionFilesNote ? { instructionFilesNote } : {}),\n ...(readme ? { readme } : {}),\n ...(projectDocs ? { projectDocs } : {}),\n }\n },\n)\n\nexport const getDirectoryStructure = memoize(\n async function (): Promise<string> {\n if (isContextScanDisabled()) {\n return ''\n }\n let lines: string\n try {\n lines = buildDirectoryStructure()\n } catch (error) {\n logError(error)\n return ''\n }\n\n return `Below is a snapshot of this project's file tree structure at the start of the conversation. This snapshot will NOT update during the conversation.\n\n${lines}`\n },\n)\n\nconst buildDirectoryStructure = (): string => {\n const entries = readdirSync(getCwd(), { withFileTypes: true })\n const directories = entries\n .filter(entry => entry.isDirectory())\n .map(entry => entry.name)\n .sort((a, b) => a.localeCompare(b))\n const files = entries\n .filter(entry => !entry.isDirectory())\n .map(entry => entry.name)\n .sort((a, b) => a.localeCompare(b))\n const root = getCwd()\n const rootLabel = root.endsWith(sep) ? root : `${root}${sep}`\n return renderTopLevelTree(rootLabel, directories, files)\n}\n\ntype WorkingDirectoryStructureStats = {\n topLevelDirectoryCount: number\n topLevelFileCount: number\n totalDirectoryCount: number\n totalFileCount: number\n directoryFileRatio: string\n maxDepth: number\n}\n\nconst ENV_STATS_IGNORE_PATTERNS = [\n 'node_modules/',\n '__pycache__/',\n '.git/',\n 'dist/',\n 'build/',\n 'target/',\n 'bin/',\n 'obj/',\n '.idea/',\n '.vscode/',\n '.zig-cache/',\n 'zig-out',\n '.coverage',\n 'coverage/',\n 'vendor/',\n 'tmp/',\n 'temp/',\n '.cache/',\n 'cache/',\n 'logs/',\n '.venv/',\n 'venv/',\n 'env/',\n]\n\nconst PROJECT_STRUCTURE_STATS_GUIDANCE =\n '\u4F9D\u636E\u5F53\u524D\u9879\u76EE\u7ED3\u6784\u7EDF\u8BA1\u6570\u636E\uFF0C\u53EF\u521D\u6B65\u8FDB\u884C\u9879\u76EE\u7ED3\u6784\u590D\u6742\u5EA6\u5206\u6790\uFF1A1 \u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B\u9AD8 \u2192 \u7ED3\u6784\u66F4\u788E\u3001\u5C42\u7EA7\u53EF\u80FD\u66F4\u7EC6\uFF0C\u590D\u6742\u5EA6\u503E\u5411\u66F4\u9AD8\u30022 \u6700\u6DF1\u5C42\u7EA7\u5927 \u2192 \u6DF1\u5C42\u5D4C\u5957\u660E\u663E\uFF0C\u5BFC\u822A\u4E0E\u5B9A\u4F4D\u6210\u672C\u66F4\u9AD8\u30023 \u9876\u5C42\u76EE\u5F55\u6570\u591A \u2192 \u6A21\u5757\u5165\u53E3\u5206\u6563\uFF0C\u9700\u66F4\u4E25\u683C\u5206\u5C42\u786E\u8BA4\u30024 \u6587\u4EF6\u603B\u91CF\u5927 \u2192 \u66F4\u5BB9\u6613\u89E6\u53D1\u8F93\u51FA\u622A\u65AD\u3002\u5904\u7406\u6D41\u7A0B\uFF1A\u590D\u6742\u5EA6\u4F4E \u2192 \u53EF\u76F4\u63A5 LS \u83B7\u53D6\u7ED3\u6784\u7EBF\u7D22\u540E\u8FDB\u5165\u5B9A\u4F4D\uFF1B\u590D\u6742\u5EA6\u9AD8 \u2192 \u5148\u7528 LS \u83B7\u53D6\u9876\u5C42\u7EBF\u7D22\uFF0C\u518D\u7528 Glob \u5206\u5C42\u786E\u8BA4\u8DEF\u5F84\u3002'\n\nconst getWorkingDirectoryStructureStatsSnapshot = memoize(\n async (): Promise<WorkingDirectoryStructureStats | null> =>\n computeWorkingDirectoryStructureStats(),\n)\n\nexport function resetWorkingDirectoryStatsCacheForTests(): void {\n ;(getWorkingDirectoryStructureStatsSnapshot as any).cache?.clear?.()\n}\n\nexport async function getWorkingDirectoryStructureStats(): Promise<WorkingDirectoryStructureStats | null> {\n const mode = String(process.env.PYB_ENV_STATS_MODE || 'realtime')\n .trim()\n .toLowerCase()\n if (mode === 'snapshot') {\n return getWorkingDirectoryStructureStatsSnapshot()\n }\n return computeWorkingDirectoryStructureStats()\n}\n\nexport async function getProjectStructureStatisticsBlock(): Promise<string> {\n if (isContextScanDisabled()) return ''\n const stats = await getWorkingDirectoryStructureStats()\n if (!stats) return ''\n const statsLine = `\u5F53\u524D\u9879\u76EE\u7EDF\u8BA1\u4FE1\u606F: \u9876\u5C42\u76EE\u5F55\u6570\uFF1A${stats.topLevelDirectoryCount}\u4E2A\uFF0C\u9876\u5C42\u6587\u4EF6\u6570\uFF1A${stats.topLevelFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55\u6570\uFF1A${stats.totalDirectoryCount}\u4E2A\uFF0C\u603B\u6587\u4EF6\u6570\uFF1A${stats.totalFileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B=${stats.directoryFileRatio}\uFF0C\u6700\u6DF1\u76EE\u5F55\u5C42\u7EA7=${stats.maxDepth}\u3002\uFF08\u7EDF\u8BA1\u6570\u636E\u4E0D\u5305\u542B\u7A7A\u76EE\u5F55\u4EE5\u53CA\u5E38\u89C1\u975E\u6838\u5FC3\u76EE\u5F55/\u6784\u5EFA\u4EA7\u7269/\u4F9D\u8D56\u7F13\u5B58\u7B49\u6587\u4EF6\u6216\u76EE\u5F55\uFF09`\n return `<context name=\"Project Structure Statistics\">\\n${PROJECT_STRUCTURE_STATS_GUIDANCE}\\n\\n${statsLine}</context>`\n}\n\nconst computeWorkingDirectoryStructureStats = async (): Promise<WorkingDirectoryStructureStats | null> => {\n const cwd = getCwd()\n const abortController = new AbortController()\n const rgIgnoreGlobs = ENV_STATS_IGNORE_PATTERNS.map(pattern => `!${pattern}*`)\n const rgArgs = [\n '--files',\n ...rgIgnoreGlobs.flatMap(pattern => ['--glob', pattern]),\n ]\n const result = await ripGrepWithStatus(rgArgs, cwd, abortController.signal)\n if (result.status !== 'ok') return null\n const matchIgnorePatterns = ENV_STATS_IGNORE_PATTERNS.map(pattern =>\n pattern.endsWith('/') ? `${pattern}**` : pattern,\n )\n const files = result.files\n .filter(Boolean)\n .map(file => {\n const absolutePath = isAbsolute(file) ? file : resolve(cwd, file)\n const relativePath = relative(cwd, absolutePath)\n const normalized = relativePath.split(sep).join('/')\n return { normalized }\n })\n .filter(entry => {\n if (matchIgnorePatterns.length === 0) return true\n return !matchIgnorePatterns.some(pattern =>\n minimatch(entry.normalized, pattern, { dot: true, nocase: false }),\n )\n })\n const totalFileCount = files.length\n const directorySet = getDirectorySet(files.map(entry => entry.normalized))\n let maxDepth = 0\n for (const entry of files) {\n const parts = entry.normalized.split('/').filter(Boolean)\n const depth = Math.max(0, parts.length - 1)\n if (depth > maxDepth) maxDepth = depth\n }\n const ratio =\n totalFileCount === 0\n ? '0.00'\n : (directorySet.size / totalFileCount).toFixed(2)\n const topLevelEntries = readdirSync(cwd, { withFileTypes: true })\n const visibleTopLevel = topLevelEntries.filter(entry => {\n const normalized = entry.isDirectory() ? `${entry.name}/` : entry.name\n if (matchIgnorePatterns.length === 0) return true\n return !matchIgnorePatterns.some(pattern =>\n minimatch(normalized, pattern, { dot: true, nocase: false }),\n )\n })\n const topLevelDirectoryCount = visibleTopLevel.filter(entry =>\n entry.isDirectory(),\n ).length\n const topLevelFileCount = visibleTopLevel.filter(\n entry => !entry.isDirectory(),\n ).length\n return {\n topLevelDirectoryCount,\n topLevelFileCount,\n totalDirectoryCount: directorySet.size,\n totalFileCount,\n directoryFileRatio: ratio,\n maxDepth,\n }\n}\n\nconst getDirectorySet = (paths: string[]) => {\n const directories = new Set<string>()\n for (const entry of paths) {\n const parts = entry.split('/').filter(Boolean)\n if (parts.length <= 1) continue\n for (let i = 0; i < parts.length - 1; i++) {\n directories.add(parts.slice(0, i + 1).join('/'))\n }\n }\n return directories\n}\n\nconst renderTopLevelTree = (\n rootLabel: string,\n directories: string[],\n files: string[],\n): string => {\n const items = [\n ...directories.map(name => ({ name: `${name}${sep}`, isDir: true })),\n ...files.map(name => ({ name, isDir: false })),\n ]\n const lines: string[] = []\n lines.push(rootLabel)\n for (let i = 0; i < items.length; i++) {\n const connector = i === items.length - 1 ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 '\n lines.push(`${connector}${items[i].name}`)\n }\n return lines.join('\\n')\n}\n", "import { memoize } from 'lodash-es'\nimport { execFileNoThrow } from './execFileNoThrow'\n\nexport const getIsGit = memoize(async (): Promise<boolean> => {\n const { code } = await execFileNoThrow('git', [\n 'rev-parse',\n '--is-inside-work-tree',\n ])\n return code === 0\n})\n\nexport const getHead = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\n return stdout.trim()\n}\n\nexport const getBranch = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim()\n}\n\nexport const getRemoteUrl = async (): Promise<string | null> => {\n const { stdout, code } = await execFileNoThrow(\n 'git',\n ['remote', 'get-url', 'origin'],\n undefined,\n undefined,\n false,\n )\n return code === 0 ? stdout.trim() : null\n}\n\nexport const getIsHeadOnRemote = async (): Promise<boolean> => {\n const { code } = await execFileNoThrow(\n 'git',\n ['rev-parse', '@{u}'],\n undefined,\n undefined,\n false,\n )\n return code === 0\n}\n\nexport const getIsClean = async (): Promise<boolean> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['status', '--porcelain'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim().length === 0\n}\n\nexport interface GitRepoState {\n commitHash: string\n branchName: string\n remoteUrl: string | null\n isHeadOnRemote: boolean\n isClean: boolean\n}\n\nexport async function getGitState(): Promise<GitRepoState | null> {\n try {\n const [commitHash, branchName, remoteUrl, isHeadOnRemote, isClean] =\n await Promise.all([\n getHead(),\n getBranch(),\n getRemoteUrl(),\n getIsHeadOnRemote(),\n getIsClean(),\n ])\n\n return {\n commitHash,\n branchName,\n remoteUrl,\n isHeadOnRemote,\n isClean,\n }\n } catch (_) {\n return null\n }\n}\n", "import { getGlobalConfig, getOrCreateUserID } from '@utils/config'\nimport { memoize } from 'lodash-es'\nimport { env } from '@utils/config/env'\nimport { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport { logError, SESSION_ID } from '@utils/log'\nimport { MACRO } from '@constants/macros'\nexport const getGitEmail = memoize(async (): Promise<string | undefined> => {\n const result = await execFileNoThrow('git', ['config', 'user.email'])\n if (result.code !== 0) {\n logError(`Failed to get git email: ${result.stdout} ${result.stderr}`)\n return undefined\n }\n return result.stdout.trim() || undefined\n})\n\ntype SimpleUser = {\n customIDs?: Record<string, string>\n userID: string\n appVersion?: string\n userAgent?: string\n email?: string\n custom?: Record<string, unknown>\n}\n\nexport const getUser = memoize(async (): Promise<SimpleUser> => {\n const userID = getOrCreateUserID()\n const config = getGlobalConfig()\n const email = undefined\n return {\n customIDs: {\n sessionId: SESSION_ID,\n },\n userID,\n appVersion: MACRO.VERSION,\n userAgent: env.platform,\n email,\n custom: {\n nodeVersion: env.nodeVersion,\n userType: process.env.USER_TYPE,\n organizationUuid: config.oauthAccount?.organizationUuid,\n accountUuid: config.oauthAccount?.accountUuid,\n },\n }\n})\n", "import { existsSync, readdirSync, readFileSync, statSync } from 'fs'\r\nimport { join, relative, resolve } from 'path'\r\nimport matter from 'gray-matter'\r\nimport { minimatch } from 'minimatch'\r\nimport { findGitRoot, getDirsFromGitRootToCwd } from './projectInstructions'\r\nimport { logError } from '@utils/log'\r\n\r\nexport interface RuleFile {\r\n filename: string\r\n content: string\r\n paths?: string[]\r\n}\r\n\r\nfunction getRulesFromDir(dir: string, root: string, cwd: string): string[] {\r\n if (!existsSync(dir)) return []\r\n\r\n const rules: string[] = []\r\n const files = readdirSync(dir)\r\n\r\n for (const file of files) {\r\n if (!file.endsWith('.md')) continue\r\n\r\n const filePath = join(dir, file)\r\n if (!statSync(filePath).isFile()) continue\r\n\r\n try {\r\n const fileContent = readFileSync(filePath, 'utf-8')\r\n // gray-matter by default uses js-yaml.safeLoad which is removed in js-yaml v4.\r\n // We need to provide a custom parser if we want to be safe, or rely on gray-matter's auto-detection if updated.\r\n // However, looking at the error \"Function yaml.safeLoad is removed\", it seems gray-matter 4.0.3 (in package.json)\r\n // might not be fully compatible with js-yaml 4.x out of the box without options?\r\n // Actually, checking gray-matter docs/issues, v4.0.3 should work.\r\n // But the error comes from gray-matter calling yaml.safeLoad.\r\n \r\n // Solution: Pass a custom parser engine to gray-matter\r\n const yaml = require('js-yaml')\r\n const matterOptions = {\r\n engines: {\r\n yaml: {\r\n parse: yaml.load.bind(yaml),\r\n stringify: yaml.dump.bind(yaml)\r\n }\r\n }\r\n }\r\n \r\n const { content, data } = matter(fileContent, matterOptions)\r\n \r\n // User rule: If no paths (YAML frontmatter), it applies globally.\r\n if (!data.paths || !Array.isArray(data.paths) || data.paths.length === 0) {\r\n rules.push(content.trim())\r\n continue\r\n }\r\n\r\n // If paths are specified, check if current context (cwd) matches\r\n // This is a simplification. Ideally we'd check active files, but cwd is a good proxy.\r\n const relCwd = relative(root, cwd)\r\n // On Windows, relative paths might use backslashes, but glob patterns usually expect forward slashes.\r\n // Also ensure we don't have a leading slash unless absolute, but relative returns without leading slash usually.\r\n // However, if relCwd is empty (cwd == root), we want it to match \"**\" but maybe not \"src/**\".\r\n // If relCwd is \"src\", it matches \"src/**\".\r\n \r\n const normalizedRelCwd = relCwd.split('\\\\').join('/')\r\n\r\n // Let's iterate over paths patterns\r\n const hasMatch = data.paths.some((pattern: string) => {\r\n // minimatch(path, pattern)\r\n // If pattern is \"src/**\", and path is \"src\", minimatch(\"src\", \"src/**\") is FALSE.\r\n // We need to check if the path is INSIDE the pattern.\r\n // But the rules say: \"Rules are included when the file being edited matches the path\".\r\n // Since we are approximating by CWD, we should check:\r\n // 1. Is CWD inside the pattern? (e.g. pattern=\"src/**\", cwd=\"src/utils\" -> YES)\r\n // 2. Is CWD the pattern itself? (e.g. pattern=\"src\", cwd=\"src\" -> YES)\r\n // 3. Is the pattern inside CWD? (e.g. pattern=\"src/utils/**\", cwd=\"src\" -> Maybe? If I edit src/index.ts, no. If I edit src/utils/foo.ts, yes.)\r\n \r\n // Let's stick to: CWD must match the pattern OR be a child of the pattern.\r\n // minimatch(\"src/utils\", \"src/**\") -> true\r\n \r\n // Debugging logs in test might help, but let's try to be more robust.\r\n // Maybe \"src\" does NOT match \"src/**\" in minimatch?\r\n // \"src/\" matches \"src/**\"?\r\n \r\n if (minimatch(normalizedRelCwd, pattern)) return true\r\n \r\n // Try appending slash if not empty\r\n if (normalizedRelCwd && minimatch(normalizedRelCwd + '/', pattern)) return true\r\n \r\n return false\r\n })\r\n\r\n if (hasMatch) {\r\n rules.push(content.trim())\r\n }\r\n } catch (e) {\r\n logError(e)\r\n }\r\n }\r\n\r\n return rules\r\n}\r\n\r\nexport function getProjectRules(cwd: string): string[] {\r\n const gitRoot = findGitRoot(cwd)\r\n const root = gitRoot ?? resolve(cwd)\r\n const dirs = getDirsFromGitRootToCwd(root, cwd)\r\n\r\n const rules: string[] = []\r\n\r\n // Iterate from root down to cwd to collect rules from .claude/rules, .cursor/rules and .pyb/rules\r\n for (const dir of dirs) {\r\n // .claude/rules\r\n const claudeRulesDir = join(dir, '.claude', 'rules')\r\n rules.push(...getRulesFromDir(claudeRulesDir, root, cwd))\r\n\r\n // .cursor/rules\r\n const cursorRulesDir = join(dir, '.cursor', 'rules')\r\n rules.push(...getRulesFromDir(cursorRulesDir, root, cwd))\r\n\r\n // .pyb/rules\r\n const pybRulesDir = join(dir, '.pyb', 'rules')\r\n rules.push(...getRulesFromDir(pybRulesDir, root, cwd))\r\n }\r\n\r\n return rules\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["readFileSync", "readFileSync", "memoize", "memoize", "memoize", "join", "relative", "resolve", "sep", "existsSync", "readdirSync", "memoize", "memoize", "existsSync", "readFileSync", "join", "relative", "resolve", "existsSync", "join", "readFileSync", "relative", "resolve", "minimatch", "join", "existsSync", "memoize", "readdirSync", "sep", "resolve", "relative"]
7
+ }
@@ -8,12 +8,12 @@ import {
8
8
  } from "./chunk-BJSWTHRM.js";
9
9
  import {
10
10
  debug
11
- } from "./chunk-62WLN2YP.js";
11
+ } from "./chunk-U2ABHLKU.js";
12
12
  import {
13
13
  getCwd,
14
14
  getXdgConfigDir,
15
15
  logError
16
- } from "./chunk-DG2RH364.js";
16
+ } from "./chunk-QEQNZOZO.js";
17
17
 
18
18
  // src/utils/agent/loader.ts
19
19
  import {
@@ -4,10 +4,10 @@ import {
4
4
  PRODUCT_NAME,
5
5
  execFileNoThrow,
6
6
  logError
7
- } from "./chunk-DG2RH364.js";
7
+ } from "./chunk-QEQNZOZO.js";
8
8
  import {
9
9
  MACRO
10
- } from "./chunk-KAKZTDPU.js";
10
+ } from "./chunk-O2ADQYIA.js";
11
11
 
12
12
  // src/utils/session/autoUpdater.ts
13
13
  async function getSemver() {
@@ -82,7 +82,7 @@ async function checkAndNotifyUpdate() {
82
82
  const [
83
83
  { isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },
84
84
  { env }
85
- ] = await Promise.all([import("./config-T5UDL4KT.js"), import("./env-IGLKIBTH.js")]);
85
+ ] = await Promise.all([import("./config-IXA7AFRU.js"), import("./env-5RVJS4UF.js")]);
86
86
  if (await isAutoUpdaterDisabled()) return;
87
87
  if (await env.getIsDocker()) return;
88
88
  if (!await env.hasInternetAccess()) return;
@@ -26,57 +26,57 @@ import {
26
26
  hasReadPermission,
27
27
  hasWritePermission,
28
28
  query
29
- } from "./chunk-UOPELSQO.js";
29
+ } from "./chunk-ICVVWNHE.js";
30
30
  import {
31
31
  queryLLM
32
- } from "./chunk-GHEIYY4G.js";
32
+ } from "./chunk-WHLMRUUT.js";
33
33
  import {
34
34
  FallbackToolUseRejectedMessage,
35
35
  MCPTool,
36
36
  getClients,
37
37
  getMCPTools
38
- } from "./chunk-W55ADXHF.js";
38
+ } from "./chunk-NYHIJQJX.js";
39
39
  import {
40
40
  generateAgentId
41
- } from "./chunk-5L3ARDVS.js";
41
+ } from "./chunk-27BQKSDM.js";
42
42
  import {
43
43
  getActiveAgents,
44
44
  getAgentByType,
45
45
  getAvailableAgentTypes
46
- } from "./chunk-CC3KGKTT.js";
46
+ } from "./chunk-M2VDOLUT.js";
47
47
  import {
48
48
  INTERRUPT_MESSAGE,
49
49
  createAssistantMessage,
50
50
  createUserMessage,
51
51
  getLastAssistantMessageId
52
- } from "./chunk-3QVMMVBR.js";
52
+ } from "./chunk-EVNLZXJ4.js";
53
53
  import {
54
54
  formatDuration,
55
55
  formatNumber
56
56
  } from "./chunk-OUXHGDLH.js";
57
57
  import {
58
58
  getAbsolutePath
59
- } from "./chunk-7J2VUSTU.js";
59
+ } from "./chunk-FGQMSQUH.js";
60
60
  import {
61
61
  LspFacade,
62
62
  formatDiagnosticsPretty
63
- } from "./chunk-TAIA77SV.js";
63
+ } from "./chunk-ZPXFENPY.js";
64
64
  import {
65
65
  getModelManager
66
- } from "./chunk-2ROHFSTR.js";
66
+ } from "./chunk-4U65JT46.js";
67
67
  import {
68
68
  getContext
69
- } from "./chunk-QA4EWB66.js";
69
+ } from "./chunk-JRD3OTYR.js";
70
70
  import {
71
71
  filesToTree,
72
72
  ripGrepWithStatus
73
- } from "./chunk-KFQXCTMP.js";
73
+ } from "./chunk-D24WQYDQ.js";
74
74
  import {
75
75
  getTheme
76
- } from "./chunk-JGJ76XUO.js";
76
+ } from "./chunk-GEXZOUS6.js";
77
77
  import {
78
78
  debug
79
- } from "./chunk-62WLN2YP.js";
79
+ } from "./chunk-U2ABHLKU.js";
80
80
  import {
81
81
  BunShell,
82
82
  getCwd,
@@ -87,7 +87,7 @@ import {
87
87
  overwriteLog,
88
88
  readTaskOutput,
89
89
  resolveXdgDataPath
90
- } from "./chunk-DG2RH364.js";
90
+ } from "./chunk-QEQNZOZO.js";
91
91
 
92
92
  // src/tools/index.ts
93
93
  import { memoize as memoize2 } from "lodash-es";
@@ -766,7 +766,7 @@ async function analyzeOutputWithLsp(output, exitCode) {
766
766
  if (exitCode !== 0 || errorCount > 0 || warningCount > 0) {
767
767
  try {
768
768
  const { isAbsolute: isAbsolute3, resolve: resolve4 } = await import("path");
769
- const { getSessionRoot: getSessionRoot2 } = await import("./state-LCDP6BGJ.js");
769
+ const { getSessionRoot: getSessionRoot2 } = await import("./state-N6Q3VHEA.js");
770
770
  const lines = output.split("\n");
771
771
  const uniqueFiles = /* @__PURE__ */ new Set();
772
772
  const lspSuggestions = [];
@@ -1139,7 +1139,7 @@ var DeleteTool = {
1139
1139
  }
1140
1140
  if (!force) {
1141
1141
  try {
1142
- const { LspFacade: LspFacade2 } = await import("./lsp-N647675R.js");
1142
+ const { LspFacade: LspFacade2 } = await import("./lsp-QY4Z5MCU.js");
1143
1143
  const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
1144
1144
  if (referenceDetail) {
1145
1145
  failedItems.push(
@@ -3,13 +3,13 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSettingsFileCandidates,
5
5
  loadSettingsWithLegacyFallback
6
- } from "./chunk-RTNHI5RE.js";
6
+ } from "./chunk-Z7LVK2X3.js";
7
7
  import {
8
8
  getSessionPlugins
9
9
  } from "./chunk-BJSWTHRM.js";
10
10
  import {
11
11
  getTheme
12
- } from "./chunk-JGJ76XUO.js";
12
+ } from "./chunk-GEXZOUS6.js";
13
13
  import {
14
14
  addMcprcServerForTesting,
15
15
  getCurrentProjectConfig,
@@ -19,13 +19,13 @@ import {
19
19
  safeParseJSON,
20
20
  saveCurrentProjectConfig,
21
21
  saveGlobalConfig
22
- } from "./chunk-MISYR6PB.js";
22
+ } from "./chunk-W3ATDMY7.js";
23
23
  import {
24
24
  PRODUCT_COMMAND,
25
25
  PRODUCT_NAME,
26
26
  getCwd,
27
27
  logMCPError
28
- } from "./chunk-DG2RH364.js";
28
+ } from "./chunk-QEQNZOZO.js";
29
29
 
30
30
  // src/services/mcp/client.ts
31
31
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
@@ -4,7 +4,7 @@ const require = __pybCreateRequire(import.meta.url);
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "pybao-cli",
7
- version: "1.4.27",
7
+ version: "1.4.29",
8
8
  bin: {
9
9
  pyb: "cli.js",
10
10
  "pyb-acp": "cli-acp.js"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../package.json", "../src/constants/macros.ts"],
4
- "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.4.27\",\n \"bin\": {\n \"pyb\": \"cli.js\",\n \"pyb-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"author\": \"PYB-XC\",\n \"license\": \"MIT\",\n \"description\": \"PYB-CLI - Minimal AI Agent with multi-model support and CLI interface\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"minimal\",\n \"claude\"\n ],\n \"homepage\": \"https://github.com/pyb-xc/pyb-ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/pyb-xc/pyb-ts.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyb-xc/pyb-ts/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\",\n \"resources/**/*\"\n ],\n \"scripts\": {\n \"dev\": \"bun run ./src/entrypoints/cli.tsx --verbose\",\n \"build:npm\": \"bun scripts/build.mjs\",\n \"build\": \"npm run build:npm\",\n \"build:binary\": \"node scripts/build-binary.mjs\",\n \"clean\": \"node scripts/clean.mjs\",\n \"prepublishOnly\": \"npm run build:npm && node scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"test:unit\": \"bun test tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\",\n \"parity:reference\": \"bun run scripts/reference-parity-check.mjs\"\n },\n \"dependencies\": {\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@astrojs/language-server\": \"2.16.2\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@prisma/language-server\": \"31.3.4\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"@vscode/ripgrep\": \"^1.17.0\",\n \"@vue/language-server\": \"3.2.2\",\n \"ajv\": \"^8.17.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"bash-language-server\": \"5.6.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dockerfile-language-server-nodejs\": \"0.15.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"fflate\": \"^0.8.2\",\n \"figures\": \"^6.1.0\",\n \"glob\": \"^11.0.3\",\n \"graphql-language-service-cli\": \"3.5.0\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"intelephense\": \"1.16.3\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.1.1\",\n \"nanoid\": \"^5.1.5\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"4.104.0\",\n \"pyright\": \"1.1.408\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"svelte-language-server\": \"0.17.23\",\n \"tsx\": \"^4.20.3\",\n \"typescript-language-server\": \"5.1.3\",\n \"undici\": \"^7.11.0\",\n \"vscode-jsonrpc\": \"8.2.1\",\n \"vscode-langservers-extracted\": \"4.10.0\",\n \"web-tree-sitter\": \"0.25.10\",\n \"which\": \"^6.0.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"yaml-language-server\": \"1.19.2\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.50.1\",\n \"@typescript-eslint/parser\": \"^8.50.1\",\n \"abort-controller\": \"3.0.0\",\n \"bun-types\": \"latest\",\n \"cheerio\": \"1.1.2\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"8.57.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\",\n \"ink-testing-library\": \"4.0.0\",\n \"node-fetch\": \"3.3.2\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"tree-sitter-bash\": \"0.25.1\",\n \"tree-sitter-c-sharp\": \"0.23.1\",\n \"tree-sitter-clojure\": \"0.4.0\",\n \"tree-sitter-cpp\": \"0.23.4\",\n \"tree-sitter-go\": \"0.25.0\",\n \"tree-sitter-haskell\": \"0.23.1\",\n \"tree-sitter-java\": \"0.23.5\",\n \"tree-sitter-julia\": \"0.23.1\",\n \"tree-sitter-nix\": \"0.0.2\",\n \"tree-sitter-ocaml\": \"0.24.2\",\n \"tree-sitter-python\": \"0.25.0\",\n \"tree-sitter-rust\": \"0.24.0\",\n \"tree-sitter-scala\": \"0.24.0\",\n \"tree-sitter-swift\": \"0.7.1\",\n \"tree-sitter-typescript\": \"0.23.2\",\n \"turndown\": \"7.2.2\",\n \"typescript\": \"^5.9.2\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n", "import pkg from '../../package.json'\n\nexport const MACRO = {\n VERSION: pkg.version,\n README_URL: 'https://github.com/pyb-xc/pyb-ts#readme',\n PACKAGE_URL: 'pybao-cli',\n ISSUES_EXPLAINER:\n 'report the issue at https://github.com/pyb-xc/pyb-ts/issues',\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"pybao-cli\",\n \"version\": \"1.4.29\",\n \"bin\": {\n \"pyb\": \"cli.js\",\n \"pyb-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"author\": \"PYB-XC\",\n \"license\": \"MIT\",\n \"description\": \"PYB-CLI - Minimal AI Agent with multi-model support and CLI interface\",\n \"keywords\": [\n \"ai\",\n \"agent\",\n \"minimal\",\n \"claude\"\n ],\n \"homepage\": \"https://github.com/pyb-xc/pyb-ts\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/pyb-xc/pyb-ts.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/pyb-xc/pyb-ts/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\",\n \"resources/**/*\"\n ],\n \"scripts\": {\n \"dev\": \"bun run ./src/entrypoints/cli.tsx --verbose\",\n \"build:npm\": \"bun scripts/build.mjs\",\n \"build\": \"npm run build:npm\",\n \"build:binary\": \"node scripts/build-binary.mjs\",\n \"clean\": \"node scripts/clean.mjs\",\n \"prepublishOnly\": \"npm run build:npm && node scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json}\\\" \\\"tests/**/*.{ts,tsx,js,jsx,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"test:unit\": \"bun test tests/unit\",\n \"test:integration\": \"bun test tests/integration\",\n \"test:e2e\": \"bun test tests/e2e\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\",\n \"parity:reference\": \"bun run scripts/reference-parity-check.mjs\"\n },\n \"dependencies\": {\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@astrojs/language-server\": \"2.16.2\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@prisma/language-server\": \"31.3.4\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"@vscode/ripgrep\": \"^1.17.0\",\n \"@vue/language-server\": \"3.2.2\",\n \"ajv\": \"^8.17.1\",\n \"ansi-escapes\": \"^7.0.0\",\n \"bash-language-server\": \"5.6.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dockerfile-language-server-nodejs\": \"0.15.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"fflate\": \"^0.8.2\",\n \"figures\": \"^6.1.0\",\n \"glob\": \"^11.0.3\",\n \"graphql-language-service-cli\": \"3.5.0\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"intelephense\": \"1.16.3\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.1.1\",\n \"nanoid\": \"^5.1.5\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"4.104.0\",\n \"pyright\": \"1.1.408\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"svelte-language-server\": \"0.17.23\",\n \"tsx\": \"^4.20.3\",\n \"typescript-language-server\": \"5.1.3\",\n \"undici\": \"^7.11.0\",\n \"vscode-jsonrpc\": \"8.2.1\",\n \"vscode-langservers-extracted\": \"4.10.0\",\n \"web-tree-sitter\": \"0.25.10\",\n \"which\": \"^6.0.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"yaml-language-server\": \"1.19.2\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@typescript-eslint/eslint-plugin\": \"^8.50.1\",\n \"@typescript-eslint/parser\": \"^8.50.1\",\n \"abort-controller\": \"3.0.0\",\n \"bun-types\": \"latest\",\n \"cheerio\": \"1.1.2\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"8.57.0\",\n \"eslint-plugin-react-hooks\": \"^7.0.1\",\n \"ink-testing-library\": \"4.0.0\",\n \"node-fetch\": \"3.3.2\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"tree-sitter-bash\": \"0.25.1\",\n \"tree-sitter-c-sharp\": \"0.23.1\",\n \"tree-sitter-clojure\": \"0.4.0\",\n \"tree-sitter-cpp\": \"0.23.4\",\n \"tree-sitter-go\": \"0.25.0\",\n \"tree-sitter-haskell\": \"0.23.1\",\n \"tree-sitter-java\": \"0.23.5\",\n \"tree-sitter-julia\": \"0.23.1\",\n \"tree-sitter-nix\": \"0.0.2\",\n \"tree-sitter-ocaml\": \"0.24.2\",\n \"tree-sitter-python\": \"0.25.0\",\n \"tree-sitter-rust\": \"0.24.0\",\n \"tree-sitter-scala\": \"0.24.0\",\n \"tree-sitter-swift\": \"0.7.1\",\n \"tree-sitter-typescript\": \"0.23.2\",\n \"turndown\": \"7.2.2\",\n \"typescript\": \"^5.9.2\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n", "import pkg from '../../package.json'\n\nexport const MACRO = {\n VERSION: pkg.version,\n README_URL: 'https://github.com/pyb-xc/pyb-ts#readme',\n PACKAGE_URL: 'pybao-cli',\n ISSUES_EXPLAINER:\n 'report the issue at https://github.com/pyb-xc/pyb-ts/issues',\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  MACRO
5
- } from "./chunk-KAKZTDPU.js";
5
+ } from "./chunk-O2ADQYIA.js";
6
6
 
7
7
  // src/utils/state/index.ts
8
8
  import { cwd } from "process";
@@ -162,6 +162,13 @@ function getXdgCacheDir() {
162
162
  }
163
163
  return join(home, ".cache", "pyb");
164
164
  }
165
+ function isContextScanDisabled() {
166
+ const raw = String(process.env.PYB_CONTEXT_SCAN_DISABLED ?? "").trim().toLowerCase();
167
+ if (!raw) return true;
168
+ if (["1", "true", "yes", "on"].includes(raw)) return true;
169
+ if (["0", "false", "no", "off"].includes(raw)) return false;
170
+ return true;
171
+ }
165
172
  function hasDirEntries(path) {
166
173
  try {
167
174
  if (!existsSync(path)) return false;
@@ -3247,6 +3254,7 @@ export {
3247
3254
  getXdgConfigDir,
3248
3255
  getXdgDataDir,
3249
3256
  getXdgCacheDir,
3257
+ isContextScanDisabled,
3250
3258
  resolveXdgDataPath,
3251
3259
  resolveXdgCachePath,
3252
3260
  PYB_BASE_DIR,