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,453 @@
1
+ /**
2
+ * Human Behavior Simulation Utility
3
+ *
4
+ * Provides human-like mouse movements, typing patterns, and action delays
5
+ * to make browser automation less detectable by anti-bot systems.
6
+ */
7
+
8
+ import { createCursor } from 'ghost-cursor';
9
+ import {
10
+ TYPING_CONFIG,
11
+ MOUSE_CONFIG,
12
+ ACTION_DELAYS
13
+ } from './stealthConstants.js';
14
+
15
+ /**
16
+ * Generate a random number within a range
17
+ * @param {number} min - Minimum value
18
+ * @param {number} max - Maximum value
19
+ * @returns {number} Random number between min and max
20
+ */
21
+ function randomInRange(min, max) {
22
+ return Math.floor(Math.random() * (max - min + 1)) + min;
23
+ }
24
+
25
+ /**
26
+ * Sleep for a specified duration
27
+ * @param {number} ms - Milliseconds to sleep
28
+ * @returns {Promise<void>}
29
+ */
30
+ function sleep(ms) {
31
+ return new Promise(resolve => setTimeout(resolve, ms));
32
+ }
33
+
34
+ /**
35
+ * Create a human-like cursor controller for a page
36
+ * @param {Page} page - Puppeteer page instance
37
+ * @param {Object} options - Cursor options
38
+ * @returns {Object} Ghost cursor instance with enhanced methods
39
+ */
40
+ export function createHumanCursor(page, options = {}) {
41
+ const cursor = createCursor(page, {
42
+ // Start position (center of viewport)
43
+ start: {
44
+ x: Math.floor(page.viewport()?.width || 1920) / 2,
45
+ y: Math.floor(page.viewport()?.height || 1080) / 2
46
+ }
47
+ });
48
+
49
+ // Wrap cursor with human-like enhancements
50
+ return {
51
+ /**
52
+ * Move cursor to element with human-like motion
53
+ * @param {string} selector - CSS selector
54
+ * @param {Object} moveOptions - Movement options
55
+ */
56
+ async moveTo(selector, moveOptions = {}) {
57
+ const {
58
+ hesitate = true,
59
+ hesitateMs = randomInRange(
60
+ MOUSE_CONFIG.HESITATE_BEFORE_CLICK.MIN_MS,
61
+ MOUSE_CONFIG.HESITATE_BEFORE_CLICK.MAX_MS
62
+ )
63
+ } = moveOptions;
64
+
65
+ await cursor.move(selector);
66
+
67
+ if (hesitate) {
68
+ await sleep(hesitateMs);
69
+ }
70
+ },
71
+
72
+ /**
73
+ * Click element with human-like behavior
74
+ * @param {string} selector - CSS selector
75
+ * @param {Object} clickOptions - Click options
76
+ */
77
+ async click(selector, clickOptions = {}) {
78
+ const {
79
+ hesitate = true,
80
+ moveFirst = true
81
+ } = clickOptions;
82
+
83
+ if (moveFirst) {
84
+ await this.moveTo(selector, { hesitate });
85
+ }
86
+
87
+ // Random click duration
88
+ const clickDelay = randomInRange(
89
+ MOUSE_CONFIG.CLICK_DURATION.MIN_MS,
90
+ MOUSE_CONFIG.CLICK_DURATION.MAX_MS
91
+ );
92
+
93
+ await cursor.click(selector, {
94
+ hesitate: hesitate ? randomInRange(
95
+ MOUSE_CONFIG.HESITATE_BEFORE_CLICK.MIN_MS,
96
+ MOUSE_CONFIG.HESITATE_BEFORE_CLICK.MAX_MS
97
+ ) : 0,
98
+ waitForClick: clickDelay
99
+ });
100
+ },
101
+
102
+ /**
103
+ * Double click element with human-like behavior
104
+ * @param {string} selector - CSS selector
105
+ */
106
+ async doubleClick(selector) {
107
+ await this.moveTo(selector);
108
+ await cursor.click(selector, { waitForClick: 50 });
109
+ await sleep(randomInRange(50, 150));
110
+ await cursor.click(selector, { waitForClick: 50 });
111
+ },
112
+
113
+ /**
114
+ * Hover over element
115
+ * @param {string} selector - CSS selector
116
+ */
117
+ async hover(selector) {
118
+ await this.moveTo(selector, { hesitate: true });
119
+ },
120
+
121
+ /**
122
+ * Random mouse movement within viewport (simulates idle behavior)
123
+ * @param {number} duration - Duration in ms for random movements
124
+ */
125
+ async randomMovement(duration = 2000) {
126
+ const startTime = Date.now();
127
+ const viewport = page.viewport() || { width: 1920, height: 1080 };
128
+
129
+ while (Date.now() - startTime < duration) {
130
+ const x = randomInRange(100, viewport.width - 100);
131
+ const y = randomInRange(100, viewport.height - 100);
132
+
133
+ await cursor.moveTo({ x, y });
134
+ await sleep(randomInRange(200, 500));
135
+ }
136
+ },
137
+
138
+ // Expose original cursor for advanced use
139
+ _cursor: cursor
140
+ };
141
+ }
142
+
143
+ /**
144
+ * Type text with human-like patterns
145
+ * @param {Page} page - Puppeteer page instance
146
+ * @param {string} selector - CSS selector for input field
147
+ * @param {string} text - Text to type
148
+ * @param {Object} options - Typing options
149
+ */
150
+ export async function humanType(page, selector, text, options = {}) {
151
+ const {
152
+ clearFirst = true,
153
+ clickFirst = true,
154
+ baseDelay = TYPING_CONFIG.BASE_DELAY_MS,
155
+ randomDelay = TYPING_CONFIG.RANDOM_DELAY_MAX_MS,
156
+ pauseProbability = TYPING_CONFIG.PAUSE_PROBABILITY,
157
+ simulateTypos = false,
158
+ typoProbability = TYPING_CONFIG.TYPO_PROBABILITY
159
+ } = options;
160
+
161
+ // Click to focus the field
162
+ if (clickFirst) {
163
+ await page.click(selector);
164
+ await sleep(randomInRange(100, 200));
165
+ }
166
+
167
+ // Clear existing content using keyboard commands (triggers proper input events)
168
+ // IMPORTANT: Setting element.value = '' directly does NOT trigger input events,
169
+ // which breaks React/Vue/Angular forms and can be detected as bot behavior.
170
+ if (clearFirst) {
171
+ // Triple-click to select all text in the field (more human-like than Ctrl+A)
172
+ await page.click(selector, { clickCount: 3 });
173
+ await sleep(randomInRange(50, 100));
174
+
175
+ // Delete selected text with Backspace (triggers input events)
176
+ await page.keyboard.press('Backspace');
177
+ await sleep(randomInRange(50, 100));
178
+
179
+ // Dispatch input event to ensure framework state updates
180
+ await page.evaluate((sel) => {
181
+ const element = document.querySelector(sel);
182
+ if (element) {
183
+ element.dispatchEvent(new Event('input', { bubbles: true }));
184
+ element.dispatchEvent(new Event('change', { bubbles: true }));
185
+ }
186
+ }, selector);
187
+ await sleep(randomInRange(30, 80));
188
+ }
189
+
190
+ // Type each character with human-like timing
191
+ for (let i = 0; i < text.length; i++) {
192
+ const char = text[i];
193
+
194
+ // Occasional typo simulation
195
+ if (simulateTypos && Math.random() < typoProbability && char.match(/[a-z]/i)) {
196
+ // Type wrong key
197
+ const wrongChar = getAdjacentKey(char);
198
+ await page.keyboard.type(wrongChar);
199
+ await sleep(randomInRange(100, 200));
200
+
201
+ // Pause (realize mistake)
202
+ await sleep(randomInRange(200, 400));
203
+
204
+ // Delete wrong character
205
+ await page.keyboard.press('Backspace');
206
+ await sleep(TYPING_CONFIG.TYPO_CORRECTION_DELAY_MS);
207
+ }
208
+
209
+ // Type the correct character
210
+ await page.keyboard.type(char);
211
+
212
+ // Calculate delay for next character
213
+ let delay = baseDelay + randomInRange(0, randomDelay);
214
+
215
+ // Add occasional pauses (thinking)
216
+ if (Math.random() < pauseProbability) {
217
+ delay += randomInRange(
218
+ TYPING_CONFIG.PAUSE_DURATION.MIN_MS,
219
+ TYPING_CONFIG.PAUSE_DURATION.MAX_MS
220
+ );
221
+ }
222
+
223
+ // Slightly longer delay after punctuation or spaces
224
+ if (['.', ',', '!', '?', ' ', '@'].includes(char)) {
225
+ delay += randomInRange(30, 80);
226
+ }
227
+
228
+ await sleep(delay);
229
+ }
230
+
231
+ // Final event dispatch to ensure framework state is fully updated
232
+ // Some frameworks (especially React with controlled inputs) need explicit events
233
+ await page.evaluate((sel) => {
234
+ const element = document.querySelector(sel);
235
+ if (element) {
236
+ // Dispatch events that frameworks listen for
237
+ element.dispatchEvent(new Event('input', { bubbles: true }));
238
+ element.dispatchEvent(new Event('change', { bubbles: true }));
239
+ // Also dispatch blur and focus to trigger validation
240
+ element.dispatchEvent(new FocusEvent('blur', { bubbles: true }));
241
+ element.dispatchEvent(new FocusEvent('focus', { bubbles: true }));
242
+ }
243
+ }, selector);
244
+ }
245
+
246
+ /**
247
+ * Get an adjacent key on QWERTY keyboard for typo simulation
248
+ * @param {string} char - Original character
249
+ * @returns {string} Adjacent character
250
+ */
251
+ function getAdjacentKey(char) {
252
+ const keyboard = {
253
+ 'q': ['w', 'a'], 'w': ['q', 'e', 's'], 'e': ['w', 'r', 'd'], 'r': ['e', 't', 'f'],
254
+ 't': ['r', 'y', 'g'], 'y': ['t', 'u', 'h'], 'u': ['y', 'i', 'j'], 'i': ['u', 'o', 'k'],
255
+ 'o': ['i', 'p', 'l'], 'p': ['o', 'l'],
256
+ 'a': ['q', 's', 'z'], 's': ['a', 'w', 'd', 'x'], 'd': ['s', 'e', 'f', 'c'],
257
+ 'f': ['d', 'r', 'g', 'v'], 'g': ['f', 't', 'h', 'b'], 'h': ['g', 'y', 'j', 'n'],
258
+ 'j': ['h', 'u', 'k', 'm'], 'k': ['j', 'i', 'l'], 'l': ['k', 'o', 'p'],
259
+ 'z': ['a', 's', 'x'], 'x': ['z', 's', 'd', 'c'], 'c': ['x', 'd', 'f', 'v'],
260
+ 'v': ['c', 'f', 'g', 'b'], 'b': ['v', 'g', 'h', 'n'], 'n': ['b', 'h', 'j', 'm'],
261
+ 'm': ['n', 'j', 'k']
262
+ };
263
+
264
+ const lowerChar = char.toLowerCase();
265
+ const adjacent = keyboard[lowerChar];
266
+
267
+ if (!adjacent) return char;
268
+
269
+ const wrongChar = adjacent[Math.floor(Math.random() * adjacent.length)];
270
+ return char === char.toUpperCase() ? wrongChar.toUpperCase() : wrongChar;
271
+ }
272
+
273
+ /**
274
+ * Wait with human-like timing after an action
275
+ * @param {string} actionType - Type of action (navigation, action, submit)
276
+ * @returns {Promise<void>}
277
+ */
278
+ export async function humanWait(actionType = 'action') {
279
+ let delay;
280
+
281
+ switch (actionType) {
282
+ case 'navigation':
283
+ delay = randomInRange(
284
+ ACTION_DELAYS.AFTER_NAVIGATION_MS.MIN,
285
+ ACTION_DELAYS.AFTER_NAVIGATION_MS.MAX
286
+ );
287
+ break;
288
+ case 'submit':
289
+ case 'beforeSubmit':
290
+ delay = randomInRange(
291
+ ACTION_DELAYS.BEFORE_SUBMIT_MS.MIN,
292
+ ACTION_DELAYS.BEFORE_SUBMIT_MS.MAX
293
+ );
294
+ break;
295
+ case 'afterSubmit':
296
+ delay = randomInRange(
297
+ ACTION_DELAYS.AFTER_SUBMIT_MS.MIN,
298
+ ACTION_DELAYS.AFTER_SUBMIT_MS.MAX
299
+ );
300
+ break;
301
+ case 'scroll':
302
+ delay = randomInRange(
303
+ ACTION_DELAYS.SCROLL_PAUSE_MS.MIN,
304
+ ACTION_DELAYS.SCROLL_PAUSE_MS.MAX
305
+ );
306
+ break;
307
+ case 'action':
308
+ default:
309
+ delay = randomInRange(
310
+ ACTION_DELAYS.BETWEEN_ACTIONS_MS.MIN,
311
+ ACTION_DELAYS.BETWEEN_ACTIONS_MS.MAX
312
+ );
313
+ break;
314
+ }
315
+
316
+ await sleep(delay);
317
+ }
318
+
319
+ /**
320
+ * Scroll page with human-like behavior
321
+ * @param {Page} page - Puppeteer page instance
322
+ * @param {Object} options - Scroll options
323
+ */
324
+ export async function humanScroll(page, options = {}) {
325
+ const {
326
+ direction = 'down',
327
+ distance = 300,
328
+ steps = 5
329
+ } = options;
330
+
331
+ const stepDistance = Math.floor(distance / steps);
332
+ const scrollMultiplier = direction === 'up' ? -1 : 1;
333
+
334
+ for (let i = 0; i < steps; i++) {
335
+ // Add slight variation to each step
336
+ const actualStep = stepDistance + randomInRange(-20, 20);
337
+
338
+ await page.evaluate((y) => {
339
+ window.scrollBy({ top: y, behavior: 'smooth' });
340
+ }, actualStep * scrollMultiplier);
341
+
342
+ // Random pause between scroll steps
343
+ await sleep(randomInRange(50, 150));
344
+ }
345
+
346
+ // Pause after scrolling
347
+ await humanWait('scroll');
348
+ }
349
+
350
+ /**
351
+ * Scroll element into view with human-like behavior
352
+ * @param {Page} page - Puppeteer page instance
353
+ * @param {string} selector - CSS selector
354
+ */
355
+ export async function scrollToElement(page, selector) {
356
+ await page.evaluate((sel) => {
357
+ const element = document.querySelector(sel);
358
+ if (element) {
359
+ element.scrollIntoView({ behavior: 'smooth', block: 'center' });
360
+ }
361
+ }, selector);
362
+
363
+ await humanWait('scroll');
364
+ }
365
+
366
+ /**
367
+ * Fill a form with human-like behavior
368
+ * @param {Page} page - Puppeteer page instance
369
+ * @param {Object} fields - Form fields { selector: value }
370
+ * @param {Object} options - Fill options
371
+ */
372
+ export async function humanFillForm(page, fields, options = {}) {
373
+ const {
374
+ cursor = null,
375
+ tabBetweenFields = false
376
+ } = options;
377
+
378
+ const fieldEntries = Object.entries(fields);
379
+
380
+ for (let i = 0; i < fieldEntries.length; i++) {
381
+ const [selector, value] = fieldEntries[i];
382
+
383
+ // Move to field (if cursor provided)
384
+ if (cursor) {
385
+ await cursor.click(selector);
386
+ } else {
387
+ await page.click(selector);
388
+ }
389
+
390
+ await humanWait('action');
391
+
392
+ // Type the value
393
+ await humanType(page, selector, value, {
394
+ clearFirst: true,
395
+ clickFirst: false // Already clicked
396
+ });
397
+
398
+ // Wait between fields
399
+ if (i < fieldEntries.length - 1) {
400
+ await humanWait('action');
401
+
402
+ // Optionally use Tab to move to next field
403
+ if (tabBetweenFields) {
404
+ await page.keyboard.press('Tab');
405
+ await sleep(randomInRange(100, 200));
406
+ }
407
+ }
408
+ }
409
+ }
410
+
411
+ /**
412
+ * Submit a form with human-like behavior
413
+ * @param {Page} page - Puppeteer page instance
414
+ * @param {string} submitSelector - CSS selector for submit button
415
+ * @param {Object} options - Submit options
416
+ */
417
+ export async function humanSubmit(page, submitSelector, options = {}) {
418
+ const { cursor = null, waitForNavigation = true } = options;
419
+
420
+ // Pause before submit (human would review)
421
+ await humanWait('beforeSubmit');
422
+
423
+ // Click submit
424
+ if (cursor) {
425
+ await cursor.click(submitSelector);
426
+ } else {
427
+ await page.click(submitSelector);
428
+ }
429
+
430
+ // Wait for navigation if expected
431
+ if (waitForNavigation) {
432
+ try {
433
+ await page.waitForNavigation({
434
+ timeout: 10000,
435
+ waitUntil: 'networkidle2'
436
+ });
437
+ } catch (e) {
438
+ // Navigation might not happen (AJAX form)
439
+ }
440
+ }
441
+
442
+ await humanWait('afterSubmit');
443
+ }
444
+
445
+ export default {
446
+ createHumanCursor,
447
+ humanType,
448
+ humanWait,
449
+ humanScroll,
450
+ scrollToElement,
451
+ humanFillForm,
452
+ humanSubmit
453
+ };
@@ -0,0 +1,242 @@
1
+ /**
2
+ * JSON Repair Utility
3
+ *
4
+ * Handles parsing of potentially truncated or malformed JSON from AI responses.
5
+ * Uses jsonrepair library to fix common issues like:
6
+ * - Missing closing brackets/braces
7
+ * - Truncated strings
8
+ * - Missing commas
9
+ * - Trailing commas
10
+ */
11
+
12
+ import { jsonrepair } from 'jsonrepair';
13
+
14
+ /**
15
+ * Parse JSON with automatic repair for truncated/malformed content
16
+ * @param {string} jsonString - The JSON string to parse
17
+ * @param {Object} options - Options
18
+ * @param {boolean} options.silent - If true, don't log warnings
19
+ * @returns {Object} { data, wasRepaired, original, repaired, error }
20
+ */
21
+ export function parseJSONWithRepair(jsonString, options = {}) {
22
+ const result = {
23
+ data: null,
24
+ wasRepaired: false,
25
+ wasTruncated: false,
26
+ original: jsonString,
27
+ repaired: null,
28
+ error: null
29
+ };
30
+
31
+ // First, try standard JSON.parse
32
+ try {
33
+ result.data = JSON.parse(jsonString);
34
+ return result;
35
+ } catch (originalError) {
36
+ // Standard parse failed, try repair
37
+ try {
38
+ const repairedString = jsonrepair(jsonString);
39
+ result.repaired = repairedString;
40
+ result.data = JSON.parse(repairedString);
41
+ result.wasRepaired = true;
42
+
43
+ // Detect if it was likely truncated (common patterns)
44
+ result.wasTruncated = detectTruncation(jsonString, repairedString);
45
+
46
+ if (!options.silent) {
47
+ console.warn('[JSONRepair] Repaired malformed JSON:', {
48
+ originalLength: jsonString.length,
49
+ repairedLength: repairedString.length,
50
+ wasTruncated: result.wasTruncated
51
+ });
52
+ }
53
+
54
+ return result;
55
+ } catch (repairError) {
56
+ // Even repair failed
57
+ result.error = {
58
+ originalError: originalError.message,
59
+ repairError: repairError.message
60
+ };
61
+ return result;
62
+ }
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Detect if JSON was truncated (vs just malformed)
68
+ * Uses state machine approach for accurate string tracking
69
+ * @param {string} original - Original JSON string
70
+ * @param {string} repaired - Repaired JSON string
71
+ * @returns {boolean} True if likely truncated
72
+ */
73
+ function detectTruncation(original, repaired) {
74
+ const trimmed = original.trim();
75
+
76
+ // State machine to accurately track JSON structure
77
+ let depth = 0; // Bracket nesting depth
78
+ let inString = false; // Currently inside a string
79
+ let escaped = false; // Previous char was escape
80
+
81
+ for (const char of trimmed) {
82
+ if (escaped) {
83
+ escaped = false;
84
+ continue;
85
+ }
86
+ if (char === '\\' && inString) {
87
+ escaped = true;
88
+ continue;
89
+ }
90
+ if (char === '"') {
91
+ inString = !inString;
92
+ continue;
93
+ }
94
+ if (inString) continue;
95
+
96
+ if (char === '{' || char === '[') depth++;
97
+ if (char === '}' || char === ']') depth--;
98
+ }
99
+
100
+ // PRIMARY CHECK: If we end mid-string, definitely truncated
101
+ // This catches the common case where content was cut off mid-sentence
102
+ if (inString) {
103
+ console.log('[JSONRepair] Truncation detected: ended mid-string');
104
+ return true;
105
+ }
106
+
107
+ // If we have unclosed brackets, truncated
108
+ if (depth > 0) {
109
+ console.log('[JSONRepair] Truncation detected: unclosed brackets, depth=' + depth);
110
+ return true;
111
+ }
112
+
113
+ // If we end mid-escape sequence, truncated
114
+ if (escaped) {
115
+ console.log('[JSONRepair] Truncation detected: ended mid-escape');
116
+ return true;
117
+ }
118
+
119
+ // Count bracket differences between original and repaired
120
+ const countBrackets = (str) => {
121
+ let open = 0, close = 0;
122
+ let inStr = false, esc = false;
123
+ for (const char of str) {
124
+ if (esc) { esc = false; continue; }
125
+ if (char === '\\' && inStr) { esc = true; continue; }
126
+ if (char === '"') { inStr = !inStr; continue; }
127
+ if (inStr) continue;
128
+ if (char === '{' || char === '[') open++;
129
+ if (char === '}' || char === ']') close++;
130
+ }
131
+ return { open, close };
132
+ };
133
+
134
+ const originalBrackets = countBrackets(original);
135
+ const repairedBrackets = countBrackets(repaired);
136
+
137
+ // If repair added closing brackets, it was truncated
138
+ if (repairedBrackets.close > originalBrackets.close) {
139
+ console.log('[JSONRepair] Truncation detected: repair added closing brackets');
140
+ return true;
141
+ }
142
+
143
+ // Check for common truncation patterns in the ending
144
+ const lastChars = trimmed.slice(-20);
145
+ const truncationPatterns = [
146
+ /,\s*$/, // Ends with comma (expecting more)
147
+ /:\s*$/, // Ends with colon (expecting value)
148
+ /\[\s*$/, // Ends with open bracket
149
+ /\{\s*$/, // Ends with open brace
150
+ ];
151
+
152
+ for (const pattern of truncationPatterns) {
153
+ if (pattern.test(lastChars)) {
154
+ console.log('[JSONRepair] Truncation detected: suspicious ending pattern');
155
+ return true;
156
+ }
157
+ }
158
+
159
+ return false;
160
+ }
161
+
162
+ /**
163
+ * Check if a string looks like it might be truncated JSON
164
+ * Useful for pre-checking before attempting parse
165
+ * @param {string} str - String to check
166
+ * @returns {boolean} True if likely truncated
167
+ */
168
+ export function looksLikeTruncatedJSON(str) {
169
+ const trimmed = str.trim();
170
+
171
+ // Must start with { or [ to be JSON
172
+ if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
173
+ return false;
174
+ }
175
+
176
+ // Check for balanced brackets
177
+ let depth = 0;
178
+ let inString = false;
179
+ let escaped = false;
180
+
181
+ for (const char of trimmed) {
182
+ if (escaped) {
183
+ escaped = false;
184
+ continue;
185
+ }
186
+ if (char === '\\' && inString) {
187
+ escaped = true;
188
+ continue;
189
+ }
190
+ if (char === '"') {
191
+ inString = !inString;
192
+ continue;
193
+ }
194
+ if (inString) continue;
195
+
196
+ if (char === '{' || char === '[') depth++;
197
+ if (char === '}' || char === ']') depth--;
198
+ }
199
+
200
+ // If depth > 0, we have unclosed brackets (truncated)
201
+ // If inString is true, we're mid-string (truncated)
202
+ return depth > 0 || inString;
203
+ }
204
+
205
+ /**
206
+ * Create a truncation notice for file content
207
+ * @param {string} fileType - Type of file (md, js, etc.)
208
+ * @returns {string} Truncation notice
209
+ */
210
+ export function createTruncationNotice(fileType) {
211
+ const notices = {
212
+ md: '\n\n---\n**[CONTENT TRUNCATED]** - AI response exceeded token limit. Content above this line may be incomplete.\n',
213
+ js: '\n\n// [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete.\n',
214
+ ts: '\n\n// [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete.\n',
215
+ jsx: '\n\n// [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete.\n',
216
+ tsx: '\n\n// [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete.\n',
217
+ json: '', // Can't add comments to JSON
218
+ css: '\n\n/* [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete. */\n',
219
+ html: '\n\n<!-- [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete. -->\n',
220
+ py: '\n\n# [CONTENT TRUNCATED] - AI response exceeded token limit. Content above this line may be incomplete.\n',
221
+ default: '\n\n[CONTENT TRUNCATED] - AI response exceeded token limit.\n'
222
+ };
223
+
224
+ return notices[fileType] || notices.default;
225
+ }
226
+
227
+ /**
228
+ * Get file extension from path
229
+ * @param {string} filePath - File path
230
+ * @returns {string} Extension without dot
231
+ */
232
+ export function getFileExtension(filePath) {
233
+ const match = filePath.match(/\.([^.]+)$/);
234
+ return match ? match[1].toLowerCase() : '';
235
+ }
236
+
237
+ export default {
238
+ parseJSONWithRepair,
239
+ looksLikeTruncatedJSON,
240
+ createTruncationNotice,
241
+ getFileExtension
242
+ };