@claudexor/orchestrator 3.19.0 → 3.22.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/account-evidence.d.ts +13 -0
- package/dist/account-evidence.d.ts.map +1 -0
- package/dist/account-evidence.js +55 -0
- package/dist/account-evidence.js.map +1 -0
- package/dist/account-resolution.d.ts.map +1 -1
- package/dist/account-resolution.js +22 -5
- package/dist/account-resolution.js.map +1 -1
- package/dist/attemptFinalize.d.ts +14 -101
- package/dist/attemptFinalize.d.ts.map +1 -1
- package/dist/attemptFinalize.js +7 -328
- package/dist/attemptFinalize.js.map +1 -1
- package/dist/candidateEvidence.d.ts +15 -6
- package/dist/candidateEvidence.d.ts.map +1 -1
- package/dist/candidateEvidence.js +1 -1
- package/dist/candidateEvidence.js.map +1 -1
- package/dist/candidateOutputs.d.ts +7 -3
- package/dist/candidateOutputs.d.ts.map +1 -1
- package/dist/candidateOutputs.js +4 -1
- package/dist/candidateOutputs.js.map +1 -1
- package/dist/candidateReview.d.ts.map +1 -1
- package/dist/candidateReview.js +3 -1
- package/dist/candidateReview.js.map +1 -1
- package/dist/candidateTerminals.d.ts +10 -0
- package/dist/candidateTerminals.d.ts.map +1 -1
- package/dist/candidateTerminals.js +44 -5
- package/dist/candidateTerminals.js.map +1 -1
- package/dist/candidateWorkProduct.d.ts +21 -0
- package/dist/candidateWorkProduct.d.ts.map +1 -0
- package/dist/candidateWorkProduct.js +43 -0
- package/dist/candidateWorkProduct.js.map +1 -0
- package/dist/carrier-planner.d.ts +94 -0
- package/dist/carrier-planner.d.ts.map +1 -0
- package/dist/carrier-planner.js +111 -0
- package/dist/carrier-planner.js.map +1 -0
- package/dist/continuation-custody.d.ts +57 -0
- package/dist/continuation-custody.d.ts.map +1 -0
- package/dist/continuation-custody.js +151 -0
- package/dist/continuation-custody.js.map +1 -0
- package/dist/continuation-evidence-io.d.ts +18 -0
- package/dist/continuation-evidence-io.d.ts.map +1 -0
- package/dist/continuation-evidence-io.js +167 -0
- package/dist/continuation-evidence-io.js.map +1 -0
- package/dist/continuation-evidence.d.ts +81 -0
- package/dist/continuation-evidence.d.ts.map +1 -0
- package/dist/continuation-evidence.js +122 -0
- package/dist/continuation-evidence.js.map +1 -0
- package/dist/continuation-input.d.ts +10 -0
- package/dist/continuation-input.d.ts.map +1 -0
- package/dist/continuation-input.js +69 -0
- package/dist/continuation-input.js.map +1 -0
- package/dist/continue-from.d.ts +41 -0
- package/dist/continue-from.d.ts.map +1 -0
- package/dist/continue-from.js +292 -0
- package/dist/continue-from.js.map +1 -0
- package/dist/continuity-facts.d.ts +1 -0
- package/dist/continuity-facts.d.ts.map +1 -1
- package/dist/continuity-facts.js +1 -0
- package/dist/continuity-facts.js.map +1 -1
- package/dist/continuity-notice.d.ts +42 -0
- package/dist/continuity-notice.d.ts.map +1 -0
- package/dist/continuity-notice.js +42 -0
- package/dist/continuity-notice.js.map +1 -0
- package/dist/continuity-summary.d.ts +2 -1
- package/dist/continuity-summary.d.ts.map +1 -1
- package/dist/continuity-summary.js +2 -2
- package/dist/continuity-summary.js.map +1 -1
- package/dist/continuity-terminal.d.ts +19 -0
- package/dist/continuity-terminal.d.ts.map +1 -0
- package/dist/continuity-terminal.js +34 -0
- package/dist/continuity-terminal.js.map +1 -0
- package/dist/credential-cooldown.d.ts +0 -10
- package/dist/credential-cooldown.d.ts.map +1 -1
- package/dist/credential-cooldown.js +8 -27
- package/dist/credential-cooldown.js.map +1 -1
- package/dist/credential-differential.d.ts +13 -1
- package/dist/credential-differential.d.ts.map +1 -1
- package/dist/credential-differential.js +71 -14
- package/dist/credential-differential.js.map +1 -1
- package/dist/credential-execution.d.ts +4 -0
- package/dist/credential-execution.d.ts.map +1 -0
- package/dist/credential-execution.js +101 -0
- package/dist/credential-execution.js.map +1 -0
- package/dist/credential-profile-rotation.d.ts.map +1 -1
- package/dist/credential-profile-rotation.js +8 -2
- package/dist/credential-profile-rotation.js.map +1 -1
- package/dist/credential-profiles.d.ts +3 -4
- package/dist/credential-profiles.d.ts.map +1 -1
- package/dist/credential-profiles.js +28 -6
- package/dist/credential-profiles.js.map +1 -1
- package/dist/deepScanReducer.d.ts +4 -1
- package/dist/deepScanReducer.d.ts.map +1 -1
- package/dist/deepScanReducer.js +14 -8
- package/dist/deepScanReducer.js.map +1 -1
- package/dist/delegationFailure.d.ts +4 -3
- package/dist/delegationFailure.d.ts.map +1 -1
- package/dist/delegationFailure.js +32 -56
- package/dist/delegationFailure.js.map +1 -1
- package/dist/directoryCandidate.d.ts +2 -2
- package/dist/directoryCandidate.d.ts.map +1 -1
- package/dist/directoryCandidate.js +3 -0
- package/dist/directoryCandidate.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/inrun-continuity-carrier.d.ts +76 -0
- package/dist/inrun-continuity-carrier.d.ts.map +1 -0
- package/dist/inrun-continuity-carrier.js +218 -0
- package/dist/inrun-continuity-carrier.js.map +1 -0
- package/dist/inrun-continuity-thread.d.ts +8 -0
- package/dist/inrun-continuity-thread.d.ts.map +1 -0
- package/dist/inrun-continuity-thread.js +23 -0
- package/dist/inrun-continuity-thread.js.map +1 -0
- package/dist/inrun-continuity-types.d.ts +105 -0
- package/dist/inrun-continuity-types.d.ts.map +1 -0
- package/dist/inrun-continuity-types.js +2 -0
- package/dist/inrun-continuity-types.js.map +1 -0
- package/dist/inrun-continuity.d.ts +79 -0
- package/dist/inrun-continuity.d.ts.map +1 -0
- package/dist/inrun-continuity.js +465 -0
- package/dist/inrun-continuity.js.map +1 -0
- package/dist/inrun-continuity.test-support.d.ts +374 -0
- package/dist/inrun-continuity.test-support.d.ts.map +1 -0
- package/dist/inrun-continuity.test-support.js +198 -0
- package/dist/inrun-continuity.test-support.js.map +1 -0
- package/dist/inrun-retained-output.d.ts +9 -0
- package/dist/inrun-retained-output.d.ts.map +1 -0
- package/dist/inrun-retained-output.js +16 -0
- package/dist/inrun-retained-output.js.map +1 -0
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.d.ts.map +1 -1
- package/dist/interaction.js +6 -1
- package/dist/interaction.js.map +1 -1
- package/dist/laneStreamEvents.d.ts +2 -4
- package/dist/laneStreamEvents.d.ts.map +1 -1
- package/dist/laneStreamEvents.js +3 -5
- package/dist/laneStreamEvents.js.map +1 -1
- package/dist/modelGovernance.d.ts +4 -0
- package/dist/modelGovernance.d.ts.map +1 -1
- package/dist/modelGovernance.js +29 -3
- package/dist/modelGovernance.js.map +1 -1
- package/dist/orchestrator-credentials.d.ts +5 -1
- package/dist/orchestrator-credentials.d.ts.map +1 -1
- package/dist/orchestrator-credentials.js +32 -8
- package/dist/orchestrator-credentials.js.map +1 -1
- package/dist/orchestrator.d.ts +7 -5
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +297 -267
- package/dist/orchestrator.js.map +1 -1
- package/dist/persistedPatch.d.ts +55 -0
- package/dist/persistedPatch.d.ts.map +1 -0
- package/dist/persistedPatch.js +132 -0
- package/dist/persistedPatch.js.map +1 -0
- package/dist/planFinalize.d.ts +37 -0
- package/dist/planFinalize.d.ts.map +1 -0
- package/dist/planFinalize.js +94 -0
- package/dist/planFinalize.js.map +1 -0
- package/dist/planRun.d.ts +3 -30
- package/dist/planRun.d.ts.map +1 -1
- package/dist/planRun.js +9 -88
- package/dist/planRun.js.map +1 -1
- package/dist/plannerAttempt.d.ts +4 -1
- package/dist/plannerAttempt.d.ts.map +1 -1
- package/dist/plannerAttempt.js +14 -8
- package/dist/plannerAttempt.js.map +1 -1
- package/dist/prompt-framing.d.ts +1 -1
- package/dist/prompt-framing.d.ts.map +1 -1
- package/dist/prompt-framing.js.map +1 -1
- package/dist/retainedOutput.d.ts +4 -0
- package/dist/retainedOutput.d.ts.map +1 -0
- package/dist/retainedOutput.js +31 -0
- package/dist/retainedOutput.js.map +1 -0
- package/dist/reviewerEffort.d.ts +41 -0
- package/dist/reviewerEffort.d.ts.map +1 -0
- package/dist/reviewerEffort.js +37 -0
- package/dist/reviewerEffort.js.map +1 -0
- package/dist/reviewerPanel.d.ts +5 -5
- package/dist/reviewerPanel.d.ts.map +1 -1
- package/dist/reviewerPanel.js +22 -50
- package/dist/reviewerPanel.js.map +1 -1
- package/dist/run-input-resolution.d.ts.map +1 -1
- package/dist/run-input-resolution.js +10 -0
- package/dist/run-input-resolution.js.map +1 -1
- package/dist/runEventLog.d.ts.map +1 -1
- package/dist/runEventLog.js +5 -0
- package/dist/runEventLog.js.map +1 -1
- package/dist/runFactsBuilder.d.ts.map +1 -1
- package/dist/runFactsBuilder.js +11 -2
- package/dist/runFactsBuilder.js.map +1 -1
- package/dist/runFactsPresentation.d.ts.map +1 -1
- package/dist/runFactsPresentation.js +6 -1
- package/dist/runFactsPresentation.js.map +1 -1
- package/dist/runSupport.d.ts +2 -1
- package/dist/runSupport.d.ts.map +1 -1
- package/dist/runSupport.js +2 -1
- package/dist/runSupport.js.map +1 -1
- package/dist/runTelemetryWriter.d.ts.map +1 -1
- package/dist/runTelemetryWriter.js +7 -2
- package/dist/runTelemetryWriter.js.map +1 -1
- package/dist/runTerminalResults.d.ts +6 -2
- package/dist/runTerminalResults.d.ts.map +1 -1
- package/dist/runTerminalResults.js +28 -3
- package/dist/runTerminalResults.js.map +1 -1
- package/dist/runTerminals.d.ts.map +1 -1
- package/dist/runTerminals.js +15 -7
- package/dist/runTerminals.js.map +1 -1
- package/dist/secretDiff.d.ts +67 -27
- package/dist/secretDiff.d.ts.map +1 -1
- package/dist/secretDiff.js +143 -113
- package/dist/secretDiff.js.map +1 -1
- package/dist/session-capsule.d.ts +29 -0
- package/dist/session-capsule.d.ts.map +1 -0
- package/dist/session-capsule.js +86 -0
- package/dist/session-capsule.js.map +1 -0
- package/dist/workReportEnvelope.d.ts +123 -0
- package/dist/workReportEnvelope.d.ts.map +1 -0
- package/dist/workReportEnvelope.js +362 -0
- package/dist/workReportEnvelope.js.map +1 -0
- package/package.json +17 -17
- package/dist/effortGovernance.d.ts +0 -13
- package/dist/effortGovernance.d.ts.map +0 -1
- package/dist/effortGovernance.js +0 -7
- package/dist/effortGovernance.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuity-summary.js","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,cAAc,GAGf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"continuity-summary.js","sourceRoot":"","sources":["../src/continuity-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ArtifactStore, RunPaths } from "@claudexor/artifact-store";
|
|
2
|
+
import type { ResumableCause, RunResumable } from "@claudexor/schema";
|
|
3
|
+
export interface ContinuityTerminalFacts {
|
|
4
|
+
resumable?: RunResumable;
|
|
5
|
+
/** Internal snapshot used only if gates/review/arbitration later leave work unfinished. */
|
|
6
|
+
resumableOnFailure?: RunResumable;
|
|
7
|
+
}
|
|
8
|
+
/** Execution roots without an isolated envelope survive this run (Agent and Ask). */
|
|
9
|
+
export declare function continuityWorkspace(envelope: {
|
|
10
|
+
worktree_path: string;
|
|
11
|
+
repo_root: string;
|
|
12
|
+
} | null, cwd: string): RunResumable["workspace"];
|
|
13
|
+
/** The first attempt that declared continuation facts speaks for the run. */
|
|
14
|
+
export declare function resumableOf(items: ReadonlyArray<ContinuityTerminalFacts>, cause?: ResumableCause): RunResumable | null;
|
|
15
|
+
/** Write `final/resumable.yaml` when present and return the terminal payload fragment. */
|
|
16
|
+
export declare function resumableTerminal(store: ArtifactStore, paths: Pick<RunPaths, "finalDir">, items: ReadonlyArray<ContinuityTerminalFacts>, nonSuccess?: boolean): {
|
|
17
|
+
resumable: RunResumable;
|
|
18
|
+
} | Record<never, never>;
|
|
19
|
+
//# sourceMappingURL=continuity-terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuity-terminal.d.ts","sourceRoot":"","sources":["../src/continuity-terminal.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,YAAY,CAAC;CACnC;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC7D,GAAG,EAAE,MAAM,GACV,YAAY,CAAC,WAAW,CAAC,CAI3B;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAC7C,KAAK,CAAC,EAAE,cAAc,GACrB,YAAY,GAAG,IAAI,CAMrB;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EACjC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAC7C,UAAU,UAAQ,GACjB;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAKpD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The terminal `resumable` block (INTERFACES §2): present on every terminal
|
|
3
|
+
* whose WORK is unfinished and can be continued — non-success lifecycles and
|
|
4
|
+
* `succeeded` runs whose work state is `needs_input`/`incomplete`. The attempt
|
|
5
|
+
* loop decides it (`InRunContinuity.finish`); this owner materializes it as
|
|
6
|
+
* `final/resumable.yaml` and the payload fragment every terminal event carries,
|
|
7
|
+
* so no lane re-derives the block.
|
|
8
|
+
*/
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
/** Execution roots without an isolated envelope survive this run (Agent and Ask). */
|
|
11
|
+
export function continuityWorkspace(envelope, cwd) {
|
|
12
|
+
return !envelope || envelope.worktree_path === envelope.repo_root
|
|
13
|
+
? { kind: "in_place", root: cwd }
|
|
14
|
+
: { kind: "none", root: null };
|
|
15
|
+
}
|
|
16
|
+
/** The first attempt that declared continuation facts speaks for the run. */
|
|
17
|
+
export function resumableOf(items, cause) {
|
|
18
|
+
const declared = items.find((item) => item.resumable)?.resumable;
|
|
19
|
+
if (declared)
|
|
20
|
+
return declared;
|
|
21
|
+
if (!cause)
|
|
22
|
+
return null;
|
|
23
|
+
const completed = items.find((item) => item.resumableOnFailure)?.resumableOnFailure;
|
|
24
|
+
return completed ? { ...completed, cause } : null;
|
|
25
|
+
}
|
|
26
|
+
/** Write `final/resumable.yaml` when present and return the terminal payload fragment. */
|
|
27
|
+
export function resumableTerminal(store, paths, items, nonSuccess = false) {
|
|
28
|
+
const resumable = resumableOf(items, nonSuccess ? "other" : undefined);
|
|
29
|
+
if (!resumable)
|
|
30
|
+
return {};
|
|
31
|
+
store.writeYaml(join(paths.finalDir, "resumable.yaml"), resumable);
|
|
32
|
+
return { resumable };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=continuity-terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuity-terminal.js","sourceRoot":"","sources":["../src/continuity-terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CACjC,QAA6D,EAC7D,GAAW;IAEX,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,SAAS;QAC/D,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE;QACjC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CACzB,KAA6C,EAC7C,KAAsB;IAEtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACpF,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAC/B,KAAoB,EACpB,KAAiC,EACjC,KAA6C,EAC7C,UAAU,GAAG,KAAK;IAElB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;IACnE,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
import type { CredentialUnusableObservation, QuotaSnapshot } from "@claudexor/schema";
|
|
2
|
-
/**
|
|
3
|
-
* THE live-observation matcher (A7): does a typed `credential_unusable`
|
|
4
|
-
* observation currently condemn this subject for this decision's model? One
|
|
5
|
-
* owner, so rotation refusal, exhaustion rows, and the pool terminal can never
|
|
6
|
-
* disagree about which observation is live. Expired observations never match
|
|
7
|
-
* (the self-expiry half of the clearing contract); a model-scoped observation
|
|
8
|
-
* matches only its own model, while a credential-wide one (model=null) matches
|
|
9
|
-
* every route — the write side owns that scoping decision.
|
|
10
|
-
*/
|
|
11
|
-
export declare function liveUnusableFor(observations: readonly CredentialUnusableObservation[], harnessId: string, profileId: string | null, model?: string | null, now?: Date): CredentialUnusableObservation | null;
|
|
12
2
|
/**
|
|
13
3
|
* Typed verdict that a credential subject's own observed quota evidence blocks
|
|
14
4
|
* spending right now (A4 cooldown reader). `kind` distinguishes a spent window
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-cooldown.d.ts","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGtF
|
|
1
|
+
{"version":3,"file":"credential-cooldown.d.ts","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGtF;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,EAChD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,CAAC,EAAE,IAAI,GACT,UAAU,GAAG,IAAI,CAqBnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C;;yEAEqE;IACrE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpC;AAcD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAW9E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EACJ,4BAA4B,GAAG,uBAAuB,GAAG,iCAAiC,CAAC;IAC7F,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC/C;;iEAE6D;IAC7D,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD;;uDAEmD;IACnD,eAAe,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACtE,GAAG,KAAK,CA8ER"}
|
|
@@ -1,28 +1,4 @@
|
|
|
1
1
|
import { ControlProblem, quotaSnapshotAvailability } from "@claudexor/schema";
|
|
2
|
-
/**
|
|
3
|
-
* THE live-observation matcher (A7): does a typed `credential_unusable`
|
|
4
|
-
* observation currently condemn this subject for this decision's model? One
|
|
5
|
-
* owner, so rotation refusal, exhaustion rows, and the pool terminal can never
|
|
6
|
-
* disagree about which observation is live. Expired observations never match
|
|
7
|
-
* (the self-expiry half of the clearing contract); a model-scoped observation
|
|
8
|
-
* matches only its own model, while a credential-wide one (model=null) matches
|
|
9
|
-
* every route — the write side owns that scoping decision.
|
|
10
|
-
*/
|
|
11
|
-
export function liveUnusableFor(observations, harnessId, profileId, model, now = new Date()) {
|
|
12
|
-
for (const obs of observations) {
|
|
13
|
-
if (obs.harness_id !== harnessId)
|
|
14
|
-
continue;
|
|
15
|
-
if (obs.profile_id !== profileId)
|
|
16
|
-
continue;
|
|
17
|
-
if (obs.model !== null && obs.model !== (model ?? null))
|
|
18
|
-
continue;
|
|
19
|
-
const expires = Date.parse(obs.expires_at);
|
|
20
|
-
if (!Number.isFinite(expires) || expires <= now.getTime())
|
|
21
|
-
continue;
|
|
22
|
-
return obs;
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
2
|
/**
|
|
27
3
|
* Does any observed quota window BLOCK this subject right now?
|
|
28
4
|
*
|
|
@@ -170,9 +146,14 @@ export function credentialPoolExhausted(args) {
|
|
|
170
146
|
? "quota"
|
|
171
147
|
: "unavailable")),
|
|
172
148
|
];
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
149
|
+
if (args.subjectUnusable?.code === "auth_revoked" && !poolCauses.includes("auth"))
|
|
150
|
+
poolCauses.push("auth");
|
|
151
|
+
const cause = poolCauses.length === 1 && poolCauses[0] === "auth"
|
|
152
|
+
? "the available credentials were rejected"
|
|
153
|
+
: poolCauses.length === 1 && poolCauses[0] === "quota"
|
|
154
|
+
? "the available accounts have an active quota limit"
|
|
155
|
+
: "the available accounts cannot serve this request";
|
|
156
|
+
const error = new Error(`credential pool exhausted for "${args.harnessId}": ${cause}; ${subject} has no eligible replacement` +
|
|
176
157
|
(args.subjectUnusable
|
|
177
158
|
? `; the subject's credential itself was observed unusable (${args.subjectUnusable.code})`
|
|
178
159
|
: "") +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-cooldown.js","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"credential-cooldown.js","sourceRoot":"","sources":["../src/credential-cooldown.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,10 +20,20 @@
|
|
|
20
20
|
* deliberately NOT a verdict here — that is A4's lane and needs no
|
|
21
21
|
* observation.
|
|
22
22
|
*/
|
|
23
|
-
import type { CredentialProfile, CredentialProfileStatus, CredentialUnusableObservation } from "@claudexor/schema";
|
|
23
|
+
import type { CredentialProfile, CredentialProfileStatus, CredentialUnusableObservation, CredentialRoute } from "@claudexor/schema";
|
|
24
24
|
import { type ProfilePolicy } from "./credential-profile-rotation.js";
|
|
25
25
|
import { type VendorQuotaObservations } from "./credential-profiles.js";
|
|
26
26
|
import type { TransientFailureObservation } from "./transientClassify.js";
|
|
27
|
+
export declare function pollerCredentialRejections(quota: VendorQuotaObservations): CredentialUnusableObservation[];
|
|
28
|
+
/** The cheap typed stream intake. No profile probing or routing policy. */
|
|
29
|
+
export declare function credentialStreamRefusal(args: {
|
|
30
|
+
harnessId: string;
|
|
31
|
+
profileId: string | null;
|
|
32
|
+
model: string | null;
|
|
33
|
+
route?: CredentialRoute;
|
|
34
|
+
refusal: TransientFailureObservation;
|
|
35
|
+
now?: Date;
|
|
36
|
+
}): CredentialUnusableObservation | null;
|
|
27
37
|
/**
|
|
28
38
|
* The differential verdict for ONE subject, from evidence that already exists.
|
|
29
39
|
* Returns a typed observation ONLY when the evidence distinguishes a dead
|
|
@@ -35,6 +45,7 @@ export declare function differentialSubjectVerdict(args: {
|
|
|
35
45
|
/** The triggering subject: a pinned profile, or null for the default. */
|
|
36
46
|
profile: CredentialProfile | null;
|
|
37
47
|
model: string | null;
|
|
48
|
+
route?: CredentialRoute | null;
|
|
38
49
|
quota: VendorQuotaObservations;
|
|
39
50
|
/** THIS try's typed failure observations from the attempt stream. */
|
|
40
51
|
transients: readonly TransientFailureObservation[];
|
|
@@ -54,6 +65,7 @@ export declare function currentSubjectProber(args: {
|
|
|
54
65
|
harnessId: string;
|
|
55
66
|
profile: CredentialProfile | null;
|
|
56
67
|
model: string | null;
|
|
68
|
+
route?: CredentialRoute | null;
|
|
57
69
|
quota: VendorQuotaObservations;
|
|
58
70
|
transients: readonly TransientFailureObservation[];
|
|
59
71
|
probe?: (profile: CredentialProfile) => Promise<CredentialProfileStatus>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-differential.d.ts","sourceRoot":"","sources":["../src/credential-differential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,
|
|
1
|
+
{"version":3,"file":"credential-differential.d.ts","sourceRoot":"","sources":["../src/credential-differential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAE7B,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAKL,KAAK,uBAAuB,EAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAmD1E,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,uBAAuB,GAC7B,6BAA6B,EAAE,CAgBjC;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,2BAA2B,CAAC;IACrC,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,6BAA6B,GAAG,IAAI,CAgBvC;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,qEAAqE;IACrE,UAAU,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACnD,yEAAyE;IACzE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAmDhD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,UAAU,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACnD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,6BAA6B,KAAK,IAAI,CAAC;CACvD,GAAG,MAAM,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAYtD;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC1E,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzE,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAiC/B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { liveUnusableFor } from "./credential-cooldown.js";
|
|
2
1
|
import { staticRotationCandidates } from "./credential-profile-rotation.js";
|
|
3
|
-
import { probeCredentialProfileStatus, profileStatusAdmits, vendorVerifiedProfileStatus, } from "./credential-profiles.js";
|
|
2
|
+
import { probeCredentialProfileStatus, profileStatusAdmits, vendorVerifiedProfileStatus, vendorCredentialObservation, } from "./credential-profiles.js";
|
|
3
|
+
import { composeCredentialProfileEvidence } from "./account-evidence.js";
|
|
4
4
|
/** Bounded per-code TTLs (clearing contract, half one: self-expiry). A vendor
|
|
5
|
-
*
|
|
5
|
+
* credential rejection is high-confidence and worth hours; an entitlement/probe verdict can
|
|
6
6
|
* be model- or configuration-shaped, so it self-heals within the hour even if
|
|
7
7
|
* nothing clears it earlier. The ledger clamps every write to 24h max. */
|
|
8
8
|
const UNUSABLE_TTL_MS = {
|
|
@@ -22,6 +22,44 @@ function observation(args, code, source, model, detail) {
|
|
|
22
22
|
expires_at: new Date(args.now.getTime() + UNUSABLE_TTL_MS[code]).toISOString(),
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
+
/** Derived decision evidence, never a second stored credential verdict. */
|
|
26
|
+
function pollerRejection(absence) {
|
|
27
|
+
return {
|
|
28
|
+
...observation({
|
|
29
|
+
harnessId: absence.subject.harness,
|
|
30
|
+
profileId: absence.subject.subject_id,
|
|
31
|
+
now: new Date(absence.observed_at),
|
|
32
|
+
}, "auth_revoked", "vendor_poller", null, absence.detail),
|
|
33
|
+
credential_route: absence.subject.credential_route,
|
|
34
|
+
expires_at: new Date(Date.now() + UNUSABLE_TTL_MS.auth_revoked).toISOString(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function pollerCredentialRejections(quota) {
|
|
38
|
+
return quota.absences
|
|
39
|
+
.filter((row) => {
|
|
40
|
+
if (row.reason !== "auth_revoked")
|
|
41
|
+
return false;
|
|
42
|
+
const route = row.subject.credential_route;
|
|
43
|
+
const evidence = {
|
|
44
|
+
snapshots: quota.snapshots.filter((item) => item.subject.credential_route === route),
|
|
45
|
+
absences: quota.absences.filter((item) => item.subject.credential_route === route),
|
|
46
|
+
honored: quota.honored?.filter((item) => item.credential_route === route),
|
|
47
|
+
};
|
|
48
|
+
return (vendorCredentialObservation(evidence, row.subject.harness, row.subject.subject_id)
|
|
49
|
+
?.outcome === "revoked");
|
|
50
|
+
})
|
|
51
|
+
.map(pollerRejection);
|
|
52
|
+
}
|
|
53
|
+
/** The cheap typed stream intake. No profile probing or routing policy. */
|
|
54
|
+
export function credentialStreamRefusal(args) {
|
|
55
|
+
if (args.refusal.retryable ||
|
|
56
|
+
!["auth_failed", "capability_refused"].includes(args.refusal.category))
|
|
57
|
+
return null;
|
|
58
|
+
return {
|
|
59
|
+
...observation({ harnessId: args.harnessId, profileId: args.profileId, now: args.now ?? new Date() }, args.refusal.category === "auth_failed" ? "auth_revoked" : "capability_refused", "attempt_stream", args.refusal.category === "auth_failed" ? null : args.model, args.refusal.adapterCode),
|
|
60
|
+
...(args.route ? { credential_route: args.route } : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
25
63
|
/**
|
|
26
64
|
* The differential verdict for ONE subject, from evidence that already exists.
|
|
27
65
|
* Returns a typed observation ONLY when the evidence distinguishes a dead
|
|
@@ -30,6 +68,12 @@ function observation(args, code, source, model, detail) {
|
|
|
30
68
|
*/
|
|
31
69
|
export async function differentialSubjectVerdict(args) {
|
|
32
70
|
const profileId = args.profile?.profile_id ?? null;
|
|
71
|
+
const route = args.route ??
|
|
72
|
+
(args.profile
|
|
73
|
+
? args.profile.credential_kind === "api_key"
|
|
74
|
+
? "managed_api_key"
|
|
75
|
+
: "vendor_native"
|
|
76
|
+
: null);
|
|
33
77
|
const ctx = { harnessId: args.harnessId, profileId, now: args.now ?? new Date() };
|
|
34
78
|
// 1. The attempt's own stream: a typed NON-RETRYABLE auth/entitlement
|
|
35
79
|
// refusal the vendor just sent under this exact credential. An auth
|
|
@@ -37,20 +81,30 @@ export async function differentialSubjectVerdict(args) {
|
|
|
37
81
|
// may be model-scoped, so it condemns only the model this attempt ran.
|
|
38
82
|
const refusal = args.transients.find((t) => !t.retryable && (t.category === "auth_failed" || t.category === "capability_refused"));
|
|
39
83
|
if (refusal) {
|
|
40
|
-
return
|
|
84
|
+
return credentialStreamRefusal({
|
|
85
|
+
...ctx,
|
|
86
|
+
model: args.model,
|
|
87
|
+
route: route ?? undefined,
|
|
88
|
+
refusal,
|
|
89
|
+
});
|
|
41
90
|
}
|
|
42
91
|
// 2. The quota poller's last authenticated vendor contact: a typed
|
|
43
92
|
// `auth_revoked` absence means the vendor rejected this subject's own token.
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
93
|
+
const quota = route
|
|
94
|
+
? {
|
|
95
|
+
snapshots: args.quota.snapshots.filter((item) => item.subject.credential_route === route),
|
|
96
|
+
absences: args.quota.absences.filter((item) => item.subject.credential_route === route),
|
|
97
|
+
honored: args.quota.honored?.filter((item) => item.credential_route === route),
|
|
98
|
+
}
|
|
99
|
+
: args.quota;
|
|
100
|
+
const rejected = pollerCredentialRejections(quota).find((item) => item.harness_id === args.harnessId && item.profile_id === profileId);
|
|
101
|
+
if (rejected)
|
|
102
|
+
return rejected;
|
|
49
103
|
// 3. The local doctor probe (pinned profiles only — the default subject has
|
|
50
104
|
// no per-profile probe surface): a FAILED verification, vendor overlay
|
|
51
105
|
// included, is a dead-credential fact the quota path cannot see.
|
|
52
106
|
if (args.profile && args.probe) {
|
|
53
|
-
const status = vendorVerifiedProfileStatus(await probeCredentialProfileStatus(args.profile, args.probe),
|
|
107
|
+
const status = vendorVerifiedProfileStatus(await probeCredentialProfileStatus(args.profile, args.probe), quota);
|
|
54
108
|
if (status.verification === "failed") {
|
|
55
109
|
return observation(ctx, "verification_failed", "local_probe", null, status.detail ?? null);
|
|
56
110
|
}
|
|
@@ -99,15 +153,18 @@ export async function readyProfilesForRotation(args) {
|
|
|
99
153
|
profile,
|
|
100
154
|
// Rotating INTO a profile the vendor has already rejected would spend a
|
|
101
155
|
// whole attempt to rediscover the 401 the poller reported a minute ago.
|
|
102
|
-
status:
|
|
156
|
+
status: composeCredentialProfileEvidence(await probeCredentialProfileStatus(profile, args.probe), {
|
|
157
|
+
quota: args.quota,
|
|
158
|
+
unusable: args.unusable,
|
|
159
|
+
model: args.model,
|
|
160
|
+
route: profile.credential_kind === "api_key" ? "managed_api_key" : "vendor_native",
|
|
161
|
+
}),
|
|
103
162
|
})));
|
|
104
163
|
return new Set(entries
|
|
105
164
|
.filter(({ profile, status }) =>
|
|
106
165
|
// Pool and rotation choices are unpinned by construction (a pin
|
|
107
166
|
// never rotates): a last positive after a timeout may admit (#363).
|
|
108
|
-
profileStatusAdmits(profile, status, { unpinned: true })
|
|
109
|
-
liveUnusableFor(args.unusable ?? [], args.harnessId, profile.profile_id, args.model) ===
|
|
110
|
-
null)
|
|
167
|
+
profileStatusAdmits(profile, status, { unpinned: true }))
|
|
111
168
|
.map(({ profile }) => profile.profile_id));
|
|
112
169
|
}
|
|
113
170
|
//# sourceMappingURL=credential-differential.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-differential.js","sourceRoot":"","sources":["../src/credential-differential.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential-differential.js","sourceRoot":"","sources":["../src/credential-differential.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CredentialEvidenceAuthority, CredentialExecutionBinding, CredentialExecutionObserver } from "@claudexor/core";
|
|
2
|
+
/** Bind before native execution; events cannot choose another account's identity. */
|
|
3
|
+
export declare function createCredentialExecutionObserver(authority: CredentialEvidenceAuthority, captured: CredentialExecutionBinding): CredentialExecutionObserver;
|
|
4
|
+
//# sourceMappingURL=credential-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-execution.d.ts","sourceRoot":"","sources":["../src/credential-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAKzB,qFAAqF;AACrF,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,2BAA2B,EACtC,QAAQ,EAAE,0BAA0B,GACnC,2BAA2B,CA8F7B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { credentialStreamRefusal } from "./credential-differential.js";
|
|
2
|
+
import { classifyStatusError } from "./transientClassify.js";
|
|
3
|
+
/** Bind before native execution; events cannot choose another account's identity. */
|
|
4
|
+
export function createCredentialExecutionObserver(authority, captured) {
|
|
5
|
+
const subject = captured.subject;
|
|
6
|
+
const bindings = new Map();
|
|
7
|
+
for (const route of subject.route
|
|
8
|
+
? [subject.route]
|
|
9
|
+
: ["vendor_native", "managed_api_key"]) {
|
|
10
|
+
bindings.set(route, { ...captured, subject: { ...subject, route } });
|
|
11
|
+
}
|
|
12
|
+
let route = subject.route;
|
|
13
|
+
let terminalFailure = false;
|
|
14
|
+
let cleanTerminal = false;
|
|
15
|
+
let reportedFailure = false;
|
|
16
|
+
let finished = false;
|
|
17
|
+
let observedModel = null;
|
|
18
|
+
const pending = new Map();
|
|
19
|
+
const servedEvidence = new Map();
|
|
20
|
+
return {
|
|
21
|
+
observe(event) {
|
|
22
|
+
if (event.credential_profile_id !== undefined &&
|
|
23
|
+
event.credential_profile_id !== subject.profileId)
|
|
24
|
+
return;
|
|
25
|
+
if (event.credential_route) {
|
|
26
|
+
if (subject.route !== null && event.credential_route !== subject.route)
|
|
27
|
+
return;
|
|
28
|
+
if (route !== event.credential_route)
|
|
29
|
+
observedModel = null;
|
|
30
|
+
route = event.credential_route;
|
|
31
|
+
}
|
|
32
|
+
if (route === null)
|
|
33
|
+
return;
|
|
34
|
+
const binding = bindings.get(route);
|
|
35
|
+
if (!binding)
|
|
36
|
+
return;
|
|
37
|
+
if (event.observed_model)
|
|
38
|
+
observedModel = event.observed_model;
|
|
39
|
+
const category = event.status?.error_category;
|
|
40
|
+
if (category) {
|
|
41
|
+
const refusal = classifyStatusError(category, event.status?.retry_delay_ms ?? null);
|
|
42
|
+
if (refusal) {
|
|
43
|
+
const value = credentialStreamRefusal({
|
|
44
|
+
harnessId: subject.harnessId,
|
|
45
|
+
profileId: subject.profileId,
|
|
46
|
+
model: subject.requestedModel,
|
|
47
|
+
route,
|
|
48
|
+
refusal,
|
|
49
|
+
now: new Date(event.ts),
|
|
50
|
+
});
|
|
51
|
+
if (value) {
|
|
52
|
+
pending.set(route, value);
|
|
53
|
+
cleanTerminal = false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const served = event.type === "usage" &&
|
|
58
|
+
((event.usage?.input_tokens ?? 0) > 0 || (event.usage?.output_tokens ?? 0) > 0);
|
|
59
|
+
if (served) {
|
|
60
|
+
servedEvidence.set(route, { model: observedModel, at: event.ts });
|
|
61
|
+
}
|
|
62
|
+
if (event.type === "error" || event.payload?.["non_success_result"] === true) {
|
|
63
|
+
terminalFailure = true;
|
|
64
|
+
cleanTerminal = false;
|
|
65
|
+
reportedFailure = true;
|
|
66
|
+
}
|
|
67
|
+
if (event.type === "completed") {
|
|
68
|
+
const exitCode = event.payload?.["exit_code"];
|
|
69
|
+
if (typeof exitCode === "number" && exitCode !== 0)
|
|
70
|
+
terminalFailure = true;
|
|
71
|
+
else if (exitCode === 0 && event.payload?.["aborted"] !== true && !reportedFailure)
|
|
72
|
+
cleanTerminal = true;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
finish() {
|
|
76
|
+
if (finished)
|
|
77
|
+
return;
|
|
78
|
+
finished = true;
|
|
79
|
+
for (const [actualRoute, proof] of servedEvidence) {
|
|
80
|
+
const refusal = pending.get(actualRoute);
|
|
81
|
+
// Failed native results can report cumulative usage before their error.
|
|
82
|
+
if (terminalFailure &&
|
|
83
|
+
!cleanTerminal &&
|
|
84
|
+
refusal &&
|
|
85
|
+
(refusal.model === null || proof.model === null || refusal.model === proof.model))
|
|
86
|
+
continue;
|
|
87
|
+
authority.honorBound(bindings.get(actualRoute), proof.model, proof.at);
|
|
88
|
+
if (refusal?.model === null || refusal?.model === proof.model)
|
|
89
|
+
pending.delete(actualRoute);
|
|
90
|
+
}
|
|
91
|
+
for (const [actualRoute, refusal] of pending) {
|
|
92
|
+
const succeededElsewhere = cleanTerminal &&
|
|
93
|
+
(actualRoute !== route ||
|
|
94
|
+
(refusal.model !== null && observedModel !== null && refusal.model !== observedModel));
|
|
95
|
+
if ((terminalFailure && !cleanTerminal) || succeededElsewhere)
|
|
96
|
+
authority.recordBound(bindings.get(actualRoute), refusal);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=credential-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-execution.js","sourceRoot":"","sources":["../src/credential-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-profile-rotation.d.ts","sourceRoot":"","sources":["../src/credential-profile-rotation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,6BAA6B,EAC7B,cAAc,EACd,aAAa,EACd,MAAM,mBAAmB,CAAC;AAO3B,OAAO,
|
|
1
|
+
{"version":3,"file":"credential-profile-rotation.d.ts","sourceRoot":"","sources":["../src/credential-profile-rotation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { HarnessRunSpec as HarnessRunSpecSchema, RouteCredentialUnusablePayload, } from "@claudexor/schema";
|
|
2
2
|
import { quotaConstraintAppliesToModel } from "@claudexor/budget";
|
|
3
3
|
import { stampCredentialProfileSelection } from "@claudexor/core";
|
|
4
|
-
import { credentialPoolExhausted,
|
|
4
|
+
import { credentialPoolExhausted, poolMemberEvidence, profileQuotaBlock, } from "./credential-cooldown.js";
|
|
5
5
|
import { refusedBeforeProgress } from "./pre-progress-refusal.js";
|
|
6
|
+
import { applicableCredentialUnusable } from "./account-evidence.js";
|
|
6
7
|
import { reactiveRotationEvidence, rotationRetryEligible, } from "./rotation-predicate.js";
|
|
7
8
|
export { rotationRetryEligible } from "./rotation-predicate.js";
|
|
8
9
|
/** The route of a limit decision's subject: a pinned profile decides by its
|
|
@@ -139,7 +140,12 @@ function rotationExhaustionCandidates(args) {
|
|
|
139
140
|
// so typed, instead of hiding behind "not_ready" — a dead credential is
|
|
140
141
|
// not a readiness hiccup, and its quota evidence never carries a
|
|
141
142
|
// reopen promise.
|
|
142
|
-
const dead =
|
|
143
|
+
const dead = applicableCredentialUnusable({ harness_id: args.harnessId, profile_id: profile.profile_id }, {
|
|
144
|
+
unusable: args.unusable,
|
|
145
|
+
quota: { snapshots: args.snapshots, absences: [] },
|
|
146
|
+
model: args.model,
|
|
147
|
+
route: profile.credential_kind === "api_key" ? "managed_api_key" : "vendor_native",
|
|
148
|
+
});
|
|
143
149
|
const rejected = profile.profile_id === args.current?.profile_id
|
|
144
150
|
? "current"
|
|
145
151
|
: args.policy.rotation_eligible.length > 0 &&
|