@cluesmith/codev 2.0.0-rc.3 → 2.0.0-rc.33
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 +6 -35
- package/dashboard/dist/assets/index-CXwnJkPh.css +32 -0
- package/dashboard/dist/assets/index-D429K6qO.js +120 -0
- package/dashboard/dist/assets/index-D429K6qO.js.map +1 -0
- package/dashboard/dist/index.html +13 -0
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +74 -64
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +0 -2
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.d.ts +13 -0
- package/dist/agent-farm/commands/attach.d.ts.map +1 -0
- package/dist/agent-farm/commands/attach.js +179 -0
- package/dist/agent-farm/commands/attach.js.map +1 -0
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +30 -3
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.js +1 -1
- package/dist/agent-farm/commands/consult.js.map +1 -1
- package/dist/agent-farm/commands/index.d.ts +2 -2
- package/dist/agent-farm/commands/index.d.ts.map +1 -1
- package/dist/agent-farm/commands/index.js +2 -2
- package/dist/agent-farm/commands/index.js.map +1 -1
- package/dist/agent-farm/commands/{util.d.ts → shell.d.ts} +5 -5
- package/dist/agent-farm/commands/shell.d.ts.map +1 -0
- package/dist/agent-farm/commands/{util.js → shell.js} +23 -36
- package/dist/agent-farm/commands/shell.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +455 -217
- 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 +21 -74
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/stop.d.ts.map +1 -1
- package/dist/agent-farm/commands/stop.js +79 -10
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +2 -1
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +15 -0
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +6 -3
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +3 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js +3 -0
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/hq-connector.d.ts +2 -2
- package/dist/agent-farm/hq-connector.js +2 -2
- package/dist/agent-farm/servers/dashboard-server.js +412 -131
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +353 -16
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +4 -10
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +30 -31
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +48 -0
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +12 -11
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/deps.d.ts.map +1 -1
- package/dist/agent-farm/utils/deps.js +0 -16
- package/dist/agent-farm/utils/deps.js.map +1 -1
- package/dist/agent-farm/utils/notifications.d.ts +30 -0
- package/dist/agent-farm/utils/notifications.d.ts.map +1 -0
- package/dist/agent-farm/utils/notifications.js +121 -0
- package/dist/agent-farm/utils/notifications.js.map +1 -0
- package/dist/agent-farm/utils/server-utils.d.ts +2 -1
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +11 -1
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/agent-farm/utils/shell.d.ts +9 -22
- package/dist/agent-farm/utils/shell.d.ts.map +1 -1
- package/dist/agent-farm/utils/shell.js +34 -34
- package/dist/agent-farm/utils/shell.js.map +1 -1
- package/dist/agent-farm/utils/terminal-ports.d.ts +1 -1
- package/dist/agent-farm/utils/terminal-ports.js +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -54
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +39 -4
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +63 -3
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +0 -15
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +31 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/build-counter.d.ts +5 -0
- package/dist/commands/porch/build-counter.d.ts.map +1 -0
- package/dist/commands/porch/build-counter.js +5 -0
- package/dist/commands/porch/build-counter.js.map +1 -0
- package/dist/commands/porch/checks.d.ts +16 -29
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +90 -144
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/claude.d.ts +27 -0
- package/dist/commands/porch/claude.d.ts.map +1 -0
- package/dist/commands/porch/claude.js +107 -0
- package/dist/commands/porch/claude.js.map +1 -0
- package/dist/commands/porch/index.d.ts +21 -43
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +469 -753
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/plan.d.ts +70 -0
- package/dist/commands/porch/plan.d.ts.map +1 -0
- package/dist/commands/porch/plan.js +190 -0
- package/dist/commands/porch/plan.js.map +1 -0
- package/dist/commands/porch/prompts.d.ts +19 -0
- package/dist/commands/porch/prompts.d.ts.map +1 -0
- package/dist/commands/porch/prompts.js +250 -0
- package/dist/commands/porch/prompts.js.map +1 -0
- package/dist/commands/porch/protocol.d.ts +59 -0
- package/dist/commands/porch/protocol.d.ts.map +1 -0
- package/dist/commands/porch/protocol.js +260 -0
- package/dist/commands/porch/protocol.js.map +1 -0
- package/dist/commands/porch/run.d.ts +40 -0
- package/dist/commands/porch/run.d.ts.map +1 -0
- package/dist/commands/porch/run.js +893 -0
- package/dist/commands/porch/run.js.map +1 -0
- package/dist/commands/porch/state.d.ts +23 -112
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +81 -685
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/porch/types.d.ts +72 -173
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/commands/porch/types.js +2 -1
- package/dist/commands/porch/types.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +22 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/scaffold.d.ts +24 -0
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +78 -0
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/terminal/index.d.ts +8 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +5 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +60 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -0
- package/dist/terminal/pty-manager.js +334 -0
- package/dist/terminal/pty-manager.js.map +1 -0
- package/dist/terminal/pty-session.d.ts +79 -0
- package/dist/terminal/pty-session.d.ts.map +1 -0
- package/dist/terminal/pty-session.js +215 -0
- package/dist/terminal/pty-session.js.map +1 -0
- package/dist/terminal/ring-buffer.d.ts +27 -0
- package/dist/terminal/ring-buffer.d.ts.map +1 -0
- package/dist/terminal/ring-buffer.js +74 -0
- package/dist/terminal/ring-buffer.js.map +1 -0
- package/dist/terminal/ws-protocol.d.ts +27 -0
- package/dist/terminal/ws-protocol.d.ts.map +1 -0
- package/dist/terminal/ws-protocol.js +44 -0
- package/dist/terminal/ws-protocol.js.map +1 -0
- package/package.json +18 -3
- package/skeleton/DEPENDENCIES.md +3 -29
- package/skeleton/builders.md +1 -1
- package/skeleton/protocol-schema.json +282 -0
- package/skeleton/protocols/bugfix/builder-prompt.md +49 -0
- package/skeleton/protocols/bugfix/protocol.json +14 -2
- package/skeleton/protocols/experiment/builder-prompt.md +47 -0
- package/skeleton/protocols/experiment/protocol.json +101 -0
- package/skeleton/protocols/maintain/builder-prompt.md +41 -0
- package/skeleton/protocols/maintain/prompts/audit.md +111 -0
- package/skeleton/protocols/maintain/prompts/clean.md +91 -0
- package/skeleton/protocols/maintain/prompts/sync.md +113 -0
- package/skeleton/protocols/maintain/prompts/verify.md +110 -0
- package/skeleton/protocols/maintain/protocol.json +141 -0
- package/skeleton/protocols/maintain/protocol.md +13 -7
- package/skeleton/protocols/protocol-schema.json +53 -0
- package/skeleton/protocols/spider/builder-prompt.md +53 -0
- package/skeleton/protocols/spider/prompts/implement.md +208 -0
- package/skeleton/protocols/spider/prompts/plan.md +214 -0
- package/skeleton/protocols/spider/prompts/review.md +217 -0
- package/skeleton/protocols/spider/prompts/specify.md +192 -0
- package/skeleton/protocols/spider/protocol.json +96 -148
- package/skeleton/protocols/spider/protocol.md +26 -16
- package/skeleton/protocols/spider/templates/plan.md +14 -0
- package/skeleton/protocols/tick/builder-prompt.md +51 -0
- package/skeleton/protocols/tick/protocol.json +7 -2
- package/skeleton/resources/commands/agent-farm.md +25 -43
- package/skeleton/resources/commands/overview.md +6 -16
- package/skeleton/resources/workflow-reference.md +2 -2
- package/skeleton/roles/architect.md +152 -315
- package/skeleton/roles/builder.md +109 -218
- package/skeleton/templates/AGENTS.md +1 -1
- package/skeleton/templates/CLAUDE.md +1 -1
- package/skeleton/templates/cheatsheet.md +4 -2
- package/templates/dashboard/index.html +17 -43
- package/templates/dashboard/js/dialogs.js +7 -7
- package/templates/dashboard/js/files.js +2 -2
- package/templates/dashboard/js/main.js +3 -3
- package/templates/dashboard/js/projects.js +3 -3
- package/templates/dashboard/js/tabs.js +1 -1
- package/templates/dashboard/js/utils.js +22 -87
- package/templates/tower.html +474 -17
- package/dist/agent-farm/commands/kickoff.d.ts +0 -19
- package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
- package/dist/agent-farm/commands/kickoff.js +0 -323
- package/dist/agent-farm/commands/kickoff.js.map +0 -1
- package/dist/agent-farm/commands/rename.d.ts +0 -13
- package/dist/agent-farm/commands/rename.d.ts.map +0 -1
- package/dist/agent-farm/commands/rename.js +0 -33
- package/dist/agent-farm/commands/rename.js.map +0 -1
- package/dist/agent-farm/commands/tutorial.d.ts +0 -10
- package/dist/agent-farm/commands/tutorial.d.ts.map +0 -1
- package/dist/agent-farm/commands/tutorial.js +0 -49
- package/dist/agent-farm/commands/tutorial.js.map +0 -1
- package/dist/agent-farm/commands/util.d.ts.map +0 -1
- package/dist/agent-farm/commands/util.js.map +0 -1
- package/dist/agent-farm/tutorial/index.d.ts +0 -8
- package/dist/agent-farm/tutorial/index.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/index.js +0 -8
- package/dist/agent-farm/tutorial/index.js.map +0 -1
- package/dist/agent-farm/tutorial/prompts.d.ts +0 -57
- package/dist/agent-farm/tutorial/prompts.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/prompts.js +0 -147
- package/dist/agent-farm/tutorial/prompts.js.map +0 -1
- package/dist/agent-farm/tutorial/runner.d.ts +0 -52
- package/dist/agent-farm/tutorial/runner.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/runner.js +0 -204
- package/dist/agent-farm/tutorial/runner.js.map +0 -1
- package/dist/agent-farm/tutorial/state.d.ts +0 -26
- package/dist/agent-farm/tutorial/state.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/state.js +0 -89
- package/dist/agent-farm/tutorial/state.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/first-spec.js +0 -136
- package/dist/agent-farm/tutorial/steps/first-spec.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/implementation.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/implementation.js +0 -76
- package/dist/agent-farm/tutorial/steps/implementation.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/index.d.ts +0 -10
- package/dist/agent-farm/tutorial/steps/index.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/index.js +0 -10
- package/dist/agent-farm/tutorial/steps/index.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/planning.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/planning.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/planning.js +0 -143
- package/dist/agent-farm/tutorial/steps/planning.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/review.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/review.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/review.js +0 -78
- package/dist/agent-farm/tutorial/steps/review.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/setup.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/setup.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/setup.js +0 -126
- package/dist/agent-farm/tutorial/steps/setup.js.map +0 -1
- package/dist/agent-farm/tutorial/steps/welcome.d.ts +0 -7
- package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +0 -1
- package/dist/agent-farm/tutorial/steps/welcome.js +0 -50
- package/dist/agent-farm/tutorial/steps/welcome.js.map +0 -1
- package/dist/commands/pcheck/cache.d.ts +0 -48
- package/dist/commands/pcheck/cache.d.ts.map +0 -1
- package/dist/commands/pcheck/cache.js +0 -170
- package/dist/commands/pcheck/cache.js.map +0 -1
- package/dist/commands/pcheck/evaluator.d.ts +0 -15
- package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
- package/dist/commands/pcheck/evaluator.js +0 -246
- package/dist/commands/pcheck/evaluator.js.map +0 -1
- package/dist/commands/pcheck/index.d.ts +0 -12
- package/dist/commands/pcheck/index.d.ts.map +0 -1
- package/dist/commands/pcheck/index.js +0 -249
- package/dist/commands/pcheck/index.js.map +0 -1
- package/dist/commands/pcheck/parser.d.ts +0 -39
- package/dist/commands/pcheck/parser.d.ts.map +0 -1
- package/dist/commands/pcheck/parser.js +0 -155
- package/dist/commands/pcheck/parser.js.map +0 -1
- package/dist/commands/pcheck/types.d.ts +0 -82
- package/dist/commands/pcheck/types.d.ts.map +0 -1
- package/dist/commands/pcheck/types.js +0 -5
- package/dist/commands/pcheck/types.js.map +0 -1
- package/dist/commands/porch/consultation.d.ts +0 -56
- package/dist/commands/porch/consultation.d.ts.map +0 -1
- package/dist/commands/porch/consultation.js +0 -330
- package/dist/commands/porch/consultation.js.map +0 -1
- package/dist/commands/porch/notifications.d.ts +0 -99
- package/dist/commands/porch/notifications.d.ts.map +0 -1
- package/dist/commands/porch/notifications.js +0 -223
- package/dist/commands/porch/notifications.js.map +0 -1
- package/dist/commands/porch/plan-parser.d.ts +0 -38
- package/dist/commands/porch/plan-parser.d.ts.map +0 -1
- package/dist/commands/porch/plan-parser.js +0 -166
- package/dist/commands/porch/plan-parser.js.map +0 -1
- package/dist/commands/porch/protocol-loader.d.ts +0 -46
- package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
- package/dist/commands/porch/protocol-loader.js +0 -249
- package/dist/commands/porch/protocol-loader.js.map +0 -1
- package/dist/commands/porch/signal-parser.d.ts +0 -88
- package/dist/commands/porch/signal-parser.d.ts.map +0 -1
- package/dist/commands/porch/signal-parser.js +0 -148
- package/dist/commands/porch/signal-parser.js.map +0 -1
- package/dist/commands/tower.d.ts +0 -16
- package/dist/commands/tower.d.ts.map +0 -1
- package/dist/commands/tower.js +0 -21
- package/dist/commands/tower.js.map +0 -1
- package/skeleton/config.json +0 -7
- package/skeleton/porch/protocols/bugfix.json +0 -85
- package/skeleton/porch/protocols/spider.json +0 -135
- package/skeleton/porch/protocols/tick.json +0 -76
- package/templates/dashboard/css/activity.css +0 -151
- package/templates/dashboard/js/activity.js +0 -112
|
@@ -1,155 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/commands/pcheck/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,82 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/pcheck/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Multi-Agent Consultation
|
|
3
|
-
*
|
|
4
|
-
* Runs parallel 3-way consultations with external AI models (gemini, codex, claude)
|
|
5
|
-
* and collects feedback with APPROVE/REQUEST_CHANGES verdicts.
|
|
6
|
-
*/
|
|
7
|
-
import type { ConsultationConfig, ConsultationFeedback, ConsultationResult, ConsultationVerdict } from './types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Parse verdict from consultation output
|
|
10
|
-
* Looks for APPROVE or REQUEST_CHANGES markers
|
|
11
|
-
*/
|
|
12
|
-
export declare function parseVerdict(output: string): ConsultationVerdict;
|
|
13
|
-
/**
|
|
14
|
-
* Extract summary from consultation output
|
|
15
|
-
* Takes the first paragraph or bullet points
|
|
16
|
-
*/
|
|
17
|
-
export declare function extractSummary(output: string, maxLength?: number): string;
|
|
18
|
-
/**
|
|
19
|
-
* Run parallel 3-way consultation
|
|
20
|
-
*/
|
|
21
|
-
export declare function runParallelConsultation(config: ConsultationConfig, context: {
|
|
22
|
-
subcommand: string;
|
|
23
|
-
identifier: string;
|
|
24
|
-
cwd?: string;
|
|
25
|
-
timeout?: number;
|
|
26
|
-
dryRun?: boolean;
|
|
27
|
-
}): Promise<ConsultationFeedback[]>;
|
|
28
|
-
/**
|
|
29
|
-
* Run consultation loop with revision support
|
|
30
|
-
*
|
|
31
|
-
* If any model returns REQUEST_CHANGES, allows revision and re-consultation
|
|
32
|
-
* up to max_rounds times.
|
|
33
|
-
*/
|
|
34
|
-
export declare function runConsultationLoop(config: ConsultationConfig, context: {
|
|
35
|
-
subcommand: string;
|
|
36
|
-
identifier: string;
|
|
37
|
-
cwd?: string;
|
|
38
|
-
timeout?: number;
|
|
39
|
-
dryRun?: boolean;
|
|
40
|
-
onRevisionNeeded?: (feedback: ConsultationFeedback[]) => Promise<boolean>;
|
|
41
|
-
}): Promise<ConsultationResult>;
|
|
42
|
-
/**
|
|
43
|
-
* Format consultation results for display
|
|
44
|
-
*/
|
|
45
|
-
export declare function formatConsultationResults(result: ConsultationResult): string;
|
|
46
|
-
/**
|
|
47
|
-
* Check if a phase has consultation configured
|
|
48
|
-
*/
|
|
49
|
-
export declare function hasConsultation(phaseConfig: {
|
|
50
|
-
consultation?: ConsultationConfig;
|
|
51
|
-
}): boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Get the default consultation config for common review types
|
|
54
|
-
*/
|
|
55
|
-
export declare function getDefaultConsultationConfig(type: string): ConsultationConfig;
|
|
56
|
-
//# sourceMappingURL=consultation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consultation.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/consultation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AA0EpB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAwBhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAuB9E;AA4BD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GACA,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAqFjC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E,GACA,OAAO,CAAC,kBAAkB,CAAC,CAiD7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiB5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,OAAO,CAI3F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAyC7E"}
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Multi-Agent Consultation
|
|
3
|
-
*
|
|
4
|
-
* Runs parallel 3-way consultations with external AI models (gemini, codex, claude)
|
|
5
|
-
* and collects feedback with APPROVE/REQUEST_CHANGES verdicts.
|
|
6
|
-
*/
|
|
7
|
-
import { spawn } from 'node:child_process';
|
|
8
|
-
import chalk from 'chalk';
|
|
9
|
-
/**
|
|
10
|
-
* Default consultation timeout (ms)
|
|
11
|
-
*/
|
|
12
|
-
const DEFAULT_TIMEOUT = 300000; // 5 minutes
|
|
13
|
-
/**
|
|
14
|
-
* Run a single consultation with an AI model
|
|
15
|
-
*/
|
|
16
|
-
async function runConsultation(model, command, args, options = {}) {
|
|
17
|
-
const timeout = options.timeout || DEFAULT_TIMEOUT;
|
|
18
|
-
return new Promise((resolve) => {
|
|
19
|
-
const proc = spawn(command, args, {
|
|
20
|
-
cwd: options.cwd,
|
|
21
|
-
shell: true,
|
|
22
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
23
|
-
});
|
|
24
|
-
let output = '';
|
|
25
|
-
let stderr = '';
|
|
26
|
-
let timedOut = false;
|
|
27
|
-
const timeoutId = setTimeout(() => {
|
|
28
|
-
timedOut = true;
|
|
29
|
-
proc.kill('SIGTERM');
|
|
30
|
-
}, timeout);
|
|
31
|
-
proc.stdout.on('data', (data) => {
|
|
32
|
-
output += data.toString();
|
|
33
|
-
});
|
|
34
|
-
proc.stderr.on('data', (data) => {
|
|
35
|
-
stderr += data.toString();
|
|
36
|
-
});
|
|
37
|
-
proc.on('close', (code) => {
|
|
38
|
-
clearTimeout(timeoutId);
|
|
39
|
-
if (timedOut) {
|
|
40
|
-
resolve({
|
|
41
|
-
output,
|
|
42
|
-
error: `Consultation timed out after ${timeout}ms`,
|
|
43
|
-
success: false,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
resolve({
|
|
48
|
-
output: output + stderr,
|
|
49
|
-
error: code !== 0 ? `Exit code: ${code}` : undefined,
|
|
50
|
-
success: code === 0,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
proc.on('error', (err) => {
|
|
55
|
-
clearTimeout(timeoutId);
|
|
56
|
-
resolve({
|
|
57
|
-
output: '',
|
|
58
|
-
error: err.message,
|
|
59
|
-
success: false,
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Parse verdict from consultation output
|
|
66
|
-
* Looks for APPROVE or REQUEST_CHANGES markers
|
|
67
|
-
*/
|
|
68
|
-
export function parseVerdict(output) {
|
|
69
|
-
// Look for explicit verdict markers
|
|
70
|
-
if (/verdict:\s*approve/i.test(output) || /\[APPROVE\]/i.test(output)) {
|
|
71
|
-
return 'APPROVE';
|
|
72
|
-
}
|
|
73
|
-
if (/verdict:\s*request_changes/i.test(output) || /\[REQUEST_CHANGES\]/i.test(output)) {
|
|
74
|
-
return 'REQUEST_CHANGES';
|
|
75
|
-
}
|
|
76
|
-
// Look for implicit approval signals
|
|
77
|
-
if (/looks good/i.test(output) && !/but|however|should|could/i.test(output.slice(output.search(/looks good/i), output.search(/looks good/i) + 100))) {
|
|
78
|
-
return 'APPROVE';
|
|
79
|
-
}
|
|
80
|
-
if (/approved?/i.test(output) && !/not approved/i.test(output)) {
|
|
81
|
-
return 'APPROVE';
|
|
82
|
-
}
|
|
83
|
-
// Look for implicit change request signals
|
|
84
|
-
if (/must\s+(be\s+)?fix|should\s+(be\s+)?fix|need(s)?\s+to\s+fix|critical\s+issue|blocking\s+issue/i.test(output)) {
|
|
85
|
-
return 'REQUEST_CHANGES';
|
|
86
|
-
}
|
|
87
|
-
// Default to approve if no clear signal (lenient mode)
|
|
88
|
-
return 'APPROVE';
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Extract summary from consultation output
|
|
92
|
-
* Takes the first paragraph or bullet points
|
|
93
|
-
*/
|
|
94
|
-
export function extractSummary(output, maxLength = 500) {
|
|
95
|
-
// Try to find a summary section
|
|
96
|
-
const summaryMatch = output.match(/##?\s*Summary\s*\n([\s\S]*?)(?=\n##|\n\*\*|$)/i);
|
|
97
|
-
if (summaryMatch) {
|
|
98
|
-
return truncate(summaryMatch[1].trim(), maxLength);
|
|
99
|
-
}
|
|
100
|
-
// Try to find verdict section
|
|
101
|
-
const verdictMatch = output.match(/##?\s*Verdict\s*\n([\s\S]*?)(?=\n##|\n\*\*|$)/i);
|
|
102
|
-
if (verdictMatch) {
|
|
103
|
-
return truncate(verdictMatch[1].trim(), maxLength);
|
|
104
|
-
}
|
|
105
|
-
// Fall back to first paragraph
|
|
106
|
-
const paragraphs = output.split(/\n\n+/);
|
|
107
|
-
for (const p of paragraphs) {
|
|
108
|
-
const trimmed = p.trim();
|
|
109
|
-
if (trimmed.length > 50 && !trimmed.startsWith('#') && !trimmed.startsWith('```')) {
|
|
110
|
-
return truncate(trimmed, maxLength);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return truncate(output.trim(), maxLength);
|
|
114
|
-
}
|
|
115
|
-
function truncate(text, maxLength) {
|
|
116
|
-
if (text.length <= maxLength)
|
|
117
|
-
return text;
|
|
118
|
-
return text.slice(0, maxLength - 3) + '...';
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Build the consult command for a model
|
|
122
|
-
*/
|
|
123
|
-
function buildConsultCommand(model, subcommand, identifier, reviewType) {
|
|
124
|
-
const args = ['--model', model, subcommand, identifier];
|
|
125
|
-
if (reviewType) {
|
|
126
|
-
args.push('--type', reviewType);
|
|
127
|
-
}
|
|
128
|
-
return {
|
|
129
|
-
command: 'consult',
|
|
130
|
-
args,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Run parallel 3-way consultation
|
|
135
|
-
*/
|
|
136
|
-
export async function runParallelConsultation(config, context) {
|
|
137
|
-
const { subcommand, identifier, cwd, timeout = DEFAULT_TIMEOUT, dryRun } = context;
|
|
138
|
-
const { models, type: reviewType, parallel = true } = config;
|
|
139
|
-
if (dryRun) {
|
|
140
|
-
console.log(chalk.yellow(`[consultation] [DRY RUN] Would run ${models.length}-way consultation:`));
|
|
141
|
-
for (const model of models) {
|
|
142
|
-
const { command, args } = buildConsultCommand(model, subcommand, identifier, reviewType);
|
|
143
|
-
console.log(chalk.yellow(` ${command} ${args.join(' ')}`));
|
|
144
|
-
}
|
|
145
|
-
return models.map(model => ({
|
|
146
|
-
model,
|
|
147
|
-
verdict: 'APPROVE',
|
|
148
|
-
summary: '[DRY RUN] Simulated approval',
|
|
149
|
-
}));
|
|
150
|
-
}
|
|
151
|
-
console.log(chalk.blue(`[consultation] Running ${models.length}-way parallel consultation...`));
|
|
152
|
-
const startTime = Date.now();
|
|
153
|
-
// Build commands for each model
|
|
154
|
-
const consultations = models.map(model => {
|
|
155
|
-
const { command, args } = buildConsultCommand(model, subcommand, identifier, reviewType);
|
|
156
|
-
console.log(chalk.blue(`[consultation] Starting ${model}...`));
|
|
157
|
-
return {
|
|
158
|
-
model,
|
|
159
|
-
promise: runConsultation(model, command, args, { timeout, cwd }),
|
|
160
|
-
};
|
|
161
|
-
});
|
|
162
|
-
// Run in parallel or sequentially based on config
|
|
163
|
-
const results = [];
|
|
164
|
-
if (parallel) {
|
|
165
|
-
// Run all in parallel
|
|
166
|
-
const outputs = await Promise.all(consultations.map(c => c.promise));
|
|
167
|
-
for (let i = 0; i < consultations.length; i++) {
|
|
168
|
-
const { model } = consultations[i];
|
|
169
|
-
const output = outputs[i];
|
|
170
|
-
if (!output.success) {
|
|
171
|
-
console.log(chalk.yellow(`[consultation] ${model} failed: ${output.error}`));
|
|
172
|
-
results.push({
|
|
173
|
-
model,
|
|
174
|
-
verdict: 'APPROVE', // Default to approve on failure (lenient)
|
|
175
|
-
summary: `Consultation failed: ${output.error}`,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
const verdict = parseVerdict(output.output);
|
|
180
|
-
const summary = extractSummary(output.output);
|
|
181
|
-
const duration = Date.now() - startTime;
|
|
182
|
-
console.log(chalk.blue(`[consultation] ${model} completed (${duration}ms): ${verdict}`));
|
|
183
|
-
results.push({ model, verdict, summary });
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
// Run sequentially
|
|
189
|
-
for (const { model, promise } of consultations) {
|
|
190
|
-
const output = await promise;
|
|
191
|
-
const duration = Date.now() - startTime;
|
|
192
|
-
if (!output.success) {
|
|
193
|
-
console.log(chalk.yellow(`[consultation] ${model} failed: ${output.error}`));
|
|
194
|
-
results.push({
|
|
195
|
-
model,
|
|
196
|
-
verdict: 'APPROVE',
|
|
197
|
-
summary: `Consultation failed: ${output.error}`,
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
const verdict = parseVerdict(output.output);
|
|
202
|
-
const summary = extractSummary(output.output);
|
|
203
|
-
console.log(chalk.blue(`[consultation] ${model} completed (${duration}ms): ${verdict}`));
|
|
204
|
-
results.push({ model, verdict, summary });
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
const totalDuration = Date.now() - startTime;
|
|
209
|
-
console.log(chalk.blue(`[consultation] All consultations complete (${totalDuration}ms)`));
|
|
210
|
-
return results;
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Run consultation loop with revision support
|
|
214
|
-
*
|
|
215
|
-
* If any model returns REQUEST_CHANGES, allows revision and re-consultation
|
|
216
|
-
* up to max_rounds times.
|
|
217
|
-
*/
|
|
218
|
-
export async function runConsultationLoop(config, context) {
|
|
219
|
-
const maxRounds = config.max_rounds || 3;
|
|
220
|
-
let round = 1;
|
|
221
|
-
while (round <= maxRounds) {
|
|
222
|
-
console.log(chalk.blue(`[consultation] Round ${round}/${maxRounds}`));
|
|
223
|
-
const feedback = await runParallelConsultation(config, context);
|
|
224
|
-
// Check if all approved
|
|
225
|
-
const allApproved = feedback.every(f => f.verdict === 'APPROVE');
|
|
226
|
-
if (allApproved) {
|
|
227
|
-
console.log(chalk.green(`[consultation] All models approved!`));
|
|
228
|
-
return { round, feedback, allApproved: true };
|
|
229
|
-
}
|
|
230
|
-
// Some models requested changes
|
|
231
|
-
const changeRequests = feedback.filter(f => f.verdict === 'REQUEST_CHANGES');
|
|
232
|
-
console.log(chalk.yellow(`[consultation] ${changeRequests.length} model(s) requested changes:`));
|
|
233
|
-
for (const req of changeRequests) {
|
|
234
|
-
console.log(chalk.yellow(` ${req.model}: ${req.summary}`));
|
|
235
|
-
}
|
|
236
|
-
// Check if we've reached max rounds
|
|
237
|
-
if (round >= maxRounds) {
|
|
238
|
-
console.log(chalk.red(`[consultation] Max rounds (${maxRounds}) reached without full approval`));
|
|
239
|
-
return { round, feedback, allApproved: false };
|
|
240
|
-
}
|
|
241
|
-
// Call revision callback if provided
|
|
242
|
-
if (context.onRevisionNeeded) {
|
|
243
|
-
const shouldContinue = await context.onRevisionNeeded(feedback);
|
|
244
|
-
if (!shouldContinue) {
|
|
245
|
-
console.log(chalk.yellow(`[consultation] Revision declined, stopping consultation loop`));
|
|
246
|
-
return { round, feedback, allApproved: false };
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
// No revision callback - just report and exit
|
|
251
|
-
console.log(chalk.yellow(`[consultation] Changes requested but no revision handler`));
|
|
252
|
-
return { round, feedback, allApproved: false };
|
|
253
|
-
}
|
|
254
|
-
round++;
|
|
255
|
-
}
|
|
256
|
-
// Should not reach here
|
|
257
|
-
return { round, feedback: [], allApproved: false };
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Format consultation results for display
|
|
261
|
-
*/
|
|
262
|
-
export function formatConsultationResults(result) {
|
|
263
|
-
const lines = [
|
|
264
|
-
`Consultation Results (Round ${result.round}):`,
|
|
265
|
-
result.allApproved ? chalk.green(' ✓ All models approved') : chalk.yellow(' ⚠ Not all models approved'),
|
|
266
|
-
'',
|
|
267
|
-
];
|
|
268
|
-
for (const feedback of result.feedback) {
|
|
269
|
-
const icon = feedback.verdict === 'APPROVE' ? '✓' : '✗';
|
|
270
|
-
const color = feedback.verdict === 'APPROVE' ? chalk.green : chalk.yellow;
|
|
271
|
-
lines.push(color(` ${icon} ${feedback.model}: ${feedback.verdict}`));
|
|
272
|
-
if (feedback.summary) {
|
|
273
|
-
lines.push(` ${feedback.summary.slice(0, 100)}...`);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
return lines.join('\n');
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Check if a phase has consultation configured
|
|
280
|
-
*/
|
|
281
|
-
export function hasConsultation(phaseConfig) {
|
|
282
|
-
return phaseConfig.consultation !== undefined &&
|
|
283
|
-
phaseConfig.consultation.models !== undefined &&
|
|
284
|
-
phaseConfig.consultation.models.length > 0;
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Get the default consultation config for common review types
|
|
288
|
-
*/
|
|
289
|
-
export function getDefaultConsultationConfig(type) {
|
|
290
|
-
const defaultModels = ['gemini', 'codex', 'claude'];
|
|
291
|
-
switch (type) {
|
|
292
|
-
case 'spec-review':
|
|
293
|
-
return {
|
|
294
|
-
on: 'review',
|
|
295
|
-
models: defaultModels,
|
|
296
|
-
type: 'spec-review',
|
|
297
|
-
parallel: true,
|
|
298
|
-
max_rounds: 3,
|
|
299
|
-
next: 'plan',
|
|
300
|
-
};
|
|
301
|
-
case 'plan-review':
|
|
302
|
-
return {
|
|
303
|
-
on: 'review',
|
|
304
|
-
models: defaultModels,
|
|
305
|
-
type: 'plan-review',
|
|
306
|
-
parallel: true,
|
|
307
|
-
max_rounds: 3,
|
|
308
|
-
next: 'implement',
|
|
309
|
-
};
|
|
310
|
-
case 'impl-review':
|
|
311
|
-
return {
|
|
312
|
-
on: 'complete',
|
|
313
|
-
models: defaultModels,
|
|
314
|
-
type: 'impl-review',
|
|
315
|
-
parallel: true,
|
|
316
|
-
max_rounds: 2,
|
|
317
|
-
next: 'defend',
|
|
318
|
-
};
|
|
319
|
-
default:
|
|
320
|
-
return {
|
|
321
|
-
on: 'review',
|
|
322
|
-
models: defaultModels,
|
|
323
|
-
type: type,
|
|
324
|
-
parallel: true,
|
|
325
|
-
max_rounds: 2,
|
|
326
|
-
next: '',
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
//# sourceMappingURL=consultation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consultation.js","sourceRoot":"","sources":["../../../src/commands/porch/consultation.ts"],"names":[],"mappings":"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"}
|