@integrity-labs/agt-cli 0.27.108 → 0.27.109

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-HGR5D4DJ.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-3ZWAGNNO.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-AI37D2CT.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-DS7675XI.js.map
@@ -7,7 +7,7 @@ import {
7
7
  markTaskFired,
8
8
  saveSchedulerState,
9
9
  syncTasksToScheduler
10
- } from "./chunk-HR5T2RQF.js";
10
+ } from "./chunk-I3YS5WFV.js";
11
11
  export {
12
12
  computeNextFire,
13
13
  findTaskByTemplate,
@@ -18,4 +18,4 @@ export {
18
18
  saveSchedulerState,
19
19
  syncTasksToScheduler
20
20
  };
21
- //# sourceMappingURL=claude-scheduler-EM24LTGV.js.map
21
+ //# sourceMappingURL=claude-scheduler-FATCLHDM.js.map
@@ -17,14 +17,14 @@ import {
17
17
  provisionStopHook,
18
18
  requireHost,
19
19
  safeWriteJsonAtomic
20
- } from "../chunk-N4YEE4O7.js";
20
+ } from "../chunk-OATXUUQB.js";
21
21
  import {
22
22
  getProjectDir as getProjectDir2,
23
23
  getReadyTasks,
24
24
  loadSchedulerState,
25
25
  markTaskFired,
26
26
  syncTasksToScheduler
27
- } from "../chunk-HR5T2RQF.js";
27
+ } from "../chunk-I3YS5WFV.js";
28
28
  import {
29
29
  buildAllowedTools,
30
30
  checkChannelInputs,
@@ -55,7 +55,7 @@ import {
55
55
  stopPersistentSession,
56
56
  takeWatchdogGiveUpCount,
57
57
  takeZombieDetection
58
- } from "../chunk-DFQ2EOHB.js";
58
+ } from "../chunk-D2EJL2KI.js";
59
59
  import {
60
60
  KANBAN_CHECK_COMMAND,
61
61
  SUPPRESS_SENTINEL,
@@ -79,7 +79,7 @@ import {
79
79
  resolveConnectivityProbe,
80
80
  resolveDmTarget,
81
81
  wrapScheduledTaskPrompt
82
- } from "../chunk-BP4D3ZPJ.js";
82
+ } from "../chunk-Z3YQYO43.js";
83
83
  import {
84
84
  parsePsRows,
85
85
  reapOrphanChannelMcps
@@ -4133,7 +4133,7 @@ var cachedMaintenanceWindow = null;
4133
4133
  var lastVersionCheckAt = 0;
4134
4134
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
4135
4135
  var lastResponsivenessProbeAt = 0;
4136
- var agtCliVersion = true ? "0.27.108" : "dev";
4136
+ var agtCliVersion = true ? "0.27.109" : "dev";
4137
4137
  function resolveBrewPath(execFileSync4) {
4138
4138
  try {
4139
4139
  const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -5326,7 +5326,7 @@ async function pollCycle() {
5326
5326
  }
5327
5327
  try {
5328
5328
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
5329
- const { collectDiagnostics } = await import("../persistent-session-HGR5D4DJ.js");
5329
+ const { collectDiagnostics } = await import("../persistent-session-3ZWAGNNO.js");
5330
5330
  const diagCodeNames = [...agentState.persistentSessionAgents];
5331
5331
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
5332
5332
  let tailscaleHostname;
@@ -5413,12 +5413,12 @@ async function pollCycle() {
5413
5413
  const {
5414
5414
  collectResponsivenessProbes,
5415
5415
  getResponsivenessIntervalMs
5416
- } = await import("../responsiveness-probe-FS376EVY.js");
5416
+ } = await import("../responsiveness-probe-EGXJFJBW.js");
5417
5417
  const probeIntervalMs = getResponsivenessIntervalMs();
5418
5418
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
5419
5419
  const probeCodeNames = [...agentState.persistentSessionAgents];
5420
5420
  if (probeCodeNames.length > 0) {
5421
- const { takeAcpxExecFailureCount, creditAcpxExecFailureCount } = await import("../persistent-session-HGR5D4DJ.js");
5421
+ const { takeAcpxExecFailureCount, creditAcpxExecFailureCount } = await import("../persistent-session-3ZWAGNNO.js");
5422
5422
  const drainedGiveUps = /* @__PURE__ */ new Map();
5423
5423
  const drainedAcpxFailures = /* @__PURE__ */ new Map();
5424
5424
  const probes = collectResponsivenessProbes(probeCodeNames).map((p) => {
@@ -7756,6 +7756,20 @@ async function deliverScheduledCardResult(codeName, agentId, cardId) {
7756
7756
  markScheduledCardDeliveryComplete(cardId);
7757
7757
  return "terminal";
7758
7758
  }
7759
+ const deliveryPolicy = task.deliveryPolicy ?? "always";
7760
+ if (deliveryPolicy === "never" || deliveryPolicy === "conditional" && card.suppress_delivery !== false) {
7761
+ log(
7762
+ `[scheduled-kanban] Suppressed by delivery_policy=${deliveryPolicy} for card ${cardId} (task '${task.name}') on '${codeName}' \u2014 result recorded on the card only (tombstone)`
7763
+ );
7764
+ if (task.deliveryMode === "announce" && task.deliveryTo) {
7765
+ await reportDeliveryStatus(agentId, task.taskId, {
7766
+ status: "skipped",
7767
+ error_code: "SUPPRESSED_BY_POLICY"
7768
+ });
7769
+ }
7770
+ markScheduledCardDeliveryComplete(cardId);
7771
+ return "delivered";
7772
+ }
7759
7773
  if (card.suppress_delivery === true) {
7760
7774
  log(`[scheduled-kanban] Suppressing delivery (structured flag) for card ${cardId} (task '${task.name}') on '${codeName}' \u2014 result recorded on the card only`);
7761
7775
  if (task.deliveryMode === "announce" && task.deliveryTo) {
@@ -7821,9 +7835,11 @@ async function routeScheduledTaskViaKanban(codeName, agentId, task, prompt) {
7821
7835
  if (run_id) void finishRun(run_id, "failed", { outcomeMessage: "kanban materialise incomplete", completeKanbanItemId: kanban_item_id });
7822
7836
  return false;
7823
7837
  }
7838
+ const suppressionTeaching = (task.deliveryPolicy ?? "always") === "conditional" ? `THIS task is CONDITIONAL: quiet runs stay SILENT automatically. Write your findings on the card and mark it done \u2014 if nothing met the user's criteria, NOTHING will be sent (no flag needed). If something DID meet the criteria and the user must be told, call kanban_done with suppress_delivery: false \u2014 that explicit assert is the ONLY way this result reaches the user.
7839
+ ` : `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, call kanban_done with suppress_delivery: true \u2014 your result stays on the card but will NOT be messaged to the user. That is how you honor the user's do-not-notify instruction: a "nothing urgent" result without the flag would still be DELIVERED as a message. A report with zero items is only a valid deliverable when the task asks for a digest WITHOUT opt-out wording \u2014 when in doubt, deliver.
7840
+ `;
7824
7841
  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 the result you write on the card IS the message that will be delivered to the user; delivery happens automatically from the card.
7825
- 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, call kanban_done with suppress_delivery: true \u2014 your result stays on the card but will NOT be messaged to the user. That is how you honor the user's do-not-notify instruction: a "nothing urgent" result without the flag would still be DELIVERED as a message. A report with zero items is only a valid deliverable when the task asks for a digest WITHOUT opt-out wording \u2014 when in doubt, deliver.
7826
- ` + formatRunMarker(run_id);
7842
+ ` + suppressionTeaching + formatRunMarker(run_id);
7827
7843
  let injectStatus;
7828
7844
  try {
7829
7845
  injectStatus = await injectMessageWithStatus(codeName, "task", nudge, { task_name: "scheduled-task" }, log);
@@ -8719,7 +8735,7 @@ ${escapeXml(msg.content)}
8719
8735
  return;
8720
8736
  }
8721
8737
  log(`[direct-chat] One-shot spawn for '${agent.codeName}' (msg=${msg.id}; host in-flight=${directChatSpawnGate.hostInFlight}, queued=${directChatSpawnGate.queuedCount})`);
8722
- const { getProjectDir: ccProjectDir } = await import("../claude-scheduler-EM24LTGV.js");
8738
+ const { getProjectDir: ccProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8723
8739
  const projDir = ccProjectDir(agent.codeName);
8724
8740
  const mcpConfigPath = join8(projDir, ".mcp.json");
8725
8741
  const serverNames = [];
@@ -9790,7 +9806,7 @@ async function processClaudePairSessions(agents) {
9790
9806
  killPairSession,
9791
9807
  pairTmuxSession,
9792
9808
  finalizeClaudePairOnboarding
9793
- } = await import("../claude-pair-runtime-AI37D2CT.js");
9809
+ } = await import("../claude-pair-runtime-DS7675XI.js");
9794
9810
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
9795
9811
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
9796
9812
  const killed = await killPairSession(pairTmuxSession(pairId));