@kiwidata/grimoire 0.1.3 → 0.1.5
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/AGENTS.md +56 -4
- package/README.md +107 -59
- package/dist/cli/index.js +7 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/check.js +1 -1
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/configure.d.ts +3 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +19 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +165 -111
- package/dist/core/check.js.map +1 -1
- package/dist/core/ci.d.ts.map +1 -1
- package/dist/core/ci.js +50 -69
- package/dist/core/ci.js.map +1 -1
- package/dist/core/configure.d.ts +14 -0
- package/dist/core/configure.d.ts.map +1 -0
- package/dist/core/configure.js +434 -0
- package/dist/core/configure.js.map +1 -0
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +153 -26
- package/dist/core/detect.js.map +1 -1
- package/dist/core/diff.d.ts.map +1 -1
- package/dist/core/diff.js +62 -93
- package/dist/core/diff.js.map +1 -1
- package/dist/core/doc-style.d.ts +0 -4
- package/dist/core/doc-style.d.ts.map +1 -1
- package/dist/core/doc-style.js +103 -22
- package/dist/core/doc-style.js.map +1 -1
- package/dist/core/docs.js +202 -170
- package/dist/core/docs.js.map +1 -1
- package/dist/core/health.d.ts +6 -0
- package/dist/core/health.d.ts.map +1 -1
- package/dist/core/health.js +133 -96
- package/dist/core/health.js.map +1 -1
- package/dist/core/hooks.d.ts +0 -3
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +11 -16
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/init.d.ts +2 -0
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +230 -406
- package/dist/core/init.js.map +1 -1
- package/dist/core/list.d.ts.map +1 -1
- package/dist/core/list.js +55 -65
- package/dist/core/list.js.map +1 -1
- package/dist/core/risk-register.d.ts +17 -0
- package/dist/core/risk-register.d.ts.map +1 -0
- package/dist/core/risk-register.js +73 -0
- package/dist/core/risk-register.js.map +1 -0
- package/dist/core/shared-setup.d.ts +0 -40
- package/dist/core/shared-setup.d.ts.map +1 -1
- package/dist/core/shared-setup.js +92 -56
- package/dist/core/shared-setup.js.map +1 -1
- package/dist/core/status.d.ts.map +1 -1
- package/dist/core/status.js +42 -52
- package/dist/core/status.js.map +1 -1
- package/dist/core/test-quality.d.ts +0 -8
- package/dist/core/test-quality.d.ts.map +1 -1
- package/dist/core/test-quality.js +24 -30
- package/dist/core/test-quality.js.map +1 -1
- package/dist/core/trace.d.ts.map +1 -1
- package/dist/core/trace.js +67 -75
- package/dist/core/trace.js.map +1 -1
- package/dist/core/update.d.ts.map +1 -1
- package/dist/core/update.js +61 -11
- package/dist/core/update.js.map +1 -1
- package/dist/core/validate.d.ts +1 -4
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +126 -148
- package/dist/core/validate.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +15 -5
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +63 -42
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/fs.d.ts +0 -12
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +0 -12
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/paths.d.ts +0 -6
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +0 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/spawn.d.ts +0 -3
- package/dist/utils/spawn.d.ts.map +1 -1
- package/dist/utils/spawn.js +0 -3
- package/dist/utils/spawn.js.map +1 -1
- package/package.json +1 -1
- package/skills/grimoire-apply/SKILL.md +89 -25
- package/skills/grimoire-audit/SKILL.md +21 -1
- package/skills/grimoire-bug/SKILL.md +48 -9
- package/skills/grimoire-commit/SKILL.md +3 -2
- package/skills/grimoire-design/SKILL.md +259 -0
- package/skills/grimoire-design-consult/SKILL.md +200 -0
- package/skills/grimoire-discover/SKILL.md +139 -109
- package/skills/grimoire-draft/SKILL.md +131 -15
- package/skills/grimoire-plan/SKILL.md +119 -46
- package/skills/grimoire-pr/SKILL.md +7 -10
- package/skills/grimoire-pr-review/SKILL.md +46 -115
- package/skills/grimoire-precommit-review/SKILL.md +205 -0
- package/skills/grimoire-refactor/SKILL.md +6 -6
- package/skills/grimoire-review/SKILL.md +95 -156
- package/skills/grimoire-verify/SKILL.md +40 -7
- package/skills/grimoire-vuln-remediate/SKILL.md +107 -0
- package/skills/grimoire-vuln-triage/SKILL.md +109 -0
- package/skills/references/adversarial-personas.md +225 -0
- package/skills/references/brand-tokens-format.md +186 -0
- package/skills/references/code-quality.md +172 -0
- package/skills/references/container-scan-triage.md +102 -0
- package/skills/references/dependency-vuln-triage.md +236 -0
- package/skills/references/design-heuristics.md +138 -0
- package/skills/references/design-input-formats.md +190 -0
- package/skills/references/pattern-guard.md +180 -0
- package/skills/references/principles.md +82 -0
- package/skills/references/refactor-scan-categories.md +154 -2
- package/skills/references/review-personas.md +406 -0
- package/skills/references/security-compliance.md +22 -1
- package/skills/references/testing-contracts.md +1 -1
- package/skills/references/visual-fidelity.md +206 -0
- package/templates/accepted-risks.yml +47 -0
- package/templates/brand-tokens-example.json +13 -0
- package/templates/brand-voice-example.md +22 -0
- package/templates/constraints.md +25 -0
- package/templates/design-tool-setup-stub.md +59 -0
- package/dist/commands/archive.d.ts +0 -3
- package/dist/commands/archive.d.ts.map +0 -1
- package/dist/commands/archive.js +0 -22
- package/dist/commands/archive.js.map +0 -1
- package/dist/commands/log.d.ts +0 -3
- package/dist/commands/log.d.ts.map +0 -1
- package/dist/commands/log.js +0 -15
- package/dist/commands/log.js.map +0 -1
- package/dist/commands/map.d.ts +0 -3
- package/dist/commands/map.d.ts.map +0 -1
- package/dist/commands/map.js +0 -17
- package/dist/commands/map.js.map +0 -1
- package/dist/core/archive.d.ts +0 -9
- package/dist/core/archive.d.ts.map +0 -1
- package/dist/core/archive.js +0 -92
- package/dist/core/archive.js.map +0 -1
- package/dist/core/log.d.ts +0 -8
- package/dist/core/log.d.ts.map +0 -1
- package/dist/core/log.js +0 -150
- package/dist/core/log.js.map +0 -1
- package/dist/core/map.d.ts +0 -9
- package/dist/core/map.d.ts.map +0 -1
- package/dist/core/map.js +0 -302
- package/dist/core/map.js.map +0 -1
- package/templates/dupignore +0 -93
- package/templates/mapignore +0 -58
- package/templates/mapkeys +0 -65
package/dist/core/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqCD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsB1E"}
|
package/dist/core/check.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import { writeFile, unlink } from "node:fs/promises";
|
|
2
|
-
import { join } from "node:path";
|
|
3
1
|
import { execFile } from "node:child_process";
|
|
4
2
|
import { promisify } from "node:util";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import { randomUUID } from "node:crypto";
|
|
7
3
|
import chalk from "chalk";
|
|
8
4
|
import { simpleGit } from "simple-git";
|
|
9
5
|
import fg from "fast-glob";
|
|
@@ -12,20 +8,16 @@ import { findProjectRoot } from "../utils/paths.js";
|
|
|
12
8
|
import { spawnWithStdin } from "../utils/spawn.js";
|
|
13
9
|
import { analyzeTestQuality, TEST_FILE_GLOBS, TEST_FILE_IGNORE } from "./test-quality.js";
|
|
14
10
|
import { checkDocStyle } from "./doc-style.js";
|
|
11
|
+
import { loadAcceptedRiskIds, partitionAdvisories } from "./risk-register.js";
|
|
12
|
+
// Steps whose tool emits CVE/GHSA advisory ids in its output and can therefore
|
|
13
|
+
// be suppressed by the risk-acceptance register (.grimoire/security/accepted-risks.yml).
|
|
14
|
+
// Only meaningful for advisory-id-emitting scanners (npm audit, pip-audit, osv,
|
|
15
|
+
// trivy, ...); suppression is a no-op for tools whose failures aren't keyed by a
|
|
16
|
+
// CVE/GHSA id, since no ids will match the register.
|
|
17
|
+
const REGISTER_AWARE_STEPS = new Set(["dep_audit", "security"]);
|
|
15
18
|
const execFileAsync = promisify(execFile);
|
|
16
|
-
|
|
17
|
-
const root = await findProjectRoot();
|
|
18
|
-
const config = await loadConfig(root);
|
|
19
|
-
// Determine which steps to run
|
|
20
|
-
let steps = options.steps?.length ? options.steps : config.checks;
|
|
21
|
-
if (options.skip?.length) {
|
|
22
|
-
const skipSet = new Set(options.skip);
|
|
23
|
-
steps = steps.filter((s) => !skipSet.has(s));
|
|
24
|
-
}
|
|
19
|
+
async function runSteps(steps, root, config, options) {
|
|
25
20
|
const results = [];
|
|
26
|
-
if (!options.json) {
|
|
27
|
-
console.log(chalk.bold("\ngrimoire check\n"));
|
|
28
|
-
}
|
|
29
21
|
for (const step of steps) {
|
|
30
22
|
const result = await runStep(step, root, config, options);
|
|
31
23
|
results.push(result);
|
|
@@ -34,40 +26,89 @@ export async function runCheck(options) {
|
|
|
34
26
|
if (result.status === "fail" && !options.continueOnFail)
|
|
35
27
|
break;
|
|
36
28
|
}
|
|
37
|
-
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
function printCheckOutput(options, results, passed, failedCount, skipped, errored) {
|
|
32
|
+
if (options.json) {
|
|
33
|
+
console.log(JSON.stringify({ results, summary: { passed, failed: failedCount, skipped, errored } }, null, 2));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const failStr = failedCount > 0 ? chalk.red(`${failedCount} failed`) : `${failedCount} failed`;
|
|
37
|
+
const errStr = errored > 0 ? `, ${errored} errored` : "";
|
|
38
|
+
console.log(`\n ${chalk.green(`${passed} passed`)}, ${failStr}, ${skipped} skipped${errStr}\n`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export async function runCheck(options) {
|
|
42
|
+
const root = await findProjectRoot();
|
|
43
|
+
const config = await loadConfig(root);
|
|
44
|
+
let steps = options.steps?.length ? options.steps : config.checks;
|
|
45
|
+
if (options.skip?.length) {
|
|
46
|
+
const skipSet = new Set(options.skip);
|
|
47
|
+
steps = steps.filter((s) => !skipSet.has(s));
|
|
48
|
+
}
|
|
49
|
+
if (!options.json)
|
|
50
|
+
console.log(chalk.bold("\ngrimoire check\n"));
|
|
51
|
+
const results = await runSteps(steps, root, config, options);
|
|
38
52
|
const passed = results.filter((r) => r.status === "pass").length;
|
|
39
53
|
const failedCount = results.filter((r) => r.status === "fail").length;
|
|
40
54
|
const skipped = results.filter((r) => r.status === "skip").length;
|
|
41
55
|
const errored = results.filter((r) => r.status === "error").length;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
printCheckOutput(options, results, passed, failedCount, skipped, errored);
|
|
57
|
+
return { results, passed, failed: failedCount, skipped, errored };
|
|
58
|
+
}
|
|
59
|
+
function isBuiltinComplexity(tool) {
|
|
60
|
+
return !tool?.command && !tool?.check_command && tool?.name !== "llm";
|
|
61
|
+
}
|
|
62
|
+
async function runToolStep(step, root, config, options) {
|
|
63
|
+
const tool = config.tools[step] ?? getBuiltinLlmFallback(step);
|
|
64
|
+
if (!tool || (!tool.command && !tool.check_command && tool.name !== "llm")) {
|
|
65
|
+
return { step, status: "skip", duration: 0, output: "", reason: "not configured" };
|
|
47
66
|
}
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
if (tool.name === "llm") {
|
|
68
|
+
return runLlmStep(step, tool.prompt ?? "", config.llm.coding.command, root, options.changed);
|
|
50
69
|
}
|
|
51
|
-
return
|
|
70
|
+
return runShellStep(step, tool.check_command ?? tool.command, root);
|
|
52
71
|
}
|
|
53
72
|
async function runStep(step, root, config, options) {
|
|
54
73
|
if (step === "test_quality")
|
|
55
74
|
return runTestQualityStep(root);
|
|
56
75
|
if (step === "doc_style")
|
|
57
76
|
return runDocStyleStep(root, config);
|
|
58
|
-
|
|
59
|
-
if (step === "complexity" && !config.tools[step]?.command && !config.tools[step]?.check_command) {
|
|
77
|
+
if (step === "complexity" && isBuiltinComplexity(config.tools[step])) {
|
|
60
78
|
return runComplexityStep(root, config);
|
|
61
79
|
}
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
return
|
|
80
|
+
const result = await runToolStep(step, root, config, options);
|
|
81
|
+
if (result.status === "fail" && REGISTER_AWARE_STEPS.has(step)) {
|
|
82
|
+
return applyRiskRegister(result, root);
|
|
65
83
|
}
|
|
66
|
-
|
|
67
|
-
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* For a failed vuln-scan step, suppress advisories that are risk-accepted in
|
|
88
|
+
* .grimoire/security/accepted-risks.yml. If every advisory in the output is an
|
|
89
|
+
* unexpired accepted entry, the step passes (with a note). If some remain
|
|
90
|
+
* unaccepted, it still fails — but annotates which were suppressed vs outstanding.
|
|
91
|
+
*/
|
|
92
|
+
async function applyRiskRegister(result, root) {
|
|
93
|
+
const acceptedIds = await loadAcceptedRiskIds(root, new Date());
|
|
94
|
+
if (acceptedIds.size === 0)
|
|
95
|
+
return result;
|
|
96
|
+
const { suppressed, remaining } = partitionAdvisories(result.output, acceptedIds);
|
|
97
|
+
if (suppressed.length === 0)
|
|
98
|
+
return result; // nothing the register covers
|
|
99
|
+
if (remaining.length > 0) {
|
|
100
|
+
return {
|
|
101
|
+
...result,
|
|
102
|
+
reason: `${suppressed.length} risk-accepted, ${remaining.length} outstanding`,
|
|
103
|
+
output: `${result.output}\n\n[risk-register] ${suppressed.length} suppressed via accepted-risks.yml ` +
|
|
104
|
+
`(${suppressed.join(", ")}); ${remaining.length} still outstanding (${remaining.join(", ")})`,
|
|
105
|
+
};
|
|
68
106
|
}
|
|
69
|
-
|
|
70
|
-
|
|
107
|
+
return {
|
|
108
|
+
...result,
|
|
109
|
+
status: "pass",
|
|
110
|
+
reason: `${suppressed.length} advisory(ies) risk-accepted: ${suppressed.join(", ")}`,
|
|
111
|
+
};
|
|
71
112
|
}
|
|
72
113
|
async function runShellStep(step, command, root) {
|
|
73
114
|
const start = Date.now();
|
|
@@ -87,11 +128,15 @@ async function runShellStep(step, command, root) {
|
|
|
87
128
|
const duration = Date.now() - start;
|
|
88
129
|
if (err && typeof err === "object" && "stdout" in err) {
|
|
89
130
|
const execErr = err;
|
|
131
|
+
const output = (execErr.stdout + execErr.stderr).trim();
|
|
132
|
+
if (output.includes("command not found") || output.includes("No such file or directory")) {
|
|
133
|
+
return { step, status: "skip", duration, output: "", reason: output.split("\n")[0] };
|
|
134
|
+
}
|
|
90
135
|
return {
|
|
91
136
|
step,
|
|
92
137
|
status: "fail",
|
|
93
138
|
duration,
|
|
94
|
-
output
|
|
139
|
+
output,
|
|
95
140
|
};
|
|
96
141
|
}
|
|
97
142
|
return {
|
|
@@ -103,59 +148,54 @@ async function runShellStep(step, command, root) {
|
|
|
103
148
|
};
|
|
104
149
|
}
|
|
105
150
|
}
|
|
151
|
+
async function resolveChangedFiles(root) {
|
|
152
|
+
try {
|
|
153
|
+
const git = simpleGit(root);
|
|
154
|
+
const nameOnly = await git.diff(["--name-only", "HEAD"]);
|
|
155
|
+
const files = nameOnly.trim().split("\n").filter(Boolean);
|
|
156
|
+
if (files.length > 0) {
|
|
157
|
+
const diff = await git.diff(["HEAD", "--", ...files]);
|
|
158
|
+
return { files, diff };
|
|
159
|
+
}
|
|
160
|
+
const stagedNames = await git.diff(["--name-only", "--cached"]);
|
|
161
|
+
const stagedFiles = stagedNames.trim().split("\n").filter(Boolean);
|
|
162
|
+
const diff = await git.diff(["--cached", "--", ...stagedFiles]);
|
|
163
|
+
return { files: stagedFiles, diff };
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return { files: [], diff: "" };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const MAX_DIFF_CHARS = 40_000;
|
|
170
|
+
function buildLlmPrompt(prompt, files, diff) {
|
|
171
|
+
// Strip newlines and backticks from each filename to prevent prompt injection.
|
|
172
|
+
const safeFiles = files.map((f) => `\`${f.replace(/[\n\r`]/g, "")}\``).filter((f) => f.length > 2);
|
|
173
|
+
const fileList = safeFiles.length > 0 ? `\n\nFiles changed:\n${safeFiles.join("\n")}` : "";
|
|
174
|
+
const safeDiff = diff.replace(/`{3,}/g, "```");
|
|
175
|
+
const diffSection = safeDiff
|
|
176
|
+
? `\n\nDiff:\n\`\`\`diff\n${safeDiff.slice(0, MAX_DIFF_CHARS)}\n\`\`\``
|
|
177
|
+
: "";
|
|
178
|
+
return `${prompt}${fileList}${diffSection}\n\nOnly flag issues directly observable in the diff above. Do not infer issues from filenames or speculate about code not shown.\n\nRespond with PASS or FAIL as the very first word on the very first line (no markdown, no asterisks, no extra words on that line). Then explain any issues on subsequent lines.`;
|
|
179
|
+
}
|
|
180
|
+
function parseLlmVerdict(output) {
|
|
181
|
+
const firstLine = output.trim().split("\n").map((l) => l.trim()).find(Boolean)?.toUpperCase() ?? "";
|
|
182
|
+
return /\bPASS\b/.test(firstLine) && !/\bFAIL\b/.test(firstLine);
|
|
183
|
+
}
|
|
106
184
|
async function runLlmStep(step, prompt, llmCommand, root, changedOnly) {
|
|
107
185
|
const start = Date.now();
|
|
108
|
-
// Check if LLM command is available
|
|
109
186
|
try {
|
|
110
187
|
await execFileAsync("which", [llmCommand]);
|
|
111
188
|
}
|
|
112
189
|
catch {
|
|
113
|
-
return {
|
|
114
|
-
step,
|
|
115
|
-
status: "skip",
|
|
116
|
-
duration: Date.now() - start,
|
|
117
|
-
output: "",
|
|
118
|
-
reason: `${llmCommand} not found`,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
// Get changed files
|
|
122
|
-
let files = [];
|
|
123
|
-
if (changedOnly) {
|
|
124
|
-
try {
|
|
125
|
-
const git = simpleGit(root);
|
|
126
|
-
const diffOutput = await git.diff(["--name-only", "HEAD"]);
|
|
127
|
-
files = diffOutput.trim().split("\n").filter(Boolean);
|
|
128
|
-
if (files.length === 0) {
|
|
129
|
-
// Try staged files
|
|
130
|
-
const staged = await git.diff(["--name-only", "--cached"]);
|
|
131
|
-
files = staged.trim().split("\n").filter(Boolean);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// Not a git repo or no changes
|
|
136
|
-
}
|
|
190
|
+
return { step, status: "skip", duration: Date.now() - start, output: "", reason: `${llmCommand} not found` };
|
|
137
191
|
}
|
|
192
|
+
const { files, diff } = changedOnly ? await resolveChangedFiles(root) : { files: [], diff: "" };
|
|
138
193
|
if (changedOnly && files.length === 0) {
|
|
139
|
-
return {
|
|
140
|
-
step,
|
|
141
|
-
status: "pass",
|
|
142
|
-
duration: Date.now() - start,
|
|
143
|
-
output: "No changed files to review.",
|
|
144
|
-
};
|
|
194
|
+
return { step, status: "pass", duration: Date.now() - start, output: "No changed files to review." };
|
|
145
195
|
}
|
|
146
|
-
const fileList = files.length > 0 ? `\n\nFiles to review:\n${files.join("\n")}` : "";
|
|
147
|
-
const fullPrompt = `${prompt}${fileList}\n\nRespond with PASS if no issues found, or FAIL followed by the issues.`;
|
|
148
|
-
const tmpFile = join(tmpdir(), `grimoire-prompt-${randomUUID()}.txt`);
|
|
149
196
|
try {
|
|
150
|
-
await
|
|
151
|
-
|
|
152
|
-
const passed = output.toUpperCase().startsWith("PASS");
|
|
153
|
-
return {
|
|
154
|
-
step,
|
|
155
|
-
status: passed ? "pass" : "fail",
|
|
156
|
-
duration: Date.now() - start,
|
|
157
|
-
output,
|
|
158
|
-
};
|
|
197
|
+
const output = await spawnWithStdin(llmCommand, ["--print"], buildLlmPrompt(prompt, files, diff), root);
|
|
198
|
+
return { step, status: parseLlmVerdict(output) ? "pass" : "fail", duration: Date.now() - start, output };
|
|
159
199
|
}
|
|
160
200
|
catch (err) {
|
|
161
201
|
return {
|
|
@@ -166,9 +206,6 @@ async function runLlmStep(step, prompt, llmCommand, root, changedOnly) {
|
|
|
166
206
|
reason: "LLM command failed",
|
|
167
207
|
};
|
|
168
208
|
}
|
|
169
|
-
finally {
|
|
170
|
-
await unlink(tmpFile).catch(() => { });
|
|
171
|
-
}
|
|
172
209
|
}
|
|
173
210
|
const BUILTIN_LLM_FALLBACKS = {
|
|
174
211
|
security: {
|
|
@@ -213,24 +250,29 @@ Check for: API keys, database connection strings, JWT secrets, private keys, OAu
|
|
|
213
250
|
function getBuiltinLlmFallback(step) {
|
|
214
251
|
return BUILTIN_LLM_FALLBACKS[step];
|
|
215
252
|
}
|
|
253
|
+
const MAX_FAIL_LINES = 30;
|
|
254
|
+
function printFailOutput(output) {
|
|
255
|
+
if (!output)
|
|
256
|
+
return;
|
|
257
|
+
const lines = output.split("\n");
|
|
258
|
+
for (const line of lines.slice(0, MAX_FAIL_LINES)) {
|
|
259
|
+
console.log(` ${chalk.dim("→")} ${line}`);
|
|
260
|
+
}
|
|
261
|
+
if (lines.length > MAX_FAIL_LINES) {
|
|
262
|
+
console.log(chalk.dim(" ... (truncated)"));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
216
265
|
function printStepResult(result) {
|
|
217
266
|
const duration = `(${(result.duration / 1000).toFixed(1)}s)`;
|
|
218
267
|
const stepName = result.step.padEnd(16);
|
|
219
268
|
switch (result.status) {
|
|
220
269
|
case "pass":
|
|
221
|
-
console.log(` ${stepName} ${chalk.green("✓ passed")} ${chalk.dim(duration)}`
|
|
270
|
+
console.log(` ${stepName} ${chalk.green("✓ passed")} ${chalk.dim(duration)}` +
|
|
271
|
+
(result.reason ? ` ${chalk.dim(result.reason)}` : ""));
|
|
222
272
|
break;
|
|
223
273
|
case "fail":
|
|
224
274
|
console.log(` ${stepName} ${chalk.red("✗ failed")} ${chalk.dim(duration)}`);
|
|
225
|
-
|
|
226
|
-
const lines = result.output.split("\n").slice(0, 5);
|
|
227
|
-
for (const line of lines) {
|
|
228
|
-
console.log(` ${chalk.dim("→")} ${line}`);
|
|
229
|
-
}
|
|
230
|
-
if (result.output.split("\n").length > 5) {
|
|
231
|
-
console.log(chalk.dim(" ... (truncated)"));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
275
|
+
printFailOutput(result.output);
|
|
234
276
|
break;
|
|
235
277
|
case "skip":
|
|
236
278
|
console.log(` ${stepName} ${chalk.dim("○ skipped")} ${chalk.dim(result.reason ?? "")}`);
|
|
@@ -326,40 +368,52 @@ async function tryEslintComplexity(root) {
|
|
|
326
368
|
await execFileAsync("which", ["npx"]);
|
|
327
369
|
const { stdout, stderr } = await execFileAsync("sh", [
|
|
328
370
|
"-c",
|
|
329
|
-
"npx eslint --
|
|
371
|
+
"npx eslint --rule 'complexity: [warn, 10]' --ext .ts,.tsx,.js,.jsx src/ 2>&1 || true",
|
|
330
372
|
], { cwd: root, timeout: 60_000 });
|
|
331
373
|
const output = (stdout + stderr).trim();
|
|
332
|
-
|
|
374
|
+
// Match ESLint complexity rule output (" complexity" at end of warning line).
|
|
375
|
+
// Avoids false positives from parsing errors or unrelated warnings.
|
|
376
|
+
const hasWarnings = / complexity$/m.test(output);
|
|
333
377
|
return { output, hasWarnings };
|
|
334
378
|
}
|
|
335
379
|
catch {
|
|
336
380
|
return null;
|
|
337
381
|
}
|
|
338
382
|
}
|
|
383
|
+
async function checkPythonComplexity(root, start) {
|
|
384
|
+
const radon = await tryRadon(root);
|
|
385
|
+
if (!radon)
|
|
386
|
+
return null;
|
|
387
|
+
return {
|
|
388
|
+
step: "complexity",
|
|
389
|
+
status: radon.hasHighComplexity ? "fail" : "pass",
|
|
390
|
+
duration: Date.now() - start,
|
|
391
|
+
output: radon.output || "No high-complexity functions found.",
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
async function checkJsComplexity(root, start) {
|
|
395
|
+
const eslint = await tryEslintComplexity(root);
|
|
396
|
+
if (!eslint)
|
|
397
|
+
return null;
|
|
398
|
+
return {
|
|
399
|
+
step: "complexity",
|
|
400
|
+
status: eslint.hasWarnings ? "fail" : "pass",
|
|
401
|
+
duration: Date.now() - start,
|
|
402
|
+
output: eslint.output || "No high-complexity functions found.",
|
|
403
|
+
};
|
|
404
|
+
}
|
|
339
405
|
async function runComplexityStep(root, config) {
|
|
340
406
|
const start = Date.now();
|
|
341
407
|
const lang = config.project.language;
|
|
342
408
|
if (!lang || lang === "python") {
|
|
343
|
-
const
|
|
344
|
-
if (
|
|
345
|
-
return
|
|
346
|
-
step: "complexity",
|
|
347
|
-
status: radon.hasHighComplexity ? "fail" : "pass",
|
|
348
|
-
duration: Date.now() - start,
|
|
349
|
-
output: radon.output || "No high-complexity functions found.",
|
|
350
|
-
};
|
|
351
|
-
}
|
|
409
|
+
const result = await checkPythonComplexity(root, start);
|
|
410
|
+
if (result)
|
|
411
|
+
return result;
|
|
352
412
|
}
|
|
353
413
|
if (!lang || ["typescript", "javascript"].includes(lang ?? "")) {
|
|
354
|
-
const
|
|
355
|
-
if (
|
|
356
|
-
return
|
|
357
|
-
step: "complexity",
|
|
358
|
-
status: eslint.hasWarnings ? "fail" : "pass",
|
|
359
|
-
duration: Date.now() - start,
|
|
360
|
-
output: eslint.output || "No high-complexity functions found.",
|
|
361
|
-
};
|
|
362
|
-
}
|
|
414
|
+
const result = await checkJsComplexity(root, start);
|
|
415
|
+
if (result)
|
|
416
|
+
return result;
|
|
363
417
|
}
|
|
364
418
|
return {
|
|
365
419
|
step: "complexity",
|
package/dist/core/check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ci.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/core/ci.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/core/ci.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAwDD,wBAAsB,KAAK,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+BjE"}
|
package/dist/core/ci.js
CHANGED
|
@@ -6,111 +6,92 @@ import { validateChange } from "./validate.js";
|
|
|
6
6
|
import { runCheck } from "./check.js";
|
|
7
7
|
import { analyzeTestQuality } from "./test-quality.js";
|
|
8
8
|
import { fileExists } from "../utils/fs.js";
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
await generateWorkflow();
|
|
12
|
-
return { validate: { errors: 0, warnings: 0 }, check: { passed: 0, failed: 0, errored: 0 }, testQuality: { critical: 0, warning: 0 }, exitCode: 0 };
|
|
13
|
-
}
|
|
14
|
-
const isGha = options.annotations || !!process.env.GITHUB_ACTIONS;
|
|
15
|
-
if (!isGha) {
|
|
16
|
-
console.log(chalk.bold("\ngrimoire ci\n"));
|
|
17
|
-
}
|
|
18
|
-
// 1. Validate specs
|
|
19
|
-
if (!isGha) {
|
|
9
|
+
async function runValidatePhase(isGha) {
|
|
10
|
+
if (!isGha)
|
|
20
11
|
console.log(chalk.bold("── Validate specs ──\n"));
|
|
21
|
-
}
|
|
22
|
-
const validateResult = await validateChange(undefined, {
|
|
23
|
-
strict: false,
|
|
24
|
-
json: isGha,
|
|
25
|
-
});
|
|
12
|
+
const result = await validateChange(undefined, { strict: false, json: isGha });
|
|
26
13
|
if (isGha) {
|
|
27
|
-
for (const r of
|
|
28
|
-
for (const err of r.errors)
|
|
14
|
+
for (const r of result.results) {
|
|
15
|
+
for (const err of r.errors)
|
|
29
16
|
console.log(`::error file=${escapeGhaProp(r.file)}::${escapeGhaMsg(err)}`);
|
|
30
|
-
|
|
31
|
-
for (const warn of r.warnings) {
|
|
17
|
+
for (const warn of r.warnings)
|
|
32
18
|
console.log(`::warning file=${escapeGhaProp(r.file)}::${escapeGhaMsg(warn)}`);
|
|
33
|
-
}
|
|
34
19
|
}
|
|
35
20
|
}
|
|
36
|
-
|
|
37
|
-
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
async function runChecksPhase(isGha, skip) {
|
|
24
|
+
if (!isGha)
|
|
38
25
|
console.log(chalk.bold("\n── Run checks ──\n"));
|
|
39
|
-
}
|
|
40
|
-
const checkResult = await runCheck({
|
|
41
|
-
continueOnFail: true,
|
|
42
|
-
changed: true,
|
|
43
|
-
skip: options.skip,
|
|
44
|
-
json: isGha,
|
|
45
|
-
});
|
|
26
|
+
const result = await runCheck({ continueOnFail: true, changed: true, skip, json: isGha });
|
|
46
27
|
if (isGha) {
|
|
47
|
-
for (const r of
|
|
48
|
-
if (r.status === "fail")
|
|
28
|
+
for (const r of result.results) {
|
|
29
|
+
if (r.status === "fail")
|
|
49
30
|
console.log(`::error title=${escapeGhaProp(r.step)}::${escapeGhaMsg(r.output.split("\n")[0])}`);
|
|
50
|
-
|
|
51
|
-
else if (r.status === "error") {
|
|
31
|
+
else if (r.status === "error")
|
|
52
32
|
console.log(`::error title=${escapeGhaProp(r.step)}::${escapeGhaMsg(r.reason ?? r.output)}`);
|
|
53
|
-
}
|
|
54
33
|
}
|
|
55
34
|
}
|
|
56
|
-
|
|
57
|
-
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
async function runTestQualityPhase(isGha) {
|
|
38
|
+
if (!isGha)
|
|
58
39
|
console.log(chalk.bold("\n── Test quality ──\n"));
|
|
59
|
-
}
|
|
60
|
-
let testQualityCritical = 0;
|
|
61
|
-
let testQualityWarning = 0;
|
|
62
40
|
try {
|
|
63
41
|
const root = await findProjectRoot();
|
|
64
42
|
const glob = (await import("fast-glob")).default;
|
|
65
43
|
const testFiles = await glob(["**/*.test.ts", "**/*.test.js", "**/*.spec.ts", "**/*.spec.js", "**/test_*.py", "**/*_test.py"], { cwd: root, absolute: true, ignore: ["**/node_modules/**"] });
|
|
66
|
-
if (testFiles.length
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
else {
|
|
77
|
-
if (report.issues.length === 0) {
|
|
78
|
-
console.log(chalk.green(" No test quality issues found."));
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.log(` ${report.summary.critical} critical, ${report.summary.warning} warnings`);
|
|
82
|
-
}
|
|
44
|
+
if (testFiles.length === 0) {
|
|
45
|
+
if (!isGha)
|
|
46
|
+
console.log(chalk.dim(" No test files found."));
|
|
47
|
+
return { critical: 0, warning: 0 };
|
|
48
|
+
}
|
|
49
|
+
const report = await analyzeTestQuality(testFiles);
|
|
50
|
+
if (isGha) {
|
|
51
|
+
for (const issue of report.issues) {
|
|
52
|
+
const level = issue.severity === "critical" ? "error" : "warning";
|
|
53
|
+
console.log(`::${level} file=${escapeGhaProp(issue.file)},line=${issue.line}::${escapeGhaMsg(issue.message)}`);
|
|
83
54
|
}
|
|
84
55
|
}
|
|
85
56
|
else {
|
|
86
|
-
if (
|
|
87
|
-
console.log(chalk.
|
|
88
|
-
|
|
57
|
+
if (report.issues.length === 0)
|
|
58
|
+
console.log(chalk.green(" No test quality issues found."));
|
|
59
|
+
else
|
|
60
|
+
console.log(` ${report.summary.critical} critical, ${report.summary.warning} warnings`);
|
|
89
61
|
}
|
|
62
|
+
return { critical: report.summary.critical, warning: report.summary.warning };
|
|
90
63
|
}
|
|
91
64
|
catch {
|
|
92
|
-
if (!isGha)
|
|
65
|
+
if (!isGha)
|
|
93
66
|
console.log(chalk.dim(" Test quality analysis skipped."));
|
|
94
|
-
}
|
|
67
|
+
return { critical: 0, warning: 0 };
|
|
95
68
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
69
|
+
}
|
|
70
|
+
export async function runCi(options) {
|
|
71
|
+
if (options.setup) {
|
|
72
|
+
await generateWorkflow();
|
|
73
|
+
return { validate: { errors: 0, warnings: 0 }, check: { passed: 0, failed: 0, errored: 0 }, testQuality: { critical: 0, warning: 0 }, exitCode: 0 };
|
|
74
|
+
}
|
|
75
|
+
const isGha = options.annotations || !!process.env.GITHUB_ACTIONS;
|
|
76
|
+
if (!isGha)
|
|
77
|
+
console.log(chalk.bold("\ngrimoire ci\n"));
|
|
78
|
+
const validateResult = await runValidatePhase(isGha);
|
|
79
|
+
const checkResult = await runChecksPhase(isGha, options.skip);
|
|
80
|
+
const tq = await runTestQualityPhase(isGha);
|
|
81
|
+
const hasFailures = validateResult.errorCount > 0 || checkResult.failed > 0 || checkResult.errored > 0 || tq.critical > 0;
|
|
101
82
|
const exitCode = hasFailures ? 1 : 0;
|
|
102
83
|
if (!isGha) {
|
|
103
84
|
console.log(chalk.bold("\n── Summary ──\n"));
|
|
104
85
|
const icon = hasFailures ? chalk.red("✗") : chalk.green("✓");
|
|
105
86
|
console.log(` ${icon} Validate: ${validateResult.errorCount} errors, ${validateResult.warnCount} warnings`);
|
|
106
87
|
console.log(` ${icon} Checks: ${checkResult.passed} passed, ${checkResult.failed} failed`);
|
|
107
|
-
console.log(` ${icon} Test quality: ${
|
|
88
|
+
console.log(` ${icon} Test quality: ${tq.critical} critical, ${tq.warning} warnings`);
|
|
108
89
|
console.log();
|
|
109
90
|
}
|
|
110
91
|
return {
|
|
111
92
|
validate: { errors: validateResult.errorCount, warnings: validateResult.warnCount },
|
|
112
93
|
check: { passed: checkResult.passed, failed: checkResult.failed, errored: checkResult.errored },
|
|
113
|
-
testQuality: { critical:
|
|
94
|
+
testQuality: { critical: tq.critical, warning: tq.warning },
|
|
114
95
|
exitCode,
|
|
115
96
|
};
|
|
116
97
|
}
|