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,153 @@
|
|
|
1
|
+
import { existsSync, writeFileSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { getArtifactsBaseDir, getRunDir, loadRunMeta } from "../evidence/artifacts.js";
|
|
4
|
+
function buildAccessibilitySummary(meta) {
|
|
5
|
+
const ma = meta.model_assisted_results;
|
|
6
|
+
if (!ma)
|
|
7
|
+
return {};
|
|
8
|
+
const a11y = ma.accessibility ?? ma.a11y;
|
|
9
|
+
if (a11y && typeof a11y === "object" && !Array.isArray(a11y)) {
|
|
10
|
+
return { ...a11y };
|
|
11
|
+
}
|
|
12
|
+
return {};
|
|
13
|
+
}
|
|
14
|
+
function buildVisualSummary(meta, config) {
|
|
15
|
+
const screenshotPaths = meta.screenshot_paths ?? [];
|
|
16
|
+
const visual = meta.visual_deterministic_results;
|
|
17
|
+
const diffScore = visual && typeof visual.diff_score === "number" ? visual.diff_score : undefined;
|
|
18
|
+
const maxDiff = 1 - config.design_match_threshold;
|
|
19
|
+
let diffWithinThreshold = null;
|
|
20
|
+
let visualBlocker = null;
|
|
21
|
+
if (diffScore !== undefined) {
|
|
22
|
+
diffWithinThreshold = diffScore <= maxDiff;
|
|
23
|
+
if (!diffWithinThreshold) {
|
|
24
|
+
visualBlocker = `Visual diff ${(diffScore * 100).toFixed(1)}% exceeds allowed ${(maxDiff * 100).toFixed(1)}% (design_match_threshold ${config.design_match_threshold})`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
summary: {
|
|
29
|
+
screenshot_paths: screenshotPaths,
|
|
30
|
+
screenshot_count: screenshotPaths.length,
|
|
31
|
+
diff_score: diffScore ?? null,
|
|
32
|
+
diff_within_threshold: diffWithinThreshold,
|
|
33
|
+
max_allowed_diff: diffScore !== undefined ? maxDiff : null,
|
|
34
|
+
raw_visual_deterministic_results: visual ?? {},
|
|
35
|
+
},
|
|
36
|
+
visualBlocker,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function noEvidenceOutput(runId, baseDir) {
|
|
40
|
+
const reportPath = join(baseDir, runId, "report.json");
|
|
41
|
+
const recommendation = "No run evidence is available. Run codeloop_verify to produce a run, then codeloop_gate_check, and re-run release readiness.";
|
|
42
|
+
return {
|
|
43
|
+
ready: false,
|
|
44
|
+
report_path: reportPath,
|
|
45
|
+
overall_score: 0,
|
|
46
|
+
blockers: [`No evidence found for run "${runId}" (meta.json is missing or unreadable).`],
|
|
47
|
+
warnings: [],
|
|
48
|
+
test_summary: {},
|
|
49
|
+
visual_summary: {},
|
|
50
|
+
accessibility_summary: {},
|
|
51
|
+
recommendation,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export async function runReleaseReadiness(input, config, cwd = process.cwd()) {
|
|
55
|
+
const baseDir = getArtifactsBaseDir(cwd);
|
|
56
|
+
const meta = loadRunMeta(input.run_id, baseDir);
|
|
57
|
+
const runDir = existsSync(join(input.run_id, "meta.json"))
|
|
58
|
+
? input.run_id
|
|
59
|
+
: getRunDir(input.run_id, baseDir);
|
|
60
|
+
const reportPath = join(runDir, "report.json");
|
|
61
|
+
if (!meta) {
|
|
62
|
+
return noEvidenceOutput(input.run_id, baseDir);
|
|
63
|
+
}
|
|
64
|
+
const blockers = [];
|
|
65
|
+
const warnings = [];
|
|
66
|
+
const tests = meta.test_summary;
|
|
67
|
+
if (tests && tests.failed > 0) {
|
|
68
|
+
blockers.push(`${tests.failed} test(s) failed (${tests.passed}/${tests.total} passed).`);
|
|
69
|
+
}
|
|
70
|
+
const issues = meta.issue_summary;
|
|
71
|
+
const critical = issues?.critical ?? 0;
|
|
72
|
+
const high = issues?.high ?? 0;
|
|
73
|
+
const medium = issues?.medium ?? 0;
|
|
74
|
+
if (critical > 0) {
|
|
75
|
+
blockers.push(`${critical} critical issue(s) in issue summary.`);
|
|
76
|
+
}
|
|
77
|
+
if (high > 0) {
|
|
78
|
+
warnings.push(`${high} high-severity issue(s) in issue summary.`);
|
|
79
|
+
}
|
|
80
|
+
if (meta.gate_result !== "passed") {
|
|
81
|
+
blockers.push(meta.gate_result === "failed"
|
|
82
|
+
? "Gate check result is failed."
|
|
83
|
+
: "Gate check has not completed successfully (gate_result is not passed).");
|
|
84
|
+
}
|
|
85
|
+
const { summary: visualSummary, visualBlocker } = buildVisualSummary(meta, config);
|
|
86
|
+
if (visualBlocker) {
|
|
87
|
+
blockers.push(visualBlocker);
|
|
88
|
+
}
|
|
89
|
+
const accessibilitySummary = buildAccessibilitySummary(meta);
|
|
90
|
+
let overallScore = 100;
|
|
91
|
+
if (blockers.length > 0) {
|
|
92
|
+
overallScore -= 30;
|
|
93
|
+
}
|
|
94
|
+
overallScore -= 10 * high;
|
|
95
|
+
overallScore -= 5 * medium;
|
|
96
|
+
overallScore = Math.max(0, Math.min(100, overallScore));
|
|
97
|
+
const testSummaryRecord = tests
|
|
98
|
+
? {
|
|
99
|
+
total: tests.total,
|
|
100
|
+
passed: tests.passed,
|
|
101
|
+
failed: tests.failed,
|
|
102
|
+
skipped: tests.skipped,
|
|
103
|
+
flaky: tests.flaky,
|
|
104
|
+
}
|
|
105
|
+
: {};
|
|
106
|
+
const ready = blockers.length === 0;
|
|
107
|
+
let recommendation;
|
|
108
|
+
if (!ready) {
|
|
109
|
+
recommendation =
|
|
110
|
+
"Not ready for release: resolve all blockers (failed tests, critical issues, gate failure, or visual regression), then re-verify and re-run gate check.";
|
|
111
|
+
}
|
|
112
|
+
else if (warnings.length > 0 || medium > 0) {
|
|
113
|
+
recommendation =
|
|
114
|
+
"Release candidate with cautions: address high-severity warnings and medium issues before shipping, or accept documented risk.";
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
recommendation =
|
|
118
|
+
"Release readiness looks strong: evidence, tests, gates, and visual checks are within policy.";
|
|
119
|
+
}
|
|
120
|
+
const reportPayload = {
|
|
121
|
+
run_id: input.run_id,
|
|
122
|
+
spec_path: input.spec_path,
|
|
123
|
+
generated_at: new Date().toISOString(),
|
|
124
|
+
overall_score: overallScore,
|
|
125
|
+
ready,
|
|
126
|
+
blockers,
|
|
127
|
+
warnings,
|
|
128
|
+
test_summary: testSummaryRecord,
|
|
129
|
+
visual_summary: visualSummary,
|
|
130
|
+
accessibility_summary: accessibilitySummary,
|
|
131
|
+
recommendation,
|
|
132
|
+
gate_result: meta.gate_result ?? null,
|
|
133
|
+
issue_summary: issues ?? null,
|
|
134
|
+
};
|
|
135
|
+
if (input.include && input.include.length > 0) {
|
|
136
|
+
reportPayload.included_sections = input.include;
|
|
137
|
+
}
|
|
138
|
+
if (existsSync(runDir)) {
|
|
139
|
+
writeFileSync(reportPath, JSON.stringify(reportPayload, null, 2), "utf-8");
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
ready,
|
|
143
|
+
report_path: reportPath,
|
|
144
|
+
overall_score: overallScore,
|
|
145
|
+
blockers,
|
|
146
|
+
warnings,
|
|
147
|
+
test_summary: testSummaryRecord,
|
|
148
|
+
visual_summary: visualSummary,
|
|
149
|
+
accessibility_summary: accessibilitySummary,
|
|
150
|
+
recommendation,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=release_readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release_readiness.js","sourceRoot":"","sources":["../../src/tools/release_readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export interface ReplanInput {
|
|
3
|
+
master_spec_path: string;
|
|
4
|
+
change_summary?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ReplanOutput {
|
|
7
|
+
affected_sections: string[];
|
|
8
|
+
new_states: Record<string, string>;
|
|
9
|
+
recommendation: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runReplan(input: ReplanInput, _config: CodeLoopConfig, cwd?: string): ReplanOutput;
|
|
12
|
+
//# sourceMappingURL=replan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replan.d.ts","sourceRoot":"","sources":["../../src/tools/replan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAa3D,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAsB,GAC1B,YAAY,CAuId"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { isSectionTransitionValid } from "@codelooptech/shared";
|
|
2
|
+
import { existsSync, readFileSync } from "fs";
|
|
3
|
+
import { loadRegistry, saveRegistry, updateSectionState, initRegistryFromSpec, parseMasterSpecMarkdown, resolveProjectPath, } from "../state/section_registry.js";
|
|
4
|
+
function specById(parsed) {
|
|
5
|
+
const m = new Map();
|
|
6
|
+
for (const p of parsed) {
|
|
7
|
+
m.set(p.section_id, p);
|
|
8
|
+
}
|
|
9
|
+
return m;
|
|
10
|
+
}
|
|
11
|
+
export function runReplan(input, _config, cwd = process.cwd()) {
|
|
12
|
+
const masterAbs = resolveProjectPath(cwd, input.master_spec_path);
|
|
13
|
+
if (!existsSync(masterAbs)) {
|
|
14
|
+
throw new Error(`Master spec not found: ${masterAbs}`);
|
|
15
|
+
}
|
|
16
|
+
const markdown = readFileSync(masterAbs, "utf-8");
|
|
17
|
+
const parsed = parseMasterSpecMarkdown(markdown);
|
|
18
|
+
const fresh = specById(parsed);
|
|
19
|
+
const freshIds = new Set(parsed.map((p) => p.section_id));
|
|
20
|
+
let registry = loadRegistry(cwd);
|
|
21
|
+
if (registry.sections.length === 0) {
|
|
22
|
+
registry = initRegistryFromSpec(cwd, input.master_spec_path);
|
|
23
|
+
saveRegistry(cwd, registry);
|
|
24
|
+
return {
|
|
25
|
+
affected_sections: parsed.map((p) => p.section_id),
|
|
26
|
+
new_states: Object.fromEntries(parsed.map((p) => [p.section_id, "planned"])),
|
|
27
|
+
recommendation: "Initialized section registry from the master spec. Use codeloop_section_status to track progress.",
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const affected = [];
|
|
31
|
+
const newStates = {};
|
|
32
|
+
for (const s of [...registry.sections]) {
|
|
33
|
+
if (freshIds.has(s.section_id)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
affected.push(s.section_id);
|
|
37
|
+
if (isSectionTransitionValid(s.state, "blocked")) {
|
|
38
|
+
registry = updateSectionState(registry, s.section_id, "blocked", "section removed from master spec");
|
|
39
|
+
newStates[s.section_id] = "blocked";
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
newStates[s.section_id] = `${s.state} (removed from spec — manual review)`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const existingIds = new Set(registry.sections.map((x) => x.section_id));
|
|
46
|
+
const fullFromSpec = initRegistryFromSpec(cwd, input.master_spec_path);
|
|
47
|
+
const toAppend = fullFromSpec.sections.filter((s) => !existingIds.has(s.section_id));
|
|
48
|
+
if (toAppend.length > 0) {
|
|
49
|
+
for (const s of toAppend) {
|
|
50
|
+
affected.push(s.section_id);
|
|
51
|
+
newStates[s.section_id] = s.state;
|
|
52
|
+
}
|
|
53
|
+
registry = {
|
|
54
|
+
...registry,
|
|
55
|
+
sections: [...registry.sections, ...toAppend],
|
|
56
|
+
updated_at: new Date().toISOString(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
for (const sectionId of freshIds) {
|
|
60
|
+
const specSec = fresh.get(sectionId);
|
|
61
|
+
if (!specSec) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const cur = registry.sections.find((x) => x.section_id === sectionId);
|
|
65
|
+
if (!cur) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (specSec.section_name !== cur.section_name) {
|
|
69
|
+
affected.push(sectionId);
|
|
70
|
+
const reason = input.change_summary?.length
|
|
71
|
+
? `spec changed: ${input.change_summary}`
|
|
72
|
+
: "section title or scope changed in master spec";
|
|
73
|
+
if (isSectionTransitionValid(cur.state, "needs_repair")) {
|
|
74
|
+
registry = updateSectionState(registry, sectionId, "needs_repair", reason);
|
|
75
|
+
newStates[sectionId] = "needs_repair";
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
newStates[sectionId] = `${cur.state} (heading changed — manual review)`;
|
|
79
|
+
}
|
|
80
|
+
const idx = registry.sections.findIndex((x) => x.section_id === sectionId);
|
|
81
|
+
if (idx >= 0) {
|
|
82
|
+
registry.sections[idx] = {
|
|
83
|
+
...registry.sections[idx],
|
|
84
|
+
section_name: specSec.section_name,
|
|
85
|
+
updated_at: new Date().toISOString(),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const latest = registry.sections.find((x) => x.section_id === sectionId);
|
|
90
|
+
if (!latest) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (specSec.dependencies.join(",") !== latest.dependencies.join(",")) {
|
|
94
|
+
affected.push(sectionId);
|
|
95
|
+
const idx = registry.sections.findIndex((x) => x.section_id === sectionId);
|
|
96
|
+
if (idx >= 0) {
|
|
97
|
+
registry.sections[idx] = {
|
|
98
|
+
...registry.sections[idx],
|
|
99
|
+
dependencies: specSec.dependencies,
|
|
100
|
+
updated_at: new Date().toISOString(),
|
|
101
|
+
};
|
|
102
|
+
newStates[sectionId] =
|
|
103
|
+
newStates[sectionId] ??
|
|
104
|
+
`${registry.sections[idx].state} (dependencies synced from spec)`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
saveRegistry(cwd, registry);
|
|
109
|
+
const recommendation = affected.length === 0
|
|
110
|
+
? "No spec drift detected relative to the registry."
|
|
111
|
+
: `Updated registry for ${affected.length} section(s). Re-run codeloop_section_status and adjust any sections flagged for review.`;
|
|
112
|
+
return {
|
|
113
|
+
affected_sections: [...new Set(affected)],
|
|
114
|
+
new_states: newStates,
|
|
115
|
+
recommendation,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=replan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replan.js","sourceRoot":"","sources":["../../src/tools/replan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export interface SectionStatusInput {
|
|
3
|
+
master_spec_path: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SectionStatusOutput {
|
|
6
|
+
total_sections: number;
|
|
7
|
+
completed: number;
|
|
8
|
+
in_progress: string | null;
|
|
9
|
+
next_section: {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
spec_path: string;
|
|
13
|
+
} | null;
|
|
14
|
+
integration_due: boolean;
|
|
15
|
+
sections: Array<{
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
state: string;
|
|
19
|
+
confidence: number;
|
|
20
|
+
}>;
|
|
21
|
+
recommendation: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function getSectionStatus(input: SectionStatusInput, _config: CodeLoopConfig, cwd?: string): SectionStatusOutput;
|
|
24
|
+
//# sourceMappingURL=section_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_status.d.ts","sourceRoot":"","sources":["../../src/tools/section_status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAU3D,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrE,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,cAAc,EAAE,MAAM,CAAC;CACxB;AAkCD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAsB,GAC1B,mBAAmB,CAmDrB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { loadRegistry, saveRegistry, getNextSection, isIntegrationDue, initRegistryFromSpec, resolveProjectPath, } from "../state/section_registry.js";
|
|
2
|
+
const DEFAULT_CHECKPOINT_INTERVAL = 3;
|
|
3
|
+
function buildRecommendation(next, integrationDue, total, completed) {
|
|
4
|
+
const parts = [];
|
|
5
|
+
if (total === 0) {
|
|
6
|
+
return "No sections are registered. Initialize from the master spec or add sections to the registry.";
|
|
7
|
+
}
|
|
8
|
+
if (integrationDue) {
|
|
9
|
+
parts.push("Enough sections are internally verified; run codeloop_integration_check before proceeding.");
|
|
10
|
+
}
|
|
11
|
+
if (next) {
|
|
12
|
+
parts.push(`Next work: section "${next.section_name}" (${next.section_id}). Open ${next.spec_path} and move the section to building when ready.`);
|
|
13
|
+
}
|
|
14
|
+
else if (completed < total && !integrationDue) {
|
|
15
|
+
parts.push("No section is ready to build yet; ensure dependencies are done or promote a section to ready_to_build.");
|
|
16
|
+
}
|
|
17
|
+
if (completed === total && total > 0) {
|
|
18
|
+
parts.push("All sections are marked done.");
|
|
19
|
+
}
|
|
20
|
+
return parts.length > 0 ? parts.join(" ") : "Continue with the current plan.";
|
|
21
|
+
}
|
|
22
|
+
export function getSectionStatus(input, _config, cwd = process.cwd()) {
|
|
23
|
+
const masterAbs = resolveProjectPath(cwd, input.master_spec_path);
|
|
24
|
+
let registry = loadRegistry(cwd);
|
|
25
|
+
if (registry.sections.length === 0) {
|
|
26
|
+
try {
|
|
27
|
+
registry = initRegistryFromSpec(cwd, input.master_spec_path);
|
|
28
|
+
saveRegistry(cwd, registry);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// keep empty registry if spec missing
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const next = getNextSection(registry);
|
|
35
|
+
const integrationDue = isIntegrationDue(registry, DEFAULT_CHECKPOINT_INTERVAL);
|
|
36
|
+
const completed = registry.sections.filter((s) => s.state === "done").length;
|
|
37
|
+
const inProgress = registry.sections.find((s) => s.state === "building" || s.state === "verifying")?.section_id ?? null;
|
|
38
|
+
const sections = registry.sections.map((s) => ({
|
|
39
|
+
id: s.section_id,
|
|
40
|
+
name: s.section_name,
|
|
41
|
+
state: s.state,
|
|
42
|
+
confidence: s.confidence,
|
|
43
|
+
}));
|
|
44
|
+
const recommendation = buildRecommendation(next, integrationDue, registry.sections.length, completed);
|
|
45
|
+
return {
|
|
46
|
+
total_sections: registry.sections.length,
|
|
47
|
+
completed,
|
|
48
|
+
in_progress: inProgress,
|
|
49
|
+
next_section: next
|
|
50
|
+
? {
|
|
51
|
+
id: next.section_id,
|
|
52
|
+
name: next.section_name,
|
|
53
|
+
spec_path: next.spec_path,
|
|
54
|
+
}
|
|
55
|
+
: null,
|
|
56
|
+
integration_due: integrationDue,
|
|
57
|
+
sections,
|
|
58
|
+
recommendation,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=section_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_status.js","sourceRoot":"","sources":["../../src/tools/section_status.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAgBtC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,SAAS,mBAAmB,CAC1B,IAAuC,EACvC,cAAuB,EACvB,KAAa,EACb,SAAiB;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,8FAA8F,CAAC;IACxG,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CACR,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CACR,uBAAuB,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,WAAW,IAAI,CAAC,SAAS,+CAA+C,CACtI,CAAC;IACJ,CAAC;SAAM,IAAI,SAAS,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,wGAAwG,CACzG,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAyB,EACzB,OAAuB,EACvB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAClE,IAAI,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC7D,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;IAE/E,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,UAAU,GACd,QAAQ,CAAC,QAAQ,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CACzD,EAAE,UAAU,IAAI,IAAI,CAAC;IAExB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,EAAE,EAAE,CAAC,CAAC,UAAU;QAChB,IAAI,EAAE,CAAC,CAAC,YAAY;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC,CAAC,CAAC;IAEJ,MAAM,cAAc,GAAG,mBAAmB,CACxC,IAAI,EACJ,cAAc,EACd,QAAQ,CAAC,QAAQ,CAAC,MAAM,EACxB,SAAS,CACV,CAAC;IAEF,OAAO;QACL,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;QACxC,SAAS;QACT,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,IAAI;YAChB,CAAC,CAAC;gBACE,EAAE,EAAE,IAAI,CAAC,UAAU;gBACnB,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;YACH,CAAC,CAAC,IAAI;QACR,eAAe,EAAE,cAAc;QAC/B,QAAQ;QACR,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export interface UpdateBaselineInput {
|
|
3
|
+
run_id: string;
|
|
4
|
+
screens?: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface UpdateBaselineOutput {
|
|
7
|
+
updated: string[];
|
|
8
|
+
run_id: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function runUpdateBaseline(input: UpdateBaselineInput, _config: CodeLoopConfig, cwd?: string): UpdateBaselineOutput;
|
|
11
|
+
//# sourceMappingURL=update_baseline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_baseline.d.ts","sourceRoot":"","sources":["../../src/tools/update_baseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAsB,GAC1B,oBAAoB,CAetB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { join } from "path";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { updateBaselines } from "../evidence/screenshot_diff.js";
|
|
4
|
+
import { getArtifactsBaseDir } from "../evidence/artifacts.js";
|
|
5
|
+
export function runUpdateBaseline(input, _config, cwd = process.cwd()) {
|
|
6
|
+
const base = getArtifactsBaseDir(cwd);
|
|
7
|
+
const runDir = join(base, input.run_id);
|
|
8
|
+
const screenshotsDir = join(runDir, "screenshots");
|
|
9
|
+
const baselinesDir = join(runDir, "baselines");
|
|
10
|
+
if (!existsSync(screenshotsDir)) {
|
|
11
|
+
return { updated: [], run_id: input.run_id };
|
|
12
|
+
}
|
|
13
|
+
const updated = updateBaselines(screenshotsDir, baselinesDir, input.screens);
|
|
14
|
+
return {
|
|
15
|
+
updated,
|
|
16
|
+
run_id: input.run_id,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=update_baseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_baseline.js","sourceRoot":"","sources":["../../src/tools/update_baseline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAY/D,MAAM,UAAU,iBAAiB,CAC/B,KAA0B,EAC1B,OAAuB,EACvB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7E,OAAO;QACL,OAAO;QACP,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { VerifyInput, VerifyOutput, CodeLoopConfig } from "@codelooptech/shared";
|
|
2
|
+
export declare function detectPlatform(cwd: string): string;
|
|
3
|
+
export declare function runVerify(input: VerifyInput, config: CodeLoopConfig, cwd?: string): Promise<VerifyOutput>;
|
|
4
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,cAAc,EACtB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAwHvB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { createRunDir, saveRunMeta } from "../evidence/artifacts.js";
|
|
4
|
+
import { runGenericTests } from "../runners/generic.js";
|
|
5
|
+
import { runFlutterAnalyze, runFlutterTest } from "../runners/flutter.js";
|
|
6
|
+
import { runPlaywrightTests } from "../runners/playwright.js";
|
|
7
|
+
export function detectPlatform(cwd) {
|
|
8
|
+
if (existsSync(join(cwd, "pubspec.yaml")))
|
|
9
|
+
return "flutter";
|
|
10
|
+
if (existsSync(join(cwd, "playwright.config.ts")) ||
|
|
11
|
+
existsSync(join(cwd, "playwright.config.js")))
|
|
12
|
+
return "web";
|
|
13
|
+
if (existsSync(join(cwd, "package.json")))
|
|
14
|
+
return "node";
|
|
15
|
+
return "unknown";
|
|
16
|
+
}
|
|
17
|
+
export async function runVerify(input, config, cwd = process.cwd()) {
|
|
18
|
+
const start = Date.now();
|
|
19
|
+
const platform = input.platform === "auto" ? detectPlatform(cwd) : input.platform;
|
|
20
|
+
const { runId, runDir } = createRunDir(undefined, join(cwd, "artifacts", "runs"));
|
|
21
|
+
const logDir = join(runDir, "logs");
|
|
22
|
+
const results = [];
|
|
23
|
+
// Run platform-appropriate runners
|
|
24
|
+
if (platform === "flutter" || input.scope === "full") {
|
|
25
|
+
results.push(await runFlutterAnalyze(cwd, join(logDir, "flutter_analyze.log")));
|
|
26
|
+
results.push(await runFlutterTest(cwd, join(logDir, "flutter_test.log")));
|
|
27
|
+
}
|
|
28
|
+
if (platform === "web" || platform === "node" || input.scope === "full") {
|
|
29
|
+
results.push(await runGenericTests(cwd, join(logDir, "generic_test.log")));
|
|
30
|
+
}
|
|
31
|
+
if (platform === "web" || input.scope === "full") {
|
|
32
|
+
results.push(await runPlaywrightTests(cwd, join(logDir, "playwright.log")));
|
|
33
|
+
}
|
|
34
|
+
// Aggregate results
|
|
35
|
+
const availableResults = results.filter((r) => r.available);
|
|
36
|
+
const totalPassed = availableResults.reduce((s, r) => s + r.passed, 0);
|
|
37
|
+
const totalFailed = availableResults.reduce((s, r) => s + r.failed, 0);
|
|
38
|
+
const totalSkipped = availableResults.reduce((s, r) => s + r.skipped, 0);
|
|
39
|
+
const checksRun = availableResults.map((r) => r.runner_name);
|
|
40
|
+
const checksSkipped = results
|
|
41
|
+
.filter((r) => !r.available)
|
|
42
|
+
.map((r) => r.runner_name);
|
|
43
|
+
const logPaths = availableResults
|
|
44
|
+
.map((r) => r.log_path)
|
|
45
|
+
.filter((p) => p.length > 0);
|
|
46
|
+
const warningCount = results.filter((r) => r.available && r.exit_code !== 0 && r.failed === 0).length;
|
|
47
|
+
const allPassed = totalFailed === 0 && availableResults.length > 0;
|
|
48
|
+
const summary = buildSummary(availableResults, checksSkipped, platform);
|
|
49
|
+
const suggestion = buildSuggestion(allPassed, totalFailed, runId);
|
|
50
|
+
const duration_ms = Date.now() - start;
|
|
51
|
+
// Save run metadata
|
|
52
|
+
const meta = {
|
|
53
|
+
run_id: runId,
|
|
54
|
+
platform,
|
|
55
|
+
adapter: "cli",
|
|
56
|
+
started_at: new Date(start).toISOString(),
|
|
57
|
+
finished_at: new Date().toISOString(),
|
|
58
|
+
test_summary: {
|
|
59
|
+
total: totalPassed + totalFailed + totalSkipped,
|
|
60
|
+
passed: totalPassed,
|
|
61
|
+
failed: totalFailed,
|
|
62
|
+
skipped: totalSkipped,
|
|
63
|
+
flaky: 0,
|
|
64
|
+
},
|
|
65
|
+
checks_run: checksRun,
|
|
66
|
+
checks_skipped: checksSkipped.map((name) => ({
|
|
67
|
+
check: name,
|
|
68
|
+
reason: results.find((r) => r.runner_name === name)?.stderr || "unavailable",
|
|
69
|
+
})),
|
|
70
|
+
log_paths: logPaths,
|
|
71
|
+
issue_summary: {
|
|
72
|
+
critical: 0,
|
|
73
|
+
high: totalFailed,
|
|
74
|
+
medium: warningCount,
|
|
75
|
+
low: 0,
|
|
76
|
+
},
|
|
77
|
+
gate_result: null,
|
|
78
|
+
confidence: allPassed ? 85 : Math.max(0, 85 - totalFailed * 15),
|
|
79
|
+
deterministic_results: {
|
|
80
|
+
build: availableResults.some((r) => r.runner_name === "flutter_analyze")
|
|
81
|
+
? availableResults.find((r) => r.runner_name === "flutter_analyze").exit_code === 0
|
|
82
|
+
? "passed"
|
|
83
|
+
: "failed"
|
|
84
|
+
: "not_run",
|
|
85
|
+
tests: {
|
|
86
|
+
total: totalPassed + totalFailed + totalSkipped,
|
|
87
|
+
passed: totalPassed,
|
|
88
|
+
failed: totalFailed,
|
|
89
|
+
skipped: totalSkipped,
|
|
90
|
+
flaky: 0,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
next_recommended_action: suggestion || "No action needed.",
|
|
94
|
+
};
|
|
95
|
+
saveRunMeta(runDir, meta);
|
|
96
|
+
const output = {
|
|
97
|
+
run_id: runId,
|
|
98
|
+
pass_count: totalPassed,
|
|
99
|
+
fail_count: totalFailed,
|
|
100
|
+
warning_count: warningCount,
|
|
101
|
+
artifact_paths: [runDir],
|
|
102
|
+
summary,
|
|
103
|
+
duration_ms,
|
|
104
|
+
checks_run: checksRun,
|
|
105
|
+
suggestion,
|
|
106
|
+
notes: checksSkipped.length > 0
|
|
107
|
+
? [`Skipped checks: ${checksSkipped.join(", ")}`]
|
|
108
|
+
: undefined,
|
|
109
|
+
};
|
|
110
|
+
return output;
|
|
111
|
+
}
|
|
112
|
+
function buildSummary(results, skipped, platform) {
|
|
113
|
+
if (results.length === 0) {
|
|
114
|
+
return `No verification checks could run for platform "${platform}". ` +
|
|
115
|
+
"Ensure the relevant tools are installed.";
|
|
116
|
+
}
|
|
117
|
+
const totalPassed = results.reduce((s, r) => s + r.passed, 0);
|
|
118
|
+
const totalFailed = results.reduce((s, r) => s + r.failed, 0);
|
|
119
|
+
const names = results.map((r) => r.runner_name).join(", ");
|
|
120
|
+
let msg = `Ran ${results.length} check(s) [${names}]: ` +
|
|
121
|
+
`${totalPassed} passed, ${totalFailed} failed.`;
|
|
122
|
+
if (skipped.length > 0) {
|
|
123
|
+
msg += ` Skipped: ${skipped.join(", ")}.`;
|
|
124
|
+
}
|
|
125
|
+
return msg;
|
|
126
|
+
}
|
|
127
|
+
function buildSuggestion(allPassed, failCount, runId) {
|
|
128
|
+
if (allPassed) {
|
|
129
|
+
return `All checks passed. Call codeloop_gate_check with run_id "${runId}" to evaluate completion gates.`;
|
|
130
|
+
}
|
|
131
|
+
if (failCount > 0) {
|
|
132
|
+
return `${failCount} failure(s) detected. Call codeloop_diagnose with run_id "${runId}" to classify failures and get repair tasks.`;
|
|
133
|
+
}
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { VisualReviewInput, VisualReviewOutput } from "@codelooptech/shared";
|
|
2
|
+
import type { CodeLoopConfig } from "@codelooptech/shared";
|
|
3
|
+
export declare function runVisualReview(input: VisualReviewInput, config: CodeLoopConfig): Promise<VisualReviewOutput>;
|
|
4
|
+
//# sourceMappingURL=visual_review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual_review.d.ts","sourceRoot":"","sources":["../../src/tools/visual_review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D,wBAAsB,eAAe,CACnC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAsJ7B"}
|