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,547 @@
1
+ /**
2
+ * File Attachment Service
3
+ * Manages file attachments for agents with CRUD operations and reference counting
4
+ *
5
+ * UPDATED: Attachments are now stored in a platform-appropriate user data directory
6
+ * that persists across npm package updates. See userDataDir.js for details.
7
+ */
8
+
9
+ import path from 'path';
10
+ import { randomUUID } from 'crypto';
11
+ import FileProcessor from '../utilities/fileProcessor.js';
12
+ import AttachmentValidator from '../utilities/attachmentValidator.js';
13
+ import { getUserDataPaths } from '../utilities/userDataDir.js';
14
+
15
+ // UPDATED: Use persistent user data directory instead of cwd-relative path
16
+ // This ensures attachments survive npm package updates (npm i -g)
17
+ const userPaths = getUserDataPaths();
18
+ const ATTACHMENTS_DIR = userPaths.attachments;
19
+ const INDEX_FILE = path.join(ATTACHMENTS_DIR, 'attachments-index.json');
20
+
21
+ class FileAttachmentService {
22
+ constructor(config = {}, logger = null) {
23
+ this.config = config;
24
+ this.logger = logger;
25
+ this.fileProcessor = new FileProcessor(config, logger);
26
+ this.validator = new AttachmentValidator(config, logger);
27
+ this.index = null; // Lazy loaded
28
+ }
29
+
30
+ /**
31
+ * Initialize service (create directories, load index)
32
+ * @returns {Promise<void>}
33
+ */
34
+ async initialize() {
35
+ try {
36
+ await this.fileProcessor.createDirectory(ATTACHMENTS_DIR);
37
+ await this.loadIndex();
38
+ this.logger?.info('FileAttachmentService initialized', { attachmentsDir: ATTACHMENTS_DIR });
39
+ } catch (error) {
40
+ this.logger?.error('Error initializing FileAttachmentService', { error: error.message });
41
+ throw error;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Load index file
47
+ * @returns {Promise<Object>}
48
+ */
49
+ async loadIndex() {
50
+ try {
51
+ const exists = await this.fileProcessor.fileExists(INDEX_FILE);
52
+ if (!exists) {
53
+ this.index = { attachments: {}, agentRefs: {} };
54
+ await this.saveIndex();
55
+ } else {
56
+ const content = await this.fileProcessor.readFile(INDEX_FILE, 'utf8');
57
+ this.index = JSON.parse(content);
58
+ }
59
+ return this.index;
60
+ } catch (error) {
61
+ this.logger?.error('Error loading index', { error: error.message });
62
+ this.index = { attachments: {}, agentRefs: {} };
63
+ return this.index;
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Save index file
69
+ * @returns {Promise<void>}
70
+ */
71
+ async saveIndex() {
72
+ try {
73
+ await this.fileProcessor.writeFile(INDEX_FILE, JSON.stringify(this.index, null, 2), 'utf8');
74
+ } catch (error) {
75
+ this.logger?.error('Error saving index', { error: error.message });
76
+ throw error;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Upload file attachment
82
+ * @param {Object} options
83
+ * @param {string} options.agentId - Agent ID
84
+ * @param {string} options.filePath - Source file path
85
+ * @param {string} options.mode - 'content' or 'reference'
86
+ * @param {string} options.fileName - Optional custom file name
87
+ * @returns {Promise<Object>} Attachment metadata
88
+ */
89
+ async uploadFile({ agentId, filePath, mode = 'content', fileName = null }) {
90
+ if (!this.index) {
91
+ await this.loadIndex();
92
+ }
93
+
94
+ try {
95
+ // Validate file exists
96
+ const exists = await this.fileProcessor.fileExists(filePath);
97
+ if (!exists) {
98
+ throw new Error(`File not found: ${filePath}`);
99
+ }
100
+
101
+ // Get file stats
102
+ const stats = await this.fileProcessor.getFileStats(filePath);
103
+ const actualFileName = fileName || path.basename(filePath);
104
+ const fileExtension = path.extname(actualFileName);
105
+
106
+ // Validate
107
+ const validation = this.validator.validate({
108
+ fileName: actualFileName,
109
+ size: stats.size,
110
+ mode,
111
+ path: mode === 'reference' ? filePath : null
112
+ });
113
+
114
+ if (!validation.valid) {
115
+ throw new Error(`Validation failed: ${validation.errors.join(', ')}`);
116
+ }
117
+
118
+ // Generate file ID
119
+ const fileId = randomUUID();
120
+
121
+ // Calculate hash
122
+ const hash = await this.fileProcessor.calculateHash(filePath);
123
+
124
+ // Determine content type
125
+ const contentType = this.validator.getContentType(actualFileName);
126
+
127
+ // Create attachment directory
128
+ const attachmentDir = path.join(ATTACHMENTS_DIR, agentId, fileId);
129
+ await this.fileProcessor.createDirectory(attachmentDir);
130
+
131
+ // Process and save content (for content mode)
132
+ let tokenEstimate = 0;
133
+ let contentFileName = null;
134
+
135
+ if (mode === 'content') {
136
+ const processResult = await this.fileProcessor.processFile(filePath, contentType);
137
+ const content = processResult.content;
138
+
139
+ // Determine content file name based on type
140
+ if (contentType === 'text') {
141
+ contentFileName = 'content.txt';
142
+ } else if (contentType === 'image') {
143
+ contentFileName = 'content.base64';
144
+ } else if (contentType === 'pdf') {
145
+ contentFileName = 'content.txt';
146
+ }
147
+
148
+ // Save content
149
+ const contentFilePath = path.join(attachmentDir, contentFileName);
150
+ await this.fileProcessor.writeFile(contentFilePath, content, 'utf8');
151
+
152
+ // Estimate tokens
153
+ tokenEstimate = this.fileProcessor.estimateTokens(content);
154
+ }
155
+
156
+ // Create metadata
157
+ const metadata = {
158
+ fileId,
159
+ agentId,
160
+ fileName: actualFileName,
161
+ originalPath: filePath,
162
+ fileType: this.validator.getMimeType(actualFileName),
163
+ fileExtension,
164
+ size: stats.size,
165
+ mode,
166
+ active: true,
167
+ uploadedAt: new Date().toISOString(),
168
+ lastModified: stats.modified.toISOString(),
169
+ hash,
170
+ tokenEstimate,
171
+ contentType,
172
+ contentFileName,
173
+ warnings: validation.warnings,
174
+ sizeLevel: validation.sizeLevel,
175
+ importedFrom: null,
176
+ referencedBy: [agentId] // Reference counting
177
+ };
178
+
179
+ // Save metadata
180
+ const metadataPath = path.join(attachmentDir, 'metadata.json');
181
+ await this.fileProcessor.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');
182
+
183
+ // Update index
184
+ this.index.attachments[fileId] = {
185
+ fileId,
186
+ agentId,
187
+ fileName: actualFileName,
188
+ mode,
189
+ active: metadata.active,
190
+ referencedBy: metadata.referencedBy
191
+ };
192
+
193
+ if (!this.index.agentRefs[agentId]) {
194
+ this.index.agentRefs[agentId] = [];
195
+ }
196
+ this.index.agentRefs[agentId].push(fileId);
197
+
198
+ await this.saveIndex();
199
+
200
+ this.logger?.info('File uploaded', { fileId, agentId, fileName: actualFileName, mode });
201
+
202
+ return metadata;
203
+ } catch (error) {
204
+ this.logger?.error('Error uploading file', { agentId, filePath, error: error.message });
205
+ throw error;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Get attachments for an agent
211
+ * @param {string} agentId - Agent ID
212
+ * @param {Object} filters - Optional filters { active, mode }
213
+ * @returns {Promise<Array>} Array of attachment metadata
214
+ */
215
+ async getAttachments(agentId, filters = {}) {
216
+ if (!this.index) {
217
+ await this.loadIndex();
218
+ }
219
+
220
+ try {
221
+ const fileIds = this.index.agentRefs[agentId] || [];
222
+ const attachments = [];
223
+
224
+ for (const fileId of fileIds) {
225
+ const metadata = await this.getAttachment(fileId);
226
+ if (metadata) {
227
+ // Apply filters
228
+ if (filters.active !== undefined && metadata.active !== filters.active) {
229
+ continue;
230
+ }
231
+ if (filters.mode && metadata.mode !== filters.mode) {
232
+ continue;
233
+ }
234
+ attachments.push(metadata);
235
+ }
236
+ }
237
+
238
+ return attachments;
239
+ } catch (error) {
240
+ this.logger?.error('Error getting attachments', { agentId, error: error.message });
241
+ throw error;
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Get single attachment
247
+ * @param {string} fileId - File ID
248
+ * @returns {Promise<Object|null>} Attachment metadata or null
249
+ */
250
+ async getAttachment(fileId) {
251
+ if (!this.index) {
252
+ await this.loadIndex();
253
+ }
254
+
255
+ try {
256
+ const indexEntry = this.index.attachments[fileId];
257
+ if (!indexEntry) {
258
+ return null;
259
+ }
260
+
261
+ const metadataPath = path.join(ATTACHMENTS_DIR, indexEntry.agentId, fileId, 'metadata.json');
262
+ const exists = await this.fileProcessor.fileExists(metadataPath);
263
+
264
+ if (!exists) {
265
+ this.logger?.warn('Metadata file not found', { fileId });
266
+ return null;
267
+ }
268
+
269
+ const content = await this.fileProcessor.readFile(metadataPath, 'utf8');
270
+ return JSON.parse(content);
271
+ } catch (error) {
272
+ this.logger?.error('Error getting attachment', { fileId, error: error.message });
273
+ return null;
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Get attachment content
279
+ * @param {string} fileId - File ID
280
+ * @returns {Promise<string|null>} File content or null
281
+ */
282
+ async getAttachmentContent(fileId) {
283
+ try {
284
+ const metadata = await this.getAttachment(fileId);
285
+ if (!metadata || metadata.mode !== 'content') {
286
+ return null;
287
+ }
288
+
289
+ const contentPath = path.join(ATTACHMENTS_DIR, metadata.agentId, fileId, metadata.contentFileName);
290
+ const exists = await this.fileProcessor.fileExists(contentPath);
291
+
292
+ if (!exists) {
293
+ return null;
294
+ }
295
+
296
+ return await this.fileProcessor.readFile(contentPath, 'utf8');
297
+ } catch (error) {
298
+ this.logger?.error('Error getting attachment content', { fileId, error: error.message });
299
+ return null;
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Toggle attachment active state
305
+ * @param {string} fileId - File ID
306
+ * @returns {Promise<Object>} Updated metadata
307
+ */
308
+ async toggleActive(fileId) {
309
+ try {
310
+ const metadata = await this.getAttachment(fileId);
311
+ if (!metadata) {
312
+ throw new Error(`Attachment not found: ${fileId}`);
313
+ }
314
+
315
+ metadata.active = !metadata.active;
316
+ metadata.lastModified = new Date().toISOString();
317
+
318
+ // Save updated metadata
319
+ const metadataPath = path.join(ATTACHMENTS_DIR, metadata.agentId, fileId, 'metadata.json');
320
+ await this.fileProcessor.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');
321
+
322
+ // Update index
323
+ if (this.index.attachments[fileId]) {
324
+ this.index.attachments[fileId].active = metadata.active;
325
+ await this.saveIndex();
326
+ }
327
+
328
+ this.logger?.info('Attachment active state toggled', { fileId, active: metadata.active });
329
+
330
+ return metadata;
331
+ } catch (error) {
332
+ this.logger?.error('Error toggling attachment', { fileId, error: error.message });
333
+ throw error;
334
+ }
335
+ }
336
+
337
+ /**
338
+ * Update attachment metadata
339
+ * @param {string} fileId - File ID
340
+ * @param {Object} updates - Fields to update
341
+ * @returns {Promise<Object>} Updated metadata
342
+ */
343
+ async updateAttachment(fileId, updates) {
344
+ try {
345
+ const metadata = await this.getAttachment(fileId);
346
+ if (!metadata) {
347
+ throw new Error(`Attachment not found: ${fileId}`);
348
+ }
349
+
350
+ // Allow only safe updates
351
+ const allowedFields = ['fileName', 'active'];
352
+ for (const field of allowedFields) {
353
+ if (updates[field] !== undefined) {
354
+ metadata[field] = updates[field];
355
+ }
356
+ }
357
+
358
+ metadata.lastModified = new Date().toISOString();
359
+
360
+ // Save updated metadata
361
+ const metadataPath = path.join(ATTACHMENTS_DIR, metadata.agentId, fileId, 'metadata.json');
362
+ await this.fileProcessor.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');
363
+
364
+ // Update index
365
+ if (this.index.attachments[fileId]) {
366
+ if (updates.fileName) {
367
+ this.index.attachments[fileId].fileName = updates.fileName;
368
+ }
369
+ if (updates.active !== undefined) {
370
+ this.index.attachments[fileId].active = updates.active;
371
+ }
372
+ await this.saveIndex();
373
+ }
374
+
375
+ this.logger?.info('Attachment updated', { fileId, updates });
376
+
377
+ return metadata;
378
+ } catch (error) {
379
+ this.logger?.error('Error updating attachment', { fileId, error: error.message });
380
+ throw error;
381
+ }
382
+ }
383
+
384
+ /**
385
+ * Delete attachment (with reference counting)
386
+ * @param {string} fileId - File ID
387
+ * @param {string} agentId - Agent ID requesting deletion
388
+ * @returns {Promise<boolean>} true if deleted, false if still referenced
389
+ */
390
+ async deleteAttachment(fileId, agentId) {
391
+ try {
392
+ const metadata = await this.getAttachment(fileId);
393
+ if (!metadata) {
394
+ throw new Error(`Attachment not found: ${fileId}`);
395
+ }
396
+
397
+ // Remove agent from referencedBy
398
+ metadata.referencedBy = metadata.referencedBy.filter(id => id !== agentId);
399
+
400
+ // If still referenced by other agents, just update metadata
401
+ if (metadata.referencedBy.length > 0) {
402
+ const metadataPath = path.join(ATTACHMENTS_DIR, metadata.agentId, fileId, 'metadata.json');
403
+ await this.fileProcessor.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');
404
+
405
+ // Update index
406
+ if (this.index.attachments[fileId]) {
407
+ this.index.attachments[fileId].referencedBy = metadata.referencedBy;
408
+ }
409
+ if (this.index.agentRefs[agentId]) {
410
+ this.index.agentRefs[agentId] = this.index.agentRefs[agentId].filter(id => id !== fileId);
411
+ }
412
+ await this.saveIndex();
413
+
414
+ this.logger?.info('Attachment dereferenced', { fileId, agentId, remainingRefs: metadata.referencedBy.length });
415
+ return false;
416
+ }
417
+
418
+ // No more references, delete physical files
419
+ const attachmentDir = path.join(ATTACHMENTS_DIR, metadata.agentId, fileId);
420
+ await this.fileProcessor.deleteDirectory(attachmentDir);
421
+
422
+ // Remove from index
423
+ delete this.index.attachments[fileId];
424
+ if (this.index.agentRefs[agentId]) {
425
+ this.index.agentRefs[agentId] = this.index.agentRefs[agentId].filter(id => id !== fileId);
426
+ }
427
+ await this.saveIndex();
428
+
429
+ this.logger?.info('Attachment deleted', { fileId, agentId });
430
+ return true;
431
+ } catch (error) {
432
+ this.logger?.error('Error deleting attachment', { fileId, agentId, error: error.message });
433
+ throw error;
434
+ }
435
+ }
436
+
437
+ /**
438
+ * Delete all attachments for an agent
439
+ * @param {string} agentId - Agent ID
440
+ * @returns {Promise<Object>} { deleted: number, dereferenced: number }
441
+ */
442
+ async deleteAgentAttachments(agentId) {
443
+ try {
444
+ const fileIds = this.index.agentRefs[agentId] || [];
445
+ let deleted = 0;
446
+ let dereferenced = 0;
447
+
448
+ for (const fileId of fileIds) {
449
+ const wasDeleted = await this.deleteAttachment(fileId, agentId);
450
+ if (wasDeleted) {
451
+ deleted++;
452
+ } else {
453
+ dereferenced++;
454
+ }
455
+ }
456
+
457
+ this.logger?.info('Agent attachments deleted', { agentId, deleted, dereferenced });
458
+
459
+ return { deleted, dereferenced };
460
+ } catch (error) {
461
+ this.logger?.error('Error deleting agent attachments', { agentId, error: error.message });
462
+ throw error;
463
+ }
464
+ }
465
+
466
+ /**
467
+ * Import attachment from another agent
468
+ * @param {string} sourceFileId - Source file ID
469
+ * @param {string} targetAgentId - Target agent ID
470
+ * @returns {Promise<Object>} New attachment metadata
471
+ */
472
+ async importFromAgent(sourceFileId, targetAgentId) {
473
+ try {
474
+ const sourceMetadata = await this.getAttachment(sourceFileId);
475
+ if (!sourceMetadata) {
476
+ throw new Error(`Source attachment not found: ${sourceFileId}`);
477
+ }
478
+
479
+ // Add target agent to referencedBy
480
+ if (!sourceMetadata.referencedBy.includes(targetAgentId)) {
481
+ sourceMetadata.referencedBy.push(targetAgentId);
482
+ }
483
+
484
+ sourceMetadata.lastModified = new Date().toISOString();
485
+ sourceMetadata.importedFrom = sourceMetadata.agentId;
486
+
487
+ // Save updated metadata
488
+ const metadataPath = path.join(ATTACHMENTS_DIR, sourceMetadata.agentId, sourceFileId, 'metadata.json');
489
+ await this.fileProcessor.writeFile(metadataPath, JSON.stringify(sourceMetadata, null, 2), 'utf8');
490
+
491
+ // Update index
492
+ if (this.index.attachments[sourceFileId]) {
493
+ this.index.attachments[sourceFileId].referencedBy = sourceMetadata.referencedBy;
494
+ }
495
+ if (!this.index.agentRefs[targetAgentId]) {
496
+ this.index.agentRefs[targetAgentId] = [];
497
+ }
498
+ if (!this.index.agentRefs[targetAgentId].includes(sourceFileId)) {
499
+ this.index.agentRefs[targetAgentId].push(sourceFileId);
500
+ }
501
+ await this.saveIndex();
502
+
503
+ this.logger?.info('Attachment imported', { sourceFileId, targetAgentId });
504
+
505
+ return sourceMetadata;
506
+ } catch (error) {
507
+ this.logger?.error('Error importing attachment', { sourceFileId, targetAgentId, error: error.message });
508
+ throw error;
509
+ }
510
+ }
511
+
512
+ /**
513
+ * Get active attachments for an agent
514
+ * @param {string} agentId - Agent ID
515
+ * @returns {Promise<Array>} Array of active attachment metadata
516
+ */
517
+ async getActiveAttachments(agentId) {
518
+ return await this.getAttachments(agentId, { active: true });
519
+ }
520
+
521
+ /**
522
+ * Get attachment preview (first 1000 characters)
523
+ * @param {string} fileId - File ID
524
+ * @returns {Promise<string|null>} Preview text or null
525
+ */
526
+ async getAttachmentPreview(fileId) {
527
+ try {
528
+ const content = await this.getAttachmentContent(fileId);
529
+ if (!content) {
530
+ return null;
531
+ }
532
+
533
+ // For base64 images, return metadata instead of content
534
+ if (content.startsWith('data:image')) {
535
+ return '[Image content - base64 encoded]';
536
+ }
537
+
538
+ // Return first 1000 characters
539
+ return content.length > 1000 ? content.substring(0, 1000) + '...' : content;
540
+ } catch (error) {
541
+ this.logger?.error('Error getting attachment preview', { fileId, error: error.message });
542
+ return null;
543
+ }
544
+ }
545
+ }
546
+
547
+ export default FileAttachmentService;