@integrity-labs/agt-cli 0.28.931 → 0.28.932

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.
@@ -19,7 +19,7 @@ import {
19
19
  rotateDailySession,
20
20
  sessionFileExists,
21
21
  todayLocalIso
22
- } from "./chunk-7F32775G.js";
22
+ } from "./chunk-7KVUXOE4.js";
23
23
  import {
24
24
  reapOrphanChannelMcps
25
25
  } from "./chunk-XWVM4KPK.js";
@@ -5730,4 +5730,4 @@ export {
5730
5730
  stopAllSessionsAndWait,
5731
5731
  getProjectDir
5732
5732
  };
5733
- //# sourceMappingURL=chunk-HC3EDWKC.js.map
5733
+ //# sourceMappingURL=chunk-RZXKHPTJ.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-Z7S2MMRH.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-SJ5ANAFY.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-TDP2NJTT.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-XJUTHQBY.js.map
@@ -63,7 +63,7 @@ import {
63
63
  safeWriteJsonAtomic,
64
64
  setConfigHash,
65
65
  tripClass
66
- } from "../chunk-HSXAGIVO.js";
66
+ } from "../chunk-7BQR2GIS.js";
67
67
  import {
68
68
  getProjectDir as getProjectDir2,
69
69
  getReadyTasks,
@@ -136,7 +136,7 @@ import {
136
136
  takeZombieDetection,
137
137
  toOpencodeModel,
138
138
  writeEgressAllowlist
139
- } from "../chunk-HC3EDWKC.js";
139
+ } from "../chunk-RZXKHPTJ.js";
140
140
  import {
141
141
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
142
142
  AnchorSessionClient,
@@ -232,7 +232,7 @@ import {
232
232
  subagentActivityAgeSeconds,
233
233
  sumTranscriptUsageInWindow,
234
234
  transcriptActivityAgeSeconds
235
- } from "../chunk-7F32775G.js";
235
+ } from "../chunk-7KVUXOE4.js";
236
236
  import {
237
237
  reapOrphanChannelMcps
238
238
  } from "../chunk-XWVM4KPK.js";
