@mrrlin-dev/mcp 0.4.48 → 0.4.50

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.
Files changed (2) hide show
  1. package/dist/bin.cjs +70 -15
  2. package/package.json +4 -4
package/dist/bin.cjs CHANGED
@@ -37107,6 +37107,10 @@ var agentCapabilitiesSchema = external_exports.object({
37107
37107
  listsModels: external_exports.boolean(),
37108
37108
  readsRateLimits: external_exports.boolean(),
37109
37109
  models: external_exports.array(external_exports.string()),
37110
+ // Picker entries for a provider that has no model-listing RPC (`listsModels: false`): the alias
37111
+ // the CLI accepts as `id`, a human label carrying the version the alias resolves to, and that
37112
+ // resolved model id as the description. Empty for a provider that lists models live.
37113
+ modelCatalog: external_exports.array(external_exports.object({ id: external_exports.string(), displayName: external_exports.string(), description: external_exports.string() })),
37110
37114
  sandboxModes: external_exports.array(external_exports.enum(["read-only", "workspace-write", "danger-full-access"])),
37111
37115
  poolProviderLabels: external_exports.array(external_exports.string())
37112
37116
  });
@@ -39689,6 +39693,7 @@ var CodexProviderAdapter = class {
39689
39693
  listsModels: true,
39690
39694
  readsRateLimits: true,
39691
39695
  models: [],
39696
+ modelCatalog: [],
39692
39697
  sandboxModes: ["read-only", "workspace-write", "danger-full-access"],
39693
39698
  poolProviderLabels: ["openai"]
39694
39699
  };
@@ -40045,7 +40050,27 @@ function normalizeToolResultContent(content) {
40045
40050
  }
40046
40051
 
40047
40052
  // ../../packages/agent-client/dist/providers/claude/models.js
40048
- var CLAUDE_MODELS = ["opus", "sonnet", "haiku"];
40053
+ var CLAUDE_MODEL_CATALOG = [
40054
+ { id: "fable", resolvesTo: "claude-fable-5-1" },
40055
+ { id: "opus", resolvesTo: "claude-opus-5" },
40056
+ { id: "sonnet", resolvesTo: "claude-sonnet-5" },
40057
+ { id: "haiku", resolvesTo: "claude-haiku-4-5-20251001" }
40058
+ ];
40059
+ var CLAUDE_MODELS = CLAUDE_MODEL_CATALOG.map((entry) => entry.id);
40060
+ function claudeModelLabel(resolvedId) {
40061
+ const parts = resolvedId.replace(/^claude-/, "").split("-").filter(Boolean);
40062
+ const family = parts[0] ?? resolvedId;
40063
+ const version2 = parts.slice(1).filter((p) => /^\d+$/.test(p) && p.length < 8);
40064
+ const name = family.charAt(0).toUpperCase() + family.slice(1);
40065
+ return version2.length > 0 ? `${name} ${version2.join(".")}` : name;
40066
+ }
40067
+ function claudeModelCatalog() {
40068
+ return CLAUDE_MODEL_CATALOG.map((entry) => ({
40069
+ id: entry.id,
40070
+ displayName: claudeModelLabel(entry.resolvesTo),
40071
+ description: entry.resolvesTo
40072
+ }));
40073
+ }
40049
40074
 
40050
40075
  // ../../packages/agent-client/dist/providers/claude/adapter.js
