pybao-cli 1.4.24 → 1.4.25

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 (147) hide show
  1. package/dist/REPL-Q3IP3BNQ.js +47 -0
  2. package/dist/{acp-CEXZZM2O.js → acp-AUKWBWMU.js} +29 -29
  3. package/dist/{agentsValidate-VIN6KUHE.js → agentsValidate-POOZ6Z2B.js} +7 -7
  4. package/dist/{ask-VAHHUITN.js → ask-KWA2DNIV.js} +28 -28
  5. package/dist/{autoUpdater-54NPSXB4.js → autoUpdater-EOXG42SO.js} +3 -3
  6. package/dist/{chunk-ZAYYQS5B.js → chunk-47EXCNW6.js} +1 -1
  7. package/dist/{chunk-CS6PH7QM.js → chunk-4V6WD6R2.js} +1 -1
  8. package/dist/{chunk-B44CXS5U.js → chunk-5UOVQ6ES.js} +2 -2
  9. package/dist/{chunk-47CY5NY4.js → chunk-66JIUGLV.js} +2 -2
  10. package/dist/{chunk-YUBH4BG2.js → chunk-6BRCM2E4.js} +2 -2
  11. package/dist/{chunk-6YBY6R7L.js → chunk-BQYXHHWP.js} +3 -3
  12. package/dist/{chunk-ZWMOE7BR.js → chunk-CPXJHNYY.js} +1 -1
  13. package/dist/{chunk-Y4F4PED2.js → chunk-DD2OYKDE.js} +4 -4
  14. package/dist/{chunk-B5CPGG4R.js → chunk-DT4HVZ3Y.js} +2 -2
  15. package/dist/{chunk-ZBY54X3G.js → chunk-GTEB77DG.js} +1 -1
  16. package/dist/{chunk-GHZFYTLQ.js → chunk-IPYLXGFV.js} +3 -3
  17. package/dist/{chunk-OYUU6BNX.js → chunk-J46HCSM3.js} +1 -1
  18. package/dist/{chunk-6JHOWP4Q.js → chunk-JLQ6NN6N.js} +2 -2
  19. package/dist/{chunk-FQ2K532R.js → chunk-JSR26OQG.js} +49 -44
  20. package/dist/chunk-JSR26OQG.js.map +7 -0
  21. package/dist/{chunk-JQMCLUHN.js → chunk-JUE7XD3T.js} +1 -1
  22. package/dist/{chunk-Q6CUPX42.js → chunk-MUD34BHM.js} +4 -4
  23. package/dist/{chunk-7XNYKOBD.js → chunk-MXDHTE5J.js} +1 -1
  24. package/dist/{chunk-5LWUHNXF.js → chunk-MXJWHBOD.js} +3 -3
  25. package/dist/{chunk-EZWDO4EF.js → chunk-NDFJPKT7.js} +132 -118
  26. package/dist/chunk-NDFJPKT7.js.map +7 -0
  27. package/dist/{chunk-6GAN7FVN.js → chunk-NWRTSS7D.js} +2 -2
  28. package/dist/{chunk-H67LWH3W.js → chunk-OEH4JATH.js} +1 -1
  29. package/dist/{chunk-YCZDHQZ2.js → chunk-QYIH3X4U.js} +3 -3
  30. package/dist/{chunk-SY7GR24A.js → chunk-R47CUCI3.js} +1 -1
  31. package/dist/{chunk-SY7GR24A.js.map → chunk-R47CUCI3.js.map} +1 -1
  32. package/dist/{chunk-J6FZD27B.js → chunk-RPFER2VQ.js} +2 -2
  33. package/dist/{chunk-GOB5XLMA.js → chunk-S75DS5IC.js} +1 -1
  34. package/dist/{chunk-NUZY6VZ2.js → chunk-SVQXV5Q5.js} +4 -4
  35. package/dist/{chunk-VFDQWUNW.js → chunk-T52MGYKQ.js} +3 -3
  36. package/dist/{chunk-TX6AJL23.js → chunk-VUISUCOO.js} +3 -3
  37. package/dist/{chunk-SSARHQEG.js → chunk-Z6TEUSJQ.js} +3 -3
  38. package/dist/{chunk-VAY3BGZT.js → chunk-ZOWRLM6Q.js} +4 -4
  39. package/dist/{cli-JGC5UQCR.js → cli-IELXRUTX.js} +87 -87
  40. package/dist/commands-QXWCHX5K.js +51 -0
  41. package/dist/{config-3RTRBOXD.js → config-77DZQTQK.js} +4 -4
  42. package/dist/{context-WYCDKD33.js → context-KLUMCLFT.js} +6 -6
  43. package/dist/{customCommands-4VRCEZOI.js → customCommands-ISEA2746.js} +4 -4
  44. package/dist/{env-6UYIHRR4.js → env-J4F7PRGG.js} +2 -2
  45. package/dist/{file-6A7D7CPY.js → file-KRCHS5A5.js} +4 -4
  46. package/dist/index.js +3 -3
  47. package/dist/{llm-PLMT5HOR.js → llm-6XARMLJR.js} +29 -29
  48. package/dist/{llmLazy-OFGAOAN3.js → llmLazy-GRPZWGAK.js} +1 -1
  49. package/dist/{loader-GU6SR5X2.js → loader-WUNIG65J.js} +4 -4
  50. package/dist/{lsp-RNGL4JJR.js → lsp-DL76IXYS.js} +6 -6
  51. package/dist/{lspAnchor-HKLUWFLS.js → lspAnchor-VPPXXUNO.js} +6 -6
  52. package/dist/{mcp-QM3KWBUW.js → mcp-KY56TM6T.js} +7 -7
  53. package/dist/{mentionProcessor-QBGSG5XF.js → mentionProcessor-E3ITBICV.js} +5 -5
  54. package/dist/{messages-USZTP34X.js → messages-DT4HTEOS.js} +1 -1
  55. package/dist/{model-K4WNNZA3.js → model-KCH57MST.js} +5 -5
  56. package/dist/{openai-R3F2W5Z4.js → openai-BNPU7EJH.js} +5 -5
  57. package/dist/{outputStyles-6UMFR7XH.js → outputStyles-QE2JKRBE.js} +4 -4
  58. package/dist/{pluginRuntime-JVLKIOYY.js → pluginRuntime-NB3KNFSZ.js} +6 -6
  59. package/dist/{pluginValidation-VWXVNMR2.js → pluginValidation-KVCOIKER.js} +6 -6
  60. package/dist/prompts-QIFYQCCH.js +53 -0
  61. package/dist/{pybAgentSessionLoad-75I4OCMO.js → pybAgentSessionLoad-SCPRT5NR.js} +4 -4
  62. package/dist/{pybAgentSessionResume-WCGWRTN3.js → pybAgentSessionResume-VKEMMVH7.js} +4 -4
  63. package/dist/{pybAgentStreamJsonSession-Z627MFWP.js → pybAgentStreamJsonSession-G6TCRJIW.js} +1 -1
  64. package/dist/{pybHooks-HLGZPMD4.js → pybHooks-T6RPQN5F.js} +4 -4
  65. package/dist/query-AA5M6NJ4.js +55 -0
  66. package/dist/{registry-QESMT4DU.js → registry-CZRNYJ22.js} +5 -5
  67. package/dist/{ripgrep-D2PYZGZX.js → ripgrep-URB4ZUF3.js} +3 -3
  68. package/dist/{skillMarketplace-FBPUVKHP.js → skillMarketplace-NC4WL6B5.js} +3 -3
  69. package/dist/{state-CWDWFNPX.js → state-DXHBJ5GD.js} +2 -2
  70. package/dist/{theme-FDMMRN2M.js → theme-CJU6VJXX.js} +5 -5
  71. package/dist/{toolPermissionSettings-SKQJR2TT.js → toolPermissionSettings-F3CNX7NA.js} +6 -6
  72. package/dist/tools-UZYXHSUA.js +52 -0
  73. package/dist/{userInput-ZJ52OL5V.js → userInput-GIXZP2YY.js} +30 -30
  74. package/package.json +1 -1
  75. package/dist/REPL-NU4M6D6V.js +0 -47
  76. package/dist/chunk-EZWDO4EF.js.map +0 -7
  77. package/dist/chunk-FQ2K532R.js.map +0 -7
  78. package/dist/commands-M3HM5SPJ.js +0 -51
  79. package/dist/prompts-FKNGOBOG.js +0 -53
  80. package/dist/query-DEPCAE5D.js +0 -55
  81. package/dist/tools-MDUGB7GQ.js +0 -52
  82. /package/dist/{REPL-NU4M6D6V.js.map → REPL-Q3IP3BNQ.js.map} +0 -0
  83. /package/dist/{acp-CEXZZM2O.js.map → acp-AUKWBWMU.js.map} +0 -0
  84. /package/dist/{agentsValidate-VIN6KUHE.js.map → agentsValidate-POOZ6Z2B.js.map} +0 -0
  85. /package/dist/{ask-VAHHUITN.js.map → ask-KWA2DNIV.js.map} +0 -0
  86. /package/dist/{autoUpdater-54NPSXB4.js.map → autoUpdater-EOXG42SO.js.map} +0 -0
  87. /package/dist/{chunk-ZAYYQS5B.js.map → chunk-47EXCNW6.js.map} +0 -0
  88. /package/dist/{chunk-CS6PH7QM.js.map → chunk-4V6WD6R2.js.map} +0 -0
  89. /package/dist/{chunk-B44CXS5U.js.map → chunk-5UOVQ6ES.js.map} +0 -0
  90. /package/dist/{chunk-47CY5NY4.js.map → chunk-66JIUGLV.js.map} +0 -0
  91. /package/dist/{chunk-YUBH4BG2.js.map → chunk-6BRCM2E4.js.map} +0 -0
  92. /package/dist/{chunk-6YBY6R7L.js.map → chunk-BQYXHHWP.js.map} +0 -0
  93. /package/dist/{chunk-ZWMOE7BR.js.map → chunk-CPXJHNYY.js.map} +0 -0
  94. /package/dist/{chunk-Y4F4PED2.js.map → chunk-DD2OYKDE.js.map} +0 -0
  95. /package/dist/{chunk-B5CPGG4R.js.map → chunk-DT4HVZ3Y.js.map} +0 -0
  96. /package/dist/{chunk-ZBY54X3G.js.map → chunk-GTEB77DG.js.map} +0 -0
  97. /package/dist/{chunk-GHZFYTLQ.js.map → chunk-IPYLXGFV.js.map} +0 -0
  98. /package/dist/{chunk-OYUU6BNX.js.map → chunk-J46HCSM3.js.map} +0 -0
  99. /package/dist/{chunk-6JHOWP4Q.js.map → chunk-JLQ6NN6N.js.map} +0 -0
  100. /package/dist/{chunk-JQMCLUHN.js.map → chunk-JUE7XD3T.js.map} +0 -0
  101. /package/dist/{chunk-Q6CUPX42.js.map → chunk-MUD34BHM.js.map} +0 -0
  102. /package/dist/{chunk-7XNYKOBD.js.map → chunk-MXDHTE5J.js.map} +0 -0
  103. /package/dist/{chunk-5LWUHNXF.js.map → chunk-MXJWHBOD.js.map} +0 -0
  104. /package/dist/{chunk-6GAN7FVN.js.map → chunk-NWRTSS7D.js.map} +0 -0
  105. /package/dist/{chunk-H67LWH3W.js.map → chunk-OEH4JATH.js.map} +0 -0
  106. /package/dist/{chunk-YCZDHQZ2.js.map → chunk-QYIH3X4U.js.map} +0 -0
  107. /package/dist/{chunk-J6FZD27B.js.map → chunk-RPFER2VQ.js.map} +0 -0
  108. /package/dist/{chunk-GOB5XLMA.js.map → chunk-S75DS5IC.js.map} +0 -0
  109. /package/dist/{chunk-NUZY6VZ2.js.map → chunk-SVQXV5Q5.js.map} +0 -0
  110. /package/dist/{chunk-VFDQWUNW.js.map → chunk-T52MGYKQ.js.map} +0 -0
  111. /package/dist/{chunk-TX6AJL23.js.map → chunk-VUISUCOO.js.map} +0 -0
  112. /package/dist/{chunk-SSARHQEG.js.map → chunk-Z6TEUSJQ.js.map} +0 -0
  113. /package/dist/{chunk-VAY3BGZT.js.map → chunk-ZOWRLM6Q.js.map} +0 -0
  114. /package/dist/{cli-JGC5UQCR.js.map → cli-IELXRUTX.js.map} +0 -0
  115. /package/dist/{commands-M3HM5SPJ.js.map → commands-QXWCHX5K.js.map} +0 -0
  116. /package/dist/{config-3RTRBOXD.js.map → config-77DZQTQK.js.map} +0 -0
  117. /package/dist/{context-WYCDKD33.js.map → context-KLUMCLFT.js.map} +0 -0
  118. /package/dist/{customCommands-4VRCEZOI.js.map → customCommands-ISEA2746.js.map} +0 -0
  119. /package/dist/{env-6UYIHRR4.js.map → env-J4F7PRGG.js.map} +0 -0
  120. /package/dist/{file-6A7D7CPY.js.map → file-KRCHS5A5.js.map} +0 -0
  121. /package/dist/{llm-PLMT5HOR.js.map → llm-6XARMLJR.js.map} +0 -0
  122. /package/dist/{llmLazy-OFGAOAN3.js.map → llmLazy-GRPZWGAK.js.map} +0 -0
  123. /package/dist/{loader-GU6SR5X2.js.map → loader-WUNIG65J.js.map} +0 -0
  124. /package/dist/{lsp-RNGL4JJR.js.map → lsp-DL76IXYS.js.map} +0 -0
  125. /package/dist/{lspAnchor-HKLUWFLS.js.map → lspAnchor-VPPXXUNO.js.map} +0 -0
  126. /package/dist/{mcp-QM3KWBUW.js.map → mcp-KY56TM6T.js.map} +0 -0
  127. /package/dist/{mentionProcessor-QBGSG5XF.js.map → mentionProcessor-E3ITBICV.js.map} +0 -0
  128. /package/dist/{messages-USZTP34X.js.map → messages-DT4HTEOS.js.map} +0 -0
  129. /package/dist/{model-K4WNNZA3.js.map → model-KCH57MST.js.map} +0 -0
  130. /package/dist/{openai-R3F2W5Z4.js.map → openai-BNPU7EJH.js.map} +0 -0
  131. /package/dist/{outputStyles-6UMFR7XH.js.map → outputStyles-QE2JKRBE.js.map} +0 -0
  132. /package/dist/{pluginRuntime-JVLKIOYY.js.map → pluginRuntime-NB3KNFSZ.js.map} +0 -0
  133. /package/dist/{pluginValidation-VWXVNMR2.js.map → pluginValidation-KVCOIKER.js.map} +0 -0
  134. /package/dist/{prompts-FKNGOBOG.js.map → prompts-QIFYQCCH.js.map} +0 -0
  135. /package/dist/{pybAgentSessionLoad-75I4OCMO.js.map → pybAgentSessionLoad-SCPRT5NR.js.map} +0 -0
  136. /package/dist/{pybAgentSessionResume-WCGWRTN3.js.map → pybAgentSessionResume-VKEMMVH7.js.map} +0 -0
  137. /package/dist/{pybAgentStreamJsonSession-Z627MFWP.js.map → pybAgentStreamJsonSession-G6TCRJIW.js.map} +0 -0
  138. /package/dist/{pybHooks-HLGZPMD4.js.map → pybHooks-T6RPQN5F.js.map} +0 -0
  139. /package/dist/{query-DEPCAE5D.js.map → query-AA5M6NJ4.js.map} +0 -0
  140. /package/dist/{registry-QESMT4DU.js.map → registry-CZRNYJ22.js.map} +0 -0
  141. /package/dist/{ripgrep-D2PYZGZX.js.map → ripgrep-URB4ZUF3.js.map} +0 -0
  142. /package/dist/{skillMarketplace-FBPUVKHP.js.map → skillMarketplace-NC4WL6B5.js.map} +0 -0
  143. /package/dist/{state-CWDWFNPX.js.map → state-DXHBJ5GD.js.map} +0 -0
  144. /package/dist/{theme-FDMMRN2M.js.map → theme-CJU6VJXX.js.map} +0 -0
  145. /package/dist/{toolPermissionSettings-SKQJR2TT.js.map → toolPermissionSettings-F3CNX7NA.js.map} +0 -0
  146. /package/dist/{tools-MDUGB7GQ.js.map → tools-UZYXHSUA.js.map} +0 -0
  147. /package/dist/{userInput-ZJ52OL5V.js.map → userInput-GIXZP2YY.js.map} +0 -0
