@integrity-labs/agt-cli 0.28.984 → 0.28.986

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.
@@ -258,7 +258,7 @@ async function spawnPairSession(session) {
258
258
  return { ok: true };
259
259
  } catch {
260
260
  }
261
- const { resolveClaudeBinary } = await import("./persistent-session-R6WKQT2N.js");
261
+ const { resolveClaudeBinary } = await import("./persistent-session-PYYD53GZ.js");
262
262
  const claudeBin = resolveClaudeBinary();
263
263
  const pairEnv = {
264
264
  ...process.env,
@@ -580,4 +580,4 @@ export {
580
580
  startClaudePair,
581
581
  submitClaudePairCode
582
582
  };
583
- //# sourceMappingURL=claude-pair-runtime-YKJQT3SJ.js.map
583
+ //# sourceMappingURL=claude-pair-runtime-GQM26I3M.js.map
@@ -63,7 +63,7 @@ import {
63
63
  safeWriteJsonAtomic,
64
64
  setConfigHash,
65
65
  tripClass
66
- } from "../chunk-PVMVQ5IL.js";
66
+ } from "../chunk-XEI5QMZ7.js";
67
67
  import {
68
68
  getProjectDir as getProjectDir2,
69
69
  getReadyTasks,
@@ -140,7 +140,7 @@ import {
140
140
  takeZombieDetection,
141
141
  toOpencodeModel,
142
142
  writeEgressAllowlist
143
- } from "../chunk-72J5FCKI.js";
143
+ } from "../chunk-6KYXH6ZZ.js";
144
144
  import {
145
145
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
146
146
  AnchorSessionClient,
@@ -238,7 +238,7 @@ import {
238
238
  subagentActivityAgeSeconds,
239
239
  sumTranscriptUsageInWindow,
240
240
  transcriptActivityAgeSeconds
241
- } from "../chunk-DI4Q2OVR.js";
241
+ } from "../chunk-TGCA3LTI.js";
242
242
  import "../chunk-DHWNVVX4.js";
