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.
- package/LICENSE +267 -0
- package/README.md +425 -0
- package/bin/cli.js +556 -0
- package/bin/loxia-terminal-v2.js +162 -0
- package/bin/loxia-terminal.js +90 -0
- package/bin/start-with-terminal.js +200 -0
- package/node_modules/@isaacs/balanced-match/LICENSE.md +23 -0
- package/node_modules/@isaacs/balanced-match/README.md +60 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts +9 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js +59 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts +9 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.js +54 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/balanced-match/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/balanced-match/package.json +79 -0
- package/node_modules/@isaacs/brace-expansion/LICENSE +23 -0
- package/node_modules/@isaacs/brace-expansion/README.md +97 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts +6 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js +199 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts +6 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.js +195 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/brace-expansion/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/brace-expansion/package.json +60 -0
- package/node_modules/glob/LICENSE.md +63 -0
- package/node_modules/glob/README.md +1177 -0
- package/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
- package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/glob.js +247 -0
- package/node_modules/glob/dist/commonjs/glob.js.map +1 -0
- package/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
- package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/has-magic.js +27 -0
- package/node_modules/glob/dist/commonjs/has-magic.js.map +1 -0
- package/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
- package/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/ignore.js +119 -0
- package/node_modules/glob/dist/commonjs/ignore.js.map +1 -0
- package/node_modules/glob/dist/commonjs/index.d.ts +97 -0
- package/node_modules/glob/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/index.js +68 -0
- package/node_modules/glob/dist/commonjs/index.js.map +1 -0
- package/node_modules/glob/dist/commonjs/index.min.js +4 -0
- package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/glob/dist/commonjs/package.json +3 -0
- package/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
- package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/pattern.js +219 -0
- package/node_modules/glob/dist/commonjs/pattern.js.map +1 -0
- package/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
- package/node_modules/glob/dist/commonjs/processor.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/processor.js +301 -0
- package/node_modules/glob/dist/commonjs/processor.js.map +1 -0
- package/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
- package/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -0
- package/node_modules/glob/dist/commonjs/walker.js +387 -0
- package/node_modules/glob/dist/commonjs/walker.js.map +1 -0
- package/node_modules/glob/dist/esm/glob.d.ts +388 -0
- package/node_modules/glob/dist/esm/glob.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/glob.js +243 -0
- package/node_modules/glob/dist/esm/glob.js.map +1 -0
- package/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
- package/node_modules/glob/dist/esm/has-magic.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/has-magic.js +23 -0
- package/node_modules/glob/dist/esm/has-magic.js.map +1 -0
- package/node_modules/glob/dist/esm/ignore.d.ts +24 -0
- package/node_modules/glob/dist/esm/ignore.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/ignore.js +115 -0
- package/node_modules/glob/dist/esm/ignore.js.map +1 -0
- package/node_modules/glob/dist/esm/index.d.ts +97 -0
- package/node_modules/glob/dist/esm/index.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/index.js +55 -0
- package/node_modules/glob/dist/esm/index.js.map +1 -0
- package/node_modules/glob/dist/esm/index.min.js +4 -0
- package/node_modules/glob/dist/esm/index.min.js.map +7 -0
- package/node_modules/glob/dist/esm/package.json +3 -0
- package/node_modules/glob/dist/esm/pattern.d.ts +76 -0
- package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/pattern.js +215 -0
- package/node_modules/glob/dist/esm/pattern.js.map +1 -0
- package/node_modules/glob/dist/esm/processor.d.ts +59 -0
- package/node_modules/glob/dist/esm/processor.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/processor.js +294 -0
- package/node_modules/glob/dist/esm/processor.js.map +1 -0
- package/node_modules/glob/dist/esm/walker.d.ts +97 -0
- package/node_modules/glob/dist/esm/walker.d.ts.map +1 -0
- package/node_modules/glob/dist/esm/walker.js +381 -0
- package/node_modules/glob/dist/esm/walker.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/LICENSE.md +55 -0
- package/node_modules/glob/node_modules/minimatch/README.md +453 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +591 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +15 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +30 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +1029 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/package.json +3 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +22 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +38 -0
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +587 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +15 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +26 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +94 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +1016 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/package.json +3 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +22 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +34 -0
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/node_modules/glob/node_modules/minimatch/package.json +67 -0
- package/node_modules/glob/package.json +101 -0
- package/node_modules/minipass/LICENSE +15 -0
- package/node_modules/minipass/README.md +825 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts +549 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/commonjs/index.js +1028 -0
- package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
- package/node_modules/minipass/dist/commonjs/package.json +3 -0
- package/node_modules/minipass/dist/esm/index.d.ts +549 -0
- package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/esm/index.js +1018 -0
- package/node_modules/minipass/dist/esm/index.js.map +1 -0
- package/node_modules/minipass/dist/esm/package.json +3 -0
- package/node_modules/minipass/package.json +82 -0
- package/node_modules/package-json-from-dist/LICENSE.md +63 -0
- package/node_modules/package-json-from-dist/README.md +110 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +89 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.js +134 -0
- package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +1 -0
- package/node_modules/package-json-from-dist/dist/commonjs/package.json +3 -0
- package/node_modules/package-json-from-dist/dist/esm/index.d.ts +89 -0
- package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +1 -0
- package/node_modules/package-json-from-dist/dist/esm/index.js +129 -0
- package/node_modules/package-json-from-dist/dist/esm/index.js.map +1 -0
- package/node_modules/package-json-from-dist/dist/esm/package.json +3 -0
- package/node_modules/package-json-from-dist/package.json +68 -0
- package/node_modules/path-scurry/LICENSE.md +55 -0
- package/node_modules/path-scurry/README.md +636 -0
- package/node_modules/path-scurry/dist/commonjs/index.d.ts +1115 -0
- package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/path-scurry/dist/commonjs/index.js +2018 -0
- package/node_modules/path-scurry/dist/commonjs/index.js.map +1 -0
- package/node_modules/path-scurry/dist/commonjs/package.json +3 -0
- package/node_modules/path-scurry/dist/esm/index.d.ts +1115 -0
- package/node_modules/path-scurry/dist/esm/index.d.ts.map +1 -0
- package/node_modules/path-scurry/dist/esm/index.js +1983 -0
- package/node_modules/path-scurry/dist/esm/index.js.map +1 -0
- package/node_modules/path-scurry/dist/esm/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/LICENSE.md +55 -0
- package/node_modules/path-scurry/node_modules/lru-cache/README.md +383 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +1323 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +1589 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +1323 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +1585 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json +3 -0
- package/node_modules/path-scurry/node_modules/lru-cache/package.json +101 -0
- package/node_modules/path-scurry/package.json +88 -0
- package/node_modules/rimraf/LICENSE.md +55 -0
- package/node_modules/rimraf/README.md +226 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.js +58 -0
- package/node_modules/rimraf/dist/commonjs/default-tmp.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/error.d.ts +6 -0
- package/node_modules/rimraf/dist/commonjs/error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/error.js +10 -0
- package/node_modules/rimraf/dist/commonjs/error.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.js +38 -0
- package/node_modules/rimraf/dist/commonjs/fix-eperm.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fs.d.ts +15 -0
- package/node_modules/rimraf/dist/commonjs/fs.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/fs.js +33 -0
- package/node_modules/rimraf/dist/commonjs/fs.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.js +24 -0
- package/node_modules/rimraf/dist/commonjs/ignore-enoent.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/index.d.ts +50 -0
- package/node_modules/rimraf/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/index.js +78 -0
- package/node_modules/rimraf/dist/commonjs/index.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts +34 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.js +53 -0
- package/node_modules/rimraf/dist/commonjs/opt-arg.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/package.json +3 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.js +48 -0
- package/node_modules/rimraf/dist/commonjs/path-arg.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.js +19 -0
- package/node_modules/rimraf/dist/commonjs/readdir-or-error.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts +8 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.js +65 -0
- package/node_modules/rimraf/dist/commonjs/retry-busy.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts +3 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.js +8 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-manual.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js +138 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.js +24 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-native.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.js +103 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-posix.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.js +159 -0
- package/node_modules/rimraf/dist/commonjs/rimraf-windows.js.map +1 -0
- package/node_modules/rimraf/dist/commonjs/use-native.d.ts +4 -0
- package/node_modules/rimraf/dist/commonjs/use-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/commonjs/use-native.js +18 -0
- package/node_modules/rimraf/dist/commonjs/use-native.js.map +1 -0
- package/node_modules/rimraf/dist/esm/bin.d.mts +3 -0
- package/node_modules/rimraf/dist/esm/bin.d.mts.map +1 -0
- package/node_modules/rimraf/dist/esm/bin.mjs +250 -0
- package/node_modules/rimraf/dist/esm/bin.mjs.map +1 -0
- package/node_modules/rimraf/dist/esm/default-tmp.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/default-tmp.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/default-tmp.js +55 -0
- package/node_modules/rimraf/dist/esm/default-tmp.js.map +1 -0
- package/node_modules/rimraf/dist/esm/error.d.ts +6 -0
- package/node_modules/rimraf/dist/esm/error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/error.js +5 -0
- package/node_modules/rimraf/dist/esm/error.js.map +1 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.js +33 -0
- package/node_modules/rimraf/dist/esm/fix-eperm.js.map +1 -0
- package/node_modules/rimraf/dist/esm/fs.d.ts +15 -0
- package/node_modules/rimraf/dist/esm/fs.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/fs.js +18 -0
- package/node_modules/rimraf/dist/esm/fs.js.map +1 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.js +19 -0
- package/node_modules/rimraf/dist/esm/ignore-enoent.js.map +1 -0
- package/node_modules/rimraf/dist/esm/index.d.ts +50 -0
- package/node_modules/rimraf/dist/esm/index.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/index.js +70 -0
- package/node_modules/rimraf/dist/esm/index.js.map +1 -0
- package/node_modules/rimraf/dist/esm/opt-arg.d.ts +34 -0
- package/node_modules/rimraf/dist/esm/opt-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/opt-arg.js +46 -0
- package/node_modules/rimraf/dist/esm/opt-arg.js.map +1 -0
- package/node_modules/rimraf/dist/esm/package.json +3 -0
- package/node_modules/rimraf/dist/esm/path-arg.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/path-arg.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/path-arg.js +46 -0
- package/node_modules/rimraf/dist/esm/path-arg.js.map +1 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.js +14 -0
- package/node_modules/rimraf/dist/esm/readdir-or-error.js.map +1 -0
- package/node_modules/rimraf/dist/esm/retry-busy.d.ts +8 -0
- package/node_modules/rimraf/dist/esm/retry-busy.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/retry-busy.js +60 -0
- package/node_modules/rimraf/dist/esm/retry-busy.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts +3 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.js +5 -0
- package/node_modules/rimraf/dist/esm/rimraf-manual.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.js +133 -0
- package/node_modules/rimraf/dist/esm/rimraf-move-remove.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.js +19 -0
- package/node_modules/rimraf/dist/esm/rimraf-native.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.js +98 -0
- package/node_modules/rimraf/dist/esm/rimraf-posix.js.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.js +154 -0
- package/node_modules/rimraf/dist/esm/rimraf-windows.js.map +1 -0
- package/node_modules/rimraf/dist/esm/use-native.d.ts +4 -0
- package/node_modules/rimraf/dist/esm/use-native.d.ts.map +1 -0
- package/node_modules/rimraf/dist/esm/use-native.js +15 -0
- package/node_modules/rimraf/dist/esm/use-native.js.map +1 -0
- package/node_modules/rimraf/package.json +92 -0
- package/package.json +152 -0
- package/scripts/install-scanners.js +258 -0
- package/scripts/watchdog.js +147 -0
- package/src/analyzers/CSSAnalyzer.js +297 -0
- package/src/analyzers/ConfigValidator.js +690 -0
- package/src/analyzers/ESLintAnalyzer.js +320 -0
- package/src/analyzers/JavaScriptAnalyzer.js +261 -0
- package/src/analyzers/PrettierFormatter.js +247 -0
- package/src/analyzers/PythonAnalyzer.js +283 -0
- package/src/analyzers/SecurityAnalyzer.js +729 -0
- package/src/analyzers/SparrowAnalyzer.js +341 -0
- package/src/analyzers/TypeScriptAnalyzer.js +247 -0
- package/src/analyzers/codeCloneDetector/analyzer.js +344 -0
- package/src/analyzers/codeCloneDetector/detector.js +250 -0
- package/src/analyzers/codeCloneDetector/index.js +192 -0
- package/src/analyzers/codeCloneDetector/parser.js +199 -0
- package/src/analyzers/codeCloneDetector/reporter.js +148 -0
- package/src/analyzers/codeCloneDetector/scanner.js +88 -0
- package/src/core/agentPool.js +1957 -0
- package/src/core/agentScheduler.js +3212 -0
- package/src/core/contextManager.js +709 -0
- package/src/core/flowExecutor.js +928 -0
- package/src/core/messageProcessor.js +808 -0
- package/src/core/orchestrator.js +584 -0
- package/src/core/stateManager.js +1500 -0
- package/src/index.js +972 -0
- package/src/interfaces/cli.js +553 -0
- package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +208 -0
- package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +236 -0
- package/src/interfaces/terminal/__tests__/smoke/agents.test.js +138 -0
- package/src/interfaces/terminal/__tests__/smoke/components.test.js +137 -0
- package/src/interfaces/terminal/__tests__/smoke/connection.test.js +350 -0
- package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -0
- package/src/interfaces/terminal/__tests__/smoke/imports.test.js +332 -0
- package/src/interfaces/terminal/__tests__/smoke/messages.test.js +256 -0
- package/src/interfaces/terminal/__tests__/smoke/tools.test.js +388 -0
- package/src/interfaces/terminal/api/apiClient.js +299 -0
- package/src/interfaces/terminal/api/messageRouter.js +262 -0
- package/src/interfaces/terminal/api/session.js +266 -0
- package/src/interfaces/terminal/api/websocket.js +497 -0
- package/src/interfaces/terminal/components/AgentCreator.js +705 -0
- package/src/interfaces/terminal/components/AgentEditor.js +678 -0
- package/src/interfaces/terminal/components/AgentSwitcher.js +330 -0
- package/src/interfaces/terminal/components/ErrorBoundary.js +92 -0
- package/src/interfaces/terminal/components/ErrorPanel.js +264 -0
- package/src/interfaces/terminal/components/Header.js +28 -0
- package/src/interfaces/terminal/components/HelpPanel.js +231 -0
- package/src/interfaces/terminal/components/InputBox.js +118 -0
- package/src/interfaces/terminal/components/Layout.js +603 -0
- package/src/interfaces/terminal/components/LoadingSpinner.js +71 -0
- package/src/interfaces/terminal/components/MessageList.js +281 -0
- package/src/interfaces/terminal/components/MultilineTextInput.js +251 -0
- package/src/interfaces/terminal/components/SearchPanel.js +265 -0
- package/src/interfaces/terminal/components/SettingsPanel.js +415 -0
- package/src/interfaces/terminal/components/StatusBar.js +65 -0
- package/src/interfaces/terminal/components/TextInput.js +127 -0
- package/src/interfaces/terminal/config/agentEditorConstants.js +227 -0
- package/src/interfaces/terminal/config/constants.js +393 -0
- package/src/interfaces/terminal/index.js +168 -0
- package/src/interfaces/terminal/state/useAgentControl.js +496 -0
- package/src/interfaces/terminal/state/useAgents.js +537 -0
- package/src/interfaces/terminal/state/useConnection.js +444 -0
- package/src/interfaces/terminal/state/useMessages.js +630 -0
- package/src/interfaces/terminal/state/useTools.js +554 -0
- package/src/interfaces/terminal/utils/debugLogger.js +44 -0
- package/src/interfaces/terminal/utils/settingsStorage.js +232 -0
- package/src/interfaces/terminal/utils/theme.js +85 -0
- package/src/interfaces/webServer.js +5457 -0
- package/src/modules/fileExplorer/controller.js +413 -0
- package/src/modules/fileExplorer/index.js +37 -0
- package/src/modules/fileExplorer/middleware.js +92 -0
- package/src/modules/fileExplorer/routes.js +158 -0
- package/src/modules/fileExplorer/types.js +44 -0
- package/src/services/agentActivityService.js +399 -0
- package/src/services/aiService.js +2618 -0
- package/src/services/apiKeyManager.js +334 -0
- package/src/services/benchmarkService.js +196 -0
- package/src/services/budgetService.js +565 -0
- package/src/services/contextInjectionService.js +268 -0
- package/src/services/conversationCompactionService.js +1103 -0
- package/src/services/credentialVault.js +685 -0
- package/src/services/errorHandler.js +810 -0
- package/src/services/fileAttachmentService.js +547 -0
- package/src/services/flowContextService.js +189 -0
- package/src/services/memoryService.js +521 -0
- package/src/services/modelRouterService.js +365 -0
- package/src/services/modelsService.js +323 -0
- package/src/services/ollamaService.js +452 -0
- package/src/services/portRegistry.js +336 -0
- package/src/services/portTracker.js +223 -0
- package/src/services/projectDetector.js +404 -0
- package/src/services/promptService.js +372 -0
- package/src/services/qualityInspector.js +796 -0
- package/src/services/scheduleService.js +725 -0
- package/src/services/serviceRegistry.js +386 -0
- package/src/services/skillsService.js +486 -0
- package/src/services/telegramService.js +920 -0
- package/src/services/tokenCountingService.js +316 -0
- package/src/services/visualEditorBridge.js +1033 -0
- package/src/services/visualEditorServer.js +1727 -0
- package/src/services/whatsappService.js +663 -0
- package/src/tools/__tests__/webTool.e2e.test.js +569 -0
- package/src/tools/__tests__/webTool.unit.test.js +195 -0
- package/src/tools/agentCommunicationTool.js +1343 -0
- package/src/tools/agentDelayTool.js +498 -0
- package/src/tools/asyncToolManager.js +604 -0
- package/src/tools/baseTool.js +887 -0
- package/src/tools/browserTool.js +897 -0
- package/src/tools/cloneDetectionTool.js +581 -0
- package/src/tools/codeMapTool.js +857 -0
- package/src/tools/dependencyResolverTool.js +1212 -0
- package/src/tools/docxTool.js +623 -0
- package/src/tools/excelTool.js +636 -0
- package/src/tools/fileContentReplaceTool.js +840 -0
- package/src/tools/fileTreeTool.js +833 -0
- package/src/tools/filesystemTool.js +1217 -0
- package/src/tools/helpTool.js +198 -0
- package/src/tools/imageTool.js +1034 -0
- package/src/tools/importAnalyzerTool.js +1056 -0
- package/src/tools/jobDoneTool.js +388 -0
- package/src/tools/memoryTool.js +554 -0
- package/src/tools/pdfTool.js +627 -0
- package/src/tools/seekTool.js +883 -0
- package/src/tools/skillsTool.js +276 -0
- package/src/tools/staticAnalysisTool.js +2146 -0
- package/src/tools/taskManagerTool.js +2836 -0
- package/src/tools/terminalTool.js +2486 -0
- package/src/tools/userPromptTool.js +474 -0
- package/src/tools/videoTool.js +1139 -0
- package/src/tools/visionTool.js +507 -0
- package/src/tools/visualEditorTool.js +1175 -0
- package/src/tools/webTool.js +3114 -0
- package/src/tools/whatsappTool.js +457 -0
- package/src/types/agent.js +519 -0
- package/src/types/contextReference.js +972 -0
- package/src/types/conversation.js +730 -0
- package/src/types/toolCommand.js +747 -0
- package/src/utilities/attachmentValidator.js +288 -0
- package/src/utilities/browserStealth.js +630 -0
- package/src/utilities/configManager.js +618 -0
- package/src/utilities/constants.js +870 -0
- package/src/utilities/directoryAccessManager.js +566 -0
- package/src/utilities/fileProcessor.js +307 -0
- package/src/utilities/humanBehavior.js +453 -0
- package/src/utilities/jsonRepair.js +242 -0
- package/src/utilities/logger.js +436 -0
- package/src/utilities/platformUtils.js +255 -0
- package/src/utilities/platformUtils.test.js +98 -0
- package/src/utilities/stealthConstants.js +377 -0
- package/src/utilities/structuredFileValidator.js +699 -0
- package/src/utilities/tagParser.js +878 -0
- package/src/utilities/toolConstants.js +415 -0
- package/src/utilities/userDataDir.js +300 -0
- package/web-ui/build/brands/autopilot/favicon.svg +1 -0
- package/web-ui/build/brands/autopilot/logo.webp +0 -0
- package/web-ui/build/brands/onbuzz/favicon.svg +1 -0
- package/web-ui/build/brands/onbuzz/logo-text.webp +0 -0
- package/web-ui/build/brands/onbuzz/logo.webp +0 -0
- package/web-ui/build/index.html +15 -0
- package/web-ui/build/logo.png +0 -0
- package/web-ui/build/logo2.png +0 -0
- package/web-ui/build/static/index-SmQFfvBs.js +746 -0
- package/web-ui/build/static/index-V2ySwjHp.css +1 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port Registry
|
|
3
|
+
*
|
|
4
|
+
* File-based registry for cross-process service discovery.
|
|
5
|
+
* Services register their actual ports (which may differ from configured
|
|
6
|
+
* if the preferred port was taken). Other processes read the registry
|
|
7
|
+
* to discover where services are running.
|
|
8
|
+
*
|
|
9
|
+
* DESIGN: Fail-safe, never block startup. If corruption detected, reset and continue.
|
|
10
|
+
*
|
|
11
|
+
* Registry Location:
|
|
12
|
+
* - Linux: ~/.local/share/loxia-autopilot/runtime/ports.json
|
|
13
|
+
* - macOS: ~/Library/Application Support/loxia-autopilot/runtime/ports.json
|
|
14
|
+
* - Windows: %LOCALAPPDATA%/loxia-autopilot/runtime/ports.json
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { promises as fs } from 'fs';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import { getUserDataPaths } from '../utilities/userDataDir.js';
|
|
20
|
+
|
|
21
|
+
const REGISTRY_FILENAME = 'ports.json';
|
|
22
|
+
const REGISTRY_VERSION = 1;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Port Registry class for file-based service discovery
|
|
26
|
+
*/
|
|
27
|
+
export class PortRegistry {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.filePath = null;
|
|
30
|
+
this._initialized = false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Get the registry file path (lazy initialization)
|
|
35
|
+
* @returns {string}
|
|
36
|
+
*/
|
|
37
|
+
getFilePath() {
|
|
38
|
+
if (!this.filePath) {
|
|
39
|
+
const paths = getUserDataPaths();
|
|
40
|
+
this.filePath = path.join(paths.runtime, REGISTRY_FILENAME);
|
|
41
|
+
}
|
|
42
|
+
return this.filePath;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Ensure the runtime directory exists
|
|
47
|
+
*/
|
|
48
|
+
async ensureDirectory() {
|
|
49
|
+
const filePath = this.getFilePath();
|
|
50
|
+
const dir = path.dirname(filePath);
|
|
51
|
+
try {
|
|
52
|
+
await fs.mkdir(dir, { recursive: true });
|
|
53
|
+
} catch (error) {
|
|
54
|
+
if (error.code !== 'EEXIST') {
|
|
55
|
+
console.warn('[PortRegistry] Failed to create directory:', error.message);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Create an empty registry structure
|
|
62
|
+
* @returns {Object}
|
|
63
|
+
*/
|
|
64
|
+
_createEmpty() {
|
|
65
|
+
return {
|
|
66
|
+
version: REGISTRY_VERSION,
|
|
67
|
+
lastUpdated: new Date().toISOString(),
|
|
68
|
+
services: {}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Load the registry from disk - NEVER throws, always returns valid data
|
|
74
|
+
* @returns {Promise<Object>} Registry data
|
|
75
|
+
*/
|
|
76
|
+
async load() {
|
|
77
|
+
const filePath = this.getFilePath();
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
81
|
+
|
|
82
|
+
// Validate content is not empty
|
|
83
|
+
if (!content || content.trim().length === 0) {
|
|
84
|
+
console.warn('[PortRegistry] Empty registry file, using defaults');
|
|
85
|
+
return this._createEmpty();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const data = JSON.parse(content);
|
|
89
|
+
|
|
90
|
+
// Validate version
|
|
91
|
+
if (data.version !== REGISTRY_VERSION) {
|
|
92
|
+
console.warn(`[PortRegistry] Version mismatch (got ${data.version}, expected ${REGISTRY_VERSION}), resetting`);
|
|
93
|
+
return this._resetFile();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Validate structure
|
|
97
|
+
if (!data.services || typeof data.services !== 'object') {
|
|
98
|
+
console.warn('[PortRegistry] Invalid structure, resetting');
|
|
99
|
+
return this._resetFile();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return data;
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (error.code === 'ENOENT') {
|
|
105
|
+
// File doesn't exist - normal case on first run
|
|
106
|
+
return this._createEmpty();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Any other error (corruption, permission, etc) - reset and continue
|
|
110
|
+
console.warn(`[PortRegistry] Load error (${error.message}), resetting`);
|
|
111
|
+
return this._resetFile();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Reset the registry file to defaults - NEVER throws
|
|
117
|
+
* @returns {Object} Empty registry
|
|
118
|
+
*/
|
|
119
|
+
async _resetFile() {
|
|
120
|
+
const empty = this._createEmpty();
|
|
121
|
+
const filePath = this.getFilePath();
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
await this.ensureDirectory();
|
|
125
|
+
await fs.writeFile(filePath, JSON.stringify(empty, null, 2), 'utf8');
|
|
126
|
+
console.log('[PortRegistry] Registry reset to defaults');
|
|
127
|
+
} catch (error) {
|
|
128
|
+
// Even if reset fails, return empty and continue
|
|
129
|
+
console.warn('[PortRegistry] Could not reset file:', error.message);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return empty;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Save the registry to disk - NEVER throws, logs errors and continues
|
|
137
|
+
* @param {Object} data - Registry data to save
|
|
138
|
+
* @returns {Promise<boolean>} True if save succeeded
|
|
139
|
+
*/
|
|
140
|
+
async save(data) {
|
|
141
|
+
const filePath = this.getFilePath();
|
|
142
|
+
const tempPath = `${filePath}.tmp.${process.pid}`;
|
|
143
|
+
|
|
144
|
+
// Update timestamp
|
|
145
|
+
data.lastUpdated = new Date().toISOString();
|
|
146
|
+
const content = JSON.stringify(data, null, 2);
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
await this.ensureDirectory();
|
|
150
|
+
|
|
151
|
+
// Write to temp file first, then atomic rename
|
|
152
|
+
await fs.writeFile(tempPath, content, 'utf8');
|
|
153
|
+
await fs.rename(tempPath, filePath);
|
|
154
|
+
return true;
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.warn('[PortRegistry] Save failed:', error.message);
|
|
157
|
+
|
|
158
|
+
// Try direct write as fallback
|
|
159
|
+
try {
|
|
160
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
161
|
+
return true;
|
|
162
|
+
} catch (fallbackError) {
|
|
163
|
+
console.warn('[PortRegistry] Fallback save also failed:', fallbackError.message);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Clean up temp file if it exists
|
|
167
|
+
try {
|
|
168
|
+
await fs.unlink(tempPath);
|
|
169
|
+
} catch {
|
|
170
|
+
// Ignore cleanup errors
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Register a service
|
|
179
|
+
* @param {string} name - Service name (e.g., 'backend', 'visualEditor')
|
|
180
|
+
* @param {Object} info - Service information
|
|
181
|
+
* @param {number} info.port - Port the service is running on
|
|
182
|
+
* @param {string} [info.host='localhost'] - Host address
|
|
183
|
+
* @param {string} [info.protocol='http'] - Protocol
|
|
184
|
+
* @param {Object} [info.metadata={}] - Additional metadata
|
|
185
|
+
* @returns {Promise<Object>} Registered service info
|
|
186
|
+
*/
|
|
187
|
+
async registerService(name, info) {
|
|
188
|
+
if (!name || !info.port) {
|
|
189
|
+
console.warn('[PortRegistry] Invalid service registration:', { name, port: info?.port });
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const registry = await this.load();
|
|
194
|
+
|
|
195
|
+
const serviceInfo = {
|
|
196
|
+
port: info.port,
|
|
197
|
+
host: info.host || 'localhost',
|
|
198
|
+
protocol: info.protocol || 'http',
|
|
199
|
+
pid: process.pid,
|
|
200
|
+
startedAt: new Date().toISOString(),
|
|
201
|
+
metadata: info.metadata || {}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
registry.services[name] = serviceInfo;
|
|
205
|
+
|
|
206
|
+
const saved = await this.save(registry);
|
|
207
|
+
|
|
208
|
+
if (saved) {
|
|
209
|
+
console.log(`[PortRegistry] Registered: ${name} at ${serviceInfo.host}:${serviceInfo.port} (PID: ${serviceInfo.pid})`);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return serviceInfo;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Unregister a service
|
|
217
|
+
* @param {string} name - Service name
|
|
218
|
+
* @returns {Promise<boolean>} True if service was removed
|
|
219
|
+
*/
|
|
220
|
+
async unregisterService(name) {
|
|
221
|
+
const registry = await this.load();
|
|
222
|
+
|
|
223
|
+
if (registry.services[name]) {
|
|
224
|
+
delete registry.services[name];
|
|
225
|
+
await this.save(registry);
|
|
226
|
+
console.log(`[PortRegistry] Unregistered: ${name}`);
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Get a service by name
|
|
235
|
+
* @param {string} name - Service name
|
|
236
|
+
* @returns {Promise<Object|null>} Service info or null
|
|
237
|
+
*/
|
|
238
|
+
async getService(name) {
|
|
239
|
+
const registry = await this.load();
|
|
240
|
+
return registry.services[name] || null;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Get all registered services
|
|
245
|
+
* @returns {Promise<Object>} Map of service name to info
|
|
246
|
+
*/
|
|
247
|
+
async getAllServices() {
|
|
248
|
+
const registry = await this.load();
|
|
249
|
+
return registry.services;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Check if a process is running
|
|
254
|
+
* @param {number} pid - Process ID
|
|
255
|
+
* @returns {boolean}
|
|
256
|
+
*/
|
|
257
|
+
isProcessRunning(pid) {
|
|
258
|
+
try {
|
|
259
|
+
process.kill(pid, 0);
|
|
260
|
+
return true;
|
|
261
|
+
} catch (error) {
|
|
262
|
+
return error.code === 'EPERM';
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Clean up stale entries (services where the process is no longer running)
|
|
268
|
+
* @returns {Promise<string[]>} Names of cleaned up services
|
|
269
|
+
*/
|
|
270
|
+
async cleanupStaleEntries() {
|
|
271
|
+
const registry = await this.load();
|
|
272
|
+
const cleanedUp = [];
|
|
273
|
+
|
|
274
|
+
for (const [name, info] of Object.entries(registry.services)) {
|
|
275
|
+
if (info.pid && !this.isProcessRunning(info.pid)) {
|
|
276
|
+
delete registry.services[name];
|
|
277
|
+
cleanedUp.push(name);
|
|
278
|
+
console.log(`[PortRegistry] Cleaned stale: ${name} (PID ${info.pid} gone)`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (cleanedUp.length > 0) {
|
|
283
|
+
await this.save(registry);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return cleanedUp;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Get URL for a service
|
|
291
|
+
* @param {string} name - Service name
|
|
292
|
+
* @returns {Promise<string|null>} Service URL or null
|
|
293
|
+
*/
|
|
294
|
+
async getServiceUrl(name) {
|
|
295
|
+
const service = await this.getService(name);
|
|
296
|
+
if (!service) return null;
|
|
297
|
+
return `${service.protocol}://${service.host}:${service.port}`;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Get WebSocket URL for a service
|
|
302
|
+
* @param {string} name - Service name
|
|
303
|
+
* @param {string} [wsPath=''] - WebSocket path
|
|
304
|
+
* @returns {Promise<string|null>} WebSocket URL or null
|
|
305
|
+
*/
|
|
306
|
+
async getServiceWsUrl(name, wsPath = '') {
|
|
307
|
+
const service = await this.getService(name);
|
|
308
|
+
if (!service) return null;
|
|
309
|
+
const wsProtocol = service.protocol === 'https' ? 'wss' : 'ws';
|
|
310
|
+
return `${wsProtocol}://${service.host}:${service.port}${wsPath}`;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Clear all services from the registry
|
|
315
|
+
* @returns {Promise<void>}
|
|
316
|
+
*/
|
|
317
|
+
async clear() {
|
|
318
|
+
await this._resetFile();
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// Singleton instance
|
|
323
|
+
let registryInstance = null;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Get the singleton PortRegistry instance
|
|
327
|
+
* @returns {PortRegistry}
|
|
328
|
+
*/
|
|
329
|
+
export function getPortRegistry() {
|
|
330
|
+
if (!registryInstance) {
|
|
331
|
+
registryInstance = new PortRegistry();
|
|
332
|
+
}
|
|
333
|
+
return registryInstance;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export default getPortRegistry;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file services/portTracker.js
|
|
3
|
+
* @description Tracks port usage across the system to prevent conflicts
|
|
4
|
+
* and help agents find available ports for serving applications.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import net from 'net';
|
|
8
|
+
|
|
9
|
+
// Well-known ports used by the system
|
|
10
|
+
const SYSTEM_PORTS = {
|
|
11
|
+
WEB_UI: 8080,
|
|
12
|
+
VISUAL_EDITOR: 4000,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// Default port range for user apps
|
|
16
|
+
const DEFAULT_PORT_RANGE = {
|
|
17
|
+
start: 3000,
|
|
18
|
+
end: 3100
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Port Tracker - manages port allocation and tracking
|
|
23
|
+
*/
|
|
24
|
+
class PortTracker {
|
|
25
|
+
constructor() {
|
|
26
|
+
// Map of port -> { owner: string, type: string, startedAt: Date, pid?: number }
|
|
27
|
+
this.activePorts = new Map();
|
|
28
|
+
|
|
29
|
+
// Register system ports
|
|
30
|
+
this.activePorts.set(SYSTEM_PORTS.WEB_UI, {
|
|
31
|
+
owner: 'loxia-web-ui',
|
|
32
|
+
type: 'system',
|
|
33
|
+
startedAt: new Date()
|
|
34
|
+
});
|
|
35
|
+
this.activePorts.set(SYSTEM_PORTS.VISUAL_EDITOR, {
|
|
36
|
+
owner: 'visual-editor-server',
|
|
37
|
+
type: 'system',
|
|
38
|
+
startedAt: new Date()
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Check if a port is available (not in use)
|
|
44
|
+
* @param {number} port - Port to check
|
|
45
|
+
* @returns {Promise<boolean>} True if available
|
|
46
|
+
*/
|
|
47
|
+
async isPortAvailable(port) {
|
|
48
|
+
// First check our internal tracking
|
|
49
|
+
if (this.activePorts.has(port)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Then check if actually in use on the system
|
|
54
|
+
return new Promise((resolve) => {
|
|
55
|
+
const server = net.createServer();
|
|
56
|
+
|
|
57
|
+
server.once('error', (err) => {
|
|
58
|
+
if (err.code === 'EADDRINUSE') {
|
|
59
|
+
resolve(false);
|
|
60
|
+
} else {
|
|
61
|
+
resolve(true); // Other errors mean port might be available
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
server.once('listening', () => {
|
|
66
|
+
server.close();
|
|
67
|
+
resolve(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
server.listen(port, '127.0.0.1');
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Find next available port in range
|
|
76
|
+
* @param {number} startPort - Starting port (default: 3000)
|
|
77
|
+
* @param {number} endPort - Ending port (default: 3100)
|
|
78
|
+
* @returns {Promise<number|null>} Available port or null
|
|
79
|
+
*/
|
|
80
|
+
async findAvailablePort(startPort = DEFAULT_PORT_RANGE.start, endPort = DEFAULT_PORT_RANGE.end) {
|
|
81
|
+
for (let port = startPort; port <= endPort; port++) {
|
|
82
|
+
const available = await this.isPortAvailable(port);
|
|
83
|
+
if (available) {
|
|
84
|
+
return port;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Register a port as in use
|
|
92
|
+
* @param {number} port - Port number
|
|
93
|
+
* @param {Object} info - Port usage info
|
|
94
|
+
* @param {string} info.owner - Owner identifier (agentId, service name)
|
|
95
|
+
* @param {string} info.type - Type ('agent-app', 'system', 'dev-server')
|
|
96
|
+
* @param {number} info.pid - Process ID (optional)
|
|
97
|
+
* @param {string} info.command - Command that started the server (optional)
|
|
98
|
+
*/
|
|
99
|
+
registerPort(port, info) {
|
|
100
|
+
this.activePorts.set(port, {
|
|
101
|
+
...info,
|
|
102
|
+
startedAt: new Date()
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Unregister a port (mark as available)
|
|
108
|
+
* @param {number} port - Port number
|
|
109
|
+
* @returns {boolean} True if was registered
|
|
110
|
+
*/
|
|
111
|
+
unregisterPort(port) {
|
|
112
|
+
return this.activePorts.delete(port);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get info about a port
|
|
117
|
+
* @param {number} port - Port number
|
|
118
|
+
* @returns {Object|null} Port info or null
|
|
119
|
+
*/
|
|
120
|
+
getPortInfo(port) {
|
|
121
|
+
return this.activePorts.get(port) || null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get all registered ports
|
|
126
|
+
* @returns {Array<{port: number, info: Object}>}
|
|
127
|
+
*/
|
|
128
|
+
getAllPorts() {
|
|
129
|
+
return Array.from(this.activePorts.entries()).map(([port, info]) => ({
|
|
130
|
+
port,
|
|
131
|
+
...info
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Get ports owned by a specific agent
|
|
137
|
+
* @param {string} agentId - Agent ID
|
|
138
|
+
* @returns {Array<{port: number, info: Object}>}
|
|
139
|
+
*/
|
|
140
|
+
getAgentPorts(agentId) {
|
|
141
|
+
return this.getAllPorts().filter(p => p.owner === agentId);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Extract port from URL
|
|
146
|
+
* @param {string} url - URL string
|
|
147
|
+
* @returns {number|null} Port number or null
|
|
148
|
+
*/
|
|
149
|
+
static extractPortFromUrl(url) {
|
|
150
|
+
try {
|
|
151
|
+
const parsed = new URL(url);
|
|
152
|
+
return parseInt(parsed.port) || (parsed.protocol === 'https:' ? 443 : 80);
|
|
153
|
+
} catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Extract port from terminal output (common patterns)
|
|
160
|
+
* @param {string} output - Terminal output
|
|
161
|
+
* @returns {Object|null} { port, url } or null
|
|
162
|
+
*/
|
|
163
|
+
static extractPortFromOutput(output) {
|
|
164
|
+
// Common patterns from dev servers:
|
|
165
|
+
// - "Server running on http://localhost:3000"
|
|
166
|
+
// - "Local: http://localhost:5173/"
|
|
167
|
+
// - "listening on port 3000"
|
|
168
|
+
// - "Started server on 0.0.0.0:3000"
|
|
169
|
+
// - "Your application is available at http://127.0.0.1:8000"
|
|
170
|
+
|
|
171
|
+
const patterns = [
|
|
172
|
+
// URL patterns
|
|
173
|
+
/https?:\/\/(?:localhost|127\.0\.0\.1|0\.0\.0\.0):(\d+)/gi,
|
|
174
|
+
// Port only patterns
|
|
175
|
+
/(?:listening|running|started|serving).*?(?:on|at)?\s*(?:port\s*)?(\d{4,5})/gi,
|
|
176
|
+
/port\s*[:\s]\s*(\d{4,5})/gi,
|
|
177
|
+
// Next.js / Vite specific
|
|
178
|
+
/Local:\s*https?:\/\/[^:]+:(\d+)/gi,
|
|
179
|
+
/ready.*https?:\/\/[^:]+:(\d+)/gi,
|
|
180
|
+
];
|
|
181
|
+
|
|
182
|
+
for (const pattern of patterns) {
|
|
183
|
+
const matches = output.matchAll(pattern);
|
|
184
|
+
for (const match of matches) {
|
|
185
|
+
const port = parseInt(match[1]);
|
|
186
|
+
if (port >= 1024 && port <= 65535) {
|
|
187
|
+
// Try to extract full URL
|
|
188
|
+
const urlMatch = output.match(new RegExp(`https?://[^\\s]+:${port}[^\\s]*`));
|
|
189
|
+
return {
|
|
190
|
+
port,
|
|
191
|
+
url: urlMatch ? urlMatch[0].replace(/[,;]$/, '') : `http://localhost:${port}`
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Get system ports
|
|
202
|
+
* @returns {Object} System port constants
|
|
203
|
+
*/
|
|
204
|
+
static getSystemPorts() {
|
|
205
|
+
return { ...SYSTEM_PORTS };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Singleton instance
|
|
210
|
+
let trackerInstance = null;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Get or create the port tracker singleton
|
|
214
|
+
* @returns {PortTracker}
|
|
215
|
+
*/
|
|
216
|
+
export function getPortTracker() {
|
|
217
|
+
if (!trackerInstance) {
|
|
218
|
+
trackerInstance = new PortTracker();
|
|
219
|
+
}
|
|
220
|
+
return trackerInstance;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export default PortTracker;
|