@cluesmith/codev 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/af.js +8 -0
- package/bin/codev.js +4 -0
- package/bin/consult.js +7 -0
- package/dist/agent-farm/cli.d.ts +11 -0
- package/dist/agent-farm/cli.d.ts.map +1 -0
- package/dist/agent-farm/cli.js +359 -0
- package/dist/agent-farm/cli.js.map +1 -0
- package/dist/agent-farm/commands/cleanup.d.ts +12 -0
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -0
- package/dist/agent-farm/commands/cleanup.js +154 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -0
- package/dist/agent-farm/commands/db.d.ts +38 -0
- package/dist/agent-farm/commands/db.d.ts.map +1 -0
- package/dist/agent-farm/commands/db.js +133 -0
- package/dist/agent-farm/commands/db.js.map +1 -0
- package/dist/agent-farm/commands/index.d.ts +11 -0
- package/dist/agent-farm/commands/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/index.js +11 -0
- package/dist/agent-farm/commands/index.js.map +1 -0
- package/dist/agent-farm/commands/open.d.ts +15 -0
- package/dist/agent-farm/commands/open.d.ts.map +1 -0
- package/dist/agent-farm/commands/open.js +118 -0
- package/dist/agent-farm/commands/open.js.map +1 -0
- package/dist/agent-farm/commands/rename.d.ts +13 -0
- package/dist/agent-farm/commands/rename.d.ts.map +1 -0
- package/dist/agent-farm/commands/rename.js +33 -0
- package/dist/agent-farm/commands/rename.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts +9 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -0
- package/dist/agent-farm/commands/send.js +282 -0
- package/dist/agent-farm/commands/send.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts +15 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -0
- package/dist/agent-farm/commands/spawn.js +575 -0
- package/dist/agent-farm/commands/spawn.js.map +1 -0
- package/dist/agent-farm/commands/start.d.ts +9 -0
- package/dist/agent-farm/commands/start.d.ts.map +1 -0
- package/dist/agent-farm/commands/start.js +175 -0
- package/dist/agent-farm/commands/start.js.map +1 -0
- package/dist/agent-farm/commands/status.d.ts +8 -0
- package/dist/agent-farm/commands/status.d.ts.map +1 -0
- package/dist/agent-farm/commands/status.js +123 -0
- package/dist/agent-farm/commands/status.js.map +1 -0
- package/dist/agent-farm/commands/stop.d.ts +8 -0
- package/dist/agent-farm/commands/stop.d.ts.map +1 -0
- package/dist/agent-farm/commands/stop.js +76 -0
- package/dist/agent-farm/commands/stop.js.map +1 -0
- package/dist/agent-farm/commands/tower.d.ts +19 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower.js +125 -0
- package/dist/agent-farm/commands/tower.js.map +1 -0
- package/dist/agent-farm/commands/tutorial.d.ts +10 -0
- package/dist/agent-farm/commands/tutorial.d.ts.map +1 -0
- package/dist/agent-farm/commands/tutorial.js +49 -0
- package/dist/agent-farm/commands/tutorial.js.map +1 -0
- package/dist/agent-farm/commands/util.d.ts +15 -0
- package/dist/agent-farm/commands/util.d.ts.map +1 -0
- package/dist/agent-farm/commands/util.js +108 -0
- package/dist/agent-farm/commands/util.js.map +1 -0
- package/dist/agent-farm/db/errors.d.ts +17 -0
- package/dist/agent-farm/db/errors.d.ts.map +1 -0
- package/dist/agent-farm/db/errors.js +46 -0
- package/dist/agent-farm/db/errors.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +41 -0
- package/dist/agent-farm/db/index.d.ts.map +1 -0
- package/dist/agent-farm/db/index.js +168 -0
- package/dist/agent-farm/db/index.js.map +1 -0
- package/dist/agent-farm/db/migrate.d.ts +15 -0
- package/dist/agent-farm/db/migrate.d.ts.map +1 -0
- package/dist/agent-farm/db/migrate.js +137 -0
- package/dist/agent-farm/db/migrate.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +16 -0
- package/dist/agent-farm/db/schema.d.ts.map +1 -0
- package/dist/agent-farm/db/schema.js +103 -0
- package/dist/agent-farm/db/schema.js.map +1 -0
- package/dist/agent-farm/db/types.d.ts +87 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -0
- package/dist/agent-farm/db/types.js +65 -0
- package/dist/agent-farm/db/types.js.map +1 -0
- package/dist/agent-farm/index.d.ts +7 -0
- package/dist/agent-farm/index.d.ts.map +1 -0
- package/dist/agent-farm/index.js +373 -0
- package/dist/agent-farm/index.js.map +1 -0
- package/dist/agent-farm/servers/annotate-server.d.ts +9 -0
- package/dist/agent-farm/servers/annotate-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/annotate-server.js +136 -0
- package/dist/agent-farm/servers/annotate-server.js.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts +9 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.js +939 -0
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.d.ts +9 -0
- package/dist/agent-farm/servers/tower-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +463 -0
- package/dist/agent-farm/servers/tower-server.js.map +1 -0
- package/dist/agent-farm/state.d.ts +93 -0
- package/dist/agent-farm/state.d.ts.map +1 -0
- package/dist/agent-farm/state.js +253 -0
- package/dist/agent-farm/state.js.map +1 -0
- package/dist/agent-farm/tutorial/index.d.ts +8 -0
- package/dist/agent-farm/tutorial/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/index.js +8 -0
- package/dist/agent-farm/tutorial/index.js.map +1 -0
- package/dist/agent-farm/tutorial/prompts.d.ts +57 -0
- package/dist/agent-farm/tutorial/prompts.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/prompts.js +147 -0
- package/dist/agent-farm/tutorial/prompts.js.map +1 -0
- package/dist/agent-farm/tutorial/runner.d.ts +52 -0
- package/dist/agent-farm/tutorial/runner.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/runner.js +204 -0
- package/dist/agent-farm/tutorial/runner.js.map +1 -0
- package/dist/agent-farm/tutorial/state.d.ts +26 -0
- package/dist/agent-farm/tutorial/state.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/state.js +89 -0
- package/dist/agent-farm/tutorial/state.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js +136 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.js +76 -0
- package/dist/agent-farm/tutorial/steps/implementation.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts +10 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.js +10 -0
- package/dist/agent-farm/tutorial/steps/index.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.js +143 -0
- package/dist/agent-farm/tutorial/steps/planning.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.js +78 -0
- package/dist/agent-farm/tutorial/steps/review.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.js +126 -0
- package/dist/agent-farm/tutorial/steps/setup.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.js +50 -0
- package/dist/agent-farm/tutorial/steps/welcome.js.map +1 -0
- package/dist/agent-farm/types.d.ts +131 -0
- package/dist/agent-farm/types.d.ts.map +1 -0
- package/dist/agent-farm/types.js +5 -0
- package/dist/agent-farm/types.js.map +1 -0
- package/dist/agent-farm/utils/config.d.ts +27 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -0
- package/dist/agent-farm/utils/config.js +242 -0
- package/dist/agent-farm/utils/config.js.map +1 -0
- package/dist/agent-farm/utils/deps.d.ts +51 -0
- package/dist/agent-farm/utils/deps.d.ts.map +1 -0
- package/dist/agent-farm/utils/deps.js +194 -0
- package/dist/agent-farm/utils/deps.js.map +1 -0
- package/dist/agent-farm/utils/index.d.ts +6 -0
- package/dist/agent-farm/utils/index.d.ts.map +1 -0
- package/dist/agent-farm/utils/index.js +6 -0
- package/dist/agent-farm/utils/index.js.map +1 -0
- package/dist/agent-farm/utils/logger.d.ts +31 -0
- package/dist/agent-farm/utils/logger.d.ts.map +1 -0
- package/dist/agent-farm/utils/logger.js +58 -0
- package/dist/agent-farm/utils/logger.js.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts +27 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.js +127 -0
- package/dist/agent-farm/utils/orphan-handler.js.map +1 -0
- package/dist/agent-farm/utils/port-registry.d.ts +58 -0
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -0
- package/dist/agent-farm/utils/port-registry.js +149 -0
- package/dist/agent-farm/utils/port-registry.js.map +1 -0
- package/dist/agent-farm/utils/shell.d.ts +45 -0
- package/dist/agent-farm/utils/shell.d.ts.map +1 -0
- package/dist/agent-farm/utils/shell.js +120 -0
- package/dist/agent-farm/utils/shell.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adopt.d.ts +12 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +178 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/consult/index.d.ts +17 -0
- package/dist/commands/consult/index.d.ts.map +1 -0
- package/dist/commands/consult/index.js +405 -0
- package/dist/commands/consult/index.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +346 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/tower.d.ts +16 -0
- package/dist/commands/tower.d.ts.map +1 -0
- package/dist/commands/tower.js +21 -0
- package/dist/commands/tower.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +137 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/lib/templates.d.ts +57 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +205 -0
- package/dist/lib/templates.js.map +1 -0
- package/package.json +55 -0
- package/templates/AGENTS.md +49 -0
- package/templates/CLAUDE.md +47 -0
- package/templates/DEPENDENCIES.md +344 -0
- package/templates/agents/architecture-documenter.md +189 -0
- package/templates/agents/codev-updater.md +276 -0
- package/templates/agents/spider-protocol-updater.md +118 -0
- package/templates/annotate.html +903 -0
- package/templates/bin/agent-farm +18 -0
- package/templates/bin/annotate-server.js +140 -0
- package/templates/bin/codev-doctor +335 -0
- package/templates/builders.md +30 -0
- package/templates/config.json +7 -0
- package/templates/dashboard-split.html +1679 -0
- package/templates/dashboard.html +149 -0
- package/templates/plans/.gitkeep +0 -0
- package/templates/protocols/experiment/protocol.md +229 -0
- package/templates/protocols/experiment/templates/notes.md +97 -0
- package/templates/protocols/maintain/protocol.md +235 -0
- package/templates/protocols/spider/protocol.md +639 -0
- package/templates/protocols/spider/templates/plan.md +169 -0
- package/templates/protocols/spider/templates/review.md +207 -0
- package/templates/protocols/spider/templates/spec.md +140 -0
- package/templates/protocols/spider-solo/protocol.md +619 -0
- package/templates/protocols/spider-solo/templates/plan.md +169 -0
- package/templates/protocols/spider-solo/templates/review.md +207 -0
- package/templates/protocols/spider-solo/templates/spec.md +140 -0
- package/templates/protocols/tick/protocol.md +250 -0
- package/templates/protocols/tick/templates/plan.md +67 -0
- package/templates/protocols/tick/templates/review.md +90 -0
- package/templates/protocols/tick/templates/spec.md +61 -0
- package/templates/reviews/.gitkeep +0 -0
- package/templates/roles/architect.md +230 -0
- package/templates/roles/builder.md +175 -0
- package/templates/roles/consultant.md +27 -0
- package/templates/specs/.gitkeep +0 -0
- package/templates/templates/projectlist.md +129 -0
- package/templates/tower.html +1032 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* codev consult - AI consultation with external models
|
|
3
|
+
*
|
|
4
|
+
* Port of codev/bin/consult (Python) to TypeScript
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { spawn, execSync } from 'node:child_process';
|
|
9
|
+
import { tmpdir } from 'node:os';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
const MODEL_CONFIGS = {
|
|
12
|
+
gemini: { cli: 'gemini', args: ['--yolo'], envVar: 'GEMINI_SYSTEM_MD' },
|
|
13
|
+
codex: { cli: 'codex', args: ['exec', '--full-auto'], envVar: 'CODEX_SYSTEM_MESSAGE' },
|
|
14
|
+
claude: { cli: 'claude', args: ['--print', '-p'], envVar: null },
|
|
15
|
+
};
|
|
16
|
+
// Model aliases
|
|
17
|
+
const MODEL_ALIASES = {
|
|
18
|
+
pro: 'gemini',
|
|
19
|
+
gpt: 'codex',
|
|
20
|
+
opus: 'claude',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Find the codev root directory
|
|
24
|
+
*/
|
|
25
|
+
function findCodevRoot() {
|
|
26
|
+
let current = process.cwd();
|
|
27
|
+
while (current !== path.dirname(current)) {
|
|
28
|
+
const roleFile = path.join(current, 'codev', 'roles', 'consultant.md');
|
|
29
|
+
if (fs.existsSync(roleFile)) {
|
|
30
|
+
return current;
|
|
31
|
+
}
|
|
32
|
+
current = path.dirname(current);
|
|
33
|
+
}
|
|
34
|
+
return process.cwd();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load the consultant role
|
|
38
|
+
*/
|
|
39
|
+
function loadRole(codevRoot) {
|
|
40
|
+
const roleFile = path.join(codevRoot, 'codev', 'roles', 'consultant.md');
|
|
41
|
+
if (!fs.existsSync(roleFile)) {
|
|
42
|
+
throw new Error(`Role file not found: ${roleFile}\nAre you in a codev-enabled project?`);
|
|
43
|
+
}
|
|
44
|
+
return fs.readFileSync(roleFile, 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load .env file if it exists
|
|
48
|
+
*/
|
|
49
|
+
function loadDotenv(codevRoot) {
|
|
50
|
+
const envFile = path.join(codevRoot, '.env');
|
|
51
|
+
if (!fs.existsSync(envFile))
|
|
52
|
+
return;
|
|
53
|
+
const content = fs.readFileSync(envFile, 'utf-8');
|
|
54
|
+
for (const line of content.split('\n')) {
|
|
55
|
+
const trimmed = line.trim();
|
|
56
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
57
|
+
continue;
|
|
58
|
+
const eqIndex = trimmed.indexOf('=');
|
|
59
|
+
if (eqIndex === -1)
|
|
60
|
+
continue;
|
|
61
|
+
const key = trimmed.substring(0, eqIndex).trim();
|
|
62
|
+
let value = trimmed.substring(eqIndex + 1).trim();
|
|
63
|
+
// Remove surrounding quotes
|
|
64
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
65
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
66
|
+
value = value.slice(1, -1);
|
|
67
|
+
}
|
|
68
|
+
// Only set if not already in environment
|
|
69
|
+
if (!(key in process.env)) {
|
|
70
|
+
process.env[key] = value;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Find a spec file by number
|
|
76
|
+
*/
|
|
77
|
+
function findSpec(codevRoot, number) {
|
|
78
|
+
const specsDir = path.join(codevRoot, 'codev', 'specs');
|
|
79
|
+
const pattern = String(number).padStart(4, '0');
|
|
80
|
+
if (fs.existsSync(specsDir)) {
|
|
81
|
+
const files = fs.readdirSync(specsDir);
|
|
82
|
+
for (const file of files) {
|
|
83
|
+
if (file.startsWith(pattern) && file.endsWith('.md')) {
|
|
84
|
+
return path.join(specsDir, file);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Find a plan file by number
|
|
92
|
+
*/
|
|
93
|
+
function findPlan(codevRoot, number) {
|
|
94
|
+
const plansDir = path.join(codevRoot, 'codev', 'plans');
|
|
95
|
+
const pattern = String(number).padStart(4, '0');
|
|
96
|
+
if (fs.existsSync(plansDir)) {
|
|
97
|
+
const files = fs.readdirSync(plansDir);
|
|
98
|
+
for (const file of files) {
|
|
99
|
+
if (file.startsWith(pattern) && file.endsWith('.md')) {
|
|
100
|
+
return path.join(plansDir, file);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Log query to history file
|
|
108
|
+
*/
|
|
109
|
+
function logQuery(codevRoot, model, query, duration) {
|
|
110
|
+
try {
|
|
111
|
+
const logDir = path.join(codevRoot, '.consult');
|
|
112
|
+
if (!fs.existsSync(logDir)) {
|
|
113
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
114
|
+
}
|
|
115
|
+
const logFile = path.join(logDir, 'history.log');
|
|
116
|
+
const timestamp = new Date().toISOString();
|
|
117
|
+
const queryPreview = query.substring(0, 100).replace(/\n/g, ' ');
|
|
118
|
+
const durationStr = duration !== undefined ? ` duration=${duration.toFixed(1)}s` : '';
|
|
119
|
+
fs.appendFileSync(logFile, `${timestamp} model=${model}${durationStr} query=${queryPreview}...\n`);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Logging failure should not block consultation
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if a command exists
|
|
127
|
+
*/
|
|
128
|
+
function commandExists(cmd) {
|
|
129
|
+
try {
|
|
130
|
+
execSync(`which ${cmd}`, { stdio: 'pipe' });
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Run the consultation
|
|
139
|
+
*/
|
|
140
|
+
async function runConsultation(model, query, codevRoot, dryRun) {
|
|
141
|
+
const role = loadRole(codevRoot);
|
|
142
|
+
const config = MODEL_CONFIGS[model];
|
|
143
|
+
if (!config) {
|
|
144
|
+
throw new Error(`Unknown model: ${model}`);
|
|
145
|
+
}
|
|
146
|
+
// Check if CLI exists
|
|
147
|
+
if (!commandExists(config.cli)) {
|
|
148
|
+
throw new Error(`${config.cli} not found. Please install it first.`);
|
|
149
|
+
}
|
|
150
|
+
let tempFile = null;
|
|
151
|
+
const env = {};
|
|
152
|
+
// Prepare command and environment based on model
|
|
153
|
+
let cmd;
|
|
154
|
+
if (model === 'gemini') {
|
|
155
|
+
// Gemini uses GEMINI_SYSTEM_MD env var for role
|
|
156
|
+
tempFile = path.join(tmpdir(), `codev-role-${Date.now()}.md`);
|
|
157
|
+
fs.writeFileSync(tempFile, role);
|
|
158
|
+
env['GEMINI_SYSTEM_MD'] = tempFile;
|
|
159
|
+
// Handle GOOGLE_API_KEY vs GEMINI_API_KEY conflict
|
|
160
|
+
if (process.env['GOOGLE_API_KEY'] && process.env['GEMINI_API_KEY']) {
|
|
161
|
+
env['GEMINI_API_KEY'] = '';
|
|
162
|
+
}
|
|
163
|
+
cmd = [config.cli, ...config.args, query];
|
|
164
|
+
}
|
|
165
|
+
else if (model === 'codex') {
|
|
166
|
+
// Codex uses CODEX_SYSTEM_MESSAGE env var
|
|
167
|
+
env['CODEX_SYSTEM_MESSAGE'] = role;
|
|
168
|
+
cmd = [config.cli, ...config.args, query];
|
|
169
|
+
}
|
|
170
|
+
else if (model === 'claude') {
|
|
171
|
+
// Claude gets role prepended to query
|
|
172
|
+
const fullQuery = `${role}\n\n---\n\nConsultation Request:\n${query}`;
|
|
173
|
+
cmd = [config.cli, ...config.args, fullQuery, '--dangerously-skip-permissions'];
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
throw new Error(`Unknown model: ${model}`);
|
|
177
|
+
}
|
|
178
|
+
if (dryRun) {
|
|
179
|
+
console.log(chalk.yellow(`[${model}] Would execute:`));
|
|
180
|
+
console.log(` Command: ${cmd.join(' ')}`);
|
|
181
|
+
if (Object.keys(env).length > 0) {
|
|
182
|
+
for (const [key, value] of Object.entries(env)) {
|
|
183
|
+
if (key === 'GEMINI_SYSTEM_MD') {
|
|
184
|
+
console.log(` Env: ${key}=<temp file with consultant role>`);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const preview = value.substring(0, 50) + (value.length > 50 ? '...' : '');
|
|
188
|
+
console.log(` Env: ${key}=${preview}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (tempFile)
|
|
193
|
+
fs.unlinkSync(tempFile);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Execute with passthrough stdio
|
|
197
|
+
const fullEnv = { ...process.env, ...env };
|
|
198
|
+
const startTime = Date.now();
|
|
199
|
+
return new Promise((resolve, reject) => {
|
|
200
|
+
const proc = spawn(cmd[0], cmd.slice(1), {
|
|
201
|
+
env: fullEnv,
|
|
202
|
+
stdio: 'inherit',
|
|
203
|
+
});
|
|
204
|
+
proc.on('close', (code) => {
|
|
205
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
206
|
+
logQuery(codevRoot, model, query, duration);
|
|
207
|
+
if (tempFile && fs.existsSync(tempFile)) {
|
|
208
|
+
fs.unlinkSync(tempFile);
|
|
209
|
+
}
|
|
210
|
+
console.error(`\n[${model} completed in ${duration.toFixed(1)}s]`);
|
|
211
|
+
if (code !== 0) {
|
|
212
|
+
reject(new Error(`Process exited with code ${code}`));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
resolve();
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
proc.on('error', (error) => {
|
|
219
|
+
if (tempFile && fs.existsSync(tempFile)) {
|
|
220
|
+
fs.unlinkSync(tempFile);
|
|
221
|
+
}
|
|
222
|
+
reject(error);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Build query for PR review
|
|
228
|
+
*/
|
|
229
|
+
function buildPRQuery(prNumber, codevRoot) {
|
|
230
|
+
const dataDir = path.join(codevRoot, '.consult', `pr-${String(prNumber).padStart(4, '0')}`);
|
|
231
|
+
return `Review Pull Request #${prNumber}
|
|
232
|
+
|
|
233
|
+
Available data files (read these to understand the PR):
|
|
234
|
+
- PR Info: ${dataDir}/pr-info.txt
|
|
235
|
+
- Comments: ${dataDir}/pr-comments.txt
|
|
236
|
+
- Diff: ${dataDir}/pr-diff.patch
|
|
237
|
+
- Files JSON: ${dataDir}/pr-files.json
|
|
238
|
+
|
|
239
|
+
Please review:
|
|
240
|
+
1. Code quality and correctness
|
|
241
|
+
2. Alignment with spec/plan (if provided)
|
|
242
|
+
3. Test coverage and quality
|
|
243
|
+
4. Edge cases and error handling
|
|
244
|
+
5. Documentation and comments
|
|
245
|
+
6. Any security concerns
|
|
246
|
+
|
|
247
|
+
End your review with a verdict in this EXACT format:
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]
|
|
251
|
+
SUMMARY: [One-line summary of your review]
|
|
252
|
+
CONFIDENCE: [HIGH | MEDIUM | LOW]
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
KEY_ISSUES: [List of critical issues if any, or "None"]`;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Build query for spec review
|
|
259
|
+
*/
|
|
260
|
+
function buildSpecQuery(specPath, planPath) {
|
|
261
|
+
let query = `Review Specification: ${path.basename(specPath)}
|
|
262
|
+
|
|
263
|
+
Please read and review this specification:
|
|
264
|
+
- Spec file: ${specPath}
|
|
265
|
+
`;
|
|
266
|
+
if (planPath) {
|
|
267
|
+
query += `- Plan file: ${planPath}\n`;
|
|
268
|
+
}
|
|
269
|
+
query += `
|
|
270
|
+
Please review:
|
|
271
|
+
1. Clarity and completeness of requirements
|
|
272
|
+
2. Technical feasibility
|
|
273
|
+
3. Edge cases and error scenarios
|
|
274
|
+
4. Security considerations
|
|
275
|
+
5. Testing strategy
|
|
276
|
+
6. Any ambiguities or missing details
|
|
277
|
+
|
|
278
|
+
End your review with a verdict in this EXACT format:
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]
|
|
282
|
+
SUMMARY: [One-line summary of your review]
|
|
283
|
+
CONFIDENCE: [HIGH | MEDIUM | LOW]
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
KEY_ISSUES: [List of critical issues if any, or "None"]`;
|
|
287
|
+
return query;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Build query for plan review
|
|
291
|
+
*/
|
|
292
|
+
function buildPlanQuery(planPath, specPath) {
|
|
293
|
+
let query = `Review Implementation Plan: ${path.basename(planPath)}
|
|
294
|
+
|
|
295
|
+
Please read and review this implementation plan:
|
|
296
|
+
- Plan file: ${planPath}
|
|
297
|
+
`;
|
|
298
|
+
if (specPath) {
|
|
299
|
+
query += `- Spec file: ${specPath} (for context)\n`;
|
|
300
|
+
}
|
|
301
|
+
query += `
|
|
302
|
+
Please review:
|
|
303
|
+
1. Alignment with specification requirements
|
|
304
|
+
2. Implementation approach and architecture
|
|
305
|
+
3. Task breakdown and ordering
|
|
306
|
+
4. Risk identification and mitigation
|
|
307
|
+
5. Testing strategy
|
|
308
|
+
6. Any missing steps or considerations
|
|
309
|
+
|
|
310
|
+
End your review with a verdict in this EXACT format:
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
VERDICT: [APPROVE | REQUEST_CHANGES | COMMENT]
|
|
314
|
+
SUMMARY: [One-line summary of your review]
|
|
315
|
+
CONFIDENCE: [HIGH | MEDIUM | LOW]
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
KEY_ISSUES: [List of critical issues if any, or "None"]`;
|
|
319
|
+
return query;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Main consult entry point
|
|
323
|
+
*/
|
|
324
|
+
export async function consult(options) {
|
|
325
|
+
const { model: modelInput, subcommand, args, dryRun = false } = options;
|
|
326
|
+
// Resolve model alias
|
|
327
|
+
const model = MODEL_ALIASES[modelInput.toLowerCase()] || modelInput.toLowerCase();
|
|
328
|
+
// Validate model
|
|
329
|
+
if (!MODEL_CONFIGS[model]) {
|
|
330
|
+
const validModels = [...Object.keys(MODEL_CONFIGS), ...Object.keys(MODEL_ALIASES)];
|
|
331
|
+
throw new Error(`Unknown model: ${modelInput}\nValid models: ${validModels.join(', ')}`);
|
|
332
|
+
}
|
|
333
|
+
const codevRoot = findCodevRoot();
|
|
334
|
+
loadDotenv(codevRoot);
|
|
335
|
+
console.error(`[${subcommand} review]`);
|
|
336
|
+
console.error(`Model: ${model}`);
|
|
337
|
+
let query;
|
|
338
|
+
switch (subcommand.toLowerCase()) {
|
|
339
|
+
case 'pr': {
|
|
340
|
+
if (args.length === 0) {
|
|
341
|
+
throw new Error('PR number required\nUsage: codev consult -m <model> pr <number>');
|
|
342
|
+
}
|
|
343
|
+
const prNumber = parseInt(args[0], 10);
|
|
344
|
+
if (isNaN(prNumber)) {
|
|
345
|
+
throw new Error(`Invalid PR number: ${args[0]}`);
|
|
346
|
+
}
|
|
347
|
+
query = buildPRQuery(prNumber, codevRoot);
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
case 'spec': {
|
|
351
|
+
if (args.length === 0) {
|
|
352
|
+
throw new Error('Spec number required\nUsage: codev consult -m <model> spec <number>');
|
|
353
|
+
}
|
|
354
|
+
const specNumber = parseInt(args[0], 10);
|
|
355
|
+
if (isNaN(specNumber)) {
|
|
356
|
+
throw new Error(`Invalid spec number: ${args[0]}`);
|
|
357
|
+
}
|
|
358
|
+
const specPath = findSpec(codevRoot, specNumber);
|
|
359
|
+
if (!specPath) {
|
|
360
|
+
throw new Error(`Spec ${specNumber} not found`);
|
|
361
|
+
}
|
|
362
|
+
const planPath = findPlan(codevRoot, specNumber);
|
|
363
|
+
query = buildSpecQuery(specPath, planPath);
|
|
364
|
+
console.error(`Spec: ${specPath}`);
|
|
365
|
+
if (planPath)
|
|
366
|
+
console.error(`Plan: ${planPath}`);
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
case 'plan': {
|
|
370
|
+
if (args.length === 0) {
|
|
371
|
+
throw new Error('Plan number required\nUsage: codev consult -m <model> plan <number>');
|
|
372
|
+
}
|
|
373
|
+
const planNumber = parseInt(args[0], 10);
|
|
374
|
+
if (isNaN(planNumber)) {
|
|
375
|
+
throw new Error(`Invalid plan number: ${args[0]}`);
|
|
376
|
+
}
|
|
377
|
+
const planPath = findPlan(codevRoot, planNumber);
|
|
378
|
+
if (!planPath) {
|
|
379
|
+
throw new Error(`Plan ${planNumber} not found`);
|
|
380
|
+
}
|
|
381
|
+
const specPath = findSpec(codevRoot, planNumber);
|
|
382
|
+
query = buildPlanQuery(planPath, specPath);
|
|
383
|
+
console.error(`Plan: ${planPath}`);
|
|
384
|
+
if (specPath)
|
|
385
|
+
console.error(`Spec: ${specPath}`);
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
case 'general': {
|
|
389
|
+
if (args.length === 0) {
|
|
390
|
+
throw new Error('Query required\nUsage: codev consult -m <model> general "<query>"');
|
|
391
|
+
}
|
|
392
|
+
query = args.join(' ');
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
default:
|
|
396
|
+
throw new Error(`Unknown subcommand: ${subcommand}\nValid subcommands: pr, spec, plan, general`);
|
|
397
|
+
}
|
|
398
|
+
console.error('');
|
|
399
|
+
console.error('='.repeat(60));
|
|
400
|
+
console.error(`[${model.toUpperCase()}] Starting consultation...`);
|
|
401
|
+
console.error('='.repeat(60));
|
|
402
|
+
console.error('');
|
|
403
|
+
await runConsultation(model, query, codevRoot, dryRun);
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/consult/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2TH;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CA+D9C"}
|