243
243
  import {
244
244
  reapOrphanChannelMcps
@@ -13292,7 +13292,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
13292
13292
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
13293
13293
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
13294
13294
  async function channelInboundActivityAgeSecondsFor(codeName) {
13295
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-M3QTWJGG.js");
13295
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-JENZOOKG.js");
13296
13296
  const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
13297
13297
  if (newest === null) return null;
13298
13298
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -14035,7 +14035,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14035
14035
  var lastVersionCheckAt = 0;
14036
14036
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14037
14037
  var lastResponsivenessProbeAt = 0;
14038
- var agtCliVersion = true ? "0.28.984" : "dev";
14038
+ var agtCliVersion = true ? "0.28.986" : "dev";
14039
14039
  function resolveBrewPath(execFileSync2) {
14040
14040
  try {
14041
14041
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -15651,7 +15651,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
15651
15651
  if (codeNames.length === 0) return;
15652
15652
  void (async () => {
15653
15653
  try {
15654
- const { collectDiagnostics } = await import("../persistent-session-R6WKQT2N.js");
15654
+ const { collectDiagnostics } = await import("../persistent-session-PYYD53GZ.js");
15655
15655
  await api.post("/host/heartbeat", {
15656
15656
  host_id: hostId,
15657
15657
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -15793,7 +15793,7 @@ async function pollCycleInner() {
15793
15793
  }
15794
15794
  try {
15795
15795
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
15796
- const { collectDiagnostics } = await import("../persistent-session-R6WKQT2N.js");
15796
+ const { collectDiagnostics } = await import("../persistent-session-PYYD53GZ.js");
15797
15797
  const diagCodeNames = [...agentState.persistentSessionAgents];
15798
15798
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor) : void 0;
15799
15799
  let tailscaleHostname;
@@ -15969,7 +15969,7 @@ async function pollCycleInner() {
15969
15969
  collectPanelessActivityProbes,
15970
15970
  getResponsivenessIntervalMs,
15971
15971
  occupancyQualificationClassifications
15972
- } = await import("../responsiveness-probe-M3QTWJGG.js");
15972
+ } = await import("../responsiveness-probe-JENZOOKG.js");
15973
15973
  const probeIntervalMs = getResponsivenessIntervalMs();
15974
15974
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
15975
15975
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -16086,7 +16086,7 @@ async function pollCycleInner() {
16086
16086
  collectResponsivenessProbes,
16087
16087
  livePendingInboundOldestAgeSeconds,
16088
16088
  parkPendingInbound
16089
- } = await import("../responsiveness-probe-M3QTWJGG.js");
16089
+ } = await import("../responsiveness-probe-JENZOOKG.js");
16090
16090
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
16091
16091
  const wedgeNow = /* @__PURE__ */ new Date();
16092
16092
  const liveAgents = agentState.persistentSessionAgents;
@@ -16242,7 +16242,7 @@ async function pollCycleInner() {
16242
16242
  }
16243
16243
  try {
16244
16244
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
16245
- const { probeSessionAuth } = await import("../session-auth-dead-FQ3N3BJ5.js");
16245
+ const { probeSessionAuth } = await import("../session-auth-dead-BGXRQB27.js");
16246
16246
  const observations = [];
16247
16247
  const pendingCacheCommits = [];
16248
16248
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -20530,7 +20530,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
20530
20530
  try {
20531
20531
  const freshId = rotateSessionForWedge(codeName);
20532
20532
  consecutiveWedgeCycles.delete(codeName);
20533
- const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-M3QTWJGG.js");
20533
+ const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-JENZOOKG.js");
20534
20534
  const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
20535
20535
  const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
20536
20536
  const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
@@ -20573,7 +20573,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
20573
20573
  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}`));
20574
20574
  void (async () => {
20575
20575
  try {
20576
- const { collectDiagnostics } = await import("../persistent-session-R6WKQT2N.js");
20576
+ const { collectDiagnostics } = await import("../persistent-session-PYYD53GZ.js");
20577
20577
  await api.post("/host/heartbeat", {
20578
20578
  host_id: hostId,
20579
20579
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -20624,7 +20624,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
20624
20624
  }
20625
20625
  try {
20626
20626
  const hostId = await getHostId();
20627
- const { collectDiagnostics } = await import("../persistent-session-R6WKQT2N.js");
20627
+ const { collectDiagnostics } = await import("../persistent-session-PYYD53GZ.js");
20628
20628
  await api.post("/host/heartbeat", {
20629
20629
  host_id: hostId,
20630
20630
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor)
@@ -21268,7 +21268,7 @@ async function processClaudePairSessions(agents) {
21268
21268
  killPairSession,
21269
21269
  pairTmuxSession,
21270
21270
  finalizeClaudePairOnboarding
21271
- } = await import("../claude-pair-runtime-YKJQT3SJ.js");
21271
+ } = await import("../claude-pair-runtime-GQM26I3M.js");
21272
21272
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
21273
21273
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
21274
21274
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -33132,9 +33132,51 @@ var composio_approved_egress_default = {
33132
33132
  "Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
33133
33133
  "a tidy file.",
33134
33134
  "",
33135
- "PASTE ALL FOUR, ALWAYS. Composio's field takes explicit comma-delimited addresses and",
33136
- "no CIDR, so a key armed with the hosts pair alone locks out every server-side call the",
33137
- "control plane makes, and one armed with the bridge pair alone locks out the fleet."
33135
+ "PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
33136
+ "addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
33137
+ "server-side call the control plane makes, and one armed with the bridge pair alone locks",
33138
+ "out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
33139
+ "makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
33140
+ "operator following the old sentence would arm a key that refuses that org's own agents.",
33141
+ "",
33142
+ "`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
33143
+ "An org whose agents run on a host we do not operate the network for - a BYO host in the",
33144
+ "customer's AWS account, or a `self` host on hardware we never see - egresses from an",
33145
+ "address no shared entry above carries. These are recorded per org rather than",
33146
+ "merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
33147
+ "into another org's key widens that key for no reason. The drift detector and",
33148
+ "fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
33149
+ "compared against a hosts-account scan - which is correct, since these addresses live in",
33150
+ "accounts neither ever enumerates.",
33151
+ "",
33152
+ "AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
33153
+ "`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
33154
+ "and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
33155
+ "`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
33156
+ "seeing an address is not deciding it may hold a key. A row appears here when a human",
33157
+ "decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
33158
+ "legitimately have a known egress address and no entry here - see Zanda below - and the",
33159
+ "posture page must withhold its paste value rather than offer the shared set.",
33160
+ "",
33161
+ "ZANDA IS THE LIVE EXAMPLE, AND ITS ABSENCE BELOW IS DELIBERATE.",
33162
+ "Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
33163
+ "585819234046, created 2026-09-16 - and as of 2026-09-20 its egress address IS known:",
33164
+ "3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
33165
+ "to find it (it is a THIRD account, which no census had thought to scan). It is not",
33166
+ "recorded because nobody has approved it. That host carries ZERO assigned agents, so it",
33167
+ "makes no Composio calls and the omission costs nothing today; the approval queue for",
33168
+ "exactly this decision is ENG-10668, unbuilt. The consequence is intended and measured:",
33169
+ "Zanda's org IS `fully_managed` (read from prod 2026-09-20), so it holds a",
33170
+ "platform-managed Composio key and DOES appear on /admin/composio-key-posture - with no",
33171
+ "paste value and a reason. That row is the feature working. Do not 'fix' it by adding",
33172
+ "3.107.131.133 below - add the approval.",
33173
+ "",
33174
+ "THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
33175
+ "rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
33176
+ "NATs, both BYO, and only Zanda's lacks a recorded address. Every other org's row is the",
33177
+ "shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
33178
+ "inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
33179
+ "NOT to narrow the rule back."
33138
33180
  ],
33139
33181
  account: "711726113003",
33140
33182
  homeRegion: "ap-southeast-2",
@@ -33171,13 +33213,29 @@ var composio_approved_egress_default = {
33171
33213
  seenAsGateway: "nat-02a4721d4ce678cf7",
33172
33214
  note: "The us-east-2b half of the same managed multi-AZ NAT. Two addresses is what `az: 2` costs on the allowlist, accepted deliberately in ENG-9684: adding an address AFTER arming is a blind hand edit of every key with production 401s as the only completion signal."
33173
33215
  }
33174
- ]
33216
+ ],
33217
+ orgAddresses: {
33218
+ "a4bba5c8-f664-46fe-a894-c95679c615ac": {
33219
+ orgSlug: "integritylabs",
33220
+ addresses: [
33221
+ {
33222
+ ip: "54.153.194.237",
33223
+ stage: "prod-byo",
33224
+ account: "436812233703",
33225
+ region: null,
33226
+ seenAsGateway: "nat-0c3cc231a8701a0e9",
33227
+ note: 'The BYO "Agents" account\'s NAT, serving `asha` on prod-integritylabs-integritylabs-4. Measured 2026-09-19 (ENG-10718) and again in the 24h /host/* census on 2026-09-20: 55,109 requests from 32 distinct paths. `region` is null because it is NOT RECORDED and cannot be enumerated from here - see the $comment; the comparison is on `ip` alone, so a null costs nothing, whereas a guessed region would be a fact this file states without evidence. THIS ORG WAS ARMED DURING THE GATE 5 REHEARSAL (ENG-10712) WITHOUT THIS ADDRESS. It passed only because nothing on that host called Composio inside the ~15-minute window; had it, the call would have been refused.'
33228
+ }
33229
+ ]
33230
+ }
33231
+ }
33175
33232
  };
33176
33233
 
33177
33234
  // ../core/dist/integrations/composio-approved-egress.js
33178
33235
  var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
33179
33236
  var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
33180
33237
  var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
33238
+ var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
33181
33239
 
33182
33240
  // ../core/dist/integrations/remote-mcp-proxy-env.js
33183
33241
  var REMOTE_MCP_PROXY_ENV = {
@@ -39859,6 +39917,34 @@ function computeStreamSlices(content, config2 = DEFAULT_STREAM_SLICE_CONFIG) {
39859
39917
  return slices;
39860
39918
  }
39861
39919
 
39920
+ // ../core/dist/channels/progress-step.js
39921
+ var AUTO_PROGRESS_FALLBACK_STEP = "Working\u2026";
39922
+ var VERBS = [
39923
+ ["Running", "Running a command"],
39924
+ ["Editing", "Editing a file"],
39925
+ ["Writing", "Writing a file"],
39926
+ ["Reading", "Reading a file"],
39927
+ ["Searching the web", "Searching the web"],
39928
+ ["Searching", "Searching"],
39929
+ ["Finding files", "Searching"],
39930
+ ["Fetching", "Fetching a page"],
39931
+ ["Working on", "Working on a subtask"],
39932
+ ["Using", "Using a tool"]
39933
+ ];
39934
+ function sanitizeAutoProgressStep(raw) {
39935
+ const text = raw.trim();
39936
+ if (!text)
39937
+ return "";
39938
+ for (const [prefix, label] of VERBS) {
39939
+ if (!text.startsWith(prefix))
39940
+ continue;
39941
+ const next = text.charAt(prefix.length);
39942
+ if (next === "" || next === " " || next === ":")
39943
+ return label;
39944
+ }
39945
+ return AUTO_PROGRESS_FALLBACK_STEP;
39946
+ }
39947
+
39862
39948
  // src/channel-progress.ts
39863
39949
  function channelLiveProgressEnabled() {
39864
39950
  return resolveHostBooleanFlag({
@@ -39915,7 +40001,7 @@ function parseProgressHeartbeat(raw) {
39915
40001
  if (!raw) return null;
39916
40002
  try {
39917
40003
  const obj = JSON.parse(raw);
39918
- const step = typeof obj.step === "string" ? obj.step.trim() : "";
40004
+ const step = typeof obj.step === "string" ? sanitizeAutoProgressStep(obj.step) : "";
39919
40005
  const updatedAtMs = typeof obj.updated_at_ms === "number" ? obj.updated_at_ms : NaN;
39920
40006
  if (!step || !Number.isFinite(updatedAtMs)) return null;
39921
40007
  return { step, updatedAtMs };
package/dist/mcp/index.js CHANGED
@@ -25714,9 +25714,51 @@ var composio_approved_egress_default = {
25714
25714
  "Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
25715
25715
  "a tidy file.",
25716
25716
  "",
25717
- "PASTE ALL FOUR, ALWAYS. Composio's field takes explicit comma-delimited addresses and",
25718
- "no CIDR, so a key armed with the hosts pair alone locks out every server-side call the",
25719
- "control plane makes, and one armed with the bridge pair alone locks out the fleet."
25717
+ "PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
25718
+ "addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
25719
+ "server-side call the control plane makes, and one armed with the bridge pair alone locks",
25720
+ "out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
25721
+ "makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
25722
+ "operator following the old sentence would arm a key that refuses that org's own agents.",
25723
+ "",
25724
+ "`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
25725
+ "An org whose agents run on a host we do not operate the network for - a BYO host in the",
25726
+ "customer's AWS account, or a `self` host on hardware we never see - egresses from an",
25727
+ "address no shared entry above carries. These are recorded per org rather than",
25728
+ "merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
25729
+ "into another org's key widens that key for no reason. The drift detector and",
25730
+ "fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
25731
+ "compared against a hosts-account scan - which is correct, since these addresses live in",
25732
+ "accounts neither ever enumerates.",
25733
+ "",
25734
+ "AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
25735
+ "`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
25736
+ "and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
25737
+ "`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
25738
+ "seeing an address is not deciding it may hold a key. A row appears here when a human",
25739
+ "decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
25740
+ "legitimately have a known egress address and no entry here - see Zanda below - and the",
25741
+ "posture page must withhold its paste value rather than offer the shared set.",
25742
+ "",
25743
+ "ZANDA IS THE LIVE EXAMPLE, AND ITS ABSENCE BELOW IS DELIBERATE.",
25744
+ "Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
25745
+ "585819234046, created 2026-09-16 - and as of 2026-09-20 its egress address IS known:",
25746
+ "3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
25747
+ "to find it (it is a THIRD account, which no census had thought to scan). It is not",
25748
+ "recorded because nobody has approved it. That host carries ZERO assigned agents, so it",
25749
+ "makes no Composio calls and the omission costs nothing today; the approval queue for",
25750
+ "exactly this decision is ENG-10668, unbuilt. The consequence is intended and measured:",
25751
+ "Zanda's org IS `fully_managed` (read from prod 2026-09-20), so it holds a",
25752
+ "platform-managed Composio key and DOES appear on /admin/composio-key-posture - with no",
25753
+ "paste value and a reason. That row is the feature working. Do not 'fix' it by adding",
25754
+ "3.107.131.133 below - add the approval.",
25755
+ "",
25756
+ "THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
25757
+ "rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
25758
+ "NATs, both BYO, and only Zanda's lacks a recorded address. Every other org's row is the",
25759
+ "shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
25760
+ "inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
25761
+ "NOT to narrow the rule back."
25720
25762
  ],
25721
25763
  account: "711726113003",
25722
25764
  homeRegion: "ap-southeast-2",
@@ -25753,13 +25795,29 @@ var composio_approved_egress_default = {
25753
25795
  seenAsGateway: "nat-02a4721d4ce678cf7",
25754
25796
  note: "The us-east-2b half of the same managed multi-AZ NAT. Two addresses is what `az: 2` costs on the allowlist, accepted deliberately in ENG-9684: adding an address AFTER arming is a blind hand edit of every key with production 401s as the only completion signal."
25755
25797
  }
25756
- ]
25798
+ ],
25799
+ orgAddresses: {
25800
+ "a4bba5c8-f664-46fe-a894-c95679c615ac": {
25801
+ orgSlug: "integritylabs",
25802
+ addresses: [
25803
+ {
25804
+ ip: "54.153.194.237",
25805
+ stage: "prod-byo",
25806
+ account: "436812233703",
25807
+ region: null,
25808
+ seenAsGateway: "nat-0c3cc231a8701a0e9",
25809
+ note: 'The BYO "Agents" account\'s NAT, serving `asha` on prod-integritylabs-integritylabs-4. Measured 2026-09-19 (ENG-10718) and again in the 24h /host/* census on 2026-09-20: 55,109 requests from 32 distinct paths. `region` is null because it is NOT RECORDED and cannot be enumerated from here - see the $comment; the comparison is on `ip` alone, so a null costs nothing, whereas a guessed region would be a fact this file states without evidence. THIS ORG WAS ARMED DURING THE GATE 5 REHEARSAL (ENG-10712) WITHOUT THIS ADDRESS. It passed only because nothing on that host called Composio inside the ~15-minute window; had it, the call would have been refused.'
25810
+ }
25811
+ ]
25812
+ }
25813
+ }
25757
25814
  };
25758
25815
 
25759
25816
  // ../core/dist/integrations/composio-approved-egress.js
25760
25817
  var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
25761
25818
  var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
25762
25819
  var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
25820
+ var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
25763
25821
 
25764
25822
  // ../core/dist/integrations/remote-mcp-proxy-env.js
25765
25823
  var REMOTE_MCP_PROXY_ENV = {
@@ -47212,7 +47270,7 @@ server.tool(
47212
47270
  source_external_id: external_exports.string().optional().describe('ID in the external system (e.g., "ENG-123")'),
47213
47271
  source_url: external_exports.string().optional().describe("Deep link URL to the external source"),
47214
47272
  deliver_to: external_exports.string().optional().describe(
47215
- "Optional: the Slack user id of the person who asked for this (the requester), so you can notify/deliver to them when the task needs their input or is done. If omitted on a card that came FROM a conversation, it defaults to the person you are talking to. It never defaults for a card created with no_channel_origin: true."
47273
+ 'Optional: the Slack user id of the person who asked for this (the requester), so you can notify/deliver to them when the task needs their input or is done. If omitted on a card that came FROM a conversation, it defaults to the person you are talking to. It never defaults for a card created with no_channel_origin: true. Pass the literal "none" to track the work without notifying the requester: no progress card is posted into the conversation and no completion card, result DM or waiting-on prompt is sent to them (reply to the person yourself when you have something for them). Operational escalation still happens: if the result cannot be delivered at all, the dead-letter path can notify the manager or team admins of the agent. Cannot be combined with notify_channel/notify_to.'
47216
47274
  ),
47217
47275
  no_channel_origin: external_exports.boolean().optional().describe(
47218
47276
  "Set true when this card did NOT come from a message someone sent you: work you started yourself, a scheduled/routine run, follow-up you decided to do, anything not answering a specific conversation. Without it, a card created shortly after any inbound message is attached to THAT conversation - its progress card posts into that person's thread and its result is addressed to them, even if the work has nothing to do with them. Leave it unset for a card that IS the answer to the message you are handling."
@@ -39865,9 +39865,51 @@ var composio_approved_egress_default = {
39865
39865
  "Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
39866
39866
  "a tidy file.",
39867
39867
  "",
39868
- "PASTE ALL FOUR, ALWAYS. Composio's field takes explicit comma-delimited addresses and",
39869
- "no CIDR, so a key armed with the hosts pair alone locks out every server-side call the",
39870
- "control plane makes, and one armed with the bridge pair alone locks out the fleet."
39868
+ "PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
39869
+ "addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
39870
+ "server-side call the control plane makes, and one armed with the bridge pair alone locks",
39871
+ "out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
39872
+ "makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
39873
+ "operator following the old sentence would arm a key that refuses that org's own agents.",
39874
+ "",
39875
+ "`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
39876
+ "An org whose agents run on a host we do not operate the network for - a BYO host in the",
39877
+ "customer's AWS account, or a `self` host on hardware we never see - egresses from an",
39878
+ "address no shared entry above carries. These are recorded per org rather than",
39879
+ "merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
39880
+ "into another org's key widens that key for no reason. The drift detector and",
39881
+ "fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
39882
+ "compared against a hosts-account scan - which is correct, since these addresses live in",
39883
+ "accounts neither ever enumerates.",
39884
+ "",
39885
+ "AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
39886
+ "`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
39887
+ "and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
39888
+ "`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
39889
+ "seeing an address is not deciding it may hold a key. A row appears here when a human",
39890
+ "decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
39891
+ "legitimately have a known egress address and no entry here - see Zanda below - and the",
39892
+ "posture page must withhold its paste value rather than offer the shared set.",
39893
+ "",
39894
+ "ZANDA IS THE LIVE EXAMPLE, AND ITS ABSENCE BELOW IS DELIBERATE.",
39895
+ "Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
39896
+ "585819234046, created 2026-09-16 - and as of 2026-09-20 its egress address IS known:",
39897
+ "3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
39898
+ "to find it (it is a THIRD account, which no census had thought to scan). It is not",
39899
+ "recorded because nobody has approved it. That host carries ZERO assigned agents, so it",
39900
+ "makes no Composio calls and the omission costs nothing today; the approval queue for",
39901
+ "exactly this decision is ENG-10668, unbuilt. The consequence is intended and measured:",
39902
+ "Zanda's org IS `fully_managed` (read from prod 2026-09-20), so it holds a",
39903
+ "platform-managed Composio key and DOES appear on /admin/composio-key-posture - with no",
39904
+ "paste value and a reason. That row is the feature working. Do not 'fix' it by adding",
39905
+ "3.107.131.133 below - add the approval.",
39906
+ "",
39907
+ "THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
39908
+ "rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
39909
+ "NATs, both BYO, and only Zanda's lacks a recorded address. Every other org's row is the",
39910
+ "shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
39911
+ "inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
39912
+ "NOT to narrow the rule back."
39871
39913
  ],
39872
39914
  account: "711726113003",
39873
39915
  homeRegion: "ap-southeast-2",
@@ -39904,13 +39946,29 @@ var composio_approved_egress_default = {
39904
39946
  seenAsGateway: "nat-02a4721d4ce678cf7",
39905
39947
  note: "The us-east-2b half of the same managed multi-AZ NAT. Two addresses is what `az: 2` costs on the allowlist, accepted deliberately in ENG-9684: adding an address AFTER arming is a blind hand edit of every key with production 401s as the only completion signal."
39906
39948
  }
39907
- ]
39949
+ ],
39950
+ orgAddresses: {
39951
+ "a4bba5c8-f664-46fe-a894-c95679c615ac": {
39952
+ orgSlug: "integritylabs",
39953
+ addresses: [
39954
+ {
39955
+ ip: "54.153.194.237",
39956
+ stage: "prod-byo",
39957
+ account: "436812233703",
39958
+ region: null,
39959
+ seenAsGateway: "nat-0c3cc231a8701a0e9",
39960
+ note: 'The BYO "Agents" account\'s NAT, serving `asha` on prod-integritylabs-integritylabs-4. Measured 2026-09-19 (ENG-10718) and again in the 24h /host/* census on 2026-09-20: 55,109 requests from 32 distinct paths. `region` is null because it is NOT RECORDED and cannot be enumerated from here - see the $comment; the comparison is on `ip` alone, so a null costs nothing, whereas a guessed region would be a fact this file states without evidence. THIS ORG WAS ARMED DURING THE GATE 5 REHEARSAL (ENG-10712) WITHOUT THIS ADDRESS. It passed only because nothing on that host called Composio inside the ~15-minute window; had it, the call would have been refused.'
39961
+ }
39962
+ ]
39963
+ }
39964
+ }
39908
39965
  };
39909
39966
 
39910
39967
  // ../core/dist/integrations/composio-approved-egress.js
39911
39968
  var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
39912
39969
  var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
39913
39970
  var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
39971
+ var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
39914
39972
 
39915
39973
  // ../core/dist/integrations/remote-mcp-proxy-env.js
39916
39974
  var REMOTE_MCP_PROXY_ENV = {
@@ -34082,9 +34082,51 @@ var composio_approved_egress_default = {
34082
34082
  "Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
34083
34083
  "a tidy file.",
34084
34084
  "",
34085
- "PASTE ALL FOUR, ALWAYS. Composio's field takes explicit comma-delimited addresses and",
34086
- "no CIDR, so a key armed with the hosts pair alone locks out every server-side call the",
34087
- "control plane makes, and one armed with the bridge pair alone locks out the fleet."
34085
+ "PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
34086
+ "addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
34087
+ "server-side call the control plane makes, and one armed with the bridge pair alone locks",
34088
+ "out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
34089
+ "makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
34090
+ "operator following the old sentence would arm a key that refuses that org's own agents.",
34091
+ "",
34092
+ "`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
34093
+ "An org whose agents run on a host we do not operate the network for - a BYO host in the",
34094
+ "customer's AWS account, or a `self` host on hardware we never see - egresses from an",
34095
+ "address no shared entry above carries. These are recorded per org rather than",
34096
+ "merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
34097
+ "into another org's key widens that key for no reason. The drift detector and",
34098
+ "fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
34099
+ "compared against a hosts-account scan - which is correct, since these addresses live in",
34100
+ "accounts neither ever enumerates.",
34101
+ "",
34102
+ "AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
34103
+ "`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
34104
+ "and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
34105
+ "`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
34106
+ "seeing an address is not deciding it may hold a key. A row appears here when a human",
34107
+ "decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
34108
+ "legitimately have a known egress address and no entry here - see Zanda below - and the",
34109
+ "posture page must withhold its paste value rather than offer the shared set.",
34110
+ "",
34111
+ "ZANDA IS THE LIVE EXAMPLE, AND ITS ABSENCE BELOW IS DELIBERATE.",
34112
+ "Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
34113
+ "585819234046, created 2026-09-16 - and as of 2026-09-20 its egress address IS known:",
34114
+ "3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
34115
+ "to find it (it is a THIRD account, which no census had thought to scan). It is not",
34116
+ "recorded because nobody has approved it. That host carries ZERO assigned agents, so it",
34117
+ "makes no Composio calls and the omission costs nothing today; the approval queue for",
34118
+ "exactly this decision is ENG-10668, unbuilt. The consequence is intended and measured:",
34119
+ "Zanda's org IS `fully_managed` (read from prod 2026-09-20), so it holds a",
34120
+ "platform-managed Composio key and DOES appear on /admin/composio-key-posture - with no",
34121
+ "paste value and a reason. That row is the feature working. Do not 'fix' it by adding",
34122
+ "3.107.131.133 below - add the approval.",
34123
+ "",
34124
+ "THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
34125
+ "rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
34126
+ "NATs, both BYO, and only Zanda's lacks a recorded address. Every other org's row is the",
34127
+ "shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
34128
+ "inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
34129
+ "NOT to narrow the rule back."
34088
34130
  ],
34089
34131
  account: "711726113003",
34090
34132
  homeRegion: "ap-southeast-2",
@@ -34121,13 +34163,29 @@ var composio_approved_egress_default = {
34121
34163
  seenAsGateway: "nat-02a4721d4ce678cf7",
34122
34164
  note: "The us-east-2b half of the same managed multi-AZ NAT. Two addresses is what `az: 2` costs on the allowlist, accepted deliberately in ENG-9684: adding an address AFTER arming is a blind hand edit of every key with production 401s as the only completion signal."
34123
34165
  }
34124
- ]
34166
+ ],
34167
+ orgAddresses: {
34168
+ "a4bba5c8-f664-46fe-a894-c95679c615ac": {
34169
+ orgSlug: "integritylabs",
34170
+ addresses: [
34171
+ {
34172
+ ip: "54.153.194.237",
34173
+ stage: "prod-byo",
34174
+ account: "436812233703",
34175
+ region: null,
34176
+ seenAsGateway: "nat-0c3cc231a8701a0e9",
34177
+ note: 'The BYO "Agents" account\'s NAT, serving `asha` on prod-integritylabs-integritylabs-4. Measured 2026-09-19 (ENG-10718) and again in the 24h /host/* census on 2026-09-20: 55,109 requests from 32 distinct paths. `region` is null because it is NOT RECORDED and cannot be enumerated from here - see the $comment; the comparison is on `ip` alone, so a null costs nothing, whereas a guessed region would be a fact this file states without evidence. THIS ORG WAS ARMED DURING THE GATE 5 REHEARSAL (ENG-10712) WITHOUT THIS ADDRESS. It passed only because nothing on that host called Composio inside the ~15-minute window; had it, the call would have been refused.'
34178
+ }
34179
+ ]
34180
+ }
34181
+ }
34125
34182
  };
34126
34183
 
34127
34184
  // ../core/dist/integrations/composio-approved-egress.js
34128
34185
  var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
34129
34186
  var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
34130
34187
  var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
34188
+ var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
34131
34189
 
34132
34190
  // ../core/dist/integrations/remote-mcp-proxy-env.js
34133
34191
  var REMOTE_MCP_PROXY_ENV = {
@@ -41781,6 +41839,34 @@ function removeRecoveryLedgerEntry(ledgerDir, markerName, unlink = (p2) => {
41781
41839
  }
41782
41840
  }
41783
41841
 
41842
+ // ../core/dist/channels/progress-step.js
41843
+ var AUTO_PROGRESS_FALLBACK_STEP = "Working\u2026";
41844
+ var VERBS = [
41845
+ ["Running", "Running a command"],
41846
+ ["Editing", "Editing a file"],
41847
+ ["Writing", "Writing a file"],
41848
+ ["Reading", "Reading a file"],
41849
+ ["Searching the web", "Searching the web"],
41850
+ ["Searching", "Searching"],
41851
+ ["Finding files", "Searching"],
41852
+ ["Fetching", "Fetching a page"],
41853
+ ["Working on", "Working on a subtask"],
41854
+ ["Using", "Using a tool"]
41855
+ ];
41856
+ function sanitizeAutoProgressStep(raw) {
41857
+ const text = raw.trim();
41858
+ if (!text)
41859
+ return "";
41860
+ for (const [prefix, label] of VERBS) {
41861
+ if (!text.startsWith(prefix))
41862
+ continue;
41863
+ const next = text.charAt(prefix.length);
41864
+ if (next === "" || next === " " || next === ":")
41865
+ return label;
41866
+ }
41867
+ return AUTO_PROGRESS_FALLBACK_STEP;
41868
+ }
41869
+
41784
41870
  // src/channel-progress.ts
41785
41871
  function channelLiveProgressEnabled() {
41786
41872
  return resolveHostBooleanFlag({
@@ -41837,7 +41923,7 @@ function parseProgressHeartbeat(raw) {
41837
41923
  if (!raw) return null;
41838
41924
  try {
41839
41925
  const obj = JSON.parse(raw);
41840
- const step = typeof obj.step === "string" ? obj.step.trim() : "";
41926
+ const step = typeof obj.step === "string" ? sanitizeAutoProgressStep(obj.step) : "";
41841
41927
  const updatedAtMs = typeof obj.updated_at_ms === "number" ? obj.updated_at_ms : NaN;
41842
41928
  if (!step || !Number.isFinite(updatedAtMs)) return null;
41843
41929
  return { step, updatedAtMs };