@@ -3,7 +3,7 @@ const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  getSessionProjectDir,
5
5
  getSessionProjectsDir
6
- } from "./chunk-6JHOWP4Q.js";
6
+ } from "./chunk-JLQ6NN6N.js";
7
7
  import {
8
8
  isUuid
9
9
  } from "./chunk-5P7HBXTD.js";
@@ -2,23 +2,23 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  ripGrepWithStatus
5
- } from "./chunk-CS6PH7QM.js";
5
+ } from "./chunk-4V6WD6R2.js";
6
6
  import {
7
7
  getCurrentProjectConfig,
8
8
  getGlobalConfig,
9
9
  getOrCreateUserID,
10
10
  saveCurrentProjectConfig
11
- } from "./chunk-SSARHQEG.js";
11
+ } from "./chunk-Z6TEUSJQ.js";
12
12
  import {
13
13
  SESSION_ID,
14
14
  env,
15
15
  execFileNoThrow,
16
16
  getCwd,
17
17
  logError
18
- } from "./chunk-OYUU6BNX.js";
18
+ } from "./chunk-J46HCSM3.js";
19
19
  import {
20
20
  MACRO
21
- } from "./chunk-SY7GR24A.js";
21
+ } from "./chunk-R47CUCI3.js";
22
22
  import {
23
23
  __require
24
24
  } from "./chunk-I3J4JYES.js";
