nexus-agents 2.60.0 → 2.61.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/dist/{chunk-MJ3K4FYS.js → chunk-KNAPTURC.js} +2 -2
- package/dist/{chunk-XRXUCE6K.js → chunk-NB6IYTMN.js} +4 -3
- package/dist/{chunk-5JSMLCCK.js → chunk-TRWIEUI2.js} +2 -2
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +236 -68
- package/dist/cli.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{setup-command-LIX2S7JD.js → setup-command-QJGB34JY.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-MJ3K4FYS.js.map → chunk-KNAPTURC.js.map} +0 -0
- /package/dist/{chunk-XRXUCE6K.js.map → chunk-NB6IYTMN.js.map} +0 -0
- /package/dist/{chunk-5JSMLCCK.js.map → chunk-TRWIEUI2.js.map} +0 -0
- /package/dist/{setup-command-LIX2S7JD.js.map → setup-command-QJGB34JY.js.map} +0 -0
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
checkSqlite,
|
|
9
9
|
defaultConfig,
|
|
10
10
|
initDataDirectories
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NB6IYTMN.js";
|
|
12
12
|
import {
|
|
13
13
|
BUILT_IN_EXPERTS
|
|
14
14
|
} from "./chunk-GJVHRJO2.js";
|
|
@@ -1933,4 +1933,4 @@ export {
|
|
|
1933
1933
|
setupCommand,
|
|
1934
1934
|
setupCommandAsync
|
|
1935
1935
|
};
|
|
1936
|
-
//# sourceMappingURL=chunk-
|
|
1936
|
+
//# sourceMappingURL=chunk-KNAPTURC.js.map
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
} from "./chunk-CLYZ7FWP.js";
|
|
39
39
|
|
|
40
40
|
// src/version.ts
|
|
41
|
-
var VERSION = true ? "2.
|
|
41
|
+
var VERSION = true ? "2.61.0" : "dev";
|
|
42
42
|
|
|
43
43
|
// src/config/schemas-core.ts
|
|
44
44
|
import { z } from "zod";
|
|
@@ -2025,7 +2025,7 @@ async function runDoctorFix(result) {
|
|
|
2025
2025
|
writeLine2("\u2500".repeat(40));
|
|
2026
2026
|
let fixCount = 0;
|
|
2027
2027
|
if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
|
|
2028
|
-
const { runSetup } = await import("./setup-command-
|
|
2028
|
+
const { runSetup } = await import("./setup-command-QJGB34JY.js");
|
|
2029
2029
|
const setupResult = runSetup({
|
|
2030
2030
|
skipMcp: true,
|
|
2031
2031
|
skipRules: true,
|
|
@@ -2123,6 +2123,7 @@ export {
|
|
|
2123
2123
|
filterAvailableModels,
|
|
2124
2124
|
DEFAULT_TASK_TTL_MS,
|
|
2125
2125
|
clampTaskTtl,
|
|
2126
|
+
DATA_SUBDIRECTORIES,
|
|
2126
2127
|
checkApiKeys,
|
|
2127
2128
|
checkSqlite,
|
|
2128
2129
|
checkDataDirectory,
|
|
@@ -2134,4 +2135,4 @@ export {
|
|
|
2134
2135
|
startStdioServer,
|
|
2135
2136
|
closeServer
|
|
2136
2137
|
};
|
|
2137
|
-
//# sourceMappingURL=chunk-
|
|
2138
|
+
//# sourceMappingURL=chunk-NB6IYTMN.js.map
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
clampTaskTtl,
|
|
69
69
|
getAvailabilityCache,
|
|
70
70
|
resolveFallback
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-NB6IYTMN.js";
|
|
72
72
|
import {
|
|
73
73
|
DEFAULTS
|
|
74
74
|
} from "./chunk-H43PABG4.js";
|
|
@@ -53661,4 +53661,4 @@ export {
|
|
|
53661
53661
|
detectBackend,
|
|
53662
53662
|
createTaskTracker
|
|
53663
53663
|
};
|
|
53664
|
-
//# sourceMappingURL=chunk-
|
|
53664
|
+
//# sourceMappingURL=chunk-TRWIEUI2.js.map
|
package/dist/cli.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ declare const EXIT_CODES: {
|
|
|
38
38
|
/**
|
|
39
39
|
* CLI command types that can be executed.
|
|
40
40
|
*/
|
|
41
|
-
type CliCommand = 'server' | 'help' | 'version' | 'hello' | 'config' | 'expert' | 'workflow' | 'doctor' | 'verify' | 'review' | 'routing-audit' | 'orchestrate' | 'system-review' | 'vote' | 'index' | 'research' | 'validation' | 'learning-metrics' | 'swe-bench' | 'atbench' | 'setup' | 'hooks' | 'demo' | 'sprint' | 'session' | 'evaluate' | 'issue' | 'fitness-audit' | 'release-notes' | 'release-validate' | 'release-announce' | 'scaffold' | 'visualize' | 'capabilities' | 'status' | 'memory-benchmark' | 'auth' | 'scenario' | 'warm-up' | 'e2e-eval' | 'routing-ab' | 'memory-eval' | 'health' | 'validate' | 'registry';
|
|
41
|
+
type CliCommand = 'server' | 'help' | 'version' | 'hello' | 'config' | 'expert' | 'workflow' | 'doctor' | 'verify' | 'review' | 'routing-audit' | 'orchestrate' | 'system-review' | 'vote' | 'index' | 'research' | 'validation' | 'learning-metrics' | 'swe-bench' | 'atbench' | 'setup' | 'hooks' | 'demo' | 'sprint' | 'session' | 'evaluate' | 'issue' | 'fitness-audit' | 'release-notes' | 'release-validate' | 'release-announce' | 'scaffold' | 'visualize' | 'capabilities' | 'status' | 'memory-benchmark' | 'auth' | 'scenario' | 'warm-up' | 'e2e-eval' | 'routing-ab' | 'memory-eval' | 'health' | 'init' | 'validate' | 'registry';
|
|
42
42
|
/**
|
|
43
43
|
* Parsed CLI arguments and command.
|
|
44
44
|
*/
|
|
@@ -106,6 +106,8 @@ interface ParsedCliArgs {
|
|
|
106
106
|
deep: boolean;
|
|
107
107
|
json?: boolean;
|
|
108
108
|
source?: string;
|
|
109
|
+
portable?: boolean;
|
|
110
|
+
gitignore?: boolean;
|
|
109
111
|
};
|
|
110
112
|
positionals: string[];
|
|
111
113
|
}
|
package/dist/cli.js
CHANGED
|
@@ -16,7 +16,7 @@ import "./chunk-6QU4DJYW.js";
|
|
|
16
16
|
import {
|
|
17
17
|
setupCommandAsync,
|
|
18
18
|
verifyCommand
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KNAPTURC.js";
|
|
20
20
|
import "./chunk-QGZBCD2A.js";
|
|
21
21
|
import {
|
|
22
22
|
AuthHandler,
|
|
@@ -142,7 +142,7 @@ import {
|
|
|
142
142
|
validateCommand,
|
|
143
143
|
validateWorkflow,
|
|
144
144
|
wrapInMarkdownFence
|
|
145
|
-
} from "./chunk-
|
|
145
|
+
} from "./chunk-TRWIEUI2.js";
|
|
146
146
|
import "./chunk-ED6VQWNG.js";
|
|
147
147
|
import {
|
|
148
148
|
resolveToken
|
|
@@ -185,6 +185,7 @@ import "./chunk-AP2FD37C.js";
|
|
|
185
185
|
import "./chunk-BQ4YXGGQ.js";
|
|
186
186
|
import {
|
|
187
187
|
CustomExpertDefinitionSchema,
|
|
188
|
+
DATA_SUBDIRECTORIES,
|
|
188
189
|
MAX_SYSTEM_PROMPT_LENGTH,
|
|
189
190
|
VALID_EXPERT_DOMAINS,
|
|
190
191
|
VALID_EXPERT_TIERS,
|
|
@@ -200,7 +201,7 @@ import {
|
|
|
200
201
|
loadConfig,
|
|
201
202
|
runDoctor,
|
|
202
203
|
validateNexusEnv
|
|
203
|
-
} from "./chunk-
|
|
204
|
+
} from "./chunk-NB6IYTMN.js";
|
|
204
205
|
import {
|
|
205
206
|
DEFAULTS
|
|
206
207
|
} from "./chunk-H43PABG4.js";
|
|
@@ -1458,14 +1459,14 @@ ${colors.dim}Session ended.${colors.reset}
|
|
|
1458
1459
|
});
|
|
1459
1460
|
});
|
|
1460
1461
|
rl.prompt();
|
|
1461
|
-
return new Promise((
|
|
1462
|
+
return new Promise((resolve15) => {
|
|
1462
1463
|
rl.on("line", (line) => {
|
|
1463
1464
|
void (async () => {
|
|
1464
1465
|
try {
|
|
1465
1466
|
const shouldExit = await processLine(line, session, logger17);
|
|
1466
1467
|
if (shouldExit) {
|
|
1467
1468
|
rl.close();
|
|
1468
|
-
|
|
1469
|
+
resolve15();
|
|
1469
1470
|
return;
|
|
1470
1471
|
}
|
|
1471
1472
|
} catch (error) {
|
|
@@ -1477,7 +1478,7 @@ ${colors.dim}Session ended.${colors.reset}
|
|
|
1477
1478
|
})();
|
|
1478
1479
|
});
|
|
1479
1480
|
rl.on("close", () => {
|
|
1480
|
-
|
|
1481
|
+
resolve15();
|
|
1481
1482
|
});
|
|
1482
1483
|
});
|
|
1483
1484
|
}
|
|
@@ -12828,7 +12829,7 @@ function writeResultAndExit(result) {
|
|
|
12828
12829
|
|
|
12829
12830
|
// src/cli/hooks/hook-router.ts
|
|
12830
12831
|
async function readStdin() {
|
|
12831
|
-
return new Promise((
|
|
12832
|
+
return new Promise((resolve15, reject) => {
|
|
12832
12833
|
let data = "";
|
|
12833
12834
|
process.stdin.setEncoding("utf8");
|
|
12834
12835
|
process.stdin.on("readable", () => {
|
|
@@ -12839,24 +12840,24 @@ async function readStdin() {
|
|
|
12839
12840
|
}
|
|
12840
12841
|
});
|
|
12841
12842
|
process.stdin.on("end", () => {
|
|
12842
|
-
|
|
12843
|
+
resolve15(data);
|
|
12843
12844
|
});
|
|
12844
12845
|
process.stdin.on("error", (err2) => {
|
|
12845
12846
|
reject(err2);
|
|
12846
12847
|
});
|
|
12847
12848
|
if (process.stdin.isTTY) {
|
|
12848
|
-
|
|
12849
|
+
resolve15("");
|
|
12849
12850
|
}
|
|
12850
12851
|
});
|
|
12851
12852
|
}
|
|
12852
12853
|
async function readStdinWithTimeout(timeoutMs = 5e3) {
|
|
12853
|
-
return new Promise((
|
|
12854
|
+
return new Promise((resolve15, reject) => {
|
|
12854
12855
|
const timeout2 = setTimeout(() => {
|
|
12855
12856
|
reject(new Error(`Stdin read timeout after ${String(timeoutMs)}ms`));
|
|
12856
12857
|
}, timeoutMs);
|
|
12857
12858
|
readStdin().then((data) => {
|
|
12858
12859
|
clearTimeout(timeout2);
|
|
12859
|
-
|
|
12860
|
+
resolve15(data);
|
|
12860
12861
|
}).catch((err2) => {
|
|
12861
12862
|
clearTimeout(timeout2);
|
|
12862
12863
|
reject(err2 instanceof Error ? err2 : new Error(String(err2)));
|
|
@@ -17653,64 +17654,212 @@ var PARSE_ARGS_CONFIG = {
|
|
|
17653
17654
|
},
|
|
17654
17655
|
source: {
|
|
17655
17656
|
type: "string"
|
|
17657
|
+
},
|
|
17658
|
+
// init --portable command options (#2305)
|
|
17659
|
+
portable: {
|
|
17660
|
+
type: "boolean",
|
|
17661
|
+
default: false
|
|
17662
|
+
},
|
|
17663
|
+
gitignore: {
|
|
17664
|
+
type: "boolean",
|
|
17665
|
+
default: false
|
|
17656
17666
|
}
|
|
17657
17667
|
},
|
|
17658
17668
|
allowPositionals: true,
|
|
17659
17669
|
strict: true
|
|
17660
17670
|
};
|
|
17671
|
+
var VALID_COMMANDS = [
|
|
17672
|
+
"server",
|
|
17673
|
+
"help",
|
|
17674
|
+
"version",
|
|
17675
|
+
"hello",
|
|
17676
|
+
"config",
|
|
17677
|
+
"expert",
|
|
17678
|
+
"workflow",
|
|
17679
|
+
"doctor",
|
|
17680
|
+
"verify",
|
|
17681
|
+
"review",
|
|
17682
|
+
"routing-audit",
|
|
17683
|
+
"orchestrate",
|
|
17684
|
+
"system-review",
|
|
17685
|
+
"vote",
|
|
17686
|
+
"index",
|
|
17687
|
+
"research",
|
|
17688
|
+
"validation",
|
|
17689
|
+
"learning-metrics",
|
|
17690
|
+
"swe-bench",
|
|
17691
|
+
"atbench",
|
|
17692
|
+
"setup",
|
|
17693
|
+
"hooks",
|
|
17694
|
+
"demo",
|
|
17695
|
+
"sprint",
|
|
17696
|
+
"session",
|
|
17697
|
+
"evaluate",
|
|
17698
|
+
"issue",
|
|
17699
|
+
"fitness-audit",
|
|
17700
|
+
"release-notes",
|
|
17701
|
+
"release-validate",
|
|
17702
|
+
"release-announce",
|
|
17703
|
+
"scaffold",
|
|
17704
|
+
"visualize",
|
|
17705
|
+
"capabilities",
|
|
17706
|
+
"status",
|
|
17707
|
+
"memory-benchmark",
|
|
17708
|
+
"auth",
|
|
17709
|
+
"scenario",
|
|
17710
|
+
"warm-up",
|
|
17711
|
+
"e2e-eval",
|
|
17712
|
+
"routing-ab",
|
|
17713
|
+
"memory-eval",
|
|
17714
|
+
"health",
|
|
17715
|
+
"init",
|
|
17716
|
+
"validate",
|
|
17717
|
+
"registry"
|
|
17718
|
+
];
|
|
17661
17719
|
function isValidCommand(value) {
|
|
17662
|
-
|
|
17663
|
-
"server",
|
|
17664
|
-
"help",
|
|
17665
|
-
"version",
|
|
17666
|
-
"hello",
|
|
17667
|
-
"config",
|
|
17668
|
-
"expert",
|
|
17669
|
-
"workflow",
|
|
17670
|
-
"doctor",
|
|
17671
|
-
"verify",
|
|
17672
|
-
"review",
|
|
17673
|
-
"routing-audit",
|
|
17674
|
-
"orchestrate",
|
|
17675
|
-
"system-review",
|
|
17676
|
-
"vote",
|
|
17677
|
-
"index",
|
|
17678
|
-
"research",
|
|
17679
|
-
"validation",
|
|
17680
|
-
"learning-metrics",
|
|
17681
|
-
"swe-bench",
|
|
17682
|
-
"atbench",
|
|
17683
|
-
"setup",
|
|
17684
|
-
"hooks",
|
|
17685
|
-
"demo",
|
|
17686
|
-
"sprint",
|
|
17687
|
-
"session",
|
|
17688
|
-
"evaluate",
|
|
17689
|
-
"issue",
|
|
17690
|
-
"fitness-audit",
|
|
17691
|
-
"release-notes",
|
|
17692
|
-
"release-validate",
|
|
17693
|
-
"release-announce",
|
|
17694
|
-
"scaffold",
|
|
17695
|
-
"visualize",
|
|
17696
|
-
"capabilities",
|
|
17697
|
-
"status",
|
|
17698
|
-
"memory-benchmark",
|
|
17699
|
-
"auth",
|
|
17700
|
-
"scenario",
|
|
17701
|
-
"warm-up",
|
|
17702
|
-
"e2e-eval",
|
|
17703
|
-
"routing-ab",
|
|
17704
|
-
"memory-eval",
|
|
17705
|
-
"health",
|
|
17706
|
-
"validate",
|
|
17707
|
-
"registry"
|
|
17708
|
-
];
|
|
17709
|
-
return validCommands.includes(value);
|
|
17720
|
+
return VALID_COMMANDS.includes(value);
|
|
17710
17721
|
}
|
|
17711
17722
|
|
|
17712
17723
|
// src/cli-commands-handlers.ts
|
|
17713
|
-
import { existsSync as
|
|
17724
|
+
import { existsSync as existsSync19 } from "fs";
|
|
17725
|
+
|
|
17726
|
+
// src/cli/init-portable.ts
|
|
17727
|
+
import {
|
|
17728
|
+
existsSync as existsSync17,
|
|
17729
|
+
mkdirSync as mkdirSync3,
|
|
17730
|
+
readdirSync as readdirSync2,
|
|
17731
|
+
statSync as statSync3,
|
|
17732
|
+
appendFileSync,
|
|
17733
|
+
readFileSync as readFileSync10
|
|
17734
|
+
} from "fs";
|
|
17735
|
+
import { resolve as resolve11, join as join13, isAbsolute as isAbsolute2 } from "path";
|
|
17736
|
+
var DEFAULT_PORTABLE_DIRNAME = ".nexus-agents";
|
|
17737
|
+
var RESTRICTED_SUBDIRS = /* @__PURE__ */ new Set(["auth"]);
|
|
17738
|
+
function resolveTargetPath(rawPath) {
|
|
17739
|
+
if (rawPath === void 0 || rawPath === "") {
|
|
17740
|
+
return resolve11(process.cwd(), DEFAULT_PORTABLE_DIRNAME);
|
|
17741
|
+
}
|
|
17742
|
+
return isAbsolute2(rawPath) ? rawPath : resolve11(process.cwd(), rawPath);
|
|
17743
|
+
}
|
|
17744
|
+
function isNonEmpty(dir) {
|
|
17745
|
+
if (!existsSync17(dir)) return false;
|
|
17746
|
+
const stat2 = statSync3(dir);
|
|
17747
|
+
if (!stat2.isDirectory()) return true;
|
|
17748
|
+
return readdirSync2(dir).length > 0;
|
|
17749
|
+
}
|
|
17750
|
+
function ensureDir(path23, dryRun, created, alreadyExisted, mode) {
|
|
17751
|
+
if (existsSync17(path23)) {
|
|
17752
|
+
alreadyExisted.push(path23);
|
|
17753
|
+
return;
|
|
17754
|
+
}
|
|
17755
|
+
if (!dryRun) {
|
|
17756
|
+
mkdirSync3(path23, { recursive: true, ...mode !== void 0 ? { mode } : {} });
|
|
17757
|
+
}
|
|
17758
|
+
created.push(path23);
|
|
17759
|
+
}
|
|
17760
|
+
function maybeUpdateGitignore(workspaceDir, portableDirName, dryRun) {
|
|
17761
|
+
const gitDir = join13(workspaceDir, ".git");
|
|
17762
|
+
if (!existsSync17(gitDir)) return false;
|
|
17763
|
+
const gitignorePath = join13(workspaceDir, ".gitignore");
|
|
17764
|
+
const entry = `${portableDirName}/`;
|
|
17765
|
+
let existing = "";
|
|
17766
|
+
if (existsSync17(gitignorePath)) {
|
|
17767
|
+
existing = readFileSync10(gitignorePath, "utf-8");
|
|
17768
|
+
if (existing.split("\n").some((l) => l.trim() === entry || l.trim() === portableDirName)) {
|
|
17769
|
+
return false;
|
|
17770
|
+
}
|
|
17771
|
+
}
|
|
17772
|
+
if (!dryRun) {
|
|
17773
|
+
const sep3 = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
17774
|
+
appendFileSync(gitignorePath, `${sep3}${entry}
|
|
17775
|
+
`, "utf-8");
|
|
17776
|
+
}
|
|
17777
|
+
return true;
|
|
17778
|
+
}
|
|
17779
|
+
function inspectTarget(target) {
|
|
17780
|
+
const exists = existsSync17(target);
|
|
17781
|
+
if (!exists) return { exists: false, nonEmpty: false, isExistingNexusDir: false };
|
|
17782
|
+
const nonEmpty = isNonEmpty(target);
|
|
17783
|
+
const stat2 = statSync3(target);
|
|
17784
|
+
const isExistingNexusDir = stat2.isDirectory() && existsSync17(join13(target, "audit"));
|
|
17785
|
+
return { exists, nonEmpty, isExistingNexusDir };
|
|
17786
|
+
}
|
|
17787
|
+
function createDataLayout(target, dryRun, created, alreadyExisted) {
|
|
17788
|
+
ensureDir(target, dryRun, created, alreadyExisted);
|
|
17789
|
+
for (const subdir of DATA_SUBDIRECTORIES) {
|
|
17790
|
+
const mode = RESTRICTED_SUBDIRS.has(subdir) ? 448 : void 0;
|
|
17791
|
+
ensureDir(join13(target, subdir), dryRun, created, alreadyExisted, mode);
|
|
17792
|
+
}
|
|
17793
|
+
}
|
|
17794
|
+
function makeResult(opts) {
|
|
17795
|
+
return {
|
|
17796
|
+
success: opts.success,
|
|
17797
|
+
absolutePath: opts.absolutePath,
|
|
17798
|
+
created: opts.created,
|
|
17799
|
+
alreadyExisted: opts.alreadyExisted,
|
|
17800
|
+
skipped: opts.skipped ?? false,
|
|
17801
|
+
gitignoreUpdated: opts.gitignoreUpdated ?? false,
|
|
17802
|
+
error: opts.error ?? null
|
|
17803
|
+
};
|
|
17804
|
+
}
|
|
17805
|
+
function applyGitignoreOption(target, options, dryRun) {
|
|
17806
|
+
if (options.gitignore !== true) return false;
|
|
17807
|
+
const workspaceDir = resolve11(target, "..");
|
|
17808
|
+
const portableName = target.slice(workspaceDir.length + 1);
|
|
17809
|
+
return maybeUpdateGitignore(workspaceDir, portableName, dryRun);
|
|
17810
|
+
}
|
|
17811
|
+
function initPortable(options = {}) {
|
|
17812
|
+
const created = [];
|
|
17813
|
+
const alreadyExisted = [];
|
|
17814
|
+
const dryRun = options.dryRun === true;
|
|
17815
|
+
const force = options.force === true;
|
|
17816
|
+
const target = resolveTargetPath(options.path);
|
|
17817
|
+
const base = { absolutePath: target, created, alreadyExisted };
|
|
17818
|
+
try {
|
|
17819
|
+
const state = inspectTarget(target);
|
|
17820
|
+
if (state.isExistingNexusDir && !force) {
|
|
17821
|
+
createDataLayout(target, dryRun, created, alreadyExisted);
|
|
17822
|
+
return makeResult({ ...base, success: true, skipped: true });
|
|
17823
|
+
}
|
|
17824
|
+
if (state.nonEmpty && !state.isExistingNexusDir && !force) {
|
|
17825
|
+
const error = `target ${target} already exists and is not empty; pass --force to use anyway`;
|
|
17826
|
+
return makeResult({ ...base, success: false, error });
|
|
17827
|
+
}
|
|
17828
|
+
createDataLayout(target, dryRun, created, alreadyExisted);
|
|
17829
|
+
const gitignoreUpdated = applyGitignoreOption(target, options, dryRun);
|
|
17830
|
+
return makeResult({ ...base, success: true, gitignoreUpdated });
|
|
17831
|
+
} catch (error) {
|
|
17832
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
17833
|
+
return makeResult({ ...base, success: false, error: msg });
|
|
17834
|
+
}
|
|
17835
|
+
}
|
|
17836
|
+
function formatInitPortableMessage(result, dryRun) {
|
|
17837
|
+
if (!result.success) {
|
|
17838
|
+
return `init --portable failed: ${result.error ?? "unknown error"}
|
|
17839
|
+
`;
|
|
17840
|
+
}
|
|
17841
|
+
const lines = [];
|
|
17842
|
+
if (dryRun) {
|
|
17843
|
+
lines.push(`(dry-run) would create ${String(result.created.length)} entries under:`);
|
|
17844
|
+
lines.push(` ${result.absolutePath}`);
|
|
17845
|
+
return lines.join("\n") + "\n";
|
|
17846
|
+
}
|
|
17847
|
+
if (result.skipped) {
|
|
17848
|
+
lines.push(`\u2713 Already initialized: ${result.absolutePath}`);
|
|
17849
|
+
} else {
|
|
17850
|
+
lines.push(`\u2713 Created: ${result.absolutePath}`);
|
|
17851
|
+
}
|
|
17852
|
+
if (result.gitignoreUpdated) {
|
|
17853
|
+
lines.push(`\u2713 Added entry to .gitignore`);
|
|
17854
|
+
}
|
|
17855
|
+
lines.push("");
|
|
17856
|
+
lines.push("Activate by exporting:");
|
|
17857
|
+
lines.push(` export NEXUS_DATA_DIR=${result.absolutePath}`);
|
|
17858
|
+
lines.push("");
|
|
17859
|
+
lines.push("Or one-off:");
|
|
17860
|
+
lines.push(` NEXUS_DATA_DIR=${result.absolutePath} nexus-agents <cmd>`);
|
|
17861
|
+
return lines.join("\n") + "\n";
|
|
17862
|
+
}
|
|
17714
17863
|
|
|
17715
17864
|
// src/mcp/tools/dev-pipeline-tool.ts
|
|
17716
17865
|
import { z as z9 } from "zod";
|
|
@@ -18668,7 +18817,7 @@ function logFinalEventBusStats(logger17) {
|
|
|
18668
18817
|
// src/cli-orchestrator.ts
|
|
18669
18818
|
import * as readline2 from "readline";
|
|
18670
18819
|
function runOrchestratorRepl(options, logger17) {
|
|
18671
|
-
return new Promise((
|
|
18820
|
+
return new Promise((resolve15) => {
|
|
18672
18821
|
const rl = readline2.createInterface({
|
|
18673
18822
|
input: process.stdin,
|
|
18674
18823
|
output: process.stdout,
|
|
@@ -18704,7 +18853,7 @@ function runOrchestratorRepl(options, logger17) {
|
|
|
18704
18853
|
});
|
|
18705
18854
|
rl.on("close", () => {
|
|
18706
18855
|
logger17.info("Orchestrator REPL closed");
|
|
18707
|
-
|
|
18856
|
+
resolve15();
|
|
18708
18857
|
});
|
|
18709
18858
|
});
|
|
18710
18859
|
}
|
|
@@ -20523,8 +20672,8 @@ function printFirstRunHint() {
|
|
|
20523
20672
|
const isTTY = process.stderr.isTTY;
|
|
20524
20673
|
if (!isTTY) return;
|
|
20525
20674
|
const dataDir = getNexusDataDir();
|
|
20526
|
-
const hasConfig =
|
|
20527
|
-
if (
|
|
20675
|
+
const hasConfig = existsSync19("./nexus-agents.yaml") || existsSync19("./nexus-agents.yml");
|
|
20676
|
+
if (existsSync19(dataDir) || hasConfig) return;
|
|
20528
20677
|
process.stderr.write(
|
|
20529
20678
|
"\n\x1B[36mnexus-agents\x1B[0m: First time? Run \x1B[1mnexus-agents setup\x1B[0m to configure.\n\n"
|
|
20530
20679
|
);
|
|
@@ -20690,6 +20839,23 @@ async function handleDoctorCommand(args) {
|
|
|
20690
20839
|
}
|
|
20691
20840
|
process.exit(exitCode === 0 ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
|
|
20692
20841
|
}
|
|
20842
|
+
function handleInitCommand(args) {
|
|
20843
|
+
if (args.options.portable !== true) {
|
|
20844
|
+
process.stderr.write(
|
|
20845
|
+
"Usage: nexus-agents init --portable [path] [--force] [--dry-run] [--gitignore]\nBootstraps a workspace-local nexus-agents data directory.\n"
|
|
20846
|
+
);
|
|
20847
|
+
process.exit(EXIT_CODES.INVALID_ARGS);
|
|
20848
|
+
}
|
|
20849
|
+
const targetPath = args.positionals[1];
|
|
20850
|
+
const result = initPortable({
|
|
20851
|
+
...targetPath !== void 0 && targetPath !== "" ? { path: targetPath } : {},
|
|
20852
|
+
force: args.options.force,
|
|
20853
|
+
dryRun: args.options.dryRun,
|
|
20854
|
+
gitignore: args.options.gitignore ?? false
|
|
20855
|
+
});
|
|
20856
|
+
process.stdout.write(formatInitPortableMessage(result, args.options.dryRun));
|
|
20857
|
+
process.exit(result.success ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
|
|
20858
|
+
}
|
|
20693
20859
|
async function handleSetupCommandAsync(args) {
|
|
20694
20860
|
if (args.options.customApi !== void 0 && args.options.customApi !== "") {
|
|
20695
20861
|
const exitCode2 = await runCustomApiSetup(args);
|
|
@@ -22163,7 +22329,7 @@ function handleStatusCommand2(args) {
|
|
|
22163
22329
|
|
|
22164
22330
|
// src/cli/scenario-command.ts
|
|
22165
22331
|
import { readdir as readdir4 } from "fs/promises";
|
|
22166
|
-
import { join as
|
|
22332
|
+
import { join as join15, resolve as resolve14 } from "path";
|
|
22167
22333
|
|
|
22168
22334
|
// src/testing/e2e/scenario-runner.ts
|
|
22169
22335
|
import { readFile as readFile7 } from "fs/promises";
|
|
@@ -22323,7 +22489,7 @@ function checkCircularDependencies(workflow) {
|
|
|
22323
22489
|
var defaultStubFactory = {
|
|
22324
22490
|
createAgentStub(agentType, action) {
|
|
22325
22491
|
return async (inputs) => {
|
|
22326
|
-
await new Promise((
|
|
22492
|
+
await new Promise((resolve15) => setTimeout(resolve15, 10));
|
|
22327
22493
|
return {
|
|
22328
22494
|
stepId: `${agentType}-${action}`,
|
|
22329
22495
|
status: "success",
|
|
@@ -22482,7 +22648,7 @@ function createScenarioRunner(stubFactory) {
|
|
|
22482
22648
|
}
|
|
22483
22649
|
|
|
22484
22650
|
// src/cli/scenario-command.ts
|
|
22485
|
-
var FIXTURES_DIR =
|
|
22651
|
+
var FIXTURES_DIR = resolve14(import.meta.dirname, "../testing/e2e/fixtures");
|
|
22486
22652
|
var SCENARIO_SUFFIX = ".scenario.yaml";
|
|
22487
22653
|
async function listScenarios() {
|
|
22488
22654
|
try {
|
|
@@ -22533,7 +22699,7 @@ async function handleRun(args) {
|
|
|
22533
22699
|
process.exit(EXIT_CODES.SERVER_START_FAILED);
|
|
22534
22700
|
}
|
|
22535
22701
|
const runner = createScenarioRunner();
|
|
22536
|
-
const fixturePath =
|
|
22702
|
+
const fixturePath = join15(FIXTURES_DIR, `${name}${SCENARIO_SUFFIX}`);
|
|
22537
22703
|
try {
|
|
22538
22704
|
const fixture = await runner.loadFixture(fixturePath);
|
|
22539
22705
|
const result = await runner.run(fixture);
|
|
@@ -22796,6 +22962,8 @@ var SYNC_COMMAND_HANDLERS = {
|
|
|
22796
22962
|
status: handleStatusCommand2,
|
|
22797
22963
|
// Issue #1023: Warm-Up Command
|
|
22798
22964
|
"warm-up": handleWarmUpCommand,
|
|
22965
|
+
// #2305: Init Portable Command
|
|
22966
|
+
init: handleInitCommand,
|
|
22799
22967
|
"e2e-eval": handleE2EEvalCommand,
|
|
22800
22968
|
"routing-ab": handleRoutingABCommand,
|
|
22801
22969
|
"memory-eval": handleMemoryEvalCommand,
|