claudish 6.5.3 → 6.6.2

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/index.js CHANGED
@@ -17747,6 +17747,8 @@ function sanitizeSchemaForOpenAI(schema) {
17747
17747
  const { enum: _enum2, not: _not, ...withoutForbidden } = root;
17748
17748
  root = withoutForbidden;
17749
17749
  root.type = "object";
17750
+ if (!root.properties)
17751
+ root.properties = {};
17750
17752
  return removeUriFormat(root);
17751
17753
  }
17752
17754
  function convertToolsToOpenAI(req, summarize = false) {
@@ -19150,14 +19152,41 @@ var init_gemini_api_format = __esm(() => {
19150
19152
  log(`[GeminiAPIFormat] Warning: No function name found for tool_use_id ${block.tool_use_id}`);
19151
19153
  continue;
19152
19154
  }
19153
- parts.push({
19154
- functionResponse: {
19155
- name: toolInfo.name,
19156
- response: {
19157
- content: typeof block.content === "string" ? block.content : JSON.stringify(block.content)
19155
+ if (Array.isArray(block.content)) {
19156
+ const textParts = [];
19157
+ const imageParts = [];
19158
+ for (const item of block.content) {
19159
+ if (item.type === "image" && item.source?.data) {
19160
+ imageParts.push({
19161
+ inlineData: {
19162
+ mimeType: item.source.media_type,
19163
+ data: item.source.data
19164
+ }
19165
+ });
19166
+ } else if (item.type === "text") {
19167
+ textParts.push(item.text);
19158
19168
  }
19159
19169
  }
19160
- });
19170
+ parts.push({
19171
+ functionResponse: {
19172
+ name: toolInfo.name,
19173
+ response: {
19174
+ content: textParts.join(`
19175
+ `) || "OK"
19176
+ }
19177
+ }
19178
+ });
19179
+ parts.push(...imageParts);
19180
+ } else {
19181
+ parts.push({
19182
+ functionResponse: {
19183
+ name: toolInfo.name,
19184
+ response: {
19185
+ content: typeof block.content === "string" ? block.content : JSON.stringify(block.content)
19186
+ }
19187
+ }
19188
+ });
19189
+ }
19161
19190
  }
19162
19191
  }
19163
19192
  } else if (typeof msg.content === "string") {
@@ -32744,12 +32773,12 @@ async function parseArgs(args) {
32744
32773
  }
32745
32774
  try {
32746
32775
  const fileConfig = loadConfig();
32747
- if (fileConfig.diagMode && ["auto", "pty", "tmux", "logfile", "off"].includes(fileConfig.diagMode)) {
32776
+ if (fileConfig.diagMode && ["auto", "tmux", "logfile", "off"].includes(fileConfig.diagMode)) {
32748
32777
  config3.diagMode = fileConfig.diagMode;
32749
32778
  }
32750
32779
  } catch {}
32751
32780
  const envDiagMode = process.env[ENV.CLAUDISH_DIAG_MODE]?.toLowerCase();
32752
- if (envDiagMode && ["auto", "pty", "tmux", "logfile", "off"].includes(envDiagMode)) {
32781
+ if (envDiagMode && ["auto", "tmux", "logfile", "off"].includes(envDiagMode)) {
32753
32782
  config3.diagMode = envDiagMode;
32754
32783
  }
32755
32784
  let i = 0;
@@ -32898,7 +32927,7 @@ async function parseArgs(args) {
32898
32927
  config3.noLogs = true;
32899
32928
  } else if (arg === "--diag-mode" && i + 1 < args.length) {
32900
32929
  const mode = args[++i].toLowerCase();
32901
- if (["auto", "pty", "tmux", "logfile", "off"].includes(mode)) {
32930
+ if (["auto", "tmux", "logfile", "off"].includes(mode)) {
32902
32931
  config3.diagMode = mode;
32903
32932
  }
32904
32933
  } else if (arg === "--") {
@@ -33832,7 +33861,7 @@ OPTIONS:
33832
33861
  --port <port> Proxy server port (default: random)
33833
33862
  -d, --debug Enable debug logging to file (logs/claudish_*.log)
33834
33863
  --no-logs Disable always-on structural logging (~/.claudish/logs/)
33835
- --diag-mode <mode> Diagnostic output: auto (default), pty, tmux, logfile, off
33864
+ --diag-mode <mode> Diagnostic output: auto (default), tmux, logfile, off
33836
33865
  Also: CLAUDISH_DIAG_MODE env var or "diagMode" in config.json
33837
33866
  --log-level <level> Log verbosity: debug (full), info (truncated), minimal (labels only)
33838
33867
  -q, --quiet Suppress [claudish] log messages (default in single-shot mode)
@@ -34311,7 +34340,7 @@ async function fetchGLMCodingModels() {
34311
34340
  return [];
34312
34341
  }
34313
34342
  }
34314
- var __filename4, __dirname4, VERSION = "6.5.3", CACHE_MAX_AGE_DAYS2 = 2, CLAUDISH_CACHE_DIR2, BUNDLED_MODELS_PATH, CACHED_MODELS_PATH, ALL_MODELS_JSON_PATH;
34343
+ var __filename4, __dirname4, VERSION = "6.6.2", CACHE_MAX_AGE_DAYS2 = 2, CLAUDISH_CACHE_DIR2, BUNDLED_MODELS_PATH, CACHED_MODELS_PATH, ALL_MODELS_JSON_PATH;
34315
34344
  var init_cli = __esm(() => {
34316
34345
  init_config();
34317
34346
  init_model_loader();
@@ -95688,8 +95717,10 @@ async function runWithGrid(sessionPath, models, input, opts) {
95688
95717
  `if [ -n "$MAGMUX_SOCK" ]; then`,
95689
95718
  ` if [ $_ec -eq 0 ]; then`,
95690
95719
  ` echo '{"cmd":"tint","pane":${paneIndex},"color":"green"}' | nc -U "$MAGMUX_SOCK" -w 1 2>/dev/null;`,
95720
+ ` echo '{"cmd":"overlay","pane":${paneIndex},"text":"DONE","color":"green"}' | nc -U "$MAGMUX_SOCK" -w 1 2>/dev/null;`,
95691
95721
  ` else`,
95692
95722
  ` echo '{"cmd":"tint","pane":${paneIndex},"color":"red"}' | nc -U "$MAGMUX_SOCK" -w 1 2>/dev/null;`,
95723
+ ` echo '{"cmd":"overlay","pane":${paneIndex},"text":"FAIL","color":"red"}' | nc -U "$MAGMUX_SOCK" -w 1 2>/dev/null;`,
95693
95724
  ` fi;`,
95694
95725
  `fi;`,
95695
95726
  `exec sleep 86400`
@@ -95729,6 +95760,8 @@ async function runWithGrid(sessionPath, models, input, opts) {
95729
95760
  const spawnArgs = ["-g", gridfilePath, "-S", statusbarPath];
95730
95761
  if (mux.kind === "mtm") {
95731
95762
  spawnArgs.push("-t", "xterm-256color");
95763
+ } else {
95764
+ spawnArgs.push("-w");
95732
95765
  }
95733
95766
  const proc = spawn3(mux.path, spawnArgs, {
95734
95767
  stdio: "inherit",
@@ -96659,25 +96692,27 @@ function shellQuote(s) {
96659
96692
  return "'" + s.replace(/'/g, "'\\''") + "'";
96660
96693
  }
96661
96694
  function renderStatusBar(state) {
96662
- const { model, provider, errorCount, lastError, requestCount, avgRoundtripMs, quotaRemaining } = state;
96695
+ const { model, provider, errorCount, lastError, quotaRemaining } = state;
96663
96696
  const parts = [];
96664
96697
  parts.push("M: claudish ");
96665
- if (provider)
96666
- parts.push(`D: ${provider} `);
96667
96698
  if (model)
96668
96699
  parts.push(`C: ${model} `);
96700
+ if (provider)
96701
+ parts.push(`D: ${provider}`);
96669
96702
  if (errorCount > 0) {
96670
- const errLabel = errorCount === 1 ? " \u26A0 1 error " : ` \u26A0 ${errorCount} errors `;
96671
- parts.push(`R:${errLabel}`);
96703
+ const errLabel = errorCount === 1 ? "\u26A0 1 error" : `\u26A0 ${errorCount} errors`;
96704
+ parts.push(`R: ${errLabel} `);
96672
96705
  if (lastError)
96673
- parts.push(`D: ${lastError} `);
96674
- } else {
96675
- parts.push("G: \u25CF ok ");
96706
+ parts.push(`D: ${lastError}`);
96676
96707
  }
96677
96708
  if (typeof quotaRemaining === "number") {
96678
- const pct = Math.round(quotaRemaining * 100);
96679
- const color = pct > 50 ? "G" : pct > 20 ? "Y" : "R";
96680
- parts.push(`${color}: ${pct}% quota `);
96709
+ const usedPct = Math.round((1 - quotaRemaining) * 100);
96710
+ const barWidth = 8;
96711
+ const usedCols = Math.max(usedPct > 0 ? 1 : 0, Math.round(usedPct / 100 * barWidth));
96712
+ const freeCols = barWidth - usedCols;
96713
+ const bar = "\u2588".repeat(usedCols) + "\u2591".repeat(freeCols);
96714
+ const color = usedPct < 50 ? "g" : usedPct < 80 ? "y" : "r";
96715
+ parts.push(`${color}: ${bar} ${usedPct}%`);
96681
96716
  }
96682
96717
  return parts.join("\t");
96683
96718
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "6.5.3",
3
+ "version": "6.6.2",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.2.0",
3
- "lastUpdated": "2026-04-01",
3
+ "lastUpdated": "2026-04-06",
4
4
  "source": "https://openrouter.ai/models?categories=programming&fmt=cards&order=top-weekly",
5
5
  "models": [
6
6
  {
@@ -13,8 +13,8 @@
13
13
  "priority": 1,
14
14
  "pricing": {
15
15
  "input": "$0.12/1M",
16
- "output": "$1.00/1M",
17
- "average": "$0.56/1M"
16
+ "output": "$0.99/1M",
17
+ "average": "$0.55/1M"
18
18
  },
19
19
  "context": "196K",
20
20
  "maxOutputTokens": 65536,
@@ -34,12 +34,12 @@
34
34
  "category": "vision",
35
35
  "priority": 2,
36
36
  "pricing": {
37
- "input": "$0.42/1M",
38
- "output": "$2.20/1M",
39
- "average": "$1.31/1M"
37
+ "input": "$0.38/1M",
38
+ "output": "$1.72/1M",
39
+ "average": "$1.05/1M"
40
40
  },
41
41
  "context": "262K",
42
- "maxOutputTokens": 65535,
42
+ "maxOutputTokens": 262144,
43
43
  "modality": "text+image->text",
44
44
  "supportsTools": true,
45
45
  "supportsReasoning": true,