onbuzz 3.3.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 (506) hide show
  1. package/LICENSE +267 -0
  2. package/README.md +425 -0
  3. package/bin/cli.js +556 -0
  4. package/bin/loxia-terminal-v2.js +162 -0
  5. package/bin/loxia-terminal.js +90 -0
  6. package/bin/start-with-terminal.js +200 -0
  7. package/node_modules/@isaacs/balanced-match/LICENSE.md +23 -0
  8. package/node_modules/@isaacs/balanced-match/README.md +60 -0
  9. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts +9 -0
  10. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map +1 -0
  11. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js +59 -0
  12. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map +1 -0
  13. package/node_modules/@isaacs/balanced-match/dist/commonjs/package.json +3 -0
  14. package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts +9 -0
  15. package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map +1 -0
  16. package/node_modules/@isaacs/balanced-match/dist/esm/index.js +54 -0
  17. package/node_modules/@isaacs/balanced-match/dist/esm/index.js.map +1 -0
  18. package/node_modules/@isaacs/balanced-match/dist/esm/package.json +3 -0
  19. package/node_modules/@isaacs/balanced-match/package.json +79 -0
  20. package/node_modules/@isaacs/brace-expansion/LICENSE +23 -0
  21. package/node_modules/@isaacs/brace-expansion/README.md +97 -0
  22. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts +6 -0
  23. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map +1 -0
  24. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js +199 -0
  25. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +1 -0
  26. package/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json +3 -0
  27. package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts +6 -0
  28. package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map +1 -0
  29. package/node_modules/@isaacs/brace-expansion/dist/esm/index.js +195 -0
  30. package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +1 -0
  31. package/node_modules/@isaacs/brace-expansion/dist/esm/package.json +3 -0
  32. package/node_modules/@isaacs/brace-expansion/package.json +60 -0
  33. package/node_modules/glob/LICENSE.md +63 -0
  34. package/node_modules/glob/README.md +1177 -0
  35. package/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
  36. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -0
  37. package/node_modules/glob/dist/commonjs/glob.js +247 -0
  38. package/node_modules/glob/dist/commonjs/glob.js.map +1 -0
  39. package/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
  40. package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +1 -0
  41. package/node_modules/glob/dist/commonjs/has-magic.js +27 -0
  42. package/node_modules/glob/dist/commonjs/has-magic.js.map +1 -0
  43. package/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
  44. package/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -0
  45. package/node_modules/glob/dist/commonjs/ignore.js +119 -0
  46. package/node_modules/glob/dist/commonjs/ignore.js.map +1 -0
  47. package/node_modules/glob/dist/commonjs/index.d.ts +97 -0
  48. package/node_modules/glob/dist/commonjs/index.d.ts.map +1 -0
  49. package/node_modules/glob/dist/commonjs/index.js +68 -0
  50. package/node_modules/glob/dist/commonjs/index.js.map +1 -0
  51. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  52. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  53. package/node_modules/glob/dist/commonjs/package.json +3 -0
  54. package/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
  55. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -0
  56. package/node_modules/glob/dist/commonjs/pattern.js +219 -0
  57. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -0
  58. package/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
  59. package/node_modules/glob/dist/commonjs/processor.d.ts.map +1 -0
  60. package/node_modules/glob/dist/commonjs/processor.js +301 -0
  61. package/node_modules/glob/dist/commonjs/processor.js.map +1 -0
  62. package/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
  63. package/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -0
  64. package/node_modules/glob/dist/commonjs/walker.js +387 -0
  65. package/node_modules/glob/dist/commonjs/walker.js.map +1 -0
  66. package/node_modules/glob/dist/esm/glob.d.ts +388 -0
  67. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -0
  68. package/node_modules/glob/dist/esm/glob.js +243 -0
  69. package/node_modules/glob/dist/esm/glob.js.map +1 -0
  70. package/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
  71. package/node_modules/glob/dist/esm/has-magic.d.ts.map +1 -0
  72. package/node_modules/glob/dist/esm/has-magic.js +23 -0
  73. package/node_modules/glob/dist/esm/has-magic.js.map +1 -0
  74. package/node_modules/glob/dist/esm/ignore.d.ts +24 -0
  75. package/node_modules/glob/dist/esm/ignore.d.ts.map +1 -0
  76. package/node_modules/glob/dist/esm/ignore.js +115 -0
  77. package/node_modules/glob/dist/esm/ignore.js.map +1 -0
  78. package/node_modules/glob/dist/esm/index.d.ts +97 -0
  79. package/node_modules/glob/dist/esm/index.d.ts.map +1 -0
  80. package/node_modules/glob/dist/esm/index.js +55 -0
  81. package/node_modules/glob/dist/esm/index.js.map +1 -0
  82. package/node_modules/glob/dist/esm/index.min.js +4 -0
  83. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  84. package/node_modules/glob/dist/esm/package.json +3 -0
  85. package/node_modules/glob/dist/esm/pattern.d.ts +76 -0
  86. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -0
  87. package/node_modules/glob/dist/esm/pattern.js +215 -0
  88. package/node_modules/glob/dist/esm/pattern.js.map +1 -0
  89. package/node_modules/glob/dist/esm/processor.d.ts +59 -0
  90. package/node_modules/glob/dist/esm/processor.d.ts.map +1 -0
  91. package/node_modules/glob/dist/esm/processor.js +294 -0
  92. package/node_modules/glob/dist/esm/processor.js.map +1 -0
  93. package/node_modules/glob/dist/esm/walker.d.ts +97 -0
  94. package/node_modules/glob/dist/esm/walker.d.ts.map +1 -0
  95. package/node_modules/glob/dist/esm/walker.js +381 -0
  96. package/node_modules/glob/dist/esm/walker.js.map +1 -0
  97. package/node_modules/glob/node_modules/minimatch/LICENSE.md +55 -0
  98. package/node_modules/glob/node_modules/minimatch/README.md +453 -0
  99. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  100. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
  101. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  102. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
  103. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
  104. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
  105. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +591 -0
  106. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
  107. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
  108. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
  109. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
  110. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
  111. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +15 -0
  112. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
  113. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +30 -0
  114. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
  115. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
  116. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
  117. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +1029 -0
  118. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
  119. package/node_modules/glob/node_modules/minimatch/dist/commonjs/package.json +3 -0
  120. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +22 -0
  121. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
  122. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +38 -0
  123. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
  124. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  125. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
  126. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
  127. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  128. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
  129. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
  130. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +587 -0
  131. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  132. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
  133. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
  134. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
  135. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  136. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +15 -0
  137. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
  138. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +26 -0
  139. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  140. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +94 -0
  141. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
  142. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +1016 -0
  143. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -0
  144. package/node_modules/glob/node_modules/minimatch/dist/esm/package.json +3 -0
  145. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +22 -0
  146. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
  147. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +34 -0
  148. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  149. package/node_modules/glob/node_modules/minimatch/package.json +67 -0
  150. package/node_modules/glob/package.json +101 -0
  151. package/node_modules/minipass/LICENSE +15 -0
  152. package/node_modules/minipass/README.md +825 -0
  153. package/node_modules/minipass/dist/commonjs/index.d.ts +549 -0
  154. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  155. package/node_modules/minipass/dist/commonjs/index.js +1028 -0
  156. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  157. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  158. package/node_modules/minipass/dist/esm/index.d.ts +549 -0
  159. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  160. package/node_modules/minipass/dist/esm/index.js +1018 -0
  161. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  162. package/node_modules/minipass/dist/esm/package.json +3 -0
  163. package/node_modules/minipass/package.json +82 -0
  164. package/node_modules/package-json-from-dist/LICENSE.md +63 -0
  165. package/node_modules/package-json-from-dist/README.md +110 -0
  166. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +89 -0
  167. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +1 -0
  168. package/node_modules/package-json-from-dist/dist/commonjs/index.js +134 -0
  169. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +1 -0
  170. package/node_modules/package-json-from-dist/dist/commonjs/package.json +3 -0
  171. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +89 -0
  172. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +1 -0
  173. package/node_modules/package-json-from-dist/dist/esm/index.js +129 -0
  174. package/node_modules/package-json-from-dist/dist/esm/index.js.map +1 -0
  175. package/node_modules/package-json-from-dist/dist/esm/package.json +3 -0
  176. package/node_modules/package-json-from-dist/package.json +68 -0
  177. package/node_modules/path-scurry/LICENSE.md +55 -0
  178. package/node_modules/path-scurry/README.md +636 -0
  179. package/node_modules/path-scurry/dist/commonjs/index.d.ts +1115 -0
  180. package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +1 -0
  181. package/node_modules/path-scurry/dist/commonjs/index.js +2018 -0
  182. package/node_modules/path-scurry/dist/commonjs/index.js.map +1 -0
  183. package/node_modules/path-scurry/dist/commonjs/package.json +3 -0
  184. package/node_modules/path-scurry/dist/esm/index.d.ts +1115 -0
  185. package/node_modules/path-scurry/dist/esm/index.d.ts.map +1 -0
  186. package/node_modules/path-scurry/dist/esm/index.js +1983 -0
  187. package/node_modules/path-scurry/dist/esm/index.js.map +1 -0
  188. package/node_modules/path-scurry/dist/esm/package.json +3 -0
  189. package/node_modules/path-scurry/node_modules/lru-cache/LICENSE.md +55 -0
  190. package/node_modules/path-scurry/node_modules/lru-cache/README.md +383 -0
  191. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +1323 -0
  192. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
  193. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +1589 -0
  194. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
  195. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
  196. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
  197. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  198. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +1323 -0
  199. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
  200. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +1585 -0
  201. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -0
  202. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +2 -0
  203. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
  204. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json +3 -0
  205. package/node_modules/path-scurry/node_modules/lru-cache/package.json +101 -0
  206. package/node_modules/path-scurry/package.json +88 -0
  207. package/node_modules/rimraf/LICENSE.md +55 -0
  208. package/node_modules/rimraf/README.md +226 -0
  209. package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts +3 -0
  210. package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map +1 -0
  211. package/node_modules/rimraf/dist/commonjs/default-tmp.js +58 -0
  212. package/node_modules/rimraf/dist/commonjs/default-tmp.js.map +1 -0
  213. package/node_modules/rimraf/dist/commonjs/error.d.ts +6 -0
  214. package/node_modules/rimraf/dist/commonjs/error.d.ts.map +1 -0
  215. package/node_modules/rimraf/dist/commonjs/error.js +10 -0
  216. package/node_modules/rimraf/dist/commonjs/error.js.map +1 -0
  217. package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts +3 -0
  218. package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map +1 -0
  219. package/node_modules/rimraf/dist/commonjs/fix-eperm.js +38 -0
  220. package/node_modules/rimraf/dist/commonjs/fix-eperm.js.map +1 -0
  221. package/node_modules/rimraf/dist/commonjs/fs.d.ts +15 -0
  222. package/node_modules/rimraf/dist/commonjs/fs.d.ts.map +1 -0
  223. package/node_modules/rimraf/dist/commonjs/fs.js +33 -0
  224. package/node_modules/rimraf/dist/commonjs/fs.js.map +1 -0
  225. package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts +3 -0
  226. package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts.map +1 -0
  227. package/node_modules/rimraf/dist/commonjs/ignore-enoent.js +24 -0
  228. package/node_modules/rimraf/dist/commonjs/ignore-enoent.js.map +1 -0
  229. package/node_modules/rimraf/dist/commonjs/index.d.ts +50 -0
  230. package/node_modules/rimraf/dist/commonjs/index.d.ts.map +1 -0
  231. package/node_modules/rimraf/dist/commonjs/index.js +78 -0
  232. package/node_modules/rimraf/dist/commonjs/index.js.map +1 -0
  233. package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts +34 -0
  234. package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts.map +1 -0
  235. package/node_modules/rimraf/dist/commonjs/opt-arg.js +53 -0
  236. package/node_modules/rimraf/dist/commonjs/opt-arg.js.map +1 -0
  237. package/node_modules/rimraf/dist/commonjs/package.json +3 -0
  238. package/node_modules/rimraf/dist/commonjs/path-arg.d.ts +4 -0
  239. package/node_modules/rimraf/dist/commonjs/path-arg.d.ts.map +1 -0
  240. package/node_modules/rimraf/dist/commonjs/path-arg.js +48 -0
  241. package/node_modules/rimraf/dist/commonjs/path-arg.js.map +1 -0
  242. package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts +3 -0
  243. package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts.map +1 -0
  244. package/node_modules/rimraf/dist/commonjs/readdir-or-error.js +19 -0
  245. package/node_modules/rimraf/dist/commonjs/readdir-or-error.js.map +1 -0
  246. package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts +8 -0
  247. package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts.map +1 -0
  248. package/node_modules/rimraf/dist/commonjs/retry-busy.js +65 -0
  249. package/node_modules/rimraf/dist/commonjs/retry-busy.js.map +1 -0
  250. package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts +3 -0
  251. package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts.map +1 -0
  252. package/node_modules/rimraf/dist/commonjs/rimraf-manual.js +8 -0
  253. package/node_modules/rimraf/dist/commonjs/rimraf-manual.js.map +1 -0
  254. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts +4 -0
  255. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts.map +1 -0
  256. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js +138 -0
  257. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js.map +1 -0
  258. package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts +4 -0
  259. package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts.map +1 -0
  260. package/node_modules/rimraf/dist/commonjs/rimraf-native.js +24 -0
  261. package/node_modules/rimraf/dist/commonjs/rimraf-native.js.map +1 -0
  262. package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts +4 -0
  263. package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts.map +1 -0
  264. package/node_modules/rimraf/dist/commonjs/rimraf-posix.js +103 -0
  265. package/node_modules/rimraf/dist/commonjs/rimraf-posix.js.map +1 -0
  266. package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts +4 -0
  267. package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts.map +1 -0
  268. package/node_modules/rimraf/dist/commonjs/rimraf-windows.js +159 -0
  269. package/node_modules/rimraf/dist/commonjs/rimraf-windows.js.map +1 -0
  270. package/node_modules/rimraf/dist/commonjs/use-native.d.ts +4 -0
  271. package/node_modules/rimraf/dist/commonjs/use-native.d.ts.map +1 -0
  272. package/node_modules/rimraf/dist/commonjs/use-native.js +18 -0
  273. package/node_modules/rimraf/dist/commonjs/use-native.js.map +1 -0
  274. package/node_modules/rimraf/dist/esm/bin.d.mts +3 -0
  275. package/node_modules/rimraf/dist/esm/bin.d.mts.map +1 -0
  276. package/node_modules/rimraf/dist/esm/bin.mjs +250 -0
  277. package/node_modules/rimraf/dist/esm/bin.mjs.map +1 -0
  278. package/node_modules/rimraf/dist/esm/default-tmp.d.ts +3 -0
  279. package/node_modules/rimraf/dist/esm/default-tmp.d.ts.map +1 -0
  280. package/node_modules/rimraf/dist/esm/default-tmp.js +55 -0
  281. package/node_modules/rimraf/dist/esm/default-tmp.js.map +1 -0
  282. package/node_modules/rimraf/dist/esm/error.d.ts +6 -0
  283. package/node_modules/rimraf/dist/esm/error.d.ts.map +1 -0
  284. package/node_modules/rimraf/dist/esm/error.js +5 -0
  285. package/node_modules/rimraf/dist/esm/error.js.map +1 -0
  286. package/node_modules/rimraf/dist/esm/fix-eperm.d.ts +3 -0
  287. package/node_modules/rimraf/dist/esm/fix-eperm.d.ts.map +1 -0
  288. package/node_modules/rimraf/dist/esm/fix-eperm.js +33 -0
  289. package/node_modules/rimraf/dist/esm/fix-eperm.js.map +1 -0
  290. package/node_modules/rimraf/dist/esm/fs.d.ts +15 -0
  291. package/node_modules/rimraf/dist/esm/fs.d.ts.map +1 -0
  292. package/node_modules/rimraf/dist/esm/fs.js +18 -0
  293. package/node_modules/rimraf/dist/esm/fs.js.map +1 -0
  294. package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts +3 -0
  295. package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts.map +1 -0
  296. package/node_modules/rimraf/dist/esm/ignore-enoent.js +19 -0
  297. package/node_modules/rimraf/dist/esm/ignore-enoent.js.map +1 -0
  298. package/node_modules/rimraf/dist/esm/index.d.ts +50 -0
  299. package/node_modules/rimraf/dist/esm/index.d.ts.map +1 -0
  300. package/node_modules/rimraf/dist/esm/index.js +70 -0
  301. package/node_modules/rimraf/dist/esm/index.js.map +1 -0
  302. package/node_modules/rimraf/dist/esm/opt-arg.d.ts +34 -0
  303. package/node_modules/rimraf/dist/esm/opt-arg.d.ts.map +1 -0
  304. package/node_modules/rimraf/dist/esm/opt-arg.js +46 -0
  305. package/node_modules/rimraf/dist/esm/opt-arg.js.map +1 -0
  306. package/node_modules/rimraf/dist/esm/package.json +3 -0
  307. package/node_modules/rimraf/dist/esm/path-arg.d.ts +4 -0
  308. package/node_modules/rimraf/dist/esm/path-arg.d.ts.map +1 -0
  309. package/node_modules/rimraf/dist/esm/path-arg.js +46 -0
  310. package/node_modules/rimraf/dist/esm/path-arg.js.map +1 -0
  311. package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts +3 -0
  312. package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts.map +1 -0
  313. package/node_modules/rimraf/dist/esm/readdir-or-error.js +14 -0
  314. package/node_modules/rimraf/dist/esm/readdir-or-error.js.map +1 -0
  315. package/node_modules/rimraf/dist/esm/retry-busy.d.ts +8 -0
  316. package/node_modules/rimraf/dist/esm/retry-busy.d.ts.map +1 -0
  317. package/node_modules/rimraf/dist/esm/retry-busy.js +60 -0
  318. package/node_modules/rimraf/dist/esm/retry-busy.js.map +1 -0
  319. package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts +3 -0
  320. package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts.map +1 -0
  321. package/node_modules/rimraf/dist/esm/rimraf-manual.js +5 -0
  322. package/node_modules/rimraf/dist/esm/rimraf-manual.js.map +1 -0
  323. package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts +4 -0
  324. package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts.map +1 -0
  325. package/node_modules/rimraf/dist/esm/rimraf-move-remove.js +133 -0
  326. package/node_modules/rimraf/dist/esm/rimraf-move-remove.js.map +1 -0
  327. package/node_modules/rimraf/dist/esm/rimraf-native.d.ts +4 -0
  328. package/node_modules/rimraf/dist/esm/rimraf-native.d.ts.map +1 -0
  329. package/node_modules/rimraf/dist/esm/rimraf-native.js +19 -0
  330. package/node_modules/rimraf/dist/esm/rimraf-native.js.map +1 -0
  331. package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts +4 -0
  332. package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts.map +1 -0
  333. package/node_modules/rimraf/dist/esm/rimraf-posix.js +98 -0
  334. package/node_modules/rimraf/dist/esm/rimraf-posix.js.map +1 -0
  335. package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts +4 -0
  336. package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts.map +1 -0
  337. package/node_modules/rimraf/dist/esm/rimraf-windows.js +154 -0
  338. package/node_modules/rimraf/dist/esm/rimraf-windows.js.map +1 -0
  339. package/node_modules/rimraf/dist/esm/use-native.d.ts +4 -0
  340. package/node_modules/rimraf/dist/esm/use-native.d.ts.map +1 -0
  341. package/node_modules/rimraf/dist/esm/use-native.js +15 -0
  342. package/node_modules/rimraf/dist/esm/use-native.js.map +1 -0
  343. package/node_modules/rimraf/package.json +92 -0
  344. package/package.json +152 -0
  345. package/scripts/install-scanners.js +258 -0
  346. package/scripts/watchdog.js +147 -0
  347. package/src/analyzers/CSSAnalyzer.js +297 -0
  348. package/src/analyzers/ConfigValidator.js +690 -0
  349. package/src/analyzers/ESLintAnalyzer.js +320 -0
  350. package/src/analyzers/JavaScriptAnalyzer.js +261 -0
  351. package/src/analyzers/PrettierFormatter.js +247 -0
  352. package/src/analyzers/PythonAnalyzer.js +283 -0
  353. package/src/analyzers/SecurityAnalyzer.js +729 -0
  354. package/src/analyzers/SparrowAnalyzer.js +341 -0
  355. package/src/analyzers/TypeScriptAnalyzer.js +247 -0
  356. package/src/analyzers/codeCloneDetector/analyzer.js +344 -0
  357. package/src/analyzers/codeCloneDetector/detector.js +250 -0
  358. package/src/analyzers/codeCloneDetector/index.js +192 -0
  359. package/src/analyzers/codeCloneDetector/parser.js +199 -0
  360. package/src/analyzers/codeCloneDetector/reporter.js +148 -0
  361. package/src/analyzers/codeCloneDetector/scanner.js +88 -0
  362. package/src/core/agentPool.js +1957 -0
  363. package/src/core/agentScheduler.js +3212 -0
  364. package/src/core/contextManager.js +709 -0
  365. package/src/core/flowExecutor.js +928 -0
  366. package/src/core/messageProcessor.js +808 -0
  367. package/src/core/orchestrator.js +584 -0
  368. package/src/core/stateManager.js +1500 -0
  369. package/src/index.js +972 -0
  370. package/src/interfaces/cli.js +553 -0
  371. package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +208 -0
  372. package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +236 -0
  373. package/src/interfaces/terminal/__tests__/smoke/agents.test.js +138 -0
  374. package/src/interfaces/terminal/__tests__/smoke/components.test.js +137 -0
  375. package/src/interfaces/terminal/__tests__/smoke/connection.test.js +350 -0
  376. package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -0
  377. package/src/interfaces/terminal/__tests__/smoke/imports.test.js +332 -0
  378. package/src/interfaces/terminal/__tests__/smoke/messages.test.js +256 -0
  379. package/src/interfaces/terminal/__tests__/smoke/tools.test.js +388 -0
  380. package/src/interfaces/terminal/api/apiClient.js +299 -0
  381. package/src/interfaces/terminal/api/messageRouter.js +262 -0
  382. package/src/interfaces/terminal/api/session.js +266 -0
  383. package/src/interfaces/terminal/api/websocket.js +497 -0
  384. package/src/interfaces/terminal/components/AgentCreator.js +705 -0
  385. package/src/interfaces/terminal/components/AgentEditor.js +678 -0
  386. package/src/interfaces/terminal/components/AgentSwitcher.js +330 -0
  387. package/src/interfaces/terminal/components/ErrorBoundary.js +92 -0
  388. package/src/interfaces/terminal/components/ErrorPanel.js +264 -0
  389. package/src/interfaces/terminal/components/Header.js +28 -0
  390. package/src/interfaces/terminal/components/HelpPanel.js +231 -0
  391. package/src/interfaces/terminal/components/InputBox.js +118 -0
  392. package/src/interfaces/terminal/components/Layout.js +603 -0
  393. package/src/interfaces/terminal/components/LoadingSpinner.js +71 -0
  394. package/src/interfaces/terminal/components/MessageList.js +281 -0
  395. package/src/interfaces/terminal/components/MultilineTextInput.js +251 -0
  396. package/src/interfaces/terminal/components/SearchPanel.js +265 -0
  397. package/src/interfaces/terminal/components/SettingsPanel.js +415 -0
  398. package/src/interfaces/terminal/components/StatusBar.js +65 -0
  399. package/src/interfaces/terminal/components/TextInput.js +127 -0
  400. package/src/interfaces/terminal/config/agentEditorConstants.js +227 -0
  401. package/src/interfaces/terminal/config/constants.js +393 -0
  402. package/src/interfaces/terminal/index.js +168 -0
  403. package/src/interfaces/terminal/state/useAgentControl.js +496 -0
  404. package/src/interfaces/terminal/state/useAgents.js +537 -0
  405. package/src/interfaces/terminal/state/useConnection.js +444 -0
  406. package/src/interfaces/terminal/state/useMessages.js +630 -0
  407. package/src/interfaces/terminal/state/useTools.js +554 -0
  408. package/src/interfaces/terminal/utils/debugLogger.js +44 -0
  409. package/src/interfaces/terminal/utils/settingsStorage.js +232 -0
  410. package/src/interfaces/terminal/utils/theme.js +85 -0
  411. package/src/interfaces/webServer.js +5457 -0
  412. package/src/modules/fileExplorer/controller.js +413 -0
  413. package/src/modules/fileExplorer/index.js +37 -0
  414. package/src/modules/fileExplorer/middleware.js +92 -0
  415. package/src/modules/fileExplorer/routes.js +158 -0
  416. package/src/modules/fileExplorer/types.js +44 -0
  417. package/src/services/agentActivityService.js +399 -0
  418. package/src/services/aiService.js +2618 -0
  419. package/src/services/apiKeyManager.js +334 -0
  420. package/src/services/benchmarkService.js +196 -0
  421. package/src/services/budgetService.js +565 -0
  422. package/src/services/contextInjectionService.js +268 -0
  423. package/src/services/conversationCompactionService.js +1103 -0
  424. package/src/services/credentialVault.js +685 -0
  425. package/src/services/errorHandler.js +810 -0
  426. package/src/services/fileAttachmentService.js +547 -0
  427. package/src/services/flowContextService.js +189 -0
  428. package/src/services/memoryService.js +521 -0
  429. package/src/services/modelRouterService.js +365 -0
  430. package/src/services/modelsService.js +323 -0
  431. package/src/services/ollamaService.js +452 -0
  432. package/src/services/portRegistry.js +336 -0
  433. package/src/services/portTracker.js +223 -0
  434. package/src/services/projectDetector.js +404 -0
  435. package/src/services/promptService.js +372 -0
  436. package/src/services/qualityInspector.js +796 -0
  437. package/src/services/scheduleService.js +725 -0
  438. package/src/services/serviceRegistry.js +386 -0
  439. package/src/services/skillsService.js +486 -0
  440. package/src/services/telegramService.js +920 -0
  441. package/src/services/tokenCountingService.js +316 -0
  442. package/src/services/visualEditorBridge.js +1033 -0
  443. package/src/services/visualEditorServer.js +1727 -0
  444. package/src/services/whatsappService.js +663 -0
  445. package/src/tools/__tests__/webTool.e2e.test.js +569 -0
  446. package/src/tools/__tests__/webTool.unit.test.js +195 -0
  447. package/src/tools/agentCommunicationTool.js +1343 -0
  448. package/src/tools/agentDelayTool.js +498 -0
  449. package/src/tools/asyncToolManager.js +604 -0
  450. package/src/tools/baseTool.js +887 -0
  451. package/src/tools/browserTool.js +897 -0
  452. package/src/tools/cloneDetectionTool.js +581 -0
  453. package/src/tools/codeMapTool.js +857 -0
  454. package/src/tools/dependencyResolverTool.js +1212 -0
  455. package/src/tools/docxTool.js +623 -0
  456. package/src/tools/excelTool.js +636 -0
  457. package/src/tools/fileContentReplaceTool.js +840 -0
  458. package/src/tools/fileTreeTool.js +833 -0
  459. package/src/tools/filesystemTool.js +1217 -0
  460. package/src/tools/helpTool.js +198 -0
  461. package/src/tools/imageTool.js +1034 -0
  462. package/src/tools/importAnalyzerTool.js +1056 -0
  463. package/src/tools/jobDoneTool.js +388 -0
  464. package/src/tools/memoryTool.js +554 -0
  465. package/src/tools/pdfTool.js +627 -0
  466. package/src/tools/seekTool.js +883 -0
  467. package/src/tools/skillsTool.js +276 -0
  468. package/src/tools/staticAnalysisTool.js +2146 -0
  469. package/src/tools/taskManagerTool.js +2836 -0
  470. package/src/tools/terminalTool.js +2486 -0
  471. package/src/tools/userPromptTool.js +474 -0
  472. package/src/tools/videoTool.js +1139 -0
  473. package/src/tools/visionTool.js +507 -0
  474. package/src/tools/visualEditorTool.js +1175 -0
  475. package/src/tools/webTool.js +3114 -0
  476. package/src/tools/whatsappTool.js +457 -0
  477. package/src/types/agent.js +519 -0
  478. package/src/types/contextReference.js +972 -0
  479. package/src/types/conversation.js +730 -0
  480. package/src/types/toolCommand.js +747 -0
  481. package/src/utilities/attachmentValidator.js +288 -0
  482. package/src/utilities/browserStealth.js +630 -0
  483. package/src/utilities/configManager.js +618 -0
  484. package/src/utilities/constants.js +870 -0
  485. package/src/utilities/directoryAccessManager.js +566 -0
  486. package/src/utilities/fileProcessor.js +307 -0
  487. package/src/utilities/humanBehavior.js +453 -0
  488. package/src/utilities/jsonRepair.js +242 -0
  489. package/src/utilities/logger.js +436 -0
  490. package/src/utilities/platformUtils.js +255 -0
  491. package/src/utilities/platformUtils.test.js +98 -0
  492. package/src/utilities/stealthConstants.js +377 -0
  493. package/src/utilities/structuredFileValidator.js +699 -0
  494. package/src/utilities/tagParser.js +878 -0
  495. package/src/utilities/toolConstants.js +415 -0
  496. package/src/utilities/userDataDir.js +300 -0
  497. package/web-ui/build/brands/autopilot/favicon.svg +1 -0
  498. package/web-ui/build/brands/autopilot/logo.webp +0 -0
  499. package/web-ui/build/brands/onbuzz/favicon.svg +1 -0
  500. package/web-ui/build/brands/onbuzz/logo-text.webp +0 -0
  501. package/web-ui/build/brands/onbuzz/logo.webp +0 -0
  502. package/web-ui/build/index.html +15 -0
  503. package/web-ui/build/logo.png +0 -0
  504. package/web-ui/build/logo2.png +0 -0
  505. package/web-ui/build/static/index-SmQFfvBs.js +746 -0
  506. package/web-ui/build/static/index-V2ySwjHp.css +1 -0
