@cluesmith/codev 1.6.1 → 2.0.0-rc.1
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/bin/porch.js +7 -0
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +23 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/index.d.ts +1 -0
- package/dist/agent-farm/commands/index.d.ts.map +1 -1
- package/dist/agent-farm/commands/index.js +1 -0
- package/dist/agent-farm/commands/index.js.map +1 -1
- package/dist/agent-farm/commands/kickoff.d.ts +19 -0
- package/dist/agent-farm/commands/kickoff.d.ts.map +1 -0
- package/dist/agent-farm/commands/kickoff.js +269 -0
- package/dist/agent-farm/commands/kickoff.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +17 -3
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +8 -0
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/hq-connector.d.ts +23 -0
- package/dist/agent-farm/hq-connector.d.ts.map +1 -0
- package/dist/agent-farm/hq-connector.js +366 -0
- package/dist/agent-farm/hq-connector.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/pcheck/cache.d.ts +48 -0
- package/dist/commands/pcheck/cache.d.ts.map +1 -0
- package/dist/commands/pcheck/cache.js +170 -0
- package/dist/commands/pcheck/cache.js.map +1 -0
- package/dist/commands/pcheck/evaluator.d.ts +15 -0
- package/dist/commands/pcheck/evaluator.d.ts.map +1 -0
- package/dist/commands/pcheck/evaluator.js +246 -0
- package/dist/commands/pcheck/evaluator.js.map +1 -0
- package/dist/commands/pcheck/index.d.ts +12 -0
- package/dist/commands/pcheck/index.d.ts.map +1 -0
- package/dist/commands/pcheck/index.js +249 -0
- package/dist/commands/pcheck/index.js.map +1 -0
- package/dist/commands/pcheck/parser.d.ts +39 -0
- package/dist/commands/pcheck/parser.d.ts.map +1 -0
- package/dist/commands/pcheck/parser.js +155 -0
- package/dist/commands/pcheck/parser.js.map +1 -0
- package/dist/commands/pcheck/types.d.ts +82 -0
- package/dist/commands/pcheck/types.d.ts.map +1 -0
- package/dist/commands/pcheck/types.js +5 -0
- package/dist/commands/pcheck/types.js.map +1 -0
- package/dist/commands/porch/checks.d.ts +42 -0
- package/dist/commands/porch/checks.d.ts.map +1 -0
- package/dist/commands/porch/checks.js +195 -0
- package/dist/commands/porch/checks.js.map +1 -0
- package/dist/commands/porch/consultation.d.ts +56 -0
- package/dist/commands/porch/consultation.d.ts.map +1 -0
- package/dist/commands/porch/consultation.js +330 -0
- package/dist/commands/porch/consultation.js.map +1 -0
- package/dist/commands/porch/index.d.ts +60 -0
- package/dist/commands/porch/index.d.ts.map +1 -0
- package/dist/commands/porch/index.js +828 -0
- package/dist/commands/porch/index.js.map +1 -0
- package/dist/commands/porch/notifications.d.ts +99 -0
- package/dist/commands/porch/notifications.d.ts.map +1 -0
- package/dist/commands/porch/notifications.js +223 -0
- package/dist/commands/porch/notifications.js.map +1 -0
- package/dist/commands/porch/plan-parser.d.ts +38 -0
- package/dist/commands/porch/plan-parser.d.ts.map +1 -0
- package/dist/commands/porch/plan-parser.js +166 -0
- package/dist/commands/porch/plan-parser.js.map +1 -0
- package/dist/commands/porch/protocol-loader.d.ts +46 -0
- package/dist/commands/porch/protocol-loader.d.ts.map +1 -0
- package/dist/commands/porch/protocol-loader.js +249 -0
- package/dist/commands/porch/protocol-loader.js.map +1 -0
- package/dist/commands/porch/signal-parser.d.ts +88 -0
- package/dist/commands/porch/signal-parser.d.ts.map +1 -0
- package/dist/commands/porch/signal-parser.js +148 -0
- package/dist/commands/porch/signal-parser.js.map +1 -0
- package/dist/commands/porch/state.d.ts +133 -0
- package/dist/commands/porch/state.d.ts.map +1 -0
- package/dist/commands/porch/state.js +760 -0
- package/dist/commands/porch/state.js.map +1 -0
- package/dist/commands/porch/types.d.ts +232 -0
- package/dist/commands/porch/types.d.ts.map +1 -0
- package/dist/commands/porch/types.js +7 -0
- package/dist/commands/porch/types.js.map +1 -0
- package/package.json +6 -2
- package/skeleton/porch/prompts/defend.md +103 -0
- package/skeleton/porch/prompts/diagnose.md +70 -0
- package/skeleton/porch/prompts/evaluate.md +132 -0
- package/skeleton/porch/prompts/fix.md +59 -0
- package/skeleton/porch/prompts/implement.md +79 -0
- package/skeleton/porch/prompts/plan.md +74 -0
- package/skeleton/porch/prompts/pr.md +84 -0
- package/skeleton/porch/prompts/review.md +179 -0
- package/skeleton/porch/prompts/specify.md +53 -0
- package/skeleton/porch/prompts/test.md +63 -0
- package/skeleton/porch/prompts/understand.md +61 -0
- package/skeleton/porch/prompts/verify.md +58 -0
- package/skeleton/porch/protocols/bugfix.json +85 -0
- package/skeleton/porch/protocols/spider.json +135 -0
- package/skeleton/porch/protocols/tick.json +76 -0
- package/skeleton/protocols/bugfix/protocol.json +127 -0
- package/skeleton/protocols/protocol-schema.json +237 -0
- package/skeleton/protocols/spider/protocol.json +204 -0
- package/skeleton/protocols/tick/protocol.json +151 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codev pcheck - Protocol Check command
|
|
3
|
+
*
|
|
4
|
+
* Evaluate declarative protocol checks defined in checks.yaml files.
|
|
5
|
+
* Supports semantic (LLM-based) evaluation for human-written content.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { loadChecksFile, detectProtocol, listChecksAndGates, getAvailableProtocols } from './parser.js';
|
|
9
|
+
import { evaluateCheck } from './evaluator.js';
|
|
10
|
+
/**
|
|
11
|
+
* Print a check result with colored status
|
|
12
|
+
*/
|
|
13
|
+
function printCheckResult(result) {
|
|
14
|
+
const icon = result.pass
|
|
15
|
+
? chalk.green('✓')
|
|
16
|
+
: chalk.red('✗');
|
|
17
|
+
const cached = result.cached ? chalk.dim(' (cached)') : '';
|
|
18
|
+
const duration = result.duration_ms ? chalk.dim(` ${result.duration_ms}ms`) : '';
|
|
19
|
+
console.log(`${icon} ${result.id.padEnd(28)} ${result.description}${cached}${duration}`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Print detailed reasoning if verbose mode
|
|
23
|
+
*/
|
|
24
|
+
function printReasoning(result, verbose) {
|
|
25
|
+
if (verbose && result.reasoning) {
|
|
26
|
+
const lines = result.reasoning.split('\n');
|
|
27
|
+
for (const line of lines) {
|
|
28
|
+
console.log(chalk.dim(` ${line}`));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Evaluate a gate, including resolving nested gates
|
|
34
|
+
*/
|
|
35
|
+
async function evaluateGate(gateId, checksFile, context, evaluated = new Set()) {
|
|
36
|
+
const gate = checksFile.gates[gateId];
|
|
37
|
+
if (!gate) {
|
|
38
|
+
return {
|
|
39
|
+
id: gateId,
|
|
40
|
+
pass: false,
|
|
41
|
+
description: 'Unknown gate',
|
|
42
|
+
checks: [],
|
|
43
|
+
guidance: `Gate '${gateId}' not found`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const results = [];
|
|
47
|
+
let allPass = true;
|
|
48
|
+
for (const itemId of gate.all) {
|
|
49
|
+
// Check if this is a gate reference
|
|
50
|
+
if (checksFile.gates[itemId]) {
|
|
51
|
+
// Prevent infinite recursion
|
|
52
|
+
if (evaluated.has(itemId)) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
evaluated.add(itemId);
|
|
56
|
+
// Recursively evaluate the nested gate
|
|
57
|
+
const nestedResult = await evaluateGate(itemId, checksFile, context, evaluated);
|
|
58
|
+
results.push(...nestedResult.checks);
|
|
59
|
+
allPass = allPass && nestedResult.pass;
|
|
60
|
+
}
|
|
61
|
+
else if (checksFile.checks[itemId]) {
|
|
62
|
+
// It's a check
|
|
63
|
+
const check = checksFile.checks[itemId];
|
|
64
|
+
const result = await evaluateCheck(itemId, check, { project: context.project, verbose: context.verbose }, !context.noCache);
|
|
65
|
+
results.push(result);
|
|
66
|
+
allPass = allPass && result.pass;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Unknown item
|
|
70
|
+
results.push({
|
|
71
|
+
id: itemId,
|
|
72
|
+
pass: false,
|
|
73
|
+
description: 'Unknown check or gate',
|
|
74
|
+
reasoning: `'${itemId}' not found in checks or gates`,
|
|
75
|
+
});
|
|
76
|
+
allPass = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Determine guidance
|
|
80
|
+
const guidance = allPass
|
|
81
|
+
? gate.guidance?.pass?.replace(/\{project\}/g, context.project)
|
|
82
|
+
: gate.guidance?.fail?.replace(/\{project\}/g, context.project);
|
|
83
|
+
return {
|
|
84
|
+
id: gateId,
|
|
85
|
+
pass: allPass,
|
|
86
|
+
description: gate.description,
|
|
87
|
+
checks: results,
|
|
88
|
+
guidance,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determine the next action based on current gate states
|
|
93
|
+
*/
|
|
94
|
+
async function determineNextAction(checksFile, context) {
|
|
95
|
+
// Evaluate gates in order of progression
|
|
96
|
+
const gateOrder = ['spec_ready', 'plan_ready', 'pr_ready'];
|
|
97
|
+
const gateStatus = new Map();
|
|
98
|
+
for (const gateId of gateOrder) {
|
|
99
|
+
if (checksFile.gates[gateId]) {
|
|
100
|
+
const result = await evaluateGate(gateId, checksFile, context);
|
|
101
|
+
gateStatus.set(gateId, result.pass);
|
|
102
|
+
// If this gate fails, provide guidance
|
|
103
|
+
if (!result.pass) {
|
|
104
|
+
// Find the first failing check
|
|
105
|
+
const failingCheck = result.checks.find(c => !c.pass);
|
|
106
|
+
if (failingCheck) {
|
|
107
|
+
const check = checksFile.checks[failingCheck.id];
|
|
108
|
+
if (check) {
|
|
109
|
+
return formatNextAction(gateId, failingCheck, check, context);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result.guidance ?? 'Fix failing checks';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return 'All gates pass! Ready to proceed.';
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format a detailed next action message
|
|
120
|
+
*/
|
|
121
|
+
function formatNextAction(gateId, failingCheck, check, context) {
|
|
122
|
+
let action = `Current state: `;
|
|
123
|
+
// Show gate status
|
|
124
|
+
const gateOrder = ['spec_ready', 'plan_ready', 'pr_ready'];
|
|
125
|
+
const statusParts = [];
|
|
126
|
+
for (const g of gateOrder) {
|
|
127
|
+
if (g === gateId) {
|
|
128
|
+
statusParts.push(`${g} ✗`);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
statusParts.push(`${g} ✓`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
action += statusParts.join(', ') + '\n\n';
|
|
136
|
+
action += `Next action: ${failingCheck.description}\n`;
|
|
137
|
+
// Provide specific guidance based on check type
|
|
138
|
+
if (check.type === 'file_exists') {
|
|
139
|
+
const pattern = check.pattern.replace(/\{project\}/g, context.project);
|
|
140
|
+
action += ` Create: ${pattern}\n`;
|
|
141
|
+
}
|
|
142
|
+
else if (check.type === 'llm_check') {
|
|
143
|
+
const file = check.file ?? check.files?.[0] ?? '';
|
|
144
|
+
const pattern = file.replace(/\{project\}/g, context.project);
|
|
145
|
+
action += ` Edit: ${pattern}\n`;
|
|
146
|
+
action += ` Ensure: ${check.question}\n`;
|
|
147
|
+
}
|
|
148
|
+
else if (check.type === 'command') {
|
|
149
|
+
action += ` Run: ${check.run}\n`;
|
|
150
|
+
action += ` Fix any issues and retry\n`;
|
|
151
|
+
}
|
|
152
|
+
return action;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* List all available checks and gates
|
|
156
|
+
*/
|
|
157
|
+
function handleList(protocol) {
|
|
158
|
+
const { checks, gates } = listChecksAndGates(protocol);
|
|
159
|
+
console.log(`Protocol: ${chalk.cyan(protocol)}\n`);
|
|
160
|
+
console.log(chalk.bold('Checks:'));
|
|
161
|
+
for (const [id, desc] of Object.entries(checks)) {
|
|
162
|
+
console.log(` ${id.padEnd(28)} ${chalk.dim(desc)}`);
|
|
163
|
+
}
|
|
164
|
+
console.log('');
|
|
165
|
+
console.log(chalk.bold('Gates:'));
|
|
166
|
+
for (const [id, desc] of Object.entries(gates)) {
|
|
167
|
+
console.log(` ${id.padEnd(28)} ${chalk.dim(desc)}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Main pcheck command
|
|
172
|
+
*/
|
|
173
|
+
export async function pcheck(target, options) {
|
|
174
|
+
// Handle --list
|
|
175
|
+
if (options.list || target === 'list') {
|
|
176
|
+
const protocol = options.protocol ?? 'spider';
|
|
177
|
+
handleList(protocol);
|
|
178
|
+
return 0;
|
|
179
|
+
}
|
|
180
|
+
// Require project for check operations
|
|
181
|
+
if (!options.project) {
|
|
182
|
+
console.error(chalk.red('Error: --project is required'));
|
|
183
|
+
console.error('Usage: codev pcheck <gate> --project <id>');
|
|
184
|
+
return 1;
|
|
185
|
+
}
|
|
186
|
+
// Detect or use specified protocol
|
|
187
|
+
const protocol = options.protocol ?? detectProtocol(options.project);
|
|
188
|
+
// Load checks file
|
|
189
|
+
const checksFile = loadChecksFile(protocol);
|
|
190
|
+
if (!checksFile) {
|
|
191
|
+
console.error(chalk.red(`Error: No checks.yaml found for protocol '${protocol}'`));
|
|
192
|
+
console.error(`Available protocols: ${getAvailableProtocols().join(', ')}`);
|
|
193
|
+
return 1;
|
|
194
|
+
}
|
|
195
|
+
const context = {
|
|
196
|
+
project: options.project,
|
|
197
|
+
verbose: options.verbose,
|
|
198
|
+
noCache: options.noCache,
|
|
199
|
+
};
|
|
200
|
+
// Handle --next
|
|
201
|
+
if (options.next) {
|
|
202
|
+
const nextAction = await determineNextAction(checksFile, context);
|
|
203
|
+
console.log(nextAction);
|
|
204
|
+
return 0;
|
|
205
|
+
}
|
|
206
|
+
// Evaluate specific gate or check
|
|
207
|
+
if (!target) {
|
|
208
|
+
console.error(chalk.red('Error: Specify a gate or check to evaluate'));
|
|
209
|
+
console.error('Usage: codev pcheck <gate> --project <id>');
|
|
210
|
+
console.error(' or: codev pcheck --list');
|
|
211
|
+
console.error(' or: codev pcheck --next --project <id>');
|
|
212
|
+
return 1;
|
|
213
|
+
}
|
|
214
|
+
// Check if target is a gate or individual check
|
|
215
|
+
if (checksFile.gates[target]) {
|
|
216
|
+
const result = await evaluateGate(target, checksFile, context);
|
|
217
|
+
console.log(`Checking gate: ${chalk.cyan(target)} (${result.description})\n`);
|
|
218
|
+
for (const checkResult of result.checks) {
|
|
219
|
+
printCheckResult(checkResult);
|
|
220
|
+
printReasoning(checkResult, !!options.verbose);
|
|
221
|
+
}
|
|
222
|
+
console.log('');
|
|
223
|
+
if (result.pass) {
|
|
224
|
+
console.log(chalk.green('PASSED') + `: All checks passed`);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const failCount = result.checks.filter(c => !c.pass).length;
|
|
228
|
+
console.log(chalk.red('BLOCKED') + `: ${failCount} check${failCount > 1 ? 's' : ''} failed`);
|
|
229
|
+
}
|
|
230
|
+
if (result.guidance) {
|
|
231
|
+
console.log(`\nGuidance: ${result.guidance}`);
|
|
232
|
+
}
|
|
233
|
+
return result.pass ? 0 : 1;
|
|
234
|
+
}
|
|
235
|
+
else if (checksFile.checks[target]) {
|
|
236
|
+
// Individual check
|
|
237
|
+
const check = checksFile.checks[target];
|
|
238
|
+
const result = await evaluateCheck(target, check, context, !options.noCache);
|
|
239
|
+
printCheckResult(result);
|
|
240
|
+
printReasoning(result, true); // Always show reasoning for individual checks
|
|
241
|
+
return result.pass ? 0 : 1;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
console.error(chalk.red(`Error: Unknown gate or check '${target}'`));
|
|
245
|
+
console.error(`Run 'codev pcheck --list' to see available checks and gates`);
|
|
246
|
+
return 1;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pcheck/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for checks.yaml protocol definition files
|
|
3
|
+
*/
|
|
4
|
+
import type { ChecksFile, Check, EvaluationContext } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Load a checks.yaml file from a protocol directory
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadChecksFile(protocol: string): ChecksFile | null;
|
|
9
|
+
/**
|
|
10
|
+
* Detect the protocol for a given project
|
|
11
|
+
* Looks at the spec file to determine which protocol to use
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectProtocol(projectId: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Expand a pattern with context variables
|
|
16
|
+
* Replaces {project} with the actual project ID
|
|
17
|
+
*/
|
|
18
|
+
export declare function expandPattern(pattern: string, context: EvaluationContext): string;
|
|
19
|
+
/**
|
|
20
|
+
* Find the actual file matching a pattern
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveFile(pattern: string, context: EvaluationContext): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve all files for a check
|
|
25
|
+
* Handles both single file and files array
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveFiles(check: Check, context: EvaluationContext): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Get all available protocols with checks.yaml files
|
|
30
|
+
*/
|
|
31
|
+
export declare function getAvailableProtocols(): string[];
|
|
32
|
+
/**
|
|
33
|
+
* List all checks and gates in a protocol
|
|
34
|
+
*/
|
|
35
|
+
export declare function listChecksAndGates(protocol: string): {
|
|
36
|
+
checks: Record<string, string>;
|
|
37
|
+
gates: Record<string, string>;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAQ,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgB7E;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA2BlE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAEjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAItF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAW/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAiChD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAiBtH"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for checks.yaml protocol definition files
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
5
|
+
import { join, dirname } from 'node:path';
|
|
6
|
+
import { parse as parseYaml } from 'yaml';
|
|
7
|
+
import { glob } from 'glob';
|
|
8
|
+
/**
|
|
9
|
+
* Find the codev directory in the current project
|
|
10
|
+
*/
|
|
11
|
+
function findCodevDir(startDir = process.cwd()) {
|
|
12
|
+
let dir = startDir;
|
|
13
|
+
while (dir !== '/') {
|
|
14
|
+
if (existsSync(join(dir, 'codev'))) {
|
|
15
|
+
return join(dir, 'codev');
|
|
16
|
+
}
|
|
17
|
+
dir = dirname(dir);
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load a checks.yaml file from a protocol directory
|
|
23
|
+
*/
|
|
24
|
+
export function loadChecksFile(protocol) {
|
|
25
|
+
const codevDir = findCodevDir();
|
|
26
|
+
if (!codevDir) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Try both codev/protocols/ and codev-skeleton/protocols/
|
|
30
|
+
const possiblePaths = [
|
|
31
|
+
join(codevDir, 'protocols', protocol, 'checks.yaml'),
|
|
32
|
+
join(dirname(codevDir), 'codev-skeleton', 'protocols', protocol, 'checks.yaml'),
|
|
33
|
+
];
|
|
34
|
+
for (const checksPath of possiblePaths) {
|
|
35
|
+
if (existsSync(checksPath)) {
|
|
36
|
+
const content = readFileSync(checksPath, 'utf-8');
|
|
37
|
+
const parsed = parseYaml(content);
|
|
38
|
+
// Validate structure
|
|
39
|
+
if (!parsed.checks || !parsed.gates) {
|
|
40
|
+
throw new Error(`Invalid checks.yaml: missing 'checks' or 'gates' section in ${checksPath}`);
|
|
41
|
+
}
|
|
42
|
+
return parsed;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Detect the protocol for a given project
|
|
49
|
+
* Looks at the spec file to determine which protocol to use
|
|
50
|
+
*/
|
|
51
|
+
export function detectProtocol(projectId) {
|
|
52
|
+
const codevDir = findCodevDir();
|
|
53
|
+
if (!codevDir) {
|
|
54
|
+
return 'spider'; // Default
|
|
55
|
+
}
|
|
56
|
+
// Try to find the spec file
|
|
57
|
+
const specPattern = join(codevDir, 'specs', `${projectId}-*.md`);
|
|
58
|
+
const specFiles = glob.sync(specPattern);
|
|
59
|
+
if (specFiles.length === 0) {
|
|
60
|
+
return 'spider'; // Default
|
|
61
|
+
}
|
|
62
|
+
// Read the spec and look for protocol declaration
|
|
63
|
+
const specContent = readFileSync(specFiles[0], 'utf-8');
|
|
64
|
+
// Look for **Protocol**: TICK/SPIDER/BUGFIX pattern
|
|
65
|
+
const protocolMatch = specContent.match(/\*\*Protocol\*\*:\s*(\w+)/i);
|
|
66
|
+
if (protocolMatch) {
|
|
67
|
+
return protocolMatch[1].toLowerCase();
|
|
68
|
+
}
|
|
69
|
+
return 'spider'; // Default
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Expand a pattern with context variables
|
|
73
|
+
* Replaces {project} with the actual project ID
|
|
74
|
+
*/
|
|
75
|
+
export function expandPattern(pattern, context) {
|
|
76
|
+
return pattern.replace(/\{project\}/g, context.project);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Find the actual file matching a pattern
|
|
80
|
+
*/
|
|
81
|
+
export function resolveFile(pattern, context) {
|
|
82
|
+
const expanded = expandPattern(pattern, context);
|
|
83
|
+
const matches = glob.sync(expanded);
|
|
84
|
+
return matches.length > 0 ? matches[0] : null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolve all files for a check
|
|
88
|
+
* Handles both single file and files array
|
|
89
|
+
*/
|
|
90
|
+
export function resolveFiles(check, context) {
|
|
91
|
+
if (check.type === 'llm_check') {
|
|
92
|
+
if (check.files) {
|
|
93
|
+
return check.files.map(f => expandPattern(f, context));
|
|
94
|
+
}
|
|
95
|
+
else if (check.file) {
|
|
96
|
+
return [expandPattern(check.file, context)];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (check.type === 'file_exists' || check.type === 'file_not_exists') {
|
|
100
|
+
return [expandPattern(check.pattern, context)];
|
|
101
|
+
}
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all available protocols with checks.yaml files
|
|
106
|
+
*/
|
|
107
|
+
export function getAvailableProtocols() {
|
|
108
|
+
const codevDir = findCodevDir();
|
|
109
|
+
if (!codevDir) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const protocols = [];
|
|
113
|
+
// Check codev/protocols/
|
|
114
|
+
const protocolsDir = join(codevDir, 'protocols');
|
|
115
|
+
if (existsSync(protocolsDir)) {
|
|
116
|
+
const entries = glob.sync(join(protocolsDir, '*/checks.yaml'));
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
const protocol = dirname(entry).split('/').pop();
|
|
119
|
+
if (protocol) {
|
|
120
|
+
protocols.push(protocol);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Check codev-skeleton/protocols/
|
|
125
|
+
const skeletonDir = join(dirname(codevDir), 'codev-skeleton', 'protocols');
|
|
126
|
+
if (existsSync(skeletonDir)) {
|
|
127
|
+
const entries = glob.sync(join(skeletonDir, '*/checks.yaml'));
|
|
128
|
+
for (const entry of entries) {
|
|
129
|
+
const protocol = dirname(entry).split('/').pop();
|
|
130
|
+
if (protocol && !protocols.includes(protocol)) {
|
|
131
|
+
protocols.push(protocol);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return protocols;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* List all checks and gates in a protocol
|
|
139
|
+
*/
|
|
140
|
+
export function listChecksAndGates(protocol) {
|
|
141
|
+
const checksFile = loadChecksFile(protocol);
|
|
142
|
+
if (!checksFile) {
|
|
143
|
+
return { checks: {}, gates: {} };
|
|
144
|
+
}
|
|
145
|
+
const checks = {};
|
|
146
|
+
for (const [id, check] of Object.entries(checksFile.checks)) {
|
|
147
|
+
checks[id] = check.description;
|
|
148
|
+
}
|
|
149
|
+
const gates = {};
|
|
150
|
+
for (const [id, gate] of Object.entries(checksFile.gates)) {
|
|
151
|
+
gates[id] = gate.description;
|
|
152
|
+
}
|
|
153
|
+
return { checks, gates };
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/commands/pcheck/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for pcheck - Protocol Check command
|
|
3
|
+
*/
|
|
4
|
+
export type CheckType = 'file_exists' | 'file_not_exists' | 'llm_check' | 'command';
|
|
5
|
+
export interface BaseCheck {
|
|
6
|
+
type: CheckType;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FileExistsCheck extends BaseCheck {
|
|
10
|
+
type: 'file_exists';
|
|
11
|
+
pattern: string;
|
|
12
|
+
}
|
|
13
|
+
export interface FileNotExistsCheck extends BaseCheck {
|
|
14
|
+
type: 'file_not_exists';
|
|
15
|
+
pattern: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LlmCheck extends BaseCheck {
|
|
18
|
+
type: 'llm_check';
|
|
19
|
+
file?: string;
|
|
20
|
+
files?: string[];
|
|
21
|
+
question: string;
|
|
22
|
+
expect?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface CommandCheck extends BaseCheck {
|
|
25
|
+
type: 'command';
|
|
26
|
+
run: string;
|
|
27
|
+
exit_code?: number;
|
|
28
|
+
stdout?: string;
|
|
29
|
+
}
|
|
30
|
+
export type Check = FileExistsCheck | FileNotExistsCheck | LlmCheck | CommandCheck;
|
|
31
|
+
export interface Gate {
|
|
32
|
+
description: string;
|
|
33
|
+
all: string[];
|
|
34
|
+
guidance?: {
|
|
35
|
+
pass: string;
|
|
36
|
+
fail: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface ChecksFile {
|
|
40
|
+
checks: Record<string, Check>;
|
|
41
|
+
gates: Record<string, Gate>;
|
|
42
|
+
}
|
|
43
|
+
export interface CheckResult {
|
|
44
|
+
id: string;
|
|
45
|
+
pass: boolean;
|
|
46
|
+
description: string;
|
|
47
|
+
reasoning?: string;
|
|
48
|
+
cached?: boolean;
|
|
49
|
+
duration_ms?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface GateResult {
|
|
52
|
+
id: string;
|
|
53
|
+
pass: boolean;
|
|
54
|
+
description: string;
|
|
55
|
+
checks: CheckResult[];
|
|
56
|
+
guidance?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface EvaluationContext {
|
|
59
|
+
project: string;
|
|
60
|
+
protocol?: string;
|
|
61
|
+
verbose?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface CacheEntry {
|
|
64
|
+
checkId: string;
|
|
65
|
+
contentHash: string;
|
|
66
|
+
pass: boolean;
|
|
67
|
+
reasoning?: string;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
}
|
|
70
|
+
export interface CacheFile {
|
|
71
|
+
version: number;
|
|
72
|
+
entries: Record<string, CacheEntry>;
|
|
73
|
+
}
|
|
74
|
+
export interface PcheckOptions {
|
|
75
|
+
project?: string;
|
|
76
|
+
list?: boolean;
|
|
77
|
+
next?: boolean;
|
|
78
|
+
protocol?: string;
|
|
79
|
+
verbose?: boolean;
|
|
80
|
+
noCache?: boolean;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;AAGpF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,KAAK,GAAG,eAAe,GAAG,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAGnF,MAAM,WAAW,IAAI;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAGD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC7B;AAGD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACrC;AAGD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/pcheck/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defense Checks
|
|
3
|
+
*
|
|
4
|
+
* Runs build/test commands defined in protocol phases.
|
|
5
|
+
* Supports retry logic and configurable failure behavior.
|
|
6
|
+
*/
|
|
7
|
+
import type { Check, Phase } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Result of a single check
|
|
10
|
+
*/
|
|
11
|
+
export interface CheckResult {
|
|
12
|
+
name: string;
|
|
13
|
+
success: boolean;
|
|
14
|
+
output: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
attempts: number;
|
|
17
|
+
duration: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Result of running all checks for a phase
|
|
21
|
+
*/
|
|
22
|
+
export interface ChecksResult {
|
|
23
|
+
success: boolean;
|
|
24
|
+
checks: CheckResult[];
|
|
25
|
+
returnTo?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Run all checks for a phase
|
|
29
|
+
*/
|
|
30
|
+
export declare function runPhaseChecks(phase: Phase, options?: {
|
|
31
|
+
cwd?: string;
|
|
32
|
+
dryRun?: boolean;
|
|
33
|
+
}): Promise<ChecksResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Create default checks for common phases
|
|
36
|
+
*/
|
|
37
|
+
export declare function getDefaultChecks(phaseName: string): Record<string, Check>;
|
|
38
|
+
/**
|
|
39
|
+
* Format check results for display
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatCheckResults(results: ChecksResult): string;
|
|
42
|
+
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA+HD;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GACL,OAAO,CAAC,YAAY,CAAC,CA6CvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAqBzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAuBhE"}
|