nexus-agents 3.5.6 → 3.6.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-VKZL3H5N.js → chunk-4U2CQYZY.js} +2 -2
- package/dist/{chunk-JQHK34AF.js → chunk-LOS63AKL.js} +2 -2
- package/dist/{chunk-V3YRYNAA.js → chunk-Y33P5D4B.js} +3 -3
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +30 -5
- package/dist/cli.js.map +1 -1
- package/dist/doctor-live-TXBH4FFG.js +136 -0
- package/dist/doctor-live-TXBH4FFG.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/{setup-command-7I6EZWB7.js → setup-command-6C4RZ3ZI.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-VKZL3H5N.js.map → chunk-4U2CQYZY.js.map} +0 -0
- /package/dist/{chunk-JQHK34AF.js.map → chunk-LOS63AKL.js.map} +0 -0
- /package/dist/{chunk-V3YRYNAA.js.map → chunk-Y33P5D4B.js.map} +0 -0
- /package/dist/{setup-command-7I6EZWB7.js.map → setup-command-6C4RZ3ZI.js.map} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createAllAdapters,
|
|
3
|
+
probeAllClis
|
|
4
|
+
} from "./chunk-TXQUWORP.js";
|
|
5
|
+
import "./chunk-OVYEVJIS.js";
|
|
6
|
+
import "./chunk-XLACRVKG.js";
|
|
7
|
+
import "./chunk-77RSSNU6.js";
|
|
8
|
+
import "./chunk-SNJNRDKZ.js";
|
|
9
|
+
import "./chunk-EOVXDAYT.js";
|
|
10
|
+
import "./chunk-QZUG667L.js";
|
|
11
|
+
import "./chunk-XZYPUK4O.js";
|
|
12
|
+
import "./chunk-542D7RE3.js";
|
|
13
|
+
import {
|
|
14
|
+
resolveClassGuardMs
|
|
15
|
+
} from "./chunk-OO7JQJTG.js";
|
|
16
|
+
import "./chunk-2HUC6NZN.js";
|
|
17
|
+
import "./chunk-OQLFRJCW.js";
|
|
18
|
+
import "./chunk-ZPWHCABL.js";
|
|
19
|
+
|
|
20
|
+
// src/cli/cli-readiness.ts
|
|
21
|
+
var READINESS_LEVELS = ["installed", "authenticated", "serves"];
|
|
22
|
+
function highestVerified(levels) {
|
|
23
|
+
let reached;
|
|
24
|
+
for (const level of READINESS_LEVELS) {
|
|
25
|
+
if (levels[level].status !== "verified") break;
|
|
26
|
+
reached = level;
|
|
27
|
+
}
|
|
28
|
+
return reached;
|
|
29
|
+
}
|
|
30
|
+
function buildReadiness(cli, levels) {
|
|
31
|
+
const reached = highestVerified(levels);
|
|
32
|
+
return { cli, levels, ...reached !== void 0 ? { reached } : {} };
|
|
33
|
+
}
|
|
34
|
+
function formatReadiness(readiness) {
|
|
35
|
+
const icon = (o) => o.status === "verified" ? "\u2713" : o.status === "failed" ? "\u2717" : "\xB7";
|
|
36
|
+
const lines = READINESS_LEVELS.map((level) => {
|
|
37
|
+
const outcome = readiness.levels[level];
|
|
38
|
+
const detail = outcome.status === "verified" ? "" : ` \u2014 ${outcome.reason}`;
|
|
39
|
+
return ` ${icon(outcome)} ${level}${detail}`;
|
|
40
|
+
});
|
|
41
|
+
const summary = readiness.reached === void 0 ? "not ready" : `ready through "${readiness.reached}"`;
|
|
42
|
+
return [` ${readiness.cli}: ${summary}`, ...lines].join("\n");
|
|
43
|
+
}
|
|
44
|
+
var SERVES_PROBE_PROMPT = "Reply with the single word: ok";
|
|
45
|
+
async function probeServes(adapter, timeoutMs = resolveClassGuardMs("interactive")) {
|
|
46
|
+
let result;
|
|
47
|
+
try {
|
|
48
|
+
result = await withDeadline(
|
|
49
|
+
adapter.execute({ content: SERVES_PROBE_PROMPT, maxTokens: 16 }),
|
|
50
|
+
timeoutMs
|
|
51
|
+
);
|
|
52
|
+
} catch (caught) {
|
|
53
|
+
if (caught instanceof ProbeTimeout) {
|
|
54
|
+
return {
|
|
55
|
+
status: "failed",
|
|
56
|
+
reason: `no response within ${String(Math.round(timeoutMs / 1e3))}s`
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const message = caught instanceof Error ? caught.message : String(caught);
|
|
60
|
+
return { status: "failed", reason: `probe threw: ${message}` };
|
|
61
|
+
}
|
|
62
|
+
if (!result.ok) {
|
|
63
|
+
return { status: "failed", reason: result.error.message };
|
|
64
|
+
}
|
|
65
|
+
if (result.value.text.trim() === "") {
|
|
66
|
+
return {
|
|
67
|
+
status: "failed",
|
|
68
|
+
reason: "call succeeded but returned no content \u2014 the #4351 signature"
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { status: "verified" };
|
|
72
|
+
}
|
|
73
|
+
var ProbeTimeout = class extends Error {
|
|
74
|
+
};
|
|
75
|
+
async function withDeadline(work, timeoutMs) {
|
|
76
|
+
let timer;
|
|
77
|
+
const deadline = new Promise((_resolve, reject) => {
|
|
78
|
+
timer = setTimeout(() => {
|
|
79
|
+
reject(new ProbeTimeout());
|
|
80
|
+
}, timeoutMs);
|
|
81
|
+
});
|
|
82
|
+
try {
|
|
83
|
+
return await Promise.race([work, deadline]);
|
|
84
|
+
} finally {
|
|
85
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// src/cli/doctor-live.ts
|
|
90
|
+
var NOT_REACHED = "earlier level did not pass, so this was not attempted";
|
|
91
|
+
async function runLiveReadiness(deps = {}) {
|
|
92
|
+
const adapters = deps.adapters ?? createAllAdapters();
|
|
93
|
+
const authStates = deps.authStates ?? await readAuthStates();
|
|
94
|
+
const results = [];
|
|
95
|
+
for (const [cli, adapter] of adapters) {
|
|
96
|
+
results.push(await ladderFor(cli, adapter, authStates.get(cli)));
|
|
97
|
+
}
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
async function ladderFor(cli, adapter, auth) {
|
|
101
|
+
const installed = { status: "verified" };
|
|
102
|
+
const authenticated = auth === "not-ok" ? { status: "failed", reason: "no usable credentials found" } : { status: "verified" };
|
|
103
|
+
if (authenticated.status !== "verified") {
|
|
104
|
+
return buildReadiness(cli, {
|
|
105
|
+
installed,
|
|
106
|
+
authenticated,
|
|
107
|
+
serves: { status: "not-attempted", reason: NOT_REACHED }
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return buildReadiness(cli, { installed, authenticated, serves: await probeServes(adapter) });
|
|
111
|
+
}
|
|
112
|
+
async function readAuthStates() {
|
|
113
|
+
const probes = await probeAllClis();
|
|
114
|
+
const states = /* @__PURE__ */ new Map();
|
|
115
|
+
for (const probe of probes) {
|
|
116
|
+
if (probe.state === "authenticated") states.set(probe.cli, "authenticated");
|
|
117
|
+
else if (probe.state === "unknown") states.set(probe.cli, "unknown");
|
|
118
|
+
else states.set(probe.cli, "not-ok");
|
|
119
|
+
}
|
|
120
|
+
return states;
|
|
121
|
+
}
|
|
122
|
+
function formatLiveReadiness(report) {
|
|
123
|
+
if (report.length === 0) {
|
|
124
|
+
return "\nLive readiness: no adapters configured \u2014 nothing was probed.";
|
|
125
|
+
}
|
|
126
|
+
return [
|
|
127
|
+
"",
|
|
128
|
+
"Live readiness (--live: a real completion per adapter)",
|
|
129
|
+
...report.map(formatReadiness)
|
|
130
|
+
].join("\n");
|
|
131
|
+
}
|
|
132
|
+
export {
|
|
133
|
+
formatLiveReadiness,
|
|
134
|
+
runLiveReadiness
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=doctor-live-TXBH4FFG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/cli-readiness.ts","../src/cli/doctor-live.ts"],"sourcesContent":["/**\n * Readiness levels for a CLI adapter (#4376, #4351 criterion 7).\n *\n * Nothing in the tree could confirm that an adapter which *looks* healthy can\n * actually serve a completion. `healthCheck()` proves the binary exists at an\n * acceptable version; `cli-auth-probe` proves credentials are present and\n * unexpired, and says so explicitly — \"No live API calls.\" Neither proves the\n * adapter serves anything.\n *\n * That is the state #4351 reported: every voter returned `stop_sequence` with\n * zero tokens while every available check said healthy. The checks were not\n * wrong; they were answering a narrower question than the caller assumed.\n *\n * ## Levels, and what each one actually proves\n *\n * | level | proves | costs |\n * | --------------- | ----------------------------------------- | ----- |\n * | `installed` | the binary exists at a supported version | none |\n * | `authenticated` | credentials are present and unexpired | none |\n * | `serves` | a real completion came back with content | quota |\n *\n * `serves` is the only level that can catch #4351, and the only one that\n * spends the resource it is measuring. It therefore runs **only when\n * explicitly invoked** (`doctor --live`). Decided by a 7-voter `higher_order`\n * panel on #4376 (5 of 6 approvers): the rejected alternative cached a probe\n * result behind a TTL on the default path, which is a stale measurement\n * presented as current readiness — the same defect this module exists to fix.\n *\n * ## Not-attempted is not a failure\n *\n * The load-bearing distinction. A level that was never run reports\n * `not-attempted`, never `failed`. A reader must be able to tell \"we checked\n * and it does not serve\" from \"we did not check\", because the second is the\n * default state of every run that does not pass `--live`, and reporting it as\n * either healthy or broken would be a claim nobody measured.\n *\n * @module cli/cli-readiness\n * (Source: Issue #4376)\n */\n\nimport { resolveClassGuardMs } from '../config/timeouts.js';\nimport type { CliName } from '../cli-adapters/types.js';\n\n/** Ordered weakest to strongest. Each level subsumes the ones before it. */\nexport const READINESS_LEVELS = ['installed', 'authenticated', 'serves'] as const;\n\nexport type ReadinessLevel = (typeof READINESS_LEVELS)[number];\n\n/** What a single level's check concluded. */\nexport type LevelOutcome =\n | { readonly status: 'verified' }\n | { readonly status: 'failed'; readonly reason: string }\n /** Not run. Carries why, so the report can distinguish opt-out from error. */\n | { readonly status: 'not-attempted'; readonly reason: string };\n\nexport interface CliReadiness {\n readonly cli: CliName;\n readonly levels: Readonly<Record<ReadinessLevel, LevelOutcome>>;\n /**\n * The strongest level actually VERIFIED, or undefined when even `installed`\n * failed. Never inferred from a level that was not attempted.\n */\n readonly reached?: ReadinessLevel;\n}\n\n/** Human-readable statement of what a level does and does not prove. */\nexport const LEVEL_MEANING: Readonly<Record<ReadinessLevel, string>> = {\n installed: 'binary present at a supported version — proves nothing about auth or serving',\n authenticated: 'credentials present and unexpired, read locally — no API call was made',\n serves: 'a real completion returned content — the only level that proves the adapter works',\n};\n\n/**\n * The strongest verified level, stopping at the first gap.\n *\n * Stops rather than scanning for any verified level, because the ladder is\n * cumulative: a `serves` verification below a failed `authenticated` would\n * mean the two checks disagree, and reporting the higher one would paper over\n * that. A `not-attempted` level stops the ladder exactly like a failure —\n * absence of a check is not a pass.\n */\nexport function highestVerified(\n levels: Readonly<Record<ReadinessLevel, LevelOutcome>>\n): ReadinessLevel | undefined {\n let reached: ReadinessLevel | undefined;\n for (const level of READINESS_LEVELS) {\n if (levels[level].status !== 'verified') break;\n reached = level;\n }\n return reached;\n}\n\n/** Assemble a readiness result, deriving `reached` from the outcomes. */\nexport function buildReadiness(\n cli: CliName,\n levels: Readonly<Record<ReadinessLevel, LevelOutcome>>\n): CliReadiness {\n const reached = highestVerified(levels);\n return { cli, levels, ...(reached !== undefined ? { reached } : {}) };\n}\n\n/**\n * Render one CLI's ladder, naming every level's state.\n *\n * Every level is printed, including the ones that did not run. A report that\n * silently omitted `serves` would read as a clean bill of health from a run\n * that never tested serving — which is precisely how #4351 went unnoticed.\n */\nexport function formatReadiness(readiness: CliReadiness): string {\n const icon = (o: LevelOutcome): string =>\n o.status === 'verified' ? '✓' : o.status === 'failed' ? '✗' : '·';\n\n const lines = READINESS_LEVELS.map((level) => {\n const outcome = readiness.levels[level];\n const detail = outcome.status === 'verified' ? '' : ` — ${outcome.reason}`;\n return ` ${icon(outcome)} ${level}${detail}`;\n });\n\n const summary =\n readiness.reached === undefined ? 'not ready' : `ready through \"${readiness.reached}\"`;\n\n return [` ${readiness.cli}: ${summary}`, ...lines].join('\\n');\n}\n\n/** The minimal adapter surface the `serves` probe needs. */\nexport interface ServesProbeTarget {\n execute(task: {\n content: string;\n maxTokens?: number;\n }): Promise<{ ok: true; value: { text: string } } | { ok: false; error: { message: string } }>;\n}\n\n/**\n * The smallest prompt that still proves generation happened.\n *\n * Short on purpose — this level spends real quota, so it asks for the least\n * that can distinguish \"served content\" from \"returned nothing\".\n */\nexport const SERVES_PROBE_PROMPT = 'Reply with the single word: ok';\n\n/**\n * Probe whether an adapter actually serves a completion.\n *\n * The check that matters is **non-empty content**, not a successful exit.\n * #4351's signature was every voter returning `stop_sequence` with zero\n * tokens: the call succeeded and produced nothing. An adapter that returns\n * `ok` with empty text has not served, and saying otherwise would reproduce\n * the exact reading that made the incident invisible.\n *\n * Bounded by the `interactive` operation-class guard. Found by running it: an\n * unbounded ladder over four adapters hung past two minutes with no output,\n * and a readiness check that never returns is worse than one that reports a\n * failure — the operator learns nothing either way, but waits for it. A\n * timeout is itself a legitimate not-ready result, not an error.\n *\n * @param adapter - The adapter to probe.\n * @param timeoutMs - Per-adapter ceiling; defaults to the interactive guard.\n */\nexport async function probeServes(\n adapter: ServesProbeTarget,\n timeoutMs: number = resolveClassGuardMs('interactive')\n): Promise<LevelOutcome> {\n let result: Awaited<ReturnType<ServesProbeTarget['execute']>>;\n try {\n result = await withDeadline(\n adapter.execute({ content: SERVES_PROBE_PROMPT, maxTokens: 16 }),\n timeoutMs\n );\n } catch (caught: unknown) {\n if (caught instanceof ProbeTimeout) {\n return {\n status: 'failed',\n reason: `no response within ${String(Math.round(timeoutMs / 1000))}s`,\n };\n }\n const message = caught instanceof Error ? caught.message : String(caught);\n return { status: 'failed', reason: `probe threw: ${message}` };\n }\n\n if (!result.ok) {\n return { status: 'failed', reason: result.error.message };\n }\n if (result.value.text.trim() === '') {\n return {\n status: 'failed',\n reason: 'call succeeded but returned no content — the #4351 signature',\n };\n }\n return { status: 'verified' };\n}\n\n/** Raised when a probe outlives its ceiling. */\nclass ProbeTimeout extends Error {}\n\n/**\n * Race a promise against a deadline.\n *\n * The underlying call is not cancelled — a CLI subprocess keeps running until\n * its own guard reaps it. What this bounds is how long the OPERATOR waits,\n * which is the thing that made an unbounded ladder unusable.\n */\nasync function withDeadline<T>(work: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: NodeJS.Timeout | undefined;\n const deadline = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => {\n reject(new ProbeTimeout());\n }, timeoutMs);\n // Deliberately NOT unref'd. An unref'd timer does not hold the event loop\n // open, so if the probed call never settles and nothing else is pending,\n // Node can exit at the await before the deadline fires — the guarantee\n // voiding itself in precisely the case it exists for. `clearTimeout` in\n // the finally is what stops it outliving a call that did settle.\n });\n\n try {\n return await Promise.race([work, deadline]);\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n}\n","/**\n * The `serves` readiness level for `nexus-agents doctor --live` (#4376).\n *\n * Runs a real completion against every configured adapter and reports whether\n * content actually came back. This is the only level that can catch #4351 —\n * every voter returning `stop_sequence` with zero tokens while `healthCheck()`\n * and the auth probe both reported healthy — and the only one that spends the\n * resource it measures, which is why it is opt-in.\n *\n * @module cli/doctor-live\n * (Source: Issue #4376)\n */\n\nimport { createAllAdapters } from '../cli-adapters/factory.js';\nimport type { CliName } from '../cli-adapters/types.js';\nimport { probeAllClis } from './cli-auth-probe.js';\nimport {\n buildReadiness,\n formatReadiness,\n probeServes,\n type CliReadiness,\n type LevelOutcome,\n type ServesProbeTarget,\n} from './cli-readiness.js';\n\n/** Reason recorded when a level is skipped because an earlier one failed. */\nconst NOT_REACHED = 'earlier level did not pass, so this was not attempted';\n\n/**\n * Run the full ladder for every adapter.\n *\n * The ladder short-circuits: a CLI that is not installed is not probed for\n * auth, and one that is not authenticated is not billed for a completion. The\n * skipped levels report `not-attempted`, never `failed` — nothing was learned\n * about them, and saying otherwise would invent a measurement.\n */\nexport async function runLiveReadiness(\n deps: {\n readonly adapters?: Map<CliName, ServesProbeTarget>;\n readonly authStates?: ReadonlyMap<CliName, 'authenticated' | 'unknown' | 'not-ok'>;\n } = {}\n): Promise<readonly CliReadiness[]> {\n const adapters =\n deps.adapters ?? (createAllAdapters() as unknown as Map<CliName, ServesProbeTarget>);\n const authStates = deps.authStates ?? (await readAuthStates());\n\n const results: CliReadiness[] = [];\n for (const [cli, adapter] of adapters) {\n results.push(await ladderFor(cli, adapter, authStates.get(cli)));\n }\n return results;\n}\n\nasync function ladderFor(\n cli: CliName,\n adapter: ServesProbeTarget,\n auth: 'authenticated' | 'unknown' | 'not-ok' | undefined\n): Promise<CliReadiness> {\n const installed: LevelOutcome = { status: 'verified' };\n\n // `unknown` (#4391: a CLI exposing no readable auth signal) is admitted\n // optimistically at this level, exactly as the auth probe requires — but it\n // is the live probe below that then actually settles the question.\n const authenticated: LevelOutcome =\n auth === 'not-ok'\n ? { status: 'failed', reason: 'no usable credentials found' }\n : { status: 'verified' };\n\n if (authenticated.status !== 'verified') {\n return buildReadiness(cli, {\n installed,\n authenticated,\n serves: { status: 'not-attempted', reason: NOT_REACHED },\n });\n }\n\n return buildReadiness(cli, { installed, authenticated, serves: await probeServes(adapter) });\n}\n\n/** Collapse the auth probe's states into what the ladder needs. */\nasync function readAuthStates(): Promise<\n ReadonlyMap<CliName, 'authenticated' | 'unknown' | 'not-ok'>\n> {\n const probes = await probeAllClis();\n const states = new Map<CliName, 'authenticated' | 'unknown' | 'not-ok'>();\n for (const probe of probes) {\n if (probe.state === 'authenticated') states.set(probe.cli, 'authenticated');\n else if (probe.state === 'unknown') states.set(probe.cli, 'unknown');\n else states.set(probe.cli, 'not-ok');\n }\n return states;\n}\n\n/** Render the live report, with a heading that says what was and was not proven. */\nexport function formatLiveReadiness(report: readonly CliReadiness[]): string {\n if (report.length === 0) {\n return '\\nLive readiness: no adapters configured — nothing was probed.';\n }\n return [\n '',\n 'Live readiness (--live: a real completion per adapter)',\n ...report.map(formatReadiness),\n ].join('\\n');\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -541,7 +541,7 @@ import {
|
|
|
541
541
|
withLogging,
|
|
542
542
|
withRetry,
|
|
543
543
|
withRetryWrapper
|
|
544
|
-
} from "./chunk-
|
|
544
|
+
} from "./chunk-LOS63AKL.js";
|
|
545
545
|
import {
|
|
546
546
|
FALLBACK_SCANNER_DATA,
|
|
547
547
|
buildPlanFromAnalysis,
|
|
@@ -575,7 +575,7 @@ import {
|
|
|
575
575
|
getKnownNexusVarNames,
|
|
576
576
|
startStdioServer,
|
|
577
577
|
validateNexusEnv
|
|
578
|
-
} from "./chunk-
|
|
578
|
+
} from "./chunk-Y33P5D4B.js";
|
|
579
579
|
import {
|
|
580
580
|
OPENAI_MODELS,
|
|
581
581
|
OPENAI_MODEL_ALIASES,
|
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
runWizard,
|
|
9
9
|
setupCommand,
|
|
10
10
|
setupCommandAsync
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-4U2CQYZY.js";
|
|
12
12
|
import "./chunk-KJY3WZJY.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-Y33P5D4B.js";
|
|
14
14
|
import "./chunk-PGNOJRUL.js";
|
|
15
15
|
import "./chunk-6LZNWY4D.js";
|
|
16
16
|
import "./chunk-NUBSJGQZ.js";
|
|
@@ -40,4 +40,4 @@ export {
|
|
|
40
40
|
setupCommand,
|
|
41
41
|
setupCommandAsync
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=setup-command-
|
|
43
|
+
//# sourceMappingURL=setup-command-6C4RZ3ZI.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nexus-agents",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "Governance substrate for AI coding agents — adversarial PR review, drift-detected rules, tamper-evident audit, and closed-loop outcome routing for Claude, Codex, Gemini, and OpenCode",
|
|
5
5
|
"mcpName": "io.github.nexus-substrate/nexus-agents",
|
|
6
6
|
"license": "MIT",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|