critical-gate 2.3.0 → 2.4.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/README.md +44 -35
- package/dist/agent-onboarding/agent-instructions.d.ts +21 -0
- package/dist/agent-onboarding/agent-instructions.d.ts.map +1 -0
- package/dist/agent-onboarding/agent-instructions.js +67 -0
- package/dist/agent-onboarding/agent-instructions.js.map +1 -0
- package/dist/agent-onboarding/index.d.ts +2 -0
- package/dist/agent-onboarding/index.d.ts.map +1 -0
- package/dist/agent-onboarding/index.js +2 -0
- package/dist/agent-onboarding/index.js.map +1 -0
- package/dist/cli/args.d.ts +57 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +209 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/commands.d.ts +8 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +170 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/entrypoint.d.ts +2 -0
- package/dist/cli/entrypoint.d.ts.map +1 -0
- package/dist/cli/entrypoint.js +18 -0
- package/dist/cli/entrypoint.js.map +1 -0
- package/dist/cli/git-hooks.d.ts +2 -0
- package/dist/cli/git-hooks.d.ts.map +1 -0
- package/dist/cli/git-hooks.js +31 -0
- package/dist/cli/git-hooks.js.map +1 -0
- package/dist/cli/help.d.ts +4 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +151 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/io.d.ts +3 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +16 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +76 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/result.d.ts +4 -0
- package/dist/cli/result.d.ts.map +1 -0
- package/dist/cli/result.js +107 -0
- package/dist/cli/result.js.map +1 -0
- package/dist/cli/types.d.ts +30 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +7 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli.d.ts +5 -18
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -681
- package/dist/cli.js.map +1 -1
- package/dist/config/critical-gate-config.d.ts +4 -0
- package/dist/config/critical-gate-config.d.ts.map +1 -1
- package/dist/config/critical-gate-config.js +18 -1
- package/dist/config/critical-gate-config.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/detectors/api-surface-detector.d.ts.map +1 -1
- package/dist/detectors/api-surface-detector.js +56 -9
- package/dist/detectors/api-surface-detector.js.map +1 -1
- package/dist/detectors/intent-verification-detector.d.ts.map +1 -1
- package/dist/detectors/intent-verification-detector.js +31 -1
- package/dist/detectors/intent-verification-detector.js.map +1 -1
- package/dist/detectors/runner.d.ts +1 -0
- package/dist/detectors/runner.d.ts.map +1 -1
- package/dist/detectors/runner.js +21 -0
- package/dist/detectors/runner.js.map +1 -1
- package/dist/detectors/scope-detector.d.ts.map +1 -1
- package/dist/detectors/scope-detector.js +24 -7
- package/dist/detectors/scope-detector.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +1 -1
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +1 -1
- package/dist/intent/index.js.map +1 -1
- package/dist/intent/intent-model.d.ts +3 -0
- package/dist/intent/intent-model.d.ts.map +1 -1
- package/dist/intent/intent-model.js +49 -1
- package/dist/intent/intent-model.js.map +1 -1
- package/dist/intent/observed-actions.d.ts.map +1 -1
- package/dist/intent/observed-actions.js +45 -2
- package/dist/intent/observed-actions.js.map +1 -1
- package/dist/llm/artifact.js +8 -8
- package/dist/llm/artifact.js.map +1 -1
- package/dist/reporters/markdown-reporter.d.ts.map +1 -1
- package/dist/reporters/markdown-reporter.js +36 -2
- package/dist/reporters/markdown-reporter.js.map +1 -1
- package/dist/reporters/pr-comment-reporter.d.ts.map +1 -1
- package/dist/reporters/pr-comment-reporter.js +25 -4
- package/dist/reporters/pr-comment-reporter.js.map +1 -1
- package/dist/reporters/sarif-reporter.d.ts.map +1 -1
- package/dist/reporters/sarif-reporter.js +2 -0
- package/dist/reporters/sarif-reporter.js.map +1 -1
- package/dist/repository/api-snapshot.d.ts +12 -1
- package/dist/repository/api-snapshot.d.ts.map +1 -1
- package/dist/repository/api-snapshot.js +85 -22
- package/dist/repository/api-snapshot.js.map +1 -1
- package/dist/repository/index.d.ts +2 -1
- package/dist/repository/index.d.ts.map +1 -1
- package/dist/repository/index.js +2 -1
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/token-index.d.ts +9 -0
- package/dist/repository/token-index.d.ts.map +1 -0
- package/dist/repository/token-index.js +143 -0
- package/dist/repository/token-index.js.map +1 -0
- package/dist/schema/gate-result.schema.d.ts +191 -0
- package/dist/schema/gate-result.schema.d.ts.map +1 -1
- package/dist/schema/gate-result.schema.js +97 -2
- package/dist/schema/gate-result.schema.js.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/types.d.ts +44 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +7 -3
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { CRITICAL_GATE_CONFIG_FILE, buildApiSurfaceSnapshot, createDefaultPolicyConfig, getApiSnapshotOutputPath, getConfiguredPublicApiEntrypoints, initAgentInstructions, loadCriticalGateConfig, updateCriticalGateConfig } from "../index.js";
|
|
3
|
+
import { parseFlagArgs, parseInitAgentArgs, parseInitPolicyArgs, parseInstallHooksArgs, parseSnapshotApiArgs } from "./args.js";
|
|
4
|
+
import { renderGitHookScript } from "./git-hooks.js";
|
|
5
|
+
import { ExitCode } from "./types.js";
|
|
6
|
+
export function runSnapshotApiCommand(args, io) {
|
|
7
|
+
const parsed = parseSnapshotApiArgs(args);
|
|
8
|
+
if (!parsed.ok) {
|
|
9
|
+
io.stderr(parsed.error);
|
|
10
|
+
io.stderr("Run critical-gate snapshot-api --help for usage.");
|
|
11
|
+
return ExitCode.UsageError;
|
|
12
|
+
}
|
|
13
|
+
const root = io.readDiff().root;
|
|
14
|
+
const configResult = loadCriticalGateConfig(root, {
|
|
15
|
+
exists: io.exists,
|
|
16
|
+
readFile: io.readFile
|
|
17
|
+
});
|
|
18
|
+
const snapshot = buildApiSurfaceSnapshot({
|
|
19
|
+
root,
|
|
20
|
+
generatedAt: io.now(),
|
|
21
|
+
entrypoints: parsed.options.entrypoints,
|
|
22
|
+
policyEntrypoints: getConfiguredPublicApiEntrypoints(configResult.config),
|
|
23
|
+
reader: io
|
|
24
|
+
});
|
|
25
|
+
const outputPath = getApiSnapshotOutputPath(root, parsed.options.output);
|
|
26
|
+
io.writeFile(outputPath, `${JSON.stringify(snapshot, null, 2)}\n`);
|
|
27
|
+
io.stdout(`Wrote public API snapshot to ${outputPath} (${snapshot.exports.length} exports across ${snapshot.entrypoints.length} entrypoints).`);
|
|
28
|
+
return ExitCode.Pass;
|
|
29
|
+
}
|
|
30
|
+
export function runInstallHooksCommand(args, io) {
|
|
31
|
+
const parsed = parseInstallHooksArgs(args);
|
|
32
|
+
if (!parsed.ok) {
|
|
33
|
+
io.stderr(parsed.error);
|
|
34
|
+
io.stderr("Run critical-gate install-hooks --help for usage.");
|
|
35
|
+
return ExitCode.UsageError;
|
|
36
|
+
}
|
|
37
|
+
const root = io.readDiff().root;
|
|
38
|
+
const hooks = parsed.options.hook === "all" ? ["pre-commit", "pre-push"] : [parsed.options.hook];
|
|
39
|
+
const installed = [];
|
|
40
|
+
for (const hook of hooks) {
|
|
41
|
+
const path = join(root, ".git", "hooks", hook);
|
|
42
|
+
if (io.exists?.(path) === true && parsed.options.force !== true) {
|
|
43
|
+
io.stderr(`Refusing to overwrite existing ${hook} hook at ${path}. Re-run with --force.`);
|
|
44
|
+
return ExitCode.UsageError;
|
|
45
|
+
}
|
|
46
|
+
io.writeFile(path, renderGitHookScript(hook, parsed.options.cli));
|
|
47
|
+
io.chmodFile?.(path, 0o755);
|
|
48
|
+
installed.push(path);
|
|
49
|
+
}
|
|
50
|
+
io.stdout(`Installed Critical Gate hook(s): ${installed.join(", ")}`);
|
|
51
|
+
return ExitCode.Pass;
|
|
52
|
+
}
|
|
53
|
+
export function runInitPolicyCommand(args, io) {
|
|
54
|
+
const parsed = parseInitPolicyArgs(args);
|
|
55
|
+
if (!parsed.ok) {
|
|
56
|
+
io.stderr(parsed.error);
|
|
57
|
+
io.stderr("Run critical-gate init-policy --help for usage.");
|
|
58
|
+
return ExitCode.UsageError;
|
|
59
|
+
}
|
|
60
|
+
const root = io.readDiff().root;
|
|
61
|
+
const path = join(root, CRITICAL_GATE_CONFIG_FILE);
|
|
62
|
+
if (io.exists?.(path) === true && parsed.options.force !== true) {
|
|
63
|
+
io.stderr(`Refusing to overwrite existing ${CRITICAL_GATE_CONFIG_FILE}. Re-run with --force.`);
|
|
64
|
+
return ExitCode.UsageError;
|
|
65
|
+
}
|
|
66
|
+
io.writeFile(path, `${JSON.stringify(createDefaultPolicyConfig(io.now()), null, 2)}\n`);
|
|
67
|
+
io.stdout(`Wrote reviewable Critical Gate policy to ${path}.`);
|
|
68
|
+
return ExitCode.Pass;
|
|
69
|
+
}
|
|
70
|
+
export function runInitAgentCommand(args, io) {
|
|
71
|
+
const parsed = parseInitAgentArgs(args);
|
|
72
|
+
if (!parsed.ok) {
|
|
73
|
+
io.stderr(parsed.error);
|
|
74
|
+
io.stderr("Run critical-gate init-agent --help for usage.");
|
|
75
|
+
return ExitCode.UsageError;
|
|
76
|
+
}
|
|
77
|
+
const root = io.readDiff().root;
|
|
78
|
+
const result = initAgentInstructions({
|
|
79
|
+
root,
|
|
80
|
+
cliCommand: parsed.options.cli,
|
|
81
|
+
io
|
|
82
|
+
});
|
|
83
|
+
if (result.updated) {
|
|
84
|
+
io.stdout(`${result.created ? "Created" : "Updated"} ${result.path} with Critical Gate agent instructions.`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
io.stdout(`${result.path} already contains the current Critical Gate agent instructions.`);
|
|
88
|
+
}
|
|
89
|
+
return ExitCode.Pass;
|
|
90
|
+
}
|
|
91
|
+
export function runAcceptCommand(args, io) {
|
|
92
|
+
const parsed = parseFlagArgs(args, ["--finding", "--reason"]);
|
|
93
|
+
if (!parsed.ok) {
|
|
94
|
+
io.stderr(parsed.error);
|
|
95
|
+
io.stderr("Run critical-gate accept --help for usage.");
|
|
96
|
+
return ExitCode.UsageError;
|
|
97
|
+
}
|
|
98
|
+
const finding = parsed.values["--finding"];
|
|
99
|
+
const reason = parsed.values["--reason"];
|
|
100
|
+
if (finding === undefined || reason === undefined) {
|
|
101
|
+
io.stderr("Missing required --finding or --reason value.");
|
|
102
|
+
io.stderr("Run critical-gate accept --help for usage.");
|
|
103
|
+
return ExitCode.UsageError;
|
|
104
|
+
}
|
|
105
|
+
const root = io.readDiff().root;
|
|
106
|
+
const updated = updateCriticalGateConfig(root, (config) => ({
|
|
107
|
+
...config,
|
|
108
|
+
learning: {
|
|
109
|
+
...config.learning,
|
|
110
|
+
acceptedFindings: upsertById(config.learning?.acceptedFindings ?? [], {
|
|
111
|
+
id: finding,
|
|
112
|
+
reason,
|
|
113
|
+
createdAt: io.now().toISOString()
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
}), {
|
|
117
|
+
exists: io.exists,
|
|
118
|
+
readFile: io.readFile,
|
|
119
|
+
writeFile: io.writeFile
|
|
120
|
+
});
|
|
121
|
+
io.stdout(`Accepted finding ${finding} in ${CRITICAL_GATE_CONFIG_FILE} (${updated.learning?.acceptedFindings?.length ?? 0} accepted finding rules).`);
|
|
122
|
+
return ExitCode.Pass;
|
|
123
|
+
}
|
|
124
|
+
export function runTeachCommand(args, io) {
|
|
125
|
+
const parsed = parseFlagArgs(args, ["--id", "--when-changed", "--allow", "--reason"]);
|
|
126
|
+
if (!parsed.ok) {
|
|
127
|
+
io.stderr(parsed.error);
|
|
128
|
+
io.stderr("Run critical-gate teach --help for usage.");
|
|
129
|
+
return ExitCode.UsageError;
|
|
130
|
+
}
|
|
131
|
+
const id = parsed.values["--id"];
|
|
132
|
+
const whenChanged = parsed.values["--when-changed"];
|
|
133
|
+
const allow = parsed.values["--allow"]
|
|
134
|
+
?.split(",")
|
|
135
|
+
.map((entry) => entry.trim())
|
|
136
|
+
.filter(Boolean);
|
|
137
|
+
const reason = parsed.values["--reason"];
|
|
138
|
+
if (id === undefined ||
|
|
139
|
+
whenChanged === undefined ||
|
|
140
|
+
allow === undefined ||
|
|
141
|
+
reason === undefined) {
|
|
142
|
+
io.stderr("Missing required --id, --when-changed, --allow, or --reason value.");
|
|
143
|
+
io.stderr("Run critical-gate teach --help for usage.");
|
|
144
|
+
return ExitCode.UsageError;
|
|
145
|
+
}
|
|
146
|
+
const root = io.readDiff().root;
|
|
147
|
+
const updated = updateCriticalGateConfig(root, (config) => ({
|
|
148
|
+
...config,
|
|
149
|
+
learning: {
|
|
150
|
+
...config.learning,
|
|
151
|
+
expectedSupportFiles: upsertById(config.learning?.expectedSupportFiles ?? [], {
|
|
152
|
+
id,
|
|
153
|
+
whenChanged,
|
|
154
|
+
allow,
|
|
155
|
+
reason,
|
|
156
|
+
createdAt: io.now().toISOString()
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
}), {
|
|
160
|
+
exists: io.exists,
|
|
161
|
+
readFile: io.readFile,
|
|
162
|
+
writeFile: io.writeFile
|
|
163
|
+
});
|
|
164
|
+
io.stdout(`Taught expected support rule ${id} in ${CRITICAL_GATE_CONFIG_FILE} (${updated.learning?.expectedSupportFiles?.length ?? 0} support rules).`);
|
|
165
|
+
return ExitCode.Pass;
|
|
166
|
+
}
|
|
167
|
+
function upsertById(entries, next) {
|
|
168
|
+
return [...entries.filter((entry) => entry.id !== next.id), next];
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/cli/entrypoint.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,SAAkB,GAAG,OAAO,CAK1F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
export function isCliEntrypoint(importMetaUrl, argvPath = process.argv[1]) {
|
|
5
|
+
return (argvPath !== undefined &&
|
|
6
|
+
normalizeExecutablePath(fileURLToPath(importMetaUrl)) === normalizeExecutablePath(argvPath));
|
|
7
|
+
}
|
|
8
|
+
function normalizeExecutablePath(path) {
|
|
9
|
+
let normalized = resolve(path);
|
|
10
|
+
try {
|
|
11
|
+
normalized = realpathSync.native(normalized);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Fall back to the resolved path when the target is virtual or has already been removed.
|
|
15
|
+
}
|
|
16
|
+
return process.platform === "win32" ? normalized.toLowerCase() : normalized;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=entrypoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoint.js","sourceRoot":"","sources":["../../src/cli/entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,eAAe,CAAC,aAAqB,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,OAAO,CACL,QAAQ,KAAK,SAAS;QACtB,uBAAuB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,uBAAuB,CAAC,QAAQ,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,yFAAyF;IAC3F,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-hooks.d.ts","sourceRoot":"","sources":["../../src/cli/git-hooks.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAyB/F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function renderGitHookScript(hook, cliCommand) {
|
|
2
|
+
const quotedCli = shellQuote(cliCommand);
|
|
3
|
+
if (hook === "pre-commit") {
|
|
4
|
+
return [
|
|
5
|
+
"#!/bin/sh",
|
|
6
|
+
"# Critical Gate pre-commit hook.",
|
|
7
|
+
"# Generated by `critical-gate install-hooks`; review before trusting.",
|
|
8
|
+
"set -eu",
|
|
9
|
+
'TASK="${CRITICAL_GATE_TASK:-Pre-commit staged change}"',
|
|
10
|
+
`${quotedCli} check --staged --task "$TASK" --format repair --fail-on blocker`,
|
|
11
|
+
""
|
|
12
|
+
].join("\n");
|
|
13
|
+
}
|
|
14
|
+
return [
|
|
15
|
+
"#!/bin/sh",
|
|
16
|
+
"# Critical Gate pre-push hook.",
|
|
17
|
+
"# Generated by `critical-gate install-hooks`; review before trusting.",
|
|
18
|
+
"set -eu",
|
|
19
|
+
'TASK="${CRITICAL_GATE_TASK:-Pre-push branch change}"',
|
|
20
|
+
'BASE="${CRITICAL_GATE_BASE:-origin/main}"',
|
|
21
|
+
`${quotedCli} check --base "$BASE" --task "$TASK" --format repair --fail-on high`,
|
|
22
|
+
""
|
|
23
|
+
].join("\n");
|
|
24
|
+
}
|
|
25
|
+
function shellQuote(value) {
|
|
26
|
+
if (/^[A-Za-z0-9_./:-]+$/.test(value)) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=git-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-hooks.js","sourceRoot":"","sources":["../../src/cli/git-hooks.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAA+B,EAAE,UAAkB;IACrF,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO;YACL,WAAW;YACX,kCAAkC;YAClC,uEAAuE;YACvE,SAAS;YACT,wDAAwD;YACxD,GAAG,SAAS,kEAAkE;YAC9E,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,OAAO;QACL,WAAW;QACX,gCAAgC;QAChC,uEAAuE;QACvE,SAAS;QACT,sDAAsD;QACtD,2CAA2C;QAC3C,GAAG,SAAS,qEAAqE;QACjF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type CommandName = "check" | "hook" | "accept" | "teach" | "snapshot-api" | "install-hooks" | "init-policy" | "init-agent";
|
|
2
|
+
export declare function getHelpText(): string;
|
|
3
|
+
export declare function getCommandHelpText(command: CommandName): string;
|
|
4
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,MAAM,GACN,QAAQ,GACR,OAAO,GACP,cAAc,GACd,eAAe,GACf,aAAa,GACb,YAAY,CAAC;AAEjB,wBAAgB,WAAW,IAAI,MAAM,CAiBpC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA8B/D"}
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { CRITICAL_GATE_CONFIG_FILE } from "../config/index.js";
|
|
2
|
+
export function getHelpText() {
|
|
3
|
+
return [
|
|
4
|
+
"critical-gate",
|
|
5
|
+
"",
|
|
6
|
+
"Usage:",
|
|
7
|
+
" critical-gate check --task <text> [--base <ref>] [--format json|markdown|sarif|repair|pr-comment] [--strict] [--output <path>]",
|
|
8
|
+
" critical-gate hook [--task <text>] [--base <ref>] [--output <path>]",
|
|
9
|
+
" critical-gate accept --finding <id> --reason <text>",
|
|
10
|
+
" critical-gate teach --id <id> --when-changed <glob> --allow <glob[,glob]> --reason <text>",
|
|
11
|
+
" critical-gate snapshot-api [--entrypoint <path>] [--output <path>]",
|
|
12
|
+
" critical-gate install-hooks [--hook pre-commit|pre-push|all] [--cli <command>] [--force]",
|
|
13
|
+
" critical-gate init-policy [--force]",
|
|
14
|
+
" critical-gate init-agent [--cli <command>]",
|
|
15
|
+
" critical-gate --version",
|
|
16
|
+
" critical-gate --help",
|
|
17
|
+
""
|
|
18
|
+
].join("\n");
|
|
19
|
+
}
|
|
20
|
+
export function getCommandHelpText(command) {
|
|
21
|
+
if (command === "hook") {
|
|
22
|
+
return getHookHelpText();
|
|
23
|
+
}
|
|
24
|
+
if (command === "accept") {
|
|
25
|
+
return getAcceptHelpText();
|
|
26
|
+
}
|
|
27
|
+
if (command === "teach") {
|
|
28
|
+
return getTeachHelpText();
|
|
29
|
+
}
|
|
30
|
+
if (command === "snapshot-api") {
|
|
31
|
+
return getSnapshotApiHelpText();
|
|
32
|
+
}
|
|
33
|
+
if (command === "install-hooks") {
|
|
34
|
+
return getInstallHooksHelpText();
|
|
35
|
+
}
|
|
36
|
+
if (command === "init-policy") {
|
|
37
|
+
return getInitPolicyHelpText();
|
|
38
|
+
}
|
|
39
|
+
if (command === "init-agent") {
|
|
40
|
+
return getInitAgentHelpText();
|
|
41
|
+
}
|
|
42
|
+
return getCheckHelpText();
|
|
43
|
+
}
|
|
44
|
+
function getCheckHelpText() {
|
|
45
|
+
return [
|
|
46
|
+
"critical-gate check",
|
|
47
|
+
"",
|
|
48
|
+
"Required:",
|
|
49
|
+
" --task <text> Task intent, issue summary, or prompt",
|
|
50
|
+
"",
|
|
51
|
+
"Options:",
|
|
52
|
+
" --base <ref> Git baseline reference",
|
|
53
|
+
" --format <format> json, markdown, sarif, repair, or pr-comment",
|
|
54
|
+
" --fail-on <level> blocker, high, or medium; defaults to high",
|
|
55
|
+
" --staged Analyze staged changes with git diff --cached",
|
|
56
|
+
" --strict Fail on strict-mode findings once detectors exist",
|
|
57
|
+
" --output <path> Write report to a file instead of stdout",
|
|
58
|
+
""
|
|
59
|
+
].join("\n");
|
|
60
|
+
}
|
|
61
|
+
function getHookHelpText() {
|
|
62
|
+
return [
|
|
63
|
+
"critical-gate hook",
|
|
64
|
+
"",
|
|
65
|
+
"Options:",
|
|
66
|
+
" --task <text> Optional task intent; defaults to Codex completed feature implementation",
|
|
67
|
+
" --base <ref> Git baseline reference",
|
|
68
|
+
" --output <path> Write compact repair report to a file instead of stdout",
|
|
69
|
+
""
|
|
70
|
+
].join("\n");
|
|
71
|
+
}
|
|
72
|
+
function getAcceptHelpText() {
|
|
73
|
+
return [
|
|
74
|
+
"critical-gate accept",
|
|
75
|
+
"",
|
|
76
|
+
"Records an explicit accepted finding in .critical-gate.json.",
|
|
77
|
+
"",
|
|
78
|
+
"Required:",
|
|
79
|
+
" --finding <id> Exact finding id to accept",
|
|
80
|
+
" --reason <text> Reviewable reason for accepting the finding",
|
|
81
|
+
""
|
|
82
|
+
].join("\n");
|
|
83
|
+
}
|
|
84
|
+
function getTeachHelpText() {
|
|
85
|
+
return [
|
|
86
|
+
"critical-gate teach",
|
|
87
|
+
"",
|
|
88
|
+
"Records a repository-specific expected support-file rule in .critical-gate.json.",
|
|
89
|
+
"",
|
|
90
|
+
"Required:",
|
|
91
|
+
" --id <id> Stable rule id",
|
|
92
|
+
" --when-changed <glob> Changed file glob that activates the rule",
|
|
93
|
+
" --allow <glob[,glob]> Support-file glob or comma-separated globs to allow",
|
|
94
|
+
" --reason <text> Reviewable reason for the rule",
|
|
95
|
+
""
|
|
96
|
+
].join("\n");
|
|
97
|
+
}
|
|
98
|
+
function getSnapshotApiHelpText() {
|
|
99
|
+
return [
|
|
100
|
+
"critical-gate snapshot-api",
|
|
101
|
+
"",
|
|
102
|
+
"Generates a reviewable public API surface snapshot.",
|
|
103
|
+
"",
|
|
104
|
+
"Options:",
|
|
105
|
+
" --entrypoint <path> Public entrypoint to snapshot; may be passed more than once",
|
|
106
|
+
" --output <path> Snapshot path; defaults to .critical-gate/api-surface.json",
|
|
107
|
+
""
|
|
108
|
+
].join("\n");
|
|
109
|
+
}
|
|
110
|
+
function getInstallHooksHelpText() {
|
|
111
|
+
return [
|
|
112
|
+
"critical-gate install-hooks",
|
|
113
|
+
"",
|
|
114
|
+
"Installs reviewable local git hooks.",
|
|
115
|
+
"",
|
|
116
|
+
"Options:",
|
|
117
|
+
" --hook <hook> pre-commit, pre-push, or all; defaults to all",
|
|
118
|
+
" --cli <command> Critical Gate command/path used by the hook; defaults to critical-gate",
|
|
119
|
+
" --force Overwrite an existing generated or custom hook",
|
|
120
|
+
"",
|
|
121
|
+
"Defaults:",
|
|
122
|
+
" pre-commit runs staged changes with --fail-on blocker.",
|
|
123
|
+
" pre-push runs branch changes against ${CRITICAL_GATE_BASE:-origin/main} with --fail-on high.",
|
|
124
|
+
""
|
|
125
|
+
].join("\n");
|
|
126
|
+
}
|
|
127
|
+
function getInitPolicyHelpText() {
|
|
128
|
+
return [
|
|
129
|
+
"critical-gate init-policy",
|
|
130
|
+
"",
|
|
131
|
+
`Writes a starter ${CRITICAL_GATE_CONFIG_FILE} policy file.`,
|
|
132
|
+
"",
|
|
133
|
+
"Options:",
|
|
134
|
+
" --force Overwrite an existing policy file",
|
|
135
|
+
""
|
|
136
|
+
].join("\n");
|
|
137
|
+
}
|
|
138
|
+
function getInitAgentHelpText() {
|
|
139
|
+
return [
|
|
140
|
+
"critical-gate init-agent",
|
|
141
|
+
"",
|
|
142
|
+
"Creates or updates the managed Critical Gate section in AGENTS.md.",
|
|
143
|
+
"",
|
|
144
|
+
"Options:",
|
|
145
|
+
" --cli <command> Critical Gate command/path agents should run; defaults to npx critical-gate",
|
|
146
|
+
"",
|
|
147
|
+
"The command preserves existing AGENTS.md content and replaces only the managed Critical Gate block.",
|
|
148
|
+
""
|
|
149
|
+
].join("\n");
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/io.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/cli/io.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,SAAS,EAAE,KAYvB,CAAC"}
|
package/dist/cli/io.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { getApiSnapshotOutputDirectory, readGitDiff } from "../index.js";
|
|
3
|
+
export const defaultIo = {
|
|
4
|
+
stdout: (message) => console.log(message),
|
|
5
|
+
stderr: (message) => console.error(message),
|
|
6
|
+
writeFile: (path, content) => {
|
|
7
|
+
mkdirSync(getApiSnapshotOutputDirectory(path), { recursive: true });
|
|
8
|
+
writeFileSync(path, content, "utf8");
|
|
9
|
+
},
|
|
10
|
+
now: () => new Date(),
|
|
11
|
+
exists: (path) => existsSync(path),
|
|
12
|
+
readFile: (path) => readFileSync(path, "utf8"),
|
|
13
|
+
chmodFile: (path, mode) => chmodSync(path, mode),
|
|
14
|
+
readDiff: (baseRef, options) => readGitDiff({ baseRef, staged: options?.staged })
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/cli/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExF,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzE,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACzC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAC3C,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QAC3B,SAAS,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;CAClF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,WAAW,UAAwB,CAAC;AAEjD,wBAAgB,IAAI,CAAC,IAAI,WAAwB,EAAE,EAAE,QAAY,GAAG,QAAQ,CAQ3E"}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { renderReport } from "../index.js";
|
|
2
|
+
import { CRITICAL_GATE_VERSION } from "../version.js";
|
|
3
|
+
import { parseCheckArgs, isCommandName } from "./args.js";
|
|
4
|
+
import { runAcceptCommand, runInitAgentCommand, runInitPolicyCommand, runInstallHooksCommand, runSnapshotApiCommand, runTeachCommand } from "./commands.js";
|
|
5
|
+
import { getCommandHelpText, getHelpText } from "./help.js";
|
|
6
|
+
import { defaultIo } from "./io.js";
|
|
7
|
+
import { createGateResult } from "./result.js";
|
|
8
|
+
import { ExitCode } from "./types.js";
|
|
9
|
+
export const CLI_VERSION = CRITICAL_GATE_VERSION;
|
|
10
|
+
export function main(argv = process.argv.slice(2), io = defaultIo) {
|
|
11
|
+
try {
|
|
12
|
+
return runCli(argv, io);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const message = error instanceof Error ? error.message : "Unknown internal error";
|
|
16
|
+
io.stderr(`critical-gate: ${message}`);
|
|
17
|
+
return ExitCode.InternalError;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function runCli(argv, io) {
|
|
21
|
+
if (argv.includes("--version")) {
|
|
22
|
+
io.stdout(`critical-gate ${CLI_VERSION}`);
|
|
23
|
+
return ExitCode.Pass;
|
|
24
|
+
}
|
|
25
|
+
if (argv[0] === "--help" || argv[0] === "-h") {
|
|
26
|
+
io.stdout(getHelpText());
|
|
27
|
+
return ExitCode.Pass;
|
|
28
|
+
}
|
|
29
|
+
const [command = "check", ...args] = argv;
|
|
30
|
+
if (!isCommandName(command)) {
|
|
31
|
+
io.stderr(`Unknown command: ${command}`);
|
|
32
|
+
io.stderr("Run critical-gate --help for usage.");
|
|
33
|
+
return ExitCode.UsageError;
|
|
34
|
+
}
|
|
35
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
36
|
+
io.stdout(getCommandHelpText(command));
|
|
37
|
+
return ExitCode.Pass;
|
|
38
|
+
}
|
|
39
|
+
if (command === "accept") {
|
|
40
|
+
return runAcceptCommand(args, io);
|
|
41
|
+
}
|
|
42
|
+
if (command === "teach") {
|
|
43
|
+
return runTeachCommand(args, io);
|
|
44
|
+
}
|
|
45
|
+
if (command === "snapshot-api") {
|
|
46
|
+
return runSnapshotApiCommand(args, io);
|
|
47
|
+
}
|
|
48
|
+
if (command === "install-hooks") {
|
|
49
|
+
return runInstallHooksCommand(args, io);
|
|
50
|
+
}
|
|
51
|
+
if (command === "init-policy") {
|
|
52
|
+
return runInitPolicyCommand(args, io);
|
|
53
|
+
}
|
|
54
|
+
if (command === "init-agent") {
|
|
55
|
+
return runInitAgentCommand(args, io);
|
|
56
|
+
}
|
|
57
|
+
const parsed = parseCheckArgs(args, command);
|
|
58
|
+
if (!parsed.ok) {
|
|
59
|
+
io.stderr(parsed.error);
|
|
60
|
+
io.stderr("Run critical-gate check --help for usage.");
|
|
61
|
+
return ExitCode.UsageError;
|
|
62
|
+
}
|
|
63
|
+
const diff = io.readDiff(parsed.options.base, { staged: parsed.options.staged });
|
|
64
|
+
const result = createGateResult(parsed.options, io.now(), diff, io);
|
|
65
|
+
const rendered = command === "hook"
|
|
66
|
+
? renderReport(result.summary.decision === "pass" ? { ...result, findings: [] } : result, "repair")
|
|
67
|
+
: renderReport(result, parsed.options.format);
|
|
68
|
+
if (parsed.options.output !== undefined) {
|
|
69
|
+
io.writeFile(parsed.options.output, rendered);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
io.stdout(rendered);
|
|
73
|
+
}
|
|
74
|
+
return result.summary.decision === "fail" ? ExitCode.FindingsFailed : ExitCode.Pass;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type GateResult, type GitDiffResult } from "../index.js";
|
|
2
|
+
import type { CheckOptions, CliIo } from "./types.js";
|
|
3
|
+
export declare function createGateResult(options: CheckOptions, generatedAt: Date, diffResult: GitDiffResult, io?: Pick<CliIo, "exists" | "readFile">): GateResult;
|
|
4
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/cli/result.ts"],"names":[],"mappings":"AAEA,OAAO,EAmBL,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGtD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,IAAI,EACjB,UAAU,EAAE,aAAa,EACzB,EAAE,GAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAM,GAC1C,UAAU,CAiGZ"}
|