@integrity-labs/agt-cli 0.27.101 → 0.27.103

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.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  claudeModelAlias,
3
3
  isClaudeFastMode
4
- } from "./chunk-KZVMMXDB.js";
4
+ } from "./chunk-I2OTQJH3.js";
5
5
  import {
6
6
  reapOrphanChannelMcps
7
7
  } from "./chunk-XWVM4KPK.js";
@@ -1557,4 +1557,4 @@ export {
1557
1557
  stopAllSessionsAndWait,
1558
1558
  getProjectDir
1559
1559
  };
1560
- //# sourceMappingURL=chunk-Q5K5YADO.js.map
1560
+ //# sourceMappingURL=chunk-MQJ5DMPT.js.map
@@ -9,7 +9,7 @@ import {
9
9
  parseDeliveryTarget,
10
10
  registerFramework,
11
11
  wrapScheduledTaskPrompt
12
- } from "./chunk-KZVMMXDB.js";
12
+ } from "./chunk-I2OTQJH3.js";
13
13
 
14
14
  // ../../packages/core/dist/integrations/registry.js
15
15
  var INTEGRATION_REGISTRY = [
@@ -7586,4 +7586,4 @@ export {
7586
7586
  managerInstallSystemUnitCommand,
7587
7587
  managerUninstallSystemUnitCommand
7588
7588
  };
7589
- //# sourceMappingURL=chunk-UBW4SAJF.js.map
7589
+ //# sourceMappingURL=chunk-UVHVXVVL.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-KAZNNGUD.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-OL5EDYB4.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-PJSO3JKN.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-F6USL3EW.js.map
@@ -17,7 +17,7 @@ import {
17
17
  provisionStopHook,
18
18
  requireHost,
19
19
  safeWriteJsonAtomic
20
- } from "../chunk-UBW4SAJF.js";
20
+ } from "../chunk-UVHVXVVL.js";
21
21
  import {
22
22
  getProjectDir as getProjectDir2,
23
23
  getReadyTasks,
@@ -55,9 +55,10 @@ import {
55
55
  stopPersistentSession,
56
56
  takeWatchdogGiveUpCount,
57
57
  takeZombieDetection
58
- } from "../chunk-Q5K5YADO.js";
58
+ } from "../chunk-MQJ5DMPT.js";
59
59
  import {
60
60
  KANBAN_CHECK_COMMAND,
61
+ SUPPRESS_SENTINEL,
61
62
  appendDmFooter,
62
63
  attributeTranscriptUsageByRun,
63
64
  classifyActor,
@@ -78,7 +79,7 @@ import {
78
79
  resolveConnectivityProbe,
79
80
  resolveDmTarget,
80
81
  wrapScheduledTaskPrompt
81
- } from "../chunk-KZVMMXDB.js";
82
+ } from "../chunk-I2OTQJH3.js";
82
83
  import {
83
84
  parsePsRows,
84
85
  reapOrphanChannelMcps
@@ -4008,6 +4009,7 @@ var agentFrameworkCache = /* @__PURE__ */ new Map();
4008
4009
  var migratedSecretStorage = /* @__PURE__ */ new Set();
4009
4010
  var frameworkBinaryChecked = /* @__PURE__ */ new Set();
4010
4011
  var agentRuntimeAuthenticated = false;
4012
+ var lastManagedSettingsStatus = null;
4011
4013
  function resolveAgentFramework(codeName) {
4012
4014
  const frameworkId = agentFrameworkCache.get(codeName) ?? "openclaw";
4013
4015
  return getFramework(frameworkId);
@@ -4034,7 +4036,7 @@ var cachedMaintenanceWindow = null;
4034
4036
  var lastVersionCheckAt = 0;
4035
4037
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
4036
4038
  var lastResponsivenessProbeAt = 0;
4037
- var agtCliVersion = true ? "0.27.101" : "dev";
4039
+ var agtCliVersion = true ? "0.27.103" : "dev";
4038
4040
  function resolveBrewPath(execFileSync4) {
4039
4041
  try {
4040
4042
  const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -4218,28 +4220,30 @@ function ensureClaudeManagedSettings(path = claudeManagedSettingsPath()) {
4218
4220
  parsed = JSON.parse(raw);
4219
4221
  } catch (err) {
4220
4222
  log(`[managed-settings] ${path} is not valid JSON (${err.message}) \u2014 leaving as-is; Claude Code channels may be blocked`);
4221
- return;
4223
+ return "invalid_json";
4222
4224
  }
4223
4225
  if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
4224
4226
  settings = parsed;
4225
4227
  }
4226
4228
  }
4227
4229
  }
4228
- if (settings.channelsEnabled === true) return;
4230
+ if (settings.channelsEnabled === true) return "ok";
4229
4231
  settings.channelsEnabled = true;
4230
4232
  mkdirSync4(dirname3(path), { recursive: true });
4231
4233
  writeFileSync4(path, `${JSON.stringify(settings, null, 2)}
4232
4234
  `);
4233
4235
  log(`[managed-settings] set channelsEnabled:true in ${path} (ENG-5786 \u2014 unblocks Claude Code channels)`);
4236
+ return "ok";
4234
4237
  } catch (err) {
4235
4238
  log(`[managed-settings] could not ensure ${path}: ${err.message} \u2014 Claude Code channels may be blocked; set channelsEnabled:true manually`);
4239
+ return "write_failed";
4236
4240
  }
