nexus-agents 8.110.1 → 8.111.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-TAGJV5NH.js → chunk-52T77E5J.js} +3 -3
- package/dist/{chunk-WKKSNJV3.js → chunk-6ECPHGKC.js} +2 -2
- package/dist/{chunk-SSIS5P24.js → chunk-AQZHRX7L.js} +2 -2
- package/dist/{chunk-W3EXUWFG.js → chunk-J2JGTORM.js} +2 -2
- package/dist/{chunk-D4JC6AOD.js → chunk-JFTSRUO3.js} +115 -33
- package/dist/{chunk-D4JC6AOD.js.map → chunk-JFTSRUO3.js.map} +1 -1
- package/dist/{chunk-LNPSEZUE.js → chunk-UPVOYMYO.js} +3 -3
- package/dist/cli.js +7 -7
- package/dist/{consensus-vote-54G3SYCP.js → consensus-vote-YUVLW5S4.js} +4 -4
- package/dist/{improvement-review-BHKZ5JUF.js → improvement-review-MCGHC4LL.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{setup-data-dir-62R3ZQI4.js → setup-data-dir-XKF4OJGK.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-TAGJV5NH.js.map → chunk-52T77E5J.js.map} +0 -0
- /package/dist/{chunk-WKKSNJV3.js.map → chunk-6ECPHGKC.js.map} +0 -0
- /package/dist/{chunk-SSIS5P24.js.map → chunk-AQZHRX7L.js.map} +0 -0
- /package/dist/{chunk-W3EXUWFG.js.map → chunk-J2JGTORM.js.map} +0 -0
- /package/dist/{chunk-LNPSEZUE.js.map → chunk-UPVOYMYO.js.map} +0 -0
- /package/dist/{consensus-vote-54G3SYCP.js.map → consensus-vote-YUVLW5S4.js.map} +0 -0
- /package/dist/{improvement-review-BHKZ5JUF.js.map → improvement-review-MCGHC4LL.js.map} +0 -0
- /package/dist/{setup-data-dir-62R3ZQI4.js.map → setup-data-dir-XKF4OJGK.js.map} +0 -0
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
toolSuccessStructured,
|
|
20
20
|
withProgressHeartbeat,
|
|
21
21
|
wrapToolWithTimeout
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-6ECPHGKC.js";
|
|
23
23
|
import {
|
|
24
24
|
VERSION
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-J2JGTORM.js";
|
|
26
26
|
import {
|
|
27
27
|
allOf
|
|
28
28
|
} from "./chunk-EZNIYU5T.js";
|
|
@@ -10061,4 +10061,4 @@ export {
|
|
|
10061
10061
|
CONSENSUS_VOTE_TOOL_SCHEMA,
|
|
10062
10062
|
registerConsensusVoteTool
|
|
10063
10063
|
};
|
|
10064
|
-
//# sourceMappingURL=chunk-
|
|
10064
|
+
//# sourceMappingURL=chunk-52T77E5J.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-J2JGTORM.js";
|
|
4
4
|
import {
|
|
5
5
|
resolveInsideRoot
|
|
6
6
|
} from "./chunk-XEPZSDN5.js";
|
|
@@ -2329,4 +2329,4 @@ export {
|
|
|
2329
2329
|
DEFAULT_CONSENSUS_CONFIG,
|
|
2330
2330
|
ConsensusMetricsSchema
|
|
2331
2331
|
};
|
|
2332
|
-
//# sourceMappingURL=chunk-
|
|
2332
|
+
//# sourceMappingURL=chunk-6ECPHGKC.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
toolStructuredError,
|
|
8
8
|
toolSuccessStructured,
|
|
9
9
|
wrapToolWithTimeout
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6ECPHGKC.js";
|
|
11
11
|
import {
|
|
12
12
|
JsonlStore,
|
|
13
13
|
SECURITY_KEYWORDS,
|
|
@@ -2293,4 +2293,4 @@ export {
|
|
|
2293
2293
|
runImprovementReview,
|
|
2294
2294
|
registerImprovementReviewTool
|
|
2295
2295
|
};
|
|
2296
|
-
//# sourceMappingURL=chunk-
|
|
2296
|
+
//# sourceMappingURL=chunk-AQZHRX7L.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
2
|
import semver from "semver";
|
|
3
|
-
var VERSION = true ? "8.
|
|
3
|
+
var VERSION = true ? "8.111.0" : "dev";
|
|
4
4
|
var NODE_ENGINE_RANGE = ">=22.5.0";
|
|
5
5
|
function isNodeVersionSupported(version) {
|
|
6
6
|
return semver.satisfies(version, NODE_ENGINE_RANGE);
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
NODE_ENGINE_RANGE,
|
|
12
12
|
isNodeVersionSupported
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
14
|
+
//# sourceMappingURL=chunk-J2JGTORM.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-GCQLEDCY.js";
|
|
10
10
|
import {
|
|
11
11
|
withPrerequisite
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-AQZHRX7L.js";
|
|
13
13
|
import {
|
|
14
14
|
generateSecurityPlan
|
|
15
15
|
} from "./chunk-U5TT4C5O.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
import {
|
|
37
37
|
DEFAULT_TASK_TTL_MS,
|
|
38
38
|
clampTaskTtl
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-UPVOYMYO.js";
|
|
40
40
|
import {
|
|
41
41
|
executeExpert
|
|
42
42
|
} from "./chunk-CX3YZ4S6.js";
|
|
@@ -92,7 +92,7 @@ import {
|
|
|
92
92
|
withFileLock,
|
|
93
93
|
withWarnings,
|
|
94
94
|
writeJobCancelled
|
|
95
|
-
} from "./chunk-
|
|
95
|
+
} from "./chunk-52T77E5J.js";
|
|
96
96
|
import {
|
|
97
97
|
NOOP_NOTIFIER,
|
|
98
98
|
RateLimiter,
|
|
@@ -120,10 +120,10 @@ import {
|
|
|
120
120
|
toolSuccessStructured,
|
|
121
121
|
withProgressHeartbeat,
|
|
122
122
|
wrapToolWithTimeout
|
|
123
|
-
} from "./chunk-
|
|
123
|
+
} from "./chunk-6ECPHGKC.js";
|
|
124
124
|
import {
|
|
125
125
|
VERSION
|
|
126
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-J2JGTORM.js";
|
|
127
127
|
import {
|
|
128
128
|
allOf,
|
|
129
129
|
anyOf
|
|
@@ -266,6 +266,7 @@ import {
|
|
|
266
266
|
} from "./chunk-5O4KT2WO.js";
|
|
267
267
|
import {
|
|
268
268
|
AbortError,
|
|
269
|
+
getDefaultCliCircuitBreakerRegistry,
|
|
269
270
|
isTimeoutAbortReason,
|
|
270
271
|
raceAbort,
|
|
271
272
|
throwIfAborted
|
|
@@ -369,6 +370,7 @@ import {
|
|
|
369
370
|
getTokenEstimator,
|
|
370
371
|
hasGatewaySlotCatalog,
|
|
371
372
|
isBanditInterceptFeature,
|
|
373
|
+
isCliName,
|
|
372
374
|
isDisabledSlotUnserved,
|
|
373
375
|
isErr,
|
|
374
376
|
isRateLimitLikeError,
|
|
@@ -46963,7 +46965,7 @@ function buildVotingInput(plan, config) {
|
|
|
46963
46965
|
}
|
|
46964
46966
|
async function executeSingleVote(plan, config, log) {
|
|
46965
46967
|
try {
|
|
46966
|
-
const { executeVoting } = await import("./consensus-vote-
|
|
46968
|
+
const { executeVoting } = await import("./consensus-vote-YUVLW5S4.js");
|
|
46967
46969
|
const input = buildVotingInput(plan, config);
|
|
46968
46970
|
const result = await executeVoting(input, log);
|
|
46969
46971
|
return parseVotingResult(result);
|
|
@@ -48010,7 +48012,7 @@ function createVoteStage({ config, startStage }) {
|
|
|
48010
48012
|
const strategy = config.votingStrategy ?? "higher_order";
|
|
48011
48013
|
await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
|
|
48012
48014
|
try {
|
|
48013
|
-
const { executeVoting } = await import("./consensus-vote-
|
|
48015
|
+
const { executeVoting } = await import("./consensus-vote-YUVLW5S4.js");
|
|
48014
48016
|
const votingResult = await executeVoting(
|
|
48015
48017
|
{
|
|
48016
48018
|
proposal: buildVoteProposal(plan, research),
|
|
@@ -48920,13 +48922,31 @@ function parseTasksFromResponse(response, fallbackPlan) {
|
|
|
48920
48922
|
}
|
|
48921
48923
|
];
|
|
48922
48924
|
}
|
|
48923
|
-
|
|
48924
|
-
|
|
48925
|
-
|
|
48926
|
-
|
|
48927
|
-
|
|
48928
|
-
|
|
48929
|
-
|
|
48925
|
+
var VERDICT_LINE = /^[\s#>*_`-]*(?:(?:final\s+)?(?:verdict|assessment|decision|result|status)[*_`]*\s*[:-][\s*_`]*)?(pass|needs[_ ]work|reject)[*_`]*\s*(?:[:.,;)—–-]|$)/i;
|
|
48926
|
+
var VERDICT_SEVERITY = {
|
|
48927
|
+
pass: 0,
|
|
48928
|
+
needs_work: 1,
|
|
48929
|
+
reject: 2
|
|
48930
|
+
};
|
|
48931
|
+
function toVerdict(token) {
|
|
48932
|
+
const t = token.toLowerCase();
|
|
48933
|
+
if (t === "pass") return "pass";
|
|
48934
|
+
if (t === "reject") return "reject";
|
|
48935
|
+
return "needs_work";
|
|
48936
|
+
}
|
|
48937
|
+
function parseQaVerdict(response) {
|
|
48938
|
+
let found;
|
|
48939
|
+
for (const line of response.split("\n")) {
|
|
48940
|
+
const token = VERDICT_LINE.exec(line)?.[1];
|
|
48941
|
+
if (token === void 0) continue;
|
|
48942
|
+
const verdict = toVerdict(token);
|
|
48943
|
+
if (found === void 0 || VERDICT_SEVERITY[verdict] > VERDICT_SEVERITY[found]) {
|
|
48944
|
+
found = verdict;
|
|
48945
|
+
}
|
|
48946
|
+
}
|
|
48947
|
+
if (found === void 0) return void 0;
|
|
48948
|
+
const issues = found === "pass" ? [] : extractIssues(response);
|
|
48949
|
+
return { verdict: found, feedback: response, issues };
|
|
48930
48950
|
}
|
|
48931
48951
|
function extractIssues(text) {
|
|
48932
48952
|
return text.split("\n").filter((l) => /^\s*[-*]/.test(l)).map((l) => l.trim().replace(/^[-*]\s*/, "")).filter((l) => l.length > 5).slice(0, 10);
|
|
@@ -49114,6 +49134,25 @@ ${task.description}${fb}`,
|
|
|
49114
49134
|
return `[Implementation failed: ${r.error ?? "unknown error"}]`;
|
|
49115
49135
|
};
|
|
49116
49136
|
}
|
|
49137
|
+
function readQaReview(r) {
|
|
49138
|
+
if (!r.success) {
|
|
49139
|
+
const reason2 = `QA review unmeasured: the QA expert call failed (${r.error ?? "unknown error"}); no verdict was produced.`;
|
|
49140
|
+
return {
|
|
49141
|
+
review: { verdict: "needs_work", feedback: reason2, issues: [reason2] },
|
|
49142
|
+
unmeasured: "call-failed"
|
|
49143
|
+
};
|
|
49144
|
+
}
|
|
49145
|
+
const parsed = parseQaVerdict(r.text);
|
|
49146
|
+
if (parsed !== void 0) return { review: parsed };
|
|
49147
|
+
const excerpt = r.text.trim() === "" ? "(empty reply)" : r.text.slice(0, 500);
|
|
49148
|
+
const reason = "QA review unmeasured: no PASS / NEEDS_WORK / REJECT verdict could be read from the reviewer reply.";
|
|
49149
|
+
return {
|
|
49150
|
+
review: { verdict: "needs_work", feedback: `${reason}
|
|
49151
|
+
|
|
49152
|
+
${excerpt}`, issues: [reason] },
|
|
49153
|
+
unmeasured: "unreadable"
|
|
49154
|
+
};
|
|
49155
|
+
}
|
|
49117
49156
|
function createQaReviewStage({
|
|
49118
49157
|
config,
|
|
49119
49158
|
guard,
|
|
@@ -49124,7 +49163,7 @@ function createQaReviewStage({
|
|
|
49124
49163
|
await postProgress(config, `QA [${task.id}]`, "QA expert reviewing...");
|
|
49125
49164
|
const { prompt, coverage } = buildQaPrompt(task.title, implementation);
|
|
49126
49165
|
const r = await runExpert(guard, "qa", prompt, task.id, signal);
|
|
49127
|
-
const parsed =
|
|
49166
|
+
const { review: parsed, unmeasured } = readQaReview(r);
|
|
49128
49167
|
const review = coverage !== void 0 ? { ...parsed, coverage } : parsed;
|
|
49129
49168
|
emitStageEvent2(`qa-${task.id}`, review.verdict === "pass" ? "completed" : "failed", {
|
|
49130
49169
|
durationMs: r.durationMs,
|
|
@@ -49137,10 +49176,18 @@ function createQaReviewStage({
|
|
|
49137
49176
|
// #6521 I2: the row scores the reviewer's CALL; the verdict judges the
|
|
49138
49177
|
// implementation, so it rides as a signal, not as `success`.
|
|
49139
49178
|
...outcomeFieldsFromBridge(r),
|
|
49140
|
-
qualitySignals: [
|
|
49179
|
+
qualitySignals: [
|
|
49180
|
+
`qa-verdict:${review.verdict}`,
|
|
49181
|
+
...unmeasured !== void 0 ? [`qa-unmeasured:${unmeasured}`] : []
|
|
49182
|
+
]
|
|
49141
49183
|
});
|
|
49142
49184
|
if (review.verdict === "pass") {
|
|
49143
49185
|
recordLearning(`Task "${task.title}" passed QA`, 0.8, "pipeline-qa");
|
|
49186
|
+
} else if (unmeasured !== void 0) {
|
|
49187
|
+
recordMemoryError(
|
|
49188
|
+
`QA review of "${task.title}" unmeasured (${unmeasured})`,
|
|
49189
|
+
"QA produced no verdict"
|
|
49190
|
+
);
|
|
49144
49191
|
} else {
|
|
49145
49192
|
recordMemoryError(
|
|
49146
49193
|
`QA rejected "${task.title}": ${review.feedback.slice(0, 150)}`,
|
|
@@ -51354,6 +51401,44 @@ function mapStatusPageStatus(raw) {
|
|
|
51354
51401
|
if (raw === "partial_outage" || raw === "major_outage") return "outage";
|
|
51355
51402
|
return "unknown";
|
|
51356
51403
|
}
|
|
51404
|
+
var ACTIONS_COMPONENT_ID = "br0l2tvcx85d";
|
|
51405
|
+
var ACTIONS_COMPONENT_NAMES = ["Actions", "GitHub Actions"];
|
|
51406
|
+
function findActionsComponent(components) {
|
|
51407
|
+
return components.find((c) => c.id === ACTIONS_COMPONENT_ID) ?? components.find((c) => c.name !== void 0 && ACTIONS_COMPONENT_NAMES.includes(c.name));
|
|
51408
|
+
}
|
|
51409
|
+
function componentNotFoundEvidence(components) {
|
|
51410
|
+
const names = components.map((c) => c.name ?? "(unnamed)").join(", ");
|
|
51411
|
+
return `Actions component not found in status feed (looked for id ${ACTIONS_COMPONENT_ID} or name ${ACTIONS_COMPONENT_NAMES.map((n) => `'${n}'`).join(" / ")}); feed listed ${String(components.length)} components: ${names}`;
|
|
51412
|
+
}
|
|
51413
|
+
function signalFromComponents(payload) {
|
|
51414
|
+
if (!Array.isArray(payload.components)) {
|
|
51415
|
+
return {
|
|
51416
|
+
source: "github-status",
|
|
51417
|
+
status: "unknown",
|
|
51418
|
+
evidence: "status feed response has no components array"
|
|
51419
|
+
};
|
|
51420
|
+
}
|
|
51421
|
+
const actions = findActionsComponent(payload.components);
|
|
51422
|
+
if (actions === void 0) {
|
|
51423
|
+
return {
|
|
51424
|
+
source: "github-status",
|
|
51425
|
+
status: "unknown",
|
|
51426
|
+
evidence: componentNotFoundEvidence(payload.components)
|
|
51427
|
+
};
|
|
51428
|
+
}
|
|
51429
|
+
if (actions.status === void 0) {
|
|
51430
|
+
return {
|
|
51431
|
+
source: "github-status",
|
|
51432
|
+
status: "unknown",
|
|
51433
|
+
evidence: `Actions component '${actions.name ?? ACTIONS_COMPONENT_ID}' is in the status feed but has no status`
|
|
51434
|
+
};
|
|
51435
|
+
}
|
|
51436
|
+
return {
|
|
51437
|
+
source: "github-status",
|
|
51438
|
+
status: mapStatusPageStatus(actions.status),
|
|
51439
|
+
evidence: `Actions component reports: ${actions.status}`
|
|
51440
|
+
};
|
|
51441
|
+
}
|
|
51357
51442
|
async function checkGithubStatus(logger58) {
|
|
51358
51443
|
try {
|
|
51359
51444
|
const res = await fetch(STATUS_PAGE_URL, {
|
|
@@ -51368,19 +51453,7 @@ async function checkGithubStatus(logger58) {
|
|
|
51368
51453
|
};
|
|
51369
51454
|
}
|
|
51370
51455
|
const payload = await res.json();
|
|
51371
|
-
|
|
51372
|
-
if (actions?.status === void 0) {
|
|
51373
|
-
return {
|
|
51374
|
-
source: "github-status",
|
|
51375
|
-
status: "unknown",
|
|
51376
|
-
evidence: "GitHub Actions component not found in status page response"
|
|
51377
|
-
};
|
|
51378
|
-
}
|
|
51379
|
-
return {
|
|
51380
|
-
source: "github-status",
|
|
51381
|
-
status: mapStatusPageStatus(actions.status),
|
|
51382
|
-
evidence: `GitHub Actions component reports: ${actions.status}`
|
|
51383
|
-
};
|
|
51456
|
+
return signalFromComponents(payload);
|
|
51384
51457
|
} catch (err2) {
|
|
51385
51458
|
logger58.warn("Status page fetch failed", {
|
|
51386
51459
|
error: err2 instanceof Error ? err2.message : String(err2)
|
|
@@ -54092,7 +54165,7 @@ function registerRunTool(server, deps) {
|
|
|
54092
54165
|
|
|
54093
54166
|
// src/mcp/tools/list-available-models-tool.ts
|
|
54094
54167
|
import { z as z117 } from "zod";
|
|
54095
|
-
var DESCRIPTION5 = "Probe every model-discovery transport (OpenRouter API, the configured gateway, and the opencode/claude/codex/gemini CLIs) and report a per-transport health summary: probe ok/failed, model count,
|
|
54168
|
+
var DESCRIPTION5 = "Probe every model-discovery transport (OpenRouter API, the configured gateway, and the opencode/claude/codex/gemini CLIs) and report a per-transport health summary: probe ok/failed, model count, a sample of ids, and for each CLI whether its shared circuit breaker is open (the router refuses it while open). Use it to validate the CLIs and APIs are wired and reachable. Read-only; does not change routing.";
|
|
54096
54169
|
var PROBE_TIMEOUT_MS = 12e3;
|
|
54097
54170
|
var ListAvailableModelsInputSchema = z117.object({
|
|
54098
54171
|
includeModelIds: z117.boolean().optional().describe("Include the full model-id list per transport (default false \u2192 sample of 5 only)."),
|
|
@@ -54129,6 +54202,13 @@ async function probeSource(source, includeModelIds) {
|
|
|
54129
54202
|
if (timer !== void 0) clearTimeout(timer);
|
|
54130
54203
|
}
|
|
54131
54204
|
}
|
|
54205
|
+
function withBreakerState(report) {
|
|
54206
|
+
if (!isCliName(report.transport)) return report;
|
|
54207
|
+
return {
|
|
54208
|
+
...report,
|
|
54209
|
+
breakerOpen: getDefaultCliCircuitBreakerRegistry().isOpen(report.transport)
|
|
54210
|
+
};
|
|
54211
|
+
}
|
|
54132
54212
|
var GATEWAY_TRANSPORT = "gateway";
|
|
54133
54213
|
var GATEWAY_API_ARM = "api:custom-openai";
|
|
54134
54214
|
async function gatewaySource(apiArm) {
|
|
@@ -54170,14 +54250,16 @@ async function listAvailableModelsHandler(args, deps, logger58) {
|
|
|
54170
54250
|
const includeModelIds = parsed.data.includeModelIds ?? false;
|
|
54171
54251
|
const includeOpenRouter = parsed.data.includeOpenRouter ?? true;
|
|
54172
54252
|
const sources = deps.sourcesFactory !== void 0 ? deps.sourcesFactory(includeOpenRouter) : await defaultSources(includeOpenRouter, deps.adaptersFactory);
|
|
54173
|
-
const
|
|
54253
|
+
const probed = await Promise.all(sources.map((s) => probeSource(s, includeModelIds)));
|
|
54254
|
+
const transports = probed.map(withBreakerState);
|
|
54174
54255
|
const response = {
|
|
54175
54256
|
transports,
|
|
54176
54257
|
healthyTransports: transports.filter((t) => t.servesModels).length,
|
|
54177
54258
|
reachableTransports: transports.filter((t) => t.ok).length,
|
|
54178
54259
|
totalTransports: transports.length,
|
|
54179
54260
|
totalModels: transports.reduce((sum, t) => sum + t.modelCount, 0),
|
|
54180
|
-
|
|
54261
|
+
breakerOpenTransports: transports.filter((t) => t.breakerOpen === true).map((t) => t.transport),
|
|
54262
|
+
note: "Probe results \u2014 existence only; the in-tree registry remains authoritative for pricing/capability. healthyTransports counts transports that can serve a model; reachableTransports counts probes that merely succeeded. breakerOpen marks a CLI transport the router is currently refusing (shared circuit breaker open), whatever its probe said."
|
|
54181
54263
|
};
|
|
54182
54264
|
logger58.debug("list_available_models probed transports", {
|
|
54183
54265
|
healthy: response.healthyTransports,
|
|
@@ -57434,4 +57516,4 @@ export {
|
|
|
57434
57516
|
startPipelineEventBridge,
|
|
57435
57517
|
shutdownPipelineEventBridge
|
|
57436
57518
|
};
|
|
57437
|
-
//# sourceMappingURL=chunk-
|
|
57519
|
+
//# sourceMappingURL=chunk-JFTSRUO3.js.map
|