audit-tools 0.32.67 → 0.33.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/audit/cli/advanceAuditCommand.d.ts.map +1 -1
- package/dist/audit/cli/advanceAuditCommand.js +8 -3
- package/dist/audit/cli/advanceAuditCommand.js.map +1 -1
- package/dist/audit/cli/args.d.ts +9 -27
- package/dist/audit/cli/args.d.ts.map +1 -1
- package/dist/audit/cli/args.js +116 -50
- package/dist/audit/cli/args.js.map +1 -1
- package/dist/audit/cli/auditStep.d.ts +15 -1
- package/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +2 -0
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.d.ts +2 -1
- package/dist/audit/cli/dispatch/quotaPool.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.js +43 -77
- package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
- package/dist/audit/cli/dispatch/types.d.ts +9 -0
- package/dist/audit/cli/dispatch/types.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.js +17 -6
- package/dist/audit/cli/dispatch.js.map +1 -1
- package/dist/audit/cli/hybridDispatch.d.ts +3 -1
- package/dist/audit/cli/hybridDispatch.d.ts.map +1 -1
- package/dist/audit/cli/hybridDispatch.js +1 -0
- package/dist/audit/cli/hybridDispatch.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts +0 -9
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +151 -92
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +11 -2
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +56 -8
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/prepareDispatchCommand.d.ts.map +1 -1
- package/dist/audit/cli/prepareDispatchCommand.js +15 -9
- package/dist/audit/cli/prepareDispatchCommand.js.map +1 -1
- package/dist/audit/cli/prompts.d.ts +12 -32
- package/dist/audit/cli/prompts.d.ts.map +1 -1
- package/dist/audit/cli/prompts.js +19 -33
- package/dist/audit/cli/prompts.js.map +1 -1
- package/dist/audit/cli/providerConfirmationStep.d.ts +13 -5
- package/dist/audit/cli/providerConfirmationStep.d.ts.map +1 -1
- package/dist/audit/cli/providerConfirmationStep.js +47 -8
- package/dist/audit/cli/providerConfirmationStep.js.map +1 -1
- package/dist/audit/cli/quotaCommand.d.ts.map +1 -1
- package/dist/audit/cli/quotaCommand.js +16 -10
- package/dist/audit/cli/quotaCommand.js.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.js +8 -0
- package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
- package/dist/audit/cli/semanticReviewStep.d.ts +11 -1
- package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.js +11 -15
- package/dist/audit/cli/semanticReviewStep.js.map +1 -1
- package/dist/audit/cli/validateCommand.d.ts.map +1 -1
- package/dist/audit/cli/validateCommand.js +3 -3
- package/dist/audit/cli/validateCommand.js.map +1 -1
- package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +39 -7
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/advanceTypes.d.ts +52 -1
- package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +9 -1
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/intakeExecutors.d.ts +27 -3
- package/dist/audit/orchestrator/intakeExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/intakeExecutors.js +119 -19
- package/dist/audit/orchestrator/intakeExecutors.js.map +1 -1
- package/dist/audit/orchestrator/nextStep.d.ts +7 -0
- package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
- package/dist/audit/orchestrator/nextStep.js +3 -0
- package/dist/audit/orchestrator/nextStep.js.map +1 -1
- package/dist/audit/orchestrator/providerConfirmation.d.ts.map +1 -1
- package/dist/audit/orchestrator/providerConfirmation.js +0 -2
- package/dist/audit/orchestrator/providerConfirmation.js.map +1 -1
- package/dist/audit/orchestrator/state.d.ts +17 -0
- package/dist/audit/orchestrator/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +13 -1
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/quota/index.d.ts +128 -128
- package/dist/audit/supervisor/sessionConfig.d.ts +3 -11
- package/dist/audit/supervisor/sessionConfig.d.ts.map +1 -1
- package/dist/audit/supervisor/sessionConfig.js +3 -25
- package/dist/audit/supervisor/sessionConfig.js.map +1 -1
- package/dist/audit/types/analyzerCapability.d.ts +6 -6
- package/dist/audit/types/externalAnalyzer.d.ts +10 -10
- package/dist/remediate/phases/plan.d.ts.map +1 -1
- package/dist/remediate/phases/plan.js +5 -4
- package/dist/remediate/phases/plan.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +9 -3
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/marshal.js +5 -4
- package/dist/remediate/steps/dispatch/marshal.js.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.d.ts +4 -2
- package/dist/remediate/steps/dispatch/waveScheduling.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.js +33 -85
- package/dist/remediate/steps/dispatch/waveScheduling.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +0 -10
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +33 -24
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/providerNodeDispatch.d.ts +8 -0
- package/dist/remediate/steps/providerNodeDispatch.d.ts.map +1 -1
- package/dist/remediate/steps/providerNodeDispatch.js +4 -0
- package/dist/remediate/steps/providerNodeDispatch.js.map +1 -1
- package/dist/remediate/steps/sessionConfigLoad.d.ts +46 -0
- package/dist/remediate/steps/sessionConfigLoad.d.ts.map +1 -0
- package/dist/remediate/steps/sessionConfigLoad.js +32 -0
- package/dist/remediate/steps/sessionConfigLoad.js.map +1 -0
- package/dist/shared/config/resolveSessionConfig.d.ts +72 -0
- package/dist/shared/config/resolveSessionConfig.d.ts.map +1 -0
- package/dist/shared/config/resolveSessionConfig.js +105 -0
- package/dist/shared/config/resolveSessionConfig.js.map +1 -0
- package/dist/shared/dispatch/admissionLoop.d.ts +12 -12
- package/dist/shared/friction/stepBoundaryCapture.d.ts +22 -1
- package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -1
- package/dist/shared/friction/stepBoundaryCapture.js +40 -0
- package/dist/shared/friction/stepBoundaryCapture.js.map +1 -1
- package/dist/shared/index.d.ts +14 -8
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +11 -5
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/providers/auditorSources.d.ts +102 -0
- package/dist/shared/providers/auditorSources.d.ts.map +1 -0
- package/dist/shared/providers/auditorSources.js +226 -0
- package/dist/shared/providers/auditorSources.js.map +1 -0
- package/dist/shared/providers/openAiCompatibleProvider.d.ts +20 -5
- package/dist/shared/providers/openAiCompatibleProvider.d.ts.map +1 -1
- package/dist/shared/providers/openAiCompatibleProvider.js +123 -19
- package/dist/shared/providers/openAiCompatibleProvider.js.map +1 -1
- package/dist/shared/providers/providerConfirmation.d.ts +3 -20
- package/dist/shared/providers/providerConfirmation.d.ts.map +1 -1
- package/dist/shared/providers/providerConfirmation.js +3 -37
- package/dist/shared/providers/providerConfirmation.js.map +1 -1
- package/dist/shared/providers/providerFactory.d.ts +6 -0
- package/dist/shared/providers/providerFactory.d.ts.map +1 -1
- package/dist/shared/providers/providerFactory.js +6 -0
- package/dist/shared/providers/providerFactory.js.map +1 -1
- package/dist/shared/providers/sharedProviderConfirmation.d.ts +264 -75
- package/dist/shared/providers/sharedProviderConfirmation.d.ts.map +1 -1
- package/dist/shared/providers/sharedProviderConfirmation.js +534 -113
- package/dist/shared/providers/sharedProviderConfirmation.js.map +1 -1
- package/dist/shared/providers/types.d.ts +17 -0
- package/dist/shared/providers/types.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.d.ts +34 -11
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +21 -23
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/quota/capacity.d.ts +50 -50
- package/dist/shared/quota/hostPool.d.ts +107 -0
- package/dist/shared/quota/hostPool.d.ts.map +1 -0
- package/dist/shared/quota/hostPool.js +103 -0
- package/dist/shared/quota/hostPool.js.map +1 -0
- package/dist/shared/quota/quotaSource.d.ts +2 -2
- package/dist/shared/types/auditorDescriptor.d.ts +112 -0
- package/dist/shared/types/auditorDescriptor.d.ts.map +1 -0
- package/dist/shared/types/auditorDescriptor.js +28 -0
- package/dist/shared/types/auditorDescriptor.js.map +1 -0
- package/dist/shared/types/providerConfirmation.d.ts +64 -6
- package/dist/shared/types/providerConfirmation.d.ts.map +1 -1
- package/dist/shared/types/providerConfirmation.js +1 -1
- package/dist/shared/types/sessionConfig.d.ts +73 -65
- package/dist/shared/types/sessionConfig.d.ts.map +1 -1
- package/dist/shared/types/sessionConfig.js +48 -0
- package/dist/shared/types/sessionConfig.js.map +1 -1
- package/dist/shared/validation/sessionConfig.d.ts +26 -14
- package/dist/shared/validation/sessionConfig.d.ts.map +1 -1
- package/dist/shared/validation/sessionConfig.js +72 -70
- package/dist/shared/validation/sessionConfig.js.map +1 -1
- package/docs/audit-pkg/contracts.md +4 -4
- package/docs/audit-pkg/operator-guide.md +43 -24
- package/package.json +1 -1
- package/skills/audit-code/SKILL.md +17 -14
- package/skills/audit-code/audit-code.prompt.md +17 -16
- package/wrapper/audit-code-wrapper-install-hosts.mjs +6 -10
- package/wrapper/remediate-code-wrapper-install-hosts.mjs +4 -8
- package/dist/shared/quota/repairProxyRegistry.d.ts +0 -84
- package/dist/shared/quota/repairProxyRegistry.d.ts.map +0 -1
- package/dist/shared/quota/repairProxyRegistry.js +0 -144
- package/dist/shared/quota/repairProxyRegistry.js.map +0 -1
|
@@ -2,43 +2,51 @@
|
|
|
2
2
|
* DC-2 — shared, session-scoped provider confirmation (Gate-0).
|
|
3
3
|
*
|
|
4
4
|
* The design wants ONE provider confirmation spanning an audit→remediate run:
|
|
5
|
-
* the first tool to run writes the confirmed
|
|
6
|
-
* at `<root>/.audit-tools/provider-confirmation.json` (NOT the
|
|
7
|
-
* artifacts dir); the second tool reads and honors it
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
5
|
+
* the first tool to run writes the operator's confirmed route DECISION to a
|
|
6
|
+
* SHARED artifact at `<root>/.audit-tools/provider-confirmation.json` (NOT the
|
|
7
|
+
* per-tool audit artifacts dir); the second tool reads and honors it. "Session" =
|
|
8
|
+
* the shared `.audit-tools` dir for that repo+run, so no new identity scheme is
|
|
9
|
+
* needed.
|
|
10
|
+
*
|
|
11
|
+
* **What this artifact carries is POLICY, not reach (G3).** The operator's
|
|
12
|
+
* decision — exclusions, cost order, λ — is a set of *rules*, valid for any
|
|
13
|
+
* auditor. What is *reachable* is per-auditor capability and is re-resolved from
|
|
14
|
+
* live env/PATH at the moment of use, never inherited from whoever wrote this
|
|
15
|
+
* file. So every read here is reach-free: it returns the persisted decision and
|
|
16
|
+
* nothing else.
|
|
17
|
+
*
|
|
18
|
+
* INV-DC1-6 (never-block) is the only invariant left in tension, and it now
|
|
19
|
+
* resolves to a plain two-valued read: a remediate run standalone with no prior
|
|
20
|
+
* audit resolves its provider independently — absence or corruption of the
|
|
21
|
+
* artifact is NOT an error, it is `null`.
|
|
22
|
+
*
|
|
23
|
+
* The former roster-staleness check (and its CE-012 three-valued `reconfirm`
|
|
24
|
+
* state) is GONE. It compared the *writing* auditor's roster against the reader's
|
|
25
|
+
* — meaningless cross-auditor by construction — and answered a real event (a
|
|
26
|
+
* backend the operator never confirmed became reachable) by silently discarding
|
|
27
|
+
* the operator's cost order and λ, while reaching no obligation at all. The
|
|
28
|
+
* `autonomous_mode`-keyed reconciliation gate
|
|
29
|
+
* ({@link computeNewlyReachableBackends}) replaces it: it compares the operator's
|
|
30
|
+
* DECISION against *this* auditor's freshly-resolved reach, which is well-defined
|
|
31
|
+
* across auditors, and it actually fires.
|
|
24
32
|
*
|
|
25
33
|
* CE-003 (lockless read races the writer rename): writes go through the shared
|
|
26
34
|
* atomic writer (temp + atomic rename) under `withFileLock`, so a lockless
|
|
27
35
|
* reader always observes either the complete old file or the complete new file —
|
|
28
36
|
* never a torn intermediate.
|
|
29
37
|
*
|
|
30
|
-
* PB-1 (opencode opt-in): the
|
|
31
|
-
* already withholds a bare-PATH opencode unless it is explicitly
|
|
32
|
-
* the shared confirmation inherits that opt-in for free.
|
|
38
|
+
* PB-1 (opencode opt-in): the confirmed pool is derived from `discoverProviders`,
|
|
39
|
+
* which already withholds a bare-PATH opencode unless it is explicitly
|
|
40
|
+
* configured, so the shared confirmation inherits that opt-in for free.
|
|
33
41
|
*/
|
|
34
42
|
import type { DispatchableSource, ResolvedProviderName, SessionConfig } from "../types/sessionConfig.js";
|
|
35
43
|
import type { RunLogger } from "../observability/runLog.js";
|
|
36
|
-
import type { ConfirmedPoolEntry, HostModelCostEntry, SourcePoolCostEntry, ProviderConfirmationInput } from "../types/providerConfirmation.js";
|
|
44
|
+
import type { ConfirmedPoolEntry, PersistedPoolEntry, HostModelCostEntry, SourcePoolCostEntry, ProviderConfirmationInput } from "../types/providerConfirmation.js";
|
|
37
45
|
/**
|
|
38
46
|
* Schema version for the shared confirmation artifact. Bumped independently of
|
|
39
47
|
* the per-tool seam contract (PROVIDER_CONFIRMATION_RESULT_VERSION) — this is
|
|
40
|
-
* the cross-tool session artifact
|
|
41
|
-
*
|
|
48
|
+
* the cross-tool session artifact carrying the operator's route DECISION
|
|
49
|
+
* (exclusions, cost order, λ), a distinct shape from the seam's pool snapshot.
|
|
42
50
|
*/
|
|
43
51
|
export declare const SHARED_PROVIDER_CONFIRMATION_VERSION: "1.0.0";
|
|
44
52
|
/**
|
|
@@ -52,22 +60,88 @@ export declare const SHARED_PROVIDER_CONFIRMATION_FILENAME = "provider-confirmat
|
|
|
52
60
|
/** `<root>/.audit-tools/provider-confirmation.json` (absolute). */
|
|
53
61
|
export declare function sharedProviderConfirmationPath(root: string): string;
|
|
54
62
|
/**
|
|
55
|
-
* The
|
|
56
|
-
*
|
|
63
|
+
* The operator's explicit route DECISION — reach-free by construction.
|
|
64
|
+
*
|
|
65
|
+
* This is the POLICY half of the Gate-0 confirmation: it names *rules* (which
|
|
66
|
+
* provider names the operator ruled out, which self-spawn-blocked ones they ruled
|
|
67
|
+
* back in), never *reachable endpoints*. It is deliberately the operator's raw
|
|
68
|
+
* `exclude` / `include` input rather than the derived per-entry `excluded` flag,
|
|
69
|
+
* because that flag folds in the WRITING auditor's `CLAUDECODE`/`CODEX` env via
|
|
70
|
+
* `isSelfSpawnBlocked` — persisting it would make one auditor's environment
|
|
71
|
+
* decide another's routing. Self-spawn-blocked is therefore recomputed in the
|
|
72
|
+
* READING process (see {@link resolveDispatchExclusion}).
|
|
57
73
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
74
|
+
* Because policy is reach-independent, it stays valid when the discovered reach
|
|
75
|
+
* changes. No read of this artifact gates on a reach check, for exactly that
|
|
76
|
+
* reason: an exclusion must fail CLOSED (keep excluding) when reach shifts, never
|
|
77
|
+
* fail open — and neither may the cost order or λ be discarded by a reach event
|
|
78
|
+
* they do not depend on (G3 step 1).
|
|
79
|
+
*/
|
|
80
|
+
export interface ConfirmedDispatchPolicy {
|
|
81
|
+
/**
|
|
82
|
+
* {@link DispatchExclusionPattern}s the operator ruled out of the dispatchable
|
|
83
|
+
* pool. Model-granular by default (`provider:model`) — the operator confirms
|
|
84
|
+
* *model* choices, so excluding one model of a multi-model backend must not drop
|
|
85
|
+
* the backend's other models.
|
|
86
|
+
*/
|
|
87
|
+
exclude?: DispatchExclusionPattern[];
|
|
88
|
+
/** Self-spawn-blocked provider names the operator explicitly opted back IN. */
|
|
89
|
+
include?: ResolvedProviderName[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* One rule in the operator's exclusion grammar — **reach-independent by
|
|
93
|
+
* construction**, so a rule authored on one auditor means the same thing to an
|
|
94
|
+
* auditor with a different reachable set (spec/unified-dispatch-worker-model.md).
|
|
95
|
+
*
|
|
96
|
+
* Three forms, disambiguated by the head token against the CLOSED set of provider
|
|
97
|
+
* names ({@link RESOLVED_PROVIDER_NAMES}) — so no form can shadow another:
|
|
98
|
+
*
|
|
99
|
+
* | Pattern | Head is a provider name? | Matches |
|
|
100
|
+
* |---|---|---|
|
|
101
|
+
* | `openai-compatible:gpt-oss-120b` | yes | that provider AND that exact model — the **default** granularity |
|
|
102
|
+
* | `codex` | yes (no `:`) | every backend of that provider — the coarse provider tier |
|
|
103
|
+
* | `integrate.api.nvidia.com` / `localhost:8000` | no | every source whose `endpoint` host (and port, when the pattern names one) matches — the coarse endpoint tier |
|
|
104
|
+
*
|
|
105
|
+
* ⚠ This is a THIRD keyspace, deliberately distinct from the quota-ledger pool
|
|
106
|
+
* identity (`provider[#account]/model`, `buildProviderModelKey`): an account is
|
|
107
|
+
* irrelevant to a rule about a backend. Do not unify them.
|
|
108
|
+
*/
|
|
109
|
+
export type DispatchExclusionPattern = string;
|
|
110
|
+
/** A backend an exclusion rule can be evaluated against — structurally a `DispatchableSource`. */
|
|
111
|
+
export interface ExcludableBackend {
|
|
112
|
+
provider: string;
|
|
113
|
+
model?: string;
|
|
114
|
+
endpoint?: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The resolved exclusion rule set for THIS process: the operator's persisted
|
|
118
|
+
* patterns plus every locally self-spawn-blocked provider. Applied as a
|
|
119
|
+
* set-difference FILTER over freshly-gathered reach, never additively.
|
|
61
120
|
*/
|
|
121
|
+
export interface DispatchExclusion {
|
|
122
|
+
/** True ⇒ this backend is ruled out and must not become a dispatch pool. */
|
|
123
|
+
excludes(backend: ExcludableBackend): boolean;
|
|
124
|
+
}
|
|
62
125
|
export interface SharedProviderConfirmation {
|
|
63
126
|
/** Must equal SHARED_PROVIDER_CONFIRMATION_VERSION. */
|
|
64
127
|
schema_version: typeof SHARED_PROVIDER_CONFIRMATION_VERSION;
|
|
128
|
+
/**
|
|
129
|
+
* The operator's explicit, reach-free route decision. Read at dispatch by
|
|
130
|
+
* {@link resolveDispatchExclusion} and applied as a set-difference filter over
|
|
131
|
+
* freshly-discovered reach — never additively. Absent ⇒ no operator exclusions
|
|
132
|
+
* (self-spawn-blocked providers are still excluded, recomputed locally).
|
|
133
|
+
*/
|
|
134
|
+
policy?: ConfirmedDispatchPolicy;
|
|
65
135
|
/** Always true: the pool applies to the whole audit→remediate session. */
|
|
66
136
|
session_level: true;
|
|
67
137
|
/** ISO-8601 timestamp of when the pool was confirmed. */
|
|
68
138
|
confirmed_at: string;
|
|
69
|
-
/**
|
|
70
|
-
|
|
139
|
+
/**
|
|
140
|
+
* The confirmed provider pool as PERSISTED — decision only, no reach (G3 B+D).
|
|
141
|
+
* See {@link PersistedPoolEntry}: the reach half is deliberately unrepresentable
|
|
142
|
+
* here, so one auditor's environment can never route another's.
|
|
143
|
+
*/
|
|
144
|
+
provider_pool: PersistedPoolEntry[];
|
|
71
145
|
/**
|
|
72
146
|
* Host self-reported model tiers with their operator-confirmed cost positions
|
|
73
147
|
* (follow-up c). Merged into the model-keyed dispatch positions map by
|
|
@@ -92,34 +166,26 @@ export interface SharedProviderConfirmation {
|
|
|
92
166
|
* (or a headless run) behaves exactly as before.
|
|
93
167
|
*/
|
|
94
168
|
dispatch_bias?: number;
|
|
95
|
-
/**
|
|
96
|
-
* Sorted snapshot of the provider NAMES discovered when this was written.
|
|
97
|
-
* Compared against the current discovered roster to detect staleness.
|
|
98
|
-
*/
|
|
99
|
-
roster: ResolvedProviderName[];
|
|
100
169
|
}
|
|
101
170
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
171
|
+
* The Gate-0 confirmation as RENDERED to the operator — identical to the persisted
|
|
172
|
+
* {@link SharedProviderConfirmation} except that `provider_pool` carries the FULL
|
|
173
|
+
* {@link ConfirmedPoolEntry} (this auditor's freshly-derived reach: tier, price, why
|
|
174
|
+
* a backend is excluded). This shape exists ONLY in memory; it never reaches disk.
|
|
106
175
|
*/
|
|
107
|
-
export
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
} | {
|
|
111
|
-
status: "reconfirm";
|
|
112
|
-
confirmation: SharedProviderConfirmation;
|
|
113
|
-
reason: string;
|
|
114
|
-
} | null;
|
|
176
|
+
export interface RenderedProviderConfirmation extends Omit<SharedProviderConfirmation, "provider_pool"> {
|
|
177
|
+
provider_pool: ConfirmedPoolEntry[];
|
|
178
|
+
}
|
|
115
179
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* the
|
|
180
|
+
* Project the render DTO down to what actually gets PERSISTED: the operator's
|
|
181
|
+
* decision, with this auditor's reach assessment dropped (G3 B+D).
|
|
182
|
+
*
|
|
183
|
+
* The PRODUCER is split — not the write site. `writeSharedProviderConfirmation`
|
|
184
|
+
* receives an already-typed value, so projecting THERE would leave the reach fields
|
|
185
|
+
* representable on the persisted type and a future caller could put them back.
|
|
186
|
+
* Projecting here makes the persisted shape carry no reach BY CONSTRUCTION.
|
|
121
187
|
*/
|
|
122
|
-
export declare function
|
|
188
|
+
export declare function buildSharedProviderConfirmation(...args: Parameters<typeof buildProviderConfirmationRender>): SharedProviderConfirmation;
|
|
123
189
|
/**
|
|
124
190
|
* Build a fresh shared confirmation from auto-discovery. Guarantees the
|
|
125
191
|
* always-available `worker-command` fallback is present in the pool (it blocks
|
|
@@ -137,7 +203,10 @@ export declare function currentProviderRoster(sessionConfig: SessionConfig, env?
|
|
|
137
203
|
*
|
|
138
204
|
* @param sessionConfig - Current session config; may be an empty `{}`.
|
|
139
205
|
* @param env - Process env snapshot; defaults to `process.env`.
|
|
140
|
-
* @param exclude -
|
|
206
|
+
* @param exclude - {@link DispatchExclusionPattern}s to pre-exclude (from a
|
|
207
|
+
* prior gate). A `provider:model` pattern marks a pool entry excluded only when
|
|
208
|
+
* that entry's `representativeModelId` IS that model — the same key the routing
|
|
209
|
+
* filter matches on, so display and dispatch cannot disagree.
|
|
141
210
|
* @param include - Provider names the operator explicitly opts back IN,
|
|
142
211
|
* overriding the default self-spawn-blocked exclusion for those names.
|
|
143
212
|
* @param detectCommand - Injectable PATH-detection hook, forwarded to
|
|
@@ -150,7 +219,100 @@ export declare function currentProviderRoster(sessionConfig: SessionConfig, env?
|
|
|
150
219
|
* passed via the dedicated params above (the executor forwards them from the
|
|
151
220
|
* same input), so this arg governs ordering + host roster only.
|
|
152
221
|
*/
|
|
153
|
-
export declare function
|
|
222
|
+
export declare function buildProviderConfirmationRender(sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv, exclude?: DispatchExclusionPattern[], include?: ResolvedProviderName[], detectCommand?: (command: string) => boolean, input?: ProviderConfirmationInput, sources?: DispatchableSource[]): RenderedProviderConfirmation;
|
|
223
|
+
/**
|
|
224
|
+
* The keys of the operator's persisted DECISION — the CONFIRMED half of the gate.
|
|
225
|
+
*
|
|
226
|
+
* All three pools contribute, and each is load-bearing: `annotateConfirmedPool`
|
|
227
|
+
* folds a source away when its model is already claimed by a provider entry, so a
|
|
228
|
+
* source can be represented ONLY by `provider_pool[].model_id`; and a host tier
|
|
229
|
+
* appears only in `host_model_cost_order`. Reading fewer than all three would
|
|
230
|
+
* manufacture a phantom delta for an already-confirmed backend.
|
|
231
|
+
*/
|
|
232
|
+
export declare function confirmedBackendKeys(confirmation: SharedProviderConfirmation): Set<string>;
|
|
233
|
+
/** One backend in the gate's delta: reachable now, absent from the decision. */
|
|
234
|
+
export interface NewlyReachableBackend {
|
|
235
|
+
/** The gate key — `model_id ?? provider name`. Stable, operator-facing. */
|
|
236
|
+
key: string;
|
|
237
|
+
/** The backend's provider name. Display only — the prompt names it beside `key`. */
|
|
238
|
+
provider: ResolvedProviderName;
|
|
239
|
+
/**
|
|
240
|
+
* The {@link DispatchExclusionPattern} that rules out **exactly this backend** —
|
|
241
|
+
* `provider:model` where the model is knowable, else the coarse `provider` tier.
|
|
242
|
+
* Built HERE rather than re-derived by the autonomous fail-closed write, so the
|
|
243
|
+
* rule the gate persists cannot drift from the key the gate compared.
|
|
244
|
+
*/
|
|
245
|
+
exclusion_pattern: DispatchExclusionPattern;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* DELTA = **REACH-NOW \ CONFIRMED**: the backends this auditor can reach *right
|
|
249
|
+
* now* that the operator's persisted decision never mentions. Sorted by key, so the
|
|
250
|
+
* result is stable for prompt rendering + comparison.
|
|
251
|
+
*
|
|
252
|
+
* This is a **set difference — a FILTER over fresh reach, never additive.** The
|
|
253
|
+
* opposite direction (CONFIRMED \ REACH-NOW: a backend the operator confirmed that
|
|
254
|
+
* this auditor cannot reach) is the harmless *subset* case and is deliberately
|
|
255
|
+
* silent — it is also why the synthetic `worker-command` entry and
|
|
256
|
+
* `host_model_cost_order` need no special-casing here.
|
|
257
|
+
*
|
|
258
|
+
* @param confirmation - The persisted decision (CONFIRMED).
|
|
259
|
+
* @param sessionConfig - The EFFECTIVE config, so `representativeModelId` derives
|
|
260
|
+
* keys identically to the write side.
|
|
261
|
+
* @param sources - REACH-NOW's source half. MUST come from the
|
|
262
|
+
* `gatherDispatchableSources` chokepoint — the single async source-gather point
|
|
263
|
+
* both `buildSourcePools` and the Gate-0 surface consume, so what the operator
|
|
264
|
+
* confirms is exactly what routes. Re-deriving it from `resolveAmbientSources`
|
|
265
|
+
* would reintroduce the display/dispatch drift that invariant forbids, and is
|
|
266
|
+
* structurally blind to descriptor-supplied sources, the demoted primary, and the
|
|
267
|
+
* legacy `openai_compatible` fold.
|
|
268
|
+
* @param env - Process env, for `discoverProviders` (REACH-NOW's provider half).
|
|
269
|
+
* @param detectCommand - Injectable PATH-detection hook so tests drive discovery
|
|
270
|
+
* deterministically instead of shelling out.
|
|
271
|
+
*/
|
|
272
|
+
export declare function computeNewlyReachableBackends(confirmation: SharedProviderConfirmation, sessionConfig: SessionConfig, sources?: readonly DispatchableSource[], env?: NodeJS.ProcessEnv, detectCommand?: (command: string) => boolean): NewlyReachableBackend[];
|
|
273
|
+
/**
|
|
274
|
+
* The dispatchable-pool exclusion rules for THIS process: the operator's explicit
|
|
275
|
+
* {@link DispatchExclusionPattern}s, plus every provider that is self-spawn-blocked
|
|
276
|
+
* *in this process's env* and was not explicitly opted back in.
|
|
277
|
+
*
|
|
278
|
+
* Reach is recomputed here rather than read from the artifact's derived `excluded`
|
|
279
|
+
* flag — that flag encodes the WRITING auditor's env, and an auditor for whom a
|
|
280
|
+
* provider is perfectly spawnable must not inherit another's block. The operator's
|
|
281
|
+
* decision is inherited (it is a rule); the reach assessment is not.
|
|
282
|
+
*
|
|
283
|
+
* ⚠ **These rules are only safe to apply to SOURCE pools.** Inside any agent session
|
|
284
|
+
* the self-spawn half ALWAYS names that agent (`CLAUDECODE` ⇒ `claude-code`, `CODEX`
|
|
285
|
+
* ⇒ `codex`) — i.e. the conversation host itself. Applying them to HOST pools would
|
|
286
|
+
* zero out dispatch entirely: the driver would exclude itself. It is harmless at
|
|
287
|
+
* `buildSourcePools` only because a host can never BE a source — `claude-code` is
|
|
288
|
+
* structurally absent from `DISPATCHABLE_SOURCE_PROVIDERS`, so in a Claude Code
|
|
289
|
+
* session the filter is a no-op. Honoring an operator exclusion of the host/primary
|
|
290
|
+
* provider therefore is NOT a matter of passing these rules to the host-pool builder;
|
|
291
|
+
* it needs a separate decision about what excluding your own driver should even mean.
|
|
292
|
+
*/
|
|
293
|
+
export declare function resolveDispatchExclusion(policy: ConfirmedDispatchPolicy | null | undefined, env?: NodeJS.ProcessEnv): DispatchExclusion;
|
|
294
|
+
/**
|
|
295
|
+
* Read the operator's confirmed route policy from the shared Gate-0 confirmation.
|
|
296
|
+
*
|
|
297
|
+
* Deliberately reads the artifact DIRECTLY rather than going through
|
|
298
|
+
* {@link readSharedProviderConfirmation}, so that **a corrupt sibling field cannot
|
|
299
|
+
* discard the decision**: `parseSharedProviderConfirmation` returns `null` wholesale
|
|
300
|
+
* on any malformed required field or a `schema_version` mismatch. Routing policy
|
|
301
|
+
* through it would make an unrelated corruption (or a future version bump) silently
|
|
302
|
+
* lift the operator's exclusions — failing OPEN on the one field that must fail
|
|
303
|
+
* closed. Parsing `policy` on its own keeps that blast radius out.
|
|
304
|
+
*
|
|
305
|
+
* (Before G3 this bypass carried a second rationale — dodging the roster-freshness
|
|
306
|
+
* gate. That gate is gone: no read of this artifact is reach-gated any more, so the
|
|
307
|
+
* remaining reason is blast radius alone.)
|
|
308
|
+
*
|
|
309
|
+
* **Honest limit — this is not absolutely fail-closed.** An absent or unparseable
|
|
310
|
+
* artifact yields `null` (no operator policy). That residue is irreducible here: with
|
|
311
|
+
* no readable decision on disk there is nothing to fail closed ON. Self-spawn-blocked
|
|
312
|
+
* providers are still excluded locally by {@link resolveDispatchExclusion}, which
|
|
313
|
+
* needs no artifact.
|
|
314
|
+
*/
|
|
315
|
+
export declare function readConfirmedDispatchPolicy(root: string | undefined): Promise<ConfirmedDispatchPolicy | null>;
|
|
154
316
|
/**
|
|
155
317
|
* Atomically write the shared confirmation to
|
|
156
318
|
* `<root>/.audit-tools/provider-confirmation.json`. The durable write goes
|
|
@@ -161,44 +323,55 @@ export declare function buildSharedProviderConfirmation(sessionConfig?: SessionC
|
|
|
161
323
|
*/
|
|
162
324
|
export declare function writeSharedProviderConfirmation(root: string, confirmation: SharedProviderConfirmation, logger?: RunLogger): Promise<void>;
|
|
163
325
|
/**
|
|
164
|
-
* Read +
|
|
326
|
+
* Read + parse the shared confirmation for `root`. TWO-valued:
|
|
165
327
|
*
|
|
166
328
|
* - returns `null` when the artifact is ABSENT or MALFORMED — the caller then
|
|
167
329
|
* resolves its provider independently, exactly as today (INV-DC1-6
|
|
168
330
|
* never-block). Absence is the standalone-remediate case and is not an error.
|
|
169
|
-
* - returns
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
331
|
+
* - returns the parsed confirmation otherwise — the operator's persisted route
|
|
332
|
+
* DECISION, honored as-is.
|
|
333
|
+
*
|
|
334
|
+
* **Reach-free by construction (G3).** This read does NOT check whether the
|
|
335
|
+
* reachable backend set still matches whatever the writing auditor saw. It cannot
|
|
336
|
+
* meaningfully: a *different* auditor legitimately has different reach, so that
|
|
337
|
+
* comparison was noise cross-auditor — and answering it by discarding the
|
|
338
|
+
* operator's decision fails OPEN on a policy question. A backend becoming newly
|
|
339
|
+
* reachable is a real event, handled by the reconciliation gate
|
|
340
|
+
* ({@link computeNewlyReachableBackends}), which compares the DECISION against
|
|
341
|
+
* *this* auditor's reach and is keyed on `autonomous_mode`.
|
|
177
342
|
*
|
|
178
343
|
* Never throws: a read/parse failure is treated as absent/malformed → `null`.
|
|
179
344
|
* The read is lockless (no lock needed: the writer's atomic rename guarantees a
|
|
180
345
|
* complete file either way — CE-003) and so cannot deadlock against a writer.
|
|
181
346
|
*/
|
|
182
|
-
export declare function readSharedProviderConfirmation(root: string
|
|
347
|
+
export declare function readSharedProviderConfirmation(root: string): Promise<SharedProviderConfirmation | null>;
|
|
183
348
|
/**
|
|
184
349
|
* Read the operator-confirmed cost ordering (rung 1 of costRank; see
|
|
185
350
|
* spec/cost-first-routing.md) from the shared Gate-0 confirmation as a model-keyed
|
|
186
351
|
* `Map<model_id, cost_order>` for the dispatch build sites. Single-sourced so audit
|
|
187
352
|
* and remediate honor it identically. Best-effort and never throws: an absent
|
|
188
|
-
* `root
|
|
189
|
-
*
|
|
190
|
-
*
|
|
353
|
+
* `root` or a missing/malformed confirmation yields an empty map — dispatch then
|
|
354
|
+
* falls to real price then tier.
|
|
355
|
+
*
|
|
356
|
+
* **Not gated on reach (G3 step 1).** The cost order is the operator's POLICY —
|
|
357
|
+
* "the operator may reorder" — so a shift in what happens to be reachable must not
|
|
358
|
+
* silently discard it. The former roster-freshness gate did exactly that, on the
|
|
359
|
+
* false premise that these positions are reach-derived; they are not, and it was
|
|
360
|
+
* the live defect this fixes.
|
|
191
361
|
*/
|
|
192
|
-
export declare function readConfirmedCostPositions(root: string | undefined
|
|
362
|
+
export declare function readConfirmedCostPositions(root: string | undefined): Promise<Map<string, number>>;
|
|
193
363
|
/**
|
|
194
364
|
* Read the operator-confirmed cost↔speed dispatch bias (λ ∈ [0,1]) from the shared
|
|
195
365
|
* Gate-0 confirmation for the dispatch build sites (spec/dispatch-cost-speed-dial.md).
|
|
196
366
|
* Single-sourced so audit and remediate apply the identical operating point.
|
|
197
|
-
* Best-effort and never throws: an absent `root`, a missing/malformed confirmation,
|
|
198
|
-
*
|
|
199
|
-
*
|
|
367
|
+
* Best-effort and never throws: an absent `root`, a missing/malformed confirmation,
|
|
368
|
+
* or an absent field all yield the cost-first default `0`.
|
|
369
|
+
*
|
|
370
|
+
* **Not gated on reach (G3 step 1)** — λ is the operator's durable operating point
|
|
371
|
+
* on the cost-vs-throughput frontier, i.e. POLICY. See
|
|
372
|
+
* {@link readConfirmedCostPositions}.
|
|
200
373
|
*/
|
|
201
|
-
export declare function readConfirmedDispatchBias(root: string | undefined
|
|
374
|
+
export declare function readConfirmedDispatchBias(root: string | undefined): Promise<number>;
|
|
202
375
|
/** File name of the host-written Gate-0 input under the audit artifacts dir. */
|
|
203
376
|
export declare const PROVIDER_CONFIRMATION_INPUT_FILENAME = "provider-confirmation.input.json";
|
|
204
377
|
/**
|
|
@@ -215,4 +388,20 @@ export declare function parseProviderConfirmationInput(value: unknown): Provider
|
|
|
215
388
|
* has not acted yet" signal the gate uses to decide emit-vs-consume. Never throws.
|
|
216
389
|
*/
|
|
217
390
|
export declare function readProviderConfirmationInput(artifactsDir: string): Promise<ProviderConfirmationInput | null>;
|
|
391
|
+
/**
|
|
392
|
+
* Invalidate a CONSUMED Gate-0 input by deleting it — the second half of
|
|
393
|
+
* consume-and-invalidate, paired here with {@link readProviderConfirmationInput} so
|
|
394
|
+
* the two cannot drift apart.
|
|
395
|
+
*
|
|
396
|
+
* The input's presence is the "operator has acted" signal the gate reads to decide
|
|
397
|
+
* emit-vs-consume. Once promoted into the canonical artifacts it is SPENT: leaving it
|
|
398
|
+
* on disk means a later reconciliation delta silently re-consumes a submission that
|
|
399
|
+
* answered an older question, auto-satisfying the gate instead of asking the
|
|
400
|
+
* operator. Deleting it is what makes the gate able to fire a second time at all.
|
|
401
|
+
*
|
|
402
|
+
* Best-effort and never throws: an already-absent file is the desired end state, and
|
|
403
|
+
* a failed unlink must not break the in-flight obligation (the promotion itself
|
|
404
|
+
* already succeeded).
|
|
405
|
+
*/
|
|
406
|
+
export declare function unlinkProviderConfirmationInput(artifactsDir: string): Promise<void>;
|
|
218
407
|
//# sourceMappingURL=sharedProviderConfirmation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedProviderConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/sharedProviderConfirmation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sharedProviderConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/sharedProviderConfirmation.ts"],"names":[],"mappings":"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"}
|