evil-omo 3.12.2 → 3.12.3
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/cli/index.js +12 -12
- package/dist/index.js +0 -21
- package/package.json +12 -12
package/dist/cli/index.js
CHANGED
|
@@ -8967,7 +8967,7 @@ var {
|
|
|
8967
8967
|
// package.json
|
|
8968
8968
|
var package_default = {
|
|
8969
8969
|
name: "evil-omo",
|
|
8970
|
-
version: "3.12.
|
|
8970
|
+
version: "3.12.3",
|
|
8971
8971
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
8972
8972
|
main: "dist/index.js",
|
|
8973
8973
|
types: "dist/index.d.ts",
|
|
@@ -9043,17 +9043,17 @@ var package_default = {
|
|
|
9043
9043
|
typescript: "^5.7.3"
|
|
9044
9044
|
},
|
|
9045
9045
|
optionalDependencies: {
|
|
9046
|
-
"evil-omo-darwin-arm64": "3.12.
|
|
9047
|
-
"evil-omo-darwin-x64": "3.12.
|
|
9048
|
-
"evil-omo-darwin-x64-baseline": "3.12.
|
|
9049
|
-
"evil-omo-linux-x64": "3.12.
|
|
9050
|
-
"evil-omo-linux-x64-baseline": "3.12.
|
|
9051
|
-
"evil-omo-linux-arm64": "3.12.
|
|
9052
|
-
"evil-omo-linux-x64-musl": "3.12.
|
|
9053
|
-
"evil-omo-linux-x64-musl-baseline": "3.12.
|
|
9054
|
-
"evil-omo-linux-arm64-musl": "3.12.
|
|
9055
|
-
"evil-omo-windows-x64": "3.12.
|
|
9056
|
-
"evil-omo-windows-x64-baseline": "3.12.
|
|
9046
|
+
"evil-omo-darwin-arm64": "3.12.3",
|
|
9047
|
+
"evil-omo-darwin-x64": "3.12.3",
|
|
9048
|
+
"evil-omo-darwin-x64-baseline": "3.12.3",
|
|
9049
|
+
"evil-omo-linux-x64": "3.12.3",
|
|
9050
|
+
"evil-omo-linux-x64-baseline": "3.12.3",
|
|
9051
|
+
"evil-omo-linux-arm64": "3.12.3",
|
|
9052
|
+
"evil-omo-linux-x64-musl": "3.12.3",
|
|
9053
|
+
"evil-omo-linux-x64-musl-baseline": "3.12.3",
|
|
9054
|
+
"evil-omo-linux-arm64-musl": "3.12.3",
|
|
9055
|
+
"evil-omo-windows-x64": "3.12.3",
|
|
9056
|
+
"evil-omo-windows-x64-baseline": "3.12.3"
|
|
9057
9057
|
},
|
|
9058
9058
|
overrides: {
|
|
9059
9059
|
"@opencode-ai/sdk": "^1.2.24"
|
package/dist/index.js
CHANGED
|
@@ -20487,18 +20487,15 @@ async function handleSessionIdle(args) {
|
|
|
20487
20487
|
shouldSkipContinuation
|
|
20488
20488
|
} = args;
|
|
20489
20489
|
log(`[${HOOK_NAME}] session.idle`, { sessionID });
|
|
20490
|
-
console.error(`[TODO-DIAG] session.idle fired for ${sessionID}`);
|
|
20491
20490
|
const state2 = sessionStateStore.getState(sessionID);
|
|
20492
20491
|
if (state2.isRecovering) {
|
|
20493
20492
|
log(`[${HOOK_NAME}] Skipped: in recovery`, { sessionID });
|
|
20494
|
-
console.error(`[TODO-DIAG] BLOCKED: isRecovering=true`);
|
|
20495
20493
|
return;
|
|
20496
20494
|
}
|
|
20497
20495
|
if (state2.abortDetectedAt) {
|
|
20498
20496
|
const timeSinceAbort = Date.now() - state2.abortDetectedAt;
|
|
20499
20497
|
if (timeSinceAbort < ABORT_WINDOW_MS) {
|
|
20500
20498
|
log(`[${HOOK_NAME}] Skipped: abort detected via event ${timeSinceAbort}ms ago`, { sessionID });
|
|
20501
|
-
console.error(`[TODO-DIAG] BLOCKED: abort detected ${timeSinceAbort}ms ago`);
|
|
20502
20499
|
state2.abortDetectedAt = undefined;
|
|
20503
20500
|
return;
|
|
20504
20501
|
}
|
|
@@ -20507,7 +20504,6 @@ async function handleSessionIdle(args) {
|
|
|
20507
20504
|
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((task) => task.status === "running") : false;
|
|
20508
20505
|
if (hasRunningBgTasks) {
|
|
20509
20506
|
log(`[${HOOK_NAME}] Skipped: background tasks running`, { sessionID });
|
|
20510
|
-
console.error(`[TODO-DIAG] BLOCKED: background tasks running`, backgroundManager?.getTasksByParentSession(sessionID).filter((t) => t.status === "running").map((t) => t.id));
|
|
20511
20507
|
return;
|
|
20512
20508
|
}
|
|
20513
20509
|
try {
|
|
@@ -20518,12 +20514,10 @@ async function handleSessionIdle(args) {
|
|
|
20518
20514
|
const messages = normalizeSDKResponse(messagesResp, []);
|
|
20519
20515
|
if (isLastAssistantMessageAborted(messages)) {
|
|
20520
20516
|
log(`[${HOOK_NAME}] Skipped: last assistant message was aborted (API fallback)`, { sessionID });
|
|
20521
|
-
console.error(`[TODO-DIAG] BLOCKED: last assistant message aborted`);
|
|
20522
20517
|
return;
|
|
20523
20518
|
}
|
|
20524
20519
|
if (hasUnansweredQuestion(messages)) {
|
|
20525
20520
|
log(`[${HOOK_NAME}] Skipped: pending question awaiting user response`, { sessionID });
|
|
20526
|
-
console.error(`[TODO-DIAG] BLOCKED: hasUnansweredQuestion=true`);
|
|
20527
20521
|
return;
|
|
20528
20522
|
}
|
|
20529
20523
|
} catch (error) {
|
|
@@ -20535,14 +20529,12 @@ async function handleSessionIdle(args) {
|
|
|
20535
20529
|
todos = normalizeSDKResponse(response, [], { preferResponseOnMissingData: true });
|
|
20536
20530
|
} catch (error) {
|
|
20537
20531
|
log(`[${HOOK_NAME}] Todo fetch failed`, { sessionID, error: String(error) });
|
|
20538
|
-
console.error(`[TODO-DIAG] BLOCKED: todo fetch failed`, String(error));
|
|
20539
20532
|
return;
|
|
20540
20533
|
}
|
|
20541
20534
|
if (!todos || todos.length === 0) {
|
|
20542
20535
|
sessionStateStore.resetContinuationProgress(sessionID);
|
|
20543
20536
|
sessionStateStore.resetContinuationProgress(sessionID);
|
|
20544
20537
|
log(`[${HOOK_NAME}] No todos`, { sessionID });
|
|
20545
|
-
console.error(`[TODO-DIAG] BLOCKED: no todos`);
|
|
20546
20538
|
return;
|
|
20547
20539
|
}
|
|
20548
20540
|
const incompleteCount = getIncompleteCount(todos);
|
|
@@ -20550,12 +20542,10 @@ async function handleSessionIdle(args) {
|
|
|
20550
20542
|
sessionStateStore.resetContinuationProgress(sessionID);
|
|
20551
20543
|
sessionStateStore.resetContinuationProgress(sessionID);
|
|
20552
20544
|
log(`[${HOOK_NAME}] All todos complete`, { sessionID, total: todos.length });
|
|
20553
|
-
console.error(`[TODO-DIAG] BLOCKED: all todos complete (${todos.length})`);
|
|
20554
20545
|
return;
|
|
20555
20546
|
}
|
|
20556
20547
|
if (state2.inFlight) {
|
|
20557
20548
|
log(`[${HOOK_NAME}] Skipped: injection in flight`, { sessionID });
|
|
20558
|
-
console.error(`[TODO-DIAG] BLOCKED: inFlight=true`);
|
|
20559
20549
|
return;
|
|
20560
20550
|
}
|
|
20561
20551
|
if (state2.consecutiveFailures >= MAX_CONSECUTIVE_FAILURES && state2.lastInjectedAt && Date.now() - state2.lastInjectedAt >= FAILURE_RESET_WINDOW_MS) {
|
|
@@ -20564,13 +20554,11 @@ async function handleSessionIdle(args) {
|
|
|
20564
20554
|
}
|
|
20565
20555
|
if (state2.consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
|
|
20566
20556
|
log(`[${HOOK_NAME}] Skipped: max consecutive failures reached`, { sessionID, consecutiveFailures: state2.consecutiveFailures });
|
|
20567
|
-
console.error(`[TODO-DIAG] BLOCKED: consecutiveFailures=${state2.consecutiveFailures} >= ${MAX_CONSECUTIVE_FAILURES}`);
|
|
20568
20557
|
return;
|
|
20569
20558
|
}
|
|
20570
20559
|
const effectiveCooldown = CONTINUATION_COOLDOWN_MS * Math.pow(2, Math.min(state2.consecutiveFailures, 5));
|
|
20571
20560
|
if (state2.lastInjectedAt && Date.now() - state2.lastInjectedAt < effectiveCooldown) {
|
|
20572
20561
|
log(`[${HOOK_NAME}] Skipped: cooldown active`, { sessionID, effectiveCooldown, consecutiveFailures: state2.consecutiveFailures });
|
|
20573
|
-
console.error(`[TODO-DIAG] BLOCKED: cooldown active (${effectiveCooldown}ms, failures=${state2.consecutiveFailures})`);
|
|
20574
20562
|
return;
|
|
20575
20563
|
}
|
|
20576
20564
|
let resolvedInfo;
|
|
@@ -20591,12 +20579,10 @@ async function handleSessionIdle(args) {
|
|
|
20591
20579
|
const resolvedAgentName = resolvedInfo?.agent;
|
|
20592
20580
|
if (resolvedAgentName && skipAgents.some((s) => getAgentConfigKey(s) === getAgentConfigKey(resolvedAgentName))) {
|
|
20593
20581
|
log(`[${HOOK_NAME}] Skipped: agent in skipAgents list`, { sessionID, agent: resolvedAgentName });
|
|
20594
|
-
console.error(`[TODO-DIAG] BLOCKED: agent '${resolvedAgentName}' in skipAgents`);
|
|
20595
20582
|
return;
|
|
20596
20583
|
}
|
|
20597
20584
|
if ((compactionGuardActive || encounteredCompaction) && !resolvedInfo?.agent) {
|
|
20598
20585
|
log(`[${HOOK_NAME}] Skipped: compaction occurred but no agent info resolved`, { sessionID });
|
|
20599
|
-
console.error(`[TODO-DIAG] BLOCKED: compaction guard + no agent`);
|
|
20600
20586
|
return;
|
|
20601
20587
|
}
|
|
20602
20588
|
if (state2.recentCompactionAt && resolvedInfo?.agent) {
|
|
@@ -20604,20 +20590,16 @@ async function handleSessionIdle(args) {
|
|
|
20604
20590
|
}
|
|
20605
20591
|
if (isContinuationStopped?.(sessionID)) {
|
|
20606
20592
|
log(`[${HOOK_NAME}] Skipped: continuation stopped for session`, { sessionID });
|
|
20607
|
-
console.error(`[TODO-DIAG] BLOCKED: isContinuationStopped=true`);
|
|
20608
20593
|
return;
|
|
20609
20594
|
}
|
|
20610
20595
|
if (shouldSkipContinuation?.(sessionID)) {
|
|
20611
20596
|
log(`[${HOOK_NAME}] Skipped: another continuation hook already injected`, { sessionID });
|
|
20612
|
-
console.error(`[TODO-DIAG] BLOCKED: shouldSkipContinuation=true (gptPermissionContinuation recently injected)`);
|
|
20613
20597
|
return;
|
|
20614
20598
|
}
|
|
20615
20599
|
const progressUpdate = sessionStateStore.trackContinuationProgress(sessionID, incompleteCount, todos);
|
|
20616
20600
|
if (shouldStopForStagnation({ sessionID, incompleteCount, progressUpdate })) {
|
|
20617
|
-
console.error(`[TODO-DIAG] BLOCKED: stagnation detected (count=${progressUpdate.stagnationCount})`);
|
|
20618
20601
|
return;
|
|
20619
20602
|
}
|
|
20620
|
-
console.error(`[TODO-DIAG] PASSED all gates! Starting countdown (${incompleteCount}/${todos.length} incomplete)`);
|
|
20621
20603
|
startCountdown({
|
|
20622
20604
|
ctx,
|
|
20623
20605
|
sessionID,
|
|
@@ -20708,9 +20690,6 @@ function createTodoContinuationHandler(args) {
|
|
|
20708
20690
|
} = args;
|
|
20709
20691
|
return async ({ event }) => {
|
|
20710
20692
|
const props = event.properties;
|
|
20711
|
-
if (event.type === "session.idle") {
|
|
20712
|
-
console.error(`[TODO-DIAG] handler received session.idle event`, { sessionID: props?.sessionID });
|
|
20713
|
-
}
|
|
20714
20693
|
if (event.type === "session.error") {
|
|
20715
20694
|
const sessionID = props?.sessionID;
|
|
20716
20695
|
if (!sessionID)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evil-omo",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.3",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -76,17 +76,17 @@
|
|
|
76
76
|
"typescript": "^5.7.3"
|
|
77
77
|
},
|
|
78
78
|
"optionalDependencies": {
|
|
79
|
-
"evil-omo-darwin-arm64": "3.12.
|
|
80
|
-
"evil-omo-darwin-x64": "3.12.
|
|
81
|
-
"evil-omo-darwin-x64-baseline": "3.12.
|
|
82
|
-
"evil-omo-linux-x64": "3.12.
|
|
83
|
-
"evil-omo-linux-x64-baseline": "3.12.
|
|
84
|
-
"evil-omo-linux-arm64": "3.12.
|
|
85
|
-
"evil-omo-linux-x64-musl": "3.12.
|
|
86
|
-
"evil-omo-linux-x64-musl-baseline": "3.12.
|
|
87
|
-
"evil-omo-linux-arm64-musl": "3.12.
|
|
88
|
-
"evil-omo-windows-x64": "3.12.
|
|
89
|
-
"evil-omo-windows-x64-baseline": "3.12.
|
|
79
|
+
"evil-omo-darwin-arm64": "3.12.3",
|
|
80
|
+
"evil-omo-darwin-x64": "3.12.3",
|
|
81
|
+
"evil-omo-darwin-x64-baseline": "3.12.3",
|
|
82
|
+
"evil-omo-linux-x64": "3.12.3",
|
|
83
|
+
"evil-omo-linux-x64-baseline": "3.12.3",
|
|
84
|
+
"evil-omo-linux-arm64": "3.12.3",
|
|
85
|
+
"evil-omo-linux-x64-musl": "3.12.3",
|
|
86
|
+
"evil-omo-linux-x64-musl-baseline": "3.12.3",
|
|
87
|
+
"evil-omo-linux-arm64-musl": "3.12.3",
|
|
88
|
+
"evil-omo-windows-x64": "3.12.3",
|
|
89
|
+
"evil-omo-windows-x64-baseline": "3.12.3"
|
|
90
90
|
},
|
|
91
91
|
"overrides": {
|
|
92
92
|
"@opencode-ai/sdk": "^1.2.24"
|