omnius 1.0.370 → 1.0.372

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 CHANGED
@@ -295288,8 +295288,12 @@ Mark tasks complete IMMEDIATELY after finishing — don't batch. Never mark comp
295288
295288
  const closedCount = result.newTodos.filter((t2) => t2.status === "completed").length;
295289
295289
  const oldClosedCount = oldTodos.filter((t2) => t2.status === "completed").length;
295290
295290
  const justClosed = closedCount - oldClosedCount;
295291
- const hasVerifyItem = result.newTodos.some((t2) => /verif|test|check|confirm|validate/i.test(t2.content));
295292
- const verificationNudgeNeeded = justClosed >= 3 && !hasVerifyItem;
295291
+ const hasStructuredEvidence = result.newTodos.some((t2) => {
295292
+ const verifyCommand = t2.verifyCommand;
295293
+ const declaredArtifacts = t2.declaredArtifacts;
295294
+ return typeof verifyCommand === "string" && verifyCommand.trim().length > 0 || Array.isArray(declaredArtifacts) && declaredArtifacts.length > 0;
295295
+ });
295296
+ const verificationNudgeNeeded = justClosed >= 3 && !hasStructuredEvidence;
295293
295297
  const reminder = "Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Mark the current task in_progress and the next task pending. Proceed with the current task.";
295294
295298
  const payload = {
295295
295299
  reminder,
@@ -559107,6 +559111,99 @@ var init_completionLedger = __esm({
559107
559111
  }
559108
559112
  });
559109
559113
 
559114
+ // packages/orchestrator/dist/completionAutoFinalize.js
559115
+ function buildTruthBasedCompletion(input) {
559116
+ const maxAge = input.maxValidationAgeTurns ?? 8;
559117
+ if (input.todos.length === 0) {
559118
+ return { ready: false, reason: "no active todo tree" };
559119
+ }
559120
+ const open2 = input.todos.filter((todo) => todo.status !== "completed");
559121
+ if (open2.length > 0) {
559122
+ return { ready: false, reason: `${open2.length} open todo(s)` };
559123
+ }
559124
+ if (input.verifyFailureCount > 0) {
559125
+ return {
559126
+ ready: false,
559127
+ reason: `${input.verifyFailureCount} unresolved verification failure(s)`
559128
+ };
559129
+ }
559130
+ if (input.lastValidationTurn < 0 || !input.lastValidationCommand.trim()) {
559131
+ return { ready: false, reason: "no successful declared validation" };
559132
+ }
559133
+ const age = input.currentTurn - input.lastValidationTurn;
559134
+ if (age < 0 || age > maxAge) {
559135
+ return {
559136
+ ready: false,
559137
+ reason: `validation is stale (${age} turn(s) old)`
559138
+ };
559139
+ }
559140
+ const files = (input.filesEdited ?? []).filter((file) => file.path.trim().length > 0).slice(0, 12);
559141
+ const todoLines = input.todos.slice(0, 12).map((todo) => {
559142
+ const id = todo.id ? `${todo.id}: ` : "";
559143
+ return `- ${id}${todo.content}`;
559144
+ }).join("\n");
559145
+ const fileLines = files.map((file) => `- ${file.action ? `${file.action} ` : ""}${file.path}`).join("\n");
559146
+ const summary = [
559147
+ "Completed with structured task evidence.",
559148
+ `Todos completed: ${input.todos.length}/${input.todos.length}`,
559149
+ todoLines ? `Completed todo tree:
559150
+ ${todoLines}` : null,
559151
+ fileLines ? `Files changed:
559152
+ ${fileLines}` : null,
559153
+ `Validation passed: ${input.lastValidationCommand}`
559154
+ ].filter((line) => Boolean(line)).join("\n\n");
559155
+ return {
559156
+ ready: true,
559157
+ reason: `all todos completed with validation ${age} turn(s) ago`,
559158
+ summary
559159
+ };
559160
+ }
559161
+ var init_completionAutoFinalize = __esm({
559162
+ "packages/orchestrator/dist/completionAutoFinalize.js"() {
559163
+ "use strict";
559164
+ }
559165
+ });
559166
+
559167
+ // packages/orchestrator/dist/verificationCommand.js
559168
+ function normalizeShellCommand(command) {
559169
+ return command.replace(/\s+/g, " ").trim();
559170
+ }
559171
+ function splitConjunctiveVerifyCommand(command) {
559172
+ return normalizeShellCommand(command).split(/\s+&&\s+/).map((part) => part.trim()).filter(Boolean);
559173
+ }
559174
+ function commandReliablySatisfiesVerifyCommand(observedCommand, verifyCommand) {
559175
+ const observed = normalizeShellCommand(observedCommand);
559176
+ const expected = normalizeShellCommand(verifyCommand);
559177
+ if (!observed || !expected)
559178
+ return false;
559179
+ if (expected.includes(" || "))
559180
+ return false;
559181
+ if (observed === expected)
559182
+ return true;
559183
+ if (observed.startsWith(`${expected} && `) && !observed.includes(" || ")) {
559184
+ return true;
559185
+ }
559186
+ return false;
559187
+ }
559188
+ function verifyCommandSatisfiedByShellHistory(verifyCommand, history) {
559189
+ const expected = normalizeShellCommand(verifyCommand);
559190
+ if (!expected)
559191
+ return false;
559192
+ const successful = history.filter((entry) => entry.success);
559193
+ if (successful.some((entry) => commandReliablySatisfiesVerifyCommand(entry.command, expected))) {
559194
+ return true;
559195
+ }
559196
+ const parts = splitConjunctiveVerifyCommand(expected);
559197
+ if (parts.length <= 1)
559198
+ return false;
559199
+ return parts.every((part) => successful.some((entry) => commandReliablySatisfiesVerifyCommand(entry.command, part)));
559200
+ }
559201
+ var init_verificationCommand = __esm({
559202
+ "packages/orchestrator/dist/verificationCommand.js"() {
559203
+ "use strict";
559204
+ }
559205
+ });
559206
+
559110
559207
  // packages/orchestrator/dist/ollama-pool-cleanup.js
