codeloop-mcp-server 0.1.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/auth/api_key.d.ts +6 -0
- package/dist/auth/api_key.d.ts.map +1 -0
- package/dist/auth/api_key.js +87 -0
- package/dist/auth/api_key.js.map +1 -0
- package/dist/auth/usage_tracker.d.ts +7 -0
- package/dist/auth/usage_tracker.d.ts.map +1 -0
- package/dist/auth/usage_tracker.js +71 -0
- package/dist/auth/usage_tracker.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/diagnosis/vision_reviewer.d.ts +27 -0
- package/dist/diagnosis/vision_reviewer.d.ts.map +1 -0
- package/dist/diagnosis/vision_reviewer.js +345 -0
- package/dist/diagnosis/vision_reviewer.js.map +1 -0
- package/dist/evidence/artifacts.d.ts +12 -0
- package/dist/evidence/artifacts.d.ts.map +1 -0
- package/dist/evidence/artifacts.js +60 -0
- package/dist/evidence/artifacts.js.map +1 -0
- package/dist/evidence/screenshot_diff.d.ts +30 -0
- package/dist/evidence/screenshot_diff.d.ts.map +1 -0
- package/dist/evidence/screenshot_diff.js +144 -0
- package/dist/evidence/screenshot_diff.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +276 -0
- package/dist/index.js.map +1 -0
- package/dist/recommendations/knowledge_base.d.ts +21 -0
- package/dist/recommendations/knowledge_base.d.ts.map +1 -0
- package/dist/recommendations/knowledge_base.js +839 -0
- package/dist/recommendations/knowledge_base.js.map +1 -0
- package/dist/recommendations/selector.d.ts +3 -0
- package/dist/recommendations/selector.d.ts.map +1 -0
- package/dist/recommendations/selector.js +305 -0
- package/dist/recommendations/selector.js.map +1 -0
- package/dist/runners/base.d.ts +21 -0
- package/dist/runners/base.d.ts.map +1 -0
- package/dist/runners/base.js +70 -0
- package/dist/runners/base.js.map +1 -0
- package/dist/runners/flutter.d.ts +4 -0
- package/dist/runners/flutter.d.ts.map +1 -0
- package/dist/runners/flutter.js +72 -0
- package/dist/runners/flutter.js.map +1 -0
- package/dist/runners/generic.d.ts +3 -0
- package/dist/runners/generic.d.ts.map +1 -0
- package/dist/runners/generic.js +65 -0
- package/dist/runners/generic.js.map +1 -0
- package/dist/runners/maestro.d.ts +12 -0
- package/dist/runners/maestro.d.ts.map +1 -0
- package/dist/runners/maestro.js +133 -0
- package/dist/runners/maestro.js.map +1 -0
- package/dist/runners/playwright.d.ts +3 -0
- package/dist/runners/playwright.d.ts.map +1 -0
- package/dist/runners/playwright.js +76 -0
- package/dist/runners/playwright.js.map +1 -0
- package/dist/state/section_registry.d.ts +27 -0
- package/dist/state/section_registry.d.ts.map +1 -0
- package/dist/state/section_registry.js +219 -0
- package/dist/state/section_registry.js.map +1 -0
- package/dist/tools/design_compare.d.ts +4 -0
- package/dist/tools/design_compare.d.ts.map +1 -0
- package/dist/tools/design_compare.js +73 -0
- package/dist/tools/design_compare.js.map +1 -0
- package/dist/tools/diagnose.d.ts +3 -0
- package/dist/tools/diagnose.d.ts.map +1 -0
- package/dist/tools/diagnose.js +236 -0
- package/dist/tools/diagnose.js.map +1 -0
- package/dist/tools/gate_check.d.ts +3 -0
- package/dist/tools/gate_check.d.ts.map +1 -0
- package/dist/tools/gate_check.js +201 -0
- package/dist/tools/gate_check.js.map +1 -0
- package/dist/tools/integration_check.d.ts +13 -0
- package/dist/tools/integration_check.d.ts.map +1 -0
- package/dist/tools/integration_check.js +70 -0
- package/dist/tools/integration_check.js.map +1 -0
- package/dist/tools/release_readiness.d.ts +3 -0
- package/dist/tools/release_readiness.d.ts.map +1 -0
- package/dist/tools/release_readiness.js +153 -0
- package/dist/tools/release_readiness.js.map +1 -0
- package/dist/tools/replan.d.ts +12 -0
- package/dist/tools/replan.d.ts.map +1 -0
- package/dist/tools/replan.js +118 -0
- package/dist/tools/replan.js.map +1 -0
- package/dist/tools/section_status.d.ts +24 -0
- package/dist/tools/section_status.d.ts.map +1 -0
- package/dist/tools/section_status.js +61 -0
- package/dist/tools/section_status.js.map +1 -0
- package/dist/tools/update_baseline.d.ts +11 -0
- package/dist/tools/update_baseline.d.ts.map +1 -0
- package/dist/tools/update_baseline.js +19 -0
- package/dist/tools/update_baseline.js.map +1 -0
- package/dist/tools/verify.d.ts +4 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +136 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/tools/visual_review.d.ts +4 -0
- package/dist/tools/visual_review.d.ts.map +1 -0
- package/dist/tools/visual_review.js +142 -0
- package/dist/tools/visual_review.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { loadRunMeta, getRunDir, getArtifactsBaseDir } from "../evidence/artifacts.js";
|
|
4
|
+
const FAILURE_PATTERNS = [
|
|
5
|
+
{
|
|
6
|
+
pattern: /error:\s+(.+?)(?:\n|$)/i,
|
|
7
|
+
category: "deterministic_bug",
|
|
8
|
+
severity: "critical",
|
|
9
|
+
descriptionTemplate: "Build/compile error: $1",
|
|
10
|
+
rootCauseTemplate: "Compilation or type error in source code",
|
|
11
|
+
fixHint: "Fix the compile error in the affected file",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
pattern: /(?:FAILED|FAIL)\s+(.+?)(?:\n|$)/i,
|
|
15
|
+
category: "deterministic_bug",
|
|
16
|
+
severity: "high",
|
|
17
|
+
descriptionTemplate: "Test failure: $1",
|
|
18
|
+
rootCauseTemplate: "Test assertion did not match expected value",
|
|
19
|
+
fixHint: "Check the failing assertion and fix the implementation or test expectation",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
pattern: /Expected:\s*(.+?)(?:\n|$)/i,
|
|
23
|
+
category: "deterministic_bug",
|
|
24
|
+
severity: "high",
|
|
25
|
+
descriptionTemplate: "Assertion mismatch: expected $1",
|
|
26
|
+
rootCauseTemplate: "Value produced by code does not match test expectation",
|
|
27
|
+
fixHint: "Review the logic that produces the tested value",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
pattern: /command not found:\s*(.+?)(?:\n|$)/i,
|
|
31
|
+
category: "tool_not_installed",
|
|
32
|
+
severity: "high",
|
|
33
|
+
descriptionTemplate: "Tool not found: $1",
|
|
34
|
+
rootCauseTemplate: "Required CLI tool is not installed or not on PATH",
|
|
35
|
+
fixHint: "Install the missing tool or add it to PATH",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
pattern: /ENOENT[:\s]+.*?'(.+?)'/i,
|
|
39
|
+
category: "config_error",
|
|
40
|
+
severity: "high",
|
|
41
|
+
descriptionTemplate: "File not found: $1",
|
|
42
|
+
rootCauseTemplate: "A required file or directory does not exist",
|
|
43
|
+
fixHint: "Create the missing file or fix the path reference",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
pattern: /timeout|timed?\s*out/i,
|
|
47
|
+
category: "timeout",
|
|
48
|
+
severity: "medium",
|
|
49
|
+
descriptionTemplate: "Operation timed out",
|
|
50
|
+
rootCauseTemplate: "A process or test exceeded its time limit",
|
|
51
|
+
fixHint: "Increase timeout or optimize the slow operation",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
pattern: /permission denied|EACCES/i,
|
|
55
|
+
category: "permission_error",
|
|
56
|
+
severity: "high",
|
|
57
|
+
descriptionTemplate: "Permission denied",
|
|
58
|
+
rootCauseTemplate: "Insufficient filesystem or process permissions",
|
|
59
|
+
fixHint: "Check file permissions or run with appropriate access",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
pattern: /Cannot find module\s+'(.+?)'/i,
|
|
63
|
+
category: "dependency_missing",
|
|
64
|
+
severity: "critical",
|
|
65
|
+
descriptionTemplate: "Missing module: $1",
|
|
66
|
+
rootCauseTemplate: "A required dependency is not installed",
|
|
67
|
+
fixHint: "Run npm install or add the missing dependency to package.json",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
pattern: /ECONNREFUSED|ECONNRESET|ETIMEDOUT/i,
|
|
71
|
+
category: "environment_failure",
|
|
72
|
+
severity: "medium",
|
|
73
|
+
descriptionTemplate: "Network connection failure",
|
|
74
|
+
rootCauseTemplate: "A required service or API is unreachable",
|
|
75
|
+
fixHint: "Ensure the required service is running and accessible",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
pattern: /flaky|intermittent/i,
|
|
79
|
+
category: "flaky_test",
|
|
80
|
+
severity: "low",
|
|
81
|
+
descriptionTemplate: "Possible flaky test detected",
|
|
82
|
+
rootCauseTemplate: "Test result is inconsistent across runs",
|
|
83
|
+
fixHint: "Review test for race conditions, timing dependencies, or shared state",
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
export async function runDiagnose(input, config, cwd = process.cwd()) {
|
|
87
|
+
const baseDir = getArtifactsBaseDir(cwd);
|
|
88
|
+
const meta = loadRunMeta(input.run_id, baseDir);
|
|
89
|
+
if (!meta) {
|
|
90
|
+
return {
|
|
91
|
+
critical: [],
|
|
92
|
+
functional: [],
|
|
93
|
+
ui: [],
|
|
94
|
+
regressions: [],
|
|
95
|
+
repair_tasks: [],
|
|
96
|
+
issue_count: 0,
|
|
97
|
+
confidence: 0,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const runDir = getRunDir(input.run_id, baseDir);
|
|
101
|
+
const logContent = readAllLogs(runDir);
|
|
102
|
+
const issues = classifyFailures(logContent, input.focus_files);
|
|
103
|
+
// Deduplicate by description
|
|
104
|
+
const seen = new Set();
|
|
105
|
+
const uniqueIssues = issues.filter((issue) => {
|
|
106
|
+
if (seen.has(issue.description))
|
|
107
|
+
return false;
|
|
108
|
+
seen.add(issue.description);
|
|
109
|
+
return true;
|
|
110
|
+
});
|
|
111
|
+
const critical = uniqueIssues.filter((i) => i.severity === "critical");
|
|
112
|
+
const functional = uniqueIssues.filter((i) => i.severity === "high" &&
|
|
113
|
+
i.category !== "visual_only_issue");
|
|
114
|
+
const ui = uniqueIssues.filter((i) => i.category === "visual_only_issue");
|
|
115
|
+
const regressions = uniqueIssues.filter((i) => i.category === "integration_regression");
|
|
116
|
+
const repairTasks = generateRepairTasks(uniqueIssues, meta);
|
|
117
|
+
const confidence = computeDiagnosisConfidence(uniqueIssues);
|
|
118
|
+
return {
|
|
119
|
+
critical,
|
|
120
|
+
functional,
|
|
121
|
+
ui,
|
|
122
|
+
regressions,
|
|
123
|
+
repair_tasks: repairTasks,
|
|
124
|
+
issue_count: uniqueIssues.length,
|
|
125
|
+
confidence,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function readAllLogs(runDir) {
|
|
129
|
+
const logDir = join(runDir, "logs");
|
|
130
|
+
if (!existsSync(logDir))
|
|
131
|
+
return "";
|
|
132
|
+
return readdirSync(logDir)
|
|
133
|
+
.filter((f) => f.endsWith(".log"))
|
|
134
|
+
.map((f) => {
|
|
135
|
+
try {
|
|
136
|
+
return readFileSync(join(logDir, f), "utf-8");
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return "";
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
.join("\n---LOG-SEPARATOR---\n");
|
|
143
|
+
}
|
|
144
|
+
function classifyFailures(logContent, focusFiles) {
|
|
145
|
+
if (!logContent.trim())
|
|
146
|
+
return [];
|
|
147
|
+
const issues = [];
|
|
148
|
+
let issueCounter = 0;
|
|
149
|
+
for (const pattern of FAILURE_PATTERNS) {
|
|
150
|
+
const matches = logContent.matchAll(new RegExp(pattern.pattern, "gi"));
|
|
151
|
+
for (const match of matches) {
|
|
152
|
+
issueCounter++;
|
|
153
|
+
const captured = match[1] || "";
|
|
154
|
+
const description = pattern.descriptionTemplate.replace("$1", captured.trim());
|
|
155
|
+
const rootCause = pattern.rootCauseTemplate;
|
|
156
|
+
const affectedFiles = focusFiles || extractAffectedFiles(logContent, match.index || 0);
|
|
157
|
+
issues.push({
|
|
158
|
+
issue_id: `issue_${issueCounter}`,
|
|
159
|
+
description,
|
|
160
|
+
severity: pattern.severity,
|
|
161
|
+
category: pattern.category,
|
|
162
|
+
confidence: 80,
|
|
163
|
+
evidence: match[0].trim().slice(0, 500),
|
|
164
|
+
evidence_paths: [],
|
|
165
|
+
likely_root_cause: rootCause,
|
|
166
|
+
affected_files: affectedFiles,
|
|
167
|
+
fix_hint: pattern.fixHint,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return issues;
|
|
172
|
+
}
|
|
173
|
+
function extractAffectedFiles(logContent, matchIndex) {
|
|
174
|
+
// Look for file paths near the match location
|
|
175
|
+
const contextWindow = logContent.slice(Math.max(0, matchIndex - 200), matchIndex + 300);
|
|
176
|
+
const filePattern = /(?:(?:\.\/|\/)?[\w\-./]+\.(?:ts|js|dart|tsx|jsx|py|rb|go|rs|java|kt|swift))/g;
|
|
177
|
+
const files = new Set();
|
|
178
|
+
for (const fileMatch of contextWindow.matchAll(filePattern)) {
|
|
179
|
+
files.add(fileMatch[0]);
|
|
180
|
+
}
|
|
181
|
+
return Array.from(files).slice(0, 5);
|
|
182
|
+
}
|
|
183
|
+
function generateRepairTasks(issues, meta) {
|
|
184
|
+
return issues
|
|
185
|
+
.filter((i) => i.severity === "critical" || i.severity === "high")
|
|
186
|
+
.sort((a, b) => {
|
|
187
|
+
const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
188
|
+
return severityOrder[a.severity] - severityOrder[b.severity];
|
|
189
|
+
})
|
|
190
|
+
.map((issue, index) => ({
|
|
191
|
+
issue_id: issue.issue_id,
|
|
192
|
+
description: issue.description,
|
|
193
|
+
severity: issue.severity,
|
|
194
|
+
category: issue.category,
|
|
195
|
+
confidence: issue.confidence,
|
|
196
|
+
evidence_paths: issue.evidence_paths,
|
|
197
|
+
likely_root_cause: issue.likely_root_cause,
|
|
198
|
+
allowed_file_scope: issue.affected_files,
|
|
199
|
+
rerun_commands: getRerunCommands(issue, meta),
|
|
200
|
+
stop_condition: `Issue "${issue.description}" is resolved and rerun produces no matching failure`,
|
|
201
|
+
related_test: "",
|
|
202
|
+
priority: index + 1,
|
|
203
|
+
expected_outcome: `The ${issue.category} issue should be fixed: ${issue.fix_hint}`,
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
function getRerunCommands(issue, meta) {
|
|
207
|
+
switch (issue.category) {
|
|
208
|
+
case "deterministic_bug":
|
|
209
|
+
case "likely_test_bug":
|
|
210
|
+
if (meta.platform === "flutter") {
|
|
211
|
+
return ["flutter analyze", "flutter test"];
|
|
212
|
+
}
|
|
213
|
+
return ["npm test"];
|
|
214
|
+
case "tool_not_installed":
|
|
215
|
+
case "dependency_missing":
|
|
216
|
+
return ["npm install", "npm test"];
|
|
217
|
+
case "config_error":
|
|
218
|
+
return ["npm test"];
|
|
219
|
+
default:
|
|
220
|
+
return ["npm test"];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function computeDiagnosisConfidence(issues) {
|
|
224
|
+
if (issues.length === 0)
|
|
225
|
+
return 100;
|
|
226
|
+
const avgConfidence = issues.reduce((s, i) => s + i.confidence, 0) / issues.length;
|
|
227
|
+
const hasCritical = issues.some((i) => i.severity === "critical");
|
|
228
|
+
const hasUnknown = issues.some((i) => i.category === "unknown");
|
|
229
|
+
let confidence = avgConfidence;
|
|
230
|
+
if (hasCritical)
|
|
231
|
+
confidence = Math.min(confidence, 60);
|
|
232
|
+
if (hasUnknown)
|
|
233
|
+
confidence -= 10;
|
|
234
|
+
return Math.max(0, Math.min(100, Math.round(confidence)));
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=diagnose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate_check.d.ts","sourceRoot":"","sources":["../../src/tools/gate_check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAU9B,wBAAsB,YAAY,CAChC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkD1B"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "fs";
|
|
2
|
+
import { DEFAULT_GATES } from "@codelooptech/shared";
|
|
3
|
+
import { loadRunMeta, getArtifactsBaseDir } from "../evidence/artifacts.js";
|
|
4
|
+
export async function runGateCheck(input, config, cwd = process.cwd()) {
|
|
5
|
+
const baseDir = getArtifactsBaseDir(cwd);
|
|
6
|
+
const meta = loadRunMeta(input.run_id, baseDir);
|
|
7
|
+
if (!meta) {
|
|
8
|
+
return {
|
|
9
|
+
passed: false,
|
|
10
|
+
failing_gates: ["all"],
|
|
11
|
+
passing_gates: [],
|
|
12
|
+
confidence_score: 0,
|
|
13
|
+
recommendation: "escalate",
|
|
14
|
+
evidence_summary: {
|
|
15
|
+
error: `Run ${input.run_id} not found. Run codeloop_verify first.`,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Read spec and acceptance files for acceptance gate
|
|
20
|
+
const specContent = safeReadFile(input.spec_path, cwd);
|
|
21
|
+
const acceptanceContent = safeReadFile(input.acceptance_path, cwd);
|
|
22
|
+
const evaluations = evaluateGates(meta, config, specContent, acceptanceContent);
|
|
23
|
+
const passingGates = evaluations.filter((e) => e.passed).map((e) => e.gate.name);
|
|
24
|
+
const failingGates = evaluations.filter((e) => !e.passed).map((e) => e.gate.name);
|
|
25
|
+
const blockersFailing = evaluations.filter((e) => !e.passed && e.gate.severity_if_failed === "blocker");
|
|
26
|
+
const allPassed = blockersFailing.length === 0;
|
|
27
|
+
const confidenceScore = computeConfidenceScore(evaluations, meta);
|
|
28
|
+
const recommendation = computeRecommendation(confidenceScore, blockersFailing.length);
|
|
29
|
+
const evidenceSummary = {};
|
|
30
|
+
for (const evaluation of evaluations) {
|
|
31
|
+
evidenceSummary[evaluation.gate.name] = {
|
|
32
|
+
passed: evaluation.passed,
|
|
33
|
+
reason: evaluation.reason,
|
|
34
|
+
severity: evaluation.gate.severity_if_failed,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
passed: allPassed,
|
|
39
|
+
failing_gates: failingGates,
|
|
40
|
+
passing_gates: passingGates,
|
|
41
|
+
confidence_score: confidenceScore,
|
|
42
|
+
recommendation,
|
|
43
|
+
evidence_summary: evidenceSummary,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function evaluateGates(meta, config, specContent, acceptanceContent) {
|
|
47
|
+
return DEFAULT_GATES.map((gate) => evaluateGate(gate, meta, config, specContent, acceptanceContent));
|
|
48
|
+
}
|
|
49
|
+
function evaluateGate(gate, meta, config, specContent, acceptanceContent) {
|
|
50
|
+
switch (gate.name) {
|
|
51
|
+
case "build_passes":
|
|
52
|
+
return evaluateBuildGate(gate, meta);
|
|
53
|
+
case "zero_critical_issues":
|
|
54
|
+
return evaluateCriticalIssuesGate(gate, meta);
|
|
55
|
+
case "required_tests_pass":
|
|
56
|
+
return evaluateTestsGate(gate, meta);
|
|
57
|
+
case "visual_regression_threshold":
|
|
58
|
+
return evaluateVisualGate(gate, meta, config);
|
|
59
|
+
case "acceptance_criteria_met":
|
|
60
|
+
return evaluateAcceptanceGate(gate, meta, acceptanceContent);
|
|
61
|
+
default:
|
|
62
|
+
return { gate, passed: true, reason: "Unknown gate — skipped" };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function evaluateBuildGate(gate, meta) {
|
|
66
|
+
const det = meta.deterministic_results;
|
|
67
|
+
if (!det) {
|
|
68
|
+
return { gate, passed: false, reason: "No deterministic results available" };
|
|
69
|
+
}
|
|
70
|
+
const buildResult = det.build;
|
|
71
|
+
if (buildResult === "passed") {
|
|
72
|
+
return { gate, passed: true, reason: "Build passed" };
|
|
73
|
+
}
|
|
74
|
+
if (buildResult === "not_run") {
|
|
75
|
+
return { gate, passed: true, reason: "Build check was not applicable (skipped)" };
|
|
76
|
+
}
|
|
77
|
+
return { gate, passed: false, reason: `Build failed (status: ${buildResult})` };
|
|
78
|
+
}
|
|
79
|
+
function evaluateCriticalIssuesGate(gate, meta) {
|
|
80
|
+
const summary = meta.issue_summary;
|
|
81
|
+
if (!summary) {
|
|
82
|
+
return { gate, passed: true, reason: "No issue summary (assuming clean)" };
|
|
83
|
+
}
|
|
84
|
+
if (summary.critical === 0) {
|
|
85
|
+
return { gate, passed: true, reason: "Zero critical issues" };
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
gate,
|
|
89
|
+
passed: false,
|
|
90
|
+
reason: `${summary.critical} critical issue(s) found`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function evaluateTestsGate(gate, meta) {
|
|
94
|
+
const tests = meta.test_summary;
|
|
95
|
+
if (!tests) {
|
|
96
|
+
return { gate, passed: true, reason: "No test summary available" };
|
|
97
|
+
}
|
|
98
|
+
if (tests.failed === 0) {
|
|
99
|
+
return { gate, passed: true, reason: `All ${tests.passed} tests passed` };
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
gate,
|
|
103
|
+
passed: false,
|
|
104
|
+
reason: `${tests.failed} test(s) failed out of ${tests.total}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function evaluateVisualGate(gate, meta, config) {
|
|
108
|
+
const visual = meta.visual_deterministic_results;
|
|
109
|
+
if (!visual || !visual.diff_score) {
|
|
110
|
+
return { gate, passed: true, reason: "No visual baselines — gate skipped" };
|
|
111
|
+
}
|
|
112
|
+
const diffScore = visual.diff_score;
|
|
113
|
+
const threshold = config.design_match_threshold;
|
|
114
|
+
// diff_score is the percentage of pixels that differ; lower is better.
|
|
115
|
+
// The threshold in config is the match threshold (how close it should be).
|
|
116
|
+
// Convert: acceptable diff = 1 - threshold. E.g., 0.85 threshold = 0.15 max diff.
|
|
117
|
+
const maxDiff = 1 - threshold;
|
|
118
|
+
if (diffScore <= maxDiff) {
|
|
119
|
+
return { gate, passed: true, reason: `Visual diff ${(diffScore * 100).toFixed(1)}% within threshold` };
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
gate,
|
|
123
|
+
passed: false,
|
|
124
|
+
reason: `Visual diff ${(diffScore * 100).toFixed(1)}% exceeds threshold (max ${(maxDiff * 100).toFixed(1)}%)`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function evaluateAcceptanceGate(gate, meta, acceptanceContent) {
|
|
128
|
+
if (!acceptanceContent) {
|
|
129
|
+
return { gate, passed: true, reason: "No acceptance file found — gate skipped" };
|
|
130
|
+
}
|
|
131
|
+
const tests = meta.test_summary;
|
|
132
|
+
if (!tests || tests.total === 0) {
|
|
133
|
+
return {
|
|
134
|
+
gate,
|
|
135
|
+
passed: false,
|
|
136
|
+
reason: "Acceptance criteria exist but no tests were run to verify them",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Basic heuristic: count acceptance criteria lines and compare to passing tests
|
|
140
|
+
const criteriaLines = acceptanceContent
|
|
141
|
+
.split("\n")
|
|
142
|
+
.filter((l) => l.trim().startsWith("- ") || l.trim().startsWith("* ") || l.trim().match(/^\d+\./))
|
|
143
|
+
.length;
|
|
144
|
+
if (criteriaLines === 0) {
|
|
145
|
+
return { gate, passed: true, reason: "Acceptance file contains no structured criteria" };
|
|
146
|
+
}
|
|
147
|
+
if (tests.passed >= criteriaLines) {
|
|
148
|
+
return {
|
|
149
|
+
gate,
|
|
150
|
+
passed: true,
|
|
151
|
+
reason: `${tests.passed} passing tests cover ${criteriaLines} acceptance criteria`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
gate,
|
|
156
|
+
passed: false,
|
|
157
|
+
reason: `Only ${tests.passed} passing tests for ${criteriaLines} acceptance criteria`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function computeConfidenceScore(evaluations, meta) {
|
|
161
|
+
const totalGates = evaluations.length;
|
|
162
|
+
if (totalGates === 0)
|
|
163
|
+
return 0;
|
|
164
|
+
const passedGates = evaluations.filter((e) => e.passed).length;
|
|
165
|
+
const gateScore = (passedGates / totalGates) * 60;
|
|
166
|
+
// Test coverage factor (up to 25 points)
|
|
167
|
+
let testScore = 0;
|
|
168
|
+
const tests = meta.test_summary;
|
|
169
|
+
if (tests && tests.total > 0) {
|
|
170
|
+
const passRate = tests.passed / tests.total;
|
|
171
|
+
testScore = passRate * 25;
|
|
172
|
+
}
|
|
173
|
+
// Evidence completeness (up to 15 points)
|
|
174
|
+
let evidenceScore = 0;
|
|
175
|
+
if (meta.log_paths && meta.log_paths.length > 0)
|
|
176
|
+
evidenceScore += 5;
|
|
177
|
+
if (meta.test_summary)
|
|
178
|
+
evidenceScore += 5;
|
|
179
|
+
if (meta.deterministic_results)
|
|
180
|
+
evidenceScore += 5;
|
|
181
|
+
return Math.round(Math.min(100, gateScore + testScore + evidenceScore));
|
|
182
|
+
}
|
|
183
|
+
function computeRecommendation(confidenceScore, blockerCount) {
|
|
184
|
+
if (confidenceScore >= 85 && blockerCount === 0)
|
|
185
|
+
return "ready_for_review";
|
|
186
|
+
if (confidenceScore >= 50)
|
|
187
|
+
return "continue_fixing";
|
|
188
|
+
return "escalate";
|
|
189
|
+
}
|
|
190
|
+
function safeReadFile(filePath, cwd) {
|
|
191
|
+
const resolvedPath = filePath.startsWith("/") ? filePath : `${cwd}/${filePath}`;
|
|
192
|
+
if (!existsSync(resolvedPath))
|
|
193
|
+
return null;
|
|
194
|
+
try {
|
|
195
|
+
return readFileSync(resolvedPath, "utf-8");
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=gate_check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate_check.js","sourceRoot":"","sources":["../../src/tools/gate_check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export interface IntegrationCheckInput {
|
|
3
|
+
master_spec_path: string;
|
|
4
|
+
sections?: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface IntegrationCheckOutput {
|
|
7
|
+
passed: boolean;
|
|
8
|
+
sections_checked: string[];
|
|
9
|
+
regressions: string[];
|
|
10
|
+
recommendation: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function runIntegrationCheck(input: IntegrationCheckInput, config: CodeLoopConfig, cwd?: string): Promise<IntegrationCheckOutput>;
|
|
13
|
+
//# sourceMappingURL=integration_check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration_check.d.ts","sourceRoot":"","sources":["../../src/tools/integration_check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS3D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAqFjC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { loadRegistry, updateSectionState, saveRegistry, } from "../state/section_registry.js";
|
|
2
|
+
import { runVerify } from "./verify.js";
|
|
3
|
+
const COMPLETED_LIKE = new Set([
|
|
4
|
+
"done",
|
|
5
|
+
"internally_verified",
|
|
6
|
+
"integration_pending",
|
|
7
|
+
]);
|
|
8
|
+
export async function runIntegrationCheck(input, config, cwd = process.cwd()) {
|
|
9
|
+
let registry = loadRegistry(cwd);
|
|
10
|
+
const defaultTargets = registry.sections
|
|
11
|
+
.filter((s) => COMPLETED_LIKE.has(s.state))
|
|
12
|
+
.map((s) => s.section_id);
|
|
13
|
+
let targetIds;
|
|
14
|
+
if (input.sections?.length) {
|
|
15
|
+
const want = new Set(input.sections);
|
|
16
|
+
targetIds = registry.sections
|
|
17
|
+
.filter((s) => want.has(s.section_id))
|
|
18
|
+
.map((s) => s.section_id);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
targetIds = defaultTargets;
|
|
22
|
+
}
|
|
23
|
+
if (targetIds.length === 0) {
|
|
24
|
+
targetIds = registry.sections.map((s) => s.section_id);
|
|
25
|
+
}
|
|
26
|
+
const verifyInput = {
|
|
27
|
+
scope: "full",
|
|
28
|
+
platform: "auto",
|
|
29
|
+
};
|
|
30
|
+
const result = await runVerify(verifyInput, config, cwd);
|
|
31
|
+
const hadResults = result.pass_count + result.fail_count > 0;
|
|
32
|
+
const passed = result.fail_count === 0 && hadResults;
|
|
33
|
+
const regressions = [];
|
|
34
|
+
if (!hadResults) {
|
|
35
|
+
regressions.push(`No verification checks produced pass/fail results: ${result.summary}`);
|
|
36
|
+
}
|
|
37
|
+
else if (result.fail_count > 0) {
|
|
38
|
+
regressions.push(`Verification reported ${result.fail_count} failing check(s): ${result.summary}`);
|
|
39
|
+
}
|
|
40
|
+
const integrationPending = targetIds.filter((id) => {
|
|
41
|
+
const s = registry.sections.find((x) => x.section_id === id);
|
|
42
|
+
return s?.state === "integration_pending";
|
|
43
|
+
});
|
|
44
|
+
try {
|
|
45
|
+
if (passed) {
|
|
46
|
+
for (const id of integrationPending) {
|
|
47
|
+
registry = updateSectionState(registry, id, "done", "integration verification passed", result.run_id);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
for (const id of integrationPending) {
|
|
52
|
+
registry = updateSectionState(registry, id, "integration_regression", "integration verification failed", result.run_id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
saveRegistry(cwd, registry);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
regressions.push(`Registry update skipped: ${e instanceof Error ? e.message : String(e)}`);
|
|
59
|
+
}
|
|
60
|
+
const recommendation = passed
|
|
61
|
+
? "Integration verification passed. Sections in integration_pending were moved to done when possible."
|
|
62
|
+
: "Fix failing checks, then re-run codeloop_verify and codeloop_integration_check. Sections in integration_pending were marked integration_regression when possible.";
|
|
63
|
+
return {
|
|
64
|
+
passed,
|
|
65
|
+
sections_checked: targetIds,
|
|
66
|
+
regressions,
|
|
67
|
+
recommendation,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=integration_check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration_check.js","sourceRoot":"","sources":["../../src/tools/integration_check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ReleaseReadinessInput, ReleaseReadinessOutput, CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export declare function runReleaseReadiness(input: ReleaseReadinessInput, config: CodeLoopConfig, cwd?: string): Promise<ReleaseReadinessOutput>;
|
|
3
|
+
//# sourceMappingURL=release_readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release_readiness.d.ts","sourceRoot":"","sources":["../../src/tools/release_readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAoE9B,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAkHjC"}
|