daedalus-cli 3.9.1 → 3.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/CHANGELOG.md +7 -0
- package/dist/ci.d.ts +1 -0
- package/dist/ci.d.ts.map +1 -1
- package/dist/ci.js +50 -26
- package/dist/ci.js.map +1 -1
- package/dist/ci.test.js +77 -0
- package/dist/ci.test.js.map +1 -1
- package/dist/review/static-checks.d.ts +5 -0
- package/dist/review/static-checks.d.ts.map +1 -0
- package/dist/review/static-checks.js +128 -0
- package/dist/review/static-checks.js.map +1 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [3.10.0](https://github.com/bgill55/daedalus/compare/v3.9.1...v3.10.0) (2026-08-03)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **ci:** deterministic static PR checks + full-coverage AI review ([#30](https://github.com/bgill55/daedalus/issues/30)) ([49523c3](https://github.com/bgill55/daedalus/commit/49523c31a990ad57e228b5520487e5458f77fb42)), closes [22/#25](https://github.com/bgill55/daedalus/issues/25)
|
|
7
|
+
|
|
1
8
|
## [3.9.1](https://github.com/bgill55/daedalus/compare/v3.9.0...v3.9.1) (2026-08-03)
|
|
2
9
|
|
|
3
10
|
|
package/dist/ci.d.ts
CHANGED
package/dist/ci.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,mBAAmB,CACvC,WAAW,GAAE,MAAsB,EACnC,UAAU,GAAE,MAAe,GAC1B,OAAO,CAAC,cAAc,CAAC,CAuKzB;AAED,wBAAsB,gBAAgB,CACpC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBhD"}
|
package/dist/ci.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { execute as termExec } from './tools/builtin/terminal.js';
|
|
4
|
+
import { runStaticChecks, emptyStaticCheckResult } from './review/static-checks.js';
|
|
4
5
|
export async function runHeadlessCiReview(projectRoot = process.cwd(), baseBranch = 'main') {
|
|
5
6
|
const dummyContext = {
|
|
6
7
|
projectRoot,
|
|
@@ -13,6 +14,7 @@ export async function runHeadlessCiReview(projectRoot = process.cwd(), baseBranc
|
|
|
13
14
|
let typeCheckPassed = true;
|
|
14
15
|
let lintPassed = true;
|
|
15
16
|
let testsPassed = true;
|
|
17
|
+
let staticPassed = true;
|
|
16
18
|
let typeCheckOutput = '';
|
|
17
19
|
let lintOutput = '';
|
|
18
20
|
let testsOutput = '';
|
|
@@ -61,7 +63,15 @@ export async function runHeadlessCiReview(projectRoot = process.cwd(), baseBranc
|
|
|
61
63
|
if (diffPatchRes.success && diffPatchRes.content) {
|
|
62
64
|
diffPatch = diffPatchRes.content.trim();
|
|
63
65
|
}
|
|
64
|
-
//
|
|
66
|
+
// 4b. Deterministic static anti-pattern analysis on the diff (no AI dependency)
|
|
67
|
+
let staticResult = emptyStaticCheckResult();
|
|
68
|
+
if (diffPatch) {
|
|
69
|
+
staticResult = runStaticChecks(diffPatch);
|
|
70
|
+
staticPassed = staticResult.passed;
|
|
71
|
+
}
|
|
72
|
+
// 5. AI semantic diff analysis — Daedalus reads the actual diff and flags logic bugs.
|
|
73
|
+
// The diff is split into bounded chunks so larger PRs are reviewed in full instead of
|
|
74
|
+
// being silently truncated, and a model failure throws (no silent no-op).
|
|
65
75
|
let semanticFindings = '';
|
|
66
76
|
if (diffPatch) {
|
|
67
77
|
try {
|
|
@@ -69,44 +79,57 @@ export async function runHeadlessCiReview(projectRoot = process.cwd(), baseBranc
|
|
|
69
79
|
const { loadConfig } = await import('./config/index.js');
|
|
70
80
|
const config = loadConfig();
|
|
71
81
|
const router = createRouter(config.router);
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
const CHUNK = 6000;
|
|
83
|
+
const chunks = [];
|
|
84
|
+
for (let i = 0; i < diffPatch.length; i += CHUNK) {
|
|
85
|
+
chunks.push(diffPatch.slice(i, i + CHUNK));
|
|
86
|
+
}
|
|
87
|
+
const findings = [];
|
|
88
|
+
for (const chunk of chunks) {
|
|
89
|
+
const aiRes = await router.chat.completions.create({
|
|
90
|
+
model: 'intelligence',
|
|
91
|
+
messages: [
|
|
92
|
+
{
|
|
93
|
+
role: 'system',
|
|
94
|
+
content: `You are an expert code reviewer. Analyze the following git diff for semantic bugs, contract mismatches (e.g. JSDoc stating rules different from regex or code logic), AGENTS.md rule violations (redundant inline comments restating obvious code flow), schema mismatches, unreachable code paths, and logic errors.
|
|
79
95
|
Be concise. Format findings as a numbered markdown list.
|
|
80
96
|
If no bugs are found, respond with exactly: "No semantic issues found."`,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
role: 'user',
|
|
100
|
+
content: `Review this diff:\n\`\`\`diff\n${chunk}\n\`\`\``,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
temperature: 0.1,
|
|
104
|
+
});
|
|
105
|
+
const content = aiRes.choices[0]?.message?.content?.trim() || '';
|
|
106
|
+
if (content && content !== 'No semantic issues found.')
|
|
107
|
+
findings.push(content);
|
|
108
|
+
}
|
|
109
|
+
semanticFindings = findings.length > 0 ? findings.join('\n\n') : 'No semantic issues found.';
|
|
90
110
|
}
|
|
91
|
-
catch {
|
|
92
|
-
semanticFindings =
|
|
111
|
+
catch (err) {
|
|
112
|
+
semanticFindings = `⚠️ Semantic analysis failed to run: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
113
|
+
'The deterministic static checks above are authoritative; re-run the review if the model call is flaky.';
|
|
93
114
|
}
|
|
94
115
|
}
|
|
95
|
-
const passed = typeCheckPassed && lintPassed && testsPassed;
|
|
116
|
+
const passed = typeCheckPassed && lintPassed && testsPassed && staticPassed;
|
|
96
117
|
let markdownReport = `## 🤖 Daedalus Automated PR Review\n\n`;
|
|
97
118
|
markdownReport += `**Overall Status**: ${passed ? '✅ PASSED' : '❌ ACTION REQUIRED'}\n\n`;
|
|
98
119
|
markdownReport += `### 🔍 Verification Checks\n`;
|
|
99
120
|
markdownReport += `- **Type Check (\`npx tsc\`)**: ${typeCheckPassed ? '✅ Passed' : '❌ Failed'}\n`;
|
|
100
121
|
markdownReport += `- **Linter (\`npm run lint\`)**: ${lintPassed ? '✅ Passed' : '❌ Failed'}\n`;
|
|
101
|
-
markdownReport += `- **Test Suite (\`npm test\`)**: ${testsPassed ? '✅ Passed' : '❌ Failed'}\n
|
|
122
|
+
markdownReport += `- **Test Suite (\`npm test\`)**: ${testsPassed ? '✅ Passed' : '❌ Failed'}\n`;
|
|
123
|
+
markdownReport += `- **Static Analysis (\`no-silent-catch\`, \`esm-import-extension\`, \`no-default-export\`, \`no-explicit-any\`)**: ${staticPassed ? '✅ Passed' : '❌ Failed'}\n\n`;
|
|
124
|
+
if (staticResult.markdownReport) {
|
|
125
|
+
markdownReport += staticResult.markdownReport;
|
|
126
|
+
}
|
|
102
127
|
if (diffSummary) {
|
|
103
128
|
markdownReport += `### 📊 Changed Files\n\`\`\`\n${diffSummary}\n\`\`\`\n\n`;
|
|
104
129
|
}
|
|
105
|
-
if (semanticFindings
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
else if (semanticFindings === 'No semantic issues found.') {
|
|
109
|
-
markdownReport += `### 🧠 Daedalus Semantic Analysis\n✅ No semantic issues found.\n\n`;
|
|
130
|
+
if (semanticFindings) {
|
|
131
|
+
const clean = semanticFindings === 'No semantic issues found.';
|
|
132
|
+
markdownReport += `### 🧠 Daedalus Semantic Analysis\n${clean ? '✅ No semantic issues found.' : semanticFindings}\n\n`;
|
|
110
133
|
}
|
|
111
134
|
if (!typeCheckPassed) {
|
|
112
135
|
markdownReport += `### ⚠️ Type Check Failures\n\`\`\`\n${typeCheckOutput.slice(0, 1000)}\n\`\`\`\n\n`;
|
|
@@ -125,6 +148,7 @@ If no bugs are found, respond with exactly: "No semantic issues found."`,
|
|
|
125
148
|
typeCheckPassed,
|
|
126
149
|
lintPassed,
|
|
127
150
|
testsPassed,
|
|
151
|
+
staticPassed,
|
|
128
152
|
summary: passed ? 'All PR checks passed successfully.' : 'PR checks failed verification.',
|
|
129
153
|
markdownReport: cleanReport,
|
|
130
154
|
};
|
package/dist/ci.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"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"}
|
package/dist/ci.test.js
CHANGED
|
@@ -29,6 +29,7 @@ vi.mock('./config/index.js', () => ({
|
|
|
29
29
|
loadConfig: vi.fn(() => ({ router: { chain: [] } })),
|
|
30
30
|
}));
|
|
31
31
|
import { runHeadlessCiReview, runHeadlessCiFix } from './ci.js';
|
|
32
|
+
import { runStaticChecks } from './review/static-checks.js';
|
|
32
33
|
describe('Headless CI Runner', () => {
|
|
33
34
|
beforeEach(() => {
|
|
34
35
|
vi.clearAllMocks();
|
|
@@ -39,6 +40,7 @@ describe('Headless CI Runner', () => {
|
|
|
39
40
|
expect(result).toHaveProperty('typeCheckPassed');
|
|
40
41
|
expect(result).toHaveProperty('lintPassed');
|
|
41
42
|
expect(result).toHaveProperty('testsPassed');
|
|
43
|
+
expect(result).toHaveProperty('staticPassed');
|
|
42
44
|
expect(result).toHaveProperty('markdownReport');
|
|
43
45
|
expect(result.markdownReport).toContain('Daedalus Automated PR Review');
|
|
44
46
|
});
|
|
@@ -47,6 +49,7 @@ describe('Headless CI Runner', () => {
|
|
|
47
49
|
expect(result.typeCheckPassed).toBe(true);
|
|
48
50
|
expect(result.lintPassed).toBe(true);
|
|
49
51
|
expect(result.testsPassed).toBe(true);
|
|
52
|
+
expect(result.staticPassed).toBe(true);
|
|
50
53
|
expect(result.passed).toBe(true);
|
|
51
54
|
});
|
|
52
55
|
it('runHeadlessCiReview report includes all check sections', async () => {
|
|
@@ -54,6 +57,7 @@ describe('Headless CI Runner', () => {
|
|
|
54
57
|
expect(result.markdownReport).toContain('Type Check');
|
|
55
58
|
expect(result.markdownReport).toContain('Linter');
|
|
56
59
|
expect(result.markdownReport).toContain('Test Suite');
|
|
60
|
+
expect(result.markdownReport).toContain('Static Analysis');
|
|
57
61
|
});
|
|
58
62
|
it('runHeadlessCiFix handles auto-fix check cleanly', async () => {
|
|
59
63
|
const fixResult = await runHeadlessCiFix(process.cwd());
|
|
@@ -63,4 +67,77 @@ describe('Headless CI Runner', () => {
|
|
|
63
67
|
expect(typeof fixResult.message).toBe('string');
|
|
64
68
|
});
|
|
65
69
|
});
|
|
70
|
+
describe('Daedalus Static Checks', () => {
|
|
71
|
+
const diffFor = (file, added) => {
|
|
72
|
+
const lines = [`diff --git a/${file} b/${file}`, `--- a/${file}`, `+++ b/${file}`, `@@ -1,1 +1,${added.length} @@`];
|
|
73
|
+
added.forEach((a, i) => lines.push(`+${a}`));
|
|
74
|
+
return lines.join('\n');
|
|
75
|
+
};
|
|
76
|
+
it('flags an empty catch block as an error (no-silent-catch)', () => {
|
|
77
|
+
const diff = diffFor('scripts/sync-docs.ts', [
|
|
78
|
+
'function copy() {',
|
|
79
|
+
' try { doThing(); } catch { }',
|
|
80
|
+
'}',
|
|
81
|
+
]);
|
|
82
|
+
const res = runStaticChecks(diff);
|
|
83
|
+
expect(res.passed).toBe(false);
|
|
84
|
+
expect(res.findings.some(f => f.rule === 'no-silent-catch' && f.severity === 'error')).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
it('flags a default export as a warning', () => {
|
|
87
|
+
const diff = diffFor('src/foo.ts', ['export default function foo() {}']);
|
|
88
|
+
const res = runStaticChecks(diff);
|
|
89
|
+
expect(res.passed).toBe(true);
|
|
90
|
+
expect(res.findings.some(f => f.rule === 'no-default-export')).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
it('flags explicit any in added lines as a warning', () => {
|
|
93
|
+
const diff = diffFor('src/bar.ts', ['const x: any = {};']);
|
|
94
|
+
const res = runStaticChecks(diff);
|
|
95
|
+
expect(res.findings.some(f => f.rule === 'no-explicit-any')).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
it('flags a missing .js extension on a relative ESM import as a warning', () => {
|
|
98
|
+
const diff = diffFor('src/baz.ts', ["import { thing } from './thing';"]);
|
|
99
|
+
const res = runStaticChecks(diff);
|
|
100
|
+
expect(res.findings.some(f => f.rule === 'esm-import-extension')).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
it('passes a clean diff with no anti-patterns', () => {
|
|
103
|
+
const diff = diffFor('src/qux.ts', [
|
|
104
|
+
"import { thing } from './thing.js';",
|
|
105
|
+
'export function run(): void {',
|
|
106
|
+
' try { thing(); } catch (err) { console.error(err); }',
|
|
107
|
+
'}',
|
|
108
|
+
]);
|
|
109
|
+
const res = runStaticChecks(diff);
|
|
110
|
+
expect(res.passed).toBe(true);
|
|
111
|
+
expect(res.findings).toHaveLength(0);
|
|
112
|
+
});
|
|
113
|
+
it('skips test files so the review never flags its own specs', () => {
|
|
114
|
+
const diff = diffFor('src/ci.test.ts', [
|
|
115
|
+
'export default function foo() {}',
|
|
116
|
+
'const x: any = {};',
|
|
117
|
+
'try { a(); } catch { }',
|
|
118
|
+
]);
|
|
119
|
+
const res = runStaticChecks(diff);
|
|
120
|
+
expect(res.findings).toHaveLength(0);
|
|
121
|
+
expect(res.passed).toBe(true);
|
|
122
|
+
});
|
|
123
|
+
it('flags a missing .js extension in a .js file (not just .ts)', () => {
|
|
124
|
+
const diff = diffFor('scripts/tool.js', ["import { x } from './x';"]);
|
|
125
|
+
const res = runStaticChecks(diff);
|
|
126
|
+
const f = res.findings.find(f => f.rule === 'esm-import-extension');
|
|
127
|
+
expect(f).toBeDefined();
|
|
128
|
+
expect(f?.message).toContain("'./x'");
|
|
129
|
+
});
|
|
130
|
+
it('reports the correct captured import path (no undefined)', () => {
|
|
131
|
+
const diff = diffFor('src/baz.ts', ["import { thing } from './thing';"]);
|
|
132
|
+
const res = runStaticChecks(diff);
|
|
133
|
+
const f = res.findings.find(f => f.rule === 'esm-import-extension');
|
|
134
|
+
expect(f?.message).toContain("'./thing'");
|
|
135
|
+
expect(f?.message).not.toContain('undefined');
|
|
136
|
+
});
|
|
137
|
+
it('returns no findings for an empty diff', () => {
|
|
138
|
+
const res = runStaticChecks('');
|
|
139
|
+
expect(res.passed).toBe(true);
|
|
140
|
+
expect(res.findings).toHaveLength(0);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
66
143
|
//# sourceMappingURL=ci.test.js.map
|
package/dist/ci.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci.test.js","sourceRoot":"","sources":["../src/ci.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,qEAAqE;AACrE,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,OAAO,EAAuB,EAAE,EAAE;QACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC9E,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC/E,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnG,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,0EAA0E;AAC1E,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,EAAE,CAAC;iBACjE,CAAC,CAAC;aACJ;SACF;KACF,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;CACrD,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ci.test.js","sourceRoot":"","sources":["../src/ci.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { StaticCheckResult } from '../types.js';
|
|
2
|
+
export type { CiReviewResult } from '../ci.js';
|
|
3
|
+
export declare function runStaticChecks(diffPatch: string): StaticCheckResult;
|
|
4
|
+
export declare function emptyStaticCheckResult(): StaticCheckResult;
|
|
5
|
+
//# sourceMappingURL=static-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-checks.d.ts","sourceRoot":"","sources":["../../src/review/static-checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEpE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAoH/C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CA2BpE;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,CAE1D"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
const TEST_FILE_RE = /(\.test\.(ts|tsx|js|jsx)|\.spec\.(ts|tsx|js|jsx)|__tests__\/)/;
|
|
2
|
+
const SILENT_CATCH_RE = /\bcatch\s*(?:\([^)]*\))?\s*\{\s*\}/;
|
|
3
|
+
const DEFAULT_EXPORT_RE = /export\s+default\s+/;
|
|
4
|
+
const ANY_IN_ADDED_RE = /\bany\b/;
|
|
5
|
+
// Non-global regex: .test() and .match() are stateless, and .match() returns
|
|
6
|
+
// the captured import specifier at index 1.
|
|
7
|
+
const ESM_IMPORT_RE = /(?:import|export)[^;]*from\s*['"](\.[^'"]*)['"]/;
|
|
8
|
+
const TYPE_IMPORT_RE = /import\s+type\s+/;
|
|
9
|
+
function parseDiffHunks(diff) {
|
|
10
|
+
const hunks = [];
|
|
11
|
+
let current = null;
|
|
12
|
+
let newLineNo = 0;
|
|
13
|
+
for (const raw of diff.split('\n')) {
|
|
14
|
+
if (raw.startsWith('diff --git')) {
|
|
15
|
+
const m = raw.match(/ b\/(.+)$/);
|
|
16
|
+
if (current)
|
|
17
|
+
hunks.push(current);
|
|
18
|
+
current = { file: m ? m[1] : 'unknown', addedLines: [] };
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (raw.startsWith('+++ ')) {
|
|
22
|
+
const m = raw.match(/ b\/(.+)$/);
|
|
23
|
+
if (m && current)
|
|
24
|
+
current.file = m[1];
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (raw.startsWith('@@')) {
|
|
28
|
+
const m = raw.match(/\+(\d+)/);
|
|
29
|
+
newLineNo = m ? parseInt(m[1], 10) : 0;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (raw.startsWith('+') && !raw.startsWith('+++')) {
|
|
33
|
+
const text = raw.slice(1);
|
|
34
|
+
if (current)
|
|
35
|
+
current.addedLines.push({ lineNo: newLineNo, text });
|
|
36
|
+
newLineNo++;
|
|
37
|
+
}
|
|
38
|
+
else if (raw.startsWith('-') && !raw.startsWith('---')) {
|
|
39
|
+
// removed line; new line counter unaffected relative to new file
|
|
40
|
+
}
|
|
41
|
+
else if (!raw.startsWith('---') && raw.length > 0) {
|
|
42
|
+
newLineNo++;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (current)
|
|
46
|
+
hunks.push(current);
|
|
47
|
+
return hunks;
|
|
48
|
+
}
|
|
49
|
+
function checkHunk(hunk, findings) {
|
|
50
|
+
const isTs = hunk.file.endsWith('.ts') || hunk.file.endsWith('.tsx');
|
|
51
|
+
const isJs = hunk.file.endsWith('.js') || hunk.file.endsWith('.jsx');
|
|
52
|
+
const isSource = isTs || isJs;
|
|
53
|
+
for (const added of hunk.addedLines) {
|
|
54
|
+
const text = added.text;
|
|
55
|
+
if (isSource && SILENT_CATCH_RE.test(text)) {
|
|
56
|
+
findings.push({
|
|
57
|
+
rule: 'no-silent-catch',
|
|
58
|
+
severity: 'error',
|
|
59
|
+
file: hunk.file,
|
|
60
|
+
line: added.lineNo,
|
|
61
|
+
message: 'Empty catch block swallows the error. Either rethrow, or log it (e.g. console.error) so failures are observable. ' +
|
|
62
|
+
'This mirrors the team convention (PR #9) that scripts must fail deterministically.',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (isSource && DEFAULT_EXPORT_RE.test(text)) {
|
|
66
|
+
findings.push({
|
|
67
|
+
rule: 'no-default-export',
|
|
68
|
+
severity: 'warning',
|
|
69
|
+
file: hunk.file,
|
|
70
|
+
line: added.lineNo,
|
|
71
|
+
message: 'Default export detected. The project convention is named exports only (see AGENTS.md). Prefer exporting a named symbol.',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (isSource && ANY_IN_ADDED_RE.test(text) && !TYPE_IMPORT_RE.test(text)) {
|
|
75
|
+
findings.push({
|
|
76
|
+
rule: 'no-explicit-any',
|
|
77
|
+
severity: 'warning',
|
|
78
|
+
file: hunk.file,
|
|
79
|
+
line: added.lineNo,
|
|
80
|
+
message: 'Explicit `any` in added code weakens type safety. Prefer a concrete type, Record<string, unknown>, or unknown with narrowing.',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (isSource && !TEST_FILE_RE.test(hunk.file)) {
|
|
84
|
+
const m = text.match(ESM_IMPORT_RE);
|
|
85
|
+
if (m && !m[1].endsWith('.js')) {
|
|
86
|
+
findings.push({
|
|
87
|
+
rule: 'esm-import-extension',
|
|
88
|
+
severity: 'warning',
|
|
89
|
+
file: hunk.file,
|
|
90
|
+
line: added.lineNo,
|
|
91
|
+
message: `ESM relative import '${m[1]}' is missing the '.js' extension. ` +
|
|
92
|
+
'The project requires explicit .js extensions in ESM imports (see AGENTS.md).',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function runStaticChecks(diffPatch) {
|
|
99
|
+
const findings = [];
|
|
100
|
+
if (diffPatch && diffPatch.trim()) {
|
|
101
|
+
const hunks = parseDiffHunks(diffPatch);
|
|
102
|
+
for (const hunk of hunks) {
|
|
103
|
+
if (TEST_FILE_RE.test(hunk.file))
|
|
104
|
+
continue;
|
|
105
|
+
checkHunk(hunk, findings);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const passed = !findings.some(f => f.severity === 'error');
|
|
109
|
+
let markdownReport = `### 🔎 Daedalus Static Analysis\n`;
|
|
110
|
+
if (findings.length === 0) {
|
|
111
|
+
markdownReport += `✅ No static anti-pattern findings.\n\n`;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const errors = findings.filter(f => f.severity === 'error');
|
|
115
|
+
const warnings = findings.filter(f => f.severity === 'warning');
|
|
116
|
+
markdownReport += `Found ${findings.length} finding(s) (${errors.length} error, ${warnings.length} warning):\n\n`;
|
|
117
|
+
for (const f of findings) {
|
|
118
|
+
const icon = f.severity === 'error' ? '🐞' : '⚠️';
|
|
119
|
+
markdownReport += `${icon} **${f.rule}** (${f.severity}) \`${f.file}:${f.line}\`\n`;
|
|
120
|
+
markdownReport += `> ${f.message}\n\n`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { findings, passed, markdownReport };
|
|
124
|
+
}
|
|
125
|
+
export function emptyStaticCheckResult() {
|
|
126
|
+
return { findings: [], passed: true, markdownReport: '' };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=static-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-checks.js","sourceRoot":"","sources":["../../src/review/static-checks.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -96,6 +96,18 @@ export interface RouteLogEntry {
|
|
|
96
96
|
reason: string;
|
|
97
97
|
}>;
|
|
98
98
|
}
|
|
99
|
+
export interface StaticFinding {
|
|
100
|
+
rule: string;
|
|
101
|
+
severity: 'error' | 'warning';
|
|
102
|
+
file: string;
|
|
103
|
+
line: number;
|
|
104
|
+
message: string;
|
|
105
|
+
}
|
|
106
|
+
export interface StaticCheckResult {
|
|
107
|
+
findings: StaticFinding[];
|
|
108
|
+
passed: boolean;
|
|
109
|
+
markdownReport: string;
|
|
110
|
+
}
|
|
99
111
|
declare global {
|
|
100
112
|
var isTui: boolean | undefined;
|
|
101
113
|
var originalStdoutWrite: typeof process.stdout.write | undefined;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|