claudish 13.0.2 → 13.1.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.
Files changed (2) hide show
  1. package/dist/index.js +108 -31
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -575,7 +575,7 @@ var init_onepassword_config = __esm(() => {
575
575
  });
576
576
 
577
577
  // src/version.ts
578
- var VERSION = "13.0.2";
578
+ var VERSION = "13.1.0";
579
579
 
580
580
  // src/logger.ts
581
581
  import { appendFile, existsSync as existsSync2, mkdirSync, readdirSync, unlinkSync, writeFileSync as writeFileSync2 } from "fs";
@@ -13269,7 +13269,7 @@ function createGeminiThoughtSignatureHook() {
13269
13269
  description: "Sends Gemini's reasoning_details back with the assistant tool calls they were produced for",
13270
13270
  order: "pre",
13271
13271
  models: ["*gemini*", "*google/*"],
13272
- selectByUpstream: (upstream) => upstream.wireApi === "gemini" || upstream.vendor === "google",
13272
+ selectByUpstream: { wireApis: ["gemini"], vendors: ["google"] },
13273
13273
  routes: "all",
13274
13274
  defaultSeverity: "fix",
13275
13275
  statsName: GEMINI_THOUGHT_SIGNATURE_STATS_NAME,
@@ -18426,7 +18426,17 @@ async function prune(path) {
18426
18426
  await rename(tmp, path);
18427
18427
  log(`[behavior:journal] pruned ${lines.length - survivors.length} of ${lines.length} entries ` + `to stay under ${Math.round(MAX_JOURNAL_BYTES / 1e6)}MB`);
18428
18428
  }
18429
- async function recordDecision(entry, path = journalPath()) {
18429
+ function recordDecision(entry, path = journalPath()) {
18430
+ const previous = pendingAppends.get(path) ?? Promise.resolve();
18431
+ const next = previous.then(() => appendDecision(entry, path));
18432
+ pendingAppends.set(path, next);
18433
+ next.then(() => {
18434
+ if (pendingAppends.get(path) === next)
18435
+ pendingAppends.delete(path);
18436
+ });
18437
+ return next;
18438
+ }
18439
+ async function appendDecision(entry, path) {
18430
18440
  try {
18431
18441
  const size = await stat(path).then((s) => s.size, () => 0);
18432
18442
  if (size === 0)
@@ -18440,7 +18450,7 @@ async function recordDecision(entry, path = journalPath()) {
18440
18450
  log(`[behavior:journal] could not record: ${err}`);
18441
18451
  }
18442
18452
  }
18443
- var JOURNAL_SCHEMA_VERSION = 2, UPLOAD_SURFACES, UPLOAD_DECISIONS, MAX_DETAIL_CHARS = 200, MAX_JOURNAL_BYTES, PRUNE_TO_BYTES;
18453
+ var JOURNAL_SCHEMA_VERSION = 2, UPLOAD_SURFACES, UPLOAD_DECISIONS, MAX_DETAIL_CHARS = 200, MAX_JOURNAL_BYTES, PRUNE_TO_BYTES, pendingAppends;
18444
18454
  var init_journal = __esm(() => {
18445
18455
  init_logger();
18446
18456
  UPLOAD_SURFACES = new Set([
@@ -18458,6 +18468,7 @@ var init_journal = __esm(() => {
18458
18468
  ]);
18459
18469
  MAX_JOURNAL_BYTES = 32 * 1024 * 1024;
18460
18470
  PRUNE_TO_BYTES = Math.floor(MAX_JOURNAL_BYTES * 0.6);
18471
+ pendingAppends = new Map;
18461
18472
  });
18462
18473
 
18463
18474
  // src/hooks/output-capture.ts
@@ -19650,6 +19661,9 @@ var init_loader = __esm(() => {
19650
19661
  function isProxyEvent(event) {
19651
19662
  return PROXY_EVENTS.has(event);
19652
19663
  }
19664
+ function upstreamSelected(selector, upstream) {
19665
+ return upstream.wireApi !== null && selector.wireApis.includes(upstream.wireApi) || upstream.vendor !== null && selector.vendors.includes(upstream.vendor);
19666
+ }
19653
19667
  function eventsOf(def) {
19654
19668
  const events = [];
19655
19669
  const on = def.on ?? {};
@@ -19744,7 +19758,7 @@ function routeMatches(hook, route, upstream) {
19744
19758
  if (hook.routes === "foreign" && route.native)
19745
19759
  return false;
19746
19760
  if (upstream && hook.selectByUpstream)
19747
- return hook.selectByUpstream(upstream);
19761
+ return upstreamSelected(hook.selectByUpstream, upstream);
19748
19762
  return hook.models.some((glob) => globMatches(glob, route.modelId));
19749
19763
  }
19750
19764
  var CLOSED_HANDLER_KEYS, RAW_KEYS2, PROXY_EVENTS, ORDER_RANK;
@@ -27780,7 +27794,8 @@ async function discoverEveryServedModel(providerName) {
27780
27794
  detail: `no base URL resolved \u2014 check ${overrides || "the provider's baseUrl"}`
27781
27795
  });
27782
27796
  }
27783
- const endpoint = registryModelsEndpoint(providerName, def) ?? `${baseUrl}${descriptor.path}`;
27797
+ const definitionEndpoint = `${baseUrl}${descriptor.path}`;
27798
+ let endpoint = registryModelsEndpoint(providerName, def) ?? definitionEndpoint;
27784
27799
  let headers = {};
27785
27800
  if (def.isLocal) {
27786
27801
  const key = def.apiKeyEnvVar ? process.env[def.apiKeyEnvVar] : undefined;
@@ -27807,13 +27822,14 @@ async function discoverEveryServedModel(providerName) {
27807
27822
  ...def.headers ?? {},
27808
27823
  ...headers
27809
27824
  };
27825
+ const fetchList = (url) => fetch(url, { method: "GET", headers, signal: AbortSignal.timeout(FETCH_TIMEOUT_MS3) });
27810
27826
  let response;
27811
27827
  try {
27812
- response = await fetch(endpoint, {
27813
- method: "GET",
27814
- headers,
27815
- signal: AbortSignal.timeout(FETCH_TIMEOUT_MS3)
27816
- });
27828
+ response = await fetchList(endpoint);
27829
+ if (response.status === 404 && endpoint !== definitionEndpoint) {
27830
+ endpoint = definitionEndpoint;
27831
+ response = await fetchList(endpoint);
27832
+ }
27817
27833
  } catch (e) {
27818
27834
  return recordFailure({
27819
27835
  kind: "unreachable",
@@ -27854,7 +27870,7 @@ async function discoverEveryServedModel(providerName) {
27854
27870
  }
27855
27871
  const models = parsed.models;
27856
27872
  _failures.delete(providerName);
27857
- log(`[model-discovery:${providerName}] discovered ${models.length} models: ` + models.map((m) => `${m.id}(${m.contextWindow ?? "?"})`).join(", "));
27873
+ log(`[model-discovery:${providerName}] discovered ${models.length} models from ${endpoint}: ` + models.map((m) => `${m.id}(${m.contextWindow ?? "?"})`).join(", "));
27858
27874
  _cache2.set(providerName, { models, expiresAt: Date.now() + CACHE_TTL_MS2 });
27859
27875
  return { kind: "served", models };
27860
27876
  }
@@ -36448,8 +36464,8 @@ var init_provider_definitions = __esm(() => {
36448
36464
  baseUrl: "https://api.kimi.com/coding/v1",
36449
36465
  apiPath: "/messages",
36450
36466
  apiKeyEnvVar: "KIMI_CODING_API_KEY",
36451
- apiKeyDescription: "Kimi Coding API Key",
36452
- apiKeyUrl: "https://kimi.com/code (get key from membership page, or run: claudish login kimi)",
36467
+ apiKeyDescription: "Kimi Coding API Key (membership page, or run: claudish login kimi)",
36468
+ apiKeyUrl: "https://www.kimi.com/code",
36453
36469
  oauthFallback: "kimi-oauth.json",
36454
36470
  oauthLoginSlug: "kimi",
36455
36471
  shortcuts: ["kc"],
@@ -36502,7 +36518,7 @@ var init_provider_definitions = __esm(() => {
36502
36518
  apiKeyEnvVar: "ZHIPU_API_KEY",
36503
36519
  apiKeyAliases: ["GLM_API_KEY"],
36504
36520
  apiKeyDescription: "GLM/Zhipu API Key",
36505
- apiKeyUrl: "https://z.ai/",
36521
+ apiKeyUrl: "https://z.ai/manage-apikey/apikey-list",
36506
36522
  shortcuts: ["glm", "zhipu"],
36507
36523
  shortestPrefix: "glm",
36508
36524
  legacyPrefixes: [
@@ -36548,7 +36564,7 @@ var init_provider_definitions = __esm(() => {
36548
36564
  apiPath: "/api/anthropic/v1/messages",
36549
36565
  apiKeyEnvVar: "ZAI_API_KEY",
36550
36566
  apiKeyDescription: "Z.AI API Key",
36551
- apiKeyUrl: "https://z.ai/",
36567
+ apiKeyUrl: "https://z.ai/manage-apikey/apikey-list",
36552
36568
  shortcuts: ["z-ai", "zai"],
36553
36569
  shortestPrefix: "z-ai",
36554
36570
  legacyPrefixes: [{ prefix: "zai/", stripPrefix: true }],
@@ -36568,7 +36584,7 @@ var init_provider_definitions = __esm(() => {
36568
36584
  apiPath: "/api/chat",
36569
36585
  apiKeyEnvVar: "OLLAMA_API_KEY",
36570
36586
  apiKeyDescription: "OllamaCloud API Key",
36571
- apiKeyUrl: "https://ollama.com/account",
36587
+ apiKeyUrl: "https://ollama.com/settings/keys",
36572
36588
  shortcuts: ["oc", "llama", "lc"],
36573
36589
  shortestPrefix: "oc",
36574
36590
  legacyPrefixes: [{ prefix: "oc/", stripPrefix: true }],
@@ -36592,8 +36608,8 @@ var init_provider_definitions = __esm(() => {
36592
36608
  baseUrlEnvVars: ["OPENCODE_BASE_URL"],
36593
36609
  apiPath: "/v1/chat/completions",
36594
36610
  apiKeyEnvVar: "OPENCODE_API_KEY",
36595
- apiKeyDescription: "OpenCode Zen API Key",
36596
- apiKeyUrl: "https://opencode.ai/",
36611
+ apiKeyDescription: "OpenCode Zen API Key (Console > Settings > Service accounts)",
36612
+ apiKeyUrl: "https://opencode.ai/console",
36597
36613
  shortcuts: ["zen"],
36598
36614
  shortestPrefix: "zen",
36599
36615
  legacyPrefixes: [{ prefix: "zen/", stripPrefix: true }],
@@ -36613,8 +36629,8 @@ var init_provider_definitions = __esm(() => {
36613
36629
  modelDiscovery: { path: "/v1/models", format: "openai-models-list" },
36614
36630
  apiKeyEnvVar: "OPENCODE_GO_API_KEY",
36615
36631
  siblingKeyEnvVars: ["OPENCODE_API_KEY"],
36616
- apiKeyDescription: "OpenCode Zen Go (Lite Plan) API Key",
36617
- apiKeyUrl: "https://opencode.ai/",
36632
+ apiKeyDescription: "OpenCode Zen Go (Lite Plan) API Key (Console > Settings > Service accounts)",
36633
+ apiKeyUrl: "https://opencode.ai/console",
36618
36634
  shortcuts: ["zengo", "zgo"],
36619
36635
  shortestPrefix: "zengo",
36620
36636
  legacyPrefixes: [
@@ -36718,7 +36734,7 @@ var init_provider_definitions = __esm(() => {
36718
36734
  apiPath: "/v1/chat/completions",
36719
36735
  apiKeyEnvVar: "LMSTUDIO_API_KEY",
36720
36736
  apiKeyDescription: "LM Studio API Key (optional \u2014 leave blank for localhost)",
36721
- apiKeyUrl: "https://lmstudio.ai/docs/local-server",
36737
+ apiKeyUrl: "https://lmstudio.ai/docs/developer/core/server",
36722
36738
  shortcuts: ["lms", "lmstudio", "mlstudio"],
36723
36739
  shortestPrefix: "lms",
36724
36740
  legacyPrefixes: [
@@ -72083,6 +72099,7 @@ class PaneSessionImpl {
72083
72099
  stderrHead = "";
72084
72100
  paneClosed = false;
72085
72101
  paneExited = false;
72102
+ exitCodeQuery = false;
72086
72103
  reaping = false;
72087
72104
  fastReap = false;
72088
72105
  reapPromise = null;
@@ -72593,7 +72610,7 @@ class PaneSessionImpl {
72593
72610
  }
72594
72611
  }
72595
72612
  checkLiveness() {
72596
- if (this.client || !this.panePidValue || this.paneExited)
72613
+ if (this.client || !this.panePidValue || this.paneExited || this.exitCodeQuery)
72597
72614
  return;
72598
72615
  const now = Date.now();
72599
72616
  if (now - this.lastLivenessAt < 1000)
@@ -72603,11 +72620,55 @@ class PaneSessionImpl {
72603
72620
  process.kill(this.panePidValue, 0);
72604
72621
  } catch (e) {
72605
72622
  if (e.code === "ESRCH") {
72606
- this.paneExited = true;
72607
- this.applyExitPath(null);
72623
+ this.exitCodeQuery = true;
72624
+ this.exitCodeFromMagmux().then((code) => {
72625
+ this.exitCodeQuery = false;
72626
+ if (this.paneExited || isTerminalPhase(this.phase))
72627
+ return;
72628
+ this.paneExited = true;
72629
+ this.exitCode = code;
72630
+ this.step(() => this.applyExitPath(code));
72631
+ });
72632
+ }
72633
+ }
72634
+ }
72635
+ async exitCodeFromMagmux() {
72636
+ const deadline = Date.now() + EXIT_CODE_QUERY_MS;
72637
+ const left = () => deadline - Date.now();
72638
+ const client = await this.dialWithin(left);
72639
+ if (!client)
72640
+ return null;
72641
+ try {
72642
+ while (left() > 0) {
72643
+ const r = await client.request({ type: "list" }, Math.max(1, left()));
72644
+ if (!r.ok)
72645
+ return null;
72646
+ const p0 = r.result.panes?.find((p) => p.pane === 0);
72647
+ if (!p0)
72648
+ return null;
72649
+ if (p0.dead === true)
72650
+ return typeof p0.exitCode === "number" ? p0.exitCode : null;
72651
+ await Bun.sleep(Math.min(EXIT_CODE_RETRY_MS, Math.max(0, left())));
72608
72652
  }
72653
+ return null;
72654
+ } finally {
72655
+ client.close();
72609
72656
  }
72610
72657
  }
72658
+ async dialWithin(left) {
72659
+ while (left() > 0 && !this.reaping && !isTerminalPhase(this.phase)) {
72660
+ try {
72661
+ const dial = MagmuxClient.dial(this.sockPath);
72662
+ const client = await Promise.race([dial, Bun.sleep(Math.max(0, left())).then(() => null)]);
72663
+ if (!client)
72664
+ dial.then((late) => late.close()).catch(() => {});
72665
+ return client;
72666
+ } catch {
72667
+ await Bun.sleep(Math.min(EXIT_CODE_RETRY_MS, Math.max(0, left())));
72668
+ }
72669
+ }
72670
+ return null;
72671
+ }
72611
72672
  t(key, dflt) {
72612
72673
  return this.o.timings?.[key] ?? dflt;
72613
72674
  }
@@ -74556,7 +74617,7 @@ async function startPaneSession(o) {
74556
74617
  await session.start({ magmuxBinary: magmux.binary, env: p.magmuxEnv, cwd: p.cwd });
74557
74618
  return session;
74558
74619
  }
74559
- var BOOT_TIMEOUT_MS = 90000, ADMIT_TIMEOUT_MS = 30000, DEGRADED_ENTRY_MS = 1e4, SCREEN_SETTLE_QUIET_MS = 3000, PANEL_SETTLE_MS = 500, SEND_CLIENT_SLACK_MS = 2000, MIN_READY_TIMEOUT_MS = 1000, BUSY_RETRY_MS = 250, MISMATCH_SETTLE_MS = 1000, CLEAR_WAIT_MS = 1000, BOOT_STATIC_MS = 5000, TICK_MS = 250, WATCH_FPS = 4, POLL_BACKSTOP_MS = 1000, TURN_END_MISSING_FACTOR = 3, RESIZE_REPLY_MS = 1e4, RESIZE_SCREEN_MS = 1000, GATE_POLL_MS = 250, GATE_REPLY_MS = 1000, GATE_STALE_MS = 1000, GATE_GRACE_MS, GATE_DEAD_BACKSTOP_MS = 1000, GATE_KINDLESS_REASONS, RUNTIME_DIALOG_KINDS, REGISTRY_READ_MS = 250, REGISTRY_DISAGREE_MS = 2000, REGISTRY_GATE_BOOT_DISAGREE_MS = 5000, REGISTRY_MISSING_MS = 5000, MAX_ANOMALY_KEYS = 64, KEPT_ANSWERS = 4, DEFAULT_MAX_CONSECUTIVE = 3, EVENT_REASON, VERDICT_EVENT, PaneStartError;
74620
+ var BOOT_TIMEOUT_MS = 90000, ADMIT_TIMEOUT_MS = 30000, DEGRADED_ENTRY_MS = 1e4, SCREEN_SETTLE_QUIET_MS = 3000, PANEL_SETTLE_MS = 500, SEND_CLIENT_SLACK_MS = 2000, MIN_READY_TIMEOUT_MS = 1000, BUSY_RETRY_MS = 250, MISMATCH_SETTLE_MS = 1000, CLEAR_WAIT_MS = 1000, BOOT_STATIC_MS = 5000, TICK_MS = 250, WATCH_FPS = 4, POLL_BACKSTOP_MS = 1000, TURN_END_MISSING_FACTOR = 3, RESIZE_REPLY_MS = 1e4, RESIZE_SCREEN_MS = 1000, GATE_POLL_MS = 250, GATE_REPLY_MS = 1000, GATE_STALE_MS = 1000, GATE_GRACE_MS, GATE_DEAD_BACKSTOP_MS = 1000, EXIT_CODE_QUERY_MS = 2000, EXIT_CODE_RETRY_MS = 50, GATE_KINDLESS_REASONS, RUNTIME_DIALOG_KINDS, REGISTRY_READ_MS = 250, REGISTRY_DISAGREE_MS = 2000, REGISTRY_GATE_BOOT_DISAGREE_MS = 5000, REGISTRY_MISSING_MS = 5000, MAX_ANOMALY_KEYS = 64, KEPT_ANSWERS = 4, DEFAULT_MAX_CONSECUTIVE = 3, EVENT_REASON, VERDICT_EVENT, PaneStartError;
74560
74621
  var init_pane_session = __esm(() => {
74561
74622
  init_queue();
74562
74623
  init_parent_session();
@@ -79757,10 +79818,26 @@ function hookRow(hook, severity) {
79757
79818
  severity,
79758
79819
  routes: hook.routes,
79759
79820
  models: [...hook.models],
79821
+ ...hook.selectByUpstream && {
79822
+ catalogSelection: {
79823
+ wireApis: [...hook.selectByUpstream.wireApis],
79824
+ vendors: [...hook.selectByUpstream.vendors]
79825
+ }
79826
+ },
79760
79827
  order: hook.order,
79761
79828
  unsafe: hook.unsafe
79762
79829
  };
79763
79830
  }
79831
+ function selectionOf(r) {
79832
+ const globs = r.models.join(", ");
79833
+ if (!r.catalogSelection)
79834
+ return r.models.join(",") !== "*" ? `models ${globs}` : null;
79835
+ const facts = [
79836
+ ...r.catalogSelection.wireApis.map((w) => `wire ${w}`),
79837
+ ...r.catalogSelection.vendors.map((v) => `vendor ${v}`)
79838
+ ].join(" or ");
79839
+ return `catalog ${facts}; without a catalog connection, models ${globs}`;
79840
+ }
79764
79841
  async function list(json) {
79765
79842
  const set = await loadHookSet({ hostMode: "other", moduleWarn: () => {} });
79766
79843
  const rows = set.registry.hooks.map((h) => hookRow(h, set.registry.severityOf(h)));
@@ -79787,7 +79864,7 @@ Hooks, in effective order
79787
79864
  `${r.source}`,
79788
79865
  `events ${r.events.join(", ")}`,
79789
79866
  `routes ${r.routes}`,
79790
- r.models.join(",") !== "*" ? `models ${r.models.join(", ")}` : null,
79867
+ selectionOf(r),
79791
79868
  r.order !== "normal" ? `order ${r.order}` : null
79792
79869
  ].filter(Boolean);
79793
79870
  console.log(` ${dim2(scope.join(" \xB7 "))}
@@ -84998,13 +85075,13 @@ function ProviderDetail({
84998
85075
  fg: C.blue,
84999
85076
  attributes: A.bold,
85000
85077
  children: [
85001
- "URL:",
85078
+ "API:",
85002
85079
  " "
85003
85080
  ]
85004
85081
  }),
85005
85082
  /* @__PURE__ */ jsx22("span", {
85006
85083
  fg: C.cyan,
85007
- children: activeEndpoint || selectedProvider.defaultEndpoint || "default"
85084
+ children: (activeEndpoint || selectedProvider.defaultEndpoint || "default").replace(/^https?:\/\//, "")
85008
85085
  })
85009
85086
  ]
85010
85087
  }),
@@ -91109,7 +91186,7 @@ function resolveContextWindowEnv(realWindow, processEnv = process.env) {
91109
91186
  if (processEnv[ENV.CLAUDE_CODE_AUTO_COMPACT_WINDOW])
91110
91187
  return { vars };
91111
91188
  if (realWindow >= MIN_AUTO_COMPACT_WINDOW) {
91112
- vars[ENV.CLAUDE_CODE_AUTO_COMPACT_WINDOW] = String(realWindow);
91189
+ vars[ENV.CLAUDE_CODE_AUTO_COMPACT_WINDOW] = String(Math.min(realWindow, MAX_AUTO_COMPACT_WINDOW));
91113
91190
  return {
91114
91191
  vars,
91115
91192
  notice: `[claudish] Auto-compact window: ${realWindow.toLocaleString()} tokens ` + "(Claude Code compacts before the backend's real limit)"
@@ -91616,7 +91693,7 @@ var restoreTerminal = null, macosKeychainAnthropicResult, defaultKeychainAnthrop
91616
91693
  macosKeychainAnthropicResult = false;
91617
91694
  }
91618
91695
  return macosKeychainAnthropicResult;
91619
- }, CLAUDISH_PLACEHOLDER_API_KEY = "sk-ant-api03-placeholder-not-used-proxy-handles-auth-with-openrouter-key-xxxxxxxxxxxxxxxxxxxxx", CLAUDISH_PLACEHOLDER_AUTH_TOKEN = "placeholder-token-not-used-proxy-handles-auth", STALE_TOKEN_FILE_MS, MAX_TOKEN_FILES_SCANNED = 4000, CLAUDE_CODE_DEFAULT_MAX_CONTEXT = 200000, USER_STATUS_LINE_TIMEOUT_SECONDS = 3, MIN_AUTO_COMPACT_WINDOW = 200000, ADVISOR_TOOL_ENV_VAR = "CLAUDE_CODE_ENABLE_EXPERIMENTAL_ADVISOR_TOOL", CLAUDISH_CHILD_ADVISOR_MODEL = "sonnet", CHILD_STDERR_NOISE, SIGNAL_EXIT_NUMBERS;
91696
+ }, CLAUDISH_PLACEHOLDER_API_KEY = "sk-ant-api03-placeholder-not-used-proxy-handles-auth-with-openrouter-key-xxxxxxxxxxxxxxxxxxxxx", CLAUDISH_PLACEHOLDER_AUTH_TOKEN = "placeholder-token-not-used-proxy-handles-auth", STALE_TOKEN_FILE_MS, MAX_TOKEN_FILES_SCANNED = 4000, CLAUDE_CODE_DEFAULT_MAX_CONTEXT = 200000, USER_STATUS_LINE_TIMEOUT_SECONDS = 3, MIN_AUTO_COMPACT_WINDOW = 200000, MAX_AUTO_COMPACT_WINDOW = 1e6, ADVISOR_TOOL_ENV_VAR = "CLAUDE_CODE_ENABLE_EXPERIMENTAL_ADVISOR_TOOL", CLAUDISH_CHILD_ADVISOR_MODEL = "sonnet", CHILD_STDERR_NOISE, SIGNAL_EXIT_NUMBERS;
91620
91697
  var init_claude_runner = __esm(() => {
91621
91698
  init_model_catalog();
91622
91699
  init_config();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "13.0.2",
3
+ "version": "13.1.0",
4
4
  "description": "Run Claude Code with any model - OpenRouter, Ollama, LM Studio & local models",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -69,10 +69,10 @@
69
69
  "ai"
70
70
  ],
71
71
  "optionalDependencies": {
72
- "@claudish/magmux-darwin-arm64": "13.0.2",
73
- "@claudish/magmux-darwin-x64": "13.0.2",
74
- "@claudish/magmux-linux-arm64": "13.0.2",
75
- "@claudish/magmux-linux-x64": "13.0.2"
72
+ "@claudish/magmux-darwin-arm64": "13.1.0",
73
+ "@claudish/magmux-darwin-x64": "13.1.0",
74
+ "@claudish/magmux-linux-arm64": "13.1.0",
75
+ "@claudish/magmux-linux-x64": "13.1.0"
76
76
  },
77
77
  "author": "Jack Rudenko <i@madappgang.com>",
78
78
  "license": "MIT",