nexus-agents 2.80.3 → 2.81.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-HYOIDNBX.js → chunk-DQW2PQU3.js} +31 -3
- package/dist/{chunk-HYOIDNBX.js.map → chunk-DQW2PQU3.js.map} +1 -1
- package/dist/{chunk-Q2PSRDW6.js → chunk-KL23OVEU.js} +2 -2
- package/dist/{chunk-6GDF6FLC.js → chunk-VOFTCWSI.js} +3 -3
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +191 -4
- package/dist/cli.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{setup-command-IJ6WIK7O.js → setup-command-RC4ZBQ2V.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-Q2PSRDW6.js.map → chunk-KL23OVEU.js.map} +0 -0
- /package/dist/{chunk-6GDF6FLC.js.map → chunk-VOFTCWSI.js.map} +0 -0
- /package/dist/{setup-command-IJ6WIK7O.js.map → setup-command-RC4ZBQ2V.js.map} +0 -0
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
checkSqlite,
|
|
9
9
|
defaultConfig,
|
|
10
10
|
initDataDirectories
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-VOFTCWSI.js";
|
|
12
12
|
import {
|
|
13
13
|
probeAllClis
|
|
14
14
|
} from "./chunk-BMNWUPJO.js";
|
|
@@ -1974,4 +1974,4 @@ export {
|
|
|
1974
1974
|
setupCommand,
|
|
1975
1975
|
setupCommandAsync
|
|
1976
1976
|
};
|
|
1977
|
-
//# sourceMappingURL=chunk-
|
|
1977
|
+
//# sourceMappingURL=chunk-KL23OVEU.js.map
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
} from "./chunk-I2HMWH4R.js";
|
|
41
41
|
|
|
42
42
|
// src/version.ts
|
|
43
|
-
var VERSION = true ? "2.
|
|
43
|
+
var VERSION = true ? "2.81.0" : "dev";
|
|
44
44
|
|
|
45
45
|
// src/config/schemas-core.ts
|
|
46
46
|
import { z } from "zod";
|
|
@@ -2107,7 +2107,7 @@ async function runDoctorFix(result) {
|
|
|
2107
2107
|
writeLine2("\u2500".repeat(40));
|
|
2108
2108
|
let fixCount = 0;
|
|
2109
2109
|
if (!result.dataDirectory.rootExists || result.dataDirectory.subdirectories.some((d) => !d.exists || !d.writable)) {
|
|
2110
|
-
const { runSetup } = await import("./setup-command-
|
|
2110
|
+
const { runSetup } = await import("./setup-command-RC4ZBQ2V.js");
|
|
2111
2111
|
const setupResult = runSetup({
|
|
2112
2112
|
skipMcp: true,
|
|
2113
2113
|
skipRules: true,
|
|
@@ -2219,4 +2219,4 @@ export {
|
|
|
2219
2219
|
startStdioServer,
|
|
2220
2220
|
closeServer
|
|
2221
2221
|
};
|
|
2222
|
-
//# sourceMappingURL=chunk-
|
|
2222
|
+
//# sourceMappingURL=chunk-VOFTCWSI.js.map
|
package/dist/cli.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ declare const EXIT_CODES: {
|
|
|
41
41
|
/**
|
|
42
42
|
* CLI command types that can be executed.
|
|
43
43
|
*/
|
|
44
|
-
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' | 'login' | 'usage' | 'migrate' | 'improvement-review';
|
|
44
|
+
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' | 'login' | 'usage' | 'migrate' | 'tour' | 'improvement-review';
|
|
45
45
|
/**
|
|
46
46
|
* Parsed CLI arguments and command.
|
|
47
47
|
*/
|
package/dist/cli.js
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import {
|
|
23
23
|
setupCommandAsync,
|
|
24
24
|
verifyCommand
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-KL23OVEU.js";
|
|
26
26
|
import "./chunk-6YQCLEHL.js";
|
|
27
27
|
import {
|
|
28
28
|
AuthHandler,
|
|
@@ -153,7 +153,7 @@ import {
|
|
|
153
153
|
validateCommand,
|
|
154
154
|
validateWorkflow,
|
|
155
155
|
wrapInMarkdownFence
|
|
156
|
-
} from "./chunk-
|
|
156
|
+
} from "./chunk-DQW2PQU3.js";
|
|
157
157
|
import "./chunk-AP2FD37C.js";
|
|
158
158
|
import "./chunk-ED6VQWNG.js";
|
|
159
159
|
import {
|
|
@@ -226,7 +226,7 @@ import {
|
|
|
226
226
|
loadConfig,
|
|
227
227
|
runDoctor,
|
|
228
228
|
validateNexusEnv
|
|
229
|
-
} from "./chunk-
|
|
229
|
+
} from "./chunk-VOFTCWSI.js";
|
|
230
230
|
import "./chunk-WZGCVCRQ.js";
|
|
231
231
|
import "./chunk-73K7575Z.js";
|
|
232
232
|
import {
|
|
@@ -9511,6 +9511,11 @@ var COMMAND_CATALOG = [
|
|
|
9511
9511
|
audience: "essential"
|
|
9512
9512
|
},
|
|
9513
9513
|
// ── Advanced ─────────────────────────────────────────────────────────────
|
|
9514
|
+
{
|
|
9515
|
+
command: "tour",
|
|
9516
|
+
description: "Guided walkthrough of the four headline tools \u2014 no API keys, no quota (#2851). --non-interactive runs straight through.",
|
|
9517
|
+
audience: "advanced"
|
|
9518
|
+
},
|
|
9514
9519
|
{
|
|
9515
9520
|
command: "session",
|
|
9516
9521
|
description: "Manage session persistence (list, show, export, delete)",
|
|
@@ -13520,6 +13525,180 @@ async function demoCommand(subcommand, args, options) {
|
|
|
13520
13525
|
}
|
|
13521
13526
|
}
|
|
13522
13527
|
|
|
13528
|
+
// src/cli/tour-command.ts
|
|
13529
|
+
import { createInterface as createInterface2 } from "readline";
|
|
13530
|
+
var STEP_WELCOME = {
|
|
13531
|
+
title: "Welcome",
|
|
13532
|
+
intro: [
|
|
13533
|
+
"nexus-agents is a governance substrate for AI coding agents \u2014 Claude,",
|
|
13534
|
+
"Codex, Gemini, OpenCode. The agents do the engineering; this project",
|
|
13535
|
+
"routes tasks, runs adversarial review, takes consensus votes, and keeps",
|
|
13536
|
+
"an immutable audit trail of everything those agents touch.",
|
|
13537
|
+
"",
|
|
13538
|
+
"This tour walks four headline tools using cached fixtures, so it costs",
|
|
13539
|
+
"nothing to run and needs no API keys configured."
|
|
13540
|
+
].join("\n"),
|
|
13541
|
+
demo: "",
|
|
13542
|
+
takeaway: "No live API calls in this tour \u2014 everything you see is a representative fixture.",
|
|
13543
|
+
paths: ["~/.nexus-agents/ (data root \u2014 overridable via NEXUS_DATA_DIR)"]
|
|
13544
|
+
};
|
|
13545
|
+
var STEP_ORCHESTRATE = {
|
|
13546
|
+
title: "orchestrate \u2014 route a task to the right model",
|
|
13547
|
+
intro: [
|
|
13548
|
+
"The `orchestrate` MCP tool takes a task description, classifies it,",
|
|
13549
|
+
"picks the best-fit CLI and pattern (sequential / graph / consensus),",
|
|
13550
|
+
"and dispatches. Routing uses real outcome history \u2014 earlier successes",
|
|
13551
|
+
"and failures bias the next pick."
|
|
13552
|
+
].join("\n"),
|
|
13553
|
+
demo: [
|
|
13554
|
+
'Task: "implement a /healthz endpoint with structured logging"',
|
|
13555
|
+
" Classifier: task_type=implementation complexity=4/10",
|
|
13556
|
+
" Router picked: claude-sonnet (capability=code_generation, score=0.91)",
|
|
13557
|
+
" Pattern: graph (2 sequential subtasks detected)",
|
|
13558
|
+
" Pre-flight: rate-limit budget OK | outcome history: 14 runs, 92% success",
|
|
13559
|
+
" -> dispatched"
|
|
13560
|
+
].join("\n"),
|
|
13561
|
+
takeaway: "The router learns from outcomes \u2014 bad runs lower a CLI/category score next time."
|
|
13562
|
+
};
|
|
13563
|
+
var STEP_VOTE = {
|
|
13564
|
+
title: "vote --quick \u2014 3-agent consensus on a proposal",
|
|
13565
|
+
intro: [
|
|
13566
|
+
"`nexus-agents vote --quick` runs a 3-voter panel (architect / security /",
|
|
13567
|
+
"scope_steward) on a proposal and aggregates their decisions. Each voter is",
|
|
13568
|
+
"a real LLM call, runs in parallel, and returns a structured rationale.",
|
|
13569
|
+
"`--quick` is for fast tie-breaks; the full 7-voter panel uses higher-order",
|
|
13570
|
+
"Bayesian aggregation."
|
|
13571
|
+
].join("\n"),
|
|
13572
|
+
demo: [
|
|
13573
|
+
'Proposal: "Adopt Bun as the dev-time test runner alongside Vitest"',
|
|
13574
|
+
" Software Architect APPROVE (conf 0.82) Keeps deps slim; vitest API parity",
|
|
13575
|
+
" Security Engineer REJECT (conf 0.74) New supply-chain surface, unproven",
|
|
13576
|
+
" Scope Steward REJECT (conf 0.71) Two runners = sprawl; pick one",
|
|
13577
|
+
" Result: 1/3 approve (33%) -> REJECTED (simple_majority, threshold 50%)"
|
|
13578
|
+
].join("\n"),
|
|
13579
|
+
takeaway: "Decisions get recorded \u2014 same proposal voted twice gets the same panel rationale."
|
|
13580
|
+
};
|
|
13581
|
+
var STEP_RESEARCH = {
|
|
13582
|
+
title: "research_synthesize \u2014 cluster + align literature",
|
|
13583
|
+
intro: [
|
|
13584
|
+
"`research_synthesize` walks the registered research catalog, clusters",
|
|
13585
|
+
"sources by topic, and maps techniques back to where they live in this",
|
|
13586
|
+
"codebase. Useful for asking 'what do we know about X, and what have",
|
|
13587
|
+
"we already implemented?'"
|
|
13588
|
+
].join("\n"),
|
|
13589
|
+
demo: [
|
|
13590
|
+
"Synthesis: 12 sources, 4 clusters",
|
|
13591
|
+
"",
|
|
13592
|
+
" agent prompting 7 sources evidence-tier: strong",
|
|
13593
|
+
" Top techniques: ToT (5/7), self-critique (4/7)",
|
|
13594
|
+
" Implementations: SimpleAgent.buildPrompt, agents/agentic-adapter",
|
|
13595
|
+
"",
|
|
13596
|
+
" memory architectures 3 sources evidence-tier: emerging",
|
|
13597
|
+
" Gap: cross-process episodic store",
|
|
13598
|
+
" Tracked at: open issue #2921"
|
|
13599
|
+
].join("\n"),
|
|
13600
|
+
takeaway: 'Maps "what the literature says" onto "what we built" \u2014 drift surfaces as gaps.'
|
|
13601
|
+
};
|
|
13602
|
+
var STEP_AUDIT = {
|
|
13603
|
+
title: "verify_audit_chain \u2014 tamper-evident history",
|
|
13604
|
+
intro: [
|
|
13605
|
+
"Every governance-relevant action \u2014 routing decisions, votes, expert",
|
|
13606
|
+
"invocations, policy denials \u2014 is appended to a Merkle-linked audit log.",
|
|
13607
|
+
"`verify_audit_chain` re-walks the chain and confirms every entry hashes",
|
|
13608
|
+
"back to its predecessor. If any entry was tampered with, the verification",
|
|
13609
|
+
"fails at the first broken link."
|
|
13610
|
+
].join("\n"),
|
|
13611
|
+
demo: [
|
|
13612
|
+
"Audit chain: ~/.nexus-agents/audit/chain.jsonl",
|
|
13613
|
+
" Entries: 4,217",
|
|
13614
|
+
" Span: 2026-04-18T09:14Z -> 2026-05-22T03:51Z",
|
|
13615
|
+
" Merkle: OK (every entry hashes back to its predecessor)",
|
|
13616
|
+
" Result: VERIFIED - chain is intact"
|
|
13617
|
+
].join("\n"),
|
|
13618
|
+
takeaway: "The chain is append-only and hash-linked \u2014 any historical edit breaks verification.",
|
|
13619
|
+
paths: [
|
|
13620
|
+
"~/.nexus-agents/audit/chain.jsonl (immutable audit log)",
|
|
13621
|
+
"~/.nexus-agents/learning/outcomes.db (routing outcome history)"
|
|
13622
|
+
]
|
|
13623
|
+
};
|
|
13624
|
+
var TOUR_STEPS = [
|
|
13625
|
+
STEP_WELCOME,
|
|
13626
|
+
STEP_ORCHESTRATE,
|
|
13627
|
+
STEP_VOTE,
|
|
13628
|
+
STEP_RESEARCH,
|
|
13629
|
+
STEP_AUDIT
|
|
13630
|
+
];
|
|
13631
|
+
async function runTour(opts, io) {
|
|
13632
|
+
io.write("\u2550\u2550\u2550 nexus-agents tour \u2550\u2550\u2550\n");
|
|
13633
|
+
io.write(
|
|
13634
|
+
`A no-API-keys walkthrough of the four headline tools. ${opts.nonInteractive ? "Non-interactive mode." : "Press Enter to advance."}
|
|
13635
|
+
`
|
|
13636
|
+
);
|
|
13637
|
+
for (let i = 0; i < TOUR_STEPS.length; i++) {
|
|
13638
|
+
const step = TOUR_STEPS[i];
|
|
13639
|
+
if (step === void 0) continue;
|
|
13640
|
+
renderStep(io, step, i + 1, TOUR_STEPS.length);
|
|
13641
|
+
if (!opts.nonInteractive && i < TOUR_STEPS.length - 1) {
|
|
13642
|
+
await io.prompt("\nPress Enter to continue (Ctrl-C to exit) ... ");
|
|
13643
|
+
}
|
|
13644
|
+
}
|
|
13645
|
+
io.write("\n\u2550\u2550\u2550 Tour complete \u2550\u2550\u2550\n");
|
|
13646
|
+
io.write("Next steps:\n");
|
|
13647
|
+
io.write(" nexus-agents doctor -- check your install\n");
|
|
13648
|
+
io.write(" nexus-agents setup -- configure MCP + .rules + data dirs\n");
|
|
13649
|
+
io.write(" nexus-agents --help --all -- see every command\n");
|
|
13650
|
+
io.close();
|
|
13651
|
+
return 0;
|
|
13652
|
+
}
|
|
13653
|
+
function renderStep(io, step, n, total) {
|
|
13654
|
+
io.write(`
|
|
13655
|
+
\u2500\u2500\u2500 Step ${String(n)}/${String(total)}: ${step.title} \u2500\u2500\u2500
|
|
13656
|
+
|
|
13657
|
+
`);
|
|
13658
|
+
io.write(`${step.intro}
|
|
13659
|
+
`);
|
|
13660
|
+
if (step.demo !== "") {
|
|
13661
|
+
io.write("\n--- representative output ---\n");
|
|
13662
|
+
io.write(`${step.demo}
|
|
13663
|
+
`);
|
|
13664
|
+
io.write("--- end output ---\n");
|
|
13665
|
+
}
|
|
13666
|
+
io.write(`
|
|
13667
|
+
Takeaway: ${step.takeaway}
|
|
13668
|
+
`);
|
|
13669
|
+
if (step.paths !== void 0 && step.paths.length > 0) {
|
|
13670
|
+
io.write("\nFiles on your machine:\n");
|
|
13671
|
+
for (const p of step.paths) io.write(` - ${p}
|
|
13672
|
+
`);
|
|
13673
|
+
}
|
|
13674
|
+
}
|
|
13675
|
+
function interactiveIO() {
|
|
13676
|
+
const rl = createInterface2({ input: process.stdin, output: process.stdout });
|
|
13677
|
+
return {
|
|
13678
|
+
write: (text) => {
|
|
13679
|
+
process.stdout.write(text);
|
|
13680
|
+
},
|
|
13681
|
+
prompt: (question) => new Promise((resolve14) => {
|
|
13682
|
+
rl.question(question, (answer) => {
|
|
13683
|
+
resolve14(answer.trim());
|
|
13684
|
+
});
|
|
13685
|
+
}),
|
|
13686
|
+
close: () => {
|
|
13687
|
+
rl.close();
|
|
13688
|
+
}
|
|
13689
|
+
};
|
|
13690
|
+
}
|
|
13691
|
+
function scriptedIO() {
|
|
13692
|
+
return {
|
|
13693
|
+
write: (text) => {
|
|
13694
|
+
process.stdout.write(text);
|
|
13695
|
+
},
|
|
13696
|
+
prompt: () => Promise.resolve(""),
|
|
13697
|
+
close: () => {
|
|
13698
|
+
}
|
|
13699
|
+
};
|
|
13700
|
+
}
|
|
13701
|
+
|
|
13523
13702
|
// src/cli/fitness-audit.ts
|
|
13524
13703
|
var COLORS = colors;
|
|
13525
13704
|
function formatScore(score, max) {
|
|
@@ -16262,7 +16441,8 @@ var VALID_COMMANDS = [
|
|
|
16262
16441
|
"login",
|
|
16263
16442
|
"usage",
|
|
16264
16443
|
"improvement-review",
|
|
16265
|
-
"migrate"
|
|
16444
|
+
"migrate",
|
|
16445
|
+
"tour"
|
|
16266
16446
|
];
|
|
16267
16447
|
function isValidCommand(value) {
|
|
16268
16448
|
return VALID_COMMANDS.includes(value);
|
|
@@ -20025,6 +20205,11 @@ async function handleDemoCommand(args) {
|
|
|
20025
20205
|
const exitCode = await demoCommand(subcommand, additionalArgs, options);
|
|
20026
20206
|
process.exit(exitCode === 0 ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
|
|
20027
20207
|
}
|
|
20208
|
+
async function handleTourCommand(args) {
|
|
20209
|
+
const io = args.options.nonInteractive ? scriptedIO() : interactiveIO();
|
|
20210
|
+
const exitCode = await runTour({ nonInteractive: args.options.nonInteractive }, io);
|
|
20211
|
+
process.exit(exitCode === 0 ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
|
|
20212
|
+
}
|
|
20028
20213
|
async function handleHooksCommand(args) {
|
|
20029
20214
|
if (args.options.help || args.positionals.length < 2) {
|
|
20030
20215
|
printHookHelp();
|
|
@@ -22520,6 +22705,8 @@ var ASYNC_COMMAND_HANDLERS = {
|
|
|
22520
22705
|
init: handleInitCommand,
|
|
22521
22706
|
demo: handleDemoCommand,
|
|
22522
22707
|
// Made async for live CLI execution
|
|
22708
|
+
// Issue #2851: nexus-agents tour — interactive zero-API walkthrough
|
|
22709
|
+
tour: handleTourCommand,
|
|
22523
22710
|
// Issue #526: Newly wired async commands
|
|
22524
22711
|
sprint: handleSprintCommand,
|
|
22525
22712
|
session: handleSessionCommand,
|