audit-tools 0.30.48 → 0.30.51
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 -4
- package/dist/audit/cli/advanceAuditCommand.js.map +1 -1
- package/dist/audit/cli/args.d.ts +0 -10
- package/dist/audit/cli/args.d.ts.map +1 -1
- package/dist/audit/cli/args.js +9 -20
- package/dist/audit/cli/args.js.map +1 -1
- package/dist/audit/cli/envelope.d.ts +0 -1
- package/dist/audit/cli/envelope.d.ts.map +1 -1
- package/dist/audit/cli/envelope.js +0 -3
- package/dist/audit/cli/envelope.js.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.js +6 -22
- package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts +18 -14
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +23 -25
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/validateResultCommand.d.ts.map +1 -1
- package/dist/audit/cli/validateResultCommand.js +19 -6
- package/dist/audit/cli/validateResultCommand.js.map +1 -1
- package/dist/audit/cli/workerResult.d.ts +0 -4
- package/dist/audit/cli/workerResult.d.ts.map +1 -1
- package/dist/audit/cli/workerResult.js +0 -22
- package/dist/audit/cli/workerResult.js.map +1 -1
- package/dist/audit/cli/workerRunCommand.d.ts.map +1 -1
- package/dist/audit/cli/workerRunCommand.js +6 -21
- package/dist/audit/cli/workerRunCommand.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +27 -3
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.js +5 -1
- package/dist/audit/contracts/workerSchemas.js.map +1 -1
- package/dist/audit/contracts/wrapperResponse.d.ts +0 -1
- package/dist/audit/contracts/wrapperResponse.d.ts.map +1 -1
- package/dist/audit/coverage.d.ts +1 -2
- package/dist/audit/coverage.d.ts.map +1 -1
- package/dist/audit/coverage.js +0 -7
- package/dist/audit/coverage.js.map +1 -1
- package/dist/audit/extractors/analyzers/acquisitionEngine.d.ts +0 -2
- package/dist/audit/extractors/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/acquisitionEngine.js +0 -6
- package/dist/audit/extractors/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/audit/extractors/analyzers/html.d.ts +1 -0
- package/dist/audit/extractors/analyzers/html.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/html.js +5 -3
- package/dist/audit/extractors/analyzers/html.js.map +1 -1
- package/dist/audit/extractors/analyzers/registry.d.ts +1 -2
- package/dist/audit/extractors/analyzers/registry.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/registry.js +1 -4
- package/dist/audit/extractors/analyzers/registry.js.map +1 -1
- package/dist/audit/extractors/browserExtension.d.ts +0 -1
- package/dist/audit/extractors/browserExtension.d.ts.map +1 -1
- package/dist/audit/extractors/browserExtension.js +1 -20
- package/dist/audit/extractors/browserExtension.js.map +1 -1
- package/dist/audit/extractors/gitHistory.d.ts +1 -3
- package/dist/audit/extractors/gitHistory.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.js +4 -1
- package/dist/audit/extractors/graphRoutes.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts +0 -1
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +0 -17
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/io/runArtifacts.d.ts +1 -4
- package/dist/audit/io/runArtifacts.d.ts.map +1 -1
- package/dist/audit/io/runArtifacts.js +0 -46
- package/dist/audit/io/runArtifacts.js.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.d.ts +8 -0
- package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.js +68 -35
- package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts +0 -1
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewSnapshot.js +0 -25
- package/dist/audit/orchestrator/designReviewSnapshot.js.map +1 -1
- package/dist/audit/orchestrator/intentInterpreter.d.ts +0 -7
- package/dist/audit/orchestrator/intentInterpreter.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentInterpreter.js +0 -9
- package/dist/audit/orchestrator/intentInterpreter.js.map +1 -1
- package/dist/audit/orchestrator/ledger.d.ts +0 -10
- package/dist/audit/orchestrator/ledger.d.ts.map +1 -1
- package/dist/audit/orchestrator/ledger.js +0 -19
- package/dist/audit/orchestrator/ledger.js.map +1 -1
- package/dist/audit/orchestrator/lensSelection.d.ts +0 -9
- package/dist/audit/orchestrator/lensSelection.d.ts.map +1 -1
- package/dist/audit/orchestrator/lensSelection.js +0 -29
- package/dist/audit/orchestrator/lensSelection.js.map +1 -1
- package/dist/audit/orchestrator/resultBaseline.d.ts +0 -44
- package/dist/audit/orchestrator/resultBaseline.d.ts.map +1 -1
- package/dist/audit/orchestrator/resultBaseline.js +0 -44
- package/dist/audit/orchestrator/resultBaseline.js.map +1 -1
- package/dist/audit/orchestrator/runtimeCommand.d.ts.map +1 -1
- package/dist/audit/orchestrator/runtimeCommand.js +7 -1
- package/dist/audit/orchestrator/runtimeCommand.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/index.d.ts +0 -5
- package/dist/audit/orchestrator/selectiveDeepening/index.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/index.js +13 -14
- package/dist/audit/orchestrator/selectiveDeepening/index.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening.d.ts +1 -1
- package/dist/audit/orchestrator/selectiveDeepening.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening.js +1 -1
- package/dist/audit/orchestrator/selectiveDeepening.js.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.d.ts +0 -1
- package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +0 -73
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/audit/quota/discoveredLimits.d.ts +12 -0
- package/dist/audit/quota/discoveredLimits.d.ts.map +1 -1
- package/dist/audit/quota/discoveredLimits.js +30 -25
- package/dist/audit/quota/discoveredLimits.js.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.d.ts +0 -1
- package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.js +0 -1
- package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
- package/dist/audit/supervisor/runLedger.d.ts +1 -2
- package/dist/audit/supervisor/runLedger.d.ts.map +1 -1
- package/dist/audit/supervisor/runLedger.js +1 -46
- package/dist/audit/supervisor/runLedger.js.map +1 -1
- package/dist/audit/types/analyzerCapability.d.ts +0 -1
- package/dist/audit/types/analyzerCapability.d.ts.map +1 -1
- package/dist/audit/types/analyzerCapability.js.map +1 -1
- package/dist/audit/types/designAssessment.d.ts +0 -4
- package/dist/audit/types/designAssessment.d.ts.map +1 -1
- package/dist/audit/types/designAssessment.js +1 -7
- package/dist/audit/types/designAssessment.js.map +1 -1
- package/dist/audit/types/externalAnalyzer.d.ts +0 -1
- package/dist/audit/types/externalAnalyzer.d.ts.map +1 -1
- package/dist/audit/types/externalAnalyzer.js.map +1 -1
- package/dist/audit/types/flowCoverage.d.ts +0 -1
- package/dist/audit/types/flowCoverage.d.ts.map +1 -1
- package/dist/audit/types/flowCoverage.js.map +1 -1
- package/dist/audit/types/reviewPlanning.d.ts +0 -1
- package/dist/audit/types/reviewPlanning.d.ts.map +1 -1
- package/dist/audit/types/reviewPlanning.js.map +1 -1
- package/dist/audit/types/runtimeValidation.d.ts +0 -5
- package/dist/audit/types/runtimeValidation.d.ts.map +1 -1
- package/dist/audit/types/runtimeValidation.js +0 -3
- package/dist/audit/types/runtimeValidation.js.map +1 -1
- package/dist/audit/types.d.ts +0 -6
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +0 -5
- package/dist/audit/types.js.map +1 -1
- package/dist/audit/validation/anchorGrounding.d.ts +1 -3
- package/dist/audit/validation/anchorGrounding.d.ts.map +1 -1
- package/dist/audit/validation/anchorGrounding.js.map +1 -1
- package/dist/audit/validation/auditResults.d.ts +16 -0
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +35 -1
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/remediate/contractPipeline/changeClassification.d.ts +0 -15
- package/dist/remediate/contractPipeline/changeClassification.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/changeClassification.js +0 -24
- package/dist/remediate/contractPipeline/changeClassification.js.map +1 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.d.ts +0 -2
- package/dist/remediate/contractPipeline/phaseCutArtifact.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.js +0 -4
- package/dist/remediate/contractPipeline/phaseCutArtifact.js.map +1 -1
- package/dist/remediate/dispatch/ownershipScheduler.d.ts +0 -20
- package/dist/remediate/dispatch/ownershipScheduler.d.ts.map +1 -1
- package/dist/remediate/dispatch/ownershipScheduler.js +0 -24
- package/dist/remediate/dispatch/ownershipScheduler.js.map +1 -1
- package/dist/remediate/intake.d.ts +0 -37
- package/dist/remediate/intake.d.ts.map +1 -1
- package/dist/remediate/intake.js +1 -89
- package/dist/remediate/intake.js.map +1 -1
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +16 -6
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/providers/index.d.ts +0 -32
- package/dist/remediate/providers/index.d.ts.map +1 -1
- package/dist/remediate/providers/index.js +1 -28
- package/dist/remediate/providers/index.js.map +1 -1
- package/dist/remediate/review/reviewGate.d.ts +0 -1
- package/dist/remediate/review/reviewGate.d.ts.map +1 -1
- package/dist/remediate/review/reviewGate.js +0 -1
- package/dist/remediate/review/reviewGate.js.map +1 -1
- package/dist/remediate/riskSignal.d.ts +0 -2
- package/dist/remediate/riskSignal.d.ts.map +1 -1
- package/dist/remediate/riskSignal.js +0 -4
- package/dist/remediate/riskSignal.js.map +1 -1
- package/dist/remediate/state/types.d.ts +0 -2
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +4 -1
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +63 -47
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.d.ts +12 -3
- package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +29 -22
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch.d.ts +29 -16
- package/dist/remediate/steps/dispatch.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch.js +193 -152
- package/dist/remediate/steps/dispatch.js.map +1 -1
- package/dist/remediate/steps/finalGate.d.ts +88 -0
- package/dist/remediate/steps/finalGate.d.ts.map +1 -0
- package/dist/remediate/steps/finalGate.js +171 -0
- package/dist/remediate/steps/finalGate.js.map +1 -0
- package/dist/remediate/steps/leanFastPath.d.ts +0 -8
- package/dist/remediate/steps/leanFastPath.d.ts.map +1 -1
- package/dist/remediate/steps/leanFastPath.js +12 -0
- package/dist/remediate/steps/leanFastPath.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +12 -82
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +71 -167
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/providerNodeDispatch.js +2 -2
- package/dist/remediate/steps/providerNodeDispatch.js.map +1 -1
- package/dist/remediate/steps/stepWriter.d.ts +0 -4
- package/dist/remediate/steps/stepWriter.d.ts.map +1 -1
- package/dist/remediate/steps/stepWriter.js +1 -11
- package/dist/remediate/steps/stepWriter.js.map +1 -1
- package/dist/remediate/types/workerSession.d.ts +0 -1
- package/dist/remediate/types/workerSession.d.ts.map +1 -1
- package/dist/remediate/types/workerSession.js +0 -8
- package/dist/remediate/types/workerSession.js.map +1 -1
- package/dist/remediate/validation/contractPipeline.d.ts +0 -1
- package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipeline.js +18 -27
- package/dist/remediate/validation/contractPipeline.js.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts +25 -0
- package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.js +6 -1
- package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io/frictionCapture.d.ts +14 -1
- package/dist/shared/io/frictionCapture.d.ts.map +1 -1
- package/dist/shared/io/frictionCapture.js +28 -3
- package/dist/shared/io/frictionCapture.js.map +1 -1
- package/dist/shared/observability/runLog.d.ts +1 -1
- package/dist/shared/observability/runLog.d.ts.map +1 -1
- package/dist/shared/observability/runLog.js.map +1 -1
- package/dist/shared/providers/providerConfirmation.d.ts +16 -1
- package/dist/shared/providers/providerConfirmation.d.ts.map +1 -1
- package/dist/shared/providers/providerConfirmation.js +13 -13
- package/dist/shared/providers/providerConfirmation.js.map +1 -1
- package/dist/shared/providers/providerFactory.d.ts.map +1 -1
- package/dist/shared/providers/providerFactory.js +10 -14
- package/dist/shared/providers/providerFactory.js.map +1 -1
- package/dist/shared/providers/providerPathGuard.d.ts +21 -0
- package/dist/shared/providers/providerPathGuard.d.ts.map +1 -0
- package/dist/shared/providers/providerPathGuard.js +69 -0
- package/dist/shared/providers/providerPathGuard.js.map +1 -0
- package/dist/shared/providers/sharedProviderConfirmation.d.ts +14 -2
- package/dist/shared/providers/sharedProviderConfirmation.d.ts.map +1 -1
- package/dist/shared/providers/sharedProviderConfirmation.js +26 -5
- package/dist/shared/providers/sharedProviderConfirmation.js.map +1 -1
- package/dist/shared/quota/apiPool.d.ts +6 -1
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +13 -2
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/quota/fileLock.d.ts +17 -2
- package/dist/shared/quota/fileLock.d.ts.map +1 -1
- package/dist/shared/quota/fileLock.js +21 -19
- package/dist/shared/quota/fileLock.js.map +1 -1
- package/dist/shared/types/providerConfirmation.d.ts +9 -0
- package/dist/shared/types/providerConfirmation.d.ts.map +1 -1
- package/package.json +4 -2
- package/scripts/audit/postinstall.mjs +22 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileLock.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/fileLock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAO,MAAM,aAAa,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fileLock.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/fileLock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAUjC,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,QAAQ,EAAE,MAAM;CAI7B;AAkGD,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,GAAG,CAAC,EAAE,KAAK,CAAC;CACb;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,EACtC,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrF;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,SAAS,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { writeFile, unlink, stat, readFile, mkdir } from "node:fs/promises";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
export const STALE_LOCK_MS = 30_000;
|
|
4
|
+
const defaultClock = Date.now;
|
|
4
5
|
// Lock-acquire retry uses exponential backoff (initial → doubling → max) rather
|
|
5
6
|
// than a fixed poll, so a long contention window costs far fewer wakeups. The
|
|
6
7
|
// sleep is always clamped to the time left so backoff never overshoots timeoutMs.
|
|
@@ -14,17 +15,17 @@ export class FileLockTimeoutError extends Error {
|
|
|
14
15
|
this.name = "FileLockTimeoutError";
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
function generateOwnerToken() {
|
|
18
|
-
return `${process.pid}-${
|
|
18
|
+
function generateOwnerToken(now = defaultClock) {
|
|
19
|
+
return `${process.pid}-${now()}-${Math.random().toString(36).slice(2)}`;
|
|
19
20
|
}
|
|
20
21
|
// Returns the owner token of a stale lock (older than STALE_LOCK_MS), or null
|
|
21
22
|
// when the lock is fresh or already gone. Returning the token lets stale removal
|
|
22
23
|
// reuse a token-checked delete, so a lock concurrently re-created with a
|
|
23
24
|
// different token is never clobbered.
|
|
24
|
-
async function readStaleLockToken(lockPath) {
|
|
25
|
+
async function readStaleLockToken(lockPath, now) {
|
|
25
26
|
try {
|
|
26
27
|
const info = await stat(lockPath);
|
|
27
|
-
if (
|
|
28
|
+
if (now() - info.mtimeMs <= STALE_LOCK_MS)
|
|
28
29
|
return null;
|
|
29
30
|
return await readFile(lockPath, "utf8");
|
|
30
31
|
}
|
|
@@ -69,10 +70,10 @@ async function bestEffortUnlink(path) {
|
|
|
69
70
|
// reclaimed, mirroring the main lock's staleness recovery. The claim is always
|
|
70
71
|
// removed in a finally on the happy path so it lives only for the brief
|
|
71
72
|
// token-check + unlink window.
|
|
72
|
-
async function stealStaleLock(lockPath, staleToken) {
|
|
73
|
+
async function stealStaleLock(lockPath, staleToken, now) {
|
|
73
74
|
const claimPath = `${lockPath}${STEAL_CLAIM_SUFFIX}`;
|
|
74
75
|
try {
|
|
75
|
-
await writeFile(claimPath, generateOwnerToken(), { flag: "wx" });
|
|
76
|
+
await writeFile(claimPath, generateOwnerToken(now), { flag: "wx" });
|
|
76
77
|
}
|
|
77
78
|
catch (err) {
|
|
78
79
|
const code = err.code;
|
|
@@ -83,7 +84,7 @@ async function stealStaleLock(lockPath, staleToken) {
|
|
|
83
84
|
// loop retry the ordinary acquire path.
|
|
84
85
|
try {
|
|
85
86
|
const claimInfo = await stat(claimPath);
|
|
86
|
-
if (
|
|
87
|
+
if (now() - claimInfo.mtimeMs > STALE_LOCK_MS) {
|
|
87
88
|
await bestEffortUnlink(claimPath);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
@@ -112,9 +113,10 @@ async function stealStaleLock(lockPath, staleToken) {
|
|
|
112
113
|
await bestEffortUnlink(claimPath);
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
|
-
export async function acquireLock(lockPath, timeoutMs = DEFAULT_TIMEOUT_MS, logger) {
|
|
116
|
-
const
|
|
117
|
-
const
|
|
116
|
+
export async function acquireLock(lockPath, timeoutMs = DEFAULT_TIMEOUT_MS, logger, options = {}) {
|
|
117
|
+
const now = options.now ?? defaultClock;
|
|
118
|
+
const token = generateOwnerToken(now);
|
|
119
|
+
const deadline = now() + timeoutMs;
|
|
118
120
|
let lastStaleCheckAt = 0;
|
|
119
121
|
let retryInterval = RETRY_INTERVAL_INITIAL_MS;
|
|
120
122
|
// A lock cannot be created in a directory that does not exist — the `wx` create
|
|
@@ -138,21 +140,21 @@ export async function acquireLock(lockPath, timeoutMs = DEFAULT_TIMEOUT_MS, logg
|
|
|
138
140
|
}
|
|
139
141
|
// Check the deadline BEFORE any stale-check IO (stat/readFile) or sleep, so a
|
|
140
142
|
// slow filesystem cannot push the actual return time past timeoutMs.
|
|
141
|
-
if (
|
|
143
|
+
if (now() >= deadline) {
|
|
142
144
|
logger?.event({ kind: "error", note: "lock_timeout", lock_path: lockPath, timeout_ms: timeoutMs });
|
|
143
145
|
throw new FileLockTimeoutError(lockPath);
|
|
144
146
|
}
|
|
145
|
-
const
|
|
146
|
-
if (
|
|
147
|
-
lastStaleCheckAt =
|
|
148
|
-
const staleToken = await readStaleLockToken(lockPath);
|
|
147
|
+
const checkAt = now();
|
|
148
|
+
if (checkAt - lastStaleCheckAt >= STALE_CHECK_INTERVAL_MS) {
|
|
149
|
+
lastStaleCheckAt = checkAt;
|
|
150
|
+
const staleToken = await readStaleLockToken(lockPath, now);
|
|
149
151
|
if (staleToken !== null) {
|
|
150
152
|
// Steal the exact stale lock we observed via a lease-style, mutually
|
|
151
153
|
// exclusive claim (see stealStaleLock). Only the single claim winner ever
|
|
152
154
|
// unlinks, and only while the lock still carries this stale token — so a
|
|
153
155
|
// fresh lock another holder created in the gap is never clobbered, and two
|
|
154
156
|
// concurrent stealers can never both end up holding the lock.
|
|
155
|
-
await stealStaleLock(lockPath, staleToken);
|
|
157
|
+
await stealStaleLock(lockPath, staleToken, now);
|
|
156
158
|
logger?.event({ kind: "step", note: "stale_lock_removed", lock_path: lockPath });
|
|
157
159
|
// Progress was made (a slot may have opened); retry promptly and reset
|
|
158
160
|
// the backoff window.
|
|
@@ -162,7 +164,7 @@ export async function acquireLock(lockPath, timeoutMs = DEFAULT_TIMEOUT_MS, logg
|
|
|
162
164
|
}
|
|
163
165
|
// Exponential backoff, clamped to the time left so we never sleep past the
|
|
164
166
|
// deadline. Doubles each idle cycle up to RETRY_INTERVAL_MAX_MS.
|
|
165
|
-
const sleepMs = Math.min(retryInterval, Math.max(0, deadline -
|
|
167
|
+
const sleepMs = Math.min(retryInterval, Math.max(0, deadline - now()));
|
|
166
168
|
await new Promise((r) => setTimeout(r, sleepMs));
|
|
167
169
|
retryInterval = Math.min(retryInterval * 2, RETRY_INTERVAL_MAX_MS);
|
|
168
170
|
}
|
|
@@ -182,8 +184,8 @@ export async function releaseLock(lockPath, ownerToken) {
|
|
|
182
184
|
// ENOENT: lock already gone — swallow silently
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
|
-
export async function withFileLock(lockPath, fn, timeoutMs, logger) {
|
|
186
|
-
const token = await acquireLock(lockPath, timeoutMs, logger);
|
|
187
|
+
export async function withFileLock(lockPath, fn, timeoutMs, logger, options = {}) {
|
|
188
|
+
const token = await acquireLock(lockPath, timeoutMs, logger, options);
|
|
187
189
|
let hasFnError = false;
|
|
188
190
|
try {
|
|
189
191
|
return await fn();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/shared/quota/fileLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/shared/quota/fileLock.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,15 @@ export interface ConfirmedPoolEntry {
|
|
|
26
26
|
* (or by self-spawn guard). Excluded entries are recorded but not dispatched.
|
|
27
27
|
*/
|
|
28
28
|
excluded: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Machine-readable self-spawn-blocked flag. True when this provider was
|
|
31
|
+
* detected on PATH but cannot be launched as a fresh subprocess from inside an
|
|
32
|
+
* active session of that same agent (claude-code under `CLAUDECODE`, codex
|
|
33
|
+
* under `CODEX`). Such an entry is `excluded: true` by default — and so out of
|
|
34
|
+
* the dispatchable pool — unless the operator explicitly re-includes it. This
|
|
35
|
+
* flag is the security signal; `reason` is advisory text only.
|
|
36
|
+
*/
|
|
37
|
+
self_spawn_blocked?: boolean;
|
|
29
38
|
/** Optional reason for exclusion or detection restriction. */
|
|
30
39
|
reason?: string;
|
|
31
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/types/providerConfirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAM3E;;;GAGG;AACH,eAAO,MAAM,oCAAoC,EAAG,OAAgB,CAAC;AAMrE,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,kDAAkD;IAClD,eAAe,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,wEAAwE;IACxE,cAAc,EAAE,OAAO,oCAAoC,CAAC;IAC5D,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"providerConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/types/providerConfirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAM3E;;;GAGG;AACH,eAAO,MAAM,oCAAoC,EAAG,OAAgB,CAAC;AAMrE,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,kDAAkD;IAClD,eAAe,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,wEAAwE;IACxE,cAAc,EAAE,OAAO,oCAAoC,CAAC;IAC5D,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "audit-tools",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.51",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
|
|
6
6
|
"type": "module",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"test:shared": "npm run build && node --import tsx/esm --test tests/shared/*.test.mjs",
|
|
46
46
|
"test:remediate": "vitest run",
|
|
47
47
|
"test:single": "npm run build && node --import tsx/esm --test",
|
|
48
|
-
"verify:release": "npm run check && npm run check:doc-manifest && npm test && npm run verify:hosts && npm run smoke:packaged-audit-code && npm run smoke:packaged-remediate-code",
|
|
48
|
+
"verify:release": "npm run check && npm run check:deadcode && npm run check:doc-manifest && npm test && npm run verify:hosts && npm run smoke:packaged-audit-code && npm run smoke:packaged-remediate-code",
|
|
49
|
+
"check:deadcode": "knip --no-config-hints",
|
|
49
50
|
"check:doc-manifest": "node scripts/check-doc-manifest.mjs",
|
|
50
51
|
"verify:hosts": "node scripts/audit/verify-hosts.mjs",
|
|
51
52
|
"smoke:linked-audit-code": "node scripts/audit/smoke-linked-audit-code.mjs",
|
|
@@ -75,6 +76,7 @@
|
|
|
75
76
|
},
|
|
76
77
|
"devDependencies": {
|
|
77
78
|
"@types/node": "^24.3.0",
|
|
79
|
+
"knip": "^6.23.0",
|
|
78
80
|
"linguist-languages": "^9.3.2",
|
|
79
81
|
"tree-sitter-wasms": "^0.1.13",
|
|
80
82
|
"tsx": "^4.19.0",
|
|
@@ -304,22 +304,27 @@ for (const install of installs) {
|
|
|
304
304
|
|
|
305
305
|
// Install OpenCode global command and MCP via merged config
|
|
306
306
|
const opencodeGlobalConfig = join(homedir(), '.config', 'opencode', 'opencode.json');
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
307
|
+
if (!sharedOpenCodePermissions) {
|
|
308
|
+
// Expected when audit-tools/shared isn't built yet — notably during `npm ci`
|
|
309
|
+
// in CI, where postinstall runs before the shared build step. This is a SKIP,
|
|
310
|
+
// not a failure: counting it would trip the `failed > 0` exit-1 guard below and
|
|
311
|
+
// break `npm ci`. Genuine OpenCode write errors are still counted as failures.
|
|
312
|
+
console.warn(
|
|
313
|
+
'audit-code: audit-tools/shared is unavailable (build the shared workspace first); skipping OpenCode config deployment',
|
|
314
|
+
);
|
|
315
|
+
} else {
|
|
316
|
+
try {
|
|
317
|
+
const action = installMergedJson(opencodeGlobalConfig, (existing) =>
|
|
318
|
+
mergeOpenCodeGlobalConfig(existing),
|
|
311
319
|
);
|
|
320
|
+
console.log(`audit-code: ${action} global OpenCode config in ${opencodeGlobalConfig}`);
|
|
321
|
+
succeeded++;
|
|
322
|
+
} catch (err) {
|
|
323
|
+
console.warn(`audit-code: could not install global OpenCode config (${err.message})`);
|
|
324
|
+
console.warn(` To install manually, add the mcp.auditor and command["audit-code"] entries to:`);
|
|
325
|
+
console.warn(` ${opencodeGlobalConfig}`);
|
|
326
|
+
failed++;
|
|
312
327
|
}
|
|
313
|
-
const action = installMergedJson(opencodeGlobalConfig, (existing) =>
|
|
314
|
-
mergeOpenCodeGlobalConfig(existing),
|
|
315
|
-
);
|
|
316
|
-
console.log(`audit-code: ${action} global OpenCode config in ${opencodeGlobalConfig}`);
|
|
317
|
-
succeeded++;
|
|
318
|
-
} catch (err) {
|
|
319
|
-
console.warn(`audit-code: could not install global OpenCode config (${err.message})`);
|
|
320
|
-
console.warn(` To install manually, add the mcp.auditor and command["audit-code"] entries to:`);
|
|
321
|
-
console.warn(` ${opencodeGlobalConfig}`);
|
|
322
|
-
failed++;
|
|
323
328
|
}
|
|
324
329
|
|
|
325
330
|
// Install Antigravity plugin (global skill for Gemini IDE / Antigravity Hub)
|
|
@@ -383,3 +388,6 @@ try {
|
|
|
383
388
|
}
|
|
384
389
|
|
|
385
390
|
console.log(`audit-code: postinstall complete — ${succeeded} succeeded, ${failed} failed (${Date.now() - postinstallStart}ms)`);
|
|
391
|
+
if (failed > 0) {
|
|
392
|
+
process.exitCode = 1;
|
|
393
|
+
}
|