@qodo/sdk 0.13.3 → 2.0.0-next.0

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 (764) hide show
  1. package/LICENSE +31 -118
  2. package/README.md +133 -121
  3. package/bin/qodo-skills.mjs +13 -0
  4. package/bundled-skills/code-review/SKILL.md +41 -0
  5. package/bundled-skills/pr-summary/SKILL.md +59 -0
  6. package/bundled-skills/test-gen/SKILL.md +47 -0
  7. package/dist/auth/index.browser.d.ts +38 -0
  8. package/dist/auth/index.browser.d.ts.map +1 -0
  9. package/dist/auth/index.browser.js +62 -0
  10. package/dist/auth/index.browser.js.map +1 -0
  11. package/dist/auth/index.d.ts +44 -30
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +57 -110
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/client/AgentsClient.d.ts +33 -0
  16. package/dist/client/AgentsClient.d.ts.map +1 -0
  17. package/dist/client/AgentsClient.js +40 -0
  18. package/dist/client/AgentsClient.js.map +1 -0
  19. package/dist/client/ArtifactsClient.d.ts +43 -0
  20. package/dist/client/ArtifactsClient.d.ts.map +1 -0
  21. package/dist/client/ArtifactsClient.js +54 -0
  22. package/dist/client/ArtifactsClient.js.map +1 -0
  23. package/dist/client/BulletinClient.d.ts +45 -0
  24. package/dist/client/BulletinClient.d.ts.map +1 -0
  25. package/dist/client/BulletinClient.js +51 -0
  26. package/dist/client/BulletinClient.js.map +1 -0
  27. package/dist/client/InfoClient.d.ts +58 -0
  28. package/dist/client/InfoClient.d.ts.map +1 -0
  29. package/dist/client/InfoClient.js +135 -0
  30. package/dist/client/InfoClient.js.map +1 -0
  31. package/dist/client/PipelineClient.d.ts +162 -0
  32. package/dist/client/PipelineClient.d.ts.map +1 -0
  33. package/dist/client/PipelineClient.js +340 -0
  34. package/dist/client/PipelineClient.js.map +1 -0
  35. package/dist/client/QarRegistryClient.d.ts +396 -0
  36. package/dist/client/QarRegistryClient.d.ts.map +1 -0
  37. package/dist/client/QarRegistryClient.js +536 -0
  38. package/dist/client/QarRegistryClient.js.map +1 -0
  39. package/dist/client/QodoClient.d.ts +296 -0
  40. package/dist/client/QodoClient.d.ts.map +1 -0
  41. package/dist/client/QodoClient.js +803 -0
  42. package/dist/client/QodoClient.js.map +1 -0
  43. package/dist/client/SpecsClient.d.ts +121 -0
  44. package/dist/client/SpecsClient.d.ts.map +1 -0
  45. package/dist/client/SpecsClient.js +252 -0
  46. package/dist/client/SpecsClient.js.map +1 -0
  47. package/dist/client/StateClient.d.ts +35 -0
  48. package/dist/client/StateClient.d.ts.map +1 -0
  49. package/dist/client/StateClient.js +36 -0
  50. package/dist/client/StateClient.js.map +1 -0
  51. package/dist/client/TaskClient.d.ts +706 -0
  52. package/dist/client/TaskClient.d.ts.map +1 -0
  53. package/dist/client/TaskClient.js +2522 -0
  54. package/dist/client/TaskClient.js.map +1 -0
  55. package/dist/client/ToolClient.d.ts +278 -0
  56. package/dist/client/ToolClient.d.ts.map +1 -0
  57. package/dist/client/ToolClient.js +1115 -0
  58. package/dist/client/ToolClient.js.map +1 -0
  59. package/dist/client/a2a/index.d.ts +10 -0
  60. package/dist/client/a2a/index.d.ts.map +1 -0
  61. package/dist/client/a2a/index.js +9 -0
  62. package/dist/client/a2a/index.js.map +1 -0
  63. package/dist/client/a2a/registerA2A.d.ts +170 -0
  64. package/dist/client/a2a/registerA2A.d.ts.map +1 -0
  65. package/dist/client/a2a/registerA2A.js +85 -0
  66. package/dist/client/a2a/registerA2A.js.map +1 -0
  67. package/dist/client/connection.d.ts +800 -0
  68. package/dist/client/connection.d.ts.map +1 -0
  69. package/dist/client/connection.js +2020 -0
  70. package/dist/client/connection.js.map +1 -0
  71. package/dist/client/errors.d.ts +735 -0
  72. package/dist/client/errors.d.ts.map +1 -0
  73. package/dist/client/errors.js +921 -0
  74. package/dist/client/errors.js.map +1 -0
  75. package/dist/client/index.d.ts +26 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +20 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/inlineGraph.d.ts +66 -0
  80. package/dist/client/inlineGraph.d.ts.map +1 -0
  81. package/dist/client/inlineGraph.js +500 -0
  82. package/dist/client/inlineGraph.js.map +1 -0
  83. package/dist/client/internal/thenable.d.ts +27 -0
  84. package/dist/client/internal/thenable.d.ts.map +1 -0
  85. package/dist/client/internal/thenable.js +31 -0
  86. package/dist/client/internal/thenable.js.map +1 -0
  87. package/dist/client/iterator.d.ts +32 -0
  88. package/dist/client/iterator.d.ts.map +1 -0
  89. package/dist/client/iterator.js +73 -0
  90. package/dist/client/iterator.js.map +1 -0
  91. package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
  92. package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
  93. package/dist/client/mcp/McpClientPool.browser.js +78 -0
  94. package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
  95. package/dist/client/mcp/McpClientPool.d.ts +236 -0
  96. package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
  97. package/dist/client/mcp/McpClientPool.js +585 -0
  98. package/dist/client/mcp/McpClientPool.js.map +1 -0
  99. package/dist/client/mcp/projection.d.ts +109 -0
  100. package/dist/client/mcp/projection.d.ts.map +1 -0
  101. package/dist/client/mcp/projection.js +446 -0
  102. package/dist/client/mcp/projection.js.map +1 -0
  103. package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
  104. package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
  105. package/dist/client/mcp/substituteEnv.browser.js +20 -0
  106. package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
  107. package/dist/client/mcp/substituteEnv.d.ts +45 -0
  108. package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
  109. package/dist/client/mcp/substituteEnv.js +63 -0
  110. package/dist/client/mcp/substituteEnv.js.map +1 -0
  111. package/dist/client/observers.d.ts +57 -0
  112. package/dist/client/observers.d.ts.map +1 -0
  113. package/dist/client/observers.js +203 -0
  114. package/dist/client/observers.js.map +1 -0
  115. package/dist/client/options.d.ts +269 -0
  116. package/dist/client/options.d.ts.map +1 -0
  117. package/dist/client/options.js +9 -0
  118. package/dist/client/options.js.map +1 -0
  119. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
  120. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
  121. package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
  122. package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
  123. package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
  124. package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
  125. package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
  126. package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
  127. package/dist/client/tools/approval.d.ts +280 -0
  128. package/dist/client/tools/approval.d.ts.map +1 -0
  129. package/dist/client/tools/approval.js +229 -0
  130. package/dist/client/tools/approval.js.map +1 -0
  131. package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
  132. package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
  133. package/dist/client/tools/bindFunctionToolDefs.js +360 -0
  134. package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
  135. package/dist/client/tools/defineFunctionTool.d.ts +277 -0
  136. package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
  137. package/dist/client/tools/defineFunctionTool.js +190 -0
  138. package/dist/client/tools/defineFunctionTool.js.map +1 -0
  139. package/dist/client/transport.browser.d.ts +20 -0
  140. package/dist/client/transport.browser.d.ts.map +1 -0
  141. package/dist/client/transport.browser.js +29 -0
  142. package/dist/client/transport.browser.js.map +1 -0
  143. package/dist/client/transport.d.ts +47 -0
  144. package/dist/client/transport.d.ts.map +1 -0
  145. package/dist/client/transport.js +102 -0
  146. package/dist/client/transport.js.map +1 -0
  147. package/dist/client/transport.shared.d.ts +30 -0
  148. package/dist/client/transport.shared.d.ts.map +1 -0
  149. package/dist/client/transport.shared.js +40 -0
  150. package/dist/client/transport.shared.js.map +1 -0
  151. package/dist/client/uuid.d.ts +32 -0
  152. package/dist/client/uuid.d.ts.map +1 -0
  153. package/dist/client/uuid.js +65 -0
  154. package/dist/client/uuid.js.map +1 -0
  155. package/dist/index.d.ts +88 -39
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +166 -43
  158. package/dist/index.js.map +1 -1
  159. package/dist/observability/attributes.d.ts +136 -0
  160. package/dist/observability/attributes.d.ts.map +1 -0
  161. package/dist/observability/attributes.js +184 -0
  162. package/dist/observability/attributes.js.map +1 -0
  163. package/dist/observability/index.d.ts +14 -0
  164. package/dist/observability/index.d.ts.map +1 -0
  165. package/dist/observability/index.js +11 -0
  166. package/dist/observability/index.js.map +1 -0
  167. package/dist/observability/resolveOTel.browser.d.ts +13 -0
  168. package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
  169. package/dist/observability/resolveOTel.browser.js +14 -0
  170. package/dist/observability/resolveOTel.browser.js.map +1 -0
  171. package/dist/observability/resolveOTel.d.ts +28 -0
  172. package/dist/observability/resolveOTel.d.ts.map +1 -0
  173. package/dist/observability/resolveOTel.js +74 -0
  174. package/dist/observability/resolveOTel.js.map +1 -0
  175. package/dist/observability/spans.d.ts +198 -0
  176. package/dist/observability/spans.d.ts.map +1 -0
  177. package/dist/observability/spans.js +300 -0
  178. package/dist/observability/spans.js.map +1 -0
  179. package/dist/observability/traceContext.d.ts +51 -0
  180. package/dist/observability/traceContext.d.ts.map +1 -0
  181. package/dist/observability/traceContext.js +151 -0
  182. package/dist/observability/traceContext.js.map +1 -0
  183. package/dist/observability/transportMetrics.d.ts +58 -0
  184. package/dist/observability/transportMetrics.d.ts.map +1 -0
  185. package/dist/observability/transportMetrics.js +55 -0
  186. package/dist/observability/transportMetrics.js.map +1 -0
  187. package/dist/qar/agentSpec.d.ts +93 -0
  188. package/dist/qar/agentSpec.d.ts.map +1 -0
  189. package/dist/qar/agentSpec.js +184 -0
  190. package/dist/qar/agentSpec.js.map +1 -0
  191. package/dist/qar/clientEvents.d.ts +86 -0
  192. package/dist/qar/clientEvents.d.ts.map +1 -0
  193. package/dist/qar/clientEvents.js +36 -0
  194. package/dist/qar/clientEvents.js.map +1 -0
  195. package/dist/qar/envelopes.d.ts +227 -0
  196. package/dist/qar/envelopes.d.ts.map +1 -0
  197. package/dist/qar/envelopes.js +67 -0
  198. package/dist/qar/envelopes.js.map +1 -0
  199. package/dist/qar/generated/envelope.d.ts +332 -0
  200. package/dist/qar/generated/envelope.d.ts.map +1 -0
  201. package/dist/qar/generated/envelope.js +15 -0
  202. package/dist/qar/generated/envelope.js.map +1 -0
  203. package/dist/qar/generated/qar-info.d.ts +76 -0
  204. package/dist/qar/generated/qar-info.d.ts.map +1 -0
  205. package/dist/qar/generated/qar-info.js +15 -0
  206. package/dist/qar/generated/qar-info.js.map +1 -0
  207. package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
  208. package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
  209. package/dist/qar/generated/qodo-task-start-payload.js +15 -0
  210. package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
  211. package/dist/qar/ids.d.ts +19 -0
  212. package/dist/qar/ids.d.ts.map +1 -0
  213. package/dist/qar/ids.js +11 -0
  214. package/dist/qar/ids.js.map +1 -0
  215. package/dist/qar/index.d.ts +24 -0
  216. package/dist/qar/index.d.ts.map +1 -0
  217. package/dist/qar/index.js +16 -0
  218. package/dist/qar/index.js.map +1 -0
  219. package/dist/qar/info.d.ts +37 -0
  220. package/dist/qar/info.d.ts.map +1 -0
  221. package/dist/qar/info.js +17 -0
  222. package/dist/qar/info.js.map +1 -0
  223. package/dist/qar/json.d.ts +14 -0
  224. package/dist/qar/json.d.ts.map +1 -0
  225. package/dist/qar/json.js +9 -0
  226. package/dist/qar/json.js.map +1 -0
  227. package/dist/qar/payloads.d.ts +480 -0
  228. package/dist/qar/payloads.d.ts.map +1 -0
  229. package/dist/qar/payloads.js +37 -0
  230. package/dist/qar/payloads.js.map +1 -0
  231. package/dist/qar/specs.d.ts +604 -0
  232. package/dist/qar/specs.d.ts.map +1 -0
  233. package/dist/qar/specs.js +29 -0
  234. package/dist/qar/specs.js.map +1 -0
  235. package/dist/qar/taskEvents.d.ts +25 -0
  236. package/dist/qar/taskEvents.d.ts.map +1 -0
  237. package/dist/qar/taskEvents.js +22 -0
  238. package/dist/qar/taskEvents.js.map +1 -0
  239. package/dist/qar/trace.d.ts +12 -0
  240. package/dist/qar/trace.d.ts.map +1 -0
  241. package/dist/qar/trace.js +12 -0
  242. package/dist/qar/trace.js.map +1 -0
  243. package/dist/skills/activation.d.ts +177 -0
  244. package/dist/skills/activation.d.ts.map +1 -0
  245. package/dist/skills/activation.js +428 -0
  246. package/dist/skills/activation.js.map +1 -0
  247. package/dist/skills/cli/index.browser.d.ts +18 -0
  248. package/dist/skills/cli/index.browser.d.ts.map +1 -0
  249. package/dist/skills/cli/index.browser.js +27 -0
  250. package/dist/skills/cli/index.browser.js.map +1 -0
  251. package/dist/skills/cli/index.d.ts +37 -0
  252. package/dist/skills/cli/index.d.ts.map +1 -0
  253. package/dist/skills/cli/index.js +494 -0
  254. package/dist/skills/cli/index.js.map +1 -0
  255. package/dist/skills/events.d.ts +255 -0
  256. package/dist/skills/events.d.ts.map +1 -0
  257. package/dist/skills/events.js +224 -0
  258. package/dist/skills/events.js.map +1 -0
  259. package/dist/skills/index.d.ts +45 -0
  260. package/dist/skills/index.d.ts.map +1 -0
  261. package/dist/skills/index.js +34 -0
  262. package/dist/skills/index.js.map +1 -0
  263. package/dist/skills/inject.d.ts +57 -0
  264. package/dist/skills/inject.d.ts.map +1 -0
  265. package/dist/skills/inject.js +162 -0
  266. package/dist/skills/inject.js.map +1 -0
  267. package/dist/skills/lockfile.browser.d.ts +56 -0
  268. package/dist/skills/lockfile.browser.d.ts.map +1 -0
  269. package/dist/skills/lockfile.browser.js +55 -0
  270. package/dist/skills/lockfile.browser.js.map +1 -0
  271. package/dist/skills/lockfile.d.ts +137 -0
  272. package/dist/skills/lockfile.d.ts.map +1 -0
  273. package/dist/skills/lockfile.js +423 -0
  274. package/dist/skills/lockfile.js.map +1 -0
  275. package/dist/skills/manager.browser.d.ts +94 -0
  276. package/dist/skills/manager.browser.d.ts.map +1 -0
  277. package/dist/skills/manager.browser.js +159 -0
  278. package/dist/skills/manager.browser.js.map +1 -0
  279. package/dist/skills/manager.d.ts +362 -0
  280. package/dist/skills/manager.d.ts.map +1 -0
  281. package/dist/skills/manager.js +1386 -0
  282. package/dist/skills/manager.js.map +1 -0
  283. package/dist/skills/mcp/index.d.ts +15 -0
  284. package/dist/skills/mcp/index.d.ts.map +1 -0
  285. package/dist/skills/mcp/index.js +12 -0
  286. package/dist/skills/mcp/index.js.map +1 -0
  287. package/dist/skills/mcp/path.browser.d.ts +27 -0
  288. package/dist/skills/mcp/path.browser.d.ts.map +1 -0
  289. package/dist/skills/mcp/path.browser.js +33 -0
  290. package/dist/skills/mcp/path.browser.js.map +1 -0
  291. package/dist/skills/mcp/path.d.ts +57 -0
  292. package/dist/skills/mcp/path.d.ts.map +1 -0
  293. package/dist/skills/mcp/path.js +150 -0
  294. package/dist/skills/mcp/path.js.map +1 -0
  295. package/dist/skills/mcp/server.browser.d.ts +32 -0
  296. package/dist/skills/mcp/server.browser.d.ts.map +1 -0
  297. package/dist/skills/mcp/server.browser.js +53 -0
  298. package/dist/skills/mcp/server.browser.js.map +1 -0
  299. package/dist/skills/mcp/server.d.ts +144 -0
  300. package/dist/skills/mcp/server.d.ts.map +1 -0
  301. package/dist/skills/mcp/server.js +841 -0
  302. package/dist/skills/mcp/server.js.map +1 -0
  303. package/dist/skills/mcp/types.d.ts +72 -0
  304. package/dist/skills/mcp/types.d.ts.map +1 -0
  305. package/dist/skills/mcp/types.js +20 -0
  306. package/dist/skills/mcp/types.js.map +1 -0
  307. package/dist/skills/mcp/wireDefs.d.ts +58 -0
  308. package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
  309. package/dist/skills/mcp/wireDefs.js +141 -0
  310. package/dist/skills/mcp/wireDefs.js.map +1 -0
  311. package/dist/skills/parser.d.ts +63 -0
  312. package/dist/skills/parser.d.ts.map +1 -0
  313. package/dist/skills/parser.js +755 -0
  314. package/dist/skills/parser.js.map +1 -0
  315. package/dist/skills/prefilter.d.ts +104 -0
  316. package/dist/skills/prefilter.d.ts.map +1 -0
  317. package/dist/skills/prefilter.js +398 -0
  318. package/dist/skills/prefilter.js.map +1 -0
  319. package/dist/skills/preprocess.d.ts +169 -0
  320. package/dist/skills/preprocess.d.ts.map +1 -0
  321. package/dist/skills/preprocess.js +535 -0
  322. package/dist/skills/preprocess.js.map +1 -0
  323. package/dist/skills/render.d.ts +83 -0
  324. package/dist/skills/render.d.ts.map +1 -0
  325. package/dist/skills/render.js +397 -0
  326. package/dist/skills/render.js.map +1 -0
  327. package/dist/skills/sources/index.browser.d.ts +29 -0
  328. package/dist/skills/sources/index.browser.d.ts.map +1 -0
  329. package/dist/skills/sources/index.browser.js +16 -0
  330. package/dist/skills/sources/index.browser.js.map +1 -0
  331. package/dist/skills/sources/index.d.ts +59 -0
  332. package/dist/skills/sources/index.d.ts.map +1 -0
  333. package/dist/skills/sources/index.js +471 -0
  334. package/dist/skills/sources/index.js.map +1 -0
  335. package/dist/skills/sources/walk.browser.d.ts +17 -0
  336. package/dist/skills/sources/walk.browser.d.ts.map +1 -0
  337. package/dist/skills/sources/walk.browser.js +19 -0
  338. package/dist/skills/sources/walk.browser.js.map +1 -0
  339. package/dist/skills/sources/walk.d.ts +68 -0
  340. package/dist/skills/sources/walk.d.ts.map +1 -0
  341. package/dist/skills/sources/walk.js +264 -0
  342. package/dist/skills/sources/walk.js.map +1 -0
  343. package/dist/skills/substitute.d.ts +87 -0
  344. package/dist/skills/substitute.d.ts.map +1 -0
  345. package/dist/skills/substitute.js +322 -0
  346. package/dist/skills/substitute.js.map +1 -0
  347. package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
  348. package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
  349. package/dist/skills/testing/SkillKit.browser.js +41 -0
  350. package/dist/skills/testing/SkillKit.browser.js.map +1 -0
  351. package/dist/skills/testing/SkillKit.d.ts +130 -0
  352. package/dist/skills/testing/SkillKit.d.ts.map +1 -0
  353. package/dist/skills/testing/SkillKit.js +316 -0
  354. package/dist/skills/testing/SkillKit.js.map +1 -0
  355. package/dist/skills/testing/index.d.ts +9 -0
  356. package/dist/skills/testing/index.d.ts.map +1 -0
  357. package/dist/skills/testing/index.js +8 -0
  358. package/dist/skills/testing/index.js.map +1 -0
  359. package/dist/skills/trust.d.ts +72 -0
  360. package/dist/skills/trust.d.ts.map +1 -0
  361. package/dist/skills/trust.js +183 -0
  362. package/dist/skills/trust.js.map +1 -0
  363. package/dist/skills/types.d.ts +627 -0
  364. package/dist/skills/types.d.ts.map +1 -0
  365. package/dist/skills/types.js +85 -0
  366. package/dist/skills/types.js.map +1 -0
  367. package/dist/skills/validator.d.ts +95 -0
  368. package/dist/skills/validator.d.ts.map +1 -0
  369. package/dist/skills/validator.js +486 -0
  370. package/dist/skills/validator.js.map +1 -0
  371. package/dist/tracing/PipelineTracer.d.ts +35 -22
  372. package/dist/tracing/PipelineTracer.d.ts.map +1 -1
  373. package/dist/tracing/PipelineTracer.js +106 -61
  374. package/dist/tracing/PipelineTracer.js.map +1 -1
  375. package/dist/tracing/SdkTracer.d.ts +63 -61
  376. package/dist/tracing/SdkTracer.d.ts.map +1 -1
  377. package/dist/tracing/SdkTracer.js +185 -177
  378. package/dist/tracing/SdkTracer.js.map +1 -1
  379. package/dist/tracing/index.d.ts +10 -1
  380. package/dist/tracing/index.d.ts.map +1 -1
  381. package/dist/tracing/index.js +9 -0
  382. package/dist/tracing/index.js.map +1 -1
  383. package/dist/tracing/types.d.ts +89 -16
  384. package/dist/tracing/types.d.ts.map +1 -1
  385. package/dist/tracing/types.js +17 -4
  386. package/dist/tracing/types.js.map +1 -1
  387. package/dist/types.d.ts +6 -1
  388. package/dist/types.d.ts.map +1 -1
  389. package/dist/types.js +4 -0
  390. package/dist/types.js.map +1 -1
  391. package/dist/version.d.ts.map +1 -1
  392. package/dist/version.js +10 -20
  393. package/dist/version.js.map +1 -1
  394. package/package.json +53 -39
  395. package/.claude/skills/qodo-agent/SKILL.md +0 -974
  396. package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
  397. package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
  398. package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
  399. package/bin/rg +0 -0
  400. package/dist/api/agent.d.ts +0 -104
  401. package/dist/api/agent.d.ts.map +0 -1
  402. package/dist/api/agent.js +0 -939
  403. package/dist/api/agent.js.map +0 -1
  404. package/dist/api/analytics.d.ts +0 -43
  405. package/dist/api/analytics.d.ts.map +0 -1
  406. package/dist/api/analytics.js +0 -163
  407. package/dist/api/analytics.js.map +0 -1
  408. package/dist/api/http.d.ts +0 -5
  409. package/dist/api/http.d.ts.map +0 -1
  410. package/dist/api/http.js +0 -62
  411. package/dist/api/http.js.map +0 -1
  412. package/dist/api/index.d.ts +0 -12
  413. package/dist/api/index.d.ts.map +0 -1
  414. package/dist/api/index.js +0 -17
  415. package/dist/api/index.js.map +0 -1
  416. package/dist/api/taskTracking.d.ts +0 -54
  417. package/dist/api/taskTracking.d.ts.map +0 -1
  418. package/dist/api/taskTracking.js +0 -208
  419. package/dist/api/taskTracking.js.map +0 -1
  420. package/dist/api/types.d.ts +0 -93
  421. package/dist/api/types.d.ts.map +0 -1
  422. package/dist/api/types.js +0 -2
  423. package/dist/api/types.js.map +0 -1
  424. package/dist/api/utils.d.ts +0 -8
  425. package/dist/api/utils.d.ts.map +0 -1
  426. package/dist/api/utils.js +0 -63
  427. package/dist/api/utils.js.map +0 -1
  428. package/dist/api/websocket.d.ts +0 -203
  429. package/dist/api/websocket.d.ts.map +0 -1
  430. package/dist/api/websocket.js +0 -1166
  431. package/dist/api/websocket.js.map +0 -1
  432. package/dist/bin/install-skill.d.ts +0 -14
  433. package/dist/bin/install-skill.d.ts.map +0 -1
  434. package/dist/bin/install-skill.js +0 -125
  435. package/dist/bin/install-skill.js.map +0 -1
  436. package/dist/bin/run-helpers.d.ts +0 -34
  437. package/dist/bin/run-helpers.d.ts.map +0 -1
  438. package/dist/bin/run-helpers.js +0 -186
  439. package/dist/bin/run-helpers.js.map +0 -1
  440. package/dist/bin/run.d.ts +0 -13
  441. package/dist/bin/run.d.ts.map +0 -1
  442. package/dist/bin/run.js +0 -57
  443. package/dist/bin/run.js.map +0 -1
  444. package/dist/clients/index.d.ts +0 -10
  445. package/dist/clients/index.d.ts.map +0 -1
  446. package/dist/clients/index.js +0 -8
  447. package/dist/clients/index.js.map +0 -1
  448. package/dist/clients/info/InfoClient.d.ts +0 -37
  449. package/dist/clients/info/InfoClient.d.ts.map +0 -1
  450. package/dist/clients/info/InfoClient.js +0 -69
  451. package/dist/clients/info/InfoClient.js.map +0 -1
  452. package/dist/clients/info/index.d.ts +0 -4
  453. package/dist/clients/info/index.d.ts.map +0 -1
  454. package/dist/clients/info/index.js +0 -2
  455. package/dist/clients/info/index.js.map +0 -1
  456. package/dist/clients/info/types.d.ts +0 -21
  457. package/dist/clients/info/types.d.ts.map +0 -1
  458. package/dist/clients/info/types.js +0 -2
  459. package/dist/clients/info/types.js.map +0 -1
  460. package/dist/clients/sessions/SessionsClient.d.ts +0 -34
  461. package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
  462. package/dist/clients/sessions/SessionsClient.js +0 -71
  463. package/dist/clients/sessions/SessionsClient.js.map +0 -1
  464. package/dist/clients/sessions/index.d.ts +0 -4
  465. package/dist/clients/sessions/index.d.ts.map +0 -1
  466. package/dist/clients/sessions/index.js +0 -2
  467. package/dist/clients/sessions/index.js.map +0 -1
  468. package/dist/clients/sessions/types.d.ts +0 -20
  469. package/dist/clients/sessions/types.d.ts.map +0 -1
  470. package/dist/clients/sessions/types.js +0 -2
  471. package/dist/clients/sessions/types.js.map +0 -1
  472. package/dist/clients/tools/ToolsClient.d.ts +0 -39
  473. package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
  474. package/dist/clients/tools/ToolsClient.js +0 -95
  475. package/dist/clients/tools/ToolsClient.js.map +0 -1
  476. package/dist/clients/tools/index.d.ts +0 -4
  477. package/dist/clients/tools/index.d.ts.map +0 -1
  478. package/dist/clients/tools/index.js +0 -2
  479. package/dist/clients/tools/index.js.map +0 -1
  480. package/dist/clients/tools/types.d.ts +0 -14
  481. package/dist/clients/tools/types.d.ts.map +0 -1
  482. package/dist/clients/tools/types.js +0 -2
  483. package/dist/clients/tools/types.js.map +0 -1
  484. package/dist/config/ConfigManager.d.ts +0 -43
  485. package/dist/config/ConfigManager.d.ts.map +0 -1
  486. package/dist/config/ConfigManager.js +0 -472
  487. package/dist/config/ConfigManager.js.map +0 -1
  488. package/dist/config/index.d.ts +0 -6
  489. package/dist/config/index.d.ts.map +0 -1
  490. package/dist/config/index.js +0 -7
  491. package/dist/config/index.js.map +0 -1
  492. package/dist/config/urlConfig.d.ts +0 -15
  493. package/dist/config/urlConfig.d.ts.map +0 -1
  494. package/dist/config/urlConfig.js +0 -75
  495. package/dist/config/urlConfig.js.map +0 -1
  496. package/dist/constants/errors.d.ts +0 -2
  497. package/dist/constants/errors.d.ts.map +0 -1
  498. package/dist/constants/errors.js +0 -2
  499. package/dist/constants/errors.js.map +0 -1
  500. package/dist/constants/index.d.ts +0 -7
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js +0 -11
  503. package/dist/constants/index.js.map +0 -1
  504. package/dist/constants/tools.d.ts +0 -4
  505. package/dist/constants/tools.d.ts.map +0 -1
  506. package/dist/constants/tools.js +0 -4
  507. package/dist/constants/tools.js.map +0 -1
  508. package/dist/constants/versions.d.ts +0 -2
  509. package/dist/constants/versions.d.ts.map +0 -1
  510. package/dist/constants/versions.js +0 -2
  511. package/dist/constants/versions.js.map +0 -1
  512. package/dist/context/buildUserContext.d.ts +0 -18
  513. package/dist/context/buildUserContext.d.ts.map +0 -1
  514. package/dist/context/buildUserContext.js +0 -34
  515. package/dist/context/buildUserContext.js.map +0 -1
  516. package/dist/context/index.d.ts +0 -9
  517. package/dist/context/index.d.ts.map +0 -1
  518. package/dist/context/index.js +0 -9
  519. package/dist/context/index.js.map +0 -1
  520. package/dist/context/messageManager.d.ts +0 -42
  521. package/dist/context/messageManager.d.ts.map +0 -1
  522. package/dist/context/messageManager.js +0 -322
  523. package/dist/context/messageManager.js.map +0 -1
  524. package/dist/context/taskFocus.d.ts +0 -2
  525. package/dist/context/taskFocus.d.ts.map +0 -1
  526. package/dist/context/taskFocus.js +0 -26
  527. package/dist/context/taskFocus.js.map +0 -1
  528. package/dist/context/userInput.d.ts +0 -3
  529. package/dist/context/userInput.d.ts.map +0 -1
  530. package/dist/context/userInput.js +0 -20
  531. package/dist/context/userInput.js.map +0 -1
  532. package/dist/mcp/MCPManager.d.ts +0 -109
  533. package/dist/mcp/MCPManager.d.ts.map +0 -1
  534. package/dist/mcp/MCPManager.js +0 -592
  535. package/dist/mcp/MCPManager.js.map +0 -1
  536. package/dist/mcp/approvedTools.d.ts +0 -4
  537. package/dist/mcp/approvedTools.d.ts.map +0 -1
  538. package/dist/mcp/approvedTools.js +0 -19
  539. package/dist/mcp/approvedTools.js.map +0 -1
  540. package/dist/mcp/baseServer.d.ts +0 -75
  541. package/dist/mcp/baseServer.d.ts.map +0 -1
  542. package/dist/mcp/baseServer.js +0 -107
  543. package/dist/mcp/baseServer.js.map +0 -1
  544. package/dist/mcp/builtinServers.d.ts +0 -15
  545. package/dist/mcp/builtinServers.d.ts.map +0 -1
  546. package/dist/mcp/builtinServers.js +0 -141
  547. package/dist/mcp/builtinServers.js.map +0 -1
  548. package/dist/mcp/dynamicBEServer.d.ts +0 -20
  549. package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
  550. package/dist/mcp/dynamicBEServer.js +0 -52
  551. package/dist/mcp/dynamicBEServer.js.map +0 -1
  552. package/dist/mcp/index.d.ts +0 -18
  553. package/dist/mcp/index.d.ts.map +0 -1
  554. package/dist/mcp/index.js +0 -23
  555. package/dist/mcp/index.js.map +0 -1
  556. package/dist/mcp/mcpInitialization.d.ts +0 -2
  557. package/dist/mcp/mcpInitialization.d.ts.map +0 -1
  558. package/dist/mcp/mcpInitialization.js +0 -56
  559. package/dist/mcp/mcpInitialization.js.map +0 -1
  560. package/dist/mcp/servers/filesystem.d.ts +0 -44
  561. package/dist/mcp/servers/filesystem.d.ts.map +0 -1
  562. package/dist/mcp/servers/filesystem.js +0 -776
  563. package/dist/mcp/servers/filesystem.js.map +0 -1
  564. package/dist/mcp/servers/git.d.ts +0 -18
  565. package/dist/mcp/servers/git.d.ts.map +0 -1
  566. package/dist/mcp/servers/git.js +0 -441
  567. package/dist/mcp/servers/git.js.map +0 -1
  568. package/dist/mcp/servers/ripgrep.d.ts +0 -39
  569. package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
  570. package/dist/mcp/servers/ripgrep.js +0 -550
  571. package/dist/mcp/servers/ripgrep.js.map +0 -1
  572. package/dist/mcp/servers/shell.d.ts +0 -20
  573. package/dist/mcp/servers/shell.d.ts.map +0 -1
  574. package/dist/mcp/servers/shell.js +0 -519
  575. package/dist/mcp/servers/shell.js.map +0 -1
  576. package/dist/mcp/serversRegistry.d.ts +0 -55
  577. package/dist/mcp/serversRegistry.d.ts.map +0 -1
  578. package/dist/mcp/serversRegistry.js +0 -416
  579. package/dist/mcp/serversRegistry.js.map +0 -1
  580. package/dist/mcp/toolProcessor.d.ts +0 -82
  581. package/dist/mcp/toolProcessor.d.ts.map +0 -1
  582. package/dist/mcp/toolProcessor.js +0 -392
  583. package/dist/mcp/toolProcessor.js.map +0 -1
  584. package/dist/mcp/types.d.ts +0 -29
  585. package/dist/mcp/types.d.ts.map +0 -1
  586. package/dist/mcp/types.js +0 -2
  587. package/dist/mcp/types.js.map +0 -1
  588. package/dist/messages/index.d.ts +0 -8
  589. package/dist/messages/index.d.ts.map +0 -1
  590. package/dist/messages/index.js +0 -7
  591. package/dist/messages/index.js.map +0 -1
  592. package/dist/messages/openai.d.ts +0 -26
  593. package/dist/messages/openai.d.ts.map +0 -1
  594. package/dist/messages/openai.js +0 -55
  595. package/dist/messages/openai.js.map +0 -1
  596. package/dist/messages/types.d.ts +0 -73
  597. package/dist/messages/types.d.ts.map +0 -1
  598. package/dist/messages/types.js +0 -78
  599. package/dist/messages/types.js.map +0 -1
  600. package/dist/parser/index.d.ts +0 -72
  601. package/dist/parser/index.d.ts.map +0 -1
  602. package/dist/parser/index.js +0 -967
  603. package/dist/parser/index.js.map +0 -1
  604. package/dist/parser/types.d.ts +0 -153
  605. package/dist/parser/types.d.ts.map +0 -1
  606. package/dist/parser/types.js +0 -6
  607. package/dist/parser/types.js.map +0 -1
  608. package/dist/parser/utils.d.ts +0 -18
  609. package/dist/parser/utils.d.ts.map +0 -1
  610. package/dist/parser/utils.js +0 -64
  611. package/dist/parser/utils.js.map +0 -1
  612. package/dist/sdk/QodoSDK.d.ts +0 -218
  613. package/dist/sdk/QodoSDK.d.ts.map +0 -1
  614. package/dist/sdk/QodoSDK.js +0 -1115
  615. package/dist/sdk/QodoSDK.js.map +0 -1
  616. package/dist/sdk/artifacts.d.ts +0 -156
  617. package/dist/sdk/artifacts.d.ts.map +0 -1
  618. package/dist/sdk/artifacts.js +0 -166
  619. package/dist/sdk/artifacts.js.map +0 -1
  620. package/dist/sdk/bootstrap.d.ts +0 -16
  621. package/dist/sdk/bootstrap.d.ts.map +0 -1
  622. package/dist/sdk/bootstrap.js +0 -28
  623. package/dist/sdk/bootstrap.js.map +0 -1
  624. package/dist/sdk/builders.d.ts +0 -54
  625. package/dist/sdk/builders.d.ts.map +0 -1
  626. package/dist/sdk/builders.js +0 -117
  627. package/dist/sdk/builders.js.map +0 -1
  628. package/dist/sdk/defaults.d.ts +0 -11
  629. package/dist/sdk/defaults.d.ts.map +0 -1
  630. package/dist/sdk/defaults.js +0 -39
  631. package/dist/sdk/defaults.js.map +0 -1
  632. package/dist/sdk/discovery.d.ts +0 -2
  633. package/dist/sdk/discovery.d.ts.map +0 -1
  634. package/dist/sdk/discovery.js +0 -25
  635. package/dist/sdk/discovery.js.map +0 -1
  636. package/dist/sdk/events.d.ts +0 -269
  637. package/dist/sdk/events.d.ts.map +0 -1
  638. package/dist/sdk/events.js +0 -69
  639. package/dist/sdk/events.js.map +0 -1
  640. package/dist/sdk/exit-expression.d.ts +0 -13
  641. package/dist/sdk/exit-expression.d.ts.map +0 -1
  642. package/dist/sdk/exit-expression.js +0 -35
  643. package/dist/sdk/exit-expression.js.map +0 -1
  644. package/dist/sdk/index.d.ts +0 -17
  645. package/dist/sdk/index.d.ts.map +0 -1
  646. package/dist/sdk/index.js +0 -17
  647. package/dist/sdk/index.js.map +0 -1
  648. package/dist/sdk/middleware.d.ts +0 -59
  649. package/dist/sdk/middleware.d.ts.map +0 -1
  650. package/dist/sdk/middleware.js +0 -69
  651. package/dist/sdk/middleware.js.map +0 -1
  652. package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
  653. package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
  654. package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
  655. package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
  656. package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
  657. package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
  658. package/dist/sdk/pipeline/PipelineRunner.js +0 -326
  659. package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
  660. package/dist/sdk/pipeline/compiler.d.ts +0 -24
  661. package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
  662. package/dist/sdk/pipeline/compiler.js +0 -199
  663. package/dist/sdk/pipeline/compiler.js.map +0 -1
  664. package/dist/sdk/pipeline/declarative.d.ts +0 -34
  665. package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
  666. package/dist/sdk/pipeline/declarative.js +0 -9
  667. package/dist/sdk/pipeline/declarative.js.map +0 -1
  668. package/dist/sdk/pipeline/index.d.ts +0 -20
  669. package/dist/sdk/pipeline/index.d.ts.map +0 -1
  670. package/dist/sdk/pipeline/index.js +0 -19
  671. package/dist/sdk/pipeline/index.js.map +0 -1
  672. package/dist/sdk/pipeline/types.d.ts +0 -93
  673. package/dist/sdk/pipeline/types.d.ts.map +0 -1
  674. package/dist/sdk/pipeline/types.js +0 -10
  675. package/dist/sdk/pipeline/types.js.map +0 -1
  676. package/dist/sdk/policies.d.ts +0 -163
  677. package/dist/sdk/policies.d.ts.map +0 -1
  678. package/dist/sdk/policies.js +0 -243
  679. package/dist/sdk/policies.js.map +0 -1
  680. package/dist/sdk/runner/AgentRunner.d.ts +0 -22
  681. package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
  682. package/dist/sdk/runner/AgentRunner.js +0 -222
  683. package/dist/sdk/runner/AgentRunner.js.map +0 -1
  684. package/dist/sdk/runner/finalize.d.ts +0 -56
  685. package/dist/sdk/runner/finalize.d.ts.map +0 -1
  686. package/dist/sdk/runner/finalize.js +0 -155
  687. package/dist/sdk/runner/finalize.js.map +0 -1
  688. package/dist/sdk/runner/formats.d.ts +0 -7
  689. package/dist/sdk/runner/formats.d.ts.map +0 -1
  690. package/dist/sdk/runner/formats.js +0 -76
  691. package/dist/sdk/runner/formats.js.map +0 -1
  692. package/dist/sdk/runner/index.d.ts +0 -9
  693. package/dist/sdk/runner/index.d.ts.map +0 -1
  694. package/dist/sdk/runner/index.js +0 -9
  695. package/dist/sdk/runner/index.js.map +0 -1
  696. package/dist/sdk/runner/progress.d.ts +0 -3
  697. package/dist/sdk/runner/progress.d.ts.map +0 -1
  698. package/dist/sdk/runner/progress.js +0 -16
  699. package/dist/sdk/runner/progress.js.map +0 -1
  700. package/dist/sdk/schemas.d.ts +0 -72
  701. package/dist/sdk/schemas.d.ts.map +0 -1
  702. package/dist/sdk/schemas.js +0 -282
  703. package/dist/sdk/schemas.js.map +0 -1
  704. package/dist/sdk/trigger-context.d.ts +0 -24
  705. package/dist/sdk/trigger-context.d.ts.map +0 -1
  706. package/dist/sdk/trigger-context.js +0 -136
  707. package/dist/sdk/trigger-context.js.map +0 -1
  708. package/dist/session/SessionContext.d.ts +0 -89
  709. package/dist/session/SessionContext.d.ts.map +0 -1
  710. package/dist/session/SessionContext.js +0 -410
  711. package/dist/session/SessionContext.js.map +0 -1
  712. package/dist/session/environment.d.ts +0 -52
  713. package/dist/session/environment.d.ts.map +0 -1
  714. package/dist/session/environment.js +0 -27
  715. package/dist/session/environment.js.map +0 -1
  716. package/dist/session/history.d.ts +0 -18
  717. package/dist/session/history.d.ts.map +0 -1
  718. package/dist/session/history.js +0 -68
  719. package/dist/session/history.js.map +0 -1
  720. package/dist/session/index.d.ts +0 -10
  721. package/dist/session/index.d.ts.map +0 -1
  722. package/dist/session/index.js +0 -9
  723. package/dist/session/index.js.map +0 -1
  724. package/dist/session/serverData.d.ts +0 -38
  725. package/dist/session/serverData.d.ts.map +0 -1
  726. package/dist/session/serverData.js +0 -261
  727. package/dist/session/serverData.js.map +0 -1
  728. package/dist/tracing/pipelineHelpers.d.ts +0 -29
  729. package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
  730. package/dist/tracing/pipelineHelpers.js +0 -224
  731. package/dist/tracing/pipelineHelpers.js.map +0 -1
  732. package/dist/tracking/Tracker.d.ts +0 -55
  733. package/dist/tracking/Tracker.d.ts.map +0 -1
  734. package/dist/tracking/Tracker.js +0 -217
  735. package/dist/tracking/Tracker.js.map +0 -1
  736. package/dist/tracking/index.d.ts +0 -8
  737. package/dist/tracking/index.d.ts.map +0 -1
  738. package/dist/tracking/index.js +0 -8
  739. package/dist/tracking/index.js.map +0 -1
  740. package/dist/tracking/schemas.d.ts +0 -292
  741. package/dist/tracking/schemas.d.ts.map +0 -1
  742. package/dist/tracking/schemas.js +0 -91
  743. package/dist/tracking/schemas.js.map +0 -1
  744. package/dist/utils/extractSetFlags.d.ts +0 -6
  745. package/dist/utils/extractSetFlags.d.ts.map +0 -1
  746. package/dist/utils/extractSetFlags.js +0 -16
  747. package/dist/utils/extractSetFlags.js.map +0 -1
  748. package/dist/utils/formatTimeAgo.d.ts +0 -2
  749. package/dist/utils/formatTimeAgo.d.ts.map +0 -1
  750. package/dist/utils/formatTimeAgo.js +0 -20
  751. package/dist/utils/formatTimeAgo.js.map +0 -1
  752. package/dist/utils/index.d.ts +0 -12
  753. package/dist/utils/index.d.ts.map +0 -1
  754. package/dist/utils/index.js +0 -12
  755. package/dist/utils/index.js.map +0 -1
  756. package/dist/utils/machineId.d.ts +0 -14
  757. package/dist/utils/machineId.d.ts.map +0 -1
  758. package/dist/utils/machineId.js +0 -66
  759. package/dist/utils/machineId.js.map +0 -1
  760. package/dist/utils/pathUtils.d.ts +0 -22
  761. package/dist/utils/pathUtils.d.ts.map +0 -1
  762. package/dist/utils/pathUtils.js +0 -54
  763. package/dist/utils/pathUtils.js.map +0 -1
  764. package/scripts/download-ripgrep.js +0 -269