@@ -13230,7 +13230,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13230
13230
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13231
13231
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13232
13232
  async function channelInboundActivityAgeSecondsFor(codeName) {
13233
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-SR62Y32C.js");
13233
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-ROU7HNBP.js");
13234
13234
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13235
13235
  if (newest === null) return null;
13236
13236
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -13915,7 +13915,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
13915
13915
  var lastVersionCheckAt = 0;
13916
13916
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
13917
13917
  var lastResponsivenessProbeAt = 0;
13918
- var agtCliVersion = true ? "0.28.931" : "dev";
13918
+ var agtCliVersion = true ? "0.28.932" : "dev";
13919
13919
  function resolveBrewPath(execFileSync2) {
13920
13920
  try {
13921
13921
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -15505,7 +15505,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
15505
15505
  if (codeNames.length === 0) return;
15506
15506
  void (async () => {
15507
15507
  try {
15508
- const { collectDiagnostics } = await import("../persistent-session-Z7S2MMRH.js");
15508
+ const { collectDiagnostics } = await import("../persistent-session-SJ5ANAFY.js");
15509
15509
  await api.post("/host/heartbeat", {
15510
15510
  host_id: hostId,
15511
15511
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -15647,7 +15647,7 @@ async function pollCycleInner() {
15647
15647
  }
15648
15648
  try {
15649
15649
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
15650
- const { collectDiagnostics } = await import("../persistent-session-Z7S2MMRH.js");
15650
+ const { collectDiagnostics } = await import("../persistent-session-SJ5ANAFY.js");
15651
15651
  const diagCodeNames = [...agentState.persistentSessionAgents];
15652
15652
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
15653
15653
  let tailscaleHostname;
@@ -15822,7 +15822,7 @@ async function pollCycleInner() {
15822
15822
  collectPanelessActivityProbes,
15823
15823
  getResponsivenessIntervalMs,
15824
15824
  occupancyQualificationClassifications
15825
- } = await import("../responsiveness-probe-SR62Y32C.js");
15825
+ } = await import("../responsiveness-probe-ROU7HNBP.js");
15826
15826
  const probeIntervalMs = getResponsivenessIntervalMs();
15827
15827
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
15828
15828
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -15939,7 +15939,7 @@ async function pollCycleInner() {
15939
15939
  collectResponsivenessProbes,
15940
15940
  livePendingInboundOldestAgeSeconds,
15941
15941
  parkPendingInbound
15942
- } = await import("../responsiveness-probe-SR62Y32C.js");
15942
+ } = await import("../responsiveness-probe-ROU7HNBP.js");
15943
15943
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
15944
15944
  const wedgeNow = /* @__PURE__ */ new Date();
15945
15945
  const liveAgents = agentState.persistentSessionAgents;
@@ -16095,7 +16095,7 @@ async function pollCycleInner() {
16095
16095
  }
16096
16096
  try {
16097
16097
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
16098
- const { probeSessionAuth } = await import("../session-auth-dead-25KP23AU.js");
16098
+ const { probeSessionAuth } = await import("../session-auth-dead-7IA3OFBT.js");
16099
16099
  const observations = [];
16100
16100
  const pendingCacheCommits = [];
16101
16101
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -20359,7 +20359,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
20359
20359
  try {
20360
20360
  const freshId = rotateSessionForWedge(codeName);
20361
20361
  consecutiveWedgeCycles.delete(codeName);
20362
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-SR62Y32C.js");
20362
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-ROU7HNBP.js");
20363
20363
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
20364
20364
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
20365
20365
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -20402,7 +20402,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
20402
20402
  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}`));
20403
20403
  void (async () => {
20404
20404
  try {
20405
- const { collectDiagnostics } = await import("../persistent-session-Z7S2MMRH.js");
20405
+ const { collectDiagnostics } = await import("../persistent-session-SJ5ANAFY.js");
20406
20406
  await api.post("/host/heartbeat", {
20407
20407
  host_id: hostId,
20408
20408
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -20453,7 +20453,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
20453
20453
  }
20454
20454
  try {
20455
20455
  const hostId = await getHostId();
20456
- const { collectDiagnostics } = await import("../persistent-session-Z7S2MMRH.js");
20456
+ const { collectDiagnostics } = await import("../persistent-session-SJ5ANAFY.js");
20457
20457
  await api.post("/host/heartbeat", {
20458
20458
  host_id: hostId,
20459
20459
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -21095,7 +21095,7 @@ async function processClaudePairSessions(agents) {
21095
21095
  killPairSession,
21096
21096
  pairTmuxSession,
21097
21097
  finalizeClaudePairOnboarding
21098
- } = await import("../claude-pair-runtime-TDP2NJTT.js");
21098
+ } = await import("../claude-pair-runtime-XJUTHQBY.js");
21099
21099
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
21100
21100
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
21101
21101
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -39891,7 +39891,7 @@ async function readCursorAdvanceBody(res) {
39891
39891
  function buildDirectChatMcpInstructions() {
39892
39892
  return [
39893
39893
  "CRITICAL: every response to a direct-chat <channel> tag MUST go through direct_chat.reply (passing the session_id verbatim). Text in your session WITHOUT a direct_chat.reply call never reaches the operator \u2014 the reply dies inside the agent process.",
39894
- 'Messages from the webapp Direct Chat arrive as <channel source="direct-chat" session_id="..." user="...">.',
39894
+ "Messages from the webapp Direct Chat arrive as a channel tag whose source is direct-chat, carrying session_id and user.",
39895
39895
  "When the tag carries user_name (and sometimes user_email / user_role), that is the verified human you are talking with; address them by name and tailor your reply to who they are. If those attributes are absent, the sender is unknown, so just reply helpfully without personalization.",
39896
39896
  "Reply using the direct_chat.reply tool, passing the session_id from the tag.",
39897
39897
  "Always reply to every direct chat message that expects a reply (its meta has requires_reply=true, or no requires_reply field) \u2014 the user is waiting in the webapp.",
@@ -42842,7 +42842,7 @@ function buildSlackMcpInstructions(opts) {
42842
42842
  const { ackReaction, skipReactionOn, skipReaction } = opts;
42843
42843
  return [
42844
42844
  "CRITICAL: every response to a Slack <channel> tag MUST go through slack.reply - typed text never reaches the user. Slow work: interim ack (slack.reply interim:true), then your FINAL answer as a separate slack.reply (interim omitted). An ack is not the answer.",
42845
- `Inbound: <channel ... inbound_id="ib_..." message_ts="..." [thread_context="..."]>. Reply with slack.reply passing inbound_id (copy it verbatim from the tag you are answering) + text; the server routes it to the right thread. Multiple <channel> tags = separate conversations: NEVER answer one user in another's inbound_id/thread. thread_context = pre-loaded thread; ground replies ONLY in it. For a self-initiated message (not a reply) set proactive:true.`,
42845
+ "Each inbound tag carries inbound_id and message_ts, and sometimes thread_context. Reply with slack.reply passing inbound_id (copy it verbatim from the tag you are answering) + text; the server routes it to the right thread. Multiple <channel> tags = separate conversations: NEVER answer one user in another's inbound_id/thread. thread_context = pre-loaded thread; ground replies ONLY in it. For a self-initiated message (not a reply) set proactive:true.",
42846
42846
  "Attachments: <channel> `files` is a JSON string - JSON.parse it. Entry with `path` (or a top-level `image_path`) is already downloaded - Read it; do NOT call slack.download_attachment. Only entries with `file_id` and no `path` (PDF/docx/csv) need slack.download_attachment (pass file_id + channel), then Read the returned path. Don't surface file-handling errors that don't affect the answer.",
42847
42847
  "Address users by user_name, never raw user ID. In multi-participant threads the CURRENT speaker is on the latest <channel> tag.",
42848
42848
  `Reactions (slack.react sparingly - prefer a reply): :${ackReaction}: = ack (auto-added on inbound, don't duplicate); \u2705 = success.` + (skipReactionOn ? ` "${skipReaction}" = seen, not replying.` : "") + " NEVER react to signal failure of your work - on failure slack.reply one sentence explaining it (no stack traces/secrets). \u23F3 and \u274C are system-only; never add them.",
@@ -15707,7 +15707,7 @@ var mcp = new Server(
15707
15707
  // High-priority lines first — Claude Code truncates instructions at
15708
15708
  // 2048 chars, so anything appended late silently disappears.
15709
15709
  "CRITICAL: every response to an MS Teams <channel> tag MUST go through teams.reply. Text in your session without a teams.reply call never reaches the user.",
15710
- 'Messages from Teams arrive as <channel source="msteams" user="<aad-id>" user_name="<display>" conversation_id="..." service_url="..." reply_to_id="..." />. Pass conversation_id + service_url + reply_to_id from the tag to teams.reply verbatim; threaded replies must include reply_to_id.',
15710
+ "Messages from Teams arrive as a channel tag carrying user (an AAD id), user_name, conversation_id, service_url and reply_to_id. Pass conversation_id + service_url + reply_to_id from the tag to teams.reply verbatim; threaded replies must include reply_to_id.",
15711
15711
  "Address users by user_name, never by raw user id (AAD object ids leak directory information).",
15712
15712
  "service_url is region-specific and arrives on every inbound \u2014 NEVER hardcode it, always echo the inbound value.",
15713
15713
  'Channel message + auto_followed="true": only reply if you have something useful to add; otherwise silently skip.',
@@ -42288,7 +42288,7 @@ function buildTelegramMcpInstructions(opts) {
42288
42288
  const skipReactionOn = opts.skipReactionOn && emoji2.length > 0 && emoji2.length <= MAX_SKIP_REACTION_UNITS;
42289
42289
  return [
42290
42290
  "CRITICAL: every response to a Telegram <channel> tag MUST go through telegram.reply with the chat_id from the tag \u2014 typed text never reaches the user. Slow work: interim ack (telegram.reply interim:true), then your FINAL answer as a separate telegram.reply (interim omitted). An ack is not the answer.",
42291
- 'Messages from Telegram arrive as <channel source="telegram" chat_id="..." user="..." user_name="..." message_id="...">. Pass reply_to_message_id from the tag so the response lands as a quote-reply in busy chats.',
42291
+ "Messages from Telegram arrive as a channel tag carrying chat_id, user, user_name and message_id. Pass reply_to_message_id from the tag so the response lands as a quote-reply in busy chats.",
42292
42292
  "Deliberately NOT replying (a standing rule bars you from that chat, or the message only changed state)? Call telegram.consume with the chat_id and a short reason: it settles the message without posting anything. Without a reply or a consume it counts as undelivered and re-delivers to you forever.",
42293
42293
  "Inbound attachments: `files` on the tag is a JSON string \u2014 JSON.parse it. An entry with `path` (or top-level `image_path`) is already downloaded \u2014 Read it. Entries with `file_id` and no `path` need telegram.download_attachment (file_id + chat_id), then Read the returned path.",
42294
42294
  'For work >30s follow the CLAUDE.md kanban flow: kanban_add \u2192 reply "On it \u2014 tracking here: <kanban URL>" \u2192 in_progress \u2192 reply the result. Simple lookups skip kanban but still reply.',
@@ -156050,11 +156050,11 @@ var mcp = new Server(
156050
156050
  },
156051
156051
  instructions: (IS_BAILEYS ? [
156052
156052
  "CRITICAL: every response to a WhatsApp <channel> tag MUST go through whatsapp.reply. Text in your session without a tool call never reaches the user.",
156053
- 'Messages arrive as <channel source="whatsapp" sender="<jid>" conversation_id="..." message_id="..." />. Pass the `sender` value verbatim as the `to` argument to whatsapp.reply.',
156053
+ "Messages arrive as a channel tag carrying sender (a JID), conversation_id and message_id. Pass the `sender` value verbatim as the `to` argument to whatsapp.reply.",
156054
156054
  "whatsapp.reply sends free-form text with no restrictions (this is a linked personal number, not a business template flow)."
156055
156055
  ] : [
156056
156056
  "CRITICAL: every response to a WhatsApp <channel> tag MUST go through whatsapp.reply (or whatsapp.send_template). Text in your session without a tool call never reaches the user.",
156057
- 'Messages arrive as <channel source="whatsapp" sender="<id>" conversation_id="..." message_id="..." />. Pass the `sender` value verbatim as the `to` argument to whatsapp.reply.',
156057
+ "Messages arrive as a channel tag carrying sender, conversation_id and message_id. Pass the `sender` value verbatim as the `to` argument to whatsapp.reply.",
156058
156058
  "whatsapp.reply sends free-form text and only works inside the 24h customer-service window (24h since the user last messaged). If it reports the window is closed, use whatsapp.send_template with a pre-approved template instead."
156059
156059
  ]).join(" ")
156060
156060
  }
@@ -62,8 +62,8 @@ import {
62
62
  writeDirectChatSessionState,
63
63
  writeEgressAllowlist,
64
64
  writePersistentClaudeWrapper
65
- } from "./chunk-HC3EDWKC.js";
66
- import "./chunk-7F32775G.js";
65
+ } from "./chunk-RZXKHPTJ.js";
66
+ import "./chunk-7KVUXOE4.js";
67
67
  import "./chunk-XWVM4KPK.js";
68
68
  export {
69
69
  CLAUDE_HOST_WIDE,
@@ -130,4 +130,4 @@ export {
130
130
  writeEgressAllowlist,
131
131
  writePersistentClaudeWrapper
132
132
  };
133
- //# sourceMappingURL=persistent-session-Z7S2MMRH.js.map
133
+ //# sourceMappingURL=persistent-session-SJ5ANAFY.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-HC3EDWKC.js";
4
- import "./chunk-7F32775G.js";
3
+ } from "./chunk-RZXKHPTJ.js";
4
+ import "./chunk-7KVUXOE4.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -799,4 +799,4 @@ export {
799
799
  readAndResetSlackReplyBindingClassifications,
800
800
  readAndResetSlackReplyTargetClassifications
801
801
  };
802
- //# sourceMappingURL=responsiveness-probe-SR62Y32C.js.map
802
+ //# sourceMappingURL=responsiveness-probe-ROU7HNBP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-7F32775G.js";
3
+ } from "./chunk-7KVUXOE4.js";
4
4
 
5
5
  // src/lib/session-auth-dead.ts
6
6
  import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
@@ -203,4 +203,4 @@ export {
203
203
  decideSessionAuthState,
204
204
  probeSessionAuth
205
205
  };
206
- //# sourceMappingURL=session-auth-dead-25KP23AU.js.map
206
+ //# sourceMappingURL=session-auth-dead-7IA3OFBT.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.931",
3
+ "version": "0.28.932",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {