@integrity-labs/agt-cli 0.28.1127 → 0.28.1129
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.
- package/dist/bin/agt.js +6 -6
- package/dist/{chunk-37PZYGGA.js → chunk-23GMWGOP.js} +3 -3
- package/dist/{chunk-7W5TLMFG.js → chunk-2YWHPXY7.js} +941 -378
- package/dist/chunk-2YWHPXY7.js.map +1 -0
- package/dist/{chunk-OCMJ5E6J.js → chunk-B6UYVEMD.js} +2 -1
- package/dist/chunk-B6UYVEMD.js.map +1 -0
- package/dist/{chunk-6J7WE4J4.js → chunk-JFABPA3Z.js} +44 -25
- package/dist/chunk-JFABPA3Z.js.map +1 -0
- package/dist/{claude-pair-runtime-H55GPDDO.js → claude-pair-runtime-LDJXKNWF.js} +3 -3
- package/dist/lib/manager-worker.js +336 -28
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +237 -237
- package/dist/mcp/index.js +237 -237
- package/dist/mcp/origami.js +237 -237
- package/dist/mcp/slack-channel.js +243 -243
- package/dist/mcp/telegram-channel.js +237 -237
- package/dist/{persistent-session-D5O5MMNY.js → persistent-session-QSE66QYT.js} +4 -4
- package/dist/{responsiveness-probe-JJQ3AC5E.js → responsiveness-probe-NC4A3FCR.js} +4 -4
- package/dist/{session-auth-dead-WYJJYTQB.js → session-auth-dead-23ERZN4N.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-6J7WE4J4.js.map +0 -1
- package/dist/chunk-7W5TLMFG.js.map +0 -1
- package/dist/chunk-OCMJ5E6J.js.map +0 -1
- /package/dist/{chunk-37PZYGGA.js.map → chunk-23GMWGOP.js.map} +0 -0
- /package/dist/{claude-pair-runtime-H55GPDDO.js.map → claude-pair-runtime-LDJXKNWF.js.map} +0 -0
- /package/dist/{persistent-session-D5O5MMNY.js.map → persistent-session-QSE66QYT.js.map} +0 -0
- /package/dist/{responsiveness-probe-JJQ3AC5E.js.map → responsiveness-probe-NC4A3FCR.js.map} +0 -0
- /package/dist/{session-auth-dead-WYJJYTQB.js.map → session-auth-dead-23ERZN4N.js.map} +0 -0
|
@@ -33354,243 +33354,6 @@ OAUTH_PROVIDERS["xero-control-plane"] = {
|
|
|
33354
33354
|
...OAUTH_PROVIDERS["xero"]
|
|
33355
33355
|
};
|
|
33356
33356
|
|
|
33357
|
-
// ../core/dist/integrations/composio-account-probe.js
|
|
33358
|
-
var BODY_MAX_BYTES = 1024 * 1024;
|
|
33359
|
-
|
|
33360
|
-
// ../core/dist/integrations/composio-approved-egress.json
|
|
33361
|
-
var composio_approved_egress_default = {
|
|
33362
|
-
$comment: [
|
|
33363
|
-
"ADR-0032 Part 3, gate item 2 + gate item 3 (ENG-9684). THE single recorded source",
|
|
33364
|
-
"for the addresses Composio's per-key IP allowlist is expected to hold. Read by BOTH",
|
|
33365
|
-
"scripts/fleet-egress-enum.sh (the operator's pre-arming instrument) and the",
|
|
33366
|
-
"ComposioEgressAddressDrift cron (the between-armings watch). They must agree, which",
|
|
33367
|
-
"is why neither carries its own copy.",
|
|
33368
|
-
"",
|
|
33369
|
-
"WHY A REPO FILE AND NOT SSM. Composio's allowlist has no read API, so its contents",
|
|
33370
|
-
"can never be queried - only inferred from a refusal. This file is therefore not a",
|
|
33371
|
-
"cache of vendor state; it is a DECLARATION of what a human pasted into a dashboard.",
|
|
33372
|
-
"A PR is the right ceremony for changing a security boundary nobody can read back.",
|
|
33373
|
-
"SSM would also hit registerCron's five-parameter grant scope (ENG-9940), where a",
|
|
33374
|
-
"sixth parameter fails silently.",
|
|
33375
|
-
"",
|
|
33376
|
-
"THE COMPARISON IS ON `ip` AND NOTHING ELSE. `seenAsGateway` is informational. A NAT",
|
|
33377
|
-
"rebuild that re-adopts the same EIP keeps egress correct while changing the gateway",
|
|
33378
|
-
"id, so comparing ids would red on the safe case - which is precisely the case Part 2's",
|
|
33379
|
-
"EIP adoption exists to create.",
|
|
33380
|
-
"",
|
|
33381
|
-
"ANY NEW HOSTS-ACCOUNT EGRESS ADDRESS TURNS THE DETECTOR RED UNTIL IT IS ADDED HERE.",
|
|
33382
|
-
"That is the forcing function working, not a fault: ENG-9426's 2b NAT was added in the",
|
|
33383
|
-
"same change that created it. Do the same for the next one, or the detector correctly",
|
|
33384
|
-
"reports that hosts are leaving from an address no key allows. Do not loosen the check.",
|
|
33385
|
-
"A CONTROL-PLANE address gets no such forcing function - the detector never sees that",
|
|
33386
|
-
"account at all - which is why the bridge note below is written out by hand instead.",
|
|
33387
|
-
"",
|
|
33388
|
-
"15.135.204.192 IS GONE AND MUST NOT BE RE-ADDED (ENG-9426, 2026-09-15).",
|
|
33389
|
-
"The dev NAT was retired and that address was RELEASED back to the AWS pool, so it can",
|
|
33390
|
-
"be reassigned to another AWS customer at any time. An allowlist entry naming it would",
|
|
33391
|
-
"then permit a stranger's host rather than simply failing closed. Nothing was armed when",
|
|
33392
|
-
"this happened, so no key ever held it - but this file IS what an operator pastes from,",
|
|
33393
|
-
"which is why it is removed here the same day.",
|
|
33394
|
-
"",
|
|
33395
|
-
"WHY retainOnDelete DID NOT SAVE IT, because the next person will assume it would.",
|
|
33396
|
-
"The option was added in the SAME change that set dev's natMode to `none`. Pulumi reads",
|
|
33397
|
-
"delete-time options from the STATE recorded at the resource's last registration, and by",
|
|
33398
|
-
"the time this ran the resource was no longer in the program at all - so the state still",
|
|
33399
|
-
"said 'delete normally'. retainOnDelete has to land in a deploy that STILL DECLARES the",
|
|
33400
|
-
"resource before it protects anything. The two prod hosts EIPs listed below are protected, because",
|
|
33401
|
-
"this apply registered them with the option set.",
|
|
33402
|
-
"",
|
|
33403
|
-
"THE BRIDGE ADDRESSES ARE RECORDED HERE AND LIVE SOMEWHERE ELSE (ENG-10687).",
|
|
33404
|
-
"The two control-plane bridge addresses were allocated by ENG-10515's deploy on",
|
|
33405
|
-
"2026-09-18 and are listed below with stage `prod-bridge`. They sit in the CONTROL",
|
|
33406
|
-
"PLANE account (109039361030), region us-east-2 - NOT the hosts account, and not",
|
|
33407
|
-
"ap-southeast-2. Read back live after that deploy, not predicted.",
|
|
33408
|
-
"",
|
|
33409
|
-
"SO `account` AND `homeRegion` ABOVE ARE NOT THE SCOPE OF THIS FILE. They are the",
|
|
33410
|
-
"single account and region the DETECTOR enumerates, which is why they stayed",
|
|
33411
|
-
"hosts-account values when addresses from a second account landed here. Each address",
|
|
33412
|
-
"carries its own `account` and `region`; read those, never the top-level pair, when",
|
|
33413
|
-
"asking where an address lives.",
|
|
33414
|
-
"",
|
|
33415
|
-
"THE DETECTOR CANNOT VERIFY THE BRIDGE PAIR, AND THAT IS CORRECT, NOT A BUG.",
|
|
33416
|
-
"ComposioEgressAddressDrift enumerates ONE account - the hosts account - so it compares",
|
|
33417
|
-
"only the addresses instances there actually route through. The bridge addresses sit in",
|
|
33418
|
-
"this set unmatched and unflagged, which costs nothing: the detector reports an OBSERVED",
|
|
33419
|
-
"address that is not approved, so a superset can never make it red. Do NOT 'fix' the",
|
|
33420
|
-
"asymmetry by trimming this file to what the detector checks - the file records what the",
|
|
33421
|
-
"ALLOWLIST must hold, which is a superset of what any one account scan can see.",
|
|
33422
|
-
"Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
|
|
33423
|
-
"a tidy file.",
|
|
33424
|
-
"",
|
|
33425
|
-
"PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
|
|
33426
|
-
"addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
|
|
33427
|
-
"server-side call the control plane makes, and one armed with the bridge pair alone locks",
|
|
33428
|
-
"out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
|
|
33429
|
-
"makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
|
|
33430
|
-
"operator following the old sentence would arm a key that refuses that org's own agents.",
|
|
33431
|
-
"",
|
|
33432
|
-
"`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
|
|
33433
|
-
"An org whose agents run on a host we do not operate the network for - a BYO host in the",
|
|
33434
|
-
"customer's AWS account, or a `self` host on hardware we never see - egresses from an",
|
|
33435
|
-
"address no shared entry above carries. These are recorded per org rather than",
|
|
33436
|
-
"merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
|
|
33437
|
-
"into another org's key widens that key for no reason. The drift detector and",
|
|
33438
|
-
"fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
|
|
33439
|
-
"compared against a hosts-account scan - which is correct, since these addresses live in",
|
|
33440
|
-
"accounts neither ever enumerates.",
|
|
33441
|
-
"",
|
|
33442
|
-
"AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
|
|
33443
|
-
"`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
|
|
33444
|
-
"and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
|
|
33445
|
-
"`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
|
|
33446
|
-
"seeing an address is not deciding it may hold a key. A row appears here when a human",
|
|
33447
|
-
"decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
|
|
33448
|
-
"decides it, in a PR, which is the same ceremony every other entry gets. So an org CAN",
|
|
33449
|
-
"legitimately have a known egress address and no entry here, and the posture page must",
|
|
33450
|
-
"withhold its paste value rather than offer the shared set. As of 2026-09-28 no org is in",
|
|
33451
|
-
"that state - Zanda was, and the block below records what it cost, which is the reason",
|
|
33452
|
-
"the withholding behaviour must not be softened just because nothing exercises it today.",
|
|
33453
|
-
"",
|
|
33454
|
-
"ZANDA IS THE LIVE EXAMPLE, AND ITS ADDRESS IS NOW APPROVED (2026-09-28). READ WHY.",
|
|
33455
|
-
"Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
|
|
33456
|
-
"585819234046, created 2026-09-16 - whose egress address was known from 2026-09-20:",
|
|
33457
|
-
"3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
|
|
33458
|
-
"to find it (it is a THIRD account, which no census had thought to scan). For eight days it",
|
|
33459
|
-
"was NOT recorded here, deliberately, because nobody had approved it.",
|
|
33460
|
-
"",
|
|
33461
|
-
"THE ARGUMENT FOR LEAVING IT WAS CORRECT AND ITS PREMISE EXPIRED WITHOUT A SIGNAL.",
|
|
33462
|
-
"This block used to read: 'That host carries ZERO assigned agents, so it makes no Composio",
|
|
33463
|
-
"calls and the omission costs nothing today.' True when written, and it stopped being true",
|
|
33464
|
-
"the moment an operator migrated an agent onto that host - which is a routine action, taken",
|
|
33465
|
-
"by someone who had no reason to read this file, and which nothing connects back to here.",
|
|
33466
|
-
"On 2026-09-28 that agent could not reach Jira: the org's key was armed, the host egressed",
|
|
33467
|
-
"from an address no allowlist carried, and Composio refused it. The address was approved and",
|
|
33468
|
-
"the full five-address set pasted into project pr_MY372XzWOmX_ the same day.",
|
|
33469
|
-
"",
|
|
33470
|
-
"SO THE LESSON IS NOT 'APPROVE FASTER'. It is that a cost bounded by 'no agents on that",
|
|
33471
|
-
"host' is bounded by a condition nothing enforces and nothing watches. The queue that would",
|
|
33472
|
-
"have surfaced this decision is ENG-10668, still unbuilt; until it exists, an address landing",
|
|
33473
|
-
"in `host_attested_egress` for a fully_managed org is a decision waiting on someone noticing.",
|
|
33474
|
-
"The customer-visible failure also outlived the fix: the refusals drove the integration into",
|
|
33475
|
-
"an ENG-7916 bind quarantine, which does not self-clear when the allowlist is corrected.",
|
|
33476
|
-
"",
|
|
33477
|
-
"THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
|
|
33478
|
-
"rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
|
|
33479
|
-
"NATs, both BYO, and as of 2026-09-28 BOTH have a recorded address, so no org's row withholds.",
|
|
33480
|
-
"shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
|
|
33481
|
-
"inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
|
|
33482
|
-
"NOT to narrow the rule back."
|
|
33483
|
-
],
|
|
33484
|
-
account: "711726113003",
|
|
33485
|
-
homeRegion: "ap-southeast-2",
|
|
33486
|
-
addresses: [
|
|
33487
|
-
{
|
|
33488
|
-
ip: "32.236.6.24",
|
|
33489
|
-
stage: "prod",
|
|
33490
|
-
account: "711726113003",
|
|
33491
|
-
region: "ap-southeast-2",
|
|
33492
|
-
seenAsGateway: "nat-00a3dac969c0641a6",
|
|
33493
|
-
note: "Prod hosts NAT. Measured 2026-09-12 (ENG-10392): 25 of 25 active prod host instances route 0.0.0.0/0 here."
|
|
33494
|
-
},
|
|
33495
|
-
{
|
|
33496
|
-
ip: "54.253.255.215",
|
|
33497
|
-
stage: "prod",
|
|
33498
|
-
account: "711726113003",
|
|
33499
|
-
region: "ap-southeast-2",
|
|
33500
|
-
seenAsGateway: "nat-04384e27ab04973b5",
|
|
33501
|
-
note: "Prod hosts NAT in ap-southeast-2b, created 2026-09-15 by ENG-9426. The 12 prod hosts in the 2b private subnet egress here instead of crossing to 2a. Verified live after the Pulumi apply, not predicted."
|
|
33502
|
-
},
|
|
33503
|
-
{
|
|
33504
|
-
ip: "77.112.237.198",
|
|
33505
|
-
stage: "prod-bridge",
|
|
33506
|
-
account: "109039361030",
|
|
33507
|
-
region: "us-east-2",
|
|
33508
|
-
seenAsGateway: "nat-07f1db970d2714b95",
|
|
33509
|
-
note: "Control-plane egress bridge NAT in us-east-2a, created 2026-09-18 by ENG-10515. Carries server-side Composio traffic from the API and the webapp SSR Lambda once COMPOSIO_EGRESS_TRANSPORT reads `bridge`; until then the bridge function is never invoked and this address sends nothing. Verified live after the deploy: attached to the gateway, state available, and matching /augmented/prod/secrets/COMPOSIO_EGRESS_IPS."
|
|
33510
|
-
},
|
|
33511
|
-
{
|
|
33512
|
-
ip: "18.224.120.114",
|
|
33513
|
-
stage: "prod-bridge",
|
|
33514
|
-
account: "109039361030",
|
|
33515
|
-
region: "us-east-2",
|
|
33516
|
-
seenAsGateway: "nat-02a4721d4ce678cf7",
|
|
33517
|
-
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."
|
|
33518
|
-
}
|
|
33519
|
-
],
|
|
33520
|
-
orgAddresses: {
|
|
33521
|
-
"a4bba5c8-f664-46fe-a894-c95679c615ac": {
|
|
33522
|
-
orgSlug: "integritylabs",
|
|
33523
|
-
addresses: [
|
|
33524
|
-
{
|
|
33525
|
-
ip: "54.153.194.237",
|
|
33526
|
-
stage: "prod-byo",
|
|
33527
|
-
account: "436812233703",
|
|
33528
|
-
region: null,
|
|
33529
|
-
seenAsGateway: "nat-0c3cc231a8701a0e9",
|
|
33530
|
-
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.'
|
|
33531
|
-
}
|
|
33532
|
-
]
|
|
33533
|
-
},
|
|
33534
|
-
"c6a844b7-45d6-44f3-8390-616de3924c03": {
|
|
33535
|
-
orgSlug: "zanda",
|
|
33536
|
-
addresses: [
|
|
33537
|
-
{
|
|
33538
|
-
ip: "3.107.131.133",
|
|
33539
|
-
stage: "prod-byo",
|
|
33540
|
-
account: "585819234046",
|
|
33541
|
-
region: null,
|
|
33542
|
-
seenAsGateway: null,
|
|
33543
|
-
note: "Zanda's BYO host d0a78e4f-7a21-4d8d-85db-66a167fdd8cb, created 2026-09-16 in a THIRD account no egress census had scanned. OBSERVED from `host_attested_egress` (ENG-10666) on 2026-09-20 and APPROVED 2026-09-28, after an agent was migrated onto that host and could not reach Jira - the org's key was already armed and no allowlist carried this address. `region` and `seenAsGateway` are null because they are NOT RECORDED and cannot be enumerated from here: the `augmented-byo-provisioner` role grants neither DescribeRouteTables nor DescribeNatGateways. The comparison is on `ip` alone, so a null costs nothing whereas a guessed value would be a fact this file states without evidence. The eight-day gap between observing and approving is the cost of ENG-10668 being unbuilt, not an oversight - see the ZANDA block in $comment."
|
|
33544
|
-
}
|
|
33545
|
-
]
|
|
33546
|
-
}
|
|
33547
|
-
}
|
|
33548
|
-
};
|
|
33549
|
-
|
|
33550
|
-
// ../core/dist/integrations/composio-approved-egress.js
|
|
33551
|
-
var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
|
|
33552
|
-
var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
|
|
33553
|
-
var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
|
|
33554
|
-
var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
|
|
33555
|
-
|
|
33556
|
-
// ../core/dist/integrations/remote-mcp-proxy-env.js
|
|
33557
|
-
var REMOTE_MCP_PROXY_ENV = {
|
|
33558
|
-
url: "AGT_REMOTE_MCP_URL",
|
|
33559
|
-
tokenFile: "AGT_REMOTE_MCP_TOKEN_FILE",
|
|
33560
|
-
tokenVar: "AGT_REMOTE_MCP_TOKEN_VAR",
|
|
33561
|
-
label: "AGT_REMOTE_MCP_LABEL",
|
|
33562
|
-
authHeader: "AGT_REMOTE_MCP_AUTH_HEADER",
|
|
33563
|
-
extraHeaders: "AGT_REMOTE_MCP_EXTRA_HEADERS",
|
|
33564
|
-
toolAllowlist: "AGT_REMOTE_MCP_TOOL_ALLOWLIST",
|
|
33565
|
-
preEnableToolsets: "AGT_REMOTE_MCP_PREENABLE_TOOLSETS",
|
|
33566
|
-
// ENG-8512: per-provider argument rules. A `tools/call` carrying a value we
|
|
33567
|
-
// KNOW the remote accepts and silently ignores is refused before it is
|
|
33568
|
-
// forwarded, rather than returning a 200 that every layer above records as
|
|
33569
|
-
// success. Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS: it shapes which calls
|
|
33570
|
-
// we forward, not what an outbound request looks like, so the probe (which
|
|
33571
|
-
// never issues a tools/call) has nothing to reconstruct from it.
|
|
33572
|
-
argRejects: "AGT_REMOTE_MCP_ARG_REJECTS",
|
|
33573
|
-
// ENG-10614: the per-tool HITL floor table, as JSON `{ "<tool>": "<tier>" }`.
|
|
33574
|
-
//
|
|
33575
|
-
// WHY THIS EXISTS AT ALL. A hosted API-key remote MCP is called by Claude Code
|
|
33576
|
-
// straight at the vendor, so none of the three brokered HITL gates
|
|
33577
|
-
// (`enforceComposioHitlGate`, `hitlGateForBrokerCall`, the CLI lane) is in the
|
|
33578
|
-
// path, and `tool_definitions.min_hitl_tier` was read by nothing on this lane
|
|
33579
|
-
// — measured: zero hits for that column under `packages/core/src/provisioning`,
|
|
33580
|
-
// `packages/mcp/src` or `apps/cli/src`. The catalog said `delete_item` needed
|
|
33581
|
-
// approval and the call went straight out.
|
|
33582
|
-
//
|
|
33583
|
-
// Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS, for the same reason as
|
|
33584
|
-
// `argRejects`: it shapes WHICH calls we forward, not what an outbound request
|
|
33585
|
-
// looks like, so the connectivity probe has nothing to reconstruct from it.
|
|
33586
|
-
toolTiers: "AGT_REMOTE_MCP_TOOL_TIERS"
|
|
33587
|
-
};
|
|
33588
|
-
var REMOTE_MCP_AUTH_ENV_KEYS = [
|
|
33589
|
-
REMOTE_MCP_PROXY_ENV.tokenVar,
|
|
33590
|
-
REMOTE_MCP_PROXY_ENV.authHeader,
|
|
33591
|
-
REMOTE_MCP_PROXY_ENV.extraHeaders
|
|
33592
|
-
];
|
|
33593
|
-
|
|
33594
33357
|
// ../core/dist/integrations/registry.js
|
|
33595
33358
|
var INTEGRATION_REGISTRY = [
|
|
33596
33359
|
{
|
|
@@ -35498,6 +35261,243 @@ var INSTALLABLE_NATIVE_INTEGRATIONS = INTEGRATION_REGISTRY.filter((d) => d.insta
|
|
|
35498
35261
|
}));
|
|
35499
35262
|
var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i) => i.id);
|
|
35500
35263
|
|
|
35264
|
+
// ../core/dist/integrations/composio-account-probe.js
|
|
35265
|
+
var BODY_MAX_BYTES = 1024 * 1024;
|
|
35266
|
+
|
|
35267
|
+
// ../core/dist/integrations/composio-approved-egress.json
|
|
35268
|
+
var composio_approved_egress_default = {
|
|
35269
|
+
$comment: [
|
|
35270
|
+
"ADR-0032 Part 3, gate item 2 + gate item 3 (ENG-9684). THE single recorded source",
|
|
35271
|
+
"for the addresses Composio's per-key IP allowlist is expected to hold. Read by BOTH",
|
|
35272
|
+
"scripts/fleet-egress-enum.sh (the operator's pre-arming instrument) and the",
|
|
35273
|
+
"ComposioEgressAddressDrift cron (the between-armings watch). They must agree, which",
|
|
35274
|
+
"is why neither carries its own copy.",
|
|
35275
|
+
"",
|
|
35276
|
+
"WHY A REPO FILE AND NOT SSM. Composio's allowlist has no read API, so its contents",
|
|
35277
|
+
"can never be queried - only inferred from a refusal. This file is therefore not a",
|
|
35278
|
+
"cache of vendor state; it is a DECLARATION of what a human pasted into a dashboard.",
|
|
35279
|
+
"A PR is the right ceremony for changing a security boundary nobody can read back.",
|
|
35280
|
+
"SSM would also hit registerCron's five-parameter grant scope (ENG-9940), where a",
|
|
35281
|
+
"sixth parameter fails silently.",
|
|
35282
|
+
"",
|
|
35283
|
+
"THE COMPARISON IS ON `ip` AND NOTHING ELSE. `seenAsGateway` is informational. A NAT",
|
|
35284
|
+
"rebuild that re-adopts the same EIP keeps egress correct while changing the gateway",
|
|
35285
|
+
"id, so comparing ids would red on the safe case - which is precisely the case Part 2's",
|
|
35286
|
+
"EIP adoption exists to create.",
|
|
35287
|
+
"",
|
|
35288
|
+
"ANY NEW HOSTS-ACCOUNT EGRESS ADDRESS TURNS THE DETECTOR RED UNTIL IT IS ADDED HERE.",
|
|
35289
|
+
"That is the forcing function working, not a fault: ENG-9426's 2b NAT was added in the",
|
|
35290
|
+
"same change that created it. Do the same for the next one, or the detector correctly",
|
|
35291
|
+
"reports that hosts are leaving from an address no key allows. Do not loosen the check.",
|
|
35292
|
+
"A CONTROL-PLANE address gets no such forcing function - the detector never sees that",
|
|
35293
|
+
"account at all - which is why the bridge note below is written out by hand instead.",
|
|
35294
|
+
"",
|
|
35295
|
+
"15.135.204.192 IS GONE AND MUST NOT BE RE-ADDED (ENG-9426, 2026-09-15).",
|
|
35296
|
+
"The dev NAT was retired and that address was RELEASED back to the AWS pool, so it can",
|
|
35297
|
+
"be reassigned to another AWS customer at any time. An allowlist entry naming it would",
|
|
35298
|
+
"then permit a stranger's host rather than simply failing closed. Nothing was armed when",
|
|
35299
|
+
"this happened, so no key ever held it - but this file IS what an operator pastes from,",
|
|
35300
|
+
"which is why it is removed here the same day.",
|
|
35301
|
+
"",
|
|
35302
|
+
"WHY retainOnDelete DID NOT SAVE IT, because the next person will assume it would.",
|
|
35303
|
+
"The option was added in the SAME change that set dev's natMode to `none`. Pulumi reads",
|
|
35304
|
+
"delete-time options from the STATE recorded at the resource's last registration, and by",
|
|
35305
|
+
"the time this ran the resource was no longer in the program at all - so the state still",
|
|
35306
|
+
"said 'delete normally'. retainOnDelete has to land in a deploy that STILL DECLARES the",
|
|
35307
|
+
"resource before it protects anything. The two prod hosts EIPs listed below are protected, because",
|
|
35308
|
+
"this apply registered them with the option set.",
|
|
35309
|
+
"",
|
|
35310
|
+
"THE BRIDGE ADDRESSES ARE RECORDED HERE AND LIVE SOMEWHERE ELSE (ENG-10687).",
|
|
35311
|
+
"The two control-plane bridge addresses were allocated by ENG-10515's deploy on",
|
|
35312
|
+
"2026-09-18 and are listed below with stage `prod-bridge`. They sit in the CONTROL",
|
|
35313
|
+
"PLANE account (109039361030), region us-east-2 - NOT the hosts account, and not",
|
|
35314
|
+
"ap-southeast-2. Read back live after that deploy, not predicted.",
|
|
35315
|
+
"",
|
|
35316
|
+
"SO `account` AND `homeRegion` ABOVE ARE NOT THE SCOPE OF THIS FILE. They are the",
|
|
35317
|
+
"single account and region the DETECTOR enumerates, which is why they stayed",
|
|
35318
|
+
"hosts-account values when addresses from a second account landed here. Each address",
|
|
35319
|
+
"carries its own `account` and `region`; read those, never the top-level pair, when",
|
|
35320
|
+
"asking where an address lives.",
|
|
35321
|
+
"",
|
|
35322
|
+
"THE DETECTOR CANNOT VERIFY THE BRIDGE PAIR, AND THAT IS CORRECT, NOT A BUG.",
|
|
35323
|
+
"ComposioEgressAddressDrift enumerates ONE account - the hosts account - so it compares",
|
|
35324
|
+
"only the addresses instances there actually route through. The bridge addresses sit in",
|
|
35325
|
+
"this set unmatched and unflagged, which costs nothing: the detector reports an OBSERVED",
|
|
35326
|
+
"address that is not approved, so a superset can never make it red. Do NOT 'fix' the",
|
|
35327
|
+
"asymmetry by trimming this file to what the detector checks - the file records what the",
|
|
35328
|
+
"ALLOWLIST must hold, which is a superset of what any one account scan can see.",
|
|
35329
|
+
"Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
|
|
35330
|
+
"a tidy file.",
|
|
35331
|
+
"",
|
|
35332
|
+
"PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
|
|
35333
|
+
"addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
|
|
35334
|
+
"server-side call the control plane makes, and one armed with the bridge pair alone locks",
|
|
35335
|
+
"out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
|
|
35336
|
+
"makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
|
|
35337
|
+
"operator following the old sentence would arm a key that refuses that org's own agents.",
|
|
35338
|
+
"",
|
|
35339
|
+
"`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
|
|
35340
|
+
"An org whose agents run on a host we do not operate the network for - a BYO host in the",
|
|
35341
|
+
"customer's AWS account, or a `self` host on hardware we never see - egresses from an",
|
|
35342
|
+
"address no shared entry above carries. These are recorded per org rather than",
|
|
35343
|
+
"merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
|
|
35344
|
+
"into another org's key widens that key for no reason. The drift detector and",
|
|
35345
|
+
"fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
|
|
35346
|
+
"compared against a hosts-account scan - which is correct, since these addresses live in",
|
|
35347
|
+
"accounts neither ever enumerates.",
|
|
35348
|
+
"",
|
|
35349
|
+
"AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
|
|
35350
|
+
"`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
|
|
35351
|
+
"and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
|
|
35352
|
+
"`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
|
|
35353
|
+
"seeing an address is not deciding it may hold a key. A row appears here when a human",
|
|
35354
|
+
"decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
|
|
35355
|
+
"decides it, in a PR, which is the same ceremony every other entry gets. So an org CAN",
|
|
35356
|
+
"legitimately have a known egress address and no entry here, and the posture page must",
|
|
35357
|
+
"withhold its paste value rather than offer the shared set. As of 2026-09-28 no org is in",
|
|
35358
|
+
"that state - Zanda was, and the block below records what it cost, which is the reason",
|
|
35359
|
+
"the withholding behaviour must not be softened just because nothing exercises it today.",
|
|
35360
|
+
"",
|
|
35361
|
+
"ZANDA IS THE LIVE EXAMPLE, AND ITS ADDRESS IS NOW APPROVED (2026-09-28). READ WHY.",
|
|
35362
|
+
"Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
|
|
35363
|
+
"585819234046, created 2026-09-16 - whose egress address was known from 2026-09-20:",
|
|
35364
|
+
"3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
|
|
35365
|
+
"to find it (it is a THIRD account, which no census had thought to scan). For eight days it",
|
|
35366
|
+
"was NOT recorded here, deliberately, because nobody had approved it.",
|
|
35367
|
+
"",
|
|
35368
|
+
"THE ARGUMENT FOR LEAVING IT WAS CORRECT AND ITS PREMISE EXPIRED WITHOUT A SIGNAL.",
|
|
35369
|
+
"This block used to read: 'That host carries ZERO assigned agents, so it makes no Composio",
|
|
35370
|
+
"calls and the omission costs nothing today.' True when written, and it stopped being true",
|
|
35371
|
+
"the moment an operator migrated an agent onto that host - which is a routine action, taken",
|
|
35372
|
+
"by someone who had no reason to read this file, and which nothing connects back to here.",
|
|
35373
|
+
"On 2026-09-28 that agent could not reach Jira: the org's key was armed, the host egressed",
|
|
35374
|
+
"from an address no allowlist carried, and Composio refused it. The address was approved and",
|
|
35375
|
+
"the full five-address set pasted into project pr_MY372XzWOmX_ the same day.",
|
|
35376
|
+
"",
|
|
35377
|
+
"SO THE LESSON IS NOT 'APPROVE FASTER'. It is that a cost bounded by 'no agents on that",
|
|
35378
|
+
"host' is bounded by a condition nothing enforces and nothing watches. The queue that would",
|
|
35379
|
+
"have surfaced this decision is ENG-10668, still unbuilt; until it exists, an address landing",
|
|
35380
|
+
"in `host_attested_egress` for a fully_managed org is a decision waiting on someone noticing.",
|
|
35381
|
+
"The customer-visible failure also outlived the fix: the refusals drove the integration into",
|
|
35382
|
+
"an ENG-7916 bind quarantine, which does not self-clear when the allowlist is corrected.",
|
|
35383
|
+
"",
|
|
35384
|
+
"THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
|
|
35385
|
+
"rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
|
|
35386
|
+
"NATs, both BYO, and as of 2026-09-28 BOTH have a recorded address, so no org's row withholds.",
|
|
35387
|
+
"shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
|
|
35388
|
+
"inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
|
|
35389
|
+
"NOT to narrow the rule back."
|
|
35390
|
+
],
|
|
35391
|
+
account: "711726113003",
|
|
35392
|
+
homeRegion: "ap-southeast-2",
|
|
35393
|
+
addresses: [
|
|
35394
|
+
{
|
|
35395
|
+
ip: "32.236.6.24",
|
|
35396
|
+
stage: "prod",
|
|
35397
|
+
account: "711726113003",
|
|
35398
|
+
region: "ap-southeast-2",
|
|
35399
|
+
seenAsGateway: "nat-00a3dac969c0641a6",
|
|
35400
|
+
note: "Prod hosts NAT. Measured 2026-09-12 (ENG-10392): 25 of 25 active prod host instances route 0.0.0.0/0 here."
|
|
35401
|
+
},
|
|
35402
|
+
{
|
|
35403
|
+
ip: "54.253.255.215",
|
|
35404
|
+
stage: "prod",
|
|
35405
|
+
account: "711726113003",
|
|
35406
|
+
region: "ap-southeast-2",
|
|
35407
|
+
seenAsGateway: "nat-04384e27ab04973b5",
|
|
35408
|
+
note: "Prod hosts NAT in ap-southeast-2b, created 2026-09-15 by ENG-9426. The 12 prod hosts in the 2b private subnet egress here instead of crossing to 2a. Verified live after the Pulumi apply, not predicted."
|
|
35409
|
+
},
|
|
35410
|
+
{
|
|
35411
|
+
ip: "77.112.237.198",
|
|
35412
|
+
stage: "prod-bridge",
|
|
35413
|
+
account: "109039361030",
|
|
35414
|
+
region: "us-east-2",
|
|
35415
|
+
seenAsGateway: "nat-07f1db970d2714b95",
|
|
35416
|
+
note: "Control-plane egress bridge NAT in us-east-2a, created 2026-09-18 by ENG-10515. Carries server-side Composio traffic from the API and the webapp SSR Lambda once COMPOSIO_EGRESS_TRANSPORT reads `bridge`; until then the bridge function is never invoked and this address sends nothing. Verified live after the deploy: attached to the gateway, state available, and matching /augmented/prod/secrets/COMPOSIO_EGRESS_IPS."
|
|
35417
|
+
},
|
|
35418
|
+
{
|
|
35419
|
+
ip: "18.224.120.114",
|
|
35420
|
+
stage: "prod-bridge",
|
|
35421
|
+
account: "109039361030",
|
|
35422
|
+
region: "us-east-2",
|
|
35423
|
+
seenAsGateway: "nat-02a4721d4ce678cf7",
|
|
35424
|
+
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."
|
|
35425
|
+
}
|
|
35426
|
+
],
|
|
35427
|
+
orgAddresses: {
|
|
35428
|
+
"a4bba5c8-f664-46fe-a894-c95679c615ac": {
|
|
35429
|
+
orgSlug: "integritylabs",
|
|
35430
|
+
addresses: [
|
|
35431
|
+
{
|
|
35432
|
+
ip: "54.153.194.237",
|
|
35433
|
+
stage: "prod-byo",
|
|
35434
|
+
account: "436812233703",
|
|
35435
|
+
region: null,
|
|
35436
|
+
seenAsGateway: "nat-0c3cc231a8701a0e9",
|
|
35437
|
+
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.'
|
|
35438
|
+
}
|
|
35439
|
+
]
|
|
35440
|
+
},
|
|
35441
|
+
"c6a844b7-45d6-44f3-8390-616de3924c03": {
|
|
35442
|
+
orgSlug: "zanda",
|
|
35443
|
+
addresses: [
|
|
35444
|
+
{
|
|
35445
|
+
ip: "3.107.131.133",
|
|
35446
|
+
stage: "prod-byo",
|
|
35447
|
+
account: "585819234046",
|
|
35448
|
+
region: null,
|
|
35449
|
+
seenAsGateway: null,
|
|
35450
|
+
note: "Zanda's BYO host d0a78e4f-7a21-4d8d-85db-66a167fdd8cb, created 2026-09-16 in a THIRD account no egress census had scanned. OBSERVED from `host_attested_egress` (ENG-10666) on 2026-09-20 and APPROVED 2026-09-28, after an agent was migrated onto that host and could not reach Jira - the org's key was already armed and no allowlist carried this address. `region` and `seenAsGateway` are null because they are NOT RECORDED and cannot be enumerated from here: the `augmented-byo-provisioner` role grants neither DescribeRouteTables nor DescribeNatGateways. The comparison is on `ip` alone, so a null costs nothing whereas a guessed value would be a fact this file states without evidence. The eight-day gap between observing and approving is the cost of ENG-10668 being unbuilt, not an oversight - see the ZANDA block in $comment."
|
|
35451
|
+
}
|
|
35452
|
+
]
|
|
35453
|
+
}
|
|
35454
|
+
}
|
|
35455
|
+
};
|
|
35456
|
+
|
|
35457
|
+
// ../core/dist/integrations/composio-approved-egress.js
|
|
35458
|
+
var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
|
|
35459
|
+
var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
|
|
35460
|
+
var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
|
|
35461
|
+
var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
|
|
35462
|
+
|
|
35463
|
+
// ../core/dist/integrations/remote-mcp-proxy-env.js
|
|
35464
|
+
var REMOTE_MCP_PROXY_ENV = {
|
|
35465
|
+
url: "AGT_REMOTE_MCP_URL",
|
|
35466
|
+
tokenFile: "AGT_REMOTE_MCP_TOKEN_FILE",
|
|
35467
|
+
tokenVar: "AGT_REMOTE_MCP_TOKEN_VAR",
|
|
35468
|
+
label: "AGT_REMOTE_MCP_LABEL",
|
|
35469
|
+
authHeader: "AGT_REMOTE_MCP_AUTH_HEADER",
|
|
35470
|
+
extraHeaders: "AGT_REMOTE_MCP_EXTRA_HEADERS",
|
|
35471
|
+
toolAllowlist: "AGT_REMOTE_MCP_TOOL_ALLOWLIST",
|
|
35472
|
+
preEnableToolsets: "AGT_REMOTE_MCP_PREENABLE_TOOLSETS",
|
|
35473
|
+
// ENG-8512: per-provider argument rules. A `tools/call` carrying a value we
|
|
35474
|
+
// KNOW the remote accepts and silently ignores is refused before it is
|
|
35475
|
+
// forwarded, rather than returning a 200 that every layer above records as
|
|
35476
|
+
// success. Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS: it shapes which calls
|
|
35477
|
+
// we forward, not what an outbound request looks like, so the probe (which
|
|
35478
|
+
// never issues a tools/call) has nothing to reconstruct from it.
|
|
35479
|
+
argRejects: "AGT_REMOTE_MCP_ARG_REJECTS",
|
|
35480
|
+
// ENG-10614: the per-tool HITL floor table, as JSON `{ "<tool>": "<tier>" }`.
|
|
35481
|
+
//
|
|
35482
|
+
// WHY THIS EXISTS AT ALL. A hosted API-key remote MCP is called by Claude Code
|
|
35483
|
+
// straight at the vendor, so none of the three brokered HITL gates
|
|
35484
|
+
// (`enforceComposioHitlGate`, `hitlGateForBrokerCall`, the CLI lane) is in the
|
|
35485
|
+
// path, and `tool_definitions.min_hitl_tier` was read by nothing on this lane
|
|
35486
|
+
// — measured: zero hits for that column under `packages/core/src/provisioning`,
|
|
35487
|
+
// `packages/mcp/src` or `apps/cli/src`. The catalog said `delete_item` needed
|
|
35488
|
+
// approval and the call went straight out.
|
|
35489
|
+
//
|
|
35490
|
+
// Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS, for the same reason as
|
|
35491
|
+
// `argRejects`: it shapes WHICH calls we forward, not what an outbound request
|
|
35492
|
+
// looks like, so the connectivity probe has nothing to reconstruct from it.
|
|
35493
|
+
toolTiers: "AGT_REMOTE_MCP_TOOL_TIERS"
|
|
35494
|
+
};
|
|
35495
|
+
var REMOTE_MCP_AUTH_ENV_KEYS = [
|
|
35496
|
+
REMOTE_MCP_PROXY_ENV.tokenVar,
|
|
35497
|
+
REMOTE_MCP_PROXY_ENV.authHeader,
|
|
35498
|
+
REMOTE_MCP_PROXY_ENV.extraHeaders
|
|
35499
|
+
];
|
|
35500
|
+
|
|
35501
35501
|
// ../core/dist/direct-chat/upload.js
|
|
35502
35502
|
var MB2 = 1024 * 1024;
|
|
35503
35503
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 100 * MB2;
|