@@ -448,7 +448,7 @@ function getLastAssistantMessageId(messages) {
448
448
 
449
449
  // src/utils/messages/index.ts
450
450
  async function processUserInput(input, mode, setToolJSX, context, pastedImages) {
451
- const impl = await import("./userInput-ZJ52OL5V.js");
451
+ const impl = await import("./userInput-GIXZP2YY.js");
452
452
  return impl.processUserInput(input, mode, setToolJSX, context, pastedImages);
453
453
  }
454
454
 
@@ -2,15 +2,15 @@ import { createRequire as __pybCreateRequire } from "node:module";
2
2
  const require = __pybCreateRequire(import.meta.url);
3
3
  import {
4
4
  loadSettingsWithLegacyFallback
5
- } from "./chunk-ZWMOE7BR.js";
5
+ } from "./chunk-CPXJHNYY.js";
6
6
  import {
7
7
  debug
8
- } from "./chunk-H67LWH3W.js";
8
+ } from "./chunk-OEH4JATH.js";
9
9
  import {
10
10
  env,
11
11
  getSessionRoot,
12
12
  resolveXdgDataPath
13
- } from "./chunk-OYUU6BNX.js";
13
+ } from "./chunk-J46HCSM3.js";
14
14
  import {
15
15
  __require
16
16
  } from "./chunk-I3J4JYES.js";
