claudish 6.6.0 → 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.6.0", 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();
@@ -96663,25 +96692,27 @@ function shellQuote(s) {
96663
96692
  return "'" + s.replace(/'/g, "'\\''") + "'";
96664
96693
  }
96665
96694
  function renderStatusBar(state) {
96666
- const { model, provider, errorCount, lastError, requestCount, avgRoundtripMs, quotaRemaining } = state;
96695
+ const { model, provider, errorCount, lastError, quotaRemaining } = state;
96667
96696
  const parts = [];
96668
96697
  parts.push("M: claudish ");
96669
- if (provider)
96670
- parts.push(`D: ${provider} `);
96671
96698
  if (model)
96672
96699
  parts.push(`C: ${model} `);
96700
+ if (provider)
96701
+ parts.push(`D: ${provider}`);
96673
96702
  if (errorCount > 0) {
96674
- const errLabel = errorCount === 1 ? " \u26A0 1 error " : ` \u26A0 ${errorCount} errors `;
96675
- parts.push(`R:${errLabel}`);
96703
+ const errLabel = errorCount === 1 ? "\u26A0 1 error" : `\u26A0 ${errorCount} errors`;
96704
+ parts.push(`R: ${errLabel} `);
96676
96705
  if (lastError)
96677
- parts.push(`D: ${lastError} `);
96678
- } else {
96679
- parts.push("G: \u25CF ok ");
96706
+ parts.push(`D: ${lastError}`);
96680
96707
  }
96681
96708
  if (typeof quotaRemaining === "number") {
96682
- const pct = Math.round(quotaRemaining * 100);
96683
- const color = pct > 50 ? "G" : pct > 20 ? "Y" : "R";
96684
- 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}%`);
96685
96716
  }
96686
96717
  return parts.join("\t");
96687
96718
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "6.6.0",
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,