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,705 @@
1
+ /**
2
+ * AgentCreator Component
3
+ * Multi-step wizard for creating new agents
4
+ */
5
+
6
+ import React, { useState, useEffect } from 'react';
7
+ import { Box, Text, useInput } from 'ink';
8
+
9
+ const STEPS = {
10
+ NAME: 0,
11
+ MODEL: 1,
12
+ MODE: 2,
13
+ DYNAMIC_ROUTING: 3,
14
+ ROUTING_STRATEGY: 4,
15
+ CAPABILITIES: 5,
16
+ SYSTEM_PROMPT: 6,
17
+ CONFIRM: 7,
18
+ };
19
+
20
+ const STEP_TITLES = [
21
+ 'Agent Name',
22
+ 'Select Model',
23
+ 'Select Mode',
24
+ 'Dynamic Model Routing',
25
+ 'Routing Strategy (Optional)',
26
+ 'Select Capabilities',
27
+ 'System Prompt (Optional)',
28
+ 'Confirm & Create'
29
+ ];
30
+
31
+ const MODES = [
32
+ { value: 'chat', label: 'Chat Mode', description: 'Interactive conversation' },
33
+ { value: 'auto', label: 'Auto Mode', description: 'Autonomous execution' },
34
+ ];
35
+
36
+ // Tools will be fetched dynamically from API
37
+
38
+ const DYNAMIC_ROUTING_OPTIONS = [
39
+ { value: true, label: 'Yes - Use dynamic routing', description: 'Recommended' },
40
+ { value: false, label: 'No - Use model directly', description: 'Advanced users' },
41
+ ];
42
+
43
+ export function AgentCreator({ sessionManager, onCancel, onCreate, terminalHeight = 24, terminalWidth = 80 }) {
44
+ // terminalHeight and terminalWidth are now passed as props from Layout.js
45
+
46
+ const [step, setStep] = useState(STEPS.NAME);
47
+ const [models, setModels] = useState([]);
48
+ const [modelsLoading, setModelsLoading] = useState(true);
49
+ const [modelsError, setModelsError] = useState(null);
50
+ const [tools, setTools] = useState([]);
51
+ const [toolsLoading, setToolsLoading] = useState(false);
52
+ const [toolsError, setToolsError] = useState(null);
53
+ const [formData, setFormData] = useState({
54
+ name: '',
55
+ model: '',
56
+ mode: MODES[0].value,
57
+ dynamicModelRouting: true, // Default to enabled
58
+ routingStrategy: '',
59
+ capabilities: [], // Array of tool names
60
+ systemPrompt: '',
61
+ });
62
+ const [selectedIndex, setSelectedIndex] = useState(0);
63
+ const [scrollOffset, setScrollOffset] = useState(0);
64
+ const [inputBuffer, setInputBuffer] = useState('');
65
+
66
+ // Calculate max visible items based on terminal height
67
+ // Reserve space for: dialog header (1), dialog borders (3), step title (1),
68
+ // inner borders (2), compact status line (1), shortcuts (3), margins (2) = 13 lines
69
+ // Reduced from 16 to 13 by removing scroll indicators, bordered footer, and redundant instructions
70
+ const RESERVED_LINES = 13;
71
+ const MAX_VISIBLE_ITEMS = Math.max(3, Math.min(15, terminalHeight - RESERVED_LINES));
72
+ const MAX_VISIBLE_MODELS = Math.max(5, Math.min(8, terminalHeight - 14)); // For model selection
73
+
74
+ // Fetch available models from API
75
+ useEffect(() => {
76
+ async function fetchModels() {
77
+ try {
78
+ setModelsLoading(true);
79
+ const data = await sessionManager.makeRequest('GET', '/api/llm/models');
80
+
81
+ // Map API response to UI format
82
+ const mappedModels = data.models.map(model => ({
83
+ value: model.name,
84
+ label: formatModelLabel(model),
85
+ description: formatModelDescription(model),
86
+ }));
87
+
88
+ setModels(mappedModels);
89
+
90
+ // Set default model
91
+ if (mappedModels.length > 0) {
92
+ setFormData(prev => ({ ...prev, model: mappedModels[0].value }));
93
+ }
94
+
95
+ setModelsLoading(false);
96
+ } catch (error) {
97
+ console.error('Error fetching models:', error);
98
+ setModelsError(error.message);
99
+ setModelsLoading(false);
100
+ }
101
+ }
102
+
103
+ if (sessionManager) {
104
+ fetchModels();
105
+ }
106
+ }, [sessionManager]);
107
+
108
+ // Fetch available tools from API when CAPABILITIES step is reached
109
+ useEffect(() => {
110
+ async function fetchTools() {
111
+ if (step !== STEPS.CAPABILITIES) return;
112
+
113
+ try {
114
+ setToolsLoading(true);
115
+ setToolsError(null);
116
+ const data = await sessionManager.makeRequest('GET', '/api/tools');
117
+
118
+ if (data.success && data.tools) {
119
+ // Map API response to UI format
120
+ const mappedTools = data.tools.map(tool => ({
121
+ value: tool.name,
122
+ label: tool.name,
123
+ description: tool.description || 'No description available',
124
+ }));
125
+
126
+ setTools(mappedTools);
127
+ } else {
128
+ throw new Error(data.error || 'Failed to fetch tools');
129
+ }
130
+
131
+ setToolsLoading(false);
132
+ } catch (error) {
133
+ console.error('Error fetching tools:', error);
134
+ setToolsError(error.message);
135
+ setToolsLoading(false);
136
+ // Set empty tools array as fallback
137
+ setTools([]);
138
+ }
139
+ }
140
+
141
+ if (sessionManager && step === STEPS.CAPABILITIES) {
142
+ fetchTools();
143
+ }
144
+ }, [sessionManager, step]);
145
+
146
+ // Helper function to format model names for display
147
+ function formatModelLabel(model) {
148
+ // Use displayName from API if available
149
+ if (model.displayName) {
150
+ return model.displayName;
151
+ }
152
+
153
+ // Otherwise, format the name field programmatically
154
+ // Convert "anthropic-sonnet" to "Anthropic Sonnet"
155
+ const name = model.name || '';
156
+ return name
157
+ .split('-')
158
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
159
+ .join(' ');
160
+ }
161
+
162
+ // Helper function to truncate text with ellipsis
163
+ function truncate(text, maxLength) {
164
+ if (text.length <= maxLength) return text;
165
+ return text.substring(0, maxLength - 3) + '...';
166
+ }
167
+
168
+ // Helper function to format model descriptions from API data
169
+ function formatModelDescription(model) {
170
+ // Use API data for description
171
+ const parts = [];
172
+
173
+ if (model.category) {
174
+ parts.push(model.category);
175
+ }
176
+
177
+ if (model.maxTokens) {
178
+ parts.push(`${(model.maxTokens / 1000).toFixed(0)}K tokens`);
179
+ }
180
+
181
+ if (model.pricing?.input) {
182
+ parts.push(`$${model.pricing.input}/1K`);
183
+ }
184
+
185
+ if (model.supportsVision) {
186
+ parts.push('vision');
187
+ }
188
+
189
+ const description = parts.length > 0 ? parts.join(', ') : model.type || 'LLM';
190
+
191
+ // Truncate to max 50 characters to prevent wrapping
192
+ return truncate(description, 50);
193
+ }
194
+
195
+ useInput((char, key) => {
196
+ // Cancel on Escape
197
+ if (key.escape) {
198
+ // Defer callback to avoid setState during render
199
+ setTimeout(() => onCancel(), 0);
200
+ return;
201
+ }
202
+
203
+ // Back on Ctrl+B
204
+ if (key.ctrl && char === 'b' && step > STEPS.NAME) {
205
+ // Skip routing strategy step if dynamic routing is disabled
206
+ const prevStep = (step === STEPS.CAPABILITIES && !formData.dynamicModelRouting)
207
+ ? STEPS.DYNAMIC_ROUTING
208
+ : step - 1;
209
+ setStep(prevStep);
210
+ return;
211
+ }
212
+
213
+ // Handle based on current step
214
+ if (step === STEPS.NAME || step === STEPS.SYSTEM_PROMPT || step === STEPS.ROUTING_STRATEGY) {
215
+ // Text input steps
216
+ if (key.return) {
217
+ if (step === STEPS.NAME && inputBuffer.trim()) {
218
+ setFormData({ ...formData, name: inputBuffer.trim() });
219
+ setInputBuffer('');
220
+ setStep(STEPS.MODEL);
221
+ } else if (step === STEPS.ROUTING_STRATEGY) {
222
+ setFormData({ ...formData, routingStrategy: inputBuffer.trim() });
223
+ setInputBuffer('');
224
+ setStep(STEPS.CAPABILITIES);
225
+ } else if (step === STEPS.SYSTEM_PROMPT) {
226
+ setFormData({ ...formData, systemPrompt: inputBuffer.trim() });
227
+ setInputBuffer('');
228
+ setStep(STEPS.CONFIRM);
229
+ }
230
+ } else if (key.backspace || key.delete) {
231
+ setInputBuffer(prev => prev.slice(0, -1));
232
+ } else if (char && !key.ctrl && !key.meta) {
233
+ setInputBuffer(prev => prev + char);
234
+ }
235
+ } else if (step === STEPS.MODEL || step === STEPS.MODE || step === STEPS.DYNAMIC_ROUTING) {
236
+ // Selection steps (single-select)
237
+ const options = step === STEPS.MODEL ? models : (step === STEPS.MODE ? MODES : DYNAMIC_ROUTING_OPTIONS);
238
+
239
+ if (key.upArrow) {
240
+ setSelectedIndex(prev => {
241
+ const newIndex = Math.max(0, prev - 1);
242
+ // Scroll up if needed (for MODEL step only)
243
+ if (step === STEPS.MODEL && newIndex < scrollOffset) {
244
+ setScrollOffset(newIndex);
245
+ }
246
+ return newIndex;
247
+ });
248
+ } else if (key.downArrow) {
249
+ setSelectedIndex(prev => {
250
+ const newIndex = Math.min(options.length - 1, prev + 1);
251
+ // Scroll down if needed (for MODEL step only)
252
+ if (step === STEPS.MODEL && newIndex >= scrollOffset + MAX_VISIBLE_MODELS) {
253
+ setScrollOffset(newIndex - MAX_VISIBLE_MODELS + 1);
254
+ }
255
+ return newIndex;
256
+ });
257
+ } else if (key.return) {
258
+ if (step === STEPS.MODEL) {
259
+ setFormData({ ...formData, model: models[selectedIndex].value });
260
+ setSelectedIndex(0);
261
+ setScrollOffset(0);
262
+ setStep(STEPS.MODE);
263
+ } else if (step === STEPS.MODE) {
264
+ setFormData({ ...formData, mode: MODES[selectedIndex].value });
265
+ setSelectedIndex(0);
266
+ setStep(STEPS.DYNAMIC_ROUTING);
267
+ } else if (step === STEPS.DYNAMIC_ROUTING) {
268
+ const routingEnabled = DYNAMIC_ROUTING_OPTIONS[selectedIndex].value;
269
+ setFormData({ ...formData, dynamicModelRouting: routingEnabled });
270
+ setSelectedIndex(0);
271
+ setInputBuffer('');
272
+ // Skip strategy step if routing is disabled
273
+ setStep(routingEnabled ? STEPS.ROUTING_STRATEGY : STEPS.CAPABILITIES);
274
+ }
275
+ }
276
+ } else if (step === STEPS.CAPABILITIES) {
277
+ // Multi-select step for capabilities (tools) with scrolling
278
+ if (key.upArrow) {
279
+ setSelectedIndex(prev => {
280
+ const newIndex = Math.max(0, prev - 1);
281
+ // Adjust scroll offset to keep selected item visible
282
+ setScrollOffset(currentOffset => {
283
+ if (newIndex < currentOffset) {
284
+ return newIndex; // Scroll up to show item
285
+ }
286
+ return currentOffset;
287
+ });
288
+ return newIndex;
289
+ });
290
+ } else if (key.downArrow) {
291
+ setSelectedIndex(prev => {
292
+ const newIndex = Math.min(tools.length - 1, prev + 1);
293
+ // Adjust scroll offset to keep selected item visible
294
+ setScrollOffset(currentOffset => {
295
+ if (newIndex >= currentOffset + MAX_VISIBLE_ITEMS) {
296
+ return newIndex - MAX_VISIBLE_ITEMS + 1; // Scroll down to show item
297
+ }
298
+ return currentOffset;
299
+ });
300
+ return newIndex;
301
+ });
302
+ } else if (char === ' ' || key.space) {
303
+ // Toggle selection
304
+ if (tools.length > 0 && tools[selectedIndex]) {
305
+ const toolName = tools[selectedIndex].value;
306
+ setFormData(prev => {
307
+ const capabilities = prev.capabilities || [];
308
+ const isSelected = capabilities.includes(toolName);
309
+ return {
310
+ ...prev,
311
+ capabilities: isSelected
312
+ ? capabilities.filter(c => c !== toolName)
313
+ : [...capabilities, toolName]
314
+ };
315
+ });
316
+ }
317
+ } else if (key.return) {
318
+ // Continue to next step
319
+ setSelectedIndex(0);
320
+ setScrollOffset(0); // Reset scroll
321
+ setStep(STEPS.SYSTEM_PROMPT);
322
+ }
323
+ } else if (step === STEPS.CONFIRM) {
324
+ // Confirmation step
325
+ if (key.return) {
326
+ // Defer callback to avoid setState during render
327
+ setTimeout(() => {
328
+ onCreate(formData);
329
+ }, 0);
330
+ return;
331
+ }
332
+ }
333
+ });
334
+
335
+ const renderStep = () => {
336
+ if (step === STEPS.NAME) {
337
+ return React.createElement(
338
+ Box,
339
+ { flexDirection: 'column' },
340
+ React.createElement(Text, {}, 'Enter agent name:'),
341
+ React.createElement(
342
+ Box,
343
+ { marginTop: 1 },
344
+ React.createElement(Text, {}, '> ', inputBuffer, String.fromCharCode(0x2588))
345
+ )
346
+ );
347
+ }
348
+
349
+ if (step === STEPS.MODEL) {
350
+ return React.createElement(
351
+ Box,
352
+ { flexDirection: 'column', alignItems: 'center' },
353
+ React.createElement(Text, {}, 'Select model:'),
354
+ React.createElement(
355
+ Box,
356
+ { flexDirection: 'column', marginTop: 1, alignItems: 'center', width: '100%' },
357
+ modelsLoading
358
+ ? React.createElement(Text, { dimColor: true }, 'Loading models from server...')
359
+ : modelsError
360
+ ? React.createElement(
361
+ Box,
362
+ { flexDirection: 'column', alignItems: 'center' },
363
+ React.createElement(Text, { color: 'red' }, 'Failed to load models:'),
364
+ React.createElement(Text, { dimColor: true }, modelsError),
365
+ React.createElement(Text, { dimColor: true, marginTop: 1 }, 'Press Esc to cancel')
366
+ )
367
+ : models.length === 0
368
+ ? React.createElement(Text, { dimColor: true }, 'No models available')
369
+ : React.createElement(
370
+ Box,
371
+ { flexDirection: 'column', alignItems: 'center' },
372
+ // Visible models (with scroll window)
373
+ models.slice(scrollOffset, scrollOffset + MAX_VISIBLE_MODELS).map((model, visibleIndex) => {
374
+ const actualIndex = scrollOffset + visibleIndex;
375
+ const isSelected = actualIndex === selectedIndex;
376
+
377
+ return React.createElement(
378
+ Box,
379
+ { key: model.value },
380
+ React.createElement(
381
+ Text,
382
+ { backgroundColor: isSelected ? 'blue' : undefined, color: isSelected ? 'white' : undefined },
383
+ isSelected ? '> ' : ' ',
384
+ model.label,
385
+ React.createElement(Text, { dimColor: true }, ` - ${model.description}`)
386
+ )
387
+ );
388
+ }),
389
+ // Scroll indicator
390
+ models.length > MAX_VISIBLE_MODELS &&
391
+ React.createElement(
392
+ Box,
393
+ { marginTop: 1 },
394
+ React.createElement(
395
+ Text,
396
+ { dimColor: true },
397
+ `Showing ${scrollOffset + 1}-${Math.min(scrollOffset + MAX_VISIBLE_MODELS, models.length)} of ${models.length}`
398
+ )
399
+ )
400
+ )
401
+ )
402
+ );
403
+ }
404
+
405
+ if (step === STEPS.MODE) {
406
+ return React.createElement(
407
+ Box,
408
+ { flexDirection: 'column', alignItems: 'center' },
409
+ React.createElement(Text, {}, 'Select mode:'),
410
+ React.createElement(
411
+ Box,
412
+ { flexDirection: 'column', marginTop: 1, alignItems: 'center' },
413
+ MODES.map((mode, index) =>
414
+ React.createElement(
415
+ Box,
416
+ { key: mode.value },
417
+ React.createElement(
418
+ Text,
419
+ { backgroundColor: index === selectedIndex ? 'blue' : undefined, color: index === selectedIndex ? 'white' : undefined },
420
+ index === selectedIndex ? '> ' : ' ',
421
+ mode.label,
422
+ React.createElement(Text, { dimColor: true }, ` - ${mode.description}`)
423
+ )
424
+ )
425
+ )
426
+ )
427
+ );
428
+ }
429
+
430
+ if (step === STEPS.DYNAMIC_ROUTING) {
431
+ return React.createElement(
432
+ Box,
433
+ { flexDirection: 'column', alignItems: 'center', width: '80%' },
434
+ React.createElement(Text, { bold: true }, 'Dynamic Model Routing'),
435
+ React.createElement(
436
+ Box,
437
+ { flexDirection: 'column', marginTop: 1, alignItems: 'center', borderStyle: 'single', borderColor: 'cyan', paddingX: 2, paddingY: 1, width: '100%' },
438
+ React.createElement(Text, { dimColor: true, textAlign: 'center' }, 'Enable automatic API provider selection based on session context'),
439
+ React.createElement(
440
+ Box,
441
+ { flexDirection: 'column', marginTop: 1, width: '100%' },
442
+ DYNAMIC_ROUTING_OPTIONS.map((option, index) =>
443
+ React.createElement(
444
+ Box,
445
+ { key: String(option.value), marginTop: index > 0 ? 1 : 0 },
446
+ React.createElement(
447
+ Text,
448
+ { backgroundColor: index === selectedIndex ? 'blue' : undefined, color: index === selectedIndex ? 'white' : undefined },
449
+ index === selectedIndex ? '● ' : '○ ',
450
+ option.label,
451
+ React.createElement(Text, { dimColor: true }, ` (${option.description})`)
452
+ )
453
+ )
454
+ )
455
+ )
456
+ )
457
+ );
458
+ }
459
+
460
+ if (step === STEPS.ROUTING_STRATEGY) {
461
+ return React.createElement(
462
+ Box,
463
+ { flexDirection: 'column', alignItems: 'center', width: '80%' },
464
+ React.createElement(Text, { bold: true }, 'Routing Strategy (Optional)'),
465
+ React.createElement(
466
+ Box,
467
+ { flexDirection: 'column', marginTop: 1, borderStyle: 'single', borderColor: 'cyan', paddingX: 2, paddingY: 1, width: '100%' },
468
+ React.createElement(Text, { dimColor: true }, 'Custom instructions for model selection. Press Enter to skip.'),
469
+ React.createElement(Text, { dimColor: true, italic: true }, 'e.g. Prefer fast models for short questions. Use Claude for code.'),
470
+ React.createElement(
471
+ Box,
472
+ { marginTop: 1 },
473
+ React.createElement(Text, { color: 'cyan' }, '> '),
474
+ React.createElement(Text, null, inputBuffer || '')
475
+ )
476
+ )
477
+ );
478
+ }
479
+
480
+ if (step === STEPS.CAPABILITIES) {
481
+ const selectedCapabilities = formData.capabilities || [];
482
+ const selectedCount = selectedCapabilities.length;
483
+
484
+ return React.createElement(
485
+ Box,
486
+ { flexDirection: 'column', alignItems: 'center', width: '100%', maxHeight: contentMaxHeight },
487
+ React.createElement(Text, { bold: true }, 'Select Capabilities (Tools)'),
488
+ React.createElement(
489
+ Box,
490
+ { flexDirection: 'column', marginTop: 1, borderStyle: 'single', borderColor: 'cyan', paddingX: 2, paddingY: 1, width: '100%', maxHeight: contentMaxHeight - 6 },
491
+ // Show loading state
492
+ toolsLoading && React.createElement(
493
+ Box,
494
+ { justifyContent: 'center', paddingY: 2 },
495
+ React.createElement(Text, { color: 'yellow' }, '⏳ Loading available tools from API...')
496
+ ),
497
+ // Show error state
498
+ toolsError && React.createElement(
499
+ Box,
500
+ { flexDirection: 'column', paddingY: 1 },
501
+ React.createElement(Text, { color: 'red' }, '✗ Error loading tools: ', toolsError),
502
+ React.createElement(Text, { dimColor: true, marginTop: 1 }, 'Press Enter to continue without tools')
503
+ ),
504
+ // Show tools list (if loaded successfully) - with scrolling viewport
505
+ !toolsLoading && !toolsError && tools.length > 0 && (() => {
506
+ // Calculate visible slice of tools
507
+ const visibleTools = tools.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS);
508
+ const hasMore = tools.length > MAX_VISIBLE_ITEMS;
509
+ const showingFrom = scrollOffset + 1;
510
+ const showingTo = Math.min(scrollOffset + MAX_VISIBLE_ITEMS, tools.length);
511
+
512
+ return [
513
+ // Visible tools
514
+ ...visibleTools.map((tool, visibleIndex) => {
515
+ const actualIndex = scrollOffset + visibleIndex;
516
+ const isSelected = selectedCapabilities.includes(tool.value);
517
+ const isCurrent = actualIndex === selectedIndex;
518
+
519
+ // Create compact display: checkbox + label only, truncated to fit terminal
520
+ // Available width = 95% of terminal - borders(2) - padding(4) - checkbox(6) ≈ 0.95*width - 12
521
+ const maxLabelLength = Math.max(40, Math.floor(terminalWidth * 0.95) - 12);
522
+ const displayText = `${isCurrent ? '▶' : ' '} ${isSelected ? '[✓]' : '[ ]'} ${truncate(tool.label, maxLabelLength)}`;
523
+
524
+ return React.createElement(
525
+ Box,
526
+ { key: tool.value },
527
+ React.createElement(
528
+ Text,
529
+ {
530
+ backgroundColor: isCurrent ? 'blue' : undefined,
531
+ color: isCurrent ? 'white' : undefined
532
+ },
533
+ displayText
534
+ )
535
+ );
536
+ }),
537
+ ];
538
+ })(),
539
+ // Show empty state (if no tools available)
540
+ !toolsLoading && !toolsError && tools.length === 0 && React.createElement(
541
+ Box,
542
+ { justifyContent: 'center', paddingY: 2 },
543
+ React.createElement(Text, { dimColor: true }, 'No tools available. Press Enter to continue.')
544
+ ),
545
+ // Compact status line (selection count + scroll info) - only show if tools are loaded
546
+ !toolsLoading && !toolsError && tools.length > 0 && (() => {
547
+ const showingFrom = scrollOffset + 1;
548
+ const showingTo = Math.min(scrollOffset + MAX_VISIBLE_ITEMS, tools.length);
549
+ const hasScrollUp = scrollOffset > 0;
550
+ const hasScrollDown = scrollOffset + MAX_VISIBLE_ITEMS < tools.length;
551
+
552
+ // Build compact status line
553
+ const parts = [];
554
+
555
+ // Scroll up indicator
556
+ if (hasScrollUp) {
557
+ parts.push(`↑${scrollOffset} more`);
558
+ }
559
+
560
+ // Selection count (always show)
561
+ parts.push(`${selectedCount} selected`);
562
+
563
+ // Current view range (only if there are more tools than visible)
564
+ if (tools.length > MAX_VISIBLE_ITEMS) {
565
+ parts.push(`${showingFrom}-${showingTo}/${tools.length}`);
566
+ }
567
+
568
+ // Scroll down indicator
569
+ if (hasScrollDown) {
570
+ parts.push(`${tools.length - showingTo} more↓`);
571
+ }
572
+
573
+ return React.createElement(
574
+ Box,
575
+ { marginTop: 1, justifyContent: 'center' },
576
+ React.createElement(
577
+ Text,
578
+ { dimColor: true },
579
+ parts.join(' • ')
580
+ )
581
+ );
582
+ })()
583
+ )
584
+ );
585
+ }
586
+
587
+ if (step === STEPS.SYSTEM_PROMPT) {
588
+ return React.createElement(
589
+ Box,
590
+ { flexDirection: 'column' },
591
+ React.createElement(Text, {}, 'System prompt (optional, press Enter to skip):'),
592
+ React.createElement(
593
+ Box,
594
+ { marginTop: 1 },
595
+ React.createElement(Text, {}, '> ', inputBuffer, String.fromCharCode(0x2588))
596
+ )
597
+ );
598
+ }
599
+
600
+ if (step === STEPS.CONFIRM) {
601
+ const selectedCapabilities = formData.capabilities || [];
602
+ // Map selected tool names to their labels (or fallback to the name if not found)
603
+ const capabilityLabels = selectedCapabilities.map(cap =>
604
+ tools.find(t => t.value === cap)?.label || cap
605
+ );
606
+
607
+ return React.createElement(
608
+ Box,
609
+ { flexDirection: 'column' },
610
+ React.createElement(Text, { bold: true }, 'Confirm agent creation:'),
611
+ React.createElement(Box, { marginTop: 1 }, React.createElement(Text, {}, 'Name: ', React.createElement(Text, { color: 'cyan' }, formData.name))),
612
+ React.createElement(Box, {}, React.createElement(Text, {}, 'Model: ', React.createElement(Text, { color: 'cyan' }, models.find(m => m.value === formData.model)?.label || formData.model))),
613
+ React.createElement(Box, {}, React.createElement(Text, {}, 'Mode: ', React.createElement(Text, { color: 'cyan' }, MODES.find(m => m.value === formData.mode)?.label))),
614
+ React.createElement(
615
+ Box,
616
+ {},
617
+ React.createElement(Text, {}, 'Dynamic Routing: ', React.createElement(Text, { color: formData.dynamicModelRouting ? 'green' : 'yellow' }, formData.dynamicModelRouting ? 'Enabled' : 'Disabled'))
618
+ ),
619
+ formData.dynamicModelRouting && formData.routingStrategy && React.createElement(
620
+ Box,
621
+ {},
622
+ React.createElement(Text, {}, 'Routing Strategy: ', React.createElement(Text, { color: 'cyan', dimColor: true }, formData.routingStrategy.length > 60 ? formData.routingStrategy.slice(0, 57) + '...' : formData.routingStrategy))
623
+ ),
624
+ React.createElement(
625
+ Box,
626
+ {},
627
+ React.createElement(Text, {}, 'Capabilities: ', React.createElement(
628
+ Text,
629
+ { color: 'cyan' },
630
+ selectedCapabilities.length > 0 ? `${selectedCapabilities.length} selected` : 'None'
631
+ ))
632
+ ),
633
+ selectedCapabilities.length > 0 && React.createElement(
634
+ Box,
635
+ { flexDirection: 'column', marginLeft: 2, marginTop: 1 },
636
+ capabilityLabels.map((label, index) =>
637
+ React.createElement(Text, { key: index, dimColor: true }, `• ${label}`)
638
+ )
639
+ ),
640
+ formData.systemPrompt &&
641
+ React.createElement(Box, { marginTop: 1 }, React.createElement(Text, {}, 'Prompt: ', React.createElement(Text, { color: 'cyan', dimColor: true }, formData.systemPrompt.substring(0, 40) + '...'))),
642
+ React.createElement(
643
+ Box,
644
+ { marginTop: 1 },
645
+ React.createElement(Text, { color: 'green' }, 'Press Enter to create, Esc to cancel')
646
+ )
647
+ );
648
+ }
649
+ };
650
+
651
+ // Calculate constrained heights to prevent overflow
652
+ const dialogMaxHeight = Math.floor(terminalHeight * 0.85) - 2; // Dialog takes max 85% of screen minus 2 rows for breathing room
653
+ const contentMaxHeight = dialogMaxHeight - 7; // Leave room for header (3) + footer (4)
654
+
655
+ return React.createElement(
656
+ Box,
657
+ {
658
+ flexDirection: 'column',
659
+ minHeight: terminalHeight,
660
+ maxHeight: terminalHeight,
661
+ justifyContent: 'center',
662
+ alignItems: 'center',
663
+ backgroundColor: 'black',
664
+ },
665
+ React.createElement(
666
+ Box,
667
+ {
668
+ flexDirection: 'column',
669
+ width: '95%',
670
+ maxHeight: dialogMaxHeight,
671
+ borderStyle: 'round',
672
+ borderColor: 'cyan',
673
+ backgroundColor: 'black',
674
+ paddingX: 2,
675
+ paddingY: 1
676
+ },
677
+ React.createElement(
678
+ Box,
679
+ { marginBottom: 1 },
680
+ React.createElement(Text, { bold: true, color: 'cyan' }, `Create New Agent (Step ${step + 1}/${Object.keys(STEPS).length})`)
681
+ ),
682
+ renderStep(),
683
+ React.createElement(
684
+ Box,
685
+ { marginTop: 1, borderTop: true, borderStyle: 'single', paddingTop: 1 },
686
+ React.createElement(
687
+ Text,
688
+ { dimColor: true },
689
+ // Show appropriate shortcuts for current step
690
+ step === STEPS.CONFIRM
691
+ ? 'Enter: Create Ctrl+B: Back Esc: Cancel'
692
+ : step === STEPS.NAME || step === STEPS.SYSTEM_PROMPT || step === STEPS.ROUTING_STRATEGY
693
+ ? 'Enter: Next Esc: Cancel'
694
+ : step === STEPS.CAPABILITIES
695
+ ? '↑↓: Navigate Space: Toggle Enter: Continue Ctrl+B: Back Esc: Cancel'
696
+ : step === STEPS.MODEL || step === STEPS.MODE || step === STEPS.DYNAMIC_ROUTING
697
+ ? '↑↓: Navigate Enter: Select Ctrl+B: Back Esc: Cancel'
698
+ : 'Esc: Cancel'
699
+ )
700
+ )
701
+ )
702
+ );
703
+ }
704
+
705
+ export default AgentCreator;