@integrity-labs/agt-cli 0.28.415 → 0.28.417

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.
@@ -25,7 +25,7 @@ import {
25
25
  resolveConnectivityProbe,
26
26
  worseConnectivityOutcome,
27
27
  wrapScheduledTaskPrompt
28
- } from "./chunk-QZUKHEMO.js";
28
+ } from "./chunk-I5SDCW2T.js";
29
29
  import {
30
30
  parsePsRows
31
31
  } from "./chunk-XWVM4KPK.js";
@@ -6003,7 +6003,7 @@ function requireHost() {
6003
6003
  }
6004
6004
 
6005
6005
  // src/lib/api-client.ts
6006
- var agtCliVersion = true ? "0.28.415" : "dev";
6006
+ var agtCliVersion = true ? "0.28.417" : "dev";
6007
6007
  var lastConfigHash = null;
6008
6008
  function setConfigHash(hash) {
6009
6009
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -8507,4 +8507,4 @@ export {
8507
8507
  managerInstallSystemUnitCommand,
8508
8508
  managerUninstallSystemUnitCommand
8509
8509
  };
8510
- //# sourceMappingURL=chunk-TGHZFWWX.js.map
8510
+ //# sourceMappingURL=chunk-NDDVFICX.js.map
@@ -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-EDUFOS36.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-EW7GTES3.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-BMYJSZIZ.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-I4Q66W7S.js.map
@@ -45,7 +45,7 @@ import {
45
45
  resolveEffectivePinRaw,
46
46
  safeWriteJsonAtomic,
47
47
  setConfigHash
48
- } from "../chunk-TGHZFWWX.js";
48
+ } from "../chunk-NDDVFICX.js";
49
49
  import {
50
50
  getProjectDir as getProjectDir2,
51
51
  getReadyTasks,
@@ -85,7 +85,9 @@ import {
85
85
  getFramework,
86
86
  getIntegration,
87
87
  getLastFailureContext,
88
+ getOpencodeActivityAgeSeconds,
88
89
  getOpencodeSessionState,
90
+ getOpencodeTurnHealth,
89
91
  getProjectDir,
90
92
  getSessionState,
91
93
  hashFile,
@@ -148,7 +150,7 @@ import {
148
150
  toOpencodeModel,
149
151
  transcriptActivityAgeSeconds,
150
152
  writeEgressAllowlist
151
- } from "../chunk-QZUKHEMO.js";
153
+ } from "../chunk-I5SDCW2T.js";
152
154
  import {
153
155
  reapOrphanChannelMcps
154
156
  } from "../chunk-XWVM4KPK.js";
@@ -5642,7 +5644,7 @@ function unregisterClaudeSpawn(pid) {
5642
5644
  } catch {
5643
5645
  }
5644
5646
  }
