claudish 7.0.0 → 7.0.1

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/AI_AGENT_GUIDE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Claudish AI Agent Usage Guide
2
2
 
3
- **Version:** 2.2.0
3
+ **Version:** 7.0.0
4
4
  **Target Audience:** AI Agents running within Claude Code
5
5
  **Purpose:** Quick reference for using Claudish CLI and MCP server in agentic workflows
6
6
 
@@ -65,6 +65,18 @@ claudish --model vertex/qwen/qwen3-coder-480b-a35b-instruct-maas "implement"
65
65
  claudish --model vertex/openai/gpt-oss-120b-maas "reason"
66
66
  ```
67
67
 
68
+ ### Default provider (v7.0.0+)
69
+
70
+ Bare model names (no `provider@` prefix) route through the configured default provider. Override per-invocation:
71
+
72
+ ```bash
73
+ claudish --default-provider litellm --model minimax-m2.5 "task"
74
+ ```
75
+
76
+ Explicit `provider@model` syntax always bypasses `defaultProvider` and routes directly to the named provider.
77
+
78
+ Custom endpoints can be registered in `~/.claudish/config.json`. See [docs/settings-reference.md](../../docs/settings-reference.md) for the full schema.
79
+
68
80
  ## Prerequisites
69
81
 
70
82
  1. **Install Claudish:**
@@ -251,6 +263,7 @@ for (const model of models) {
251
263
 
252
264
  | Flag | Description | Default |
253
265
  |------|-------------|---------|
266
+ | `--default-provider <name>` | Override default provider for bare model routing (v7.0.0+) | Auto-detected |
254
267
  | `--quiet` / `-q` | Suppress logs | Enabled in single-shot |
255
268
  | `--verbose` / `-v` | Show logs | Enabled in interactive |
256
269
  | `--debug` / `-d` | Debug logging to file | Disabled |
@@ -731,6 +744,6 @@ claudish --help-ai > claudish-agent-guide.md
731
744
 
732
745
  ---
733
746
 
734
- **Version:** 2.2.0
735
- **Last Updated:** January 22, 2026
747
+ **Version:** 7.0.0
748
+ **Last Updated:** April 14, 2026
736
749
  **Maintained by:** MadAppGang
package/dist/index.js CHANGED
@@ -26654,6 +26654,9 @@ class BaseAPIFormat {
26654
26654
  supportsVision() {
26655
26655
  return true;
26656
26656
  }
26657
+ shouldFilterThinking() {
26658
+ return false;
26659
+ }
26657
26660
  truncateToolNames(request) {
26658
26661
  const limit = this.getToolNameLimit();
26659
26662
  if (!limit || !request.tools)
@@ -28446,6 +28449,9 @@ var init_minimax_model_dialect = __esm(() => {
28446
28449
  supportsVision() {
28447
28450
  return lookupModel(this.modelId)?.supportsVision ?? false;
28448
28451
  }
28452
+ shouldFilterThinking() {
28453
+ return true;
28454
+ }
28449
28455
  shouldHandle(modelId) {
28450
28456
  return matchesModelFamily(modelId, "minimax");
28451
28457
  }
@@ -30007,6 +30013,7 @@ function createAnthropicPassthroughStream(c, response, opts) {
30007
30013
  let isClosed = false;
30008
30014
  let lastActivity = Date.now();
30009
30015
  let pingInterval = null;
30016
+ const filterThinking = opts.adapter?.shouldFilterThinking() ?? false;
30010
30017
  return c.body(new ReadableStream({
30011
30018
  async start(controller) {
30012
30019
  const sendPing = () => {
@@ -30032,6 +30039,8 @@ data: {"type":"ping"}
30032
30039
  let textChunks = 0;
30033
30040
  let toolUseBlocks = 0;
30034
30041
  let stopReason = null;
30042
+ let insideThinkingBlock = false;
30043
+ let thinkingBlocksSuppressed = 0;
30035
30044
  while (true) {
30036
30045
  const { done, value } = await reader.read();
30037
30046
  if (done)
@@ -30043,12 +30052,73 @@ data: {"type":"ping"}
30043
30052
  buffer = lines.pop() || "";
30044
30053
  for (const line of lines) {
30045
30054
  totalLines++;
30046
- if (!isClosed) {
30047
- controller.enqueue(encoder.encode(line + `
30055
+ if (filterThinking && line.startsWith("data: ")) {
30056
+ try {
30057
+ const data = JSON.parse(line.slice(6));
30058
+ if (data.type === "content_block_start" && data.content_block?.type === "thinking") {
30059
+ insideThinkingBlock = true;
30060
+ thinkingBlocksSuppressed++;
30061
+ log(`[AnthropicSSE] Filtering thinking block at index ${data.index}`);
30062
+ continue;
30063
+ }
30064
+ if (insideThinkingBlock && data.type === "content_block_stop") {
30065
+ insideThinkingBlock = false;
30066
+ continue;
30067
+ }
30068
+ if (insideThinkingBlock) {
30069
+ continue;
30070
+ }
30071
+ if (typeof data.index === "number" && thinkingBlocksSuppressed > 0) {
30072
+ const reindexed = data.index - thinkingBlocksSuppressed;
30073
+ const modifiedLine = "data: " + JSON.stringify({ ...data, index: reindexed });
30074
+ if (!isClosed) {
30075
+ controller.enqueue(encoder.encode(modifiedLine + `
30076
+ `));
30077
+ }
30078
+ } else {
30079
+ if (!isClosed) {
30080
+ controller.enqueue(encoder.encode(line + `
30048
30081
  `));
30082
+ }
30083
+ }
30084
+ } catch {
30085
+ if (!isClosed) {
30086
+ controller.enqueue(encoder.encode(line + `
30087
+ `));
30088
+ }
30089
+ }
30090
+ } else {
30091
+ if (!isClosed) {
30092
+ controller.enqueue(encoder.encode(line + `
30093
+ `));
30094
+ }
30095
+ if (!filterThinking && line.startsWith("data: ")) {
30096
+ try {
30097
+ const data = JSON.parse(line.slice(6));
30098
+ if (data.message?.usage) {
30099
+ inputTokens = data.message.usage.input_tokens || inputTokens;
30100
+ outputTokens = data.message.usage.output_tokens || outputTokens;
30101
+ }
30102
+ if (data.usage) {
30103
+ inputTokens = data.usage.input_tokens || inputTokens;
30104
+ outputTokens = data.usage.output_tokens || outputTokens;
30105
+ }
30106
+ if (data.type === "content_block_delta" && data.delta?.type === "text_delta") {
30107
+ const txt = data.delta.text || "";
30108
+ textChunks++;
30109
+ log(`[AnthropicSSE] Text chunk: "${txt.substring(0, 30).replace(/\n/g, "\\n")}" (${txt.length} chars)`);
30110
+ }
30111
+ if (data.type === "content_block_start" && data.content_block?.type === "tool_use") {
30112
+ toolUseBlocks++;
30113
+ log(`[AnthropicSSE] Tool use: ${data.content_block.name}`);
30114
+ }
30115
+ if (data.type === "message_delta" && data.delta?.stop_reason) {
30116
+ stopReason = data.delta.stop_reason;
30117
+ }
30118
+ } catch {}
30119
+ }
30049
30120
  }