4237
4241
  }
4238
4242
  async function ensureFrameworkBinary(frameworkId) {
4239
4243
  if (frameworkId !== "claude-code") return;
4240
4244
  if (frameworkBinaryChecked.has(frameworkId)) return;
4241
4245
  frameworkBinaryChecked.add(frameworkId);
4242
- ensureClaudeManagedSettings();
4246
+ lastManagedSettingsStatus = ensureClaudeManagedSettings();
4243
4247
  const { execFileSync: execFileSync4 } = await import("child_process");
4244
4248
  const brewPath = resolveBrewPath(execFileSync4);
4245
4249
  if (!brewPath) {
@@ -5225,7 +5229,7 @@ async function pollCycle() {
5225
5229
  }
5226
5230
  try {
5227
5231
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
5228
- const { collectDiagnostics } = await import("../persistent-session-KAZNNGUD.js");
5232
+ const { collectDiagnostics } = await import("../persistent-session-OL5EDYB4.js");
5229
5233
  const diagCodeNames = [...agentState.persistentSessionAgents];
5230
5234
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
5231
5235
  let tailscaleHostname;
@@ -5258,6 +5262,14 @@ async function pollCycle() {
5258
5262
  const errId = createHash3("sha256").update(errText).digest("hex").slice(0, 12);
5259
5263
  log(`Claude auth detection failed (error_id=${errId})`);
5260
5264
  }
5265
+ const hostHasClaudeCode = state5.agents.some(
5266
+ (a) => agentFrameworkCache.get(a.codeName) === "claude-code"
5267
+ );
5268
+ if (hostHasClaudeCode) {
5269
+ lastManagedSettingsStatus = ensureClaudeManagedSettings();
5270
+ } else {
5271
+ lastManagedSettingsStatus = null;
5272
+ }
5261
5273
  const hbResp = await api.post("/host/heartbeat", {
5262
5274
  host_id: hostId,
5263
5275
  framework_version: cachedFrameworkVersion ?? void 0,
@@ -5274,7 +5286,13 @@ async function pollCycle() {
5274
5286
  // polling fallback (healRealtimeSocketDivergence forces it). Surfaced
5275
5287
  // so a sustained socket-down window is observable rather than hidden
5276
5288
  // behind a fresh heartbeat.
5277
- realtime_socket_connected: isRealtimeSocketConnected()
5289
+ realtime_socket_connected: isRealtimeSocketConnected(),
5290
+ // ENG-6068: outcome of the channels managed-settings assertion.
5291
+ // 'invalid_json' / 'write_failed' mean CC may be silently dropping
5292
+ // ALL channel inbound — the API opens a host-scoped alert on it.
5293
+ // Omitted (undefined) on hosts that haven't run the assertion
5294
+ // (non-claude-code frameworks).
5295
+ channels_setting_status: lastManagedSettingsStatus ?? void 0
5278
5296
  });
5279
5297
  if (hbResp?.maintenance_window) {
5280
5298
  cachedMaintenanceWindow = hbResp.maintenance_window;
@@ -5298,7 +5316,7 @@ async function pollCycle() {
5298
5316
  const {
5299
5317
  collectResponsivenessProbes,
5300
5318
  getResponsivenessIntervalMs
5301
- } = await import("../responsiveness-probe-MWVDZLO6.js");
5319
+ } = await import("../responsiveness-probe-B6LJJRUD.js");
5302
5320
  const probeIntervalMs = getResponsivenessIntervalMs();
5303
5321
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
5304
5322
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -7666,6 +7684,7 @@ async function routeScheduledTaskViaKanban(codeName, agentId, task, prompt) {
7666
7684
  return false;
7667
7685
  }
7668
7686
  const nudge = `You have a new scheduled task on your kanban board: id=${kanban_item_id} title=${JSON.stringify(task.name)}. Call kanban_move("${kanban_item_id}", "in_progress"), do the work described on the card, then write the finished result onto the card and mark it done. Do NOT send, post, or message the result to anyone yourself \u2014 recording it on the card is enough; delivery to the recipient is handled for you.
7687
+ If \u2014 and ONLY if \u2014 the task description contains explicit opt-out wording the user typed (e.g. "DO NOT notify me unless urgent", "only if X", "stay silent unless \u2026") and that condition is NOT met this run, write exactly \`${SUPPRESS_SENTINEL}\` ALONE as the card result (no other text, no "nothing urgent", no notes) and mark the card done \u2014 that tells the delivery pipeline to skip the send. A report with zero items ("nothing urgent", "no follow-ups", "all quiet") is still a valid deliverable when the task asks for a digest, NOT a reason to suppress \u2014 when in doubt, deliver.
7669
7688
  ` + formatRunMarker(run_id);
7670
7689
  let injectStatus;
7671
7690
  try {
@@ -9633,7 +9652,7 @@ async function processClaudePairSessions(agents) {
9633
9652
  killPairSession,
9634
9653
  pairTmuxSession,
9635
9654
  finalizeClaudePairOnboarding
9636
- } = await import("../claude-pair-runtime-PJSO3JKN.js");
9655
+ } = await import("../claude-pair-runtime-F6USL3EW.js");
9637
9656
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
9638
9657
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
9639
9658
  const killed = await killPairSession(pairTmuxSession(pairId));