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,330 @@
1
+ /**
2
+ * AgentSwitcher Component
3
+ * Quick-switch overlay for selecting agents
4
+ */
5
+
6
+ import React, { useState, useEffect } from 'react';
7
+ import { Box, Text, useInput } from 'ink';
8
+ import { debugLog } from '../utils/debugLogger.js';
9
+
10
+ /**
11
+ * Format time ago
12
+ */
13
+ function timeAgo(timestamp) {
14
+ if (!timestamp) return 'never';
15
+
16
+ const seconds = Math.floor((Date.now() - new Date(timestamp).getTime()) / 1000);
17
+
18
+ if (seconds < 60) return 'just now';
19
+ if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
20
+ if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
21
+ return `${Math.floor(seconds / 86400)}d ago`;
22
+ }
23
+
24
+ /**
25
+ * AgentSwitcher Component
26
+ * @param {Object} props
27
+ * @param {Array} props.agents - List of agents
28
+ * @param {string} props.currentAgentId - Currently selected agent ID
29
+ * @param {Function} props.onSelect - Called when agent is selected
30
+ * @param {Function} props.onClose - Called when switcher is closed
31
+ * @param {Function} props.onDelete - Called when agent deletion is confirmed
32
+ * @param {Function} props.onEdit - Called when agent edit is triggered (Ctrl+E)
33
+ * @param {number} props.terminalHeight - Terminal height for fullscreen rendering
34
+ * @param {number} props.terminalWidth - Terminal width for fullscreen rendering
35
+ */
36
+ export function AgentSwitcher({ agents = [], currentAgentId, onSelect, onClose, onDelete, onEdit, terminalHeight = 24, terminalWidth = 80 }) {
37
+ const [selectedIndex, setSelectedIndex] = useState(0);
38
+ const [scrollOffset, setScrollOffset] = useState(0);
39
+ const [searchQuery, setSearchQuery] = useState('');
40
+ const [deleteConfirmAgent, setDeleteConfirmAgent] = useState(null); // Agent pending deletion
41
+
42
+ const MAX_VISIBLE_ITEMS = 9; // Max items visible at once
43
+
44
+ // Filter agents by search query
45
+ const filteredAgents = agents.filter(agent =>
46
+ agent.name.toLowerCase().includes(searchQuery.toLowerCase())
47
+ );
48
+
49
+ // Sort: current agent first, then by recent activity
50
+ const sortedAgents = [...filteredAgents].sort((a, b) => {
51
+ if (a.agentId === currentAgentId) return -1;
52
+ if (b.agentId === currentAgentId) return 1;
53
+
54
+ const aTime = a.lastMessageAt ? new Date(a.lastMessageAt).getTime() : 0;
55
+ const bTime = b.lastMessageAt ? new Date(b.lastMessageAt).getTime() : 0;
56
+ return bTime - aTime;
57
+ });
58
+
59
+ // Reset selected index and scroll when filter changes
60
+ useEffect(() => {
61
+ setSelectedIndex(0);
62
+ setScrollOffset(0);
63
+ }, [searchQuery]);
64
+
65
+ // Handle keyboard input
66
+ useInput((char, key) => {
67
+ // If in delete confirmation mode, handle Y/N
68
+ if (deleteConfirmAgent) {
69
+ if (char?.toLowerCase() === 'y') {
70
+ // Confirm deletion
71
+ if (onDelete) {
72
+ setTimeout(() => {
73
+ onDelete(deleteConfirmAgent);
74
+ onClose(); // Close switcher after delete
75
+ }, 0);
76
+ }
77
+ return;
78
+ } else if (char?.toLowerCase() === 'n' || key.escape) {
79
+ // Cancel deletion
80
+ setDeleteConfirmAgent(null);
81
+ return;
82
+ }
83
+ return; // Ignore other keys in confirmation mode
84
+ }
85
+
86
+ // Close on Escape
87
+ if (key.escape) {
88
+ // Defer callback to avoid setState during render
89
+ setTimeout(() => onClose(), 0);
90
+ return;
91
+ }
92
+
93
+ // Select on Enter
94
+ if (key.return && sortedAgents[selectedIndex]) {
95
+ // Defer callback to avoid setState during render
96
+ setTimeout(() => onSelect(sortedAgents[selectedIndex]), 0);
97
+ return;
98
+ }
99
+
100
+ // Edit on Ctrl+E
101
+ if (key.ctrl && char?.toLowerCase() === 'e') {
102
+ if (sortedAgents[selectedIndex] && onEdit) {
103
+ debugLog('AgentSwitcher', `Edit triggered for agent: ${sortedAgents[selectedIndex].name}`);
104
+ // Defer callback to avoid setState during render
105
+ setTimeout(() => onEdit(sortedAgents[selectedIndex]), 0);
106
+ }
107
+ return;
108
+ }
109
+
110
+ // Delete on Delete key or Ctrl+D (must come BEFORE search handler and be explicit)
111
+ const isDeleteKey = key.delete || (key.ctrl && char?.toLowerCase() === 'd');
112
+
113
+ debugLog('AgentSwitcher', `Key pressed - char: ${char}, key.ctrl: ${key.ctrl}, key.delete: ${key.delete}, isDeleteKey: ${isDeleteKey}`);
114
+
115
+ if (isDeleteKey) {
116
+ debugLog('AgentSwitcher', 'Delete triggered');
117
+ debugLog('AgentSwitcher', `sortedAgents.length: ${sortedAgents.length}, selectedIndex: ${selectedIndex}`);
118
+
119
+ if (!sortedAgents[selectedIndex]) {
120
+ debugLog('AgentSwitcher', 'No agent at selectedIndex');
121
+ return;
122
+ }
123
+
124
+ const selectedAgent = sortedAgents[selectedIndex];
125
+ debugLog('AgentSwitcher', 'Selected agent', selectedAgent);
126
+ debugLog('AgentSwitcher', `Selected agent ID: ${selectedAgent?.agentId}, Current agent ID: ${currentAgentId}`);
127
+
128
+ // Validate agent has an ID before allowing deletion
129
+ if (!selectedAgent || !selectedAgent.agentId) {
130
+ debugLog('AgentSwitcher', 'Cannot delete agent without ID');
131
+ return;
132
+ }
133
+
134
+ // Allow deleting any agent, including the current one
135
+ // The backend will handle warnings for agents mid-task or used by other interfaces
136
+ debugLog('AgentSwitcher', `Setting delete confirmation for: ${selectedAgent.name}`);
137
+ setDeleteConfirmAgent(selectedAgent);
138
+ return;
139
+ }
140
+
141
+ // Navigate with arrow keys (with scrolling)
142
+ if (key.upArrow) {
143
+ const newIndex = Math.max(0, selectedIndex - 1);
144
+ const newScrollOffset = newIndex < scrollOffset ? newIndex : scrollOffset;
145
+
146
+ setSelectedIndex(newIndex);
147
+ setScrollOffset(newScrollOffset);
148
+ } else if (key.downArrow) {
149
+ const newIndex = Math.min(sortedAgents.length - 1, selectedIndex + 1);
150
+ const newScrollOffset = newIndex >= scrollOffset + MAX_VISIBLE_ITEMS
151
+ ? newIndex - MAX_VISIBLE_ITEMS + 1
152
+ : scrollOffset;
153
+
154
+ setSelectedIndex(newIndex);
155
+ setScrollOffset(newScrollOffset);
156
+ }
157
+ // Number selection (1-9)
158
+ else if (char >= '1' && char <= '9') {
159
+ const index = parseInt(char) - 1;
160
+ if (sortedAgents[index]) {
161
+ // Defer callback to avoid setState during render
162
+ setTimeout(() => onSelect(sortedAgents[index]), 0);
163
+ }
164
+ }
165
+ // Backspace for search (only if not in delete confirmation)
166
+ else if (key.backspace) {
167
+ debugLog('AgentSwitcher', `Backspace pressed, current searchQuery: ${searchQuery}`);
168
+ setSearchQuery(prev => {
169
+ const newQuery = prev.slice(0, -1);
170
+ debugLog('AgentSwitcher', `New searchQuery: ${newQuery}`);
171
+ return newQuery;
172
+ });
173
+ }
174
+ // Type to search
175
+ else if (char && !key.ctrl && !key.meta && char.match(/[a-zA-Z0-9\-_ ]/)) {
176
+ debugLog('AgentSwitcher', `Search handler reached - char: ${char}, key.ctrl: ${key.ctrl}, key.meta: ${key.meta}`);
177
+ setSearchQuery(prev => {
178
+ const newQuery = prev + char;
179
+ debugLog('AgentSwitcher', `Adding to search query: ${char}, new query: ${newQuery}`);
180
+ return newQuery;
181
+ });
182
+ }
183
+ });
184
+
185
+ // Get agent status indicator
186
+ const getStatusIndicator = (agent) => {
187
+ if (agent.agentId === currentAgentId) return '●';
188
+ if (!agent.isLoaded) return '◌'; // Not loaded/archived
189
+ return '○';
190
+ };
191
+
192
+ const getStatusColor = (agent) => {
193
+ if (agent.agentId === currentAgentId) return 'green';
194
+ if (!agent.isLoaded) return 'yellow'; // Not loaded shown in yellow
195
+ return 'gray';
196
+ };
197
+
198
+ return React.createElement(
199
+ Box,
200
+ {
201
+ flexDirection: 'column',
202
+ minHeight: terminalHeight,
203
+ maxHeight: terminalHeight,
204
+ justifyContent: 'center',
205
+ alignItems: 'center',
206
+ backgroundColor: 'black',
207
+ },
208
+ React.createElement(
209
+ Box,
210
+ {
211
+ flexDirection: 'column',
212
+ width: '80%',
213
+ borderStyle: 'double',
214
+ borderColor: 'cyan',
215
+ backgroundColor: 'black',
216
+ paddingX: 1,
217
+ },
218
+ // Title
219
+ React.createElement(
220
+ Box,
221
+ { marginBottom: 1 },
222
+ React.createElement(Text, { bold: true, color: 'cyan' }, 'Switch Agent')
223
+ ),
224
+
225
+ // Agent list (with scrolling)
226
+ React.createElement(
227
+ Box,
228
+ { flexDirection: 'column', flexGrow: 1 },
229
+ sortedAgents.length === 0
230
+ ? React.createElement(
231
+ Text,
232
+ { dimColor: true },
233
+ searchQuery ? 'No matching agents' : 'No agents available'
234
+ )
235
+ : React.createElement(
236
+ Box,
237
+ { flexDirection: 'column' },
238
+ // Visible agents (with scroll window)
239
+ sortedAgents.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS).map((agent, visibleIndex) => {
240
+ const actualIndex = scrollOffset + visibleIndex;
241
+ const isSelected = actualIndex === selectedIndex;
242
+ const isCurrent = agent.agentId === currentAgentId;
243
+ const number = actualIndex + 1;
244
+
245
+ return React.createElement(
246
+ Box,
247
+ { key: agent.agentId },
248
+ React.createElement(
249
+ Text,
250
+ {
251
+ backgroundColor: isSelected ? 'blue' : undefined,
252
+ color: isSelected ? 'white' : undefined,
253
+ },
254
+ `[${number}] ${getStatusIndicator(agent)} `,
255
+ React.createElement(
256
+ Text,
257
+ { color: getStatusColor(agent) },
258
+ agent.name.padEnd(20).substring(0, 20)
259
+ ),
260
+ ' ',
261
+ React.createElement(
262
+ Text,
263
+ { dimColor: true, color: !agent.isLoaded ? 'yellow' : undefined },
264
+ isCurrent ? '(active)' : !agent.isLoaded ? '(not loaded)' : timeAgo(agent.lastMessageAt)
265
+ )
266
+ )
267
+ );
268
+ }),
269
+ // Scroll indicator
270
+ sortedAgents.length > MAX_VISIBLE_ITEMS &&
271
+ React.createElement(
272
+ Box,
273
+ { key: 'scroll-indicator', marginTop: 1 },
274
+ React.createElement(
275
+ Text,
276
+ { dimColor: true },
277
+ `Showing ${scrollOffset + 1}-${Math.min(scrollOffset + MAX_VISIBLE_ITEMS, sortedAgents.length)} of ${sortedAgents.length}`
278
+ )
279
+ )
280
+ )
281
+ ),
282
+
283
+ // Search hint or Delete confirmation
284
+ React.createElement(
285
+ Box,
286
+ { marginTop: 1, borderTop: true, borderStyle: 'single', paddingTop: 1 },
287
+ deleteConfirmAgent
288
+ ? React.createElement(
289
+ Box,
290
+ { flexDirection: 'column' },
291
+ React.createElement(
292
+ Text,
293
+ {},
294
+ 'Delete agent ',
295
+ React.createElement(Text, { color: 'red', bold: true }, `"${deleteConfirmAgent.name}"`),
296
+ '?'
297
+ ),
298
+ React.createElement(
299
+ Text,
300
+ { marginTop: 1 },
301
+ React.createElement(Text, { dimColor: true }, 'This cannot be undone. '),
302
+ React.createElement(Text, { color: 'green', bold: true }, '[Y]'),
303
+ React.createElement(Text, { dimColor: true }, 'es / '),
304
+ React.createElement(Text, { color: 'red', bold: true }, '[N]'),
305
+ React.createElement(Text, { dimColor: true }, 'o')
306
+ )
307
+ )
308
+ : searchQuery
309
+ ? React.createElement(
310
+ Text,
311
+ {},
312
+ 'Search: ',
313
+ React.createElement(Text, { color: 'yellow' }, searchQuery),
314
+ React.createElement(Text, { dimColor: true }, ' (backspace to clear)')
315
+ )
316
+ : React.createElement(
317
+ Text,
318
+ { dimColor: true },
319
+ 'Type number or search... ',
320
+ React.createElement(Text, { color: 'cyan' }, 'Ctrl+E'),
321
+ React.createElement(Text, { dimColor: true }, ' edit '),
322
+ React.createElement(Text, { color: 'red' }, 'Ctrl+D'),
323
+ React.createElement(Text, { dimColor: true }, ' delete (Esc to cancel)')
324
+ )
325
+ )
326
+ ) // Close inner Box
327
+ ); // Close outer Box
328
+ }
329
+
330
+ export default AgentSwitcher;
@@ -0,0 +1,92 @@
1
+ /**
2
+ * ErrorBoundary Component
3
+ * Catches and displays errors from child components
4
+ */
5
+
6
+ import React from 'react';
7
+ import { Box, Text } from 'ink';
8
+
9
+ export class ErrorBoundary extends React.Component {
10
+ constructor(props) {
11
+ super(props);
12
+ this.state = {
13
+ hasError: false,
14
+ error: null,
15
+ errorInfo: null,
16
+ };
17
+ }
18
+
19
+ static getDerivedStateFromError(error) {
20
+ return { hasError: true, error };
21
+ }
22
+
23
+ componentDidCatch(error, errorInfo) {
24
+ this.setState({
25
+ error,
26
+ errorInfo,
27
+ });
28
+
29
+ // Log to console for debugging
30
+ console.error('ErrorBoundary caught error:', error);
31
+ console.error('Component stack:', errorInfo?.componentStack);
32
+
33
+ // Call optional error callback
34
+ if (this.props.onError) {
35
+ this.props.onError(error, errorInfo);
36
+ }
37
+ }
38
+
39
+ handleReset = () => {
40
+ this.setState({
41
+ hasError: false,
42
+ error: null,
43
+ errorInfo: null,
44
+ });
45
+
46
+ if (this.props.onReset) {
47
+ this.props.onReset();
48
+ }
49
+ };
50
+
51
+ render() {
52
+ if (this.state.hasError) {
53
+ // Custom fallback UI if provided
54
+ if (this.props.fallback) {
55
+ return this.props.fallback({
56
+ error: this.state.error,
57
+ errorInfo: this.state.errorInfo,
58
+ reset: this.handleReset,
59
+ });
60
+ }
61
+
62
+ // Default error UI
63
+ return React.createElement(
64
+ Box,
65
+ {
66
+ borderStyle: 'round',
67
+ borderColor: 'red',
68
+ paddingX: 1,
69
+ paddingY: 1,
70
+ flexDirection: 'column',
71
+ },
72
+ React.createElement(Text, { bold: true, color: 'red' }, '⚠ Component Error'),
73
+ React.createElement(Text, { color: 'yellow' }, `\n${this.state.error?.message || 'Unknown error'}`),
74
+ React.createElement(
75
+ Text,
76
+ { dimColor: true },
77
+ '\n\nThe component crashed but the app is still running.'
78
+ ),
79
+ this.props.showStack &&
80
+ React.createElement(
81
+ Text,
82
+ { dimColor: true },
83
+ `\n\nStack: ${this.state.error?.stack?.split('\n').slice(0, 3).join('\n')}`
84
+ )
85
+ );
86
+ }
87
+
88
+ return this.props.children;
89
+ }
90
+ }
91
+
92
+ export default ErrorBoundary;
@@ -0,0 +1,264 @@
1
+ /**
2
+ * ErrorPanel Component
3
+ * Displays error log in an overlay panel
4
+ */
5
+
6
+ import React, { useState } from 'react';
7
+ import { Box, Text, useInput } from 'ink';
8
+
9
+ /**
10
+ * Format timestamp for error entry
11
+ */
12
+ function formatTimestamp(timestamp) {
13
+ const date = new Date(timestamp);
14
+ const hours = String(date.getHours()).padStart(2, '0');
15
+ const minutes = String(date.getMinutes()).padStart(2, '0');
16
+ const seconds = String(date.getSeconds()).padStart(2, '0');
17
+ return `${hours}:${minutes}:${seconds}`;
18
+ }
19
+
20
+ /**
21
+ * ErrorPanel Component
22
+ * @param {Object} props
23
+ * @param {Array} props.errors - Array of error objects { timestamp, type, message, stack, id }
24
+ * @param {Function} props.onClose - Called when panel is closed
25
+ * @param {Function} props.onClear - Called to clear all errors
26
+ * @param {Function} props.onDismiss - Called to dismiss a single error by index
27
+ * @param {number} props.terminalHeight - Terminal height for fullscreen rendering
28
+ * @param {number} props.terminalWidth - Terminal width for fullscreen rendering
29
+ */
30
+ export function ErrorPanel({ errors = [], onClose, onClear, onDismiss, terminalHeight = 24, terminalWidth = 80 }) {
31
+ const [selectedIndex, setSelectedIndex] = useState(0);
32
+ const [scrollOffset, setScrollOffset] = useState(0);
33
+ const [viewMode, setViewMode] = useState('list'); // 'list' or 'detail'
34
+
35
+ const MAX_VISIBLE_ITEMS = 8;
36
+
37
+ useInput((char, key) => {
38
+ // Close on Escape
39
+ if (key.escape) {
40
+ onClose();
41
+ return;
42
+ }
43
+
44
+ // View mode: list
45
+ if (viewMode === 'list') {
46
+ // Toggle detail view on Enter
47
+ if (key.return && errors.length > 0) {
48
+ setViewMode('detail');
49
+ return;
50
+ }
51
+
52
+ // Navigate with arrow keys
53
+ if (key.upArrow && errors.length > 0) {
54
+ setSelectedIndex(prev => {
55
+ const newIndex = Math.max(0, prev - 1);
56
+ if (newIndex < scrollOffset) {
57
+ setScrollOffset(newIndex);
58
+ }
59
+ return newIndex;
60
+ });
61
+ } else if (key.downArrow && errors.length > 0) {
62
+ setSelectedIndex(prev => {
63
+ const newIndex = Math.min(errors.length - 1, prev + 1);
64
+ if (newIndex >= scrollOffset + MAX_VISIBLE_ITEMS) {
65
+ setScrollOffset(newIndex - MAX_VISIBLE_ITEMS + 1);
66
+ }
67
+ return newIndex;
68
+ });
69
+ }
70
+
71
+ // Clear all errors on 'c'
72
+ if (char === 'c' && errors.length > 0) {
73
+ onClear();
74
+ }
75
+
76
+ // Dismiss selected error on 'd' or Delete
77
+ if ((char === 'd' || key.delete) && errors.length > 0 && onDismiss) {
78
+ onDismiss(selectedIndex);
79
+ // Adjust selected index if needed
80
+ if (selectedIndex >= errors.length - 1 && selectedIndex > 0) {
81
+ setSelectedIndex(prev => prev - 1);
82
+ }
83
+ if (scrollOffset >= errors.length - MAX_VISIBLE_ITEMS && scrollOffset > 0) {
84
+ setScrollOffset(prev => Math.max(0, prev - 1));
85
+ }
86
+ }
87
+ }
88
+
89
+ // View mode: detail
90
+ if (viewMode === 'detail') {
91
+ // Back to list on Escape or Backspace
92
+ if (key.backspace) {
93
+ setViewMode('list');
94
+ return;
95
+ }
96
+
97
+ // Dismiss error from detail view on 'd' or Delete
98
+ if ((char === 'd' || key.delete) && onDismiss) {
99
+ onDismiss(selectedIndex);
100
+ setViewMode('list');
101
+ // Adjust selected index if needed
102
+ if (selectedIndex >= errors.length - 1 && selectedIndex > 0) {
103
+ setSelectedIndex(prev => prev - 1);
104
+ }
105
+ }
106
+ }
107
+ });
108
+
109
+ // Render list view
110
+ const renderListView = () => {
111
+ if (errors.length === 0) {
112
+ return React.createElement(
113
+ Box,
114
+ { flexDirection: 'column', paddingY: 2 },
115
+ React.createElement(Text, { color: 'green' }, '✓ No errors'),
116
+ React.createElement(Text, { dimColor: true, marginTop: 1 }, 'All systems operational')
117
+ );
118
+ }
119
+
120
+ return React.createElement(
121
+ Box,
122
+ { flexDirection: 'column' },
123
+ // Error list
124
+ errors.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS).map((error, visibleIndex) => {
125
+ const actualIndex = scrollOffset + visibleIndex;
126
+ const isSelected = actualIndex === selectedIndex;
127
+
128
+ return React.createElement(
129
+ Box,
130
+ { key: actualIndex, marginBottom: 1 },
131
+ React.createElement(
132
+ Text,
133
+ {
134
+ backgroundColor: isSelected ? 'red' : undefined,
135
+ color: isSelected ? 'white' : 'red',
136
+ },
137
+ isSelected ? '> ' : ' ',
138
+ `[${formatTimestamp(error.timestamp)}] ${error.type || 'ERROR'}`
139
+ ),
140
+ React.createElement(
141
+ Box,
142
+ { paddingLeft: 4 },
143
+ React.createElement(
144
+ Text,
145
+ { dimColor: !isSelected },
146
+ error.message.substring(0, 60) + (error.message.length > 60 ? '...' : '')
147
+ )
148
+ )
149
+ );
150
+ }),
151
+
152
+ // Scroll indicator
153
+ errors.length > MAX_VISIBLE_ITEMS &&
154
+ React.createElement(
155
+ Box,
156
+ { marginTop: 1 },
157
+ React.createElement(
158
+ Text,
159
+ { dimColor: true },
160
+ `Showing ${scrollOffset + 1}-${Math.min(scrollOffset + MAX_VISIBLE_ITEMS, errors.length)} of ${errors.length}`
161
+ )
162
+ )
163
+ );
164
+ };
165
+
166
+ // Render detail view
167
+ const renderDetailView = () => {
168
+ if (errors.length === 0) {
169
+ return renderListView();
170
+ }
171
+
172
+ const error = errors[selectedIndex];
173
+
174
+ return React.createElement(
175
+ Box,
176
+ { flexDirection: 'column', paddingY: 1 },
177
+ // Error header
178
+ React.createElement(
179
+ Box,
180
+ { marginBottom: 1 },
181
+ React.createElement(Text, { bold: true, color: 'red' }, `${error.type || 'ERROR'} at ${formatTimestamp(error.timestamp)}`)
182
+ ),
183
+
184
+ // Error message
185
+ React.createElement(
186
+ Box,
187
+ { flexDirection: 'column', marginBottom: 1 },
188
+ React.createElement(Text, { bold: true }, 'Message:'),
189
+ React.createElement(Text, {}, error.message)
190
+ ),
191
+
192
+ // Stack trace (if available)
193
+ error.stack &&
194
+ React.createElement(
195
+ Box,
196
+ { flexDirection: 'column' },
197
+ React.createElement(Text, { bold: true }, 'Stack Trace:'),
198
+ React.createElement(
199
+ Text,
200
+ { dimColor: true },
201
+ error.stack.split('\n').slice(0, 5).join('\n') + (error.stack.split('\n').length > 5 ? '\n...' : '')
202
+ )
203
+ )
204
+ );
205
+ };
206
+
207
+ return React.createElement(
208
+ Box,
209
+ {
210
+ flexDirection: 'column',
211
+ minHeight: terminalHeight,
212
+ maxHeight: terminalHeight,
213
+ justifyContent: 'center',
214
+ alignItems: 'center',
215
+ backgroundColor: 'black',
216
+ },
217
+ React.createElement(
218
+ Box,
219
+ {
220
+ flexDirection: 'column',
221
+ width: '85%',
222
+ borderStyle: 'double',
223
+ borderColor: errors.length > 0 ? 'red' : 'green',
224
+ backgroundColor: 'black',
225
+ paddingX: 2,
226
+ paddingY: 1,
227
+ },
228
+ // Title
229
+ React.createElement(
230
+ Box,
231
+ { marginBottom: 1 },
232
+ React.createElement(
233
+ Text,
234
+ { bold: true, color: errors.length > 0 ? 'red' : 'green' },
235
+ `Error Log (${errors.length} errors)`
236
+ )
237
+ ),
238
+
239
+ // Content
240
+ React.createElement(
241
+ Box,
242
+ { flexDirection: 'column', flexGrow: 1 },
243
+ viewMode === 'list' ? renderListView() : renderDetailView()
244
+ ),
245
+
246
+ // Footer
247
+ React.createElement(
248
+ Box,
249
+ { marginTop: 1, borderTop: true, borderStyle: 'single', paddingTop: 1 },
250
+ React.createElement(
251
+ Text,
252
+ { dimColor: true },
253
+ viewMode === 'list'
254
+ ? errors.length > 0
255
+ ? 'Enter: Details D: Dismiss C: Clear All Esc: Close'
256
+ : 'Esc: Close'
257
+ : 'D: Dismiss Backspace: Back Esc: Close'
258
+ )
259
+ )
260
+ )
261
+ );
262
+ }
263
+
264
+ export default ErrorPanel;