audit-tools 0.30.12 → 0.30.13
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/dispatch/quotaPool.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.js +8 -1
- package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.js +4 -3
- package/dist/audit/orchestrator/intentCheckpointGate.js.map +1 -1
- package/dist/audit/orchestrator/ledger.d.ts.map +1 -1
- package/dist/audit/orchestrator/ledger.js +4 -1
- package/dist/audit/orchestrator/ledger.js.map +1 -1
- package/dist/audit/orchestrator/resultBaseline.d.ts +7 -0
- package/dist/audit/orchestrator/resultBaseline.d.ts.map +1 -1
- package/dist/audit/orchestrator/resultBaseline.js +8 -2
- package/dist/audit/orchestrator/resultBaseline.js.map +1 -1
- package/dist/remediate/steps/dispatch.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch.js +11 -1
- package/dist/remediate/steps/dispatch.js.map +1 -1
- package/dist/shared/contentKey.d.ts +47 -0
- package/dist/shared/contentKey.d.ts.map +1 -1
- package/dist/shared/contentKey.js +54 -0
- package/dist/shared/contentKey.js.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts +12 -0
- package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.js +23 -1
- package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
- package/dist/shared/friction/stepBoundaryCapture.d.ts +76 -0
- package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -0
- package/dist/shared/friction/stepBoundaryCapture.js +41 -0
- package/dist/shared/friction/stepBoundaryCapture.js.map +1 -0
- package/dist/shared/index.d.ts +3 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io/gitignoreArtifacts.d.ts +45 -10
- package/dist/shared/io/gitignoreArtifacts.d.ts.map +1 -1
- package/dist/shared/io/gitignoreArtifacts.js +76 -29
- package/dist/shared/io/gitignoreArtifacts.js.map +1 -1
- package/dist/shared/quota/compositeQuotaSource.d.ts +12 -0
- package/dist/shared/quota/compositeQuotaSource.d.ts.map +1 -1
- package/dist/shared/quota/compositeQuotaSource.js +7 -0
- package/dist/shared/quota/compositeQuotaSource.js.map +1 -1
- package/dist/shared/quota/hostSessionQuotaSource.d.ts.map +1 -1
- package/dist/shared/quota/hostSessionQuotaSource.js +42 -8
- package/dist/shared/quota/hostSessionQuotaSource.js.map +1 -1
- package/dist/shared/repair/emitValidateRepair.d.ts.map +1 -1
- package/dist/shared/repair/emitValidateRepair.js +4 -3
- package/dist/shared/repair/emitValidateRepair.js.map +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.mjs +8 -2
|
@@ -7,11 +7,14 @@ import { AGENT_FEEDBACK_FILENAME } from "../agentReflections.js";
|
|
|
7
7
|
* Always-ignored generated assets (build/install artifacts). Forward slashes +
|
|
8
8
|
* trailing slash for directories so git treats them as dir matches on every OS.
|
|
9
9
|
* `.audit-code/` is the host renderer / install-asset + generated-skill tree;
|
|
10
|
-
* the friction CAPTURE sidecar is matched
|
|
10
|
+
* the friction CAPTURE sidecar is matched at ANY depth (an install-time-static,
|
|
11
|
+
* repo-relative any-depth glob built from the canonical FRICTION_CAPTURE_DIRNAME
|
|
12
|
+
* path component) so it is ignored wherever it is written, never tied to a single
|
|
13
|
+
* fixed `.audit-tools/<one-segment>/` layout.
|
|
11
14
|
*/
|
|
12
15
|
export const ALWAYS_IGNORE_PATTERNS = [
|
|
13
16
|
".audit-code/",
|
|
14
|
-
|
|
17
|
+
`**/${FRICTION_CAPTURE_DIRNAME}/`,
|
|
15
18
|
];
|
|
16
19
|
/**
|
|
17
20
|
* Visibility-conditional ignores: the canonical deliverables (imported from the
|
|
@@ -26,6 +29,26 @@ export const VISIBILITY_CONDITIONAL_PATTERNS = [
|
|
|
26
29
|
`.audit-tools/${REMEDIATION_OUTCOMES_FILENAME}`,
|
|
27
30
|
`.audit-tools/*/${AGENT_FEEDBACK_FILENAME}`,
|
|
28
31
|
];
|
|
32
|
+
/**
|
|
33
|
+
* Operator override env var. `private`/`track` => private; `public`/`ignore` =>
|
|
34
|
+
* public; anything else (incl. unset) => no override. Single-sourced here so the
|
|
35
|
+
* TS detector and `scripts/postinstall.mjs` agree on the name + accepted values.
|
|
36
|
+
*/
|
|
37
|
+
export const REPO_VISIBILITY_ENV = "AUDIT_TOOLS_REPO_VISIBILITY";
|
|
38
|
+
/**
|
|
39
|
+
* Parse a raw operator-supplied visibility string into a concrete
|
|
40
|
+
* `private`/`public`, or null when it is unset/unrecognized (=> no override).
|
|
41
|
+
* Accepts the intent aliases `track` (=> private, keep deliverables tracked) and
|
|
42
|
+
* `ignore` (=> public, ignore deliverables).
|
|
43
|
+
*/
|
|
44
|
+
export function parseVisibilityOverride(raw) {
|
|
45
|
+
const value = (raw ?? "").trim().toLowerCase();
|
|
46
|
+
if (value === "private" || value === "track")
|
|
47
|
+
return "private";
|
|
48
|
+
if (value === "public" || value === "ignore")
|
|
49
|
+
return "public";
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
29
52
|
/** Anchored marker block so re-runs replace OUR lines and never clobber user lines. */
|
|
30
53
|
export const GITIGNORE_BLOCK_BEGIN = "# >>> audit-tools managed ignores >>>";
|
|
31
54
|
export const GITIGNORE_BLOCK_END = "# <<< audit-tools managed ignores <<<";
|
|
@@ -43,6 +66,9 @@ export function renderGitignoreBlock(visibility) {
|
|
|
43
66
|
if (visibility === "public") {
|
|
44
67
|
lines.push("# Deliverables + meta-audit reflections — ignored because this repo is public.", ...VISIBILITY_CONDITIONAL_PATTERNS);
|
|
45
68
|
}
|
|
69
|
+
else if (visibility === "unknown") {
|
|
70
|
+
lines.push("# Deliverables + meta-audit reflections kept tracked (visibility UNKNOWN —", `# could not resolve; set ${REPO_VISIBILITY_ENV} or pass an override to pin it).`);
|
|
71
|
+
}
|
|
46
72
|
else {
|
|
47
73
|
lines.push("# Deliverables + meta-audit reflections kept tracked (private repo).");
|
|
48
74
|
}
|
|
@@ -74,42 +100,55 @@ export function mergeGitignoreBlock(existing, block) {
|
|
|
74
100
|
return `${head}${block}`.replace(/\n*$/, "\n");
|
|
75
101
|
}
|
|
76
102
|
/**
|
|
77
|
-
* Detect repo visibility, degrade-safe.
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
103
|
+
* Detect repo visibility, degrade-safe. Strict order of authority — each
|
|
104
|
+
* fallback resolves to the next signal, and ONLY the final, fully-exhausted
|
|
105
|
+
* fallback yields `unknown` (never a silent `private`):
|
|
106
|
+
* 1. An explicit operator `override` (config flag) ALWAYS wins.
|
|
107
|
+
* 2. The `AUDIT_TOOLS_REPO_VISIBILITY` env config/override (read via the
|
|
108
|
+
* injected `readEnv`, default `process.env`), parsed by
|
|
109
|
+
* {@link parseVisibilityOverride}.
|
|
110
|
+
* 3. The `gh repo view --json isPrivate` boolean, via the injected `runGh`.
|
|
111
|
+
* 4. `unknown` — no authoritative signal resolved. Callers fall back to the
|
|
112
|
+
* tracked default and warn; we do NOT pretend the repo is private.
|
|
82
113
|
*
|
|
83
|
-
* `runGh`
|
|
84
|
-
* raw stdout of the gh call, or null on any
|
|
114
|
+
* `runGh`/`readEnv` are injected so tests stub them (no live gh / env, fully
|
|
115
|
+
* OS-agnostic). `runGh` returns the raw stdout of the gh call, or null on any
|
|
116
|
+
* failure. NEVER throws.
|
|
85
117
|
*/
|
|
86
118
|
export function detectRepoVisibility(params) {
|
|
119
|
+
// 1. Explicit operator override wins unconditionally.
|
|
87
120
|
if (params.override === "private" || params.override === "public") {
|
|
88
121
|
return params.override;
|
|
89
122
|
}
|
|
90
|
-
|
|
91
|
-
|
|
123
|
+
// 2. Env config/override.
|
|
124
|
+
const readEnv = params.readEnv ?? ((name) => process.env[name]);
|
|
125
|
+
const envOverride = parseVisibilityOverride(readEnv(REPO_VISIBILITY_ENV));
|
|
126
|
+
if (envOverride) {
|
|
127
|
+
return envOverride;
|
|
92
128
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
stdout =
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
129
|
+
// 3. gh isPrivate boolean.
|
|
130
|
+
if (typeof params.runGh === "function") {
|
|
131
|
+
let stdout = null;
|
|
132
|
+
try {
|
|
133
|
+
stdout = params.runGh(params.repoRoot);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
stdout = null;
|
|
137
|
+
}
|
|
138
|
+
if (typeof stdout === "string" && stdout.trim().length > 0) {
|
|
139
|
+
try {
|
|
140
|
+
const parsed = JSON.parse(stdout);
|
|
141
|
+
if (parsed && typeof parsed.isPrivate === "boolean") {
|
|
142
|
+
return parsed.isPrivate ? "private" : "public";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// fall through to unknown
|
|
147
|
+
}
|
|
107
148
|
}
|
|
108
149
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
return "private";
|
|
150
|
+
// 4. Nothing authoritative resolved.
|
|
151
|
+
return "unknown";
|
|
113
152
|
}
|
|
114
153
|
/**
|
|
115
154
|
* Ensure the consuming repo's `.gitignore` carries the managed block for the
|
|
@@ -124,11 +163,19 @@ export function ensureArtifactGitignore(params) {
|
|
|
124
163
|
const fileExists = params.fileExists ?? ((p) => existsSync(p));
|
|
125
164
|
const readFile = params.readFile ?? ((p) => readFileSync(p, "utf8"));
|
|
126
165
|
const writeFile = params.writeFile ?? ((p, c) => writeFileSync(p, c, "utf8"));
|
|
166
|
+
const warn = params.warn ?? ((m) => console.warn(m));
|
|
127
167
|
const visibility = detectRepoVisibility({
|
|
128
168
|
repoRoot: params.repoRoot,
|
|
129
169
|
override: params.override,
|
|
130
170
|
runGh: params.runGh,
|
|
171
|
+
readEnv: params.readEnv,
|
|
131
172
|
});
|
|
173
|
+
if (visibility === "unknown") {
|
|
174
|
+
warn(`[audit-tools] repo visibility could not be determined (gh unavailable and no ` +
|
|
175
|
+
`override set) — keeping deliverables + meta-audit reflections TRACKED by default. ` +
|
|
176
|
+
`If this repo is public, set ${REPO_VISIBILITY_ENV}=public (or =private to silence ` +
|
|
177
|
+
`this warning) before installing, or pass an explicit override.`);
|
|
178
|
+
}
|
|
132
179
|
try {
|
|
133
180
|
const block = renderGitignoreBlock(visibility);
|
|
134
181
|
const existing = fileExists(gitignorePath) ? readFile(gitignorePath) : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignoreArtifacts.js","sourceRoot":"","sources":["../../../src/shared/io/gitignoreArtifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"gitignoreArtifacts.js","sourceRoot":"","sources":["../../../src/shared/io/gitignoreArtifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,18 @@ export interface BuildQuotaSourceOptions {
|
|
|
10
10
|
* it (e.g. tests) or a stub to inject one.
|
|
11
11
|
*/
|
|
12
12
|
claudeOAuth?: QuotaSource | false;
|
|
13
|
+
/**
|
|
14
|
+
* The host-session fixed-window source ({@link HostSessionQuotaSource}),
|
|
15
|
+
* PREPENDED ahead of every proactive source so it answers FIRST for the
|
|
16
|
+
* provider/model key it owns (own-key precedence via its exact
|
|
17
|
+
* `providerModelKey` gate — it returns `not_applicable`, passing through, for
|
|
18
|
+
* any other key, and `not_applicable` for its own key while the window is open
|
|
19
|
+
* with no limit known). This wires the operator's account-level session wall in
|
|
20
|
+
* as a first-class PRE-WALL source: its graduated `remaining_pct` lets the
|
|
21
|
+
* scheduler's LOW / CRITICAL bands throttle BEFORE a hard 429, and its paused
|
|
22
|
+
* snapshot folds a cooldown in. Omit (default) to leave it unwired. [CE-001/CE-002]
|
|
23
|
+
*/
|
|
24
|
+
hostSession?: QuotaSource;
|
|
13
25
|
}
|
|
14
26
|
export declare class CompositeQuotaSource implements QuotaSource {
|
|
15
27
|
readonly name = "composite";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compositeQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/compositeQuotaSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQ1F,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"compositeQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/compositeQuotaSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQ1F,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAClC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,oBAAqB,YAAW,WAAW;IACtD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,SAAS;IAKnD,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIrF;;;;;;;OAOG;IACG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiCrE;;;;;OAKG;IACG,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQxE,2EAA2E;IAC3E,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAG1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,WAAW,CA0BnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACvD,QAAQ,EAAE,WAAW,GACpB,WAAW,CAYb"}
|
|
@@ -89,6 +89,13 @@ export class CompositeQuotaSource {
|
|
|
89
89
|
*/
|
|
90
90
|
export function buildQuotaSource(options = {}) {
|
|
91
91
|
const proactive = [];
|
|
92
|
+
// The host-session source is PREPENDED before every proactive source: it owns
|
|
93
|
+
// its exact provider/model key (exact-key gate, not coversProvider), so it
|
|
94
|
+
// answers first for that key and passes through for all others — never masking
|
|
95
|
+
// the proactive/learned sources. [CE-001/CE-002]
|
|
96
|
+
if (options.hostSession) {
|
|
97
|
+
proactive.push(options.hostSession);
|
|
98
|
+
}
|
|
92
99
|
if (options.claudeOAuth !== false) {
|
|
93
100
|
proactive.push(options.claudeOAuth ?? new ClaudeOAuthQuotaSource());
|
|
94
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compositeQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/compositeQuotaSource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"compositeQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/compositeQuotaSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostSessionQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,8BAA8B,iBAAiB,CAAC;AAE7D,kGAAkG;AAClG,eAAO,MAAM,iCAAiC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"hostSessionQuotaSource.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,8BAA8B,iBAAiB,CAAC;AAE7D,kGAAkG;AAClG,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAcnD,2EAA2E;AAC3E,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;OAIG;IACH,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D;AA2BD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,WAAW;IACxD,QAAQ,CAAC,IAAI,kBAAkC;IAE/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAE3E,8DAA8D;IAC9D,OAAO,CAAC,eAAe,CAAuB;IAC9C,yDAAyD;IACzD,OAAO,CAAC,UAAU,CAAS;IAC3B,kFAAkF;IAClF,OAAO,CAAC,OAAO,CAAkC;IACjD,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,OAAO,EAAE,6BAA6B;IAWlD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAiBhB,4EAA4E;IAC5E,aAAa,IAAI,MAAM,GAAG,IAAI;IAM9B,mFAAmF;IACnF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;;;;;OASG;IACH,WAAW,CACT,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,qBAAqB;IA+ElB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIrF;;;;OAIG;IACG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA+BtE"}
|
|
@@ -40,10 +40,17 @@ import { DEFAULT_COOLDOWN_MS, detectRateLimitFromChannel, } from "./errorParsing
|
|
|
40
40
|
export const HOST_SESSION_QUOTA_SOURCE_NAME = "host_session";
|
|
41
41
|
/** Default number of consecutive non-consuming re-limits of the SAME packet before escalating. */
|
|
42
42
|
export const DEFAULT_MAX_CONSECUTIVE_RE_LIMITS = 3;
|
|
43
|
-
/** `remaining_pct` reported while the window is open and no limit has been seen. */
|
|
44
|
-
const WINDOW_OPEN_REMAINING_PCT = 1;
|
|
45
43
|
/** `remaining_pct` reported while the window is paused (limit active, before reset). */
|
|
46
44
|
const WINDOW_PAUSED_REMAINING_PCT = 0;
|
|
45
|
+
/**
|
|
46
|
+
* `remaining_pct` reported while a limit is active but the window has not yet been
|
|
47
|
+
* recorded as paused for THIS key — graduated band so the scheduler's CRITICAL
|
|
48
|
+
* throttle (`QUOTA_REMAINING_PCT_CRITICAL`) fires as the account approaches the
|
|
49
|
+
* wall rather than only after a hard 429. Used when a limit has been seen this
|
|
50
|
+
* window cycle but the cooldown has since elapsed and a fresh same-cycle limit is
|
|
51
|
+
* being tracked.
|
|
52
|
+
*/
|
|
53
|
+
const WINDOW_NEAR_WALL_REMAINING_PCT = 0.05;
|
|
47
54
|
function emitEscalationToStderr(escalation) {
|
|
48
55
|
try {
|
|
49
56
|
process.stderr.write(JSON.stringify({
|
|
@@ -98,10 +105,15 @@ export class HostSessionQuotaSource {
|
|
|
98
105
|
if (this.cooldownUntilMs == null)
|
|
99
106
|
return false;
|
|
100
107
|
if (this.now() >= this.cooldownUntilMs) {
|
|
101
|
-
// Auto-resume: window reopened, clear the
|
|
102
|
-
//
|
|
108
|
+
// Auto-resume: the window reopened, so clear the PAUSE. Do NOT null the
|
|
109
|
+
// re-limit tracker here — a probe firing between two re-limits of the same
|
|
110
|
+
// in-flight packet would otherwise silently reset the escalation count and
|
|
111
|
+
// let an unresettable / clock-skewed wall livelock forever (the packet is
|
|
112
|
+
// re-dispatched, re-limits, the bound never accrues). The tracker is reset
|
|
113
|
+
// in {@link recordLimit} instead, and only when a fresh limit proves the
|
|
114
|
+
// sequence was genuine progress (a NEW packet, or a limit arriving after the
|
|
115
|
+
// prior window's reset already elapsed before re-dispatch).
|
|
103
116
|
this.cooldownUntilMs = null;
|
|
104
|
-
this.tracker = null;
|
|
105
117
|
return false;
|
|
106
118
|
}
|
|
107
119
|
return true;
|
|
@@ -137,9 +149,18 @@ export class HostSessionQuotaSource {
|
|
|
137
149
|
: this.defaultCooldownMs;
|
|
138
150
|
const resetMs = nowMs + cooldownMs;
|
|
139
151
|
// Track consecutive re-limits of the SAME packet. A re-limit is "the same"
|
|
140
|
-
// when the same packet trips again
|
|
152
|
+
// when the same packet trips again BEFORE the window it last set has
|
|
141
153
|
// reopened — i.e. an unresettable / clock-skewed wall, not normal progress.
|
|
142
|
-
|
|
154
|
+
// If instead the prior reset had already elapsed before this fresh limit
|
|
155
|
+
// arrived, the window genuinely reopened and the packet made progress between
|
|
156
|
+
// dispatches → this is a NEW exhaustion cycle, so the count restarts. (The
|
|
157
|
+
// tracker is intentionally NOT cleared on auto-resume so a probe between two
|
|
158
|
+
// pre-reset re-limits cannot reset the count; the elapsed-reset check here is
|
|
159
|
+
// what distinguishes genuine progress from a livelock.)
|
|
160
|
+
const priorResetElapsed = this.tracker != null && nowMs >= this.tracker.last_reset_ms;
|
|
161
|
+
if (this.tracker &&
|
|
162
|
+
this.tracker.packet_id === packetId &&
|
|
163
|
+
!priorResetElapsed) {
|
|
143
164
|
this.tracker.consecutive_re_limits += 1;
|
|
144
165
|
this.tracker.cumulative_wall_ms += cooldownMs;
|
|
145
166
|
this.tracker.last_reset_ms = resetMs;
|
|
@@ -197,8 +218,21 @@ export class HostSessionQuotaSource {
|
|
|
197
218
|
return { snapshot: null, status: "not_applicable" };
|
|
198
219
|
}
|
|
199
220
|
const paused = this.isPaused();
|
|
221
|
+
// Graduated pre-wall band: paused → 0 (hard stop, scheduler cooldowns); a
|
|
222
|
+
// limit was seen this cycle but the cooldown has since elapsed without a clean
|
|
223
|
+
// reset → near-wall (CRITICAL throttle). Open with no limit known → the source
|
|
224
|
+
// has NO usage signal, so it must PASS THROUGH (`not_applicable`, null
|
|
225
|
+
// snapshot) rather than win the cascade and mask the learned/sliding source.
|
|
226
|
+
// First snapshot wins in the composite, so asserting a snapshot here would
|
|
227
|
+
// shadow the reactive learned reading. Composition over masking.
|
|
228
|
+
if (!paused && this.tracker == null) {
|
|
229
|
+
return { snapshot: null, status: "not_applicable" };
|
|
230
|
+
}
|
|
231
|
+
const remainingPct = paused
|
|
232
|
+
? WINDOW_PAUSED_REMAINING_PCT
|
|
233
|
+
: WINDOW_NEAR_WALL_REMAINING_PCT;
|
|
200
234
|
const snapshot = {
|
|
201
|
-
remaining_pct:
|
|
235
|
+
remaining_pct: remainingPct,
|
|
202
236
|
reset_at: paused && this.cooldownUntilMs != null
|
|
203
237
|
? new Date(this.cooldownUntilMs).toISOString()
|
|
204
238
|
: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostSessionQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAE3B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,8BAA8B,GAAG,cAAc,CAAC;AAE7D,kGAAkG;AAClG,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AAEnD,
|
|
1
|
+
{"version":3,"file":"hostSessionQuotaSource.js","sourceRoot":"","sources":["../../../src/shared/quota/hostSessionQuotaSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitValidateRepair.d.ts","sourceRoot":"","sources":["../../../src/shared/repair/emitValidateRepair.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAChD;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,qBAAqB,EAAE,KAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAAC;IACnD,4EAA4E;IAC5E,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AAE5E,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAE7E,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wFAAwF;IACxF,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,kCAAkC;AAClC,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,QAAQ,EAAE,cAAc,CAAC;IACzB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"emitValidateRepair.d.ts","sourceRoot":"","sources":["../../../src/shared/repair/emitValidateRepair.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAChD;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,qBAAqB,EAAE,KAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAAC;IACnD,4EAA4E;IAC5E,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AAE5E,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAE7E,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wFAAwF;IACxF,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,kCAAkC;AAClC,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,QAAQ,EAAE,cAAc,CAAC;IACzB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA4BD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,aAAa,CAAC,CAyIxB"}
|
|
@@ -52,14 +52,15 @@
|
|
|
52
52
|
* repair is recorded through the O1 `captureFrictionEvent` sink (best-effort,
|
|
53
53
|
* never fatal). `warnings` is non-empty whenever `status !== 'clean'`.
|
|
54
54
|
*/
|
|
55
|
-
import {
|
|
55
|
+
import { captureStepBoundaryFriction } from '../friction/stepBoundaryCapture.js';
|
|
56
56
|
function requiredErrors(result) {
|
|
57
57
|
return result.errors.filter((e) => e.required);
|
|
58
58
|
}
|
|
59
59
|
/** Emit one best-effort, de-duped friction event for a repair action. */
|
|
60
60
|
async function captureRepair(opts, idSuffix, note, severity) {
|
|
61
|
-
await
|
|
62
|
-
|
|
61
|
+
await captureStepBoundaryFriction(opts.artifactsDir, opts.runId, {
|
|
62
|
+
eventType: 'repair_round',
|
|
63
|
+
discriminator: `${opts.contract.contractId}:attempt-${opts.attempt ?? 1}:${idSuffix}`,
|
|
63
64
|
note,
|
|
64
65
|
severity,
|
|
65
66
|
category: 'trap',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitValidateRepair.js","sourceRoot":"","sources":["../../../src/shared/repair/emitValidateRepair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"emitValidateRepair.js","sourceRoot":"","sources":["../../../src/shared/repair/emitValidateRepair.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/scripts/postinstall.mjs
CHANGED
|
@@ -42,8 +42,14 @@ async function manageArtifactGitignore() {
|
|
|
42
42
|
// The consuming repo root: npm sets INIT_CWD to the dir `npm install` ran in.
|
|
43
43
|
const repoRoot = process.env.INIT_CWD || process.cwd();
|
|
44
44
|
|
|
45
|
-
// Explicit operator override always wins.
|
|
46
|
-
|
|
45
|
+
// Explicit operator override always wins. Single-sourced parse +
|
|
46
|
+
// env-var name from shared (accepts private/public/track/ignore).
|
|
47
|
+
const override =
|
|
48
|
+
typeof shared.parseVisibilityOverride === "function"
|
|
49
|
+
? shared.parseVisibilityOverride(
|
|
50
|
+
process.env[shared.REPO_VISIBILITY_ENV ?? "AUDIT_TOOLS_REPO_VISIBILITY"],
|
|
51
|
+
)
|
|
52
|
+
: resolveVisibilityOverride();
|
|
47
53
|
|
|
48
54
|
const result = shared.ensureArtifactGitignore({
|
|
49
55
|
repoRoot,
|