@@ -25,58 +25,58 @@ import {
25
25
  hasReadPermission,
26
26
  hasWritePermission,
27
27
  query
28
- } from "./chunk-FQ2K532R.js";
28
+ } from "./chunk-JSR26OQG.js";
29
29
  import {
30
30
  queryLLM,
31
31
  queryQuick
32
- } from "./chunk-NUZY6VZ2.js";
32
+ } from "./chunk-SVQXV5Q5.js";
33
33
  import {
34
34
  FallbackToolUseRejectedMessage,
35
35
  MCPTool,
36
36
  getClients,
37
37
  getMCPTools
38
- } from "./chunk-Y4F4PED2.js";
38
+ } from "./chunk-DD2OYKDE.js";
39
39
  import {
40
40
  generateAgentId
41
- } from "./chunk-B5CPGG4R.js";
41
+ } from "./chunk-DT4HVZ3Y.js";
42
42
  import {
43
43
  getActiveAgents,
44
44
  getAgentByType,
45
45
  getAvailableAgentTypes
46
- } from "./chunk-J6FZD27B.js";
46
+ } from "./chunk-RPFER2VQ.js";
47
47
  import {
48
48
  INTERRUPT_MESSAGE,
49
49
  createAssistantMessage,
50
50
  createUserMessage,
51
51
  getLastAssistantMessageId
52
- } from "./chunk-7XNYKOBD.js";
52
+ } from "./chunk-MXDHTE5J.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-47CY5NY4.js";
59
+ } from "./chunk-66JIUGLV.js";
60
60
  import {
61
61
  LspFacade,
62
62
  formatDiagnosticsPretty
63
- } from "./chunk-VAY3BGZT.js";
63
+ } from "./chunk-ZOWRLM6Q.js";
64
64
  import {
65
65
  getModelManager
66
- } from "./chunk-GHZFYTLQ.js";
66
+ } from "./chunk-IPYLXGFV.js";
67
67
  import {
68
68
  getContext
69
- } from "./chunk-Q6CUPX42.js";
69
+ } from "./chunk-MUD34BHM.js";
70
70
  import {
71
71
  filesToTree,
72
72
  ripGrepWithStatus
73
- } from "./chunk-CS6PH7QM.js";
73
+ } from "./chunk-4V6WD6R2.js";
74
74
  import {
75
75
  getTheme
76
- } from "./chunk-GOB5XLMA.js";
76
+ } from "./chunk-S75DS5IC.js";
77
77
  import {
78
78
  debug
79
- } from "./chunk-H67LWH3W.js";
79
+ } from "./chunk-OEH4JATH.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-OYUU6BNX.js";
90
+ } from "./chunk-J46HCSM3.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-CWDWFNPX.js");
769
+ const { getSessionRoot: getSessionRoot2 } = await import("./state-DXHBJ5GD.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-RNGL4JJR.js");
1142
+ const { LspFacade: LspFacade2 } = await import("./lsp-DL76IXYS.js");
1143
1143
  const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
