omnius 1.0.702 → 1.0.703

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
@@ -683247,16 +683247,70 @@ ${related.content}`),
683247
683247
  "[/ACTIVE USER STEERING]"
683248
683248
  ].filter(Boolean).join("\n");
683249
683249
  }
683250
+ // Upper bound on how many model turns an admitted steering input may be
683251
+ // re-injected while it remains completely un-reconciled. A well-behaved
683252
+ // model reconciles a media/additive follow-up in one turn; anything past
683253
+ // this budget is a stuck reconciliation, not deliberation.
683254
+ static STEERING_RECONCILIATION_TURN_BUDGET = 6;
683250
683255
  _markActiveSteeringVisible(turn) {
683251
683256
  const active = this._activeSteering;
683252
683257
  if (!active || isSteeringScopeResolved(active) || active.visibleRequestTurns.includes(turn))
683253
683258
  return;
683259
+ if (this._maybeAutoResolveUnreconciledSteering(active, turn))
683260
+ return;
683254
683261
  active.visibleRequestTurns.push(turn);
683255
683262
  for (const input of [active.input, ...active.relatedInputs ?? []]) {
683256
683263
  input.state = "visible_in_request";
683257
683264
  this._emitSteeringLifecycle(input, `visible in model request at turn ${turn}`);
683258
683265
  }
683259
683266
  }
683267
+ /**
683268
+ * Force-resolve an admitted steering input that the model has left entirely
683269
+ * un-reconciled for longer than the reconciliation turn budget.
683270
+ *
683271
+ * The reconciliation gate keeps a mid-run steering input in front of the
683272
+ * model — re-injecting the ACTIVE USER STEERING slot on every request — until
683273
+ * the model emits a valid [STEERING_RECONCILIATION] decision. When the model
683274
+ * never emits one (observed repeatedly with smaller local models when the
683275
+ * steering is a media/attachment follow-up), the scope stays gated forever:
683276
+ * the slot, including the attachment summary, is re-sent turn after turn and
683277
+ * re-rendered in the Telegram transcript, producing an unbounded "heard
683278
+ * media …" loop and severe context bloat.
683279
+ *
683280
+ * When the budget is exhausted we apply the documented default for
683281
+ * additive/media-only steering (taskDisposition = continue): the input stays
683282
+ * retained as context, the old plan is un-gated, and re-injection stops. A
683283
+ * replacement is never forced — that must remain an explicit model decision.
683284
+ * Only the pure "no reconciliation at all" stall is handled here; a model
683285
+ * advancing through evidence phases holds a live reconciliation object and is
683286
+ * making genuine progress, so it is left untouched.
683287
+ */
683288
+ _maybeAutoResolveUnreconciledSteering(active, turn) {
683289
+ if (isSteeringScopeResolved(active))
683290
+ return false;
683291
+ if (!active.requiresReconciliation || active.reconciliation)
683292
+ return false;
683293
+ if (active.visibleRequestTurns.length < _AgenticRunner.STEERING_RECONCILIATION_TURN_BUDGET)
683294
+ return false;
683295
+ const reinjections = active.visibleRequestTurns.length;
683296
+ const forced = {
683297
+ inputId: active.input.inputId,
683298
+ status: "applied",
683299
+ changedConstraints: [],
683300
+ revisedNextAction: "Continue the current task. The delivered user attachment/message is retained as additive context.",
683301
+ taskDisposition: "continue"
683302
+ };
683303
+ active.reconciliation = forced;
683304
+ active.reconciledTurn = turn;
683305
+ active.requiresReconciliation = false;
683306
+ active.gatesOldPlan = false;
683307
+ this._taskState.nextAction = forced.revisedNextAction;
683308
+ for (const input of [active.input, ...active.relatedInputs ?? []]) {
683309
+ input.state = "reconciled";
683310
+ this._emitSteeringLifecycle(input, `auto-reconciled continue after ${reinjections} unreconciled re-injections at turn ${turn}`);
683311
+ }
683312
+ return true;
683313
+ }
683260
683314
  /** Parse the registered control region, never a semantic textual mention. */
683261
683315
  _reconcileActiveSteeringFromModel(content, turn, messages2) {
683262
683316
  const active = this._activeSteering;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.702",
3
+ "version": "1.0.703",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.702",
9
+ "version": "1.0.703",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.702",
3
+ "version": "1.0.703",
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/library.js",