@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,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caching layer for pcheck LLM results
|
|
3
|
+
*
|
|
4
|
+
* Caches LLM check results based on file content hashes
|
|
5
|
+
* to avoid expensive re-evaluations when files haven't changed.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { join, dirname } from 'node:path';
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
10
|
+
const CACHE_VERSION = 1;
|
|
11
|
+
const CACHE_FILENAME = '.codev/pcheck-cache.json';
|
|
12
|
+
/**
|
|
13
|
+
* Find the project root directory (containing codev/)
|
|
14
|
+
*/
|
|
15
|
+
function findProjectRoot() {
|
|
16
|
+
let dir = process.cwd();
|
|
17
|
+
while (dir !== '/') {
|
|
18
|
+
if (existsSync(join(dir, 'codev'))) {
|
|
19
|
+
return dir;
|
|
20
|
+
}
|
|
21
|
+
dir = dirname(dir);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the cache file path
|
|
27
|
+
*/
|
|
28
|
+
function getCachePath() {
|
|
29
|
+
const root = findProjectRoot();
|
|
30
|
+
if (!root) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return join(root, CACHE_FILENAME);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load the cache file
|
|
37
|
+
*/
|
|
38
|
+
export function loadCache() {
|
|
39
|
+
const cachePath = getCachePath();
|
|
40
|
+
if (!cachePath || !existsSync(cachePath)) {
|
|
41
|
+
return { version: CACHE_VERSION, entries: {} };
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const content = readFileSync(cachePath, 'utf-8');
|
|
45
|
+
const cache = JSON.parse(content);
|
|
46
|
+
// Validate version
|
|
47
|
+
if (cache.version !== CACHE_VERSION) {
|
|
48
|
+
return { version: CACHE_VERSION, entries: {} };
|
|
49
|
+
}
|
|
50
|
+
return cache;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return { version: CACHE_VERSION, entries: {} };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Save the cache file
|
|
58
|
+
*/
|
|
59
|
+
export function saveCache(cache) {
|
|
60
|
+
const cachePath = getCachePath();
|
|
61
|
+
if (!cachePath) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Ensure .codev directory exists
|
|
65
|
+
const dir = dirname(cachePath);
|
|
66
|
+
if (!existsSync(dir)) {
|
|
67
|
+
mkdirSync(dir, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
writeFileSync(cachePath, JSON.stringify(cache, null, 2));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Compute a hash of file contents
|
|
73
|
+
* For multiple files, concatenates and hashes together
|
|
74
|
+
*/
|
|
75
|
+
export function computeContentHash(filePaths) {
|
|
76
|
+
const hash = createHash('sha256');
|
|
77
|
+
for (const filePath of filePaths) {
|
|
78
|
+
if (existsSync(filePath)) {
|
|
79
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
80
|
+
hash.update(`${filePath}:${content}`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
hash.update(`${filePath}:NOT_FOUND`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return hash.digest('hex').substring(0, 16); // Truncate for readability
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Generate a cache key for a check
|
|
90
|
+
*/
|
|
91
|
+
export function getCacheKey(checkId, contentHash) {
|
|
92
|
+
return `${checkId}:${contentHash}`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get a cached result if available and valid
|
|
96
|
+
*/
|
|
97
|
+
export function getCachedResult(checkId, filePaths) {
|
|
98
|
+
const cache = loadCache();
|
|
99
|
+
const contentHash = computeContentHash(filePaths);
|
|
100
|
+
const key = getCacheKey(checkId, contentHash);
|
|
101
|
+
const entry = cache.entries[key];
|
|
102
|
+
if (!entry) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
// Verify the hash still matches
|
|
106
|
+
if (entry.contentHash !== contentHash) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return entry;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Store a result in the cache
|
|
113
|
+
*/
|
|
114
|
+
export function setCachedResult(checkId, filePaths, pass, reasoning) {
|
|
115
|
+
const cache = loadCache();
|
|
116
|
+
const contentHash = computeContentHash(filePaths);
|
|
117
|
+
const key = getCacheKey(checkId, contentHash);
|
|
118
|
+
cache.entries[key] = {
|
|
119
|
+
checkId,
|
|
120
|
+
contentHash,
|
|
121
|
+
pass,
|
|
122
|
+
reasoning,
|
|
123
|
+
timestamp: Date.now(),
|
|
124
|
+
};
|
|
125
|
+
saveCache(cache);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Invalidate cache entries for a specific check
|
|
129
|
+
*/
|
|
130
|
+
export function invalidateCheck(checkId) {
|
|
131
|
+
const cache = loadCache();
|
|
132
|
+
// Remove all entries for this check
|
|
133
|
+
for (const key of Object.keys(cache.entries)) {
|
|
134
|
+
if (key.startsWith(`${checkId}:`)) {
|
|
135
|
+
delete cache.entries[key];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
saveCache(cache);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Clear all cache entries
|
|
142
|
+
*/
|
|
143
|
+
export function clearCache() {
|
|
144
|
+
const cachePath = getCachePath();
|
|
145
|
+
if (cachePath && existsSync(cachePath)) {
|
|
146
|
+
writeFileSync(cachePath, JSON.stringify({ version: CACHE_VERSION, entries: {} }, null, 2));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get cache statistics
|
|
151
|
+
*/
|
|
152
|
+
export function getCacheStats() {
|
|
153
|
+
const cachePath = getCachePath();
|
|
154
|
+
if (!cachePath || !existsSync(cachePath)) {
|
|
155
|
+
return { entries: 0, size: '0 B' };
|
|
156
|
+
}
|
|
157
|
+
const cache = loadCache();
|
|
158
|
+
const content = readFileSync(cachePath, 'utf-8');
|
|
159
|
+
const size = content.length;
|
|
160
|
+
const sizeStr = size < 1024
|
|
161
|
+
? `${size} B`
|
|
162
|
+
: size < 1024 * 1024
|
|
163
|
+
? `${(size / 1024).toFixed(1)} KB`
|
|
164
|
+
: `${(size / 1024 / 1024).toFixed(1)} MB`;
|
|
165
|
+
return {
|
|
166
|
+
entries: Object.keys(cache.entries).length,
|
|
167
|
+
size: sizeStr,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/commands/pcheck/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check evaluator for pcheck command
|
|
3
|
+
*
|
|
4
|
+
* Evaluates different types of checks:
|
|
5
|
+
* - file_exists: Check if a file matches a glob pattern
|
|
6
|
+
* - file_not_exists: Inverse of above
|
|
7
|
+
* - llm_check: Semantic check using Claude Haiku
|
|
8
|
+
* - command: Execute a shell command and check result
|
|
9
|
+
*/
|
|
10
|
+
import type { Check, CheckResult, EvaluationContext } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Evaluate a single check
|
|
13
|
+
*/
|
|
14
|
+
export declare function evaluateCheck(checkId: string, check: Check, context: EvaluationContext, useCache?: boolean): Promise<CheckResult>;
|
|
15
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AAsPpB;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check evaluator for pcheck command
|
|
3
|
+
*
|
|
4
|
+
* Evaluates different types of checks:
|
|
5
|
+
* - file_exists: Check if a file matches a glob pattern
|
|
6
|
+
* - file_not_exists: Inverse of above
|
|
7
|
+
* - llm_check: Semantic check using Claude Haiku
|
|
8
|
+
* - command: Execute a shell command and check result
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
import { execSync } from 'node:child_process';
|
|
12
|
+
import { glob } from 'glob';
|
|
13
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
14
|
+
import { expandPattern } from './parser.js';
|
|
15
|
+
import { getCachedResult, setCachedResult } from './cache.js';
|
|
16
|
+
// Initialize Anthropic client lazily
|
|
17
|
+
let anthropicClient = null;
|
|
18
|
+
function getAnthropicClient() {
|
|
19
|
+
if (!anthropicClient) {
|
|
20
|
+
anthropicClient = new Anthropic();
|
|
21
|
+
}
|
|
22
|
+
return anthropicClient;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Evaluate a file_exists check
|
|
26
|
+
*/
|
|
27
|
+
async function evaluateFileExists(check, context) {
|
|
28
|
+
const start = Date.now();
|
|
29
|
+
const pattern = expandPattern(check.pattern, context);
|
|
30
|
+
const matches = glob.sync(pattern);
|
|
31
|
+
const pass = matches.length > 0;
|
|
32
|
+
return {
|
|
33
|
+
id: '', // Will be set by caller
|
|
34
|
+
pass,
|
|
35
|
+
description: check.description,
|
|
36
|
+
reasoning: pass
|
|
37
|
+
? `Found: ${matches[0]}`
|
|
38
|
+
: `No files matching: ${pattern}`,
|
|
39
|
+
duration_ms: Date.now() - start,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Evaluate a file_not_exists check
|
|
44
|
+
*/
|
|
45
|
+
async function evaluateFileNotExists(check, context) {
|
|
46
|
+
const start = Date.now();
|
|
47
|
+
const pattern = expandPattern(check.pattern, context);
|
|
48
|
+
const matches = glob.sync(pattern);
|
|
49
|
+
const pass = matches.length === 0;
|
|
50
|
+
return {
|
|
51
|
+
id: '',
|
|
52
|
+
pass,
|
|
53
|
+
description: check.description,
|
|
54
|
+
reasoning: pass
|
|
55
|
+
? `No files matching: ${pattern}`
|
|
56
|
+
: `Found (should not exist): ${matches[0]}`,
|
|
57
|
+
duration_ms: Date.now() - start,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Evaluate an LLM check using Claude Haiku
|
|
62
|
+
*/
|
|
63
|
+
async function evaluateLlmCheck(checkId, check, context, useCache) {
|
|
64
|
+
const start = Date.now();
|
|
65
|
+
// Resolve file paths
|
|
66
|
+
const patterns = check.files ?? (check.file ? [check.file] : []);
|
|
67
|
+
const resolvedPaths = patterns.map(p => expandPattern(p, context));
|
|
68
|
+
const actualFiles = [];
|
|
69
|
+
for (const pattern of resolvedPaths) {
|
|
70
|
+
const matches = glob.sync(pattern);
|
|
71
|
+
if (matches.length > 0) {
|
|
72
|
+
actualFiles.push(matches[0]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// If any required file is missing, fail immediately
|
|
76
|
+
if (actualFiles.length !== resolvedPaths.length) {
|
|
77
|
+
const missing = resolvedPaths.filter(p => !glob.sync(p).length);
|
|
78
|
+
return {
|
|
79
|
+
id: '',
|
|
80
|
+
pass: false,
|
|
81
|
+
description: check.description,
|
|
82
|
+
reasoning: `Missing files: ${missing.join(', ')}`,
|
|
83
|
+
duration_ms: Date.now() - start,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Check cache
|
|
87
|
+
if (useCache) {
|
|
88
|
+
const cached = getCachedResult(checkId, actualFiles);
|
|
89
|
+
if (cached) {
|
|
90
|
+
return {
|
|
91
|
+
id: '',
|
|
92
|
+
pass: cached.pass,
|
|
93
|
+
description: check.description,
|
|
94
|
+
reasoning: cached.reasoning,
|
|
95
|
+
cached: true,
|
|
96
|
+
duration_ms: Date.now() - start,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Read file contents
|
|
101
|
+
const contents = actualFiles.map(f => readFileSync(f, 'utf-8'));
|
|
102
|
+
// Build prompt
|
|
103
|
+
const filesContext = contents.map((content, i) => {
|
|
104
|
+
const filename = actualFiles[i].split('/').pop();
|
|
105
|
+
return `--- ${filename} ---\n${content}`;
|
|
106
|
+
}).join('\n\n');
|
|
107
|
+
const prompt = `Based on the following document(s), answer YES or NO to this question:
|
|
108
|
+
|
|
109
|
+
${check.question}
|
|
110
|
+
|
|
111
|
+
${filesContext}
|
|
112
|
+
|
|
113
|
+
Answer with just YES or NO on the first line, followed by a brief explanation on the next line.`;
|
|
114
|
+
try {
|
|
115
|
+
const client = getAnthropicClient();
|
|
116
|
+
const response = await client.messages.create({
|
|
117
|
+
model: 'claude-3-5-haiku-latest',
|
|
118
|
+
max_tokens: 256,
|
|
119
|
+
messages: [{ role: 'user', content: prompt }],
|
|
120
|
+
});
|
|
121
|
+
// Extract response text
|
|
122
|
+
const responseText = response.content[0].type === 'text'
|
|
123
|
+
? response.content[0].text
|
|
124
|
+
: '';
|
|
125
|
+
// Parse YES/NO answer
|
|
126
|
+
const firstLine = responseText.trim().split('\n')[0].toUpperCase();
|
|
127
|
+
const answer = firstLine.startsWith('YES');
|
|
128
|
+
const pass = check.expect === false ? !answer : answer;
|
|
129
|
+
// Cache the result
|
|
130
|
+
if (useCache) {
|
|
131
|
+
setCachedResult(checkId, actualFiles, pass, responseText);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
id: '',
|
|
135
|
+
pass,
|
|
136
|
+
description: check.description,
|
|
137
|
+
reasoning: responseText,
|
|
138
|
+
cached: false,
|
|
139
|
+
duration_ms: Date.now() - start,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
144
|
+
return {
|
|
145
|
+
id: '',
|
|
146
|
+
pass: false,
|
|
147
|
+
description: check.description,
|
|
148
|
+
reasoning: `LLM check failed: ${errorMessage}`,
|
|
149
|
+
duration_ms: Date.now() - start,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Evaluate a command check
|
|
155
|
+
*/
|
|
156
|
+
async function evaluateCommand(check, context) {
|
|
157
|
+
const start = Date.now();
|
|
158
|
+
// Expand any variables in the command
|
|
159
|
+
const command = expandPattern(check.run, context);
|
|
160
|
+
try {
|
|
161
|
+
const output = execSync(command, {
|
|
162
|
+
encoding: 'utf-8',
|
|
163
|
+
timeout: 60000, // 60 second timeout
|
|
164
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
165
|
+
}).trim();
|
|
166
|
+
let pass = true;
|
|
167
|
+
let reasoning = `Command succeeded`;
|
|
168
|
+
// Check exit code (0 by default for success)
|
|
169
|
+
if (check.exit_code !== undefined) {
|
|
170
|
+
// If we got here, exit code was 0
|
|
171
|
+
pass = pass && (check.exit_code === 0);
|
|
172
|
+
reasoning = pass ? reasoning : `Expected exit code ${check.exit_code}, got 0`;
|
|
173
|
+
}
|
|
174
|
+
// Check stdout
|
|
175
|
+
if (check.stdout !== undefined) {
|
|
176
|
+
const stdoutMatch = output === check.stdout;
|
|
177
|
+
pass = pass && stdoutMatch;
|
|
178
|
+
if (!stdoutMatch) {
|
|
179
|
+
reasoning = `Expected stdout "${check.stdout}", got "${output}"`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
id: '',
|
|
184
|
+
pass,
|
|
185
|
+
description: check.description,
|
|
186
|
+
reasoning,
|
|
187
|
+
duration_ms: Date.now() - start,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
let exitCode = 1;
|
|
192
|
+
let stderr = '';
|
|
193
|
+
if (error && typeof error === 'object') {
|
|
194
|
+
const execError = error;
|
|
195
|
+
exitCode = execError.status ?? 1;
|
|
196
|
+
stderr = execError.stderr ?? '';
|
|
197
|
+
}
|
|
198
|
+
// If we expected a non-zero exit code, this might be a pass
|
|
199
|
+
if (check.exit_code !== undefined && check.exit_code === exitCode) {
|
|
200
|
+
return {
|
|
201
|
+
id: '',
|
|
202
|
+
pass: true,
|
|
203
|
+
description: check.description,
|
|
204
|
+
reasoning: `Exit code ${exitCode} as expected`,
|
|
205
|
+
duration_ms: Date.now() - start,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
id: '',
|
|
210
|
+
pass: false,
|
|
211
|
+
description: check.description,
|
|
212
|
+
reasoning: `Command failed with exit code ${exitCode}${stderr ? `: ${stderr.trim()}` : ''}`,
|
|
213
|
+
duration_ms: Date.now() - start,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Evaluate a single check
|
|
219
|
+
*/
|
|
220
|
+
export async function evaluateCheck(checkId, check, context, useCache = true) {
|
|
221
|
+
let result;
|
|
222
|
+
switch (check.type) {
|
|
223
|
+
case 'file_exists':
|
|
224
|
+
result = await evaluateFileExists(check, context);
|
|
225
|
+
break;
|
|
226
|
+
case 'file_not_exists':
|
|
227
|
+
result = await evaluateFileNotExists(check, context);
|
|
228
|
+
break;
|
|
229
|
+
case 'llm_check':
|
|
230
|
+
result = await evaluateLlmCheck(checkId, check, context, useCache);
|
|
231
|
+
break;
|
|
232
|
+
case 'command':
|
|
233
|
+
result = await evaluateCommand(check, context);
|
|
234
|
+
break;
|
|
235
|
+
default:
|
|
236
|
+
result = {
|
|
237
|
+
id: checkId,
|
|
238
|
+
pass: false,
|
|
239
|
+
description: 'Unknown check type',
|
|
240
|
+
reasoning: `Unsupported check type`,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
result.id = checkId;
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../src/commands/pcheck/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 type { PcheckOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Main pcheck command
|
|
10
|
+
*/
|
|
11
|
+
export declare function pcheck(target: string | undefined, options: PcheckOptions): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pcheck/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAoD,MAAM,YAAY,CAAC;AAwMlG;;GAEG;AACH,wBAAsB,MAAM,CAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAsFjB"}
|