@integrity-labs/agt-cli 0.28.508 → 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-LNPJI2AE.js → chunk-7U63M5R6.js} +37 -22
- package/dist/{chunk-LNPJI2AE.js.map → chunk-7U63M5R6.js.map} +1 -1
- package/dist/{chunk-GK3TSZ4S.js → chunk-S5X4XFAC.js} +15 -3
- package/dist/{chunk-GK3TSZ4S.js.map → chunk-S5X4XFAC.js.map} +1 -1
- package/dist/{claude-pair-runtime-YQ7V5TS6.js → claude-pair-runtime-5CDR4XPI.js} +2 -2
- package/dist/lib/manager-worker.js +10 -10
- package/dist/mcp/direct-chat-channel.js +36 -21
- package/dist/mcp/origami.js +36 -21
- package/dist/mcp/slack-channel.js +36 -21
- package/dist/mcp/telegram-channel.js +36 -21
- package/dist/{persistent-session-VX37ESOS.js → persistent-session-BDNW4K6M.js} +2 -2
- package/dist/{responsiveness-probe-5MEW5XNI.js → responsiveness-probe-KR73VA2S.js} +2 -2
- package/package.json +1 -1
- /package/dist/{claude-pair-runtime-YQ7V5TS6.js.map → claude-pair-runtime-5CDR4XPI.js.map} +0 -0
- /package/dist/{persistent-session-VX37ESOS.js.map → persistent-session-BDNW4K6M.js.map} +0 -0
- /package/dist/{responsiveness-probe-5MEW5XNI.js.map → responsiveness-probe-KR73VA2S.js.map} +0 -0
|
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
|
|
|
100
100
|
return { ok: true };
|
|
101
101
|
} catch {
|
|
102
102
|
}
|
|
103
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-BDNW4K6M.js");
|
|
104
104
|
const claudeBin = resolveClaudeBinary();
|
|
105
105
|
const pairEnv = {
|
|
106
106
|
...process.env,
|
|
@@ -373,4 +373,4 @@ export {
|
|
|
373
373
|
startClaudePair,
|
|
374
374
|
submitClaudePairCode
|
|
375
375
|
};
|
|
376
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-5CDR4XPI.js.map
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
safeWriteJsonAtomic,
|
|
54
54
|
setConfigHash,
|
|
55
55
|
tripClass
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-S5X4XFAC.js";
|
|
57
57
|
import {
|
|
58
58
|
getProjectDir as getProjectDir2,
|
|
59
59
|
getReadyTasks,
|
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
toOpencodeModel,
|
|
174
174
|
transcriptActivityAgeSeconds,
|
|
175
175
|
writeEgressAllowlist
|
|
176
|
-
} from "../chunk-
|
|
176
|
+
} from "../chunk-7U63M5R6.js";
|
|
177
177
|
import {
|
|
178
178
|
reapOrphanChannelMcps
|
|
179
179
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -10038,7 +10038,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
10038
10038
|
var lastVersionCheckAt = 0;
|
|
10039
10039
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
10040
10040
|
var lastResponsivenessProbeAt = 0;
|
|
10041
|
-
var agtCliVersion = true ? "0.28.
|
|
10041
|
+
var agtCliVersion = true ? "0.28.509" : "dev";
|
|
10042
10042
|
function resolveBrewPath(execFileSync2) {
|
|
10043
10043
|
try {
|
|
10044
10044
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -11245,7 +11245,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
11245
11245
|
if (codeNames.length === 0) return;
|
|
11246
11246
|
void (async () => {
|
|
11247
11247
|
try {
|
|
11248
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11248
|
+
const { collectDiagnostics } = await import("../persistent-session-BDNW4K6M.js");
|
|
11249
11249
|
await api.post("/host/heartbeat", {
|
|
11250
11250
|
host_id: hostId,
|
|
11251
11251
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -11352,7 +11352,7 @@ async function pollCycle() {
|
|
|
11352
11352
|
}
|
|
11353
11353
|
try {
|
|
11354
11354
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
11355
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11355
|
+
const { collectDiagnostics } = await import("../persistent-session-BDNW4K6M.js");
|
|
11356
11356
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
11357
11357
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor) : void 0;
|
|
11358
11358
|
let tailscaleHostname;
|
|
@@ -11467,7 +11467,7 @@ async function pollCycle() {
|
|
|
11467
11467
|
collectResponsivenessProbes,
|
|
11468
11468
|
collectPanelessActivityProbes,
|
|
11469
11469
|
getResponsivenessIntervalMs
|
|
11470
|
-
} = await import("../responsiveness-probe-
|
|
11470
|
+
} = await import("../responsiveness-probe-KR73VA2S.js");
|
|
11471
11471
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
11472
11472
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
11473
11473
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -11531,7 +11531,7 @@ async function pollCycle() {
|
|
|
11531
11531
|
collectResponsivenessProbes,
|
|
11532
11532
|
livePendingInboundOldestAgeSeconds,
|
|
11533
11533
|
parkPendingInbound
|
|
11534
|
-
} = await import("../responsiveness-probe-
|
|
11534
|
+
} = await import("../responsiveness-probe-KR73VA2S.js");
|
|
11535
11535
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
11536
11536
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
11537
11537
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -15023,7 +15023,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
15023
15023
|
void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
|
|
15024
15024
|
void (async () => {
|
|
15025
15025
|
try {
|
|
15026
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15026
|
+
const { collectDiagnostics } = await import("../persistent-session-BDNW4K6M.js");
|
|
15027
15027
|
await api.post("/host/heartbeat", {
|
|
15028
15028
|
host_id: hostId,
|
|
15029
15029
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15073,7 +15073,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
15073
15073
|
}
|
|
15074
15074
|
try {
|
|
15075
15075
|
const hostId = await getHostId();
|
|
15076
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15076
|
+
const { collectDiagnostics } = await import("../persistent-session-BDNW4K6M.js");
|
|
15077
15077
|
await api.post("/host/heartbeat", {
|
|
15078
15078
|
host_id: hostId,
|
|
15079
15079
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15591,7 +15591,7 @@ async function processClaudePairSessions(agents) {
|
|
|
15591
15591
|
killPairSession,
|
|
15592
15592
|
pairTmuxSession,
|
|
15593
15593
|
finalizeClaudePairOnboarding
|
|
15594
|
-
} = await import("../claude-pair-runtime-
|
|
15594
|
+
} = await import("../claude-pair-runtime-5CDR4XPI.js");
|
|
15595
15595
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
15596
15596
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
15597
15597
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -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",
|
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",
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|