@@ -1,776 +0,0 @@
1
- import * as fsSync from 'fs';
2
- import { promises as fs } from 'fs';
3
- import * as diff from 'diff';
4
- import * as path from 'path';
5
- import { canonicalizePathSync, normalizeDriveLetter } from '../../utils/index.js';
6
- const DEFAULT_MAX_DEPTH = 3;
7
- const DEFAULT_MAX_DIRECTORIES = 2000;
8
- const DEFAULT_EXCLUDED_DIRS = [
9
- '.git',
10
- 'node_modules',
11
- '.idea',
12
- '.vscode',
13
- 'dist',
14
- 'build',
15
- 'coverage',
16
- '.next',
17
- '.turbo',
18
- '.cache',
19
- 'out',
20
- 'target',
21
- 'venv',
22
- '.venv',
23
- ];
24
- function matchesPattern(name, pattern) {
25
- const lowerName = name.toLowerCase();
26
- const lowerPattern = pattern.toLowerCase();
27
- if (!lowerPattern) {
28
- return false;
29
- }
30
- if (lowerPattern === '*') {
31
- return true;
32
- }
33
- if (lowerPattern.includes('*')) {
34
- const parts = lowerPattern.split('*').filter(Boolean);
35
- let currentIndex = 0;
36
- for (const part of parts) {
37
- const index = lowerName.indexOf(part, currentIndex);
38
- if (index === -1) {
39
- return false;
40
- }
41
- currentIndex = index + part.length;
42
- }
43
- return true;
44
- }
45
- return lowerName === lowerPattern;
46
- }
47
- export class TextNotFoundError extends Error {
48
- editIndex;
49
- oldText;
50
- constructor(message, editIndex, oldText) {
51
- super(message);
52
- this.name = 'TextNotFoundError';
53
- this.editIndex = editIndex;
54
- this.oldText = oldText;
55
- }
56
- }
57
- export class FilesystemServerEnhanced {
58
- name = "filesystem";
59
- version = "1.0.0";
60
- allowedDirectories = [];
61
- constructor(allowedDirectories = []) {
62
- // Canonicalize the allowed directories up front so that different
63
- // representations of the same physical path (e.g. Windows `subst`
64
- // drives like `S:\\repo` vs `C:\\long\\path\\repo`) are treated as
65
- // identical roots. This also normalizes Windows drive letters.
66
- this.allowedDirectories = allowedDirectories.map(dir => canonicalizePathSync(dir));
67
- }
68
- async initialize() {
69
- try {
70
- // Validate that all allowed directories exist and are accessible
71
- for (const dir of this.allowedDirectories) {
72
- try {
73
- await fs.access(dir, fs.constants.R_OK);
74
- }
75
- catch (error) {
76
- console.warn(`Warning: Directory ${dir} is not accessible:`, error);
77
- }
78
- }
79
- return true;
80
- }
81
- catch (error) {
82
- console.error("Failed to initialize filesystem server:", error);
83
- return false;
84
- }
85
- }
86
- async listTools() {
87
- const tools = [
88
- {
89
- name: "read_files",
90
- description: "Read the contents of one or more files, optionally selecting line ranges per file (range, head, tail). Returns the content of each file along with its path. If reading multiple files, failed reads for individual files won't stop the operation - you'll get results for the files that could be read successfully.",
91
- inputSchema: {
92
- type: "object",
93
- properties: {
94
- paths: {
95
- type: "array",
96
- items: {
97
- oneOf: [
98
- { type: "string" },
99
- {
100
- type: "object",
101
- properties: {
102
- path: { type: "string" },
103
- startLine: { type: "number", description: "1-based inclusive start line for range selection" },
104
- endLine: { type: "number", description: "1-based inclusive end line for range selection" },
105
- head: { type: "number", description: "Number of lines from the beginning of the file" },
106
- tail: { type: "number", description: "Number of lines from the end of the file" }
107
- },
108
- required: ["path"],
109
- additionalProperties: false
110
- }
111
- ]
112
- },
113
- description: "Array of file specs to read. Each item can be either a string path or an object with { path, startLine?, endLine?, head?, tail? } to select specific lines. Examples: ['src/index.ts', { path: 'README.md', head: 50 }, { path: 'logs/app.log', tail: 100 }, { path: 'src/app.ts', startLine: 120, endLine: 200 }]. Each item can have different ranges."
114
- }
115
- },
116
- required: ["paths"]
117
- },
118
- autoApproved: false
119
- },
120
- {
121
- name: "write_file",
122
- description: "Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding.",
123
- inputSchema: {
124
- type: "object",
125
- properties: {
126
- path: {
127
- type: "string",
128
- description: "Path where to create/write the file. Examples: 'src/components/Button.tsx', 'docs/README.md', 'config/settings.json', 'scripts/build.sh'"
129
- },
130
- content: {
131
- type: "string",
132
- description: "Content to write to the file. Examples: TypeScript component code, markdown documentation, JSON configuration, shell script commands"
133
- }
134
- },
135
- required: ["path", "content"]
136
- },
137
- autoApproved: false
138
- },
139
- {
140
- name: "edit_file",
141
- description: "Make precise line-based edits to a text file by replacing exact text matches. Each edit operation finds and replaces specific text sequences. Returns a git-style diff showing the changes made. Use this for targeted modifications rather than rewriting entire files.",
142
- inputSchema: {
143
- type: "object",
144
- properties: {
145
- path: {
146
- type: "string",
147
- description: "Path to the file to edit. Examples: 'src/index.ts', 'package.json', 'README.md', 'config/app.json'"
148
- },
149
- edits: {
150
- type: "array",
151
- items: {
152
- type: "object",
153
- properties: {
154
- oldText: {
155
- type: "string",
156
- description: "Exact text to search for and replace - must match exactly including whitespace and line breaks. Examples: 'console.log(\"Hello World\");', 'const version = \"1.0.0\";', '# Old Title'"
157
- },
158
- newText: {
159
- type: "string",
160
- description: "Text to replace the oldText with. Examples: 'console.log(\"Hello Universe!\");', 'const version = \"1.1.0\";', '# New Improved Title'"
161
- }
162
- },
163
- required: ["oldText", "newText"]
164
- },
165
- description: "Array of edit operations to perform. Each operation replaces oldText with newText. Multiple edits are applied in sequence. Examples: [{'oldText': 'const port = 3000;', 'newText': 'const port = process.env.PORT || 3000;'}] for single edit, [{'oldText': 'import React from \\'react\\';', 'newText': 'import React, { useState } from \\'react\\';'}, {'oldText': 'function App() {', 'newText': 'function App() {\\n const [count, setCount] = useState(0);'}] for multiple edits"
166
- },
167
- },
168
- required: ["path", "edits"]
169
- },
170
- autoApproved: false
171
- },
172
- {
173
- name: "create_directory",
174
- description: "Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist.",
175
- inputSchema: {
176
- type: "object",
177
- properties: {
178
- path: {
179
- type: "string",
180
- description: "Path of the directory to create. Can be nested paths that will be created recursively. Examples: 'src/components', 'docs/api', 'tests/unit/helpers', 'build/assets/images'"
181
- }
182
- },
183
- required: ["path"]
184
- },
185
- autoApproved: false
186
- },
187
- {
188
- name: "list_files_in_directories",
189
- description: "List files and immediate subdirectories in one or more directories (non-recursive). Returns the direct children of each specified path, with each directory's contents clearly labeled and files/directories distinguished with [FILE] and [DIR] prefixes. If listing multiple directories, failed reads for individual directories won't stop the operation - you'll get results for the directories that could be read successfully. Typically, you should call directory_tree with a shallow depth before using this tool to get an overview of the directory layout.",
190
- inputSchema: {
191
- type: "object",
192
- properties: {
193
- paths: {
194
- type: "array",
195
- items: { type: "string" },
196
- description: "Array of directory paths to list. Examples: ['.', 'src'] for current and src directories, ['src/components', 'src/utils'] for multiple source folders, ['docs'] for single directory, ['config', 'scripts', 'tests'] for project organization folders"
197
- }
198
- },
199
- required: ["paths"]
200
- },
201
- autoApproved: true
202
- },
203
- {
204
- name: "directory_tree",
205
- description: "Get a recursive tree view of the folder structure only (directories, not files) as a JSON structure. Traversal is intentionally shallow and capped for performance on large repositories. Each directory entry includes 'name', 'type' (always 'directory'), and 'children' array containing subdirectories. The root object also includes a 'meta' field with truncation details (e.g. maxDepth, maxDirectories, excluded, truncated). Use this to understand the high-level directory hierarchy without file clutter.",
206
- inputSchema: {
207
- type: "object",
208
- properties: {
209
- path: {
210
- type: "string",
211
- description: "Path of the directory to traverse recursively for folder structure. Examples: '.' for current directory structure, 'src' for source folder hierarchy, 'docs' for documentation folders, 'tests' for test directory structure"
212
- },
213
- maxDepth: {
214
- type: "number",
215
- description: "Maximum directory depth to traverse (1 = only this directory). Defaults to 3 if not provided."
216
- },
217
- maxDirectories: {
218
- type: "number",
219
- description: "Global cap on the total number of directories to include in the tree. Defaults to 2000 if not provided."
220
- },
221
- exclude: {
222
- type: "array",
223
- items: { type: "string" },
224
- description: "Directory names or simple glob-like patterns to skip (e.g. 'node_modules', '.git'). Defaults to a built-in list of common build/output directories if not provided."
225
- }
226
- },
227
- required: ["path"]
228
- },
229
- autoApproved: true
230
- },
231
- {
232
- name: "move_file",
233
- description: "Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Use this to reorganize project structure or rename files.",
234
- inputSchema: {
235
- type: "object",
236
- properties: {
237
- source: {
238
- type: "string",
239
- description: "Source path of the file or directory to move/rename. Examples: 'src/oldComponent.tsx', 'docs/old-readme.md', 'temp/data.json', 'src/utils' (directory)"
240
- },
241
- destination: {
242
- type: "string",
243
- description: "Destination path where the file/directory should be moved or renamed to. Examples: 'src/components/NewComponent.tsx', 'docs/README.md', 'data/processed/data.json', 'src/shared/utils'"
244
- }
245
- },
246
- required: ["source", "destination"]
247
- },
248
- autoApproved: false
249
- },
250
- {
251
- name: "get_file_info",
252
- description: "Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Use this to check file properties, sizes, or modification dates.",
253
- inputSchema: {
254
- type: "object",
255
- properties: {
256
- path: {
257
- type: "string",
258
- description: "Path to the file or directory to get information about. Examples: 'package.json', 'src/index.ts', 'docs' (directory), 'build/output.js', 'README.md'"
259
- }
260
- },
261
- required: ["path"]
262
- },
263
- autoApproved: true
264
- },
265
- {
266
- name: "list_allowed_directories",
267
- description: "Get the list of directories that the filesystem server is allowed to access. Use this tool to understand which directories are available for file operations before attempting to access files or directories. This helps you understand the scope of filesystem access and avoid permission errors.",
268
- inputSchema: {
269
- type: "object",
270
- properties: {},
271
- required: []
272
- },
273
- autoApproved: true
274
- },
275
- {
276
- name: "delete_files",
277
- description: "Delete files and/or directories simultaneously. Use with caution as this operation cannot be undone. For directories, this will recursively delete all contents. Failed deletions for individual files won't stop the entire operation - you'll get a report of what was successfully deleted and what failed.",
278
- inputSchema: {
279
- type: "object",
280
- properties: {
281
- paths: {
282
- type: "array",
283
- items: { type: "string" },
284
- description: "Array of file and directory paths to delete. Examples: ['temp/cache.json'] for single file, ['build', 'dist', 'node_modules/.cache'] for multiple directories, ['src/deprecated.ts', 'docs/old-guide.md'] for multiple files, ['logs/debug.log', 'logs/error.log'] for log files. Array examples: ['temp/cache.json'], ['build', 'dist'], ['src/deprecated.ts', 'docs/old-guide.md', 'temp/old-data.json']"
285
- }
286
- },
287
- required: ["paths"]
288
- },
289
- autoApproved: false
290
- }
291
- ];
292
- return { tools };
293
- }
294
- async callTool(request, _extra) {
295
- try {
296
- switch (request.name) {
297
- case "read_files":
298
- return await this.readMultipleFiles(request.arguments.paths);
299
- case "write_file":
300
- return await this.writeFile(request.arguments.path, request.arguments.content);
301
- case "edit_file":
302
- return await this.editFile(request.arguments.path, request.arguments.edits);
303
- case "create_directory":
304
- return await this.createDirectory(request.arguments.path);
305
- case "list_files_in_directories":
306
- return await this.listFilesInDirectories(request.arguments.paths);
307
- case "directory_tree":
308
- return await this.directoryTree(request.arguments.path, request.arguments);
309
- case "move_file":
310
- return await this.moveFile(request.arguments.source, request.arguments.destination);
311
- case "get_file_info":
312
- return await this.getFileInfo(request.arguments.path);
313
- case "list_allowed_directories":
314
- return await this.listAllowedDirectories();
315
- case "delete_files":
316
- return await this.deleteMultipleFiles(request.arguments.paths);
317
- default:
318
- throw new Error(`Unknown tool: ${request.name}`);
319
- }
320
- }
321
- catch (error) {
322
- return {
323
- content: [{ type: "text", text: error.message }],
324
- isError: true,
325
- };
326
- }
327
- }
328
- resolvePath(filePath) {
329
- // If already absolute, just normalize
330
- if (path.isAbsolute(filePath)) {
331
- return path.resolve(filePath);
332
- }
333
- // Prefer the first validated allowed directory as the base for relative paths.
334
- // BuiltInServers ensures this list is ordered as:
335
- // [executionCwd?, projectRoots..., process.cwd(), ...]
336
- const baseDir = this.allowedDirectories[0];
337
- if (!baseDir) {
338
- throw new Error('FilesystemServer has no allowed directories configured');
339
- }
340
- return path.resolve(baseDir, filePath);
341
- }
342
- validatePath(filePath) {
343
- // Resolve the path to get the absolute path and handle any relative path components
344
- const resolvedPath = this.resolvePath(filePath);
345
- // Check if the path is within any allowed directory (including the directory itself and all subdirectories)
346
- const isAllowed = this.allowedDirectories.some(allowedDir => {
347
- // Canonicalize the allowed root so that aliasing (e.g. Windows `subst`
348
- // virtual drives or symlinks) does not break sandbox checks. This also
349
- // normalizes drive letters.
350
- const normalizedAllowedDir = canonicalizePathSync(allowedDir);
351
- // For the target path we need to be careful with non-existent files on
352
- // Windows subst/virtual drives. realpathSync will fail for a file that
353
- // doesn't exist yet (e.g. a brand-new file to be created), but the
354
- // parent directory *does* exist and can be canonicalized to the
355
- // underlying physical path. To handle this, we canonicalize the parent
356
- // directory when the full path does not exist and then re-join the
357
- // basename so that paths like:
358
- // allowedDir = "S:\\repo" (subst of C:\\long\\path\\repo)
359
- // resolvedPath = "S:\\repo\\src\\newFile.ts" (not yet created)
360
- // become:
361
- // normalizedAllowedDir = "C:\\long\\path\\repo"
362
- // normalizedResolvedPath = "C:\\long\\path\\repo\\src\\newFile.ts".
363
- let normalizedResolvedPath;
364
- try {
365
- if (fsSync.existsSync(resolvedPath)) {
366
- normalizedResolvedPath = canonicalizePathSync(resolvedPath);
367
- }
368
- else {
369
- const parent = path.dirname(resolvedPath);
370
- const parentCanonical = canonicalizePathSync(parent);
371
- normalizedResolvedPath = normalizeDriveLetter(path.join(parentCanonical, path.basename(resolvedPath)));
372
- }
373
- }
374
- catch {
375
- normalizedResolvedPath = canonicalizePathSync(resolvedPath);
376
- }
377
- // Allow access to the allowed directory itself
378
- if (normalizedResolvedPath === normalizedAllowedDir) {
379
- return true;
380
- }
381
- // Allow access to any subdirectory or file within the allowed directory
382
- // Use path.relative to check if the resolved path is within the allowed directory
383
- const relativePath = path.relative(normalizedAllowedDir, normalizedResolvedPath);
384
- // If the relative path doesn't start with '..' and isn't empty, it's within the allowed directory
385
- return relativePath && !relativePath.startsWith('..') && !path.isAbsolute(relativePath);
386
- });
387
- if (!isAllowed) {
388
- throw new Error(`Access denied: Path ${resolvedPath} is not within allowed directories`);
389
- }
390
- return resolvedPath;
391
- }
392
- async readMultipleFiles(fileSpecs) {
393
- const results = [];
394
- for (const spec of fileSpecs) {
395
- const filePath = typeof spec === 'string' ? spec : spec.path;
396
- try {
397
- const validatedPath = this.validatePath(filePath);
398
- const content = await fs.readFile(validatedPath, 'utf-8');
399
- const lines = content.split(/\r?\n/);
400
- let selectedContent = content;
401
- let rangeApplied = { type: 'all', totalLines: lines.length };
402
- if (typeof spec !== 'string') {
403
- const startProvided = typeof spec.startLine === 'number';
404
- const endProvided = typeof spec.endLine === 'number';
405
- const headProvided = typeof spec.head === 'number' && spec.head > 0;
406
- const tailProvided = typeof spec.tail === 'number' && spec.tail > 0;
407
- if (startProvided || endProvided) {
408
- const start = Math.max(1, Math.floor(startProvided ? spec.startLine : 1));
409
- const end = Math.max(1, Math.floor(endProvided ? spec.endLine : lines.length));
410
- const normalizedStart = Math.min(start, lines.length);
411
- const normalizedEnd = Math.min(Math.max(normalizedStart, end), lines.length);
412
- selectedContent = lines.slice(normalizedStart - 1, normalizedEnd).join('\n');
413
- rangeApplied = { type: 'range', startLine: normalizedStart, endLine: normalizedEnd, totalLines: lines.length };
414
- }
415
- else if (headProvided) {
416
- const count = Math.min(Math.floor(spec.head), lines.length);
417
- selectedContent = lines.slice(0, count).join('\n');
418
- rangeApplied = { type: 'head', head: count, totalLines: lines.length };
419
- }
420
- else if (tailProvided) {
421
- const count = Math.min(Math.floor(spec.tail), lines.length);
422
- selectedContent = lines.slice(Math.max(0, lines.length - count)).join('\n');
423
- rangeApplied = { type: 'tail', tail: count, totalLines: lines.length };
424
- }
425
- }
426
- results.push({ path: filePath, content: selectedContent, rangeApplied: rangeApplied.type === 'all' ? undefined : rangeApplied });
427
- }
428
- catch (error) {
429
- results.push({ path: filePath, error: error.message });
430
- }
431
- }
432
- return {
433
- content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
434
- isError: false
435
- };
436
- }
437
- async writeFile(filePath, content) {
438
- const validatedPath = this.validatePath(filePath);
439
- try {
440
- // Ensure directory exists
441
- await fs.mkdir(path.dirname(validatedPath), { recursive: true });
442
- await fs.writeFile(validatedPath, content, 'utf-8');
443
- return {
444
- content: [{ type: "text", text: `Successfully wrote file: ${filePath}` }],
445
- isError: false,
446
- };
447
- }
448
- catch (error) {
449
- throw new Error(`Failed to write file ${filePath}: ${error.message}`);
450
- }
451
- }
452
- static async createPatch(filePath, originalContent, modifiedContent) {
453
- return diff.createPatch(filePath, originalContent, modifiedContent, '', '');
454
- }
455
- static async getDiff(filePath, edits) {
456
- // Align preview path resolution with the runtime server behavior:
457
- // prefer execution CWD / project roots when available, otherwise fall back
458
- // to process.cwd()-relative resolution.
459
- let resolvedPath = path.resolve(filePath);
460
- if (!path.isAbsolute(filePath)) {
461
- try {
462
- const { SessionContext } = await import('../../session/SessionContext.js');
463
- const session = SessionContext.getInstance();
464
- const execCwd = session?.getExecutionCwd?.();
465
- const roots = session?.getAccessiblePaths?.();
466
- const baseDir = execCwd || (Array.isArray(roots) && roots.length > 0 ? roots[0] : undefined);
467
- if (!baseDir) {
468
- throw new Error('Cannot resolve path: no execution cwd or project roots configured');
469
- }
470
- resolvedPath = path.resolve(baseDir, filePath);
471
- }
472
- catch {
473
- // SessionContext not available (e.g., very early init); fall back to process.cwd
474
- resolvedPath = path.resolve(filePath);
475
- }
476
- }
477
- const originalContent = await fs.readFile(resolvedPath, 'utf-8');
478
- let modifiedContent = originalContent;
479
- // Apply edits
480
- for (let i = 0; i < edits.length; i++) {
481
- const edit = edits[i];
482
- if (!modifiedContent.includes(edit.oldText)) {
483
- throw new TextNotFoundError(`Text not found: "${edit.oldText}"`, i, edit.oldText);
484
- }
485
- modifiedContent = modifiedContent.replace(edit.oldText, edit.newText);
486
- }
487
- return diff.createPatch(filePath, originalContent, modifiedContent, '', '');
488
- }
489
- async editFile(filePath, edits) {
490
- const validatedPath = this.validatePath(filePath);
491
- try {
492
- const currentContent = await fs.readFile(validatedPath, 'utf-8');
493
- let modifiedContent = currentContent;
494
- // Apply edits
495
- for (let i = 0; i < edits.length; i++) {
496
- const edit = edits[i];
497
- if (!modifiedContent.includes(edit.oldText)) {
498
- throw new TextNotFoundError(`Text not found: "${edit.oldText}"`, i, edit.oldText);
499
- }
500
- modifiedContent = modifiedContent.replace(edit.oldText, edit.newText);
501
- }
502
- // Apply changes
503
- await fs.writeFile(validatedPath, modifiedContent, 'utf-8');
504
- // Return the current edit diff for immediate feedback
505
- const currentDiff = diff.createPatch(filePath, currentContent, modifiedContent, '', '');
506
- return {
507
- content: [{ type: "text", text: `File edited successfully:\n\n${currentDiff}` }],
508
- isError: false
509
- };
510
- }
511
- catch (error) {
512
- throw new Error(`Failed to edit file ${filePath}: ${error.message}`);
513
- }
514
- }
515
- async createDirectory(dirPath) {
516
- const validatedPath = this.validatePath(dirPath);
517
- try {
518
- await fs.mkdir(validatedPath, { recursive: true });
519
- return {
520
- content: [{ type: "text", text: `Successfully created directory: ${dirPath}` }],
521
- isError: false
522
- };
523
- }
524
- catch (error) {
525
- throw new Error(`Failed to create directory ${dirPath}: ${error.message}`);
526
- }
527
- }
528
- async listFilesInDirectories(dirPaths) {
529
- const results = [];
530
- const errors = [];
531
- for (const dirPath of dirPaths) {
532
- try {
533
- const validatedPath = this.validatePath(dirPath);
534
- const entries = await fs.readdir(validatedPath, { withFileTypes: true });
535
- // Add directory header
536
- results.push(`\n=== ${dirPath} ===`);
537
- if (entries.length === 0) {
538
- results.push("(empty directory)");
539
- }
540
- else {
541
- const listing = entries.map(entry => {
542
- const prefix = entry.isDirectory() ? '[DIR]' : '[FILE]';
543
- return `${prefix} ${entry.name}`;
544
- }).join('\n');
545
- results.push(listing);
546
- }
547
- }
548
- catch (error) {
549
- errors.push(`Failed to list ${dirPath}: ${error.message}`);
550
- }
551
- }
552
- // Combine results and errors
553
- let finalText = results.join('\n');
554
- if (errors.length > 0) {
555
- finalText += '\n\n=== Errors ===\n' + errors.join('\n');
556
- }
557
- return {
558
- content: [{ type: "text", text: finalText.trim() }],
559
- isError: false
560
- };
561
- }
562
- async directoryTree(dirPath, args) {
563
- const validatedPath = this.validatePath(dirPath);
564
- const options = {
565
- maxDepth: typeof args?.maxDepth === 'number' && args.maxDepth > 0
566
- ? Math.floor(args.maxDepth)
567
- : DEFAULT_MAX_DEPTH,
568
- maxDirectories: typeof args?.maxDirectories === 'number' && args.maxDirectories > 0
569
- ? Math.floor(args.maxDirectories)
570
- : DEFAULT_MAX_DIRECTORIES,
571
- exclude: Array.isArray(args?.exclude) && args.exclude.length > 0
572
- ? args.exclude.map((value) => typeof value === 'string' ? value : String(value))
573
- : DEFAULT_EXCLUDED_DIRS,
574
- };
575
- const state = { directoriesVisited: 0, truncated: false };
576
- try {
577
- const tree = await this.buildDirectoryTree(validatedPath, options, 1, state);
578
- const result = {
579
- name: tree?.name ?? path.basename(validatedPath),
580
- type: 'directory',
581
- children: tree?.children ?? [],
582
- meta: {
583
- truncated: state.truncated,
584
- maxDepth: options.maxDepth,
585
- maxDirectories: options.maxDirectories,
586
- excluded: options.exclude,
587
- },
588
- };
589
- return {
590
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
591
- isError: false
592
- };
593
- }
594
- catch (error) {
595
- throw new Error(`Failed to build directory tree for ${dirPath}: ${error.message}`);
596
- }
597
- }
598
- async buildDirectoryTree(dirPath, options, depth, state) {
599
- const name = path.basename(dirPath);
600
- // Exclude directories by name or simple pattern matching
601
- if (options.exclude.some(pattern => matchesPattern(name, pattern))) {
602
- return null;
603
- }
604
- let stat;
605
- try {
606
- stat = await fs.stat(dirPath);
607
- }
608
- catch {
609
- // If we can't stat the path, mark as truncated and return an empty node
610
- state.truncated = true;
611
- return { name, type: 'directory', children: [] };
612
- }
613
- if (!stat.isDirectory()) {
614
- // Not a directory; nothing to traverse
615
- return null;
616
- }
617
- if (depth > options.maxDepth || state.directoriesVisited >= options.maxDirectories) {
618
- state.truncated = true;
619
- return { name, type: 'directory', children: [] };
620
- }
621
- state.directoriesVisited++;
622
- let entries;
623
- try {
624
- entries = await fs.readdir(dirPath, { withFileTypes: true });
625
- }
626
- catch {
627
- state.truncated = true;
628
- return { name, type: 'directory', children: [] };
629
- }
630
- const children = [];
631
- for (const entry of entries) {
632
- if (!entry.isDirectory()) {
633
- continue;
634
- }
635
- if (state.directoriesVisited >= options.maxDirectories) {
636
- state.truncated = true;
637
- break;
638
- }
639
- const entryPath = path.join(dirPath, entry.name);
640
- try {
641
- const child = await this.buildDirectoryTree(entryPath, options, depth + 1, state);
642
- if (child) {
643
- children.push(child);
644
- }
645
- if (state.truncated) {
646
- break;
647
- }
648
- }
649
- catch {
650
- // Skip directories we can't access
651
- }
652
- }
653
- return { name, type: 'directory', children };
654
- }
655
- async moveFile(source, destination) {
656
- const validatedSource = this.validatePath(source);
657
- const validatedDestination = this.validatePath(destination);
658
- try {
659
- // Check if destination exists
660
- try {
661
- await fs.access(validatedDestination);
662
- throw new Error(`Destination already exists: ${destination}`);
663
- }
664
- catch (error) {
665
- // Good, destination doesn't exist
666
- if (error.code !== 'ENOENT') {
667
- throw error;
668
- }
669
- }
670
- // Ensure destination directory exists
671
- await fs.mkdir(path.dirname(validatedDestination), { recursive: true });
672
- await fs.rename(validatedSource, validatedDestination);
673
- return {
674
- content: [{ type: "text", text: `Successfully moved ${source} to ${destination}` }],
675
- isError: false
676
- };
677
- }
678
- catch (error) {
679
- throw new Error(`Failed to move ${source} to ${destination}: ${error.message}`);
680
- }
681
- }
682
- async searchFilesRecursive(dirPath, pattern, excludePatterns) {
683
- const results = [];
684
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
685
- for (const entry of entries) {
686
- const entryPath = path.join(dirPath, entry.name);
687
- // Check if entry matches exclude patterns
688
- const shouldExclude = excludePatterns.some(excludePattern => {
689
- return entry.name.toLowerCase().includes(excludePattern.toLowerCase());
690
- });
691
- if (shouldExclude) {
692
- continue;
693
- }
694
- // Check if entry matches search pattern
695
- if (entry.name.toLowerCase().includes(pattern.toLowerCase())) {
696
- results.push(entryPath);
697
- }
698
- // Recursively search directories
699
- if (entry.isDirectory()) {
700
- try {
701
- const subResults = await this.searchFilesRecursive(entryPath, pattern, excludePatterns);
702
- results.push(...subResults);
703
- }
704
- catch (error) {
705
- }
706
- }
707
- }
708
- return results;
709
- }
710
- async getFileInfo(filePath) {
711
- const validatedPath = this.validatePath(filePath);
712
- try {
713
- const stat = await fs.stat(validatedPath);
714
- const fileInfo = {
715
- name: path.basename(validatedPath),
716
- type: stat.isDirectory() ? 'directory' : 'file',
717
- size: stat.size,
718
- modified: stat.mtime.toISOString(),
719
- created: stat.birthtime.toISOString(),
720
- permissions: '0' + (stat.mode & parseInt('777', 8)).toString(8)
721
- };
722
- return {
723
- content: [{ type: "text", text: JSON.stringify(fileInfo, null, 2) }],
724
- isError: false
725
- };
726
- }
727
- catch (error) {
728
- throw new Error(`Failed to get file info for ${filePath}: ${error.message}`);
729
- }
730
- }
731
- async listAllowedDirectories() {
732
- return {
733
- content: [{ type: "text", text: JSON.stringify(this.allowedDirectories, null, 2) }],
734
- isError: false
735
- };
736
- }
737
- async deleteMultipleFiles(filePaths) {
738
- const results = [];
739
- let successCount = 0;
740
- let errorCount = 0;
741
- for (const filePath of filePaths) {
742
- try {
743
- const validatedPath = this.validatePath(filePath);
744
- // Check if file/directory exists and get its info
745
- const stat = await fs.stat(validatedPath);
746
- const isDirectory = stat.isDirectory();
747
- const itemType = isDirectory ? 'directory' : 'file';
748
- // For directories, we need to use recursive removal
749
- if (isDirectory) {
750
- await fs.rm(validatedPath, { recursive: true, force: true });
751
- }
752
- else {
753
- await fs.unlink(validatedPath);
754
- }
755
- results.push({ path: filePath, success: true, itemType });
756
- successCount++;
757
- }
758
- catch (error) {
759
- let errorMessage = error.message;
760
- if (error.code === 'ENOENT') {
761
- errorMessage = `File or directory not found: ${filePath}`;
762
- }
763
- results.push({ path: filePath, error: errorMessage });
764
- errorCount++;
765
- }
766
- }
767
- // Create summary message
768
- const summary = `Deletion completed: ${successCount} successful, ${errorCount} failed out of ${filePaths.length} total items`;
769
- const detailedResults = JSON.stringify(results, null, 2);
770
- return {
771
- content: [{ type: "text", text: `${summary}\n\nDetailed results:\n${detailedResults}` }],
772
- isError: errorCount > 0 && successCount === 0 // Only mark as error if ALL deletions failed
773
- };
774
- }
775
- }
776
- //# sourceMappingURL=filesystem.js.map