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,192 @@
1
+ // import { Command } from 'commander'; // Not needed for programmatic use
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { FileScanner } from './scanner.js';
5
+ import { CodeParser } from './parser.js';
6
+ import { CloneDetector } from './detector.js';
7
+ import { RefactoringAnalyzer } from './analyzer.js';
8
+ import { Reporter } from './reporter.js';
9
+
10
+ /**
11
+ * Main clone detection orchestrator
12
+ */
13
+ class CloneDetectionTool {
14
+ constructor(config) {
15
+ this.config = config;
16
+ this.scanner = new FileScanner(config);
17
+ this.parser = new CodeParser(config);
18
+ this.detector = new CloneDetector(config, this.parser);
19
+ this.analyzer = new RefactoringAnalyzer(config);
20
+ this.reporter = new Reporter();
21
+ this.parseBatchSize = config.parseBatchSize || 50; // Parse files in batches
22
+ }
23
+
24
+ /**
25
+ * Parse files in batches to avoid blocking the event loop
26
+ * @param {Array} files - Array of file objects to parse
27
+ * @returns {Promise<Array>} Array of parsed file objects
28
+ */
29
+ async parseFilesInBatches(files) {
30
+ const parsedFiles = [];
31
+
32
+ for (let i = 0; i < files.length; i += this.parseBatchSize) {
33
+ const batch = files.slice(i, i + this.parseBatchSize);
34
+
35
+ // Parse batch
36
+ for (const file of batch) {
37
+ parsedFiles.push(this.parser.parseFile(file));
38
+ }
39
+
40
+ // Yield to event loop between batches
41
+ if (i + this.parseBatchSize < files.length) {
42
+ await new Promise(resolve => setImmediate(resolve));
43
+ }
44
+
45
+ // Log progress for large projects
46
+ if (files.length > 100 && (i + this.parseBatchSize) % 100 === 0) {
47
+ const progress = Math.min(100, ((i + this.parseBatchSize) / files.length * 100)).toFixed(0);
48
+ console.log(` Parsing progress: ${progress}%`);
49
+ }
50
+ }
51
+
52
+ return parsedFiles;
53
+ }
54
+
55
+ /**
56
+ * Run the complete clone detection pipeline
57
+ */
58
+ async run(projectPath, outputPath) {
59
+ console.log('Starting Code Clone Detection...\n');
60
+ console.log(`Project: ${projectPath}`);
61
+ console.log(`Config: minTokens=${this.config.minTokens}, minLines=${this.config.minLines}\n`);
62
+
63
+ try {
64
+ // Step 1: Scan files
65
+ console.log('[1/5] Scanning project files...');
66
+ const files = await this.scanner.scanProject(projectPath);
67
+
68
+ if (files.length === 0) {
69
+ console.log('No files found to analyze.');
70
+ return null;
71
+ }
72
+
73
+ // Step 2: Parse and tokenize (with batching to avoid blocking)
74
+ console.log('[2/5] Parsing and tokenizing code...');
75
+ const parsedFiles = await this.parseFilesInBatches(files);
76
+
77
+ // Step 3: Detect clones (async with yielding)
78
+ console.log('[3/5] Detecting code clones...');
79
+ const clones = await this.detector.detectClones(parsedFiles);
80
+
81
+ if (clones.length === 0) {
82
+ console.log('No significant clones detected.');
83
+ return this.reporter.generateReport([], parsedFiles);
84
+ }
85
+
86
+ // Step 4: Analyze and generate refactoring advice
87
+ console.log('[4/5] Analyzing clones and generating refactoring advice...');
88
+ const analyzedClones = this.analyzer.analyzeClones(clones);
89
+
90
+ // Step 5: Generate report
91
+ console.log('[5/5] Generating report...');
92
+ const report = this.reporter.generateReport(analyzedClones, parsedFiles);
93
+
94
+ // Save report
95
+ if (outputPath) {
96
+ this.reporter.saveReport(report, outputPath);
97
+ }
98
+
99
+ // Print summary
100
+ this.reporter.printSummary(report);
101
+
102
+ // Print AI summary
103
+ console.log('\n📋 AI Agent Summary:');
104
+ console.log(this.reporter.generateAISummary(report));
105
+ console.log();
106
+
107
+ return report;
108
+ } catch (error) {
109
+ console.error('\n❌ Error during clone detection:', error.message);
110
+ console.error(error.stack);
111
+ throw error;
112
+ }
113
+ }
114
+ }
115
+
116
+ /**
117
+ * CLI Interface (disabled for now)
118
+ */
119
+ async function main() {
120
+ // CLI functionality disabled - use CloneDetectionTool programmatically
121
+ console.error('CLI not available in this version. Use CloneDetectionTool programmatically.');
122
+ process.exit(1);
123
+ // const program = new Command();
124
+
125
+ program
126
+ .name('code-clone-detector')
127
+ .description('AI-powered code clone detection and refactoring advisor')
128
+ .version('1.0.0')
129
+ .argument('<project-path>', 'Path to the project directory to analyze')
130
+ .option('-o, --output <path>', 'Output file path for JSON report', 'clone-report.json')
131
+ .option('-c, --config <path>', 'Path to config file', 'config.json')
132
+ .option('--min-tokens <number>', 'Minimum token count for clones', parseInt)
133
+ .option('--min-lines <number>', 'Minimum line count for clones', parseInt)
134
+ .action(async (projectPath, options) => {
135
+ try {
136
+ // Load config
137
+ let config;
138
+ const configPath = path.resolve(options.config);
139
+
140
+ if (fs.existsSync(configPath)) {
141
+ config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
142
+ console.log(`Loaded config from: ${configPath}`);
143
+ } else {
144
+ console.log('Using default configuration');
145
+ config = {
146
+ minTokens: 50,
147
+ minLines: 5,
148
+ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'],
149
+ exclude: ['**/node_modules/**', '**/dist/**', '**/build/**'],
150
+ similarityThreshold: 0.85,
151
+ maxFileSize: 500000
152
+ };
153
+ }
154
+
155
+ // Override with CLI options
156
+ if (options.minTokens) config.minTokens = options.minTokens;
157
+ if (options.minLines) config.minLines = options.minLines;
158
+
159
+ // Resolve paths
160
+ const absProjectPath = path.resolve(projectPath);
161
+ const absOutputPath = path.resolve(options.output);
162
+
163
+ if (!fs.existsSync(absProjectPath)) {
164
+ console.error(`Error: Project path does not exist: ${absProjectPath}`);
165
+ process.exit(1);
166
+ }
167
+
168
+ // Run detection
169
+ const tool = new CloneDetectionTool(config);
170
+ const report = await tool.run(absProjectPath, absOutputPath);
171
+
172
+ if (report) {
173
+ console.log(`✅ Analysis complete! Review the report at: ${absOutputPath}`);
174
+ process.exit(0);
175
+ } else {
176
+ process.exit(1);
177
+ }
178
+ } catch (error) {
179
+ console.error('Fatal error:', error.message);
180
+ process.exit(1);
181
+ }
182
+ });
183
+
184
+ program.parse();
185
+ }
186
+
187
+ // Run CLI if executed directly
188
+ if (import.meta.url === `file://${process.argv[1]}`) {
189
+ main();
190
+ }
191
+
192
+ export { CloneDetectionTool };
@@ -0,0 +1,199 @@
1
+ import * as parser from '@babel/parser';
2
+ import traverse from '@babel/traverse';
3
+ import crypto from 'crypto';
4
+
5
+ /**
6
+ * Parses and tokenizes source code
7
+ */
8
+ export class CodeParser {
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+
13
+ /**
14
+ * Parse file and extract tokens
15
+ * @param {Object} file - File object with content
16
+ * @returns {Object} Parsed file with tokens and AST info
17
+ */
18
+ parseFile(file) {
19
+ const extension = file.extension;
20
+
21
+ // Handle JavaScript/TypeScript files
22
+ if (['.js', '.jsx', '.ts', '.tsx', '.vue'].includes(extension)) {
23
+ return this.parseJavaScript(file);
24
+ }
25
+
26
+ // Fallback to simple tokenization
27
+ return this.simpleTokenize(file);
28
+ }
29
+
30
+ /**
31
+ * Parse JavaScript/TypeScript with Babel
32
+ */
33
+ parseJavaScript(file) {
34
+ try {
35
+ const ast = parser.parse(file.content, {
36
+ sourceType: 'module',
37
+ plugins: [
38
+ 'jsx',
39
+ 'typescript',
40
+ 'decorators-legacy',
41
+ 'classProperties',
42
+ 'optionalChaining',
43
+ 'nullishCoalescingOperator'
44
+ ],
45
+ errorRecovery: true
46
+ });
47
+
48
+ const tokens = [];
49
+ const blocks = [];
50
+ let blockId = 0;
51
+
52
+ // Extract meaningful code blocks (functions, classes, etc.)
53
+ traverse.default(ast, {
54
+ FunctionDeclaration: (path) => this.extractBlock(path, file, blocks, tokens, blockId++),
55
+ FunctionExpression: (path) => this.extractBlock(path, file, blocks, tokens, blockId++),
56
+ ArrowFunctionExpression: (path) => this.extractBlock(path, file, blocks, tokens, blockId++),
57
+ ClassMethod: (path) => this.extractBlock(path, file, blocks, tokens, blockId++),
58
+ ClassDeclaration: (path) => this.extractBlock(path, file, blocks, tokens, blockId++),
59
+ });
60
+
61
+ // Also create a flat token sequence for the entire file
62
+ const fileTokens = this.extractTokenSequence(ast);
63
+
64
+ return {
65
+ ...file,
66
+ ast,
67
+ tokens: fileTokens,
68
+ blocks,
69
+ parsed: true
70
+ };
71
+ } catch (error) {
72
+ console.error(`Parse error in ${file.path}:`, error.message);
73
+ return this.simpleTokenize(file);
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Extract a code block with token sequence
79
+ */
80
+ extractBlock(path, file, blocks, tokens, blockId) {
81
+ const node = path.node;
82
+ const loc = node.loc;
83
+
84
+ if (!loc) return;
85
+
86
+ // Get the source code for this block
87
+ const lines = file.content.split('\n');
88
+ const blockCode = lines.slice(loc.start.line - 1, loc.end.line).join('\n');
89
+
90
+ // Create token sequence for this block
91
+ const blockTokens = this.tokenizeCode(blockCode);
92
+
93
+ if (blockTokens.length < this.config.minTokens) return;
94
+
95
+ blocks.push({
96
+ id: `${file.path}:block${blockId}`,
97
+ file: file.path,
98
+ startLine: loc.start.line,
99
+ endLine: loc.end.line,
100
+ code: blockCode,
101
+ tokens: blockTokens,
102
+ hash: this.hashTokens(blockTokens),
103
+ type: node.type
104
+ });
105
+ }
106
+
107
+ /**
108
+ * Extract token sequence from AST
109
+ */
110
+ extractTokenSequence(ast) {
111
+ const tokens = [];
112
+
113
+ traverse.default(ast, {
114
+ enter(path) {
115
+ const node = path.node;
116
+
117
+ // Normalize identifiers but keep structure
118
+ if (node.type === 'Identifier') {
119
+ tokens.push('IDENT');
120
+ } else if (node.type === 'Literal' || node.type === 'StringLiteral' ||
121
+ node.type === 'NumericLiteral' || node.type === 'BooleanLiteral') {
122
+ tokens.push('LIT');
123
+ } else {
124
+ tokens.push(node.type);
125
+ }
126
+ }
127
+ });
128
+
129
+ return tokens;
130
+ }
131
+
132
+ /**
133
+ * Simple tokenization for non-JS files
134
+ */
135
+ simpleTokenize(file) {
136
+ const tokens = this.tokenizeCode(file.content);
137
+
138
+ return {
139
+ ...file,
140
+ tokens,
141
+ blocks: [{
142
+ id: `${file.path}:full`,
143
+ file: file.path,
144
+ startLine: 1,
145
+ endLine: file.content.split('\n').length,
146
+ code: file.content,
147
+ tokens,
148
+ hash: this.hashTokens(tokens),
149
+ type: 'File'
150
+ }],
151
+ parsed: false
152
+ };
153
+ }
154
+
155
+ /**
156
+ * Tokenize code string (language-agnostic)
157
+ */
158
+ tokenizeCode(code) {
159
+ // Remove comments and normalize
160
+ const cleaned = code
161
+ .replace(/\/\*[\s\S]*?\*\//g, '') // Block comments
162
+ .replace(/\/\/.*/g, '') // Line comments
163
+ .replace(/\s+/g, ' '); // Normalize whitespace
164
+
165
+ // Simple tokenization
166
+ const tokens = cleaned.match(/[a-zA-Z_$][a-zA-Z0-9_$]*|[{}()\[\];,.]|[+\-*/%=<>!&|]+|"[^"]*"|'[^']*'|`[^`]*`|\d+/g) || [];
167
+
168
+ return tokens;
169
+ }
170
+
171
+ /**
172
+ * Create hash of token sequence
173
+ */
174
+ hashTokens(tokens) {
175
+ return crypto
176
+ .createHash('md5')
177
+ .update(tokens.join(','))
178
+ .digest('hex');
179
+ }
180
+
181
+ /**
182
+ * Calculate similarity between token sequences
183
+ */
184
+ calculateSimilarity(tokens1, tokens2) {
185
+ const len1 = tokens1.length;
186
+ const len2 = tokens2.length;
187
+
188
+ if (len1 === 0 || len2 === 0) return 0;
189
+
190
+ // Use Jaccard similarity for token sets
191
+ const set1 = new Set(tokens1);
192
+ const set2 = new Set(tokens2);
193
+
194
+ const intersection = new Set([...set1].filter(x => set2.has(x)));
195
+ const union = new Set([...set1, ...set2]);
196
+
197
+ return intersection.size / union.size;
198
+ }
199
+ }
@@ -0,0 +1,148 @@
1
+ import fs from 'fs';
2
+
3
+ /**
4
+ * Formats and outputs clone detection results
5
+ */
6
+ export class Reporter {
7
+ /**
8
+ * Generate comprehensive report
9
+ * @param {Array} clones - Analyzed clones with refactoring advice
10
+ * @param {Array} files - Parsed files
11
+ * @returns {Object} Report object
12
+ */
13
+ generateReport(clones, files) {
14
+ const summary = this.generateSummary(clones, files);
15
+
16
+ return {
17
+ summary,
18
+ clones: clones.map(clone => this.formatClone(clone)),
19
+ metadata: {
20
+ generatedAt: new Date().toISOString(),
21
+ tool: 'code-clone-detector',
22
+ version: '1.0.0'
23
+ }
24
+ };
25
+ }
26
+
27
+ /**
28
+ * Generate summary statistics
29
+ */
30
+ generateSummary(clones, files) {
31
+ const totalFiles = files.length;
32
+ const totalClones = clones.length;
33
+
34
+ // Calculate total duplicated lines
35
+ const totalDuplicatedLines = clones.reduce((sum, clone) =>
36
+ sum + clone.metrics.duplicatedLines, 0
37
+ );
38
+
39
+ // Calculate total lines of code
40
+ const totalLines = files.reduce((sum, file) =>
41
+ sum + file.content.split('\n').length, 0
42
+ );
43
+
44
+ const duplicationPercentage = totalLines > 0
45
+ ? ((totalDuplicatedLines / totalLines) * 100).toFixed(2)
46
+ : 0;
47
+
48
+ // Priority breakdown
49
+ const priorityCounts = {
50
+ high: clones.filter(c => c.refactoringAdvice.priority === 'high').length,
51
+ medium: clones.filter(c => c.refactoringAdvice.priority === 'medium').length,
52
+ low: clones.filter(c => c.refactoringAdvice.priority === 'low').length
53
+ };
54
+
55
+ return {
56
+ totalFiles,
57
+ totalClones,
58
+ totalDuplicatedLines,
59
+ duplicationPercentage: parseFloat(duplicationPercentage),
60
+ priorityCounts,
61
+ topRefactoringOpportunities: clones.slice(0, 5).map(c => c.id)
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Format clone for output
67
+ */
68
+ formatClone(clone) {
69
+ return {
70
+ id: clone.id,
71
+ type: clone.type,
72
+ confidence: clone.confidence,
73
+ instances: clone.instances,
74
+ metrics: clone.metrics,
75
+ refactoringAdvice: clone.refactoringAdvice
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Save report to file
81
+ */
82
+ saveReport(report, outputPath) {
83
+ try {
84
+ fs.writeFileSync(outputPath, JSON.stringify(report, null, 2));
85
+ console.log(`\nReport saved to: ${outputPath}`);
86
+ return true;
87
+ } catch (error) {
88
+ console.error('Error saving report:', error.message);
89
+ return false;
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Print summary to console
95
+ */
96
+ printSummary(report) {
97
+ const { summary } = report;
98
+
99
+ console.log('\n' + '='.repeat(60));
100
+ console.log('CODE CLONE DETECTION SUMMARY');
101
+ console.log('='.repeat(60));
102
+ console.log(`Total Files Analyzed: ${summary.totalFiles}`);
103
+ console.log(`Total Clone Groups Found: ${summary.totalClones}`);
104
+ console.log(`Total Duplicated Lines: ${summary.totalDuplicatedLines}`);
105
+ console.log(`Duplication Percentage: ${summary.duplicationPercentage}%`);
106
+ console.log('\nPriority Breakdown:');
107
+ console.log(` High Priority: ${summary.priorityCounts.high}`);
108
+ console.log(` Medium Priority: ${summary.priorityCounts.medium}`);
109
+ console.log(` Low Priority: ${summary.priorityCounts.low}`);
110
+
111
+ if (report.clones.length > 0) {
112
+ console.log('\n' + '-'.repeat(60));
113
+ console.log('TOP REFACTORING OPPORTUNITIES');
114
+ console.log('-'.repeat(60));
115
+
116
+ report.clones.slice(0, 3).forEach((clone, idx) => {
117
+ console.log(`\n${idx + 1}. ${clone.id} [${clone.refactoringAdvice.priority.toUpperCase()} PRIORITY]`);
118
+ console.log(` Type: ${clone.type} (${(clone.confidence * 100).toFixed(0)}% confidence)`);
119
+ console.log(` Instances: ${clone.metrics.instanceCount} copies across ${clone.metrics.filesCovered} files`);
120
+ console.log(` Size: ${clone.metrics.lineCount} lines, ${clone.metrics.tokenCount} tokens`);
121
+ console.log(` Impact Score: ${clone.metrics.impactScore}`);
122
+ console.log(` Strategy: ${clone.refactoringAdvice.strategy}`);
123
+ console.log(` Suggested Name: ${clone.refactoringAdvice.suggestedName}`);
124
+ console.log(` Reasoning: ${clone.refactoringAdvice.reasoning}`);
125
+ });
126
+ }
127
+
128
+ console.log('\n' + '='.repeat(60));
129
+ }
130
+
131
+ /**
132
+ * Generate AI-friendly summary
133
+ */
134
+ generateAISummary(report) {
135
+ const topClone = report.clones[0];
136
+
137
+ if (!topClone) {
138
+ return 'No significant code duplication found in the project.';
139
+ }
140
+
141
+ let summary = `Found ${report.summary.totalClones} code clone groups with ${report.summary.duplicationPercentage}% duplication. `;
142
+ summary += `Top priority: ${topClone.refactoringAdvice.suggestedName} appears ${topClone.metrics.instanceCount} times. `;
143
+ summary += `Recommended action: ${topClone.refactoringAdvice.strategy}. `;
144
+ summary += topClone.refactoringAdvice.reasoning;
145
+
146
+ return summary;
147
+ }
148
+ }
@@ -0,0 +1,88 @@
1
+ import { glob } from 'glob';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+
5
+ /**
6
+ * Scans project directory for source files (async, non-blocking)
7
+ */
8
+ export class FileScanner {
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.batchSize = config.batchSize || 20; // Read files in parallel batches
12
+ }
13
+
14
+ /**
15
+ * Find all files matching the configuration
16
+ * @param {string} projectPath - Root directory to scan
17
+ * @returns {Promise<Array>} Array of file objects with path and content
18
+ */
19
+ async scanProject(projectPath) {
20
+ const files = [];
21
+ const allFilePaths = [];
22
+
23
+ // Find all matching files
24
+ for (const pattern of this.config.include) {
25
+ const matches = await glob(pattern, {
26
+ cwd: projectPath,
27
+ ignore: this.config.exclude,
28
+ absolute: true,
29
+ nodir: true
30
+ });
31
+ allFilePaths.push(...matches);
32
+ }
33
+
34
+ // Remove duplicates
35
+ const uniqueFilePaths = [...new Set(allFilePaths)];
36
+ console.log(`Found ${uniqueFilePaths.length} files to analyze`);
37
+
38
+ // Process files in batches to avoid blocking and memory issues
39
+ for (let i = 0; i < uniqueFilePaths.length; i += this.batchSize) {
40
+ const batch = uniqueFilePaths.slice(i, i + this.batchSize);
41
+
42
+ // Process batch in parallel
43
+ const batchResults = await Promise.all(
44
+ batch.map(filePath => this.readFile(filePath, projectPath))
45
+ );
46
+
47
+ // Filter out null results (skipped/failed files)
48
+ files.push(...batchResults.filter(Boolean));
49
+
50
+ // Yield to event loop between batches to prevent blocking
51
+ await new Promise(resolve => setImmediate(resolve));
52
+ }
53
+
54
+ return files;
55
+ }
56
+
57
+ /**
58
+ * Read a single file asynchronously
59
+ * @param {string} filePath - Absolute path to file
60
+ * @param {string} projectPath - Root project path for relative path calculation
61
+ * @returns {Promise<Object|null>} File object or null if skipped/failed
62
+ */
63
+ async readFile(filePath, projectPath) {
64
+ try {
65
+ const stats = await fs.stat(filePath);
66
+
67
+ // Skip files that are too large
68
+ if (stats.size > this.config.maxFileSize) {
69
+ console.warn(`Skipping large file: ${filePath}`);
70
+ return null;
71
+ }
72
+
73
+ const content = await fs.readFile(filePath, 'utf-8');
74
+ const relativePath = path.relative(projectPath, filePath);
75
+
76
+ return {
77
+ path: relativePath,
78
+ absolutePath: filePath,
79
+ content,
80
+ size: stats.size,
81
+ extension: path.extname(filePath)
82
+ };
83
+ } catch (error) {
84
+ console.error(`Error reading file ${filePath}:`, error.message);
85
+ return null;
86
+ }
87
+ }
88
+ }