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
package/bin/cli.js ADDED
@@ -0,0 +1,556 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Loxia Autopilot One - CLI Entry Point
5
+ *
6
+ * Commands:
7
+ * loxia web - Start server (serves Web UI) + open browser
8
+ * loxia serve - Start server only (no UI)
9
+ * loxia terminal - Start Terminal UI only (server must be running)
10
+ * loxia plus-web - Alias for 'web'
11
+ * loxia plus-terminal - Start server (background) + Terminal UI (foreground)
12
+ * loxia trigger-schedule <id> - Trigger a scheduled task (wakes server if needed)
13
+ */
14
+
15
+ import { fileURLToPath } from 'url';
16
+ import { dirname, join } from 'path';
17
+ import { spawn } from 'child_process';
18
+ import { readFileSync } from 'fs';
19
+ import http from 'http';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
23
+
24
+ // Default configuration
25
+ const DEFAULT_PORT = 8080;
26
+ // Use 127.0.0.1 instead of 'localhost' to avoid IPv6 issues in WSL2
27
+ const DEFAULT_HOST = '127.0.0.1';
28
+ const SERVER_STARTUP_TIMEOUT = 15000;
29
+ const SERVER_CHECK_INTERVAL = 500;
30
+
31
+ // Parse CLI arguments
32
+ const args = process.argv.slice(2);
33
+ const command = args[0] && !args[0].startsWith('--') ? args[0] : null;
34
+ const flags = {
35
+ port: null,
36
+ host: null,
37
+ help: args.includes('--help') || args.includes('-h'),
38
+ version: args.includes('--version') || args.includes('-v')
39
+ };
40
+
41
+ // Extract port and host if provided
42
+ for (let i = 0; i < args.length; i++) {
43
+ if (args[i] === '--port' && args[i + 1]) {
44
+ flags.port = parseInt(args[i + 1], 10);
45
+ }
46
+ if (args[i] === '--host' && args[i + 1]) {
47
+ flags.host = args[i + 1];
48
+ }
49
+ }
50
+
51
+ // Only use default port if explicitly specified, otherwise let server choose
52
+ const explicitPort = flags.port;
53
+ const host = flags.host || DEFAULT_HOST;
54
+
55
+ // Show version
56
+ if (flags.version) {
57
+ const pkgPath = join(__dirname, '..', 'package.json');
58
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
59
+ console.log(`Loxia Autopilot One v${pkg.version}`);
60
+ process.exit(0);
61
+ }
62
+
63
+ // Show help
64
+ if (flags.help || !command) {
65
+ const pkgPath = join(__dirname, '..', 'package.json');
66
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
67
+
68
+ console.log(`
69
+ Loxia Autopilot One v${pkg.version} - AI Agent System
70
+
71
+ Usage:
72
+ loxia <command> [options]
73
+
74
+ Commands:
75
+ web Start server + open Web UI in browser
76
+ serve Start server only (no UI opened)
77
+ terminal Start Terminal UI (server must be running)
78
+ plus-web Alias for 'web'
79
+ plus-terminal Start server + Terminal UI together
80
+ trigger-schedule <id> Trigger a scheduled task (wakes server if needed)
81
+
82
+ Options:
83
+ --port <number> Specify port (default: auto-select starting from ${DEFAULT_PORT})
84
+ --host <host> Specify host (default: ${DEFAULT_HOST})
85
+ -h, --help Show this help message
86
+ -v, --version Show version number
87
+
88
+ Examples:
89
+ loxia web # Start server + open browser
90
+ loxia serve # Start server only (headless)
91
+ loxia terminal # Connect Terminal UI to running server
92
+ loxia plus-terminal # Start server + Terminal UI
93
+ loxia web --port 3000 # Use specific port
94
+
95
+ Quick Start:
96
+ 1. Run 'loxia web' to start with Web UI
97
+ 2. Or run 'loxia plus-terminal' for Terminal UI experience
98
+ 3. Or run 'loxia serve' for headless server (connect remotely)
99
+
100
+ Note: If no port is specified, the server will automatically find
101
+ an available port. The Terminal UI will discover the server port
102
+ automatically from the port registry.
103
+
104
+ Documentation:
105
+ https://autopilot.loxia.ai
106
+
107
+ `);
108
+ process.exit(0);
109
+ }
110
+
111
+ /**
112
+ * Dynamically import the port registry
113
+ */
114
+ async function getPortRegistry() {
115
+ const { getPortRegistry } = await import('../src/services/portRegistry.js');
116
+ return getPortRegistry();
117
+ }
118
+
119
+ /**
120
+ * Discover backend from port registry
121
+ * @returns {Promise<{host: string, port: number}|null>}
122
+ */
123
+ async function discoverBackend() {
124
+ try {
125
+ const portRegistry = await getPortRegistry();
126
+ await portRegistry.cleanupStaleEntries();
127
+ const backendInfo = await portRegistry.getService('backend');
128
+
129
+ if (backendInfo) {
130
+ return {
131
+ host: backendInfo.host || 'localhost',
132
+ port: backendInfo.port,
133
+ pid: backendInfo.pid
134
+ };
135
+ }
136
+ return null;
137
+ } catch (error) {
138
+ // Registry may not exist yet
139
+ return null;
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Check if server is running at the specified host:port
145
+ */
146
+ async function checkServerRunning(host, port, maxAttempts = 1) {
147
+ for (let i = 0; i < maxAttempts; i++) {
148
+ const isRunning = await new Promise((resolve) => {
149
+ const req = http.get(`http://${host}:${port}/api/health`, (res) => {
150
+ resolve(res.statusCode === 200);
151
+ });
152
+ req.on('error', () => resolve(false));
153
+ req.setTimeout(2000, () => {
154
+ req.destroy();
155
+ resolve(false);
156
+ });
157
+ });
158
+
159
+ if (isRunning) return true;
160
+
161
+ if (i < maxAttempts - 1) {
162
+ await new Promise(resolve => setTimeout(resolve, SERVER_CHECK_INTERVAL));
163
+ }
164
+ }
165
+ return false;
166
+ }
167
+
168
+ /**
169
+ * Wait for server to become ready by polling the port registry
170
+ * @returns {Promise<{host: string, port: number}|null>}
171
+ */
172
+ async function waitForServerWithDiscovery(timeout = SERVER_STARTUP_TIMEOUT) {
173
+ const startTime = Date.now();
174
+
175
+ while (Date.now() - startTime < timeout) {
176
+ // Try to discover backend from registry
177
+ const backend = await discoverBackend();
178
+
179
+ if (backend) {
180
+ // Verify with health check
181
+ const isHealthy = await checkServerRunning(backend.host, backend.port);
182
+ if (isHealthy) {
183
+ return backend;
184
+ }
185
+ }
186
+
187
+ await new Promise(resolve => setTimeout(resolve, SERVER_CHECK_INTERVAL));
188
+ }
189
+
190
+ return null;
191
+ }
192
+
193
+ /**
194
+ * Wait for server at specific port (when port is explicitly specified)
195
+ */
196
+ async function waitForServerAtPort(host, port, timeout = SERVER_STARTUP_TIMEOUT) {
197
+ const maxAttempts = Math.ceil(timeout / SERVER_CHECK_INTERVAL);
198
+ const isReady = await checkServerRunning(host, port, maxAttempts);
199
+ return isReady ? { host, port } : null;
200
+ }
201
+
202
+ /**
203
+ * Open URL in default browser
204
+ * Uses spawn instead of exec for better security (no shell interpolation)
205
+ */
206
+ function openBrowser(url) {
207
+ let cmd, args;
208
+
209
+ if (process.platform === 'darwin') {
210
+ cmd = 'open';
211
+ args = [url];
212
+ } else if (process.platform === 'win32') {
213
+ cmd = 'cmd';
214
+ args = ['/c', 'start', '""', url];
215
+ } else {
216
+ cmd = 'xdg-open';
217
+ args = [url];
218
+ }
219
+
220
+ const child = spawn(cmd, args, {
221
+ detached: true,
222
+ stdio: 'ignore'
223
+ });
224
+ child.unref();
225
+
226
+ child.on('error', () => {
227
+ console.log(`Could not open browser automatically.`);
228
+ console.log(`Please open manually: ${url}`);
229
+ });
230
+ }
231
+
232
+ /**
233
+ * Start the backend server
234
+ * @param {boolean} silent - If true, suppress server output
235
+ * @returns {ChildProcess}
236
+ */
237
+ function startServer(silent = false) {
238
+ const env = { ...process.env };
239
+
240
+ // Only set port environment variables if explicitly specified
241
+ // Otherwise, let the server dynamically allocate a port
242
+ if (explicitPort) {
243
+ env.LOXIA_PORT = explicitPort.toString();
244
+ env.PORT = explicitPort.toString();
245
+ }
246
+
247
+ if (flags.host) {
248
+ env.LOXIA_HOST = flags.host;
249
+ }
250
+
251
+ const mainScript = join(__dirname, '..', 'src', 'index.js');
252
+
253
+ const child = spawn('node', [mainScript], {
254
+ cwd: join(__dirname, '..'),
255
+ env,
256
+ stdio: silent ? ['ignore', 'ignore', 'ignore'] : 'inherit',
257
+ detached: silent
258
+ });
259
+
260
+ if (silent) {
261
+ child.unref();
262
+ }
263
+
264
+ return child;
265
+ }
266
+
267
+ /**
268
+ * Start Terminal UI with discovered port
269
+ */
270
+ function startTerminalUIProcess(discoveredHost, discoveredPort) {
271
+ const terminalScript = join(__dirname, 'loxia-terminal.js');
272
+
273
+ const env = {
274
+ ...process.env,
275
+ LOXIA_PORT: discoveredPort.toString(),
276
+ LOXIA_HOST: discoveredHost
277
+ };
278
+
279
+ const child = spawn('node', [terminalScript], {
280
+ cwd: join(__dirname, '..'),
281
+ env,
282
+ stdio: 'inherit'
283
+ });
284
+
285
+ return child;
286
+ }
287
+
288
+ // Command handlers
289
+ const commands = {
290
+ // 'web' and 'plus-web': Start server + open browser
291
+ 'web': async () => {
292
+ console.log('Starting Loxia server...\n');
293
+
294
+ const serverProcess = startServer(false);
295
+
296
+ // Wait for server to be ready
297
+ console.log('Waiting for server to start...');
298
+
299
+ let backend;
300
+ if (explicitPort) {
301
+ backend = await waitForServerAtPort(host, explicitPort);
302
+ } else {
303
+ backend = await waitForServerWithDiscovery();
304
+ }
305
+
306
+ if (backend) {
307
+ const serverUrl = `http://${backend.host}:${backend.port}`;
308
+ console.log(`\nOpening Web UI at ${serverUrl}`);
309
+ openBrowser(serverUrl);
310
+ } else {
311
+ console.log(`\nServer may still be starting. Check the port registry or logs.`);
312
+ }
313
+
314
+ // Forward signals
315
+ process.on('SIGINT', () => serverProcess.kill('SIGINT'));
316
+ process.on('SIGTERM', () => serverProcess.kill('SIGTERM'));
317
+
318
+ serverProcess.on('exit', (code) => process.exit(code || 0));
319
+ },
320
+
321
+ 'plus-web': async () => {
322
+ // Alias for 'web'
323
+ await commands['web']();
324
+ },
325
+
326
+ // 'serve': Start server only (no UI)
327
+ 'serve': async () => {
328
+ console.log('Starting Loxia server...\n');
329
+
330
+ const serverProcess = startServer(false);
331
+
332
+ // Wait for server to be ready
333
+ console.log('Waiting for server to start...');
334
+
335
+ let backend;
336
+ if (explicitPort) {
337
+ backend = await waitForServerAtPort(host, explicitPort);
338
+ } else {
339
+ backend = await waitForServerWithDiscovery();
340
+ }
341
+
342
+ if (backend) {
343
+ const serverUrl = `http://${backend.host}:${backend.port}`;
344
+ console.log(`\n✓ Server running at ${serverUrl}`);
345
+ console.log(`\n Web UI: ${serverUrl}`);
346
+ console.log(` Terminal UI: loxia terminal`);
347
+ console.log(` API Health: ${serverUrl}/api/health\n`);
348
+ } else {
349
+ console.log(`\nServer started but may still be initializing.`);
350
+ console.log(`Run 'loxia terminal' to connect when ready.`);
351
+ }
352
+
353
+ // Forward signals for graceful shutdown
354
+ process.on('SIGINT', () => serverProcess.kill('SIGINT'));
355
+ process.on('SIGTERM', () => serverProcess.kill('SIGTERM'));
356
+
357
+ serverProcess.on('exit', (code) => process.exit(code || 0));
358
+ },
359
+
360
+ // 'terminal': Start Terminal UI only (server must be running)
361
+ 'terminal': async () => {
362
+ console.log('Looking for running server...');
363
+
364
+ // First try to discover from registry
365
+ let backend = await discoverBackend();
366
+
367
+ // If explicit port specified, use that instead
368
+ if (explicitPort) {
369
+ backend = { host, port: explicitPort };
370
+ }
371
+
372
+ if (!backend) {
373
+ console.error(`\nNo running server found in the port registry.`);
374
+ console.error('\nPlease start the server first:');
375
+ console.error(' loxia web # Start server + Web UI');
376
+ console.error(' loxia serve # Start server only');
377
+ console.error(' loxia plus-terminal # Start server + Terminal UI\n');
378
+ process.exit(1);
379
+ }
380
+
381
+ // Verify server is actually running
382
+ const isRunning = await checkServerRunning(backend.host, backend.port);
383
+
384
+ if (!isRunning) {
385
+ console.error(`\nServer registered at ${backend.host}:${backend.port} but not responding.`);
386
+ console.error('It may have crashed. Please restart it.');
387
+ process.exit(1);
388
+ }
389
+
390
+ console.log(`Server discovered at ${backend.host}:${backend.port}`);
391
+ console.log('Starting Terminal UI...\n');
392
+
393
+ const terminalProcess = startTerminalUIProcess(backend.host, backend.port);
394
+
395
+ process.on('SIGINT', () => terminalProcess.kill('SIGINT'));
396
+ process.on('SIGTERM', () => terminalProcess.kill('SIGTERM'));
397
+
398
+ terminalProcess.on('exit', (code) => process.exit(code || 0));
399
+ },
400
+
401
+ // 'plus-terminal': Start server (silent background) + Terminal UI (foreground)
402
+ 'plus-terminal': async () => {
403
+ console.log('Starting Loxia server in background...');
404
+
405
+ // Start server silently in background
406
+ const serverProcess = startServer(true);
407
+
408
+ // Wait for server to be ready
409
+ let backend;
410
+ if (explicitPort) {
411
+ backend = await waitForServerAtPort(host, explicitPort);
412
+ } else {
413
+ backend = await waitForServerWithDiscovery();
414
+ }
415
+
416
+ if (!backend) {
417
+ console.error('\nServer failed to start. Please check logs.');
418
+ process.exit(1);
419
+ }
420
+
421
+ console.log(`Server running at http://${backend.host}:${backend.port}`);
422
+ console.log('Starting Terminal UI...\n');
423
+
424
+ const terminalProcess = startTerminalUIProcess(backend.host, backend.port);
425
+
426
+ // When Terminal UI exits, also kill the server
427
+ terminalProcess.on('exit', (code) => {
428
+ console.log('\nShutting down server...');
429
+
430
+ // Try to kill the server process
431
+ try {
432
+ process.kill(serverProcess.pid, 'SIGTERM');
433
+ } catch (e) {
434
+ // Server may have already exited
435
+ }
436
+
437
+ process.exit(code || 0);
438
+ });
439
+
440
+ process.on('SIGINT', () => {
441
+ terminalProcess.kill('SIGINT');
442
+ });
443
+
444
+ process.on('SIGTERM', () => {
445
+ terminalProcess.kill('SIGTERM');
446
+ });
447
+ },
448
+
449
+ // 'trigger-schedule': Trigger a scheduled task, waking server if needed
450
+ 'trigger-schedule': async () => {
451
+ const scheduleId = args[1];
452
+ if (!scheduleId) {
453
+ console.error('Usage: loxia trigger-schedule <schedule-id>');
454
+ process.exit(1);
455
+ }
456
+
457
+ // Try to find a running server
458
+ let backend = await discoverBackend();
459
+ let weStartedServer = false;
460
+
461
+ if (backend) {
462
+ const isRunning = await checkServerRunning(backend.host, backend.port);
463
+ if (!isRunning) backend = null;
464
+ }
465
+
466
+ if (!backend) {
467
+ // No running server — wake one up silently
468
+ console.log('No running server found. Starting Loxia in background...');
469
+ startServer(true);
470
+ weStartedServer = true;
471
+
472
+ // Wait for it to come up
473
+ if (explicitPort) {
474
+ backend = await waitForServerAtPort(host, explicitPort, 30000);
475
+ } else {
476
+ backend = await waitForServerWithDiscovery(30000);
477
+ }
478
+
479
+ if (!backend) {
480
+ console.error('Failed to start server within 30s. Check logs.');
481
+ process.exit(1);
482
+ }
483
+ console.log(`Server started at ${backend.host}:${backend.port}`);
484
+ }
485
+
486
+ // Trigger the schedule via API
487
+ const triggerUrl = `http://${backend.host}:${backend.port}/api/schedules/${encodeURIComponent(scheduleId)}/trigger`;
488
+
489
+ try {
490
+ const result = await new Promise((resolve, reject) => {
491
+ const postData = JSON.stringify({});
492
+ const req = http.request(triggerUrl, {
493
+ method: 'POST',
494
+ headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) }
495
+ }, (res) => {
496
+ let data = '';
497
+ res.on('data', chunk => data += chunk);
498
+ res.on('end', () => {
499
+ try {
500
+ resolve(JSON.parse(data));
501
+ } catch {
502
+ reject(new Error(`Invalid response: ${data}`));
503
+ }
504
+ });
505
+ });
506
+ req.on('error', reject);
507
+ req.setTimeout(60000, () => { req.destroy(); reject(new Error('Request timed out')); });
508
+ req.write(postData);
509
+ req.end();
510
+ });
511
+
512
+ if (result.success) {
513
+ console.log(`Schedule "${result.scheduleName || scheduleId}" triggered successfully.`);
514
+ } else {
515
+ console.error(`Failed to trigger schedule: ${result.error}`);
516
+ process.exit(1);
517
+ }
518
+ } catch (err) {
519
+ console.error(`Failed to trigger schedule: ${err.message}`);
520
+ process.exit(1);
521
+ }
522
+
523
+ // If we started the server, set idle shutdown timer
524
+ if (weStartedServer) {
525
+ const idleUrl = `http://${backend.host}:${backend.port}/api/system/idle-shutdown`;
526
+ try {
527
+ const postData = JSON.stringify({ timeoutMinutes: 10 });
528
+ await new Promise((resolve) => {
529
+ const req = http.request(idleUrl, {
530
+ method: 'POST',
531
+ headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) }
532
+ }, (res) => { res.on('data', () => {}); res.on('end', resolve); });
533
+ req.on('error', resolve); // Non-critical, ignore errors
534
+ req.write(postData);
535
+ req.end();
536
+ });
537
+ } catch {
538
+ // Non-critical
539
+ }
540
+ }
541
+
542
+ process.exit(0);
543
+ }
544
+ };
545
+
546
+ // Execute command
547
+ if (commands[command]) {
548
+ commands[command]().catch((error) => {
549
+ console.error('Error:', error.message);
550
+ process.exit(1);
551
+ });
552
+ } else {
553
+ console.error(`Unknown command: ${command}`);
554
+ console.error('Run "loxia --help" for usage information.');
555
+ process.exit(1);
556
+ }
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Loxia Terminal UI Launcher (Ink-based)
5
+ * Cross-platform compatible including Windows
6
+ */
7
+
8
+ import { spawn } from 'child_process';
9
+ import net from 'net';
10
+ import path from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const projectRoot = path.dirname(__dirname);
16
+
17
+ // Configuration
18
+ const DEFAULT_PORT = 8080;
19
+ const DEFAULT_HOST = 'localhost';
20
+ const SERVER_STARTUP_TIMEOUT = 10000;
21
+
22
+ /**
23
+ * Check if server is running
24
+ */
25
+ async function isServerRunning(host, port) {
26
+ return new Promise((resolve) => {
27
+ const socket = new net.Socket();
28
+ socket.setTimeout(2000);
29
+
30
+ socket.on('connect', () => {
31
+ socket.destroy();
32
+ resolve(true);
33
+ });
34
+
35
+ socket.on('timeout', () => {
36
+ socket.destroy();
37
+ resolve(false);
38
+ });
39
+
40
+ socket.on('error', () => {
41
+ socket.destroy();
42
+ resolve(false);
43
+ });
44
+
45
+ socket.connect(port, host);
46
+ });
47
+ }
48
+
49
+ /**
50
+ * Start the Loxia server
51
+ */
52
+ async function startServer(host, port) {
53
+ console.log('🚀 Starting Loxia server...');
54
+
55
+ return new Promise((resolve, reject) => {
56
+ const serverProcess = spawn('node', [
57
+ path.join(projectRoot, 'bin/cli.js'),
58
+ '--ui', 'web',
59
+ '--host', host,
60
+ '--port', port.toString()
61
+ ], {
62
+ detached: false,
63
+ stdio: ['ignore', 'pipe', 'pipe']
64
+ });
65
+
66
+ serverProcess.stdout.on('data', () => {
67
+ // Silently consume
68
+ });
69
+
70
+ serverProcess.stderr.on('data', () => {
71
+ // Silently consume
72
+ });
73
+
74
+ serverProcess.on('error', (error) => {
75
+ console.error('Failed to start server:', error.message);
76
+ reject(error);
77
+ });
78
+
79
+ // Wait for server to start
80
+ const startTime = Date.now();
81
+ const checkInterval = setInterval(async () => {
82
+ const running = await isServerRunning(host, port);
83
+
84
+ if (running) {
85
+ clearInterval(checkInterval);
86
+ console.log(`✓ Server started at ${host}:${port}`);
87
+ resolve();
88
+ } else if (Date.now() - startTime > SERVER_STARTUP_TIMEOUT) {
89
+ clearInterval(checkInterval);
90
+ serverProcess.kill();
91
+ reject(new Error('Server startup timeout'));
92
+ }
93
+ }, 500);
94
+ });
95
+ }
96
+
97
+ /**
98
+ * Main entry point
99
+ */
100
+ async function main() {
101
+ try {
102
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
103
+ console.log(' Loxia Autopilot One - Terminal UI');
104
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
105
+ console.log('');
106
+
107
+ // Parse command line arguments
108
+ const args = process.argv.slice(2);
109
+ let host = DEFAULT_HOST;
110
+ let port = DEFAULT_PORT;
111
+
112
+ for (let i = 0; i < args.length; i++) {
113
+ if (args[i] === '--host' && args[i + 1]) {
114
+ host = args[i + 1];
115
+ i++;
116
+ } else if (args[i] === '--port' && args[i + 1]) {
117
+ port = parseInt(args[i + 1], 10);
118
+ i++;
119
+ }
120
+ }
121
+
122
+ // Check if server is running
123
+ console.log(`🔍 Checking if server is running at ${host}:${port}...`);
124
+ const serverRunning = await isServerRunning(host, port);
125
+
126
+ if (!serverRunning) {
127
+ console.log('✗ Server is not running');
128
+ await startServer(host, port);
129
+ } else {
130
+ console.log(`✓ Server is already running at ${host}:${port}`);
131
+ }
132
+
133
+ console.log('');
134
+ console.log('🎨 Launching Ink-based Terminal UI...');
135
+ console.log('');
136
+
137
+ // Small delay
138
+ await new Promise(resolve => setTimeout(resolve, 500));
139
+
140
+ // Set environment variables for Ink app
141
+ process.env.LOXIA_HOST = host;
142
+ process.env.LOXIA_PORT = port.toString();
143
+
144
+ // Launch Terminal UI
145
+ await import('../src/interfaces/terminal/index.js');
146
+
147
+ } catch (error) {
148
+ console.error('');
149
+ console.error('❌ Failed to start Terminal UI:');
150
+ console.error(' ', error.message);
151
+ console.error('');
152
+ console.error('💡 Troubleshooting:');
153
+ console.error(' 1. Make sure no other process is using port 8080');
154
+ console.error(' 2. Try running the server manually: node bin/cli.js');
155
+ console.error(' 3. Check logs for more details');
156
+ console.error('');
157
+ process.exit(1);
158
+ }
159
+ }
160
+
161
+ // Run
162
+ main();