nexus-agents 3.12.1 → 3.13.2
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-Q4E6MPAW.js → chunk-A6VFBC4F.js} +59 -27
- package/dist/{chunk-Q4E6MPAW.js.map → chunk-A6VFBC4F.js.map} +1 -1
- package/dist/{chunk-GO3GAPVQ.js → chunk-T3TM5SOL.js} +2 -2
- package/dist/{chunk-TRZTLCL4.js → chunk-YRLE2SZI.js} +3 -3
- package/dist/cli.js +3 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +2 -2
- package/dist/{setup-command-LWHN672O.js → setup-command-FGY5YDXV.js} +3 -3
- package/package.json +1 -1
- /package/dist/{chunk-GO3GAPVQ.js.map → chunk-T3TM5SOL.js.map} +0 -0
- /package/dist/{chunk-TRZTLCL4.js.map → chunk-YRLE2SZI.js.map} +0 -0
- /package/dist/{setup-command-LWHN672O.js.map → setup-command-FGY5YDXV.js.map} +0 -0
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
DEFAULT_TASK_TTL_MS,
|
|
23
23
|
DEFAULT_TOOL_RATE_LIMITS,
|
|
24
24
|
clampTaskTtl
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-YRLE2SZI.js";
|
|
26
26
|
import {
|
|
27
27
|
executeExpert
|
|
28
28
|
} from "./chunk-TPU5DT74.js";
|
|
@@ -22474,11 +22474,22 @@ function extractErrorMessage2(error) {
|
|
|
22474
22474
|
}
|
|
22475
22475
|
return error.message;
|
|
22476
22476
|
}
|
|
22477
|
-
|
|
22477
|
+
var NON_RETRYABLE_CODES = /* @__PURE__ */ new Set([
|
|
22478
|
+
ErrorCode.VALIDATION_ERROR,
|
|
22479
|
+
ErrorCode.WORKFLOW_PARSE_ERROR,
|
|
22480
|
+
ErrorCode.INVALID_INPUT
|
|
22481
|
+
]);
|
|
22482
|
+
function isNonRetryableSelf(error) {
|
|
22478
22483
|
if (error.name === "ValidationError") return true;
|
|
22479
|
-
|
|
22480
|
-
|
|
22481
|
-
|
|
22484
|
+
return error instanceof NexusError && NON_RETRYABLE_CODES.has(error.code);
|
|
22485
|
+
}
|
|
22486
|
+
function isNonRetryableError(error) {
|
|
22487
|
+
const seen = /* @__PURE__ */ new Set();
|
|
22488
|
+
let current = error;
|
|
22489
|
+
while (current instanceof Error && !seen.has(current)) {
|
|
22490
|
+
seen.add(current);
|
|
22491
|
+
if (isNonRetryableSelf(current)) return true;
|
|
22492
|
+
current = current.cause;
|
|
22482
22493
|
}
|
|
22483
22494
|
return false;
|
|
22484
22495
|
}
|
|
@@ -45711,6 +45722,7 @@ function classifyVoteStageResult(votingResult) {
|
|
|
45711
45722
|
}
|
|
45712
45723
|
return { vote: { kind: "approved", approvalPercentage: pct }, label: "Approved" };
|
|
45713
45724
|
}
|
|
45725
|
+
var UNMEASURED_TRUST_TIER = "unmeasured";
|
|
45714
45726
|
function emitStageEvent2(stage, status, details) {
|
|
45715
45727
|
emitPipelineStageEvent("dev-pipeline", stage, status, details);
|
|
45716
45728
|
}
|
|
@@ -45929,9 +45941,13 @@ function getTrendContext() {
|
|
|
45929
45941
|
}
|
|
45930
45942
|
function createAgentStages(config = {}) {
|
|
45931
45943
|
const guard = createBudgetGuard(config.budget);
|
|
45944
|
+
const trustTier = config.trustTier ?? UNMEASURED_TRUST_TIER;
|
|
45945
|
+
const startStage = (stage) => {
|
|
45946
|
+
emitStageEvent2(stage, "started", { trustTier });
|
|
45947
|
+
};
|
|
45932
45948
|
return {
|
|
45933
45949
|
research: async (task) => {
|
|
45934
|
-
|
|
45950
|
+
startStage("research");
|
|
45935
45951
|
await postProgress(config, "Research", "Querying research tools (structured)...");
|
|
45936
45952
|
const start = getTimeProvider().now();
|
|
45937
45953
|
const topic = task.slice(0, 200);
|
|
@@ -45974,7 +45990,7 @@ function createAgentStages(config = {}) {
|
|
|
45974
45990
|
}
|
|
45975
45991
|
},
|
|
45976
45992
|
plan: async (task, research, feedback) => {
|
|
45977
|
-
|
|
45993
|
+
startStage("plan");
|
|
45978
45994
|
const outcomeCtx = getOutcomeContext();
|
|
45979
45995
|
const trendCtx = getTrendContext();
|
|
45980
45996
|
const weatherCtx = await getWeatherContext();
|
|
@@ -46007,7 +46023,7 @@ ${contextBlock}`;
|
|
|
46007
46023
|
return r.text || prompt;
|
|
46008
46024
|
},
|
|
46009
46025
|
vote: async (plan, research) => {
|
|
46010
|
-
|
|
46026
|
+
startStage("vote");
|
|
46011
46027
|
const start = getTimeProvider().now();
|
|
46012
46028
|
const strategy = config.votingStrategy ?? "higher_order";
|
|
46013
46029
|
await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
|
|
@@ -46061,7 +46077,7 @@ ${contextBlock}`;
|
|
|
46061
46077
|
}
|
|
46062
46078
|
},
|
|
46063
46079
|
decompose: async (plan) => {
|
|
46064
|
-
|
|
46080
|
+
startStage("decompose");
|
|
46065
46081
|
await postProgress(config, "PM", "PM expert decomposing...");
|
|
46066
46082
|
const r = await runExpert(
|
|
46067
46083
|
guard,
|
|
@@ -46085,7 +46101,7 @@ ${plan}`,
|
|
|
46085
46101
|
return tasks;
|
|
46086
46102
|
},
|
|
46087
46103
|
implement: async (task) => {
|
|
46088
|
-
|
|
46104
|
+
startStage(`impl-${task.id}`);
|
|
46089
46105
|
await postProgress(config, `Code [${task.id}]`, task.title);
|
|
46090
46106
|
const fb = task.feedback !== void 0 ? `
|
|
46091
46107
|
|
|
@@ -46122,7 +46138,7 @@ ${task.description}${fb}`,
|
|
|
46122
46138
|
return r.text || `[Implementation failed: ${r.error}]`;
|
|
46123
46139
|
},
|
|
46124
46140
|
qaReview: async (task, implementation) => {
|
|
46125
|
-
|
|
46141
|
+
startStage(`qa-${task.id}`);
|
|
46126
46142
|
await postProgress(config, `QA [${task.id}]`, "QA expert reviewing...");
|
|
46127
46143
|
const r = await runExpert(
|
|
46128
46144
|
guard,
|
|
@@ -46162,7 +46178,7 @@ Verdict: PASS/NEEDS_WORK/REJECT`,
|
|
|
46162
46178
|
return review;
|
|
46163
46179
|
},
|
|
46164
46180
|
qualityGate: async () => {
|
|
46165
|
-
|
|
46181
|
+
startStage("quality-gate");
|
|
46166
46182
|
const start = getTimeProvider().now();
|
|
46167
46183
|
const target = config.scanTarget ?? process.cwd();
|
|
46168
46184
|
await postProgress(config, "QualityGate", `Typecheck/lint/tests on ${target}...`);
|
|
@@ -46186,7 +46202,7 @@ Verdict: PASS/NEEDS_WORK/REJECT`,
|
|
|
46186
46202
|
return { passed, feedback: result.feedback };
|
|
46187
46203
|
},
|
|
46188
46204
|
securityScan: async () => {
|
|
46189
|
-
|
|
46205
|
+
startStage("security");
|
|
46190
46206
|
const start = getTimeProvider().now();
|
|
46191
46207
|
const target = config.scanTarget ?? process.cwd();
|
|
46192
46208
|
await postProgress(config, "Security", `Scanning ${target}...`);
|
|
@@ -49822,11 +49838,12 @@ async function resolveTaskInput(input) {
|
|
|
49822
49838
|
}
|
|
49823
49839
|
throw new Error("Either task or planFile must be provided");
|
|
49824
49840
|
}
|
|
49825
|
-
async function createStages(input) {
|
|
49841
|
+
async function createStages(input, trustTier) {
|
|
49826
49842
|
const backendChoice = input.trackerBackend;
|
|
49827
49843
|
const backend = backendChoice === "json" && input.repo !== void 0 ? await detectBackend() : backendChoice;
|
|
49828
49844
|
const tracker = input.repo !== void 0 ? createTaskTracker({ backend, repo: input.repo, labels: input.labels }) : void 0;
|
|
49829
49845
|
return createAgentStages({
|
|
49846
|
+
...trustTier !== void 0 ? { trustTier } : {},
|
|
49830
49847
|
scanTarget: input.workingDir,
|
|
49831
49848
|
simulateVotes: input.simulateVotes,
|
|
49832
49849
|
votingStrategy: input.votingStrategy,
|
|
@@ -49842,7 +49859,7 @@ async function createStages(input) {
|
|
|
49842
49859
|
}
|
|
49843
49860
|
async function runDevPipelineForGoal(goal, trustTier) {
|
|
49844
49861
|
const input = DevPipelineInputSchema.parse({ task: goal });
|
|
49845
|
-
const stages = await createStages(input);
|
|
49862
|
+
const stages = await createStages(input, trustTier);
|
|
49846
49863
|
return runDevPipeline(goal, stages, trustTier !== void 0 ? { trustTier } : void 0);
|
|
49847
49864
|
}
|
|
49848
49865
|
function buildStructuredOutput(result, simulated) {
|
|
@@ -49899,7 +49916,7 @@ async function runDevPipelineHandler(args, logger59, trustTier, auditLogger) {
|
|
|
49899
49916
|
}
|
|
49900
49917
|
try {
|
|
49901
49918
|
const taskText = await resolveTaskInput(input);
|
|
49902
|
-
const stages = await createStages(input);
|
|
49919
|
+
const stages = await createStages(input, trustTier);
|
|
49903
49920
|
const pipelineOptions = buildPipelineOptions(input, trustTier, auditLogger);
|
|
49904
49921
|
const hasOptions = Object.keys(pipelineOptions).length > 0;
|
|
49905
49922
|
const resolvedOptions = hasOptions ? pipelineOptions : void 0;
|
|
@@ -50106,7 +50123,7 @@ async function executePipelineBody(task, stages, templateId, dryRun, simulated)
|
|
|
50106
50123
|
}
|
|
50107
50124
|
return toolSuccessStructured(output2);
|
|
50108
50125
|
}
|
|
50109
|
-
async function runPipelineHandler(args, logger59) {
|
|
50126
|
+
async function runPipelineHandler(args, logger59, trustTier) {
|
|
50110
50127
|
const parsed = PipelineInputSchema.safeParse(args);
|
|
50111
50128
|
if (!parsed.success) {
|
|
50112
50129
|
return toolStructuredError({
|
|
@@ -50127,6 +50144,9 @@ async function runPipelineHandler(args, logger59) {
|
|
|
50127
50144
|
simulateVotes: input.simulateVotes,
|
|
50128
50145
|
votingStrategy: input.votingStrategy,
|
|
50129
50146
|
quickMode: input.quickMode,
|
|
50147
|
+
// #4694: record-only. Absent stays absent — createAgentStages stamps
|
|
50148
|
+
// UNMEASURED_TRUST_TIER rather than inventing a trusted default.
|
|
50149
|
+
...trustTier !== void 0 ? { trustTier } : {},
|
|
50130
50150
|
budget: resolveRunBudget(task, input.template, logger59)
|
|
50131
50151
|
});
|
|
50132
50152
|
const stages = selectStageRegistry(input.template, task, agentStages);
|
|
@@ -50149,11 +50169,13 @@ async function runPipelineHandler(args, logger59) {
|
|
|
50149
50169
|
}
|
|
50150
50170
|
function registerPipelineTool(server, deps) {
|
|
50151
50171
|
const logger59 = deps.logger ?? createLogger({ tool: "run_pipeline" });
|
|
50152
|
-
const secureHandler = createSecureHandler(
|
|
50153
|
-
|
|
50154
|
-
|
|
50155
|
-
|
|
50156
|
-
|
|
50172
|
+
const secureHandler = createSecureHandler(
|
|
50173
|
+
// Optional chaining is deliberate, not defensive noise: a handler invoked
|
|
50174
|
+
// without a context has genuinely NOT measured a tier, and that flows to
|
|
50175
|
+
// UNMEASURED_TRUST_TIER rather than to a default. Absence stays absence.
|
|
50176
|
+
(args, ctx) => runPipelineHandler(args, logger59, ctx?.requestContext.trustTier),
|
|
50177
|
+
{ toolName: "run_pipeline", rateLimiter: deps.rateLimiter, logger: logger59 }
|
|
50178
|
+
);
|
|
50157
50179
|
const timeoutMs = getToolTimeout("run_pipeline", deps.security);
|
|
50158
50180
|
const wrapped = wrapToolWithTimeout("run_pipeline", secureHandler, { timeoutMs, logger: logger59 });
|
|
50159
50181
|
server.registerTool(
|
|
@@ -52458,6 +52480,10 @@ function createTaskOutcome(params) {
|
|
|
52458
52480
|
|
|
52459
52481
|
// src/learning/outcome-feedback.ts
|
|
52460
52482
|
var logger53 = createLogger({ component: "OutcomeFeedback" });
|
|
52483
|
+
function ratioBonus(target, actual, weight) {
|
|
52484
|
+
if (!Number.isFinite(actual) || actual <= 0) return 0;
|
|
52485
|
+
return Math.min(1, target / actual) * weight;
|
|
52486
|
+
}
|
|
52461
52487
|
var OutcomeFeedbackCollector = class {
|
|
52462
52488
|
config;
|
|
52463
52489
|
pendingDecisions = /* @__PURE__ */ new Map();
|
|
@@ -52555,10 +52581,16 @@ var OutcomeFeedbackCollector = class {
|
|
|
52555
52581
|
baseReward = signals.completionRatio;
|
|
52556
52582
|
}
|
|
52557
52583
|
const qualityBonus = outcome.qualityScore * this.config.qualityWeight;
|
|
52558
|
-
const
|
|
52559
|
-
|
|
52560
|
-
|
|
52561
|
-
|
|
52584
|
+
const speedBonus = ratioBonus(
|
|
52585
|
+
this.config.targetDurationMs,
|
|
52586
|
+
outcome.durationMs,
|
|
52587
|
+
this.config.speedWeight
|
|
52588
|
+
);
|
|
52589
|
+
const efficiencyBonus = ratioBonus(
|
|
52590
|
+
this.config.targetTokenUsage,
|
|
52591
|
+
outcome.tokenUsage,
|
|
52592
|
+
this.config.efficiencyWeight
|
|
52593
|
+
);
|
|
52562
52594
|
const retryPenalty = signals.retryCount * this.config.retryPenalty;
|
|
52563
52595
|
const rawReward = baseReward + qualityBonus + speedBonus + efficiencyBonus - retryPenalty;
|
|
52564
52596
|
const reward = clamp01(rawReward);
|
|
@@ -54487,4 +54519,4 @@ export {
|
|
|
54487
54519
|
shutdownFeedbackSubscriber,
|
|
54488
54520
|
createEventBusBridge
|
|
54489
54521
|
};
|
|
54490
|
-
//# sourceMappingURL=chunk-
|
|
54522
|
+
//# sourceMappingURL=chunk-A6VFBC4F.js.map
|