claudish 7.54.0 → 7.55.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.
- package/dist/index.js +103 -85
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -729,7 +729,7 @@ var init_onepassword_config = __esm(() => {
|
|
|
729
729
|
});
|
|
730
730
|
|
|
731
731
|
// src/version.ts
|
|
732
|
-
var VERSION = "7.
|
|
732
|
+
var VERSION = "7.55.0";
|
|
733
733
|
|
|
734
734
|
// src/logger.ts
|
|
735
735
|
var exports_logger = {};
|
|
@@ -35268,39 +35268,17 @@ var init_xiaomi_model_dialect = __esm(() => {
|
|
|
35268
35268
|
// src/adapters/dialect-manager.ts
|
|
35269
35269
|
var exports_dialect_manager = {};
|
|
35270
35270
|
__export(exports_dialect_manager, {
|
|
35271
|
-
|
|
35272
|
-
AdapterManager: () => DialectManager
|
|
35271
|
+
resolveModelDialect: () => resolveModelDialect
|
|
35273
35272
|
});
|
|
35274
|
-
|
|
35275
|
-
|
|
35276
|
-
|
|
35277
|
-
|
|
35278
|
-
|
|
35279
|
-
this.adapters = [
|
|
35280
|
-
new GrokModelDialect(modelId, wireFormat),
|
|
35281
|
-
new GeminiAPIFormat(modelId, wireFormat),
|
|
35282
|
-
new CodexAPIFormat(modelId, wireFormat),
|
|
35283
|
-
new OpenAIAPIFormat(modelId, wireFormat),
|
|
35284
|
-
new QwenModelDialect(modelId, wireFormat),
|
|
35285
|
-
new MiniMaxModelDialect(modelId, wireFormat),
|
|
35286
|
-
new DeepSeekModelDialect(modelId, wireFormat),
|
|
35287
|
-
new GLMModelDialect(modelId, wireFormat),
|
|
35288
|
-
new XiaomiModelDialect(modelId, wireFormat)
|
|
35289
|
-
];
|
|
35290
|
-
this.defaultAdapter = new DefaultAPIFormat(modelId, wireFormat);
|
|
35291
|
-
}
|
|
35292
|
-
getAdapter() {
|
|
35293
|
-
for (const adapter of this.adapters) {
|
|
35294
|
-
if (adapter.shouldHandle(this.defaultAdapter.getModelId())) {
|
|
35295
|
-
return adapter;
|
|
35296
|
-
}
|
|
35297
|
-
}
|
|
35298
|
-
return this.defaultAdapter;
|
|
35299
|
-
}
|
|
35300
|
-
needsTransformation() {
|
|
35301
|
-
return this.getAdapter() !== this.defaultAdapter;
|
|
35273
|
+
function resolveModelDialect(modelId, wireFormat) {
|
|
35274
|
+
for (const make of DIALECT_FACTORIES) {
|
|
35275
|
+
const dialect = make(modelId, wireFormat);
|
|
35276
|
+
if (dialect.shouldHandle(modelId))
|
|
35277
|
+
return dialect;
|
|
35302
35278
|
}
|
|
35279
|
+
return new DefaultAPIFormat(modelId, wireFormat);
|
|
35303
35280
|
}
|
|
35281
|
+
var DIALECT_FACTORIES;
|
|
35304
35282
|
var init_dialect_manager = __esm(() => {
|
|
35305
35283
|
init_base_api_format();
|
|
35306
35284
|
init_codex_api_format();
|
|
@@ -35312,6 +35290,17 @@ var init_dialect_manager = __esm(() => {
|
|
|
35312
35290
|
init_openai_api_format();
|
|
35313
35291
|
init_qwen_model_dialect();
|
|
35314
35292
|
init_xiaomi_model_dialect();
|
|
35293
|
+
DIALECT_FACTORIES = [
|
|
35294
|
+
(m, w) => new GrokModelDialect(m, w),
|
|
35295
|
+
(m, w) => new GeminiAPIFormat(m, w),
|
|
35296
|
+
(m, w) => new CodexAPIFormat(m, w),
|
|
35297
|
+
(m, w) => new OpenAIAPIFormat(m, w),
|
|
35298
|
+
(m, w) => new QwenModelDialect(m, w),
|
|
35299
|
+
(m, w) => new MiniMaxModelDialect(m, w),
|
|
35300
|
+
(m, w) => new DeepSeekModelDialect(m, w),
|
|
35301
|
+
(m, w) => new GLMModelDialect(m, w),
|
|
35302
|
+
(m, w) => new XiaomiModelDialect(m, w)
|
|
35303
|
+
];
|
|
35315
35304
|
});
|
|
35316
35305
|
|
|
35317
35306
|
// src/auth/quota/types.ts
|
|
@@ -37534,6 +37523,9 @@ class OpenAIProviderTransport {
|
|
|
37534
37523
|
}
|
|
37535
37524
|
return `${this.provider.baseUrl}${this.provider.apiPath}`;
|
|
37536
37525
|
}
|
|
37526
|
+
overrideStreamFormat() {
|
|
37527
|
+
return this.provider.streamFormatOverride;
|
|
37528
|
+
}
|
|
37537
37529
|
async getHeaders() {
|
|
37538
37530
|
const headers = {};
|
|
37539
37531
|
if (this.apiKey) {
|
|
@@ -39867,6 +39859,44 @@ data: {"type":"ping"}
|
|
|
39867
39859
|
let insideThinkingBlock = false;
|
|
39868
39860
|
let thinkingBlocksSuppressed = 0;
|
|
39869
39861
|
let suppressedFrame = false;
|
|
39862
|
+
let highestSeenIndex = -1;
|
|
39863
|
+
const remappedBlocks = new Map;
|
|
39864
|
+
const trackIndex = (idx) => {
|
|
39865
|
+
if (idx > highestSeenIndex)
|
|
39866
|
+
highestSeenIndex = idx;
|
|
39867
|
+
};
|
|
39868
|
+
const emitIndexed = (controller2, data, line) => {
|
|
39869
|
+
if (typeof data.index !== "number") {
|
|
39870
|
+
enqueueData(controller2, data, line);
|
|
39871
|
+
return;
|
|
39872
|
+
}
|
|
39873
|
+
if (data.type === "content_block_start") {
|
|
39874
|
+
const expected = highestSeenIndex + 1;
|
|
39875
|
+
if (data.index !== expected) {
|
|
39876
|
+
log(`[AnthropicSSE] content_block_start index ${data.index} remapped to ${expected} (model=${opts.modelName})`);
|
|
39877
|
+
remappedBlocks.set(data.index, expected);
|
|
39878
|
+
const remapped2 = { ...data, index: expected };
|
|
39879
|
+
enqueueData(controller2, remapped2, `data: ${JSON.stringify(remapped2)}`);
|
|
39880
|
+
} else {
|
|
39881
|
+
enqueueData(controller2, data, line);
|
|
39882
|
+
}
|
|
39883
|
+
trackIndex(expected);
|
|
39884
|
+
return;
|
|
39885
|
+
}
|
|
39886
|
+
const remapped = remappedBlocks.get(data.index);
|
|
39887
|
+
if (data.type === "content_block_stop")
|
|
39888
|
+
remappedBlocks.delete(data.index);
|
|
39889
|
+
if (remapped !== undefined) {
|
|
39890
|
+
const modified = { ...data, index: remapped };
|
|
39891
|
+
enqueueData(controller2, modified, `data: ${JSON.stringify(modified)}`);
|
|
39892
|
+
} else if (data.index > highestSeenIndex) {
|
|
39893
|
+
log(`[AnthropicSSE] Dropping orphan ${data.type} at index ${data.index} (no open block \u2014 model=${opts.modelName})`);
|
|
39894
|
+
pendingEventLine = null;
|
|
39895
|
+
suppressedFrame = true;
|
|
39896
|
+
} else {
|
|
39897
|
+
enqueueData(controller2, data, line);
|
|
39898
|
+
}
|
|
39899
|
+
};
|
|
39870
39900
|
while (true) {
|
|
39871
39901
|
const { done, value } = await reader.read();
|
|
39872
39902
|
if (done)
|
|
@@ -39921,18 +39951,7 @@ data: ${JSON.stringify({
|
|
|
39921
39951
|
suppressedFrame = true;
|
|
39922
39952
|
continue;
|
|
39923
39953
|
}
|
|
39924
|
-
|
|
39925
|
-
const reindexed = data.index - thinkingBlocksSuppressed;
|
|
39926
|
-
const modifiedLine = `data: ${JSON.stringify({ ...data, index: reindexed })}`;
|
|
39927
|
-
if (!isClosed) {
|
|
39928
|
-
flushPendingEvent(controller);
|
|
39929
|
-
controller.enqueue(encoder.encode(`${modifiedLine}
|
|
39930
|
-
`));
|
|
39931
|
-
noteLifecycle(data, reindexed);
|
|
39932
|
-
}
|
|
39933
|
-
} else {
|
|
39934
|
-
enqueueData(controller, data, line);
|
|
39935
|
-
}
|
|
39954
|
+
emitIndexed(controller, data, line);
|
|
39936
39955
|
} catch {
|
|
39937
39956
|
if (!isClosed) {
|
|
39938
39957
|
flushPendingEvent(controller);
|
|
@@ -39964,47 +39983,44 @@ data: ${JSON.stringify({
|
|
|
39964
39983
|
}
|
|
39965
39984
|
return;
|
|
39966
39985
|
}
|
|
39967
|
-
|
|
39968
|
-
|
|
39969
|
-
|
|
39970
|
-
|
|
39971
|
-
|
|
39972
|
-
|
|
39973
|
-
|
|
39974
|
-
|
|
39975
|
-
|
|
39976
|
-
|
|
39977
|
-
|
|
39978
|
-
|
|
39979
|
-
|
|
39980
|
-
|
|
39981
|
-
|
|
39982
|
-
|
|
39983
|
-
|
|
39984
|
-
|
|
39985
|
-
|
|
39986
|
-
|
|
39987
|
-
|
|
39988
|
-
|
|
39989
|
-
|
|
39986
|
+
emitIndexed(controller, data, line);
|
|
39987
|
+
try {
|
|
39988
|
+
if (data.message?.usage) {
|
|
39989
|
+
inputTokens = data.message.usage.input_tokens || inputTokens;
|
|
39990
|
+
outputTokens = data.message.usage.output_tokens || outputTokens;
|
|
39991
|
+
}
|
|
39992
|
+
if (data.usage) {
|
|
39993
|
+
inputTokens = data.usage.input_tokens || inputTokens;
|
|
39994
|
+
outputTokens = data.usage.output_tokens || outputTokens;
|
|
39995
|
+
}
|
|
39996
|
+
if (data.type === "content_block_delta" && data.delta?.type === "text_delta") {
|
|
39997
|
+
const txt = data.delta.text || "";
|
|
39998
|
+
opts.onAssistantText?.(txt, "text");
|
|
39999
|
+
textChunks++;
|
|
40000
|
+
log(`[AnthropicSSE] Text chunk: "${txt.substring(0, 30).replace(/\n/g, "\\n")}" (${txt.length} chars)`);
|
|
40001
|
+
}
|
|
40002
|
+
if (data.type === "content_block_start" && data.content_block?.type === "tool_use") {
|
|
40003
|
+
toolUseBlocks++;
|
|
40004
|
+
opts.onToolCallObserved?.(data.content_block.name);
|
|
40005
|
+
log(`[AnthropicSSE] Tool use: ${data.content_block.name}`);
|
|
40006
|
+
}
|
|
40007
|
+
if (data.type === "message_delta" && data.delta?.stop_reason) {
|
|
40008
|
+
stopReason = data.delta.stop_reason;
|
|
40009
|
+
}
|
|
40010
|
+
} catch {}
|
|
39990
40011
|
} catch {
|
|
39991
40012
|
if (!isClosed) {
|
|
39992
40013
|
controller.enqueue(encoder.encode(`${line}
|
|
39993
40014
|
`));
|
|
39994
40015
|
}
|
|
39995
40016
|
}
|
|
39996
|
-
} else
|
|
40017
|
+
} else {
|
|
39997
40018
|
if (line.startsWith("event:")) {
|
|
39998
40019
|
pendingEventLine = line;
|
|
39999
40020
|
} else if (line.trim() === "" && suppressedFrame) {
|
|
40000
40021
|
suppressedFrame = false;
|
|
40001
40022
|
} else if (!isClosed) {
|
|
40002
40023
|
controller.enqueue(encoder.encode(`${line}
|
|
40003
|
-
`));
|
|
40004
|
-
}
|
|
40005
|
-
} else {
|
|
40006
|
-
if (!isClosed) {
|
|
40007
|
-
controller.enqueue(encoder.encode(`${line}
|
|
40008
40024
|
`));
|
|
40009
40025
|
}
|
|
40010
40026
|
}
|
|
@@ -41484,7 +41500,7 @@ function extractAuthHeaders(c) {
|
|
|
41484
41500
|
|
|
41485
41501
|
class ComposedHandler {
|
|
41486
41502
|
provider;
|
|
41487
|
-
|
|
41503
|
+
resolvedDialect;
|
|
41488
41504
|
explicitAdapter;
|
|
41489
41505
|
modelAdapter;
|
|
41490
41506
|
middlewareManager;
|
|
@@ -41506,8 +41522,8 @@ class ComposedHandler {
|
|
|
41506
41522
|
this.options = options;
|
|
41507
41523
|
this.explicitAdapter = options.adapter;
|
|
41508
41524
|
this.isInteractive = options.isInteractive ?? false;
|
|
41509
|
-
this.
|
|
41510
|
-
const resolvedModelAdapter = this.
|
|
41525
|
+
this.resolvedDialect = resolveModelDialect(this.bareModelName, this.explicitAdapter?.getStreamFormat());
|
|
41526
|
+
const resolvedModelAdapter = this.resolvedDialect;
|
|
41511
41527
|
if (resolvedModelAdapter.getName() !== "DefaultAPIFormat") {
|
|
41512
41528
|
this.modelAdapter = resolvedModelAdapter;
|
|
41513
41529
|
}
|
|
@@ -41525,7 +41541,7 @@ class ComposedHandler {
|
|
|
41525
41541
|
});
|
|
41526
41542
|
}
|
|
41527
41543
|
getAdapter() {
|
|
41528
|
-
return this.explicitAdapter || this.
|
|
41544
|
+
return this.explicitAdapter || this.resolvedDialect;
|
|
41529
41545
|
}
|
|
41530
41546
|
getModelContextWindow() {
|
|
41531
41547
|
return this.modelAdapter?.getContextWindow() ?? this.getAdapter().getContextWindow();
|
|
@@ -43484,6 +43500,9 @@ class AnthropicProviderTransport {
|
|
|
43484
43500
|
getEndpoint() {
|
|
43485
43501
|
return `${this.provider.baseUrl}${this.provider.apiPath}`;
|
|
43486
43502
|
}
|
|
43503
|
+
overrideStreamFormat() {
|
|
43504
|
+
return this.provider.streamFormatOverride;
|
|
43505
|
+
}
|
|
43487
43506
|
async getHeaders() {
|
|
43488
43507
|
const headers = {
|
|
43489
43508
|
"anthropic-version": "2023-06-01"
|
|
@@ -43830,7 +43849,8 @@ function buildComplexHandler(ep, ctx, apiKey, baseUrl) {
|
|
|
43830
43849
|
apiKeyEnvVar: ctx.provider.apiKeyEnvVar,
|
|
43831
43850
|
prefixes: ctx.provider.prefixes ?? [],
|
|
43832
43851
|
headers: ep.headers,
|
|
43833
|
-
authScheme: ep.authScheme ?? "bearer"
|
|
43852
|
+
authScheme: ep.authScheme ?? "bearer",
|
|
43853
|
+
streamFormatOverride: ep.streamFormat
|
|
43834
43854
|
};
|
|
43835
43855
|
const transport = new OpenAIProviderTransport(remoteProvider, finalModel, apiKey);
|
|
43836
43856
|
const adapter = new OpenAIAPIFormat(finalModel);
|
|
@@ -43848,7 +43868,8 @@ function buildComplexHandler(ep, ctx, apiKey, baseUrl) {
|
|
|
43848
43868
|
apiKeyEnvVar: ctx.provider.apiKeyEnvVar,
|
|
43849
43869
|
prefixes: ctx.provider.prefixes ?? [],
|
|
43850
43870
|
headers: ep.headers,
|
|
43851
|
-
authScheme: ep.authScheme ?? "x-api-key"
|
|
43871
|
+
authScheme: ep.authScheme ?? "x-api-key",
|
|
43872
|
+
streamFormatOverride: ep.streamFormat
|
|
43852
43873
|
};
|
|
43853
43874
|
const transport = new AnthropicProviderTransport(remoteProvider, apiKey);
|
|
43854
43875
|
const adapter = new AnthropicAPIFormat(finalModel, ctx.provider.name);
|
|
@@ -48066,8 +48087,7 @@ var init_local_adapter = __esm(() => {
|
|
|
48066
48087
|
constructor(modelId, providerName) {
|
|
48067
48088
|
super(modelId);
|
|
48068
48089
|
this.providerName = providerName;
|
|
48069
|
-
|
|
48070
|
-
this.innerAdapter = manager.getAdapter();
|
|
48090
|
+
this.innerAdapter = resolveModelDialect(modelId);
|
|
48071
48091
|
}
|
|
48072
48092
|
processTextContent(textContent, accumulatedText) {
|
|
48073
48093
|
return this.innerAdapter.processTextContent(textContent, accumulatedText);
|
|
@@ -48235,8 +48255,7 @@ var init_openrouter_api_format = __esm(() => {
|
|
|
48235
48255
|
innerAdapter;
|
|
48236
48256
|
constructor(modelId) {
|
|
48237
48257
|
super(modelId);
|
|
48238
|
-
|
|
48239
|
-
this.innerAdapter = manager.getAdapter();
|
|
48258
|
+
this.innerAdapter = resolveModelDialect(modelId);
|
|
48240
48259
|
}
|
|
48241
48260
|
modelSupportsReasoning() {
|
|
48242
48261
|
const id = this.modelId.toLowerCase();
|
|
@@ -72075,9 +72094,8 @@ async function probeModelRouting(models, jsonOutput, options = { live: true, tim
|
|
|
72075
72094
|
formatAdapterName = "OpenAIAPIFormat";
|
|
72076
72095
|
declaredStreamFormat = "openai-sse";
|
|
72077
72096
|
}
|
|
72078
|
-
const {
|
|
72079
|
-
const
|
|
72080
|
-
const modelTranslator = adapterManager.getAdapter();
|
|
72097
|
+
const { resolveModelDialect: resolveModelDialect2 } = await Promise.resolve().then(() => (init_dialect_manager(), exports_dialect_manager));
|
|
72098
|
+
const modelTranslator = resolveModelDialect2(modelName);
|
|
72081
72099
|
const modelTranslatorName = modelTranslator.getName();
|
|
72082
72100
|
const TRANSPORT_OVERRIDES = {
|
|
72083
72101
|
litellm: "openai-sse",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudish",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.55.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",
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
"ai"
|
|
61
61
|
],
|
|
62
62
|
"optionalDependencies": {
|
|
63
|
-
"@claudish/magmux-darwin-arm64": "7.
|
|
64
|
-
"@claudish/magmux-darwin-x64": "7.
|
|
65
|
-
"@claudish/magmux-linux-arm64": "7.
|
|
66
|
-
"@claudish/magmux-linux-x64": "7.
|
|
63
|
+
"@claudish/magmux-darwin-arm64": "7.55.0",
|
|
64
|
+
"@claudish/magmux-darwin-x64": "7.55.0",
|
|
65
|
+
"@claudish/magmux-linux-arm64": "7.55.0",
|
|
66
|
+
"@claudish/magmux-linux-x64": "7.55.0"
|
|
67
67
|
},
|
|
68
68
|
"author": "Jack Rudenko <i@madappgang.com>",
|
|
69
69
|
"license": "MIT",
|