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,413 @@
1
+ /**
2
+ * File Explorer Controller
3
+ * Handles all file system operations for the file explorer module
4
+ */
5
+
6
+ import { promises as fs } from 'fs';
7
+ import { exec } from 'child_process';
8
+ import path from 'path';
9
+ import os from 'os';
10
+
11
+ class FileExplorerController {
12
+ constructor(config = {}) {
13
+ this.config = {
14
+ showHidden: false,
15
+ allowedExtensions: [], // Empty array = all extensions allowed
16
+ maxDepth: 50, // Prevent infinite directory traversal
17
+ restrictedPaths: [], // Paths that cannot be accessed
18
+ ...config
19
+ };
20
+ }
21
+
22
+ /**
23
+ * Get file/directory stats safely
24
+ * @param {string} filePath - Path to check
25
+ * @returns {Promise<{stats: fs.Stats | null, error?: string}>}
26
+ */
27
+ async getFileStats(filePath) {
28
+ try {
29
+ const stats = await fs.stat(filePath);
30
+ return { stats };
31
+ } catch (error) {
32
+ return {
33
+ stats: null,
34
+ error: error instanceof Error ? error.message : 'Unknown error'
35
+ };
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Check if path is safe and accessible
41
+ * @param {string} requestedPath - Path to validate
42
+ * @returns {boolean}
43
+ */
44
+ isSafePath(requestedPath) {
45
+ try {
46
+ const resolvedPath = path.resolve(requestedPath);
47
+
48
+ // Check if path is in restricted list
49
+ if (this.config.restrictedPaths.some(restricted =>
50
+ resolvedPath.startsWith(path.resolve(restricted))
51
+ )) {
52
+ return false;
53
+ }
54
+
55
+ return true;
56
+ } catch (error) {
57
+ return false;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Filter items based on configuration
63
+ * @param {string} itemName - Item name to check
64
+ * @param {fs.Stats} stats - File stats
65
+ * @returns {boolean}
66
+ */
67
+ shouldIncludeItem(itemName, stats) {
68
+ // Check hidden files
69
+ if (!this.config.showHidden && itemName.startsWith('.')) {
70
+ return false;
71
+ }
72
+
73
+ // Check file extensions (only for files)
74
+ if (stats.isFile() && this.config.allowedExtensions.length > 0) {
75
+ const ext = path.extname(itemName).toLowerCase();
76
+ if (!this.config.allowedExtensions.includes(ext)) {
77
+ return false;
78
+ }
79
+ }
80
+
81
+ return true;
82
+ }
83
+
84
+ /**
85
+ * Browse directory contents
86
+ * @param {string} requestedPath - Directory path to browse
87
+ * @param {Object} options - Browse options
88
+ * @returns {Promise<{success: boolean, data?: BrowseResponse, error?: string}>}
89
+ */
90
+ async browseDirectory(requestedPath = process.cwd(), options = {}) {
91
+ try {
92
+ const normalizedPath = path.resolve(requestedPath);
93
+
94
+ // Security checks
95
+ if (!this.isSafePath(normalizedPath)) {
96
+ return {
97
+ success: false,
98
+ error: 'Access to this path is restricted'
99
+ };
100
+ }
101
+
102
+ // Check if path exists and is directory
103
+ const { stats, error } = await this.getFileStats(normalizedPath);
104
+ if (error || !stats) {
105
+ return {
106
+ success: false,
107
+ error: 'Path not found or inaccessible'
108
+ };
109
+ }
110
+
111
+ if (!stats.isDirectory()) {
112
+ return {
113
+ success: false,
114
+ error: 'Path is not a directory'
115
+ };
116
+ }
117
+
118
+ // Read directory contents
119
+ const items = await fs.readdir(normalizedPath);
120
+ const fileItems = [];
121
+
122
+ // Process each item
123
+ for (const item of items) {
124
+ const itemPath = path.join(normalizedPath, item);
125
+ const { stats: itemStats } = await this.getFileStats(itemPath);
126
+
127
+ if (itemStats && this.shouldIncludeItem(item, itemStats)) {
128
+ const fileItem = {
129
+ name: item,
130
+ path: itemPath,
131
+ type: itemStats.isDirectory() ? 'directory' : 'file',
132
+ size: itemStats.isFile() ? itemStats.size : undefined,
133
+ lastModified: itemStats.mtime,
134
+ extension: itemStats.isFile() ? path.extname(item).toLowerCase() : undefined
135
+ };
136
+ fileItems.push(fileItem);
137
+ }
138
+ }
139
+
140
+ // Sort: directories first, then files, both alphabetically
141
+ fileItems.sort((a, b) => {
142
+ if (a.type === b.type) {
143
+ return a.name.localeCompare(b.name);
144
+ }
145
+ return a.type === 'directory' ? -1 : 1;
146
+ });
147
+
148
+ // Calculate parent path
149
+ const parentPath = path.dirname(normalizedPath);
150
+ const hasParent = parentPath !== normalizedPath;
151
+
152
+ return {
153
+ success: true,
154
+ data: {
155
+ currentPath: normalizedPath,
156
+ parentPath: hasParent ? parentPath : null,
157
+ items: fileItems,
158
+ totalItems: fileItems.length,
159
+ directories: fileItems.filter(item => item.type === 'directory').length,
160
+ files: fileItems.filter(item => item.type === 'file').length
161
+ }
162
+ };
163
+
164
+ } catch (error) {
165
+ return {
166
+ success: false,
167
+ error: error instanceof Error ? error.message : 'Server error'
168
+ };
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Get file information
174
+ * @param {string} filePath - File path to get info for
175
+ * @returns {Promise<{success: boolean, data?: FileItem, error?: string}>}
176
+ */
177
+ async getFileInfo(filePath) {
178
+ try {
179
+ if (!filePath || !this.isSafePath(filePath)) {
180
+ return {
181
+ success: false,
182
+ error: 'Invalid file path'
183
+ };
184
+ }
185
+
186
+ const { stats, error } = await this.getFileStats(filePath);
187
+ if (error || !stats) {
188
+ return {
189
+ success: false,
190
+ error: 'File not found'
191
+ };
192
+ }
193
+
194
+ const fileInfo = {
195
+ name: path.basename(filePath),
196
+ path: filePath,
197
+ type: stats.isDirectory() ? 'directory' : 'file',
198
+ size: stats.isFile() ? stats.size : undefined,
199
+ lastModified: stats.mtime,
200
+ extension: stats.isFile() ? path.extname(filePath).toLowerCase() : undefined
201
+ };
202
+
203
+ return {
204
+ success: true,
205
+ data: fileInfo
206
+ };
207
+
208
+ } catch (error) {
209
+ return {
210
+ success: false,
211
+ error: error instanceof Error ? error.message : 'Server error'
212
+ };
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Get current working directory info
218
+ * @returns {{success: boolean, data: {cwd: string, platform: string, homedir: string}}}
219
+ */
220
+ getCurrentWorkingDirectory() {
221
+ return {
222
+ success: true,
223
+ data: {
224
+ cwd: process.cwd(),
225
+ platform: process.platform,
226
+ homedir: os.homedir()
227
+ }
228
+ };
229
+ }
230
+
231
+ /**
232
+ * Create directory
233
+ * @param {string} dirPath - Directory path to create
234
+ * @param {Object} options - Creation options
235
+ * @returns {Promise<{success: boolean, data?: {path: string}, error?: string}>}
236
+ */
237
+ async createDirectory(dirPath, options = {}) {
238
+ try {
239
+ if (!this.isSafePath(dirPath)) {
240
+ return {
241
+ success: false,
242
+ error: 'Invalid directory path'
243
+ };
244
+ }
245
+
246
+ await fs.mkdir(dirPath, { recursive: options.recursive || false });
247
+
248
+ return {
249
+ success: true,
250
+ data: {
251
+ path: dirPath,
252
+ relativePath: path.relative(process.cwd(), dirPath)
253
+ }
254
+ };
255
+
256
+ } catch (error) {
257
+ return {
258
+ success: false,
259
+ error: error instanceof Error ? error.message : 'Failed to create directory',
260
+ code: error.code
261
+ };
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Open directory in system's default file explorer
267
+ * @param {string} dirPath - Directory path to open
268
+ * @returns {Promise<{success: boolean, error?: string}>}
269
+ */
270
+ async openInExplorer(dirPath) {
271
+ try {
272
+ const normalizedPath = path.resolve(dirPath);
273
+
274
+ // Security check
275
+ if (!this.isSafePath(normalizedPath)) {
276
+ return {
277
+ success: false,
278
+ error: 'Access to this path is restricted'
279
+ };
280
+ }
281
+
282
+ // Check if path exists, create if it doesn't
283
+ const { stats, error } = await this.getFileStats(normalizedPath);
284
+ if (error || !stats) {
285
+ // Try to create the directory
286
+ try {
287
+ await fs.mkdir(normalizedPath, { recursive: true });
288
+ } catch (mkdirError) {
289
+ return {
290
+ success: false,
291
+ error: `Directory does not exist and could not be created: ${mkdirError.message}`
292
+ };
293
+ }
294
+ }
295
+
296
+ // Determine the correct command based on platform
297
+ const platform = os.platform();
298
+ let command;
299
+
300
+ if (platform === 'win32') {
301
+ command = `explorer "${normalizedPath}"`;
302
+ } else if (platform === 'darwin') {
303
+ command = `open "${normalizedPath}"`;
304
+ } else {
305
+ // Linux and other Unix-like systems
306
+ command = `xdg-open "${normalizedPath}"`;
307
+ }
308
+
309
+ return new Promise((resolve) => {
310
+ exec(command, (error) => {
311
+ if (error) {
312
+ // On Windows, explorer returns exit code 1 even on success
313
+ if (platform === 'win32') {
314
+ resolve({ success: true });
315
+ } else {
316
+ resolve({ success: false, error: error.message });
317
+ }
318
+ } else {
319
+ resolve({ success: true });
320
+ }
321
+ });
322
+ });
323
+
324
+ } catch (error) {
325
+ return {
326
+ success: false,
327
+ error: error instanceof Error ? error.message : 'Failed to open directory'
328
+ };
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Get quick access paths for common folders (OS-aware)
334
+ * @returns {{success: boolean, data: {platform: string, paths: Object}}}
335
+ */
336
+ getQuickAccessPaths() {
337
+ const home = os.homedir();
338
+ const platform = os.platform();
339
+
340
+ // Common folders that exist on all major platforms
341
+ const paths = {
342
+ home: {
343
+ path: home,
344
+ label: 'Home',
345
+ icon: 'home'
346
+ },
347
+ desktop: {
348
+ path: path.join(home, 'Desktop'),
349
+ label: 'Desktop',
350
+ icon: 'desktop'
351
+ },
352
+ documents: {
353
+ path: path.join(home, 'Documents'),
354
+ label: 'Documents',
355
+ icon: 'document'
356
+ },
357
+ downloads: {
358
+ path: path.join(home, 'Downloads'),
359
+ label: 'Downloads',
360
+ icon: 'download'
361
+ }
362
+ };
363
+
364
+ // Add platform-specific paths
365
+ if (platform === 'win32') {
366
+ // Windows-specific drives
367
+ paths.cDrive = {
368
+ path: 'C:\\',
369
+ label: 'C:',
370
+ icon: 'drive'
371
+ };
372
+ } else if (platform === 'darwin') {
373
+ // macOS-specific
374
+ paths.applications = {
375
+ path: '/Applications',
376
+ label: 'Applications',
377
+ icon: 'folder'
378
+ };
379
+ } else {
380
+ // Linux - add root
381
+ paths.root = {
382
+ path: '/',
383
+ label: 'Root',
384
+ icon: 'drive'
385
+ };
386
+ }
387
+
388
+ return {
389
+ success: true,
390
+ data: {
391
+ platform,
392
+ paths
393
+ }
394
+ };
395
+ }
396
+
397
+ /**
398
+ * Health check
399
+ * @returns {{success: boolean, data: {status: string, timestamp: string}}}
400
+ */
401
+ healthCheck() {
402
+ return {
403
+ success: true,
404
+ data: {
405
+ status: 'healthy',
406
+ timestamp: new Date().toISOString(),
407
+ module: 'fileExplorer'
408
+ }
409
+ };
410
+ }
411
+ }
412
+
413
+ export default FileExplorerController;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * File Explorer Module
3
+ * Main entry point for the file explorer functionality
4
+ */
5
+
6
+ import { createFileExplorerRouter, defaultConfig } from './routes.js';
7
+ import FileExplorerController from './controller.js';
8
+
9
+ /**
10
+ * Initialize file explorer module
11
+ * @param {Object} config - Configuration options
12
+ * @returns {Object} Module interface
13
+ */
14
+ export function initFileExplorerModule(config = {}) {
15
+ const mergedConfig = { ...defaultConfig, ...config };
16
+ const router = createFileExplorerRouter(mergedConfig);
17
+ const controller = new FileExplorerController(mergedConfig);
18
+
19
+ return {
20
+ router,
21
+ controller,
22
+ config: mergedConfig
23
+ };
24
+ }
25
+
26
+ // Export individual components for advanced usage
27
+ export { default as FileExplorerController } from './controller.js';
28
+ export { createFileExplorerRouter, defaultConfig } from './routes.js';
29
+ export * from './middleware.js';
30
+
31
+ // Default export
32
+ export default {
33
+ init: initFileExplorerModule,
34
+ Controller: FileExplorerController,
35
+ createRouter: createFileExplorerRouter,
36
+ defaultConfig
37
+ };
@@ -0,0 +1,92 @@
1
+ /**
2
+ * File Explorer Middleware
3
+ * Contains middleware functions specific to file explorer operations
4
+ */
5
+
6
+ /**
7
+ * Validate path parameter middleware
8
+ * @param {import('express').Request} req
9
+ * @param {import('express').Response} res
10
+ * @param {import('express').NextFunction} next
11
+ */
12
+ export function validatePath(req, res, next) {
13
+ const { path } = req.query;
14
+
15
+ if (path && typeof path !== 'string') {
16
+ return res.status(400).json({
17
+ success: false,
18
+ error: 'Path parameter must be a string'
19
+ });
20
+ }
21
+
22
+ next();
23
+ }
24
+
25
+ /**
26
+ * Rate limiting middleware for file operations
27
+ * Prevents excessive file system requests
28
+ * @param {number} maxRequests - Max requests per window
29
+ * @param {number} windowMs - Time window in milliseconds
30
+ */
31
+ export function createRateLimit(maxRequests = 100, windowMs = 60000) {
32
+ const requests = new Map();
33
+
34
+ return (req, res, next) => {
35
+ const clientIp = req.ip || req.connection.remoteAddress || 'unknown';
36
+ const now = Date.now();
37
+ const windowStart = now - windowMs;
38
+
39
+ // Get or create request history for this IP
40
+ if (!requests.has(clientIp)) {
41
+ requests.set(clientIp, []);
42
+ }
43
+
44
+ const clientRequests = requests.get(clientIp);
45
+
46
+ // Remove old requests outside the window
47
+ const validRequests = clientRequests.filter(timestamp => timestamp > windowStart);
48
+ requests.set(clientIp, validRequests);
49
+
50
+ // Check if limit exceeded
51
+ if (validRequests.length >= maxRequests) {
52
+ return res.status(429).json({
53
+ success: false,
54
+ error: 'Too many requests',
55
+ retryAfter: Math.ceil(windowMs / 1000)
56
+ });
57
+ }
58
+
59
+ // Add current request
60
+ validRequests.push(now);
61
+
62
+ next();
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Security headers middleware for file explorer
68
+ */
69
+ export function securityHeaders(req, res, next) {
70
+ // Prevent caching of file system data
71
+ res.set({
72
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
73
+ 'Pragma': 'no-cache',
74
+ 'Expires': '0'
75
+ });
76
+
77
+ next();
78
+ }
79
+
80
+ /**
81
+ * Request logging middleware for file explorer
82
+ */
83
+ export function requestLogger(req, res, next) {
84
+ const start = Date.now();
85
+
86
+ res.on('finish', () => {
87
+ const duration = Date.now() - start;
88
+ console.log(`[FileExplorer] ${req.method} ${req.originalUrl} - ${res.statusCode} (${duration}ms)`);
89
+ });
90
+
91
+ next();
92
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * File Explorer Routes
3
+ * Defines all API endpoints for file system operations
4
+ */
5
+
6
+ import express from 'express';
7
+ import FileExplorerController from './controller.js';
8
+ import { validatePath, createRateLimit, securityHeaders, requestLogger } from './middleware.js';
9
+
10
+ /**
11
+ * Create file explorer router with all endpoints
12
+ * @param {Object} config - Configuration options for the file explorer
13
+ * @returns {express.Router} Configured express router
14
+ */
15
+ export function createFileExplorerRouter(config = {}) {
16
+ const router = express.Router();
17
+ const controller = new FileExplorerController(config);
18
+
19
+ // Apply middleware to all routes
20
+ router.use(requestLogger);
21
+ router.use(securityHeaders);
22
+ router.use(createRateLimit(100, 60000)); // 100 requests per minute
23
+
24
+ // Health check endpoint
25
+ router.get('/health', (req, res) => {
26
+ const result = controller.healthCheck();
27
+ res.json(result);
28
+ });
29
+
30
+ // Get current working directory
31
+ router.get('/cwd', (req, res) => {
32
+ const result = controller.getCurrentWorkingDirectory();
33
+ res.json(result);
34
+ });
35
+
36
+ // Get quick access paths (OS-aware common folders)
37
+ router.get('/quick-access', (req, res) => {
38
+ const result = controller.getQuickAccessPaths();
39
+ res.json(result);
40
+ });
41
+
42
+ // Browse directory contents
43
+ router.get('/browse', validatePath, async (req, res) => {
44
+ try {
45
+ const requestedPath = req.query.path;
46
+ const options = {
47
+ showHidden: req.query.showHidden === 'true'
48
+ };
49
+
50
+ const result = await controller.browseDirectory(requestedPath, options);
51
+
52
+ if (result.success) {
53
+ res.json(result);
54
+ } else {
55
+ const statusCode = result.error.includes('restricted') ? 403 :
56
+ result.error.includes('not found') ? 404 : 400;
57
+ res.status(statusCode).json(result);
58
+ }
59
+ } catch (error) {
60
+ res.status(500).json({
61
+ success: false,
62
+ error: 'Internal server error'
63
+ });
64
+ }
65
+ });
66
+
67
+ // Get file information
68
+ router.get('/file-info', validatePath, async (req, res) => {
69
+ try {
70
+ const filePath = req.query.path;
71
+ const result = await controller.getFileInfo(filePath);
72
+
73
+ if (result.success) {
74
+ res.json(result);
75
+ } else {
76
+ const statusCode = result.error.includes('not found') ? 404 : 400;
77
+ res.status(statusCode).json(result);
78
+ }
79
+ } catch (error) {
80
+ res.status(500).json({
81
+ success: false,
82
+ error: 'Internal server error'
83
+ });
84
+ }
85
+ });
86
+
87
+ // Create directory
88
+ router.post('/mkdir', express.json(), async (req, res) => {
89
+ try {
90
+ const { path: dirPath, recursive = false } = req.body;
91
+
92
+ if (!dirPath) {
93
+ return res.status(400).json({
94
+ success: false,
95
+ error: 'Directory path is required'
96
+ });
97
+ }
98
+
99
+ const result = await controller.createDirectory(dirPath, { recursive });
100
+
101
+ if (result.success) {
102
+ res.json(result);
103
+ } else {
104
+ const statusCode = result.code === 'EEXIST' ? 409 : 400;
105
+ res.status(statusCode).json(result);
106
+ }
107
+ } catch (error) {
108
+ res.status(500).json({
109
+ success: false,
110
+ error: 'Internal server error'
111
+ });
112
+ }
113
+ });
114
+
115
+ // Open directory in system file explorer
116
+ router.post('/open', express.json(), async (req, res) => {
117
+ try {
118
+ const { path: dirPath } = req.body;
119
+
120
+ if (!dirPath) {
121
+ return res.status(400).json({
122
+ success: false,
123
+ error: 'Directory path is required'
124
+ });
125
+ }
126
+
127
+ const result = await controller.openInExplorer(dirPath);
128
+
129
+ if (result.success) {
130
+ res.json(result);
131
+ } else {
132
+ res.status(400).json(result);
133
+ }
134
+ } catch (error) {
135
+ res.status(500).json({
136
+ success: false,
137
+ error: 'Internal server error'
138
+ });
139
+ }
140
+ });
141
+
142
+ return router;
143
+ }
144
+
145
+ /**
146
+ * Default configuration for file explorer
147
+ */
148
+ export const defaultConfig = {
149
+ showHidden: false,
150
+ allowedExtensions: [], // Empty = all extensions
151
+ maxDepth: 50,
152
+ restrictedPaths: [
153
+ // Add system paths that should be restricted
154
+ // Example: '/etc', '/var', '/usr/bin'
155
+ ]
156
+ };
157
+
158
+ export default createFileExplorerRouter;