@audit-tools/shared 0.5.1 → 0.5.4

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/index.d.ts CHANGED
@@ -32,6 +32,8 @@ export type { ValidationSeverity, ValidationIssue } from "./validation/basic.js"
32
32
  export { describeValue, isRecord, createValidationIssue, pushValidationIssue, prefixValidationIssues, formatValidationIssues, requireKeys, } from "./validation/basic.js";
33
33
  export type { WorkerProgress, LaunchFreshSessionInput, LaunchFreshSessionResult, ProviderRateLimits, FreshSessionProvider, } from "./providers/types.js";
34
34
  export { LOCAL_SUBPROCESS_PROVIDER_NAME } from "./providers/constants.js";
35
+ export { spawnLoggedCommand } from "./providers/spawnLoggedCommand.js";
36
+ export type { SpawnLoggedCommandOptions } from "./providers/spawnLoggedCommand.js";
35
37
  export type { LimitSource, LimitConfidence, HostConcurrencyLimitSource, HostConcurrencyLimit, ResolvedLimits, ConcurrencyBucket, QuotaStateEntry, QuotaState, WaveSchedule, BackoffState, ObservedWaveOutcome, } from "./quota/types.js";
36
38
  export type { QuotaSource, QuotaUsageSnapshot } from "./quota/quotaSource.js";
37
39
  export { resolveLimits, lookupKnownModel, classifyProvider, } from "./quota/limits.js";
@@ -43,6 +45,8 @@ export type { RateLimitDetectionResult } from "./quota/errorParsing.js";
43
45
  export { acquireLock, releaseLock, withFileLock, FileLockTimeoutError, } from "./quota/fileLock.js";
44
46
  export { runSlidingWindow } from "./quota/slidingWindow.js";
45
47
  export type { SlidingWindowResult } from "./quota/slidingWindow.js";
48
+ export { scheduleWave, buildProviderModelKey } from "./quota/scheduler.js";
49
+ export type { ScheduleWaveOptions, DiscoveredRateLimitsInput, } from "./quota/scheduler.js";
46
50
  export { LearnedQuotaSource } from "./quota/learnedQuotaSource.js";
47
51
  export { CompositeQuotaSource } from "./quota/compositeQuotaSource.js";
48
52
  export type { ErrorParser } from "./quota/errorParsers/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,12 +17,15 @@ export { isFileMissingError, readJsonFile, writeJsonFile, appendNdjsonFile, read
17
17
  export { describeValue, isRecord, createValidationIssue, pushValidationIssue, prefixValidationIssues, formatValidationIssues, requireKeys, } from "./validation/basic.js";
18
18
  // Provider constants
19
19
  export { LOCAL_SUBPROCESS_PROVIDER_NAME } from "./providers/constants.js";
20
+ // Provider command runner (single source of truth for both orchestrators)
21
+ export { spawnLoggedCommand } from "./providers/spawnLoggedCommand.js";
20
22
  export { resolveLimits, lookupKnownModel, classifyProvider, } from "./quota/limits.js";
21
23
  export { setQuotaStateDir, getQuotaStatePath, readQuotaState, writeQuotaState, computeMaxSafeConcurrency, recordWaveOutcome, decayWeight, applyDecayToEntry, computeBackoffCooldownMs, computeBackoffFailureWeight, computeRampUpConcurrency, } from "./quota/state.js";
22
24
  export { detectRateLimitError, computeCooldownUntil, } from "./quota/errorParsing.js";
23
25
  export { detectHostActiveSubagentLimit, resolveHostActiveSubagentLimit, } from "./quota/hostLimits.js";
24
26
  export { acquireLock, releaseLock, withFileLock, FileLockTimeoutError, } from "./quota/fileLock.js";
25
27
  export { runSlidingWindow } from "./quota/slidingWindow.js";
28
+ export { scheduleWave, buildProviderModelKey } from "./quota/scheduler.js";
26
29
  export { LearnedQuotaSource } from "./quota/learnedQuotaSource.js";
27
30
  export { CompositeQuotaSource } from "./quota/compositeQuotaSource.js";
28
31
  export { GenericErrorParser, ClaudeCodeErrorParser, getErrorParserForProvider, } from "./quota/errorParsers/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAwB3D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAwBtC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAUnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,cAAc;AACd,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,KAAK;AACL,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAW/B,qBAAqB;AACrB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAiB1E,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAwB3D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAwBtC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAUnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,cAAc;AACd,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,KAAK;AACL,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAW/B,qBAAqB;AACrB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,0EAA0E;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAkBvE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAK3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { createWriteStream } from "node:fs";
