dominds 1.25.1 → 1.25.2

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 (181) hide show
  1. package/README.md +4 -3
  2. package/README.zh.md +4 -3
  3. package/dist/team.js +4 -1
  4. package/dist/tools/builtins.js +30 -0
  5. package/dist/tools/fs.d.ts +2 -0
  6. package/dist/tools/fs.js +281 -2
  7. package/dist/tools/os.d.ts +11 -0
  8. package/dist/tools/os.js +20 -9
  9. package/dist/tools/picture.d.ts +1 -0
  10. package/dist/tools/picture.js +64 -1
  11. package/dist/tools/prompts/codex_inspect_and_patch_tools/en/tools.md +5 -0
  12. package/dist/tools/prompts/codex_inspect_and_patch_tools/zh/tools.md +5 -0
  13. package/dist/tools/prompts/fs_read/en/errors.md +6 -0
  14. package/dist/tools/prompts/fs_read/en/index.md +17 -0
  15. package/dist/tools/prompts/fs_read/en/principles.md +5 -0
  16. package/dist/tools/prompts/fs_read/en/scenarios.md +3 -0
  17. package/dist/tools/prompts/fs_read/en/tools.md +11 -0
  18. package/dist/tools/prompts/fs_read/zh/errors.md +6 -0
  19. package/dist/tools/prompts/fs_read/zh/index.md +17 -0
  20. package/dist/tools/prompts/fs_read/zh/principles.md +5 -0
  21. package/dist/tools/prompts/fs_read/zh/scenarios.md +3 -0
  22. package/dist/tools/prompts/fs_read/zh/tools.md +11 -0
  23. package/dist/tools/prompts/os/en/index.md +1 -1
  24. package/dist/tools/prompts/os/en/principles.md +1 -1
  25. package/dist/tools/prompts/os/en/scenarios.md +21 -0
  26. package/dist/tools/prompts/os/en/tools.md +6 -0
  27. package/dist/tools/prompts/os/zh/index.md +1 -1
  28. package/dist/tools/prompts/os/zh/principles.md +1 -1
  29. package/dist/tools/prompts/os/zh/scenarios.md +21 -0
  30. package/dist/tools/prompts/os/zh/tools.md +6 -0
  31. package/dist/tools/registry.d.ts +6 -0
  32. package/dist/tools/ripgrep.d.ts +5 -0
  33. package/dist/tools/ripgrep.js +482 -1
  34. package/dist/tools/txt.d.ts +34 -0
  35. package/dist/tools/txt.js +221 -1
  36. package/package.json +3 -3
  37. package/webapp/dist/assets/{_basePickBy-CG55qWp2.js → _basePickBy-CbWZ8qnS.js} +3 -3
  38. package/webapp/dist/assets/_basePickBy-CbWZ8qnS.js.map +1 -0
  39. package/webapp/dist/assets/{_baseUniq-Dd4UGB2O.js → _baseUniq-IY-Vfzx1.js} +2 -2
  40. package/webapp/dist/assets/_baseUniq-IY-Vfzx1.js.map +1 -0
  41. package/webapp/dist/assets/{arc-C2qiF4r3.js → arc--U2Vks6y.js} +2 -2
  42. package/webapp/dist/assets/arc--U2Vks6y.js.map +1 -0
  43. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DQ4Z8fy_.js → architectureDiagram-VXUJARFQ-DpryGqjy.js} +8 -26
  44. package/webapp/dist/assets/architectureDiagram-VXUJARFQ-DpryGqjy.js.map +1 -0
  45. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-CPvOuMZA.js → blockDiagram-VD42YOAC-TTufCfiE.js} +170 -187
  46. package/webapp/dist/assets/blockDiagram-VD42YOAC-TTufCfiE.js.map +1 -0
  47. package/webapp/dist/assets/{c4Diagram-IC4MRINW-DElaFpnJ.js → c4Diagram-YG6GDRKO-B4RPsw5H.js} +4 -4
  48. package/webapp/dist/assets/c4Diagram-YG6GDRKO-B4RPsw5H.js.map +1 -0
  49. package/webapp/dist/assets/{channel-BR7mZa90.js → channel-DAtGYJHZ.js} +2 -2
  50. package/webapp/dist/assets/channel-DAtGYJHZ.js.map +1 -0
  51. package/webapp/dist/assets/{chunk-4BX2VUAB-DTmXCBYX.js → chunk-4BX2VUAB-JtO__vAF.js} +2 -2
  52. package/webapp/dist/assets/chunk-4BX2VUAB-JtO__vAF.js.map +1 -0
  53. package/webapp/dist/assets/{chunk-55IACEB6-DeBB4aJ4.js → chunk-55IACEB6-JMRC8yG1.js} +2 -2
  54. package/webapp/dist/assets/chunk-55IACEB6-JMRC8yG1.js.map +1 -0
  55. package/webapp/dist/assets/{chunk-WL4C6EOR-V3Fq1ULq.js → chunk-B4BG7PRW-BDIpf8Iz.js} +121 -171
  56. package/webapp/dist/assets/chunk-B4BG7PRW-BDIpf8Iz.js.map +1 -0
  57. package/webapp/dist/assets/{chunk-NQ4KR5QH-DRcsqoac.js → chunk-DI55MBZ5-j9B4rifK.js} +7 -9
  58. package/webapp/dist/assets/chunk-DI55MBZ5-j9B4rifK.js.map +1 -0
  59. package/webapp/dist/assets/{chunk-FMBD7UC4-CXpgeev4.js → chunk-FMBD7UC4-DFXKLjHC.js} +2 -2
  60. package/webapp/dist/assets/chunk-FMBD7UC4-DFXKLjHC.js.map +1 -0
  61. package/webapp/dist/assets/{chunk-KX2RTZJC-DWG_wpHB.js → chunk-QN33PNHL-BKzkeJ-b.js} +2 -2
  62. package/webapp/dist/assets/chunk-QN33PNHL-BKzkeJ-b.js.map +1 -0
  63. package/webapp/dist/assets/{chunk-QZHKN3VN-B9GPAJ2s.js → chunk-QZHKN3VN-DiZd3UNl.js} +2 -2
  64. package/webapp/dist/assets/chunk-QZHKN3VN-DiZd3UNl.js.map +1 -0
  65. package/webapp/dist/assets/{chunk-JSJVCQXG-DWfckfhO.js → chunk-TZMSLE5B-BaE4C244.js} +6 -14
  66. package/webapp/dist/assets/chunk-TZMSLE5B-BaE4C244.js.map +1 -0
  67. package/webapp/dist/assets/{classDiagram-VBA2DB6C-DspG486Z.js → classDiagram-2ON5EDUG-CNF8ZohD.js} +6 -7
  68. package/webapp/dist/assets/classDiagram-2ON5EDUG-CNF8ZohD.js.map +1 -0
  69. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DspG486Z.js → classDiagram-v2-WZHVMYZB-CNF8ZohD.js} +6 -7
  70. package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-CNF8ZohD.js.map +1 -0
  71. package/webapp/dist/assets/{clone-M8ztABN5.js → clone-Nq0Ko0Gv.js} +2 -2
  72. package/webapp/dist/assets/clone-Nq0Ko0Gv.js.map +1 -0
  73. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DZihobe3.js → cose-bilkent-S5V4N54A-uHPLSeKv.js} +2 -2
  74. package/webapp/dist/assets/cose-bilkent-S5V4N54A-uHPLSeKv.js.map +1 -0
  75. package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
  76. package/webapp/dist/assets/{dagre-KLK3FWXG-DBLWy3vi.js → dagre-6UL2VRFP-C1awWpU3.js} +7 -7
  77. package/webapp/dist/assets/dagre-6UL2VRFP-C1awWpU3.js.map +1 -0
  78. package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
  79. package/webapp/dist/assets/{diagram-E7M64L7V-D7IrPWaY.js → diagram-PSM6KHXK-Bf69p76M.js} +10 -10
  80. package/webapp/dist/assets/diagram-PSM6KHXK-Bf69p76M.js.map +1 -0
  81. package/webapp/dist/assets/{diagram-IFDJBPK2-DbF-vN3U.js → diagram-QEK2KX5R-Bvlbx8Jp.js} +8 -9
  82. package/webapp/dist/assets/diagram-QEK2KX5R-Bvlbx8Jp.js.map +1 -0
  83. package/webapp/dist/assets/{diagram-P4PSJMXO-BxBVRVaM.js → diagram-S2PKOQOG-CGjGalBu.js} +8 -8
  84. package/webapp/dist/assets/diagram-S2PKOQOG-CGjGalBu.js.map +1 -0
  85. package/webapp/dist/assets/{erDiagram-INFDFZHY-ny9JoOhV.js → erDiagram-Q2GNP2WA-Ds3qhwkG.js} +75 -96
  86. package/webapp/dist/assets/erDiagram-Q2GNP2WA-Ds3qhwkG.js.map +1 -0
  87. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-BMgWUlvY.js → flowDiagram-NV44I4VS-B1wDG_l5.js} +81 -98
  88. package/webapp/dist/assets/flowDiagram-NV44I4VS-B1wDG_l5.js.map +1 -0
  89. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-CCYpj3PM.js → ganttDiagram-JELNMOA3-BwuYt2bO.js} +3 -28
  90. package/webapp/dist/assets/ganttDiagram-JELNMOA3-BwuYt2bO.js.map +1 -0
  91. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-BFJGaDtk.js → gitGraphDiagram-V2S2FVAM-B2Tw773z.js} +46 -38
  92. package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-B2Tw773z.js.map +1 -0
  93. package/webapp/dist/assets/graph-CS_H7jBi.js +425 -0
  94. package/webapp/dist/assets/graph-CS_H7jBi.js.map +1 -0
  95. package/webapp/dist/assets/{index-EvfDN91D.js → index-arD81Nnh.js} +1056 -1031
  96. package/webapp/dist/assets/{index-EvfDN91D.js.map → index-arD81Nnh.js.map} +1 -1
  97. package/webapp/dist/assets/{index-BQoNJEGT.css → index-yycTJNYb.css} +1 -1
  98. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-Dnve0aOc.js → infoDiagram-HS3SLOUP-C9_JKYhm.js} +7 -7
  99. package/webapp/dist/assets/infoDiagram-HS3SLOUP-C9_JKYhm.js.map +1 -0
  100. package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
  101. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-D8_2EbDV.js → journeyDiagram-XKPGCS4Q-BhZggYOL.js} +5 -5
  102. package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BhZggYOL.js.map +1 -0
  103. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-BdmMXQQk.js → kanban-definition-3W4ZIXB7-B-R2Xm4Y.js} +3 -5
  104. package/webapp/dist/assets/kanban-definition-3W4ZIXB7-B-R2Xm4Y.js.map +1 -0
  105. package/webapp/dist/assets/{layout-3tA84hoP.js → layout-BzMatxDa.js} +5 -5
  106. package/webapp/dist/assets/layout-BzMatxDa.js.map +1 -0
  107. package/webapp/dist/assets/{linear-CpN6Japh.js → linear-BuuJkw_U.js} +2 -2
  108. package/webapp/dist/assets/linear-BuuJkw_U.js.map +1 -0
  109. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-HiYNz7qL.js → mindmap-definition-VGOIOE7T-BR7oDKBR.js} +5 -7
  110. package/webapp/dist/assets/mindmap-definition-VGOIOE7T-BR7oDKBR.js.map +1 -0
  111. package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
  112. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-DCVp50CX.js → pieDiagram-ADFJNKIX--QWeT2vZ.js} +8 -8
  113. package/webapp/dist/assets/pieDiagram-ADFJNKIX--QWeT2vZ.js.map +1 -0
  114. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CCX7dwY0.js → quadrantDiagram-AYHSOK5B-BpqtmN3r.js} +3 -3
  115. package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-BpqtmN3r.js.map +1 -0
  116. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-Cba7jjkf.js → requirementDiagram-UZGBJVZJ-CIXjIi4F.js} +6 -16
  117. package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-CIXjIi4F.js.map +1 -0
  118. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-Bz4iUubD.js → sankeyDiagram-TZEHDZUN-DJIt7SRz.js} +2 -2
  119. package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-DJIt7SRz.js.map +1 -0
  120. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DsFI9bic.js → sequenceDiagram-WL72ISMW-BpDK1ROT.js} +201 -601
  121. package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BpDK1ROT.js.map +1 -0
  122. package/webapp/dist/assets/{stateDiagram-RAJIS63D-DLv9OSg4.js → stateDiagram-FKZM4ZOC-BoKGfmHf.js} +9 -9
  123. package/webapp/dist/assets/stateDiagram-FKZM4ZOC-BoKGfmHf.js.map +1 -0
  124. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-DVlwzCvy.js → stateDiagram-v2-4FDKWEC3--haXC2JK.js} +5 -5
  125. package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3--haXC2JK.js.map +1 -0
  126. package/webapp/dist/assets/{timeline-definition-YZTLITO2-DnKbq6n0.js → timeline-definition-IT6M3QCI-BmSg3Hjf.js} +3 -3
  127. package/webapp/dist/assets/timeline-definition-IT6M3QCI-BmSg3Hjf.js.map +1 -0
  128. package/webapp/dist/assets/{treemap-KZPCXAKY-D9fYHZ__.js → treemap-GDKQZRPO-D9OuyDVA.js} +24 -37
  129. package/webapp/dist/assets/treemap-GDKQZRPO-D9OuyDVA.js.map +1 -0
  130. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-Bt-gKvam.js → xychartDiagram-PRI3JC2R-CVqSvO_S.js} +4 -4
  131. package/webapp/dist/assets/xychartDiagram-PRI3JC2R-CVqSvO_S.js.map +1 -0
  132. package/webapp/dist/index.html +2 -2
  133. package/webapp/dist/assets/_basePickBy-CG55qWp2.js.map +0 -1
  134. package/webapp/dist/assets/_baseUniq-Dd4UGB2O.js.map +0 -1
  135. package/webapp/dist/assets/arc-C2qiF4r3.js.map +0 -1
  136. package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-DQ4Z8fy_.js.map +0 -1
  137. package/webapp/dist/assets/blockDiagram-WCTKOSBZ-CPvOuMZA.js.map +0 -1
  138. package/webapp/dist/assets/c4Diagram-IC4MRINW-DElaFpnJ.js.map +0 -1
  139. package/webapp/dist/assets/channel-BR7mZa90.js.map +0 -1
  140. package/webapp/dist/assets/chunk-4BX2VUAB-DTmXCBYX.js.map +0 -1
  141. package/webapp/dist/assets/chunk-55IACEB6-DeBB4aJ4.js.map +0 -1
  142. package/webapp/dist/assets/chunk-FMBD7UC4-CXpgeev4.js.map +0 -1
  143. package/webapp/dist/assets/chunk-JSJVCQXG-DWfckfhO.js.map +0 -1
  144. package/webapp/dist/assets/chunk-KX2RTZJC-DWG_wpHB.js.map +0 -1
  145. package/webapp/dist/assets/chunk-NQ4KR5QH-DRcsqoac.js.map +0 -1
  146. package/webapp/dist/assets/chunk-QZHKN3VN-B9GPAJ2s.js.map +0 -1
  147. package/webapp/dist/assets/chunk-WL4C6EOR-V3Fq1ULq.js.map +0 -1
  148. package/webapp/dist/assets/classDiagram-VBA2DB6C-DspG486Z.js.map +0 -1
  149. package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-DspG486Z.js.map +0 -1
  150. package/webapp/dist/assets/clone-M8ztABN5.js.map +0 -1
  151. package/webapp/dist/assets/cose-bilkent-S5V4N54A-DZihobe3.js.map +0 -1
  152. package/webapp/dist/assets/dagre-KLK3FWXG-DBLWy3vi.js.map +0 -1
  153. package/webapp/dist/assets/diagram-E7M64L7V-D7IrPWaY.js.map +0 -1
  154. package/webapp/dist/assets/diagram-IFDJBPK2-DbF-vN3U.js.map +0 -1
  155. package/webapp/dist/assets/diagram-P4PSJMXO-BxBVRVaM.js.map +0 -1
  156. package/webapp/dist/assets/erDiagram-INFDFZHY-ny9JoOhV.js.map +0 -1
  157. package/webapp/dist/assets/flowDiagram-PKNHOUZH-BMgWUlvY.js.map +0 -1
  158. package/webapp/dist/assets/ganttDiagram-A5KZAMGK-CCYpj3PM.js.map +0 -1
  159. package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-BFJGaDtk.js.map +0 -1
  160. package/webapp/dist/assets/graph-Cp0m7fHH.js +0 -782
  161. package/webapp/dist/assets/graph-Cp0m7fHH.js.map +0 -1
  162. package/webapp/dist/assets/infoDiagram-LFFYTUFH-Dnve0aOc.js.map +0 -1
  163. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DkSZM5sz.js +0 -966
  164. package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-DkSZM5sz.js.map +0 -1
  165. package/webapp/dist/assets/journeyDiagram-4ABVD52K-D8_2EbDV.js.map +0 -1
  166. package/webapp/dist/assets/kanban-definition-K7BYSVSG-BdmMXQQk.js.map +0 -1
  167. package/webapp/dist/assets/layout-3tA84hoP.js.map +0 -1
  168. package/webapp/dist/assets/linear-CpN6Japh.js.map +0 -1
  169. package/webapp/dist/assets/mindmap-definition-YRQLILUH-HiYNz7qL.js.map +0 -1
  170. package/webapp/dist/assets/pieDiagram-SKSYHLDU-DCVp50CX.js.map +0 -1
  171. package/webapp/dist/assets/quadrantDiagram-337W2JSQ-CCX7dwY0.js.map +0 -1
  172. package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-Cba7jjkf.js.map +0 -1
  173. package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-Bz4iUubD.js.map +0 -1
  174. package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-DsFI9bic.js.map +0 -1
  175. package/webapp/dist/assets/stateDiagram-RAJIS63D-DLv9OSg4.js.map +0 -1
  176. package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-DVlwzCvy.js.map +0 -1
  177. package/webapp/dist/assets/timeline-definition-YZTLITO2-DnKbq6n0.js.map +0 -1
  178. package/webapp/dist/assets/treemap-KZPCXAKY-D9fYHZ__.js.map +0 -1
  179. package/webapp/dist/assets/vennDiagram-LZ73GAT5-CzKI47Ba.js +0 -2487
  180. package/webapp/dist/assets/vennDiagram-LZ73GAT5-CzKI47Ba.js.map +0 -1
  181. package/webapp/dist/assets/xychartDiagram-JWTSCODW-Bt-gKvam.js.map +0 -1
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ripgrepSearchTool = exports.ripgrepFixedTool = exports.ripgrepSnippetsTool = exports.ripgrepCountTool = exports.ripgrepFilesTool = void 0;
39
+ exports.fsRipgrepSearchTool = exports.ripgrepSearchTool = exports.fsRipgrepFixedTool = exports.ripgrepFixedTool = exports.fsRipgrepSnippetsTool = exports.ripgrepSnippetsTool = exports.fsRipgrepCountTool = exports.ripgrepCountTool = exports.fsRipgrepFilesTool = exports.ripgrepFilesTool = void 0;
40
40
  /**
41
41
  * Module: tools/ripgrep
42
42
  *
@@ -629,6 +629,39 @@ function baseRgArgs(options, member) {
629
629
  globCompatibilityWarnings: filters.globCompatibilityWarnings,
630
630
  };
631
631
  }
632
+ function fsBaseRgArgs(options) {
633
+ const args = ['--no-messages', '--color=never'];
634
+ if (options.includeHidden)
635
+ args.push('--hidden');
636
+ if (options.followSymlinks)
637
+ args.push('--follow');
638
+ if (options.caseMode === 'smart')
639
+ args.push('--smart-case');
640
+ if (options.caseMode === 'sensitive')
641
+ args.push('--case-sensitive');
642
+ if (options.caseMode === 'insensitive')
643
+ args.push('--ignore-case');
644
+ if (options.fixedStrings)
645
+ args.push('--fixed-strings');
646
+ const simple = process.platform === 'win32'
647
+ ? extractSimpleExtensionGlobs(options.globs)
648
+ : { typeArgs: [], extensionFilters: [], passthroughGlobs: options.globs };
649
+ args.push(...simple.typeArgs);
650
+ for (const glob of simple.passthroughGlobs) {
651
+ args.push('--glob', glob);
652
+ }
653
+ const globCompatibilityWarnings = process.platform === 'win32' && simple.passthroughGlobs.length > 0
654
+ ? [
655
+ 'Some complex globs were passed through to rg --glob. On Windows, simple extension filters are translated to --type, but complex globs may still be affected by ripgrep glob/path compatibility.',
656
+ ]
657
+ : [];
658
+ return {
659
+ args,
660
+ postFilter: (relPath) => simple.extensionFilters.length === 0 ||
661
+ simple.extensionFilters.some((ext) => relPath.toLowerCase().endsWith(`.${ext}`)),
662
+ globCompatibilityWarnings,
663
+ };
664
+ }
632
665
  function buildRipgrepDiagnostics(run, filterPlan, returnedMatches) {
633
666
  const diagnostics = [];
634
667
  if (run.partialPathFailure) {
@@ -980,6 +1013,95 @@ exports.ripgrepFilesTool = {
980
1013
  return await runRipgrepFiles(caller, pattern, searchPath, options);
981
1014
  },
982
1015
  };
1016
+ async function runFsRipgrepFiles(pattern, searchPath, options) {
1017
+ const filterPlan = fsBaseRgArgs(options);
1018
+ const args = [
1019
+ ...filterPlan.args,
1020
+ '--files-with-matches',
1021
+ '--',
1022
+ pattern,
1023
+ normalizeRipgrepSearchPath(searchPath),
1024
+ ];
1025
+ try {
1026
+ let totalFiles = 0;
1027
+ const results = [];
1028
+ const run = await runRgLines(args, (line) => {
1029
+ if (!filterPlan.postFilter(line))
1030
+ return;
1031
+ totalFiles++;
1032
+ if (results.length < options.maxFiles)
1033
+ results.push({ path: line });
1034
+ });
1035
+ const diagnostics = buildRipgrepDiagnostics(run, filterPlan, totalFiles > 0);
1036
+ const truncated = totalFiles > options.maxFiles;
1037
+ const summary = totalFiles === 0
1038
+ ? formatRipgrepNoMatchesSummary(run.partialPathFailure)
1039
+ : truncated
1040
+ ? `Found ${totalFiles} files; showing first ${options.maxFiles} (truncated=true).${run.partialPathFailure ? ` ${RIPGREP_PARTIAL_PATH_FAILURE_SUMMARY}` : ''}`
1041
+ : `Found ${totalFiles} files.${run.partialPathFailure ? ` ${RIPGREP_PARTIAL_PATH_FAILURE_SUMMARY}` : ''}`;
1042
+ const yaml = [
1043
+ `status: ${run.partialPathFailure ? 'partial_failure' : 'ok'}`,
1044
+ `pattern: ${yamlQuote(pattern)}`,
1045
+ `mode: fs_files`,
1046
+ `path: ${yamlQuote(searchPath)}`,
1047
+ ...(options.globs.length > 0 ? [`globs: ${yamlFlowStringArray(options.globs)}`] : []),
1048
+ `case: ${options.caseMode}`,
1049
+ `fixed_strings: ${options.fixedStrings}`,
1050
+ `regex: ${!options.fixedStrings}`,
1051
+ `truncated: ${truncated}`,
1052
+ `limits:`,
1053
+ ` max_files: ${options.maxFiles}`,
1054
+ `totals:`,
1055
+ ` files_matched: ${totalFiles}`,
1056
+ `diagnostics:`,
1057
+ ` partial_path_failure: ${run.partialPathFailure}`,
1058
+ ` messages: ${yamlFlowStringArray(diagnostics)}`,
1059
+ `summary: ${yamlQuote(summary)}`,
1060
+ `results:`,
1061
+ ...results.map((r) => ` - path: ${yamlQuote(r.path)}`),
1062
+ ].join('\n');
1063
+ return run.partialPathFailure ? (0, tool_1.toolPartialFailure)(formatYamlCodeBlock(yaml)) : okYaml(yaml);
1064
+ }
1065
+ catch (error) {
1066
+ return failYaml([
1067
+ `status: error`,
1068
+ `pattern: ${yamlQuote(pattern)}`,
1069
+ `mode: fs_files`,
1070
+ `path: ${yamlQuote(searchPath)}`,
1071
+ `error: FAILED`,
1072
+ `summary: ${yamlQuote(error instanceof Error ? error.message : String(error))}`,
1073
+ ].join('\n'));
1074
+ }
1075
+ }
1076
+ exports.fsRipgrepFilesTool = {
1077
+ type: 'func',
1078
+ name: 'fs_ripgrep_files',
1079
+ description: 'Search local filesystem file paths containing a pattern without restricting paths to rtws (rg-backed).',
1080
+ descriptionI18n: {
1081
+ en: 'Search local filesystem file paths containing a pattern without restricting paths to rtws (rg-backed).',
1082
+ zh: '搜索本机文件系统中包含匹配内容的文件路径,不限制路径必须位于 rtws 内(rg 驱动)。',
1083
+ },
1084
+ parameters: exports.ripgrepFilesTool.parameters,
1085
+ argsValidation: 'dominds',
1086
+ call: async (_dlg, _caller, args) => {
1087
+ const pattern = requireNonEmptyStringArg(args, 'pattern');
1088
+ const searchPath = optionalStringArg(args, 'path') ?? '.';
1089
+ const globs = parseRipgrepGlobsArg(args);
1090
+ const caseMode = parseRipgrepCaseModeArg(args, 'smart');
1091
+ const fixedStrings = optionalBooleanArg(args, 'fixed_strings') ?? false;
1092
+ const includeHidden = optionalBooleanArg(args, 'include_hidden') ?? false;
1093
+ const followSymlinks = optionalBooleanArg(args, 'follow_symlinks') ?? false;
1094
+ const maxFiles = optionalPositiveIntegerArg(args, 'max_files') ?? 50;
1095
+ return await runFsRipgrepFiles(pattern, searchPath, {
1096
+ globs,
1097
+ caseMode,
1098
+ fixedStrings,
1099
+ includeHidden,
1100
+ followSymlinks,
1101
+ maxFiles,
1102
+ });
1103
+ },
1104
+ };
983
1105
  async function runRipgrepCount(caller, pattern, searchPath, options) {
984
1106
  const forbiddenPath = detectForbiddenRipgrepSearchPath(caller, searchPath);
985
1107
  if (forbiddenPath) {
@@ -1104,6 +1226,106 @@ exports.ripgrepCountTool = {
1104
1226
  return await runRipgrepCount(caller, pattern, searchPath, options);
1105
1227
  },
1106
1228
  };
1229
+ async function runFsRipgrepCount(pattern, searchPath, options) {
1230
+ const filterPlan = fsBaseRgArgs(options);
1231
+ const args = [
1232
+ ...filterPlan.args,
1233
+ '--count-matches',
1234
+ '--',
1235
+ pattern,
1236
+ normalizeRipgrepSearchPath(searchPath),
1237
+ ];
1238
+ try {
1239
+ let totalFiles = 0;
1240
+ let totalMatches = 0;
1241
+ const results = [];
1242
+ const run = await runRgLines(args, (line) => {
1243
+ const idx = line.lastIndexOf(':');
1244
+ if (idx <= 0)
1245
+ return;
1246
+ const p = line.slice(0, idx);
1247
+ if (!filterPlan.postFilter(p))
1248
+ return;
1249
+ const rawCount = line.slice(idx + 1);
1250
+ const count = Number.parseInt(rawCount, 10);
1251
+ if (!Number.isFinite(count))
1252
+ return;
1253
+ totalFiles++;
1254
+ totalMatches += count;
1255
+ if (results.length < options.maxFiles)
1256
+ results.push({ path: p, count });
1257
+ });
1258
+ const diagnostics = buildRipgrepDiagnostics(run, filterPlan, totalMatches > 0);
1259
+ const truncated = totalFiles > options.maxFiles;
1260
+ const summary = totalMatches === 0
1261
+ ? formatRipgrepNoMatchesSummary(run.partialPathFailure)
1262
+ : truncated
1263
+ ? `Counted ${totalMatches} matches in ${totalFiles} files; showing first ${options.maxFiles} files (truncated=true).${run.partialPathFailure ? ` ${RIPGREP_PARTIAL_PATH_FAILURE_SUMMARY}` : ''}`
1264
+ : `Counted ${totalMatches} matches in ${totalFiles} files.${run.partialPathFailure ? ` ${RIPGREP_PARTIAL_PATH_FAILURE_SUMMARY}` : ''}`;
1265
+ const yaml = [
1266
+ `status: ${run.partialPathFailure ? 'partial_failure' : 'ok'}`,
1267
+ `pattern: ${yamlQuote(pattern)}`,
1268
+ `mode: fs_count`,
1269
+ `path: ${yamlQuote(searchPath)}`,
1270
+ ...(options.globs.length > 0 ? [`globs: ${yamlFlowStringArray(options.globs)}`] : []),
1271
+ `case: ${options.caseMode}`,
1272
+ `fixed_strings: ${options.fixedStrings}`,
1273
+ `regex: ${!options.fixedStrings}`,
1274
+ `truncated: ${truncated}`,
1275
+ `limits:`,
1276
+ ` max_files: ${options.maxFiles}`,
1277
+ `totals:`,
1278
+ ` files_matched: ${totalFiles}`,
1279
+ ` matches: ${totalMatches}`,
1280
+ `diagnostics:`,
1281
+ ` partial_path_failure: ${run.partialPathFailure}`,
1282
+ ` messages: ${yamlFlowStringArray(diagnostics)}`,
1283
+ `summary: ${yamlQuote(summary)}`,
1284
+ `results:`,
1285
+ ...results.map((r) => ` - path: ${yamlQuote(r.path)}\n count: ${r.count}`),
1286
+ ].join('\n');
1287
+ return run.partialPathFailure ? (0, tool_1.toolPartialFailure)(formatYamlCodeBlock(yaml)) : okYaml(yaml);
1288
+ }
1289
+ catch (error) {
1290
+ return failYaml([
1291
+ `status: error`,
1292
+ `pattern: ${yamlQuote(pattern)}`,
1293
+ `mode: fs_count`,
1294
+ `path: ${yamlQuote(searchPath)}`,
1295
+ `error: FAILED`,
1296
+ `summary: ${yamlQuote(error instanceof Error ? error.message : String(error))}`,
1297
+ ].join('\n'));
1298
+ }
1299
+ }
1300
+ exports.fsRipgrepCountTool = {
1301
+ type: 'func',
1302
+ name: 'fs_ripgrep_count',
1303
+ description: 'Count local filesystem matches per file without restricting paths to rtws (rg-backed).',
1304
+ descriptionI18n: {
1305
+ en: 'Count local filesystem matches per file without restricting paths to rtws (rg-backed).',
1306
+ zh: '统计本机文件系统中每个文件的匹配数量,不限制路径必须位于 rtws 内(rg 驱动)。',
1307
+ },
1308
+ parameters: exports.ripgrepCountTool.parameters,
1309
+ argsValidation: 'dominds',
1310
+ call: async (_dlg, _caller, args) => {
1311
+ const pattern = requireNonEmptyStringArg(args, 'pattern');
1312
+ const searchPath = optionalStringArg(args, 'path') ?? '.';
1313
+ const globs = parseRipgrepGlobsArg(args);
1314
+ const caseMode = parseRipgrepCaseModeArg(args, 'smart');
1315
+ const fixedStrings = optionalBooleanArg(args, 'fixed_strings') ?? false;
1316
+ const includeHidden = optionalBooleanArg(args, 'include_hidden') ?? false;
1317
+ const followSymlinks = optionalBooleanArg(args, 'follow_symlinks') ?? false;
1318
+ const maxFiles = optionalPositiveIntegerArg(args, 'max_files') ?? 200;
1319
+ return await runFsRipgrepCount(pattern, searchPath, {
1320
+ globs,
1321
+ caseMode,
1322
+ fixedStrings,
1323
+ includeHidden,
1324
+ followSymlinks,
1325
+ maxFiles,
1326
+ });
1327
+ },
1328
+ };
1107
1329
  async function runRipgrepSnippets(caller, pattern, searchPath, options) {
1108
1330
  const forbiddenPath = detectForbiddenRipgrepSearchPath(caller, searchPath);
1109
1331
  if (forbiddenPath) {
@@ -1237,6 +1459,113 @@ exports.ripgrepSnippetsTool = {
1237
1459
  return await runRipgrepSnippets(caller, pattern, searchPath, options);
1238
1460
  },
1239
1461
  };
1462
+ async function runFsRipgrepSnippets(pattern, searchPath, options) {
1463
+ const filterPlan = fsBaseRgArgs(options);
1464
+ const args = [
1465
+ ...filterPlan.args,
1466
+ '--vimgrep',
1467
+ '--',
1468
+ pattern,
1469
+ normalizeRipgrepSearchPath(searchPath),
1470
+ ];
1471
+ try {
1472
+ let totalMatches = 0;
1473
+ const fileSet = new Set();
1474
+ const results = [];
1475
+ const fileCache = new Map();
1476
+ const run = await runRgLines(args, async (line) => {
1477
+ const first = line.indexOf(':');
1478
+ if (first <= 0)
1479
+ return;
1480
+ const second = line.indexOf(':', first + 1);
1481
+ if (second <= first)
1482
+ return;
1483
+ const third = line.indexOf(':', second + 1);
1484
+ if (third <= second)
1485
+ return;
1486
+ const filePath = line.slice(0, first);
1487
+ const lineStr = line.slice(first + 1, second);
1488
+ const colStr = line.slice(second + 1, third);
1489
+ const text = line.slice(third + 1);
1490
+ const ln = Number.parseInt(lineStr, 10);
1491
+ const col = Number.parseInt(colStr, 10);
1492
+ if (!Number.isFinite(ln) || !Number.isFinite(col))
1493
+ return;
1494
+ if (!filterPlan.postFilter(filePath))
1495
+ return;
1496
+ totalMatches++;
1497
+ fileSet.add(filePath);
1498
+ if (results.length >= options.maxResults)
1499
+ return;
1500
+ let lines = fileCache.get(filePath);
1501
+ if (!lines) {
1502
+ lines = await loadFileLines(filePath).catch(() => []);
1503
+ fileCache.set(filePath, lines);
1504
+ }
1505
+ const idx0 = ln - 1;
1506
+ const before = lines.slice(Math.max(0, idx0 - options.contextBefore), idx0);
1507
+ const after = lines.slice(idx0 + 1, idx0 + 1 + options.contextAfter);
1508
+ results.push({ path: filePath, line: ln, col, match: text, before, after });
1509
+ });
1510
+ const diagnostics = buildRipgrepDiagnostics(run, filterPlan, totalMatches > 0);
1511
+ return formatRipgrepSnippetYaml({
1512
+ pattern,
1513
+ searchPath,
1514
+ globs: options.globs,
1515
+ caseMode: options.caseMode,
1516
+ fixedStrings: options.fixedStrings,
1517
+ maxResults: options.maxResults,
1518
+ fileCount: fileSet.size,
1519
+ totalMatches,
1520
+ partialPathFailure: run.partialPathFailure,
1521
+ diagnostics,
1522
+ results,
1523
+ });
1524
+ }
1525
+ catch (error) {
1526
+ return failYaml([
1527
+ `status: error`,
1528
+ `pattern: ${yamlQuote(pattern)}`,
1529
+ `mode: fs_snippets`,
1530
+ `path: ${yamlQuote(searchPath)}`,
1531
+ `error: FAILED`,
1532
+ `summary: ${yamlQuote(error instanceof Error ? error.message : String(error))}`,
1533
+ ].join('\n'));
1534
+ }
1535
+ }
1536
+ exports.fsRipgrepSnippetsTool = {
1537
+ type: 'func',
1538
+ name: 'fs_ripgrep_snippets',
1539
+ description: 'Search local filesystem snippets with line/col without restricting paths to rtws (rg-backed).',
1540
+ descriptionI18n: {
1541
+ en: 'Search local filesystem snippets with line/col without restricting paths to rtws (rg-backed).',
1542
+ zh: '搜索本机文件系统并显示带行列的匹配片段,不限制路径必须位于 rtws 内(rg 驱动)。',
1543
+ },
1544
+ parameters: exports.ripgrepSnippetsTool.parameters,
1545
+ argsValidation: 'dominds',
1546
+ call: async (_dlg, _caller, args) => {
1547
+ const pattern = requireNonEmptyStringArg(args, 'pattern');
1548
+ const searchPath = optionalStringArg(args, 'path') ?? '.';
1549
+ const globs = parseRipgrepGlobsArg(args);
1550
+ const caseMode = parseRipgrepCaseModeArg(args, 'smart');
1551
+ const fixedStrings = optionalBooleanArg(args, 'fixed_strings') ?? false;
1552
+ const includeHidden = optionalBooleanArg(args, 'include_hidden') ?? false;
1553
+ const followSymlinks = optionalBooleanArg(args, 'follow_symlinks') ?? false;
1554
+ const maxResults = optionalPositiveIntegerArg(args, 'max_results') ?? 50;
1555
+ const contextBefore = optionalNonNegativeIntegerArg(args, 'context_before') ?? 1;
1556
+ const contextAfter = optionalNonNegativeIntegerArg(args, 'context_after') ?? 1;
1557
+ return await runFsRipgrepSnippets(pattern, searchPath, {
1558
+ globs,
1559
+ caseMode,
1560
+ fixedStrings,
1561
+ includeHidden,
1562
+ followSymlinks,
1563
+ maxResults,
1564
+ contextBefore,
1565
+ contextAfter,
1566
+ });
1567
+ },
1568
+ };
1240
1569
  exports.ripgrepFixedTool = {
1241
1570
  type: 'func',
1242
1571
  name: 'ripgrep_fixed',
@@ -1300,6 +1629,53 @@ exports.ripgrepFixedTool = {
1300
1629
  return await runRipgrepSnippets(caller, literal, searchPath, options);
1301
1630
  },
1302
1631
  };
1632
+ exports.fsRipgrepFixedTool = {
1633
+ type: 'func',
1634
+ name: 'fs_ripgrep_fixed',
1635
+ description: 'Fixed-string ripgrep convenience tool for local filesystem search without restricting paths to rtws.',
1636
+ descriptionI18n: {
1637
+ en: 'Fixed-string ripgrep convenience tool for local filesystem search without restricting paths to rtws.',
1638
+ zh: '本机文件系统固定字符串 ripgrep 便捷工具,不限制路径必须位于 rtws 内。',
1639
+ },
1640
+ parameters: exports.ripgrepFixedTool.parameters,
1641
+ argsValidation: 'dominds',
1642
+ call: async (_dlg, _caller, args) => {
1643
+ const literal = requireNonEmptyStringArg(args, 'literal');
1644
+ const searchPath = optionalStringArg(args, 'path') ?? '.';
1645
+ const modeRaw = optionalStringArg(args, 'mode') ?? 'snippets';
1646
+ if (modeRaw !== 'files' && modeRaw !== 'snippets' && modeRaw !== 'count') {
1647
+ throw new Error("Invalid arguments: `mode` must be one of: 'files', 'snippets', 'count'");
1648
+ }
1649
+ const globs = parseRipgrepGlobsArg(args);
1650
+ const caseMode = parseRipgrepCaseModeArg(args, 'smart');
1651
+ const includeHidden = optionalBooleanArg(args, 'include_hidden') ?? false;
1652
+ const followSymlinks = optionalBooleanArg(args, 'follow_symlinks') ?? false;
1653
+ const base = {
1654
+ globs,
1655
+ caseMode,
1656
+ fixedStrings: true,
1657
+ includeHidden,
1658
+ followSymlinks,
1659
+ };
1660
+ if (modeRaw === 'files') {
1661
+ const maxFiles = optionalPositiveIntegerArg(args, 'max_files') ?? 50;
1662
+ return await runFsRipgrepFiles(literal, searchPath, { ...base, maxFiles });
1663
+ }
1664
+ if (modeRaw === 'count') {
1665
+ const maxFiles = optionalPositiveIntegerArg(args, 'max_files') ?? 200;
1666
+ return await runFsRipgrepCount(literal, searchPath, { ...base, maxFiles });
1667
+ }
1668
+ const maxResults = optionalPositiveIntegerArg(args, 'max_results') ?? 50;
1669
+ const contextBefore = optionalNonNegativeIntegerArg(args, 'context_before') ?? 1;
1670
+ const contextAfter = optionalNonNegativeIntegerArg(args, 'context_after') ?? 1;
1671
+ return await runFsRipgrepSnippets(literal, searchPath, {
1672
+ ...base,
1673
+ maxResults,
1674
+ contextBefore,
1675
+ contextAfter,
1676
+ });
1677
+ },
1678
+ };
1303
1679
  const DISALLOWED_RG_ARGS = new Set(['--pre', '--pre-glob']);
1304
1680
  async function runRipgrepSearch(caller, pattern, searchPath, rawRgArgs) {
1305
1681
  const forbiddenPath = detectForbiddenRipgrepSearchPath(caller, searchPath);
@@ -1423,3 +1799,108 @@ exports.ripgrepSearchTool = {
1423
1799
  return await runRipgrepSearch(caller, pattern, searchPath, rgArgs);
1424
1800
  },
1425
1801
  };
1802
+ async function runFsRipgrepSearch(pattern, searchPath, rawRgArgs) {
1803
+ for (const tok of rawRgArgs) {
1804
+ if (DISALLOWED_RG_ARGS.has(tok)) {
1805
+ return failYaml(`status: error\nerror: DISALLOWED_ARG\nsummary: ${yamlQuote(`Disallowed rg arg: ${tok}`)}`);
1806
+ }
1807
+ if (tok === '--json' ||
1808
+ tok === '--count' ||
1809
+ tok === '--count-matches' ||
1810
+ tok === '--files-with-matches' ||
1811
+ tok === '--files') {
1812
+ return failYaml(`status: error\nerror: DISALLOWED_ARG\nsummary: ${yamlQuote(`Disallowed rg output arg: ${tok}`)}`);
1813
+ }
1814
+ }
1815
+ const options = {
1816
+ ...defaultBaseOptions(),
1817
+ fixedStrings: false,
1818
+ maxResults: 50,
1819
+ contextBefore: 1,
1820
+ contextAfter: 1,
1821
+ };
1822
+ const filterPlan = fsBaseRgArgs(options);
1823
+ const rawArgsPlan = buildRawRipgrepArgsPlan(rawRgArgs);
1824
+ const rgArgs = [
1825
+ ...filterPlan.args,
1826
+ ...rawArgsPlan.args,
1827
+ '--vimgrep',
1828
+ '--',
1829
+ pattern,
1830
+ normalizeRipgrepSearchPath(searchPath),
1831
+ ];
1832
+ try {
1833
+ let totalMatches = 0;
1834
+ const fileSet = new Set();
1835
+ const results = [];
1836
+ const run = await runRgLines(rgArgs, (line) => {
1837
+ const first = line.indexOf(':');
1838
+ if (first <= 0)
1839
+ return;
1840
+ const secondColon = line.indexOf(':', first + 1);
1841
+ if (secondColon <= first)
1842
+ return;
1843
+ const thirdColon = line.indexOf(':', secondColon + 1);
1844
+ if (thirdColon <= secondColon)
1845
+ return;
1846
+ const filePath = line.slice(0, first);
1847
+ const lineStr = line.slice(first + 1, secondColon);
1848
+ const colStr = line.slice(secondColon + 1, thirdColon);
1849
+ const text = line.slice(thirdColon + 1);
1850
+ const ln = Number.parseInt(lineStr, 10);
1851
+ const col = Number.parseInt(colStr, 10);
1852
+ if (!Number.isFinite(ln) || !Number.isFinite(col))
1853
+ return;
1854
+ if (!rawArgsPlan.postFilter(filePath))
1855
+ return;
1856
+ totalMatches++;
1857
+ fileSet.add(filePath);
1858
+ if (results.length < options.maxResults)
1859
+ results.push({ path: filePath, line: ln, col, match: text });
1860
+ });
1861
+ const diagnostics = [
1862
+ ...buildRipgrepDiagnostics(run, filterPlan, totalMatches > 0),
1863
+ ...rawArgsPlan.globCompatibilityWarnings,
1864
+ ];
1865
+ return formatRipgrepSnippetYaml({
1866
+ pattern,
1867
+ searchPath,
1868
+ globs: [],
1869
+ caseMode: 'smart',
1870
+ fixedStrings: false,
1871
+ maxResults: options.maxResults,
1872
+ fileCount: fileSet.size,
1873
+ totalMatches,
1874
+ partialPathFailure: run.partialPathFailure,
1875
+ diagnostics,
1876
+ results,
1877
+ });
1878
+ }
1879
+ catch (error) {
1880
+ return failYaml([
1881
+ `status: error`,
1882
+ `pattern: ${yamlQuote(pattern)}`,
1883
+ `mode: fs_snippets`,
1884
+ `path: ${yamlQuote(searchPath)}`,
1885
+ `error: FAILED`,
1886
+ `summary: ${yamlQuote(error instanceof Error ? error.message : String(error))}`,
1887
+ ].join('\n'));
1888
+ }
1889
+ }
1890
+ exports.fsRipgrepSearchTool = {
1891
+ type: 'func',
1892
+ name: 'fs_ripgrep_search',
1893
+ description: 'Escape hatch: run rg-style local filesystem search without restricting paths to rtws. Output is normalized to YAML snippets mode.',
1894
+ descriptionI18n: {
1895
+ en: 'Escape hatch: run rg-style local filesystem search without restricting paths to rtws. Output is normalized to YAML snippets mode.',
1896
+ zh: '逃生舱:运行本机文件系统 rg 风格搜索,不限制路径必须位于 rtws 内。输出归一为 YAML snippets 模式。',
1897
+ },
1898
+ parameters: exports.ripgrepSearchTool.parameters,
1899
+ argsValidation: 'dominds',
1900
+ call: async (_dlg, _caller, args) => {
1901
+ const pattern = requireNonEmptyStringArg(args, 'pattern');
1902
+ const searchPath = optionalStringArg(args, 'path') ?? '.';
1903
+ const rgArgs = optionalStringArrayArg(args, 'rg_args') ?? [];
1904
+ return await runFsRipgrepSearch(pattern, searchPath, rgArgs);
1905
+ },
1906
+ };
@@ -33,6 +33,40 @@ export declare const readFileTool: {
33
33
  argsValidation: "dominds";
34
34
  call: (dlg: import("../dialog").Dialog, caller: import("../team").Team.Member, args: ToolArguments) => Promise<ToolCallOutput>;
35
35
  };
36
+ export declare const fsReadFileTool: {
37
+ type: "func";
38
+ name: string;
39
+ description: string;
40
+ descriptionI18n: {
41
+ en: string;
42
+ zh: string;
43
+ };
44
+ parameters: {
45
+ type: string;
46
+ additionalProperties: boolean;
47
+ properties: {
48
+ path: {
49
+ type: string;
50
+ description: string;
51
+ };
52
+ range: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ max_lines: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ show_linenos: {
61
+ type: string;
62
+ description: string;
63
+ };
64
+ };
65
+ required: string[];
66
+ };
67
+ argsValidation: "dominds";
68
+ call: (_dlg: import("../dialog").Dialog, _caller: import("../team").Team.Member, args: ToolArguments) => Promise<ToolCallOutput>;
69
+ };
36
70
  export declare const createNewFileTool: FuncTool;
37
71
  export declare const overwriteEntireFileTool: FuncTool;
38
72
  export declare const prepareFileRangeEditTool: FuncTool;