@integrity-labs/agt-cli 0.28.370 → 0.28.372

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-PW3D7TJO.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-HXUYS63V.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-N4WSO5ET.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-U2SO44TW.js.map
@@ -43,7 +43,7 @@ import {
43
43
  resolveEffectivePinRaw,
44
44
  safeWriteJsonAtomic,
45
45
  setConfigHash
46
- } from "../chunk-TDZFQHXC.js";
46
+ } from "../chunk-FAMCYDMC.js";
47
47
  import {
48
48
  getProjectDir as getProjectDir2,
49
49
  getReadyTasks,
@@ -147,7 +147,7 @@ import {
147
147
  toOpencodeModel,
148
148
  transcriptActivityAgeSeconds,
149
149
  writeEgressAllowlist
150
- } from "../chunk-NEM6OQLG.js";
150
+ } from "../chunk-NDF3YMP5.js";
151
151
  import {
152
152
  reapOrphanChannelMcps
153
153
  } from "../chunk-XWVM4KPK.js";
@@ -4128,7 +4128,13 @@ function isKanbanHybridDryRun() {
4128
4128
  }
4129
4129
  var HYBRID_ACTIONABLE_STATUSES = new Set(KANBAN_NUDGE_ACTIONABLE_STATUSES);
4130
4130
  function isHybridActionable(item) {
4131
- return HYBRID_ACTIONABLE_STATUSES.has(item.status) && item.source_type !== "scheduled_task";
4131
+ return HYBRID_ACTIONABLE_STATUSES.has(item.status) && item.source_type !== "scheduled_task" && item.assignee_type !== "human";
4132
+ }
4133
+ function resolveHybridNudgeAction(stale, allowedCount, suppressedCount) {
4134
+ if (stale) return "skip-stale";
4135
+ if (allowedCount > 0) return "nudge";
4136
+ if (suppressedCount > 0) return "close-suppressed";
4137
+ return "drain";
4132
4138
  }