5645
- async function syncAndCheckClaudeScheduler(agent, tasks, boardItems, refreshData) {
5647
+ async function syncAndCheckClaudeScheduler(agent, tasks, boardItems, refreshData, durableScheduledNudge = false) {
5646
5648
  const codeName = agent.code_name;
5647
5649
  const stableTasksHash = createHash11("sha256").update(JSON.stringify(tasks)).digest("hex").slice(0, 16);
5648
5650
  const boardHash = boardItems.length > 0 ? createHash11("sha256").update(JSON.stringify(boardItems.map((b) => ({ id: b.id, title: b.title, status: b.status, priority: b.priority, deliverable: b.deliverable })))).digest("hex").slice(0, 16) : "empty";
@@ -5678,7 +5680,7 @@ async function syncAndCheckClaudeScheduler(agent, tasks, boardItems, refreshData
5678
5680
  }
5679
5681
  inFlightClaudeTasks.add(task.taskId);
5680
5682
  claudeTaskConcurrency.set(codeName, (claudeTaskConcurrency.get(codeName) ?? 0) + 1);
5681
- await fireScheduledTaskViaKanban(codeName, agent.agent_id, task, prompt);
5683
+ await fireScheduledTaskViaKanban(codeName, agent.agent_id, task, prompt, durableScheduledNudge);
5682
5684
  inFlightClaudeTasks.delete(task.taskId);
5683
5685
  claudeTaskConcurrency.set(codeName, Math.max(0, (claudeTaskConcurrency.get(codeName) ?? 1) - 1));
5684
5686
  }
@@ -9456,7 +9458,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
9456
9458
  var lastVersionCheckAt = 0;
9457
9459
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
9458
9460
  var lastResponsivenessProbeAt = 0;
9459
- var agtCliVersion = true ? "0.28.415" : "dev";
9461
+ var agtCliVersion = true ? "0.28.417" : "dev";
9460
9462
  function resolveBrewPath(execFileSync2) {
9461
9463
  try {
9462
9464
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -10604,7 +10606,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
10604
10606
  if (codeNames.length === 0) return;
10605
10607
  void (async () => {
10606
10608
  try {
10607
- const { collectDiagnostics } = await import("../persistent-session-EDUFOS36.js");
10609
+ const { collectDiagnostics } = await import("../persistent-session-EW7GTES3.js");
10608
10610
  await api.post("/host/heartbeat", {
10609
10611
  host_id: hostId,
10610
10612
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor)
@@ -10711,7 +10713,7 @@ async function pollCycle() {
10711
10713
  }
10712
10714
  try {
10713
10715
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
10714
- const { collectDiagnostics } = await import("../persistent-session-EDUFOS36.js");
10716
+ const { collectDiagnostics } = await import("../persistent-session-EW7GTES3.js");
10715
10717
  const diagCodeNames = [...agentState.persistentSessionAgents];
10716
10718
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor) : void 0;
10717
10719
  let tailscaleHostname;
@@ -10823,14 +10825,22 @@ async function pollCycle() {
10823
10825
  try {
10824
10826
  const {
10825
10827
  collectResponsivenessProbes,
10828
+ collectPanelessActivityProbes,
10826
10829
  getResponsivenessIntervalMs
10827
- } = await import("../responsiveness-probe-SVTUFKX5.js");
10830
+ } = await import("../responsiveness-probe-HP3NKDGQ.js");
10828
10831
  const probeIntervalMs = getResponsivenessIntervalMs();
10829
10832
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
10830
10833
  const probeCodeNames = [...agentState.persistentSessionAgents];
10831
10834
  if (probeCodeNames.length > 0) {
10832
10835
  const drainedGiveUps = /* @__PURE__ */ new Map();
10833
- const probes = collectResponsivenessProbes(probeCodeNames).map((p) => {
10836
+ const paneless = collectPanelessActivityProbes(probeCodeNames, {
10837
+ busyActivityAgeSeconds: (codeName) => getOpencodeActivityAgeSeconds(codeName),
10838
+ turnCompletionAgeSeconds: (codeName) => {
10839
+ const lastRepliedAt = getOpencodeTurnHealth(codeName)?.lastRepliedAt ?? null;
10840
+ return lastRepliedAt == null ? null : Math.max(0, Math.floor((Date.now() - lastRepliedAt) / 1e3));
10841
+ }
10842
+ });
10843
+ const probes = [...collectResponsivenessProbes(probeCodeNames), ...paneless].map((p) => {
10834
10844
  const giveUps = takeWatchdogGiveUpCount(p.code_name);
10835
10845
  if (giveUps > 0) drainedGiveUps.set(p.code_name, giveUps);
10836
10846
  return { ...p, input_stuck_give_ups: giveUps };
@@ -10856,7 +10866,7 @@ async function pollCycle() {
10856
10866
  collectResponsivenessProbes,
10857
10867
  livePendingInboundOldestAgeSeconds,
10858
10868
  parkPendingInbound
10859
- } = await import("../responsiveness-probe-SVTUFKX5.js");
10869
+ } = await import("../responsiveness-probe-HP3NKDGQ.js");
10860
10870
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-HYOOQV4A.js");
10861
10871
  const wedgeNow = /* @__PURE__ */ new Date();
10862
10872
  const liveAgents = agentState.persistentSessionAgents;
@@ -13283,7 +13293,13 @@ async function processAgent(agent, agentStates) {
13283
13293
  await syncAndCheckOpencodeScheduler(agent, tasks, refreshData);
13284
13294
  }
13285
13295
  } else if (agentFw === "claude-code" && tasks.length > 0) {
13286
- await syncAndCheckClaudeScheduler(agent, tasks, boardItems, refreshData);
13296
+ await syncAndCheckClaudeScheduler(
13297
+ agent,
13298
+ tasks,
13299
+ boardItems,
13300
+ refreshData,
13301
+ hostFlagStore().getBoolean("scheduled-task-nudge-durable")
13302
+ );
13287
13303
  }
13288
13304
  {
13289
13305
  const triggerAt = refreshData.agent.work_trigger_at;
@@ -14161,7 +14177,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
14161
14177
  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}`));
14162
14178
  void (async () => {
14163
14179
  try {
14164
- const { collectDiagnostics } = await import("../persistent-session-EDUFOS36.js");
14180
+ const { collectDiagnostics } = await import("../persistent-session-EW7GTES3.js");
14165
14181
  await api.post("/host/heartbeat", {
14166
14182
  host_id: hostId,
14167
14183
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
@@ -14211,7 +14227,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
14211
14227
  }
14212
14228
  try {
14213
14229
  const hostId = await getHostId();
14214
- const { collectDiagnostics } = await import("../persistent-session-EDUFOS36.js");
14230
+ const { collectDiagnostics } = await import("../persistent-session-EW7GTES3.js");
14215
14231
  await api.post("/host/heartbeat", {
14216
14232
  host_id: hostId,
14217
14233
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
@@ -14664,7 +14680,7 @@ async function processClaudePairSessions(agents) {
14664
14680
  killPairSession,
14665
14681
  pairTmuxSession,
14666
14682
  finalizeClaudePairOnboarding
14667
- } = await import("../claude-pair-runtime-BMYJSZIZ.js");
14683
+ } = await import("../claude-pair-runtime-I4Q66W7S.js");
14668
14684
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
14669
14685
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
14670
14686
  const killed = await killPairSession(pairTmuxSession(pairId));