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,581 @@
1
+ /**
2
+ * CloneDetectionTool - Detect duplicated code (code clones) for refactoring
3
+ *
4
+ * Purpose:
5
+ * - Identify exact and similar code clones across the codebase
6
+ * - Provide refactoring recommendations with priorities
7
+ * - Help reduce technical debt and improve maintainability
8
+ * - Support JavaScript, TypeScript, JSX, TSX, Vue files
9
+ */
10
+
11
+ import { BaseTool } from './baseTool.js';
12
+ import TagParser from '../utilities/tagParser.js';
13
+ import DirectoryAccessManager from '../utilities/directoryAccessManager.js';
14
+ import path from 'path';
15
+
16
+ import {
17
+ TOOL_STATUS,
18
+ SYSTEM_DEFAULTS
19
+ } from '../utilities/constants.js';
20
+
21
+ class CloneDetectionTool extends BaseTool {
22
+ constructor(config = {}, logger = null) {
23
+ super(config, logger);
24
+
25
+ // Tool metadata
26
+ this.requiresProject = true;
27
+ this.isAsync = true; // Run async to avoid blocking the event loop
28
+ this.timeout = config.timeout || 300000; // 5 minutes default (increased for large projects)
29
+ this.maxConcurrentOperations = config.maxConcurrentOperations || 1;
30
+
31
+ // Clone detection settings
32
+ this.defaultMinTokens = config.defaultMinTokens || 50;
33
+ this.defaultMinLines = config.defaultMinLines || 5;
34
+ this.defaultSimilarityThreshold = config.defaultSimilarityThreshold || 0.85;
35
+ this.maxFileSize = config.maxFileSize || 500000; // 500KB per file
36
+
37
+ // Directory access manager
38
+ this.directoryAccessManager = new DirectoryAccessManager(config, logger);
39
+
40
+ // Clone detector will be initialized lazily when needed
41
+ this.cloneDetector = null;
42
+ }
43
+
44
+ /**
45
+ * Get tool description for LLM consumption
46
+ * @returns {string} Tool description
47
+ */
48
+ getDescription() {
49
+ return `
50
+ Code Clone Detection Tool: Find duplicated code for refactoring opportunities
51
+
52
+ This tool identifies exact and similar code patterns (code clones) across your codebase to help reduce duplication, improve maintainability, and identify refactoring opportunities.
53
+
54
+ WHAT IT DETECTS:
55
+ - Exact Clones (Type 1): Identical code with different formatting/comments
56
+ - Similar Clones (Type 2/3): Structurally similar code with minor variations
57
+
58
+ SUPPORTED LANGUAGES:
59
+ - JavaScript (.js, .jsx, .mjs, .cjs)
60
+ - TypeScript (.ts, .tsx)
61
+ - Vue (.vue)
62
+
63
+ USAGE:
64
+ \`\`\`json
65
+ {
66
+ "toolId": "clonedetection",
67
+ "actions": [
68
+ {
69
+ "type": "detect-clones",
70
+ "directory": "src",
71
+ "minTokens": 50,
72
+ "minLines": 5,
73
+ "similarityThreshold": 0.85,
74
+ "priorityFilter": "high",
75
+ "maxResults": 10,
76
+ "outputMode": "summary"
77
+ }
78
+ ]
79
+ }
80
+ \`\`\`
81
+
82
+ PARAMETERS:
83
+ - directory: Directory to analyze (required)
84
+ - minTokens: Minimum token count (default: 50, lower = more sensitive)
85
+ - minLines: Minimum line count (default: 5)
86
+ - similarityThreshold: 0-1 similarity threshold (default: 0.85)
87
+ - priorityFilter: Filter by priority (high/medium/low, optional)
88
+ - maxResults: Maximum number of clones to return (optional)
89
+ - outputMode: summary|detailed|recommendations (default: detailed)
90
+
91
+ EXAMPLES:
92
+
93
+ 1. Find all clones in project:
94
+ \`\`\`json
95
+ {
96
+ "toolId": "clonedetection",
97
+ "actions": [{ "type": "detect-clones", "directory": "." }]
98
+ }
99
+ \`\`\`
100
+
101
+ 2. High-priority refactoring opportunities only:
102
+ \`\`\`json
103
+ {
104
+ "toolId": "clonedetection",
105
+ "actions": [{ "type": "detect-clones", "directory": "src", "priorityFilter": "high", "maxResults": 10 }]
106
+ }
107
+ \`\`\`
108
+
109
+ 3. More sensitive detection (finds smaller clones):
110
+ \`\`\`json
111
+ {
112
+ "toolId": "clonedetection",
113
+ "actions": [{ "type": "detect-clones", "directory": ".", "minTokens": 30, "similarityThreshold": 0.80 }]
114
+ }
115
+ \`\`\`
116
+
117
+ 4. Quick overview:
118
+ \`\`\`json
119
+ {
120
+ "toolId": "clonedetection",
121
+ "actions": [{ "type": "detect-clones", "directory": ".", "outputMode": "summary" }]
122
+ }
123
+ \`\`\`
124
+
125
+ OUTPUT FORMAT:
126
+ Returns clone detection results with:
127
+ - summary: Overall statistics (total clones, duplication %, priority breakdown)
128
+ - clones: Array of detected clone groups with:
129
+ - id, type, confidence, instances, metrics
130
+ - refactoringAdvice: priority, strategy, suggestedName, reasoning, actionableSteps
131
+
132
+ OUTPUT MODES:
133
+ - summary: High-level overview only (duplication %, top 5 clones)
134
+ - detailed: Full clone details with code snippets (default)
135
+ - recommendations: Refactoring priorities with actionable steps
136
+
137
+ LIMITATIONS:
138
+ - Analyzes JavaScript/TypeScript family only
139
+ - Maximum file size: ${Math.round(this.maxFileSize / 1024)}KB per file
140
+ - Analysis timeout: ${this.timeout / 1000} seconds
141
+ `;
142
+ }
143
+
144
+ /**
145
+ * Parse parameters from tool command content
146
+ * @param {string} content - Raw tool command content
147
+ * @returns {Object} Parsed parameters
148
+ */
149
+ parseParameters(content) {
150
+ try {
151
+ const params = {};
152
+ const actions = [];
153
+
154
+ this.logger?.debug('CloneDetection tool parsing parameters', {
155
+ contentLength: content.length,
156
+ contentPreview: content.substring(0, 200)
157
+ });
158
+
159
+ // Extract self-closing <detect-clones> tags
160
+ const detectClonesPattern = /<detect-clones\s+(.+?)\/>/g;
161
+ let match;
162
+
163
+ while ((match = detectClonesPattern.exec(content)) !== null) {
164
+ const attributeString = match[1].trim();
165
+ const parser = new TagParser();
166
+ const attributes = parser.parseAttributes(attributeString);
167
+
168
+ const action = {
169
+ type: 'detect-clones',
170
+ ...attributes
171
+ };
172
+
173
+ // Normalize attribute names
174
+ if (action['min-tokens']) {
175
+ action.minTokens = parseInt(action['min-tokens'], 10);
176
+ delete action['min-tokens'];
177
+ }
178
+ if (action['min-lines']) {
179
+ action.minLines = parseInt(action['min-lines'], 10);
180
+ delete action['min-lines'];
181
+ }
182
+ if (action['similarity-threshold']) {
183
+ action.similarityThreshold = parseFloat(action['similarity-threshold']);
184
+ delete action['similarity-threshold'];
185
+ }
186
+ if (action['priority-filter']) {
187
+ action.priorityFilter = action['priority-filter'];
188
+ delete action['priority-filter'];
189
+ }
190
+ if (action['max-results']) {
191
+ action.maxResults = parseInt(action['max-results'], 10);
192
+ delete action['max-results'];
193
+ }
194
+ if (action['output-mode']) {
195
+ action.outputMode = action['output-mode'];
196
+ delete action['output-mode'];
197
+ }
198
+
199
+ actions.push(action);
200
+ }
201
+
202
+ params.actions = actions;
203
+ params.rawContent = content.trim();
204
+
205
+ this.logger?.debug('Parsed CloneDetection tool parameters', {
206
+ totalActions: actions.length,
207
+ actionTypes: actions.map(a => a.type)
208
+ });
209
+
210
+ return params;
211
+
212
+ } catch (error) {
213
+ throw new Error(`Failed to parse clone detection parameters: ${error.message}`);
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Get required parameters
219
+ * @returns {Array<string>} Array of required parameter names
220
+ */
221
+ getRequiredParameters() {
222
+ return ['actions'];
223
+ }
224
+
225
+ /**
226
+ * Custom parameter validation
227
+ * @param {Object} params - Parameters to validate
228
+ * @returns {Object} Validation result
229
+ */
230
+ customValidateParameters(params) {
231
+ const errors = [];
232
+
233
+ if (!params.actions || !Array.isArray(params.actions) || params.actions.length === 0) {
234
+ errors.push('At least one action is required');
235
+ } else {
236
+ // Validate each action
237
+ for (const [index, action] of params.actions.entries()) {
238
+ if (!action.type) {
239
+ errors.push(`Action ${index + 1}: type is required`);
240
+ continue;
241
+ }
242
+
243
+ if (action.type === 'detect-clones') {
244
+ if (!action.directory) {
245
+ errors.push(`Action ${index + 1}: directory is required for detect-clones`);
246
+ }
247
+
248
+ // Validate numeric parameters
249
+ if (action.minTokens !== undefined && (action.minTokens < 10 || action.minTokens > 1000)) {
250
+ errors.push(`Action ${index + 1}: min-tokens must be between 10 and 1000`);
251
+ }
252
+
253
+ if (action.minLines !== undefined && (action.minLines < 1 || action.minLines > 100)) {
254
+ errors.push(`Action ${index + 1}: min-lines must be between 1 and 100`);
255
+ }
256
+
257
+ if (action.similarityThreshold !== undefined &&
258
+ (action.similarityThreshold < 0.5 || action.similarityThreshold > 1.0)) {
259
+ errors.push(`Action ${index + 1}: similarity-threshold must be between 0.5 and 1.0`);
260
+ }
261
+
262
+ // Validate enum parameters
263
+ if (action.priorityFilter && !['high', 'medium', 'low'].includes(action.priorityFilter)) {
264
+ errors.push(`Action ${index + 1}: priority-filter must be high, medium, or low`);
265
+ }
266
+
267
+ if (action.outputMode && !['summary', 'detailed', 'recommendations'].includes(action.outputMode)) {
268
+ errors.push(`Action ${index + 1}: output-mode must be summary, detailed, or recommendations`);
269
+ }
270
+ } else {
271
+ errors.push(`Action ${index + 1}: unknown action type: ${action.type}`);
272
+ }
273
+ }
274
+ }
275
+
276
+ return {
277
+ valid: errors.length === 0,
278
+ errors
279
+ };
280
+ }
281
+
282
+ /**
283
+ * Execute tool with parsed parameters
284
+ * @param {Object} params - Parsed parameters
285
+ * @param {Object} context - Execution context
286
+ * @returns {Promise<Object>} Execution result
287
+ */
288
+ async execute(params, context) {
289
+ const { actions } = params;
290
+ const { projectDir, agentId, directoryAccess } = context;
291
+
292
+ // Get directory access configuration
293
+ const accessConfig = directoryAccess ||
294
+ this.directoryAccessManager.createDirectoryAccess({
295
+ workingDirectory: projectDir || process.cwd(),
296
+ writeEnabledDirectories: [],
297
+ readOnlyDirectories: [projectDir || process.cwd()],
298
+ restrictToProject: true
299
+ });
300
+
301
+ const workingDir = this.directoryAccessManager.getWorkingDirectory(accessConfig);
302
+ const results = [];
303
+
304
+ for (const action of actions) {
305
+ try {
306
+ if (action.type === 'detect-clones') {
307
+ const result = await this.detectClones(
308
+ action.directory,
309
+ workingDir,
310
+ accessConfig,
311
+ action
312
+ );
313
+ results.push(result);
314
+ } else {
315
+ throw new Error(`Unknown action type: ${action.type}`);
316
+ }
317
+
318
+ } catch (error) {
319
+ this.logger?.error('Clone detection action failed', {
320
+ action: action.type,
321
+ error: error.message
322
+ });
323
+
324
+ results.push({
325
+ directory: action.directory,
326
+ error: error.message,
327
+ success: false
328
+ });
329
+ }
330
+ }
331
+
332
+ return {
333
+ success: true,
334
+ results,
335
+ toolUsed: 'clonedetection'
336
+ };
337
+ }
338
+
339
+ /**
340
+ * Detect clones in directory
341
+ * @private
342
+ */
343
+ async detectClones(directory, workingDir, accessConfig, options = {}) {
344
+ const fullDir = path.isAbsolute(directory)
345
+ ? path.normalize(directory)
346
+ : path.resolve(workingDir, directory);
347
+
348
+ // Validate read access
349
+ const accessResult = this.directoryAccessManager.validateReadAccess(fullDir, accessConfig);
350
+ if (!accessResult.allowed) {
351
+ throw new Error(`Read access denied: ${accessResult.reason}`);
352
+ }
353
+
354
+ try {
355
+ // Get clone detector instance
356
+ const detector = await this.getCloneDetector();
357
+
358
+ // Prepare configuration
359
+ const config = {
360
+ minTokens: options.minTokens || this.defaultMinTokens,
361
+ minLines: options.minLines || this.defaultMinLines,
362
+ similarityThreshold: options.similarityThreshold || this.defaultSimilarityThreshold,
363
+ include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs', '**/*.ts', '**/*.tsx', '**/*.vue'],
364
+ exclude: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/*.test.js', '**/*.spec.js'],
365
+ maxFileSize: this.maxFileSize
366
+ };
367
+
368
+ this.logger?.info('Starting clone detection', {
369
+ directory: fullDir,
370
+ config
371
+ });
372
+
373
+ // Run clone detection (without output file)
374
+ const report = await detector.run(fullDir, null);
375
+
376
+ if (!report) {
377
+ return {
378
+ directory: this.directoryAccessManager.createRelativePath(fullDir, accessConfig),
379
+ fullPath: fullDir,
380
+ success: true,
381
+ summary: {
382
+ totalFiles: 0,
383
+ totalClones: 0,
384
+ duplicationPercentage: 0
385
+ },
386
+ clones: [],
387
+ message: 'No files found or no clones detected'
388
+ };
389
+ }
390
+
391
+ // Apply filters
392
+ let filteredClones = report.clones;
393
+
394
+ // Filter by priority
395
+ if (options.priorityFilter) {
396
+ filteredClones = filteredClones.filter(
397
+ clone => clone.refactoringAdvice.priority === options.priorityFilter
398
+ );
399
+ }
400
+
401
+ // Limit results
402
+ if (options.maxResults) {
403
+ filteredClones = filteredClones.slice(0, options.maxResults);
404
+ }
405
+
406
+ // Format output based on mode
407
+ const outputMode = options.outputMode || 'detailed';
408
+
409
+ if (outputMode === 'summary') {
410
+ return this.formatSummaryOutput(report, filteredClones, fullDir, accessConfig);
411
+ } else if (outputMode === 'recommendations') {
412
+ return this.formatRecommendationsOutput(report, filteredClones, fullDir, accessConfig);
413
+ } else {
414
+ return this.formatDetailedOutput(report, filteredClones, fullDir, accessConfig);
415
+ }
416
+
417
+ } catch (error) {
418
+ throw new Error(`Failed to detect clones in ${directory}: ${error.message}`);
419
+ }
420
+ }
421
+
422
+ /**
423
+ * Format summary output
424
+ * @private
425
+ */
426
+ formatSummaryOutput(report, clones, fullDir, accessConfig) {
427
+ return {
428
+ directory: this.directoryAccessManager.createRelativePath(fullDir, accessConfig),
429
+ fullPath: fullDir,
430
+ success: true,
431
+ outputMode: 'summary',
432
+ summary: {
433
+ totalFiles: report.summary.totalFiles,
434
+ totalClones: report.summary.totalClones,
435
+ duplicatedLines: report.summary.totalDuplicatedLines,
436
+ duplicationPercentage: report.summary.duplicationPercentage,
437
+ priorityCounts: report.summary.priorityCounts,
438
+ topClones: clones.slice(0, 5).map(clone => ({
439
+ id: clone.id,
440
+ type: clone.type,
441
+ confidence: clone.confidence,
442
+ instances: clone.metrics.instanceCount,
443
+ lines: clone.metrics.lineCount,
444
+ priority: clone.refactoringAdvice.priority,
445
+ strategy: clone.refactoringAdvice.strategy,
446
+ locations: clone.instances.map(i => `${i.file}:${i.startLine}-${i.endLine}`)
447
+ }))
448
+ }
449
+ };
450
+ }
451
+
452
+ /**
453
+ * Format recommendations output
454
+ * @private
455
+ */
456
+ formatRecommendationsOutput(report, clones, fullDir, accessConfig) {
457
+ return {
458
+ directory: this.directoryAccessManager.createRelativePath(fullDir, accessConfig),
459
+ fullPath: fullDir,
460
+ success: true,
461
+ outputMode: 'recommendations',
462
+ summary: {
463
+ totalFiles: report.summary.totalFiles,
464
+ totalClones: report.summary.totalClones,
465
+ duplicationPercentage: report.summary.duplicationPercentage
466
+ },
467
+ recommendations: clones.map(clone => ({
468
+ id: clone.id,
469
+ priority: clone.refactoringAdvice.priority,
470
+ strategy: clone.refactoringAdvice.strategy,
471
+ suggestedName: clone.refactoringAdvice.suggestedName,
472
+ reasoning: clone.refactoringAdvice.reasoning,
473
+ effort: clone.refactoringAdvice.estimatedEffort,
474
+ benefits: clone.refactoringAdvice.benefits,
475
+ steps: clone.refactoringAdvice.actionableSteps,
476
+ metrics: {
477
+ instances: clone.metrics.instanceCount,
478
+ lines: clone.metrics.lineCount,
479
+ files: clone.metrics.filesCovered,
480
+ impact: clone.metrics.impactScore
481
+ },
482
+ locations: clone.instances.map(i => ({
483
+ file: i.file,
484
+ startLine: i.startLine,
485
+ endLine: i.endLine
486
+ }))
487
+ }))
488
+ };
489
+ }
490
+
491
+ /**
492
+ * Format detailed output
493
+ * @private
494
+ */
495
+ formatDetailedOutput(report, clones, fullDir, accessConfig) {
496
+ return {
497
+ directory: this.directoryAccessManager.createRelativePath(fullDir, accessConfig),
498
+ fullPath: fullDir,
499
+ success: true,
500
+ outputMode: 'detailed',
501
+ summary: report.summary,
502
+ clones: clones.map(clone => ({
503
+ ...clone,
504
+ // Truncate code snippets for agent readability
505
+ instances: clone.instances.map(instance => ({
506
+ ...instance,
507
+ code: instance.code.split('\n').slice(0, 10).join('\n') +
508
+ (instance.code.split('\n').length > 10 ? '\n... (truncated)' : '')
509
+ }))
510
+ }))
511
+ };
512
+ }
513
+
514
+ /**
515
+ * Get clone detector instance (lazy initialization)
516
+ * @private
517
+ */
518
+ async getCloneDetector() {
519
+ if (!this.cloneDetector) {
520
+ const { CloneDetectionTool } = await import('../analyzers/codeCloneDetector/index.js');
521
+
522
+ const config = {
523
+ minTokens: this.defaultMinTokens,
524
+ minLines: this.defaultMinLines,
525
+ similarityThreshold: this.defaultSimilarityThreshold,
526
+ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx', '**/*.vue'],
527
+ exclude: ['**/node_modules/**', '**/dist/**', '**/build/**'],
528
+ maxFileSize: this.maxFileSize
529
+ };
530
+
531
+ this.cloneDetector = new CloneDetectionTool(config);
532
+ this.logger?.debug('Clone detector initialized', { config });
533
+ }
534
+
535
+ return this.cloneDetector;
536
+ }
537
+
538
+ /**
539
+ * Get supported actions for this tool
540
+ * @returns {Array<string>} Array of supported action names
541
+ */
542
+ getSupportedActions() {
543
+ return ['detect-clones'];
544
+ }
545
+
546
+ /**
547
+ * Get parameter schema for validation
548
+ * @returns {Object} Parameter schema
549
+ */
550
+ getParameterSchema() {
551
+ return {
552
+ type: 'object',
553
+ properties: {
554
+ actions: {
555
+ type: 'array',
556
+ minItems: 1,
557
+ items: {
558
+ type: 'object',
559
+ properties: {
560
+ type: {
561
+ type: 'string',
562
+ enum: this.getSupportedActions()
563
+ },
564
+ directory: { type: 'string' },
565
+ minTokens: { type: 'number', minimum: 10, maximum: 1000 },
566
+ minLines: { type: 'number', minimum: 1, maximum: 100 },
567
+ similarityThreshold: { type: 'number', minimum: 0.5, maximum: 1.0 },
568
+ priorityFilter: { type: 'string', enum: ['high', 'medium', 'low'] },
569
+ maxResults: { type: 'number', minimum: 1 },
570
+ outputMode: { type: 'string', enum: ['summary', 'detailed', 'recommendations'] }
571
+ },
572
+ required: ['type', 'directory']
573
+ }
574
+ }
575
+ },
576
+ required: ['actions']
577
+ };
578
+ }
579
+ }
580
+
581
+ export default CloneDetectionTool;