40051
40076
  var ClaudeProviderAdapter = class {
@@ -40055,6 +40080,7 @@ var ClaudeProviderAdapter = class {
40055
40080
  listsModels: false,
40056
40081
  readsRateLimits: false,
40057
40082
  models: [...CLAUDE_MODELS],
40083
+ modelCatalog: claudeModelCatalog(),
40058
40084
  // The neutral 3-value vocabulary every startThread/startTurn caller speaks; permissionModeFor
40059
40085
  // below is what actually translates a (sandbox, approvalPolicy) pair into this provider's
40060
40086
  // real --permission-mode. Advertised here so a picker never offers a mode this adapter can't
@@ -42343,7 +42369,7 @@ Do NOT derail the current task - if the operator has an in-flight question, answ
42343
42369
  }
42344
42370
 
42345
42371
  // src/_generated/version.ts
42346
- var PKG_VERSION = "0.4.48";
42372
+ var PKG_VERSION = "0.4.50";
42347
42373
 
42348
42374
  // src/api-base-url-migrate.ts
42349
42375
  var import_node_fs4 = __toESM(require("node:fs"), 1);
@@ -55087,8 +55113,8 @@ var DEFAULT_DIRECTOR_BRIDGE_ALLOWED_ORIGINS = [
55087
55113
  // bridge from the owned domain, which is stable across future Vercel project/team moves.
55088
55114
  // See docs/reference/deployments.md.
55089
55115
  "https://staging.mrrlin.com",
55090
- // Production web (unchanged).
55091
- "https://mrrlin-web.vercel.app"
55116
+ // Production web.
55117
+ "https://app.mrrlin.com"
55092
55118
  ];
55093
55119
  var COMPACT_REQUEST_HISTORY_MAX_ITEMS = 500;
55094
55120
  function isValidChatHistoryMessage(value) {
@@ -56478,7 +56504,8 @@ function createBridgeMessageHandler(deps) {
56478
56504
  let models = null;
56479
56505
  let rateLimits = null;
56480
56506
  let bootstrapError;
56481
- const fallbackModels = readCodexFallbackModels();
56507
+ let fallbackModels = [];
56508
+ let bootstrapProviderId;
56482
56509
  try {
56483
56510
  if (deps.refreshSelectedProvider) {
56484
56511
  await withTimeout2(
@@ -56488,10 +56515,27 @@ function createBridgeMessageHandler(deps) {
56488
56515
  ).catch(() => {
56489
56516
  });
56490
56517
  }
56491
- const bootstrapProviderId = resolveProvider(process.env, getSelectedProvider()).id;
56492
- const codexClient2 = await deps.acquireCodex(bootstrapProviderId);
56518
+ const bootstrapProvider = resolveProvider(process.env, getSelectedProvider());
56519
+ bootstrapProviderId = bootstrapProvider.id;
56520
+ const bootstrapCapabilities = bootstrapProvider.capabilities();
56521
+ fallbackModels = bootstrapCapabilities.listsModels ? readCodexFallbackModels() : [];
56522
+ if (!bootstrapCapabilities.listsModels) {
56523
+ const staticModels = /* @__PURE__ */ new Map();
56524
+ for (const entry of bootstrapCapabilities.modelCatalog) {
56525
+ addBridgeModel(staticModels, mapBridgeModel({ id: entry.id, model: entry.id, displayName: entry.displayName, description: entry.description }));
56526
+ }
56527
+ for (const alias of bootstrapCapabilities.models) {
56528
+ addBridgeModel(
56529
+ staticModels,
56530
+ mapBridgeModel({ id: alias, model: alias, displayName: alias.charAt(0).toUpperCase() + alias.slice(1) })
56531
+ );
56532
+ }
56533
+ models = staticModels.size > 0 ? [...staticModels.values()] : null;
56534
+ }
56535
+ const needsHandle = bootstrapCapabilities.listsModels || bootstrapCapabilities.readsRateLimits;
56536
+ const codexClient2 = needsHandle ? await deps.acquireCodex(bootstrapProviderId) : null;
56493
56537
  try {
56494
- try {
56538
+ if (codexClient2 && bootstrapCapabilities.listsModels) try {
56495
56539
  const raw = await codexClient2.listModels();
56496
56540
  const mergedModels = /* @__PURE__ */ new Map();
56497
56541
  for (const m of raw) {
@@ -56517,19 +56561,30 @@ function createBridgeMessageHandler(deps) {
56517
56561
  bootstrapError = error51 instanceof Error ? error51.message : String(error51);
56518
56562
  models = fallbackModels.length > 0 ? fallbackModels : null;
56519
56563
  }
56520
- try {
56521
- rateLimits = await codexClient2.readRateLimits();
56522
- } catch (error51) {
56523
- bootstrapError ??= error51 instanceof Error ? error51.message : String(error51);
56564
+ if (codexClient2 && bootstrapCapabilities.readsRateLimits) {
56565
+ try {
56566
+ rateLimits = await codexClient2.readRateLimits();
56567
+ } catch (error51) {
56568
+ bootstrapError ??= error51 instanceof Error ? error51.message : String(error51);
56569
+ }
56524
56570
  }
56525
56571
  } finally {
56526
- deps.releaseCodex(bootstrapProviderId);
56572
+ if (codexClient2) deps.releaseCodex(bootstrapProviderId);
56527
56573
  }
56528
56574
  } catch (error51) {
56529
56575
  bootstrapError = error51 instanceof Error ? error51.message : String(error51);
56530
- models = fallbackModels.length > 0 ? fallbackModels : null;
56576
+ models ??= fallbackModels.length > 0 ? fallbackModels : null;
56531
56577
  }
56532
- sendForSpan({ type: "bootstrap", models, rateLimits, ...deps.bridgeInstanceId ? { bridgeInstanceId: deps.bridgeInstanceId } : {}, ...bootstrapError ? { error: bootstrapError } : {} });
56578
+ sendForSpan({
56579
+ type: "bootstrap",
56580
+ models,
56581
+ rateLimits,
56582
+ // Which seat this catalog and snapshot describe, so the web keys its model cache by
56583
+ // provider instead of serving one provider's catalog to another.
56584
+ ...bootstrapProviderId ? { provider: bootstrapProviderId } : {},
56585
+ ...deps.bridgeInstanceId ? { bridgeInstanceId: deps.bridgeInstanceId } : {},
56586
+ ...bootstrapError ? { error: bootstrapError } : {}
56587
+ });
56533
56588
  return;
56534
56589
  }
56535
56590
  if (msg.type === "refresh-codex") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrrlin-dev/mcp",
3
- "version": "0.4.48",
3
+ "version": "0.4.50",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mrrlin-mcp": "dist/bin.cjs"
@@ -22,11 +22,11 @@
22
22
  "esbuild": "^0.24.0",
23
23
  "tsx": "^4.22.3",
24
24
  "@mrrlin/agent-client": "0.0.0",
25
+ "@mrrlin/client": "0.0.0",
25
26
  "@mrrlin/director-e2e": "0.0.0",
27
+ "@mrrlin/schemas": "0.0.0",
26
28
  "@mrrlin/tsconfig": "0.0.0",
27
- "@mrrlin/client": "0.0.0",
28
- "@mrrlin/wiki": "0.0.0",
29
- "@mrrlin/schemas": "0.0.0"
29
+ "@mrrlin/wiki": "0.0.0"
30
30
  },
31
31
  "dependencies": {
32
32
  "@iarna/toml": "^2.2.5",