@claudexor/orchestrator 1.0.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/attemptTelemetry.d.ts +38 -2
  2. package/dist/attemptTelemetry.d.ts.map +1 -1
  3. package/dist/attemptTelemetry.js +75 -2
  4. package/dist/attemptTelemetry.js.map +1 -1
  5. package/dist/contract-gates.d.ts +21 -0
  6. package/dist/contract-gates.d.ts.map +1 -0
  7. package/dist/contract-gates.js +93 -0
  8. package/dist/contract-gates.js.map +1 -0
  9. package/dist/credential-profiles.d.ts +152 -0
  10. package/dist/credential-profiles.d.ts.map +1 -0
  11. package/dist/credential-profiles.js +270 -0
  12. package/dist/credential-profiles.js.map +1 -0
  13. package/dist/diffReview.d.ts +9 -1
  14. package/dist/diffReview.d.ts.map +1 -1
  15. package/dist/diffReview.js +114 -18
  16. package/dist/diffReview.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/modelGovernance.d.ts +6 -1
  22. package/dist/modelGovernance.d.ts.map +1 -1
  23. package/dist/modelGovernance.js +8 -2
  24. package/dist/modelGovernance.js.map +1 -1
  25. package/dist/orchestrateExecutor.d.ts +43 -0
  26. package/dist/orchestrateExecutor.d.ts.map +1 -0
  27. package/dist/orchestrateExecutor.js +207 -0
  28. package/dist/orchestrateExecutor.js.map +1 -0
  29. package/dist/orchestratePlanner.d.ts.map +1 -1
  30. package/dist/orchestratePlanner.js.map +1 -1
  31. package/dist/orchestrator.d.ts +100 -83
  32. package/dist/orchestrator.d.ts.map +1 -1
  33. package/dist/orchestrator.js +1008 -993
  34. package/dist/orchestrator.js.map +1 -1
  35. package/dist/outcomeReducer.d.ts +25 -0
  36. package/dist/outcomeReducer.d.ts.map +1 -0
  37. package/dist/outcomeReducer.js +121 -0
  38. package/dist/outcomeReducer.js.map +1 -0
  39. package/dist/policyFindings.d.ts +18 -0
  40. package/dist/policyFindings.d.ts.map +1 -0
  41. package/dist/policyFindings.js +166 -0
  42. package/dist/policyFindings.js.map +1 -0
  43. package/dist/requestRequirements.d.ts +38 -0
  44. package/dist/requestRequirements.d.ts.map +1 -0
  45. package/dist/requestRequirements.js +127 -0
  46. package/dist/requestRequirements.js.map +1 -0
  47. package/dist/reviewerPanel.d.ts +15 -1
  48. package/dist/reviewerPanel.d.ts.map +1 -1
  49. package/dist/reviewerPanel.js +85 -2
  50. package/dist/reviewerPanel.js.map +1 -1
  51. package/dist/routeContext.d.ts +37 -0
  52. package/dist/routeContext.d.ts.map +1 -0
  53. package/dist/routeContext.js +38 -0
  54. package/dist/routeContext.js.map +1 -0
  55. package/dist/runSupport.d.ts +37 -21
  56. package/dist/runSupport.d.ts.map +1 -1
  57. package/dist/runSupport.js +102 -78
  58. package/dist/runSupport.js.map +1 -1
  59. package/dist/runTelemetryWriter.d.ts +20 -0
  60. package/dist/runTelemetryWriter.d.ts.map +1 -0
  61. package/dist/runTelemetryWriter.js +68 -0
  62. package/dist/runTelemetryWriter.js.map +1 -0
  63. package/dist/runTerminals.d.ts +7 -1
  64. package/dist/runTerminals.d.ts.map +1 -1
  65. package/dist/runTerminals.js +42 -4
  66. package/dist/runTerminals.js.map +1 -1
  67. package/dist/structuredOutput.d.ts +33 -0
  68. package/dist/structuredOutput.d.ts.map +1 -0
  69. package/dist/structuredOutput.js +106 -0
  70. package/dist/structuredOutput.js.map +1 -0
  71. package/package.json +19 -18
  72. package/dist/finalVerifier.d.ts +0 -25
  73. package/dist/finalVerifier.d.ts.map +0 -1
  74. package/dist/finalVerifier.js +0 -110
  75. package/dist/finalVerifier.js.map +0 -1