@@ -0,0 +1,833 @@
1
+ /**
2
+ * FileTreeTool - Generate hierarchical file tree representations
3
+ *
4
+ * Purpose:
5
+ * - Generate ASCII tree of project directory structure
6
+ * - Help agents understand project organization
7
+ * - Support filtering by file types (whitelist/blacklist)
8
+ * - Respect directory access permissions
9
+ * - Provide focused views of codebases
10
+ */
11
+
12
+ import { BaseTool } from './baseTool.js';
13
+ import { promises as fs } from 'fs';
14
+ import path from 'path';
15
+
16
+ // Configuration constants
17
+ const TREE_CONFIG = {
18
+ // Depth limits
19
+ DEFAULT_MAX_DEPTH: 3,
20
+ MAX_DEPTH_LIMIT: 10, // Absolute maximum to prevent performance issues
21
+
22
+ // Size limits
23
+ MAX_FILES_IN_TREE: 10000, // Maximum files to include
24
+ MAX_DIRECTORIES: 1000, // Maximum directories to scan
25
+
26
+ // Display settings
27
+ SHOW_FILES_DEFAULT: true,
28
+ SHOW_HIDDEN_DEFAULT: false,
29
+ SHOW_SIZES_DEFAULT: false,
30
+
31
+ // Tree symbols
32
+ SYMBOLS: {
33
+ BRANCH: '├── ',
34
+ LAST_BRANCH: '└── ',
35
+ VERTICAL: '│ ',
36
+ INDENT: ' '
37
+ }
38
+ };
39
+
40
+ // Default directories to ignore
41
+ const DEFAULT_IGNORE_DIRECTORIES = [
42
+ 'node_modules',
43
+ '.git',
44
+ 'dist',
45
+ 'build',
46
+ 'coverage',
47
+ '.next',
48
+ '.nuxt',
49
+ '.cache',
50
+ 'out',
51
+ 'target',
52
+ 'vendor',
53
+ 'bower_components',
54
+ '.vscode',
55
+ '.idea',
56
+ '.vs',
57
+ '__pycache__',
58
+ 'venv',
59
+ 'env',
60
+ '.env',
61
+ '.pytest_cache',
62
+ '.mypy_cache',
63
+ 'eggs',
64
+ '.eggs',
65
+ 'lib',
66
+ 'lib64',
67
+ 'parts',
68
+ 'sdist',
69
+ 'wheels',
70
+ '.tox',
71
+ '.nox',
72
+ 'htmlcov',
73
+ '.hypothesis',
74
+ 'tmp',
75
+ 'temp',
76
+ '.tmp',
77
+ '.temp'
78
+ ];
79
+
80
+ // Default file extensions to ignore (blacklist)
81
+ const DEFAULT_IGNORE_EXTENSIONS = [
82
+ '.map',
83
+ '.min.js',
84
+ '.min.css',
85
+ '.lock',
86
+ '.log',
87
+ '.tmp',
88
+ '.temp',
89
+ '.pyc',
90
+ '.pyo',
91
+ '.pyd',
92
+ '.so',
93
+ '.dll',
94
+ '.dylib',
95
+ '.exe',
96
+ '.obj',
97
+ '.o',
98
+ '.a',
99
+ '.class',
100
+ '.jar',
101
+ '.war'
102
+ ];
103
+
104
+ // Common binary/media file extensions to optionally ignore
105
+ const BINARY_EXTENSIONS = [
106
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg',
107
+ '.pdf', '.zip', '.tar', '.gz', '.rar', '.7z',
108
+ '.mp3', '.mp4', '.avi', '.mov', '.wmv',
109
+ '.woff', '.woff2', '.ttf', '.eot',
110
+ '.bin', '.dat', '.db', '.sqlite'
111
+ ];
112
+
113
+ class FileTreeTool extends BaseTool {
114
+ constructor(config = {}, logger = null) {
115
+ super(config, logger);
116
+
117
+ // Override tool ID to match documentation (with hyphen)
118
+ this.id = 'file-tree';
119
+
120
+ // Tool metadata
121
+ this.requiresProject = true;
122
+ this.isAsync = true;
123
+ this.timeout = config.timeout || 120000; // 2 minutes default
124
+
125
+ // Merge config with defaults
126
+ this.treeConfig = {
127
+ ...TREE_CONFIG,
128
+ ...config.treeConfig
129
+ };
130
+
131
+ // Track statistics during tree generation
132
+ this.stats = {
133
+ filesCount: 0,
134
+ directoriesCount: 0,
135
+ skippedCount: 0
136
+ };
137
+ }
138
+
139
+ /**
140
+ * Get tool description for LLM consumption
141
+ * @returns {string} Tool description
142
+ */
143
+ getDescription() {
144
+ return `
145
+ File Tree Tool: Generate hierarchical tree representation of project directory structure.
146
+
147
+ USAGE:
148
+ \`\`\`json
149
+ {
150
+ "toolId": "file-tree",
151
+ "directory": "src",
152
+ "maxDepth": 4,
153
+ "includeExtensions": [".js", ".jsx", ".ts", ".tsx"],
154
+ "excludeExtensions": [".test.js", ".spec.js"],
155
+ "showFiles": true,
156
+ "showHidden": false
157
+ }
158
+ \`\`\`
159
+
160
+ PARAMETERS:
161
+
162
+ directory (optional):
163
+ - Directory to scan (default: working directory)
164
+ - Can be relative or absolute path
165
+ - Examples: "src", "src/components", "/home/user/project"
166
+
167
+ maxDepth (optional):
168
+ - Maximum depth to scan (default: ${TREE_CONFIG.DEFAULT_MAX_DEPTH})
169
+ - Range: 1-${TREE_CONFIG.MAX_DEPTH_LIMIT}
170
+ - Deeper = more detail, slower performance
171
+
172
+ includeExtensions (optional - WHITELIST):
173
+ - Include ONLY these file extensions
174
+ - Array of extensions
175
+ - Examples: [".js", ".jsx", ".ts", ".tsx"]
176
+ - Takes precedence over excludeExtensions
177
+
178
+ excludeExtensions (optional - BLACKLIST):
179
+ - Exclude these file extensions
180
+ - Array of extensions
181
+ - Examples: [".test.js", ".spec.js", ".min.js"]
182
+ - Only applies if includeExtensions is not set
183
+
184
+ excludeDirectories (optional):
185
+ - Additional directories to ignore
186
+ - Already ignores: node_modules, .git, dist, build, etc.
187
+ - Examples: ["tests", "fixtures", "mocks"]
188
+
189
+ showFiles (optional):
190
+ - Whether to show files (default: true)
191
+ - Set to false to show only directory structure
192
+
193
+ showHidden (optional):
194
+ - Whether to show hidden files/folders (default: false)
195
+ - Hidden = starts with '.'
196
+
197
+ showSizes (optional):
198
+ - Whether to show file sizes (default: false)
199
+ - Format: KB, MB
200
+
201
+ ignoreBinaryFiles (optional):
202
+ - Whether to ignore binary/media files (default: false)
203
+ - Ignores: images, videos, archives, fonts, etc.
204
+
205
+ EXAMPLES:
206
+
207
+ Example 1 - Basic tree:
208
+ \`\`\`json
209
+ {
210
+ "toolId": "file-tree",
211
+ "directory": "."
212
+ }
213
+ \`\`\`
214
+
215
+ Example 2 - JavaScript/TypeScript only:
216
+ \`\`\`json
217
+ {
218
+ "toolId": "file-tree",
219
+ "directory": "src",
220
+ "includeExtensions": [".js", ".jsx", ".ts", ".tsx"],
221
+ "maxDepth": 5
222
+ }
223
+ \`\`\`
224
+
225
+ Example 3 - Python project structure:
226
+ \`\`\`json
227
+ {
228
+ "toolId": "file-tree",
229
+ "directory": ".",
230
+ "includeExtensions": [".py"],
231
+ "excludeExtensions": [".pyc"],
232
+ "showFiles": true
233
+ }
234
+ \`\`\`
235
+
236
+ Example 4 - Directory structure only:
237
+ \`\`\`json
238
+ {
239
+ "toolId": "file-tree",
240
+ "directory": "src",
241
+ "showFiles": false,
242
+ "maxDepth": 3
243
+ }
244
+ \`\`\`
245
+
246
+ Example 5 - Exclude test files:
247
+ \`\`\`json
248
+ {
249
+ "toolId": "file-tree",
250
+ "directory": "src",
251
+ "excludeExtensions": [".test.js", ".spec.js", ".test.ts", ".spec.ts"],
252
+ "excludeDirectories": ["__tests__", "tests", "specs"]
253
+ }
254
+ \`\`\`
255
+
256
+ OUTPUT FORMAT:
257
+ src/
258
+ ├── components/
259
+ │ ├── Header.jsx
260
+ │ ├── Footer.jsx
261
+ │ └── Layout.jsx
262
+ ├── utils/
263
+ │ ├── helpers.js
264
+ │ └── config.js
265
+ └── index.js
266
+
267
+ AUTOMATIC IGNORES:
268
+ The tool automatically ignores common directories:
269
+ - node_modules, .git, dist, build, coverage
270
+ - .next, .nuxt, .cache, out, target
271
+ - .vscode, .idea, __pycache__, venv
272
+
273
+ LIMITATIONS:
274
+ - Maximum depth: ${TREE_CONFIG.MAX_DEPTH_LIMIT}
275
+ - Maximum files: ${TREE_CONFIG.MAX_FILES_IN_TREE}
276
+ - Maximum directories: ${TREE_CONFIG.MAX_DIRECTORIES}
277
+ - Binary files can be filtered with ignoreBinaryFiles option
278
+ `;
279
+ }
280
+
281
+ /**
282
+ * Parse parameters from tool command content
283
+ * @param {string} content - Raw tool command content
284
+ * @returns {Object} Parsed parameters
285
+ */
286
+ parseParameters(content) {
287
+ try {
288
+ // Try JSON first
289
+ if (content.trim().startsWith('{')) {
290
+ const parsed = JSON.parse(content);
291
+
292
+ return {
293
+ directory: parsed.directory || '.',
294
+ maxDepth: parsed.maxDepth || TREE_CONFIG.DEFAULT_MAX_DEPTH,
295
+ includeExtensions: parsed.includeExtensions || [],
296
+ excludeExtensions: parsed.excludeExtensions || [],
297
+ excludeDirectories: parsed.excludeDirectories || [],
298
+ showFiles: parsed.showFiles !== false,
299
+ showHidden: parsed.showHidden === true,
300
+ showSizes: parsed.showSizes === true,
301
+ ignoreBinaryFiles: parsed.ignoreBinaryFiles === true
302
+ };
303
+ }
304
+
305
+ // XML parsing
306
+ const params = {
307
+ directory: '.',
308
+ maxDepth: TREE_CONFIG.DEFAULT_MAX_DEPTH,
309
+ includeExtensions: [],
310
+ excludeExtensions: [],
311
+ excludeDirectories: [],
312
+ showFiles: true,
313
+ showHidden: false,
314
+ showSizes: false,
315
+ ignoreBinaryFiles: false
316
+ };
317
+
318
+ // Extract directory
319
+ const dirPattern = /<directory>(.*?)<\/directory>/i;
320
+ const dirMatch = dirPattern.exec(content);
321
+ if (dirMatch) {
322
+ params.directory = dirMatch[1].trim();
323
+ }
324
+
325
+ // Extract max-depth
326
+ const depthPattern = /<max-depth>(\d+)<\/max-depth>/i;
327
+ const depthMatch = depthPattern.exec(content);
328
+ if (depthMatch) {
329
+ params.maxDepth = parseInt(depthMatch[1], 10);
330
+ }
331
+
332
+ // Extract include-extensions (whitelist)
333
+ const includePattern = /<include-extensions>(.*?)<\/include-extensions>/i;
334
+ const includeMatch = includePattern.exec(content);
335
+ if (includeMatch) {
336
+ params.includeExtensions = includeMatch[1]
337
+ .split(',')
338
+ .map(ext => ext.trim())
339
+ .filter(ext => ext.length > 0);
340
+ }
341
+
342
+ // Extract exclude-extensions (blacklist)
343
+ const excludePattern = /<exclude-extensions>(.*?)<\/exclude-extensions>/i;
344
+ const excludeMatch = excludePattern.exec(content);
345
+ if (excludeMatch) {
346
+ params.excludeExtensions = excludeMatch[1]
347
+ .split(',')
348
+ .map(ext => ext.trim())
349
+ .filter(ext => ext.length > 0);
350
+ }
351
+
352
+ // Extract exclude-directories
353
+ const excludeDirsPattern = /<exclude-directories>(.*?)<\/exclude-directories>/i;
354
+ const excludeDirsMatch = excludeDirsPattern.exec(content);
355
+ if (excludeDirsMatch) {
356
+ params.excludeDirectories = excludeDirsMatch[1]
357
+ .split(',')
358
+ .map(dir => dir.trim())
359
+ .filter(dir => dir.length > 0);
360
+ }
361
+
362
+ // Extract boolean flags
363
+ const showFilesPattern = /<show-files>(.*?)<\/show-files>/i;
364
+ const showFilesMatch = showFilesPattern.exec(content);
365
+ if (showFilesMatch) {
366
+ params.showFiles = showFilesMatch[1].trim().toLowerCase() !== 'false';
367
+ }
368
+
369
+ const showHiddenPattern = /<show-hidden>(.*?)<\/show-hidden>/i;
370
+ const showHiddenMatch = showHiddenPattern.exec(content);
371
+ if (showHiddenMatch) {
372
+ params.showHidden = showHiddenMatch[1].trim().toLowerCase() === 'true';
373
+ }
374
+
375
+ const showSizesPattern = /<show-sizes>(.*?)<\/show-sizes>/i;
376
+ const showSizesMatch = showSizesPattern.exec(content);
377
+ if (showSizesMatch) {
378
+ params.showSizes = showSizesMatch[1].trim().toLowerCase() === 'true';
379
+ }
380
+
381
+ const ignoreBinaryPattern = /<ignore-binary-files>(.*?)<\/ignore-binary-files>/i;
382
+ const ignoreBinaryMatch = ignoreBinaryPattern.exec(content);
383
+ if (ignoreBinaryMatch) {
384
+ params.ignoreBinaryFiles = ignoreBinaryMatch[1].trim().toLowerCase() === 'true';
385
+ }
386
+
387
+ return params;
388
+
389
+ } catch (error) {
390
+ this.logger?.error('Failed to parse file-tree parameters', { error: error.message });
391
+ return {
392
+ directory: '.',
393
+ maxDepth: TREE_CONFIG.DEFAULT_MAX_DEPTH,
394
+ includeExtensions: [],
395
+ excludeExtensions: [],
396
+ excludeDirectories: [],
397
+ showFiles: true,
398
+ showHidden: false,
399
+ showSizes: false,
400
+ ignoreBinaryFiles: false,
401
+ parseError: error.message
402
+ };
403
+ }
404
+ }
405
+
406
+ /**
407
+ * Get required parameters
408
+ * @returns {Array<string>} Array of required parameter names
409
+ */
410
+ getRequiredParameters() {
411
+ return []; // All parameters are optional
412
+ }
413
+
414
+ /**
415
+ * Custom parameter validation
416
+ * @param {Object} params - Parameters to validate
417
+ * @returns {Object} Validation result
418
+ */
419
+ customValidateParameters(params) {
420
+ const errors = [];
421
+
422
+ // Validate maxDepth
423
+ if (params.maxDepth !== undefined) {
424
+ if (typeof params.maxDepth !== 'number' || params.maxDepth < 1) {
425
+ errors.push('max-depth must be a positive number');
426
+ } else if (params.maxDepth > this.treeConfig.MAX_DEPTH_LIMIT) {
427
+ errors.push(`max-depth cannot exceed ${this.treeConfig.MAX_DEPTH_LIMIT}`);
428
+ }
429
+ }
430
+
431
+ // Validate directory path
432
+ if (params.directory && params.directory.includes('..')) {
433
+ errors.push('Path traversal (..) not allowed for security');
434
+ }
435
+
436
+ // Validate includeExtensions format
437
+ if (params.includeExtensions !== undefined && params.includeExtensions !== null) {
438
+ if (!Array.isArray(params.includeExtensions)) {
439
+ errors.push('includeExtensions must be an array');
440
+ } else {
441
+ for (const ext of params.includeExtensions) {
442
+ if (!ext.startsWith('.')) {
443
+ errors.push(`Extension "${ext}" must start with a dot (e.g., ".js")`);
444
+ }
445
+ }
446
+ }
447
+ }
448
+
449
+ // Validate excludeExtensions format
450
+ if (params.excludeExtensions !== undefined && params.excludeExtensions !== null) {
451
+ if (!Array.isArray(params.excludeExtensions)) {
452
+ errors.push('excludeExtensions must be an array');
453
+ } else {
454
+ for (const ext of params.excludeExtensions) {
455
+ if (!ext.startsWith('.')) {
456
+ errors.push(`Extension "${ext}" must start with a dot (e.g., ".js")`);
457
+ }
458
+ }
459
+ }
460
+ }
461
+
462
+ // Validate excludeDirectories format
463
+ if (params.excludeDirectories !== undefined && params.excludeDirectories !== null) {
464
+ if (!Array.isArray(params.excludeDirectories)) {
465
+ errors.push('excludeDirectories must be an array');
466
+ }
467
+ }
468
+
469
+ // Throw error if validation fails
470
+ if (errors.length > 0) {
471
+ throw new Error(`Parameter validation failed: ${errors.join(', ')}`);
472
+ }
473
+
474
+ return {
475
+ valid: true,
476
+ errors: []
477
+ };
478
+ }
479
+
480
+ /**
481
+ * Execute tool with parsed parameters
482
+ * @param {Object} params - Parsed parameters
483
+ * @param {Object} context - Execution context
484
+ * @returns {Promise<Object>} Execution result
485
+ */
486
+ async execute(params, context) {
487
+ // Extract params with defaults
488
+ const {
489
+ directory = '.',
490
+ maxDepth = TREE_CONFIG.DEFAULT_MAX_DEPTH,
491
+ includeExtensions = [],
492
+ excludeExtensions = [],
493
+ excludeDirectories = [],
494
+ showFiles = true,
495
+ showHidden = false,
496
+ showSizes = false,
497
+ ignoreBinaryFiles = false
498
+ } = params;
499
+ const { projectDir, agentId, directoryAccess } = context;
500
+
501
+ // Determine working directory (respect multi-directory access)
502
+ let workingDirectory = projectDir || process.cwd();
503
+
504
+ if (directoryAccess && directoryAccess.workingDirectory) {
505
+ workingDirectory = directoryAccess.workingDirectory;
506
+ this.logger?.info('Using agent configured working directory', {
507
+ workingDirectory: directoryAccess.workingDirectory,
508
+ agentId
509
+ });
510
+ }
511
+
512
+ // Resolve target directory
513
+ const targetDir = path.isAbsolute(directory)
514
+ ? directory
515
+ : path.resolve(workingDirectory, directory);
516
+
517
+ // Validate directory exists
518
+ try {
519
+ const stats = await fs.stat(targetDir);
520
+ if (!stats.isDirectory()) {
521
+ throw new Error('Path is not a directory');
522
+ }
523
+ } catch (error) {
524
+ throw new Error(`Directory does not exist or is inaccessible: ${directory}`);
525
+ }
526
+
527
+ this.logger?.info('Generating file tree', {
528
+ directory,
529
+ targetDir,
530
+ maxDepth,
531
+ includeExtensions: includeExtensions?.length || 0,
532
+ excludeExtensions: excludeExtensions?.length || 0,
533
+ agentId
534
+ });
535
+
536
+ // Reset statistics
537
+ this.stats = {
538
+ filesCount: 0,
539
+ directoriesCount: 0,
540
+ skippedCount: 0
541
+ };
542
+
543
+ // Build ignore lists (ensure arrays exist)
544
+ const ignoreDirs = [...DEFAULT_IGNORE_DIRECTORIES, ...(excludeDirectories || [])];
545
+ const ignoreExts = [...DEFAULT_IGNORE_EXTENSIONS];
546
+
547
+ if (ignoreBinaryFiles) {
548
+ ignoreExts.push(...BINARY_EXTENSIONS);
549
+ }
550
+
551
+ // Generate tree (ensure arrays exist)
552
+ const tree = await this.buildTree(
553
+ targetDir,
554
+ targetDir,
555
+ 0,
556
+ maxDepth,
557
+ ignoreDirs,
558
+ includeExtensions || [],
559
+ [...(excludeExtensions || []), ...ignoreExts],
560
+ showFiles,
561
+ showHidden,
562
+ showSizes
563
+ );
564
+
565
+ // Format tree as string
566
+ const treeString = this.formatTree(tree);
567
+
568
+ // Generate summary
569
+ const summary = this.generateSummary(directory, this.stats, maxDepth);
570
+
571
+ return {
572
+ success: true,
573
+ directory: targetDir,
574
+ tree: treeString,
575
+ summary,
576
+ maxDepth,
577
+ totalFiles: this.stats.filesCount,
578
+ totalDirectories: this.stats.directoriesCount,
579
+ skippedCount: this.stats.skippedCount,
580
+ statistics: { ...this.stats },
581
+ toolUsed: 'file-tree',
582
+ guidance: 'To understand the code structure of files shown above, use code-map skeleton. Example: {"toolId":"code-map","parameters":{"action":"skeleton","path":"src/","level":"B.0"}}'
583
+ };
584
+ }
585
+
586
+ /**
587
+ * Build tree data structure recursively
588
+ * @param {string} basePath - Base path for relative calculations
589
+ * @param {string} currentPath - Current directory being processed
590
+ * @param {number} currentDepth - Current depth in tree
591
+ * @param {number} maxDepth - Maximum depth to scan
592
+ * @param {Array<string>} ignoreDirs - Directories to ignore
593
+ * @param {Array<string>} includeExts - Extensions to include (whitelist)
594
+ * @param {Array<string>} excludeExts - Extensions to exclude (blacklist)
595
+ * @param {boolean} showFiles - Whether to show files
596
+ * @param {boolean} showHidden - Whether to show hidden files/folders
597
+ * @param {boolean} showSizes - Whether to show file sizes
598
+ * @returns {Promise<Object>} Tree node
599
+ * @private
600
+ */
601
+ async buildTree(
602
+ basePath,
603
+ currentPath,
604
+ currentDepth,
605
+ maxDepth,
606
+ ignoreDirs,
607
+ includeExts,
608
+ excludeExts,
609
+ showFiles,
610
+ showHidden,
611
+ showSizes
612
+ ) {
613
+ // Check depth limit
614
+ if (currentDepth > maxDepth) {
615
+ return null;
616
+ }
617
+
618
+ // Check directory count limit
619
+ if (this.stats.directoriesCount >= this.treeConfig.MAX_DIRECTORIES) {
620
+ this.logger?.warn('Maximum directory count reached', {
621
+ maxDirectories: this.treeConfig.MAX_DIRECTORIES
622
+ });
623
+ return null;
624
+ }
625
+
626
+ try {
627
+ const entries = await fs.readdir(currentPath, { withFileTypes: true });
628
+
629
+ const node = {
630
+ name: currentDepth === 0 ? path.basename(currentPath) + '/' : path.basename(currentPath),
631
+ path: path.relative(basePath, currentPath),
632
+ type: 'directory',
633
+ children: []
634
+ };
635
+
636
+ this.stats.directoriesCount++;
637
+
638
+ for (const entry of entries) {
639
+ // Check file count limit
640
+ if (this.stats.filesCount >= this.treeConfig.MAX_FILES_IN_TREE) {
641
+ this.logger?.warn('Maximum file count reached', {
642
+ maxFiles: this.treeConfig.MAX_FILES_IN_TREE
643
+ });
644
+ break;
645
+ }
646
+
647
+ // Skip hidden files/folders if not showing hidden
648
+ if (!showHidden && entry.name.startsWith('.')) {
649
+ this.stats.skippedCount++;
650
+ continue;
651
+ }
652
+
653
+ const entryPath = path.join(currentPath, entry.name);
654
+
655
+ if (entry.isDirectory()) {
656
+ // Skip ignored directories
657
+ if (ignoreDirs.includes(entry.name)) {
658
+ this.stats.skippedCount++;
659
+ continue;
660
+ }
661
+
662
+ // Recursively build subtree
663
+ const subTree = await this.buildTree(
664
+ basePath,
665
+ entryPath,
666
+ currentDepth + 1,
667
+ maxDepth,
668
+ ignoreDirs,
669
+ includeExts,
670
+ excludeExts,
671
+ showFiles,
672
+ showHidden,
673
+ showSizes
674
+ );
675
+
676
+ if (subTree && (subTree.children.length > 0 || currentDepth === 0)) {
677
+ node.children.push(subTree);
678
+ }
679
+ } else if (entry.isFile() && showFiles) {
680
+ // Files are children of current directory, so they're at currentDepth + 1
681
+ // Don't show files if they would exceed maxDepth
682
+ if (currentDepth + 1 > maxDepth) {
683
+ continue;
684
+ }
685
+
686
+ const ext = path.extname(entry.name);
687
+
688
+ // WHITELIST: If includeExtensions is specified, ONLY include those
689
+ if (includeExts.length > 0) {
690
+ if (!includeExts.includes(ext)) {
691
+ this.stats.skippedCount++;
692
+ continue;
693
+ }
694
+ }
695
+ // BLACKLIST: Otherwise, exclude based on excludeExtensions
696
+ else if (excludeExts.includes(ext)) {
697
+ this.stats.skippedCount++;
698
+ continue;
699
+ }
700
+
701
+ // Get file size if requested
702
+ let sizeInfo = '';
703
+ if (showSizes) {
704
+ try {
705
+ const stats = await fs.stat(entryPath);
706
+ sizeInfo = ` (${this.formatFileSize(stats.size)})`;
707
+ } catch (error) {
708
+ // Ignore size errors
709
+ }
710
+ }
711
+
712
+ node.children.push({
713
+ name: entry.name + sizeInfo,
714
+ path: path.relative(basePath, entryPath),
715
+ type: 'file',
716
+ ext
717
+ });
718
+
719
+ this.stats.filesCount++;
720
+ }
721
+ }
722
+
723
+ // Sort children: directories first, then files, both alphabetically
724
+ node.children.sort((a, b) => {
725
+ if (a.type === b.type) {
726
+ return a.name.localeCompare(b.name);
727
+ }
728
+ return a.type === 'directory' ? -1 : 1;
729
+ });
730
+
731
+ return node;
732
+
733
+ } catch (error) {
734
+ this.logger?.error('Error building tree', {
735
+ currentPath,
736
+ error: error.message
737
+ });
738
+ return {
739
+ name: path.basename(currentPath),
740
+ path: path.relative(basePath, currentPath),
741
+ type: 'directory',
742
+ error: error.message,
743
+ children: []
744
+ };
745
+ }
746
+ }
747
+
748
+ /**
749
+ * Format tree as ASCII string
750
+ * @param {Object} node - Tree node
751
+ * @param {string} prefix - Prefix for current line
752
+ * @param {boolean} isLast - Whether this is the last child
753
+ * @param {boolean} isRoot - Whether this is the root node
754
+ * @returns {string} Formatted tree string
755
+ * @private
756
+ */
757
+ formatTree(node, prefix = '', isLast = true, isRoot = true) {
758
+ if (!node) return '';
759
+
760
+ const symbols = this.treeConfig.SYMBOLS;
761
+ let result = '';
762
+
763
+ // Root node special case
764
+ if (isRoot) {
765
+ result = `${node.name}\n`;
766
+ } else {
767
+ result = `${prefix}${isLast ? symbols.LAST_BRANCH : symbols.BRANCH}${node.name}\n`;
768
+ }
769
+
770
+ // Add children
771
+ if (node.children && node.children.length > 0) {
772
+ const childPrefix = isRoot ? '' : prefix + (isLast ? symbols.INDENT : symbols.VERTICAL);
773
+
774
+ node.children.forEach((child, index) => {
775
+ const isLastChild = index === node.children.length - 1;
776
+ result += this.formatTree(child, childPrefix, isLastChild, false);
777
+ });
778
+ }
779
+
780
+ return result;
781
+ }
782
+
783
+ /**
784
+ * Format file size in human-readable format
785
+ * @param {number} bytes - File size in bytes
786
+ * @returns {string} Formatted size
787
+ * @private
788
+ */
789
+ formatFileSize(bytes) {
790
+ const KB = 1024;
791
+ const MB = KB * 1024;
792
+ const GB = MB * 1024;
793
+
794
+ if (bytes >= GB) {
795
+ return `${(bytes / GB).toFixed(2)} GB`;
796
+ } else if (bytes >= MB) {
797
+ return `${(bytes / MB).toFixed(2)} MB`;
798
+ } else if (bytes >= KB) {
799
+ return `${(bytes / KB).toFixed(2)} KB`;
800
+ } else {
801
+ return `${bytes} B`;
802
+ }
803
+ }
804
+
805
+ /**
806
+ * Generate summary text
807
+ * @param {string} directory - Directory scanned
808
+ * @param {Object} stats - Statistics object
809
+ * @param {number} maxDepth - Maximum depth used
810
+ * @returns {string} Summary text
811
+ * @private
812
+ */
813
+ generateSummary(directory, stats, maxDepth) {
814
+ return `
815
+ Directory: ${directory}
816
+ Max Depth: ${maxDepth}
817
+ Files: ${stats.filesCount}
818
+ Directories: ${stats.directoriesCount}
819
+ Skipped: ${stats.skippedCount}
820
+ `.trim();
821
+ }
822
+
823
+ /**
824
+ * Resource cleanup
825
+ * @param {string} operationId - Operation identifier
826
+ */
827
+ async cleanup(operationId) {
828
+ // No persistent resources to clean up
829
+ this.logger?.info('File tree tool cleanup completed', { operationId });
830
+ }
831
+ }
832
+
833
+ export default FileTreeTool;