@integrity-labs/agt-cli 0.28.507 → 0.28.509
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 +4 -4
- package/dist/{chunk-4PRR22KH.js → chunk-7U63M5R6.js} +89 -22
- package/dist/chunk-7U63M5R6.js.map +1 -0
- package/dist/{chunk-75NQ7UBH.js → chunk-S5X4XFAC.js} +255 -3
- package/dist/chunk-S5X4XFAC.js.map +1 -0
- package/dist/{claude-pair-runtime-37TIOIJQ.js → claude-pair-runtime-5CDR4XPI.js} +2 -2
- package/dist/lib/manager-worker.js +16 -11
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +84 -21
- package/dist/mcp/origami.js +84 -21
- package/dist/mcp/slack-channel.js +84 -21
- package/dist/mcp/telegram-channel.js +84 -21
- package/dist/{persistent-session-OMAAP4OU.js → persistent-session-BDNW4K6M.js} +2 -2
- package/dist/{responsiveness-probe-NRH2AQW6.js → responsiveness-probe-KR73VA2S.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-4PRR22KH.js.map +0 -1
- package/dist/chunk-75NQ7UBH.js.map +0 -1
- /package/dist/{claude-pair-runtime-37TIOIJQ.js.map → claude-pair-runtime-5CDR4XPI.js.map} +0 -0
- /package/dist/{persistent-session-OMAAP4OU.js.map → persistent-session-BDNW4K6M.js.map} +0 -0
- /package/dist/{responsiveness-probe-NRH2AQW6.js.map → responsiveness-probe-KR73VA2S.js.map} +0 -0
|
@@ -32955,29 +32955,44 @@ var INTEGRATION_REGISTRY = [
|
|
|
32955
32955
|
id: "vercel",
|
|
32956
32956
|
name: "Vercel",
|
|
32957
32957
|
category: "infrastructure",
|
|
32958
|
-
description: "Check on Vercel app deployments \u2014 status, build
|
|
32959
|
-
//
|
|
32960
|
-
//
|
|
32961
|
-
|
|
32958
|
+
description: "Check on Vercel app deployments \u2014 what's live, deployment status, and build logs \u2014 through Vercel's REST API with your own API token.",
|
|
32959
|
+
// ENG-8421: api_key, NOT the host-brokered MCP this used to be.
|
|
32960
|
+
//
|
|
32961
|
+
// Vercel MCP (`https://mcp.vercel.com`) is not completable from the
|
|
32962
|
+
// console, and that is a vendor constraint rather than a gap in our
|
|
32963
|
+
// plumbing. Established empirically 2026-08-03: Dynamic Client
|
|
32964
|
+
// Registration REJECTS an https redirect (`invalid_redirect_uri` — "not
|
|
32965
|
+
// approved for use by this authorization server") and ACCEPTS only
|
|
32966
|
+
// localhost; the device-code grant, the one flow needing no redirect, is
|
|
32967
|
+
// refused to DCR clients (`unauthorized_client`). So the only client
|
|
32968
|
+
// Vercel permits is a local one redirecting to its own ephemeral port —
|
|
32969
|
+
// i.e. Claude Code on the agent's host, driven by an operator running
|
|
32970
|
+
// `/mcp` in tmux. No console work can remove that step.
|
|
32971
|
+
//
|
|
32972
|
+
// The REST API has none of those constraints: plain bearer auth
|
|
32973
|
+
// (unauthenticated → `{"code":"forbidden","missingToken":true}`, bogus
|
|
32974
|
+
// bearer → `{"invalidToken":true}`), so a token the customer creates in
|
|
32975
|
+
// their own Vercel dashboard works directly. That makes this an ordinary
|
|
32976
|
+
// paste-a-key integration, and it means WE hold the credential — so it can
|
|
32977
|
+
// be stored, rotated, revoked and audited, none of which was true when the
|
|
32978
|
+
// grant lived in Claude Code's `~/.claude.json` on the host.
|
|
32979
|
+
//
|
|
32980
|
+
// Tools are declared as data on `integration_definitions.metadata.tools`
|
|
32981
|
+
// and dispatch through the existing Direct HTTP broker (the v0 pattern) —
|
|
32982
|
+
// there is deliberately no bespoke Vercel client and no bespoke broker.
|
|
32983
|
+
supported_auth_types: ["api_key"],
|
|
32962
32984
|
capabilities: [
|
|
32963
|
-
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build
|
|
32964
|
-
{ id: "vercel:search-docs", name: "Search Documentation", description: "Search Vercel platform documentation.", access: "read" }
|
|
32985
|
+
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build logs.", access: "read" }
|
|
32965
32986
|
],
|
|
32966
|
-
docs_url: "https://vercel.com/docs/
|
|
32967
|
-
// Beta until the
|
|
32968
|
-
//
|
|
32969
|
-
|
|
32970
|
-
|
|
32971
|
-
//
|
|
32972
|
-
//
|
|
32973
|
-
//
|
|
32974
|
-
//
|
|
32975
|
-
// `registryRemoteMcpKeys` prune universe automatically, so an uninstall
|
|
32976
|
-
// actually removes the entry instead of leaving it stale.
|
|
32977
|
-
remoteMcp: {
|
|
32978
|
-
type: "http",
|
|
32979
|
-
url: "https://mcp.vercel.com"
|
|
32980
|
-
}
|
|
32987
|
+
docs_url: "https://vercel.com/docs/rest-api",
|
|
32988
|
+
// Beta until the REST tool surface has been exercised against a real
|
|
32989
|
+
// customer token. (The previous reason — "until the headless OAuth flow is
|
|
32990
|
+
// verified end-to-end" — is void: there is no OAuth flow any more.)
|
|
32991
|
+
beta: true
|
|
32992
|
+
// NO `remoteMcp`. See the tombstone in the claudecode adapter's prune
|
|
32993
|
+
// universe: dropping this field also drops `vercel` from
|
|
32994
|
+
// `registryRemoteMcpKeys`, which would strand the `.mcp.json` entry on
|
|
32995
|
+
// every host that installed the MCP variant.
|
|
32981
32996
|
},
|
|
32982
32997
|
{
|
|
32983
32998
|
id: "qmd",
|
|
@@ -35502,6 +35517,54 @@ var FLAG_REGISTRY = [
|
|
|
35502
35517
|
// Turning this on lets agents originate proposals that create customer
|
|
35503
35518
|
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35504
35519
|
sensitive: true
|
|
35520
|
+
},
|
|
35521
|
+
{
|
|
35522
|
+
key: "github-broker-credentials",
|
|
35523
|
+
description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
|
|
35524
|
+
flagType: "boolean",
|
|
35525
|
+
// Declared safe value is `false` = today's env delivery. Fail-safe direction:
|
|
35526
|
+
// a flag-DB read error must never strip `git`/`gh` credentials off a live
|
|
35527
|
+
// agent, which is what the ON path does when its host has no helper writer.
|
|
35528
|
+
defaultValue: false,
|
|
35529
|
+
// Flipping ON changes how every GitHub App agent on the scope authenticates
|
|
35530
|
+
// `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
|
|
35531
|
+
// confirmed action (ADR-0022 §4).
|
|
35532
|
+
sensitive: true,
|
|
35533
|
+
// Set even though the flag is evaluated centrally, because `since` is a
|
|
35534
|
+
// REACH threshold ("a host this old has no consumer code for the flag") and
|
|
35535
|
+
// that is exactly the hazard here: the host does not read the flag, but it
|
|
35536
|
+
// does need the claudecode adapter's helper/shim writer and the wrapper PATH
|
|
35537
|
+
// prepend. On a host too old for those, the API would stop shipping the
|
|
35538
|
+
// token and NOTHING would replace it. Without `since` the flip-reach modal
|
|
35539
|
+
// reports FULL reach and hides that.
|
|
35540
|
+
//
|
|
35541
|
+
// DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
|
|
35542
|
+
// The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
|
|
35543
|
+
// `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
|
|
35544
|
+
// artifacts, which is only possible AFTER this merges and publishes. A
|
|
35545
|
+
// pre-merge guess cannot be right, and the two directions are not
|
|
35546
|
+
// symmetric:
|
|
35547
|
+
// - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
|
|
35548
|
+
// - too LOW -> hosts classify `honors` while carrying NO helper writer,
|
|
35549
|
+
// the modal promises full reach, and a flip strips `git`/
|
|
35550
|
+
// `gh` credentials with nothing replacing them. Outage.
|
|
35551
|
+
// So this is pinned ABOVE every published release on purpose: it classifies
|
|
35552
|
+
// EVERY host as `stale`, so the modal reports no reach rather than reach it
|
|
35553
|
+
// has no basis for. That is the intended pre-bisect state.
|
|
35554
|
+
//
|
|
35555
|
+
// BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
|
|
35556
|
+
// `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
|
|
35557
|
+
// modal. `evaluate.ts` never reads it and neither does the override write
|
|
35558
|
+
// path. The placeholder therefore changes what an operator is TOLD; it does
|
|
35559
|
+
// not stop a flip on an under-`since` host. What actually holds the line
|
|
35560
|
+
// here is `defaultValue: false` plus `sensitive: true` plus the runbook.
|
|
35561
|
+
//
|
|
35562
|
+
// BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
|
|
35563
|
+
// first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
|
|
35564
|
+
// prepends it, then replace this with that exact version. The rollout
|
|
35565
|
+
// runbook gates on it. Leaving the placeholder in place is safe (nothing
|
|
35566
|
+
// flips); shipping a guessed number is not.
|
|
35567
|
+
since: "0.29.0"
|
|
35505
35568
|
}
|
|
35506
35569
|
];
|
|
35507
35570
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
package/dist/mcp/origami.js
CHANGED
|
@@ -39282,29 +39282,44 @@ var INTEGRATION_REGISTRY = [
|
|
|
39282
39282
|
id: "vercel",
|
|
39283
39283
|
name: "Vercel",
|
|
39284
39284
|
category: "infrastructure",
|
|
39285
|
-
description: "Check on Vercel app deployments \u2014 status, build
|
|
39286
|
-
//
|
|
39287
|
-
//
|
|
39288
|
-
|
|
39285
|
+
description: "Check on Vercel app deployments \u2014 what's live, deployment status, and build logs \u2014 through Vercel's REST API with your own API token.",
|
|
39286
|
+
// ENG-8421: api_key, NOT the host-brokered MCP this used to be.
|
|
39287
|
+
//
|
|
39288
|
+
// Vercel MCP (`https://mcp.vercel.com`) is not completable from the
|
|
39289
|
+
// console, and that is a vendor constraint rather than a gap in our
|
|
39290
|
+
// plumbing. Established empirically 2026-08-03: Dynamic Client
|
|
39291
|
+
// Registration REJECTS an https redirect (`invalid_redirect_uri` — "not
|
|
39292
|
+
// approved for use by this authorization server") and ACCEPTS only
|
|
39293
|
+
// localhost; the device-code grant, the one flow needing no redirect, is
|
|
39294
|
+
// refused to DCR clients (`unauthorized_client`). So the only client
|
|
39295
|
+
// Vercel permits is a local one redirecting to its own ephemeral port —
|
|
39296
|
+
// i.e. Claude Code on the agent's host, driven by an operator running
|
|
39297
|
+
// `/mcp` in tmux. No console work can remove that step.
|
|
39298
|
+
//
|
|
39299
|
+
// The REST API has none of those constraints: plain bearer auth
|
|
39300
|
+
// (unauthenticated → `{"code":"forbidden","missingToken":true}`, bogus
|
|
39301
|
+
// bearer → `{"invalidToken":true}`), so a token the customer creates in
|
|
39302
|
+
// their own Vercel dashboard works directly. That makes this an ordinary
|
|
39303
|
+
// paste-a-key integration, and it means WE hold the credential — so it can
|
|
39304
|
+
// be stored, rotated, revoked and audited, none of which was true when the
|
|
39305
|
+
// grant lived in Claude Code's `~/.claude.json` on the host.
|
|
39306
|
+
//
|
|
39307
|
+
// Tools are declared as data on `integration_definitions.metadata.tools`
|
|
39308
|
+
// and dispatch through the existing Direct HTTP broker (the v0 pattern) —
|
|
39309
|
+
// there is deliberately no bespoke Vercel client and no bespoke broker.
|
|
39310
|
+
supported_auth_types: ["api_key"],
|
|
39289
39311
|
capabilities: [
|
|
39290
|
-
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build
|
|
39291
|
-
{ id: "vercel:search-docs", name: "Search Documentation", description: "Search Vercel platform documentation.", access: "read" }
|
|
39312
|
+
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build logs.", access: "read" }
|
|
39292
39313
|
],
|
|
39293
|
-
docs_url: "https://vercel.com/docs/
|
|
39294
|
-
// Beta until the
|
|
39295
|
-
//
|
|
39296
|
-
|
|
39297
|
-
|
|
39298
|
-
//
|
|
39299
|
-
//
|
|
39300
|
-
//
|
|
39301
|
-
//
|
|
39302
|
-
// `registryRemoteMcpKeys` prune universe automatically, so an uninstall
|
|
39303
|
-
// actually removes the entry instead of leaving it stale.
|
|
39304
|
-
remoteMcp: {
|
|
39305
|
-
type: "http",
|
|
39306
|
-
url: "https://mcp.vercel.com"
|
|
39307
|
-
}
|
|
39314
|
+
docs_url: "https://vercel.com/docs/rest-api",
|
|
39315
|
+
// Beta until the REST tool surface has been exercised against a real
|
|
39316
|
+
// customer token. (The previous reason — "until the headless OAuth flow is
|
|
39317
|
+
// verified end-to-end" — is void: there is no OAuth flow any more.)
|
|
39318
|
+
beta: true
|
|
39319
|
+
// NO `remoteMcp`. See the tombstone in the claudecode adapter's prune
|
|
39320
|
+
// universe: dropping this field also drops `vercel` from
|
|
39321
|
+
// `registryRemoteMcpKeys`, which would strand the `.mcp.json` entry on
|
|
39322
|
+
// every host that installed the MCP variant.
|
|
39308
39323
|
},
|
|
39309
39324
|
{
|
|
39310
39325
|
id: "qmd",
|
|
@@ -41393,6 +41408,54 @@ var FLAG_REGISTRY = [
|
|
|
41393
41408
|
// Turning this on lets agents originate proposals that create customer
|
|
41394
41409
|
// infrastructure once approved — same posture as augmented-support-writes.
|
|
41395
41410
|
sensitive: true
|
|
41411
|
+
},
|
|
41412
|
+
{
|
|
41413
|
+
key: "github-broker-credentials",
|
|
41414
|
+
description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
|
|
41415
|
+
flagType: "boolean",
|
|
41416
|
+
// Declared safe value is `false` = today's env delivery. Fail-safe direction:
|
|
41417
|
+
// a flag-DB read error must never strip `git`/`gh` credentials off a live
|
|
41418
|
+
// agent, which is what the ON path does when its host has no helper writer.
|
|
41419
|
+
defaultValue: false,
|
|
41420
|
+
// Flipping ON changes how every GitHub App agent on the scope authenticates
|
|
41421
|
+
// `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
|
|
41422
|
+
// confirmed action (ADR-0022 §4).
|
|
41423
|
+
sensitive: true,
|
|
41424
|
+
// Set even though the flag is evaluated centrally, because `since` is a
|
|
41425
|
+
// REACH threshold ("a host this old has no consumer code for the flag") and
|
|
41426
|
+
// that is exactly the hazard here: the host does not read the flag, but it
|
|
41427
|
+
// does need the claudecode adapter's helper/shim writer and the wrapper PATH
|
|
41428
|
+
// prepend. On a host too old for those, the API would stop shipping the
|
|
41429
|
+
// token and NOTHING would replace it. Without `since` the flip-reach modal
|
|
41430
|
+
// reports FULL reach and hides that.
|
|
41431
|
+
//
|
|
41432
|
+
// DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
|
|
41433
|
+
// The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
|
|
41434
|
+
// `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
|
|
41435
|
+
// artifacts, which is only possible AFTER this merges and publishes. A
|
|
41436
|
+
// pre-merge guess cannot be right, and the two directions are not
|
|
41437
|
+
// symmetric:
|
|
41438
|
+
// - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
|
|
41439
|
+
// - too LOW -> hosts classify `honors` while carrying NO helper writer,
|
|
41440
|
+
// the modal promises full reach, and a flip strips `git`/
|
|
41441
|
+
// `gh` credentials with nothing replacing them. Outage.
|
|
41442
|
+
// So this is pinned ABOVE every published release on purpose: it classifies
|
|
41443
|
+
// EVERY host as `stale`, so the modal reports no reach rather than reach it
|
|
41444
|
+
// has no basis for. That is the intended pre-bisect state.
|
|
41445
|
+
//
|
|
41446
|
+
// BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
|
|
41447
|
+
// `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
|
|
41448
|
+
// modal. `evaluate.ts` never reads it and neither does the override write
|
|
41449
|
+
// path. The placeholder therefore changes what an operator is TOLD; it does
|
|
41450
|
+
// not stop a flip on an under-`since` host. What actually holds the line
|
|
41451
|
+
// here is `defaultValue: false` plus `sensitive: true` plus the runbook.
|
|
41452
|
+
//
|
|
41453
|
+
// BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
|
|
41454
|
+
// first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
|
|
41455
|
+
// prepends it, then replace this with that exact version. The rollout
|
|
41456
|
+
// runbook gates on it. Leaving the placeholder in place is safe (nothing
|
|
41457
|
+
// flips); shipping a guessed number is not.
|
|
41458
|
+
since: "0.29.0"
|
|
41396
41459
|
}
|
|
41397
41460
|
];
|
|
41398
41461
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -33177,29 +33177,44 @@ var INTEGRATION_REGISTRY = [
|
|
|
33177
33177
|
id: "vercel",
|
|
33178
33178
|
name: "Vercel",
|
|
33179
33179
|
category: "infrastructure",
|
|
33180
|
-
description: "Check on Vercel app deployments \u2014 status, build
|
|
33181
|
-
//
|
|
33182
|
-
//
|
|
33183
|
-
|
|
33180
|
+
description: "Check on Vercel app deployments \u2014 what's live, deployment status, and build logs \u2014 through Vercel's REST API with your own API token.",
|
|
33181
|
+
// ENG-8421: api_key, NOT the host-brokered MCP this used to be.
|
|
33182
|
+
//
|
|
33183
|
+
// Vercel MCP (`https://mcp.vercel.com`) is not completable from the
|
|
33184
|
+
// console, and that is a vendor constraint rather than a gap in our
|
|
33185
|
+
// plumbing. Established empirically 2026-08-03: Dynamic Client
|
|
33186
|
+
// Registration REJECTS an https redirect (`invalid_redirect_uri` — "not
|
|
33187
|
+
// approved for use by this authorization server") and ACCEPTS only
|
|
33188
|
+
// localhost; the device-code grant, the one flow needing no redirect, is
|
|
33189
|
+
// refused to DCR clients (`unauthorized_client`). So the only client
|
|
33190
|
+
// Vercel permits is a local one redirecting to its own ephemeral port —
|
|
33191
|
+
// i.e. Claude Code on the agent's host, driven by an operator running
|
|
33192
|
+
// `/mcp` in tmux. No console work can remove that step.
|
|
33193
|
+
//
|
|
33194
|
+
// The REST API has none of those constraints: plain bearer auth
|
|
33195
|
+
// (unauthenticated → `{"code":"forbidden","missingToken":true}`, bogus
|
|
33196
|
+
// bearer → `{"invalidToken":true}`), so a token the customer creates in
|
|
33197
|
+
// their own Vercel dashboard works directly. That makes this an ordinary
|
|
33198
|
+
// paste-a-key integration, and it means WE hold the credential — so it can
|
|
33199
|
+
// be stored, rotated, revoked and audited, none of which was true when the
|
|
33200
|
+
// grant lived in Claude Code's `~/.claude.json` on the host.
|
|
33201
|
+
//
|
|
33202
|
+
// Tools are declared as data on `integration_definitions.metadata.tools`
|
|
33203
|
+
// and dispatch through the existing Direct HTTP broker (the v0 pattern) —
|
|
33204
|
+
// there is deliberately no bespoke Vercel client and no bespoke broker.
|
|
33205
|
+
supported_auth_types: ["api_key"],
|
|
33184
33206
|
capabilities: [
|
|
33185
|
-
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build
|
|
33186
|
-
{ id: "vercel:search-docs", name: "Search Documentation", description: "Search Vercel platform documentation.", access: "read" }
|
|
33207
|
+
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build logs.", access: "read" }
|
|
33187
33208
|
],
|
|
33188
|
-
docs_url: "https://vercel.com/docs/
|
|
33189
|
-
// Beta until the
|
|
33190
|
-
//
|
|
33191
|
-
|
|
33192
|
-
|
|
33193
|
-
//
|
|
33194
|
-
//
|
|
33195
|
-
//
|
|
33196
|
-
//
|
|
33197
|
-
// `registryRemoteMcpKeys` prune universe automatically, so an uninstall
|
|
33198
|
-
// actually removes the entry instead of leaving it stale.
|
|
33199
|
-
remoteMcp: {
|
|
33200
|
-
type: "http",
|
|
33201
|
-
url: "https://mcp.vercel.com"
|
|
33202
|
-
}
|
|
33209
|
+
docs_url: "https://vercel.com/docs/rest-api",
|
|
33210
|
+
// Beta until the REST tool surface has been exercised against a real
|
|
33211
|
+
// customer token. (The previous reason — "until the headless OAuth flow is
|
|
33212
|
+
// verified end-to-end" — is void: there is no OAuth flow any more.)
|
|
33213
|
+
beta: true
|
|
33214
|
+
// NO `remoteMcp`. See the tombstone in the claudecode adapter's prune
|
|
33215
|
+
// universe: dropping this field also drops `vercel` from
|
|
33216
|
+
// `registryRemoteMcpKeys`, which would strand the `.mcp.json` entry on
|
|
33217
|
+
// every host that installed the MCP variant.
|
|
33203
33218
|
},
|
|
33204
33219
|
{
|
|
33205
33220
|
id: "qmd",
|
|
@@ -35671,6 +35686,54 @@ var FLAG_REGISTRY = [
|
|
|
35671
35686
|
// Turning this on lets agents originate proposals that create customer
|
|
35672
35687
|
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35673
35688
|
sensitive: true
|
|
35689
|
+
},
|
|
35690
|
+
{
|
|
35691
|
+
key: "github-broker-credentials",
|
|
35692
|
+
description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
|
|
35693
|
+
flagType: "boolean",
|
|
35694
|
+
// Declared safe value is `false` = today's env delivery. Fail-safe direction:
|
|
35695
|
+
// a flag-DB read error must never strip `git`/`gh` credentials off a live
|
|
35696
|
+
// agent, which is what the ON path does when its host has no helper writer.
|
|
35697
|
+
defaultValue: false,
|
|
35698
|
+
// Flipping ON changes how every GitHub App agent on the scope authenticates
|
|
35699
|
+
// `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
|
|
35700
|
+
// confirmed action (ADR-0022 §4).
|
|
35701
|
+
sensitive: true,
|
|
35702
|
+
// Set even though the flag is evaluated centrally, because `since` is a
|
|
35703
|
+
// REACH threshold ("a host this old has no consumer code for the flag") and
|
|
35704
|
+
// that is exactly the hazard here: the host does not read the flag, but it
|
|
35705
|
+
// does need the claudecode adapter's helper/shim writer and the wrapper PATH
|
|
35706
|
+
// prepend. On a host too old for those, the API would stop shipping the
|
|
35707
|
+
// token and NOTHING would replace it. Without `since` the flip-reach modal
|
|
35708
|
+
// reports FULL reach and hides that.
|
|
35709
|
+
//
|
|
35710
|
+
// DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
|
|
35711
|
+
// The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
|
|
35712
|
+
// `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
|
|
35713
|
+
// artifacts, which is only possible AFTER this merges and publishes. A
|
|
35714
|
+
// pre-merge guess cannot be right, and the two directions are not
|
|
35715
|
+
// symmetric:
|
|
35716
|
+
// - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
|
|
35717
|
+
// - too LOW -> hosts classify `honors` while carrying NO helper writer,
|
|
35718
|
+
// the modal promises full reach, and a flip strips `git`/
|
|
35719
|
+
// `gh` credentials with nothing replacing them. Outage.
|
|
35720
|
+
// So this is pinned ABOVE every published release on purpose: it classifies
|
|
35721
|
+
// EVERY host as `stale`, so the modal reports no reach rather than reach it
|
|
35722
|
+
// has no basis for. That is the intended pre-bisect state.
|
|
35723
|
+
//
|
|
35724
|
+
// BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
|
|
35725
|
+
// `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
|
|
35726
|
+
// modal. `evaluate.ts` never reads it and neither does the override write
|
|
35727
|
+
// path. The placeholder therefore changes what an operator is TOLD; it does
|
|
35728
|
+
// not stop a flip on an under-`since` host. What actually holds the line
|
|
35729
|
+
// here is `defaultValue: false` plus `sensitive: true` plus the runbook.
|
|
35730
|
+
//
|
|
35731
|
+
// BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
|
|
35732
|
+
// first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
|
|
35733
|
+
// prepends it, then replace this with that exact version. The rollout
|
|
35734
|
+
// runbook gates on it. Leaving the placeholder in place is safe (nothing
|
|
35735
|
+
// flips); shipping a guessed number is not.
|
|
35736
|
+
since: "0.29.0"
|
|
35674
35737
|
}
|
|
35675
35738
|
];
|
|
35676
35739
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -33503,29 +33503,44 @@ var INTEGRATION_REGISTRY = [
|
|
|
33503
33503
|
id: "vercel",
|
|
33504
33504
|
name: "Vercel",
|
|
33505
33505
|
category: "infrastructure",
|
|
33506
|
-
description: "Check on Vercel app deployments \u2014 status, build
|
|
33507
|
-
//
|
|
33508
|
-
//
|
|
33509
|
-
|
|
33506
|
+
description: "Check on Vercel app deployments \u2014 what's live, deployment status, and build logs \u2014 through Vercel's REST API with your own API token.",
|
|
33507
|
+
// ENG-8421: api_key, NOT the host-brokered MCP this used to be.
|
|
33508
|
+
//
|
|
33509
|
+
// Vercel MCP (`https://mcp.vercel.com`) is not completable from the
|
|
33510
|
+
// console, and that is a vendor constraint rather than a gap in our
|
|
33511
|
+
// plumbing. Established empirically 2026-08-03: Dynamic Client
|
|
33512
|
+
// Registration REJECTS an https redirect (`invalid_redirect_uri` — "not
|
|
33513
|
+
// approved for use by this authorization server") and ACCEPTS only
|
|
33514
|
+
// localhost; the device-code grant, the one flow needing no redirect, is
|
|
33515
|
+
// refused to DCR clients (`unauthorized_client`). So the only client
|
|
33516
|
+
// Vercel permits is a local one redirecting to its own ephemeral port —
|
|
33517
|
+
// i.e. Claude Code on the agent's host, driven by an operator running
|
|
33518
|
+
// `/mcp` in tmux. No console work can remove that step.
|
|
33519
|
+
//
|
|
33520
|
+
// The REST API has none of those constraints: plain bearer auth
|
|
33521
|
+
// (unauthenticated → `{"code":"forbidden","missingToken":true}`, bogus
|
|
33522
|
+
// bearer → `{"invalidToken":true}`), so a token the customer creates in
|
|
33523
|
+
// their own Vercel dashboard works directly. That makes this an ordinary
|
|
33524
|
+
// paste-a-key integration, and it means WE hold the credential — so it can
|
|
33525
|
+
// be stored, rotated, revoked and audited, none of which was true when the
|
|
33526
|
+
// grant lived in Claude Code's `~/.claude.json` on the host.
|
|
33527
|
+
//
|
|
33528
|
+
// Tools are declared as data on `integration_definitions.metadata.tools`
|
|
33529
|
+
// and dispatch through the existing Direct HTTP broker (the v0 pattern) —
|
|
33530
|
+
// there is deliberately no bespoke Vercel client and no bespoke broker.
|
|
33531
|
+
supported_auth_types: ["api_key"],
|
|
33510
33532
|
capabilities: [
|
|
33511
|
-
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build
|
|
33512
|
-
{ id: "vercel:search-docs", name: "Search Documentation", description: "Search Vercel platform documentation.", access: "read" }
|
|
33533
|
+
{ id: "vercel:read-deployments", name: "Read Deployments", description: "List teams/projects, check deployment status, and read build logs.", access: "read" }
|
|
33513
33534
|
],
|
|
33514
|
-
docs_url: "https://vercel.com/docs/
|
|
33515
|
-
// Beta until the
|
|
33516
|
-
//
|
|
33517
|
-
|
|
33518
|
-
|
|
33519
|
-
//
|
|
33520
|
-
//
|
|
33521
|
-
//
|
|
33522
|
-
//
|
|
33523
|
-
// `registryRemoteMcpKeys` prune universe automatically, so an uninstall
|
|
33524
|
-
// actually removes the entry instead of leaving it stale.
|
|
33525
|
-
remoteMcp: {
|
|
33526
|
-
type: "http",
|
|
33527
|
-
url: "https://mcp.vercel.com"
|
|
33528
|
-
}
|
|
33535
|
+
docs_url: "https://vercel.com/docs/rest-api",
|
|
33536
|
+
// Beta until the REST tool surface has been exercised against a real
|
|
33537
|
+
// customer token. (The previous reason — "until the headless OAuth flow is
|
|
33538
|
+
// verified end-to-end" — is void: there is no OAuth flow any more.)
|
|
33539
|
+
beta: true
|
|
33540
|
+
// NO `remoteMcp`. See the tombstone in the claudecode adapter's prune
|
|
33541
|
+
// universe: dropping this field also drops `vercel` from
|
|
33542
|
+
// `registryRemoteMcpKeys`, which would strand the `.mcp.json` entry on
|
|
33543
|
+
// every host that installed the MCP variant.
|
|
33529
33544
|
},
|
|
33530
33545
|
{
|
|
33531
33546
|
id: "qmd",
|
|
@@ -35997,6 +36012,54 @@ var FLAG_REGISTRY = [
|
|
|
35997
36012
|
// Turning this on lets agents originate proposals that create customer
|
|
35998
36013
|
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35999
36014
|
sensitive: true
|
|
36015
|
+
},
|
|
36016
|
+
{
|
|
36017
|
+
key: "github-broker-credentials",
|
|
36018
|
+
description: "Deliver GitHub App installation tokens to `git` and the `gh` CLI through the broker credential endpoint at USE time, instead of materializing them into the agent process environment at spawn (ENG-8344). A GitHub App installation token has a ~1h TTL, so the spawn-frozen GITHUB_ACCESS_TOKEN / GITHUB_TOKEN pair rotates hourly; the wrapper sources `.env.integrations` exactly once, so the only way a running agent sees the new value is a full session respawn (measured: 6 agents, ~144 kills/day). ENG-8343 stopped those kills landing mid-turn; this removes them. ON: `POST /host/agent-integrations` stops minting the installation token into the payload for auth_type=github_app rows (so computeIntegrationsHash stops seeing a rotating value) and marks the row credential_delivery=broker; the claudecode adapter then writes a git credential helper + a `gh` shim that fetch a fresh token per use from POST /host/agent-integrations/github/credential (ENG-8264 name addressing). OFF (default): byte-for-byte today's behaviour - the token is minted into the payload and materialized as GITHUB_ACCESS_TOKEN / GITHUB_TOKEN, no helper, no shim. NOTE the scope of the security claim: this removes the token from the agent's ENVIRONMENT, which is what stops the respawns. It does NOT make the token unreachable by a determined agent - the agent can invoke the helper itself. Strictly better than today, not a sandbox. Evaluated API-side only, per agent, in POST /host/agent-integrations; no host-side envVar. The host does not read this flag - it keys off the resulting credential_delivery marker on the row - so there is deliberately no host override that could put the token back on its own. Roll back from the flag.",
|
|
36019
|
+
flagType: "boolean",
|
|
36020
|
+
// Declared safe value is `false` = today's env delivery. Fail-safe direction:
|
|
36021
|
+
// a flag-DB read error must never strip `git`/`gh` credentials off a live
|
|
36022
|
+
// agent, which is what the ON path does when its host has no helper writer.
|
|
36023
|
+
defaultValue: false,
|
|
36024
|
+
// Flipping ON changes how every GitHub App agent on the scope authenticates
|
|
36025
|
+
// `git push` / `gh`. A bad flip takes those away, so it is a deliberate,
|
|
36026
|
+
// confirmed action (ADR-0022 §4).
|
|
36027
|
+
sensitive: true,
|
|
36028
|
+
// Set even though the flag is evaluated centrally, because `since` is a
|
|
36029
|
+
// REACH threshold ("a host this old has no consumer code for the flag") and
|
|
36030
|
+
// that is exactly the hazard here: the host does not read the flag, but it
|
|
36031
|
+
// does need the claudecode adapter's helper/shim writer and the wrapper PATH
|
|
36032
|
+
// prepend. On a host too old for those, the API would stop shipping the
|
|
36033
|
+
// token and NOTHING would replace it. Without `since` the flip-reach modal
|
|
36034
|
+
// reports FULL reach and hides that.
|
|
36035
|
+
//
|
|
36036
|
+
// DELIBERATE UNREACHABLE PLACEHOLDER - NOT A REAL THRESHOLD YET.
|
|
36037
|
+
// The sibling entries in this registry (`slack-hot-thread-guard` 0.28.339,
|
|
36038
|
+
// `slack-scheduled-channel-guard` 0.28.421) are BISECTED from published npm
|
|
36039
|
+
// artifacts, which is only possible AFTER this merges and publishes. A
|
|
36040
|
+
// pre-merge guess cannot be right, and the two directions are not
|
|
36041
|
+
// symmetric:
|
|
36042
|
+
// - too HIGH -> hosts classify `stale`, the modal over-warns. Annoying.
|
|
36043
|
+
// - too LOW -> hosts classify `honors` while carrying NO helper writer,
|
|
36044
|
+
// the modal promises full reach, and a flip strips `git`/
|
|
36045
|
+
// `gh` credentials with nothing replacing them. Outage.
|
|
36046
|
+
// So this is pinned ABOVE every published release on purpose: it classifies
|
|
36047
|
+
// EVERY host as `stale`, so the modal reports no reach rather than reach it
|
|
36048
|
+
// has no basis for. That is the intended pre-bisect state.
|
|
36049
|
+
//
|
|
36050
|
+
// BUT `since` IS ADVISORY, NOT A GUARD. It is read in exactly one place -
|
|
36051
|
+
// `computeFlagReach` behind GET /admin/reach, which renders the flip-reach
|
|
36052
|
+
// modal. `evaluate.ts` never reads it and neither does the override write
|
|
36053
|
+
// path. The placeholder therefore changes what an operator is TOLD; it does
|
|
36054
|
+
// not stop a flip on an under-`since` host. What actually holds the line
|
|
36055
|
+
// here is `defaultValue: false` plus `sensitive: true` plus the runbook.
|
|
36056
|
+
//
|
|
36057
|
+
// BEFORE THIS FLAG IS FLIPPED ANYWHERE: bisect the published dist for the
|
|
36058
|
+
// first agt-cli whose claudecode adapter writes agt-bin/ and whose wrapper
|
|
36059
|
+
// prepends it, then replace this with that exact version. The rollout
|
|
36060
|
+
// runbook gates on it. Leaving the placeholder in place is safe (nothing
|
|
36061
|
+
// flips); shipping a guessed number is not.
|
|
36062
|
+
since: "0.29.0"
|
|
36000
36063
|
}
|
|
36001
36064
|
];
|
|
36002
36065
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
writeDirectChatSessionState,
|
|
38
38
|
writeEgressAllowlist,
|
|
39
39
|
writePersistentClaudeWrapper
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-7U63M5R6.js";
|
|
41
41
|
import "./chunk-XWVM4KPK.js";
|
|
42
42
|
export {
|
|
43
43
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -79,4 +79,4 @@ export {
|
|
|
79
79
|
writeEgressAllowlist,
|
|
80
80
|
writePersistentClaudeWrapper
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=persistent-session-
|
|
82
|
+
//# sourceMappingURL=persistent-session-BDNW4K6M.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7U63M5R6.js";
|
|
4
4
|
import "./chunk-XWVM4KPK.js";
|
|
5
5
|
|
|
6
6
|
// src/lib/responsiveness-probe.ts
|
|
@@ -662,4 +662,4 @@ export {
|
|
|
662
662
|
readAndResetSlackReplyBindingClassifications,
|
|
663
663
|
readAndResetSlackReplyTargetClassifications
|
|
664
664
|
};
|
|
665
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
665
|
+
//# sourceMappingURL=responsiveness-probe-KR73VA2S.js.map
|