@@ -5,7 +5,7 @@
5
5
  * no regex over prose, and a tool error is "recovered" only when the SAME
6
6
  * tool later succeeds against the SAME target.
7
7
  */
8
- import type { AttemptTelemetryRecord, ExternalContextPolicy, HarnessEvent, TaskContract, ToolKind } from "@claudexor/schema";
8
+ import type { AttemptTelemetryRecord, AuthSourceKind, ExternalContextPolicy, HarnessEvent, RequestRequirementResolution, TaskContract, ToolKind } from "@claudexor/schema";
9
9
  export interface ToolErrorRecord {
10
10
  tool: string;
11
11
  kind: ToolKind;
@@ -36,6 +36,7 @@ export interface WebEvidenceState {
36
36
  errorSummary: string | null;
37
37
  }
38
38
  export interface AttemptTelemetry {
39
+ requestRequirements: RequestRequirementResolution[];
39
40
  toolErrors: ToolErrorRecord[];
40
41
  /** tool_result events without a status field: never silently treated as ok. */
41
42
  statuslessResults: number;
@@ -44,15 +45,42 @@ export interface AttemptTelemetry {
44
45
  web: WebEvidenceState;
45
46
  /** Model identity the harness stream actually reported (route evidence). */
46
47
  observedModel: string | null;
48
+ /** Auth route the adapter disclosed for this attempt (route evidence; null = undisclosed). */
49
+ authMode: "local_session" | "api_key" | null;
50
+ /** Concrete credential source disclosed alongside the route (never guessed). */
51
+ authSource: AuthSourceKind | null;
52
+ /** Credential profile the attempt ACTUALLY ran under (INV-135), first-wins
53
+ * from the adapter's per-event stamp — rotation makes this differ from the
54
+ * contract's requested id, and the receipt must carry the effective truth. */
55
+ profileId: string | null;
56
+ /** Model hint the engine SENT this attempt (requested side; observedModel is
57
+ * the disclosed side of the model x route truth). */
58
+ requestedModel: string | null;
47
59
  /** Adapter-declared transient failures seen during this attempt. */
48
60
  transientFailures: {
49
61
  kind: NonNullable<HarnessEvent["transient"]>["kind"];
50
62
  retryDelayMs: number | null;
51
63
  }[];
64
+ /** TYPED vendor rate-limit signals seen during this attempt (W5.4): the
65
+ * rotation predicate reads these, never prose or plain transients. */
66
+ rateLimits: {
67
+ retryDelayMs: number | null;
68
+ resetsAt: string | null;
69
+ }[];
52
70
  /** Contract/outcome truth for this attempt, produced by the orchestrator. */
53
71
  outcome: AttemptOutcomeState | null;
72
+ /** Token usage summed across this attempt's usage events (money stays in the
73
+ * ledger, not here). Each field is null until at least one usage event
74
+ * reports it — cursor reports cost only (all null), raw-api has no cached —
75
+ * so "not reported" is never conflated with a real 0. Cross-harness caution:
76
+ * codex `cached ⊆ input`, claude `cached ∩ input = ∅` — never derive a total. */
77
+ usage: {
78
+ inputTokens: number | null;
79
+ outputTokens: number | null;
80
+ cachedInputTokens: number | null;
81
+ };
54
82
  }
55
- export declare function createAttemptTelemetry(policy: ExternalContextPolicy, webRequired: boolean, effectiveMode?: ExternalContextPolicy): AttemptTelemetry;
83
+ export declare function createAttemptTelemetry(policy: ExternalContextPolicy, webRequired: boolean, effectiveMode?: ExternalContextPolicy, requestRequirements?: RequestRequirementResolution[], requestedModel?: string | null): AttemptTelemetry;
56
84
  /**
57
85
  * Observe a normalized harness event into the attempt telemetry. Governance is
58
86
  * fully typed: only the `tool` ToolRef on tool_call/tool_result/file_change
@@ -71,6 +99,14 @@ export declare function setAttemptOutcome(t: AttemptTelemetry, opts: {
71
99
  /** Bounded telemetry summary for events/artifacts (full detail lives in telemetry.yaml). */
72
100
  export declare function telemetrySummary(t: AttemptTelemetry): Record<string, unknown>;
73
101
  export declare function attemptTelemetryRecord(attemptId: string, harnessId: string, t: AttemptTelemetry): AttemptTelemetryRecord;
102
+ /** Sum token usage across attempt records (candidates + synthesis), the same
103
+ * scope as the ledger's spend. A field stays null unless some attempt reported
104
+ * it, so "no harness reported tokens" never reads as a real 0. */
105
+ export declare function aggregateRunTokenUsage(records: AttemptTelemetryRecord[]): {
106
+ input_tokens: number | null;
107
+ output_tokens: number | null;
108
+ cached_input_tokens: number | null;
109
+ };
74
110
  export declare function aggregateRunWebEvidence(records: AttemptTelemetryRecord[], contract: TaskContract): AttemptTelemetryRecord["web"];
75
111
  /**
76
112
  * Web evidence gating (locked v0.7 semantics):
@@ -1 +1 @@
1
- {"version":3,"file":"attemptTelemetry.d.ts","sourceRoot":"","sources":["../src/attemptTelemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attemptTelemetry.d.ts","sourceRoot":"","sources":["../src/attemptTelemetry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { redactSecrets } from "@claudexor/util";
2
- export function createAttemptTelemetry(policy, webRequired, effectiveMode = policy) {
2
+ export function createAttemptTelemetry(policy, webRequired, effectiveMode = policy, requestRequirements = [], requestedModel = null) {
3
3
  return {
4
+ requestRequirements,
4
5
  toolErrors: [],
5
6
  statuslessResults: 0,
6
7
  droppedEvents: 0,
@@ -16,10 +17,21 @@ export function createAttemptTelemetry(policy, webRequired, effectiveMode = poli
16
17
  errorSummary: null,
17
18
  },
18
19
  observedModel: null,
20
+ authMode: null,
21
+ authSource: null,
22
+ profileId: null,
23
+ requestedModel,
19
24
  transientFailures: [],
25
+ rateLimits: [],
20
26
  outcome: null,
27
+ usage: { inputTokens: null, outputTokens: null, cachedInputTokens: null },
21
28
  };
22
29
  }
30
+ /** Add one present token field to a null-aware accumulator (null stays null
31
+ * until a value actually arrives, so "unreported" never reads as 0). */
32
+ function addToken(acc, value) {
33
+ return value === undefined ? acc : (acc ?? 0) + value;
34
+ }
23
35
  /**
24
36
  * Observe a normalized harness event into the attempt telemetry. Governance is
25
37
  * fully typed: only the `tool` ToolRef on tool_call/tool_result/file_change
@@ -30,12 +42,41 @@ export function observeAttemptTelemetry(t, ev) {
30
42
  // Route evidence: remember the model identity the stream itself disclosed.
31
43
  if (ev.observed_model && !t.observedModel)
32
44
  t.observedModel = ev.observed_model;
45
+ // Route evidence: the adapter's first-class credential-route disclosure
46
+ // (first-wins; the route is decided once before spawn).
47
+ if (!t.authMode) {
48
+ if (ev.credential_route === "vendor_native")
49
+ t.authMode = "local_session";
50
+ else if (ev.credential_route === "managed_api_key")
51
+ t.authMode = "api_key";
52
+ }
53
+ // First-wins like the route: the source is decided once before spawn.
54
+ if (!t.authSource && ev.credential_source)
55
+ t.authSource = ev.credential_source;
56
+ // LAST-wins (unlike the route): W5.4 failover rotates the profile between
57
+ // native tries of ONE attempt, and the receipt must name the try that
58
+ // produced the deliverable.
59
+ if (ev.credential_profile_id)
60
+ t.profileId = ev.credential_profile_id;
33
61
  if (ev.transient) {
34
62
  t.transientFailures.push({
35
63
  kind: ev.transient.kind,
36
64
  retryDelayMs: ev.transient.retry_delay_ms ?? null,
37
65
  });
38
66
  }
67
+ if (ev.rate_limit) {
68
+ t.rateLimits.push({
69
+ retryDelayMs: ev.rate_limit.retry_delay_ms ?? null,
70
+ resetsAt: ev.rate_limit.resets_at ?? null,
71
+ });
72
+ }
73
+ // Token usage: SUM across the attempt's usage events (single-event adapters
74
+ // sum == last-wins; codex per-turn needs the sum). Money is the ledger's job.
75
+ if (ev.type === "usage" && ev.usage) {
76
+ t.usage.inputTokens = addToken(t.usage.inputTokens, ev.usage.input_tokens);
77
+ t.usage.outputTokens = addToken(t.usage.outputTokens, ev.usage.output_tokens);
78
+ t.usage.cachedInputTokens = addToken(t.usage.cachedInputTokens, ev.usage.cached_input_tokens);
79
+ }
39
80
  if (ev.type === "completed") {
40
81
  const dropped = Number(ev.payload?.["dropped_unparsed_lines"] ?? 0) +
41
82
  Number(ev.payload?.["dropped_unrecognized_events"] ?? 0);
@@ -95,7 +136,10 @@ export function observeAttemptTelemetry(t, ev) {
95
136
  // INV-043: recovery must be attributable to the failed operation — same
96
137
  // tool, same KIND, same target (a non-web tool sharing a name with a web
97
138
  // tool must not clear its web error).
98
- if (!err.recovered && err.tool === tool.name && err.kind === tool.kind && err.target === (tool.target ?? null)) {
139
+ if (!err.recovered &&
140
+ err.tool === tool.name &&
141
+ err.kind === tool.kind &&
142
+ err.target === (tool.target ?? null)) {
99
143
  err.recovered = true;
100
144
  }
101
145
  }
@@ -213,6 +257,11 @@ export function attemptTelemetryRecord(attemptId, harnessId, t) {
213
257
  attempt_id: attemptId,
214
258
  harness_id: harnessId,
215
259
  observed_model: t.observedModel,
260
+ auth_mode: t.authMode,
261
+ auth_source: t.authSource,
262
+ profile_id: t.profileId,
263
+ requested_model: t.requestedModel,
264
+ request_requirements: t.requestRequirements,
216
265
  web: {
217
266
  required: t.web.required,
218
267
  policy: t.web.mode,
@@ -247,6 +296,30 @@ export function attemptTelemetryRecord(attemptId, harnessId, t) {
247
296
  tool_warnings_count: t.outcome?.toolWarningsCount ?? warnings.length,
248
297
  status: t.outcome?.status ?? (warnings.length > 0 ? "success_with_warnings" : "success"),
249
298
  },
299
+ usage: {
300
+ input_tokens: t.usage.inputTokens,
301
+ output_tokens: t.usage.outputTokens,
302
+ cached_input_tokens: t.usage.cachedInputTokens,
303
+ },
304
+ };
305
+ }
306
+ /** Sum token usage across attempt records (candidates + synthesis), the same
307
+ * scope as the ledger's spend. A field stays null unless some attempt reported
308
+ * it, so "no harness reported tokens" never reads as a real 0. */
309
+ export function aggregateRunTokenUsage(records) {
310
+ const sum = (pick) => {
311
+ let total = null;
312
+ for (const r of records) {
313
+ const v = pick(r.usage);
314
+ if (v !== null)
315
+ total = (total ?? 0) + v;
316
+ }
317
+ return total;
318
+ };
319
+ return {
320
+ input_tokens: sum((u) => u.input_tokens),
321
+ output_tokens: sum((u) => u.output_tokens),
322
+ cached_input_tokens: sum((u) => u.cached_input_tokens),
250
323
  };
251
324
  }
252
325
  export function aggregateRunWebEvidence(records, contract) {
@@ -1 +1 @@
1
- {"version":3,"file":"attemptTelemetry.js","sourceRoot":"","sources":["../src/attemptTelemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attemptTelemetry.js","sourceRoot":"","sources":["../src/attemptTelemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { AccessProfile, GateResult, ProjectConfig, TaskContract, TestCommandGrant, TestCommandInvocation } from "@claudexor/schema";
2
+ import type { GateSpec } from "@claudexor/review";
3
+ type GateCommands = TaskContract["tests"]["commands"];
4
+ /** Merge the three command authorities once and attach external grants only
5
+ * to versioned project commands. Spec/operator commands are explicit input. */
6
+ export declare function resolveContractGates(input: {
7
+ repoRoot: string;
8
+ effectiveAccess: AccessProfile;
9
+ config: ProjectConfig;
10
+ trustGrants: TestCommandGrant[];
11
+ specCommands: TestCommandInvocation[];
12
+ operatorCommands: TestCommandInvocation[];
13
+ projectCommands: TestCommandInvocation[];
14
+ }): {
15
+ commands: GateCommands;
16
+ autoProtectedPaths: string[];
17
+ };
18
+ export declare function gateSpecsFromContract(contract: TaskContract): GateSpec[];
19
+ export declare function renderTestsEvidence(contract: TaskContract, gates?: GateResult[]): string;
20
+ export {};
21
+ //# sourceMappingURL=contract-gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-gates.d.ts","sourceRoot":"","sources":["../src/contract-gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAEtD;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,aAAa,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,eAAe,EAAE,qBAAqB,EAAE,CAAC;CAC1C,GAAG;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CA+C3D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,EAAE,CAaxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,MAAM,CAiCxF"}
@@ -0,0 +1,93 @@
1
+ import { canonicalProjectRoot, containsSecretLikeToken, hashJson, sha256 } from "@claudexor/util";
2
+ import { gateProtectedPaths } from "./runSupport.js";
3
+ /** Merge the three command authorities once and attach external grants only
4
+ * to versioned project commands. Spec/operator commands are explicit input. */
5
+ export function resolveContractGates(input) {
6
+ const projectDigest = sha256(canonicalProjectRoot(input.repoRoot));
7
+ const configDigest = hashJson(input.config);
8
+ const seen = new Set();
9
+ const sourced = [
10
+ ...input.specCommands.map((command) => ({ command, source: "spec" })),
11
+ ...input.operatorCommands.map((command) => ({ command, source: "operator" })),
12
+ ...input.projectCommands.map((command) => ({ command, source: "project" })),
13
+ ];
14
+ const commands = sourced
15
+ .filter(({ command }) => {
16
+ const digest = hashJson(command);
17
+ if (seen.has(digest))
18
+ return false;
19
+ seen.add(digest);
20
+ return true;
21
+ })
22
+ .map(({ command, source }, index) => {
23
+ if (containsSecretLikeToken(JSON.stringify(command))) {
24
+ throw new Error(`gate command ${index + 1} contains secret-like token; refusing to persist artifact`);
25
+ }
26
+ const commandDigest = hashJson(command);
27
+ const trustGrant = source === "project"
28
+ ? (input.trustGrants.find((candidate) => candidate.projectDigest === projectDigest &&
29
+ candidate.configDigest === configDigest &&
30
+ candidate.commandDigest === commandDigest &&
31
+ candidate.accessProfile === input.effectiveAccess) ?? null)
32
+ : null;
33
+ return {
34
+ id: `gate-${index + 1}`,
35
+ ...command,
36
+ required: true,
37
+ trust_required: source === "project",
38
+ trust_grant: trustGrant,
39
+ };
40
+ });
41
+ return {
42
+ commands,
43
+ autoProtectedPaths: [
44
+ ...new Set(gateProtectedPaths(commands.flatMap(({ program, args }) => [program, ...args]))),
45
+ ],
46
+ };
47
+ }
48
+ export function gateSpecsFromContract(contract) {
49
+ return contract.tests.commands.map((command) => ({
50
+ id: command.id,
51
+ program: command.program,
52
+ args: command.args,
53
+ cwd: command.cwd,
54
+ envAllowlist: command.envAllowlist,
55
+ trustRequired: command.trust_required,
56
+ trustGrant: command.trust_grant,
57
+ projectRoot: contract.repo.root,
58
+ accessProfile: contract.access.effective_profile,
59
+ required: command.required,
60
+ }));
61
+ }
62
+ export function renderTestsEvidence(contract, gates) {
63
+ const specs = gateSpecsFromContract(contract);
64
+ if (gates === undefined || gates.length === 0) {
65
+ if (specs.length === 0)
66
+ return "(no test commands configured)";
67
+ const heading = gates
68
+ ? "Configured test commands did not produce gate results before this review:"
69
+ : "Configured test commands (not run yet):";
70
+ return [
71
+ heading,
72
+ ...specs.map((spec) => `- ${spec.id}${spec.required === false ? " (optional)" : ""}: ${JSON.stringify([spec.program, ...spec.args])}`),
73
+ ].join("\n");
74
+ }
75
+ const required = gates.filter((gate) => gate.required);
76
+ const lines = [
77
+ `Gate results: required ${required.filter((gate) => gate.status === "passed").length}/${required.length} passed; total ${gates.length}.`,
78
+ ];
79
+ const appendTail = (label, text) => {
80
+ if (!text)
81
+ return;
82
+ lines.push(` ${label}: |`, ...text.split(/\r?\n/).map((line) => ` ${line}`));
83
+ };
84
+ for (const gate of gates) {
85
+ lines.push(`- ${gate.id}${gate.required === false ? " (optional)" : ""}: ${gate.status}; exit=${gate.exit_code ?? "null"}; duration_ms=${gate.duration_ms}`, ` command: ${gate.command}`);
86
+ if (gate.output_truncated)
87
+ lines.push(" output_truncated: true");
88
+ appendTail("stdout_tail", gate.stdout_tail);
89
+ appendTail("stderr_tail", gate.stderr_tail);
90
+ }
91
+ return lines.join("\n");
92
+ }
93
+ //# sourceMappingURL=contract-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-gates.js","sourceRoot":"","sources":["../src/contract-gates.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD;+EAC+E;AAC/E,MAAM,UAAU,oBAAoB,CAAC,KAQpC;IACC,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG;QACd,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC;QAC9E,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC,CAAC;QACtF,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAC;KACrF,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO;SACrB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,gBAAgB,KAAK,GAAG,CAAC,2DAA2D,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,UAAU,GACd,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CACrB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,aAAa,KAAK,aAAa;gBACzC,SAAS,CAAC,YAAY,KAAK,YAAY;gBACvC,SAAS,CAAC,aAAa,KAAK,aAAa;gBACzC,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,eAAe,CACpD,IAAI,IAAI,CAAC;YACZ,CAAC,CAAC,IAAI,CAAC;QACX,OAAO;YACL,EAAE,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE;YACvB,GAAG,OAAO;YACV,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,MAAM,KAAK,SAAS;YACpC,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO;QACL,QAAQ;QACR,kBAAkB,EAAE;YAClB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SAC5F;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAsB;IAC1D,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,cAAc;QACrC,UAAU,EAAE,OAAO,CAAC,WAAW;QAC/B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;QAC/B,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB;QAChD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAsB,EAAE,KAAoB;IAC9E,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,+BAA+B,CAAC;QAC/D,MAAM,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,yCAAyC,CAAC;QAC9C,OAAO;YACL,OAAO;YACP,GAAG,KAAK,CAAC,GAAG,CACV,CAAC,IAAI,EAAE,EAAE,CACP,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CACjH;SACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG;QACZ,0BAA0B,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,kBAAkB,KAAK,CAAC,MAAM,GAAG;KACzI,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,IAAmB,EAAQ,EAAE;QAC9D,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,UAAU,IAAI,CAAC,SAAS,IAAI,MAAM,iBAAiB,IAAI,CAAC,WAAW,EAAE,EAChJ,cAAc,IAAI,CAAC,OAAO,EAAE,CAC7B,CAAC;QACF,IAAI,IAAI,CAAC,gBAAgB;YAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAClE,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,152 @@
1
+ import type { CredentialProfile, HarnessEvent, HarnessRunSpec, QuotaSnapshot } from "@claudexor/schema";
2
+ /**
3
+ * The ONE resolve owner for credential profiles (INV-135): explicit id →
4
+ * durable registry entry for exactly this harness. Unknown, disabled, or
5
+ * harness-mismatched ids throw a typed refusal — an explicit profile must
6
+ * never silently become the default credential ladder.
7
+ */
8
+ export declare function resolveCredentialProfile(registry: readonly CredentialProfile[], wanted: string, harnessId: string): CredentialProfile;
9
+ export interface ProfilePolicy {
10
+ limit_action: "fail" | "ask" | "rotate";
11
+ rotation_eligible: string[];
12
+ headroom_threshold: number;
13
+ }
14
+ /** Typed quota evidence for a profile over its headroom bound (provenance). */
15
+ export interface HeadroomBreach {
16
+ constraint_id: string;
17
+ used_ratio: number;
18
+ threshold: number;
19
+ resets_at: string | null;
20
+ }
21
+ /**
22
+ * Proactive headroom check (W5.4 `profile_headroom_preflight`): the SELECTED
23
+ * profile's freshest snapshot windows against the policy threshold. Unknown
24
+ * usage is NOT a breach — rotation never triggers on missing data.
25
+ */
26
+ export declare function profileHeadroomBreach(snapshots: readonly QuotaSnapshot[], harnessId: string, profileId: string | null, threshold: number): HeadroomBreach | null;
27
+ /**
28
+ * The next rotation target after `currentProfileId` (W5.4): policy order wins
29
+ * (`rotation_eligible`), else every enabled profile of the harness in registry
30
+ * order. The current profile and disabled/unknown ids never come back; a
31
+ * profile already over the headroom bound is skipped (rotating INTO a spent
32
+ * subscription is not a failover). Cross-subscription rotation of one vendor
33
+ * is allowed by owner decision — but rotation NEVER crosses credential kinds
34
+ * (release wave round-16 BLOCK): a subscription→API-key swap silently changes
35
+ * the payment model mid-attempt, and the attempt's first-wins auth-route
36
+ * receipt (decided once before spawn) would misvalue metered usage as
37
+ * subscription entitlement, bypassing a finite cash cap.
38
+ */
39
+ export declare function nextEligibleProfile(registry: readonly CredentialProfile[], harnessId: string, policy: ProfilePolicy, current: Pick<CredentialProfile, "profile_id" | "credential_kind"> | null, snapshots: readonly QuotaSnapshot[], excluded?: ReadonlySet<string>): CredentialProfile | null;
40
+ /**
41
+ * `rotation_retry_eligible` (sol #30): a failover retry is allowed ONLY when
42
+ * the attempt saw a TYPED vendor limit AND produced no deliverable and no
43
+ * workspace mutation — a partially-acted attempt never silently reruns.
44
+ */
45
+ export declare function rotationRetryEligible(input: {
46
+ sawTypedLimit: boolean;
47
+ deliverableEmpty: boolean;
48
+ }): boolean;
49
+ type EmitFn = (type: "route.profile.headroom_exceeded" | "route.profile.rotated", payload: Record<string, unknown>) => void;
50
+ /**
51
+ * `profile_headroom_preflight` (W5.4): BEFORE spawn, the selected profile's
52
+ * freshest quota windows are checked against the policy threshold. A breach
53
+ * is always a typed event; `rotate` swaps to the next eligible profile with
54
+ * provenance, `ask`/`fail` proceed on the selected profile — the runtime
55
+ * `vendor_limit_rejected` evidence stays the terminating truth.
56
+ */
57
+ export declare function preflightCredentialProfile(args: {
58
+ profile: CredentialProfile;
59
+ harnessId: string;
60
+ policy: ProfilePolicy;
61
+ registry: readonly CredentialProfile[];
62
+ snapshots: readonly QuotaSnapshot[];
63
+ emit: EmitFn;
64
+ }): CredentialProfile;
65
+ /**
66
+ * Default-subject start selection (INV-135, owner scope "auto-balance"): when
67
+ * NO profile is pinned, the policy is `rotate`, and the DEFAULT store's own
68
+ * fresh quota window is at/over the headroom bound, pick the first eligible
69
+ * SUBSCRIPTION profile instead of spawning into a near-certain vendor limit.
70
+ * Strictly opt-in: `fail`/`ask` keep today's default-user behavior untouched
71
+ * (the profile engine's fail action governs PINNED profiles only — throwing
72
+ * here would brick every default user at 90% quota). Unknown or stale usage
73
+ * never rotates.
74
+ */
75
+ export declare function preflightDefaultSubject(args: {
76
+ harnessId: string;
77
+ policy: ProfilePolicy;
78
+ registry: readonly CredentialProfile[];
79
+ snapshots: readonly QuotaSnapshot[];
80
+ emit: EmitFn;
81
+ }): CredentialProfile | null;
82
+ /**
83
+ * Reactive failover plan (`vendor_limit_rejected`, W5.4): rotation fires ONLY
84
+ * on the typed predicate under a `rotate` policy, marks the current profile
85
+ * tried (at most once per attempt each), and returns the next target with
86
+ * provenance already emitted — or null when the attempt must fail as-is.
87
+ * `currentProfile: null` is the DEFAULT subject: allowed ONLY when the caller
88
+ * proves the attempt's pre-spawn route was vendor_native (a metered default
89
+ * hitting a limit is a budget fact, not a subscription to fail over from).
90
+ */
91
+ export declare function planReactiveRotation(args: {
92
+ currentProfile: CredentialProfile | null;
93
+ defaultRouteWasVendorNative?: boolean;
94
+ harnessId: string;
95
+ attemptId: string;
96
+ policy: ProfilePolicy;
97
+ registry: readonly CredentialProfile[];
98
+ snapshots: readonly QuotaSnapshot[];
99
+ triedProfiles: Set<string>;
100
+ sawTypedLimit: boolean;
101
+ deliverableEmpty: boolean;
102
+ lastLimit: {
103
+ retryDelayMs: number | null;
104
+ resetsAt: string | null;
105
+ } | null;
106
+ emit: EmitFn;
107
+ }): CredentialProfile | null;
108
+ /**
109
+ * INV-135 at the engine boundary: a cached vendor session resumes ONLY under
110
+ * exactly the profile it was recorded with (null-default equality included) —
111
+ * regardless of what the caller's map claims. Preflight rotation changing the
112
+ * profile therefore starts fresh.
113
+ */
114
+ export declare function resumeSessionForProfile(cached: {
115
+ sessionId: string;
116
+ profileId: string | null;
117
+ } | undefined, profile: CredentialProfile | null): string | null;
118
+ /**
119
+ * Record a harness-emitted native session id for future thread resume; the
120
+ * observer never fails the run. profileId is the adapter's per-event stamp —
121
+ * the EFFECTIVE profile (rotation makes it differ from the requested id).
122
+ */
123
+ export declare function observeNativeSessionEvent(input: {
124
+ onSessionObserved?: (harnessId: string, nativeSessionId: string, observedModel?: string | null, profileId?: string | null) => void;
125
+ } | undefined, harnessId: string, ev: HarnessEvent): void;
126
+ /**
127
+ * Shared reactive-failover step for BOTH lanes: given the attempt's typed
128
+ * evidence, plan a rotation and rebuild the spec on a NEW vendor session
129
+ * under the next profile — or return null when the attempt must fail as-is.
130
+ */
131
+ export declare function rotateSpecOnTypedLimit(args: {
132
+ spec: HarnessRunSpec;
133
+ harnessId: string;
134
+ attemptId: string;
135
+ policy: ProfilePolicy;
136
+ registry: readonly CredentialProfile[];
137
+ snapshots: readonly QuotaSnapshot[];
138
+ triedProfiles: Set<string>;
139
+ sawTypedLimit: boolean;
140
+ deliverableEmpty: boolean;
141
+ lastLimit: {
142
+ retryDelayMs: number | null;
143
+ resetsAt: string | null;
144
+ } | null;
145
+ emit: EmitFn;
146
+ newSessionId: () => string;
147
+ /** Pre-spawn route estimate for a profile-less spec: default-subject
148
+ * rotation is allowed ONLY off a vendor_native attempt. */
149
+ defaultRouteWasVendorNative?: boolean;
150
+ }): HarnessRunSpec | null;
151
+ export {};
152
+ //# sourceMappingURL=credential-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-profiles.d.ts","sourceRoot":"","sources":["../src/credential-profiles.ts"],"names":[],"mappings":"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"}