@rynfar/meridian 1.44.1 → 1.45.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/dist/{cli-yeazzt32.js → cli-7bygmvmv.js} +47 -11
- package/dist/{cli-6rezv582.js → cli-9pcv2qnp.js} +301 -67
- package/dist/cli.js +3 -3
- package/dist/{profileCli-xcmmr5w4.js → profileCli-w5gpxkyh.js} +1 -1
- package/dist/proxy/models.d.ts +2 -1
- package/dist/proxy/models.d.ts.map +1 -1
- package/dist/proxy/openai.d.ts.map +1 -1
- package/dist/proxy/passthroughTools.d.ts +12 -0
- package/dist/proxy/passthroughTools.d.ts.map +1 -1
- package/dist/proxy/query.d.ts +4 -2
- package/dist/proxy/query.d.ts.map +1 -1
- package/dist/proxy/rateLimitStore.d.ts +5 -1
- package/dist/proxy/rateLimitStore.d.ts.map +1 -1
- package/dist/proxy/requestAbort.d.ts +8 -0
- package/dist/proxy/requestAbort.d.ts.map +1 -0
- package/dist/proxy/sdkFeatures.d.ts +12 -0
- package/dist/proxy/sdkFeatures.d.ts.map +1 -1
- package/dist/proxy/server.d.ts.map +1 -1
- package/dist/proxy/streamIdleGuard.d.ts +14 -1
- package/dist/proxy/streamIdleGuard.d.ts.map +1 -1
- package/dist/proxy/structuredOutput.d.ts +21 -0
- package/dist/proxy/structuredOutput.d.ts.map +1 -0
- package/dist/server.js +2 -2
- package/package.json +3 -3
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
// src/env.ts
|
|
2
|
+
function env(suffix) {
|
|
3
|
+
return process.env[`MERIDIAN_${suffix}`] ?? process.env[`CLAUDE_PROXY_${suffix}`];
|
|
4
|
+
}
|
|
5
|
+
function envBool(suffix) {
|
|
6
|
+
const val = env(suffix);
|
|
7
|
+
return val === "1" || val === "true" || val === "yes";
|
|
8
|
+
}
|
|
9
|
+
function resolvePassthrough(defaultValue) {
|
|
10
|
+
const val = env("PASSTHROUGH");
|
|
11
|
+
if (val === "1" || val === "true" || val === "yes")
|
|
12
|
+
return true;
|
|
13
|
+
if (val === "0" || val === "false" || val === "no")
|
|
14
|
+
return false;
|
|
15
|
+
return defaultValue;
|
|
16
|
+
}
|
|
17
|
+
function envInt(suffix, defaultValue) {
|
|
18
|
+
const val = env(suffix);
|
|
19
|
+
if (!val)
|
|
20
|
+
return defaultValue;
|
|
21
|
+
const parsed = parseInt(val, 10);
|
|
22
|
+
return Number.isFinite(parsed) ? parsed : defaultValue;
|
|
23
|
+
}
|
|
24
|
+
|
|
1
25
|
// src/proxy/models.ts
|
|
2
26
|
import { exec as execCallback, execFile as execFileCallback } from "child_process";
|
|
3
27
|
import { existsSync, statSync } from "fs";
|
|
@@ -7,14 +31,16 @@ import { promisify } from "util";
|
|
|
7
31
|
var exec = promisify(execCallback);
|
|
8
32
|
var execFile = promisify(execFileCallback);
|
|
9
33
|
var STUB_SIZE_THRESHOLD = 4096;
|
|
34
|
+
var CANONICAL_FABLE_MODEL = "claude-fable-5";
|
|
10
35
|
var CANONICAL_OPUS_MODEL = "claude-opus-4-8";
|
|
11
36
|
var CANONICAL_SONNET_MODEL = "claude-sonnet-4-6";
|
|
12
37
|
var CANONICAL_HAIKU_MODEL = "claude-haiku-4-5";
|
|
13
|
-
function resolveSdkModelDefaults(
|
|
38
|
+
function resolveSdkModelDefaults(env2 = process.env) {
|
|
14
39
|
return {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
40
|
+
ANTHROPIC_DEFAULT_FABLE_MODEL: env2.MERIDIAN_DEFAULT_FABLE_MODEL ?? CANONICAL_FABLE_MODEL,
|
|
41
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: env2.MERIDIAN_DEFAULT_OPUS_MODEL ?? CANONICAL_OPUS_MODEL,
|
|
42
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: env2.MERIDIAN_DEFAULT_SONNET_MODEL ?? CANONICAL_SONNET_MODEL,
|
|
43
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: env2.MERIDIAN_DEFAULT_HAIKU_MODEL ?? CANONICAL_HAIKU_MODEL
|
|
18
44
|
};
|
|
19
45
|
}
|
|
20
46
|
var AUTH_STATUS_CACHE_TTL_MS = 60000;
|
|
@@ -25,6 +51,9 @@ var cachedAuthStatusAt = 0;
|
|
|
25
51
|
var cachedAuthStatusIsFailure = false;
|
|
26
52
|
var cachedAuthStatusPromise = null;
|
|
27
53
|
function supports1mContext(model) {
|
|
54
|
+
const override = env("1M_CONTEXT_SUPPORT");
|
|
55
|
+
if (override === "0" || override === "false" || override === "no")
|
|
56
|
+
return false;
|
|
28
57
|
if (model.includes("4-5") || model.includes("4.5"))
|
|
29
58
|
return false;
|
|
30
59
|
return true;
|
|
@@ -34,6 +63,11 @@ function mapModelToClaudeModel(model, subscriptionType, agentMode) {
|
|
|
34
63
|
return "haiku";
|
|
35
64
|
const use1m = supports1mContext(model);
|
|
36
65
|
const isSubagent = agentMode === "subagent";
|
|
66
|
+
if (model.includes("fable")) {
|
|
67
|
+
if (use1m && !isSubagent && !isExtendedContextKnownUnavailable())
|
|
68
|
+
return "fable[1m]";
|
|
69
|
+
return "fable";
|
|
70
|
+
}
|
|
37
71
|
if (model.includes("opus")) {
|
|
38
72
|
if (use1m && !isSubagent && !isExtendedContextKnownUnavailable())
|
|
39
73
|
return "opus[1m]";
|
|
@@ -60,6 +94,8 @@ function stripExtendedContext(model) {
|
|
|
60
94
|
return "opus";
|
|
61
95
|
if (model === "sonnet[1m]")
|
|
62
96
|
return "sonnet";
|
|
97
|
+
if (model === "fable[1m]")
|
|
98
|
+
return "fable";
|
|
63
99
|
return model;
|
|
64
100
|
}
|
|
65
101
|
function hasExtendedContext(model) {
|
|
@@ -219,9 +255,9 @@ function tryLegacySdkCliJs(deps) {
|
|
|
219
255
|
}
|
|
220
256
|
}
|
|
221
257
|
async function resolveClaudeExecutableWithSource(deps = DEFAULT_DEPS) {
|
|
222
|
-
const
|
|
223
|
-
if (
|
|
224
|
-
return { path:
|
|
258
|
+
const env2 = tryEnvOverride(deps);
|
|
259
|
+
if (env2)
|
|
260
|
+
return { path: env2, source: "env" };
|
|
225
261
|
const bundled = tryBundledBinary(deps);
|
|
226
262
|
if (bundled)
|
|
227
263
|
return { path: bundled, source: "bundled" };
|
|
@@ -237,9 +273,9 @@ async function resolveClaudeExecutableWithSource(deps = DEFAULT_DEPS) {
|
|
|
237
273
|
return null;
|
|
238
274
|
}
|
|
239
275
|
function resolveClaudeExecutableSync(deps = DEFAULT_DEPS) {
|
|
240
|
-
const
|
|
241
|
-
if (
|
|
242
|
-
return { path:
|
|
276
|
+
const env2 = tryEnvOverride(deps);
|
|
277
|
+
if (env2)
|
|
278
|
+
return { path: env2, source: "env" };
|
|
243
279
|
const bundled = tryBundledBinary(deps);
|
|
244
280
|
if (bundled)
|
|
245
281
|
return { path: bundled, source: "bundled" };
|
|
@@ -276,4 +312,4 @@ function isClosedControllerError(error) {
|
|
|
276
312
|
return error.message.includes("Controller is already closed");
|
|
277
313
|
}
|
|
278
314
|
|
|
279
|
-
export { resolveSdkModelDefaults, mapModelToClaudeModel, recordExtendedContextUnavailable, stripExtendedContext, hasExtendedContext, getAuthCacheInfo, getClaudeAuthStatusAsync, resolveClaudeExecutableSync, getResolvedClaudeExecutableInfo, resolveClaudeExecutableAsync, isClosedControllerError };
|
|
315
|
+
export { env, envBool, resolvePassthrough, envInt, resolveSdkModelDefaults, mapModelToClaudeModel, recordExtendedContextUnavailable, stripExtendedContext, hasExtendedContext, getAuthCacheInfo, getClaudeAuthStatusAsync, resolveClaudeExecutableSync, getResolvedClaudeExecutableInfo, resolveClaudeExecutableAsync, isClosedControllerError };
|
|
@@ -21,6 +21,9 @@ import {
|
|
|
21
21
|
themeCss
|
|
22
22
|
} from "./cli-4rqtm83g.js";
|
|
23
23
|
import {
|
|
24
|
+
env,
|
|
25
|
+
envBool,
|
|
26
|
+
envInt,
|
|
24
27
|
getAuthCacheInfo,
|
|
25
28
|
getClaudeAuthStatusAsync,
|
|
26
29
|
getResolvedClaudeExecutableInfo,
|
|
@@ -29,9 +32,10 @@ import {
|
|
|
29
32
|
mapModelToClaudeModel,
|
|
30
33
|
recordExtendedContextUnavailable,
|
|
31
34
|
resolveClaudeExecutableAsync,
|
|
35
|
+
resolvePassthrough,
|
|
32
36
|
resolveSdkModelDefaults,
|
|
33
37
|
stripExtendedContext
|
|
34
|
-
} from "./cli-
|
|
38
|
+
} from "./cli-7bygmvmv.js";
|
|
35
39
|
import {
|
|
36
40
|
checkPluginConfigured
|
|
37
41
|
} from "./cli-je60fevk.js";
|
|
@@ -1191,6 +1195,7 @@ __export(exports_sdkFeatures, {
|
|
|
1191
1195
|
updateAdapterFeatures: () => updateAdapterFeatures,
|
|
1192
1196
|
resetAdapterFeatures: () => resetAdapterFeatures,
|
|
1193
1197
|
getFeaturesForAdapter: () => getFeaturesForAdapter,
|
|
1198
|
+
getExplicitThinking: () => getExplicitThinking,
|
|
1194
1199
|
getAllFeatureConfigs: () => getAllFeatureConfigs
|
|
1195
1200
|
});
|
|
1196
1201
|
import { existsSync as existsSync5, mkdirSync as mkdirSync2, readFileSync as readFileSync4, writeFileSync as writeFileSync2, renameSync as renameSync2 } from "node:fs";
|
|
@@ -1241,6 +1246,10 @@ function getFeaturesForAdapter(adapterName) {
|
|
|
1241
1246
|
...userOverrides
|
|
1242
1247
|
};
|
|
1243
1248
|
}
|
|
1249
|
+
function getExplicitThinking(adapterName) {
|
|
1250
|
+
const explicit = readConfig()[adapterName]?.thinking;
|
|
1251
|
+
return typeof explicit === "string" && VALID_THINKING_VALUES.has(explicit) ? explicit : undefined;
|
|
1252
|
+
}
|
|
1244
1253
|
function getAllFeatureConfigs() {
|
|
1245
1254
|
const adapters = ["opencode", "crush", "forgecode", "pi", "droid", "passthrough", "openai"];
|
|
1246
1255
|
const result = {};
|
|
@@ -2376,16 +2385,16 @@ var Hono = class _Hono {
|
|
|
2376
2385
|
}
|
|
2377
2386
|
throw err;
|
|
2378
2387
|
}
|
|
2379
|
-
#dispatch(request, executionCtx,
|
|
2388
|
+
#dispatch(request, executionCtx, env2, method) {
|
|
2380
2389
|
if (method === "HEAD") {
|
|
2381
|
-
return (async () => new Response(null, await this.#dispatch(request, executionCtx,
|
|
2390
|
+
return (async () => new Response(null, await this.#dispatch(request, executionCtx, env2, "GET")))();
|
|
2382
2391
|
}
|
|
2383
|
-
const path = this.getPath(request, { env });
|
|
2392
|
+
const path = this.getPath(request, { env: env2 });
|
|
2384
2393
|
const matchResult = this.router.match(method, path);
|
|
2385
2394
|
const c = new Context(request, {
|
|
2386
2395
|
path,
|
|
2387
2396
|
matchResult,
|
|
2388
|
-
env,
|
|
2397
|
+
env: env2,
|
|
2389
2398
|
executionCtx,
|
|
2390
2399
|
notFoundHandler: this.#notFoundHandler
|
|
2391
2400
|
});
|
|
@@ -3732,11 +3741,11 @@ import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
|
3732
3741
|
// src/proxy/rateLimitStore.ts
|
|
3733
3742
|
class RateLimitStore {
|
|
3734
3743
|
entries = new Map;
|
|
3735
|
-
record(info) {
|
|
3744
|
+
record(info, observedAt = Date.now()) {
|
|
3736
3745
|
if (!info || typeof info !== "object")
|
|
3737
3746
|
return;
|
|
3738
3747
|
const key = info.rateLimitType ?? "default";
|
|
3739
|
-
this.entries.set(key, { ...info, observedAt
|
|
3748
|
+
this.entries.set(key, { ...info, observedAt });
|
|
3740
3749
|
}
|
|
3741
3750
|
getAll() {
|
|
3742
3751
|
return Array.from(this.entries.values()).sort((a, b) => b.observedAt - a.observedAt);
|
|
@@ -3764,22 +3773,27 @@ class UpstreamIdleError extends Error {
|
|
|
3764
3773
|
this.sinceLastMs = sinceLastMs;
|
|
3765
3774
|
}
|
|
3766
3775
|
}
|
|
3767
|
-
|
|
3776
|
+
var realClock = {
|
|
3777
|
+
now: () => Date.now(),
|
|
3778
|
+
setTimeout: (fn, ms) => setTimeout(fn, ms),
|
|
3779
|
+
clearTimeout: (handle) => clearTimeout(handle)
|
|
3780
|
+
};
|
|
3781
|
+
async function* guardUpstreamIdle(source, idleMs, onStall, clock = realClock) {
|
|
3768
3782
|
if (idleMs <= 0) {
|
|
3769
3783
|
yield* source;
|
|
3770
3784
|
return;
|
|
3771
3785
|
}
|
|
3772
3786
|
const it = source[Symbol.asyncIterator]();
|
|
3773
|
-
let lastAt =
|
|
3787
|
+
let lastAt = clock.now();
|
|
3774
3788
|
try {
|
|
3775
3789
|
while (true) {
|
|
3776
3790
|
const nextP = it.next();
|
|
3777
3791
|
nextP.catch(() => {});
|
|
3778
3792
|
let timer;
|
|
3779
3793
|
const idle = new Promise((_, reject) => {
|
|
3780
|
-
const remaining = Math.max(0, idleMs - (
|
|
3781
|
-
timer = setTimeout(() => {
|
|
3782
|
-
const sinceLastMs =
|
|
3794
|
+
const remaining = Math.max(0, idleMs - (clock.now() - lastAt));
|
|
3795
|
+
timer = clock.setTimeout(() => {
|
|
3796
|
+
const sinceLastMs = clock.now() - lastAt;
|
|
3783
3797
|
try {
|
|
3784
3798
|
onStall?.(sinceLastMs);
|
|
3785
3799
|
} catch {}
|
|
@@ -3790,12 +3804,12 @@ async function* guardUpstreamIdle(source, idleMs, onStall) {
|
|
|
3790
3804
|
try {
|
|
3791
3805
|
res = await Promise.race([nextP, idle]);
|
|
3792
3806
|
} finally {
|
|
3793
|
-
if (timer)
|
|
3794
|
-
clearTimeout(timer);
|
|
3807
|
+
if (timer !== undefined)
|
|
3808
|
+
clock.clearTimeout(timer);
|
|
3795
3809
|
}
|
|
3796
3810
|
if (res.done)
|
|
3797
3811
|
return;
|
|
3798
|
-
lastAt =
|
|
3812
|
+
lastAt = clock.now();
|
|
3799
3813
|
yield res.value;
|
|
3800
3814
|
}
|
|
3801
3815
|
} finally {
|
|
@@ -3804,6 +3818,33 @@ async function* guardUpstreamIdle(source, idleMs, onStall) {
|
|
|
3804
3818
|
}
|
|
3805
3819
|
}
|
|
3806
3820
|
|
|
3821
|
+
// src/proxy/requestAbort.ts
|
|
3822
|
+
function linkRequestAbort(signal) {
|
|
3823
|
+
const controller = new AbortController;
|
|
3824
|
+
let attached = false;
|
|
3825
|
+
const abort = (reason) => {
|
|
3826
|
+
if (!controller.signal.aborted)
|
|
3827
|
+
controller.abort(reason);
|
|
3828
|
+
};
|
|
3829
|
+
const forwardAbort = () => abort(signal.reason);
|
|
3830
|
+
if (signal.aborted) {
|
|
3831
|
+
forwardAbort();
|
|
3832
|
+
} else {
|
|
3833
|
+
signal.addEventListener("abort", forwardAbort, { once: true });
|
|
3834
|
+
attached = true;
|
|
3835
|
+
}
|
|
3836
|
+
return {
|
|
3837
|
+
controller,
|
|
3838
|
+
abort,
|
|
3839
|
+
detach: () => {
|
|
3840
|
+
if (!attached)
|
|
3841
|
+
return;
|
|
3842
|
+
signal.removeEventListener("abort", forwardAbort);
|
|
3843
|
+
attached = false;
|
|
3844
|
+
}
|
|
3845
|
+
};
|
|
3846
|
+
}
|
|
3847
|
+
|
|
3807
3848
|
// src/proxy/oauthUsage.ts
|
|
3808
3849
|
var OAUTH_USAGE_URL = "https://api.anthropic.com/api/oauth/usage";
|
|
3809
3850
|
var OAUTH_BETA_HEADER = "oauth-2025-04-20";
|
|
@@ -3949,30 +3990,6 @@ var DEFAULT_PROXY_CONFIG = {
|
|
|
3949
3990
|
version: undefined
|
|
3950
3991
|
};
|
|
3951
3992
|
|
|
3952
|
-
// src/env.ts
|
|
3953
|
-
function env(suffix) {
|
|
3954
|
-
return process.env[`MERIDIAN_${suffix}`] ?? process.env[`CLAUDE_PROXY_${suffix}`];
|
|
3955
|
-
}
|
|
3956
|
-
function envBool(suffix) {
|
|
3957
|
-
const val = env(suffix);
|
|
3958
|
-
return val === "1" || val === "true" || val === "yes";
|
|
3959
|
-
}
|
|
3960
|
-
function resolvePassthrough(defaultValue) {
|
|
3961
|
-
const val = env("PASSTHROUGH");
|
|
3962
|
-
if (val === "1" || val === "true" || val === "yes")
|
|
3963
|
-
return true;
|
|
3964
|
-
if (val === "0" || val === "false" || val === "no")
|
|
3965
|
-
return false;
|
|
3966
|
-
return defaultValue;
|
|
3967
|
-
}
|
|
3968
|
-
function envInt(suffix, defaultValue) {
|
|
3969
|
-
const val = env(suffix);
|
|
3970
|
-
if (!val)
|
|
3971
|
-
return defaultValue;
|
|
3972
|
-
const parsed = parseInt(val, 10);
|
|
3973
|
-
return Number.isFinite(parsed) ? parsed : defaultValue;
|
|
3974
|
-
}
|
|
3975
|
-
|
|
3976
3993
|
// src/proxy/transform.ts
|
|
3977
3994
|
function runTransformHook(transforms, hook, ctx, adapterName) {
|
|
3978
3995
|
return transforms.reduce((acc, transform) => {
|
|
@@ -8121,6 +8138,9 @@ function stableStringify(value) {
|
|
|
8121
8138
|
const parts = keys.map((k) => `${JSON.stringify(k)}:${stableStringify(value[k])}`);
|
|
8122
8139
|
return `{${parts.join(",")}}`;
|
|
8123
8140
|
}
|
|
8141
|
+
function toolUseSignature(name, input) {
|
|
8142
|
+
return `${name}::${stableStringify(input ?? null)}`;
|
|
8143
|
+
}
|
|
8124
8144
|
function stripMcpPrefix(toolName) {
|
|
8125
8145
|
if (toolName.startsWith(PASSTHROUGH_MCP_PREFIX)) {
|
|
8126
8146
|
return toolName.slice(PASSTHROUGH_MCP_PREFIX.length);
|
|
@@ -9727,6 +9747,14 @@ function buildModelList(isMaxSubscription, now = Math.floor(Date.now() / 1000))
|
|
|
9727
9747
|
display_name: "Claude Opus 4.8",
|
|
9728
9748
|
context_window: isMaxSubscription ? 1e6 : 200000
|
|
9729
9749
|
},
|
|
9750
|
+
{
|
|
9751
|
+
id: "claude-fable-5",
|
|
9752
|
+
object: "model",
|
|
9753
|
+
created: now,
|
|
9754
|
+
owned_by: "anthropic",
|
|
9755
|
+
display_name: "Claude Fable 5",
|
|
9756
|
+
context_window: isMaxSubscription ? 1e6 : 200000
|
|
9757
|
+
},
|
|
9730
9758
|
{
|
|
9731
9759
|
id: "claude-haiku-4-5",
|
|
9732
9760
|
object: "model",
|
|
@@ -9989,7 +10017,6 @@ var BLOCKED_BUILTIN_TOOLS = [
|
|
|
9989
10017
|
"Read",
|
|
9990
10018
|
"Write",
|
|
9991
10019
|
"Edit",
|
|
9992
|
-
"MultiEdit",
|
|
9993
10020
|
"Bash",
|
|
9994
10021
|
"Glob",
|
|
9995
10022
|
"Grep",
|
|
@@ -16565,7 +16592,9 @@ function stripConfigDir(env2) {
|
|
|
16565
16592
|
}
|
|
16566
16593
|
function computePassthroughMaxTurns(resumeSessionId, hasDeferredTools, advisorModel) {
|
|
16567
16594
|
const hasResume = !!resumeSessionId;
|
|
16568
|
-
const
|
|
16595
|
+
const defaultBase = hasResume && hasDeferredTools ? 4 : 3;
|
|
16596
|
+
const configured = envInt("PASSTHROUGH_MAX_TURNS", defaultBase);
|
|
16597
|
+
const base = configured > 0 ? configured : defaultBase;
|
|
16569
16598
|
const advisorBump = advisorModel ? 3 : 0;
|
|
16570
16599
|
return base + advisorBump;
|
|
16571
16600
|
}
|
|
@@ -16596,7 +16625,7 @@ function resolveSystemPrompt(systemContext, passthrough, settingSources, codeSys
|
|
|
16596
16625
|
return { systemPrompt: "" };
|
|
16597
16626
|
return {};
|
|
16598
16627
|
}
|
|
16599
|
-
function buildQueryOptions(ctx) {
|
|
16628
|
+
function buildQueryOptions(ctx, abortController) {
|
|
16600
16629
|
const {
|
|
16601
16630
|
prompt,
|
|
16602
16631
|
model,
|
|
@@ -16622,6 +16651,7 @@ function buildQueryOptions(ctx) {
|
|
|
16622
16651
|
effort,
|
|
16623
16652
|
thinking,
|
|
16624
16653
|
taskBudget,
|
|
16654
|
+
outputFormat,
|
|
16625
16655
|
betas,
|
|
16626
16656
|
settingSources,
|
|
16627
16657
|
codeSystemPrompt,
|
|
@@ -16644,6 +16674,7 @@ function buildQueryOptions(ctx) {
|
|
|
16644
16674
|
cwd: workingDirectory,
|
|
16645
16675
|
model,
|
|
16646
16676
|
pathToClaudeCodeExecutable: claudeExecutable,
|
|
16677
|
+
...abortController ? { abortController } : {},
|
|
16647
16678
|
...stream2 ? { includePartialMessages: true } : {},
|
|
16648
16679
|
permissionMode: "bypassPermissions",
|
|
16649
16680
|
allowDangerouslySkipPermissions: true,
|
|
@@ -16684,6 +16715,7 @@ function buildQueryOptions(ctx) {
|
|
|
16684
16715
|
...effort ? { effort } : {},
|
|
16685
16716
|
...thinking ? { thinking } : {},
|
|
16686
16717
|
...taskBudget ? { taskBudget } : {},
|
|
16718
|
+
...outputFormat ? { outputFormat } : {},
|
|
16687
16719
|
...betas && betas.length > 0 ? { betas } : {},
|
|
16688
16720
|
...maxBudgetUsd && maxBudgetUsd > 0 ? { maxBudgetUsd } : {},
|
|
16689
16721
|
...fallbackModel ? { fallbackModel } : {},
|
|
@@ -16700,6 +16732,40 @@ function normalizeEffort(value) {
|
|
|
16700
16732
|
return typeof value === "string" && VALID_EFFORTS.includes(value) ? value : undefined;
|
|
16701
16733
|
}
|
|
16702
16734
|
|
|
16735
|
+
// src/proxy/structuredOutput.ts
|
|
16736
|
+
function isRecord(value) {
|
|
16737
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
16738
|
+
}
|
|
16739
|
+
function parseOutputFormat(outputConfig, tools) {
|
|
16740
|
+
if (outputConfig === undefined)
|
|
16741
|
+
return { ok: true, value: undefined };
|
|
16742
|
+
if (!isRecord(outputConfig)) {
|
|
16743
|
+
return { ok: false, message: "output_config: Expected an object" };
|
|
16744
|
+
}
|
|
16745
|
+
const format = outputConfig.format;
|
|
16746
|
+
if (format === undefined)
|
|
16747
|
+
return { ok: true, value: undefined };
|
|
16748
|
+
if (!isRecord(format)) {
|
|
16749
|
+
return { ok: false, message: "output_config.format: Expected an object" };
|
|
16750
|
+
}
|
|
16751
|
+
if (format.type !== "json_schema") {
|
|
16752
|
+
return { ok: false, message: "output_config.format.type: Only 'json_schema' is supported" };
|
|
16753
|
+
}
|
|
16754
|
+
if (!isRecord(format.schema)) {
|
|
16755
|
+
return { ok: false, message: "output_config.format.schema: Expected a JSON Schema object" };
|
|
16756
|
+
}
|
|
16757
|
+
if (Array.isArray(tools) && tools.length > 0) {
|
|
16758
|
+
return { ok: false, message: "output_config.format: Cannot be combined with tools" };
|
|
16759
|
+
}
|
|
16760
|
+
return {
|
|
16761
|
+
ok: true,
|
|
16762
|
+
value: { type: "json_schema", schema: format.schema }
|
|
16763
|
+
};
|
|
16764
|
+
}
|
|
16765
|
+
function structuredOutputText(value) {
|
|
16766
|
+
return JSON.stringify(value);
|
|
16767
|
+
}
|
|
16768
|
+
|
|
16703
16769
|
// src/proxy/transforms/registry.ts
|
|
16704
16770
|
var ADAPTER_TRANSFORMS = {
|
|
16705
16771
|
opencode: openCodeTransforms,
|
|
@@ -17831,6 +17897,8 @@ function createProxyServer(config = {}) {
|
|
|
17831
17897
|
}
|
|
17832
17898
|
const handleMessages = async (c, requestMeta) => {
|
|
17833
17899
|
const requestStartAt = Date.now();
|
|
17900
|
+
const requestAbort = linkRequestAbort(c.req.raw.signal);
|
|
17901
|
+
let streamOwnsAbortLink = false;
|
|
17834
17902
|
return withClaudeLogContext({ requestId: requestMeta.requestId, endpoint: requestMeta.endpoint }, async () => {
|
|
17835
17903
|
const adapter = detectAdapter(c);
|
|
17836
17904
|
try {
|
|
@@ -17851,13 +17919,18 @@ function createProxyServer(config = {}) {
|
|
|
17851
17919
|
if (body.messages.length === 0) {
|
|
17852
17920
|
return c.json({ type: "error", error: { type: "invalid_request_error", message: "messages: Cannot be empty — at least one message is required" } }, 400);
|
|
17853
17921
|
}
|
|
17922
|
+
const parsedOutputFormat = parseOutputFormat(body.output_config, body.tools);
|
|
17923
|
+
if (!parsedOutputFormat.ok) {
|
|
17924
|
+
return c.json({ type: "error", error: { type: "invalid_request_error", message: parsedOutputFormat.message } }, 400);
|
|
17925
|
+
}
|
|
17926
|
+
const outputFormat = parsedOutputFormat.value;
|
|
17854
17927
|
const profile = resolveProfile(finalConfig.profiles, finalConfig.defaultProfile, c.req.header("x-meridian-profile") || undefined);
|
|
17855
17928
|
const authStatus = await getClaudeAuthStatusAsync(profile.id !== "default" ? profile.id : undefined, Object.keys(profile.env).length > 0 ? profile.env : undefined);
|
|
17856
17929
|
const agentMode = c.req.header("x-opencode-agent-mode") ?? null;
|
|
17857
17930
|
const requestSource = c.req.header("x-meridian-source")?.slice(0, 64) || undefined;
|
|
17858
17931
|
const requestedModel = typeof body.model === "string" ? body.model : "sonnet";
|
|
17859
17932
|
let model = mapModelToClaudeModel(requestedModel, authStatus?.subscriptionType, agentMode);
|
|
17860
|
-
const envOverrides = requestedModel.startsWith("claude-opus-") ? { ANTHROPIC_DEFAULT_OPUS_MODEL: requestedModel } : undefined;
|
|
17933
|
+
const envOverrides = requestedModel.startsWith("claude-opus-") ? { ANTHROPIC_DEFAULT_OPUS_MODEL: requestedModel } : requestedModel.startsWith("claude-fable-") ? { ANTHROPIC_DEFAULT_FABLE_MODEL: requestedModel } : requestedModel.startsWith("claude-sonnet-") ? { ANTHROPIC_DEFAULT_SONNET_MODEL: requestedModel } : requestedModel.startsWith("claude-haiku-") ? { ANTHROPIC_DEFAULT_HAIKU_MODEL: requestedModel } : undefined;
|
|
17861
17934
|
const cwdResolution = resolveSdkWorkingDirectory({
|
|
17862
17935
|
envOverride: process.env.MERIDIAN_WORKDIR ?? process.env.CLAUDE_PROXY_WORKDIR,
|
|
17863
17936
|
adapterCwd: adapter.extractWorkingDirectory(body),
|
|
@@ -17913,7 +17986,7 @@ function createProxyServer(config = {}) {
|
|
|
17913
17986
|
if (betaFilter.stripped.length > 0) {
|
|
17914
17987
|
plog(`[PROXY] ${requestMeta.requestId} stripped anthropic-beta(s) for Max profile: ${betaFilter.stripped.join(", ")}`);
|
|
17915
17988
|
}
|
|
17916
|
-
|
|
17989
|
+
let effort = normalizeEffort(effortHeader || body.effort || body.reasoning_effort || body.output_config?.effort);
|
|
17917
17990
|
let thinking = body.thinking || undefined;
|
|
17918
17991
|
if (thinkingHeader !== undefined) {
|
|
17919
17992
|
try {
|
|
@@ -17922,9 +17995,13 @@ function createProxyServer(config = {}) {
|
|
|
17922
17995
|
plog(`[PROXY] ${requestMeta.requestId} ignoring malformed x-opencode-thinking header: ${e instanceof Error ? e.message : String(e)}`);
|
|
17923
17996
|
}
|
|
17924
17997
|
}
|
|
17925
|
-
const { getFeaturesForAdapter: getFeaturesForAdapter2 } = (init_sdkFeatures(), __toCommonJS(exports_sdkFeatures));
|
|
17998
|
+
const { getFeaturesForAdapter: getFeaturesForAdapter2, getExplicitThinking: getExplicitThinking2 } = (init_sdkFeatures(), __toCommonJS(exports_sdkFeatures));
|
|
17926
17999
|
const sdkFeatures = getFeaturesForAdapter2(adapter.name);
|
|
17927
|
-
if (
|
|
18000
|
+
if (getExplicitThinking2(adapter.name) === "disabled") {
|
|
18001
|
+
thinking = { type: "disabled" };
|
|
18002
|
+
effort = undefined;
|
|
18003
|
+
plog(`[PROXY] ${requestMeta.requestId} thinking disabled (per-adapter setting)`);
|
|
18004
|
+
} else if (!thinking) {
|
|
17928
18005
|
if (sdkFeatures.thinking === "adaptive")
|
|
17929
18006
|
thinking = { type: "adaptive" };
|
|
17930
18007
|
else if (sdkFeatures.thinking === "enabled")
|
|
@@ -17933,6 +18010,7 @@ function createProxyServer(config = {}) {
|
|
|
17933
18010
|
const thinkingBetaStripped = betaFilter.stripped.some((b) => b.startsWith("interleaved-thinking"));
|
|
17934
18011
|
if (thinkingBetaStripped) {
|
|
17935
18012
|
thinking = { type: "disabled" };
|
|
18013
|
+
effort = undefined;
|
|
17936
18014
|
if (betaFilter.stripped.length > 0) {
|
|
17937
18015
|
plog(`[PROXY] ${requestMeta.requestId} thinking disabled (thinking beta stripped by ${getBetaPolicyFromEnv()} policy)`);
|
|
17938
18016
|
}
|
|
@@ -17943,7 +18021,10 @@ function createProxyServer(config = {}) {
|
|
|
17943
18021
|
const agentSessionId = adapter.getSessionId(c);
|
|
17944
18022
|
const profileSessionId = profile.id !== "default" && agentSessionId ? `${profile.id}:${agentSessionId}` : agentSessionId;
|
|
17945
18023
|
const profileScopedCwd = profile.id !== "default" ? `${clientWorkingDirectory}::profile=${profile.id}` : clientWorkingDirectory;
|
|
17946
|
-
const
|
|
18024
|
+
const lastMessage = Array.isArray(body.messages) ? body.messages[body.messages.length - 1] : undefined;
|
|
18025
|
+
const lastIsToolResult = Array.isArray(lastMessage?.content) && lastMessage.content.some((b) => b?.type === "tool_result");
|
|
18026
|
+
const isClientDrivenLoop = !agentSessionId && lastIsToolResult;
|
|
18027
|
+
const isIndependentSession = requestSource?.startsWith("fork-") || requestSource?.startsWith("subagent-") || isClientDrivenLoop || false;
|
|
17947
18028
|
let lineageResult = isIndependentSession ? { type: "diverged" } : lookupSession(profileSessionId, body.messages || [], profileScopedCwd);
|
|
17948
18029
|
if (lineageResult.type === "undo" && adapter.name === "opencode" && !agentSessionId) {
|
|
17949
18030
|
lineageResult = { type: "diverged" };
|
|
@@ -18053,6 +18134,11 @@ function createProxyServer(config = {}) {
|
|
|
18053
18134
|
const passthrough = pipelineCtx.passthrough !== undefined ? pipelineCtx.passthrough : envBool("PASSTHROUGH");
|
|
18054
18135
|
const settingSources = envBool("LOAD_CONTEXT") || sdkFeatures.claudeMd === "full" ? ["user", "project"] : sdkFeatures.claudeMd === "project" ? ["project"] : pipelineCtx.settingSources ?? [];
|
|
18055
18136
|
const capturedToolUses = [];
|
|
18137
|
+
const capturedSignatures = new Set;
|
|
18138
|
+
const capturedToolNames = new Set;
|
|
18139
|
+
let sawDuplicateToolUse = false;
|
|
18140
|
+
const toolChoice = body.tool_choice;
|
|
18141
|
+
const forceSingleToolUse = !!toolChoice && (toolChoice.type === "tool" || toolChoice.disable_parallel_tool_use === true);
|
|
18056
18142
|
const fileChanges = [];
|
|
18057
18143
|
let passthroughMcp;
|
|
18058
18144
|
let requestTools = Array.isArray(body.tools) ? body.tools : [];
|
|
@@ -18101,6 +18187,8 @@ function createProxyServer(config = {}) {
|
|
|
18101
18187
|
hooks: [async (input) => {
|
|
18102
18188
|
if (input.tool_name === "ToolSearch")
|
|
18103
18189
|
return {};
|
|
18190
|
+
if (input.tool_name === "StructuredOutput")
|
|
18191
|
+
return {};
|
|
18104
18192
|
const toolName = stripMcpPrefix(input.tool_name);
|
|
18105
18193
|
if (hasDeferredTools && coreSet && !coreSet.has(toolName.toLowerCase())) {
|
|
18106
18194
|
discoveredTools.add(toolName);
|
|
@@ -18110,11 +18198,28 @@ function createProxyServer(config = {}) {
|
|
|
18110
18198
|
if (toolName.toLowerCase() === "task" && toolInput?.subagent_type && typeof toolInput.subagent_type === "string") {
|
|
18111
18199
|
toolInput = { ...toolInput, subagent_type: resolveAgentAlias(toolInput.subagent_type) };
|
|
18112
18200
|
}
|
|
18113
|
-
|
|
18114
|
-
|
|
18115
|
-
|
|
18116
|
-
|
|
18117
|
-
|
|
18201
|
+
const signature = toolUseSignature(toolName, toolInput);
|
|
18202
|
+
const isExactDuplicate = capturedSignatures.has(signature);
|
|
18203
|
+
const isSameToolRepeat = !isExactDuplicate && capturedToolNames.has(toolName);
|
|
18204
|
+
const exceedsForcedSingle = forceSingleToolUse && capturedToolUses.length >= 1;
|
|
18205
|
+
if (isExactDuplicate) {
|
|
18206
|
+
claudeLog("passthrough.duplicate_tool_use_dropped", { name: toolName });
|
|
18207
|
+
} else if (isSameToolRepeat || exceedsForcedSingle) {
|
|
18208
|
+
sawDuplicateToolUse = true;
|
|
18209
|
+
claudeLog("passthrough.extra_tool_use_dropped", {
|
|
18210
|
+
name: toolName,
|
|
18211
|
+
reason: exceedsForcedSingle ? "forced_single" : "same_tool_repeat"
|
|
18212
|
+
});
|
|
18213
|
+
requestAbort.abort("passthrough single-step complete");
|
|
18214
|
+
} else {
|
|
18215
|
+
capturedSignatures.add(signature);
|
|
18216
|
+
capturedToolNames.add(toolName);
|
|
18217
|
+
capturedToolUses.push({
|
|
18218
|
+
id: input.tool_use_id,
|
|
18219
|
+
name: toolName,
|
|
18220
|
+
input: toolInput
|
|
18221
|
+
});
|
|
18222
|
+
}
|
|
18118
18223
|
return {
|
|
18119
18224
|
decision: "block",
|
|
18120
18225
|
reason: "This tool call has been forwarded to the client for execution. " + "The result will be delivered in a future turn. " + "Do not retry, do not call additional tools, and do not generate further text — end your turn now."
|
|
@@ -18133,6 +18238,8 @@ function createProxyServer(config = {}) {
|
|
|
18133
18238
|
if (!stream2) {
|
|
18134
18239
|
const contentBlocks = [];
|
|
18135
18240
|
let assistantMessages = 0;
|
|
18241
|
+
let hasStructuredOutput = false;
|
|
18242
|
+
let structuredOutput;
|
|
18136
18243
|
const upstreamStartAt = Date.now();
|
|
18137
18244
|
let firstChunkAt;
|
|
18138
18245
|
let currentSessionId;
|
|
@@ -18184,6 +18291,7 @@ function createProxyServer(config = {}) {
|
|
|
18184
18291
|
effort,
|
|
18185
18292
|
thinking,
|
|
18186
18293
|
taskBudget,
|
|
18294
|
+
outputFormat,
|
|
18187
18295
|
betas,
|
|
18188
18296
|
settingSources,
|
|
18189
18297
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18196,7 +18304,7 @@ function createProxyServer(config = {}) {
|
|
|
18196
18304
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18197
18305
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18198
18306
|
advisorModel
|
|
18199
|
-
}))) {
|
|
18307
|
+
}, requestAbort.controller))) {
|
|
18200
18308
|
if (event.type === "rate_limit_event") {
|
|
18201
18309
|
rateLimitStore.record(event.rate_limit_info);
|
|
18202
18310
|
}
|
|
@@ -18247,6 +18355,7 @@ function createProxyServer(config = {}) {
|
|
|
18247
18355
|
effort,
|
|
18248
18356
|
thinking,
|
|
18249
18357
|
taskBudget,
|
|
18358
|
+
outputFormat,
|
|
18250
18359
|
betas,
|
|
18251
18360
|
settingSources,
|
|
18252
18361
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18259,7 +18368,7 @@ function createProxyServer(config = {}) {
|
|
|
18259
18368
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18260
18369
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18261
18370
|
advisorModel
|
|
18262
|
-
}));
|
|
18371
|
+
}, requestAbort.controller));
|
|
18263
18372
|
return;
|
|
18264
18373
|
}
|
|
18265
18374
|
if (isExtraUsageRequiredError(errMsg) && hasExtendedContext(model)) {
|
|
@@ -18313,6 +18422,7 @@ function createProxyServer(config = {}) {
|
|
|
18313
18422
|
effort,
|
|
18314
18423
|
thinking,
|
|
18315
18424
|
taskBudget,
|
|
18425
|
+
outputFormat,
|
|
18316
18426
|
betas,
|
|
18317
18427
|
settingSources,
|
|
18318
18428
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18325,7 +18435,7 @@ function createProxyServer(config = {}) {
|
|
|
18325
18435
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18326
18436
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18327
18437
|
advisorModel
|
|
18328
|
-
}));
|
|
18438
|
+
}, requestAbort.controller));
|
|
18329
18439
|
return;
|
|
18330
18440
|
}
|
|
18331
18441
|
if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
|
|
@@ -18373,6 +18483,10 @@ function createProxyServer(config = {}) {
|
|
|
18373
18483
|
if (message.session_id) {
|
|
18374
18484
|
currentSessionId = message.session_id;
|
|
18375
18485
|
}
|
|
18486
|
+
if (passthrough && sawDuplicateToolUse) {
|
|
18487
|
+
claudeLog("passthrough.loop_break", { mode: "non_stream", assistantMessages, captured: capturedToolUses.length });
|
|
18488
|
+
break;
|
|
18489
|
+
}
|
|
18376
18490
|
if (message.type === "assistant") {
|
|
18377
18491
|
assistantMessages += 1;
|
|
18378
18492
|
if (message.uuid) {
|
|
@@ -18418,6 +18532,10 @@ function createProxyServer(config = {}) {
|
|
|
18418
18532
|
if (resultUsage) {
|
|
18419
18533
|
lastUsage = { ...lastUsage, ...resultUsage };
|
|
18420
18534
|
}
|
|
18535
|
+
if (outputFormat && "structured_output" in message) {
|
|
18536
|
+
hasStructuredOutput = true;
|
|
18537
|
+
structuredOutput = message.structured_output;
|
|
18538
|
+
}
|
|
18421
18539
|
}
|
|
18422
18540
|
}
|
|
18423
18541
|
claudeLog("upstream.completed", {
|
|
@@ -18445,14 +18563,40 @@ function createProxyServer(config = {}) {
|
|
|
18445
18563
|
error.message = `${error.message}
|
|
18446
18564
|
Subprocess stderr: ${stderrOutput}`;
|
|
18447
18565
|
}
|
|
18448
|
-
|
|
18449
|
-
|
|
18450
|
-
|
|
18451
|
-
|
|
18452
|
-
|
|
18453
|
-
|
|
18566
|
+
const sdkTerm = extractSdkTermination(error instanceof Error ? error.message : String(error));
|
|
18567
|
+
const canRecoverAsToolUse = passthrough && capturedToolUses.length > 0 && (sdkTerm.reason === "max_turns" || sdkTerm.reason === "aborted");
|
|
18568
|
+
if (canRecoverAsToolUse) {
|
|
18569
|
+
diagnosticLog2.session(`${requestMeta.requestId} sdk_termination_recovered ${formatSdkTermination(sdkTerm, {
|
|
18570
|
+
model,
|
|
18571
|
+
requestSource,
|
|
18572
|
+
isResume,
|
|
18573
|
+
hasDeferredTools,
|
|
18574
|
+
sdkSessionId: resumeSessionId
|
|
18575
|
+
})} captured=${capturedToolUses.length}`, requestMeta.requestId);
|
|
18576
|
+
claudeLog("passthrough.max_turns_recovered", {
|
|
18577
|
+
mode: "non_stream",
|
|
18578
|
+
reason: sdkTerm.reason,
|
|
18579
|
+
captured: capturedToolUses.length
|
|
18580
|
+
});
|
|
18581
|
+
} else {
|
|
18582
|
+
claudeLog("upstream.failed", {
|
|
18583
|
+
mode: "non_stream",
|
|
18584
|
+
model,
|
|
18585
|
+
durationMs: Date.now() - upstreamStartAt,
|
|
18586
|
+
error: error instanceof Error ? error.message : String(error),
|
|
18587
|
+
...stderrOutput ? { stderr: stderrOutput } : {}
|
|
18588
|
+
});
|
|
18589
|
+
throw error;
|
|
18590
|
+
}
|
|
18591
|
+
}
|
|
18592
|
+
if (outputFormat) {
|
|
18593
|
+
if (!hasStructuredOutput) {
|
|
18594
|
+
throw new Error("Structured output was requested but the SDK returned no structured_output result");
|
|
18595
|
+
}
|
|
18596
|
+
contentBlocks.splice(0, contentBlocks.length, {
|
|
18597
|
+
type: "text",
|
|
18598
|
+
text: structuredOutputText(structuredOutput)
|
|
18454
18599
|
});
|
|
18455
|
-
throw error;
|
|
18456
18600
|
}
|
|
18457
18601
|
if (passthrough && capturedToolUses.length > 0) {
|
|
18458
18602
|
const capturedById = new Map(capturedToolUses.map((tu) => [tu.id, tu]));
|
|
@@ -18603,6 +18747,8 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18603
18747
|
sdkUuidMap.push(null);
|
|
18604
18748
|
let messageStartEmitted = false;
|
|
18605
18749
|
let lastUsage;
|
|
18750
|
+
let hasStructuredOutput = false;
|
|
18751
|
+
let structuredOutput;
|
|
18606
18752
|
const streamedToolUseIds = new Set;
|
|
18607
18753
|
try {
|
|
18608
18754
|
let currentSessionId;
|
|
@@ -18644,6 +18790,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18644
18790
|
effort,
|
|
18645
18791
|
thinking,
|
|
18646
18792
|
taskBudget,
|
|
18793
|
+
outputFormat,
|
|
18647
18794
|
betas,
|
|
18648
18795
|
settingSources,
|
|
18649
18796
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18656,7 +18803,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18656
18803
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18657
18804
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18658
18805
|
advisorModel
|
|
18659
|
-
}))) {
|
|
18806
|
+
}, requestAbort.controller))) {
|
|
18660
18807
|
if (event.type === "rate_limit_event") {
|
|
18661
18808
|
rateLimitStore.record(event.rate_limit_info);
|
|
18662
18809
|
}
|
|
@@ -18707,6 +18854,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18707
18854
|
effort,
|
|
18708
18855
|
thinking,
|
|
18709
18856
|
taskBudget,
|
|
18857
|
+
outputFormat,
|
|
18710
18858
|
betas,
|
|
18711
18859
|
settingSources,
|
|
18712
18860
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18719,7 +18867,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18719
18867
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18720
18868
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18721
18869
|
advisorModel
|
|
18722
|
-
}));
|
|
18870
|
+
}, requestAbort.controller));
|
|
18723
18871
|
return;
|
|
18724
18872
|
}
|
|
18725
18873
|
if (isExtraUsageRequiredError(errMsg) && hasExtendedContext(model)) {
|
|
@@ -18773,6 +18921,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18773
18921
|
effort,
|
|
18774
18922
|
thinking,
|
|
18775
18923
|
taskBudget,
|
|
18924
|
+
outputFormat,
|
|
18776
18925
|
betas,
|
|
18777
18926
|
settingSources,
|
|
18778
18927
|
codeSystemPrompt: sdkFeatures.codeSystemPrompt,
|
|
@@ -18785,7 +18934,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18785
18934
|
sdkDebug: sdkFeatures.sdkDebug,
|
|
18786
18935
|
additionalDirectories: sdkFeatures.additionalDirectories ? sdkFeatures.additionalDirectories.split(",").map((d) => d.trim()).filter(Boolean) : undefined,
|
|
18787
18936
|
advisorModel
|
|
18788
|
-
}));
|
|
18937
|
+
}, requestAbort.controller));
|
|
18789
18938
|
return;
|
|
18790
18939
|
}
|
|
18791
18940
|
if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
|
|
@@ -18873,6 +19022,15 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18873
19022
|
if (message.type === "assistant" && message.uuid) {
|
|
18874
19023
|
sdkUuidMap.push(message.uuid);
|
|
18875
19024
|
}
|
|
19025
|
+
if (message.type === "result") {
|
|
19026
|
+
const resultUsage = message.usage;
|
|
19027
|
+
if (resultUsage)
|
|
19028
|
+
lastUsage = { ...lastUsage, ...resultUsage };
|
|
19029
|
+
if (outputFormat && "structured_output" in message) {
|
|
19030
|
+
hasStructuredOutput = true;
|
|
19031
|
+
structuredOutput = message.structured_output;
|
|
19032
|
+
}
|
|
19033
|
+
}
|
|
18876
19034
|
if (message.type === "stream_event") {
|
|
18877
19035
|
streamEventsSeen += 1;
|
|
18878
19036
|
if (!firstChunkAt) {
|
|
@@ -18886,6 +19044,18 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
18886
19044
|
const event = message.event;
|
|
18887
19045
|
const eventType = event.type;
|
|
18888
19046
|
const eventIndex = event.index;
|
|
19047
|
+
if (outputFormat) {
|
|
19048
|
+
if (eventType === "message_start") {
|
|
19049
|
+
const startUsage = event.message?.usage;
|
|
19050
|
+
if (startUsage)
|
|
19051
|
+
lastUsage = { ...lastUsage, ...startUsage };
|
|
19052
|
+
} else if (eventType === "message_delta") {
|
|
19053
|
+
const deltaUsage = event.usage;
|
|
19054
|
+
if (deltaUsage)
|
|
19055
|
+
lastUsage = { ...lastUsage, ...deltaUsage };
|
|
19056
|
+
}
|
|
19057
|
+
continue;
|
|
19058
|
+
}
|
|
18889
19059
|
if (eventType === "message_start") {
|
|
18890
19060
|
skipBlockIndices.clear();
|
|
18891
19061
|
sdkToClientIndex.clear();
|
|
@@ -19023,6 +19193,60 @@ data: ${JSON.stringify({ type: "message_stop" })}
|
|
|
19023
19193
|
} finally {
|
|
19024
19194
|
clearInterval(heartbeat);
|
|
19025
19195
|
}
|
|
19196
|
+
if (outputFormat) {
|
|
19197
|
+
if (!hasStructuredOutput) {
|
|
19198
|
+
throw new Error("Structured output was requested but the SDK returned no structured_output result");
|
|
19199
|
+
}
|
|
19200
|
+
const text = structuredOutputText(structuredOutput);
|
|
19201
|
+
const messageId = `msg_${Date.now()}`;
|
|
19202
|
+
safeEnqueue(encoder.encode(`event: message_start
|
|
19203
|
+
data: ${JSON.stringify({
|
|
19204
|
+
type: "message_start",
|
|
19205
|
+
message: {
|
|
19206
|
+
id: messageId,
|
|
19207
|
+
type: "message",
|
|
19208
|
+
role: "assistant",
|
|
19209
|
+
content: [],
|
|
19210
|
+
model: body.model,
|
|
19211
|
+
stop_reason: null,
|
|
19212
|
+
stop_sequence: null,
|
|
19213
|
+
usage: { input_tokens: lastUsage?.input_tokens ?? 0, output_tokens: 0 }
|
|
19214
|
+
}
|
|
19215
|
+
})}
|
|
19216
|
+
|
|
19217
|
+
`), "structured_message_start");
|
|
19218
|
+
safeEnqueue(encoder.encode(`event: content_block_start
|
|
19219
|
+
data: ${JSON.stringify({
|
|
19220
|
+
type: "content_block_start",
|
|
19221
|
+
index: 0,
|
|
19222
|
+
content_block: { type: "text", text: "" }
|
|
19223
|
+
})}
|
|
19224
|
+
|
|
19225
|
+
`), "structured_block_start");
|
|
19226
|
+
safeEnqueue(encoder.encode(`event: content_block_delta
|
|
19227
|
+
data: ${JSON.stringify({
|
|
19228
|
+
type: "content_block_delta",
|
|
19229
|
+
index: 0,
|
|
19230
|
+
delta: { type: "text_delta", text }
|
|
19231
|
+
})}
|
|
19232
|
+
|
|
19233
|
+
`), "structured_text_delta");
|
|
19234
|
+
safeEnqueue(encoder.encode(`event: content_block_stop
|
|
19235
|
+
data: ${JSON.stringify({ type: "content_block_stop", index: 0 })}
|
|
19236
|
+
|
|
19237
|
+
`), "structured_block_stop");
|
|
19238
|
+
safeEnqueue(encoder.encode(`event: message_delta
|
|
19239
|
+
data: ${JSON.stringify({
|
|
19240
|
+
type: "message_delta",
|
|
19241
|
+
delta: { stop_reason: "end_turn", stop_sequence: null },
|
|
19242
|
+
usage: { output_tokens: lastUsage?.output_tokens ?? 0 }
|
|
19243
|
+
})}
|
|
19244
|
+
|
|
19245
|
+
`), "structured_message_delta");
|
|
19246
|
+
messageStartEmitted = true;
|
|
19247
|
+
eventsForwarded += 5;
|
|
19248
|
+
textEventsForwarded += 1;
|
|
19249
|
+
}
|
|
19026
19250
|
claudeLog("upstream.completed", {
|
|
19027
19251
|
mode: "stream",
|
|
19028
19252
|
model,
|
|
@@ -19227,7 +19451,7 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
19227
19451
|
} : classifyError(errMsg);
|
|
19228
19452
|
claudeLog("proxy.anthropic.error", { error: errMsg, classified: streamErr.type });
|
|
19229
19453
|
const sdkTerm = extractSdkTermination(errMsg);
|
|
19230
|
-
const canRecoverAsToolUse = sdkTerm.reason === "max_turns" && passthrough && capturedToolUses.length > 0 && messageStartEmitted;
|
|
19454
|
+
const canRecoverAsToolUse = (sdkTerm.reason === "max_turns" || sdkTerm.reason === "aborted" && sawDuplicateToolUse) && passthrough && capturedToolUses.length > 0 && messageStartEmitted;
|
|
19231
19455
|
if (canRecoverAsToolUse) {
|
|
19232
19456
|
diagnosticLog2.session(`${requestMeta.requestId} sdk_termination_recovered ${formatSdkTermination(sdkTerm, {
|
|
19233
19457
|
model,
|
|
@@ -19374,10 +19598,17 @@ data: ${JSON.stringify({
|
|
|
19374
19598
|
} catch {}
|
|
19375
19599
|
streamClosed = true;
|
|
19376
19600
|
}
|
|
19601
|
+
} finally {
|
|
19602
|
+
requestAbort.detach();
|
|
19377
19603
|
}
|
|
19604
|
+
},
|
|
19605
|
+
cancel(reason) {
|
|
19606
|
+
requestAbort.abort(reason);
|
|
19607
|
+
requestAbort.detach();
|
|
19378
19608
|
}
|
|
19379
19609
|
});
|
|
19380
19610
|
const streamSessionId = resumeSessionId || `session_${Date.now()}`;
|
|
19611
|
+
streamOwnsAbortLink = true;
|
|
19381
19612
|
return new Response(readable, {
|
|
19382
19613
|
headers: {
|
|
19383
19614
|
"Content-Type": "text/event-stream",
|
|
@@ -19425,6 +19656,9 @@ data: ${JSON.stringify({
|
|
|
19425
19656
|
error: classified.type
|
|
19426
19657
|
});
|
|
19427
19658
|
return new Response(JSON.stringify({ type: "error", error: { type: classified.type, message: classified.message } }), { status: classified.status, headers: { "Content-Type": "application/json" } });
|
|
19659
|
+
} finally {
|
|
19660
|
+
if (!streamOwnsAbortLink)
|
|
19661
|
+
requestAbort.detach();
|
|
19428
19662
|
}
|
|
19429
19663
|
});
|
|
19430
19664
|
};
|
|
@@ -19926,7 +20160,7 @@ async function startProxyServer(config = {}) {
|
|
|
19926
20160
|
console.log(`Meridian running at http://${finalConfig.host}:${info.port}`);
|
|
19927
20161
|
console.log(`Telemetry dashboard: http://${finalConfig.host}:${info.port}/telemetry`);
|
|
19928
20162
|
const pins = resolveSdkModelDefaults();
|
|
19929
|
-
console.log(`Model pins: opus=${pins.ANTHROPIC_DEFAULT_OPUS_MODEL} sonnet=${pins.ANTHROPIC_DEFAULT_SONNET_MODEL} haiku=${pins.ANTHROPIC_DEFAULT_HAIKU_MODEL}`);
|
|
20163
|
+
console.log(`Model pins: fable=${pins.ANTHROPIC_DEFAULT_FABLE_MODEL} opus=${pins.ANTHROPIC_DEFAULT_OPUS_MODEL} sonnet=${pins.ANTHROPIC_DEFAULT_SONNET_MODEL} haiku=${pins.ANTHROPIC_DEFAULT_HAIKU_MODEL}`);
|
|
19930
20164
|
const claudeInfo = getResolvedClaudeExecutableInfo();
|
|
19931
20165
|
if (claudeInfo) {
|
|
19932
20166
|
console.log(`Claude executable: ${claudeInfo.path} (resolved via ${claudeInfo.source})`);
|
package/dist/cli.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
startProxyServer
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-9pcv2qnp.js";
|
|
5
5
|
import"./cli-cx463q74.js";
|
|
6
6
|
import"./cli-sry5aqdj.js";
|
|
7
7
|
import"./cli-4rqtm83g.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveClaudeExecutableAsync
|
|
10
|
-
} from "./cli-
|
|
10
|
+
} from "./cli-7bygmvmv.js";
|
|
11
11
|
import"./cli-340h1chz.js";
|
|
12
12
|
import"./cli-je60fevk.js";
|
|
13
13
|
import"./cli-1kbcm3yn.js";
|
|
@@ -53,7 +53,7 @@ See https://github.com/rynfar/meridian for full documentation.`);
|
|
|
53
53
|
process.exit(0);
|
|
54
54
|
}
|
|
55
55
|
if (args[0] === "profile") {
|
|
56
|
-
const { profileAdd, profileAddOauthToken, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-
|
|
56
|
+
const { profileAdd, profileAddOauthToken, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-w5gpxkyh.js");
|
|
57
57
|
const subcommand = args[1];
|
|
58
58
|
const profileId = args[2];
|
|
59
59
|
const headless = args.includes("--headless");
|
package/dist/proxy/models.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Model mapping and Claude executable resolution.
|
|
3
3
|
*/
|
|
4
|
-
export type ClaudeModel = "sonnet" | "sonnet[1m]" | "opus" | "opus[1m]" | "haiku";
|
|
4
|
+
export type ClaudeModel = "sonnet" | "sonnet[1m]" | "opus" | "opus[1m]" | "haiku" | "fable" | "fable[1m]";
|
|
5
5
|
/**
|
|
6
6
|
* Current canonical pins for the `sonnet`/`opus`/`haiku` SDK aliases.
|
|
7
7
|
*
|
|
@@ -18,6 +18,7 @@ export type ClaudeModel = "sonnet" | "sonnet[1m]" | "opus" | "opus[1m]" | "haiku
|
|
|
18
18
|
* override via MERIDIAN_DEFAULT_{TYPE}_MODEL (proxy-side) or
|
|
19
19
|
* ANTHROPIC_DEFAULT_{TYPE}_MODEL (shell env, wins over Meridian's pin).
|
|
20
20
|
*/
|
|
21
|
+
export declare const CANONICAL_FABLE_MODEL = "claude-fable-5";
|
|
21
22
|
export declare const CANONICAL_OPUS_MODEL = "claude-opus-4-8";
|
|
22
23
|
export declare const CANONICAL_SONNET_MODEL = "claude-sonnet-4-6";
|
|
23
24
|
export declare const CANONICAL_HAIKU_MODEL = "claude-haiku-4-5";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,18 @@ export declare function computeToolSetKey(tools: Array<{
|
|
|
40
40
|
input_schema?: unknown;
|
|
41
41
|
defer_loading?: boolean;
|
|
42
42
|
}>): string;
|
|
43
|
+
/**
|
|
44
|
+
* Stable semantic signature for a forwarded tool_use: tool name + a
|
|
45
|
+
* key-order-independent serialization of its input. Two tool calls with the
|
|
46
|
+
* same name and the same arguments share a signature even if the SDK assigns
|
|
47
|
+
* them different tool_use ids.
|
|
48
|
+
*
|
|
49
|
+
* Used by the passthrough capture path to tell apart genuine parallel calls
|
|
50
|
+
* (distinct signatures — e.g. get_weather vs get_time) from an SDK internal
|
|
51
|
+
* continuation turn re-emitting a blocked call (identical signature, new id).
|
|
52
|
+
* The former are all forwarded; the latter is a duplicate and dropped.
|
|
53
|
+
*/
|
|
54
|
+
export declare function toolUseSignature(name: string, input: unknown): string;
|
|
43
55
|
/**
|
|
44
56
|
* Strip the MCP prefix from a tool name to get the OpenCode tool name.
|
|
45
57
|
* e.g., "mcp__oc__todowrite" → "todowrite"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passthroughTools.d.ts","sourceRoot":"","sources":["../../src/proxy/passthroughTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,eAAO,MAAM,oBAAoB,OAAO,CAAA;AACxC,eAAO,MAAM,sBAAsB,cAAmC,CAAA;AA0CtE,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,GAAG,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACjG,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE;;;;EA4DlC;AAqBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9E,MAAM,CASR;AAUD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvD;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,YAAY,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,GACtF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgCrC"}
|
|
1
|
+
{"version":3,"file":"passthroughTools.d.ts","sourceRoot":"","sources":["../../src/proxy/passthroughTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,eAAO,MAAM,oBAAoB,OAAO,CAAA;AACxC,eAAO,MAAM,sBAAsB,cAAmC,CAAA;AA0CtE,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,GAAG,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACjG,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE;;;;EA4DlC;AAqBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9E,MAAM,CASR;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvD;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,YAAY,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,GACtF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgCrC"}
|
package/dist/proxy/query.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Centralizes the construction of query() options, eliminating duplication
|
|
5
5
|
* between the streaming and non-streaming paths in server.ts.
|
|
6
6
|
*/
|
|
7
|
-
import type { Options, SettingSource } from "@anthropic-ai/claude-agent-sdk";
|
|
7
|
+
import type { Options, OutputFormat, SettingSource } from "@anthropic-ai/claude-agent-sdk";
|
|
8
8
|
import { createPassthroughMcpServer } from "./passthroughTools";
|
|
9
9
|
import type { Effort } from "./effort";
|
|
10
10
|
export interface QueryContext {
|
|
@@ -72,6 +72,8 @@ export interface QueryContext {
|
|
|
72
72
|
taskBudget?: {
|
|
73
73
|
total: number;
|
|
74
74
|
};
|
|
75
|
+
/** Native JSON-schema output contract for the Claude Agent SDK */
|
|
76
|
+
outputFormat?: OutputFormat;
|
|
75
77
|
/** Beta features to enable */
|
|
76
78
|
betas?: string[];
|
|
77
79
|
/** SDK setting sources — controls CLAUDE.md and user settings loading */
|
|
@@ -115,5 +117,5 @@ export interface BuildQueryResult {
|
|
|
115
117
|
* reports that as its working directory.
|
|
116
118
|
*/
|
|
117
119
|
export declare function buildCwdNote(sdkCwd: string, clientCwd?: string): string;
|
|
118
|
-
export declare function buildQueryOptions(ctx: QueryContext): BuildQueryResult;
|
|
120
|
+
export declare function buildQueryOptions(ctx: QueryContext, abortController?: AbortController): BuildQueryResult;
|
|
119
121
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAW,aAAa,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,8 +48,12 @@ declare class RateLimitStore {
|
|
|
48
48
|
* Record a rate-limit info snapshot.
|
|
49
49
|
* Last-write-wins per bucket key (rateLimitType). Older entries for the
|
|
50
50
|
* same key are overwritten — clients should treat the latest as canonical.
|
|
51
|
+
*
|
|
52
|
+
* `observedAt` defaults to the current wall clock but may be supplied
|
|
53
|
+
* explicitly so callers (and tests) can control the capture timestamp used
|
|
54
|
+
* for newest-first ordering in {@link getAll}.
|
|
51
55
|
*/
|
|
52
|
-
record(info: SDKRateLimitInfo | undefined | null): void;
|
|
56
|
+
record(info: SDKRateLimitInfo | undefined | null, observedAt?: number): void;
|
|
53
57
|
/** Snapshot all current entries, newest-first by observedAt. */
|
|
54
58
|
getAll(): RateLimitEntry[];
|
|
55
59
|
/** Snapshot a single bucket, or undefined if not yet seen. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimitStore.d.ts","sourceRoot":"","sources":["../../src/proxy/rateLimitStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAA;AAE3F,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAgD;IAE/D
|
|
1
|
+
{"version":3,"file":"rateLimitStore.d.ts","sourceRoot":"","sources":["../../src/proxy/rateLimitStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAA;AAE3F,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAgD;IAE/D;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAAE,UAAU,GAAE,MAAmB,GAAG,IAAI;IAMxF,gEAAgE;IAChE,MAAM,IAAI,cAAc,EAAE;IAI1B,8DAA8D;IAC9D,GAAG,CAAC,GAAG,EAAE,kBAAkB,GAAG,cAAc,GAAG,SAAS;IAIxD,2CAA2C;IAC3C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAA;AAElD,wCAAwC;AACxC,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface RequestAbortLink {
|
|
2
|
+
controller: AbortController;
|
|
3
|
+
abort: (reason?: unknown) => void;
|
|
4
|
+
detach: () => void;
|
|
5
|
+
}
|
|
6
|
+
/** Forward an HTTP request abort into the SDK query lifecycle. */
|
|
7
|
+
export declare function linkRequestAbort(signal: AbortSignal): RequestAbortLink;
|
|
8
|
+
//# sourceMappingURL=requestAbort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestAbort.d.ts","sourceRoot":"","sources":["../../src/proxy/requestAbort.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,eAAe,CAAA;IAC3B,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAyBtE"}
|
|
@@ -36,6 +36,18 @@ export type FeatureConfig = Record<string, Partial<AdapterFeatures>>;
|
|
|
36
36
|
* Priority: user config > adapter defaults > global defaults
|
|
37
37
|
*/
|
|
38
38
|
export declare function getFeaturesForAdapter(adapterName: string): AdapterFeatures;
|
|
39
|
+
/**
|
|
40
|
+
* Returns the thinking value the user has *explicitly* configured for an
|
|
41
|
+
* adapter, or undefined when none is set (i.e. it falls back to defaults).
|
|
42
|
+
*
|
|
43
|
+
* The merged result from getFeaturesForAdapter() can't tell an explicit
|
|
44
|
+
* "disabled" choice apart from the default "disabled" (DEFAULT_FEATURES.thinking
|
|
45
|
+
* is "disabled"). Those two cases must behave differently: an explicit
|
|
46
|
+
* "disabled" is an authoritative "no thinking" instruction that overrides client
|
|
47
|
+
* requests, whereas the default "disabled" is a no-op fallback so clients can
|
|
48
|
+
* still request thinking per-request. See the thinking resolution in server.ts.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getExplicitThinking(adapterName: string): AdapterFeatures["thinking"] | undefined;
|
|
39
51
|
/**
|
|
40
52
|
* Get the full config for all adapters (for the settings UI).
|
|
41
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkFeatures.d.ts","sourceRoot":"","sources":["../../src/proxy/sdkFeatures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,gBAAgB,EAAE,OAAO,CAAA;IACzB,kFAAkF;IAClF,kBAAkB,EAAE,OAAO,CAAA;IAC3B,4DAA4D;IAC5D,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAA;IACpC,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAA;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;IAC7C,4CAA4C;IAC5C,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAA;IACrB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAA;IACjB,uEAAuE;IACvE,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAqFpE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAU1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAOtE;AAKD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAgC5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAInG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAI9D"}
|
|
1
|
+
{"version":3,"file":"sdkFeatures.d.ts","sourceRoot":"","sources":["../../src/proxy/sdkFeatures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,gBAAgB,EAAE,OAAO,CAAA;IACzB,kFAAkF;IAClF,kBAAkB,EAAE,OAAO,CAAA;IAC3B,4DAA4D;IAC5D,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAA;IACpC,wDAAwD;IACxD,MAAM,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAA;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;IAC7C,4CAA4C;IAC5C,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAA;IACrB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAA;IACjB,uEAAuE;IACvE,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAqFpE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAU1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,SAAS,CAKhG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAOtE;AAKD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAgC5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAInG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAI9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AAGvD,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAA;AAKpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAkCnG,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EAEpB,KAAK,aAAa,EAGnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAsC,MAAM,iBAAiB,CAAA;AAGzI,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AAiQ7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAk8FhF;AAWD,wBAAgB,gCAAgC,IAAI,IAAI,CAavD;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmGhG"}
|
|
@@ -24,5 +24,18 @@ export declare class UpstreamIdleError extends Error {
|
|
|
24
24
|
readonly sinceLastMs: number;
|
|
25
25
|
constructor(idleMs: number, sinceLastMs: number);
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
/** Opaque handle returned by a clock's timer scheduler. */
|
|
28
|
+
type IdleTimerHandle = ReturnType<typeof setTimeout> | number;
|
|
29
|
+
/**
|
|
30
|
+
* Time source the guard depends on. Injectable so tests can drive idle
|
|
31
|
+
* detection deterministically instead of racing the real wall clock. Defaults
|
|
32
|
+
* to the platform clock in production.
|
|
33
|
+
*/
|
|
34
|
+
export interface IdleGuardClock {
|
|
35
|
+
now(): number;
|
|
36
|
+
setTimeout(fn: () => void, ms: number): IdleTimerHandle;
|
|
37
|
+
clearTimeout(handle: IdleTimerHandle): void;
|
|
38
|
+
}
|
|
39
|
+
export declare function guardUpstreamIdle<T>(source: AsyncIterable<T>, idleMs: number, onStall?: (sinceLastMs: number) => void, clock?: IdleGuardClock): AsyncGenerator<T>;
|
|
40
|
+
export {};
|
|
28
41
|
//# sourceMappingURL=streamIdleGuard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamIdleGuard.d.ts","sourceRoot":"","sources":["../../src/proxy/streamIdleGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;gBAChB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAMhD;AAED,wBAAuB,iBAAiB,CAAC,CAAC,EACxC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"streamIdleGuard.d.ts","sourceRoot":"","sources":["../../src/proxy/streamIdleGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;gBAChB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAMhD;AAED,2DAA2D;AAC3D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,MAAM,CAAA;AAE7D;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,IAAI,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,CAAA;IACvD,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;CAC5C;AAQD,wBAAuB,iBAAiB,CAAC,CAAC,EACxC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACvC,KAAK,GAAE,cAA0B,GAChC,cAAc,CAAC,CAAC,CAAC,CA4CnB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { OutputFormat } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
export type OutputFormatParseResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
value: OutputFormat | undefined;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
message: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Parse Anthropic's `output_config.format` into the Claude Agent SDK's native
|
|
11
|
+
* structured-output option. Absence is a no-op; malformed or unsupported
|
|
12
|
+
* values are rejected at the HTTP boundary instead of failing in the SDK.
|
|
13
|
+
*
|
|
14
|
+
* Combining `tools` with `output_config.format` is rejected: structured-output
|
|
15
|
+
* mode buffers the SDK's wire events and replaces the response content with the
|
|
16
|
+
* validated result, so a tool_use turn would be swallowed and the client-driven
|
|
17
|
+
* tool loop would never see it.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseOutputFormat(outputConfig: unknown, tools?: unknown): OutputFormatParseResult;
|
|
20
|
+
export declare function structuredOutputText(value: unknown): string;
|
|
21
|
+
//# sourceMappingURL=structuredOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredOutput.d.ts","sourceRoot":"","sources":["../../src/proxy/structuredOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAMlC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAyBjG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3D"}
|
package/dist/server.js
CHANGED
|
@@ -11,11 +11,11 @@ import {
|
|
|
11
11
|
runObserveHook,
|
|
12
12
|
runTransformHook,
|
|
13
13
|
startProxyServer
|
|
14
|
-
} from "./cli-
|
|
14
|
+
} from "./cli-9pcv2qnp.js";
|
|
15
15
|
import"./cli-cx463q74.js";
|
|
16
16
|
import"./cli-sry5aqdj.js";
|
|
17
17
|
import"./cli-4rqtm83g.js";
|
|
18
|
-
import"./cli-
|
|
18
|
+
import"./cli-7bygmvmv.js";
|
|
19
19
|
import"./cli-340h1chz.js";
|
|
20
20
|
import"./cli-je60fevk.js";
|
|
21
21
|
import"./cli-1kbcm3yn.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rynfar/meridian",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.45.1",
|
|
4
4
|
"description": "Local Anthropic API powered by your Claude Max subscription. One subscription, every agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/server.js",
|
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
"postbuild": "node scripts/fix-bun-exports.mjs && node --check dist/cli.js && node --check dist/server.js && node -e \"if(!require('fs').existsSync('dist/proxy/server.d.ts'))process.exit(1)\"",
|
|
26
26
|
"postinstall": "node ./node_modules/@anthropic-ai/claude-code/install.cjs 2>/dev/null || true",
|
|
27
27
|
"prepublishOnly": "bun run build",
|
|
28
|
-
"test": "bun test --path-ignore-patterns '**/*session-store*' --path-ignore-patterns '**/*proxy-async-ops*' --path-ignore-patterns '**/*models-auth-status*' --path-ignore-patterns '**/*proxy-context-usage-store*' --path-ignore-patterns '**/*proxy-passthrough-thinking*' --path-ignore-patterns '**/*session-recovery*' --path-ignore-patterns '**/*models.test*' && bun test src/__tests__/proxy-async-ops.test.ts && bun test src/__tests__/proxy-session-store.test.ts && bun test src/__tests__/session-store-pruning.test.ts && bun test src/__tests__/proxy-session-store-locking.test.ts && bun test src/__tests__/proxy-context-usage-store.test.ts && bun test src/__tests__/models-auth-status.test.ts && bun test src/__tests__/proxy-passthrough-thinking.test.ts && bun test src/__tests__/proxy-session-recovery.test.ts && bun test src/__tests__/models.test.ts",
|
|
28
|
+
"test": "bun test --path-ignore-patterns '**/*session-store*' --path-ignore-patterns '**/*proxy-async-ops*' --path-ignore-patterns '**/*models-auth-status*' --path-ignore-patterns '**/*proxy-context-usage-store*' --path-ignore-patterns '**/*proxy-passthrough-thinking*' --path-ignore-patterns '**/*proxy-thinking-setting*' --path-ignore-patterns '**/*session-recovery*' --path-ignore-patterns '**/*models.test*' && bun test src/__tests__/proxy-async-ops.test.ts && bun test src/__tests__/proxy-session-store.test.ts && bun test src/__tests__/session-store-pruning.test.ts && bun test src/__tests__/proxy-session-store-locking.test.ts && bun test src/__tests__/proxy-context-usage-store.test.ts && bun test src/__tests__/models-auth-status.test.ts && bun test src/__tests__/proxy-passthrough-thinking.test.ts && bun test src/__tests__/proxy-session-recovery.test.ts && bun test src/__tests__/proxy-thinking-setting.test.ts && bun test src/__tests__/models.test.ts",
|
|
29
29
|
"nix:lock": "bun2nix -o bun.nix",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
31
|
"proxy:direct": "bun run ./bin/cli.ts"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@anthropic-ai/claude-agent-sdk": "^0.2.117",
|
|
35
|
-
"@anthropic-ai/claude-code": "^2.1.
|
|
35
|
+
"@anthropic-ai/claude-code": "^2.1.198",
|
|
36
36
|
"jsonc-parser": "^3.3.1",
|
|
37
37
|
"libsql": "^0.5.29"
|
|
38
38
|
},
|