audit-tools 0.31.2 → 0.31.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/README.md +60 -20
- package/dist/audit/cli/auditStep.d.ts +6 -3
- package/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +116 -19
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/dispatch.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.js +41 -2
- package/dist/audit/cli/dispatch.js.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.js +14 -1
- package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +1 -0
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/steps/dispatch.d.ts +15 -0
- package/dist/remediate/steps/dispatch.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch.js +65 -5
- package/dist/remediate/steps/dispatch.js.map +1 -1
- package/dist/remediate/steps/intakeResolver.d.ts +6 -0
- package/dist/remediate/steps/intakeResolver.d.ts.map +1 -1
- package/dist/remediate/steps/intakeResolver.js +65 -39
- package/dist/remediate/steps/intakeResolver.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +9 -0
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +97 -23
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/rollingSession.d.ts.map +1 -1
- package/dist/remediate/steps/rollingSession.js +2 -3
- package/dist/remediate/steps/rollingSession.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +1 -1
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js.map +1 -1
- 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/auditToolsPaths.d.ts +20 -0
- package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
- package/dist/shared/io/auditToolsPaths.js +24 -0
- package/dist/shared/io/auditToolsPaths.js.map +1 -1
- package/dist/shared/io/gitignoreArtifacts.d.ts +1 -1
- package/dist/shared/io/stepContractWriter.d.ts +12 -4
- package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
- package/dist/shared/io/stepContractWriter.js +81 -11
- package/dist/shared/io/stepContractWriter.js.map +1 -1
- package/dist/shared/quota/claimLease.d.ts +32 -0
- package/dist/shared/quota/claimLease.d.ts.map +1 -0
- package/dist/shared/quota/claimLease.js +66 -0
- package/dist/shared/quota/claimLease.js.map +1 -0
- package/dist/shared/quota/claimRegistry.d.ts +35 -1
- package/dist/shared/quota/claimRegistry.d.ts.map +1 -1
- package/dist/shared/quota/claimRegistry.js +74 -7
- package/dist/shared/quota/claimRegistry.js.map +1 -1
- package/docs/audit-pkg/development.md +1 -1
- package/package.json +3 -7
|
@@ -19,12 +19,20 @@ type ClaimMap = Record<string, ClaimRecord>;
|
|
|
19
19
|
* coordinators at the same file — that is the whole point). Every mutating op
|
|
20
20
|
* runs its entire read-modify-write inside `withFileLock(registryPath + '.lock')`
|
|
21
21
|
* so concurrent loops are serialized and the single-grant invariant holds.
|
|
22
|
+
*
|
|
23
|
+
* The stale-reclaim window defaults to the file lock's `STALE_LOCK_MS` but is
|
|
24
|
+
* per-registry configurable (`staleMs`): a claim guarding a long unit of work
|
|
25
|
+
* (e.g. an audit task whose LLM execution outruns 30s) needs a longer lease than
|
|
26
|
+
* a short state mutation, so a genuinely-live owner heartbeating on a timer is
|
|
27
|
+
* never reclaimed mid-flight (OD3, `spec/multi-ide-concurrent-runs-design.md`).
|
|
22
28
|
*/
|
|
23
29
|
export declare class ClaimRegistry {
|
|
24
30
|
private readonly registryPath;
|
|
25
31
|
private readonly now;
|
|
26
32
|
private readonly lockPath;
|
|
27
|
-
|
|
33
|
+
private readonly staleMs;
|
|
34
|
+
constructor(registryPath: string, now?: () => number, staleMs?: number);
|
|
35
|
+
private isStale;
|
|
28
36
|
/**
|
|
29
37
|
* Attempt to claim `nodeId` for `poolId`. Granted when the node is unclaimed or
|
|
30
38
|
* the existing claim is stale (heartbeat older than STALE_LOCK_MS). Returns the
|
|
@@ -32,6 +40,32 @@ export declare class ClaimRegistry {
|
|
|
32
40
|
* live owner's token when another loop holds it.
|
|
33
41
|
*/
|
|
34
42
|
claim(nodeId: string, poolId: string): Promise<ClaimResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Claim as many of `nodeIds` as are free (unclaimed or stale) in ONE lock-held
|
|
45
|
+
* read-modify-write — the batch analogue of `claim`, so a peer partitioning a
|
|
46
|
+
* pool of N tasks pays a single file write instead of N. Returns the granted
|
|
47
|
+
* subset (nodeIds this call now owns) with their fresh owner tokens.
|
|
48
|
+
*
|
|
49
|
+
* `poolId` doubles as the OWNER identity for re-grant: a node already held by a
|
|
50
|
+
* DIFFERENT live pool is omitted (that peer's disjoint partition), but a node
|
|
51
|
+
* already held by the SAME `poolId` is RE-GRANTED (heartbeat refreshed). This
|
|
52
|
+
* makes a caller that re-runs the partition under a stable poolId idempotent —
|
|
53
|
+
* it reclaims its own in-flight nodes instead of skipping them — while distinct
|
|
54
|
+
* pools still partition disjointly. (Audit passes the runId as poolId: one run's
|
|
55
|
+
* repeated dispatch re-grants; two IDEs' runs skip each other.)
|
|
56
|
+
*/
|
|
57
|
+
claimMany(nodeIds: readonly string[], poolId: string): Promise<{
|
|
58
|
+
granted: string[];
|
|
59
|
+
ownerTokenByNode: Record<string, string>;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Unconditionally remove claims for `nodeIds` (no token check), returning how
|
|
63
|
+
* many were present. For authoritative release points where the work is known
|
|
64
|
+
* done regardless of who dispatched it — e.g. releasing a task claim once its
|
|
65
|
+
* result has been ingested — and for releasing over-claimed (deferred) nodes a
|
|
66
|
+
* peer should be free to take. Distinct from `release`, which is token-checked.
|
|
67
|
+
*/
|
|
68
|
+
clear(nodeIds: readonly string[]): Promise<number>;
|
|
35
69
|
/**
|
|
36
70
|
* Refresh the heartbeat on a claim we still hold. Token-checked: a no-op if the
|
|
37
71
|
* node is unclaimed or held under a different token. Returns whether the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"claimRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AA+C5C;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,MAAyB,EACrD,OAAO,GAAE,MAAsB;IAMjC,OAAO,CAAC,OAAO;IAIf;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAejE;;;;;;;;;;;;;OAaG;IACG,SAAS,CACb,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAuB3E;;;;;;OAMG;IACG,KAAK,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrE;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnE;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBvC,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIrC;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOlD"}
|
|
@@ -45,23 +45,31 @@ async function writeClaimMap(registryPath, claims) {
|
|
|
45
45
|
await mkdir(dirname(registryPath), { recursive: true });
|
|
46
46
|
await writeFile(registryPath, `${JSON.stringify(claims, null, 2)}\n`, "utf8");
|
|
47
47
|
}
|
|
48
|
-
function isStale(record, now) {
|
|
49
|
-
return now - record.heartbeatAt > STALE_LOCK_MS;
|
|
50
|
-
}
|
|
51
48
|
/**
|
|
52
49
|
* File-backed claim registry. The caller owns the path (and may point two
|
|
53
50
|
* coordinators at the same file — that is the whole point). Every mutating op
|
|
54
51
|
* runs its entire read-modify-write inside `withFileLock(registryPath + '.lock')`
|
|
55
52
|
* so concurrent loops are serialized and the single-grant invariant holds.
|
|
53
|
+
*
|
|
54
|
+
* The stale-reclaim window defaults to the file lock's `STALE_LOCK_MS` but is
|
|
55
|
+
* per-registry configurable (`staleMs`): a claim guarding a long unit of work
|
|
56
|
+
* (e.g. an audit task whose LLM execution outruns 30s) needs a longer lease than
|
|
57
|
+
* a short state mutation, so a genuinely-live owner heartbeating on a timer is
|
|
58
|
+
* never reclaimed mid-flight (OD3, `spec/multi-ide-concurrent-runs-design.md`).
|
|
56
59
|
*/
|
|
57
60
|
export class ClaimRegistry {
|
|
58
61
|
registryPath;
|
|
59
62
|
now;
|
|
60
63
|
lockPath;
|
|
61
|
-
|
|
64
|
+
staleMs;
|
|
65
|
+
constructor(registryPath, now = () => Date.now(), staleMs = STALE_LOCK_MS) {
|
|
62
66
|
this.registryPath = registryPath;
|
|
63
67
|
this.now = now;
|
|
64
68
|
this.lockPath = `${registryPath}.lock`;
|
|
69
|
+
this.staleMs = staleMs;
|
|
70
|
+
}
|
|
71
|
+
isStale(record, now) {
|
|
72
|
+
return now - record.heartbeatAt > this.staleMs;
|
|
65
73
|
}
|
|
66
74
|
/**
|
|
67
75
|
* Attempt to claim `nodeId` for `poolId`. Granted when the node is unclaimed or
|
|
@@ -74,7 +82,7 @@ export class ClaimRegistry {
|
|
|
74
82
|
const claims = await readClaimMap(this.registryPath);
|
|
75
83
|
const now = this.now();
|
|
76
84
|
const existing = claims[nodeId];
|
|
77
|
-
if (existing && !isStale(existing, now)) {
|
|
85
|
+
if (existing && !this.isStale(existing, now)) {
|
|
78
86
|
return { acquired: false, heldBy: existing.ownerToken };
|
|
79
87
|
}
|
|
80
88
|
const ownerToken = mintOwnerToken();
|
|
@@ -83,6 +91,65 @@ export class ClaimRegistry {
|
|
|
83
91
|
return { acquired: true, ownerToken };
|
|
84
92
|
});
|
|
85
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Claim as many of `nodeIds` as are free (unclaimed or stale) in ONE lock-held
|
|
96
|
+
* read-modify-write — the batch analogue of `claim`, so a peer partitioning a
|
|
97
|
+
* pool of N tasks pays a single file write instead of N. Returns the granted
|
|
98
|
+
* subset (nodeIds this call now owns) with their fresh owner tokens.
|
|
99
|
+
*
|
|
100
|
+
* `poolId` doubles as the OWNER identity for re-grant: a node already held by a
|
|
101
|
+
* DIFFERENT live pool is omitted (that peer's disjoint partition), but a node
|
|
102
|
+
* already held by the SAME `poolId` is RE-GRANTED (heartbeat refreshed). This
|
|
103
|
+
* makes a caller that re-runs the partition under a stable poolId idempotent —
|
|
104
|
+
* it reclaims its own in-flight nodes instead of skipping them — while distinct
|
|
105
|
+
* pools still partition disjointly. (Audit passes the runId as poolId: one run's
|
|
106
|
+
* repeated dispatch re-grants; two IDEs' runs skip each other.)
|
|
107
|
+
*/
|
|
108
|
+
async claimMany(nodeIds, poolId) {
|
|
109
|
+
return withFileLock(this.lockPath, async () => {
|
|
110
|
+
const claims = await readClaimMap(this.registryPath);
|
|
111
|
+
const now = this.now();
|
|
112
|
+
const granted = [];
|
|
113
|
+
const ownerTokenByNode = {};
|
|
114
|
+
for (const nodeId of nodeIds) {
|
|
115
|
+
const existing = claims[nodeId];
|
|
116
|
+
// Skip only when a DIFFERENT pool holds it live; my own live claim is
|
|
117
|
+
// re-grantable (idempotent re-partition).
|
|
118
|
+
if (existing && !this.isStale(existing, now) && existing.poolId !== poolId) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const ownerToken = mintOwnerToken();
|
|
122
|
+
claims[nodeId] = { ownerToken, poolId, heartbeatAt: now };
|
|
123
|
+
granted.push(nodeId);
|
|
124
|
+
ownerTokenByNode[nodeId] = ownerToken;
|
|
125
|
+
}
|
|
126
|
+
if (granted.length > 0)
|
|
127
|
+
await writeClaimMap(this.registryPath, claims);
|
|
128
|
+
return { granted, ownerTokenByNode };
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Unconditionally remove claims for `nodeIds` (no token check), returning how
|
|
133
|
+
* many were present. For authoritative release points where the work is known
|
|
134
|
+
* done regardless of who dispatched it — e.g. releasing a task claim once its
|
|
135
|
+
* result has been ingested — and for releasing over-claimed (deferred) nodes a
|
|
136
|
+
* peer should be free to take. Distinct from `release`, which is token-checked.
|
|
137
|
+
*/
|
|
138
|
+
async clear(nodeIds) {
|
|
139
|
+
return withFileLock(this.lockPath, async () => {
|
|
140
|
+
const claims = await readClaimMap(this.registryPath);
|
|
141
|
+
let removed = 0;
|
|
142
|
+
for (const nodeId of nodeIds) {
|
|
143
|
+
if (claims[nodeId]) {
|
|
144
|
+
delete claims[nodeId];
|
|
145
|
+
removed += 1;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (removed > 0)
|
|
149
|
+
await writeClaimMap(this.registryPath, claims);
|
|
150
|
+
return removed;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
86
153
|
/**
|
|
87
154
|
* Refresh the heartbeat on a claim we still hold. Token-checked: a no-op if the
|
|
88
155
|
* node is unclaimed or held under a different token. Returns whether the
|
|
@@ -128,7 +195,7 @@ export class ClaimRegistry {
|
|
|
128
195
|
const now = this.now();
|
|
129
196
|
const reclaimed = [];
|
|
130
197
|
for (const [nodeId, record] of Object.entries(claims)) {
|
|
131
|
-
if (isStale(record, now)) {
|
|
198
|
+
if (this.isStale(record, now)) {
|
|
132
199
|
delete claims[nodeId];
|
|
133
200
|
reclaimed.push(nodeId);
|
|
134
201
|
}
|
|
@@ -150,7 +217,7 @@ export class ClaimRegistry {
|
|
|
150
217
|
return withFileLock(this.lockPath, async () => {
|
|
151
218
|
const claims = await readClaimMap(this.registryPath);
|
|
152
219
|
const existing = claims[nodeId];
|
|
153
|
-
return existing !== undefined && !isStale(existing, this.now());
|
|
220
|
+
return existing !== undefined && !this.isStale(existing, this.now());
|
|
154
221
|
});
|
|
155
222
|
}
|
|
156
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimRegistry.js","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgC5D,SAAS,cAAc;IACrB,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QACnC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,iFAAiF;AACjF,gFAAgF;AAChF,kFAAkF;AAClF,KAAK,UAAU,YAAY,CAAC,YAAoB;IAC9C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QACjF,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,MAAgB;IACjE,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"claimRegistry.js","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "audit-tools",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
|
|
6
6
|
"type": "module",
|
|
@@ -38,12 +38,8 @@
|
|
|
38
38
|
"postinstall": "node scripts/postinstall.mjs",
|
|
39
39
|
"build": "tsc -p tsconfig.json",
|
|
40
40
|
"check": "tsc -p tsconfig.json --noEmit",
|
|
41
|
-
"test": "npm run build &&
|
|
42
|
-
"test:
|
|
43
|
-
"test:audit": "npm run build && node --import tsx/esm --test tests/audit/*.test.mjs",
|
|
44
|
-
"test:shared": "npm run build && node --import tsx/esm --test tests/shared/*.test.mjs",
|
|
45
|
-
"test:remediate": "vitest run",
|
|
46
|
-
"test:single": "npm run build && node --import tsx/esm --test",
|
|
41
|
+
"test": "npm run build && vitest run",
|
|
42
|
+
"test:single": "npm run build && vitest run",
|
|
47
43
|
"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",
|
|
48
44
|
"check:deadcode": "knip --no-config-hints",
|
|
49
45
|
"check:doc-manifest": "node scripts/check-doc-manifest.mjs",
|