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 +16 -3
- package/dist/index.js +84 -11
- package/package.json +5 -5
package/AI_AGENT_GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Claudish AI Agent Usage Guide
|
|
2
2
|
|
|
3
|
-
**Version:**
|
|
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:**
|
|
735
|
-
**Last Updated:**
|
|
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 (
|
|
30047
|
-
|
|
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.
|
|
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
|
-
|
|
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 (
|
|
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.
|
|
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.
|
|
64
|
-
"@claudish/magmux-darwin-x64": "7.0.
|
|
65
|
-
"@claudish/magmux-linux-arm64": "7.0.
|
|
66
|
-
"@claudish/magmux-linux-x64": "7.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",
|