4133
4139
  function kanbanActionableSignature(allowed) {
4134
4140
  return allowed.map((i) => `${i.id}:${i.status}`).sort().join("|");
@@ -9099,7 +9105,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
9099
9105
  var lastVersionCheckAt = 0;
9100
9106
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
9101
9107
  var lastResponsivenessProbeAt = 0;
9102
- var agtCliVersion = true ? "0.28.370" : "dev";
9108
+ var agtCliVersion = true ? "0.28.372" : "dev";
9103
9109
  function resolveBrewPath(execFileSync2) {
9104
9110
  try {
9105
9111
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -10118,7 +10124,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
10118
10124
  if (codeNames.length === 0) return;
10119
10125
  void (async () => {
10120
10126
  try {
10121
- const { collectDiagnostics } = await import("../persistent-session-PW3D7TJO.js");
10127
+ const { collectDiagnostics } = await import("../persistent-session-HXUYS63V.js");
10122
10128
  await api.post("/host/heartbeat", {
10123
10129
  host_id: hostId,
10124
10130
  agent_diagnostics: collectDiagnostics(codeNames)
@@ -10217,7 +10223,7 @@ async function pollCycle() {
10217
10223
  }
10218
10224
  try {
10219
10225
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
10220
- const { collectDiagnostics } = await import("../persistent-session-PW3D7TJO.js");
10226
+ const { collectDiagnostics } = await import("../persistent-session-HXUYS63V.js");
10221
10227
  const diagCodeNames = [...agentState.persistentSessionAgents];
10222
10228
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
10223
10229
  let tailscaleHostname;
@@ -10372,7 +10378,7 @@ async function pollCycle() {
10372
10378
  const {
10373
10379
  collectResponsivenessProbes,
10374
10380
  getResponsivenessIntervalMs
10375
- } = await import("../responsiveness-probe-G7HFTXCV.js");
10381
+ } = await import("../responsiveness-probe-TVSASSZY.js");
10376
10382
  const probeIntervalMs = getResponsivenessIntervalMs();
10377
10383
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
10378
10384
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -10404,7 +10410,7 @@ async function pollCycle() {
10404
10410
  collectResponsivenessProbes,
10405
10411
  livePendingInboundOldestAgeSeconds,
10406
10412
  parkPendingInbound
10407
- } = await import("../responsiveness-probe-G7HFTXCV.js");
10413
+ } = await import("../responsiveness-probe-TVSASSZY.js");
10408
10414
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-HYOOQV4A.js");
10409
10415
  const wedgeNow = /* @__PURE__ */ new Date();
10410
10416
  const liveAgents = agentState.persistentSessionAgents;
@@ -12042,6 +12048,12 @@ async function processAgent(agent, agentStates) {
12042
12048
  }
12043
12049
  log(`Integrations provisioned for '${agent.code_name}' (${integrations.length} integration(s))`);
12044
12050
  const fw = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
12051
+ if (fw === "opencode" && changedIntIds.length > 0 && isOpencodeSessionHealthy(agent.code_name)) {
12052
+ log(
12053
+ `[hot-reload] opencode integration set changed for '${agent.code_name}' (${changedIntIds.join(", ")}) - restarting serve to load new MCP servers`
12054
+ );
12055
+ stopOpencodeSession(agent.code_name, log);
12056
+ }
12045
12057
  let rotationHandled = true;
12046
12058
  if (fw === "claude-code" && isSessionHealthy(agent.code_name)) {
12047
12059
  try {
@@ -12452,6 +12464,7 @@ async function processAgent(agent, agentStates) {
12452
12464
  }
12453
12465
  }
12454
12466
  let boardItems = [];
12467
+ let boardItemsStale = false;
12455
12468
  const hasBoardTemplates = tasks.some((t) => BOARD_INJECT_TEMPLATES.has(t.template_id));
12456
12469
  if (hasBoardTemplates) {
12457
12470
  try {
@@ -12460,6 +12473,7 @@ async function processAgent(agent, agentStates) {
12460
12473
  kanbanBoardCache.set(agent.code_name, boardItems);
12461
12474
  } catch {
12462
12475
  boardItems = kanbanBoardCache.get(agent.code_name) ?? [];
12476
+ boardItemsStale = true;
12463
12477
  }
12464
12478
  }
12465
12479
  const agentFw = agentFrameworkCache.get(agent.code_name) ?? DEFAULT_FRAMEWORK;
@@ -12467,7 +12481,7 @@ async function processAgent(agent, agentStates) {
12467
12481
  const wantsHybridInject = isKanbanHybridEnabled();
12468
12482
  if (agentFw === "claude-code" && sessionMode === "persistent") {
12469
12483
  let hybridBoard = hasBoardTemplates ? boardItems : void 0;
12470
- let hybridBoardStale = false;
12484
+ let hybridBoardStale = boardItemsStale;
12471
12485
  if (!hybridBoard) {
12472
12486
  try {
12473
12487
  const boardData = await api.post(
@@ -12494,20 +12508,25 @@ async function processAgent(agent, agentStates) {
12494
12508
  const cardStates = wedgeRestartsByCard.get(agent.code_name);
12495
12509
  const actionable = hybridBoard.filter(isHybridActionable);
12496
12510
  const { allowed, suppressed } = cardStates ? partitionActionableByPoison(actionable, cardStates, poisonCfg) : { allowed: actionable, suppressed: [] };
12497
- if (hybridBoardStale) {
12511
+ const nudgeAction = resolveHybridNudgeAction(
12512
+ hybridBoardStale,
12513
+ allowed.length,
12514
+ suppressed.length
12515
+ );
12516
+ if (nudgeAction === "skip-stale") {
12498
12517
  if (allowed.length > 0) {
12499
12518
  log(
12500
12519
  `[manager-worker] kanban inject skipped for '${agent.code_name}' - board fetch failed this tick (stale cache)`
12501
12520
  );
12502
12521
  }
12503
- } else if (allowed.length > 0) {
12522
+ } else if (nudgeAction === "nudge") {
12504
12523
  void maybeInjectKanbanCheck(
12505
12524
  agent.code_name,
12506
12525
  agent.agent_id,
12507
12526
  allowed.length,
12508
12527
  kanbanActionableSignature(allowed)
12509
12528
  );
12510
- } else if (suppressed.length > 0) {
12529
+ } else if (nudgeAction === "close-suppressed") {
12511
12530
  closeInjectedRunIfOpen(
12512
12531
  agent.code_name,
12513
12532
  "completed",
@@ -13569,7 +13588,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
13569
13588
  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}`));
13570
13589
  void (async () => {
13571
13590
  try {
13572
- const { collectDiagnostics } = await import("../persistent-session-PW3D7TJO.js");
13591
+ const { collectDiagnostics } = await import("../persistent-session-HXUYS63V.js");
13573
13592
  await api.post("/host/heartbeat", {
13574
13593
  host_id: hostId,
13575
13594
  agent_diagnostics: collectDiagnostics([codeName])
@@ -13619,7 +13638,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
13619
13638
  }
13620
13639
  try {
13621
13640
  const hostId = await getHostId();
13622
- const { collectDiagnostics } = await import("../persistent-session-PW3D7TJO.js");
13641
+ const { collectDiagnostics } = await import("../persistent-session-HXUYS63V.js");
13623
13642
  await api.post("/host/heartbeat", {
13624
13643
  host_id: hostId,
13625
13644
  agent_diagnostics: collectDiagnostics([codeName])
@@ -14117,7 +14136,7 @@ async function processClaudePairSessions(agents) {
14117
14136
  killPairSession,
14118
14137
  pairTmuxSession,
14119
14138
  finalizeClaudePairOnboarding
14120
- } = await import("../claude-pair-runtime-N4WSO5ET.js");
14139
+ } = await import("../claude-pair-runtime-U2SO44TW.js");
14121
14140
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
14122
14141
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
14123
14142
  const killed = await killPairSession(pairTmuxSession(pairId));