@planu/cli 0.70.0 → 0.72.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/dist/engine/validator/analyzer.d.ts.map +1 -1
- package/dist/engine/validator/analyzer.js +10 -2
- package/dist/engine/validator/analyzer.js.map +1 -1
- package/dist/engine/validator/criterion-enricher.d.ts +42 -0
- package/dist/engine/validator/criterion-enricher.d.ts.map +1 -0
- package/dist/engine/validator/criterion-enricher.js +186 -0
- package/dist/engine/validator/criterion-enricher.js.map +1 -0
- package/dist/engine/validator/deep-code-checker.d.ts +39 -0
- package/dist/engine/validator/deep-code-checker.d.ts.map +1 -0
- package/dist/engine/validator/deep-code-checker.js +320 -0
- package/dist/engine/validator/deep-code-checker.js.map +1 -0
- package/dist/engine/validator/index.d.ts +7 -0
- package/dist/engine/validator/index.d.ts.map +1 -0
- package/dist/engine/validator/index.js +8 -0
- package/dist/engine/validator/index.js.map +1 -0
- package/dist/tools/create-spec-hu/hu-body-generators.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/hu-body-generators.js +15 -2
- package/dist/tools/create-spec-hu/hu-body-generators.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +31 -8
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts.map +1 -1
- package/dist/tools/init-project/result-builder.js +1 -0
- package/dist/tools/init-project/result-builder.js.map +1 -1
- package/dist/tools/init-project/skill-auto-installer.d.ts +10 -0
- package/dist/tools/init-project/skill-auto-installer.d.ts.map +1 -0
- package/dist/tools/init-project/skill-auto-installer.js +28 -0
- package/dist/tools/init-project/skill-auto-installer.js.map +1 -0
- package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js +4 -0
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/tools/skill-registry/search.d.ts +2 -1
- package/dist/tools/skill-registry/search.d.ts.map +1 -1
- package/dist/tools/skill-registry/search.js +52 -5
- package/dist/tools/skill-registry/search.js.map +1 -1
- package/dist/types/analysis.d.ts +16 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +2 -0
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/project/inputs.d.ts +2 -0
- package/dist/types/project/inputs.d.ts.map +1 -1
- package/dist/types/project/planu-config.d.ts +3 -1
- package/dist/types/project/planu-config.d.ts.map +1 -1
- package/dist/types/skill-registry.d.ts +12 -0
- package/dist/types/skill-registry.d.ts.map +1 -1
- package/dist/types/verifiable-criteria.d.ts +50 -0
- package/dist/types/verifiable-criteria.d.ts.map +1 -0
- package/dist/types/verifiable-criteria.js +3 -0
- package/dist/types/verifiable-criteria.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1E;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiFzF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,OAAO,CAAC,CA2ElB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAY/F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CA8EzB;AAkBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAalF"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { readFile, stat } from 'node:fs/promises';
|
|
4
4
|
import { join, extname } from 'node:path';
|
|
5
5
|
import { glob } from 'glob';
|
|
6
|
+
import { deepCheckCriterion } from './deep-code-checker.js';
|
|
6
7
|
/**
|
|
7
8
|
* Scan the project directory to build a CodeState for the given spec.
|
|
8
9
|
*/
|
|
@@ -148,9 +149,16 @@ export async function checkCriterion(criterion, projectPath, codeState) {
|
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
|
-
//
|
|
152
|
+
// Deep code check: grep/metric/coverage analysis on the actual filesystem.
|
|
153
|
+
// For non-manual checks, the deep result is authoritative.
|
|
154
|
+
// For manual checks (type === 'manual'), we fall back to the optimistic heuristic.
|
|
155
|
+
const deepResult = deepCheckCriterion(criterion, projectPath);
|
|
156
|
+
if (deepResult.checkType !== 'manual') {
|
|
157
|
+
return deepResult.passed;
|
|
158
|
+
}
|
|
159
|
+
// If we have affected files, assume basic criteria are met (optimistic fallback)
|
|
152
160
|
if (codeState.affectedFiles.length > 0) {
|
|
153
|
-
return true;
|
|
161
|
+
return true;
|
|
154
162
|
}
|
|
155
163
|
return false;
|
|
156
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,mEAAmE;AAEnE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { VerifiableCriterion, VerifyBlock, VerifyTemplate } from '../../types/index.js';
|
|
2
|
+
/** Exported for extensibility: callers may add domain-specific templates. */
|
|
3
|
+
export declare const VERIFY_TEMPLATES: VerifyTemplate[];
|
|
4
|
+
/**
|
|
5
|
+
* Match a criterion text against the built-in (and optionally injected) templates.
|
|
6
|
+
* Returns the first matching template or null if none match.
|
|
7
|
+
*/
|
|
8
|
+
export declare function matchTemplate(criterion: string): VerifyTemplate | null;
|
|
9
|
+
/**
|
|
10
|
+
* Build a VerifyBlock from a matched template, extracting numeric/scope hints
|
|
11
|
+
* from the criterion text when possible.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildVerifyBlock(criterion: string, template: VerifyTemplate): VerifyBlock;
|
|
14
|
+
/**
|
|
15
|
+
* Enrich a single criterion text with a VerifyBlock.
|
|
16
|
+
* Falls back to `manual` when no template matches.
|
|
17
|
+
*/
|
|
18
|
+
export declare function enrichCriterion(criterion: string): VerifiableCriterion;
|
|
19
|
+
/**
|
|
20
|
+
* Enrich a batch of criterion texts.
|
|
21
|
+
* Empty or whitespace-only entries are silently skipped.
|
|
22
|
+
*/
|
|
23
|
+
export declare function enrichCriteria(criteria: string[]): VerifiableCriterion[];
|
|
24
|
+
/**
|
|
25
|
+
* Parse raw markdown AC lines (e.g. "- [ ] Criterion text") into plain strings.
|
|
26
|
+
* Strips list prefixes so enrichers receive clean criterion text.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseCriteriaText(lines: string[]): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Format enriched criteria as markdown list items with embedded verify blocks.
|
|
31
|
+
*
|
|
32
|
+
* Output format:
|
|
33
|
+
* ```
|
|
34
|
+
* - [ ] Criterion text
|
|
35
|
+
* <!-- verify: {"type":"grep_absent","pattern":"...","scope":"..."} -->
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* The `<!-- verify: ... -->` HTML comment is invisible in rendered markdown
|
|
39
|
+
* but fully parseable by automated tooling.
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatVerifiableCriteria(criteria: VerifiableCriterion[]): string;
|
|
42
|
+
//# sourceMappingURL=criterion-enricher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criterion-enricher.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/criterion-enricher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM7F,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA0D5C,CAAC;AAoCF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,WAAW,CA2BzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAStE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAExE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAWhF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// engine/validator/criterion-enricher.ts — Enrich acceptance criteria with verify blocks (SPEC-186)
|
|
2
|
+
//
|
|
3
|
+
// Adds machine-verifiable `verify` blocks to acceptance criteria text.
|
|
4
|
+
// Verification metadata is stored as HTML comments in spec.md output —
|
|
5
|
+
// invisible in rendered markdown but fully parseable by tooling.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Built-in templates — priority-ordered (first match wins)
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/** Exported for extensibility: callers may add domain-specific templates. */
|
|
10
|
+
export const VERIFY_TEMPLATES = [
|
|
11
|
+
// i18n / hardcoded strings
|
|
12
|
+
{
|
|
13
|
+
keywords: ['hardcoded string', 'hardcoded text', 'raw string', 'literal string'],
|
|
14
|
+
type: 'grep_absent',
|
|
15
|
+
patternTemplate: '[áéíóúñ¿¡]|"[A-Z][a-z]+ [a-z]+"',
|
|
16
|
+
scopeTemplate: 'src/**/*.{tsx,jsx,vue}',
|
|
17
|
+
description: 'No hardcoded strings in components',
|
|
18
|
+
},
|
|
19
|
+
// Type safety
|
|
20
|
+
{
|
|
21
|
+
keywords: ['no any type', 'strict typing', 'no typescript any', 'no-any', 'no any'],
|
|
22
|
+
type: 'grep_absent',
|
|
23
|
+
patternTemplate: ':\\s*any[\\s,;>)]',
|
|
24
|
+
scopeTemplate: 'src/**/*.ts',
|
|
25
|
+
description: 'No any types in source',
|
|
26
|
+
},
|
|
27
|
+
// Security — no secrets
|
|
28
|
+
{
|
|
29
|
+
keywords: ['no secrets', 'no credentials', 'no api key', 'no password', 'no hardcoded secret'],
|
|
30
|
+
type: 'grep_absent',
|
|
31
|
+
patternTemplate: 'password\\s*=|api_key\\s*=|secret\\s*=',
|
|
32
|
+
scopeTemplate: 'src/**/*.ts',
|
|
33
|
+
description: 'No hardcoded secrets',
|
|
34
|
+
},
|
|
35
|
+
// Test coverage / test existence
|
|
36
|
+
{
|
|
37
|
+
keywords: ['test for every', 'test coverage', 'tests exist for', 'test file'],
|
|
38
|
+
type: 'file_exists',
|
|
39
|
+
scopeTemplate: 'tests/**/*.test.ts',
|
|
40
|
+
description: 'Test files exist for source files',
|
|
41
|
+
},
|
|
42
|
+
// File / line limits
|
|
43
|
+
{
|
|
44
|
+
keywords: ['no file exceeds', 'max lines', 'maximum lines', 'line limit', 'lines per file'],
|
|
45
|
+
type: 'metric_max',
|
|
46
|
+
expected: 300,
|
|
47
|
+
description: 'No file exceeds line limit',
|
|
48
|
+
},
|
|
49
|
+
// Error handling
|
|
50
|
+
{
|
|
51
|
+
keywords: ['error handling', 'handles errors', 'try catch', 'try/catch', 'error boundary'],
|
|
52
|
+
type: 'grep_present',
|
|
53
|
+
patternTemplate: 'try\\s*\\{|catch\\s*\\(',
|
|
54
|
+
description: 'Error handling present',
|
|
55
|
+
},
|
|
56
|
+
// Imports / dependency injection / architecture pattern
|
|
57
|
+
{
|
|
58
|
+
keywords: ['import from', 'uses dependency injection', 'follows pattern', 'injects'],
|
|
59
|
+
type: 'grep_present',
|
|
60
|
+
description: 'Pattern usage detected',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Internal helpers
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/** Extract the first integer found in a string (e.g. "200 lines" → 200). */
|
|
67
|
+
function extractNumber(text) {
|
|
68
|
+
const match = /\b(\d+)\b/.exec(text);
|
|
69
|
+
return match?.[1] !== undefined ? parseInt(match[1], 10) : undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Extract an explicit scope path from criterion text.
|
|
73
|
+
* Only matches directory paths that contain at least one slash (e.g. "src/components/").
|
|
74
|
+
* This prevents plain words like "source" or "target" from being treated as paths.
|
|
75
|
+
*/
|
|
76
|
+
function extractScope(text) {
|
|
77
|
+
// Require at least one slash in the captured path to distinguish paths from words
|
|
78
|
+
const match = /\bin\s+([\w.*{},-]+(?:\/[\w.*{},-]*)+(?:\/\*\*)?)|under\s+([\w.*{},-]+(?:\/[\w.*{},-]*)+(?:\/\*\*)?)/i.exec(text);
|
|
79
|
+
const raw = match?.[1] ?? match?.[2];
|
|
80
|
+
if (!raw) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
// Normalize trailing slash before appending glob
|
|
84
|
+
const normalized = raw.replace(/\/+$/, '');
|
|
85
|
+
return normalized.endsWith('/**') || normalized.includes('*') ? normalized : `${normalized}/**`;
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Public API
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Match a criterion text against the built-in (and optionally injected) templates.
|
|
92
|
+
* Returns the first matching template or null if none match.
|
|
93
|
+
*/
|
|
94
|
+
export function matchTemplate(criterion) {
|
|
95
|
+
const lower = criterion.toLowerCase();
|
|
96
|
+
for (const template of VERIFY_TEMPLATES) {
|
|
97
|
+
if (template.keywords.some((kw) => lower.includes(kw))) {
|
|
98
|
+
return template;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Build a VerifyBlock from a matched template, extracting numeric/scope hints
|
|
105
|
+
* from the criterion text when possible.
|
|
106
|
+
*/
|
|
107
|
+
export function buildVerifyBlock(criterion, template) {
|
|
108
|
+
const block = {
|
|
109
|
+
type: template.type,
|
|
110
|
+
description: template.description,
|
|
111
|
+
};
|
|
112
|
+
if (template.patternTemplate !== undefined) {
|
|
113
|
+
block.pattern = template.patternTemplate;
|
|
114
|
+
}
|
|
115
|
+
// Prefer explicit scope from criterion text; fall back to template default
|
|
116
|
+
const scopeFromText = extractScope(criterion);
|
|
117
|
+
if (scopeFromText !== undefined) {
|
|
118
|
+
block.scope = scopeFromText;
|
|
119
|
+
}
|
|
120
|
+
else if (template.scopeTemplate !== undefined) {
|
|
121
|
+
block.scope = template.scopeTemplate;
|
|
122
|
+
}
|
|
123
|
+
// For metric checks, try to extract an explicit number from the criterion
|
|
124
|
+
if (template.type === 'metric_max' || template.type === 'metric_min') {
|
|
125
|
+
const extracted = extractNumber(criterion);
|
|
126
|
+
block.expected = extracted ?? template.expected;
|
|
127
|
+
}
|
|
128
|
+
else if (template.expected !== undefined) {
|
|
129
|
+
block.expected = template.expected;
|
|
130
|
+
}
|
|
131
|
+
return block;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Enrich a single criterion text with a VerifyBlock.
|
|
135
|
+
* Falls back to `manual` when no template matches.
|
|
136
|
+
*/
|
|
137
|
+
export function enrichCriterion(criterion) {
|
|
138
|
+
const template = matchTemplate(criterion);
|
|
139
|
+
if (template !== null) {
|
|
140
|
+
return { text: criterion, verify: buildVerifyBlock(criterion, template) };
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
text: criterion,
|
|
144
|
+
verify: { type: 'manual', description: 'Requires manual verification' },
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Enrich a batch of criterion texts.
|
|
149
|
+
* Empty or whitespace-only entries are silently skipped.
|
|
150
|
+
*/
|
|
151
|
+
export function enrichCriteria(criteria) {
|
|
152
|
+
return criteria.filter((c) => c.trim().length > 0).map((c) => enrichCriterion(c));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Parse raw markdown AC lines (e.g. "- [ ] Criterion text") into plain strings.
|
|
156
|
+
* Strips list prefixes so enrichers receive clean criterion text.
|
|
157
|
+
*/
|
|
158
|
+
export function parseCriteriaText(lines) {
|
|
159
|
+
return lines
|
|
160
|
+
.map((line) => line.replace(/^\s*[-*+]\s+\[?\s*[xX ]?\s*\]?\s*/, '').trim())
|
|
161
|
+
.filter((line) => line.length > 0);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Format enriched criteria as markdown list items with embedded verify blocks.
|
|
165
|
+
*
|
|
166
|
+
* Output format:
|
|
167
|
+
* ```
|
|
168
|
+
* - [ ] Criterion text
|
|
169
|
+
* <!-- verify: {"type":"grep_absent","pattern":"...","scope":"..."} -->
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* The `<!-- verify: ... -->` HTML comment is invisible in rendered markdown
|
|
173
|
+
* but fully parseable by automated tooling.
|
|
174
|
+
*/
|
|
175
|
+
export function formatVerifiableCriteria(criteria) {
|
|
176
|
+
if (criteria.length === 0) {
|
|
177
|
+
return '';
|
|
178
|
+
}
|
|
179
|
+
return criteria
|
|
180
|
+
.map((c) => {
|
|
181
|
+
const verifyJson = JSON.stringify(c.verify);
|
|
182
|
+
return `- [ ] ${c.text}\n <!-- verify: ${verifyJson} -->`;
|
|
183
|
+
})
|
|
184
|
+
.join('\n');
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=criterion-enricher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"criterion-enricher.js","sourceRoot":"","sources":["../../../src/engine/validator/criterion-enricher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DeepCheckResult, DeepCheckConfig, DeepCheckType } from '../../types/index.js';
|
|
2
|
+
export type { DeepCheckResult, DeepCheckConfig, DeepCheckType };
|
|
3
|
+
/**
|
|
4
|
+
* Classify criterion text into a check type using keyword heuristics.
|
|
5
|
+
* Returns the type and optional config derived from the criterion.
|
|
6
|
+
*/
|
|
7
|
+
export declare function classifyCriterion(text: string): {
|
|
8
|
+
type: DeepCheckType;
|
|
9
|
+
config?: DeepCheckConfig;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Search for a regex pattern in files matching the scope glob.
|
|
13
|
+
* For grep_absent: passed when matchCount === 0.
|
|
14
|
+
* For grep_present: passed when matchCount >= expected.
|
|
15
|
+
*/
|
|
16
|
+
export declare function grepCheck(config: DeepCheckConfig, projectPath: string, checkType: 'grep_absent' | 'grep_present'): DeepCheckResult;
|
|
17
|
+
/**
|
|
18
|
+
* Check that no file in scope exceeds the line threshold encoded in config.expected.
|
|
19
|
+
*/
|
|
20
|
+
export declare function metricCheck(config: DeepCheckConfig, projectPath: string): DeepCheckResult;
|
|
21
|
+
/**
|
|
22
|
+
* Check that each source file has a corresponding test file.
|
|
23
|
+
* sourceGlob: e.g. "src/**\/*.ts"
|
|
24
|
+
* testGlob: e.g. "tests/**\/*.test.ts"
|
|
25
|
+
*/
|
|
26
|
+
export declare function coverageCheck(sourceGlob: string, testGlob: string, projectPath: string): DeepCheckResult;
|
|
27
|
+
/**
|
|
28
|
+
* Verify a specific file exists.
|
|
29
|
+
*/
|
|
30
|
+
export declare function fileExistsCheck(config: DeepCheckConfig, projectPath: string): DeepCheckResult;
|
|
31
|
+
/**
|
|
32
|
+
* Classify a criterion and dispatch to the appropriate checker.
|
|
33
|
+
*/
|
|
34
|
+
export declare function deepCheckCriterion(criterionText: string, projectPath: string): DeepCheckResult;
|
|
35
|
+
/**
|
|
36
|
+
* Run deep checks on all criteria. Returns one result per criterion.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runDeepChecks(criteria: string[], projectPath: string): DeepCheckResult[];
|
|
39
|
+
//# sourceMappingURL=deep-code-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-code-checker.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG5F,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CA4CA;AAkED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,GAAG,cAAc,GACxC,eAAe,CAuCjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CA2BzF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,eAAe,CA6CjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CAoB7F;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,CAuC9F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAExF"}
|