omnius 1.0.535 → 1.0.536
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/index.js +307 -33
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -567114,13 +567114,103 @@ function normalizeShellCommand(command) {
|
|
|
567114
567114
|
function splitConjunctiveVerifyCommand(command) {
|
|
567115
567115
|
return normalizeShellCommand(command).split(/\s+&&\s+/).map((part) => part.trim()).filter(Boolean);
|
|
567116
567116
|
}
|
|
567117
|
+
function stripVerifierFallbackSuffix(command) {
|
|
567118
|
+
let quote2 = null;
|
|
567119
|
+
for (let i2 = 0; i2 < command.length - 1; i2++) {
|
|
567120
|
+
const ch = command[i2];
|
|
567121
|
+
if (quote2) {
|
|
567122
|
+
if (ch === quote2 && command[i2 - 1] !== "\\")
|
|
567123
|
+
quote2 = null;
|
|
567124
|
+
continue;
|
|
567125
|
+
}
|
|
567126
|
+
if (ch === "'" || ch === '"') {
|
|
567127
|
+
quote2 = ch;
|
|
567128
|
+
continue;
|
|
567129
|
+
}
|
|
567130
|
+
if (ch === "|" && command[i2 + 1] === "|") {
|
|
567131
|
+
return command.slice(0, i2).trim();
|
|
567132
|
+
}
|
|
567133
|
+
}
|
|
567134
|
+
return command.trim();
|
|
567135
|
+
}
|
|
567136
|
+
function stageHeadProgram(stage2) {
|
|
567137
|
+
const tokens = stage2.trim().split(/\s+/);
|
|
567138
|
+
let i2 = 0;
|
|
567139
|
+
while (i2 < tokens.length) {
|
|
567140
|
+
const token = tokens[i2];
|
|
567141
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*=/.test(token)) {
|
|
567142
|
+
i2++;
|
|
567143
|
+
continue;
|
|
567144
|
+
}
|
|
567145
|
+
const base3 = token.replace(/^["']|["']$/g, "").split("/").pop() ?? token;
|
|
567146
|
+
if (STAGE_PREFIX_PROGRAMS.has(base3)) {
|
|
567147
|
+
i2++;
|
|
567148
|
+
if (base3 === "timeout" && /^[0-9]+[smhd]?$/.test(tokens[i2] ?? ""))
|
|
567149
|
+
i2++;
|
|
567150
|
+
continue;
|
|
567151
|
+
}
|
|
567152
|
+
return base3.toLowerCase();
|
|
567153
|
+
}
|
|
567154
|
+
return null;
|
|
567155
|
+
}
|
|
567156
|
+
function commandIsPureReadOnlyPipeline(command) {
|
|
567157
|
+
const stages = [];
|
|
567158
|
+
let current = "";
|
|
567159
|
+
let quote2 = null;
|
|
567160
|
+
const raw = command.trim();
|
|
567161
|
+
if (!raw)
|
|
567162
|
+
return false;
|
|
567163
|
+
for (let i2 = 0; i2 < raw.length; i2++) {
|
|
567164
|
+
const ch = raw[i2];
|
|
567165
|
+
if (quote2) {
|
|
567166
|
+
current += ch;
|
|
567167
|
+
if (ch === quote2 && raw[i2 - 1] !== "\\")
|
|
567168
|
+
quote2 = null;
|
|
567169
|
+
continue;
|
|
567170
|
+
}
|
|
567171
|
+
if (ch === "'" || ch === '"') {
|
|
567172
|
+
quote2 = ch;
|
|
567173
|
+
current += ch;
|
|
567174
|
+
continue;
|
|
567175
|
+
}
|
|
567176
|
+
if (ch === "&" && raw[i2 + 1] === "&") {
|
|
567177
|
+
stages.push(current);
|
|
567178
|
+
current = "";
|
|
567179
|
+
i2++;
|
|
567180
|
+
continue;
|
|
567181
|
+
}
|
|
567182
|
+
if (ch === "|") {
|
|
567183
|
+
stages.push(current);
|
|
567184
|
+
current = "";
|
|
567185
|
+
if (raw[i2 + 1] === "|")
|
|
567186
|
+
i2++;
|
|
567187
|
+
continue;
|
|
567188
|
+
}
|
|
567189
|
+
if (ch === ";") {
|
|
567190
|
+
stages.push(current);
|
|
567191
|
+
current = "";
|
|
567192
|
+
continue;
|
|
567193
|
+
}
|
|
567194
|
+
if (ch === "$" && raw[i2 + 1] === "(")
|
|
567195
|
+
return false;
|
|
567196
|
+
if (ch === "`")
|
|
567197
|
+
return false;
|
|
567198
|
+
current += ch;
|
|
567199
|
+
}
|
|
567200
|
+
stages.push(current);
|
|
567201
|
+
const meaningful = stages.map((s2) => s2.trim()).filter(Boolean);
|
|
567202
|
+
if (meaningful.length === 0)
|
|
567203
|
+
return false;
|
|
567204
|
+
return meaningful.every((stage2) => {
|
|
567205
|
+
const head = stageHeadProgram(stage2);
|
|
567206
|
+
return head !== null && PURE_READER_PROGRAMS.has(head);
|
|
567207
|
+
});
|
|
567208
|
+
}
|
|
567117
567209
|
function commandReliablySatisfiesVerifyCommand(observedCommand, verifyCommand) {
|
|
567118
567210
|
const observed = normalizeShellCommand(observedCommand);
|
|
567119
|
-
const expected = normalizeShellCommand(verifyCommand);
|
|
567211
|
+
const expected = normalizeShellCommand(stripVerifierFallbackSuffix(verifyCommand));
|
|
567120
567212
|
if (!observed || !expected)
|
|
567121
567213
|
return false;
|
|
567122
|
-
if (expected.includes(" || "))
|
|
567123
|
-
return false;
|
|
567124
567214
|
if (observed === expected)
|
|
567125
567215
|
return true;
|
|
567126
567216
|
if (observed.startsWith(`${expected} && `) && !observed.includes(" || ")) {
|
|
@@ -567141,9 +567231,93 @@ function verifyCommandSatisfiedByShellHistory(verifyCommand, history) {
|
|
|
567141
567231
|
return false;
|
|
567142
567232
|
return parts.every((part) => successful.some((entry) => commandReliablySatisfiesVerifyCommand(entry.command, part)));
|
|
567143
567233
|
}
|
|
567234
|
+
var PURE_READER_PROGRAMS, STAGE_PREFIX_PROGRAMS;
|
|
567144
567235
|
var init_verificationCommand = __esm({
|
|
567145
567236
|
"packages/orchestrator/dist/verificationCommand.js"() {
|
|
567146
567237
|
"use strict";
|
|
567238
|
+
PURE_READER_PROGRAMS = /* @__PURE__ */ new Set([
|
|
567239
|
+
"cat",
|
|
567240
|
+
"tac",
|
|
567241
|
+
"tail",
|
|
567242
|
+
"head",
|
|
567243
|
+
"less",
|
|
567244
|
+
"more",
|
|
567245
|
+
"grep",
|
|
567246
|
+
"egrep",
|
|
567247
|
+
"fgrep",
|
|
567248
|
+
"rg",
|
|
567249
|
+
"ag",
|
|
567250
|
+
"awk",
|
|
567251
|
+
"gawk",
|
|
567252
|
+
"sed",
|
|
567253
|
+
"gsed",
|
|
567254
|
+
"sort",
|
|
567255
|
+
"uniq",
|
|
567256
|
+
"wc",
|
|
567257
|
+
"cut",
|
|
567258
|
+
"tr",
|
|
567259
|
+
"column",
|
|
567260
|
+
"echo",
|
|
567261
|
+
"printf",
|
|
567262
|
+
"ls",
|
|
567263
|
+
"dir",
|
|
567264
|
+
"find",
|
|
567265
|
+
"fd",
|
|
567266
|
+
"stat",
|
|
567267
|
+
"file",
|
|
567268
|
+
"strings",
|
|
567269
|
+
"hexdump",
|
|
567270
|
+
"xxd",
|
|
567271
|
+
"od",
|
|
567272
|
+
"jq",
|
|
567273
|
+
"yq",
|
|
567274
|
+
"tee",
|
|
567275
|
+
"dirname",
|
|
567276
|
+
"basename",
|
|
567277
|
+
"readlink",
|
|
567278
|
+
"realpath",
|
|
567279
|
+
"pwd",
|
|
567280
|
+
"date",
|
|
567281
|
+
"true",
|
|
567282
|
+
"false",
|
|
567283
|
+
"test",
|
|
567284
|
+
"type",
|
|
567285
|
+
"which",
|
|
567286
|
+
"whoami",
|
|
567287
|
+
"env",
|
|
567288
|
+
"printenv",
|
|
567289
|
+
"sleep",
|
|
567290
|
+
"cd",
|
|
567291
|
+
"diff",
|
|
567292
|
+
"cmp",
|
|
567293
|
+
"md5sum",
|
|
567294
|
+
"sha1sum",
|
|
567295
|
+
"sha256sum",
|
|
567296
|
+
"du",
|
|
567297
|
+
"df",
|
|
567298
|
+
"nl",
|
|
567299
|
+
"paste",
|
|
567300
|
+
"join",
|
|
567301
|
+
"comm",
|
|
567302
|
+
"expand",
|
|
567303
|
+
"unexpand",
|
|
567304
|
+
"fold",
|
|
567305
|
+
"rev",
|
|
567306
|
+
"seq",
|
|
567307
|
+
"xargs"
|
|
567308
|
+
]);
|
|
567309
|
+
STAGE_PREFIX_PROGRAMS = /* @__PURE__ */ new Set([
|
|
567310
|
+
"sudo",
|
|
567311
|
+
"command",
|
|
567312
|
+
"builtin",
|
|
567313
|
+
"nice",
|
|
567314
|
+
"ionice",
|
|
567315
|
+
"time",
|
|
567316
|
+
"timeout",
|
|
567317
|
+
"nohup",
|
|
567318
|
+
"stdbuf",
|
|
567319
|
+
"unbuffer"
|
|
567320
|
+
]);
|
|
567147
567321
|
}
|
|
567148
567322
|
});
|
|
567149
567323
|
|
|
@@ -589283,8 +589457,9 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589283
589457
|
return this._declaredVerifierCommand;
|
|
589284
589458
|
}
|
|
589285
589459
|
const diagnostics = parseCompilerDiagnostics(output);
|
|
589286
|
-
if (diagnostics.length > 0 &&
|
|
589287
|
-
|
|
589460
|
+
if (diagnostics.length > 0 && !commandIsPureReadOnlyPipeline(trimmed)) {
|
|
589461
|
+
const latched = stripVerifierFallbackSuffix(trimmed);
|
|
589462
|
+
return latched || trimmed;
|
|
589288
589463
|
}
|
|
589289
589464
|
return null;
|
|
589290
589465
|
}
|
|
@@ -589294,19 +589469,68 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589294
589469
|
return false;
|
|
589295
589470
|
return commandReliablySatisfiesVerifyCommand(command.trim(), state.verifierCommand);
|
|
589296
589471
|
}
|
|
589472
|
+
/**
|
|
589473
|
+
* When a tool result was triaged for size (full payload saved to
|
|
589474
|
+
* `.omnius/tool-results/<hash>.txt`), append the saved payload so
|
|
589475
|
+
* diagnostics parsing sees the complete output. Without this, a large
|
|
589476
|
+
* failed build's `file:line:col: error:` lines can be cut out of the
|
|
589477
|
+
* triage envelope and the run never registers as a verifier run.
|
|
589478
|
+
* Best effort and bounded — never throws into the loop.
|
|
589479
|
+
*/
|
|
589480
|
+
_expandTriagedPayloadForDiagnostics(text2) {
|
|
589481
|
+
if (!text2 || !text2.includes(TRIAGE_SAVED_PATH_MARKER))
|
|
589482
|
+
return text2;
|
|
589483
|
+
const MAX_PAYLOAD_BYTES = 1e6;
|
|
589484
|
+
const MAX_FILES2 = 2;
|
|
589485
|
+
const extras = [];
|
|
589486
|
+
let searchFrom = 0;
|
|
589487
|
+
for (let i2 = 0; i2 < MAX_FILES2; i2++) {
|
|
589488
|
+
const markerAt = text2.indexOf(TRIAGE_SAVED_PATH_MARKER, searchFrom);
|
|
589489
|
+
if (markerAt === -1)
|
|
589490
|
+
break;
|
|
589491
|
+
const pathStart = markerAt + TRIAGE_SAVED_PATH_MARKER.length;
|
|
589492
|
+
const restOfLine = text2.slice(pathStart, text2.indexOf("\n", pathStart) === -1 ? void 0 : text2.indexOf("\n", pathStart));
|
|
589493
|
+
searchFrom = pathStart;
|
|
589494
|
+
const endIdx = (() => {
|
|
589495
|
+
const emDash = restOfLine.indexOf(" — ");
|
|
589496
|
+
if (emDash !== -1)
|
|
589497
|
+
return emDash;
|
|
589498
|
+
const bracket = restOfLine.indexOf("]");
|
|
589499
|
+
return bracket !== -1 ? bracket : restOfLine.length;
|
|
589500
|
+
})();
|
|
589501
|
+
const savedPath = restOfLine.slice(0, endIdx).trim();
|
|
589502
|
+
if (!savedPath)
|
|
589503
|
+
continue;
|
|
589504
|
+
try {
|
|
589505
|
+
if (!_fsExistsSync(savedPath))
|
|
589506
|
+
continue;
|
|
589507
|
+
const stat9 = _fsStatSync(savedPath);
|
|
589508
|
+
if (!stat9.isFile())
|
|
589509
|
+
continue;
|
|
589510
|
+
const raw = _fsReadFileSync(savedPath, "utf8");
|
|
589511
|
+
extras.push(raw.length > MAX_PAYLOAD_BYTES ? raw.slice(0, MAX_PAYLOAD_BYTES) : raw);
|
|
589512
|
+
} catch {
|
|
589513
|
+
}
|
|
589514
|
+
}
|
|
589515
|
+
if (extras.length === 0)
|
|
589516
|
+
return text2;
|
|
589517
|
+
return `${text2}
|
|
589518
|
+
${extras.join("\n")}`;
|
|
589519
|
+
}
|
|
589297
589520
|
_observeCompileVerifierResult(input) {
|
|
589298
589521
|
const diagnostics = rankCompilerDiagnostics(parseCompilerDiagnostics(input.output));
|
|
589522
|
+
const verifierCommand = stripVerifierFallbackSuffix(input.verifierCommand) || input.verifierCommand.trim();
|
|
589299
589523
|
const previousDiagnostics = this._lastDeclaredVerifierDiagnostics;
|
|
589300
|
-
this._declaredVerifierCommand =
|
|
589524
|
+
this._declaredVerifierCommand = verifierCommand;
|
|
589301
589525
|
this._lastDeclaredVerifierOutput = input.output;
|
|
589302
589526
|
this._lastDeclaredVerifierDiagnostics = diagnostics;
|
|
589303
589527
|
if (!this._compileFixLoop && diagnostics.length === 0)
|
|
589304
589528
|
return null;
|
|
589305
|
-
const verifierFingerprint = compileFixVerifierFingerprint(
|
|
589529
|
+
const verifierFingerprint = compileFixVerifierFingerprint(verifierCommand);
|
|
589306
589530
|
const existingCards = this._compileFixLoop?.cards ?? [];
|
|
589307
589531
|
const cards = diagnostics.length > 0 ? buildCompileFixCards({
|
|
589308
589532
|
diagnostics,
|
|
589309
|
-
verifierCommand
|
|
589533
|
+
verifierCommand,
|
|
589310
589534
|
turn: input.turn,
|
|
589311
589535
|
existingCards
|
|
589312
589536
|
}) : existingCards;
|
|
@@ -589315,22 +589539,25 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589315
589539
|
existingCards,
|
|
589316
589540
|
observedCards: cards,
|
|
589317
589541
|
diagnostics,
|
|
589318
|
-
verifierCommand
|
|
589542
|
+
verifierCommand,
|
|
589319
589543
|
turn: input.turn,
|
|
589320
589544
|
verifierPassed: input.success && diagnostics.length === 0
|
|
589321
589545
|
});
|
|
589322
589546
|
this._compileFixLoop = {
|
|
589323
589547
|
active: diagnostics.length > 0 || nextCards.some((card) => card.status !== "verified"),
|
|
589324
|
-
verifierCommand
|
|
589548
|
+
verifierCommand,
|
|
589325
589549
|
verifierFingerprint,
|
|
589326
589550
|
verifierDirtySinceTurn: null,
|
|
589327
589551
|
lastVerifierRunTurn: input.turn,
|
|
589328
589552
|
lastVerifierPassedTurn: input.success && diagnostics.length === 0 ? input.turn : null,
|
|
589329
589553
|
lastMutationTurn: this._compileFixLoop?.lastMutationTurn ?? null,
|
|
589330
|
-
cards: nextCards
|
|
589554
|
+
cards: nextCards,
|
|
589555
|
+
// A live verifier run resolves the gate's demand — the block streak
|
|
589556
|
+
// is over regardless of pass/fail.
|
|
589557
|
+
preflightBlockStreak: 0
|
|
589331
589558
|
};
|
|
589332
589559
|
this._mirrorCompileFixCardsToWorkboard(nextCards, {
|
|
589333
|
-
command:
|
|
589560
|
+
command: verifierCommand,
|
|
589334
589561
|
success: input.success && diagnostics.length === 0,
|
|
589335
589562
|
turn: input.turn,
|
|
589336
589563
|
beforeDiagnosticCount: previousDiagnostics.length,
|
|
@@ -589342,7 +589569,7 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589342
589569
|
if (input.success && diagnostics.length === 0) {
|
|
589343
589570
|
this.emit({
|
|
589344
589571
|
type: "status",
|
|
589345
|
-
content: `compile_error_fix_loop: verifier passed (${
|
|
589572
|
+
content: `compile_error_fix_loop: verifier passed (${verifierCommand}); compile cards verified`,
|
|
589346
589573
|
turn: input.turn,
|
|
589347
589574
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
589348
589575
|
});
|
|
@@ -589361,7 +589588,7 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589361
589588
|
}
|
|
589362
589589
|
this.emit({
|
|
589363
589590
|
type: "status",
|
|
589364
|
-
content: `compile_error_fix_loop_started: verifierCommand=${
|
|
589591
|
+
content: `compile_error_fix_loop_started: verifierCommand=${verifierCommand}; cardId=${top.id}; diagnosticFingerprint=${top.diagnostic.fingerprint}; afterDiagnosticCount=${diagnostics.length}`,
|
|
589365
589592
|
turn: input.turn,
|
|
589366
589593
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
589367
589594
|
});
|
|
@@ -589561,14 +589788,7 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589561
589788
|
if (!state?.active)
|
|
589562
589789
|
return;
|
|
589563
589790
|
const normalized = paths.map((p2) => this._normalizeEvidencePath(p2)).filter(Boolean);
|
|
589564
|
-
const
|
|
589565
|
-
const todos = this.readSessionTodos() || [];
|
|
589566
|
-
const artifacts = todos.flatMap((todo) => Array.isArray(todo.declaredArtifacts) ? todo.declaredArtifacts.filter((p2) => typeof p2 === "string") : []);
|
|
589567
|
-
const relevant = normalized.length === 0 || normalized.some((pathValue) => {
|
|
589568
|
-
if (pathValue.startsWith(".omnius/"))
|
|
589569
|
-
return false;
|
|
589570
|
-
return owned.some((ownedPath) => this._pathsOverlapForVerifier(pathValue, ownedPath)) || artifacts.some((artifactPath) => this._pathsOverlapForVerifier(pathValue, artifactPath)) || /\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|c|cc|cpp|cxx|h|hpp|hh|hxx|ino)$/i.test(pathValue);
|
|
589571
|
-
});
|
|
589791
|
+
const relevant = normalized.length === 0 || this._compileFixPathsTouchProjectSources(normalized, state);
|
|
589572
589792
|
if (!relevant)
|
|
589573
589793
|
return;
|
|
589574
589794
|
state.verifierDirtySinceTurn = turn;
|
|
@@ -589595,6 +589815,24 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589595
589815
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
589596
589816
|
});
|
|
589597
589817
|
}
|
|
589818
|
+
/**
|
|
589819
|
+
* True when any of the given normalized paths touches project source:
|
|
589820
|
+
* files owned by compile-fix cards, declared todo artifacts, or files
|
|
589821
|
+
* with a source-code extension. Build side effects (logs, artifacts,
|
|
589822
|
+
* `.omnius/` bookkeeping) do not count.
|
|
589823
|
+
*/
|
|
589824
|
+
_compileFixPathsTouchProjectSources(normalizedPaths, state) {
|
|
589825
|
+
const owned = state.cards.flatMap((card) => card.ownedFiles);
|
|
589826
|
+
const todos = this.readSessionTodos() || [];
|
|
589827
|
+
const artifacts = todos.flatMap((todo) => Array.isArray(todo.declaredArtifacts) ? todo.declaredArtifacts.filter((p2) => typeof p2 === "string") : []);
|
|
589828
|
+
return normalizedPaths.some((pathValue) => {
|
|
589829
|
+
if (pathValue.startsWith(".omnius/"))
|
|
589830
|
+
return false;
|
|
589831
|
+
return owned.some((ownedPath) => this._pathsOverlapForVerifier(pathValue, ownedPath)) || artifacts.some((artifactPath) => this._pathsOverlapForVerifier(pathValue, artifactPath)) || /\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|c|cc|cpp|cxx|h|hpp|hh|hxx|ino)$/i.test(pathValue);
|
|
589832
|
+
});
|
|
589833
|
+
}
|
|
589834
|
+
/** Consecutive preflight blocks before the gate yields instead of blocking. */
|
|
589835
|
+
static COMPILE_FIX_GATE_YIELD_AFTER = 3;
|
|
589598
589836
|
_compileFixLoopPreflightBlock(toolName, args, turn, shellLikelyMutatesFilesystem) {
|
|
589599
589837
|
const state = this._compileFixLoop;
|
|
589600
589838
|
if (!state?.active)
|
|
@@ -589605,29 +589843,62 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
|
|
|
589605
589843
|
if (toolName === "shell") {
|
|
589606
589844
|
const command = String(args["command"] ?? args["cmd"] ?? "").trim();
|
|
589607
589845
|
if (commandReliablySatisfiesVerifyCommand(command, state.verifierCommand)) {
|
|
589846
|
+
state.preflightBlockStreak = 0;
|
|
589608
589847
|
return null;
|
|
589609
589848
|
}
|
|
589610
589849
|
if (!shellLikelyMutatesFilesystem)
|
|
589611
589850
|
return null;
|
|
589851
|
+
const extraction = extractShellMutationPaths(command, {
|
|
589852
|
+
workingDir: this.authoritativeWorkingDirectory()
|
|
589853
|
+
});
|
|
589854
|
+
const mutationPaths = extraction.paths.map((p2) => this._normalizeEvidencePath(p2)).filter(Boolean);
|
|
589855
|
+
if (mutationPaths.length === 0 || !this._compileFixPathsTouchProjectSources(mutationPaths, state)) {
|
|
589856
|
+
return null;
|
|
589857
|
+
}
|
|
589612
589858
|
} else if (!this._isProjectEditTool(toolName)) {
|
|
589613
589859
|
return null;
|
|
589614
589860
|
}
|
|
589861
|
+
const yieldAfter = _AgenticRunner.COMPILE_FIX_GATE_YIELD_AFTER;
|
|
589862
|
+
const streak = (state.preflightBlockStreak ?? 0) + 1;
|
|
589863
|
+
if (streak > yieldAfter) {
|
|
589864
|
+
state.preflightBlockStreak = 0;
|
|
589865
|
+
this.emit({
|
|
589866
|
+
type: "status",
|
|
589867
|
+
content: `compile_error_verifier_dirty: gate yielded to ${toolName} after ${yieldAfter} consecutive blocks at turn ${turn}`,
|
|
589868
|
+
turn,
|
|
589869
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
589870
|
+
});
|
|
589871
|
+
return {
|
|
589872
|
+
kind: "yield",
|
|
589873
|
+
notice: [
|
|
589874
|
+
`[COMPILE FIX GATE YIELDED — verifier still required]`,
|
|
589875
|
+
`The verifier-required gate blocked ${yieldAfter} consecutive tool calls and is yielding so work can continue.`,
|
|
589876
|
+
`Verifier evidence is still stale. Run the verifier as your next evidence step:`,
|
|
589877
|
+
` ${state.verifierCommand}`,
|
|
589878
|
+
`Any real build/test command whose output shows current compiler diagnostics is also accepted as the live verifier.`,
|
|
589879
|
+
`task_complete remains blocked until a verifier run passes after the last mutation.`
|
|
589880
|
+
].join("\n")
|
|
589881
|
+
};
|
|
589882
|
+
}
|
|
589883
|
+
state.preflightBlockStreak = streak;
|
|
589615
589884
|
const message2 = [
|
|
589616
589885
|
`[COMPILE ERROR FIX LOOP BLOCKED — declared verifier required]`,
|
|
589617
589886
|
`A compile-fix card was patched, so the next mutation/evidence step must be the live verifier.`,
|
|
589618
|
-
`
|
|
589887
|
+
`Run this now: ${state.verifierCommand}`,
|
|
589888
|
+
`Any real build/test command whose output shows current compiler diagnostics is also accepted.`,
|
|
589619
589889
|
`dirtySinceTurn: ${state.verifierDirtySinceTurn}`,
|
|
589620
589890
|
`lastMutationTurn: ${state.lastMutationTurn}`,
|
|
589621
589891
|
`lastVerifierRunTurn: ${state.lastVerifierRunTurn}`,
|
|
589622
|
-
`blockedTool: ${toolName}
|
|
589892
|
+
`blockedTool: ${toolName}`,
|
|
589893
|
+
`consecutiveBlocks: ${streak}/${yieldAfter} (gate yields after ${yieldAfter})`
|
|
589623
589894
|
].join("\n");
|
|
589624
589895
|
this.emit({
|
|
589625
589896
|
type: "status",
|
|
589626
|
-
content: `compile_error_verifier_dirty: blocked ${toolName} at turn ${turn}`,
|
|
589897
|
+
content: `compile_error_verifier_dirty: blocked ${toolName} at turn ${turn} (${streak}/${yieldAfter})`,
|
|
589627
589898
|
turn,
|
|
589628
589899
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
589629
589900
|
});
|
|
589630
|
-
return message2;
|
|
589901
|
+
return { kind: "block", message: message2 };
|
|
589631
589902
|
}
|
|
589632
589903
|
_compileFixLoopCompletionBlocker(turn) {
|
|
589633
589904
|
const state = this._compileFixLoop;
|
|
@@ -589985,6 +590256,8 @@ ${modelVisible}` : modelVisible || result.error || displayOutput || "";
|
|
|
589985
590256
|
if (!command.trim())
|
|
589986
590257
|
return false;
|
|
589987
590258
|
void result;
|
|
590259
|
+
if (commandIsPureReadOnlyPipeline(command))
|
|
590260
|
+
return false;
|
|
589988
590261
|
return /\b(test|tests|vitest|jest|pytest|go test|cargo test|npm test|pnpm test|yarn test|typecheck|tsc|build|verify|verification|check)\b/i.test(command);
|
|
589989
590262
|
}
|
|
589990
590263
|
_shouldSuppressCompletionDiscoveryEvidence(toolName, result, targetPaths) {
|
|
@@ -598420,8 +598693,10 @@ ${cachedResult}`,
|
|
|
598420
598693
|
};
|
|
598421
598694
|
}
|
|
598422
598695
|
}
|
|
598423
|
-
const
|
|
598424
|
-
if (
|
|
598696
|
+
const compileLoopPreflight = !repeatShortCircuit ? this._compileFixLoopPreflightBlock(tc.name, tc.arguments ?? {}, turn, shellLikelyMutatesFilesystem) : null;
|
|
598697
|
+
if (compileLoopPreflight?.kind === "yield") {
|
|
598698
|
+
pushSoftInjection("system", compileLoopPreflight.notice);
|
|
598699
|
+
} else if (compileLoopPreflight) {
|
|
598425
598700
|
this.emit({
|
|
598426
598701
|
type: "tool_call",
|
|
598427
598702
|
toolName: tc.name,
|
|
@@ -598433,7 +598708,7 @@ ${cachedResult}`,
|
|
|
598433
598708
|
type: "tool_result",
|
|
598434
598709
|
toolName: tc.name,
|
|
598435
598710
|
success: false,
|
|
598436
|
-
content:
|
|
598711
|
+
content: compileLoopPreflight.message.slice(0, 120),
|
|
598437
598712
|
turn,
|
|
598438
598713
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
598439
598714
|
});
|
|
@@ -598443,9 +598718,9 @@ ${cachedResult}`,
|
|
|
598443
598718
|
});
|
|
598444
598719
|
return {
|
|
598445
598720
|
tc,
|
|
598446
|
-
output:
|
|
598721
|
+
output: compileLoopPreflight.message,
|
|
598447
598722
|
success: false,
|
|
598448
|
-
systemGuidance:
|
|
598723
|
+
systemGuidance: compileLoopPreflight.message
|
|
598449
598724
|
};
|
|
598450
598725
|
}
|
|
598451
598726
|
this.emit({
|
|
@@ -600037,8 +600312,7 @@ ${structuralGuardGuidance}` : structuralGuardGuidance;
|
|
|
600037
600312
|
}
|
|
600038
600313
|
if (tc.name === "shell" && result.runtimeAuthored !== true) {
|
|
600039
600314
|
const shellCommand = String(tc.arguments?.["command"] ?? tc.arguments?.["cmd"] ?? "");
|
|
600040
|
-
const compileOutput =
|
|
600041
|
-
${result.error ?? ""}`;
|
|
600315
|
+
const compileOutput = this._expandTriagedPayloadForDiagnostics([result.output, result.llmContent, result.error].filter((part) => typeof part === "string" && part.length > 0).join("\n"));
|
|
600042
600316
|
const verifierCommand = this._declaredVerifierCommandForShell(shellCommand, compileOutput);
|
|
600043
600317
|
if (verifierCommand) {
|
|
600044
600318
|
const compileGuidance = this._observeCompileVerifierResult({
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.536",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omnius",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.536",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"image-to-ascii"
|
|
12
12
|
],
|
package/package.json
CHANGED