@integrity-labs/agt-cli 0.28.1020 → 0.28.1022

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.
@@ -266,7 +266,7 @@ async function spawnPairSession(session) {
266
266
  return { ok: true };
267
267
  } catch {
268
268
  }
269
- const { resolveClaudeBinary } = await import("./persistent-session-UZBB7EOS.js");
269
+ const { resolveClaudeBinary } = await import("./persistent-session-ZQDNCKQH.js");
270
270
  const claudeBin = resolveClaudeBinary();
271
271
  const pairEnv = {
272
272
  ...process.env,
@@ -734,4 +734,4 @@ export {
734
734
  startClaudePair,
735
735
  submitClaudePairCode
736
736
  };
737
- //# sourceMappingURL=claude-pair-runtime-JQRJXNSL.js.map
737
+ //# sourceMappingURL=claude-pair-runtime-KKFNGRSA.js.map
@@ -66,7 +66,7 @@ import {
66
66
  safeWriteJsonAtomic,
67
67
  setConfigHash,
68
68
  tripClass
69
- } from "../chunk-WFAXPLGT.js";
69
+ } from "../chunk-5MUSHNVX.js";
70
70
  import {
71
71
  getProjectDir as getProjectDir2,
72
72
  getReadyTasks,
@@ -147,7 +147,7 @@ import {
147
147
  takeZombieDetection,
148
148
  toOpencodeModel,
149
149
  writeEgressAllowlist
150
- } from "../chunk-CVQDMHOP.js";
150
+ } from "../chunk-QXJWRE64.js";
151
151
  import {
152
152
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
153
153
  AnchorSessionClient,
@@ -13790,7 +13790,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13790
13790
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13791
13791
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13792
13792
  async function channelInboundActivityAgeSecondsFor(codeName) {
13793
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-KLOUFBM5.js");
13793
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-Q27WU2MW.js");
13794
13794
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13795
13795
  if (newest === null) return null;
13796
13796
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -14534,7 +14534,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14534
14534
  var lastVersionCheckAt = 0;
14535
14535
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14536
14536
  var lastResponsivenessProbeAt = 0;
14537
- var agtCliVersion = true ? "0.28.1020" : "dev";
14537
+ var agtCliVersion = true ? "0.28.1022" : "dev";
14538
14538
  function resolveBrewPath(execFileSync3) {
14539
14539
  try {
14540
14540
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -16169,7 +16169,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
16169
16169
  if (codeNames.length === 0) return;
16170
16170
  void (async () => {
16171
16171
  try {
16172
- const { collectDiagnostics } = await import("../persistent-session-UZBB7EOS.js");
16172
+ const { collectDiagnostics } = await import("../persistent-session-ZQDNCKQH.js");
16173
16173
  await api.post("/host/heartbeat", {
16174
16174
  host_id: hostId,
16175
16175
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -16311,7 +16311,7 @@ async function pollCycleInner() {
16311
16311
  }
16312
16312
  try {
16313
16313
  const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
16314
- const { collectDiagnostics } = await import("../persistent-session-UZBB7EOS.js");
16314
+ const { collectDiagnostics } = await import("../persistent-session-ZQDNCKQH.js");
16315
16315
  const diagCodeNames = [...agentState.persistentSessionAgents];
16316
16316
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
16317
16317
  let tailscaleHostname;
@@ -16487,7 +16487,7 @@ async function pollCycleInner() {
16487
16487
  collectPanelessActivityProbes,
16488
16488
  getResponsivenessIntervalMs,
16489
16489
  occupancyQualificationClassifications
16490
- } = await import("../responsiveness-probe-KLOUFBM5.js");
16490
+ } = await import("../responsiveness-probe-Q27WU2MW.js");
16491
16491
  const probeIntervalMs = getResponsivenessIntervalMs();
16492
16492
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
16493
16493
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -16604,7 +16604,7 @@ async function pollCycleInner() {
16604
16604
  collectResponsivenessProbes,
16605
16605
  livePendingInboundOldestAgeSeconds,
16606
16606
  parkPendingInbound
16607
- } = await import("../responsiveness-probe-KLOUFBM5.js");
16607
+ } = await import("../responsiveness-probe-Q27WU2MW.js");
16608
16608
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
16609
16609
  const wedgeNow = /* @__PURE__ */ new Date();
16610
16610
  const liveAgents = agentState.persistentSessionAgents;
@@ -17248,6 +17248,22 @@ async function pollCycleInner() {
17248
17248
  // `resets_hint` is the modal's own reset text, passed through verbatim.
17249
17249
  // It is the only place Claude Code gives us a DATED reset; the banner
17250
17250
  // parser elsewhere can only reconstruct an hour (ENG-8901).
17251
+ // ENG-10972: refresh ONLY the liveness field, leaving gave_up_at and the
17252
+ // reason untouched. Merge-then-write rather than write-fresh: clobbering
17253
+ // the file each poll would reset gave_up_at and keep re-arming the
17254
+ // give-up notice for as long as the modal sat there.
17255
+ refreshUsageLimitLiveness: (codeName) => {
17256
+ const dir = getFramework("claude-code").getAgentDir(codeName);
17257
+ const file = join42(dir, "watchdog-give-up.json");
17258
+ if (!existsSync19(file)) return;
17259
+ try {
17260
+ const raw = JSON.parse(readFileSync34(file, "utf8"));
17261
+ if (raw["reason"] !== "usage_limit") return;
17262
+ raw["usage_limit_last_seen_at"] = (/* @__PURE__ */ new Date()).toISOString();
17263
+ atomicWriteFileSync(file, JSON.stringify(raw));
17264
+ } catch {
17265
+ }
17266
+ },
17251
17267
  signalUsageLimit: (codeName, resetsHint) => {
17252
17268
  const dir = getFramework("claude-code").getAgentDir(codeName);
17253
17269
  if (!existsSync19(dir)) return;
@@ -17256,6 +17272,12 @@ async function pollCycleInner() {
17256
17272
  JSON.stringify({
17257
17273
  gave_up_at: (/* @__PURE__ */ new Date()).toISOString(),
17258
17274
  reason: "usage_limit",
17275
+ // ENG-10972: seeded here and then REFRESHED by
17276
+ // refreshUsageLimitLiveness on every poll while the modal is present,
17277
+ // so a consumer can tell a LIVE cap from a historical marker.
17278
+ // `gave_up_at` keeps its own meaning (decideGiveUpNotice ages against
17279
+ // it), so liveness gets its own field rather than overloading one.
17280
+ usage_limit_last_seen_at: (/* @__PURE__ */ new Date()).toISOString(),
17259
17281
  ...resetsHint ? { resets_hint: resetsHint } : {}
17260
17282
  })
17261
17283
  );
@@ -21164,7 +21186,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21164
21186
  try {
21165
21187
  const freshId = rotateSessionForWedge(codeName);
21166
21188
  consecutiveWedgeCycles.delete(codeName);
21167
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-KLOUFBM5.js");
21189
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-Q27WU2MW.js");
21168
21190
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
21169
21191
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
21170
21192
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -21207,7 +21229,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
21207
21229
  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}`));
21208
21230
  void (async () => {
21209
21231
  try {
21210
- const { collectDiagnostics } = await import("../persistent-session-UZBB7EOS.js");
21232
+ const { collectDiagnostics } = await import("../persistent-session-ZQDNCKQH.js");
21211
21233
  await api.post("/host/heartbeat", {
21212
21234
  host_id: hostId,
21213
21235
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21258,7 +21280,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
21258
21280
  }
21259
21281
  try {
21260
21282
  const hostId = await getHostId();
21261
- const { collectDiagnostics } = await import("../persistent-session-UZBB7EOS.js");
21283
+ const { collectDiagnostics } = await import("../persistent-session-ZQDNCKQH.js");
21262
21284
  await api.post("/host/heartbeat", {
21263
21285
  host_id: hostId,
21264
21286
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
@@ -21929,7 +21951,7 @@ async function processClaudePairSessions(agents) {
21929
21951
  // cannot take it for itself — by the time it runs, the write it is looking
21930
21952
  // for may already have happened.
21931
21953
  snapshotPairConfig
21932
- } = await import("../claude-pair-runtime-JQRJXNSL.js");
21954
+ } = await import("../claude-pair-runtime-KKFNGRSA.js");
21933
21955
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
21934
21956
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
21935
21957
  const killed = await killPairSession(pairTmuxSession(pairId));