@rynfar/meridian 1.42.0 → 1.43.0

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.
@@ -20,6 +20,18 @@ import {
20
20
  profileBarJs,
21
21
  themeCss
22
22
  } from "./cli-4rqtm83g.js";
23
+ import {
24
+ getAuthCacheInfo,
25
+ getClaudeAuthStatusAsync,
26
+ getResolvedClaudeExecutableInfo,
27
+ hasExtendedContext,
28
+ isClosedControllerError,
29
+ mapModelToClaudeModel,
30
+ recordExtendedContextUnavailable,
31
+ resolveClaudeExecutableAsync,
32
+ resolveSdkModelDefaults,
33
+ stripExtendedContext
34
+ } from "./cli-yeazzt32.js";
23
35
  import {
24
36
  checkPluginConfigured
25
37
  } from "./cli-rtab0qa6.js";
@@ -1181,14 +1193,14 @@ __export(exports_sdkFeatures, {
1181
1193
  getFeaturesForAdapter: () => getFeaturesForAdapter,
1182
1194
  getAllFeatureConfigs: () => getAllFeatureConfigs
1183
1195
  });
1184
- import { existsSync as existsSync6, mkdirSync as mkdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2, renameSync as renameSync2 } from "node:fs";
1185
- import { join as join5 } from "node:path";
1196
+ import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2, renameSync as renameSync2 } from "node:fs";
1197
+ import { join as join4 } from "node:path";
1186
1198
  import { homedir as homedir3 } from "node:os";
1187
1199
  function getConfigPath() {
1188
- const dir = join5(homedir3(), ".config", "meridian");
1189
- if (!existsSync6(dir))
1200
+ const dir = join4(homedir3(), ".config", "meridian");
1201
+ if (!existsSync5(dir))
1190
1202
  mkdirSync2(dir, { recursive: true });
1191
- return join5(dir, "sdk-features.json");
1203
+ return join4(dir, "sdk-features.json");
1192
1204
  }
