openpitstop 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PRIVACY.md +77 -90
- package/README.md +365 -887
- package/dist/agentBudget.d.ts +33 -0
- package/dist/agentBudget.js +165 -0
- package/dist/agentBudget.js.map +1 -0
- package/dist/analyzers/ledger/index.d.ts +2 -1
- package/dist/analyzers/ledger/index.js +10 -1
- package/dist/analyzers/ledger/index.js.map +1 -1
- package/dist/analyzers/types.d.ts +2 -0
- package/dist/candidate.d.ts +20 -0
- package/dist/candidate.js +87 -0
- package/dist/candidate.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/ask.d.ts +0 -8
- package/dist/commands/ask.js +36 -34
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/budget.d.ts +1 -0
- package/dist/commands/budget.js +12 -3
- package/dist/commands/budget.js.map +1 -1
- package/dist/commands/drive.js +77 -51
- package/dist/commands/drive.js.map +1 -1
- package/dist/commands/fix.d.ts +7 -0
- package/dist/commands/fix.js +90 -108
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/gate.js +6 -2
- package/dist/commands/gate.js.map +1 -1
- package/dist/commands/pen.d.ts +3 -1
- package/dist/commands/pen.js +31 -42
- package/dist/commands/pen.js.map +1 -1
- package/dist/commands/readyCheck.d.ts +1 -1
- package/dist/commands/readyCheck.js +6 -36
- package/dist/commands/readyCheck.js.map +1 -1
- package/dist/commands/scan.d.ts +6 -5
- package/dist/commands/scan.js +26 -28
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/verify.d.ts +3 -1
- package/dist/commands/verify.js +5 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/evidence.js +4 -0
- package/dist/evidence.js.map +1 -1
- package/dist/installer/targets.js +1 -1
- package/dist/installer/targets.js.map +1 -1
- package/dist/intent.d.ts +4 -7
- package/dist/intent.js +41 -77
- package/dist/intent.js.map +1 -1
- package/dist/pen/dynamic.d.ts +1 -24
- package/dist/pen/dynamic.js +10 -1
- package/dist/pen/dynamic.js.map +1 -1
- package/dist/pen/fix.js +5 -1
- package/dist/pen/fix.js.map +1 -1
- package/dist/repro/generate.js +1 -0
- package/dist/repro/generate.js.map +1 -1
- package/dist/repro/pen.js +1 -0
- package/dist/repro/pen.js.map +1 -1
- package/dist/repro/run.d.ts +1 -0
- package/dist/repro/run.js +17 -1
- package/dist/repro/run.js.map +1 -1
- package/dist/sandbox/container.d.ts +9 -0
- package/dist/sandbox/container.js +129 -0
- package/dist/sandbox/container.js.map +1 -0
- package/dist/sandbox/worker.d.ts +1 -0
- package/dist/sandbox/worker.js +41 -0
- package/dist/sandbox/worker.js.map +1 -0
- package/dist/scanCache.d.ts +27 -0
- package/dist/scanCache.js +89 -0
- package/dist/scanCache.js.map +1 -0
- package/dist/verify/acceptance.d.ts +5 -1
- package/dist/verify/acceptance.js +29 -16
- package/dist/verify/acceptance.js.map +1 -1
- package/dist/verify/architecture.d.ts +5 -1
- package/dist/verify/architecture.js +6 -1
- package/dist/verify/architecture.js.map +1 -1
- package/dist/verify/baseline.d.ts +5 -1
- package/dist/verify/baseline.js +5 -1
- package/dist/verify/baseline.js.map +1 -1
- package/dist/verify/chain.js +17 -0
- package/dist/verify/chain.js.map +1 -1
- package/dist/verify/flow.d.ts +2 -0
- package/dist/verify/flow.js +18 -3
- package/dist/verify/flow.js.map +1 -1
- package/dist/verify/gateMatrix.d.ts +4 -0
- package/dist/verify/gateMatrix.js +23 -12
- package/dist/verify/gateMatrix.js.map +1 -1
- package/dist/verify/holdout.d.ts +5 -1
- package/dist/verify/holdout.js +8 -2
- package/dist/verify/holdout.js.map +1 -1
- package/dist/verify/regression.d.ts +5 -1
- package/dist/verify/regression.js +6 -1
- package/dist/verify/regression.js.map +1 -1
- package/dist/verify/stack.d.ts +5 -1
- package/dist/verify/stack.js +6 -1
- package/dist/verify/stack.js.map +1 -1
- package/dist/verify/state.d.ts +5 -1
- package/dist/verify/state.js +6 -1
- package/dist/verify/state.js.map +1 -1
- package/dist/verify/verifier.d.ts +5 -1
- package/dist/verify/verifier.js +6 -1
- package/dist/verify/verifier.js.map +1 -1
- package/docs/release-controls.md +107 -0
- package/package.json +70 -69
- package/templates/pitstop.command.md +17 -5
- package/templates/pitstop.prompt.md +390 -390
- package/scripts/__pycache__/gen-gifs.cpython-313.pyc +0 -0
- package/scripts/gen-gifs.py +0 -231
package/dist/commands/gate.js
CHANGED
|
@@ -272,9 +272,12 @@ export const gate = new Command("gate")
|
|
|
272
272
|
.option("--score <n>", "minimum OpenPitStop Score required to pass (default 60; 0 disables the score check)", "60")
|
|
273
273
|
.option("--require <layers>", "comma-separated verification layers that MUST have passing evidence for VERIFIED (e.g. baseline,acceptance,holdout,regression,state)", "")
|
|
274
274
|
.option("--json", "print a machine-readable gate result")
|
|
275
|
+
.option("--strict", "exit non-zero for UNPROVEN as well as failed checks; only VERIFIED passes")
|
|
275
276
|
.action(async (repoArg, options) => {
|
|
276
277
|
const repo = path.resolve(repoArg);
|
|
277
|
-
const threshold =
|
|
278
|
+
const threshold = Number(options.score ?? 60);
|
|
279
|
+
if (!Number.isFinite(threshold) || threshold < 0 || threshold > 100)
|
|
280
|
+
throw new Error("--score must be a number from 0 to 100");
|
|
278
281
|
const requireLayers = (options.require ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
279
282
|
if (!options.json) {
|
|
280
283
|
console.log(chalk.cyan(`\nGating ${repo} (score >= ${threshold}/100) ...\n`));
|
|
@@ -282,6 +285,7 @@ export const gate = new Command("gate")
|
|
|
282
285
|
const outcome = await runVerify(repo);
|
|
283
286
|
const gateResult = gateOutcome(outcome, threshold); // legacy reasons (backward-compatible contract)
|
|
284
287
|
const decision = evaluateGate(repo, {
|
|
288
|
+
candidateBinding: outcome.candidateBinding,
|
|
285
289
|
missingBaseline: outcome.missingBaseline,
|
|
286
290
|
blocked: outcome.blocked,
|
|
287
291
|
integrityVerdict: outcome.missingBaseline ? "CLEAN" : outcome.integrity.verdict,
|
|
@@ -293,7 +297,7 @@ export const gate = new Command("gate")
|
|
|
293
297
|
testsFailed: outcome.current.tests.failed,
|
|
294
298
|
stale: outcome.stale,
|
|
295
299
|
staleNote: outcome.staleNote,
|
|
296
|
-
}, { threshold, require: requireLayers });
|
|
300
|
+
}, { threshold, require: requireLayers, strict: options.strict });
|
|
297
301
|
// fold legacy gate reasons that the matrix cannot see (staleness note etc.)
|
|
298
302
|
for (const r of gateResult.reasons) {
|
|
299
303
|
if (r.startsWith("⚠") && !decision.reasons.some((x) => x.includes(r.slice(1).trim().slice(0, 40)))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/commands/gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/commands/gate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pen.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface PenOptions {
|
|
|
12
12
|
* under the pen sandbox and attacked. Everything is recorded, everything is
|
|
13
13
|
* sealed, and `--fix` turns every replayable finding into a regression test.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
declare function runPenImpl(repo: string, opts: PenOptions): Promise<PenResult>;
|
|
16
|
+
export declare function penExitCode(result: PenResult): number;
|
|
16
17
|
export declare const pen: Command;
|
|
17
18
|
export default pen;
|
|
19
|
+
export declare function runPen(...args: Parameters<typeof runPenImpl>): ReturnType<typeof runPenImpl>;
|
package/dist/commands/pen.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { candidateRun } from "../candidate.js";
|
|
1
2
|
import { Command } from "commander";
|
|
2
3
|
import chalk from "chalk";
|
|
3
4
|
import path from "node:path";
|
|
@@ -17,18 +18,16 @@ import { createSpinner } from "../ui/spinner.js";
|
|
|
17
18
|
* under the pen sandbox and attacked. Everything is recorded, everything is
|
|
18
19
|
* sealed, and `--fix` turns every replayable finding into a regression test.
|
|
19
20
|
*/
|
|
20
|
-
|
|
21
|
-
const staticStart = Date.now();
|
|
21
|
+
async function runPenImpl(repo, opts) {
|
|
22
22
|
const staticOutcome = analyzeStatic(repo);
|
|
23
|
-
const staticMs = Date.now() - staticStart;
|
|
24
23
|
// Previous sealed run, for drift detection (read before we overwrite it).
|
|
25
24
|
const prev = loadPenLatest(repo);
|
|
26
25
|
const staticFindings = [...staticOutcome.findings];
|
|
27
26
|
let dynamicEnabled = !opts.staticOnly;
|
|
28
27
|
let staticProof;
|
|
29
28
|
let dynamic = {
|
|
30
|
-
status: "ok",
|
|
31
|
-
note: undefined,
|
|
29
|
+
status: opts.staticOnly ? "skipped" : "ok",
|
|
30
|
+
note: opts.staticOnly ? "static-only requested; no app was started" : undefined,
|
|
32
31
|
routesProbed: 0,
|
|
33
32
|
attacks: 0,
|
|
34
33
|
bootMs: 0,
|
|
@@ -46,7 +45,7 @@ export async function runPen(repo, opts) {
|
|
|
46
45
|
return false;
|
|
47
46
|
}
|
|
48
47
|
})();
|
|
49
|
-
if (!hasApp && staticOutcome.routes.length === 0) {
|
|
48
|
+
if (dynamicEnabled && !hasApp && !process.env.PITSTOP_START && staticOutcome.routes.length === 0) {
|
|
50
49
|
const d = {
|
|
51
50
|
status: "aborted",
|
|
52
51
|
note: "no app to attack — no `start` script and no routes found",
|
|
@@ -61,25 +60,25 @@ export async function runPen(repo, opts) {
|
|
|
61
60
|
repo,
|
|
62
61
|
mode: "pen",
|
|
63
62
|
staticEnabled: true,
|
|
64
|
-
dynamicEnabled:
|
|
63
|
+
dynamicEnabled: true,
|
|
65
64
|
dynamic: d,
|
|
66
|
-
staticProof: {
|
|
65
|
+
staticProof: applyStaticProof(staticFindings, { status: "aborted", note: d.note, findings: [] }).summary,
|
|
67
66
|
packages: staticOutcome.packages,
|
|
68
|
-
findings: [],
|
|
69
|
-
summary:
|
|
67
|
+
findings: applyStaticProof(staticFindings, { status: "aborted", note: d.note, findings: [] }).findings,
|
|
68
|
+
summary: summarizeFindings(staticFindings),
|
|
70
69
|
};
|
|
71
70
|
return result;
|
|
72
71
|
}
|
|
73
72
|
const findings = [];
|
|
74
73
|
if (dynamicEnabled) {
|
|
75
|
-
const spin = createSpinner(`Booting the app under the pen sandbox and attacking ${staticOutcome.routes.length} route(s)…`);
|
|
74
|
+
const spin = opts.json ? null : createSpinner(`Booting the app under the pen sandbox and attacking ${staticOutcome.routes.length} route(s)…`);
|
|
76
75
|
try {
|
|
77
76
|
const d = await runDynamic(repo, staticOutcome.routes);
|
|
78
77
|
if (d.status === "aborted") {
|
|
79
|
-
spin
|
|
78
|
+
spin?.warn(`Dynamic phase aborted — ${d.note ?? "app did not respond"}`);
|
|
80
79
|
}
|
|
81
80
|
else {
|
|
82
|
-
spin
|
|
81
|
+
spin?.succeed(`Dynamic phase done — ${d.routesProbed} routes, ${d.attacks} attacks`);
|
|
83
82
|
}
|
|
84
83
|
const proof = applyStaticProof(staticFindings, d);
|
|
85
84
|
findings.push(...proof.findings, ...d.findings);
|
|
@@ -95,7 +94,7 @@ export async function runPen(repo, opts) {
|
|
|
95
94
|
};
|
|
96
95
|
}
|
|
97
96
|
catch (err) {
|
|
98
|
-
spin
|
|
97
|
+
spin?.fail("Dynamic phase failed");
|
|
99
98
|
const d = { status: "aborted", note: err.message, findings: [] };
|
|
100
99
|
const proof = applyStaticProof(staticFindings, d);
|
|
101
100
|
findings.push(...proof.findings);
|
|
@@ -132,6 +131,13 @@ export async function runPen(repo, opts) {
|
|
|
132
131
|
summary: summarizeFindings(findings),
|
|
133
132
|
};
|
|
134
133
|
}
|
|
134
|
+
export function penExitCode(result) {
|
|
135
|
+
if (result.summary.critical + result.summary.high > 0 || result.drift?.regression)
|
|
136
|
+
return 1;
|
|
137
|
+
if (result.dynamicEnabled && result.dynamic.status !== "ok")
|
|
138
|
+
return 2;
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
135
141
|
export const pen = new Command("pen")
|
|
136
142
|
.description("Penetration test your own app: static heuristics (secrets, taint, config hygiene) plus a LIVE " +
|
|
137
143
|
"dynamic attack phase — the app is booted under a network-interception sandbox and attacked. " +
|
|
@@ -151,9 +157,8 @@ export const pen = new Command("pen")
|
|
|
151
157
|
if (!options.json) {
|
|
152
158
|
console.log(chalk.cyan(`\nPen-testing ${repo}${options.static ? " (static pass only)" : ""} ...\n`));
|
|
153
159
|
if (!options.static) {
|
|
154
|
-
console.log(chalk.dim("
|
|
155
|
-
"
|
|
156
|
-
" blocked; child processes run and are logged (it is your own start script).\n"));
|
|
160
|
+
console.log(chalk.dim(" Live attacks run in a disposable Docker container with external networking disabled.\n" +
|
|
161
|
+
" The app receives a sanitized copy; host credentials and source write access are excluded.\n"));
|
|
157
162
|
}
|
|
158
163
|
}
|
|
159
164
|
const result = await runPen(repo, {
|
|
@@ -162,23 +167,16 @@ export const pen = new Command("pen")
|
|
|
162
167
|
json: options.json,
|
|
163
168
|
html: options.html,
|
|
164
169
|
});
|
|
165
|
-
// Friendly early abort (no app to boot, nothing to attack): one line and a
|
|
166
|
-
// hint, no report ceremony, exit 2.
|
|
167
|
-
if (!result.dynamicEnabled && result.dynamic.status === "aborted") {
|
|
168
|
-
console.log(chalk.yellow(`\nPen aborted: ${result.dynamic.note}.`));
|
|
169
|
-
console.log(chalk.dim("hint: point me at an app — a package.json with a `start` script (or PITSTOP_START) —\n" +
|
|
170
|
-
"so the dynamic phase has something to boot and attack.\n"));
|
|
171
|
-
if (options.json)
|
|
172
|
-
console.log(JSON.stringify(result, null, 2));
|
|
173
|
-
process.exitCode = 2;
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
170
|
const { file } = persistPen(repo, result);
|
|
171
|
+
process.exitCode = penExitCode(result);
|
|
177
172
|
const md = renderPenMarkdown(result);
|
|
178
173
|
fs.writeFileSync(path.join(repo, "PITSTOP_PEN_REPORT.md"), md, "utf8");
|
|
179
174
|
if (options.html) {
|
|
180
175
|
fs.writeFileSync(path.join(repo, "PITSTOP_PEN_REPORT.html"), renderPenHtml(result), "utf8");
|
|
181
176
|
}
|
|
177
|
+
const fixes = options.fix ? runFixes(repo, result, result.packages) : undefined;
|
|
178
|
+
if (fixes)
|
|
179
|
+
fs.writeFileSync(path.join(repo, "PITSTOP_PEN_FIXES.md"), fixes.fixesMd, "utf8");
|
|
182
180
|
if (options.json) {
|
|
183
181
|
console.log(JSON.stringify(result, null, 2));
|
|
184
182
|
return;
|
|
@@ -188,9 +186,8 @@ export const pen = new Command("pen")
|
|
|
188
186
|
`Report: ${path.join(repo, "PITSTOP_PEN_REPORT.md")}` +
|
|
189
187
|
(options.html ? ` · ${path.join(repo, "PITSTOP_PEN_REPORT.html")}` : "") +
|
|
190
188
|
"\n"));
|
|
191
|
-
if (
|
|
192
|
-
const outcome =
|
|
193
|
-
fs.writeFileSync(path.join(repo, "PITSTOP_PEN_FIXES.md"), outcome.fixesMd, "utf8");
|
|
189
|
+
if (fixes) {
|
|
190
|
+
const outcome = fixes;
|
|
194
191
|
console.log(chalk.green(`\n--fix: wrote ${outcome.repros.length} repro test(s), ${outcome.patches.length} patch(es)`));
|
|
195
192
|
for (const r of outcome.repros) {
|
|
196
193
|
console.log(chalk.dim(` repro: ${r.file} (fails now → passes after the fix)`));
|
|
@@ -200,17 +197,6 @@ export const pen = new Command("pen")
|
|
|
200
197
|
}
|
|
201
198
|
console.log(chalk.dim(` plan: ${path.join(repo, "PITSTOP_PEN_FIXES.md")}`));
|
|
202
199
|
}
|
|
203
|
-
// Exit contract: 0 = no high/critical findings, 1 = high/critical present,
|
|
204
|
-
// 2 = pen could not meaningfully run (dynamic aborted with nothing found).
|
|
205
|
-
if (result.summary.critical + result.summary.high > 0)
|
|
206
|
-
process.exitCode = 1;
|
|
207
|
-
else if (result.dynamicEnabled && result.dynamic.status === "aborted" && result.findings.length === 0) {
|
|
208
|
-
process.exitCode = 2;
|
|
209
|
-
}
|
|
210
|
-
// A regression (new high/critical, or a hypothesis the live attack just
|
|
211
|
-
// confirmed) since the last sealed run always fails the gate.
|
|
212
|
-
if (result.drift?.regression)
|
|
213
|
-
process.exitCode = 1;
|
|
214
200
|
if (result.drift) {
|
|
215
201
|
const d = result.drift;
|
|
216
202
|
const parts = [];
|
|
@@ -229,4 +215,7 @@ export const pen = new Command("pen")
|
|
|
229
215
|
}
|
|
230
216
|
});
|
|
231
217
|
export default pen;
|
|
218
|
+
export function runPen(...args) {
|
|
219
|
+
return candidateRun(args[0], () => runPenImpl(...args));
|
|
220
|
+
}
|
|
232
221
|
//# sourceMappingURL=pen.js.map
|
package/dist/commands/pen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pen.js","sourceRoot":"","sources":["../../src/commands/pen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAmC,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"pen.js","sourceRoot":"","sources":["../../src/commands/pen.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
/**
|
|
3
3
|
* `pitstop ready-check` — the token-economy gate.
|
|
4
4
|
*
|
|
5
|
-
* Answers ONE question: "is
|
|
5
|
+
* Answers ONE question: "is this full scan still eligible for reuse?"
|
|
6
6
|
* If yes, re-running the full suite is pure waste: `scan --reuse` (or the
|
|
7
7
|
* agent loop) can skip the heavy analyzers entirely. The autonomous fix loop
|
|
8
8
|
* calls this before every re-scan instead of burning model credits on tests
|
|
@@ -2,42 +2,12 @@ import { Command } from "commander";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import boxen from "boxen";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import
|
|
6
|
-
import { newestModifiedFile } from "../analyzers/util.js";
|
|
5
|
+
import { checkScanReuse } from "../scanCache.js";
|
|
7
6
|
import { loadPenLatest } from "../pen/store.js";
|
|
8
7
|
export function readyCheck(repo) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ready: false,
|
|
13
|
-
staleReason: "no scan baseline yet (.pitstop/scan-latest.json) — a first scan is required",
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
let scan;
|
|
17
|
-
try {
|
|
18
|
-
scan = JSON.parse(fs.readFileSync(scanPath, "utf8"));
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return { ready: false, staleReason: "scan-latest.json is corrupt — re-run `pitstop scan`" };
|
|
22
|
-
}
|
|
23
|
-
const baselineMs = Date.parse(scan.timestamp ?? "");
|
|
24
|
-
if (!baselineMs || Number.isNaN(baselineMs)) {
|
|
25
|
-
return { ready: false, staleReason: "baseline has no readable timestamp — re-run `pitstop scan`" };
|
|
26
|
-
}
|
|
27
|
-
const newest = newestModifiedFile(repo);
|
|
28
|
-
if (!newest)
|
|
29
|
-
return { ready: true, baselineTimestamp: scan.timestamp, baselineMode: scan.mode };
|
|
30
|
-
// Ignore pitstop's own writes: they live under .pitstop which newestModifiedFile skips.
|
|
31
|
-
if (newest.mtimeMs > baselineMs) {
|
|
32
|
-
return {
|
|
33
|
-
ready: false,
|
|
34
|
-
baselineTimestamp: scan.timestamp,
|
|
35
|
-
baselineMode: scan.mode,
|
|
36
|
-
changedFile: path.relative(repo, newest.file).replace(/\\/g, "/"),
|
|
37
|
-
changedMtime: newest.mtimeMs,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
return { ready: true, baselineTimestamp: scan.timestamp, baselineMode: scan.mode };
|
|
8
|
+
const result = checkScanReuse(repo);
|
|
9
|
+
return { ready: !!result.scan, baselineTimestamp: result.scan?.timestamp,
|
|
10
|
+
baselineMode: result.scan?.mode, changedFile: result.changedFile, staleReason: result.reason };
|
|
41
11
|
}
|
|
42
12
|
export const readyCheckCmd = new Command("ready-check")
|
|
43
13
|
.description("Token-economy gate: reports whether the working tree changed since the last scan. " +
|
|
@@ -54,10 +24,10 @@ export const readyCheckCmd = new Command("ready-check")
|
|
|
54
24
|
const pen = loadPenLatest(repo);
|
|
55
25
|
console.log(boxen(`${chalk.green("READY")} — nothing changed since the baseline.\n\n` +
|
|
56
26
|
`baseline: ${r.baselineTimestamp ?? "?"} (mode: ${r.baselineMode ?? "?"})${pen ? ` · pen report: ${pen.timestamp}` : ""}\n\n` +
|
|
57
|
-
chalk.dim(`
|
|
27
|
+
chalk.dim(`Use \`pitstop scan --reuse\` during iteration; run fresh checks for release evidence.\n`), { title: " PITSTOP — Ready Check ", titleAlignment: "center", borderStyle: "round", padding: 1, borderColor: "green" }));
|
|
58
28
|
}
|
|
59
29
|
else {
|
|
60
|
-
console.log(boxen(`${chalk.yellow("
|
|
30
|
+
console.log(boxen(`${chalk.yellow("FRESH SCAN NEEDED")} — baseline is not eligible for reuse.\n\n` +
|
|
61
31
|
`changed: ${chalk.cyan(r.changedFile ?? "?")}\n` +
|
|
62
32
|
`baseline: ${r.baselineTimestamp ?? "?"} (mode: ${r.baselineMode ?? "?"})\n\n` +
|
|
63
33
|
(r.staleReason ?? "a re-scan is needed before `verify`/`gate` can be trusted."), { title: " PITSTOP — Ready Check ", titleAlignment: "center", borderStyle: "round", padding: 1, borderColor: "yellow" }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readyCheck.js","sourceRoot":"","sources":["../../src/commands/readyCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"readyCheck.js","sourceRoot":"","sources":["../../src/commands/readyCheck.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/scan.d.ts
CHANGED
|
@@ -7,11 +7,10 @@ export interface RunScanOptions {
|
|
|
7
7
|
reuse?: boolean;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Reuse a sealed baseline when
|
|
11
|
-
*
|
|
12
|
-
* (with its evidence chain intact) is returned.
|
|
10
|
+
* Reuse a sealed baseline when its content snapshot and scan inputs still match.
|
|
11
|
+
* Hashing has a local I/O cost; analyzers and model calls do not run on a hit.
|
|
13
12
|
*/
|
|
14
|
-
export declare function reuseScan(repo: string): ScanResult | null;
|
|
13
|
+
export declare function reuseScan(repo: string, opts?: RunScanOptions): ScanResult | null;
|
|
15
14
|
/**
|
|
16
15
|
* Persist a scan result into .pitstop: the timestamped history file plus the
|
|
17
16
|
* live scan-latest.json, both sealed with the evidence signature (`pitstop
|
|
@@ -20,7 +19,7 @@ export declare function reuseScan(repo: string): ScanResult | null;
|
|
|
20
19
|
export declare function persistScan(repo: string, result: ScanResult): {
|
|
21
20
|
file: string;
|
|
22
21
|
};
|
|
23
|
-
|
|
22
|
+
declare function runScanImpl(repo: string, opts?: RunScanOptions): Promise<{
|
|
24
23
|
result: ScanResult;
|
|
25
24
|
file: string;
|
|
26
25
|
}>;
|
|
@@ -30,3 +29,5 @@ export declare function runScan(repo: string, opts?: RunScanOptions): Promise<{
|
|
|
30
29
|
*/
|
|
31
30
|
export declare function renderSecurityFixes(r: ScanResult): string;
|
|
32
31
|
export declare const scan: Command;
|
|
32
|
+
export declare function runScan(...args: Parameters<typeof runScanImpl>): ReturnType<typeof runScanImpl>;
|
|
33
|
+
export {};
|
package/dist/commands/scan.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { candidateRun } from "../candidate.js";
|
|
1
2
|
import { Command } from "commander";
|
|
2
3
|
import chalk from "chalk";
|
|
3
4
|
import boxen from "boxen";
|
|
@@ -6,7 +7,7 @@ import path from "node:path";
|
|
|
6
7
|
import fs from "node:fs";
|
|
7
8
|
import { runAllAnalyzers } from "../analyzers/index.js";
|
|
8
9
|
import { runLedgerAnalyzer } from "../analyzers/ledger/index.js";
|
|
9
|
-
import {
|
|
10
|
+
import { checkScanReuse, scanInputs, snapshotRepo } from "../scanCache.js";
|
|
10
11
|
import { correlate } from "../graph/correlate.js";
|
|
11
12
|
import { relevantEntriesForFiles } from "../memory/store.js";
|
|
12
13
|
import { stampFindings, findingIdFor } from "../repro/ids.js";
|
|
@@ -218,7 +219,7 @@ export function renderBox(r) {
|
|
|
218
219
|
}
|
|
219
220
|
const content = lines.join("\n") +
|
|
220
221
|
"\n\n " +
|
|
221
|
-
chalk.bold("
|
|
222
|
+
chalk.bold('Next: pitstop ask "what should I do next"');
|
|
222
223
|
return boxen(content, {
|
|
223
224
|
title: " PITSTOP — Repository Scan Complete ",
|
|
224
225
|
titleAlignment: "center",
|
|
@@ -228,30 +229,11 @@ export function renderBox(r) {
|
|
|
228
229
|
});
|
|
229
230
|
}
|
|
230
231
|
/**
|
|
231
|
-
* Reuse a sealed baseline when
|
|
232
|
-
*
|
|
233
|
-
* (with its evidence chain intact) is returned.
|
|
232
|
+
* Reuse a sealed baseline when its content snapshot and scan inputs still match.
|
|
233
|
+
* Hashing has a local I/O cost; analyzers and model calls do not run on a hit.
|
|
234
234
|
*/
|
|
235
|
-
export function reuseScan(repo) {
|
|
236
|
-
|
|
237
|
-
if (!fs.existsSync(latestPath))
|
|
238
|
-
return null;
|
|
239
|
-
let latest;
|
|
240
|
-
try {
|
|
241
|
-
latest = JSON.parse(fs.readFileSync(latestPath, "utf8"));
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
return null;
|
|
245
|
-
}
|
|
246
|
-
const baselineMs = Date.parse(latest.timestamp ?? "");
|
|
247
|
-
if (!baselineMs || Number.isNaN(baselineMs))
|
|
248
|
-
return null;
|
|
249
|
-
const newest = newestModifiedFile(repo);
|
|
250
|
-
if (!newest)
|
|
251
|
-
return latest;
|
|
252
|
-
if (newest.mtimeMs > baselineMs)
|
|
253
|
-
return null;
|
|
254
|
-
return latest;
|
|
235
|
+
export function reuseScan(repo, opts = {}) {
|
|
236
|
+
return checkScanReuse(repo, opts).scan ?? null;
|
|
255
237
|
}
|
|
256
238
|
/**
|
|
257
239
|
* Persist a scan result into .pitstop: the timestamped history file plus the
|
|
@@ -269,7 +251,14 @@ export function persistScan(repo, result) {
|
|
|
269
251
|
fs.writeFileSync(path.join(outDir, "scan-latest.json"), json);
|
|
270
252
|
return { file };
|
|
271
253
|
}
|
|
272
|
-
|
|
254
|
+
async function runScanImpl(repo, opts = {}) {
|
|
255
|
+
if (opts.reuse) {
|
|
256
|
+
const cached = reuseScan(repo, opts);
|
|
257
|
+
if (cached)
|
|
258
|
+
return { result: cached, file: path.join(repo, ".pitstop", "scan-latest.json") };
|
|
259
|
+
}
|
|
260
|
+
const before = snapshotRepo(repo);
|
|
261
|
+
const inputs = scanInputs(opts);
|
|
273
262
|
const result = await runAllAnalyzers(repo, { reliabilityRuns: opts.reliabilityRuns });
|
|
274
263
|
// Ledger mode is invasive (it boots the app and probes live endpoints), so it
|
|
275
264
|
// never runs unless explicitly requested via `--ledger`.
|
|
@@ -281,6 +270,10 @@ export async function runScan(repo, opts = {}) {
|
|
|
281
270
|
stampFindings(result);
|
|
282
271
|
const { clusters } = correlate(repo, result);
|
|
283
272
|
result.clusters = clusters;
|
|
273
|
+
const after = snapshotRepo(repo);
|
|
274
|
+
if (before && after && before.digest === after.digest && inputs === scanInputs(opts) && !opts.ledger) {
|
|
275
|
+
result.cache = { schema: 1, inputs, snapshot: after };
|
|
276
|
+
}
|
|
284
277
|
const { file } = persistScan(repo, result);
|
|
285
278
|
return { result, file };
|
|
286
279
|
}
|
|
@@ -311,7 +304,7 @@ export const scan = new Command("scan")
|
|
|
311
304
|
"idempotency. Never runs unless --ledger is passed.")
|
|
312
305
|
.option("--json", "print the raw scan result as JSON instead of the boxed report")
|
|
313
306
|
.option("--reuse", "token-economy: if the working tree is unchanged since the last scan, return the sealed " +
|
|
314
|
-
"baseline instead of re-running
|
|
307
|
+
"baseline after content/option/seal checks instead of re-running analyzers.")
|
|
315
308
|
.option("--reliability-runs <n>", "how many sequential times the test suite runs for flaky detection (default 2; " +
|
|
316
309
|
"1 disables flaky detection, >2 costs an extra full suite run each)", "2")
|
|
317
310
|
.action(async (repoArg, options) => {
|
|
@@ -323,7 +316,7 @@ export const scan = new Command("scan")
|
|
|
323
316
|
}
|
|
324
317
|
// --reuse: unchanged tree → sealed baseline comes back in zero time.
|
|
325
318
|
if (options.reuse) {
|
|
326
|
-
const reused = reuseScan(repo);
|
|
319
|
+
const reused = reuseScan(repo, { ledger: options.ledger, reliabilityRuns });
|
|
327
320
|
if (reused) {
|
|
328
321
|
if (options.json) {
|
|
329
322
|
console.log(JSON.stringify(reused, null, 2));
|
|
@@ -359,6 +352,8 @@ export const scan = new Command("scan")
|
|
|
359
352
|
throw err;
|
|
360
353
|
}
|
|
361
354
|
}
|
|
355
|
+
if (options.ledger && result.ledger?.status !== "ok")
|
|
356
|
+
process.exitCode = 2;
|
|
362
357
|
if (options.json) {
|
|
363
358
|
console.log(JSON.stringify(result, null, 2));
|
|
364
359
|
return;
|
|
@@ -369,4 +364,7 @@ export const scan = new Command("scan")
|
|
|
369
364
|
// Pure-CLI users get the sticky-loop card too — no agent required.
|
|
370
365
|
await printNextCard(repo);
|
|
371
366
|
});
|
|
367
|
+
export function runScan(...args) {
|
|
368
|
+
return candidateRun(args[0], () => runScanImpl(...args));
|
|
369
|
+
}
|
|
372
370
|
//# sourceMappingURL=scan.js.map
|