@planu/cli 0.72.0 → 0.74.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 +1 -1
- package/dist/config/license-plans.json +9 -2
- package/dist/config/tool-groups.json +5 -1
- package/dist/engine/actuals/git-analyzer.js +1 -1
- package/dist/engine/actuals/git-analyzer.js.map +1 -1
- package/dist/engine/agent-prompt-generator.d.ts +12 -0
- package/dist/engine/agent-prompt-generator.d.ts.map +1 -0
- package/dist/engine/agent-prompt-generator.js +171 -0
- package/dist/engine/agent-prompt-generator.js.map +1 -0
- package/dist/engine/ai-tool-detector/index.d.ts +6 -0
- package/dist/engine/ai-tool-detector/index.d.ts.map +1 -0
- package/dist/engine/ai-tool-detector/index.js +95 -0
- package/dist/engine/ai-tool-detector/index.js.map +1 -0
- package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -1
- package/dist/engine/ci-generator/planu-steps.js +10 -11
- package/dist/engine/ci-generator/planu-steps.js.map +1 -1
- package/dist/engine/convention-scanner/codebase-scanner.d.ts +7 -0
- package/dist/engine/convention-scanner/codebase-scanner.d.ts.map +1 -0
- package/dist/engine/convention-scanner/codebase-scanner.js +258 -0
- package/dist/engine/convention-scanner/codebase-scanner.js.map +1 -0
- package/dist/engine/convention-scanner/convention-parser.d.ts +7 -0
- package/dist/engine/convention-scanner/convention-parser.d.ts.map +1 -0
- package/dist/engine/convention-scanner/convention-parser.js +195 -0
- package/dist/engine/convention-scanner/convention-parser.js.map +1 -0
- package/dist/engine/convention-scanner/index.d.ts +3 -0
- package/dist/engine/convention-scanner/index.d.ts.map +1 -0
- package/dist/engine/convention-scanner/index.js +5 -0
- package/dist/engine/convention-scanner/index.js.map +1 -0
- package/dist/engine/convention-sync.d.ts +9 -0
- package/dist/engine/convention-sync.d.ts.map +1 -0
- package/dist/engine/convention-sync.js +156 -0
- package/dist/engine/convention-sync.js.map +1 -0
- package/dist/engine/doc-generator/portal/portal-regenerator.d.ts +2 -1
- package/dist/engine/doc-generator/portal/portal-regenerator.d.ts.map +1 -1
- package/dist/engine/doc-generator/portal/portal-regenerator.js +23 -15
- package/dist/engine/doc-generator/portal/portal-regenerator.js.map +1 -1
- package/dist/engine/feedback/triage.d.ts +16 -0
- package/dist/engine/feedback/triage.d.ts.map +1 -0
- package/dist/engine/feedback/triage.js +165 -0
- package/dist/engine/feedback/triage.js.map +1 -0
- package/dist/engine/hooks-reconciler.d.ts +7 -0
- package/dist/engine/hooks-reconciler.d.ts.map +1 -0
- package/dist/engine/hooks-reconciler.js +214 -0
- package/dist/engine/hooks-reconciler.js.map +1 -0
- package/dist/engine/platform-registry.d.ts +17 -0
- package/dist/engine/platform-registry.d.ts.map +1 -0
- package/dist/engine/platform-registry.js +78 -0
- package/dist/engine/platform-registry.js.map +1 -0
- package/dist/engine/project-health-checker.d.ts +4 -2
- package/dist/engine/project-health-checker.d.ts.map +1 -1
- package/dist/engine/project-health-checker.js +96 -7
- package/dist/engine/project-health-checker.js.map +1 -1
- package/dist/engine/rules-generator/index.d.ts +14 -0
- package/dist/engine/rules-generator/index.d.ts.map +1 -0
- package/dist/engine/rules-generator/index.js +313 -0
- package/dist/engine/rules-generator/index.js.map +1 -0
- package/dist/engine/rules-reconciler.d.ts +13 -0
- package/dist/engine/rules-reconciler.d.ts.map +1 -0
- package/dist/engine/rules-reconciler.js +193 -0
- package/dist/engine/rules-reconciler.js.map +1 -0
- package/dist/engine/skill-generator/detect.d.ts +1 -0
- package/dist/engine/skill-generator/detect.d.ts.map +1 -1
- package/dist/engine/skill-generator/detect.js +13 -5
- package/dist/engine/skill-generator/detect.js.map +1 -1
- package/dist/engine/skills/skills-fetcher.d.ts +4 -0
- package/dist/engine/skills/skills-fetcher.d.ts.map +1 -0
- package/dist/engine/skills/skills-fetcher.js +102 -0
- package/dist/engine/skills/skills-fetcher.js.map +1 -0
- package/dist/engine/skills-reconciler.d.ts +15 -0
- package/dist/engine/skills-reconciler.d.ts.map +1 -0
- package/dist/engine/skills-reconciler.js +98 -0
- package/dist/engine/skills-reconciler.js.map +1 -0
- package/dist/engine/spec-template-cleaner.d.ts +12 -0
- package/dist/engine/spec-template-cleaner.d.ts.map +1 -0
- package/dist/engine/spec-template-cleaner.js +119 -0
- package/dist/engine/spec-template-cleaner.js.map +1 -0
- package/dist/engine/validator/analyzer.d.ts +4 -2
- package/dist/engine/validator/analyzer.d.ts.map +1 -1
- package/dist/engine/validator/analyzer.js +5 -2
- package/dist/engine/validator/analyzer.js.map +1 -1
- package/dist/engine/validator/deep-code-checker.d.ts +4 -2
- package/dist/engine/validator/deep-code-checker.d.ts.map +1 -1
- package/dist/engine/validator/deep-code-checker.js +44 -1
- package/dist/engine/validator/deep-code-checker.js.map +1 -1
- package/dist/engine/validator/extractors.d.ts +8 -1
- package/dist/engine/validator/extractors.d.ts.map +1 -1
- package/dist/engine/validator/extractors.js +33 -0
- package/dist/engine/validator/extractors.js.map +1 -1
- package/dist/engine/validator.d.ts.map +1 -1
- package/dist/engine/validator.js +13 -2
- package/dist/engine/validator.js.map +1 -1
- package/dist/engine/workers/schema.d.ts +58 -0
- package/dist/engine/workers/schema.d.ts.map +1 -0
- package/dist/engine/workers/schema.js +41 -0
- package/dist/engine/workers/schema.js.map +1 -0
- package/dist/engine/workers/worker-engine.js +1 -1
- package/dist/engine/workers/worker-engine.js.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/convention-baseline.d.ts +20 -0
- package/dist/storage/convention-baseline.d.ts.map +1 -0
- package/dist/storage/convention-baseline.js +57 -0
- package/dist/storage/convention-baseline.js.map +1 -0
- package/dist/storage/feedback-remote.d.ts +8 -0
- package/dist/storage/feedback-remote.d.ts.map +1 -0
- package/dist/storage/feedback-remote.js +27 -0
- package/dist/storage/feedback-remote.js.map +1 -0
- package/dist/storage/feedback-store.d.ts +27 -0
- package/dist/storage/feedback-store.d.ts.map +1 -0
- package/dist/storage/feedback-store.js +272 -0
- package/dist/storage/feedback-store.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/tools/convention-sync.d.ts +8 -0
- package/dist/tools/convention-sync.d.ts.map +1 -0
- package/dist/tools/convention-sync.js +77 -0
- package/dist/tools/convention-sync.js.map +1 -0
- package/dist/tools/create-spec/post-creation.js +1 -1
- package/dist/tools/create-spec/post-creation.js.map +1 -1
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.d.ts +9 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.js +68 -0
- package/dist/tools/create-spec-hu/ac-adapters/convention-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.d.ts +14 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.js +60 -0
- package/dist/tools/create-spec-hu/ac-adapters/custom-template-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts +4 -0
- package/dist/tools/create-spec-hu/ac-adapters/index.d.ts.map +1 -1
- package/dist/tools/create-spec-hu/ac-adapters/index.js +9 -1
- package/dist/tools/create-spec-hu/ac-adapters/index.js.map +1 -1
- package/dist/tools/create-spec-hu/serverless-hu-adapter.d.ts +8 -0
- package/dist/tools/create-spec-hu/serverless-hu-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec-hu/serverless-hu-adapter.js +46 -0
- package/dist/tools/create-spec-hu/serverless-hu-adapter.js.map +1 -0
- package/dist/tools/create-spec-hu.d.ts.map +1 -1
- package/dist/tools/create-spec-hu.js +4 -0
- package/dist/tools/create-spec-hu.js.map +1 -1
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +3 -2
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/delete-decision.d.ts.map +1 -1
- package/dist/tools/delete-decision.js +2 -0
- package/dist/tools/delete-decision.js.map +1 -1
- package/dist/tools/delete-project.d.ts.map +1 -1
- package/dist/tools/delete-project.js +11 -14
- package/dist/tools/delete-project.js.map +1 -1
- package/dist/tools/delete-spec.d.ts.map +1 -1
- package/dist/tools/delete-spec.js +11 -9
- package/dist/tools/delete-spec.js.map +1 -1
- package/dist/tools/estimate.d.ts.map +1 -1
- package/dist/tools/estimate.js +6 -5
- package/dist/tools/estimate.js.map +1 -1
- package/dist/tools/export-session.d.ts.map +1 -1
- package/dist/tools/export-session.js +13 -10
- package/dist/tools/export-session.js.map +1 -1
- package/dist/tools/feedback-handler.d.ts +5 -0
- package/dist/tools/feedback-handler.d.ts.map +1 -0
- package/dist/tools/feedback-handler.js +106 -0
- package/dist/tools/feedback-handler.js.map +1 -0
- package/dist/tools/generate-teammate-prompt.d.ts +8 -0
- package/dist/tools/generate-teammate-prompt.d.ts.map +1 -1
- package/dist/tools/generate-teammate-prompt.js +33 -0
- package/dist/tools/generate-teammate-prompt.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +42 -7
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/helpers.d.ts.map +1 -1
- package/dist/tools/init-project/helpers.js +1 -2
- package/dist/tools/init-project/helpers.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts.map +1 -1
- package/dist/tools/init-project/result-builder.js +12 -1
- package/dist/tools/init-project/result-builder.js.map +1 -1
- package/dist/tools/log-decision.d.ts.map +1 -1
- package/dist/tools/log-decision.js +15 -4
- package/dist/tools/log-decision.js.map +1 -1
- package/dist/tools/manage-trash.d.ts.map +1 -1
- package/dist/tools/manage-trash.js +13 -27
- package/dist/tools/manage-trash.js.map +1 -1
- package/dist/tools/reconcile-hooks.d.ts +7 -0
- package/dist/tools/reconcile-hooks.d.ts.map +1 -0
- package/dist/tools/reconcile-hooks.js +78 -0
- package/dist/tools/reconcile-hooks.js.map +1 -0
- package/dist/tools/reconcile-rules.d.ts +7 -0
- package/dist/tools/reconcile-rules.d.ts.map +1 -0
- package/dist/tools/reconcile-rules.js +86 -0
- package/dist/tools/reconcile-rules.js.map +1 -0
- package/dist/tools/reconcile-skills.d.ts +8 -0
- package/dist/tools/reconcile-skills.d.ts.map +1 -0
- package/dist/tools/reconcile-skills.js +70 -0
- package/dist/tools/reconcile-skills.js.map +1 -0
- package/dist/tools/register-feedback-tools.d.ts +3 -0
- package/dist/tools/register-feedback-tools.d.ts.map +1 -0
- package/dist/tools/register-feedback-tools.js +65 -0
- package/dist/tools/register-feedback-tools.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 +10 -4
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/tools/register-team-tools.d.ts.map +1 -1
- package/dist/tools/register-team-tools.js +35 -8
- package/dist/tools/register-team-tools.js.map +1 -1
- package/dist/tools/safe-handler.d.ts.map +1 -1
- package/dist/tools/safe-handler.js +20 -2
- package/dist/tools/safe-handler.js.map +1 -1
- package/dist/tools/schemas/index.d.ts +1 -0
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +1 -0
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts +7 -0
- package/dist/tools/schemas/reconcile-skills-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/reconcile-skills-schemas.js +18 -0
- package/dist/tools/schemas/reconcile-skills-schemas.js.map +1 -0
- package/dist/tools/schemas/workers-schema.d.ts +1 -56
- package/dist/tools/schemas/workers-schema.d.ts.map +1 -1
- package/dist/tools/schemas/workers-schema.js +6 -42
- package/dist/tools/schemas/workers-schema.js.map +1 -1
- package/dist/tools/skill-registry/search.d.ts.map +1 -1
- package/dist/tools/skill-registry/search.js +29 -3
- package/dist/tools/skill-registry/search.js.map +1 -1
- package/dist/tools/suggest-tooling/skills-fetcher.d.ts +1 -3
- package/dist/tools/suggest-tooling/skills-fetcher.d.ts.map +1 -1
- package/dist/tools/suggest-tooling/skills-fetcher.js +3 -101
- package/dist/tools/suggest-tooling/skills-fetcher.js.map +1 -1
- package/dist/tools/token-recording.d.ts +16 -0
- package/dist/tools/token-recording.d.ts.map +1 -0
- package/dist/tools/token-recording.js +47 -0
- package/dist/tools/token-recording.js.map +1 -0
- package/dist/tools/update-status-actions.d.ts.map +1 -1
- package/dist/tools/update-status-actions.js +1 -2
- package/dist/tools/update-status-actions.js.map +1 -1
- package/dist/tools/update-status-convention-gate.d.ts +12 -0
- package/dist/tools/update-status-convention-gate.d.ts.map +1 -0
- package/dist/tools/update-status-convention-gate.js +159 -0
- package/dist/tools/update-status-convention-gate.js.map +1 -0
- package/dist/tools/update-status-reconcile.d.ts +7 -0
- package/dist/tools/update-status-reconcile.d.ts.map +1 -0
- package/dist/tools/update-status-reconcile.js +47 -0
- package/dist/tools/update-status-reconcile.js.map +1 -0
- package/dist/tools/update-status.d.ts.map +1 -1
- package/dist/tools/update-status.js +113 -67
- package/dist/tools/update-status.js.map +1 -1
- package/dist/tools/validate.d.ts.map +1 -1
- package/dist/tools/validate.js +93 -3
- package/dist/tools/validate.js.map +1 -1
- package/dist/types/ai-tool-rules.d.ts +42 -0
- package/dist/types/ai-tool-rules.d.ts.map +1 -0
- package/dist/types/ai-tool-rules.js +3 -0
- package/dist/types/ai-tool-rules.js.map +1 -0
- package/dist/types/conventions.d.ts +155 -0
- package/dist/types/conventions.d.ts.map +1 -0
- package/dist/types/conventions.js +3 -0
- package/dist/types/conventions.js.map +1 -0
- package/dist/types/feedback.d.ts +76 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +3 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/project/planu-config.d.ts +4 -0
- package/dist/types/project/planu-config.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/license-plans.json +9 -2
- package/src/config/tool-groups.json +5 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// engine/skills/skills-fetcher.ts — SPEC-022: skills.sh catalog fetcher
|
|
2
|
+
// Business logic for fetching and recommending AI agent skills.
|
|
3
|
+
// Lives in engine/ so engine/ modules can import it without violating architecture.
|
|
4
|
+
import { fetchUrl } from '../web-fetcher/http-client.js';
|
|
5
|
+
export function isMcpServer(knowledge) {
|
|
6
|
+
const stackLower = knowledge.stack.map((s) => s.toLowerCase());
|
|
7
|
+
const toolingStr = JSON.stringify(knowledge.tooling).toLowerCase();
|
|
8
|
+
return (stackLower.some((s) => s.includes('mcp') || s.includes('@modelcontextprotocol')) ||
|
|
9
|
+
toolingStr.includes('modelcontextprotocol') ||
|
|
10
|
+
toolingStr.includes('@modelcontextprotocol'));
|
|
11
|
+
}
|
|
12
|
+
export async function fetchRecommendedSkills(knowledge) {
|
|
13
|
+
const skills = [];
|
|
14
|
+
// Always add mcp-builder first for MCP server projects
|
|
15
|
+
if (isMcpServer(knowledge)) {
|
|
16
|
+
skills.push({
|
|
17
|
+
name: 'mcp-builder',
|
|
18
|
+
description: 'Best practices and conventions for building high-quality MCP servers',
|
|
19
|
+
installCommand: 'npx skills add mcp-builder',
|
|
20
|
+
justification: 'Project detected as an MCP server (@modelcontextprotocol detected in stack/tooling)',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
// Fetch skills.sh catalog in real time (with graceful fallback to hardcoded skills)
|
|
24
|
+
const catalogSkills = await fetchSkillsShCatalog(knowledge.stack, knowledge.language);
|
|
25
|
+
if (catalogSkills.length > 0) {
|
|
26
|
+
skills.push(...catalogSkills);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Fallback: use hardcoded relevant skills when catalog is unavailable or empty
|
|
30
|
+
skills.push(...buildFallbackSkills(knowledge));
|
|
31
|
+
}
|
|
32
|
+
// Deduplicate by name
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
return skills.filter((s) => {
|
|
35
|
+
if (seen.has(s.name)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
seen.add(s.name);
|
|
39
|
+
return true;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async function fetchSkillsShCatalog(stack, language) {
|
|
43
|
+
const stackParam = encodeURIComponent([...stack, language].join(',').toLowerCase());
|
|
44
|
+
const url = `https://skills.sh/api/catalog?stack=${stackParam}`;
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetchUrl(url);
|
|
47
|
+
if (!response) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
const parsed = JSON.parse(response.content);
|
|
51
|
+
return (parsed.skills ?? []).slice(0, 5).map((s) => ({
|
|
52
|
+
name: s.name,
|
|
53
|
+
description: s.description ?? `Skill: ${s.name}`,
|
|
54
|
+
installCommand: s.installCommand ?? `npx skills add ${s.name}`,
|
|
55
|
+
justification: `Relevant to your ${language} stack`,
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* v8 ignore next */ // JSON.parse errors are unlikely with mocked fetchUrl in tests
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function buildFallbackSkills(knowledge) {
|
|
64
|
+
const skills = [];
|
|
65
|
+
const stackLower = knowledge.stack.map((s) => s.toLowerCase());
|
|
66
|
+
const lang = knowledge.language.toLowerCase();
|
|
67
|
+
if (lang === 'typescript' || lang === 'javascript') {
|
|
68
|
+
skills.push({
|
|
69
|
+
name: 'typescript-patterns',
|
|
70
|
+
description: 'TypeScript best practices, strict mode patterns, and type safety conventions',
|
|
71
|
+
installCommand: 'npx skills add typescript-patterns',
|
|
72
|
+
justification: `Project uses ${knowledge.language}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (stackLower.some((s) => s.includes('react'))) {
|
|
76
|
+
skills.push({
|
|
77
|
+
name: 'react-patterns',
|
|
78
|
+
description: 'React component patterns, hooks best practices, and performance optimization',
|
|
79
|
+
installCommand: 'npx skills add react-patterns',
|
|
80
|
+
justification: 'React detected in project stack',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (stackLower.some((s) => s.includes('next'))) {
|
|
84
|
+
skills.push({
|
|
85
|
+
name: 'nextjs-patterns',
|
|
86
|
+
description: 'Next.js App Router patterns, server components, and deployment best practices',
|
|
87
|
+
installCommand: 'npx skills add nextjs-patterns',
|
|
88
|
+
justification: 'Next.js detected in project stack',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (stackLower.some((s) => s.includes('python')) ||
|
|
92
|
+
knowledge.language.toLowerCase() === 'python') {
|
|
93
|
+
skills.push({
|
|
94
|
+
name: 'python-patterns',
|
|
95
|
+
description: 'Python best practices, type hints, async patterns, and testing conventions',
|
|
96
|
+
installCommand: 'npx skills add python-patterns',
|
|
97
|
+
justification: 'Python detected in project stack',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return skills;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=skills-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-fetcher.js","sourceRoot":"","sources":["../../../src/engine/skills/skills-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SkillsReconciliation, ProjectKnowledge } from '../types/index.js';
|
|
2
|
+
export type { SkillsReconciliation };
|
|
3
|
+
/**
|
|
4
|
+
* Scan the project's installed skills against the recommended set for its current stack.
|
|
5
|
+
*
|
|
6
|
+
* Algorithm:
|
|
7
|
+
* 1. Load ProjectKnowledge to obtain the current stack + language.
|
|
8
|
+
* 2. Read the manifest from `.claude/skills/manifest.json`.
|
|
9
|
+
* 3. Also enumerate `.md` files in `.claude/skills/` to catch manually installed skills.
|
|
10
|
+
* 4. Fetch recommended skills for the current stack (same logic as suggest_tooling).
|
|
11
|
+
* 5. Diff: missing = recommended − installed; stale = installed − recommended.
|
|
12
|
+
* 6. Compute health score and return the reconciliation report.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reconcileSkills(projectPath: string, knowledge: ProjectKnowledge | null): Promise<SkillsReconciliation>;
|
|
15
|
+
//# sourceMappingURL=skills-reconciler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-reconciler.d.ts","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC,oBAAoB,CAAC,CA8B/B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// engine/skills-reconciler.ts — SPEC-189: Detect stack changes and reconcile skills
|
|
2
|
+
// Compares recommended skills (based on current stack) with installed skills.
|
|
3
|
+
// Read-only analysis — does NOT install or remove anything.
|
|
4
|
+
import * as fs from 'node:fs/promises';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import { readSkillManifest } from './skill-registry/installer.js';
|
|
7
|
+
import { fetchRecommendedSkills } from './skills/skills-fetcher.js';
|
|
8
|
+
/**
|
|
9
|
+
* Scan the project's installed skills against the recommended set for its current stack.
|
|
10
|
+
*
|
|
11
|
+
* Algorithm:
|
|
12
|
+
* 1. Load ProjectKnowledge to obtain the current stack + language.
|
|
13
|
+
* 2. Read the manifest from `.claude/skills/manifest.json`.
|
|
14
|
+
* 3. Also enumerate `.md` files in `.claude/skills/` to catch manually installed skills.
|
|
15
|
+
* 4. Fetch recommended skills for the current stack (same logic as suggest_tooling).
|
|
16
|
+
* 5. Diff: missing = recommended − installed; stale = installed − recommended.
|
|
17
|
+
* 6. Compute health score and return the reconciliation report.
|
|
18
|
+
*/
|
|
19
|
+
export async function reconcileSkills(projectPath, knowledge) {
|
|
20
|
+
if (!knowledge) {
|
|
21
|
+
return buildEmptyReconciliation('Project knowledge not found — run init_project first.');
|
|
22
|
+
}
|
|
23
|
+
const [installedNames, recommendedSkills] = await Promise.all([
|
|
24
|
+
listInstalledSkillNames(projectPath),
|
|
25
|
+
fetchRecommendedSkills(knowledge),
|
|
26
|
+
]);
|
|
27
|
+
const recommendedNames = new Set(recommendedSkills.map((s) => s.name));
|
|
28
|
+
const installedSet = new Set(installedNames);
|
|
29
|
+
const newSkillsDetected = recommendedSkills
|
|
30
|
+
.filter((s) => !installedSet.has(s.name))
|
|
31
|
+
.map((s) => s.name);
|
|
32
|
+
const staleSkills = installedNames.filter((name) => !recommendedNames.has(name));
|
|
33
|
+
const totalRelevant = recommendedNames.size;
|
|
34
|
+
const alreadyInSync = installedNames.filter((name) => recommendedNames.has(name)).length;
|
|
35
|
+
const healthScore = computeHealthScore(totalRelevant, alreadyInSync, staleSkills.length);
|
|
36
|
+
return {
|
|
37
|
+
skillsInSync: newSkillsDetected.length === 0 && staleSkills.length === 0,
|
|
38
|
+
newSkillsDetected,
|
|
39
|
+
staleSkills,
|
|
40
|
+
updatedSkills: [],
|
|
41
|
+
healthScore,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Helpers
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* Collect all skill names present on disk:
|
|
49
|
+
* - From manifest.json (canonical source)
|
|
50
|
+
* - From .md files in .claude/skills/ (manually placed skills without manifest entry)
|
|
51
|
+
*
|
|
52
|
+
* Returns deduplicated list of skill names (without .md extension).
|
|
53
|
+
*/
|
|
54
|
+
async function listInstalledSkillNames(projectPath) {
|
|
55
|
+
const skillsDir = path.join(projectPath, '.claude', 'skills');
|
|
56
|
+
const names = new Set();
|
|
57
|
+
// 1. Read manifest
|
|
58
|
+
const manifest = await readSkillManifest(projectPath);
|
|
59
|
+
for (const entry of manifest.skills) {
|
|
60
|
+
names.add(entry.name);
|
|
61
|
+
}
|
|
62
|
+
// 2. Enumerate .md files (manually installed skills not in manifest)
|
|
63
|
+
try {
|
|
64
|
+
const entries = await fs.readdir(skillsDir);
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (entry.endsWith('.md')) {
|
|
67
|
+
names.add(entry.slice(0, -3)); // strip .md
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Directory does not exist — no skills installed yet
|
|
73
|
+
}
|
|
74
|
+
return [...names];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Compute a 0–100 health score.
|
|
78
|
+
*
|
|
79
|
+
* Formula:
|
|
80
|
+
* base = alreadyInSync / totalRelevant * 100 (or 100 when totalRelevant === 0)
|
|
81
|
+
* penalty = staleCount * 5 (each stale skill costs 5 points)
|
|
82
|
+
*/
|
|
83
|
+
function computeHealthScore(totalRelevant, alreadyInSync, staleCount) {
|
|
84
|
+
const base = totalRelevant === 0 ? 100 : Math.round((alreadyInSync / totalRelevant) * 100);
|
|
85
|
+
const penalty = staleCount * 5;
|
|
86
|
+
return Math.max(0, base - penalty);
|
|
87
|
+
}
|
|
88
|
+
/** Return a neutral reconciliation when prerequisites are missing. */
|
|
89
|
+
function buildEmptyReconciliation(_reason) {
|
|
90
|
+
return {
|
|
91
|
+
skillsInSync: false,
|
|
92
|
+
newSkillsDetected: [],
|
|
93
|
+
staleSkills: [],
|
|
94
|
+
updatedSkills: [],
|
|
95
|
+
healthScore: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=skills-reconciler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-reconciler.js","sourceRoot":"","sources":["../../src/engine/skills-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip sections from spec content that contain only template/placeholder text.
|
|
3
|
+
*
|
|
4
|
+
* Targets:
|
|
5
|
+
* - "Affected Modules" sections with no real module list
|
|
6
|
+
* - "Entity Relationship" sections using ENTITY_A / ENTITY_B placeholders
|
|
7
|
+
* - Mermaid diagram blocks with no real domain nodes (graph LR with no meaningful edges)
|
|
8
|
+
*
|
|
9
|
+
* Keeps all sections that have real, project-specific content.
|
|
10
|
+
*/
|
|
11
|
+
export declare function stripEmptySections(content: string): string;
|
|
12
|
+
//# sourceMappingURL=spec-template-cleaner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-template-cleaner.d.ts","sourceRoot":"","sources":["../../src/engine/spec-template-cleaner.ts"],"names":[],"mappings":"AAoGA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA0B1D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// engine/spec-template-cleaner.ts — Strip unfilled template sections from spec content.
|
|
2
|
+
// Applied before writing HU.md and FICHA-TECNICA.md to prevent generic placeholders
|
|
3
|
+
// from leaking into committed spec files.
|
|
4
|
+
/**
|
|
5
|
+
* Patterns that identify template sections with no real project-specific content.
|
|
6
|
+
* A section is considered "empty" if its body only contains these patterns.
|
|
7
|
+
*/
|
|
8
|
+
/** Lines that are considered pure placeholders (no real content). */
|
|
9
|
+
const PLACEHOLDER_LINE_PATTERNS = [
|
|
10
|
+
/^\s*-\s*\(List (modules|files|affected environments|edge cases|step|section)\b.*\)\s*$/i,
|
|
11
|
+
/^\s*-\s*\(Define what is NOT included.*\)\s*$/i,
|
|
12
|
+
/^\s*-\s*\(Describe .*\)\s*$/i,
|
|
13
|
+
/^\s*-\s*\(Analyze .*\)\s*$/i,
|
|
14
|
+
/^\s*-\s*\(Why .*\)\s*$/i,
|
|
15
|
+
/^\s*-\s*\(List .*\)\s*$/i,
|
|
16
|
+
/^\s*1\.\s*\(.*\)\s*$/,
|
|
17
|
+
/^\s*2\.\s*\(.*\)\s*$/,
|
|
18
|
+
];
|
|
19
|
+
/** Section headings whose entire block is replaceable when the body is template-only. */
|
|
20
|
+
const STRIPPABLE_SECTION_HEADINGS = [
|
|
21
|
+
/^## Affected Modules$/i,
|
|
22
|
+
/^## Entity Relationship/i,
|
|
23
|
+
];
|
|
24
|
+
/** Mermaid diagram blocks considered empty (no real domain nodes). */
|
|
25
|
+
const EMPTY_MERMAID_PATTERNS = [
|
|
26
|
+
// ER diagrams with only ENTITY_A / ENTITY_B placeholders
|
|
27
|
+
/```mermaid\s*\nerDiagram\s*\n(?:\s*%%[^\n]*\n)*\s*ENTITY_A\s*\{[\s\S]*?\}\s*\n\s*ENTITY_B\s*\{[\s\S]*?\}\s*\n\s*ENTITY_A\s*\|\|--o\{[^\n]*\n\s*```/,
|
|
28
|
+
];
|
|
29
|
+
/** Inline content patterns that mark sections as template-only. */
|
|
30
|
+
const ENTITY_AB_CONTENT = /ENTITY_A|ENTITY_B/;
|
|
31
|
+
const TBD_ONLY = /^\s*-?\s*(TBD|TODO|N\/A|None|n\/a)\s*$/i;
|
|
32
|
+
/**
|
|
33
|
+
* Returns true if a text block (section body without the heading line) contains
|
|
34
|
+
* only placeholder/template content and no real project-specific information.
|
|
35
|
+
*/
|
|
36
|
+
function isBodyPlaceholderOnly(body) {
|
|
37
|
+
const lines = body
|
|
38
|
+
.split('\n')
|
|
39
|
+
.map((l) => l.trim())
|
|
40
|
+
.filter((l) => l.length > 0);
|
|
41
|
+
if (lines.length === 0) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
// Contains generic ENTITY_A / ENTITY_B references
|
|
45
|
+
if (ENTITY_AB_CONTENT.test(body)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// All non-empty lines are placeholder patterns or TBD
|
|
49
|
+
return lines.every((line) => {
|
|
50
|
+
if (TBD_ONLY.test(line)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return PLACEHOLDER_LINE_PATTERNS.some((p) => p.test(line));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Split markdown content into sections keyed by their heading line.
|
|
58
|
+
* Returns an array of { heading, body } tuples preserving order.
|
|
59
|
+
*/
|
|
60
|
+
function splitSections(content) {
|
|
61
|
+
const lines = content.split('\n');
|
|
62
|
+
const sections = [];
|
|
63
|
+
let currentHeading = '';
|
|
64
|
+
let currentBody = [];
|
|
65
|
+
for (const line of lines) {
|
|
66
|
+
if (/^#{1,3} /.test(line)) {
|
|
67
|
+
sections.push({ heading: currentHeading, body: currentBody.join('\n') });
|
|
68
|
+
currentHeading = line;
|
|
69
|
+
currentBody = [];
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
currentBody.push(line);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
sections.push({ heading: currentHeading, body: currentBody.join('\n') });
|
|
76
|
+
return sections;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Remove empty Mermaid diagram blocks that contain only generic placeholder nodes.
|
|
80
|
+
* Operates on the full content string (regex-based, not line-by-line).
|
|
81
|
+
*/
|
|
82
|
+
function stripEmptyMermaidBlocks(content) {
|
|
83
|
+
let result = content;
|
|
84
|
+
for (const pattern of EMPTY_MERMAID_PATTERNS) {
|
|
85
|
+
result = result.replace(pattern, '');
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Strip sections from spec content that contain only template/placeholder text.
|
|
91
|
+
*
|
|
92
|
+
* Targets:
|
|
93
|
+
* - "Affected Modules" sections with no real module list
|
|
94
|
+
* - "Entity Relationship" sections using ENTITY_A / ENTITY_B placeholders
|
|
95
|
+
* - Mermaid diagram blocks with no real domain nodes (graph LR with no meaningful edges)
|
|
96
|
+
*
|
|
97
|
+
* Keeps all sections that have real, project-specific content.
|
|
98
|
+
*/
|
|
99
|
+
export function stripEmptySections(content) {
|
|
100
|
+
// First pass: remove empty mermaid diagram blocks
|
|
101
|
+
const result = stripEmptyMermaidBlocks(content);
|
|
102
|
+
// Second pass: remove strippable sections with placeholder-only bodies
|
|
103
|
+
const sections = splitSections(result);
|
|
104
|
+
const kept = [];
|
|
105
|
+
for (const { heading, body } of sections) {
|
|
106
|
+
const shouldStrip = STRIPPABLE_SECTION_HEADINGS.some((pattern) => pattern.test(heading));
|
|
107
|
+
if (shouldStrip && isBodyPlaceholderOnly(body)) {
|
|
108
|
+
// Drop this section entirely — heading + body
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
kept.push(heading ? `${heading}\n${body}` : body);
|
|
112
|
+
}
|
|
113
|
+
// Re-join and normalize multiple consecutive blank lines to at most two
|
|
114
|
+
return (kept
|
|
115
|
+
.join('\n')
|
|
116
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
117
|
+
.trimEnd() + '\n');
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=spec-template-cleaner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-template-cleaner.js","sourceRoot":"","sources":["../../src/engine/spec-template-cleaner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import type { Spec, AuditFinding, CodeState } from '../../types/index.js';
|
|
1
|
+
import type { Spec, AuditFinding, CodeState, VerifyBlock } from '../../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Scan the project directory to build a CodeState for the given spec.
|
|
4
4
|
*/
|
|
5
5
|
export declare function scanCodeForSpec(spec: Spec, projectPath: string): Promise<CodeState>;
|
|
6
6
|
/**
|
|
7
7
|
* Check whether a single criterion is satisfied in the given code state.
|
|
8
|
+
* When `verifyBlock` is provided it is forwarded to deepCheckCriterion,
|
|
9
|
+
* bypassing keyword-based classification (explicit beats inferred).
|
|
8
10
|
*/
|
|
9
|
-
export declare function checkCriterion(criterion: string, projectPath: string, codeState: CodeState): Promise<boolean>;
|
|
11
|
+
export declare function checkCriterion(criterion: string, projectPath: string, codeState: CodeState, verifyBlock?: VerifyBlock): Promise<boolean>;
|
|
10
12
|
/**
|
|
11
13
|
* Classify the severity of a missing criterion based on its content.
|
|
12
14
|
*/
|
|
@@ -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,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGvF;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiFzF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,EACpB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,OAAO,CAAC,CA4ElB;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"}
|
|
@@ -92,8 +92,10 @@ export async function scanCodeForSpec(spec, projectPath) {
|
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Check whether a single criterion is satisfied in the given code state.
|
|
95
|
+
* When `verifyBlock` is provided it is forwarded to deepCheckCriterion,
|
|
96
|
+
* bypassing keyword-based classification (explicit beats inferred).
|
|
95
97
|
*/
|
|
96
|
-
export async function checkCriterion(criterion, projectPath, codeState) {
|
|
98
|
+
export async function checkCriterion(criterion, projectPath, codeState, verifyBlock) {
|
|
97
99
|
// Check for file existence criteria
|
|
98
100
|
const fileMatch = /(?:create|add|implement)\s+(?:file\s+)?["']?([^\s"']+\.\w+)["']?/i.exec(criterion);
|
|
99
101
|
if (fileMatch?.[1]) {
|
|
@@ -150,9 +152,10 @@ export async function checkCriterion(criterion, projectPath, codeState) {
|
|
|
150
152
|
}
|
|
151
153
|
}
|
|
152
154
|
// Deep code check: grep/metric/coverage analysis on the actual filesystem.
|
|
155
|
+
// If a verify block is present it is passed explicitly (bypasses keyword inference).
|
|
153
156
|
// For non-manual checks, the deep result is authoritative.
|
|
154
157
|
// For manual checks (type === 'manual'), we fall back to the optimistic heuristic.
|
|
155
|
-
const deepResult = deepCheckCriterion(criterion, projectPath);
|
|
158
|
+
const deepResult = deepCheckCriterion(criterion, projectPath, verifyBlock);
|
|
156
159
|
if (deepResult.checkType !== 'manual') {
|
|
157
160
|
return deepResult.passed;
|
|
158
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/engine/validator/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DeepCheckResult, DeepCheckConfig, DeepCheckType } from '../../types/index.js';
|
|
1
|
+
import type { DeepCheckResult, DeepCheckConfig, DeepCheckType, VerifyBlock } from '../../types/index.js';
|
|
2
2
|
export type { DeepCheckResult, DeepCheckConfig, DeepCheckType };
|
|
3
3
|
/**
|
|
4
4
|
* Classify criterion text into a check type using keyword heuristics.
|
|
@@ -30,8 +30,10 @@ export declare function coverageCheck(sourceGlob: string, testGlob: string, proj
|
|
|
30
30
|
export declare function fileExistsCheck(config: DeepCheckConfig, projectPath: string): DeepCheckResult;
|
|
31
31
|
/**
|
|
32
32
|
* Classify a criterion and dispatch to the appropriate checker.
|
|
33
|
+
* When `explicitVerify` is provided the keyword-based classifier is bypassed
|
|
34
|
+
* and the verify block is used directly for the check.
|
|
33
35
|
*/
|
|
34
|
-
export declare function deepCheckCriterion(criterionText: string, projectPath: string): DeepCheckResult;
|
|
36
|
+
export declare function deepCheckCriterion(criterionText: string, projectPath: string, explicitVerify?: VerifyBlock): DeepCheckResult;
|
|
35
37
|
/**
|
|
36
38
|
* Run deep checks on all criteria. Returns one result per criterion.
|
|
37
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-code-checker.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"deep-code-checker.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAG9B,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;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,WAAW,GAC3B,eAAe,CAsEjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAExF"}
|
|
@@ -237,10 +237,53 @@ export function fileExistsCheck(config, projectPath) {
|
|
|
237
237
|
};
|
|
238
238
|
}
|
|
239
239
|
// ─── Orchestrators ────────────────────────────────────────────────────────────
|
|
240
|
+
/**
|
|
241
|
+
* Build a DeepCheckConfig from a VerifyBlock.
|
|
242
|
+
* Maps the VerifyBlock fields to the internal DeepCheckConfig shape.
|
|
243
|
+
*/
|
|
244
|
+
function configFromVerifyBlock(block) {
|
|
245
|
+
return {
|
|
246
|
+
pattern: block.pattern ?? '',
|
|
247
|
+
scope: block.scope ?? 'src/**/*.{ts,tsx,js,jsx}',
|
|
248
|
+
exclude: block.exclude,
|
|
249
|
+
expected: block.expected ?? (block.type === 'grep_absent' ? 0 : 1),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
240
252
|
/**
|
|
241
253
|
* Classify a criterion and dispatch to the appropriate checker.
|
|
254
|
+
* When `explicitVerify` is provided the keyword-based classifier is bypassed
|
|
255
|
+
* and the verify block is used directly for the check.
|
|
242
256
|
*/
|
|
243
|
-
export function deepCheckCriterion(criterionText, projectPath) {
|
|
257
|
+
export function deepCheckCriterion(criterionText, projectPath, explicitVerify) {
|
|
258
|
+
// Use explicit verify block when available — skip keyword inference.
|
|
259
|
+
// VerifyType and DeepCheckType overlap but are not identical, so we compare
|
|
260
|
+
// the type as a string to avoid exhaustiveness errors on union mismatches.
|
|
261
|
+
if (explicitVerify) {
|
|
262
|
+
const config = configFromVerifyBlock(explicitVerify);
|
|
263
|
+
const vtype = explicitVerify.type;
|
|
264
|
+
if (vtype === 'grep_absent') {
|
|
265
|
+
return { ...grepCheck(config, projectPath, 'grep_absent'), criterionText };
|
|
266
|
+
}
|
|
267
|
+
if (vtype === 'grep_present') {
|
|
268
|
+
return { ...grepCheck(config, projectPath, 'grep_present'), criterionText };
|
|
269
|
+
}
|
|
270
|
+
if (vtype === 'metric_max') {
|
|
271
|
+
return { ...metricCheck(config, projectPath), criterionText };
|
|
272
|
+
}
|
|
273
|
+
if (vtype === 'file_exists') {
|
|
274
|
+
return { ...fileExistsCheck(config, projectPath), criterionText };
|
|
275
|
+
}
|
|
276
|
+
// manual, metric_min, command, and any unknown types fall through to manual result
|
|
277
|
+
return {
|
|
278
|
+
criterionText,
|
|
279
|
+
checkType: 'manual',
|
|
280
|
+
passed: true,
|
|
281
|
+
evidence: [],
|
|
282
|
+
matchCount: 0,
|
|
283
|
+
expected: 0,
|
|
284
|
+
description: explicitVerify.description,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
244
287
|
const { type, config } = classifyCriterion(criterionText);
|
|
245
288
|
if (type === 'manual' || !config) {
|
|
246
289
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-code-checker.js","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deep-code-checker.js","sourceRoot":"","sources":["../../../src/engine/validator/deep-code-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import type { Spec } from '../../types/index.js';
|
|
1
|
+
import type { Spec, VerifyBlock } from '../../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Extract all acceptance criteria from a spec's source files.
|
|
4
4
|
*/
|
|
5
5
|
export declare function extractCriteria(spec: Spec): Promise<string[]>;
|
|
6
|
+
/**
|
|
7
|
+
* Parse verify blocks from HTML comments following acceptance criteria checkboxes.
|
|
8
|
+
* Format: `- [ ] criterion text` followed by `<!-- verify: {...} -->`
|
|
9
|
+
* Returns a Map of criterion text -> VerifyBlock.
|
|
10
|
+
* Invalid JSON blocks are silently skipped (forgiving parser).
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractVerifyBlocks(content: string): Map<string, VerifyBlock>;
|
|
6
13
|
/**
|
|
7
14
|
* Extract the text content under a markdown heading that matches any of the given keywords.
|
|
8
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractors.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/extractors.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"extractors.d.ts","sourceRoot":"","sources":["../../../src/engine/validator/extractors.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG9D;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4DnE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CA6B7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CA8B3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB1D"}
|