2
+ import { spawn } from "node:child_process";
3
+ import type { LaunchFreshSessionInput, LaunchFreshSessionResult } from "./types.js";
4
+ export interface SpawnLoggedCommandOptions {
5
+ createWriteStream?: typeof createWriteStream;
6
+ spawn?: typeof spawn;
7
+ killGraceMs?: number;
8
+ opentoken?: boolean;
9
+ opentokenCommand?: string;
10
+ }
11
+ export declare function spawnLoggedCommand(command: string, args: string[], input: LaunchFreshSessionInput, env?: Record<string, string>, options?: SpawnLoggedCommandOptions): Promise<LaunchFreshSessionResult>;
12
+ //# sourceMappingURL=spawnLoggedCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawnLoggedCommand.d.ts","sourceRoot":"","sources":["../../src/providers/spawnLoggedCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAoCD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,uBAAuB,EAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAwOnC"}
@@ -0,0 +1,232 @@
1
+ import { createWriteStream } from "node:fs";
2
+ import { spawn } from "node:child_process";
3
+ const TERMINATION_SIGNAL = "SIGTERM";
4
+ const FORCE_KILL_SIGNAL = "SIGKILL";
5
+ const FORCE_KILL_GRACE_MS = 1_000;
6
+ const HEARTBEAT_INTERVAL_MS = 30_000;
7
+ function formatCommand(command, args) {
8
+ return [command, ...args].join(" ");
9
+ }
10
+ function quoteCmdArg(value) {
11
+ if (/^[A-Za-z0-9_./:=@+-]+$/.test(value))
12
+ return value;
13
+ return `"${value.replace(/(["^&|<>%])/g, "^$1")}"`;
14
+ }
15
+ function applyOpenTokenWrap(command, args, opentokenCommand, platform = process.platform) {
16
+ if (platform === "win32") {
17
+ const shell = process.env.ComSpec ?? "cmd.exe";
18
+ const inner = [command, ...args].map(quoteCmdArg).join(" ");
19
+ return {
20
+ command: shell,
21
+ args: ["/d", "/s", "/c", `${opentokenCommand} wrap ${inner}`],
22
+ };
23
+ }
24
+ return { command: opentokenCommand, args: ["wrap", command, ...args] };
25
+ }
26
+ // Single source of truth for both orchestrators. Combines the auditor's
27
+ // flush-before-settle correctness (settle on "close" only after all buffered
28
+ // log writes have drained, and a computed `accepted`/rich result) with the
29
+ // remediator's stdin piping and optional structured progress telemetry.
30
+ //
31
+ // On Windows `command` must be the resolved .cmd / .exe path because `spawn`
32
+ // does not consult PATH for executables without a shell. Callers should use
33
+ // `platformCommand()` or similar to supply the correct command form per OS.
34
+ export async function spawnLoggedCommand(command, args, input, env, options = {}) {
35
+ const openWriteStream = options.createWriteStream ?? createWriteStream;
36
+ const spawnProcess = options.spawn ?? spawn;
37
+ const killGraceMs = options.killGraceMs ?? FORCE_KILL_GRACE_MS;
38
+ if (options.opentoken) {
39
+ const wrapped = applyOpenTokenWrap(command, args, options.opentokenCommand ?? "opentoken");
40
+ command = wrapped.command;
41
+ args = wrapped.args;
42
+ }
43
+ return await new Promise((resolve, reject) => {
44
+ const stdoutLog = openWriteStream(input.stdoutPath, { flags: "a" });
45
+ const stderrLog = openWriteStream(input.stderrPath, { flags: "a" });
46
+ const startedAt = Date.now();
47
+ let timedOut = false;
48
+ let settled = false;
49
+ let child = null;
50
+ let timer;
51
+ let heartbeat;
52
+ let forceKillTimer;
53
+ let pendingLogWrites = 0;
54
+ let childClosed = false;
55
+ let closeCode = null;
56
+ let closeSignal = null;
57
+ let logsEnded = false;
58
+ let stdoutLineBuf = "";
59
+ const clearTimers = () => {
60
+ if (timer) {
61
+ clearTimeout(timer);
62
+ }
63
+ if (heartbeat) {
64
+ clearInterval(heartbeat);
65
+ }
66
+ if (forceKillTimer) {
67
+ clearTimeout(forceKillTimer);
68
+ }
69
+ };
70
+ const endLogs = (callback) => {
71
+ if (logsEnded) {
72
+ callback();
73
+ return;
74
+ }
75
+ logsEnded = true;
76
+ let remaining = 2;
77
+ const done = () => {
78
+ remaining -= 1;
79
+ if (remaining === 0) {
80
+ callback();
81
+ }
82
+ };
83
+ stdoutLog.end(done);
84
+ stderrLog.end(done);
85
+ };
86
+ const settle = (callback) => {
87
+ if (settled) {
88
+ return;
89
+ }
90
+ settled = true;
91
+ clearTimers();
92
+ endLogs(callback);
93
+ };
94
+ const fail = (error) => {
95
+ if (child && !child.killed) {
96
+ child.kill(FORCE_KILL_SIGNAL);
97
+ }
98
+ const normalized = error instanceof Error ? error : new Error(String(error));
99
+ settle(() => reject(normalized));
100
+ };
101
+ const writeLog = (write, chunk) => {
102
+ pendingLogWrites += 1;
103
+ write.write(chunk, () => {
104
+ pendingLogWrites -= 1;
105
+ maybeSettleFromClose();
106
+ });
107
+ };
108
+ const maybeSettleFromClose = () => {
109
+ if (!childClosed || pendingLogWrites > 0 || settled) {
110
+ return;
111
+ }
112
+ if (timedOut) {
113
+ settle(() => reject(new Error(`Fresh session timed out after ${input.timeoutMs}ms for run ${input.runId}.`)));
114
+ return;
115
+ }
116
+ settle(() => resolve({
117
+ accepted: closeCode === 0 && closeSignal === null,
118
+ processId: spawnedChild.pid,
119
+ exitCode: closeCode,
120
+ signal: closeSignal,
121
+ command: formatCommand(command, args),
122
+ args,
123
+ stdoutPath: input.stdoutPath,
124
+ stderrPath: input.stderrPath,
125
+ error: closeCode === 0 && closeSignal === null
126
+ ? undefined
127
+ : closeSignal
128
+ ? `Provider command exited with signal ${closeSignal}.`
129
+ : `Provider command exited with code ${closeCode}.`,
130
+ }));
131
+ };
132
+ stdoutLog.on("error", fail);
133
+ stderrLog.on("error", fail);
134
+ let spawnedChild;
135
+ try {
136
+ spawnedChild = spawnProcess(command, args, {
137
+ cwd: input.repoRoot,
138
+ env: { ...process.env, ...env },
139
+ stdio: [input.stdinText === undefined ? "ignore" : "pipe", "pipe", "pipe"],
140
+ });
141
+ child = spawnedChild;
142
+ }
143
+ catch (error) {
144
+ fail(error);
145
+ return;
146
+ }
147
+ if (input.stdinText !== undefined) {
148
+ if (!spawnedChild.stdin) {
149
+ fail(new Error(`Fresh session spawn for run ${input.runId} did not provide pipe-backed stdin.`));
150
+ return;
151
+ }
152
+ spawnedChild.stdin.end(input.stdinText);
153
+ }
154
+ if (!spawnedChild.stdout || !spawnedChild.stderr) {
155
+ fail(new Error(`Fresh session spawn for run ${input.runId} did not provide pipe-backed stdout/stderr streams.`));
156
+ return;
157
+ }
158
+ timer = setTimeout(() => {
159
+ timedOut = true;
160
+ spawnedChild.kill(TERMINATION_SIGNAL);
161
+ forceKillTimer = setTimeout(() => {
162
+ if (!settled) {
163
+ spawnedChild.kill(FORCE_KILL_SIGNAL);
164
+ }
165
+ }, killGraceMs);
166
+ }, input.timeoutMs);
167
+ heartbeat = setInterval(() => {
168
+ const elapsedMs = Date.now() - startedAt;
169
+ const message = `[provider] run ${input.runId} still running after ${elapsedMs}ms\n`;
170
+ writeLog(stderrLog, message);
171
+ if (input.uiMode === "visible") {
172
+ process.stderr.write(message);
173
+ }
174
+ // Structured telemetry only when a consumer is attached, so the auditor's
175
+ // stderr (which never wires onProgress) stays exactly as before.
176
+ if (input.onProgress) {
177
+ process.stderr.write(JSON.stringify({
178
+ type: "provider_heartbeat",
179
+ runId: input.runId,
180
+ elapsedMs,
181
+ }) + "\n");
182
+ input.onProgress({
183
+ type: "heartbeat",
184
+ runId: input.runId,
185
+ obligationId: input.obligationId,
186
+ elapsedMs,
187
+ });
188
+ }
189
+ }, HEARTBEAT_INTERVAL_MS);
190
+ spawnedChild.stdout.on("data", (chunk) => {
191
+ writeLog(stdoutLog, chunk);
192
+ if (input.uiMode === "visible") {
193
+ process.stdout.write(chunk);
194
+ }
195
+ if (input.onProgress) {
196
+ stdoutLineBuf += chunk.toString();
197
+ const lines = stdoutLineBuf.split("\n");
198
+ stdoutLineBuf = lines.pop() ?? "";
199
+ for (const line of lines) {
200
+ const trimmed = line.trim();
201
+ if (trimmed.length > 0) {
202
+ input.onProgress({
203
+ type: "output",
204
+ runId: input.runId,
205
+ obligationId: input.obligationId,
206
+ elapsedMs: Date.now() - startedAt,
207
+ message: trimmed,
208
+ });
209
+ }
210
+ }
211
+ }
212
+ });
213
+ spawnedChild.stderr.on("data", (chunk) => {
214
+ writeLog(stderrLog, chunk);
215
+ if (input.uiMode === "visible") {
216
+ process.stderr.write(chunk);
217
+ }
218
+ });
219
+ spawnedChild.on("error", fail);
220
+ spawnedChild.on("exit", (code, signal) => {
221
+ closeCode = code;
222
+ closeSignal = signal;
223
+ });
224
+ spawnedChild.on("close", (code, signal) => {
225
+ childClosed = true;
226
+ closeCode = code;
227
+ closeSignal = signal;
228
+ maybeSettleFromClose();
229
+ });
230
+ });
231
+ }
232
+ //# sourceMappingURL=spawnLoggedCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawnLoggedCommand.js","sourceRoot":"","sources":["../../src/providers/spawnLoggedCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ResolvedProviderName, SessionConfig } from "../types/sessionConfig.js";
2
+ import type { HostConcurrencyLimit, QuotaStateEntry, WaveSchedule } from "./types.js";
3
+ import type { QuotaUsageSnapshot } from "./quotaSource.js";
4
+ /**
5
+ * Minimal structural shape of RPM/TPM limits discovered at runtime (e.g. via
6
+ * response-header extraction). Declared here so the scheduler stays decoupled
7
+ * from any package-specific discovery implementation — callers may pass a
8
+ * richer object (with a `source` field, etc.); only these fields are read.
9
+ */
10
+ export interface DiscoveredRateLimitsInput {
11
+ requests_per_minute?: number | null;
12
+ input_tokens_per_minute?: number | null;
13
+ output_tokens_per_minute?: number | null;
14
+ }
15
+ export interface ScheduleWaveOptions {
16
+ providerName: ResolvedProviderName;
17
+ sessionConfig: SessionConfig;
18
+ hostModel: string | null;
19
+ requestedConcurrency: number;
20
+ /** Per-slot estimated tokens (one entry per worker slot). Used for TPM budget. */
21
+ estimatedSlotTokens?: number[];
22
+ /** @deprecated Use estimatedSlotTokens instead. Average tokens per slot — used as fallback. */
23
+ estimatedPacketTokens?: number;
24
+ quotaStateEntry?: QuotaStateEntry | null;
25
+ hostConcurrencyLimit?: HostConcurrencyLimit | null;
26
+ quotaSourceSnapshot?: QuotaUsageSnapshot | null;
27
+ /** RPM/TPM discovered from provider queries or response header extraction. */
28
+ discoveredLimits?: DiscoveredRateLimitsInput | null;
29
+ }
30
+ export declare function scheduleWave(options: ScheduleWaveOptions): WaveSchedule;
31
+ /** Build the state key used for indexing quota-state.json entries. */
32
+ export declare function buildProviderModelKey(providerName: string, hostModel: string | null | undefined): string;
33
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/quota/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEf,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAI3D;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,oBAAoB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+FAA+F;IAC/F,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,mBAAmB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACrD;AAQD,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAqKvE;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,CAER"}
@@ -0,0 +1,153 @@
1
+ import { classifyProvider, resolveLimits } from "./limits.js";
2
+ import { computeMaxSafeConcurrency, computeRampUpConcurrency } from "./state.js";
3
+ function sumTopN(sorted, n) {
4
+ let sum = 0;
5
+ for (let i = 0; i < Math.min(n, sorted.length); i++)
6
+ sum += sorted[i];
7
+ return sum;
8
+ }
9
+ export function scheduleWave(options) {
10
+ const { providerName, sessionConfig, hostModel, requestedConcurrency, estimatedSlotTokens, estimatedPacketTokens = 0, quotaStateEntry = null, hostConcurrencyLimit = null, quotaSourceSnapshot = null, discoveredLimits = null, } = options;
11
+ // Descending sort so sumTopN picks the largest slots
12
+ const slotsSorted = estimatedSlotTokens
13
+ ? [...estimatedSlotTokens].sort((a, b) => b - a)
14
+ : null;
15
+ const avgTokens = slotsSorted && slotsSorted.length > 0
16
+ ? Math.floor(slotsSorted.reduce((a, b) => a + b, 0) / slotsSorted.length)
17
+ : estimatedPacketTokens;
18
+ const quota = sessionConfig.quota ?? {};
19
+ const applyHostConcurrencyLimit = (waveSize) => {
20
+ if (hostConcurrencyLimit === null)
21
+ return waveSize;
22
+ return Math.min(waveSize, hostConcurrencyLimit.active_subagents);
23
+ };
24
+ if (quota.enabled === false) {
25
+ const waveSize = Math.max(1, applyHostConcurrencyLimit(requestedConcurrency));
26
+ const limits = {
27
+ context_tokens: quota.default_context_tokens ?? 32_000,
28
+ output_tokens: quota.reserved_output_tokens ?? 4_096,
29
+ requests_per_minute: null,
30
+ input_tokens_per_minute: null,
31
+ output_tokens_per_minute: null,
32
+ };
33
+ return {
34
+ wave_size: waveSize,
35
+ estimated_wave_tokens: slotsSorted ? sumTopN(slotsSorted, waveSize) : waveSize * avgTokens,
36
+ cooldown_until: null,
37
+ confidence: "high",
38
+ source: "default",
39
+ resolved_limits: limits,
40
+ host_concurrency_limit: hostConcurrencyLimit,
41
+ model: hostModel,
42
+ };
43
+ }
44
+ const safetyMargin = quota.safety_margin ?? 0.8;
45
+ const halfLifeHours = quota.empirical_half_life_hours ?? 24;
46
+ const { limits, source, confidence } = resolveLimits({ providerName, sessionConfig, hostModel });
47
+ // Fill null RPM/TPM from discovered limits (provider query or header extraction)
48
+ if (discoveredLimits) {
49
+ limits.requests_per_minute ??= discoveredLimits.requests_per_minute ?? null;
50
+ limits.input_tokens_per_minute ??= discoveredLimits.input_tokens_per_minute ?? null;
51
+ limits.output_tokens_per_minute ??= discoveredLimits.output_tokens_per_minute ?? null;
52
+ }
53
+ let waveSize = requestedConcurrency;
54
+ let cooldownUntil = null;
55
+ // Respect an active cooldown period
56
+ if (quotaStateEntry?.cooldown_until) {
57
+ const cooldownExpiry = new Date(quotaStateEntry.cooldown_until).getTime();
58
+ if (cooldownExpiry > Date.now()) {
59
+ cooldownUntil = quotaStateEntry.cooldown_until;
60
+ waveSize = 1;
61
+ }
62
+ }
63
+ if (!cooldownUntil) {
64
+ // Cap by requests-per-minute
65
+ if (limits.requests_per_minute != null) {
66
+ const rpmCap = Math.max(1, Math.floor(limits.requests_per_minute * safetyMargin));
67
+ waveSize = Math.min(waveSize, rpmCap);
68
+ }
69
+ // Cap by input tokens-per-minute
70
+ if (limits.input_tokens_per_minute != null && avgTokens > 0) {
71
+ const tpmBudget = limits.input_tokens_per_minute * safetyMargin;
72
+ if (slotsSorted && slotsSorted.length > 0) {
73
+ let candidateSize = waveSize;
74
+ while (candidateSize > 1 && sumTopN(slotsSorted, candidateSize) > tpmBudget) {
75
+ candidateSize--;
76
+ }
77
+ waveSize = Math.max(1, candidateSize);
78
+ }
79
+ else {
80
+ const tpmCap = Math.max(1, Math.floor(tpmBudget / avgTokens));
81
+ waveSize = Math.min(waveSize, tpmCap);
82
+ }
83
+ }
84
+ if (quotaStateEntry) {
85
+ const rampUp = quota.ramp_up_enabled !== false;
86
+ const learnedCap = rampUp
87
+ ? computeRampUpConcurrency(quotaStateEntry, halfLifeHours)
88
+ : computeMaxSafeConcurrency(quotaStateEntry, halfLifeHours);
89
+ waveSize = Math.min(waveSize, learnedCap);
90
+ }
91
+ else if (hostConcurrencyLimit !== null) {
92
+ // The host explicitly reported its active-subagent capacity. That is a
93
+ // real concurrency signal, so it supersedes the conservative
94
+ // unknown-provider fallback (which exists only when we have no signal at
95
+ // all). Leaving waveSize untouched here lets applyHostConcurrencyLimit()
96
+ // below enforce the reported limit as the hard ceiling, while any RPM/TPM
97
+ // caps applied above still bind.
98
+ }
99
+ else {
100
+ const providerType = classifyProvider(providerName);
101
+ const fallbackCap = providerType === "local"
102
+ ? quota.unknown_local_concurrency
103
+ : (quota.unknown_hosted_concurrency ?? 1);
104
+ if (fallbackCap === "unlimited") {
105
+ // no cap — "unlimited" intentionally skips clamping
106
+ }
107
+ else if (typeof fallbackCap === "number" && Number.isFinite(fallbackCap)) {
108
+ waveSize = Math.min(waveSize, Math.max(1, Math.floor(fallbackCap)));
109
+ }
110
+ // First-contact cap: when no learned history, no configured fallback, AND
111
+ // no RPM/TPM limits from any source, apply a conservative ceiling.
112
+ // This triggers only for unconfigured local providers (fallbackCap is
113
+ // undefined). Hosted providers default to 1 via unknown_hosted_concurrency,
114
+ // and "unlimited" is an explicit opt-out.
115
+ if (fallbackCap == null &&
116
+ limits.requests_per_minute == null &&
117
+ limits.input_tokens_per_minute == null) {
118
+ const firstContactCap = quota.first_contact_concurrency ?? 3;
119
+ waveSize = Math.min(waveSize, Math.max(1, firstContactCap));
120
+ }
121
+ }
122
+ }
123
+ // Apply real-time quota source data if available
124
+ if (quotaSourceSnapshot && !cooldownUntil) {
125
+ if (quotaSourceSnapshot.remaining_pct != null && quotaSourceSnapshot.remaining_pct < 0.1) {
126
+ waveSize = 1;
127
+ if (quotaSourceSnapshot.reset_at) {
128
+ cooldownUntil = quotaSourceSnapshot.reset_at;
129
+ }
130
+ }
131
+ else if (quotaSourceSnapshot.remaining_pct != null && quotaSourceSnapshot.remaining_pct < 0.3) {
132
+ waveSize = Math.min(waveSize, Math.max(1, Math.floor(waveSize * 0.5)));
133
+ }
134
+ }
135
+ waveSize = applyHostConcurrencyLimit(waveSize);
136
+ waveSize = Math.max(1, waveSize);
137
+ return {
138
+ wave_size: waveSize,
139
+ estimated_wave_tokens: slotsSorted ? sumTopN(slotsSorted, waveSize) : waveSize * avgTokens,
140
+ cooldown_until: cooldownUntil,
141
+ confidence,
142
+ source,
143
+ resolved_limits: limits,
144
+ host_concurrency_limit: hostConcurrencyLimit,
145
+ model: hostModel,
146
+ quota_source_snapshot: quotaSourceSnapshot,
147
+ };
148
+ }
149
+ /** Build the state key used for indexing quota-state.json entries. */
150
+ export function buildProviderModelKey(providerName, hostModel) {
151
+ return hostModel ? `${providerName}/${hostModel}` : `${providerName}/*`;
152
+ }
153
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/quota/scheduler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@audit-tools/shared",
3
- "version": "0.5.1",
3
+ "version": "0.5.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,6 +35,11 @@
35
35
  "engines": {
36
36
  "node": ">=20"
37
37
  },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/OhOkThisIsFine/audit-tools.git",
41
+ "directory": "packages/shared"
42
+ },
38
43
  "publishConfig": {
39
44
  "access": "public"
40
45
  }