@claudexor/harness-claude 3.13.0 → 3.14.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/capability-profile.d.ts +12 -7
- package/dist/capability-profile.d.ts.map +1 -1
- package/dist/capability-profile.js +14 -10
- package/dist/capability-profile.js.map +1 -1
- package/dist/effort-probe.d.ts +21 -6
- package/dist/effort-probe.d.ts.map +1 -1
- package/dist/effort-probe.js +77 -17
- package/dist/effort-probe.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -21
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +7 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +8 -1
- package/dist/interactive.js.map +1 -1
- package/dist/model-probe.d.ts +109 -0
- package/dist/model-probe.d.ts.map +1 -0
- package/dist/model-probe.js +396 -0
- package/dist/model-probe.js.map +1 -0
- package/dist/vendor-cli-version.d.ts +7 -5
- package/dist/vendor-cli-version.d.ts.map +1 -1
- package/dist/vendor-cli-version.js +8 -6
- package/dist/vendor-cli-version.js.map +1 -1
- package/package.json +5 -5
|
@@ -4,9 +4,10 @@ export declare const CLAUDE_MANAGED_LOGIN: {
|
|
|
4
4
|
readonly stdin: "pipe";
|
|
5
5
|
};
|
|
6
6
|
/**
|
|
7
|
-
* Manifest model
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Manifest model hint list: the frozen floor every `models()` answer carries
|
|
8
|
+
* (`origin: "hint"`), judged under the adapter's ADVISORY declaration — an
|
|
9
|
+
* explicit model outside it is forwarded to the vendor with a note, never
|
|
10
|
+
* refused (INV-104). Stable aliases plus current full ids; verified against the vendor
|
|
10
11
|
* model-config docs and the INSTALLED CLI recorded in
|
|
11
12
|
* `CLAUDE_KNOWN_MODELS_VERIFIED_AGAINST`.
|
|
12
13
|
*/
|
|
@@ -16,10 +17,14 @@ export declare const CLAUDE_KNOWN_MODELS: readonly string[];
|
|
|
16
17
|
* known-model list remains the SSOT: a newly verified full id automatically
|
|
17
18
|
* joins its family without another quota-router patch. */
|
|
18
19
|
export declare function claudeQuotaModelAliases(displayName: string): string[];
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
/**
|
|
21
|
+
* Installed vendor CLI the known-model list above was last ACTUALLY verified
|
|
22
|
+
* against. A frozen literal on purpose, no longer an alias of the installer pin
|
|
23
|
+
* (vendor-cli-version.ts): aliasing let a pin bump silently re-stamp this list
|
|
24
|
+
* as "verified on the new CLI" when nobody re-checked it. The list is now a
|
|
25
|
+
* hint seed behind the live `models()` producer (model-probe.ts), it never
|
|
26
|
+
* grows again, and its stamp only moves when someone re-verifies the ids.
|
|
27
|
+
*/
|
|
23
28
|
export declare const CLAUDE_KNOWN_MODELS_VERIFIED_AGAINST: string;
|
|
24
29
|
export declare const CLAUDE_CAPABILITY_PROFILE: HarnessCapabilityProfile;
|
|
25
30
|
//# sourceMappingURL=capability-profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-profile.d.ts","sourceRoot":"","sources":["../src/capability-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"capability-profile.d.ts","sourceRoot":"","sources":["../src/capability-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB;aAAK,KAAK,EAAE,MAAM;CAAW,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAmBhD,CAAC;AAEF;;;0DAG0D;AAC1D,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAWrE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oCAAoC,EAAE,MAAkB,CAAC;AAEtE,eAAO,MAAM,yBAAyB,EAAE,wBAqCpC,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { HarnessCapabilityProfile as HarnessCapabilityProfileSchema } from "@claudexor/schema";
|
|
2
|
-
import { CLAUDE_VENDOR_CLI_VERSION } from "./vendor-cli-version.js";
|
|
3
2
|
/** One manifest-owned declaration of the managed login's stdin contract. */
|
|
4
3
|
export const CLAUDE_MANAGED_LOGIN = { stdin: "pipe" };
|
|
5
4
|
/**
|
|
6
|
-
* Manifest model
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Manifest model hint list: the frozen floor every `models()` answer carries
|
|
6
|
+
* (`origin: "hint"`), judged under the adapter's ADVISORY declaration — an
|
|
7
|
+
* explicit model outside it is forwarded to the vendor with a note, never
|
|
8
|
+
* refused (INV-104). Stable aliases plus current full ids; verified against the vendor
|
|
9
9
|
* model-config docs and the INSTALLED CLI recorded in
|
|
10
10
|
* `CLAUDE_KNOWN_MODELS_VERIFIED_AGAINST`.
|
|
11
11
|
*/
|
|
@@ -16,7 +16,7 @@ export const CLAUDE_KNOWN_MODELS = [
|
|
|
16
16
|
"fable",
|
|
17
17
|
"best",
|
|
18
18
|
// Fable 5.1 requires Claude Code >= 2.1.251. Re-verified through the
|
|
19
|
-
// pinned 2.1.261 CLI with observed_model claude-fable-5-1.
|
|
19
|
+
// then-pinned 2.1.261 CLI with observed_model claude-fable-5-1.
|
|
20
20
|
"claude-fable-5-1",
|
|
21
21
|
"claude-fable-5",
|
|
22
22
|
"claude-sonnet-5",
|
|
@@ -44,11 +44,15 @@ export function claudeQuotaModelAliases(displayName) {
|
|
|
44
44
|
// disclosed which model it actually selected.
|
|
45
45
|
return [...new Set([...(aliases.length > 0 ? aliases : [family]), "best"])];
|
|
46
46
|
}
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Installed vendor CLI the known-model list above was last ACTUALLY verified
|
|
49
|
+
* against. A frozen literal on purpose, no longer an alias of the installer pin
|
|
50
|
+
* (vendor-cli-version.ts): aliasing let a pin bump silently re-stamp this list
|
|
51
|
+
* as "verified on the new CLI" when nobody re-checked it. The list is now a
|
|
52
|
+
* hint seed behind the live `models()` producer (model-probe.ts), it never
|
|
53
|
+
* grows again, and its stamp only moves when someone re-verifies the ids.
|
|
54
|
+
*/
|
|
55
|
+
export const CLAUDE_KNOWN_MODELS_VERIFIED_AGAINST = "2.1.261";
|
|
52
56
|
export const CLAUDE_CAPABILITY_PROFILE = HarnessCapabilityProfileSchema.parse({
|
|
53
57
|
auth: {
|
|
54
58
|
supported_sources: ["native_session", "oauth_token_env", "api_key_env"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-profile.js","sourceRoot":"","sources":["../src/capability-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,IAAI,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"capability-profile.js","sourceRoot":"","sources":["../src/capability-profile.ts"],"names":[],"mappings":"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"}
|
package/dist/effort-probe.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { EffortHint } from "@claudexor/schema";
|
|
|
21
21
|
export declare const BIN: string;
|
|
22
22
|
/**
|
|
23
23
|
* Recorded fallback, captured from `claude --help` on the CLI version stamped
|
|
24
|
-
* below (2.1.
|
|
24
|
+
* below (2.1.281 retains the full low/medium/high/xhigh/max ladder). Used ONLY
|
|
25
25
|
* when the live parse cannot answer.
|
|
26
26
|
*/
|
|
27
27
|
export declare const CLAUDE_EFFORT_SNAPSHOT: readonly EffortHint[];
|
|
@@ -39,7 +39,7 @@ export declare const CLAUDE_EFFORT_SNAPSHOT_VERIFIED_AGAINST: string;
|
|
|
39
39
|
* — `--effort xhigh` then went to a CLI that refuses the flag.
|
|
40
40
|
*
|
|
41
41
|
* The installed version string is whatever `claude --version` printed
|
|
42
|
-
* (e.g. `2.1.
|
|
42
|
+
* (e.g. `2.1.281 (Claude Code)`), so the comparison extracts the full dotted
|
|
43
43
|
* numeric token and requires it to EQUAL the snapshot stamp exactly. An
|
|
44
44
|
* unknown or unparseable version can never vouch for the snapshot.
|
|
45
45
|
*/
|
|
@@ -70,13 +70,26 @@ export declare function claudeAdvertisedEffortsForRun(efforts: {
|
|
|
70
70
|
* happens only when it can matter (fallback ladder AND an effort actually
|
|
71
71
|
* requested); a live parse or a hint-less run never pays for it.
|
|
72
72
|
*/
|
|
73
|
-
export declare function claudeRunEffortResolution(spec: Pick<HarnessRunSpec, "session_id" | "effort_hint"
|
|
73
|
+
export declare function claudeRunEffortResolution(spec: Pick<HarnessRunSpec, "session_id" | "effort_hint"> & {
|
|
74
|
+
env?: HarnessRunSpec["env"];
|
|
75
|
+
}, deps: {
|
|
74
76
|
probeEffortLevels: typeof probeClaudeEffortLevels;
|
|
75
|
-
detectVersion:
|
|
77
|
+
detectVersion: typeof detectClaudeVersion;
|
|
76
78
|
}, abortSignal?: AbortSignal): Promise<{
|
|
77
79
|
advertised: readonly EffortHint[];
|
|
78
80
|
disclosure: HarnessEvent | null;
|
|
79
81
|
}>;
|
|
82
|
+
/** The PATH a run's env patch selects the binary on, when it carries one. */
|
|
83
|
+
export declare function claudeRunPatchPath(spec: {
|
|
84
|
+
env?: HarnessRunSpec["env"];
|
|
85
|
+
}): string | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* `claude --version` of the binary a caller will execute — resolved and spawned
|
|
88
|
+
* exactly as the `--help` memo is (host PATH, or the caller's PATH patch), so the
|
|
89
|
+
* snapshot-trust gate (INV-105) judges the binary whose ladder it fell back
|
|
90
|
+
* from, never a different host install's. Null when nothing could be spawned.
|
|
91
|
+
*/
|
|
92
|
+
export declare function detectClaudeVersion(abortSignal?: AbortSignal, patchPath?: string): Promise<string | null>;
|
|
80
93
|
/**
|
|
81
94
|
* Pull the advertised levels out of `claude --help` text, or null when the
|
|
82
95
|
* `--effort` line is absent or documents no values.
|
|
@@ -99,13 +112,15 @@ type ClaudeHelpProbe = {
|
|
|
99
112
|
* anyway, and the ladder falls back to the snapshot for that one run — while the
|
|
100
113
|
* capture keeps running for everybody else.
|
|
101
114
|
*/
|
|
102
|
-
export declare function probeClaudeHelp(abortSignal?: AbortSignal): Promise<ClaudeHelpProbe>;
|
|
115
|
+
export declare function probeClaudeHelp(abortSignal?: AbortSignal, patchPath?: string): Promise<ClaudeHelpProbe>;
|
|
103
116
|
/**
|
|
104
117
|
* The effort ladder the INSTALLED claude binary advertises, falling back to the
|
|
105
118
|
* recorded snapshot when `--help` cannot be read or no longer documents the
|
|
106
119
|
* values. A probe failure costs freshness, never the run.
|
|
107
120
|
*/
|
|
108
|
-
export declare function probeClaudeEffortLevels(abortSignal?: AbortSignal
|
|
121
|
+
export declare function probeClaudeEffortLevels(abortSignal?: AbortSignal,
|
|
122
|
+
/** The run's PATH patch, when its env carries one (see helpProbeIdentity). */
|
|
123
|
+
patchPath?: string): Promise<{
|
|
109
124
|
levels: readonly EffortHint[];
|
|
110
125
|
live: boolean;
|
|
111
126
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effort-probe.d.ts","sourceRoot":"","sources":["../src/effort-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"effort-probe.d.ts","sourceRoot":"","sources":["../src/effort-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/effort-probe.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { EffortHint } from "@claudexor/schema";
|
|
2
|
-
import { normalizeEffort, resolveEffort, runCapture } from "@claudexor/core";
|
|
2
|
+
import { harnessBinaryIdentity, harnessBinaryIdentityOnPath, normalizeEffort, resolveEffort, runCapture, } from "@claudexor/core";
|
|
3
3
|
import { nowIso, redactSecrets } from "@claudexor/util";
|
|
4
4
|
import { CLAUDE_VENDOR_CLI_VERSION } from "./vendor-cli-version.js";
|
|
5
5
|
export const BIN = process.env.CLAUDEXOR_CLAUDE_BIN || "claude";
|
|
6
6
|
/**
|
|
7
7
|
* Recorded fallback, captured from `claude --help` on the CLI version stamped
|
|
8
|
-
* below (2.1.
|
|
8
|
+
* below (2.1.281 retains the full low/medium/high/xhigh/max ladder). Used ONLY
|
|
9
9
|
* when the live parse cannot answer.
|
|
10
10
|
*/
|
|
11
11
|
export const CLAUDE_EFFORT_SNAPSHOT = [
|
|
@@ -29,7 +29,7 @@ export const CLAUDE_EFFORT_SNAPSHOT_VERIFIED_AGAINST = CLAUDE_VENDOR_CLI_VERSION
|
|
|
29
29
|
* — `--effort xhigh` then went to a CLI that refuses the flag.
|
|
30
30
|
*
|
|
31
31
|
* The installed version string is whatever `claude --version` printed
|
|
32
|
-
* (e.g. `2.1.
|
|
32
|
+
* (e.g. `2.1.281 (Claude Code)`), so the comparison extracts the full dotted
|
|
33
33
|
* numeric token and requires it to EQUAL the snapshot stamp exactly. An
|
|
34
34
|
* unknown or unparseable version can never vouch for the snapshot.
|
|
35
35
|
*/
|
|
@@ -67,12 +67,41 @@ export function claudeAdvertisedEffortsForRun(efforts, installedVersion) {
|
|
|
67
67
|
* requested); a live parse or a hint-less run never pays for it.
|
|
68
68
|
*/
|
|
69
69
|
export async function claudeRunEffortResolution(spec, deps, abortSignal) {
|
|
70
|
-
|
|
70
|
+
// Both answers must come from the binary THIS run will execute: a PATH in the
|
|
71
|
+
// run's env patch replaces the normalized PATH at spawn (see helpProbeIdentity),
|
|
72
|
+
// and a host binary's version must never vouch for the snapshot on the patch's.
|
|
73
|
+
const patchPath = claudeRunPatchPath(spec);
|
|
74
|
+
const efforts = await deps.probeEffortLevels(abortSignal, patchPath);
|
|
71
75
|
const advertised = efforts.live || !spec.effort_hint
|
|
72
76
|
? efforts.levels
|
|
73
|
-
: claudeAdvertisedEffortsForRun(efforts, await deps.detectVersion(abortSignal));
|
|
77
|
+
: claudeAdvertisedEffortsForRun(efforts, await deps.detectVersion(abortSignal, patchPath));
|
|
74
78
|
return { advertised, disclosure: claudeEffortDisclosureEvent(spec, advertised) };
|
|
75
79
|
}
|
|
80
|
+
/** The PATH a run's env patch selects the binary on, when it carries one. */
|
|
81
|
+
export function claudeRunPatchPath(spec) {
|
|
82
|
+
return typeof spec.env?.PATH === "string" ? spec.env.PATH : undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* `claude --version` of the binary a caller will execute — resolved and spawned
|
|
86
|
+
* exactly as the `--help` memo is (host PATH, or the caller's PATH patch), so the
|
|
87
|
+
* snapshot-trust gate (INV-105) judges the binary whose ladder it fell back
|
|
88
|
+
* from, never a different host install's. Null when nothing could be spawned.
|
|
89
|
+
*/
|
|
90
|
+
export async function detectClaudeVersion(abortSignal, patchPath) {
|
|
91
|
+
try {
|
|
92
|
+
const r = await runCapture(helpProbeIdentity(patchPath).spawn, ["--version"], {
|
|
93
|
+
...(patchPath !== undefined ? { env: { PATH: patchPath } } : {}),
|
|
94
|
+
timeoutMs: 10_000,
|
|
95
|
+
abortSignal,
|
|
96
|
+
cancelSignal: "SIGTERM",
|
|
97
|
+
cancelKillDelayMs: 0,
|
|
98
|
+
});
|
|
99
|
+
return r.stdout.trim() || `${BIN} (version unknown)`;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
76
105
|
/**
|
|
77
106
|
* How many lines of a wrapped `--effort` block the parse will read. Generous
|
|
78
107
|
* next to the widest observed wrap (four lines at 40 columns) and still a hard
|
|
@@ -174,7 +203,33 @@ function readEffortGroup(body) {
|
|
|
174
203
|
* belonging to any one caller.
|
|
175
204
|
*/
|
|
176
205
|
const HELP_PROBE_TIMEOUT_MS = 10_000;
|
|
177
|
-
|
|
206
|
+
/**
|
|
207
|
+
* The memo is keyed by the BINARY IDENTITY (`harnessBinaryIdentity`: realpath,
|
|
208
|
+
* inode, size, mtime — one stat, no spawn), so a CLI updated at the same path
|
|
209
|
+
* is re-read on the next call instead of served the old ladder for the life
|
|
210
|
+
* of the daemon (live defect 2026-09-18: a stale `xhigh`-less ladder after an
|
|
211
|
+
* in-place update). An unresolvable binary keys as such; its capture fails and
|
|
212
|
+
* is forgotten below anyway, so the next call looks again. A run whose env
|
|
213
|
+
* patch carries a PATH executes the binary on THAT path (the spawn layer applies
|
|
214
|
+
* the patch verbatim over the normalized PATH), so its ladder is read from the
|
|
215
|
+
* same bytes: resolved on the exact patch PATH, spawned by absolute path. Two
|
|
216
|
+
* bounds of that, stated rather than engineered away: the memo is ONE slot, so
|
|
217
|
+
* a patched caller that alternates with host-keyed ones re-reads `--help` (one
|
|
218
|
+
* bounded spawn per alternation, never a wrong answer); and a RELATIVE entry
|
|
219
|
+
* in a patch PATH is resolved as the daemon sees it (its own cwd), so a binary
|
|
220
|
+
* reachable only through a project-relative entry is invisible to the probe
|
|
221
|
+
* and that run falls back to the snapshot ladder — use absolute directories.
|
|
222
|
+
*/
|
|
223
|
+
let helpProbe = null;
|
|
224
|
+
function helpProbeIdentity(patchPath) {
|
|
225
|
+
const id = patchPath === undefined
|
|
226
|
+
? harnessBinaryIdentity(BIN)
|
|
227
|
+
: harnessBinaryIdentityOnPath(BIN, patchPath);
|
|
228
|
+
return {
|
|
229
|
+
key: JSON.stringify(id ? [id.path, id.ino, id.size, id.mtimeMs] : ["unresolved", BIN, patchPath ?? null]),
|
|
230
|
+
spawn: id?.path ?? BIN,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
178
233
|
/** What an abandoned caller reads, without the shared capture ever seeing it. */
|
|
179
234
|
function abandonedProbe() {
|
|
180
235
|
return { ok: false, error: "claude --help probe abandoned: the caller was cancelled" };
|
|
@@ -202,12 +257,14 @@ function abandonedProbe() {
|
|
|
202
257
|
* machine running an older CLI does not merely lose freshness: it advertises and
|
|
203
258
|
* forwards `xhigh` to a binary that rejects it, for the life of the daemon.
|
|
204
259
|
*/
|
|
205
|
-
function sharedHelpCapture() {
|
|
206
|
-
|
|
207
|
-
|
|
260
|
+
function sharedHelpCapture(patchPath) {
|
|
261
|
+
const { key, spawn } = helpProbeIdentity(patchPath);
|
|
262
|
+
if (helpProbe?.key === key)
|
|
263
|
+
return helpProbe.promise;
|
|
208
264
|
const pending = (async () => {
|
|
209
265
|
try {
|
|
210
|
-
const result = await runCapture(
|
|
266
|
+
const result = await runCapture(spawn, ["--help"], {
|
|
267
|
+
...(patchPath !== undefined ? { env: { PATH: patchPath } } : {}),
|
|
211
268
|
timeoutMs: HELP_PROBE_TIMEOUT_MS,
|
|
212
269
|
cancelSignal: "SIGTERM",
|
|
213
270
|
cancelKillDelayMs: 0,
|
|
@@ -221,12 +278,13 @@ function sharedHelpCapture() {
|
|
|
221
278
|
};
|
|
222
279
|
}
|
|
223
280
|
})();
|
|
224
|
-
|
|
281
|
+
const memo = { key, promise: pending };
|
|
282
|
+
helpProbe = memo;
|
|
225
283
|
// Identity-guarded so a late settle can only ever clear its OWN memo, never a
|
|
226
284
|
// re-probe another caller has already started.
|
|
227
285
|
const forget = () => {
|
|
228
|
-
if (
|
|
229
|
-
|
|
286
|
+
if (helpProbe === memo)
|
|
287
|
+
helpProbe = null;
|
|
230
288
|
};
|
|
231
289
|
void pending.then((probe) => {
|
|
232
290
|
if (!probe.ok || probe.code === null)
|
|
@@ -240,8 +298,8 @@ function sharedHelpCapture() {
|
|
|
240
298
|
* anyway, and the ladder falls back to the snapshot for that one run — while the
|
|
241
299
|
* capture keeps running for everybody else.
|
|
242
300
|
*/
|
|
243
|
-
export function probeClaudeHelp(abortSignal) {
|
|
244
|
-
const shared = sharedHelpCapture();
|
|
301
|
+
export function probeClaudeHelp(abortSignal, patchPath) {
|
|
302
|
+
const shared = sharedHelpCapture(patchPath);
|
|
245
303
|
if (!abortSignal)
|
|
246
304
|
return shared;
|
|
247
305
|
if (abortSignal.aborted)
|
|
@@ -260,8 +318,10 @@ export function probeClaudeHelp(abortSignal) {
|
|
|
260
318
|
* recorded snapshot when `--help` cannot be read or no longer documents the
|
|
261
319
|
* values. A probe failure costs freshness, never the run.
|
|
262
320
|
*/
|
|
263
|
-
export async function probeClaudeEffortLevels(abortSignal
|
|
264
|
-
|
|
321
|
+
export async function probeClaudeEffortLevels(abortSignal,
|
|
322
|
+
/** The run's PATH patch, when its env carries one (see helpProbeIdentity). */
|
|
323
|
+
patchPath) {
|
|
324
|
+
const probe = await probeClaudeHelp(abortSignal, patchPath);
|
|
265
325
|
const parsed = probe.ok ? parseClaudeEffortHelp(probe.help) : null;
|
|
266
326
|
return parsed ? { levels: parsed, live: true } : { levels: CLAUDE_EFFORT_SNAPSHOT, live: false };
|
|
267
327
|
}
|
package/dist/effort-probe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effort-probe.js","sourceRoot":"","sources":["../src/effort-probe.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"effort-probe.js","sourceRoot":"","sources":["../src/effort-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,10 +8,11 @@ import { type ClaudeAuthStatusProbe } from "./auth-status.js";
|
|
|
8
8
|
export { clearClaudeAuthStatusCache, claudeAuthSourceReadiness, redactClaudeDoctorDetail, } from "./auth-status.js";
|
|
9
9
|
export type { ClaudeAuthStatusProbe } from "./auth-status.js";
|
|
10
10
|
import { smokeIsolatedApiKey, smokeIsolatedOAuthToken } from "./smoke.js";
|
|
11
|
-
import { probeClaudeEffortLevels } from "./effort-probe.js";
|
|
11
|
+
import { detectClaudeVersion, probeClaudeEffortLevels } from "./effort-probe.js";
|
|
12
12
|
export { BIN, CLAUDE_EFFORT_SNAPSHOT } from "./effort-probe.js";
|
|
13
13
|
export { CLAUDE_AUTH_REFRESH_TERMINATION_UNCONFIRMED, claudeOauthAccessTokenIsFresh, refreshClaudeNativeAuth, } from "./auth-refresh.js";
|
|
14
14
|
export { CLAUDE_VENDOR_CLI_VERSION } from "./vendor-cli-version.js";
|
|
15
|
+
import { probeClaudeModels } from "./model-probe.js";
|
|
15
16
|
export declare const CLAUDE_PROVIDER_ENV_DENYLIST: string[];
|
|
16
17
|
/** Exported for focused route-policy tests; runtime uses this exact selector. */
|
|
17
18
|
export declare const selectClaudeRunAuthRoute: typeof selectStrictAuthRoute;
|
|
@@ -26,10 +27,10 @@ export interface ClaudeReadonlyProfileProbe {
|
|
|
26
27
|
* a probe that failed once (or that a cancelled run read) stayed failed for the
|
|
27
28
|
* process lifetime, so a long-lived daemon reported readonly enforcement
|
|
28
29
|
* unavailable forever. It bought nothing either: the spawn is already memoized,
|
|
29
|
-
* and what is left is a handful of `includes` over text we already hold.
|
|
30
|
+
* and what is left is a handful of `includes` over text we already hold. A
|
|
31
|
+
* run's PATH patch selects the binary the flags are read from, as for the ladder.
|
|
30
32
|
*/
|
|
31
|
-
export declare function probeClaudeReadonlyProfile(abortSignal?: AbortSignal): Promise<ClaudeReadonlyProfileProbe>;
|
|
32
|
-
declare function detectVersion(abortSignal?: AbortSignal): Promise<string | null>;
|
|
33
|
+
export declare function probeClaudeReadonlyProfile(abortSignal?: AbortSignal, patchPath?: string): Promise<ClaudeReadonlyProfileProbe>;
|
|
33
34
|
/** Options for probing the default or explicitly selected native Claude store. */
|
|
34
35
|
export interface ClaudeAuthStatusProbeOptions {
|
|
35
36
|
env?: Record<string, string | null | undefined>;
|
|
@@ -49,7 +50,7 @@ declare function claudeOAuthToken(): string | null;
|
|
|
49
50
|
/** The runtime surface the profile module needs (test-stubbable). */
|
|
50
51
|
export type ClaudeProfileRuntimeDeps = Pick<ClaudeRuntimeDeps, "probeAuthStatus" | "resolveProfileSecret">;
|
|
51
52
|
type ClaudeRuntimeDeps = {
|
|
52
|
-
detectVersion: typeof
|
|
53
|
+
detectVersion: typeof detectClaudeVersion;
|
|
53
54
|
probeAuthStatus: typeof probeAuthStatus;
|
|
54
55
|
anthropicApiKey: typeof anthropicApiKey;
|
|
55
56
|
claudeOAuthToken: typeof claudeOAuthToken;
|
|
@@ -61,6 +62,8 @@ type ClaudeRuntimeDeps = {
|
|
|
61
62
|
probeReadonlyProfile: typeof probeClaudeReadonlyProfile;
|
|
62
63
|
/** Effort ladder of the installed binary; falls back to the recorded snapshot. */
|
|
63
64
|
probeEffortLevels: typeof probeClaudeEffortLevels;
|
|
65
|
+
/** Cached prompt-free initialize picker (model-probe.ts); total, never empty. */
|
|
66
|
+
probeModels: typeof probeClaudeModels;
|
|
64
67
|
runCliHarness: typeof runCliHarness;
|
|
65
68
|
};
|
|
66
69
|
export declare function createClaudeAdapter(deps?: Partial<ClaudeRuntimeDeps>): HarnessAdapter;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAMV,UAAU,EAGV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAc,cAAc,EAAsB,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAQL,UAAU,EACV,aAAa,EAEb,qBAAqB,EAItB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGxF,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAGvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { claudeMcpArgs } from "./mcp-args.js";
|
|
2
2
|
import { prepareClaudeSessionProcessing, claudeProcessingArgs, applyClaudeRunProcessing, claudeProcessingObserver, } from "./processing.js";
|
|
3
3
|
import { ConformanceReport as ConformanceReportSchema, HarnessManifest as HarnessManifestSchema, } from "@claudexor/schema";
|
|
4
|
-
import { abortSignalFromSpec, HarnessUnavailableError, interactionChannelFromSpec, needsScopedHomeKeychainBridge, normalizeEffort, providerScrubEnv, resolveHarnessBinary,
|
|
4
|
+
import { abortSignalFromSpec, HarnessUnavailableError, interactionChannelFromSpec, needsScopedHomeKeychainBridge, normalizeEffort, providerScrubEnv, resolveHarnessBinary, runCliHarness, PROVIDER_SECRET_ENV, selectStrictAuthRoute, selectedAuthAvailable, selectedAuthReady, shouldVerifyApiKey, } from "@claudexor/core";
|
|
5
5
|
import { resolveSecret } from "@claudexor/secrets";
|
|
6
6
|
import { CLAUDEXOR_VERSION, nowIso, redactSecrets } from "@claudexor/util";
|
|
7
7
|
import { CLAUDE_CAPABILITY_PROFILE, CLAUDE_KNOWN_MODELS, CLAUDE_KNOWN_MODELS_VERIFIED_AGAINST, } from "./capability-profile.js";
|
|
@@ -15,11 +15,12 @@ export { canonicalProfileConfigDir } from "./profile.js";
|
|
|
15
15
|
import { claudeAuthSourceReadiness, probeClaudeAuthStatus, redactClaudeDoctorDetail, staleClaudeAuthStatusEvent, } from "./auth-status.js";
|
|
16
16
|
export { clearClaudeAuthStatusCache, claudeAuthSourceReadiness, redactClaudeDoctorDetail, } from "./auth-status.js";
|
|
17
17
|
import { smokeIsolatedApiKey, smokeIsolatedOAuthToken } from "./smoke.js";
|
|
18
|
-
import { BIN, CLAUDE_EFFORT_SNAPSHOT, CLAUDE_EFFORT_SNAPSHOT_VERIFIED_AGAINST, claudeRunEffortResolution, probeClaudeEffortLevels, probeClaudeHelp, } from "./effort-probe.js";
|
|
18
|
+
import { BIN, CLAUDE_EFFORT_SNAPSHOT, CLAUDE_EFFORT_SNAPSHOT_VERIFIED_AGAINST, claudeRunEffortResolution, claudeRunPatchPath, detectClaudeVersion, probeClaudeEffortLevels, probeClaudeHelp, } from "./effort-probe.js";
|
|
19
19
|
export { BIN, CLAUDE_EFFORT_SNAPSHOT } from "./effort-probe.js";
|
|
20
20
|
export { CLAUDE_AUTH_REFRESH_TERMINATION_UNCONFIRMED, claudeOauthAccessTokenIsFresh, refreshClaudeNativeAuth, } from "./auth-refresh.js";
|
|
21
21
|
export { CLAUDE_VENDOR_CLI_VERSION } from "./vendor-cli-version.js";
|
|
22
22
|
import { claudeAttachmentBlocks, handleControlRequestFrame, initialSessionFrames, isControlRequestFrame, isResultFrame, } from "./interactive.js";
|
|
23
|
+
import { CLAUDE_MODEL_INVENTORY, probeClaudeModels } from "./model-probe.js";
|
|
23
24
|
export const CLAUDE_PROVIDER_ENV_DENYLIST = PROVIDER_SECRET_ENV.filter((k) => k !== "ANTHROPIC_API_KEY");
|
|
24
25
|
// The `--effort` ladder is read from the INSTALLED binary (`probeClaudeEffortLevels`).
|
|
25
26
|
/** Exported for focused route-policy tests; runtime uses this exact selector. */
|
|
@@ -61,10 +62,11 @@ const CLAUDE_READONLY_REQUIRED_FLAGS = [
|
|
|
61
62
|
* a probe that failed once (or that a cancelled run read) stayed failed for the
|
|
62
63
|
* process lifetime, so a long-lived daemon reported readonly enforcement
|
|
63
64
|
* unavailable forever. It bought nothing either: the spawn is already memoized,
|
|
64
|
-
* and what is left is a handful of `includes` over text we already hold.
|
|
65
|
+
* and what is left is a handful of `includes` over text we already hold. A
|
|
66
|
+
* run's PATH patch selects the binary the flags are read from, as for the ladder.
|
|
65
67
|
*/
|
|
66
|
-
export async function probeClaudeReadonlyProfile(abortSignal) {
|
|
67
|
-
const probe = await probeClaudeHelp(abortSignal);
|
|
68
|
+
export async function probeClaudeReadonlyProfile(abortSignal, patchPath) {
|
|
69
|
+
const probe = await probeClaudeHelp(abortSignal, patchPath);
|
|
68
70
|
if (!probe.ok) {
|
|
69
71
|
return {
|
|
70
72
|
supported: false,
|
|
@@ -86,20 +88,6 @@ export async function probeClaudeReadonlyProfile(abortSignal) {
|
|
|
86
88
|
: `readonly enforcement unavailable; missing ${missingFlags.join(", ") || `help exited ${probe.code}`}`,
|
|
87
89
|
};
|
|
88
90
|
}
|
|
89
|
-
async function detectVersion(abortSignal) {
|
|
90
|
-
try {
|
|
91
|
-
const r = await runCapture(BIN, ["--version"], {
|
|
92
|
-
timeoutMs: 10_000,
|
|
93
|
-
abortSignal,
|
|
94
|
-
cancelSignal: "SIGTERM",
|
|
95
|
-
cancelKillDelayMs: 0,
|
|
96
|
-
});
|
|
97
|
-
return r.stdout.trim() || `${BIN} (version unknown)`;
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
91
|
export function claudeNativeEnv(base, configDir) {
|
|
104
92
|
const raw = {
|
|
105
93
|
...(base ?? {}),
|
|
@@ -152,7 +140,7 @@ function claudeOAuthToken() {
|
|
|
152
140
|
}
|
|
153
141
|
export function createClaudeAdapter(deps = {}) {
|
|
154
142
|
const runtime = {
|
|
155
|
-
detectVersion,
|
|
143
|
+
detectVersion: detectClaudeVersion,
|
|
156
144
|
probeAuthStatus,
|
|
157
145
|
anthropicApiKey,
|
|
158
146
|
claudeOAuthToken,
|
|
@@ -161,6 +149,7 @@ export function createClaudeAdapter(deps = {}) {
|
|
|
161
149
|
smokeIsolatedOAuthToken,
|
|
162
150
|
probeReadonlyProfile: probeClaudeReadonlyProfile,
|
|
163
151
|
probeEffortLevels: probeClaudeEffortLevels,
|
|
152
|
+
probeModels: probeClaudeModels,
|
|
164
153
|
runCliHarness,
|
|
165
154
|
...deps,
|
|
166
155
|
};
|
|
@@ -196,6 +185,7 @@ export function createClaudeAdapter(deps = {}) {
|
|
|
196
185
|
adapter_version: CLAUDEXOR_VERSION,
|
|
197
186
|
provider_family: "anthropic",
|
|
198
187
|
capabilities: {
|
|
188
|
+
...CLAUDE_MODEL_INVENTORY,
|
|
199
189
|
processing_preferences: ["standard", "fast", "economy"],
|
|
200
190
|
plan: true,
|
|
201
191
|
implement: true,
|
|
@@ -461,6 +451,9 @@ export function createClaudeAdapter(deps = {}) {
|
|
|
461
451
|
review(spec) {
|
|
462
452
|
return runClaude(spec, runtime);
|
|
463
453
|
},
|
|
454
|
+
models(spec) {
|
|
455
|
+
return runtime.probeModels(spec, { resolveProfileSecret: runtime.resolveProfileSecret });
|
|
456
|
+
},
|
|
464
457
|
probeCredentialProfile(profile, abortSignal) {
|
|
465
458
|
return probeClaudeCredentialProfile(profile, runtime, abortSignal);
|
|
466
459
|
},
|
|
@@ -629,7 +622,7 @@ function toolPermissionSets(spec) {
|
|
|
629
622
|
async function* runClaude(spec, runtime) {
|
|
630
623
|
const abortSignal = abortSignalFromSpec(spec);
|
|
631
624
|
if (spec.access === "readonly") {
|
|
632
|
-
const readonlyProfile = await runtime.probeReadonlyProfile(abortSignal);
|
|
625
|
+
const readonlyProfile = await runtime.probeReadonlyProfile(abortSignal, claudeRunPatchPath(spec));
|
|
633
626
|
if (!readonlyProfile.supported) {
|
|
634
627
|
yield {
|
|
635
628
|
type: "error",
|