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,887 @@
1
+ /**
2
+ * BaseTool - Abstract base class for all tools in the Loxia AI Agents System
3
+ *
4
+ * Purpose:
5
+ * - Define standardized tool interface
6
+ * - Provide common tool functionality
7
+ * - Handle parameter validation
8
+ * - Manage tool execution lifecycle
9
+ * - Support both sync and async operations
10
+ */
11
+
12
+ import {
13
+ TOOL_STATUS,
14
+ OPERATION_STATUS,
15
+ ERROR_TYPES,
16
+ SYSTEM_DEFAULTS
17
+ } from '../utilities/constants.js';
18
+
19
+ class BaseTool {
20
+ constructor(config = {}, logger = null) {
21
+ this.id = this.constructor.name.toLowerCase().replace('tool', '');
22
+ this.config = config;
23
+ this.logger = logger;
24
+
25
+ // Tool capabilities
26
+ this.requiresProject = false;
27
+ this.isAsync = false;
28
+ this.timeout = config.timeout || SYSTEM_DEFAULTS.MAX_TOOL_EXECUTION_TIME;
29
+ this.maxConcurrentOperations = config.maxConcurrentOperations || 1;
30
+
31
+ // Built-in delay (ms) after tool execution before agent continues
32
+ // Most tools: 0 (no delay), WebTool: 1000ms (allow browser operations to complete)
33
+ this.builtinDelay = 0;
34
+
35
+ // Operation tracking
36
+ this.activeOperations = new Map();
37
+ this.operationHistory = [];
38
+
39
+ // Tool state
40
+ this.isEnabled = config.enabled !== false;
41
+ this.lastUsed = null;
42
+ this.usageCount = 0;
43
+ }
44
+
45
+ /**
46
+ * Get tool description for LLM consumption
47
+ * Must be implemented by subclasses
48
+ * @returns {string} Tool description
49
+ */
50
+ getDescription() {
51
+ throw new Error(`Tool ${this.id} must implement getDescription()`);
52
+ }
53
+
54
+ /**
55
+ * Get a one-line summary of the tool for compact/layered prompts.
56
+ * Auto-extracts the first non-empty line from getDescription().
57
+ * @returns {string} Brief tool summary
58
+ */
59
+ getSummary() {
60
+ try {
61
+ const desc = this.getDescription();
62
+ const firstLine = desc.split('\n').find(l => l.trim().length > 0);
63
+ return firstLine ? firstLine.trim() : `${this.id} tool`;
64
+ } catch {
65
+ return `${this.id} tool`;
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Parse parameters from tool command content
71
+ * Must be implemented by subclasses
72
+ * @param {string} content - Raw tool command content
73
+ * @returns {Object} Parsed parameters object
74
+ */
75
+ parseParameters(content) {
76
+ throw new Error(`Tool ${this.id} must implement parseParameters()`);
77
+ }
78
+
79
+ /**
80
+ * Execute tool with parsed parameters
81
+ * Must be implemented by subclasses
82
+ * @param {Object} params - Parsed parameters
83
+ * @param {Object} context - Execution context
84
+ * @returns {Promise<*>} Execution result
85
+ */
86
+ async execute(params, context) {
87
+ throw new Error(`Tool ${this.id} must implement execute()`);
88
+ }
89
+
90
+ /**
91
+ * Get tool capabilities metadata
92
+ * @returns {Object} Capabilities object
93
+ */
94
+ getCapabilities() {
95
+ return {
96
+ id: this.id,
97
+ async: this.isAsync,
98
+ requiresProject: this.requiresProject,
99
+ builtinDelay: this.builtinDelay,
100
+ timeout: this.timeout,
101
+ maxConcurrentOperations: this.maxConcurrentOperations,
102
+ enabled: this.isEnabled,
103
+ supportedActions: this.getSupportedActions(),
104
+ parameterSchema: this.getParameterSchema()
105
+ };
106
+ }
107
+
108
+ /**
109
+ * Validate tool parameters
110
+ * Can be overridden by subclasses for custom validation
111
+ * @param {Object} params - Parameters to validate
112
+ * @returns {Object} Validation result with valid flag and error message
113
+ */
114
+ validateParameters(params) {
115
+ try {
116
+ if (!params || typeof params !== 'object') {
117
+ return {
118
+ valid: false,
119
+ error: 'Parameters must be an object'
120
+ };
121
+ }
122
+
123
+ // Check required parameters
124
+ const requiredParams = this.getRequiredParameters();
125
+ for (const required of requiredParams) {
126
+ if (!(required in params)) {
127
+ return {
128
+ valid: false,
129
+ error: `Missing required parameter: ${required}`
130
+ };
131
+ }
132
+ }
133
+
134
+ // Validate parameter types
135
+ const typeValidation = this.validateParameterTypes(params);
136
+ if (!typeValidation.valid) {
137
+ return typeValidation;
138
+ }
139
+
140
+ // Custom validation
141
+ const customValidation = this.customValidateParameters(params);
142
+ if (!customValidation.valid) {
143
+ return customValidation;
144
+ }
145
+
146
+ return { valid: true };
147
+
148
+ } catch (error) {
149
+ return {
150
+ valid: false,
151
+ error: `Parameter validation failed: ${error.message}`
152
+ };
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Execute tool with full lifecycle management
158
+ * @param {Object} params - Tool parameters
159
+ * @param {Object} context - Execution context
160
+ * @returns {Promise<Object>} Execution result with metadata
161
+ */
162
+ async executeWithLifecycle(params, context) {
163
+ const operationId = this.generateOperationId();
164
+ const startTime = Date.now();
165
+
166
+ // Check if tool is enabled
167
+ if (!this.isEnabled) {
168
+ throw new Error(`Tool ${this.id} is disabled`);
169
+ }
170
+
171
+ // Check concurrent operation limits
172
+ if (this.activeOperations.size >= this.maxConcurrentOperations) {
173
+ throw new Error(`Tool ${this.id} has reached maximum concurrent operations limit`);
174
+ }
175
+
176
+ // Validate parameters
177
+ const validation = this.validateParameters(params);
178
+ if (!validation.valid) {
179
+ throw new Error(`Parameter validation failed: ${validation.error}`);
180
+ }
181
+
182
+ // Create operation record
183
+ const operation = {
184
+ id: operationId,
185
+ toolId: this.id,
186
+ status: TOOL_STATUS.EXECUTING,
187
+ startTime: new Date().toISOString(),
188
+ params,
189
+ context: this.sanitizeContext(context)
190
+ };
191
+
192
+ this.activeOperations.set(operationId, operation);
193
+
194
+ try {
195
+ this.logger?.info(`Tool execution started: ${this.id}`, {
196
+ operationId,
197
+ toolId: this.id,
198
+ context: operation.context
199
+ });
200
+
201
+ // Execute with timeout
202
+ const result = await this.executeWithTimeout(params, context);
203
+
204
+ // Update operation status
205
+ operation.status = TOOL_STATUS.COMPLETED;
206
+ operation.result = result;
207
+ operation.endTime = new Date().toISOString();
208
+ operation.executionTime = Date.now() - startTime;
209
+
210
+ // Update tool statistics
211
+ this.lastUsed = new Date().toISOString();
212
+ this.usageCount++;
213
+
214
+ this.logger?.info(`Tool execution completed: ${this.id}`, {
215
+ operationId,
216
+ executionTime: operation.executionTime,
217
+ success: true
218
+ });
219
+
220
+ return {
221
+ success: true,
222
+ operationId,
223
+ result,
224
+ executionTime: operation.executionTime,
225
+ toolId: this.id
226
+ };
227
+
228
+ } catch (error) {
229
+ // Update operation status
230
+ operation.status = TOOL_STATUS.FAILED;
231
+ operation.error = error.message;
232
+ operation.endTime = new Date().toISOString();
233
+ operation.executionTime = Date.now() - startTime;
234
+
235
+ this.logger?.error(`Tool execution failed: ${this.id}`, {
236
+ operationId,
237
+ error: error.message,
238
+ executionTime: operation.executionTime
239
+ });
240
+
241
+ throw error;
242
+
243
+ } finally {
244
+ // Move to history and cleanup
245
+ this.operationHistory.push({ ...operation });
246
+ this.activeOperations.delete(operationId);
247
+
248
+ // Cleanup old history entries
249
+ this.cleanupHistory();
250
+
251
+ // Perform tool-specific cleanup
252
+ await this.cleanup(operationId);
253
+ }
254
+ }
255
+
256
+ /**
257
+ * Get status of async operation
258
+ * @param {string} operationId - Operation identifier
259
+ * @returns {Promise<Object>} Operation status
260
+ */
261
+ async getStatus(operationId) {
262
+ const operation = this.activeOperations.get(operationId);
263
+
264
+ if (!operation) {
265
+ // Check history
266
+ const historyEntry = this.operationHistory.find(op => op.id === operationId);
267
+ if (historyEntry) {
268
+ return {
269
+ operationId,
270
+ status: historyEntry.status,
271
+ result: historyEntry.result,
272
+ error: historyEntry.error,
273
+ executionTime: historyEntry.executionTime
274
+ };
275
+ }
276
+
277
+ return {
278
+ operationId,
279
+ status: OPERATION_STATUS.NOT_FOUND,
280
+ error: 'Operation not found'
281
+ };
282
+ }
283
+
284
+ return {
285
+ operationId,
286
+ status: operation.status,
287
+ startTime: operation.startTime,
288
+ executionTime: operation.endTime ?
289
+ new Date(operation.endTime).getTime() - new Date(operation.startTime).getTime() :
290
+ Date.now() - new Date(operation.startTime).getTime()
291
+ };
292
+ }
293
+
294
+ /**
295
+ * Resource cleanup after tool execution
296
+ * Can be overridden by subclasses
297
+ * @param {string} operationId - Operation identifier
298
+ * @returns {Promise<void>}
299
+ */
300
+ async cleanup(operationId) {
301
+ // Default implementation - no cleanup needed
302
+ }
303
+
304
+ /**
305
+ * Get supported actions for this tool
306
+ * Can be overridden by subclasses
307
+ * @returns {Array<string>} Array of supported action names
308
+ */
309
+ getSupportedActions() {
310
+ return ['execute'];
311
+ }
312
+
313
+ /**
314
+ * Get parameter schema for validation
315
+ * Can be overridden by subclasses
316
+ * @returns {Object} Parameter schema
317
+ */
318
+ getParameterSchema() {
319
+ return {
320
+ type: 'object',
321
+ properties: {},
322
+ required: []
323
+ };
324
+ }
325
+
326
+ /**
327
+ * Get required parameters
328
+ * Can be overridden by subclasses
329
+ * @returns {Array<string>} Array of required parameter names
330
+ */
331
+ getRequiredParameters() {
332
+ return [];
333
+ }
334
+
335
+ /**
336
+ * Validate parameter types
337
+ * Can be overridden by subclasses
338
+ * @param {Object} params - Parameters to validate
339
+ * @returns {Object} Validation result
340
+ */
341
+ validateParameterTypes(params) {
342
+ // Default implementation - all parameters are valid
343
+ return { valid: true };
344
+ }
345
+
346
+ /**
347
+ * Custom parameter validation
348
+ * Can be overridden by subclasses
349
+ * @param {Object} params - Parameters to validate
350
+ * @returns {Object} Validation result
351
+ */
352
+ customValidateParameters(params) {
353
+ // Default implementation - no custom validation
354
+ return { valid: true };
355
+ }
356
+
357
+ /**
358
+ * Execute tool with timeout protection
359
+ * @private
360
+ */
361
+ async executeWithTimeout(params, context) {
362
+ return new Promise(async (resolve, reject) => {
363
+ const timeoutId = setTimeout(() => {
364
+ reject(new Error(`Tool execution timed out after ${this.timeout}ms`));
365
+ }, this.timeout);
366
+
367
+ try {
368
+ const result = await this.execute(params, context);
369
+ clearTimeout(timeoutId);
370
+ resolve(result);
371
+ } catch (error) {
372
+ clearTimeout(timeoutId);
373
+ reject(error);
374
+ }
375
+ });
376
+ }
377
+
378
+ /**
379
+ * Generate unique operation ID
380
+ * @private
381
+ */
382
+ generateOperationId() {
383
+ return `${this.id}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
384
+ }
385
+
386
+ /**
387
+ * Sanitize context for logging
388
+ * @private
389
+ */
390
+ sanitizeContext(context) {
391
+ const sanitized = { ...context };
392
+
393
+ // Remove sensitive information
394
+ delete sanitized.apiKeys;
395
+ delete sanitized.secrets;
396
+ delete sanitized.passwords;
397
+
398
+ // Truncate large content
399
+ if (sanitized.content && sanitized.content.length > 500) {
400
+ sanitized.content = sanitized.content.substring(0, 500) + '... [truncated]';
401
+ }
402
+
403
+ return sanitized;
404
+ }
405
+
406
+ /**
407
+ * Cleanup old history entries
408
+ * @private
409
+ */
410
+ cleanupHistory() {
411
+ const maxHistoryEntries = 100;
412
+ if (this.operationHistory.length > maxHistoryEntries) {
413
+ this.operationHistory = this.operationHistory.slice(-maxHistoryEntries);
414
+ }
415
+ }
416
+
417
+ /**
418
+ * Get tool usage statistics
419
+ * @returns {Object} Usage statistics
420
+ */
421
+ getUsageStats() {
422
+ return {
423
+ toolId: this.id,
424
+ usageCount: this.usageCount,
425
+ lastUsed: this.lastUsed,
426
+ activeOperations: this.activeOperations.size,
427
+ totalOperations: this.operationHistory.length,
428
+ averageExecutionTime: this.calculateAverageExecutionTime(),
429
+ successRate: this.calculateSuccessRate(),
430
+ isEnabled: this.isEnabled
431
+ };
432
+ }
433
+
434
+ /**
435
+ * Calculate average execution time
436
+ * @private
437
+ */
438
+ calculateAverageExecutionTime() {
439
+ const completedOps = this.operationHistory.filter(op =>
440
+ op.status === TOOL_STATUS.COMPLETED && op.executionTime
441
+ );
442
+
443
+ if (completedOps.length === 0) return 0;
444
+
445
+ const totalTime = completedOps.reduce((sum, op) => sum + op.executionTime, 0);
446
+ return Math.round(totalTime / completedOps.length);
447
+ }
448
+
449
+ /**
450
+ * Calculate success rate
451
+ * @private
452
+ */
453
+ calculateSuccessRate() {
454
+ if (this.operationHistory.length === 0) return 0;
455
+
456
+ const successfulOps = this.operationHistory.filter(op =>
457
+ op.status === TOOL_STATUS.COMPLETED
458
+ );
459
+
460
+ return (successfulOps.length / this.operationHistory.length) * 100;
461
+ }
462
+
463
+ /**
464
+ * Enable tool
465
+ */
466
+ enable() {
467
+ this.isEnabled = true;
468
+ this.logger?.info(`Tool enabled: ${this.id}`);
469
+ }
470
+
471
+ /**
472
+ * Disable tool
473
+ */
474
+ disable() {
475
+ this.isEnabled = false;
476
+ this.logger?.info(`Tool disabled: ${this.id}`);
477
+ }
478
+
479
+ /**
480
+ * Reset tool statistics
481
+ */
482
+ resetStats() {
483
+ this.usageCount = 0;
484
+ this.lastUsed = null;
485
+ this.operationHistory = [];
486
+ this.logger?.info(`Tool statistics reset: ${this.id}`);
487
+ }
488
+ }
489
+
490
+ /**
491
+ * ToolsRegistry - Manages registration and discovery of tools
492
+ */
493
+ class ToolsRegistry {
494
+ constructor(logger = null) {
495
+ this.logger = logger;
496
+ this.tools = new Map();
497
+ this.toolDescriptions = new Map();
498
+ this.toolSummaries = new Map();
499
+ this.toolCapabilities = new Map();
500
+ this.asyncOperations = new Map();
501
+ }
502
+
503
+ /**
504
+ * Register a tool class
505
+ * @param {Class} toolClass - Tool class to register
506
+ * @returns {Promise<void>}
507
+ */
508
+ async registerTool(toolClass) {
509
+ try {
510
+ const tool = new toolClass();
511
+
512
+ if (!(tool instanceof BaseTool)) {
513
+ throw new Error(`Tool ${toolClass.name} must extend BaseTool`);
514
+ }
515
+
516
+ const capabilities = tool.getCapabilities();
517
+
518
+ // Validate tool implementation
519
+ await this.validateTool(tool);
520
+
521
+ this.tools.set(tool.id, tool);
522
+ this.toolDescriptions.set(tool.id, tool.getDescription());
523
+ this.toolSummaries.set(tool.id, tool.getSummary());
524
+ this.toolCapabilities.set(tool.id, capabilities);
525
+
526
+ this.logger?.info(`Tool registered: ${tool.id}`, {
527
+ capabilities: capabilities.supportedActions,
528
+ async: capabilities.async,
529
+ requiresProject: capabilities.requiresProject
530
+ });
531
+
532
+ } catch (error) {
533
+ this.logger?.error(`Tool registration failed: ${error.message}`, {
534
+ toolClass: toolClass.name
535
+ });
536
+ throw error;
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Auto-discover tools in directory
542
+ * @param {string} directory - Directory path to scan
543
+ * @returns {Promise<number>} Number of tools discovered
544
+ */
545
+ async discoverTools(directory) {
546
+ // Implementation would scan directory for tool files
547
+ // For now, return 0
548
+ return 0;
549
+ }
550
+
551
+ /**
552
+ * Validate tool implementation
553
+ * @param {BaseTool} tool - Tool instance to validate
554
+ * @returns {Promise<void>}
555
+ */
556
+ async validateTool(tool) {
557
+ // Check required methods
558
+ const requiredMethods = ['getDescription', 'parseParameters', 'execute'];
559
+
560
+ for (const method of requiredMethods) {
561
+ if (typeof tool[method] !== 'function') {
562
+ throw new Error(`Tool ${tool.id} missing required method: ${method}`);
563
+ }
564
+ }
565
+
566
+ // Test parameter parsing
567
+ try {
568
+ const testParams = tool.parseParameters('test content');
569
+ if (typeof testParams !== 'object') {
570
+ throw new Error(`Tool ${tool.id} parseParameters must return an object`);
571
+ }
572
+ } catch (error) {
573
+ // Parsing may fail for test content, that's okay
574
+ }
575
+
576
+ // Validate capabilities
577
+ const capabilities = tool.getCapabilities();
578
+ if (!capabilities || typeof capabilities !== 'object') {
579
+ throw new Error(`Tool ${tool.id} getCapabilities must return an object`);
580
+ }
581
+ }
582
+
583
+ /**
584
+ * Get tool by ID
585
+ * @param {string} toolId - Tool identifier
586
+ * @returns {BaseTool|null} Tool instance or null
587
+ */
588
+ getTool(toolId) {
589
+ return this.tools.get(toolId) || null;
590
+ }
591
+
592
+ /**
593
+ * Get all tool capabilities for LLM consumption
594
+ * @returns {Object} All tool capabilities
595
+ */
596
+ getToolCapabilities() {
597
+ const capabilities = {};
598
+
599
+ for (const [toolId, tool] of this.tools.entries()) {
600
+ if (tool.isEnabled) {
601
+ capabilities[toolId] = {
602
+ description: this.toolDescriptions.get(toolId),
603
+ capabilities: this.toolCapabilities.get(toolId),
604
+ usageStats: tool.getUsageStats()
605
+ };
606
+ }
607
+ }
608
+
609
+ return capabilities;
610
+ }
611
+
612
+ /**
613
+ * Execute tool securely with validation
614
+ * @param {string} toolId - Tool identifier
615
+ * @param {Object} params - Tool parameters
616
+ * @param {Object} context - Execution context
617
+ * @returns {Promise<*>} Execution result
618
+ */
619
+ async executeToolSecurely(toolId, params, context) {
620
+ const tool = this.getTool(toolId);
621
+ if (!tool) {
622
+ throw new Error(`Tool not found: ${toolId}`);
623
+ }
624
+
625
+ if (!tool.isEnabled) {
626
+ throw new Error(`Tool is disabled: ${toolId}`);
627
+ }
628
+
629
+ return await tool.executeWithLifecycle(params, context);
630
+ }
631
+
632
+ /**
633
+ * List all registered tools
634
+ * @returns {Array<string>} Array of tool IDs
635
+ */
636
+ listTools() {
637
+ return Array.from(this.tools.keys());
638
+ }
639
+
640
+ /**
641
+ * Generate comprehensive tool descriptions for agent system prompts
642
+ * @param {Array<string>} capabilities - Specific tool IDs to include (empty = all)
643
+ * @param {Object} options - Generation options
644
+ * @returns {string} Formatted tool descriptions section
645
+ */
646
+ generateToolDescriptionsForPrompt(capabilities = [], options = {}) {
647
+ const {
648
+ includeExamples = true,
649
+ includeUsageGuidelines = true,
650
+ includeSecurityNotes = true,
651
+ compact = false,
652
+ layered = false
653
+ } = options;
654
+
655
+ // Get tools to include — always inject 'help' so agents can query tool docs
656
+ let toolIds = capabilities.length > 0
657
+ ? capabilities.filter(cap => this.tools.has(cap))
658
+ : Array.from(this.tools.keys());
659
+
660
+ if (!toolIds.includes('help') && this.tools.has('help')) {
661
+ toolIds.push('help');
662
+ }
663
+
664
+ if (toolIds.length === 0) {
665
+ return '';
666
+ }
667
+
668
+ let description = '';
669
+
670
+ // === LAYERED MODE: Compact index + help tool guidance ===
671
+ if (layered) {
672
+ description += '\n## AVAILABLE TOOLS\n\n';
673
+ description += 'You have access to the following tools. Use the **help** tool to get full documentation before first use of any tool.\n\n';
674
+
675
+ for (const toolId of toolIds) {
676
+ const tool = this.tools.get(toolId);
677
+ if (!tool || !tool.isEnabled) continue;
678
+ const summary = this.toolSummaries.get(toolId) || `${toolId} tool`;
679
+ description += `- **${toolId}**: ${summary}\n`;
680
+ }
681
+
682
+ // Always include help tool in the list even if not in capabilities
683
+ if (!toolIds.includes('help') && this.tools.has('help')) {
684
+ const helpSummary = this.toolSummaries.get('help') || 'Get full documentation for any tool';
685
+ description += `- **help**: ${helpSummary}\n`;
686
+ }
687
+
688
+ description += '\n## HOW TO GET TOOL DOCUMENTATION\n\n';
689
+ description += 'Before using a tool for the first time, retrieve its full documentation:\n\n';
690
+ description += '```json\n';
691
+ description += '{\n';
692
+ description += ' "toolId": "help",\n';
693
+ description += ' "parameters": { "tool": "toolname" }\n';
694
+ description += '}\n';
695
+ description += '```\n\n';
696
+ description += 'To list all available tools with summaries:\n';
697
+ description += '```json\n';
698
+ description += '{\n';
699
+ description += ' "toolId": "help",\n';
700
+ description += ' "parameters": { "list": true }\n';
701
+ description += '}\n';
702
+ description += '```\n\n';
703
+
704
+ } else {
705
+ // === STANDARD MODE: Full descriptions ===
706
+ description += '\n## AVAILABLE TOOLS\n\n';
707
+ description += 'You have access to the following tools to perform operations and tasks:\n\n';
708
+
709
+ for (const toolId of toolIds) {
710
+ const tool = this.tools.get(toolId);
711
+ if (!tool || !tool.isEnabled) continue;
712
+
713
+ try {
714
+ if (compact) {
715
+ // Compact format - just tool name and brief description
716
+ const caps = tool.getCapabilities();
717
+ const actions = caps.supportedActions || ['execute'];
718
+ description += `**${toolId}**: ${actions.join(', ')}\n`;
719
+ } else {
720
+ // Full format - complete tool description
721
+ description += `### ${toolId.toUpperCase()} TOOL\n\n`;
722
+ description += tool.getDescription();
723
+ description += '\n\n---\n\n';
724
+ }
725
+ } catch (error) {
726
+ this.logger?.warn(`Failed to get description for tool: ${toolId}`, {
727
+ error: error.message
728
+ });
729
+ }
730
+ }
731
+
732
+ if (compact) {
733
+ description += '\nUse JSON format in markdown code blocks to invoke tools.\n\n';
734
+ }
735
+ }
736
+
737
+ // Add comprehensive tool invocation instructions - JSON as the standard format
738
+ description += '## TOOL INVOCATION SYNTAX\n\n';
739
+ description += '**IMPORTANT**: Use JSON format in markdown code blocks to invoke tools:\n\n';
740
+ description += '### Standard Format: JSON in Markdown Code Block\n';
741
+ description += '```\n';
742
+ description += '```json\n';
743
+ description += '{\n';
744
+ description += ' "toolId": "toolname",\n';
745
+ description += ' "parameters": { ... }\n';
746
+ description += '}\n';
747
+ description += '```\n';
748
+ description += '```\n\n';
749
+ description += '**Rules:**\n';
750
+ description += '- Always wrap JSON tool commands in ```json ... ``` blocks\n';
751
+ description += '- Use "toolId" to specify the tool name\n';
752
+ description += '- Use "parameters" object for tool-specific parameters\n';
753
+ description += '- Use "actions" array for tools that support multiple operations\n';
754
+ description += '- **TOOL RESULTS ARE AVAILABLE ONLY AFTER YOUR MESSAGE ENDS**: Tools execute after your entire message is sent. You will NOT see any tool results until your next turn. This means: if the next tool call depends on results from a previous one, they MUST be in separate messages. You may batch independent tool calls in a single message, but never assume or guess the output of a tool — always wait for the actual result in the next turn before proceeding.\n\n';
755
+ description += 'After invoking a tool, WAIT for the actual response. Do NOT generate imaginary responses.\n\n';
756
+
757
+ // Add exploration strategy if code-map is available
758
+ if (toolIds.includes('code-map')) {
759
+ description += '## CODE EXPLORATION STRATEGY\n\n';
760
+ description += 'When exploring or understanding code, prefer this efficient workflow over reading entire files:\n\n';
761
+ description += '1. **Discover structure** — Use `file-tree` to see the project layout\n';
762
+ description += '2. **Understand code** — Use `code-map` skeleton to extract signatures, classes, and functions with line numbers\n';
763
+ description += '3. **Zoom in** — Use `code-map` read-range to read only the specific lines you need\n';
764
+ description += '4. **Search** — Use `seek` to find specific terms, then `code-map` read-range to view context around matches\n\n';
765
+ description += 'This avoids wasting context on entire file reads. Reserve `filesystem` read for small files or when you need the complete content.\n';
766
+ }
767
+
768
+ return description;
769
+ }
770
+
771
+ /**
772
+ * Enhance existing system prompt with tool descriptions
773
+ * @param {string} existingPrompt - Current system prompt
774
+ * @param {Array<string>} capabilities - Agent capabilities
775
+ * @param {Object} options - Enhancement options
776
+ * @returns {string} Enhanced system prompt
777
+ */
778
+ enhanceSystemPrompt(existingPrompt, capabilities = [], options = {}) {
779
+ const toolSection = this.generateToolDescriptionsForPrompt(capabilities, options);
780
+
781
+ if (!toolSection.trim()) {
782
+ return existingPrompt || '';
783
+ }
784
+
785
+ const prompt = existingPrompt || '';
786
+
787
+ // If prompt already contains tool section, replace it
788
+ if (prompt.includes('## AVAILABLE TOOLS')) {
789
+ return prompt.replace(
790
+ /## AVAILABLE TOOLS[\s\S]*?(?=##|$)/,
791
+ toolSection + '\n'
792
+ );
793
+ }
794
+
795
+ const orientationParagraph = `IMPORTANT: Tools execute only after your full message is sent — you cannot see results mid-message. If a tool call depends on the result of another, put them in separate messages. You may batch independent tool calls in one message. Never guess or fabricate tool output — always wait for actual results before continuing.`;
796
+
797
+ // Otherwise, append to the end
798
+ return prompt + (prompt.endsWith('\n') ? '' : '\n') + toolSection + orientationParagraph + '\n';
799
+ }
800
+
801
+ /**
802
+ * Get available tools with metadata for web UI
803
+ * @returns {Array} Array of tool information objects
804
+ */
805
+ getAvailableToolsForUI() {
806
+ const tools = [];
807
+
808
+ for (const [toolId, tool] of this.tools.entries()) {
809
+ const capabilities = tool.getCapabilities();
810
+
811
+ // Extract tool name and description from the tool's description
812
+ const fullDescription = tool.getDescription();
813
+ const firstLine = fullDescription.split('\n').find(line => line.trim().length > 0) || '';
814
+ const toolName = firstLine.replace(/^.*Tool:\s*/i, '').replace(/\s*-.*$/, '').trim();
815
+
816
+ tools.push({
817
+ id: toolId, // This is the correct ID to use in capabilities
818
+ name: toolName || toolId.charAt(0).toUpperCase() + toolId.slice(1),
819
+ description: firstLine,
820
+ category: this._getToolCategory(toolId),
821
+ enabled: capabilities.enabled,
822
+ async: capabilities.async,
823
+ requiresProject: capabilities.requiresProject,
824
+ className: tool.constructor.name
825
+ });
826
+ }
827
+
828
+ return tools.sort((a, b) => a.name.localeCompare(b.name));
829
+ }
830
+
831
+ /**
832
+ * Get tool category for organization
833
+ * @param {string} toolId - Tool identifier
834
+ * @returns {string} Tool category
835
+ * @private
836
+ */
837
+ _getToolCategory(toolId) {
838
+ const categories = {
839
+ 'terminal': 'System',
840
+ 'filesystem': 'File Operations',
841
+ 'file-content-replace': 'File Operations',
842
+ 'seek': 'File Operations',
843
+ 'file-tree': 'File Operations',
844
+ 'pdf': 'File Operations',
845
+ 'web': 'Automation',
846
+ 'visual-editor': 'Automation',
847
+ 'staticanalysis': 'Analysis',
848
+ 'clonedetection': 'Analysis',
849
+ 'import-analyzer': 'Analysis',
850
+ 'dependency-resolver': 'Analysis',
851
+ 'image-gen': 'AI Tools',
852
+ // TODO: Re-enable once Sora replacement is available
853
+ // 'video-gen': 'AI Tools',
854
+ 'taskmanager': 'Utility',
855
+ 'jobdone': 'Utility',
856
+ 'agentdelay': 'Utility',
857
+ 'agentcommunication': 'Collaboration',
858
+ 'help': 'System',
859
+ 'doc': 'File Operations',
860
+ 'spreadsheet': 'File Operations',
861
+ 'whatsapp': 'Communication',
862
+ 'skills': 'Knowledge',
863
+ 'vision': 'AI Tools'
864
+ };
865
+
866
+ return categories[toolId] || 'Other';
867
+ }
868
+
869
+ /**
870
+ * Get registry statistics
871
+ * @returns {Object} Registry statistics
872
+ */
873
+ getRegistryStats() {
874
+ const enabledTools = Array.from(this.tools.values()).filter(tool => tool.isEnabled);
875
+ const totalOperations = Array.from(this.tools.values())
876
+ .reduce((sum, tool) => sum + tool.usageCount, 0);
877
+
878
+ return {
879
+ totalTools: this.tools.size,
880
+ enabledTools: enabledTools.length,
881
+ totalOperations,
882
+ activeOperations: this.asyncOperations.size
883
+ };
884
+ }
885
+ }
886
+
887
+ export { BaseTool, ToolsRegistry };