@adhdev/daemon-standalone 0.9.82-rc.214 → 0.9.82-rc.215

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
@@ -58847,6 +58847,12 @@ ${formatManifestValidationIssues2(validation.issues)}`,
58847
58847
  completionIdleKey = "";
58848
58848
  /** Previous screen lines — passed to evaluate() for `changed` condition detection. */
58849
58849
  prevScreenLines = [];
58850
+ /** Timestamp when idle was last committed (either direct or via idle_hold_ms).
58851
+ * Used to suppress immediate idle → busy re-entry from transient `changed`
58852
+ * condition blips (e.g. completion-marker counter "Completed for Xs" updating
58853
+ * every second, which triggers cursor_above:changed and bounces back to busy
58854
+ * right after an idle commit). */
58855
+ lastIdleCommittedAt = 0;
58850
58856
  /** Timestamp of the last PTY frame that changed the screen content.
58851
58857
  * Used by screen_active_hold_ms to suppress idle downshifts while
58852
58858
  * the terminal is still actively updating. */
@@ -58901,6 +58907,7 @@ ${formatManifestValidationIssues2(validation.issues)}`,
58901
58907
  this.adapter.resize(cmd.cols, cmd.rows);
58902
58908
  return;
58903
58909
  case "cancel":
58910
+ this.lastIdleCommittedAt = 0;
58904
58911
  this.adapter.send_keys("");
58905
58912
  return;
58906
58913
  case "shutdown":
@@ -59125,6 +59132,12 @@ ${formatManifestValidationIssues2(validation.issues)}`,
59125
59132
  if (screenIsActive && this.currentStateId === "busy" && evState.id === (this.spec.default_state ?? "idle")) {
59126
59133
  evState = this.lastBusyState ?? evState;
59127
59134
  }
59135
+ const idleReentryHoldMs = Math.max(screenActiveMs, 1500);
59136
+ if (evState.id === "busy" && this.currentStateId === (this.spec.default_state ?? "idle") && this.lastIdleCommittedAt > 0 && now - this.lastIdleCommittedAt < idleReentryHoldMs) {
59137
+ LOG2.debug("SpecDriver", `[${this.opts.specPath.split("/").slice(-3).join("/")}] idle\u2192busy suppressed (idle_reentry_hold ageMs=${now - this.lastIdleCommittedAt} holdMs=${idleReentryHoldMs})`);
59138
+ this.scheduleBusyExpiry(idleReentryHoldMs - (now - this.lastIdleCommittedAt) + 50);
59139
+ return;
59140
+ }
59128
59141
  if (evState.id === "busy") {
59129
59142
  this.lastBusyAt = Date.now();
59130
59143
  this.lastBusyState = evState;
@@ -59160,6 +59173,7 @@ ${formatManifestValidationIssues2(validation.issues)}`,
59160
59173
  this.pendingIdleState = null;
59161
59174
  if (!committed) return;
59162
59175
  LOG2.debug("SpecDriver", `[${this.opts.specPath.split("/").slice(-3).join("/")}] idleHold committed after ${idleHoldMs}ms`);
59176
+ this.lastIdleCommittedAt = Date.now();
59163
59177
  this.currentStateId = committed.id;
59164
59178
  this.currentEval = capturedEv;
59165
59179
  this.pushHistory(committed.id, committed.label, {
@@ -59202,6 +59216,9 @@ ${formatManifestValidationIssues2(validation.issues)}`,
59202
59216
  }
59203
59217
  }
59204
59218
  if (changed) {
59219
+ if (evState.id === (this.spec.default_state ?? "idle")) {
59220
+ this.lastIdleCommittedAt = Date.now();
59221
+ }
59205
59222
  this.currentStateId = evState.id;
59206
59223
  const matchedRules = extractMatchedRules(ev);
59207
59224
  let transitionReason;
@@ -59269,6 +59286,7 @@ ${formatManifestValidationIssues2(validation.issues)}`,
59269
59286
  this.pendingSends.push(text);
59270
59287
  return;
59271
59288
  }
59289
+ this.lastIdleCommittedAt = 0;
59272
59290
  this.actuallySendMessage(text);
59273
59291
  }
59274
59292
  actuallySendMessage(text) {