@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.
Files changed (101) hide show
  1. package/bin/porch.js +7 -0
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +23 -0
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/index.d.ts +1 -0
  6. package/dist/agent-farm/commands/index.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/index.js +1 -0
  8. package/dist/agent-farm/commands/index.js.map +1 -1
  9. package/dist/agent-farm/commands/kickoff.d.ts +19 -0
  10. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -0
  11. package/dist/agent-farm/commands/kickoff.js +269 -0
  12. package/dist/agent-farm/commands/kickoff.js.map +1 -0
  13. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  14. package/dist/agent-farm/commands/spawn.js +17 -3
  15. package/dist/agent-farm/commands/spawn.js.map +1 -1
  16. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/start.js +8 -0
  18. package/dist/agent-farm/commands/start.js.map +1 -1
  19. package/dist/agent-farm/hq-connector.d.ts +23 -0
  20. package/dist/agent-farm/hq-connector.d.ts.map +1 -0
  21. package/dist/agent-farm/hq-connector.js +366 -0
  22. package/dist/agent-farm/hq-connector.js.map +1 -0
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +29 -0
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/pcheck/cache.d.ts +48 -0
  27. package/dist/commands/pcheck/cache.d.ts.map +1 -0
  28. package/dist/commands/pcheck/cache.js +170 -0
  29. package/dist/commands/pcheck/cache.js.map +1 -0
  30. package/dist/commands/pcheck/evaluator.d.ts +15 -0
  31. package/dist/commands/pcheck/evaluator.d.ts.map +1 -0
  32. package/dist/commands/pcheck/evaluator.js +246 -0
  33. package/dist/commands/pcheck/evaluator.js.map +1 -0
  34. package/dist/commands/pcheck/index.d.ts +12 -0
  35. package/dist/commands/pcheck/index.d.ts.map +1 -0
  36. package/dist/commands/pcheck/index.js +249 -0
  37. package/dist/commands/pcheck/index.js.map +1 -0
  38. package/dist/commands/pcheck/parser.d.ts +39 -0
  39. package/dist/commands/pcheck/parser.d.ts.map +1 -0
  40. package/dist/commands/pcheck/parser.js +155 -0
  41. package/dist/commands/pcheck/parser.js.map +1 -0
  42. package/dist/commands/pcheck/types.d.ts +82 -0
  43. package/dist/commands/pcheck/types.d.ts.map +1 -0
  44. package/dist/commands/pcheck/types.js +5 -0
  45. package/dist/commands/pcheck/types.js.map +1 -0
  46. package/dist/commands/porch/checks.d.ts +42 -0
  47. package/dist/commands/porch/checks.d.ts.map +1 -0
  48. package/dist/commands/porch/checks.js +195 -0
  49. package/dist/commands/porch/checks.js.map +1 -0
  50. package/dist/commands/porch/consultation.d.ts +56 -0
  51. package/dist/commands/porch/consultation.d.ts.map +1 -0
  52. package/dist/commands/porch/consultation.js +330 -0
  53. package/dist/commands/porch/consultation.js.map +1 -0
  54. package/dist/commands/porch/index.d.ts +60 -0
  55. package/dist/commands/porch/index.d.ts.map +1 -0
  56. package/dist/commands/porch/index.js +828 -0
  57. package/dist/commands/porch/index.js.map +1 -0
  58. package/dist/commands/porch/notifications.d.ts +99 -0
  59. package/dist/commands/porch/notifications.d.ts.map +1 -0
  60. package/dist/commands/porch/notifications.js +223 -0
  61. package/dist/commands/porch/notifications.js.map +1 -0
  62. package/dist/commands/porch/plan-parser.d.ts +38 -0
  63. package/dist/commands/porch/plan-parser.d.ts.map +1 -0
  64. package/dist/commands/porch/plan-parser.js +166 -0
  65. package/dist/commands/porch/plan-parser.js.map +1 -0
  66. package/dist/commands/porch/protocol-loader.d.ts +46 -0
  67. package/dist/commands/porch/protocol-loader.d.ts.map +1 -0
  68. package/dist/commands/porch/protocol-loader.js +249 -0
  69. package/dist/commands/porch/protocol-loader.js.map +1 -0
  70. package/dist/commands/porch/signal-parser.d.ts +88 -0
  71. package/dist/commands/porch/signal-parser.d.ts.map +1 -0
  72. package/dist/commands/porch/signal-parser.js +148 -0
  73. package/dist/commands/porch/signal-parser.js.map +1 -0
  74. package/dist/commands/porch/state.d.ts +133 -0
  75. package/dist/commands/porch/state.d.ts.map +1 -0
  76. package/dist/commands/porch/state.js +760 -0
  77. package/dist/commands/porch/state.js.map +1 -0
  78. package/dist/commands/porch/types.d.ts +232 -0
  79. package/dist/commands/porch/types.d.ts.map +1 -0
  80. package/dist/commands/porch/types.js +7 -0
  81. package/dist/commands/porch/types.js.map +1 -0
  82. package/package.json +6 -2
  83. package/skeleton/porch/prompts/defend.md +103 -0
  84. package/skeleton/porch/prompts/diagnose.md +70 -0
  85. package/skeleton/porch/prompts/evaluate.md +132 -0
  86. package/skeleton/porch/prompts/fix.md +59 -0
  87. package/skeleton/porch/prompts/implement.md +79 -0
  88. package/skeleton/porch/prompts/plan.md +74 -0
  89. package/skeleton/porch/prompts/pr.md +84 -0
  90. package/skeleton/porch/prompts/review.md +179 -0
  91. package/skeleton/porch/prompts/specify.md +53 -0
  92. package/skeleton/porch/prompts/test.md +63 -0
  93. package/skeleton/porch/prompts/understand.md +61 -0
  94. package/skeleton/porch/prompts/verify.md +58 -0
  95. package/skeleton/porch/protocols/bugfix.json +85 -0
  96. package/skeleton/porch/protocols/spider.json +135 -0
  97. package/skeleton/porch/protocols/tick.json +76 -0
  98. package/skeleton/protocols/bugfix/protocol.json +127 -0
  99. package/skeleton/protocols/protocol-schema.json +237 -0
  100. package/skeleton/protocols/spider/protocol.json +204 -0
  101. 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,5 @@
1
+ /**
2
+ * Type definitions for pcheck - Protocol Check command
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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"}