@integrity-labs/agt-cli 0.28.483 → 0.28.485
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-EGVOVL5P.js → chunk-QFQTGSXQ.js} +3 -3
- package/dist/{chunk-DNC5JGOV.js → chunk-SRR5XVWJ.js} +18 -9
- package/dist/{chunk-DNC5JGOV.js.map → chunk-SRR5XVWJ.js.map} +1 -1
- package/dist/{claude-pair-runtime-2XPTEGQR.js → claude-pair-runtime-STSHUESG.js} +2 -2
- package/dist/lib/manager-worker.js +10 -10
- package/dist/mcp/direct-chat-channel.js +99 -30
- package/dist/mcp/origami.js +17 -8
- package/dist/mcp/slack-channel.js +143 -74
- package/dist/mcp/telegram-channel.js +121 -52
- package/dist/{persistent-session-IBMUPQZ2.js → persistent-session-CEGPLUHO.js} +2 -2
- package/dist/{responsiveness-probe-QBLQIMZR.js → responsiveness-probe-RBLOTOHD.js} +2 -2
- package/package.json +1 -1
- /package/dist/{chunk-EGVOVL5P.js.map → chunk-QFQTGSXQ.js.map} +0 -0
- /package/dist/{claude-pair-runtime-2XPTEGQR.js.map → claude-pair-runtime-STSHUESG.js.map} +0 -0
- /package/dist/{persistent-session-IBMUPQZ2.js.map → persistent-session-CEGPLUHO.js.map} +0 -0
- /package/dist/{responsiveness-probe-QBLQIMZR.js.map → responsiveness-probe-RBLOTOHD.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-CEGPLUHO.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-STSHUESG.js.map
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
resolveEffectivePinRaw,
|
|
45
45
|
safeWriteJsonAtomic,
|
|
46
46
|
setConfigHash
|
|
47
|
-
} from "../chunk-
|
|
47
|
+
} from "../chunk-QFQTGSXQ.js";
|
|
48
48
|
import {
|
|
49
49
|
getProjectDir as getProjectDir2,
|
|
50
50
|
getReadyTasks,
|
|
@@ -162,7 +162,7 @@ import {
|
|
|
162
162
|
toOpencodeModel,
|
|
163
163
|
transcriptActivityAgeSeconds,
|
|
164
164
|
writeEgressAllowlist
|
|
165
|
-
} from "../chunk-
|
|
165
|
+
} from "../chunk-SRR5XVWJ.js";
|
|
166
166
|
import {
|
|
167
167
|
reapOrphanChannelMcps
|
|
168
168
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -10064,7 +10064,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
10064
10064
|
var lastVersionCheckAt = 0;
|
|
10065
10065
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
10066
10066
|
var lastResponsivenessProbeAt = 0;
|
|
10067
|
-
var agtCliVersion = true ? "0.28.
|
|
10067
|
+
var agtCliVersion = true ? "0.28.485" : "dev";
|
|
10068
10068
|
function resolveBrewPath(execFileSync2) {
|
|
10069
10069
|
try {
|
|
10070
10070
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -11227,7 +11227,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
11227
11227
|
if (codeNames.length === 0) return;
|
|
11228
11228
|
void (async () => {
|
|
11229
11229
|
try {
|
|
11230
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11230
|
+
const { collectDiagnostics } = await import("../persistent-session-CEGPLUHO.js");
|
|
11231
11231
|
await api.post("/host/heartbeat", {
|
|
11232
11232
|
host_id: hostId,
|
|
11233
11233
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -11334,7 +11334,7 @@ async function pollCycle() {
|
|
|
11334
11334
|
}
|
|
11335
11335
|
try {
|
|
11336
11336
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
11337
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11337
|
+
const { collectDiagnostics } = await import("../persistent-session-CEGPLUHO.js");
|
|
11338
11338
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
11339
11339
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor) : void 0;
|
|
11340
11340
|
let tailscaleHostname;
|
|
@@ -11448,7 +11448,7 @@ async function pollCycle() {
|
|
|
11448
11448
|
collectResponsivenessProbes,
|
|
11449
11449
|
collectPanelessActivityProbes,
|
|
11450
11450
|
getResponsivenessIntervalMs
|
|
11451
|
-
} = await import("../responsiveness-probe-
|
|
11451
|
+
} = await import("../responsiveness-probe-RBLOTOHD.js");
|
|
11452
11452
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
11453
11453
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
11454
11454
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -11512,7 +11512,7 @@ async function pollCycle() {
|
|
|
11512
11512
|
collectResponsivenessProbes,
|
|
11513
11513
|
livePendingInboundOldestAgeSeconds,
|
|
11514
11514
|
parkPendingInbound
|
|
11515
|
-
} = await import("../responsiveness-probe-
|
|
11515
|
+
} = await import("../responsiveness-probe-RBLOTOHD.js");
|
|
11516
11516
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
11517
11517
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
11518
11518
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -14988,7 +14988,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
14988
14988
|
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}`));
|
|
14989
14989
|
void (async () => {
|
|
14990
14990
|
try {
|
|
14991
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
14991
|
+
const { collectDiagnostics } = await import("../persistent-session-CEGPLUHO.js");
|
|
14992
14992
|
await api.post("/host/heartbeat", {
|
|
14993
14993
|
host_id: hostId,
|
|
14994
14994
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15038,7 +15038,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
15038
15038
|
}
|
|
15039
15039
|
try {
|
|
15040
15040
|
const hostId = await getHostId();
|
|
15041
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15041
|
+
const { collectDiagnostics } = await import("../persistent-session-CEGPLUHO.js");
|
|
15042
15042
|
await api.post("/host/heartbeat", {
|
|
15043
15043
|
host_id: hostId,
|
|
15044
15044
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15496,7 +15496,7 @@ async function processClaudePairSessions(agents) {
|
|
|
15496
15496
|
killPairSession,
|
|
15497
15497
|
pairTmuxSession,
|
|
15498
15498
|
finalizeClaudePairOnboarding
|
|
15499
|
-
} = await import("../claude-pair-runtime-
|
|
15499
|
+
} = await import("../claude-pair-runtime-STSHUESG.js");
|
|
15500
15500
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
15501
15501
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
15502
15502
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -30218,7 +30218,7 @@ function recordChannelDeflection(agentDir, channel, cause) {
|
|
|
30218
30218
|
}
|
|
30219
30219
|
|
|
30220
30220
|
// src/turn-failure-watch.ts
|
|
30221
|
-
import {
|
|
30221
|
+
import { readdirSync as readdirSync5, statSync as statSync2 } from "fs";
|
|
30222
30222
|
import { join as join9 } from "path";
|
|
30223
30223
|
|
|
30224
30224
|
// ../core/dist/types/integration.js
|
|
@@ -33208,18 +33208,27 @@ var INTEGRATION_REGISTRY = [
|
|
|
33208
33208
|
id: "firecrawl",
|
|
33209
33209
|
name: "Firecrawl",
|
|
33210
33210
|
category: "knowledge",
|
|
33211
|
-
description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat.
|
|
33211
|
+
description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat. Connect via the platform-managed account, or bring your own Firecrawl API key.",
|
|
33212
33212
|
// ENG-7217: Firecrawl migrates from a customer-API-key stdio MCP
|
|
33213
33213
|
// (`npx firecrawl-mcp`, FIRECRAWL_API_KEY) to a PREMIUM, platform-managed
|
|
33214
33214
|
// integration on the Deck / ElevenLabs model (ADR-0031, epic ENG-6920):
|
|
33215
33215
|
// Augmented holds ONE Firecrawl account key (`FIRECRAWL_ACCOUNT_KEY`) that
|
|
33216
|
-
// every customer agent's web-data calls bill back to
|
|
33217
|
-
//
|
|
33218
|
-
//
|
|
33219
|
-
//
|
|
33220
|
-
//
|
|
33221
|
-
//
|
|
33222
|
-
|
|
33216
|
+
// every customer agent's web-data calls bill back to. The agent-facing tools
|
|
33217
|
+
// are brokered server-side (firecrawl-broker.ts, reusing the official
|
|
33218
|
+
// @mendable/firecrawl-js SDK) rather than via the stdio MCP, so managed usage
|
|
33219
|
+
// is metered at the one control-plane chokepoint and gated on a per-org opt-in
|
|
33220
|
+
// + monthly USD cap.
|
|
33221
|
+
//
|
|
33222
|
+
// ENG-8304 / ADR-0055 (Phase 1b — Firecrawl is the BYO exemplar): `api_key` is
|
|
33223
|
+
// now also offered so a customer can bring their OWN Firecrawl key. A BYO
|
|
33224
|
+
// install (`credential_source='byo'`) authenticates with the customer's key
|
|
33225
|
+
// (stored encrypted on the install) and is NOT metered — its upstream cost is
|
|
33226
|
+
// on the customer's own Firecrawl bill. BYO is gated on the plan-tier
|
|
33227
|
+
// `byo_credentials` entitlement; managed stays the platform-key, billed path.
|
|
33228
|
+
// `api_key` is the BYO option; the connect UI offers it via the toolkit's
|
|
33229
|
+
// `auth_types` seed (Firecrawl surfaces through the premium list, not the
|
|
33230
|
+
// native `installable` picker — that descriptor is for non-premium natives).
|
|
33231
|
+
supported_auth_types: ["none", "api_key"],
|
|
33223
33232
|
capabilities: [
|
|
33224
33233
|
{ id: "firecrawl:scrape", name: "Scrape Pages", description: "Fetch a single URL as clean markdown / structured data (firecrawl_scrape).", access: "write" },
|
|
33225
33234
|
{ id: "firecrawl:search", name: "Web Search", description: "Search the web and return ranked results, optionally scraped (firecrawl_search).", access: "write" },
|
|
@@ -35352,11 +35361,77 @@ function deriveBindFailureQuarantineThreshold(provisioningMax) {
|
|
|
35352
35361
|
var MIN_PROVISIONING_MAX_FOR_QUARANTINE_ORDERING = BIND_FAILURE_QUARANTINE_THRESHOLD + 1;
|
|
35353
35362
|
|
|
35354
35363
|
// src/rate-limit-watch.ts
|
|
35355
|
-
import {
|
|
35364
|
+
import { closeSync, fstatSync, openSync, readSync, readdirSync as readdirSync4, statSync } from "fs";
|
|
35356
35365
|
import { homedir as homedir2 } from "os";
|
|
35357
35366
|
import { join as join8 } from "path";
|
|
35358
35367
|
var DEFAULT_WATCH_MS = 5e3;
|
|
35359
35368
|
var DEFAULT_POLL_MS = 400;
|
|
35369
|
+
var INITIAL_TAIL_BYTES = 256 * 1024;
|
|
35370
|
+
var TAIL_WIDEN_FACTOR = 8;
|
|
35371
|
+
var TAIL_SKEW_TOLERANCE_MS = 5 * 6e4;
|
|
35372
|
+
function readClassifiableTail(path, sinceMs, opts) {
|
|
35373
|
+
let want = Math.max(1, opts?.initialBytes ?? INITIAL_TAIL_BYTES);
|
|
35374
|
+
for (; ; ) {
|
|
35375
|
+
const slice = readTailSlice(path, want);
|
|
35376
|
+
if (slice === null) return "";
|
|
35377
|
+
if (slice.fromStart) return slice.text;
|
|
35378
|
+
const oldest = oldestTimestampMs(slice.text);
|
|
35379
|
+
if (oldest !== null && oldest < sinceMs - TAIL_SKEW_TOLERANCE_MS) return slice.text;
|
|
35380
|
+
want *= TAIL_WIDEN_FACTOR;
|
|
35381
|
+
}
|
|
35382
|
+
}
|
|
35383
|
+
function readTailSlice(path, bytes) {
|
|
35384
|
+
let fd;
|
|
35385
|
+
try {
|
|
35386
|
+
fd = openSync(path, "r");
|
|
35387
|
+
} catch {
|
|
35388
|
+
return null;
|
|
35389
|
+
}
|
|
35390
|
+
try {
|
|
35391
|
+
const size = fstatSync(fd).size;
|
|
35392
|
+
const start = size > bytes ? size - bytes : 0;
|
|
35393
|
+
const len = size - start;
|
|
35394
|
+
if (len <= 0) return { text: "", fromStart: true };
|
|
35395
|
+
const buf = Buffer.allocUnsafe(len);
|
|
35396
|
+
let read = 0;
|
|
35397
|
+
while (read < len) {
|
|
35398
|
+
const n = readSync(fd, buf, read, len - read, start + read);
|
|
35399
|
+
if (n <= 0) break;
|
|
35400
|
+
read += n;
|
|
35401
|
+
}
|
|
35402
|
+
if (read < len) return null;
|
|
35403
|
+
let text = buf.subarray(0, read).toString("utf-8");
|
|
35404
|
+
if (start > 0) {
|
|
35405
|
+
const nl = text.indexOf("\n");
|
|
35406
|
+
text = nl === -1 ? "" : text.slice(nl + 1);
|
|
35407
|
+
}
|
|
35408
|
+
return { text, fromStart: start === 0 };
|
|
35409
|
+
} catch {
|
|
35410
|
+
return null;
|
|
35411
|
+
} finally {
|
|
35412
|
+
closeSync(fd);
|
|
35413
|
+
}
|
|
35414
|
+
}
|
|
35415
|
+
function oldestTimestampMs(text) {
|
|
35416
|
+
let idx = 0;
|
|
35417
|
+
while (idx < text.length) {
|
|
35418
|
+
const nl = text.indexOf("\n", idx);
|
|
35419
|
+
const line = (nl === -1 ? text.slice(idx) : text.slice(idx, nl)).trim();
|
|
35420
|
+
if (line) {
|
|
35421
|
+
try {
|
|
35422
|
+
const ts = JSON.parse(line).timestamp;
|
|
35423
|
+
if (typeof ts === "string") {
|
|
35424
|
+
const ms = new Date(ts).getTime();
|
|
35425
|
+
if (Number.isFinite(ms)) return ms;
|
|
35426
|
+
}
|
|
35427
|
+
} catch {
|
|
35428
|
+
}
|
|
35429
|
+
}
|
|
35430
|
+
if (nl === -1) break;
|
|
35431
|
+
idx = nl + 1;
|
|
35432
|
+
}
|
|
35433
|
+
return null;
|
|
35434
|
+
}
|
|
35360
35435
|
function agentTranscriptDir(opts) {
|
|
35361
35436
|
const cwd = opts?.cwd ?? process.cwd();
|
|
35362
35437
|
const home = opts?.home ?? homedir2();
|
|
@@ -35380,12 +35455,10 @@ function classifyTranscriptSince(opts) {
|
|
|
35380
35455
|
} catch {
|
|
35381
35456
|
continue;
|
|
35382
35457
|
}
|
|
35383
|
-
|
|
35384
|
-
|
|
35385
|
-
|
|
35386
|
-
|
|
35387
|
-
continue;
|
|
35388
|
-
}
|
|
35458
|
+
const content = readClassifiableTail(path, opts.sinceMs, {
|
|
35459
|
+
...opts.initialTailBytes != null ? { initialBytes: opts.initialTailBytes } : {}
|
|
35460
|
+
});
|
|
35461
|
+
if (!content) continue;
|
|
35389
35462
|
newest = pickNewerClassification(
|
|
35390
35463
|
newest,
|
|
35391
35464
|
classifyTranscriptRateLimit(content, opts.sinceMs, opts.nowMs, new Date(opts.nowMs))
|
|
@@ -35463,12 +35536,8 @@ function classifyTurnFailureSince(opts) {
|
|
|
35463
35536
|
if (cached2 && cached2.fingerprint === fingerprint) {
|
|
35464
35537
|
scan = cached2.scan;
|
|
35465
35538
|
} else {
|
|
35466
|
-
|
|
35467
|
-
|
|
35468
|
-
content = readFileSync9(path, "utf-8");
|
|
35469
|
-
} catch {
|
|
35470
|
-
continue;
|
|
35471
|
-
}
|
|
35539
|
+
const content = readClassifiableTail(path, opts.sinceMs);
|
|
35540
|
+
if (!content) continue;
|
|
35472
35541
|
const analysis = analyzeTranscriptTurnFailure(content, opts.sinceMs, opts.nowMs);
|
|
35473
35542
|
scan = {
|
|
35474
35543
|
result: analysis.result,
|
|
@@ -35637,7 +35706,7 @@ async function fetchWithTimeout(input, init, timeoutMs, fetchImpl = fetch) {
|
|
|
35637
35706
|
import {
|
|
35638
35707
|
existsSync as existsSync5,
|
|
35639
35708
|
mkdirSync as mkdirSync4,
|
|
35640
|
-
readFileSync as
|
|
35709
|
+
readFileSync as readFileSync8,
|
|
35641
35710
|
renameSync as renameSync4,
|
|
35642
35711
|
statSync as statSync3,
|
|
35643
35712
|
unlinkSync as unlinkSync3,
|
|
@@ -35734,7 +35803,7 @@ function defaultLockMtimeMs(path) {
|
|
|
35734
35803
|
function readLockHolder(path) {
|
|
35735
35804
|
if (!existsSync5(path)) return null;
|
|
35736
35805
|
try {
|
|
35737
|
-
const raw =
|
|
35806
|
+
const raw = readFileSync8(path, "utf8");
|
|
35738
35807
|
const parsed = JSON.parse(raw);
|
|
35739
35808
|
const pid = typeof parsed.pid === "number" ? parsed.pid : Number(parsed.pid);
|
|
35740
35809
|
if (!Number.isFinite(pid) || pid <= 0) return null;
|
|
@@ -35753,7 +35822,7 @@ import {
|
|
|
35753
35822
|
watch,
|
|
35754
35823
|
mkdirSync as mkdirSync5,
|
|
35755
35824
|
writeFileSync as writeFileSync6,
|
|
35756
|
-
readFileSync as
|
|
35825
|
+
readFileSync as readFileSync10,
|
|
35757
35826
|
readdirSync as readdirSync6,
|
|
35758
35827
|
existsSync as existsSync6,
|
|
35759
35828
|
renameSync as renameSync5,
|
|
@@ -36186,7 +36255,7 @@ function isMaintenanceModeActive(opts) {
|
|
|
36186
36255
|
}
|
|
36187
36256
|
|
|
36188
36257
|
// src/account-enforcement-notice.ts
|
|
36189
|
-
import { readFileSync as
|
|
36258
|
+
import { readFileSync as readFileSync9 } from "fs";
|
|
36190
36259
|
import { homedir as homedir3 } from "os";
|
|
36191
36260
|
import { join as join12 } from "path";
|
|
36192
36261
|
|
|
@@ -36213,7 +36282,7 @@ function readAccountEnforcementLevel(opts) {
|
|
|
36213
36282
|
if (!path) return null;
|
|
36214
36283
|
let raw;
|
|
36215
36284
|
try {
|
|
36216
|
-
raw =
|
|
36285
|
+
raw = readFileSync9(path, "utf-8");
|
|
36217
36286
|
} catch {
|
|
36218
36287
|
return null;
|
|
36219
36288
|
}
|
|
@@ -36352,7 +36421,7 @@ var directChatKanbanCardClient = createKanbanCardActiveClient({
|
|
|
36352
36421
|
function readProgressHeartbeat() {
|
|
36353
36422
|
if (!PROGRESS_HEARTBEAT_PATH || !existsSync6(PROGRESS_HEARTBEAT_PATH)) return null;
|
|
36354
36423
|
try {
|
|
36355
|
-
return parseProgressHeartbeat(
|
|
36424
|
+
return parseProgressHeartbeat(readFileSync10(PROGRESS_HEARTBEAT_PATH, "utf-8"));
|
|
36356
36425
|
} catch {
|
|
36357
36426
|
return null;
|
|
36358
36427
|
}
|
|
@@ -37319,7 +37388,7 @@ function sweepAgedDirectChatMarkersNow(thresholdMs) {
|
|
|
37319
37388
|
const now = Date.now();
|
|
37320
37389
|
const res = sweepAgedDirectChatMarkers(DIRECT_CHAT_PENDING_INBOUND_DIR, {
|
|
37321
37390
|
readdir: (dir) => readdirSync6(dir),
|
|
37322
|
-
readFile: (p2) =>
|
|
37391
|
+
readFile: (p2) => readFileSync10(p2, "utf8"),
|
|
37323
37392
|
unlink: (p2) => {
|
|
37324
37393
|
if (existsSync6(p2)) unlinkSync4(p2);
|
|
37325
37394
|
},
|
|
@@ -37355,7 +37424,7 @@ function sanitizeRecoveryText(text) {
|
|
|
37355
37424
|
}
|
|
37356
37425
|
function directChatRecoveryDeps() {
|
|
37357
37426
|
return {
|
|
37358
|
-
readFile: (p2) =>
|
|
37427
|
+
readFile: (p2) => readFileSync10(p2, "utf-8"),
|
|
37359
37428
|
renameFile: (from, to) => renameSync5(from, to),
|
|
37360
37429
|
unlinkFile: (p2) => {
|
|
37361
37430
|
if (existsSync6(p2)) unlinkSync4(p2);
|
package/dist/mcp/origami.js
CHANGED
|
@@ -39535,18 +39535,27 @@ var INTEGRATION_REGISTRY = [
|
|
|
39535
39535
|
id: "firecrawl",
|
|
39536
39536
|
name: "Firecrawl",
|
|
39537
39537
|
category: "knowledge",
|
|
39538
|
-
description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat.
|
|
39538
|
+
description: "Web data for agents: scrape, map, crawl and search any website for clean structured data, plus scheduled change-detection monitors whose updates arrive in the agent's direct-chat. Connect via the platform-managed account, or bring your own Firecrawl API key.",
|
|
39539
39539
|
// ENG-7217: Firecrawl migrates from a customer-API-key stdio MCP
|
|
39540
39540
|
// (`npx firecrawl-mcp`, FIRECRAWL_API_KEY) to a PREMIUM, platform-managed
|
|
39541
39541
|
// integration on the Deck / ElevenLabs model (ADR-0031, epic ENG-6920):
|
|
39542
39542
|
// Augmented holds ONE Firecrawl account key (`FIRECRAWL_ACCOUNT_KEY`) that
|
|
39543
|
-
// every customer agent's web-data calls bill back to
|
|
39544
|
-
//
|
|
39545
|
-
//
|
|
39546
|
-
//
|
|
39547
|
-
//
|
|
39548
|
-
//
|
|
39549
|
-
|
|
39543
|
+
// every customer agent's web-data calls bill back to. The agent-facing tools
|
|
39544
|
+
// are brokered server-side (firecrawl-broker.ts, reusing the official
|
|
39545
|
+
// @mendable/firecrawl-js SDK) rather than via the stdio MCP, so managed usage
|
|
39546
|
+
// is metered at the one control-plane chokepoint and gated on a per-org opt-in
|
|
39547
|
+
// + monthly USD cap.
|
|
39548
|
+
//
|
|
39549
|
+
// ENG-8304 / ADR-0055 (Phase 1b — Firecrawl is the BYO exemplar): `api_key` is
|
|
39550
|
+
// now also offered so a customer can bring their OWN Firecrawl key. A BYO
|
|
39551
|
+
// install (`credential_source='byo'`) authenticates with the customer's key
|
|
39552
|
+
// (stored encrypted on the install) and is NOT metered — its upstream cost is
|
|
39553
|
+
// on the customer's own Firecrawl bill. BYO is gated on the plan-tier
|
|
39554
|
+
// `byo_credentials` entitlement; managed stays the platform-key, billed path.
|
|
39555
|
+
// `api_key` is the BYO option; the connect UI offers it via the toolkit's
|
|
39556
|
+
// `auth_types` seed (Firecrawl surfaces through the premium list, not the
|
|
39557
|
+
// native `installable` picker — that descriptor is for non-premium natives).
|
|
39558
|
+
supported_auth_types: ["none", "api_key"],
|
|
39550
39559
|
capabilities: [
|
|
39551
39560
|
{ id: "firecrawl:scrape", name: "Scrape Pages", description: "Fetch a single URL as clean markdown / structured data (firecrawl_scrape).", access: "write" },
|
|
39552
39561
|
{ id: "firecrawl:search", name: "Web Search", description: "Search the web and return ranked results, optionally scraped (firecrawl_search).", access: "write" },
|