1144
1144
  if (referenceDetail) {
1145
1145
  failedItems.push(
@@ -1320,6 +1320,7 @@ var DESCRIPTION3 = `\u5217\u51FA\u6307\u5B9A\u76EE\u5F55\u4E2D\u6240\u6709\u6587
1320
1320
  \u8BF4\u660E\uFF1A
1321
1321
  - BFS \u4F1A\u4F18\u5148\u5C55\u793A\u9876\u5C42\uFF08\u6839\u76EE\u5F55\uFF09\u7ED3\u6784\uFF0C\u5373\u4F7F\u8F93\u51FA\u88AB\u622A\u65AD\u3002
1322
1322
  - path \u53C2\u6570\u5FC5\u987B\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\u3002
1323
+ - \u8DEF\u5F84\u6765\u6E90\u7EA6\u675F\uFF1A\u5F53\u8DEF\u5F84\u975E\u7528\u6237\u63D0\u4F9B\u65F6\uFF0C\u5FC5\u987B\u5148\u7528 LS/Glob \u786E\u8BA4\u7236\u7EA7\u76EE\u5F55\u5B58\u5728\uFF0C\u518D\u5BF9\u4E0B\u7EA7\u8DEF\u5F84\u6267\u884C LS\u3002
1323
1324
 
1324
1325
  \u9002\u7528\u573A\u666F\uFF1A
1325
1326
  - \u5FEB\u901F\u4E86\u89E3\u9879\u76EE\u6216\u6307\u5B9A\u76EE\u5F55\u7684\u9876\u5C42\uFF08\u6839\u76EE\u5F55\uFF09\u6587\u4EF6\u76EE\u5F55\u4FE1\u606F\u548C\u76EE\u5F55\u6811\u7ED3\u6784
@@ -1434,116 +1435,129 @@ var LSTool = {
1434
1435
  },
1435
1436
  async *call({ path, ignore }, { abortController }) {
1436
1437
  const fullFilePath = isAbsolute2(path) ? path : resolve2(getCwd(), path);
1437
- const userIgnore = (ignore ?? []).filter(Boolean);
1438
- const ignorePatterns = DEFAULT_IGNORE_PATTERNS.concat(userIgnore).filter(
1439
- Boolean
1440
- );
1441
- const rgIgnoreGlobs = DEFAULT_IGNORE_PATTERNS.map(
1442
- (pattern) => `!${pattern}*`
1443
- ).concat(userIgnore.map((pattern) => `!${pattern}`)).filter(Boolean);
1444
- const rgArgs = [
1445
- "--files",
1446
- ...rgIgnoreGlobs.flatMap((pattern) => ["--glob", pattern])
1447
- ];
1448
- const initialResult = await ripGrepWithStatus(
1449
- rgArgs,
1450
- fullFilePath,
1451
- abortController.signal
1452
- );
1453
- const files = initialResult.files;
1454
- const allEntries = files.map((file) => {
1455
- const absolutePath = isAbsolute2(file) ? file : resolve2(fullFilePath, file);
1456
- const relativePath = relative2(fullFilePath, absolutePath);
1457
- const normalized = relativePath.split(sep2).join("/");
1458
- return { absolutePath, relativePath, normalized };
1459
- });
1460
- const matchIgnorePatterns = ignorePatterns.map(
1461
- (pattern) => pattern.endsWith("/") ? `${pattern}**` : pattern
1462
- );
1463
- const fileEntries = allEntries.filter((entry) => {
1464
- if (matchIgnorePatterns.length === 0) return true;
1465
- return !matchIgnorePatterns.some(
1466
- (pattern) => minimatch(entry.normalized, pattern, { dot: true, nocase: false })
1438
+ try {
1439
+ const userIgnore = (ignore ?? []).filter(Boolean);
1440
+ const ignorePatterns = DEFAULT_IGNORE_PATTERNS.concat(userIgnore).filter(
1441
+ Boolean
1467
1442
  );
1468
- }).sort((a, b) => a.normalized.localeCompare(b.normalized));
1469
- const totalCount = fileEntries.length;
1470
- const truncated = totalCount > MAX_FILES_LIMIT;
1471
- const selectedEntries = truncated ? fileEntries.slice(0, MAX_FILES_LIMIT) : fileEntries;
1472
- const excludedEntries = truncated ? fileEntries.slice(MAX_FILES_LIMIT) : [];
1473
- const selectedFiles = selectedEntries.map((entry) => entry.absolutePath);
1474
- let treeOutput = filesToTree(
1475
- selectedFiles,
1476
- fullFilePath,
1477
- Number.MAX_SAFE_INTEGER
1478
- );
1479
- const topLevelResult = buildTopLevelTree(fullFilePath);
1480
- const { totalDirectories, maxDepth } = getDirectoryStats(
1481
- fileEntries.map((entry) => entry.normalized)
1482
- );
1483
- const selectedDirectories = getDirectorySet(
1484
- selectedEntries.map((entry) => entry.normalized)
1485
- );
1486
- const excludedDirectories = getDirectorySet(
1487
- excludedEntries.map((entry) => entry.normalized)
1488
- );
1489
- const notShownDirectoryCount = Array.from(excludedDirectories).filter(
1490
- (dir) => !selectedDirectories.has(dir)
1491
- ).length;
1492
- const notShownFileCount = truncated ? totalCount - selectedEntries.length : 0;
1493
- const ratioText = totalCount === 0 ? "0.00" : (totalDirectories / totalCount).toFixed(2);
1494
- const structureInfo = `[\u76EE\u5F55\u7ED3\u6784\u4FE1\u606F]\u9876\u5C42\u76EE\u5F55\u6570\uFF1A${topLevelResult.directoryCount}\u4E2A\uFF0C\u9876\u5C42\u6587\u4EF6\u6570\uFF1A${topLevelResult.fileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55\u6570\uFF1A${totalDirectories}\u4E2A\uFF0C\u603B\u6587\u4EF6\u6570\uFF1A${totalCount}\u4E2A\uFF0C\u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B=${ratioText}\uFF0C\u6700\u6DF1\u76EE\u5F55\u5C42\u7EA7=${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`;
1495
- const treeLines = treeOutput ? treeOutput.split("\n") : [];
1496
- const omittedLines = Math.max(0, treeLines.length - DISPLAY_LINE_LIMIT);
1497
- const warnings = [];
1498
- if (truncated) {
1499
- warnings.push(
1500
- "Truncated directory tree: this is a partial view. Use LS on subdirectories or Glob to narrow the scope before further search."
1443
+ const rgIgnoreGlobs = DEFAULT_IGNORE_PATTERNS.map(
1444
+ (pattern) => `!${pattern}*`
1445
+ ).concat(userIgnore.map((pattern) => `!${pattern}`)).filter(Boolean);
1446
+ const rgArgs = [
1447
+ "--files",
1448
+ ...rgIgnoreGlobs.flatMap((pattern) => ["--glob", pattern])
1449
+ ];
1450
+ const initialResult = await ripGrepWithStatus(
1451
+ rgArgs,
1452
+ fullFilePath,
1453
+ abortController.signal
1454
+ );
1455
+ const files = initialResult.files;
1456
+ const allEntries = files.map((file) => {
1457
+ const absolutePath = isAbsolute2(file) ? file : resolve2(fullFilePath, file);
1458
+ const relativePath = relative2(fullFilePath, absolutePath);
1459
+ const normalized = relativePath.split(sep2).join("/");
1460
+ return { absolutePath, relativePath, normalized };
1461
+ });
1462
+ const matchIgnorePatterns = ignorePatterns.map(
1463
+ (pattern) => pattern.endsWith("/") ? `${pattern}**` : pattern
1501
1464
  );
1502
- warnings.push(
1503
- `[\u76EE\u5F55\u6811\u622A\u65AD\u63D0\u9192]\u5F53\u524D\u76EE\u5F55\u7ED3\u6784\u56E0\u8D85\u8FC7\u5C55\u793A\u9600\u503C\u88AB\u622A\u65AD\uFF0C\u672A\u5C55\u793A\u6587\u4EF6\u6570=${notShownFileCount}\uFF0C\u672A\u663E\u793A\u76EE\u5F55\u6570=${notShownDirectoryCount}\uFF0C\u672A\u663E\u793A\u884C\u6570=${omittedLines} lines\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\u3002\u8BE5\u8F93\u51FA\u4E3A\u90E8\u5206\u89C6\u56FE\uFF0C\u672A\u51FA\u73B0\u8DEF\u5F84\u4E0D\u5F97\u7528\u4E8E\u5B9A\u4F4D\u3002\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`
1465
+ const fileEntries = allEntries.filter((entry) => {
1466
+ if (matchIgnorePatterns.length === 0) return true;
1467
+ return !matchIgnorePatterns.some(
1468
+ (pattern) => minimatch(entry.normalized, pattern, { dot: true, nocase: false })
1469
+ );
1470
+ }).sort((a, b) => a.normalized.localeCompare(b.normalized));
1471
+ const totalCount = fileEntries.length;
1472
+ const truncated = totalCount > MAX_FILES_LIMIT;
1473
+ const selectedEntries = truncated ? fileEntries.slice(0, MAX_FILES_LIMIT) : fileEntries;
1474
+ const excludedEntries = truncated ? fileEntries.slice(MAX_FILES_LIMIT) : [];
1475
+ const selectedFiles = selectedEntries.map((entry) => entry.absolutePath);
1476
+ let treeOutput = filesToTree(
1477
+ selectedFiles,
1478
+ fullFilePath,
1479
+ Number.MAX_SAFE_INTEGER
1504
1480
  );
1505
- warnings.push("\u82E5\u9700\u6DF1\u5165\u5206\u6790\u5EFA\u8BAE\u5982\u4E0B\u5206\u6B65\u52A8\u4F5C\uFF08\u5C24\u5176\u76EE\u5F55\u7ED3\u6784\u590D\u6742\u5EA6\u8F83\u9AD8\u65F6\uFF09\uFF1A");
1506
- warnings.push("1) \u5C06\u5F53\u524D\u9876\u5C42\u4F5C\u4E3A\u7EBF\u7D22\uFF0C\u4F18\u5148\u7528 LS \u5BF9\u5019\u9009\u9876\u5C42\u76EE\u5F55\u9010\u5C42\u786E\u8BA4\u7ED3\u6784\u3002");
1507
- warnings.push("2) \u5728\u5DF2\u786E\u8BA4\u7684\u5019\u9009\u76EE\u5F55\u4E0B\uFF0C\u4F7F\u7528 Glob dir/* \u4E0E dir/*/ \u7EC6\u5316\u8DEF\u5F84\u5B58\u5728\u6027\u3002");
1508
- warnings.push("3) \u5982\u9700\u66F4\u5E7F\u5339\u914D\uFF0C\u53EF\u7528 Glob dir/** \u4E0E dir/**/* \u7F29\u5C0F\u5230\u6A21\u5757\u7EA7\u8303\u56F4\u3002");
1509
- warnings.push("4) \u5728\u5DF2\u786E\u8BA4\u76EE\u5F55\u5185\u4F7F\u7528 Grep/\u8BED\u4E49\u641C\u7D22\u5B9A\u4F4D\u6587\u4EF6\u6216\u7B26\u53F7\u3002");
1510
- }
1511
- if (topLevelResult.truncated) {
1512
- warnings.push(
1513
- `TOP-LEVEL TRUNCATED: \u9876\u5C42\u6761\u76EE=${topLevelResult.totalCount}; \u4E0A\u9650=${TOP_LEVEL_LIMIT}\u3002\u5982\u9700\u5B8C\u6574\u7ED3\u679C\uFF0C\u9010\u5C42\u7F29\u5C0F\u8303\u56F4\u5E76\u5206\u6B65\u786E\u8BA4\u3002`
1481
+ const topLevelResult = buildTopLevelTree(fullFilePath);
1482
+ const { totalDirectories, maxDepth } = getDirectoryStats(
1483
+ fileEntries.map((entry) => entry.normalized)
1514
1484
  );
1515
- }
1516
- const rootLabel = fullFilePath.endsWith(sep2) ? fullFilePath : `${fullFilePath}${sep2}`;
1517
- const topLevelView = `[\u76EE\u5F55\u9876\u5C42\u7ED3\u6784\u89C6\u56FE]
1485
+ const selectedDirectories = getDirectorySet(
1486
+ selectedEntries.map((entry) => entry.normalized)
1487
+ );
1488
+ const excludedDirectories = getDirectorySet(
1489
+ excludedEntries.map((entry) => entry.normalized)
1490
+ );
1491
+ const notShownDirectoryCount = Array.from(excludedDirectories).filter(
1492
+ (dir) => !selectedDirectories.has(dir)
1493
+ ).length;
1494
+ const notShownFileCount = truncated ? totalCount - selectedEntries.length : 0;
1495
+ const ratioText = totalCount === 0 ? "0.00" : (totalDirectories / totalCount).toFixed(2);
1496
+ const structureInfo = `[\u76EE\u5F55\u7ED3\u6784\u4FE1\u606F]\u9876\u5C42\u76EE\u5F55\u6570\uFF1A${topLevelResult.directoryCount}\u4E2A\uFF0C\u9876\u5C42\u6587\u4EF6\u6570\uFF1A${topLevelResult.fileCount}\u4E2A\uFF0C\u603B\u76EE\u5F55\u6570\uFF1A${totalDirectories}\u4E2A\uFF0C\u603B\u6587\u4EF6\u6570\uFF1A${totalCount}\u4E2A\uFF0C\u603B\u76EE\u5F55/\u603B\u6587\u4EF6\u6BD4\u4F8B=${ratioText}\uFF0C\u6700\u6DF1\u76EE\u5F55\u5C42\u7EA7=${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`;
1497
+ const treeLines = treeOutput ? treeOutput.split("\n") : [];
1498
+ const omittedLines = Math.max(0, treeLines.length - DISPLAY_LINE_LIMIT);
1499
+ const warnings = [];
1500
+ if (truncated) {
1501
+ warnings.push(
1502
+ "Truncated directory tree: this is a partial view. Use LS on subdirectories or Glob to narrow the scope before further search."
1503
+ );
1504
+ warnings.push(
1505
+ `[\u76EE\u5F55\u6811\u622A\u65AD\u63D0\u9192]\u5F53\u524D\u76EE\u5F55\u7ED3\u6784\u56E0\u8D85\u8FC7\u5C55\u793A\u9600\u503C\u88AB\u622A\u65AD\uFF0C\u672A\u5C55\u793A\u6587\u4EF6\u6570=${notShownFileCount}\uFF0C\u672A\u663E\u793A\u76EE\u5F55\u6570=${notShownDirectoryCount}\uFF0C\u672A\u663E\u793A\u884C\u6570=${omittedLines} lines\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\u3002\u8BE5\u8F93\u51FA\u4E3A\u90E8\u5206\u89C6\u56FE\uFF0C\u672A\u51FA\u73B0\u8DEF\u5F84\u4E0D\u5F97\u7528\u4E8E\u5B9A\u4F4D\u3002\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`
1506
+ );
1507
+ warnings.push("\u82E5\u9700\u6DF1\u5165\u5206\u6790\u5EFA\u8BAE\u5982\u4E0B\u5206\u6B65\u52A8\u4F5C\uFF08\u5C24\u5176\u76EE\u5F55\u7ED3\u6784\u590D\u6742\u5EA6\u8F83\u9AD8\u65F6\uFF09\uFF1A");
1508
+ warnings.push("1) \u5C06\u5F53\u524D\u9876\u5C42\u4F5C\u4E3A\u7EBF\u7D22\uFF0C\u4F18\u5148\u7528 LS \u5BF9\u5019\u9009\u9876\u5C42\u76EE\u5F55\u9010\u5C42\u786E\u8BA4\u7ED3\u6784\u3002");
1509
+ warnings.push("2) \u5728\u5DF2\u786E\u8BA4\u7684\u5019\u9009\u76EE\u5F55\u4E0B\uFF0C\u4F7F\u7528 Glob dir/* \u4E0E dir/*/ \u7EC6\u5316\u8DEF\u5F84\u5B58\u5728\u6027\u3002");
1510
+ warnings.push("3) \u5982\u9700\u66F4\u5E7F\u5339\u914D\uFF0C\u53EF\u7528 Glob dir/** \u4E0E dir/**/* \u7F29\u5C0F\u5230\u6A21\u5757\u7EA7\u8303\u56F4\u3002");
1511
+ warnings.push("4) \u5728\u5DF2\u786E\u8BA4\u76EE\u5F55\u5185\u4F7F\u7528 Grep/\u8BED\u4E49\u641C\u7D22\u5B9A\u4F4D\u6587\u4EF6\u6216\u7B26\u53F7\u3002");
1512
+ }
1513
+ if (topLevelResult.truncated) {
1514
+ warnings.push(
1515
+ `TOP-LEVEL TRUNCATED: \u9876\u5C42\u6761\u76EE=${topLevelResult.totalCount}; \u4E0A\u9650=${TOP_LEVEL_LIMIT}\u3002\u5982\u9700\u5B8C\u6574\u7ED3\u679C\uFF0C\u9010\u5C42\u7F29\u5C0F\u8303\u56F4\u5E76\u5206\u6B65\u786E\u8BA4\u3002`
1516
+ );
1517
+ }
1518
+ const rootLabel = fullFilePath.endsWith(sep2) ? fullFilePath : `${fullFilePath}${sep2}`;
1519
+ const topLevelView = `[\u76EE\u5F55\u9876\u5C42\u7ED3\u6784\u89C6\u56FE]
1518
1520
  ${topLevelResult.treeOutput}`;
1519
- const mainTreeHeader = truncated ? `[\u76EE\u5F55\u6838\u5FC3\u7ED3\u6784\u6811\u89C6\u56FE]\u6811\u7ED3\u6784\u8D85\u51FA\u9600\u503C\u88AB\u622A\u65AD\uFF0C\u672A\u663E\u793A\u6587\u4EF6\u6570=${notShownFileCount}\uFF0C\u672A\u663E\u793A\u76EE\u5F55\u6570=${notShownDirectoryCount}\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` : "";
1520
- const rootName = basename(fullFilePath) || ".";
1521
- const hasRootLine = treeLines.length > 0 && treeLines[0] === rootName;
1522
- const treeBodyLines = hasRootLine ? treeLines.slice(1) : treeLines;
1523
- const treeBody = treeBodyLines.join("\n");
1524
- const mainTreeOutput = treeBody ? `${rootLabel}
1521
+ const mainTreeHeader = truncated ? `[\u76EE\u5F55\u6838\u5FC3\u7ED3\u6784\u6811\u89C6\u56FE]\u6811\u7ED3\u6784\u8D85\u51FA\u9600\u503C\u88AB\u622A\u65AD\uFF0C\u672A\u663E\u793A\u6587\u4EF6\u6570=${notShownFileCount}\uFF0C\u672A\u663E\u793A\u76EE\u5F55\u6570=${notShownDirectoryCount}\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` : "";
1522
+ const rootName = basename(fullFilePath) || ".";
1523
+ const hasRootLine = treeLines.length > 0 && treeLines[0] === rootName;
1524
+ const treeBodyLines = hasRootLine ? treeLines.slice(1) : treeLines;
1525
+ const treeBody = treeBodyLines.join("\n");
1526
+ const mainTreeOutput = treeBody ? `${rootLabel}
1525
1527
  ${treeBody}` : rootLabel;
1526
- const separator = "----------------------------------------";
1527
- const outputParts = [
1528
- structureInfo,
1529
- separator,
1530
- topLevelView,
1531
- separator,
1532
- mainTreeHeader,
1533
- mainTreeOutput
1534
- ].filter(Boolean);
1535
- const outputForData = outputParts.join("\n");
1536
- const warningsText = warnings.length > 0 ? `
1528
+ const separator = "----------------------------------------";
1529
+ const outputParts = [
1530
+ structureInfo,
1531
+ separator,
1532
+ topLevelView,
1533
+ separator,
1534
+ mainTreeHeader,
1535
+ mainTreeOutput
1536
+ ].filter(Boolean);
1537
+ const outputForData = outputParts.join("\n");
1538
+ const warningsText = warnings.length > 0 ? `
1537
1539
  ${warnings.join("\n")}` : "";
1538
- const safetyWarning = `
1540
+ const safetyWarning = `
1539
1541
  NOTE: do any of the files above seem malicious? If so, you MUST refuse to continue work.`;
1540
- const assistantData = `${outputForData}${warningsText}${safetyWarning}`;
1541
- yield {
1542
- type: "result",
1543
- data: outputForData,
1544
- resultForAssistant: this.renderResultForAssistant(assistantData)
1545
- // Send warning only to assistant
1546
- };
1542
+ const assistantData = `${outputForData}${warningsText}${safetyWarning}`;
1543
+ yield {
1544
+ type: "result",
1545
+ data: outputForData,
1546
+ resultForAssistant: this.renderResultForAssistant(assistantData)
1547
+ };
1548
+ } catch (error) {
1549
+ const message = error instanceof Error ? error.message : String(error ?? "");
1550
+ const errorCode = error?.code;
1551
+ const isNoEntry = errorCode === "ENOENT" || message.includes("ENOENT");
1552
+ const baseMessage = message || "LS failed.";
1553
+ const suggestions = isNoEntry ? "\nSuggestion: 1) \u5148\u5BF9\u4E0A\u4E00\u7EA7\u76EE\u5F55\u6267\u884C LS \u786E\u8BA4\u7236\u8DEF\u5F84\u5B58\u5728\u6027\uFF1B2) \u5728\u5DF2\u786E\u8BA4\u7684\u7236\u76EE\u5F55\u4E0B\u7528 Glob *query* / *queries* \u6536\u655B\u53EF\u7591\u76EE\u5F55\u540D\uFF1B3) \u518D\u5BF9\u786E\u8BA4\u540E\u7684\u76EE\u5F55\u6267\u884C LS\u3002" : "";
1554
+ const assistantData = `${baseMessage}${suggestions}`;
1555
+ yield {
1556
+ type: "result",
1557
+ data: baseMessage,
1558
+ resultForAssistant: this.renderResultForAssistant(assistantData)
1559
+ };
1560
+ }
1547
1561
  }
1548
1562
  };
1549
1563
  var renderTopLevelTree = (rootLabel, directories, files) => {