30050
- if (line.startsWith("data: ")) {
30051
- log(`[SSE:anthropic] ${line.slice(6).substring(0, 300)}`);
30121
+ if (filterThinking && line.startsWith("data: ")) {
30052
30122
  try {
30053
30123
  const data = JSON.parse(line.slice(6));
30054
30124
  if (data.message?.usage) {
@@ -30060,9 +30130,7 @@ data: {"type":"ping"}
30060
30130
  outputTokens = data.usage.output_tokens || outputTokens;
30061
30131
  }
30062
30132
  if (data.type === "content_block_delta" && data.delta?.type === "text_delta") {
30063
- const txt = data.delta.text || "";
30064
30133
  textChunks++;
30065
- log(`[AnthropicSSE] Text chunk: "${txt.substring(0, 30).replace(/\n/g, "\\n")}" (${txt.length} chars)`);
30066
30134
  }
30067
30135
  if (data.type === "content_block_start" && data.content_block?.type === "tool_use") {
30068
30136
  toolUseBlocks++;
@@ -30075,7 +30143,7 @@ data: {"type":"ping"}
30075
30143
  }
30076
30144
  }
30077
30145
  }
30078
- log(`[AnthropicSSE] Stream complete for ${opts.modelName}: ${totalLines} lines, ${textChunks} text chunks, ${toolUseBlocks} tool_use blocks, stop_reason=${stopReason}`);
30146
+ log(`[AnthropicSSE] Stream complete for ${opts.modelName}: ${totalLines} lines, ${textChunks} text chunks, ${toolUseBlocks} tool_use blocks, stop_reason=${stopReason}` + (filterThinking ? `, filtered ${thinkingBlocksSuppressed} thinking blocks` : ""));
30079
30147
  if (opts.onTokenUpdate) {
30080
30148
  opts.onTokenUpdate(inputTokens, outputTokens);
30081
30149
  }
@@ -30993,7 +31061,7 @@ var init_profile_config = __esm(() => {
30993
31061
  });
30994
31062
 
30995
31063
  // src/version.ts
30996
- var VERSION = "7.0.0";
31064
+ var VERSION = "7.0.1";
30997
31065
 
30998
31066
  // src/telemetry.ts
30999
31067
  var exports_telemetry = {};
@@ -33248,7 +33316,8 @@ class ComposedHandler {
33248
33316
  case "anthropic-sse":
33249
33317
  return createAnthropicPassthroughStream(c, response, {
33250
33318
  modelName: this.bareModelName,
33251
- onTokenUpdate
33319
+ onTokenUpdate,
33320
+ adapter
33252
33321
  });
33253
33322
  case "gemini-sse": {
33254
33323
  const onToolCall = (toolId, name, thoughtSignature) => {
@@ -109850,7 +109919,10 @@ Usage: claudish --list-models --provider <slug>`);
109850
109919
  } else if ((arg === "-f" || arg === "--file") && i + 1 < args.length) {
109851
109920
  config3.inputFile = args[++i];
109852
109921
  } else if (arg === "--") {
109853
- config3.claudeArgs.push(...args.slice(i + 1));
109922
+ const rest = args.slice(i + 1);
109923
+ config3.claudeArgs.push(...rest);
109924
+ if (rest.length > 0)
109925
+ config3._hasPositionalPrompt = true;
109854
109926
  break;
109855
109927
  } else if (arg.startsWith("-")) {
109856
109928
  config3.claudeArgs.push(arg);
@@ -109859,10 +109931,11 @@ Usage: claudish --list-models --provider <slug>`);
109859
109931
  }
109860
109932
  } else {
109861
109933
  config3.claudeArgs.push(arg);
109934
+ config3._hasPositionalPrompt = true;
109862
109935
  }
109863
109936
  i++;
109864
109937
  }
109865
- if ((!config3.claudeArgs || config3.claudeArgs.length === 0) && !config3.stdin) {
109938
+ if (!config3._hasPositionalPrompt && !config3.stdin) {
109866
109939
  config3.interactive = true;
109867
109940
  }
109868
109941
  if (config3.monitor) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "7.0.0",
3
+ "version": "7.0.1",
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",
@@ -60,10 +60,10 @@
60
60
  "ai"
61
61
  ],
62
62
  "optionalDependencies": {
63
- "@claudish/magmux-darwin-arm64": "7.0.0",
64
- "@claudish/magmux-darwin-x64": "7.0.0",
65
- "@claudish/magmux-linux-arm64": "7.0.0",
66
- "@claudish/magmux-linux-x64": "7.0.0"
63
+ "@claudish/magmux-darwin-arm64": "7.0.1",
64
+ "@claudish/magmux-darwin-x64": "7.0.1",
65
+ "@claudish/magmux-linux-arm64": "7.0.1",
66
+ "@claudish/magmux-linux-x64": "7.0.1"
67
67
  },
68
68
  "author": "Jack Rudenko <i@madappgang.com>",
69
69
  "license": "MIT",