claudish 9.3.0 → 9.3.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 +56 -21
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -715,7 +715,7 @@ var init_onepassword_config = __esm(() => {
|
|
|
715
715
|
});
|
|
716
716
|
|
|
717
717
|
// src/version.ts
|
|
718
|
-
var VERSION = "9.3.
|
|
718
|
+
var VERSION = "9.3.2";
|
|
719
719
|
|
|
720
720
|
// src/logger.ts
|
|
721
721
|
import { appendFile, existsSync as existsSync2, mkdirSync, readdirSync, unlinkSync, writeFileSync as writeFileSync2 } from "fs";
|
|
@@ -34445,7 +34445,7 @@ class ComposedHandler {
|
|
|
34445
34445
|
requestPayload = this.provider.transformPayload(requestPayload, claudeRequest);
|
|
34446
34446
|
}
|
|
34447
34447
|
const endpoint = this.provider.getEndpoint(this.targetModel);
|
|
34448
|
-
const headers = await this.provider.getHeaders();
|
|
34448
|
+
const headers = await this.provider.getHeaders(payload);
|
|
34449
34449
|
const serialized = this.provider.serializeBody?.(requestPayload);
|
|
34450
34450
|
headers["Content-Type"] = serialized?.contentType ?? "application/json";
|
|
34451
34451
|
log(`[${this.provider.displayName}] Calling API: ${endpoint}`);
|
|
@@ -34515,7 +34515,7 @@ class ComposedHandler {
|
|
|
34515
34515
|
log(`[${this.provider.displayName}] Parameter rejected \u2014 retrying: ${recovery.note}`);
|
|
34516
34516
|
requestPayload = recovery.payload;
|
|
34517
34517
|
const retrySerialized = this.provider.serializeBody?.(requestPayload);
|
|
34518
|
-
const retryHeaders = await this.provider.getHeaders();
|
|
34518
|
+
const retryHeaders = await this.provider.getHeaders(payload);
|
|
34519
34519
|
retryHeaders["Content-Type"] = retrySerialized?.contentType ?? "application/json";
|
|
34520
34520
|
const retryResp = await fetch(endpoint, {
|
|
34521
34521
|
method: "POST",
|
|
@@ -34536,7 +34536,7 @@ class ComposedHandler {
|
|
|
34536
34536
|
log(`[${this.provider.displayName}] Got 401, forcing auth refresh and retrying`);
|
|
34537
34537
|
try {
|
|
34538
34538
|
await this.provider.forceRefreshAuth();
|
|
34539
|
-
const retryHeaders = await this.provider.getHeaders();
|
|
34539
|
+
const retryHeaders = await this.provider.getHeaders(payload);
|
|
34540
34540
|
retryHeaders["Content-Type"] = serialized?.contentType ?? "application/json";
|
|
34541
34541
|
const retryInit = this.provider.getRequestInit?.() || {};
|
|
34542
34542
|
const retryResp = await fetch(endpoint, {
|
|
@@ -35695,21 +35695,31 @@ var init_ollamacloud = __esm(() => {
|
|
|
35695
35695
|
init_probe_discovery();
|
|
35696
35696
|
});
|
|
35697
35697
|
|
|
35698
|
-
// src/providers/transport/
|
|
35698
|
+
// src/providers/transport/conversation-key.ts
|
|
35699
35699
|
import { createHash as createHash5, randomBytes as randomBytes6 } from "crypto";
|
|
35700
|
-
|
|
35700
|
+
function conversationKey(claudeRequest) {
|
|
35701
|
+
const sessionId = extractSessionId(claudeRequest);
|
|
35702
|
+
if (!sessionId)
|
|
35703
|
+
return `claudish_${FALLBACK_CONVERSATION_KEY}`;
|
|
35704
|
+
return `claudish_${createHash5("sha256").update(sessionId).digest("hex").slice(0, 32)}`;
|
|
35705
|
+
}
|
|
35706
|
+
var FALLBACK_CONVERSATION_KEY;
|
|
35707
|
+
var init_conversation_key = __esm(() => {
|
|
35708
|
+
init_harness();
|
|
35709
|
+
FALLBACK_CONVERSATION_KEY = randomBytes6(16).toString("hex");
|
|
35710
|
+
});
|
|
35711
|
+
|
|
35712
|
+
// src/providers/transport/openai-codex.ts
|
|
35713
|
+
var OpenAICodexTransport;
|
|
35701
35714
|
var init_openai_codex = __esm(() => {
|
|
35702
35715
|
init_codex_api_format();
|
|
35703
35716
|
init_model_catalog();
|
|
35704
35717
|
init_authority();
|
|
35705
35718
|
init_billing_probe();
|
|
35706
|
-
|
|
35719
|
+
init_conversation_key();
|
|
35707
35720
|
init_openai();
|
|
35708
|
-
FALLBACK_CONVERSATION_KEY = randomBytes6(16).toString("hex");
|
|
35709
35721
|
OpenAICodexTransport = class OpenAICodexTransport extends OpenAIProviderTransport {
|
|
35710
35722
|
cachedAuth = null;
|
|
35711
|
-
cachedCacheKeyFor;
|
|
35712
|
-
cachedCacheKey = "";
|
|
35713
35723
|
async refreshAuth() {
|
|
35714
35724
|
try {
|
|
35715
35725
|
this.cachedAuth = await credentials.getRequestAuth("openai-codex", { model: "" });
|
|
@@ -35744,14 +35754,7 @@ var init_openai_codex = __esm(() => {
|
|
|
35744
35754
|
return this.cachedAuth?.transformPayload?.(normalizedPayload) ?? normalizedPayload;
|
|
35745
35755
|
}
|
|
35746
35756
|
resolvePromptCacheKey(claudeRequest) {
|
|
35747
|
-
|
|
35748
|
-
if (!sessionId)
|
|
35749
|
-
return `claudish_${FALLBACK_CONVERSATION_KEY}`;
|
|
35750
|
-
if (this.cachedCacheKeyFor !== sessionId) {
|
|
35751
|
-
this.cachedCacheKeyFor = sessionId;
|
|
35752
|
-
this.cachedCacheKey = `claudish_${createHash5("sha256").update(sessionId).digest("hex").slice(0, 32)}`;
|
|
35753
|
-
}
|
|
35754
|
-
return this.cachedCacheKey;
|
|
35757
|
+
return conversationKey(claudeRequest);
|
|
35755
35758
|
}
|
|
35756
35759
|
getContextWindow() {
|
|
35757
35760
|
return lookupModelForProvider(this.modelName, this.name) ?? 0;
|
|
@@ -35759,6 +35762,21 @@ var init_openai_codex = __esm(() => {
|
|
|
35759
35762
|
};
|
|
35760
35763
|
});
|
|
35761
35764
|
|
|
35765
|
+
// src/providers/transport/opencode-zen.ts
|
|
35766
|
+
var OpenCodeZenTransport;
|
|
35767
|
+
var init_opencode_zen = __esm(() => {
|
|
35768
|
+
init_conversation_key();
|
|
35769
|
+
init_openai();
|
|
35770
|
+
OpenCodeZenTransport = class OpenCodeZenTransport extends OpenAIProviderTransport {
|
|
35771
|
+
async getHeaders(claudeRequest) {
|
|
35772
|
+
return {
|
|
35773
|
+
...await super.getHeaders(),
|
|
35774
|
+
"x-opencode-session": conversationKey(claudeRequest)
|
|
35775
|
+
};
|
|
35776
|
+
}
|
|
35777
|
+
};
|
|
35778
|
+
});
|
|
35779
|
+
|
|
35762
35780
|
// src/providers/transport/vertex-oauth.ts
|
|
35763
35781
|
function parseVertexModel(modelId) {
|
|
35764
35782
|
const parts = modelId.split("/");
|
|
@@ -35899,6 +35917,7 @@ var init_provider_profiles = __esm(() => {
|
|
|
35899
35917
|
init_ollamacloud();
|
|
35900
35918
|
init_openai_codex();
|
|
35901
35919
|
init_openai();
|
|
35920
|
+
init_opencode_zen();
|
|
35902
35921
|
init_vertex_oauth();
|
|
35903
35922
|
geminiProfile = {
|
|
35904
35923
|
createHandler(ctx) {
|
|
@@ -36020,7 +36039,7 @@ var init_provider_profiles = __esm(() => {
|
|
|
36020
36039
|
const isGoProvider = ctx.provider.name === "opencode-zen-go";
|
|
36021
36040
|
if (ctx.modelName.toLowerCase().startsWith("gpt-")) {
|
|
36022
36041
|
const responsesProvider = { ...ctx.provider, apiPath: "/v1/responses" };
|
|
36023
|
-
const transport = new
|
|
36042
|
+
const transport = new OpenCodeZenTransport(responsesProvider, ctx.modelName, zenApiKey);
|
|
36024
36043
|
const adapter = new CodexAPIFormat(ctx.modelName);
|
|
36025
36044
|
const handler = new ComposedHandler(transport, ctx.targetModel, ctx.modelName, ctx.port, {
|
|
36026
36045
|
adapter,
|
|
@@ -36030,7 +36049,7 @@ var init_provider_profiles = __esm(() => {
|
|
|
36030
36049
|
log(`[Proxy] Created OpenCode Zen${isGoProvider ? " Go" : ""} (Responses API composed): ${ctx.modelName}`);
|
|
36031
36050
|
return handler;
|
|
36032
36051
|
}
|
|
36033
|
-
const transport = new
|
|
36052
|
+
const transport = new OpenCodeZenTransport(ctx.provider, ctx.modelName, zenApiKey);
|
|
36034
36053
|
const adapter = new OpenAIAPIFormat(ctx.modelName);
|
|
36035
36054
|
const handler = new ComposedHandler(transport, ctx.targetModel, ctx.modelName, ctx.port, {
|
|
36036
36055
|
adapter,
|
|
@@ -40394,6 +40413,8 @@ function teamSlotIdleSeconds(teamSessionId) {
|
|
|
40394
40413
|
return null;
|
|
40395
40414
|
const out = {};
|
|
40396
40415
|
for (const slotId of run.processes.keys()) {
|
|
40416
|
+
if (!run.isRunning(slotId))
|
|
40417
|
+
continue;
|
|
40397
40418
|
const idle = run.idleMsFor(slotId);
|
|
40398
40419
|
if (idle !== null)
|
|
40399
40420
|
out[slotId] = Math.round(idle / 1000);
|
|
@@ -40406,6 +40427,8 @@ function teamSlotActivity(teamSessionId) {
|
|
|
40406
40427
|
return null;
|
|
40407
40428
|
const out = {};
|
|
40408
40429
|
for (const slotId of run.processes.keys()) {
|
|
40430
|
+
if (!run.isRunning(slotId))
|
|
40431
|
+
continue;
|
|
40409
40432
|
const activity = run.activityFor(slotId);
|
|
40410
40433
|
if (activity !== null)
|
|
40411
40434
|
out[slotId] = activity;
|
|
@@ -40418,6 +40441,8 @@ function teamSlotLiveBytes(teamSessionId) {
|
|
|
40418
40441
|
return null;
|
|
40419
40442
|
const out = {};
|
|
40420
40443
|
for (const slotId of run.processes.keys()) {
|
|
40444
|
+
if (!run.isRunning(slotId))
|
|
40445
|
+
continue;
|
|
40421
40446
|
const bytes = run.liveBytesFor(slotId);
|
|
40422
40447
|
if (bytes !== null)
|
|
40423
40448
|
out[slotId] = bytes;
|
|
@@ -40730,7 +40755,6 @@ async function startModels(sessionPath, opts = {}) {
|
|
|
40730
40755
|
return;
|
|
40731
40756
|
captureFinalized = true;
|
|
40732
40757
|
absorb(slotReducer.end());
|
|
40733
|
-
slotReducer.dispose();
|
|
40734
40758
|
outputStream.end();
|
|
40735
40759
|
};
|
|
40736
40760
|
proc.stdout?.on("end", finalizeCapture);
|
|
@@ -40762,12 +40786,21 @@ async function startModels(sessionPath, opts = {}) {
|
|
|
40762
40786
|
const completionPromise = new Promise((resolve) => {
|
|
40763
40787
|
let exitCode = null;
|
|
40764
40788
|
let resolved = false;
|
|
40789
|
+
const settleReducer = () => {
|
|
40790
|
+
if (!reducer)
|
|
40791
|
+
return;
|
|
40792
|
+
const state = statusCache.models[anonId]?.state;
|
|
40793
|
+
const failed = state === "FAILED" || state === "EMPTY";
|
|
40794
|
+
reducer.settle(failed && cancelledSlots.has(anonId) ? "cancelled" : state === "COMPLETED" ? "completed" : state === "TIMEOUT" ? "timeout" : "failed");
|
|
40795
|
+
reducer.dispose();
|
|
40796
|
+
};
|
|
40765
40797
|
const finish = () => {
|
|
40766
40798
|
if (resolved)
|
|
40767
40799
|
return;
|
|
40768
40800
|
if (statusCache.models[anonId].state === "TIMEOUT") {
|
|
40769
40801
|
resolved = true;
|
|
40770
40802
|
reconcileTimedOutOutput(anonId, byteCount, stdoutTail, stderr);
|
|
40803
|
+
settleReducer();
|
|
40771
40804
|
resolve();
|
|
40772
40805
|
return;
|
|
40773
40806
|
}
|
|
@@ -40822,6 +40855,7 @@ async function startModels(sessionPath, opts = {}) {
|
|
|
40822
40855
|
error: undefined
|
|
40823
40856
|
});
|
|
40824
40857
|
}
|
|
40858
|
+
settleReducer();
|
|
40825
40859
|
opts.onStatusChange?.(anonId, statusCache.models[anonId]);
|
|
40826
40860
|
resolve();
|
|
40827
40861
|
};
|
|
@@ -40877,6 +40911,7 @@ async function startModels(sessionPath, opts = {}) {
|
|
|
40877
40911
|
idleMsFor: (slotId) => runtimes.get(slotId)?.getIdleMs() ?? null,
|
|
40878
40912
|
activityFor: (slotId) => runtimes.get(slotId)?.getActivity() ?? null,
|
|
40879
40913
|
liveBytesFor: (slotId) => runtimes.get(slotId)?.getByteCount() ?? null,
|
|
40914
|
+
isRunning: (slotId) => statusCache.models[slotId]?.state === "RUNNING",
|
|
40880
40915
|
cancelledSlots
|
|
40881
40916
|
});
|
|
40882
40917
|
const done = (async () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudish",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.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",
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
"ai"
|
|
61
61
|
],
|
|
62
62
|
"optionalDependencies": {
|
|
63
|
-
"@claudish/magmux-darwin-arm64": "9.3.
|
|
64
|
-
"@claudish/magmux-darwin-x64": "9.3.
|
|
65
|
-
"@claudish/magmux-linux-arm64": "9.3.
|
|
66
|
-
"@claudish/magmux-linux-x64": "9.3.
|
|
63
|
+
"@claudish/magmux-darwin-arm64": "9.3.2",
|
|
64
|
+
"@claudish/magmux-darwin-x64": "9.3.2",
|
|
65
|
+
"@claudish/magmux-linux-arm64": "9.3.2",
|
|
66
|
+
"@claudish/magmux-linux-x64": "9.3.2"
|
|
67
67
|
},
|
|
68
68
|
"author": "Jack Rudenko <i@madappgang.com>",
|
|
69
69
|
"license": "MIT",
|