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,630 @@
1
+ /**
2
+ * Browser Stealth Utility
3
+ *
4
+ * Provides a stealthy Puppeteer browser instance with anti-detection measures.
5
+ * Uses puppeteer-extra with stealth plugin for fingerprint evasion.
6
+ */
7
+
8
+ import puppeteer from 'puppeteer-extra';
9
+ import StealthPlugin from 'puppeteer-extra-plugin-stealth';
10
+ import {
11
+ BROWSER_CONFIG,
12
+ USER_AGENTS,
13
+ STEALTH_EVASIONS,
14
+ STEALTH_LEVELS,
15
+ DEFAULT_STEALTH_LEVEL
16
+ } from './stealthConstants.js';
17
+ import { getPlatform } from './platformUtils.js';
18
+
19
+ // Track if stealth plugin has been configured
20
+ let stealthPluginConfigured = false;
21
+
22
+ /**
23
+ * Configure and apply stealth plugin with all evasions enabled
24
+ * @param {Object} options - Configuration options
25
+ * @param {string[]} options.excludeEvasions - Evasions to exclude
26
+ * @returns {void}
27
+ */
28
+ function configureStealthPlugin(options = {}) {
29
+ // Only configure once (puppeteer-extra plugins are singletons)
30
+ if (stealthPluginConfigured) return;
31
+
32
+ const { excludeEvasions = STEALTH_EVASIONS.EXCLUDE } = options;
33
+
34
+ const stealth = StealthPlugin();
35
+
36
+ // Ensure ALL evasions are enabled for maximum stealth
37
+ const allEvasions = new Set([
38
+ 'chrome.app',
39
+ 'chrome.csi',
40
+ 'chrome.loadTimes',
41
+ 'chrome.runtime',
42
+ 'defaultArgs',
43
+ 'iframe.contentWindow',
44
+ 'media.codecs',
45
+ 'navigator.hardwareConcurrency',
46
+ 'navigator.languages',
47
+ 'navigator.permissions',
48
+ 'navigator.plugins',
49
+ 'navigator.webdriver',
50
+ 'sourceurl',
51
+ 'user-agent-override',
52
+ 'webgl.vendor',
53
+ 'window.outerdimensions'
54
+ ]);
55
+
56
+ stealth.enabledEvasions = allEvasions;
57
+
58
+ // Remove any excluded evasions
59
+ if (excludeEvasions && excludeEvasions.length > 0) {
60
+ excludeEvasions.forEach(evasion => {
61
+ stealth.enabledEvasions.delete(evasion);
62
+ });
63
+ }
64
+
65
+ puppeteer.use(stealth);
66
+ stealthPluginConfigured = true;
67
+ }
68
+
69
+ /**
70
+ * Get a random user agent string based on current platform
71
+ * @param {string} [forcePlatform] - Force specific platform (windows, macos, linux)
72
+ * @returns {string} Random user agent string
73
+ */
74
+ export function getRandomUserAgent(forcePlatform = null) {
75
+ const platform = forcePlatform || getPlatform();
76
+
77
+ let agents;
78
+ switch (platform) {
79
+ case 'darwin':
80
+ case 'macos':
81
+ agents = USER_AGENTS.MACOS;
82
+ break;
83
+ case 'linux':
84
+ agents = USER_AGENTS.LINUX;
85
+ break;
86
+ case 'win32':
87
+ case 'windows':
88
+ default:
89
+ agents = USER_AGENTS.WINDOWS;
90
+ break;
91
+ }
92
+
93
+ return agents[Math.floor(Math.random() * agents.length)];
94
+ }
95
+
96
+ /**
97
+ * Get a random viewport configuration
98
+ * @returns {Object} Viewport configuration { width, height }
99
+ */
100
+ export function getRandomViewport() {
101
+ const viewports = BROWSER_CONFIG.VIEWPORT_VARIANTS;
102
+ return viewports[Math.floor(Math.random() * viewports.length)];
103
+ }
104
+
105
+ /**
106
+ * Generate browser launch arguments for stealth mode
107
+ * @param {Object} options - Configuration options
108
+ * @param {string} options.userAgent - User agent to use (random if not specified)
109
+ * @param {boolean} options.headless - Whether to run headless
110
+ * @returns {string[]} Array of Chrome launch arguments
111
+ */
112
+ export function getStealthLaunchArgs(options = {}) {
113
+ const { userAgent = getRandomUserAgent(), headless = true } = options;
114
+
115
+ const args = [
116
+ // Sandbox settings (required for some environments)
117
+ '--no-sandbox',
118
+ '--disable-setuid-sandbox',
119
+
120
+ // Performance optimizations
121
+ '--disable-dev-shm-usage',
122
+
123
+ // CRITICAL: Disable automation detection flags
124
+ '--disable-blink-features=AutomationControlled',
125
+
126
+ // Disable infobars ("Chrome is being controlled by automated software")
127
+ '--disable-infobars',
128
+
129
+ // Disable extensions (but not in a detectable way)
130
+ '--disable-extensions',
131
+
132
+ // Set user agent
133
+ `--user-agent=${userAgent}`,
134
+
135
+ // Disable automation extension
136
+ '--disable-component-extensions-with-background-pages',
137
+
138
+ // Window size (matches viewport for consistency)
139
+ '--window-size=1920,1080',
140
+
141
+ // Additional anti-detection
142
+ '--disable-background-networking',
143
+ '--disable-default-apps',
144
+ '--disable-sync',
145
+ '--disable-translate',
146
+ '--metrics-recording-only',
147
+ '--no-first-run',
148
+
149
+ // REMOVED: --use-gl=swiftshader (MAJOR DETECTION VECTOR - SwiftShader is bot indicator)
150
+ // REMOVED: --disable-accelerated-2d-canvas (suspicious flag)
151
+ // REMOVED: --disable-software-rasterizer (contradicts and is detectable)
152
+
153
+ // Enable hardware acceleration for realistic fingerprint
154
+ '--enable-webgl',
155
+ '--enable-accelerated-2d-canvas',
156
+
157
+ // Disable features that leak automation
158
+ '--disable-hang-monitor',
159
+ '--disable-ipc-flooding-protection',
160
+ '--disable-popup-blocking',
161
+ '--disable-prompt-on-repost',
162
+ '--disable-renderer-backgrounding',
163
+ '--disable-backgrounding-occluded-windows',
164
+
165
+ // Privacy-related (appear more like real user)
166
+ '--disable-client-side-phishing-detection',
167
+
168
+ // Prevent WebRTC IP leak
169
+ '--disable-webrtc-hw-encoding',
170
+ '--disable-webrtc-hw-decoding',
171
+ '--enforce-webrtc-ip-permission-check'
172
+ ];
173
+
174
+ // Only disable GPU in headless mode (detection vector otherwise)
175
+ if (headless) {
176
+ args.push('--disable-gpu');
177
+ }
178
+
179
+ return args;
180
+ }
181
+
182
+ /**
183
+ * Create a stealthy browser instance
184
+ * @param {Object} options - Browser options
185
+ * @param {string} options.stealthLevel - Stealth level: 'standard' or 'maximum' (default: 'standard')
186
+ * @param {boolean} options.headless - Override headless mode (uses stealthLevel if not specified)
187
+ * @param {string} options.userAgent - Specific user agent (random if not specified)
188
+ * @param {Object} options.viewport - Viewport dimensions (random if not specified)
189
+ * @param {string[]} options.excludeEvasions - Stealth evasions to exclude
190
+ * @param {Object} options.logger - Logger instance
191
+ * @returns {Promise<Browser>} Puppeteer browser instance
192
+ */
193
+ export async function createStealthBrowser(options = {}) {
194
+ const {
195
+ stealthLevel = DEFAULT_STEALTH_LEVEL,
196
+ headless,
197
+ userAgent = getRandomUserAgent(),
198
+ viewport = getRandomViewport(),
199
+ excludeEvasions = []
200
+ } = options;
201
+
202
+ // Ensure logger is valid (null doesn't trigger default in destructuring)
203
+ const logger = options.logger || console;
204
+
205
+ // Resolve stealth level configuration
206
+ const levelConfig = STEALTH_LEVELS[stealthLevel.toUpperCase()] || STEALTH_LEVELS.STANDARD;
207
+
208
+ // headless parameter overrides stealthLevel if explicitly provided
209
+ const useHeadless = headless !== undefined ? headless : levelConfig.headless;
210
+ const isHeadless = useHeadless === true || useHeadless === 'new';
211
+
212
+ // Configure stealth plugin (only needs to be done once)
213
+ configureStealthPlugin({ excludeEvasions });
214
+
215
+ logger.info?.('[BrowserStealth] Creating stealth browser', {
216
+ stealthLevel,
217
+ headless: useHeadless,
218
+ viewport,
219
+ userAgentPrefix: userAgent.substring(0, 50) + '...'
220
+ });
221
+
222
+ const browser = await puppeteer.launch({
223
+ headless: useHeadless === true ? 'new' : useHeadless,
224
+ args: getStealthLaunchArgs({ userAgent, headless: isHeadless }),
225
+ ignoreDefaultArgs: ['--enable-automation'],
226
+ defaultViewport: {
227
+ width: viewport.width,
228
+ height: viewport.height
229
+ }
230
+ });
231
+
232
+ // Store configuration on browser instance for reference
233
+ browser._stealthConfig = {
234
+ stealthLevel,
235
+ headless: useHeadless,
236
+ userAgent,
237
+ viewport,
238
+ createdAt: Date.now()
239
+ };
240
+
241
+ logger.info?.('[BrowserStealth] Stealth browser created successfully', {
242
+ stealthLevel,
243
+ headless: useHeadless
244
+ });
245
+
246
+ return browser;
247
+ }
248
+
249
+ /**
250
+ * Create a new page with stealth enhancements
251
+ * @param {Browser} browser - Puppeteer browser instance
252
+ * @param {Object} options - Page options
253
+ * @param {string} options.userAgent - Override user agent for this page
254
+ * @param {Object} options.viewport - Override viewport for this page
255
+ * @param {Object} options.logger - Logger instance
256
+ * @returns {Promise<Page>} Puppeteer page instance
257
+ */
258
+ export async function createStealthPage(browser, options = {}) {
259
+ const {
260
+ userAgent = browser._stealthConfig?.userAgent || getRandomUserAgent(),
261
+ viewport = browser._stealthConfig?.viewport || getRandomViewport(),
262
+ maxRetries = 3
263
+ } = options;
264
+
265
+ // Ensure logger is valid (null doesn't trigger default in destructuring)
266
+ const logger = options.logger || console;
267
+
268
+ let page;
269
+ let lastError;
270
+
271
+ // Retry page creation to handle race conditions with stealth plugin
272
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
273
+ try {
274
+ page = await browser.newPage();
275
+
276
+ // Give stealth plugin more time to apply evasions
277
+ // puppeteer-extra-plugin-stealth has timing issues with newer puppeteer versions
278
+ await new Promise(resolve => setTimeout(resolve, 300));
279
+
280
+ // Wait for page to be ready (handles "Requesting main frame too early" issue)
281
+ try {
282
+ await page.waitForFunction(() => true, { timeout: 2000 });
283
+ } catch (frameError) {
284
+ // Ignore frame timing errors - page may still work
285
+ logger.warn?.('[BrowserStealth] Frame wait warning (non-fatal):', frameError.message);
286
+ }
287
+
288
+ // Verify page is still open
289
+ if (page.isClosed()) {
290
+ throw new Error('Page closed during stealth setup');
291
+ }
292
+
293
+ break; // Success
294
+ } catch (error) {
295
+ lastError = error;
296
+ const isRetryableError = error.message?.includes('Session closed') ||
297
+ error.message?.includes('Target closed') ||
298
+ error.message?.includes('Protocol error') ||
299
+ error.message?.includes('Requesting main frame too early') ||
300
+ error.message?.includes('Connection closed');
301
+
302
+ if (isRetryableError && attempt < maxRetries) {
303
+ logger.warn?.(`[BrowserStealth] Page creation failed (attempt ${attempt}/${maxRetries}), retrying...`);
304
+ await new Promise(resolve => setTimeout(resolve, 500 * attempt)); // Longer backoff
305
+ continue;
306
+ }
307
+
308
+ throw error;
309
+ }
310
+ }
311
+
312
+ if (!page) {
313
+ throw lastError || new Error('Failed to create page after retries');
314
+ }
315
+
316
+ // Configure page with error handling for race conditions
317
+ try {
318
+ // Check if page is still valid before configuring
319
+ if (page.isClosed()) {
320
+ throw new Error('Page was closed before configuration could complete');
321
+ }
322
+
323
+ // Set user agent
324
+ await page.setUserAgent(userAgent);
325
+
326
+ // Set viewport
327
+ await page.setViewport({
328
+ width: viewport.width,
329
+ height: viewport.height,
330
+ deviceScaleFactor: 1,
331
+ hasTouch: false,
332
+ isLandscape: true,
333
+ isMobile: false
334
+ });
335
+
336
+ // Set additional headers to appear more human
337
+ // IMPORTANT: Only set headers that are safe for ALL request types (navigation + XHR/fetch)
338
+ // Headers like 'Upgrade-Insecure-Requests' and 'Sec-Fetch-*' are navigation-only
339
+ // and will break CORS preflight checks on API calls if included here!
340
+ await page.setExtraHTTPHeaders({
341
+ 'Accept-Language': 'en-US,en;q=0.9'
342
+ // REMOVED: 'Upgrade-Insecure-Requests' - breaks CORS on API calls
343
+ // REMOVED: 'Sec-Fetch-*' headers - browser sets these automatically and correctly
344
+ // REMOVED: 'Accept-Encoding' - browser handles this
345
+ // REMOVED: 'Accept' - varies by request type, let browser handle it
346
+ });
347
+ } catch (configError) {
348
+ // Close page if it's still open after config error
349
+ try {
350
+ if (!page.isClosed()) await page.close();
351
+ } catch { /* ignore close error */ }
352
+
353
+ // Re-throw with context
354
+ const isTargetClosed = configError.message?.includes('Session closed') ||
355
+ configError.message?.includes('Target closed');
356
+ if (isTargetClosed) {
357
+ throw new Error('Page closed during stealth configuration. Browser may have crashed or been closed externally.');
358
+ }
359
+ throw configError;
360
+ }
361
+
362
+ // Override navigator properties that stealth might miss
363
+ await page.evaluateOnNewDocument(() => {
364
+ // Override webdriver - multiple approaches for maximum coverage
365
+ Object.defineProperty(navigator, 'webdriver', {
366
+ get: () => false, // Return false instead of undefined (more realistic)
367
+ configurable: true
368
+ });
369
+
370
+ // Also delete it if it exists
371
+ try {
372
+ delete navigator.webdriver;
373
+ } catch (e) { /* ignore */ }
374
+
375
+ // Add missing navigator.connection (NetworkInformation API) - sites check this!
376
+ if (!navigator.connection) {
377
+ Object.defineProperty(navigator, 'connection', {
378
+ get: () => ({
379
+ effectiveType: '4g',
380
+ rtt: 50,
381
+ downlink: 10,
382
+ saveData: false,
383
+ type: 'wifi',
384
+ onchange: null,
385
+ addEventListener: () => {},
386
+ removeEventListener: () => {},
387
+ dispatchEvent: () => true
388
+ }),
389
+ configurable: true
390
+ });
391
+ }
392
+
393
+ // Add navigator.deviceMemory (sites check this for fingerprinting)
394
+ if (!navigator.deviceMemory) {
395
+ Object.defineProperty(navigator, 'deviceMemory', {
396
+ get: () => 8, // 8GB - common value
397
+ configurable: true
398
+ });
399
+ }
400
+
401
+ // Add navigator.getBattery (some sites check this exists)
402
+ if (!navigator.getBattery) {
403
+ navigator.getBattery = () => Promise.resolve({
404
+ charging: true,
405
+ chargingTime: 0,
406
+ dischargingTime: Infinity,
407
+ level: 1,
408
+ addEventListener: () => {},
409
+ removeEventListener: () => {}
410
+ });
411
+ }
412
+
413
+ // Override Notification.permission (sites check this)
414
+ try {
415
+ Object.defineProperty(Notification, 'permission', {
416
+ get: () => 'default',
417
+ configurable: true
418
+ });
419
+ } catch (e) { /* ignore */ }
420
+
421
+ // Override plugins with realistic plugin array
422
+ const mockPlugins = [
423
+ {
424
+ name: 'Chrome PDF Plugin',
425
+ filename: 'internal-pdf-viewer',
426
+ description: 'Portable Document Format',
427
+ length: 1,
428
+ item: () => null,
429
+ namedItem: () => null,
430
+ [Symbol.iterator]: function* () { yield this; }
431
+ },
432
+ {
433
+ name: 'Chrome PDF Viewer',
434
+ filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
435
+ description: '',
436
+ length: 1,
437
+ item: () => null,
438
+ namedItem: () => null,
439
+ [Symbol.iterator]: function* () { yield this; }
440
+ },
441
+ {
442
+ name: 'Native Client',
443
+ filename: 'internal-nacl-plugin',
444
+ description: '',
445
+ length: 2,
446
+ item: () => null,
447
+ namedItem: () => null,
448
+ [Symbol.iterator]: function* () { yield this; }
449
+ }
450
+ ];
451
+
452
+ Object.defineProperty(navigator, 'plugins', {
453
+ get: () => {
454
+ const plugins = mockPlugins;
455
+ plugins.item = (i) => plugins[i] || null;
456
+ plugins.namedItem = (name) => plugins.find(p => p.name === name) || null;
457
+ plugins.refresh = () => {};
458
+ return plugins;
459
+ }
460
+ });
461
+
462
+ // Override mimeTypes
463
+ Object.defineProperty(navigator, 'mimeTypes', {
464
+ get: () => {
465
+ const mimeTypes = [
466
+ { type: 'application/pdf', suffixes: 'pdf', description: 'Portable Document Format' },
467
+ { type: 'application/x-google-chrome-pdf', suffixes: 'pdf', description: 'Portable Document Format' }
468
+ ];
469
+ mimeTypes.item = (i) => mimeTypes[i] || null;
470
+ mimeTypes.namedItem = (name) => mimeTypes.find(m => m.type === name) || null;
471
+ return mimeTypes;
472
+ }
473
+ });
474
+
475
+ // Override languages
476
+ Object.defineProperty(navigator, 'languages', {
477
+ get: () => ['en-US', 'en']
478
+ });
479
+
480
+ // Override permissions query
481
+ const originalQuery = window.navigator.permissions.query;
482
+ window.navigator.permissions.query = (parameters) => (
483
+ parameters.name === 'notifications' ?
484
+ Promise.resolve({ state: Notification.permission }) :
485
+ originalQuery(parameters)
486
+ );
487
+
488
+ // Enhanced WebGL vendor/renderer spoofing
489
+ const spoofWebGL = (target) => {
490
+ const getParameter = target.prototype.getParameter;
491
+ target.prototype.getParameter = function(parameter) {
492
+ // UNMASKED_VENDOR_WEBGL
493
+ if (parameter === 37445) {
494
+ return 'Intel Inc.';
495
+ }
496
+ // UNMASKED_RENDERER_WEBGL
497
+ if (parameter === 37446) {
498
+ return 'Intel Iris OpenGL Engine';
499
+ }
500
+ return getParameter.call(this, parameter);
501
+ };
502
+ };
503
+
504
+ // Apply to both WebGL contexts
505
+ if (typeof WebGLRenderingContext !== 'undefined') {
506
+ spoofWebGL(WebGLRenderingContext);
507
+ }
508
+ if (typeof WebGL2RenderingContext !== 'undefined') {
509
+ spoofWebGL(WebGL2RenderingContext);
510
+ }
511
+
512
+ // Hide automation-related properties (CDP detection)
513
+ const automationProps = [
514
+ 'cdc_adoQpoasnfa76pfcZLmcfl_Array',
515
+ 'cdc_adoQpoasnfa76pfcZLmcfl_Promise',
516
+ 'cdc_adoQpoasnfa76pfcZLmcfl_Symbol',
517
+ '__webdriver_evaluate',
518
+ '__selenium_evaluate',
519
+ '__webdriver_script_function',
520
+ '__webdriver_script_func',
521
+ '__webdriver_script_fn',
522
+ '__fxdriver_evaluate',
523
+ '__driver_unwrapped',
524
+ '__webdriver_unwrapped',
525
+ '__driver_evaluate',
526
+ '__selenium_unwrapped',
527
+ '__fxdriver_unwrapped'
528
+ ];
529
+
530
+ automationProps.forEach(prop => {
531
+ try {
532
+ delete window[prop];
533
+ } catch (e) { /* ignore */ }
534
+ });
535
+
536
+ // Override chrome runtime with more complete implementation
537
+ window.chrome = {
538
+ runtime: {
539
+ id: undefined,
540
+ onConnect: { addListener: () => {} },
541
+ onMessage: { addListener: () => {} },
542
+ sendMessage: () => {},
543
+ connect: () => ({ postMessage: () => {}, onMessage: { addListener: () => {} } })
544
+ },
545
+ loadTimes: function() {
546
+ return {
547
+ commitLoadTime: Date.now() / 1000,
548
+ connectionInfo: 'http/1.1',
549
+ finishDocumentLoadTime: Date.now() / 1000,
550
+ finishLoadTime: Date.now() / 1000,
551
+ firstPaintAfterLoadTime: 0,
552
+ firstPaintTime: Date.now() / 1000,
553
+ navigationType: 'Other',
554
+ npnNegotiatedProtocol: 'unknown',
555
+ requestTime: Date.now() / 1000,
556
+ startLoadTime: Date.now() / 1000,
557
+ wasAlternateProtocolAvailable: false,
558
+ wasFetchedViaSpdy: false,
559
+ wasNpnNegotiated: false
560
+ };
561
+ },
562
+ csi: function() {
563
+ return {
564
+ onloadT: Date.now(),
565
+ pageT: Date.now() - performance.timing.navigationStart,
566
+ startE: performance.timing.navigationStart,
567
+ tran: 15
568
+ };
569
+ },
570
+ app: {
571
+ isInstalled: false,
572
+ InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' },
573
+ RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' }
574
+ }
575
+ };
576
+
577
+ // Prevent iframe detection
578
+ try {
579
+ Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', {
580
+ get: function() {
581
+ return this._contentWindow || null;
582
+ }
583
+ });
584
+ } catch (e) { /* ignore */ }
585
+ });
586
+
587
+ // Store page configuration
588
+ page._stealthConfig = {
589
+ userAgent,
590
+ viewport,
591
+ createdAt: Date.now()
592
+ };
593
+
594
+ logger.info?.('[BrowserStealth] Stealth page created');
595
+
596
+ return page;
597
+ }
598
+
599
+ /**
600
+ * Check if a browser instance has stealth configuration
601
+ * @param {Browser} browser - Puppeteer browser instance
602
+ * @returns {boolean} True if stealth configured
603
+ */
604
+ export function isStealthBrowser(browser) {
605
+ return !!browser._stealthConfig;
606
+ }
607
+
608
+ /**
609
+ * Get stealth configuration from browser or page
610
+ * @param {Browser|Page} instance - Browser or page instance
611
+ * @returns {Object|null} Stealth configuration or null
612
+ */
613
+ export function getStealthConfig(instance) {
614
+ return instance._stealthConfig || null;
615
+ }
616
+
617
+ // Re-export stealth levels for convenience
618
+ export { STEALTH_LEVELS, DEFAULT_STEALTH_LEVEL };
619
+
620
+ export default {
621
+ createStealthBrowser,
622
+ createStealthPage,
623
+ getRandomUserAgent,
624
+ getRandomViewport,
625
+ getStealthLaunchArgs,
626
+ isStealthBrowser,
627
+ getStealthConfig,
628
+ STEALTH_LEVELS,
629
+ DEFAULT_STEALTH_LEVEL
630
+ };