@integrity-labs/agt-cli 0.28.974 → 0.28.976

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.
Files changed (25) hide show
  1. package/dist/bin/agt.js +5 -5
  2. package/dist/{chunk-3PYNSD4I.js → chunk-CIC25QXS.js} +14 -14
  3. package/dist/{chunk-3PYNSD4I.js.map → chunk-CIC25QXS.js.map} +1 -1
  4. package/dist/{chunk-PHPOHMSK.js → chunk-KTFN2AIB.js} +2 -2
  5. package/dist/{chunk-HRHDATT5.js → chunk-VF5BT7BP.js} +42 -21
  6. package/dist/{chunk-HRHDATT5.js.map → chunk-VF5BT7BP.js.map} +1 -1
  7. package/dist/{claude-pair-runtime-U6GBR7KM.js → claude-pair-runtime-XOIAF3ZU.js} +2 -2
  8. package/dist/lib/manager-worker.js +14 -14
  9. package/dist/lib/manager-worker.js.map +1 -1
  10. package/dist/mcp/direct-chat-channel.js +71 -24
  11. package/dist/mcp/index.js +38 -17
  12. package/dist/mcp/origami.js +34 -13
  13. package/dist/mcp/slack-channel.js +56 -35
  14. package/dist/mcp/teams-channel.js +5 -5
  15. package/dist/mcp/telegram-channel.js +49 -28
  16. package/dist/mcp/whatsapp-channel.js +9 -9
  17. package/dist/{persistent-session-YJJXZSUE.js → persistent-session-26W47NVS.js} +3 -3
  18. package/dist/{responsiveness-probe-SQZGSNVI.js → responsiveness-probe-KMHYGGYP.js} +3 -3
  19. package/dist/{session-auth-dead-7OLNDHJC.js → session-auth-dead-CRG2ESD2.js} +2 -2
  20. package/package.json +1 -1
  21. /package/dist/{chunk-PHPOHMSK.js.map → chunk-KTFN2AIB.js.map} +0 -0
  22. /package/dist/{claude-pair-runtime-U6GBR7KM.js.map → claude-pair-runtime-XOIAF3ZU.js.map} +0 -0
  23. /package/dist/{persistent-session-YJJXZSUE.js.map → persistent-session-26W47NVS.js.map} +0 -0
  24. /package/dist/{responsiveness-probe-SQZGSNVI.js.map → responsiveness-probe-KMHYGGYP.js.map} +0 -0
  25. /package/dist/{session-auth-dead-7OLNDHJC.js.map → session-auth-dead-CRG2ESD2.js.map} +0 -0
