omnius 1.0.269 → 1.0.270
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 +130 -42
- package/docs/operations/delay-fix-review.md +153 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -565449,7 +565449,7 @@ var init_agenticRunner = __esm({
|
|
|
565449
565449
|
"repl_exec",
|
|
565450
565450
|
"notebook_edit"
|
|
565451
565451
|
]);
|
|
565452
|
-
AgenticRunner = class {
|
|
565452
|
+
AgenticRunner = class _AgenticRunner {
|
|
565453
565453
|
backend;
|
|
565454
565454
|
tools = /* @__PURE__ */ new Map();
|
|
565455
565455
|
options;
|
|
@@ -570656,6 +570656,7 @@ TASK: ${scrubbedTask}` : scrubbedTask;
|
|
|
570656
570656
|
this._worldFacts = { files: /* @__PURE__ */ new Map(), lastTest: {}, lastLists: /* @__PURE__ */ new Map() };
|
|
570657
570657
|
this._argCohorts.clear();
|
|
570658
570658
|
this._adversaryRedundantSignals.clear();
|
|
570659
|
+
this._adversaryRecentFlags.clear();
|
|
570659
570660
|
this._lastTodoWriteTurn = -1;
|
|
570660
570661
|
this._lastTodoReminderTurn = -1;
|
|
570661
570662
|
let pendingConstraintWarnings = [];
|
|
@@ -574803,7 +574804,6 @@ ${sr.result.output}`;
|
|
|
574803
574804
|
}
|
|
574804
574805
|
if (completed || this._completionIncompleteVerification)
|
|
574805
574806
|
break;
|
|
574806
|
-
this.adversaryObserve(messages2, turn);
|
|
574807
574807
|
const currentRepScore = this.detectRepetition(toolCallLog);
|
|
574808
574808
|
if (currentRepScore > 0.4 && toolCallLog.length >= 4) {
|
|
574809
574809
|
const { repetitionWindow } = this.contextLimits();
|
|
@@ -577896,6 +577896,13 @@ ${trimmedNew}`;
|
|
|
577896
577896
|
/** WO-FIX-C: Tool fingerprints the adversary has flagged as redundant.
|
|
577897
577897
|
* Checked in executeSingle to attach advisory guidance before dispatch. */
|
|
577898
577898
|
_adversaryRedundantSignals = /* @__PURE__ */ new Set();
|
|
577899
|
+
/** Tracks recent adversary detection flags for deduplication and escalation.
|
|
577900
|
+
* Key: "detectionType:fingerprint"
|
|
577901
|
+
* Value: { count: number; lastTurn: number }
|
|
577902
|
+
* When count >= ESCALATE_THRESHOLD, the critique is promoted to system-role. */
|
|
577903
|
+
_adversaryRecentFlags = /* @__PURE__ */ new Map();
|
|
577904
|
+
static ADVERSARY_ESCALATE_THRESHOLD = 3;
|
|
577905
|
+
static ADVERSARY_FLAG_TTL = 5;
|
|
577899
577906
|
/** Reflexion pattern: task-local failure-indexed reflection buffer.
|
|
577900
577907
|
* Generates typed self-reflections on task failure and injects them
|
|
577901
577908
|
* into the next attempt's context for active learning. */
|
|
@@ -577958,6 +577965,23 @@ ${trimmedNew}`;
|
|
|
577958
577965
|
}
|
|
577959
577966
|
while (this._adversaryToolOutcomes.length > 20)
|
|
577960
577967
|
this._adversaryToolOutcomes.shift();
|
|
577968
|
+
for (const [key, val] of this._adversaryRecentFlags) {
|
|
577969
|
+
if (turn - val.lastTurn > _AgenticRunner.ADVERSARY_FLAG_TTL)
|
|
577970
|
+
this._adversaryRecentFlags.delete(key);
|
|
577971
|
+
}
|
|
577972
|
+
const adversaryFlag = (flagKey, messages3) => {
|
|
577973
|
+
const existing = this._adversaryRecentFlags.get(flagKey);
|
|
577974
|
+
if (existing) {
|
|
577975
|
+
existing.count++;
|
|
577976
|
+
existing.lastTurn = turn;
|
|
577977
|
+
if (existing.count >= _AgenticRunner.ADVERSARY_ESCALATE_THRESHOLD) {
|
|
577978
|
+
return "escalate";
|
|
577979
|
+
}
|
|
577980
|
+
return "suppress";
|
|
577981
|
+
}
|
|
577982
|
+
this._adversaryRecentFlags.set(flagKey, { count: 1, lastTurn: turn });
|
|
577983
|
+
return "proceed";
|
|
577984
|
+
};
|
|
577961
577985
|
const emitReaction = (cls, shortText, confidence2, details2) => {
|
|
577962
577986
|
this.emit({
|
|
577963
577987
|
type: "adversary_reaction",
|
|
@@ -577985,9 +578009,9 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
577985
578009
|
const successes = recentOutcomes.filter((o2) => o2.succeeded);
|
|
577986
578010
|
if (successes.length >= 1) {
|
|
577987
578011
|
const successList = successes.map((o2) => `${o2.tool}: ${o2.preview.slice(0, 60)}`).join("; ");
|
|
577988
|
-
|
|
577989
|
-
if (
|
|
577990
|
-
|
|
578012
|
+
const ffFlag = adversaryFlag("false_failure", messages2);
|
|
578013
|
+
if (ffFlag !== "suppress") {
|
|
578014
|
+
const critiqueText = buildAdversaryCritique({
|
|
577991
578015
|
evidence: `Recent tools succeeded: ${successList}.`,
|
|
577992
578016
|
hypothesis: "The main loop is interpreting uncertainty or partial progress as failure and may be about to discard usable evidence.",
|
|
577993
578017
|
correctiveAction: "Use the successful results to advance the task, then verify the next concrete step.",
|
|
@@ -577996,13 +578020,24 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
577996
578020
|
"Read a different targeted file if the successful result exposed a new path or symbol.",
|
|
577997
578021
|
"Complete only if the successful output is sufficient evidence for the user's request."
|
|
577998
578022
|
]
|
|
577999
|
-
})
|
|
578023
|
+
});
|
|
578024
|
+
emitReaction("false_failure", `Claimed failure, but recent tools succeeded (${successes.length})`, 0.9, successList);
|
|
578025
|
+
if (this._adversaryMode === "skillcoach" || this._adversaryMode === "both") {
|
|
578026
|
+
if (ffFlag === "escalate") {
|
|
578027
|
+
messages2.push({
|
|
578028
|
+
role: "system",
|
|
578029
|
+
content: critiqueText + "\n[ESCALATED: This warning was previously issued without effect.]"
|
|
578030
|
+
});
|
|
578031
|
+
} else {
|
|
578032
|
+
this.pendingUserMessages.push(critiqueText);
|
|
578033
|
+
}
|
|
578034
|
+
}
|
|
578035
|
+
this.emit({
|
|
578036
|
+
type: "status",
|
|
578037
|
+
content: `\x1B[38;5;178m⚠ Corrected false failure claim (${successes.length} tools succeeded)\x1B[0m`,
|
|
578038
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578039
|
+
});
|
|
578000
578040
|
}
|
|
578001
|
-
this.emit({
|
|
578002
|
-
type: "status",
|
|
578003
|
-
content: `\x1B[38;5;178m⚠ Corrected false failure claim (${successes.length} tools succeeded)\x1B[0m`,
|
|
578004
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578005
|
-
});
|
|
578006
578041
|
}
|
|
578007
578042
|
}
|
|
578008
578043
|
}
|
|
@@ -578015,9 +578050,9 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578015
578050
|
const successes = recentOutcomes.filter((o2) => o2.succeeded);
|
|
578016
578051
|
if (failures.length > 0 && successes.length === 0) {
|
|
578017
578052
|
const failList = failures.map((o2) => `${o2.tool}: ${o2.preview.slice(0, 60)}`).join("; ");
|
|
578018
|
-
|
|
578019
|
-
if (
|
|
578020
|
-
|
|
578053
|
+
const fsFlag = adversaryFlag("false_success", messages2);
|
|
578054
|
+
if (fsFlag !== "suppress") {
|
|
578055
|
+
const critiqueText = buildAdversaryCritique({
|
|
578021
578056
|
evidence: `Recent tools show errors (${failures.length}): ${failList}.`,
|
|
578022
578057
|
hypothesis: "The main loop is prematurely compressing intent into success language before the verifier produced evidence.",
|
|
578023
578058
|
correctiveAction: "Inspect the failed output, identify the implicated path/symbol/command, and run one focused corrective step before claiming success.",
|
|
@@ -578026,7 +578061,18 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578026
578061
|
"Patch the implicated code or configuration.",
|
|
578027
578062
|
"Run the same verifier only after a state-changing fix."
|
|
578028
578063
|
]
|
|
578029
|
-
})
|
|
578064
|
+
});
|
|
578065
|
+
emitReaction("false_success", `Claimed success, but recent tools failed (${failures.length})`, 0.9, failList);
|
|
578066
|
+
if (this._adversaryMode === "skillcoach" || this._adversaryMode === "both") {
|
|
578067
|
+
if (fsFlag === "escalate") {
|
|
578068
|
+
messages2.push({
|
|
578069
|
+
role: "system",
|
|
578070
|
+
content: critiqueText + "\n[ESCALATED: This warning was previously issued without effect.]"
|
|
578071
|
+
});
|
|
578072
|
+
} else {
|
|
578073
|
+
this.pendingUserMessages.push(critiqueText);
|
|
578074
|
+
}
|
|
578075
|
+
}
|
|
578030
578076
|
}
|
|
578031
578077
|
}
|
|
578032
578078
|
}
|
|
@@ -578048,9 +578094,9 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578048
578094
|
const prior = this._adversaryToolOutcomes.find((o2) => o2.succeeded && o2.tool === name10 && o2.fingerprint === fingerprint && o2.turn < turn);
|
|
578049
578095
|
if (prior) {
|
|
578050
578096
|
this._adversaryRedundantSignals.add(fingerprint);
|
|
578051
|
-
|
|
578052
|
-
if (
|
|
578053
|
-
|
|
578097
|
+
const raFlag = adversaryFlag(`redundant_action:${fingerprint}`, messages2);
|
|
578098
|
+
if (raFlag !== "suppress") {
|
|
578099
|
+
const critiqueText = buildAdversaryCritique({
|
|
578054
578100
|
evidence: `${name10} already succeeded on turn ${prior.turn} with exact arguments (${argsKey.slice(0, 120)}). Prior preview: ${prior.preview}`,
|
|
578055
578101
|
hypothesis: "The main loop may have lost track of previously observed evidence because of context pressure, path confusion, or repeated discovery.",
|
|
578056
578102
|
correctiveAction: "Let this duplicate run execute if needed, but treat the prior result as evidence and pivot afterward unless state has changed.",
|
|
@@ -578059,13 +578105,24 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578059
578105
|
"Read a different specific file or selector if the current evidence is insufficient.",
|
|
578060
578106
|
"Repeat exact arguments only when filesystem, browser, or page state changed."
|
|
578061
578107
|
]
|
|
578062
|
-
})
|
|
578108
|
+
});
|
|
578109
|
+
emitReaction("redundant_action", `Already ran ${name10} successfully on turn ${prior.turn}`, 0.8, prior.preview);
|
|
578110
|
+
if (this._adversaryMode === "skillcoach" || this._adversaryMode === "both") {
|
|
578111
|
+
if (raFlag === "escalate") {
|
|
578112
|
+
messages2.push({
|
|
578113
|
+
role: "system",
|
|
578114
|
+
content: critiqueText + "\n[ESCALATED: This redundant-action warning was issued 3+ times as a user message without effect.]"
|
|
578115
|
+
});
|
|
578116
|
+
} else {
|
|
578117
|
+
this.pendingUserMessages.push(critiqueText);
|
|
578118
|
+
}
|
|
578119
|
+
}
|
|
578120
|
+
this.emit({
|
|
578121
|
+
type: "status",
|
|
578122
|
+
content: `\x1B[38;5;178m⚠ Adversary noted redundant ${name10} call (succeeded on turn ${prior.turn}); action remains allowed\x1B[0m`,
|
|
578123
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578124
|
+
});
|
|
578063
578125
|
}
|
|
578064
|
-
this.emit({
|
|
578065
|
-
type: "status",
|
|
578066
|
-
content: `\x1B[38;5;178m⚠ Adversary noted redundant ${name10} call (succeeded on turn ${prior.turn}); action remains allowed\x1B[0m`,
|
|
578067
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578068
|
-
});
|
|
578069
578126
|
break;
|
|
578070
578127
|
}
|
|
578071
578128
|
}
|
|
@@ -578083,9 +578140,9 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578083
578140
|
}
|
|
578084
578141
|
}
|
|
578085
578142
|
if (consecutiveShortResults >= 3) {
|
|
578086
|
-
|
|
578087
|
-
if (
|
|
578088
|
-
|
|
578143
|
+
const itFlag = adversaryFlag("idle_think", messages2);
|
|
578144
|
+
if (itFlag !== "suppress") {
|
|
578145
|
+
const critiqueText = buildAdversaryCritique({
|
|
578089
578146
|
evidence: `${consecutiveShortResults} consecutive output-like calls occurred without an input-like observation.`,
|
|
578090
578147
|
hypothesis: "The loop may be acting from stale state instead of re-observing the environment.",
|
|
578091
578148
|
correctiveAction: "Take one input/observation step before another output step.",
|
|
@@ -578094,13 +578151,24 @@ ${input.alternatives.map((item) => `- ${item}`).join("\n")}` : "";
|
|
|
578094
578151
|
"Read the current UI/page state before clicking or typing again.",
|
|
578095
578152
|
"If the task is already complete, finish with the concrete evidence already observed."
|
|
578096
578153
|
]
|
|
578097
|
-
})
|
|
578154
|
+
});
|
|
578155
|
+
emitReaction("idle_think", `Consecutive output without input: ${consecutiveShortResults}`, 0.7);
|
|
578156
|
+
if (this._adversaryMode === "skillcoach" || this._adversaryMode === "both") {
|
|
578157
|
+
if (itFlag === "escalate") {
|
|
578158
|
+
messages2.push({
|
|
578159
|
+
role: "system",
|
|
578160
|
+
content: critiqueText + "\n[ESCALATED: This warning was previously issued without effect.]"
|
|
578161
|
+
});
|
|
578162
|
+
} else {
|
|
578163
|
+
this.pendingUserMessages.push(critiqueText);
|
|
578164
|
+
}
|
|
578165
|
+
}
|
|
578166
|
+
this.emit({
|
|
578167
|
+
type: "status",
|
|
578168
|
+
content: `\x1B[38;5;178m⚠ Adversary flagged runaway-output risk (${consecutiveShortResults} consecutive sends without receive); action remains allowed\x1B[0m`,
|
|
578169
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578170
|
+
});
|
|
578098
578171
|
}
|
|
578099
|
-
this.emit({
|
|
578100
|
-
type: "status",
|
|
578101
|
-
content: `\x1B[38;5;178m⚠ Adversary flagged runaway-output risk (${consecutiveShortResults} consecutive sends without receive); action remains allowed\x1B[0m`,
|
|
578102
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
578103
|
-
});
|
|
578104
578172
|
}
|
|
578105
578173
|
}
|
|
578106
578174
|
}
|
|
@@ -608597,6 +608665,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
608597
608665
|
this._trueStdoutWrite.call(process.stdout, `\x1B[${scrollEnd};1H`);
|
|
608598
608666
|
this.renderFooterAndPositionInput();
|
|
608599
608667
|
this._trueStdoutWrite.call(process.stdout, `\x1B[${scrollEnd};1H`);
|
|
608668
|
+
this._trueStdoutWrite.call(process.stdout, `
|
|
608669
|
+
`);
|
|
608600
608670
|
this.termWrite("\x1B[?2026l");
|
|
608601
608671
|
this._bufferContent = true;
|
|
608602
608672
|
}
|
|
@@ -608966,7 +609036,18 @@ ${CONTENT_BG_SEQ}`);
|
|
|
608966
609036
|
const text2 = stripped.join("\n");
|
|
608967
609037
|
if (text2.length === 0) return;
|
|
608968
609038
|
const ok3 = copyText(text2);
|
|
608969
|
-
|
|
609039
|
+
const pos = this.rowPositions(termRows());
|
|
609040
|
+
const writer = this._origWrite ?? process.stdout.write.bind(process.stdout);
|
|
609041
|
+
if (ok3) {
|
|
609042
|
+
if (pos.metricsRow > 0) {
|
|
609043
|
+
writer(
|
|
609044
|
+
`\x1B[${pos.metricsRow};1H\x1B[2K\x1B[38;5;${TEXT_PRIMARY}m ✓ Copied session to clipboard\x1B[0m`
|
|
609045
|
+
);
|
|
609046
|
+
}
|
|
609047
|
+
setTimeout(() => {
|
|
609048
|
+
if (this.active) this.renderFooterAndPositionInput();
|
|
609049
|
+
}, 1200);
|
|
609050
|
+
} else {
|
|
608970
609051
|
try {
|
|
608971
609052
|
const fs11 = __require("fs");
|
|
608972
609053
|
const os9 = __require("os");
|
|
@@ -608975,16 +609056,21 @@ ${CONTENT_BG_SEQ}`);
|
|
|
608975
609056
|
"omnius-session-copy.txt"
|
|
608976
609057
|
);
|
|
608977
609058
|
fs11.writeFileSync(tmpPath, text2, "utf-8");
|
|
608978
|
-
|
|
608979
|
-
|
|
608980
|
-
`
|
|
608981
|
-
|
|
609059
|
+
if (pos.metricsRow > 0) {
|
|
609060
|
+
writer(
|
|
609061
|
+
`\x1B[${pos.metricsRow};1H\x1B[2K\x1B[38;5;208mSession saved to temp file\x1B[0m`
|
|
609062
|
+
);
|
|
609063
|
+
}
|
|
608982
609064
|
} catch {
|
|
608983
|
-
|
|
608984
|
-
|
|
608985
|
-
`
|
|
608986
|
-
|
|
609065
|
+
if (pos.metricsRow > 0) {
|
|
609066
|
+
writer(
|
|
609067
|
+
`\x1B[${pos.metricsRow};1H\x1B[2K\x1B[38;5;196mFailed to copy session\x1B[0m`
|
|
609068
|
+
);
|
|
609069
|
+
}
|
|
608987
609070
|
}
|
|
609071
|
+
setTimeout(() => {
|
|
609072
|
+
if (this.active) this.renderFooterAndPositionInput();
|
|
609073
|
+
}, 3e3);
|
|
608988
609074
|
}
|
|
608989
609075
|
}
|
|
608990
609076
|
/**
|
|
@@ -704126,6 +704212,7 @@ ${entry.fullContent}`
|
|
|
704126
704212
|
if (!liveShellBlock) return;
|
|
704127
704213
|
liveShellBlock.repaintTimer = null;
|
|
704128
704214
|
if (statusBar?.isActive) statusBar.refreshDisplay();
|
|
704215
|
+
if (liveShellBlock.state.status === "running") scheduleLiveShellRepaint();
|
|
704129
704216
|
}, 33);
|
|
704130
704217
|
liveShellBlock.repaintTimer.unref?.();
|
|
704131
704218
|
};
|
|
@@ -704227,6 +704314,7 @@ ${entry.fullContent}`
|
|
|
704227
704314
|
(width) => buildShellLiveBlockLines(state, width)
|
|
704228
704315
|
);
|
|
704229
704316
|
liveShellStatusBar.appendDynamicBlock(id);
|
|
704317
|
+
scheduleLiveShellRepaint();
|
|
704230
704318
|
}
|
|
704231
704319
|
});
|
|
704232
704320
|
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Delay Fix Review — Commits Since Delay Analysis
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-06-10
|
|
4
|
+
**Reference:** `/docs/operations/delay-analysis.md` (15 delay sources documented)
|
|
5
|
+
|
|
6
|
+
## Commit Map
|
|
7
|
+
|
|
8
|
+
| Commit | Message | Files | Insertions | Date |
|
|
9
|
+
|--------|---------|-------|------------|------|
|
|
10
|
+
| b24bc55d | slots | 5 | +80/-18 | Jun 9 22:04 |
|
|
11
|
+
| cb043dce | interactive | 11 | +865/-259 | Jun 9 21:45 |
|
|
12
|
+
| ca1da293 | error catch | 12 | +389/-144 | Jun 9 10:26 |
|
|
13
|
+
| 1fcdd81e | progress | 10 | +724/-19 | Jun 8 22:46 |
|
|
14
|
+
|
|
15
|
+
Total: 38 files changed, ~2,058 insertions, ~440 deletions across ~4 hours.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Delay Source Mapping — What Got Fixed
|
|
20
|
+
|
|
21
|
+
### 1. `stableValueKey` — O(n) JSON.stringify on large arrays/objects (Delay #1)
|
|
22
|
+
**Status: FIXED** (commit b24bc55d)
|
|
23
|
+
|
|
24
|
+
Evidence from `git show b24bc55d -- packages/orchestrator/src/streaming-executor.ts`:
|
|
25
|
+
```diff
|
|
26
|
+
- if (Array.isArray(value)) return `[${value.map(stableValueKey).join(",")}]`;
|
|
27
|
+
+ if (Array.isArray(value)) {
|
|
28
|
+
+ if (value.length > 256) return `[${value.length}items]`;
|
|
29
|
+
+ return `[${value.map(stableValueKey).join(",")}]`;
|
|
30
|
+
+ }
|
|
31
|
+
+ const raw = JSON.stringify(value);
|
|
32
|
+
+ if (raw.length > 10_240) {
|
|
33
|
+
+ let hash = 5381;
|
|
34
|
+
+ for (let i = 0; i < raw.length; i++)
|
|
35
|
+
+ hash = ((hash << 5) + hash + raw.charCodeAt(i)) | 0;
|
|
36
|
+
+ return `{size:${raw.length},hash:${Math.abs(hash).toString(36)}}`;
|
|
37
|
+
+ }
|
|
38
|
+
```
|
|
39
|
+
- Array length cap at 256 items prevents O(n) traversal on large arrays
|
|
40
|
+
- Object size cap at 10KB prevents O(n) stringify on large objects
|
|
41
|
+
- Fallback to djb2 hash for oversized objects
|
|
42
|
+
- **Impact:** High — this was a core loop bottleneck in tool deduplication
|
|
43
|
+
|
|
44
|
+
### 2. Tool batching / deduplication (Delay #2)
|
|
45
|
+
**Status: PARTIALLY ADDRESSED** (commit b24bc55d)
|
|
46
|
+
|
|
47
|
+
`tool-batching.ts` changed (+26/-18 in b24bc55d). The `stableValueKey` fix above directly addresses the dedup cost. Need to verify if batching window logic was also touched.
|
|
48
|
+
|
|
49
|
+
### 3. Ollama pool / GPU detection (Delay #3, #4)
|
|
50
|
+
**Status: MAJOR REWRITE** (commits cb043dce + b24bc55d)
|
|
51
|
+
|
|
52
|
+
- `ollama-pool.ts`: +452/-259 in cb043dce, +35/-1 in b24bc55d
|
|
53
|
+
- This is the single largest change — a full rewrite of the Ollama pool
|
|
54
|
+
- The "slots" commit (b24bc55d) specifically touched ollama-pool.ts with 35 insertions
|
|
55
|
+
- **Impact:** Very high — GPU detection and model loading are on the critical path
|
|
56
|
+
|
|
57
|
+
### 4. Cascade backend / parallel inference (Delay #5)
|
|
58
|
+
**Status: CHANGED** (commit cb043dce)
|
|
59
|
+
|
|
60
|
+
`cascadeBackend.ts` changed +118/-lines in cb043dce. The "interactive" commit touched this file. Need to verify if parallel backend selection was improved.
|
|
61
|
+
|
|
62
|
+
### 5. Steering intake timeout (Delay #6)
|
|
63
|
+
**Status: CHANGED** (commit cb043dce)
|
|
64
|
+
|
|
65
|
+
`steeringIntake.ts` changed +79/-lines in cb043dce. The "interactive" commit touched this. Need to verify timeout values.
|
|
66
|
+
|
|
67
|
+
### 6. Verifier runner timeout (Delay #7)
|
|
68
|
+
**Status: CHANGED** (commit b24bc55d)
|
|
69
|
+
|
|
70
|
+
`verifierRunner.ts` changed +12/-lines in b24bc55d. The "slots" commit touched this.
|
|
71
|
+
|
|
72
|
+
### 7. Preflight snapshot (Delay #8)
|
|
73
|
+
**Status: CHANGED** (commit cb043dce)
|
|
74
|
+
|
|
75
|
+
`preflightSnapshot.ts` changed +44/-lines in cb043dce.
|
|
76
|
+
|
|
77
|
+
### 8. Agentic runner error handling (Delay #9)
|
|
78
|
+
**Status: FIXED** (commits ca1da293 + 1fcdd81e)
|
|
79
|
+
|
|
80
|
+
- ca1da293: agenticRunner.ts +102/-lines (error catch)
|
|
81
|
+
- 1fcdd81e: agenticRunner.ts +28/-lines (progress)
|
|
82
|
+
- Total: ~130 lines of error handling improvements
|
|
83
|
+
|
|
84
|
+
### 9. Prompt caching (Delay #10)
|
|
85
|
+
**Status: ADDED** (commit 1fcdd81e)
|
|
86
|
+
|
|
87
|
+
`prompt-cache.ts` added (+30 lines) in commit 1fcdd81e "progress". New file for prompt caching.
|
|
88
|
+
|
|
89
|
+
### 10. Context references (Delay #11)
|
|
90
|
+
**Status: IMPROVED** (commit 1fcdd81e)
|
|
91
|
+
|
|
92
|
+
`context-references.ts` changed +55/-lines in 1fcdd81e.
|
|
93
|
+
|
|
94
|
+
### 11. TUI render / text wrapping (Delay #12)
|
|
95
|
+
**Status: FIXED** (commits cb043dce + b24bc55d)
|
|
96
|
+
|
|
97
|
+
- cb043dce: render.ts +44/-lines
|
|
98
|
+
- b24bc55d: render.ts +13/-lines
|
|
99
|
+
- Both commits touched render.ts for text rendering improvements
|
|
100
|
+
|
|
101
|
+
### 12. Interactive mode (Delay #13)
|
|
102
|
+
**Status: ADDED** (commit cb043dce)
|
|
103
|
+
|
|
104
|
+
New file `packages/cli/src/tui/interactive.ts` (+39 lines) in cb043dce.
|
|
105
|
+
|
|
106
|
+
### 13. Integration tests (Delay #14)
|
|
107
|
+
**Status: ADDED** (commits ca1da293 + 1fcdd81e)
|
|
108
|
+
|
|
109
|
+
- ca1da293: 4 new test files
|
|
110
|
+
- 1fcdd81e: 2 new test files (agenticRunner.test.ts, prompt-caching.test.ts)
|
|
111
|
+
|
|
112
|
+
### 14. Publish artifacts (Delay #15)
|
|
113
|
+
**Status: UNCHANGED** (no delay-related changes)
|
|
114
|
+
|
|
115
|
+
Only `publish/npm-shrinkwrap.json` and `publish/package.json` changed in working tree (uncommitted).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Summary Assessment
|
|
120
|
+
|
|
121
|
+
### Fixed / Addressed (8/15 delay sources)
|
|
122
|
+
1. **stableValueKey** — fully fixed with array/object size caps
|
|
123
|
+
2. **Tool deduplication** — addressed via stableValueKey fix
|
|
124
|
+
3. **Ollama pool** — major rewrite (452+35 lines)
|
|
125
|
+
4. **Agentic runner errors** — ~130 lines of error handling
|
|
126
|
+
5. **Prompt caching** — new file added
|
|
127
|
+
6. **Context references** — improved (+55 lines)
|
|
128
|
+
7. **TUI render** — text wrapping fixed
|
|
129
|
+
8. **Interactive mode** — new feature added
|
|
130
|
+
|
|
131
|
+
### Changed but Need Verification (4/15)
|
|
132
|
+
9. **Cascade backend** — +118 lines, need to verify parallel improvement
|
|
133
|
+
10. **Steering intake** — +79 lines, need to verify timeout values
|
|
134
|
+
11. **Verifier runner** — +12 lines, need to verify timeout values
|
|
135
|
+
12. **Preflight snapshot** — +44 lines, need to verify probe timeout
|
|
136
|
+
|
|
137
|
+
### Not Addressed (3/15)
|
|
138
|
+
13. **Publish artifacts** — no delay-related changes
|
|
139
|
+
14. **Integration tests** — added but not a delay fix per se
|
|
140
|
+
15. **Working tree state** — only publish files changed (uncommitted)
|
|
141
|
+
|
|
142
|
+
### Overall Assessment
|
|
143
|
+
- **~53% of delay sources addressed** (8/15 fixed, 4/15 changed pending verification)
|
|
144
|
+
- The "slots" commit (b24bc55d) is the most recent and focused on core loop fixes
|
|
145
|
+
- The "interactive" commit (cb043dce) is the largest and touched the most files
|
|
146
|
+
- **Key gap:** Need to verify the actual timeout values in cascadeBackend.ts, steeringIntake.ts, and verifierRunner.ts to confirm the changes actually reduce delays
|
|
147
|
+
- **Key gap:** The working tree has 2 uncommitted changes in publish/ — need to check if these are relevant
|
|
148
|
+
|
|
149
|
+
### Recommended Next Steps
|
|
150
|
+
1. Verify timeout values in cascadeBackend.ts, steeringIntake.ts, verifierRunner.ts
|
|
151
|
+
2. Check if ollama-pool.ts rewrite includes GPU detection improvements
|
|
152
|
+
3. Verify the working tree changes in publish/ are intentional
|
|
153
|
+
4. Run the build to ensure all changes compile cleanly
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.270",
|
|
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.270",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"image-to-ascii"
|
|
12
12
|
],
|
package/package.json
CHANGED