@integrity-labs/agt-cli 0.28.270 → 0.28.271

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.
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-FMFTNDJO.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-HOILVE3Q.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-WZLKWP74.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-KOEEK5LD.js.map
@@ -38,7 +38,7 @@ import {
38
38
  requireHost,
39
39
  safeWriteJsonAtomic,
40
40
  setConfigHash
41
- } from "../chunk-ND4BBPV5.js";
41
+ } from "../chunk-3SBG4IR5.js";
42
42
  import {
43
43
  getProjectDir as getProjectDir2,
44
44
  getReadyTasks,
@@ -93,6 +93,7 @@ import {
93
93
  isVacuousDeliverReason,
94
94
  isolationMode,
95
95
  laneTagFragment,
96
+ minutesSinceLocalMidnight,
96
97
  paneLogPath,
97
98
  parseDeliverAssertion,
98
99
  parseDeliveryTarget,
@@ -123,7 +124,7 @@ import {
123
124
  takeZombieDetection,
124
125
  transcriptActivityAgeSeconds,
125
126
  writeEgressAllowlist
126
- } from "../chunk-RH4FTCZK.js";
127
+ } from "../chunk-5TL5THQE.js";
127
128
  import {
128
129
  reapOrphanChannelMcps
129
130
  } from "../chunk-XWVM4KPK.js";
@@ -6700,7 +6701,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6700
6701
  var lastVersionCheckAt = 0;
6701
6702
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6702
6703
  var lastResponsivenessProbeAt = 0;
6703
- var agtCliVersion = true ? "0.28.270" : "dev";
6704
+ var agtCliVersion = true ? "0.28.271" : "dev";
6704
6705
  function resolveBrewPath(execFileSync2) {
6705
6706
  try {
6706
6707
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -7550,7 +7551,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
7550
7551
  if (codeNames.length === 0) return;
7551
7552
  void (async () => {
7552
7553
  try {
7553
- const { collectDiagnostics } = await import("../persistent-session-FMFTNDJO.js");
7554
+ const { collectDiagnostics } = await import("../persistent-session-HOILVE3Q.js");
7554
7555
  await api.post("/host/heartbeat", {
7555
7556
  host_id: hostId,
7556
7557
  agent_diagnostics: collectDiagnostics(codeNames)
@@ -7648,7 +7649,7 @@ async function pollCycle() {
7648
7649
  }
7649
7650
  try {
7650
7651
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
7651
- const { collectDiagnostics } = await import("../persistent-session-FMFTNDJO.js");
7652
+ const { collectDiagnostics } = await import("../persistent-session-HOILVE3Q.js");
7652
7653
  const diagCodeNames = [...agentState.persistentSessionAgents];
7653
7654
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
7654
7655
  let tailscaleHostname;
@@ -7796,7 +7797,7 @@ async function pollCycle() {
7796
7797
  const {
7797
7798
  collectResponsivenessProbes,
7798
7799
  getResponsivenessIntervalMs
7799
- } = await import("../responsiveness-probe-FPTBS6RZ.js");
7800
+ } = await import("../responsiveness-probe-DCUO6JJQ.js");
7800
7801
  const probeIntervalMs = getResponsivenessIntervalMs();
7801
7802
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
7802
7803
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -7828,7 +7829,7 @@ async function pollCycle() {
7828
7829
  collectResponsivenessProbes,
7829
7830
  livePendingInboundOldestAgeSeconds,
7830
7831
  parkPendingInbound
7831
- } = await import("../responsiveness-probe-FPTBS6RZ.js");
7832
+ } = await import("../responsiveness-probe-DCUO6JJQ.js");
7832
7833
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
7833
7834
  const wedgeNow = /* @__PURE__ */ new Date();
7834
7835
  const liveAgents = agentState.persistentSessionAgents;
@@ -10164,6 +10165,7 @@ In progress for ${age} minutes \u2014 auto-failed`).catch(() => {
10164
10165
  }
10165
10166
  var lastMcpFailedBannerCount = /* @__PURE__ */ new Map();
10166
10167
  var lastModelApiErrorSig = /* @__PURE__ */ new Map();
10168
+ var DAY_ROLLOVER_FORCE_GRACE_MIN = 30;
10167
10169
  var persistentSessionStuckTracker = new PersistentSessionStuckTracker();
10168
10170
  var claudeAuthTupleBySession = /* @__PURE__ */ new Map();
10169
10171
  var egressAllowlistBySession = /* @__PURE__ */ new Map();
@@ -10278,6 +10280,7 @@ async function ensurePersistentSession(agent, tasks, boardItems, refreshData) {
10278
10280
  }
10279
10281
  let restartTrigger = null;
10280
10282
  let dayRolloverDeferred = false;
10283
+ let dayRolloverForced = false;
10281
10284
  const currentAuthTuple = openRouterForAgent ? `openrouter:${openRouterForAgent.fingerprint ?? openRouterForAgent.model}` : `${claudeAuthMode}:${anthropicApiKeyFingerprint ?? "none"}`;
10282
10285
  const recordedAuthTuple = claudeAuthTupleBySession.get(codeName);
10283
10286
  if (recordedAuthTuple && recordedAuthTuple !== currentAuthTuple && isSessionHealthy(codeName)) {
@@ -10298,10 +10301,21 @@ async function ensurePersistentSession(agent, tasks, boardItems, refreshData) {
10298
10301
  agentState.persistentSessionAgents.delete(codeName);
10299
10302
  restartTrigger = "day-rollover";
10300
10303
  } else {
10301
- log(
10302
- `[persistent-session] Day rollover for '${codeName}' deferred \u2014 agent still active on session ${current.sessionId} (will retry next tick)`
10303
- );
10304
- dayRolloverDeferred = true;
10304
+ const overdueMin = minutesSinceLocalMidnight(/* @__PURE__ */ new Date(), agentTimezone);
10305
+ if (overdueMin >= DAY_ROLLOVER_FORCE_GRACE_MIN) {
10306
+ log(
10307
+ `[persistent-session] Day rollover FORCED for '${codeName}' (yesterday=${current.date}) \u2014 agent busy-blocked ${overdueMin}m past the day boundary (grace ${DAY_ROLLOVER_FORCE_GRACE_MIN}m), restarting anyway to reset context`
10308
+ );
10309
+ stopPersistentSessionAndForgetMcpBaseline(codeName, "day-rollover");
10310
+ agentState.persistentSessionAgents.delete(codeName);
10311
+ restartTrigger = "day-rollover";
10312
+ dayRolloverForced = true;
10313
+ } else {
10314
+ log(
10315
+ `[persistent-session] Day rollover for '${codeName}' deferred \u2014 agent still active on session ${current.sessionId} (${overdueMin}m past boundary, will force at ${DAY_ROLLOVER_FORCE_GRACE_MIN}m)`
10316
+ );
10317
+ dayRolloverDeferred = true;
10318
+ }
10305
10319
  }
10306
10320
  }
10307
10321
  }
@@ -10512,7 +10526,7 @@ ${truncateForLog(ctx.tail)}` : `; pane_tail_hash=sha256:${createHash11("sha256")
10512
10526
  break;
10513
10527
  }
10514
10528
  }
10515
- const finalDecision = restartTrigger === "auth-tuple" ? "restart-pending" : restartTrigger === "day-rollover" ? "day-rollover-restart" : dayRolloverDeferred ? "day-rollover-deferred" : "healthy";
10529
+ const finalDecision = restartTrigger === "auth-tuple" ? "restart-pending" : restartTrigger === "day-rollover" ? dayRolloverForced ? "day-rollover-forced" : "day-rollover-restart" : dayRolloverDeferred ? "day-rollover-deferred" : "healthy";
10516
10530
  return {
10517
10531
  decision: finalDecision,
10518
10532
  spawnAttempted: false,
@@ -10686,7 +10700,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
10686
10700
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
10687
10701
  void (async () => {
10688
10702
  try {
10689
- const { collectDiagnostics } = await import("../persistent-session-FMFTNDJO.js");
10703
+ const { collectDiagnostics } = await import("../persistent-session-HOILVE3Q.js");
10690
10704
  await api.post("/host/heartbeat", {
10691
10705
  host_id: hostId,
10692
10706
  agent_diagnostics: collectDiagnostics([codeName])
@@ -10736,7 +10750,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
10736
10750
  }
10737
10751
  try {
10738
10752
  const hostId = await getHostId();
10739
- const { collectDiagnostics } = await import("../persistent-session-FMFTNDJO.js");
10753
+ const { collectDiagnostics } = await import("../persistent-session-HOILVE3Q.js");
10740
10754
  await api.post("/host/heartbeat", {
10741
10755
  host_id: hostId,
10742
10756
  agent_diagnostics: collectDiagnostics([codeName])
@@ -11127,7 +11141,7 @@ async function processClaudePairSessions(agents) {
11127
11141
  killPairSession,
11128
11142
  pairTmuxSession,
11129
11143
  finalizeClaudePairOnboarding
11130
- } = await import("../claude-pair-runtime-WZLKWP74.js");
11144
+ } = await import("../claude-pair-runtime-KOEEK5LD.js");
11131
11145
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11132
11146
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11133
11147
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -12011,6 +12025,7 @@ process.on("disconnect", () => {
12011
12025
  });
12012
12026
  export {
12013
12027
  BACK_ONLINE_GREETING_GUIDANCE,
12028
+ DAY_ROLLOVER_FORCE_GRACE_MIN,
12014
12029
  applyRestartAcks,
12015
12030
  claudeCodeUpgradeMarkerPath,
12016
12031
  claudeCodeUpgradeThrottled,