@@ -20,7 +20,7 @@ import {
20
20
  rotateDailySession,
21
21
  sessionFileExists,
22
22
  todayLocalIso
23
- } from "./chunk-HRHDATT5.js";
23
+ } from "./chunk-VF5BT7BP.js";
24
24
  import {
25
25
  classifyUnanswerablePane,
26
26
  findUsageLimitResetHint,
@@ -5575,4 +5575,4 @@ export {
5575
5575
  stopAllSessionsAndWait,
5576
5576
  getProjectDir
5577
5577
  };
5578
- //# sourceMappingURL=chunk-PHPOHMSK.js.map
5578
+ //# sourceMappingURL=chunk-KTFN2AIB.js.map
@@ -1303,8 +1303,8 @@ ${desc}
1303
1303
 
1304
1304
  **The delivery rule, true of every reply below:** the ONLY way a channel user
1305
1305
  (Slack, Telegram, Microsoft Teams, Direct Chat) receives anything from you is a
1306
- channel reply tool call - \`slack.reply\`, \`telegram.reply\`, \`teams.reply\`,
1307
- or \`direct_chat.reply\`. Plain text you write in your turn is NOT delivered to
1306
+ channel reply tool call - \`slack_reply\`, \`telegram_reply\`, \`teams_reply\`,
1307
+ or \`direct_chat_reply\`. Plain text you write in your turn is NOT delivered to
1308
1308
  the user; it goes only to your local session log. So always reply on the channel
1309
1309
  the message arrived on, and never answer a channel message with plain text
1310
1310
  alone: if you did not call a reply tool, the user received nothing.
@@ -1412,17 +1412,17 @@ ${resolvedChannels?.includes("slack") ? `
1412
1412
  ## Slack
1413
1413
 
1414
1414
  Slack MCP server connected. Triage per \xA7 FIRST ACTION on
1415
- every channel message; acknowledge before slow work. Only a \`slack.reply\`
1415
+ every channel message; acknowledge before slow work. Only a \`slack_reply\`
1416
1416
  call reaches the user; plain text does not. Tools:
1417
1417
 
1418
- - **slack.reply** \u2014 reply in a channel/thread
1419
- - **slack.react** \u2014 an emoji reaction (sparingly \u2014 see taxonomy)
1418
+ - **slack_reply** \u2014 reply in a channel/thread
1419
+ - **slack_react** \u2014 an emoji reaction (sparingly \u2014 see taxonomy)
1420
1420
  - **slack_read_thread** / **slack_read_history** \u2014 re-read a thread, or a
1421
1421
  channel's recent messages (\xA7 Reading a conversation back)
1422
1422
 
1423
1423
  Inbound gets an automatic \u{1F440}; don't duplicate it. Prefer a reply to a reaction.
1424
1424
 
1425
- **Reaction taxonomy (the only emoji for slack.react):**
1425
+ **Reaction taxonomy (the only emoji for slack_react):**
1426
1426
  - \u2705 (\`white_check_mark\`) \u2014 done, and a text reply isn't warranted.
1427
1427
  - \u274C (\`x\`) \u2014 **execution failure only**: you tried it and it errored. Never for
1428
1428
  "skipped", "disagree", "not addressed to me", "n/a" or "noted".
@@ -1641,7 +1641,7 @@ When you reply to a user via any channel (Slack, Telegram, direct chat, schedule
1641
1641
  - **Match the scope of the request.** A yes/no question gets a one-line answer; a "quick summary" gets a summary, not a dissertation. Cut any section, caveat, or restatement that doesn't directly answer what was asked.
1642
1642
  - **Never reference internal state.** Memory files, \`/tmp/\` paths, kanban task IDs, filesystem locations, "saved to \u2026" / "logged to \u2026" notes \u2014 these are invisible to the recipient and waste their attention. Only the deliverable content belongs in your reply.
1643
1643
  - **Put the full deliverable in the reply itself.** Don't tease ("I've prepared a detailed brief"), don't point "above" or "attached", and don't assume the recipient can see intermediate tool output. If they asked for a brief, the brief goes verbatim into your reply.
1644
- - **If the deliverable is a file** (PDF, CSV, screenshot, export, report), upload it with the channel's file-upload tool (e.g. \`slack.upload_file\`) rather than describing its path. The recipient cannot access your filesystem.
1644
+ - **If the deliverable is a file** (PDF, CSV, screenshot, export, report), upload it with the channel's file-upload tool (e.g. \`slack_upload_file\`) rather than describing its path. The recipient cannot access your filesystem.
1645
1645
 
1646
1646
  ## Standards
1647
1647
 
@@ -7378,11 +7378,18 @@ var FLAG_REGISTRY = [
7378
7378
  },
7379
7379
  {
7380
7380
  key: "ip-allowlist-enforce-admin-debug",
7381
- description: "ENG-10594 - whether the IP allowlist on the admin-debug surface (/admin/debug/*, including the deliberately unauthenticated POST /admin/debug/token that exchanges a tlk_ key) REFUSES, or merely observes. OFF (default) = shadow: every request is still evaluated and logged with verdict=admit or verdict=would-refuse, and nothing is ever rejected. ON = a caller whose platform-attested source address is outside AGT_IP_ALLOWLIST_ADMIN_DEBUG gets a bare 403. THE SSM PARAMETER IS A SECOND LEVER AND BOTH ARE NEEDED: with the list unset this flag does nothing, because an unconfigured allowlist admits everyone by design. Arm in that order - populate the list, read the shadow logs until the would-refuse set is understood, then flip this. Deliberately global (evaluated with an empty context): the middleware runs BEFORE authentication, so there is no verified org to scope by, and taking one from an unverified request would let a caller choose its own enforcement posture. Separate from the mcp flag on purpose - see that entry.",
7381
+ description: "ENG-10594 - whether the IP allowlist on the admin-debug surface (/admin/debug/*, including the deliberately unauthenticated POST /admin/debug/token that exchanges a tlk_ key) REFUSES, or merely observes. OFF (default) = shadow: every request is still evaluated and logged with verdict=admit or verdict=would-refuse, and nothing is ever rejected. ON = a caller whose platform-attested source address is outside AGT_IP_ALLOWLIST_ADMIN_DEBUG gets a bare 403. THE SSM PARAMETER IS A SECOND LEVER AND BOTH ARE NEEDED: with the list unset this flag does nothing, because an unconfigured allowlist admits everyone by design. Arm in that order - populate the list, read the shadow logs until the would-refuse set is understood, then flip this. Deliberately global (evaluated with an empty context): the middleware runs BEFORE authentication, so there is no verified org to scope by, and taking one from an unverified request would let a caller choose its own enforcement posture. There is deliberately NO counterpart flag for the per-agent MCP surface: that one is shadow-only structurally (its ENFORCE_FLAG entry is null), so arming this one does not and cannot arm that one. See the comment below this entry for why.",
7382
7382
  flagType: "boolean",
7383
- // Shadow. The measurement comes first: nobody yet knows the real set of
7384
- // staff addresses, and arming against a guess locks you out of the very
7385
- // tool you would use to diagnose the lockout.
7383
+ // Shadow. The measurement comes first - and ENG-10664 corrected what the
7384
+ // measurement is OF. This comment used to say "nobody yet knows the real set
7385
+ // of staff addresses": there is no such set. Measured over 48h, all 315
7386
+ // requests to this surface came from ONE address, the agt-hosts AZ-2a NAT
7387
+ // EIP - an AGENT calling the debug_* tools, not a person. The decided policy
7388
+ // is that it stays that way (admin-debug is only ever reached from our own
7389
+ // NAT gateways). So the pre-arm check is not "does my laptop appear" but
7390
+ // "is every NAT EIP in the list", because an AZ whose NAT has not yet
7391
+ // carried a debug_* call is absent from the log and would be refused the
7392
+ // instant this flips. See docs/runbooks/ip-allowlist-rollout.md step 3.
7386
7393
  defaultValue: false,
7387
7394
  // Arming it changes who can reach production diagnostics. Worth one
7388
7395
  // confirmation.
@@ -7397,20 +7404,34 @@ var FLAG_REGISTRY = [
7397
7404
  // ENFORCE_FLAG (packages/api/src/middleware/ip-allowlist.ts) is null, so no
7398
7405
  // flag is consulted and no flag flip can arm it.
7399
7406
  //
7400
- // Why it is not simply a second flag defaulting false: most of that surface's
7401
- // callers have no allowlistable address at all. Per ADR-0032 only hosts in the
7402
- // agt-hosts account egress through stable NAT EIPs; a host with
7403
- // provision_source `self` or `customer-ec2`, or any BYO account, egresses from
7404
- // an address the control plane cannot know. Arming against that population
7405
- // black-holes a customer's whole fleet, and per
7406
- // docs/runbooks/composio-allowlist-rollout.md this class of change has no
7407
+ // Why it is not simply a second flag defaulting false (CORRECTED, ENG-10664):
7408
+ //
7409
+ // This comment used to say the callers are agent HOSTS, most of which have no
7410
+ // allowlistable address per ADR-0032. That is the wrong caller. Agent hosts do
7411
+ // not call this surface at all: its handler's first act is
7412
+ // validateMcpAccessToken() against `mcp_oauth_tokens` (routes/mcp.ts:87, token
7413
+ // check at :91), so a host JWT is rejected outright - routes/host-runtime.ts
7414
+ // :33421 says so in as many words, which is why the ENG-4724 /host/* twins
7415
+ // exist. The caller set is remote MCP OAuth clients, structurally.
7416
+ //
7417
+ // The conclusion is unchanged and ONLY the reason has moved. Allowlisting this
7418
+ // surface would mean pinning a THIRD PARTY's egress ranges rather than our own
7419
+ // NAT EIPs - a different control, a different owner, a different failure mode:
7420
+ // they move a range and agent MCP access breaks with no signal on our side.
7421
+ // Per docs/runbooks/composio-allowlist-rollout.md this class of change has no
7407
7422
  // fleet-level undo. A flag would leave that one toggle away during an
7408
7423
  // incident, from someone who had just armed the admin-debug surface and
7409
7424
  // reasonably assumed the pair moved together. Requiring a code change puts
7410
7425
  // review in front of an irreversible action, which is the right price.
7411
7426
  //
7412
- // If the shadow data ever shows the population IS allowlistable, adding the
7413
- // flag here and a key in ENFORCE_FLAG is a small, deliberate diff.
7427
+ // Keeping the false rationale would have been worse than having none: a reader
7428
+ // who checked it would find it does not hold and might "fix" it by adding the
7429
+ // flag. That is the failure this rewrite exists to prevent.
7430
+ //
7431
+ // If we ever DECIDE to take on that third-party dependency deliberately,
7432
+ // adding the flag here and a key in ENFORCE_FLAG is a small diff - but it is a
7433
+ // decision to own someone else's egress, not a discovery that the population
7434
+ // was allowlistable all along.
7414
7435
  ];
7415
7436
  var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
7416
7437
  function getFlagDefinition(key) {
@@ -15179,4 +15200,4 @@ export {
15179
15200
  peekCurrentSession,
15180
15201
  readDailySessionPin
15181
15202
  };
15182
- //# sourceMappingURL=chunk-HRHDATT5.js.map
15203
+ //# sourceMappingURL=chunk-VF5BT7BP.js.map