1193
1205
  function readConfig() {
1194
1206
  const now = Date.now();
@@ -1196,7 +1208,7 @@ function readConfig() {
1196
1208
  return cachedConfig;
1197
1209
  const path3 = getConfigPath();
1198
1210
  try {
1199
- if (existsSync6(path3)) {
1211
+ if (existsSync5(path3)) {
1200
1212
  cachedConfig = JSON.parse(readFileSync4(path3, "utf-8"));
1201
1213
  } else {
1202
1214
  cachedConfig = {};
@@ -3711,7 +3723,7 @@ var serve = (options, listeningListener) => {
3711
3723
 
3712
3724
  // src/proxy/server.ts
3713
3725
  import { homedir as homedir4 } from "node:os";
3714
- import { join as join6 } from "node:path";
3726
+ import { join as join5 } from "node:path";
3715
3727
  import { query } from "@anthropic-ai/claude-agent-sdk";
3716
3728
 
3717
3729
  // src/proxy/rateLimitStore.ts
@@ -3967,8 +3979,8 @@ function createRequestContext(params) {
3967
3979
  };
3968
3980
  }
3969
3981
  // src/proxy/server.ts
3970
- import { exec as execCallback2 } from "child_process";
3971
- import { promisify as promisify3 } from "util";
3982
+ import { exec as execCallback } from "child_process";
3983
+ import { promisify as promisify2 } from "util";
3972
3984
  import { randomUUID } from "crypto";
3973
3985
 
3974
3986
  // src/proxy/passthroughTools.ts
@@ -9181,7 +9193,7 @@ function isRateLimitError(errMsg) {
9181
9193
  }
9182
9194
  function isExtraUsageRequiredError(errMsg) {
9183
9195
  const lower = errMsg.toLowerCase();
9184
- return lower.includes("extra usage") && lower.includes("1m");
9196
+ return lower.includes("extra usage") && lower.includes("1m") || lower.includes("out of extra usage");
9185
9197
  }
9186
9198
  var STDERR_TAIL_MAX = 500;
9187
9199
  var RAW_TAIL_MAX = 300;
@@ -9260,270 +9272,6 @@ function formatSdkTermination(t, ctx) {
9260
9272
  return `sdk_termination ${parts.join(" ")}`;
9261
9273
  }
9262
9274
 
9263
- // src/proxy/models.ts
9264
- import { exec as execCallback } from "child_process";
9265
- import { existsSync as existsSync3, statSync } from "fs";
9266
- import { fileURLToPath as fileURLToPath2 } from "url";
9267
- import { join as join2, dirname as dirname2 } from "path";
9268
- import { promisify } from "util";
9269
- var exec = promisify(execCallback);
9270
- var STUB_SIZE_THRESHOLD = 4096;
9271
- var CANONICAL_OPUS_MODEL = "claude-opus-4-7";
9272
- var CANONICAL_SONNET_MODEL = "claude-sonnet-4-6";
9273
- var CANONICAL_HAIKU_MODEL = "claude-haiku-4-5";
9274
- function resolveSdkModelDefaults(env2 = process.env) {
9275
- return {
9276
- ANTHROPIC_DEFAULT_OPUS_MODEL: env2.MERIDIAN_DEFAULT_OPUS_MODEL ?? CANONICAL_OPUS_MODEL,
9277
- ANTHROPIC_DEFAULT_SONNET_MODEL: env2.MERIDIAN_DEFAULT_SONNET_MODEL ?? CANONICAL_SONNET_MODEL,
9278
- ANTHROPIC_DEFAULT_HAIKU_MODEL: env2.MERIDIAN_DEFAULT_HAIKU_MODEL ?? CANONICAL_HAIKU_MODEL
9279
- };
9280
- }
9281
- var AUTH_STATUS_CACHE_TTL_MS = 60000;
9282
- var AUTH_STATUS_FAILURE_TTL_MS = 5000;
9283
- var cachedAuthStatus = null;
9284
- var lastKnownGoodAuthStatus = null;
9285
- var cachedAuthStatusAt = 0;
9286
- var cachedAuthStatusIsFailure = false;
9287
- var cachedAuthStatusPromise = null;
9288
- function supports1mContext(model) {
9289
- if (model.includes("4-5") || model.includes("4.5"))
9290
- return false;
9291
- return true;
9292
- }
9293
- function mapModelToClaudeModel(model, subscriptionType, agentMode) {
9294
- if (model.includes("haiku"))
9295
- return "haiku";
9296
- const use1m = supports1mContext(model);
9297
- const isSubagent = agentMode === "subagent";
9298
- if (model.includes("opus")) {
9299
- if (use1m && !isSubagent && !isExtendedContextKnownUnavailable())
9300
- return "opus[1m]";
9301
- return "opus";
9302
- }
9303
- const sonnetOverride = process.env.MERIDIAN_SONNET_MODEL ?? process.env.CLAUDE_PROXY_SONNET_MODEL;
9304
- if (sonnetOverride === "sonnet[1m]") {
9305
- if (!use1m || isSubagent || isExtendedContextKnownUnavailable())
9306
- return "sonnet";
9307
- return "sonnet[1m]";
9308
- }
9309
- return "sonnet";
9310
- }
9311
- var EXTRA_USAGE_RETRY_MS = 60 * 60 * 1000;
9312
- var extraUsageUnavailableAt = 0;
9313
- function recordExtendedContextUnavailable() {
9314
- extraUsageUnavailableAt = Date.now();
9315
- }
9316
- function isExtendedContextKnownUnavailable() {
9317
- return extraUsageUnavailableAt > 0 && Date.now() - extraUsageUnavailableAt < EXTRA_USAGE_RETRY_MS;
9318
- }
9319
- function stripExtendedContext(model) {
9320
- if (model === "opus[1m]")
9321
- return "opus";
9322
- if (model === "sonnet[1m]")
9323
- return "sonnet";
9324
- return model;
9325
- }
9326
- function hasExtendedContext(model) {
9327
- return model.endsWith("[1m]");
9328
- }
9329
- var profileAuthCaches = new Map;
9330
- function getAuthCacheInfo(profileId) {
9331
- if (!profileId) {
9332
- return { lastCheckedAt: cachedAuthStatusAt, lastSuccessAt: cachedAuthStatusIsFailure ? 0 : cachedAuthStatusAt, isFailure: cachedAuthStatusIsFailure };
9333
- }
9334
- const cache = profileAuthCaches.get(profileId);
9335
- if (!cache)
9336
- return { lastCheckedAt: 0, lastSuccessAt: 0, isFailure: false };
9337
- return { lastCheckedAt: cache.at, lastSuccessAt: cache.lastSuccessAt, isFailure: cache.isFailure };
9338
- }
9339
- function getAuthCache(key) {
9340
- let cache = profileAuthCaches.get(key);
9341
- if (!cache) {
9342
- cache = { status: null, lastKnownGood: null, at: 0, isFailure: false, promise: null, lastSuccessAt: 0 };
9343
- profileAuthCaches.set(key, cache);
9344
- }
9345
- return cache;
9346
- }
9347
- async function getClaudeAuthStatusAsync(profileId, envOverrides) {
9348
- const isDefault = !profileId;
9349
- const cache = isDefault ? null : getAuthCache(profileId);
9350
- const c_status = cache ? cache.status : cachedAuthStatus;
9351
- const c_lastKnownGood = cache ? cache.lastKnownGood : lastKnownGoodAuthStatus;
9352
- const c_at = cache ? cache.at : cachedAuthStatusAt;
9353
- const c_isFailure = cache ? cache.isFailure : cachedAuthStatusIsFailure;
9354
- let c_promise = cache ? cache.promise : cachedAuthStatusPromise;
9355
- const ttl = c_isFailure ? AUTH_STATUS_FAILURE_TTL_MS : AUTH_STATUS_CACHE_TTL_MS;
9356
- if (c_at > 0 && Date.now() - c_at < ttl) {
9357
- return c_status ?? c_lastKnownGood;
9358
- }
9359
- if (c_promise)
9360
- return c_promise;
9361
- c_promise = (async () => {
9362
- try {
9363
- const { stdout } = await exec("claude auth status", {
9364
- timeout: 5000,
9365
- ...envOverrides ? { env: { ...process.env, ...envOverrides } } : {}
9366
- });
9367
- const parsed = JSON.parse(stdout);
9368
- if (cache) {
9369
- cache.status = parsed;
9370
- cache.lastKnownGood = parsed;
9371
- cache.at = Date.now();
9372
- cache.isFailure = false;
9373
- cache.lastSuccessAt = Date.now();
9374
- } else {
9375
- cachedAuthStatus = parsed;
9376
- lastKnownGoodAuthStatus = parsed;
9377
- cachedAuthStatusAt = Date.now();
9378
- cachedAuthStatusIsFailure = false;
9379
- }
9380
- return parsed;
9381
- } catch {
9382
- if (cache) {
9383
- cache.isFailure = true;
9384
- cache.at = Date.now();
9385
- cache.status = null;
9386
- return cache.lastKnownGood;
9387
- } else {
9388
- cachedAuthStatusIsFailure = true;
9389
- cachedAuthStatusAt = Date.now();
9390
- cachedAuthStatus = null;
9391
- return lastKnownGoodAuthStatus;
9392
- }
9393
- }
9394
- })();
9395
- if (cache)
9396
- cache.promise = c_promise;
9397
- else
9398
- cachedAuthStatusPromise = c_promise;
9399
- try {
9400
- return await c_promise;
9401
- } finally {
9402
- if (cache)
9403
- cache.promise = null;
9404
- else
9405
- cachedAuthStatusPromise = null;
9406
- }
9407
- }
9408
- var cachedClaudeInfo = null;
9409
- var cachedClaudePathPromise = null;
9410
- var DEFAULT_DEPS = {
9411
- existsSync: existsSync3,
9412
- statSync: (p) => statSync(p),
9413
- exec,
9414
- resolvePackage: (specifier) => fileURLToPath2(import.meta.resolve(specifier)),
9415
- envGet: (name) => process.env[name],
9416
- platform: process.platform,
9417
- arch: process.arch,
9418
- isBun: typeof process.versions.bun !== "undefined"
9419
- };
9420
- function tryEnvOverride(deps) {
9421
- const explicit = deps.envGet("MERIDIAN_CLAUDE_PATH");
9422
- if (!explicit)
9423
- return null;
9424
- return deps.existsSync(explicit) ? explicit : null;
9425
- }
9426
- function tryBundledBinary(deps) {
9427
- try {
9428
- const pkgPath = deps.resolvePackage("@anthropic-ai/claude-code/package.json");
9429
- const bundled = join2(dirname2(pkgPath), "bin", "claude.exe");
9430
- if (!deps.existsSync(bundled))
9431
- return null;
9432
- const size = deps.statSync(bundled).size;
9433
- if (size <= STUB_SIZE_THRESHOLD)
9434
- return null;
9435
- return bundled;
9436
- } catch {
9437
- return null;
9438
- }
9439
- }
9440
- function tryPlatformPackage(deps) {
9441
- const binName = deps.platform === "win32" ? "claude.exe" : "claude";
9442
- const candidates = [`@anthropic-ai/claude-code-${deps.platform}-${deps.arch}`];
9443
- if (deps.platform === "linux") {
9444
- candidates.push(`@anthropic-ai/claude-code-${deps.platform}-${deps.arch}-musl`);
9445
- }
9446
- for (const pkg of candidates) {
9447
- try {
9448
- const pkgJson = deps.resolvePackage(`${pkg}/package.json`);
9449
- const candidate = join2(dirname2(pkgJson), binName);
9450
- if (deps.existsSync(candidate))
9451
- return candidate;
9452
- } catch {}
9453
- }
9454
- return null;
9455
- }
9456
- async function tryPathLookup(deps) {
9457
- const cmd = deps.platform === "win32" ? "where claude" : "which claude";
9458
- try {
9459
- const { stdout } = await deps.exec(cmd);
9460
- const candidates = stdout.split(/\r?\n/).map((s) => s.trim()).filter(Boolean);
9461
- for (const candidate of candidates) {
9462
- if (deps.platform === "win32" && candidate.startsWith("/"))
9463
- continue;
9464
- if (deps.existsSync(candidate))
9465
- return candidate;
9466
- }
9467
- } catch {}
9468
- return null;
9469
- }
9470
- function tryLegacySdkCliJs(deps) {
9471
- if (!deps.isBun)
9472
- return null;
9473
- try {
9474
- const sdkPath = deps.resolvePackage("@anthropic-ai/claude-agent-sdk");
9475
- const cliJs = join2(dirname2(sdkPath), "cli.js");
9476
- return deps.existsSync(cliJs) ? cliJs : null;
9477
- } catch {
9478
- return null;
9479
- }
9480
- }
9481
- async function resolveClaudeExecutableWithSource(deps = DEFAULT_DEPS) {
9482
- const env2 = tryEnvOverride(deps);
9483
- if (env2)
9484
- return { path: env2, source: "env" };
9485
- const bundled = tryBundledBinary(deps);
9486
- if (bundled)
9487
- return { path: bundled, source: "bundled" };
9488
- const platformPkg = tryPlatformPackage(deps);
9489
- if (platformPkg)
9490
- return { path: platformPkg, source: "platform-package" };
9491
- const pathLookup = await tryPathLookup(deps);
9492
- if (pathLookup)
9493
- return { path: pathLookup, source: "path-lookup" };
9494
- const legacy = tryLegacySdkCliJs(deps);
9495
- if (legacy)
9496
- return { path: legacy, source: "legacy-cli-js" };
9497
- return null;
9498
- }
9499
- function getResolvedClaudeExecutableInfo() {
9500
- return cachedClaudeInfo;
9501
- }
9502
- async function resolveClaudeExecutableAsync() {
9503
- if (cachedClaudeInfo)
9504
- return cachedClaudeInfo.path;
9505
- if (cachedClaudePathPromise)
9506
- return cachedClaudePathPromise;
9507
- cachedClaudePathPromise = (async () => {
9508
- const resolved = await resolveClaudeExecutableWithSource();
9509
- if (resolved) {
9510
- cachedClaudeInfo = resolved;
9511
- return resolved.path;
9512
- }
9513
- throw new Error("Could not find Claude Code executable. Install via: npm install -g @anthropic-ai/claude-code, " + "or set MERIDIAN_CLAUDE_PATH=/path/to/claude to point at an existing binary.");
9514
- })();
9515
- try {
9516
- return await cachedClaudePathPromise;
9517
- } finally {
9518
- cachedClaudePathPromise = null;
9519
- }
9520
- }
9521
- function isClosedControllerError(error) {
9522
- if (!(error instanceof Error))
9523
- return false;
9524
- return error.message.includes("Controller is already closed");
9525
- }
9526
-
9527
9275
  // src/proxy/openai.ts
9528
9276
  function extractOpenAiContent(content) {
9529
9277
  if (typeof content === "string")
@@ -9905,6 +9653,14 @@ function buildModelList(isMaxSubscription, now = Math.floor(Date.now() / 1000))
9905
9653
  display_name: "Claude Opus 4.7",
9906
9654
  context_window: isMaxSubscription ? 1e6 : 200000
9907
9655
  },
9656
+ {
9657
+ id: "claude-opus-4-8",
9658
+ object: "model",
9659
+ created: now,
9660
+ owned_by: "anthropic",
9661
+ display_name: "Claude Opus 4.8",
9662
+ context_window: isMaxSubscription ? 1e6 : 200000
9663
+ },
9908
9664
  {
9909
9665
  id: "claude-haiku-4-5",
9910
9666
  object: "model",
@@ -11041,8 +10797,8 @@ function detectAdapter(c) {
11041
10797
  import { createSdkMcpServer as createSdkMcpServer2, tool } from "@anthropic-ai/claude-agent-sdk";
11042
10798
  import * as fs from "node:fs/promises";
11043
10799
  import * as path2 from "node:path";
11044
- import { exec as exec2 } from "node:child_process";
11045
- import { promisify as promisify2 } from "node:util";
10800
+ import { exec } from "node:child_process";
10801
+ import { promisify } from "node:util";
11046
10802
 
11047
10803
  // node_modules/@isaacs/balanced-match/dist/esm/index.js
11048
10804
  var balanced = (a, b, str) => {
@@ -12479,7 +12235,7 @@ minimatch.escape = escape;
12479
12235
  minimatch.unescape = unescape;
12480
12236
 
12481
12237
  // node_modules/glob/dist/esm/glob.js
12482
- import { fileURLToPath as fileURLToPath4 } from "node:url";
12238
+ import { fileURLToPath as fileURLToPath3 } from "node:url";
12483
12239
 
12484
12240
  // node_modules/lru-cache/dist/esm/index.js
12485
12241
  var defaultPerf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date;
@@ -13642,7 +13398,7 @@ class LRUCache {
13642
13398
 
13643
13399
  // node_modules/path-scurry/dist/esm/index.js
13644
13400
  import { posix, win32 } from "node:path";
13645
- import { fileURLToPath as fileURLToPath3 } from "node:url";
13401
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
13646
13402
  import { lstatSync, readdir as readdirCB, readdirSync, readlinkSync, realpathSync as rps } from "fs";
13647
13403
  import * as actualFS from "node:fs";
13648
13404
  import { lstat, readdir, readlink, realpath } from "node:fs/promises";
@@ -15097,7 +14853,7 @@ class PathScurryBase {
15097
14853
  constructor(cwd = process.cwd(), pathImpl, sep2, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS } = {}) {
15098
14854
  this.#fs = fsFromOption(fs);
15099
14855
  if (cwd instanceof URL || cwd.startsWith("file://")) {
15100
- cwd = fileURLToPath3(cwd);
14856
+ cwd = fileURLToPath2(cwd);
15101
14857
  }
15102
14858
  const cwdPath = pathImpl.resolve(cwd);
15103
14859
  this.roots = Object.create(null);
@@ -16401,7 +16157,7 @@ class Glob {
16401
16157
  if (!opts.cwd) {
16402
16158
  this.cwd = "";
16403
16159
  } else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) {
16404
- opts.cwd = fileURLToPath4(opts.cwd);
16160
+ opts.cwd = fileURLToPath3(opts.cwd);
16405
16161
  }
16406
16162
  this.cwd = opts.cwd || "";
16407
16163
  this.root = opts.root;
@@ -16592,7 +16348,7 @@ var glob = Object.assign(glob_, {
16592
16348
  glob.glob = glob;
16593
16349
 
16594
16350
  // src/mcpTools.ts
16595
- var execAsync = promisify2(exec2);
16351
+ var execAsync = promisify(exec);
16596
16352
  var getCwd = () => process.env.MERIDIAN_WORKDIR ?? process.env.CLAUDE_PROXY_WORKDIR ?? process.cwd();
16597
16353
  function createOpencodeMcpServer() {
16598
16354
  return createSdkMcpServer2({
@@ -16767,6 +16523,8 @@ function resolveSystemPrompt(systemContext, passthrough, settingSources, codeSys
16767
16523
  }
16768
16524
  if (append)
16769
16525
  return { systemPrompt: append };
16526
+ if (codeSystemPrompt === false)
16527
+ return { systemPrompt: "" };
16770
16528
  return {};
16771
16529
  }
16772
16530
  function buildQueryOptions(ctx) {
@@ -16822,6 +16580,8 @@ function buildQueryOptions(ctx) {
16822
16580
  allowDangerouslySkipPermissions: true,
16823
16581
  ...resolveSystemPrompt(systemContext, passthrough, settingSources, codeSystemPrompt, clientSystemPrompt, cwdNote),
16824
16582
  ...passthrough ? {
16583
+ tools: [],
16584
+ settingSources: [],
16825
16585
  disallowedTools: [...allBlockedTools],
16826
16586
  ...passthroughMcp ? {
16827
16587
  allowedTools: [...passthroughMcp.toolNames],
@@ -16845,7 +16605,8 @@ function buildQueryOptions(ctx) {
16845
16605
  ...sharedMemory ? stripConfigDir(cleanEnv) : cleanEnv,
16846
16606
  ENABLE_TOOL_SEARCH: hasDeferredTools ? "true" : "false",
16847
16607
  ...passthrough ? { ENABLE_CLAUDEAI_MCP_SERVERS: "false" } : {},
16848
- ...process.getuid?.() === 0 ? { IS_SANDBOX: "1" } : {}
16608
+ ...process.getuid?.() === 0 ? { IS_SANDBOX: "1" } : {},
16609
+ ...ctx.envOverrides
16849
16610
  },
16850
16611
  ...Object.keys(sdkAgents).length > 0 ? { agents: sdkAgents } : {},
16851
16612
  ...resumeSessionId ? { resume: resumeSessionId } : {},
@@ -16878,8 +16639,8 @@ function getAdapterTransforms(adapterName) {
16878
16639
  }
16879
16640
 
16880
16641
  // src/proxy/plugins/loader.ts
16881
- import { readdirSync as readdirSync2, readFileSync as readFileSync2, existsSync as existsSync4 } from "fs";
16882
- import { join as join3, isAbsolute as isAbsolute2, extname } from "path";
16642
+ import { readdirSync as readdirSync2, readFileSync as readFileSync2, existsSync as existsSync3 } from "fs";
16643
+ import { join as join2, isAbsolute as isAbsolute2, extname } from "path";
16883
16644
  import { pathToFileURL } from "url";
16884
16645
 
16885
16646
  // src/proxy/plugins/validation.ts
@@ -16920,7 +16681,7 @@ function validateTransform(exported) {
16920
16681
  // src/proxy/plugins/loader.ts
16921
16682
  var loadCounter = 0;
16922
16683
  function parsePluginConfig(configPath) {
16923
- if (!existsSync4(configPath))
16684
+ if (!existsSync3(configPath))
16924
16685
  return [];
16925
16686
  try {
16926
16687
  const raw2 = readFileSync2(configPath, "utf-8");
@@ -16933,7 +16694,7 @@ function parsePluginConfig(configPath) {
16933
16694
  async function loadPlugins(pluginDir, configPath) {
16934
16695
  resetAllPluginStats();
16935
16696
  const config = configPath ? parsePluginConfig(configPath) : [];
16936
- const pluginDirExists = existsSync4(pluginDir);
16697
+ const pluginDirExists = existsSync3(pluginDir);
16937
16698
  let filenames = [];
16938
16699
  if (pluginDirExists) {
16939
16700
  try {
@@ -16964,7 +16725,7 @@ async function loadPlugins(pluginDir, configPath) {
16964
16725
  const loaded = [];
16965
16726
  const seenNames = new Set;
16966
16727
  for (const { filename, entry } of ordered) {
16967
- const filePath = isAbsolute2(filename) ? filename : join3(pluginDir, filename);
16728
+ const filePath = isAbsolute2(filename) ? filename : join2(pluginDir, filename);
16968
16729
  if (entry && !entry.enabled) {
16969
16730
  loaded.push({
16970
16731
  name: filename,
@@ -17336,17 +17097,17 @@ function verifyLineage(cached, messages, cacheKey2, cache) {
17336
17097
  // src/proxy/sessionStore.ts
17337
17098
  import {
17338
17099
  closeSync,
17339
- existsSync as existsSync5,
17100
+ existsSync as existsSync4,
17340
17101
  mkdirSync,
17341
17102
  openSync,
17342
17103
  readFileSync as readFileSync3,
17343
17104
  renameSync,
17344
- statSync as statSync2,
17105
+ statSync,
17345
17106
  unlinkSync,
17346
17107
  writeFileSync
17347
17108
  } from "node:fs";
17348
17109
  import { homedir as homedir2 } from "node:os";
17349
- import { join as join4 } from "node:path";
17110
+ import { join as join3 } from "node:path";
17350
17111
  var DEFAULT_MAX_STORED_SESSIONS = 1e4;
17351
17112
  var STALE_LOCK_THRESHOLD_MS = 30000;
17352
17113
  function getMaxStoredSessions() {
@@ -17370,7 +17131,7 @@ function acquireLock(lockPath) {
17370
17131
  return false;
17371
17132
  }
17372
17133
  try {
17373
- const stat = statSync2(lockPath);
17134
+ const stat = statSync(lockPath);
17374
17135
  if (Date.now() - stat.mtimeMs > STALE_LOCK_THRESHOLD_MS) {
17375
17136
  unlinkSync(lockPath);
17376
17137
  const fd = openSync(lockPath, "wx");
@@ -17394,17 +17155,17 @@ var sessionDirOverride = null;
17394
17155
  var skipLocking = false;
17395
17156
  function getStorePath() {
17396
17157
  const dir = sessionDirOverride || process.env.MERIDIAN_SESSION_DIR || process.env.CLAUDE_PROXY_SESSION_DIR || getDefaultCacheDir();
17397
- if (!existsSync5(dir)) {
17158
+ if (!existsSync4(dir)) {
17398
17159
  mkdirSync(dir, { recursive: true });
17399
17160
  }
17400
- return join4(dir, "sessions.json");
17161
+ return join3(dir, "sessions.json");
17401
17162
  }
17402
17163
  function getDefaultCacheDir() {
17403
- const newDir = join4(homedir2(), ".cache", "meridian");
17404
- const oldDir = join4(homedir2(), ".cache", "opencode-claude-max-proxy");
17405
- if (existsSync5(newDir))
17164
+ const newDir = join3(homedir2(), ".cache", "meridian");
17165
+ const oldDir = join3(homedir2(), ".cache", "opencode-claude-max-proxy");
17166
+ if (existsSync4(newDir))
17406
17167
  return newDir;
17407
- if (existsSync5(oldDir)) {
17168
+ if (existsSync4(oldDir)) {
17408
17169
  try {
17409
17170
  const { symlinkSync } = __require("fs");
17410
17171
  symlinkSync(oldDir, newDir);
@@ -17417,7 +17178,7 @@ function getDefaultCacheDir() {
17417
17178
  }
17418
17179
  function readStore() {
17419
17180
  const path3 = getStorePath();
17420
- if (!existsSync5(path3))
17181
+ if (!existsSync4(path3))
17421
17182
  return {};
17422
17183
  try {
17423
17184
  const data = readFileSync3(path3, "utf-8");
@@ -17741,7 +17502,7 @@ function storeSession(sessionId, messages, claudeSessionId, workingDirectory, sd
17741
17502
  }
17742
17503
 
17743
17504
  // src/proxy/server.ts
17744
- var exec3 = promisify3(execCallback2);
17505
+ var exec2 = promisify2(execCallback);
17745
17506
  var claudeExecutable = "";
17746
17507
  var MULTIMODAL_TYPES = new Set(["image", "document", "file"]);
17747
17508
  function hasMultimodalContent(content) {
@@ -17919,8 +17680,8 @@ function createProxyServer(config = {}) {
17919
17680
  const sessionDiscoveredTools = new Map;
17920
17681
  const sessionToolCache = new Map;
17921
17682
  const sessionMcpCache = new LRUMap(getMaxSessionsLimit());
17922
- const pluginDir = finalConfig.pluginDir ?? join6(homedir4(), ".config", "meridian", "plugins");
17923
- const pluginConfigPath = finalConfig.pluginConfigPath ?? join6(homedir4(), ".config", "meridian", "plugins.json");
17683
+ const pluginDir = finalConfig.pluginDir ?? join5(homedir4(), ".config", "meridian", "plugins");
17684
+ const pluginConfigPath = finalConfig.pluginConfigPath ?? join5(homedir4(), ".config", "meridian", "plugins.json");
17924
17685
  let loadedPlugins = [];
17925
17686
  let pluginTransforms = [];
17926
17687
  const app = new Hono2;
@@ -17995,7 +17756,9 @@ function createProxyServer(config = {}) {
17995
17756
  const authStatus = await getClaudeAuthStatusAsync(profile.id !== "default" ? profile.id : undefined, Object.keys(profile.env).length > 0 ? profile.env : undefined);
17996
17757
  const agentMode = c.req.header("x-opencode-agent-mode") ?? null;
17997
17758
  const requestSource = c.req.header("x-meridian-source")?.slice(0, 64) || undefined;
17998
- let model = mapModelToClaudeModel(body.model || "sonnet", authStatus?.subscriptionType, agentMode);
17759
+ const requestedModel = typeof body.model === "string" ? body.model : "sonnet";
17760
+ let model = mapModelToClaudeModel(requestedModel, authStatus?.subscriptionType, agentMode);
17761
+ const envOverrides = requestedModel.startsWith("claude-opus-") ? { ANTHROPIC_DEFAULT_OPUS_MODEL: requestedModel } : undefined;
17999
17762
  const cwdResolution = resolveSdkWorkingDirectory({
18000
17763
  envOverride: process.env.MERIDIAN_WORKDIR ?? process.env.CLAUDE_PROXY_WORKDIR,
18001
17764
  adapterCwd: adapter.extractWorkingDirectory(body),
@@ -18289,6 +18052,7 @@ function createProxyServer(config = {}) {
18289
18052
  let rateLimitRetries = 0;
18290
18053
  await ensureFreshToken().catch(() => {});
18291
18054
  let tokenRefreshed = false;
18055
+ let didFreshBaseRetry = false;
18292
18056
  while (true) {
18293
18057
  let didYieldContent = false;
18294
18058
  try {
@@ -18304,6 +18068,7 @@ function createProxyServer(config = {}) {
18304
18068
  sdkAgents,
18305
18069
  passthroughMcp,
18306
18070
  cleanEnv: profileEnv,
18071
+ envOverrides,
18307
18072
  hasDeferredTools,
18308
18073
  resumeSessionId,
18309
18074
  isUndo,
@@ -18366,6 +18131,7 @@ function createProxyServer(config = {}) {
18366
18131
  sdkAgents,
18367
18132
  passthroughMcp,
18368
18133
  cleanEnv: profileEnv,
18134
+ envOverrides,
18369
18135
  hasDeferredTools,
18370
18136
  resumeSessionId: undefined,
18371
18137
  isUndo: false,
@@ -18407,6 +18173,59 @@ function createProxyServer(config = {}) {
18407
18173
  console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model} (skipping [1m] for 1h)`);
18408
18174
  continue;
18409
18175
  }
18176
+ if (isExtraUsageRequiredError(errMsg) && resumeSessionId && !didFreshBaseRetry) {
18177
+ didFreshBaseRetry = true;
18178
+ claudeLog("upstream.session_fallback", {
18179
+ mode: "non_stream",
18180
+ model,
18181
+ reason: "extra_usage_required_resume"
18182
+ });
18183
+ console.error(`[PROXY] ${requestMeta.requestId} extra usage persisted on resumed ${model}, retrying as fresh session`);
18184
+ evictSession(profileSessionId, profileScopedCwd, allMessages);
18185
+ sdkUuidMap.length = 0;
18186
+ for (let i = 0;i < allMessages.length; i++)
18187
+ sdkUuidMap.push(null);
18188
+ yield* query(buildQueryOptions({
18189
+ prompt: buildFreshPrompt(allMessages, sanitizeOpts),
18190
+ model,
18191
+ workingDirectory,
18192
+ clientWorkingDirectory,
18193
+ systemContext,
18194
+ claudeExecutable,
18195
+ passthrough,
18196
+ stream: false,
18197
+ sdkAgents,
18198
+ passthroughMcp,
18199
+ cleanEnv: profileEnv,
18200
+ envOverrides,
18201
+ hasDeferredTools,
18202
+ resumeSessionId: undefined,
18203
+ isUndo: false,
18204
+ undoRollbackUuid: undefined,
18205
+ sdkHooks,
18206
+ blockedTools: pipelineCtx.blockedTools,
18207
+ incompatibleTools: pipelineCtx.incompatibleTools,
18208
+ mcpServerName: adapter.getMcpServerName(),
18209
+ allowedMcpTools: pipelineCtx.allowedMcpTools,
18210
+ onStderr,
18211
+ effort,
18212
+ thinking,
18213
+ taskBudget,
18214
+ betas,
18215
+ settingSources,
18216
+ codeSystemPrompt: sdkFeatures.codeSystemPrompt,
18217
+ clientSystemPrompt: sdkFeatures.clientSystemPrompt === false ? false : undefined,
18218
+ memory: sdkFeatures.memory,
18219
+ dreaming: sdkFeatures.dreaming,
18220
+ sharedMemory: sdkFeatures.sharedMemory,
18221
+ maxBudgetUsd: sdkFeatures.maxBudgetUsd,
18222
+ fallbackModel: sdkFeatures.fallbackModel,
18223
+ sdkDebug: sdkFeatures.sdkDebug,
18224
+ additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
18225
+ advisorModel
18226
+ }));
18227
+ return;
18228
+ }
18410
18229
  if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
18411
18230
  tokenRefreshed = true;
18412
18231
  const refreshed = await refreshOAuthToken();
@@ -18691,6 +18510,7 @@ Subprocess stderr: ${stderrOutput}`;
18691
18510
  let rateLimitRetries = 0;
18692
18511
  await ensureFreshToken().catch(() => {});
18693
18512
  let tokenRefreshed = false;
18513
+ let didFreshBaseRetry = false;
18694
18514
  while (true) {
18695
18515
  let didYieldClientEvent = false;
18696
18516
  try {
@@ -18706,6 +18526,7 @@ Subprocess stderr: ${stderrOutput}`;
18706
18526
  sdkAgents,
18707
18527
  passthroughMcp,
18708
18528
  cleanEnv: profileEnv,
18529
+ envOverrides,
18709
18530
  hasDeferredTools,
18710
18531
  resumeSessionId,
18711
18532
  isUndo,
@@ -18768,6 +18589,7 @@ Subprocess stderr: ${stderrOutput}`;
18768
18589
  sdkAgents,
18769
18590
  passthroughMcp,
18770
18591
  cleanEnv: profileEnv,
18592
+ envOverrides,
18771
18593
  hasDeferredTools,
18772
18594
  resumeSessionId: undefined,
18773
18595
  isUndo: false,
@@ -18809,6 +18631,59 @@ Subprocess stderr: ${stderrOutput}`;
18809
18631
  console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model} (skipping [1m] for 1h)`);
18810
18632
  continue;
18811
18633
  }
18634
+ if (isExtraUsageRequiredError(errMsg) && resumeSessionId && !didFreshBaseRetry) {
18635
+ didFreshBaseRetry = true;
18636
+ claudeLog("upstream.session_fallback", {
18637
+ mode: "stream",
18638
+ model,
18639
+ reason: "extra_usage_required_resume"
18640
+ });
18641
+ console.error(`[PROXY] ${requestMeta.requestId} extra usage persisted on resumed ${model}, retrying as fresh session`);
18642
+ evictSession(profileSessionId, profileScopedCwd, allMessages);
18643
+ sdkUuidMap.length = 0;
18644
+ for (let i = 0;i < allMessages.length; i++)
18645
+ sdkUuidMap.push(null);
18646
+ yield* query(buildQueryOptions({
18647
+ prompt: buildFreshPrompt(allMessages, sanitizeOpts),
18648
+ model,
18649
+ workingDirectory,
18650
+ clientWorkingDirectory,
18651
+ systemContext,
18652
+ claudeExecutable,
18653
+ passthrough,
18654
+ stream: true,
18655
+ sdkAgents,
18656
+ passthroughMcp,
18657
+ cleanEnv: profileEnv,
18658
+ envOverrides,
18659
+ hasDeferredTools,
18660
+ resumeSessionId: undefined,
18661
+ isUndo: false,
18662
+ undoRollbackUuid: undefined,
18663
+ sdkHooks,
18664
+ blockedTools: pipelineCtx.blockedTools,
18665
+ incompatibleTools: pipelineCtx.incompatibleTools,
18666
+ mcpServerName: adapter.getMcpServerName(),
18667
+ allowedMcpTools: pipelineCtx.allowedMcpTools,
18668
+ onStderr,
18669
+ effort,
18670
+ thinking,
18671
+ taskBudget,
18672
+ betas,
18673
+ settingSources,
18674
+ codeSystemPrompt: sdkFeatures.codeSystemPrompt,
18675
+ clientSystemPrompt: sdkFeatures.clientSystemPrompt === false ? false : undefined,
18676
+ memory: sdkFeatures.memory,
18677
+ dreaming: sdkFeatures.dreaming,
18678
+ sharedMemory: sdkFeatures.sharedMemory,
18679
+ maxBudgetUsd: sdkFeatures.maxBudgetUsd,
18680
+ fallbackModel: sdkFeatures.fallbackModel,
18681
+ sdkDebug: sdkFeatures.sdkDebug,
18682
+ additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
18683
+ advisorModel
18684
+ }));
18685
+ return;
18686
+ }
18812
18687
  if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
18813
18688
  tokenRefreshed = true;
18814
18689
  const refreshed = await refreshOAuthToken();
@@ -0,0 +1,279 @@
1
+ // src/proxy/models.ts
2
+ import { exec as execCallback, execFile as execFileCallback } from "child_process";
3
+ import { existsSync, statSync } from "fs";
4
+ import { fileURLToPath } from "url";
5
+ import { join, dirname } from "path";
6
+ import { promisify } from "util";
7
+ var exec = promisify(execCallback);
8
+ var execFile = promisify(execFileCallback);
9
+ var STUB_SIZE_THRESHOLD = 4096;
10
+ var CANONICAL_OPUS_MODEL = "claude-opus-4-8";
11
+ var CANONICAL_SONNET_MODEL = "claude-sonnet-4-6";
12
+ var CANONICAL_HAIKU_MODEL = "claude-haiku-4-5";
13
+ function resolveSdkModelDefaults(env = process.env) {
14
+ return {
15
+ ANTHROPIC_DEFAULT_OPUS_MODEL: env.MERIDIAN_DEFAULT_OPUS_MODEL ?? CANONICAL_OPUS_MODEL,
16
+ ANTHROPIC_DEFAULT_SONNET_MODEL: env.MERIDIAN_DEFAULT_SONNET_MODEL ?? CANONICAL_SONNET_MODEL,
17
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: env.MERIDIAN_DEFAULT_HAIKU_MODEL ?? CANONICAL_HAIKU_MODEL
18
+ };
19
+ }
20
+ var AUTH_STATUS_CACHE_TTL_MS = 60000;
21
+ var AUTH_STATUS_FAILURE_TTL_MS = 5000;
22
+ var cachedAuthStatus = null;
23
+ var lastKnownGoodAuthStatus = null;
24
+ var cachedAuthStatusAt = 0;
25
+ var cachedAuthStatusIsFailure = false;
26
+ var cachedAuthStatusPromise = null;
27
+ function supports1mContext(model) {
28
+ if (model.includes("4-5") || model.includes("4.5"))
29
+ return false;
30
+ return true;
31
+ }
32
+ function mapModelToClaudeModel(model, subscriptionType, agentMode) {
33
+ if (model.includes("haiku"))
34
+ return "haiku";
35
+ const use1m = supports1mContext(model);
36
+ const isSubagent = agentMode === "subagent";
37
+ if (model.includes("opus")) {
38
+ if (use1m && !isSubagent && !isExtendedContextKnownUnavailable())
39
+ return "opus[1m]";
40
+ return "opus";
41
+ }
42
+ const sonnetOverride = process.env.MERIDIAN_SONNET_MODEL ?? process.env.CLAUDE_PROXY_SONNET_MODEL;
43
+ if (sonnetOverride === "sonnet[1m]") {
44
+ if (!use1m || isSubagent || isExtendedContextKnownUnavailable())
45
+ return "sonnet";
46
+ return "sonnet[1m]";
47
+ }
48
+ return "sonnet";
49
+ }
50
+ var EXTRA_USAGE_RETRY_MS = 60 * 60 * 1000;
51
+ var extraUsageUnavailableAt = 0;
52
+ function recordExtendedContextUnavailable() {
53
+ extraUsageUnavailableAt = Date.now();
54
+ }
55
+ function isExtendedContextKnownUnavailable() {
56
+ return extraUsageUnavailableAt > 0 && Date.now() - extraUsageUnavailableAt < EXTRA_USAGE_RETRY_MS;
57
+ }
58
+ function stripExtendedContext(model) {
59
+ if (model === "opus[1m]")
60
+ return "opus";
61
+ if (model === "sonnet[1m]")
62
+ return "sonnet";
63
+ return model;
64
+ }
65
+ function hasExtendedContext(model) {
66
+ return model.endsWith("[1m]");
67
+ }
68
+ var profileAuthCaches = new Map;
69
+ function getAuthCacheInfo(profileId) {
70
+ if (!profileId) {
71
+ return { lastCheckedAt: cachedAuthStatusAt, lastSuccessAt: cachedAuthStatusIsFailure ? 0 : cachedAuthStatusAt, isFailure: cachedAuthStatusIsFailure };
72
+ }
73
+ const cache = profileAuthCaches.get(profileId);
74
+ if (!cache)
75
+ return { lastCheckedAt: 0, lastSuccessAt: 0, isFailure: false };
76
+ return { lastCheckedAt: cache.at, lastSuccessAt: cache.lastSuccessAt, isFailure: cache.isFailure };
77
+ }
78
+ function getAuthCache(key) {
79
+ let cache = profileAuthCaches.get(key);
80
+ if (!cache) {
81
+ cache = { status: null, lastKnownGood: null, at: 0, isFailure: false, promise: null, lastSuccessAt: 0 };
82
+ profileAuthCaches.set(key, cache);
83
+ }
84
+ return cache;
85
+ }
86
+ async function getClaudeAuthStatusAsync(profileId, envOverrides) {
87
+ const isDefault = !profileId;
88
+ const cache = isDefault ? null : getAuthCache(profileId);
89
+ const c_status = cache ? cache.status : cachedAuthStatus;
90
+ const c_lastKnownGood = cache ? cache.lastKnownGood : lastKnownGoodAuthStatus;
91
+ const c_at = cache ? cache.at : cachedAuthStatusAt;
92
+ const c_isFailure = cache ? cache.isFailure : cachedAuthStatusIsFailure;
93
+ let c_promise = cache ? cache.promise : cachedAuthStatusPromise;
94
+ const ttl = c_isFailure ? AUTH_STATUS_FAILURE_TTL_MS : AUTH_STATUS_CACHE_TTL_MS;
95
+ if (c_at > 0 && Date.now() - c_at < ttl) {
96
+ return c_status ?? c_lastKnownGood;
97
+ }
98
+ if (c_promise)
99
+ return c_promise;
100
+ c_promise = (async () => {
101
+ try {
102
+ const claudePath = await resolveClaudeExecutableAsync();
103
+ const { stdout } = await execFile(claudePath, ["auth", "status"], {
104
+ timeout: 5000,
105
+ ...envOverrides ? { env: { ...process.env, ...envOverrides } } : {}
106
+ });
107
+ const parsed = JSON.parse(stdout);
108
+ if (cache) {
109
+ cache.status = parsed;
110
+ cache.lastKnownGood = parsed;
111
+ cache.at = Date.now();
112
+ cache.isFailure = false;
113
+ cache.lastSuccessAt = Date.now();
114
+ } else {
115
+ cachedAuthStatus = parsed;
116
+ lastKnownGoodAuthStatus = parsed;
117
+ cachedAuthStatusAt = Date.now();
118
+ cachedAuthStatusIsFailure = false;
119
+ }
120
+ return parsed;
121
+ } catch {
122
+ if (cache) {
123
+ cache.isFailure = true;
124
+ cache.at = Date.now();
125
+ cache.status = null;
126
+ return cache.lastKnownGood;
127
+ } else {
128
+ cachedAuthStatusIsFailure = true;
129
+ cachedAuthStatusAt = Date.now();
130
+ cachedAuthStatus = null;
131
+ return lastKnownGoodAuthStatus;
132
+ }
133
+ }
134
+ })();
135
+ if (cache)
136
+ cache.promise = c_promise;
137
+ else
138
+ cachedAuthStatusPromise = c_promise;
139
+ try {
140
+ return await c_promise;
141
+ } finally {
142
+ if (cache)
143
+ cache.promise = null;
144
+ else
145
+ cachedAuthStatusPromise = null;
146
+ }
147
+ }
148
+ var cachedClaudeInfo = null;
149
+ var cachedClaudePathPromise = null;
150
+ var DEFAULT_DEPS = {
151
+ existsSync,
152
+ statSync: (p) => statSync(p),
153
+ exec,
154
+ resolvePackage: (specifier) => fileURLToPath(import.meta.resolve(specifier)),
155
+ envGet: (name) => process.env[name],
156
+ platform: process.platform,
157
+ arch: process.arch,
158
+ isBun: typeof process.versions.bun !== "undefined"
159
+ };
160
+ function tryEnvOverride(deps) {
161
+ const explicit = deps.envGet("MERIDIAN_CLAUDE_PATH");
162
+ if (!explicit)
163
+ return null;
164
+ return deps.existsSync(explicit) ? explicit : null;
165
+ }
166
+ function tryBundledBinary(deps) {
167
+ try {
168
+ const pkgPath = deps.resolvePackage("@anthropic-ai/claude-code/package.json");
169
+ const bundled = join(dirname(pkgPath), "bin", "claude.exe");
170
+ if (!deps.existsSync(bundled))
171
+ return null;
172
+ const size = deps.statSync(bundled).size;
173
+ if (size <= STUB_SIZE_THRESHOLD)
174
+ return null;
175
+ return bundled;
176
+ } catch {
177
+ return null;
178
+ }
179
+ }
180
+ function tryPlatformPackage(deps) {
181
+ const binName = deps.platform === "win32" ? "claude.exe" : "claude";
182
+ const candidates = [`@anthropic-ai/claude-code-${deps.platform}-${deps.arch}`];
183
+ if (deps.platform === "linux") {
184
+ candidates.push(`@anthropic-ai/claude-code-${deps.platform}-${deps.arch}-musl`);
185
+ }
186
+ for (const pkg of candidates) {
187
+ try {
188
+ const pkgJson = deps.resolvePackage(`${pkg}/package.json`);
189
+ const candidate = join(dirname(pkgJson), binName);
190
+ if (deps.existsSync(candidate))
191
+ return candidate;
192
+ } catch {}
193
+ }
194
+ return null;
195
+ }
196
+ async function tryPathLookup(deps) {
197
+ const cmd = deps.platform === "win32" ? "where claude" : "which claude";
198
+ try {
199
+ const { stdout } = await deps.exec(cmd);
200
+ const candidates = stdout.split(/\r?\n/).map((s) => s.trim()).filter(Boolean);
201
+ for (const candidate of candidates) {
202
+ if (deps.platform === "win32" && candidate.startsWith("/"))
203
+ continue;
204
+ if (deps.existsSync(candidate))
205
+ return candidate;
206
+ }
207
+ } catch {}
208
+ return null;
209
+ }
210
+ function tryLegacySdkCliJs(deps) {
211
+ if (!deps.isBun)
212
+ return null;
213
+ try {
214
+ const sdkPath = deps.resolvePackage("@anthropic-ai/claude-agent-sdk");
215
+ const cliJs = join(dirname(sdkPath), "cli.js");
216
+ return deps.existsSync(cliJs) ? cliJs : null;
217
+ } catch {
218
+ return null;
219
+ }
220
+ }
221
+ async function resolveClaudeExecutableWithSource(deps = DEFAULT_DEPS) {
222
+ const env = tryEnvOverride(deps);
223
+ if (env)
224
+ return { path: env, source: "env" };
225
+ const bundled = tryBundledBinary(deps);
226
+ if (bundled)
227
+ return { path: bundled, source: "bundled" };
228
+ const platformPkg = tryPlatformPackage(deps);
229
+ if (platformPkg)
230
+ return { path: platformPkg, source: "platform-package" };
231
+ const pathLookup = await tryPathLookup(deps);
232
+ if (pathLookup)
233
+ return { path: pathLookup, source: "path-lookup" };
234
+ const legacy = tryLegacySdkCliJs(deps);
235
+ if (legacy)
236
+ return { path: legacy, source: "legacy-cli-js" };
237
+ return null;
238
+ }
239
+ function resolveClaudeExecutableSync(deps = DEFAULT_DEPS) {
240
+ const env = tryEnvOverride(deps);
241
+ if (env)
242
+ return { path: env, source: "env" };
243
+ const bundled = tryBundledBinary(deps);
244
+ if (bundled)
245
+ return { path: bundled, source: "bundled" };
246
+ const platformPkg = tryPlatformPackage(deps);
247
+ if (platformPkg)
248
+ return { path: platformPkg, source: "platform-package" };
249
+ return null;
250
+ }
251
+ function getResolvedClaudeExecutableInfo() {
252
+ return cachedClaudeInfo;
253
+ }
254
+ async function resolveClaudeExecutableAsync() {
255
+ if (cachedClaudeInfo)
256
+ return cachedClaudeInfo.path;
257
+ if (cachedClaudePathPromise)
258
+ return cachedClaudePathPromise;
259
+ cachedClaudePathPromise = (async () => {
260
+ const resolved = await resolveClaudeExecutableWithSource();
261
+ if (resolved) {
262
+ cachedClaudeInfo = resolved;
263
+ return resolved.path;
264
+ }
265
+ throw new Error("Could not find Claude Code executable. Install via: npm install -g @anthropic-ai/claude-code, " + "or set MERIDIAN_CLAUDE_PATH=/path/to/claude to point at an existing binary.");
266
+ })();
267
+ try {
268
+ return await cachedClaudePathPromise;
269
+ } finally {
270
+ cachedClaudePathPromise = null;
271
+ }
272
+ }
273
+ function isClosedControllerError(error) {
274
+ if (!(error instanceof Error))
275
+ return false;
276
+ return error.message.includes("Controller is already closed");
277
+ }
278
+
279
+ export { resolveSdkModelDefaults, mapModelToClaudeModel, recordExtendedContextUnavailable, stripExtendedContext, hasExtendedContext, getAuthCacheInfo, getClaudeAuthStatusAsync, resolveClaudeExecutableSync, getResolvedClaudeExecutableInfo, resolveClaudeExecutableAsync, isClosedControllerError };
package/dist/cli.js CHANGED
@@ -1,10 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startProxyServer
4
- } from "./cli-kvwnarfk.js";
4
+ } from "./cli-1x5gqsqc.js";
5
5
  import"./cli-cx463q74.js";
6
6
  import"./cli-sry5aqdj.js";
7
7
  import"./cli-4rqtm83g.js";
8
+ import {
9
+ resolveClaudeExecutableAsync
10
+ } from "./cli-yeazzt32.js";
8
11
  import"./cli-340h1chz.js";
9
12
  import"./cli-rtab0qa6.js";
10
13
  import"./cli-7k1fcprd.js";
@@ -14,7 +17,7 @@ import {
14
17
 
15
18
  // bin/cli.ts
16
19
  import { createRequire } from "module";
17
- import { exec as execCallback } from "child_process";
20
+ import { exec as execCallback, execFile as execFileCallback } from "child_process";
18
21
  import { promisify } from "util";
19
22
  var require2 = createRequire(import.meta.url);
20
23
  var { version } = require2("../package.json");
@@ -50,7 +53,7 @@ See https://github.com/rynfar/meridian for full documentation.`);
50
53
  process.exit(0);
51
54
  }
52
55
  if (args[0] === "profile") {
53
- const { profileAdd, profileAddOauthToken, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-wpb4qbjn.js");
56
+ const { profileAdd, profileAddOauthToken, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-0h4nc2h8.js");
54
57
  const subcommand = args[1];
55
58
  const profileId = args[2];
56
59
  if (subcommand === "add" && profileId) {
@@ -106,6 +109,7 @@ if (args[0] === "refresh-token") {
106
109
  }
107
110
  }
108
111
  var exec = promisify(execCallback);
112
+ var execFile = promisify(execFileCallback);
109
113
  process.on("uncaughtException", (err) => {
110
114
  console.error(`[PROXY] Uncaught exception (recovered): ${err.message}`);
111
115
  });
@@ -126,7 +130,10 @@ try {
126
130
  } catch (e) {
127
131
  console.error(`[meridian] Failed to parse MERIDIAN_PROFILES: ${e instanceof Error ? e.message : e}`);
128
132
  }
129
- async function runCli(start = startProxyServer, runExec = exec) {
133
+ async function runCli(start = startProxyServer, runAuthCheck = async () => {
134
+ const claudePath = await resolveClaudeExecutableAsync();
135
+ return execFile(claudePath, ["auth", "status"], { timeout: 5000 });
136
+ }) {
130
137
  try {
131
138
  const { findOpencodeConfigPath, checkPluginConfigured, findPluginPath } = await import("./setup-v5pnqe04.js");
132
139
  const configPath = findOpencodeConfigPath();
@@ -140,7 +147,7 @@ async function runCli(start = startProxyServer, runExec = exec) {
140
147
  }
141
148
  } catch {}
142
149
  try {
143
- const { stdout } = await runExec("claude auth status", { timeout: 5000 });
150
+ const { stdout } = await runAuthCheck();
144
151
  const auth = JSON.parse(stdout);
145
152
  if (!auth.loggedIn) {
146
153
  console.error("\x1B[31m✗ Not logged in to Claude.\x1B[0m Run: claude login");
@@ -1,3 +1,6 @@
1
+ import {
2
+ resolveClaudeExecutableSync
3
+ } from "./cli-yeazzt32.js";
1
4
  import {
2
5
  setSetting
3
6
  } from "./cli-340h1chz.js";
@@ -6,7 +9,7 @@ import"./cli-p9swy5t3.js";
6
9
  // src/proxy/profileCli.ts
7
10
  import { mkdirSync, existsSync, rmSync, readFileSync, writeFileSync } from "node:fs";
8
11
  import { join } from "node:path";
9
- import { execSync, spawnSync } from "node:child_process";
12
+ import { execFileSync, spawnSync } from "node:child_process";
10
13
  import { homedir } from "node:os";
11
14
  var PROFILES_DIR = join(homedir(), ".config", "meridian", "profiles");
12
15
  var CONFIG_FILE = join(homedir(), ".config", "meridian", "profiles.json");
@@ -32,8 +35,13 @@ function saveProfileConfig(profiles) {
32
35
  `, { mode: 384 });
33
36
  }
34
37
  function getAuthStatus(configDir) {
38
+ const resolved = resolveClaudeExecutableSync();
39
+ if (!resolved) {
40
+ console.warn(`[meridian] Could not resolve a Claude executable for auth check (set MERIDIAN_CLAUDE_PATH or install @anthropic-ai/claude-code)`);
41
+ return { loggedIn: false };
42
+ }
35
43
  try {
36
- const result = execSync("claude auth status", {
44
+ const result = execFileSync(resolved.path, ["auth", "status"], {
37
45
  timeout: 5000,
38
46
  env: { ...process.env, CLAUDE_CONFIG_DIR: configDir },
39
47
  stdio: ["pipe", "pipe", "pipe"]
@@ -97,7 +105,13 @@ function profileAdd(id) {
97
105
  console.log();
98
106
  console.log(" Press Ctrl+C to cancel, or wait for the browser to open...");
99
107
  console.log();
100
- const result = spawnSync("claude", ["auth", "login"], {
108
+ const resolvedAuth = resolveClaudeExecutableSync();
109
+ if (!resolvedAuth) {
110
+ console.error("\x1B[31m✗ Could not find a Claude executable to run auth login.\x1B[0m");
111
+ console.error(" Install via: npm install -g @anthropic-ai/claude-code, or set MERIDIAN_CLAUDE_PATH=/path/to/claude");
112
+ process.exit(1);
113
+ }
114
+ const result = spawnSync(resolvedAuth.path, ["auth", "login"], {
101
115
  env: { ...process.env, CLAUDE_CONFIG_DIR: configDir },
102
116
  stdio: "inherit"
103
117
  });
@@ -235,7 +249,13 @@ function profileLogin(id) {
235
249
  console.log();
236
250
  console.log("\x1B[33m⚠ Make sure you're signed into the correct Claude account in your browser.\x1B[0m");
237
251
  console.log();
238
- const result = spawnSync("claude", ["auth", "login"], {
252
+ const resolvedLogin = resolveClaudeExecutableSync();
253
+ if (!resolvedLogin) {
254
+ console.error("\x1B[31m✗ Could not find a Claude executable to run auth login.\x1B[0m");
255
+ console.error(" Install via: npm install -g @anthropic-ai/claude-code, or set MERIDIAN_CLAUDE_PATH=/path/to/claude");
256
+ process.exit(1);
257
+ }
258
+ const result = spawnSync(resolvedLogin.path, ["auth", "login"], {
239
259
  env: { ...process.env, CLAUDE_CONFIG_DIR: profile.claudeConfigDir },
240
260
  stdio: "inherit"
241
261
  });
@@ -18,7 +18,7 @@ export type ClaudeModel = "sonnet" | "sonnet[1m]" | "opus" | "opus[1m]" | "haiku
18
18
  * override via MERIDIAN_DEFAULT_{TYPE}_MODEL (proxy-side) or
19
19
  * ANTHROPIC_DEFAULT_{TYPE}_MODEL (shell env, wins over Meridian's pin).
20
20
  */
21
- export declare const CANONICAL_OPUS_MODEL = "claude-opus-4-7";
21
+ export declare const CANONICAL_OPUS_MODEL = "claude-opus-4-8";
22
22
  export declare const CANONICAL_SONNET_MODEL = "claude-sonnet-4-6";
23
23
  export declare const CANONICAL_HAIKU_MODEL = "claude-haiku-4-5";
24
24
  /**
@@ -134,6 +134,25 @@ export declare function resolveClaudeExecutableWithSource(deps?: ResolverDeps):
134
134
  * test surface in claude-executable-resolver.test.ts).
135
135
  */
136
136
  export declare function resolveClaudeExecutable(deps?: ResolverDeps): Promise<string | null>;
137
+ /**
138
+ * Synchronous subset of the resolver. Used by CLI commands
139
+ * (`meridian profile list`, `profileAdd`, etc.) that can't await before
140
+ * spawning `claude auth status`.
141
+ *
142
+ * Skips two steps that the async resolver runs:
143
+ * - `path-lookup` — running `which`/`where` synchronously is awkward
144
+ * and platform-fragile; the audit showed bundled + platform-package
145
+ * covers every supported install layout (npm-global, npx/bunx
146
+ * download, Docker, NixOS).
147
+ * - `legacy-cli-js` — only matters for stale Bun installs of SDK < 0.2.98.
148
+ *
149
+ * Closes the diagnostic gap from #478: `getAuthStatus` in profileCli.ts
150
+ * and `getClaudeAuthStatusAsync` in this file previously called
151
+ * `claude auth status` via shell, which fails when `claude` isn't on
152
+ * PATH (Stefan's case — bunx-installed meridian under systemd, no
153
+ * global claude). Both call sites now route through resolved paths.
154
+ */
155
+ export declare function resolveClaudeExecutableSync(deps?: ResolverDeps): ClaudeExecutableInfo | null;
137
156
  /**
138
157
  * Returns the cached resolved-executable info — `null` if
139
158
  * `resolveClaudeExecutableAsync` hasn't run yet. Used by `/health` and the
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AAEjF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,oBAAoB,CAAA;AACrD,eAAO,MAAM,sBAAsB,sBAAsB,CAAA;AACzD,eAAO,MAAM,qBAAqB,qBAAqB,CAAA;AAEvD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AACD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA0BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CA8B7H;AAWD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,OAAO,CAG3D;AAED,0EAA0E;AAC1E,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAIpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D;AAaD;gFACgF;AAChF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAOzH;AAWD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAuD1I;AAID;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAC9B,KAAK,GACL,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,eAAe,CAAA;AAEnB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAKD;;;;;;;;;;GAUG;AACH;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAA;IAClC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACzC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AA4HD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,GAAE,YAA2B,GAChC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAYtC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,GAAE,YAA2B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGvG;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,oBAAoB,GAAG,IAAI,CAE7E;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,CAAC,CAqBpE;AAED,2CAA2C;AAC3C,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,kDAAkD;AAClD,wBAAgB,2BAA2B,IAAI,IAAI,CAOlD;AAED;;6DAE6D;AAC7D,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG/D"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,8 @@ export interface QueryContext {
34
34
  passthroughMcp?: ReturnType<typeof createPassthroughMcpServer>;
35
35
  /** Cleaned environment variables (API keys stripped) */
36
36
  cleanEnv: Record<string, string | undefined>;
37
+ /** Per-request env overrides that must win over inherited env */
38
+ envOverrides?: Record<string, string | undefined>;
37
39
  /** Whether any passthrough tools use deferred loading */
38
40
  hasDeferredTools: boolean;
39
41
  /** SDK session ID for resume (if continuing a session) */
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AAGvD,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAA;AAKpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAgCnG,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EAEpB,KAAK,aAAa,EAGnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAsC,MAAM,iBAAiB,CAAA;AAGzI,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AA+N7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CA6jFhF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmFhG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AAGvD,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAA;AAKpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAgCnG,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EAEpB,KAAK,aAAa,EAGnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAsC,MAAM,iBAAiB,CAAA;AAGzI,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AA+N7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CA6nFhF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmFhG"}
package/dist/server.js CHANGED
@@ -10,10 +10,11 @@ import {
10
10
  runObserveHook,
11
11
  runTransformHook,
12
12
  startProxyServer
13
- } from "./cli-kvwnarfk.js";
13
+ } from "./cli-1x5gqsqc.js";
14
14
  import"./cli-cx463q74.js";
15
15
  import"./cli-sry5aqdj.js";
16
16
  import"./cli-4rqtm83g.js";
17
+ import"./cli-yeazzt32.js";
17
18
  import"./cli-340h1chz.js";
18
19
  import"./cli-rtab0qa6.js";
19
20
  import"./cli-7k1fcprd.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rynfar/meridian",
3
- "version": "1.42.0",
3
+ "version": "1.43.0",
4
4
  "description": "Local Anthropic API powered by your Claude Max subscription. One subscription, every agent.",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",