@mrrlin-dev/mcp 0.4.45 → 0.4.47
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.cjs +65 -27
- package/package.json +5 -5
package/dist/bin.cjs
CHANGED
|
@@ -40132,8 +40132,21 @@ var ClaudeAgentHandle = class {
|
|
|
40132
40132
|
};
|
|
40133
40133
|
|
|
40134
40134
|
// ../../packages/agent-client/dist/registry.js
|
|
40135
|
+
var KNOWN_PROVIDERS = { codex: true, claude: true };
|
|
40136
|
+
var KNOWN_PROVIDER_IDS = Object.keys(KNOWN_PROVIDERS);
|
|
40137
|
+
function readProviderFromEnv(env) {
|
|
40138
|
+
const raw = env.MRRLIN_AGENT_PROVIDER;
|
|
40139
|
+
if (raw === void 0)
|
|
40140
|
+
return null;
|
|
40141
|
+
const normalized = raw.trim().toLowerCase();
|
|
40142
|
+
if (!normalized)
|
|
40143
|
+
return null;
|
|
40144
|
+
if (Object.hasOwn(KNOWN_PROVIDERS, normalized))
|
|
40145
|
+
return normalized;
|
|
40146
|
+
throw new Error(`MRRLIN_AGENT_PROVIDER is set to ${JSON.stringify(raw.slice(0, 64))}, which is not an agent provider this build can run. Valid values: ${KNOWN_PROVIDER_IDS.join(", ")}. Unset the variable to use the operator's persisted choice.`);
|
|
40147
|
+
}
|
|
40135
40148
|
function resolveProvider(env, persisted) {
|
|
40136
|
-
const id = env
|
|
40149
|
+
const id = readProviderFromEnv(env) ?? persisted ?? "codex";
|
|
40137
40150
|
if (id === "codex") {
|
|
40138
40151
|
return new CodexProviderAdapter();
|
|
40139
40152
|
}
|
|
@@ -42295,7 +42308,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
|
|
|
42295
42308
|
}
|
|
42296
42309
|
|
|
42297
42310
|
// src/_generated/version.ts
|
|
42298
|
-
var PKG_VERSION = "0.4.
|
|
42311
|
+
var PKG_VERSION = "0.4.47";
|
|
42299
42312
|
|
|
42300
42313
|
// src/api-base-url-migrate.ts
|
|
42301
42314
|
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
@@ -55918,6 +55931,7 @@ function describeZeroOutputLimit(signal) {
|
|
|
55918
55931
|
resetAt: signal.resetAt
|
|
55919
55932
|
};
|
|
55920
55933
|
}
|
|
55934
|
+
var BOOTSTRAP_SEAT_REFRESH_TIMEOUT_MS = 3e3;
|
|
55921
55935
|
function createBridgeMessageHandler(deps) {
|
|
55922
55936
|
const tombstones = deps.tombstones ?? /* @__PURE__ */ new Map();
|
|
55923
55937
|
const pendingTurnSessions = deps.pendingTurnSessions ?? /* @__PURE__ */ new Set();
|
|
@@ -56390,6 +56404,14 @@ function createBridgeMessageHandler(deps) {
|
|
|
56390
56404
|
let bootstrapError;
|
|
56391
56405
|
const fallbackModels = readCodexFallbackModels();
|
|
56392
56406
|
try {
|
|
56407
|
+
if (deps.refreshSelectedProvider) {
|
|
56408
|
+
await withTimeout2(
|
|
56409
|
+
deps.refreshSelectedProvider(),
|
|
56410
|
+
deps.seatRefreshTimeoutMs ?? BOOTSTRAP_SEAT_REFRESH_TIMEOUT_MS,
|
|
56411
|
+
"seat refresh timed out"
|
|
56412
|
+
).catch(() => {
|
|
56413
|
+
});
|
|
56414
|
+
}
|
|
56393
56415
|
const bootstrapProviderId = resolveProvider(process.env, getSelectedProvider()).id;
|
|
56394
56416
|
const codexClient2 = await deps.acquireCodex(bootstrapProviderId);
|
|
56395
56417
|
try {
|
|
@@ -57084,20 +57106,18 @@ function checkTelemetryDefaultProject(env, warn) {
|
|
|
57084
57106
|
}
|
|
57085
57107
|
function createSelectedProviderRefresher(deps) {
|
|
57086
57108
|
let lastError = null;
|
|
57087
|
-
return () => {
|
|
57088
|
-
|
|
57089
|
-
|
|
57090
|
-
|
|
57091
|
-
|
|
57092
|
-
|
|
57093
|
-
|
|
57094
|
-
|
|
57095
|
-
|
|
57096
|
-
|
|
57097
|
-
|
|
57098
|
-
|
|
57099
|
-
});
|
|
57100
|
-
};
|
|
57109
|
+
return () => deps.read().then((config2) => {
|
|
57110
|
+
lastError = null;
|
|
57111
|
+
deps.apply(config2.agentProvider);
|
|
57112
|
+
}).catch((error51) => {
|
|
57113
|
+
const message = error51 instanceof Error ? error51.message : String(error51);
|
|
57114
|
+
if (message !== lastError) {
|
|
57115
|
+
lastError = message;
|
|
57116
|
+
deps.warn(
|
|
57117
|
+
`[mrrlin-mcp director-bridge] agent-provider refresh failed; keeping the held seat: ${message}`
|
|
57118
|
+
);
|
|
57119
|
+
}
|
|
57120
|
+
});
|
|
57101
57121
|
}
|
|
57102
57122
|
async function startDirectorBridge() {
|
|
57103
57123
|
const config2 = parseConfig();
|
|
@@ -57545,10 +57565,20 @@ async function startDirectorBridge() {
|
|
|
57545
57565
|
});
|
|
57546
57566
|
return block.text;
|
|
57547
57567
|
};
|
|
57568
|
+
let refreshSelectedProvider = null;
|
|
57569
|
+
if (tokenProvider) {
|
|
57570
|
+
refreshSelectedProvider = createSelectedProviderRefresher({
|
|
57571
|
+
read: () => client.getAgentProviderConfig(),
|
|
57572
|
+
apply: setSelectedProvider,
|
|
57573
|
+
warn: (m) => process.stderr.write(`${m}
|
|
57574
|
+
`)
|
|
57575
|
+
});
|
|
57576
|
+
}
|
|
57548
57577
|
const sharedHandlerDeps = {
|
|
57549
57578
|
acquireCodex: (providerId) => agentKeepalive.acquire(providerId),
|
|
57550
57579
|
releaseCodex: (providerId) => agentKeepalive.release(providerId),
|
|
57551
57580
|
refreshCodex: () => agentKeepalive.refreshNow(resolveProvider(process.env, getSelectedProvider()).id),
|
|
57581
|
+
...refreshSelectedProvider ? { refreshSelectedProvider } : {},
|
|
57552
57582
|
run: wrappedTurnLock.run,
|
|
57553
57583
|
suspendedMs: () => suspensionDetector.suspendedMs(),
|
|
57554
57584
|
buildStartParams: (msg, desiredModel) => buildThreadStartParams(msg, config2, desiredModel),
|
|
@@ -57875,15 +57905,10 @@ async function startDirectorBridge() {
|
|
|
57875
57905
|
);
|
|
57876
57906
|
}
|
|
57877
57907
|
let selectedProviderTimer = null;
|
|
57878
|
-
if (
|
|
57879
|
-
const
|
|
57880
|
-
|
|
57881
|
-
|
|
57882
|
-
warn: (m) => process.stderr.write(`${m}
|
|
57883
|
-
`)
|
|
57884
|
-
});
|
|
57885
|
-
refreshSelectedProvider();
|
|
57886
|
-
selectedProviderTimer = setInterval(refreshSelectedProvider, 6e4);
|
|
57908
|
+
if (refreshSelectedProvider) {
|
|
57909
|
+
const refresh = refreshSelectedProvider;
|
|
57910
|
+
void refresh();
|
|
57911
|
+
selectedProviderTimer = setInterval(() => void refresh(), 6e4);
|
|
57887
57912
|
selectedProviderTimer.unref?.();
|
|
57888
57913
|
}
|
|
57889
57914
|
let agentPoolLoopHandle = null;
|
|
@@ -62045,11 +62070,24 @@ async function runShadowPanel(input, deps) {
|
|
|
62045
62070
|
const res = await built.runner.runHead(persona, input.artifact, "");
|
|
62046
62071
|
if (res.ok) {
|
|
62047
62072
|
const parsed = parseVerdict(res.text);
|
|
62048
|
-
return {
|
|
62073
|
+
return {
|
|
62074
|
+
persona,
|
|
62075
|
+
agent,
|
|
62076
|
+
verdict: parsed.verdict,
|
|
62077
|
+
ok: true,
|
|
62078
|
+
// The optional chain is required by the TYPE, not left over from not knowing the
|
|
62079
|
+
// invariant: `MultiHeadRunResult.usage` is declared `usage?: ExecTokenUsage | null`
|
|
62080
|
+
// (optional so the shape stays assignable to the gate's older `RunResult`), even though
|
|
62081
|
+
// `parseDispatch` always sets it. `?? null` therefore covers both "no usage key" and
|
|
62082
|
+
// "usage was null" — and covers neither zero: a reported 0 is a measurement and
|
|
62083
|
+
// survives, which is the distinction this whole field exists to preserve.
|
|
62084
|
+
inputTokens: res.usage?.inputTokens ?? null,
|
|
62085
|
+
outputTokens: res.usage?.outputTokens ?? null
|
|
62086
|
+
};
|
|
62049
62087
|
}
|
|
62050
62088
|
} catch {
|
|
62051
62089
|
}
|
|
62052
|
-
return { persona, agent, verdict: "ERROR", ok: false };
|
|
62090
|
+
return { persona, agent, verdict: "ERROR", ok: false, inputTokens: null, outputTokens: null };
|
|
62053
62091
|
})
|
|
62054
62092
|
);
|
|
62055
62093
|
for (const h of perHead) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrrlin-dev/mcp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"mrrlin-mcp": "dist/bin.cjs"
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"@types/ws": "^8.18.1",
|
|
22
22
|
"esbuild": "^0.24.0",
|
|
23
23
|
"tsx": "^4.22.3",
|
|
24
|
-
"@mrrlin/agent-client": "0.0.0",
|
|
25
|
-
"@mrrlin/tsconfig": "0.0.0",
|
|
26
|
-
"@mrrlin/wiki": "0.0.0",
|
|
27
24
|
"@mrrlin/client": "0.0.0",
|
|
25
|
+
"@mrrlin/agent-client": "0.0.0",
|
|
28
26
|
"@mrrlin/director-e2e": "0.0.0",
|
|
29
|
-
"@mrrlin/schemas": "0.0.0"
|
|
27
|
+
"@mrrlin/schemas": "0.0.0",
|
|
28
|
+
"@mrrlin/tsconfig": "0.0.0",
|
|
29
|
+
"@mrrlin/wiki": "0.0.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@iarna/toml": "^2.2.5",
|