@integrity-labs/agt-cli 0.28.1128 → 0.28.1130
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 +5 -5
- package/dist/{chunk-Q272XYOI.js → chunk-EEBMAG52.js} +4 -4
- package/dist/{chunk-EVYDMDOY.js → chunk-KN4GAY5Z.js} +147 -2
- package/dist/chunk-KN4GAY5Z.js.map +1 -0
- package/dist/{chunk-BUCSF5DF.js → chunk-TRZ4SG77.js} +2 -2
- package/dist/{claude-pair-runtime-AFNXHDMT.js → claude-pair-runtime-WSUD7FHJ.js} +2 -2
- package/dist/lib/manager-worker.js +16 -16
- package/dist/mcp/direct-chat-channel.js +323 -237
- package/dist/mcp/index.js +323 -237
- package/dist/mcp/origami.js +323 -237
- package/dist/mcp/slack-channel.js +330 -244
- package/dist/mcp/telegram-channel.js +323 -237
- package/dist/{persistent-session-ICG7OHZM.js → persistent-session-YDKIHRCX.js} +3 -3
- package/dist/{responsiveness-probe-HRMY4TOT.js → responsiveness-probe-5LEQ4ZFE.js} +3 -3
- package/dist/{session-auth-dead-DCS7IE2F.js → session-auth-dead-C3GYATAO.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-EVYDMDOY.js.map +0 -1
- /package/dist/{chunk-Q272XYOI.js.map → chunk-EEBMAG52.js.map} +0 -0
- /package/dist/{chunk-BUCSF5DF.js.map → chunk-TRZ4SG77.js.map} +0 -0
- /package/dist/{claude-pair-runtime-AFNXHDMT.js.map → claude-pair-runtime-WSUD7FHJ.js.map} +0 -0
- /package/dist/{persistent-session-ICG7OHZM.js.map → persistent-session-YDKIHRCX.js.map} +0 -0
- /package/dist/{responsiveness-probe-HRMY4TOT.js.map → responsiveness-probe-5LEQ4ZFE.js.map} +0 -0
- /package/dist/{session-auth-dead-DCS7IE2F.js.map → session-auth-dead-C3GYATAO.js.map} +0 -0
package/dist/mcp/index.js
CHANGED
|
@@ -25856,243 +25856,6 @@ OAUTH_PROVIDERS["xero-control-plane"] = {
|
|
|
25856
25856
|
...OAUTH_PROVIDERS["xero"]
|
|
25857
25857
|
};
|
|
25858
25858
|
|
|
25859
|
-
// ../core/dist/integrations/composio-account-probe.js
|
|
25860
|
-
var BODY_MAX_BYTES = 1024 * 1024;
|
|
25861
|
-
|
|
25862
|
-
// ../core/dist/integrations/composio-approved-egress.json
|
|
25863
|
-
var composio_approved_egress_default = {
|
|
25864
|
-
$comment: [
|
|
25865
|
-
"ADR-0032 Part 3, gate item 2 + gate item 3 (ENG-9684). THE single recorded source",
|
|
25866
|
-
"for the addresses Composio's per-key IP allowlist is expected to hold. Read by BOTH",
|
|
25867
|
-
"scripts/fleet-egress-enum.sh (the operator's pre-arming instrument) and the",
|
|
25868
|
-
"ComposioEgressAddressDrift cron (the between-armings watch). They must agree, which",
|
|
25869
|
-
"is why neither carries its own copy.",
|
|
25870
|
-
"",
|
|
25871
|
-
"WHY A REPO FILE AND NOT SSM. Composio's allowlist has no read API, so its contents",
|
|
25872
|
-
"can never be queried - only inferred from a refusal. This file is therefore not a",
|
|
25873
|
-
"cache of vendor state; it is a DECLARATION of what a human pasted into a dashboard.",
|
|
25874
|
-
"A PR is the right ceremony for changing a security boundary nobody can read back.",
|
|
25875
|
-
"SSM would also hit registerCron's five-parameter grant scope (ENG-9940), where a",
|
|
25876
|
-
"sixth parameter fails silently.",
|
|
25877
|
-
"",
|
|
25878
|
-
"THE COMPARISON IS ON `ip` AND NOTHING ELSE. `seenAsGateway` is informational. A NAT",
|
|
25879
|
-
"rebuild that re-adopts the same EIP keeps egress correct while changing the gateway",
|
|
25880
|
-
"id, so comparing ids would red on the safe case - which is precisely the case Part 2's",
|
|
25881
|
-
"EIP adoption exists to create.",
|
|
25882
|
-
"",
|
|
25883
|
-
"ANY NEW HOSTS-ACCOUNT EGRESS ADDRESS TURNS THE DETECTOR RED UNTIL IT IS ADDED HERE.",
|
|
25884
|
-
"That is the forcing function working, not a fault: ENG-9426's 2b NAT was added in the",
|
|
25885
|
-
"same change that created it. Do the same for the next one, or the detector correctly",
|
|
25886
|
-
"reports that hosts are leaving from an address no key allows. Do not loosen the check.",
|
|
25887
|
-
"A CONTROL-PLANE address gets no such forcing function - the detector never sees that",
|
|
25888
|
-
"account at all - which is why the bridge note below is written out by hand instead.",
|
|
25889
|
-
"",
|
|
25890
|
-
"15.135.204.192 IS GONE AND MUST NOT BE RE-ADDED (ENG-9426, 2026-09-15).",
|
|
25891
|
-
"The dev NAT was retired and that address was RELEASED back to the AWS pool, so it can",
|
|
25892
|
-
"be reassigned to another AWS customer at any time. An allowlist entry naming it would",
|
|
25893
|
-
"then permit a stranger's host rather than simply failing closed. Nothing was armed when",
|
|
25894
|
-
"this happened, so no key ever held it - but this file IS what an operator pastes from,",
|
|
25895
|
-
"which is why it is removed here the same day.",
|
|
25896
|
-
"",
|
|
25897
|
-
"WHY retainOnDelete DID NOT SAVE IT, because the next person will assume it would.",
|
|
25898
|
-
"The option was added in the SAME change that set dev's natMode to `none`. Pulumi reads",
|
|
25899
|
-
"delete-time options from the STATE recorded at the resource's last registration, and by",
|
|
25900
|
-
"the time this ran the resource was no longer in the program at all - so the state still",
|
|
25901
|
-
"said 'delete normally'. retainOnDelete has to land in a deploy that STILL DECLARES the",
|
|
25902
|
-
"resource before it protects anything. The two prod hosts EIPs listed below are protected, because",
|
|
25903
|
-
"this apply registered them with the option set.",
|
|
25904
|
-
"",
|
|
25905
|
-
"THE BRIDGE ADDRESSES ARE RECORDED HERE AND LIVE SOMEWHERE ELSE (ENG-10687).",
|
|
25906
|
-
"The two control-plane bridge addresses were allocated by ENG-10515's deploy on",
|
|
25907
|
-
"2026-09-18 and are listed below with stage `prod-bridge`. They sit in the CONTROL",
|
|
25908
|
-
"PLANE account (109039361030), region us-east-2 - NOT the hosts account, and not",
|
|
25909
|
-
"ap-southeast-2. Read back live after that deploy, not predicted.",
|
|
25910
|
-
"",
|
|
25911
|
-
"SO `account` AND `homeRegion` ABOVE ARE NOT THE SCOPE OF THIS FILE. They are the",
|
|
25912
|
-
"single account and region the DETECTOR enumerates, which is why they stayed",
|
|
25913
|
-
"hosts-account values when addresses from a second account landed here. Each address",
|
|
25914
|
-
"carries its own `account` and `region`; read those, never the top-level pair, when",
|
|
25915
|
-
"asking where an address lives.",
|
|
25916
|
-
"",
|
|
25917
|
-
"THE DETECTOR CANNOT VERIFY THE BRIDGE PAIR, AND THAT IS CORRECT, NOT A BUG.",
|
|
25918
|
-
"ComposioEgressAddressDrift enumerates ONE account - the hosts account - so it compares",
|
|
25919
|
-
"only the addresses instances there actually route through. The bridge addresses sit in",
|
|
25920
|
-
"this set unmatched and unflagged, which costs nothing: the detector reports an OBSERVED",
|
|
25921
|
-
"address that is not approved, so a superset can never make it red. Do NOT 'fix' the",
|
|
25922
|
-
"asymmetry by trimming this file to what the detector checks - the file records what the",
|
|
25923
|
-
"ALLOWLIST must hold, which is a superset of what any one account scan can see.",
|
|
25924
|
-
"Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
|
|
25925
|
-
"a tidy file.",
|
|
25926
|
-
"",
|
|
25927
|
-
"PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
|
|
25928
|
-
"addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
|
|
25929
|
-
"server-side call the control plane makes, and one armed with the bridge pair alone locks",
|
|
25930
|
-
"out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
|
|
25931
|
-
"makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
|
|
25932
|
-
"operator following the old sentence would arm a key that refuses that org's own agents.",
|
|
25933
|
-
"",
|
|
25934
|
-
"`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
|
|
25935
|
-
"An org whose agents run on a host we do not operate the network for - a BYO host in the",
|
|
25936
|
-
"customer's AWS account, or a `self` host on hardware we never see - egresses from an",
|
|
25937
|
-
"address no shared entry above carries. These are recorded per org rather than",
|
|
25938
|
-
"merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
|
|
25939
|
-
"into another org's key widens that key for no reason. The drift detector and",
|
|
25940
|
-
"fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
|
|
25941
|
-
"compared against a hosts-account scan - which is correct, since these addresses live in",
|
|
25942
|
-
"accounts neither ever enumerates.",
|
|
25943
|
-
"",
|
|
25944
|
-
"AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
|
|
25945
|
-
"`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
|
|
25946
|
-
"and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
|
|
25947
|
-
"`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
|
|
25948
|
-
"seeing an address is not deciding it may hold a key. A row appears here when a human",
|
|
25949
|
-
"decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
|
|
25950
|
-
"decides it, in a PR, which is the same ceremony every other entry gets. So an org CAN",
|
|
25951
|
-
"legitimately have a known egress address and no entry here, and the posture page must",
|
|
25952
|
-
"withhold its paste value rather than offer the shared set. As of 2026-09-28 no org is in",
|
|
25953
|
-
"that state - Zanda was, and the block below records what it cost, which is the reason",
|
|
25954
|
-
"the withholding behaviour must not be softened just because nothing exercises it today.",
|
|
25955
|
-
"",
|
|
25956
|
-
"ZANDA IS THE LIVE EXAMPLE, AND ITS ADDRESS IS NOW APPROVED (2026-09-28). READ WHY.",
|
|
25957
|
-
"Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
|
|
25958
|
-
"585819234046, created 2026-09-16 - whose egress address was known from 2026-09-20:",
|
|
25959
|
-
"3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
|
|
25960
|
-
"to find it (it is a THIRD account, which no census had thought to scan). For eight days it",
|
|
25961
|
-
"was NOT recorded here, deliberately, because nobody had approved it.",
|
|
25962
|
-
"",
|
|
25963
|
-
"THE ARGUMENT FOR LEAVING IT WAS CORRECT AND ITS PREMISE EXPIRED WITHOUT A SIGNAL.",
|
|
25964
|
-
"This block used to read: 'That host carries ZERO assigned agents, so it makes no Composio",
|
|
25965
|
-
"calls and the omission costs nothing today.' True when written, and it stopped being true",
|
|
25966
|
-
"the moment an operator migrated an agent onto that host - which is a routine action, taken",
|
|
25967
|
-
"by someone who had no reason to read this file, and which nothing connects back to here.",
|
|
25968
|
-
"On 2026-09-28 that agent could not reach Jira: the org's key was armed, the host egressed",
|
|
25969
|
-
"from an address no allowlist carried, and Composio refused it. The address was approved and",
|
|
25970
|
-
"the full five-address set pasted into project pr_MY372XzWOmX_ the same day.",
|
|
25971
|
-
"",
|
|
25972
|
-
"SO THE LESSON IS NOT 'APPROVE FASTER'. It is that a cost bounded by 'no agents on that",
|
|
25973
|
-
"host' is bounded by a condition nothing enforces and nothing watches. The queue that would",
|
|
25974
|
-
"have surfaced this decision is ENG-10668, still unbuilt; until it exists, an address landing",
|
|
25975
|
-
"in `host_attested_egress` for a fully_managed org is a decision waiting on someone noticing.",
|
|
25976
|
-
"The customer-visible failure also outlived the fix: the refusals drove the integration into",
|
|
25977
|
-
"an ENG-7916 bind quarantine, which does not self-clear when the allowlist is corrected.",
|
|
25978
|
-
"",
|
|
25979
|
-
"THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
|
|
25980
|
-
"rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
|
|
25981
|
-
"NATs, both BYO, and as of 2026-09-28 BOTH have a recorded address, so no org's row withholds.",
|
|
25982
|
-
"shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
|
|
25983
|
-
"inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
|
|
25984
|
-
"NOT to narrow the rule back."
|
|
25985
|
-
],
|
|
25986
|
-
account: "711726113003",
|
|
25987
|
-
homeRegion: "ap-southeast-2",
|
|
25988
|
-
addresses: [
|
|
25989
|
-
{
|
|
25990
|
-
ip: "32.236.6.24",
|
|
25991
|
-
stage: "prod",
|
|
25992
|
-
account: "711726113003",
|
|
25993
|
-
region: "ap-southeast-2",
|
|
25994
|
-
seenAsGateway: "nat-00a3dac969c0641a6",
|
|
25995
|
-
note: "Prod hosts NAT. Measured 2026-09-12 (ENG-10392): 25 of 25 active prod host instances route 0.0.0.0/0 here."
|
|
25996
|
-
},
|
|
25997
|
-
{
|
|
25998
|
-
ip: "54.253.255.215",
|
|
25999
|
-
stage: "prod",
|
|
26000
|
-
account: "711726113003",
|
|
26001
|
-
region: "ap-southeast-2",
|
|
26002
|
-
seenAsGateway: "nat-04384e27ab04973b5",
|
|
26003
|
-
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."
|
|
26004
|
-
},
|
|
26005
|
-
{
|
|
26006
|
-
ip: "77.112.237.198",
|
|
26007
|
-
stage: "prod-bridge",
|
|
26008
|
-
account: "109039361030",
|
|
26009
|
-
region: "us-east-2",
|
|
26010
|
-
seenAsGateway: "nat-07f1db970d2714b95",
|
|
26011
|
-
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."
|
|
26012
|
-
},
|
|
26013
|
-
{
|
|
26014
|
-
ip: "18.224.120.114",
|
|
26015
|
-
stage: "prod-bridge",
|
|
26016
|
-
account: "109039361030",
|
|
26017
|
-
region: "us-east-2",
|
|
26018
|
-
seenAsGateway: "nat-02a4721d4ce678cf7",
|
|
26019
|
-
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."
|
|
26020
|
-
}
|
|
26021
|
-
],
|
|
26022
|
-
orgAddresses: {
|
|
26023
|
-
"a4bba5c8-f664-46fe-a894-c95679c615ac": {
|
|
26024
|
-
orgSlug: "integritylabs",
|
|
26025
|
-
addresses: [
|
|
26026
|
-
{
|
|
26027
|
-
ip: "54.153.194.237",
|
|
26028
|
-
stage: "prod-byo",
|
|
26029
|
-
account: "436812233703",
|
|
26030
|
-
region: null,
|
|
26031
|
-
seenAsGateway: "nat-0c3cc231a8701a0e9",
|
|
26032
|
-
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.'
|
|
26033
|
-
}
|
|
26034
|
-
]
|
|
26035
|
-
},
|
|
26036
|
-
"c6a844b7-45d6-44f3-8390-616de3924c03": {
|
|
26037
|
-
orgSlug: "zanda",
|
|
26038
|
-
addresses: [
|
|
26039
|
-
{
|
|
26040
|
-
ip: "3.107.131.133",
|
|
26041
|
-
stage: "prod-byo",
|
|
26042
|
-
account: "585819234046",
|
|
26043
|
-
region: null,
|
|
26044
|
-
seenAsGateway: null,
|
|
26045
|
-
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."
|
|
26046
|
-
}
|
|
26047
|
-
]
|
|
26048
|
-
}
|
|
26049
|
-
}
|
|
26050
|
-
};
|
|
26051
|
-
|
|
26052
|
-
// ../core/dist/integrations/composio-approved-egress.js
|
|
26053
|
-
var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
|
|
26054
|
-
var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
|
|
26055
|
-
var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
|
|
26056
|
-
var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
|
|
26057
|
-
|
|
26058
|
-
// ../core/dist/integrations/remote-mcp-proxy-env.js
|
|
26059
|
-
var REMOTE_MCP_PROXY_ENV = {
|
|
26060
|
-
url: "AGT_REMOTE_MCP_URL",
|
|
26061
|
-
tokenFile: "AGT_REMOTE_MCP_TOKEN_FILE",
|
|
26062
|
-
tokenVar: "AGT_REMOTE_MCP_TOKEN_VAR",
|
|
26063
|
-
label: "AGT_REMOTE_MCP_LABEL",
|
|
26064
|
-
authHeader: "AGT_REMOTE_MCP_AUTH_HEADER",
|
|
26065
|
-
extraHeaders: "AGT_REMOTE_MCP_EXTRA_HEADERS",
|
|
26066
|
-
toolAllowlist: "AGT_REMOTE_MCP_TOOL_ALLOWLIST",
|
|
26067
|
-
preEnableToolsets: "AGT_REMOTE_MCP_PREENABLE_TOOLSETS",
|
|
26068
|
-
// ENG-8512: per-provider argument rules. A `tools/call` carrying a value we
|
|
26069
|
-
// KNOW the remote accepts and silently ignores is refused before it is
|
|
26070
|
-
// forwarded, rather than returning a 200 that every layer above records as
|
|
26071
|
-
// success. Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS: it shapes which calls
|
|
26072
|
-
// we forward, not what an outbound request looks like, so the probe (which
|
|
26073
|
-
// never issues a tools/call) has nothing to reconstruct from it.
|
|
26074
|
-
argRejects: "AGT_REMOTE_MCP_ARG_REJECTS",
|
|
26075
|
-
// ENG-10614: the per-tool HITL floor table, as JSON `{ "<tool>": "<tier>" }`.
|
|
26076
|
-
//
|
|
26077
|
-
// WHY THIS EXISTS AT ALL. A hosted API-key remote MCP is called by Claude Code
|
|
26078
|
-
// straight at the vendor, so none of the three brokered HITL gates
|
|
26079
|
-
// (`enforceComposioHitlGate`, `hitlGateForBrokerCall`, the CLI lane) is in the
|
|
26080
|
-
// path, and `tool_definitions.min_hitl_tier` was read by nothing on this lane
|
|
26081
|
-
// — measured: zero hits for that column under `packages/core/src/provisioning`,
|
|
26082
|
-
// `packages/mcp/src` or `apps/cli/src`. The catalog said `delete_item` needed
|
|
26083
|
-
// approval and the call went straight out.
|
|
26084
|
-
//
|
|
26085
|
-
// Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS, for the same reason as
|
|
26086
|
-
// `argRejects`: it shapes WHICH calls we forward, not what an outbound request
|
|
26087
|
-
// looks like, so the connectivity probe has nothing to reconstruct from it.
|
|
26088
|
-
toolTiers: "AGT_REMOTE_MCP_TOOL_TIERS"
|
|
26089
|
-
};
|
|
26090
|
-
var REMOTE_MCP_AUTH_ENV_KEYS = [
|
|
26091
|
-
REMOTE_MCP_PROXY_ENV.tokenVar,
|
|
26092
|
-
REMOTE_MCP_PROXY_ENV.authHeader,
|
|
26093
|
-
REMOTE_MCP_PROXY_ENV.extraHeaders
|
|
26094
|
-
];
|
|
26095
|
-
|
|
26096
25859
|
// ../core/dist/integrations/registry.js
|
|
26097
25860
|
var INTEGRATION_REGISTRY = [
|
|
26098
25861
|
{
|
|
@@ -27053,6 +26816,78 @@ var INTEGRATION_REGISTRY = [
|
|
|
27053
26816
|
},
|
|
27054
26817
|
docs_url: "https://www.framer.com/developers/server-api-quick-start"
|
|
27055
26818
|
},
|
|
26819
|
+
{
|
|
26820
|
+
// ENG-11540: FlutterFlow, through FlutterFlow's own CLI (`flutterflow ai`).
|
|
26821
|
+
//
|
|
26822
|
+
// WHAT "FLUTTERFLOW MCP" ACTUALLY IS. Not a hosted MCP endpoint. `flutterflow
|
|
26823
|
+
// ai init <dir>` creates a local workspace holding a vendored Dart SDK and an
|
|
26824
|
+
// MCP server registered in a workspace-root `.mcp.json`. The agent's own
|
|
26825
|
+
// `.mcp.json` is platform-rendered, so a workspace-local server is never seen
|
|
26826
|
+
// by the agent's session. The agent drives the same commands over Bash
|
|
26827
|
+
// instead, which is what FlutterFlow's own Claude Code plugin does
|
|
26828
|
+
// (github.com/FlutterFlow/flutterflow-claude) and is the same project state.
|
|
26829
|
+
//
|
|
26830
|
+
// HEADLESS, VERIFIED by running flutterflow_cli 0.0.41 on 2026-10-15: `init`
|
|
26831
|
+
// reads FF_API_KEY from the environment, takes the workspace positionally and
|
|
26832
|
+
// the project as `--project`, and never prompts when stdin is not a TTY. With
|
|
26833
|
+
// no key it fails fast ("API key is required") rather than hanging. A key
|
|
26834
|
+
// from the environment is never written to the CLI's credential store.
|
|
26835
|
+
// Neither `flutterflow --version` nor `flutterflow ai --version` works outside
|
|
26836
|
+
// a workspace, which is why the probe is central HTTP (connectivity-probe.ts).
|
|
26837
|
+
id: "flutterflow",
|
|
26838
|
+
name: "FlutterFlow",
|
|
26839
|
+
category: "code",
|
|
26840
|
+
description: "Build and edit FlutterFlow apps with the FlutterFlow CLI. Start with `flutterflow ai init <dir> --project <project-id>` (the key is already in FF_API_KEY), work inside that folder, inspect and validate before you run, and never read the folder's .flutterflow/.env (it holds the key). Never pass --yes to native-file unlock or lock, and ask a person before publish-library.",
|
|
26841
|
+
supported_auth_types: ["api_key"],
|
|
26842
|
+
// flutterflow_cli is 0.0.x and the AI SDK it downloads is versioned server-side.
|
|
26843
|
+
beta: true,
|
|
26844
|
+
installable: { category: "Code", authTypes: ["api_key"] },
|
|
26845
|
+
capabilities: [
|
|
26846
|
+
{
|
|
26847
|
+
id: "flutterflow:read-project",
|
|
26848
|
+
name: "Read Project",
|
|
26849
|
+
description: "Inspect, search and validate a FlutterFlow project: pages, components, resources, status and run history",
|
|
26850
|
+
access: "read"
|
|
26851
|
+
},
|
|
26852
|
+
{
|
|
26853
|
+
id: "flutterflow:edit-project",
|
|
26854
|
+
name: "Edit Project",
|
|
26855
|
+
description: "Push changes to a FlutterFlow project: pages, widgets, state, actions and theme",
|
|
26856
|
+
access: "write"
|
|
26857
|
+
},
|
|
26858
|
+
{
|
|
26859
|
+
id: "flutterflow:publish-library",
|
|
26860
|
+
name: "Publish Library",
|
|
26861
|
+
description: "Publish a new version of a FlutterFlow library that other projects depend on",
|
|
26862
|
+
access: "write"
|
|
26863
|
+
}
|
|
26864
|
+
],
|
|
26865
|
+
cli_tool: {
|
|
26866
|
+
package: "flutterflow_cli",
|
|
26867
|
+
binary: "flutterflow",
|
|
26868
|
+
// `flutterflow ai` and the SDK it downloads both authenticate from this
|
|
26869
|
+
// (the legacy FLUTTERFLOW_API_TOKEN feeds only export-code/deploy-firebase).
|
|
26870
|
+
env_key: "FF_API_KEY",
|
|
26871
|
+
installer: "script",
|
|
26872
|
+
// The catalog is the trust boundary for this string (same contract as the
|
|
26873
|
+
// `gh` entry above). The CLI is a Dart pub package, and AL2023 has no Dart
|
|
26874
|
+
// rpm, so this installs Google's official SDK zip into a private prefix
|
|
26875
|
+
// (about 650 MB, which is why it is per-integration and not in the base
|
|
26876
|
+
// image) and puts a wrapper, not pub's shim, at /usr/local/bin/flutterflow.
|
|
26877
|
+
// pub's shim runs a bare `dart`, so a different Dart earlier on PATH would
|
|
26878
|
+
// reject the 3.13.5 snapshot; the wrapper pins our Dart for the CLI AND for
|
|
26879
|
+
// the `dart run` the downloaded SDK does. Re-runnable: a timed-out run
|
|
26880
|
+
// (180s) resumes from whatever finished. The SDK is unzipped into a
|
|
26881
|
+
// staging dir INSIDE the prefix and renamed into place last (CodeRabbit on
|
|
26882
|
+
// #7007): a run killed mid-unzip must never leave a partial dart-sdk that
|
|
26883
|
+
// passes the version check and then fails every retry. Staging on the same
|
|
26884
|
+
// filesystem is what makes the final `mv` a rename rather than a copy.
|
|
26885
|
+
// Versions pinned on purpose: bump
|
|
26886
|
+
// them together, after re-running the headless check above.
|
|
26887
|
+
script: `set -e; d=/usr/local/flutterflow; v=3.13.5; case "$(uname -m)" in x86_64) a=x64;; aarch64|arm64) a=arm64;; *) echo "flutterflow: unsupported architecture $(uname -m)" >&2; exit 1;; esac; if ! "$d/dart-sdk/bin/dart" --version 2>&1 | grep -q "version: $v "; then if ! command -v unzip >/dev/null 2>&1; then if command -v dnf >/dev/null 2>&1; then dnf install -y unzip; elif command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y unzip; else echo "flutterflow: unzip missing and no supported installer (need dnf or apt-get)" >&2; exit 1; fi; fi; mkdir -p "$d"; t=$(mktemp -d "$d/.stage.XXXXXX"); trap 'rm -rf "$t"' EXIT; curl -fsSL "https://storage.googleapis.com/dart-archive/channels/stable/release/$v/sdk/dartsdk-linux-$a-release.zip" -o "$t/dart.zip"; unzip -q "$t/dart.zip" -d "$t/x"; rm -rf "$d/dart-sdk"; mv "$t/x/dart-sdk" "$d/dart-sdk"; fi; PATH="$d/dart-sdk/bin:$PATH" PUB_CACHE="$d/pub-cache" "$d/dart-sdk/bin/dart" pub global activate flutterflow_cli 0.0.41; printf '#!/bin/sh\\nPATH="%s/dart-sdk/bin:$PATH" PUB_CACHE="%s/pub-cache" exec "%s/pub-cache/bin/flutterflow" "$@"\\n' "$d" "$d" "$d" > /usr/local/bin/flutterflow; chmod 755 /usr/local/bin/flutterflow`
|
|
26888
|
+
},
|
|
26889
|
+
docs_url: "https://docs.flutterflow.io/flutterflow-cli/build/"
|
|
26890
|
+
},
|
|
27056
26891
|
{
|
|
27057
26892
|
id: "v0",
|
|
27058
26893
|
name: "v0 by Vercel",
|
|
@@ -28000,6 +27835,243 @@ var INSTALLABLE_NATIVE_INTEGRATIONS = INTEGRATION_REGISTRY.filter((d) => d.insta
|
|
|
28000
27835
|
}));
|
|
28001
27836
|
var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i) => i.id);
|
|
28002
27837
|
|
|
27838
|
+
// ../core/dist/integrations/composio-account-probe.js
|
|
27839
|
+
var BODY_MAX_BYTES = 1024 * 1024;
|
|
27840
|
+
|
|
27841
|
+
// ../core/dist/integrations/composio-approved-egress.json
|
|
27842
|
+
var composio_approved_egress_default = {
|
|
27843
|
+
$comment: [
|
|
27844
|
+
"ADR-0032 Part 3, gate item 2 + gate item 3 (ENG-9684). THE single recorded source",
|
|
27845
|
+
"for the addresses Composio's per-key IP allowlist is expected to hold. Read by BOTH",
|
|
27846
|
+
"scripts/fleet-egress-enum.sh (the operator's pre-arming instrument) and the",
|
|
27847
|
+
"ComposioEgressAddressDrift cron (the between-armings watch). They must agree, which",
|
|
27848
|
+
"is why neither carries its own copy.",
|
|
27849
|
+
"",
|
|
27850
|
+
"WHY A REPO FILE AND NOT SSM. Composio's allowlist has no read API, so its contents",
|
|
27851
|
+
"can never be queried - only inferred from a refusal. This file is therefore not a",
|
|
27852
|
+
"cache of vendor state; it is a DECLARATION of what a human pasted into a dashboard.",
|
|
27853
|
+
"A PR is the right ceremony for changing a security boundary nobody can read back.",
|
|
27854
|
+
"SSM would also hit registerCron's five-parameter grant scope (ENG-9940), where a",
|
|
27855
|
+
"sixth parameter fails silently.",
|
|
27856
|
+
"",
|
|
27857
|
+
"THE COMPARISON IS ON `ip` AND NOTHING ELSE. `seenAsGateway` is informational. A NAT",
|
|
27858
|
+
"rebuild that re-adopts the same EIP keeps egress correct while changing the gateway",
|
|
27859
|
+
"id, so comparing ids would red on the safe case - which is precisely the case Part 2's",
|
|
27860
|
+
"EIP adoption exists to create.",
|
|
27861
|
+
"",
|
|
27862
|
+
"ANY NEW HOSTS-ACCOUNT EGRESS ADDRESS TURNS THE DETECTOR RED UNTIL IT IS ADDED HERE.",
|
|
27863
|
+
"That is the forcing function working, not a fault: ENG-9426's 2b NAT was added in the",
|
|
27864
|
+
"same change that created it. Do the same for the next one, or the detector correctly",
|
|
27865
|
+
"reports that hosts are leaving from an address no key allows. Do not loosen the check.",
|
|
27866
|
+
"A CONTROL-PLANE address gets no such forcing function - the detector never sees that",
|
|
27867
|
+
"account at all - which is why the bridge note below is written out by hand instead.",
|
|
27868
|
+
"",
|
|
27869
|
+
"15.135.204.192 IS GONE AND MUST NOT BE RE-ADDED (ENG-9426, 2026-09-15).",
|
|
27870
|
+
"The dev NAT was retired and that address was RELEASED back to the AWS pool, so it can",
|
|
27871
|
+
"be reassigned to another AWS customer at any time. An allowlist entry naming it would",
|
|
27872
|
+
"then permit a stranger's host rather than simply failing closed. Nothing was armed when",
|
|
27873
|
+
"this happened, so no key ever held it - but this file IS what an operator pastes from,",
|
|
27874
|
+
"which is why it is removed here the same day.",
|
|
27875
|
+
"",
|
|
27876
|
+
"WHY retainOnDelete DID NOT SAVE IT, because the next person will assume it would.",
|
|
27877
|
+
"The option was added in the SAME change that set dev's natMode to `none`. Pulumi reads",
|
|
27878
|
+
"delete-time options from the STATE recorded at the resource's last registration, and by",
|
|
27879
|
+
"the time this ran the resource was no longer in the program at all - so the state still",
|
|
27880
|
+
"said 'delete normally'. retainOnDelete has to land in a deploy that STILL DECLARES the",
|
|
27881
|
+
"resource before it protects anything. The two prod hosts EIPs listed below are protected, because",
|
|
27882
|
+
"this apply registered them with the option set.",
|
|
27883
|
+
"",
|
|
27884
|
+
"THE BRIDGE ADDRESSES ARE RECORDED HERE AND LIVE SOMEWHERE ELSE (ENG-10687).",
|
|
27885
|
+
"The two control-plane bridge addresses were allocated by ENG-10515's deploy on",
|
|
27886
|
+
"2026-09-18 and are listed below with stage `prod-bridge`. They sit in the CONTROL",
|
|
27887
|
+
"PLANE account (109039361030), region us-east-2 - NOT the hosts account, and not",
|
|
27888
|
+
"ap-southeast-2. Read back live after that deploy, not predicted.",
|
|
27889
|
+
"",
|
|
27890
|
+
"SO `account` AND `homeRegion` ABOVE ARE NOT THE SCOPE OF THIS FILE. They are the",
|
|
27891
|
+
"single account and region the DETECTOR enumerates, which is why they stayed",
|
|
27892
|
+
"hosts-account values when addresses from a second account landed here. Each address",
|
|
27893
|
+
"carries its own `account` and `region`; read those, never the top-level pair, when",
|
|
27894
|
+
"asking where an address lives.",
|
|
27895
|
+
"",
|
|
27896
|
+
"THE DETECTOR CANNOT VERIFY THE BRIDGE PAIR, AND THAT IS CORRECT, NOT A BUG.",
|
|
27897
|
+
"ComposioEgressAddressDrift enumerates ONE account - the hosts account - so it compares",
|
|
27898
|
+
"only the addresses instances there actually route through. The bridge addresses sit in",
|
|
27899
|
+
"this set unmatched and unflagged, which costs nothing: the detector reports an OBSERVED",
|
|
27900
|
+
"address that is not approved, so a superset can never make it red. Do NOT 'fix' the",
|
|
27901
|
+
"asymmetry by trimming this file to what the detector checks - the file records what the",
|
|
27902
|
+
"ALLOWLIST must hold, which is a superset of what any one account scan can see.",
|
|
27903
|
+
"Trimming it would make the allowlist incomplete, which is a fleet-wide 401 rather than",
|
|
27904
|
+
"a tidy file.",
|
|
27905
|
+
"",
|
|
27906
|
+
"PASTE THE WHOLE SHARED SET, ALWAYS. Composio's field takes explicit comma-delimited",
|
|
27907
|
+
"addresses and no CIDR, so a key armed with the hosts pair alone locks out every",
|
|
27908
|
+
"server-side call the control plane makes, and one armed with the bridge pair alone locks",
|
|
27909
|
+
"out the fleet. This used to read 'PASTE ALL FOUR, ALWAYS', which `orgAddresses` below",
|
|
27910
|
+
"makes false: for an org with a BYO host the shared set is NOT the whole value, and an",
|
|
27911
|
+
"operator following the old sentence would arm a key that refuses that org's own agents.",
|
|
27912
|
+
"",
|
|
27913
|
+
"`orgAddresses` - THE SHARED SET IS NOT EVERY ORG'S SET (ENG-10718).",
|
|
27914
|
+
"An org whose agents run on a host we do not operate the network for - a BYO host in the",
|
|
27915
|
+
"customer's AWS account, or a `self` host on hardware we never see - egresses from an",
|
|
27916
|
+
"address no shared entry above carries. These are recorded per org rather than",
|
|
27917
|
+
"merged into `addresses`, because they are not fleet-wide: pasting one org's BYO address",
|
|
27918
|
+
"into another org's key widens that key for no reason. The drift detector and",
|
|
27919
|
+
"fleet-egress-enum.sh both read `addresses` and only `addresses`, so nothing here is ever",
|
|
27920
|
+
"compared against a hosts-account scan - which is correct, since these addresses live in",
|
|
27921
|
+
"accounts neither ever enumerates.",
|
|
27922
|
+
"",
|
|
27923
|
+
"AN OBSERVED ADDRESS IS NOT AN APPROVED ONE, AND THAT IS THE WHOLE POINT OF THIS FILE.",
|
|
27924
|
+
"`host_attested_egress` (ENG-10666) records the address a BYO host was SEEN calling from,",
|
|
27925
|
+
"and it is the only way to learn one - the `augmented-byo-provisioner` role grants neither",
|
|
27926
|
+
"`DescribeRouteTables` nor `DescribeNatGateways`, so enumeration cannot answer it. But",
|
|
27927
|
+
"seeing an address is not deciding it may hold a key. A row appears here when a human",
|
|
27928
|
+
"decides it, in a PR, which is the same ceremony every other entry gets. So an org can",
|
|
27929
|
+
"decides it, in a PR, which is the same ceremony every other entry gets. So an org CAN",
|
|
27930
|
+
"legitimately have a known egress address and no entry here, and the posture page must",
|
|
27931
|
+
"withhold its paste value rather than offer the shared set. As of 2026-09-28 no org is in",
|
|
27932
|
+
"that state - Zanda was, and the block below records what it cost, which is the reason",
|
|
27933
|
+
"the withholding behaviour must not be softened just because nothing exercises it today.",
|
|
27934
|
+
"",
|
|
27935
|
+
"ZANDA IS THE LIVE EXAMPLE, AND ITS ADDRESS IS NOW APPROVED (2026-09-28). READ WHY.",
|
|
27936
|
+
"Zanda has an active BYO host - d0a78e4f-7a21-4d8d-85db-66a167fdd8cb in account",
|
|
27937
|
+
"585819234046, created 2026-09-16 - whose egress address was known from 2026-09-20:",
|
|
27938
|
+
"3.107.131.133, resolved from `host_attested_egress` after an account enumeration failed",
|
|
27939
|
+
"to find it (it is a THIRD account, which no census had thought to scan). For eight days it",
|
|
27940
|
+
"was NOT recorded here, deliberately, because nobody had approved it.",
|
|
27941
|
+
"",
|
|
27942
|
+
"THE ARGUMENT FOR LEAVING IT WAS CORRECT AND ITS PREMISE EXPIRED WITHOUT A SIGNAL.",
|
|
27943
|
+
"This block used to read: 'That host carries ZERO assigned agents, so it makes no Composio",
|
|
27944
|
+
"calls and the omission costs nothing today.' True when written, and it stopped being true",
|
|
27945
|
+
"the moment an operator migrated an agent onto that host - which is a routine action, taken",
|
|
27946
|
+
"by someone who had no reason to read this file, and which nothing connects back to here.",
|
|
27947
|
+
"On 2026-09-28 that agent could not reach Jira: the org's key was armed, the host egressed",
|
|
27948
|
+
"from an address no allowlist carried, and Composio refused it. The address was approved and",
|
|
27949
|
+
"the full five-address set pasted into project pr_MY372XzWOmX_ the same day.",
|
|
27950
|
+
"",
|
|
27951
|
+
"SO THE LESSON IS NOT 'APPROVE FASTER'. It is that a cost bounded by 'no agents on that",
|
|
27952
|
+
"host' is bounded by a condition nothing enforces and nothing watches. The queue that would",
|
|
27953
|
+
"have surfaced this decision is ENG-10668, still unbuilt; until it exists, an address landing",
|
|
27954
|
+
"in `host_attested_egress` for a fully_managed org is a decision waiting on someone noticing.",
|
|
27955
|
+
"The customer-visible failure also outlived the fix: the refusals drove the integration into",
|
|
27956
|
+
"an ENG-7916 bind quarantine, which does not self-clear when the allowlist is corrected.",
|
|
27957
|
+
"",
|
|
27958
|
+
"THE SAME READ FOUND ZERO `self` HOSTS FLEET-WIDE (2026-09-20), which is why widening the",
|
|
27959
|
+
"rule beyond the BYO pointer costs nothing today: exactly two orgs have a host outside our",
|
|
27960
|
+
"NATs, both BYO, and as of 2026-09-28 BOTH have a recorded address, so no org's row withholds.",
|
|
27961
|
+
"shared set, byte-identical to what ENG-10713 already served it. If that ratio ever",
|
|
27962
|
+
"inverts - many orgs withholding - the answer is to record addresses or build ENG-10668,",
|
|
27963
|
+
"NOT to narrow the rule back."
|
|
27964
|
+
],
|
|
27965
|
+
account: "711726113003",
|
|
27966
|
+
homeRegion: "ap-southeast-2",
|
|
27967
|
+
addresses: [
|
|
27968
|
+
{
|
|
27969
|
+
ip: "32.236.6.24",
|
|
27970
|
+
stage: "prod",
|
|
27971
|
+
account: "711726113003",
|
|
27972
|
+
region: "ap-southeast-2",
|
|
27973
|
+
seenAsGateway: "nat-00a3dac969c0641a6",
|
|
27974
|
+
note: "Prod hosts NAT. Measured 2026-09-12 (ENG-10392): 25 of 25 active prod host instances route 0.0.0.0/0 here."
|
|
27975
|
+
},
|
|
27976
|
+
{
|
|
27977
|
+
ip: "54.253.255.215",
|
|
27978
|
+
stage: "prod",
|
|
27979
|
+
account: "711726113003",
|
|
27980
|
+
region: "ap-southeast-2",
|
|
27981
|
+
seenAsGateway: "nat-04384e27ab04973b5",
|
|
27982
|
+
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."
|
|
27983
|
+
},
|
|
27984
|
+
{
|
|
27985
|
+
ip: "77.112.237.198",
|
|
27986
|
+
stage: "prod-bridge",
|
|
27987
|
+
account: "109039361030",
|
|
27988
|
+
region: "us-east-2",
|
|
27989
|
+
seenAsGateway: "nat-07f1db970d2714b95",
|
|
27990
|
+
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."
|
|
27991
|
+
},
|
|
27992
|
+
{
|
|
27993
|
+
ip: "18.224.120.114",
|
|
27994
|
+
stage: "prod-bridge",
|
|
27995
|
+
account: "109039361030",
|
|
27996
|
+
region: "us-east-2",
|
|
27997
|
+
seenAsGateway: "nat-02a4721d4ce678cf7",
|
|
27998
|
+
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."
|
|
27999
|
+
}
|
|
28000
|
+
],
|
|
28001
|
+
orgAddresses: {
|
|
28002
|
+
"a4bba5c8-f664-46fe-a894-c95679c615ac": {
|
|
28003
|
+
orgSlug: "integritylabs",
|
|
28004
|
+
addresses: [
|
|
28005
|
+
{
|
|
28006
|
+
ip: "54.153.194.237",
|
|
28007
|
+
stage: "prod-byo",
|
|
28008
|
+
account: "436812233703",
|
|
28009
|
+
region: null,
|
|
28010
|
+
seenAsGateway: "nat-0c3cc231a8701a0e9",
|
|
28011
|
+
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.'
|
|
28012
|
+
}
|
|
28013
|
+
]
|
|
28014
|
+
},
|
|
28015
|
+
"c6a844b7-45d6-44f3-8390-616de3924c03": {
|
|
28016
|
+
orgSlug: "zanda",
|
|
28017
|
+
addresses: [
|
|
28018
|
+
{
|
|
28019
|
+
ip: "3.107.131.133",
|
|
28020
|
+
stage: "prod-byo",
|
|
28021
|
+
account: "585819234046",
|
|
28022
|
+
region: null,
|
|
28023
|
+
seenAsGateway: null,
|
|
28024
|
+
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."
|
|
28025
|
+
}
|
|
28026
|
+
]
|
|
28027
|
+
}
|
|
28028
|
+
}
|
|
28029
|
+
};
|
|
28030
|
+
|
|
28031
|
+
// ../core/dist/integrations/composio-approved-egress.js
|
|
28032
|
+
var APPROVED_EGRESS_ACCOUNT = composio_approved_egress_default.account;
|
|
28033
|
+
var APPROVED_EGRESS_HOME_REGION = composio_approved_egress_default.homeRegion;
|
|
28034
|
+
var APPROVED_EGRESS_ADDRESSES = composio_approved_egress_default.addresses;
|
|
28035
|
+
var ORG_EGRESS_ADDRESSES = composio_approved_egress_default.orgAddresses ?? {};
|
|
28036
|
+
|
|
28037
|
+
// ../core/dist/integrations/remote-mcp-proxy-env.js
|
|
28038
|
+
var REMOTE_MCP_PROXY_ENV = {
|
|
28039
|
+
url: "AGT_REMOTE_MCP_URL",
|
|
28040
|
+
tokenFile: "AGT_REMOTE_MCP_TOKEN_FILE",
|
|
28041
|
+
tokenVar: "AGT_REMOTE_MCP_TOKEN_VAR",
|
|
28042
|
+
label: "AGT_REMOTE_MCP_LABEL",
|
|
28043
|
+
authHeader: "AGT_REMOTE_MCP_AUTH_HEADER",
|
|
28044
|
+
extraHeaders: "AGT_REMOTE_MCP_EXTRA_HEADERS",
|
|
28045
|
+
toolAllowlist: "AGT_REMOTE_MCP_TOOL_ALLOWLIST",
|
|
28046
|
+
preEnableToolsets: "AGT_REMOTE_MCP_PREENABLE_TOOLSETS",
|
|
28047
|
+
// ENG-8512: per-provider argument rules. A `tools/call` carrying a value we
|
|
28048
|
+
// KNOW the remote accepts and silently ignores is refused before it is
|
|
28049
|
+
// forwarded, rather than returning a 200 that every layer above records as
|
|
28050
|
+
// success. Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS: it shapes which calls
|
|
28051
|
+
// we forward, not what an outbound request looks like, so the probe (which
|
|
28052
|
+
// never issues a tools/call) has nothing to reconstruct from it.
|
|
28053
|
+
argRejects: "AGT_REMOTE_MCP_ARG_REJECTS",
|
|
28054
|
+
// ENG-10614: the per-tool HITL floor table, as JSON `{ "<tool>": "<tier>" }`.
|
|
28055
|
+
//
|
|
28056
|
+
// WHY THIS EXISTS AT ALL. A hosted API-key remote MCP is called by Claude Code
|
|
28057
|
+
// straight at the vendor, so none of the three brokered HITL gates
|
|
28058
|
+
// (`enforceComposioHitlGate`, `hitlGateForBrokerCall`, the CLI lane) is in the
|
|
28059
|
+
// path, and `tool_definitions.min_hitl_tier` was read by nothing on this lane
|
|
28060
|
+
// — measured: zero hits for that column under `packages/core/src/provisioning`,
|
|
28061
|
+
// `packages/mcp/src` or `apps/cli/src`. The catalog said `delete_item` needed
|
|
28062
|
+
// approval and the call went straight out.
|
|
28063
|
+
//
|
|
28064
|
+
// Deliberately NOT in REMOTE_MCP_AUTH_ENV_KEYS, for the same reason as
|
|
28065
|
+
// `argRejects`: it shapes WHICH calls we forward, not what an outbound request
|
|
28066
|
+
// looks like, so the connectivity probe has nothing to reconstruct from it.
|
|
28067
|
+
toolTiers: "AGT_REMOTE_MCP_TOOL_TIERS"
|
|
28068
|
+
};
|
|
28069
|
+
var REMOTE_MCP_AUTH_ENV_KEYS = [
|
|
28070
|
+
REMOTE_MCP_PROXY_ENV.tokenVar,
|
|
28071
|
+
REMOTE_MCP_PROXY_ENV.authHeader,
|
|
28072
|
+
REMOTE_MCP_PROXY_ENV.extraHeaders
|
|
28073
|
+
];
|
|
28074
|
+
|
|
28003
28075
|
// ../core/dist/direct-chat/upload.js
|
|
28004
28076
|
var MB2 = 1024 * 1024;
|
|
28005
28077
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 100 * MB2;
|
|
@@ -30840,6 +30912,20 @@ var FLAG_REGISTRY = [
|
|
|
30840
30912
|
// on for their own org. Only a platform admin can (PR #6522 review).
|
|
30841
30913
|
platformAdminOnly: true
|
|
30842
30914
|
},
|
|
30915
|
+
{
|
|
30916
|
+
key: "direct-chat-voice",
|
|
30917
|
+
description: "Show the microphone (voice) button in the web Direct Chat composer - the Direct Chat drawer and the agent-screen chat dock (ENG-11542). Off by default: voice set expectations it does not yet meet for customers, but the team still needs it for testing, so it is enabled per org rather than removed. Does not gate the mobile PWA voice switch or the server voice-session routes.",
|
|
30918
|
+
flagType: "boolean",
|
|
30919
|
+
// PUBLIC (ADR-0022 §2): read in the browser via usePublicBooleanFlag, so it
|
|
30920
|
+
// must be in the GET /flags map. No env override (UI rollout, not an
|
|
30921
|
+
// operator gate). Ships dark (default false).
|
|
30922
|
+
public: true,
|
|
30923
|
+
defaultValue: false,
|
|
30924
|
+
// Platform admin only: the point of the flag is keeping a not-ready feature
|
|
30925
|
+
// away from customers, so a customer org admin must not be able to switch
|
|
30926
|
+
// it back on for their own org.
|
|
30927
|
+
platformAdminOnly: true
|
|
30928
|
+
},
|
|
30843
30929
|
{
|
|
30844
30930
|
key: "platform-maintenance-mode",
|
|
30845
30931
|
description: 'Platform-wide maintenance mode (ENG-6506; widened to modes by ENG-11436). off = normal operation (ships dark; channels behave exactly as today). tools-offline = every agent KEEPS conversing but every Augmented tool that WRITES to the control plane refuses with a reason, so nothing is created during a window whose database restore would discard it; reads are untouched. fleet-offline = the previous boolean-true behaviour AND the write gate: admitted human inbound gets a "we are offline for maintenance" notice instead of being dispatched, for whole-platform downtime such as DB upgrades. The modes are CUMULATIVE \u2014 fleet-offline gates writes too, because silencing channel inbound does not stop a /loop or a scheduled task filing work. Read host-side per inbound and per tool call from the flags cache (no MCP restart). (Proactive "back online" follow-up is the ENG-6508 fast-follow, not this flag.)',
|