559111
559208
  var ollama_pool_cleanup_exports = {};
559112
559209
  __export(ollama_pool_cleanup_exports, {
@@ -568269,23 +568366,54 @@ function resolutionSystemPrompt() {
568269
568366
  "original request. When in doubt, resolved=false and name what is missing."
568270
568367
  ].join("\n");
568271
568368
  }
568272
- function detectExplicitDegradedCompletion(i2) {
568273
- const original = i2.originalGoal.toLowerCase();
568274
- const summary = i2.proposedSummary.toLowerCase();
568275
- const evidence = `${i2.actionsDigest}
568276
- ${i2.evidenceDigest}`.toLowerCase();
568277
- const permitsFallback = /\bif\b[\s\S]{0,160}\b(?:fails?|failed|failure|blocked|unavailable|cannot|can't|unable)\b[\s\S]{0,180}\b(?:document|report|note|record|summari[sz]e|explain)\b/.test(original) || /\b(?:document|report|note|record|summari[sz]e|explain)\b[\s\S]{0,180}\b(?:fails?|failed|failure|blocked|unavailable|cannot|can't|unable)\b/.test(original) || /\b(?:fallback|degraded|best effort|best-effort|honestly document|document honestly)\b/.test(original);
568278
- if (!permitsFallback)
568369
+ function buildDegradedCompletionPrompt(i2) {
568370
+ return [
568371
+ "Decide whether this task_complete claim should be accepted as an explicitly permitted degraded/failure-report completion.",
568372
+ "",
568373
+ "Accept only if all three are true:",
568374
+ "1. The original request explicitly permits a fallback where a failed/blocked tool or subtask is documented/reported instead of fully fixed.",
568375
+ "2. The completion claim clearly discloses the failed/blocked/degraded part.",
568376
+ "3. The actions/evidence show the requested fallback artifact/report/verification was actually produced.",
568377
+ "",
568378
+ "Reject if the request merely asks for the main work to be fixed, or if the failure disclosure/fallback evidence is missing.",
568379
+ "",
568380
+ "ORIGINAL REQUEST:",
568381
+ i2.originalGoal.slice(0, 2e3) || "(empty)",
568382
+ "",
568383
+ "ACTIONS:",
568384
+ i2.actionsDigest.slice(0, 3e3) || "(none recorded)",
568385
+ "",
568386
+ "EVIDENCE:",
568387
+ i2.evidenceDigest.slice(0, 2e3) || "(none recorded)",
568388
+ "",
568389
+ "COMPLETION CLAIM:",
568390
+ i2.proposedSummary.slice(0, 1500) || "(empty)",
568391
+ "",
568392
+ 'Return only JSON: {"accepted":true|false,"confidence":0.0-1.0,"reason":"one sentence"}'
568393
+ ].join("\n");
568394
+ }
568395
+ function parseDegradedCompletionVerdict(raw) {
568396
+ if (!raw)
568279
568397
  return null;
568280
- const disclosesFailure = /\b(?:fail(?:ed|ure)?|blocked|unable|could not|couldn't|cannot|can't|degraded|partial|not available|unavailable)\b/.test(summary);
568281
- if (!disclosesFailure)
568398
+ const text2 = raw.trim().replace(/^```(?:json)?/i, "").replace(/```$/i, "").trim();
568399
+ const start2 = text2.indexOf("{");
568400
+ const end = text2.lastIndexOf("}");
568401
+ if (start2 < 0 || end <= start2)
568282
568402
  return null;
568283
- const hasFallbackEvidence = /\b(?:passed|success|succeeded|verified|wrote|created|saved|report|artifact|file changed|files changed|last test outcome: passed|exit code 0)\b/.test(evidence) || /\b(?:verifier|verification|report)\b/.test(summary);
568284
- if (!hasFallbackEvidence)
568403
+ let obj;
568404
+ try {
568405
+ obj = JSON.parse(text2.slice(start2, end + 1));
568406
+ } catch {
568285
568407
  return null;
568408
+ }
568409
+ let confidence2 = Number(obj["confidence"]);
568410
+ if (!Number.isFinite(confidence2))
568411
+ confidence2 = 0.5;
568412
+ confidence2 = Math.min(1, Math.max(0, confidence2));
568286
568413
  return {
568287
- accepted: true,
568288
- reason: "original request explicitly allowed a degraded/failure-report fallback and the completion disclosed the failure with fallback evidence"
568414
+ accepted: obj["accepted"] === true,
568415
+ confidence: confidence2,
568416
+ reason: String(obj["reason"] ?? "").slice(0, 500)
568289
568417
  };
568290
568418
  }
568291
568419
  function buildResolutionPrompt(i2) {
@@ -570104,7 +570232,7 @@ RECOVERY: cd to the directory containing '${file}', run a plain install with no
570104
570232
  });
570105
570233
 
570106
570234
  // packages/orchestrator/dist/agenticRunner.js
570107
- import { existsSync as _fsExistsSync, readFileSync as _fsReadFileSync, writeFileSync as _fsWriteFileSync, appendFileSync as _fsAppendFileSync, unlinkSync as _fsUnlinkSync, mkdirSync as _fsMkdirSync, statSync as _fsStatSync } from "node:fs";
570235
+ import { existsSync as _fsExistsSync, readFileSync as _fsReadFileSync, writeFileSync as _fsWriteFileSync, appendFileSync as _fsAppendFileSync, unlinkSync as _fsUnlinkSync, mkdirSync as _fsMkdirSync, statSync as _fsStatSync, readdirSync as _fsReaddirSync } from "node:fs";
570108
570236
  import { execFile as _execFile, spawn as _spawn } from "node:child_process";
570109
570237
  import { createHash as _createHash } from "node:crypto";
570110
570238
  import { join as _pathJoin, resolve as _pathResolve } from "node:path";
@@ -570629,6 +570757,8 @@ var init_agenticRunner = __esm({
570629
570757
  init_permissionRuleset();
570630
570758
  init_steeringIntake();
570631
570759
  init_completionLedger();
570760
+ init_completionAutoFinalize();
570761
+ init_verificationCommand();
570632
570762
  init_dist6();
570633
570763
  init_ollama_pool();
570634
570764
  init_personality();
@@ -570867,6 +570997,7 @@ var init_agenticRunner = __esm({
570867
570997
  _lastBuildSuccessCommand = "";
570868
570998
  // REG-31: prevent duplicate completion suggestion per turn
570869
570999
  _completionPromptInjectedThisTurn = false;
571000
+ _truthAutoCompleteBlockedValidationTurn = -1;
570870
571001
  // REG-32: one-shot per-stem nudge toward local triage on opaque errors.
570871
571002
  // Closes the gap where qwen3.6 pivots away from a single failure (different
570872
571003
  // stem on next turn) and never triggers REG-26/28's retry-based local
@@ -570907,6 +571038,8 @@ var init_agenticRunner = __esm({
570907
571038
  // unresolved verification failure. Effectively gates task_complete
570908
571039
  // suggestion behind real verification, not just self-report.
570909
571040
  _verifyFailures = /* @__PURE__ */ new Set();
571041
+ _verifyCommandFailures = /* @__PURE__ */ new Set();
571042
+ _artifactInspectionFailures = /* @__PURE__ */ new Set();
570910
571043
  // REG-37e: track whether we've already nudged the agent about the
570911
571044
  // verifyCommand / declaredArtifacts fields. Empirical observation
570912
571045
  // from run #15: across 30 todo_writes, agent set neither field
@@ -572529,6 +572662,35 @@ Pick the SMALLEST concrete deliverable from the spec — typically the project e
572529
572662
  return null;
572530
572663
  }
572531
572664
  }
572665
+ _normalizeCommandForValidationMatch(command) {
572666
+ return normalizeShellCommand(command);
572667
+ }
572668
+ _matchedDeclaredVerifyCommand(command) {
572669
+ if (!this._normalizeCommandForValidationMatch(command))
572670
+ return null;
572671
+ const todos = this.readSessionTodos() || [];
572672
+ let best = null;
572673
+ for (const todo of todos) {
572674
+ const verifyCommand = typeof todo.verifyCommand === "string" ? todo.verifyCommand : "";
572675
+ if (commandReliablySatisfiesVerifyCommand(command, verifyCommand)) {
572676
+ const trimmed = verifyCommand.trim();
572677
+ if (!best || trimmed.length > best.length)
572678
+ best = trimmed;
572679
+ }
572680
+ }
572681
+ return best;
572682
+ }
572683
+ _shellCommandFromArgsKey(argsKey) {
572684
+ const parsed = this._parseExactArgsKey(argsKey);
572685
+ return parsed.get("command") ?? parsed.get("cmd") ?? "";
572686
+ }
572687
+ _refreshTodoVerificationFailure(content) {
572688
+ if (this._verifyCommandFailures.has(content) || this._artifactInspectionFailures.has(content)) {
572689
+ this._verifyFailures.add(content);
572690
+ } else {
572691
+ this._verifyFailures.delete(content);
572692
+ }
572693
+ }
572532
572694
  _isProjectEditTool(toolName) {
572533
572695
  return toolName === "file_write" || toolName === "file_edit" || toolName === "batch_edit" || toolName === "file_patch";
572534
572696
  }
@@ -573007,6 +573169,43 @@ ${input.answerText ?? ""}`.toLowerCase().trim();
573007
573169
  ].join("\n");
573008
573170
  return { proceed: false, feedback, reason };
573009
573171
  }
573172
+ async _inferExplicitDegradedCompletion(input) {
573173
+ try {
573174
+ this._emitModelResolutionTelemetry("explicit_degraded_completion", input.turn);
573175
+ const backend = this._auxInferenceBackend();
573176
+ const resp = await backend.chatCompletion({
573177
+ messages: [
573178
+ {
573179
+ role: "system",
573180
+ content: "You are a strict completion-contract classifier. Return only JSON."
573181
+ },
573182
+ {
573183
+ role: "user",
573184
+ content: buildDegradedCompletionPrompt({
573185
+ originalGoal: input.originalGoal,
573186
+ actionsDigest: input.actionsDigest,
573187
+ evidenceDigest: input.evidenceDigest,
573188
+ proposedSummary: input.proposedSummary
573189
+ })
573190
+ }
573191
+ ],
573192
+ tools: [],
573193
+ temperature: 0,
573194
+ maxTokens: 400,
573195
+ timeoutMs: 2e4
573196
+ });
573197
+ const verdict = parseDegradedCompletionVerdict(resp.choices?.[0]?.message?.content ?? "");
573198
+ if (verdict?.accepted && verdict.confidence >= 0.6) {
573199
+ return {
573200
+ accepted: true,
573201
+ reason: verdict.reason || "inference classified this as an explicitly permitted degraded completion"
573202
+ };
573203
+ }
573204
+ return null;
573205
+ } catch {
573206
+ return null;
573207
+ }
573208
+ }
573010
573209
  /**
573011
573210
  * REG-47: post-implementation backward-pass review.
573012
573211
  *
@@ -573076,12 +573275,13 @@ ${shellLines.join("\n")}` : "Commands run: none"
573076
573275
  const failCount = toolCallLog.filter((e2) => e2.success === false).length;
573077
573276
  evidenceParts.push(`Failed tool calls this run: ${failCount}`);
573078
573277
  const evidenceDigest = evidenceParts.join("\n");
573079
- const degraded = detectExplicitDegradedCompletion({
573278
+ const degraded = failCount > 0 ? await this._inferExplicitDegradedCompletion({
573279
+ turn,
573080
573280
  originalGoal,
573081
573281
  actionsDigest,
573082
573282
  evidenceDigest,
573083
573283
  proposedSummary
573084
- });
573284
+ }) : null;
573085
573285
  if (degraded) {
573086
573286
  this._resolutionGateRejections = 0;
573087
573287
  this.emit({
@@ -577162,12 +577362,36 @@ TASK: ${scrubbedTask}` : scrubbedTask;
577162
577362
  });
577163
577363
  return true;
577164
577364
  };
577365
+ const holdUnresolvedVerificationTaskComplete = (turn) => {
577366
+ if (this._verifyFailures.size === 0)
577367
+ return false;
577368
+ const failures = [...this._verifyFailures].slice(0, 8);
577369
+ const feedback = [
577370
+ `[COMPLETION BLOCKED — unresolved todo verification]`,
577371
+ `The active todo list still contains completed items whose required evidence has not been satisfied.`,
577372
+ ``,
577373
+ `Unresolved verification item(s):`,
577374
+ ...failures.map((item) => ` - ${item}`),
577375
+ ``,
577376
+ `Run the missing verifyCommand exactly, repair the todo evidence, or mark the todo blocked. Do not call task_complete until the verification state is clean.`
577377
+ ].join("\n");
577378
+ lastCompletionGateReason = `${this._verifyFailures.size} unresolved todo verification failure(s)`;
577379
+ lastCompletionGateFeedback = feedback;
577380
+ messages2.push({ role: "system", content: feedback });
577381
+ this.emit({
577382
+ type: "status",
577383
+ content: `task_complete held by todo verification gate: ${lastCompletionGateReason}`,
577384
+ turn,
577385
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
577386
+ });
577387
+ return true;
577388
+ };
577165
577389
  const completionHoldEscapeMax = (() => {
577166
577390
  const raw = Number(process.env["OMNIUS_COMPLETION_HOLD_MAX"]);
577167
577391
  return Number.isFinite(raw) && raw >= 1 ? Math.floor(raw) : 3;
577168
577392
  })();
577169
577393
  const holdTaskCompleteGates = (args, turn) => {
577170
- const held = holdNoProgressTaskComplete(args, turn) || holdProvenanceTaskComplete(args, turn);
577394
+ const held = holdUnresolvedVerificationTaskComplete(turn) || holdNoProgressTaskComplete(args, turn) || holdProvenanceTaskComplete(args, turn);
577171
577395
  if (!held) {
577172
577396
  this._completionHoldState.count = 0;
577173
577397
  this._completionHoldState.lastKey = "";
@@ -577306,6 +577530,59 @@ TASK: ${scrubbedTask}` : scrubbedTask;
577306
577530
  this._artifactInspectionDoneThisTurn.clear();
577307
577531
  try {
577308
577532
  const _todos = this.readSessionTodos() || [];
577533
+ const _truthCompletion = buildTruthBasedCompletion({
577534
+ todos: _todos,
577535
+ currentTurn: turn,
577536
+ lastValidationTurn: this._lastBuildSuccessTurn,
577537
+ lastValidationCommand: this._lastBuildSuccessCommand,
577538
+ verifyFailureCount: this._verifyFailures.size,
577539
+ filesEdited: [...this._taskState.modifiedFiles.entries()].map(([path12, action]) => ({ path: path12, action }))
577540
+ });
577541
+ if (process.env["OMNIUS_DISABLE_TRUTH_AUTOCOMPLETE"] !== "1" && _truthCompletion.ready && this._truthAutoCompleteBlockedValidationTurn !== this._lastBuildSuccessTurn) {
577542
+ const _summary = _truthCompletion.summary || "Completed.";
577543
+ const _args = { summary: _summary };
577544
+ if (holdTaskCompleteGates(_args, turn)) {
577545
+ this._truthAutoCompleteBlockedValidationTurn = this._lastBuildSuccessTurn;
577546
+ if (this._completionIncompleteVerification)
577547
+ break;
577548
+ continue;
577549
+ }
577550
+ const _bpTruth = await this._runBackwardPassReview(turn, toolCallLog, _summary);
577551
+ if (_bpTruth && !_bpTruth.proceed) {
577552
+ this._truthAutoCompleteBlockedValidationTurn = this._lastBuildSuccessTurn;
577553
+ if (_bpTruth.feedback)
577554
+ emitBackwardPassAdvisory(_bpTruth.feedback, turn);
577555
+ if (this._completionIncompleteVerification)
577556
+ break;
577557
+ continue;
577558
+ }
577559
+ completed = true;
577560
+ summary = _summary;
577561
+ this.emit({
577562
+ type: "status",
577563
+ content: `REG-31: truth-based completion synthesized (${_truthCompletion.reason})`,
577564
+ turn,
577565
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
577566
+ });
577567
+ this._onTypedEvent?.({
577568
+ type: "completion_requested",
577569
+ runId: this._sessionId ?? "unknown",
577570
+ summary: summary.slice(0, 500),
577571
+ sourcePath: "direct",
577572
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
577573
+ });
577574
+ if (summary && !this._assistantTextEmitted) {
577575
+ this.emit({
577576
+ type: "assistant_text",
577577
+ content: summary,
577578
+ source: "task_complete_summary",
577579
+ turn,
577580
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
577581
+ });
577582
+ this._assistantTextEmitted = true;
577583
+ }
577584
+ break;
577585
+ }
577309
577586
  if (_todos.length > 0 && _todos.every((t2) => t2.status === "completed") && this._lastBuildSuccessTurn >= 0 && turn - this._lastBuildSuccessTurn <= 8 && this._verifyFailures.size === 0 && !this._completionPromptInjectedThisTurn) {
577310
577587
  this._completionPromptInjectedThisTurn = true;
577311
577588
  messages2.push({
@@ -579319,14 +579596,14 @@ Corrective action: try a different approach first: read relevant files, adjust a
579319
579596
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
579320
579597
  });
579321
579598
  try {
579322
- const archDir = __require("node:path").join(this.omniusStateDir(), "phases");
579323
- __require("node:fs").mkdirSync(archDir, { recursive: true });
579599
+ const archDir = _pathJoin(this.omniusStateDir(), "phases");
579600
+ _fsMkdirSync(archDir, { recursive: true });
579324
579601
  for (const phaseName of contracted) {
579325
579602
  const node = this._contextTree.getSnapshot().phases[phaseName];
579326
579603
  if (!node)
579327
579604
  continue;
579328
579605
  const stamp = `${phaseName}-${Date.now().toString(36)}-turn${turn}`;
579329
- const archPath = __require("node:path").join(archDir, `${stamp}.jsonl`);
579606
+ const archPath = _pathJoin(archDir, `${stamp}.jsonl`);
579330
579607
  const archived = {
579331
579608
  phase: phaseName,
579332
579609
  contractedAtTurn: turn,
@@ -579335,7 +579612,7 @@ Corrective action: try a different approach first: read relevant files, adjust a
579335
579612
  summary: node.summary ?? null,
579336
579613
  messages: node.messages ?? []
579337
579614
  };
579338
- __require("node:fs").writeFileSync(archPath, JSON.stringify(archived) + "\n", "utf-8");
579615
+ _fsWriteFileSync(archPath, JSON.stringify(archived) + "\n", "utf-8");
579339
579616
  this._contextTree.archive(phaseName, archPath);
579340
579617
  }
579341
579618
  this.emit({
@@ -580452,9 +580729,12 @@ Respond with EXACTLY this structure before your next tool call:
580452
580729
  }
580453
580730
  if (tc.name === "shell") {
580454
580731
  const _shellCmd2 = String(tc.arguments?.["command"] ?? tc.arguments?.["cmd"] ?? "");
580455
- if (/\b(build|test|run\b|start\b|serve\b|verify|check)\b/i.test(_shellCmd2)) {
580732
+ const _declaredVerify = this._matchedDeclaredVerifyCommand(_shellCmd2);
580733
+ const _legacyGenericValidation = process.env["OMNIUS_ENABLE_GENERIC_COMPLETION_COMMAND_HEURISTIC"] === "1" && /\b(build|test|run\b|start\b|serve\b|verify|check)\b/i.test(_shellCmd2);
580734
+ if (_declaredVerify || _legacyGenericValidation) {
580456
580735
  this._lastBuildSuccessTurn = turn;
580457
- this._lastBuildSuccessCommand = _shellCmd2.slice(0, 200);
580736
+ this._lastBuildSuccessCommand = (_declaredVerify || _shellCmd2).slice(0, 200);
580737
+ this._truthAutoCompleteBlockedValidationTurn = -1;
580458
580738
  }
580459
580739
  }
580460
580740
  if (tc.name === "todo_write") {
@@ -580525,16 +580805,17 @@ Respond with EXACTLY this structure before your next tool call:
580525
580805
  continue;
580526
580806
  const _vc = _t.verifyCommand;
580527
580807
  if (_vc && typeof _vc === "string" && !this._verifyHintInjectedThisTurn.has(_t.content)) {
580528
- const _verified = toolCallLog.slice(-15).some((c8) => {
580529
- if (c8.name !== "shell" || c8.success !== true)
580530
- return false;
580531
- const _argsStr = c8.argsKey ?? "";
580532
- return _argsStr.includes(_vc.slice(0, 80));
580533
- });
580808
+ const _history = toolCallLog.slice(-15).filter((c8) => c8.name === "shell").map((c8) => ({
580809
+ command: this._shellCommandFromArgsKey(c8.argsKey),
580810
+ success: c8.success === true
580811
+ }));
580812
+ const _verified = verifyCommandSatisfiedByShellHistory(_vc, _history);
580534
580813
  if (_verified) {
580535
- this._verifyFailures.delete(_t.content);
580814
+ this._verifyCommandFailures.delete(_t.content);
580815
+ this._refreshTodoVerificationFailure(_t.content);
580536
580816
  } else {
580537
- this._verifyFailures.add(_t.content);
580817
+ this._verifyCommandFailures.add(_t.content);
580818
+ this._refreshTodoVerificationFailure(_t.content);
580538
580819
  this._verifyHintInjectedThisTurn.add(_t.content);
580539
580820
  messages2.push({
580540
580821
  role: "system",
@@ -580551,6 +580832,9 @@ Respond with EXACTLY this structure before your next tool call:
580551
580832
  ].join("\n")
580552
580833
  });
580553
580834
  }
580835
+ } else {
580836
+ this._verifyCommandFailures.delete(_t.content);
580837
+ this._refreshTodoVerificationFailure(_t.content);
580554
580838
  }
580555
580839
  if (!this._artifactInspectionDoneThisTurn.has(_t.content)) {
580556
580840
  this._artifactInspectionDoneThisTurn.add(_t.content);
@@ -580570,13 +580854,15 @@ Respond with EXACTLY this structure before your next tool call:
580570
580854
  });
580571
580855
  const _hadSomethingToCheck = Array.isArray(_declared) && _declared.length > 0 || extractCandidatePaths(_t.content).length > 0;
580572
580856
  if (!_inspect.ok) {
580573
- this._verifyFailures.add(_t.content);
580857
+ this._artifactInspectionFailures.add(_t.content);
580858
+ this._refreshTodoVerificationFailure(_t.content);
580574
580859
  messages2.push({
580575
580860
  role: "system",
580576
580861
  content: _inspect.critique
580577
580862
  });
580578
580863
  } else if (_hadSomethingToCheck) {
580579
- this._verifyFailures.delete(_t.content);
580864
+ this._artifactInspectionFailures.delete(_t.content);
580865
+ this._refreshTodoVerificationFailure(_t.content);
580580
580866
  }
580581
580867
  }
580582
580868
  }
@@ -582558,8 +582844,9 @@ Full content available via: repl_exec(code="data = retrieve('${handleId}')") or
582558
582844
  }
582559
582845
  }
582560
582846
  const durationMs = Date.now() - start2;
582561
- if (this._completionIncompleteVerification && !summary) {
582562
- summary = this._completionIncompleteVerification.summary;
582847
+ const incompleteVerification = this._completionIncompleteVerification;
582848
+ if (incompleteVerification && !summary) {
582849
+ summary = incompleteVerification.summary;
582563
582850
  }
582564
582851
  if (completed && this._completionCaveat) {
582565
582852
  summary = summary ? `${summary}
@@ -583097,10 +583384,8 @@ ${caveat}` : caveat;
583097
583384
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
583098
583385
  });
583099
583386
  try {
583100
- const { mkdirSync: mkdirSync106, readdirSync: readdirSync59, statSync: statSync59, unlinkSync: unlinkSync36, writeFileSync: writeFileSync90 } = __require("node:fs");
583101
- const { join: join179 } = __require("node:path");
583102
- const contextDir = join179(this._workingDirectory || process.cwd(), ".omnius", "context");
583103
- mkdirSync106(contextDir, { recursive: true });
583387
+ const contextDir = _pathJoin(this._workingDirectory || process.cwd(), ".omnius", "context");
583388
+ _fsMkdirSync(contextDir, { recursive: true });
583104
583389
  const topEntities = this._temporalGraph.nodesByType("entity", 3);
583105
583390
  const topFiles = this._temporalGraph.nodesByType("file", 3);
583106
583391
  const topConcepts = this._temporalGraph.nodesByType("concept", 3);
@@ -583140,18 +583425,18 @@ ${caveat}` : caveat;
583140
583425
  section("Top Files", topFiles);
583141
583426
  section("Top Concepts", topConcepts);
583142
583427
  lines.push("(Use file_read on this file for quick recall. See provenance JSON for full edge detail.)");
583143
- const kgSummaryDir = join179(contextDir, "kg-summary");
583144
- mkdirSync106(kgSummaryDir, { recursive: true });
583428
+ const kgSummaryDir = _pathJoin(contextDir, "kg-summary");
583429
+ _fsMkdirSync(kgSummaryDir, { recursive: true });
583145
583430
  const summaryFilename = `kg-summary-${this._sessionId}.md`;
583146
- const outPath = join179(kgSummaryDir, summaryFilename);
583147
- writeFileSync90(outPath, lines.join("\n"), "utf-8");
583148
- writeFileSync90(join179(kgSummaryDir, "latest.md"), lines.join("\n"), "utf-8");
583149
- writeFileSync90(join179(contextDir, `kg-summary-latest.md`), [
583431
+ const outPath = _pathJoin(kgSummaryDir, summaryFilename);
583432
+ _fsWriteFileSync(outPath, lines.join("\n"), "utf-8");
583433
+ _fsWriteFileSync(_pathJoin(kgSummaryDir, "latest.md"), lines.join("\n"), "utf-8");
583434
+ _fsWriteFileSync(_pathJoin(contextDir, `kg-summary-latest.md`), [
583150
583435
  "Latest KG summary moved to `.omnius/context/kg-summary/latest.md`.",
583151
583436
  "",
583152
583437
  lines.join("\n")
583153
583438
  ].join("\n"), "utf-8");
583154
- writeFileSync90(join179(kgSummaryDir, "index.json"), JSON.stringify({
583439
+ _fsWriteFileSync(_pathJoin(kgSummaryDir, "index.json"), JSON.stringify({
583155
583440
  schema: "omnius.kg-summary-index.v1",
583156
583441
  latest: "latest.md",
583157
583442
  latestSessionFile: summaryFilename,
@@ -583162,9 +583447,9 @@ ${caveat}` : caveat;
583162
583447
  const maxAgeDays = parseInt(process.env["OMNIUS_KG_SUMMARY_MAX_AGE_DAYS"] || "7", 10) || 7;
583163
583448
  const maxFiles = parseInt(process.env["OMNIUS_KG_SUMMARY_MAX_FILES"] || "60", 10) || 60;
583164
583449
  const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1e3;
583165
- const summaries = readdirSync59(kgSummaryDir).filter((name10) => name10.startsWith("kg-summary-") && name10.endsWith(".md")).map((name10) => {
583166
- const filePath = join179(kgSummaryDir, name10);
583167
- const stat8 = statSync59(filePath);
583450
+ const summaries = _fsReaddirSync(kgSummaryDir).filter((name10) => name10.startsWith("kg-summary-") && name10.endsWith(".md")).map((name10) => {
583451
+ const filePath = _pathJoin(kgSummaryDir, name10);
583452
+ const stat8 = _fsStatSync(filePath);
583168
583453
  return { filePath, mtimeMs: stat8.mtimeMs };
583169
583454
  }).sort((a2, b) => b.mtimeMs - a2.mtimeMs);
583170
583455
  const toDelete = /* @__PURE__ */ new Set();
@@ -583177,7 +583462,7 @@ ${caveat}` : caveat;
583177
583462
  }
583178
583463
  for (const filePath of toDelete) {
583179
583464
  try {
583180
- unlinkSync36(filePath);
583465
+ _fsUnlinkSync(filePath);
583181
583466
  } catch {
583182
583467
  }
583183
583468
  }
@@ -583988,10 +584273,8 @@ Actions: (1) list_directory on the parent directory to see what's there, (2) Che
583988
584273
  if (!this._workingDirectory)
583989
584274
  return;
583990
584275
  try {
583991
- const { mkdirSync: mkdirSync106, writeFileSync: writeFileSync90 } = __require("node:fs");
583992
- const { join: join179 } = __require("node:path");
583993
- const sessionDir2 = this.options.stateDir ? join179(this.omniusStateDir(), "session", this._sessionId) : join179(this._workingDirectory, ".omnius", "session", this._sessionId);
583994
- mkdirSync106(sessionDir2, { recursive: true });
584276
+ const sessionDir2 = this.options.stateDir ? _pathJoin(this.omniusStateDir(), "session", this._sessionId) : _pathJoin(this._workingDirectory, ".omnius", "session", this._sessionId);
584277
+ _fsMkdirSync(sessionDir2, { recursive: true });
583995
584278
  const checkpoint = {
583996
584279
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
583997
584280
  sessionId: this._sessionId,
@@ -584003,7 +584286,7 @@ Actions: (1) list_directory on the parent directory to see what's there, (2) Che
584003
584286
  memexEntryCount: this._memexArchive.size,
584004
584287
  fileRegistrySize: this._fileRegistry.size
584005
584288
  };
584006
- writeFileSync90(join179(sessionDir2, "checkpoint.json"), JSON.stringify(checkpoint, null, 2));
584289
+ _fsWriteFileSync(_pathJoin(sessionDir2, "checkpoint.json"), JSON.stringify(checkpoint, null, 2));
584007
584290
  } catch {
584008
584291
  }
584009
584292
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.370",
3
+ "version": "1.0.372",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.370",
9
+ "version": "1.0.372",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
@@ -502,9 +502,9 @@
502
502
  }
503
503
  },
504
504
  "node_modules/@ipld/dag-pb/node_modules/multiformats": {
505
- "version": "14.0.2",
506
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
507
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
505
+ "version": "14.0.3",
506
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
507
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
508
508
  "license": "Apache-2.0 OR MIT"
509
509
  },
510
510
  "node_modules/@ipshipyard/libp2p-auto-tls": {
@@ -553,9 +553,9 @@
553
553
  }
554
554
  },
555
555
  "node_modules/@ipshipyard/libp2p-auto-tls/node_modules/multiformats": {
556
- "version": "14.0.2",
557
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
558
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
556
+ "version": "14.0.3",
557
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
558
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
559
559
  "license": "Apache-2.0 OR MIT"
560
560
  },
561
561
  "node_modules/@ipshipyard/libp2p-auto-tls/node_modules/uint8arrays": {
@@ -765,9 +765,9 @@
765
765
  }
766
766
  },
767
767
  "node_modules/@libp2p/http-utils/node_modules/multiformats": {
768
- "version": "14.0.2",
769
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
770
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
768
+ "version": "14.0.3",
769
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
770
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
771
771
  "license": "Apache-2.0 OR MIT"
772
772
  },
773
773
  "node_modules/@libp2p/http-utils/node_modules/uint8arraylist": {
@@ -807,9 +807,9 @@
807
807
  }
808
808
  },
809
809
  "node_modules/@libp2p/http-websocket/node_modules/multiformats": {
810
- "version": "14.0.2",
811
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
812
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
810
+ "version": "14.0.3",
811
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
812
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
813
813
  "license": "Apache-2.0 OR MIT"
814
814
  },
815
815
  "node_modules/@libp2p/http-websocket/node_modules/uint8arraylist": {
@@ -1045,9 +1045,9 @@
1045
1045
  }
1046
1046
  },
1047
1047
  "node_modules/@libp2p/peer-record/node_modules/multiformats": {
1048
- "version": "14.0.2",
1049
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1050
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1048
+ "version": "14.0.3",
1049
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1050
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1051
1051
  "license": "Apache-2.0 OR MIT"
1052
1052
  },
1053
1053
  "node_modules/@libp2p/peer-record/node_modules/protons-runtime": {
@@ -1155,9 +1155,9 @@
1155
1155
  }
1156
1156
  },
1157
1157
  "node_modules/@libp2p/record/node_modules/multiformats": {
1158
- "version": "14.0.2",
1159
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1160
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1158
+ "version": "14.0.3",
1159
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1160
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1161
1161
  "license": "Apache-2.0 OR MIT"
1162
1162
  },
1163
1163
  "node_modules/@libp2p/record/node_modules/protons-runtime": {
@@ -1393,9 +1393,9 @@
1393
1393
  }
1394
1394
  },
1395
1395
  "node_modules/@libp2p/webrtc/node_modules/multiformats": {
1396
- "version": "14.0.2",
1397
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1398
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1396
+ "version": "14.0.3",
1397
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1398
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1399
1399
  "license": "Apache-2.0 OR MIT"
1400
1400
  },
1401
1401
  "node_modules/@libp2p/webrtc/node_modules/node-datachannel": {
@@ -1534,9 +1534,9 @@
1534
1534
  }
1535
1535
  },
1536
1536
  "node_modules/@multiformats/dns/node_modules/multiformats": {
1537
- "version": "14.0.2",
1538
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1539
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1537
+ "version": "14.0.3",
1538
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1539
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1540
1540
  "license": "Apache-2.0 OR MIT"
1541
1541
  },
1542
1542
  "node_modules/@multiformats/dns/node_modules/uint8arrays": {
@@ -1579,9 +1579,9 @@
1579
1579
  }
1580
1580
  },
1581
1581
  "node_modules/@multiformats/multiaddr/node_modules/multiformats": {
1582
- "version": "14.0.2",
1583
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1584
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1582
+ "version": "14.0.3",
1583
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1584
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1585
1585
  "license": "Apache-2.0 OR MIT"
1586
1586
  },
1587
1587
  "node_modules/@multiformats/multiaddr/node_modules/uint8-varint": {
@@ -1626,9 +1626,9 @@
1626
1626
  }
1627
1627
  },
1628
1628
  "node_modules/@multiformats/murmur3/node_modules/multiformats": {
1629
- "version": "14.0.2",
1630
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
1631
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
1629
+ "version": "14.0.3",
1630
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
1631
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
1632
1632
  "license": "Apache-2.0 OR MIT"
1633
1633
  },
1634
1634
  "node_modules/@multiformats/uri-to-multiaddr": {
@@ -3919,9 +3919,9 @@
3919
3919
  }
3920
3920
  },
3921
3921
  "node_modules/hamt-sharding/node_modules/multiformats": {
3922
- "version": "14.0.2",
3923
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
3924
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
3922
+ "version": "14.0.3",
3923
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
3924
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
3925
3925
  "license": "Apache-2.0 OR MIT"
3926
3926
  },
3927
3927
  "node_modules/hamt-sharding/node_modules/uint8arrays": {
@@ -4685,9 +4685,9 @@
4685
4685
  }
4686
4686
  },
4687
4687
  "node_modules/it-protobuf-stream/node_modules/multiformats": {
4688
- "version": "14.0.2",
4689
- "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.2.tgz",
4690
- "integrity": "sha512-sF7F3gBKCyehzIhDwVuTRf79TZ8qWRz5NXwWYBX+4a+n22KcFqqcDYJvZr7tySrI0MhuTBXVOlo3qMTiAHC78g==",
4688
+ "version": "14.0.3",
4689
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.3.tgz",
4690
+ "integrity": "sha512-l7FEUCJb3tx1UWeovywhaidQdOGQOOKTfl51G2y6CQbcOHe9dp3z90NHqQ3v2SKetKgkxwa3wI+2jsyJrjJjTg==",
4691
4691
  "license": "Apache-2.0 OR MIT"
4692
4692
  },
4693
4693
  "node_modules/it-protobuf-stream/node_modules/uint8arraylist": {
@@ -5388,9 +5388,9 @@
5388
5388
  }
5389
5389
  },
5390
5390
  "node_modules/node-abi": {
5391
- "version": "3.92.0",
5392
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz",
5393
- "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==",
5391
+ "version": "3.93.0",
5392
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.93.0.tgz",
5393
+ "integrity": "sha512-Cu6yUpX5Iavugm8BeX7c0wgU9CvOqfd1yM6A1d2q2ZMjym7GjpASv2GdRcTq3Fx+Sb5OgBkEEpw4VnAbY6Y5RA==",
5394
5394
  "license": "MIT",
5395
5395
  "dependencies": {
5396
5396
  "semver": "^7.3.5"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.370",
3
+ "version": "1.0.372",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",