@cluesmith/codev 1.1.0 → 1.2.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/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +19 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +18 -1
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.d.ts +16 -0
- package/dist/agent-farm/commands/consult.d.ts.map +1 -0
- package/dist/agent-farm/commands/consult.js +51 -0
- package/dist/agent-farm/commands/consult.js.map +1 -0
- package/dist/agent-farm/commands/open.js +6 -6
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +51 -42
- 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 +9 -14
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/util.js +2 -2
- package/dist/agent-farm/commands/util.js.map +1 -1
- package/dist/agent-farm/db/errors.d.ts +4 -0
- package/dist/agent-farm/db/errors.d.ts.map +1 -1
- package/dist/agent-farm/db/errors.js +8 -0
- package/dist/agent-farm/db/errors.js.map +1 -1
- package/dist/agent-farm/servers/dashboard-server.js +125 -71
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
- package/dist/agent-farm/servers/open-server.d.ts +9 -0
- package/dist/agent-farm/servers/open-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/{annotate-server.js → open-server.js} +17 -15
- package/dist/agent-farm/servers/open-server.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +4 -7
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +5 -0
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +17 -0
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +1 -1
- 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 +13 -7
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/port-registry.d.ts +1 -1
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -1
- package/dist/agent-farm/utils/port-registry.js +1 -1
- package/dist/agent-farm/utils/port-registry.js.map +1 -1
- package/dist/agent-farm/utils/shell.d.ts +19 -0
- package/dist/agent-farm/utils/shell.d.ts.map +1 -1
- package/dist/agent-farm/utils/shell.js +28 -0
- package/dist/agent-farm/utils/shell.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -0
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +31 -25
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +3 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +128 -54
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +88 -36
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/eject.d.ts +18 -0
- package/dist/commands/eject.d.ts.map +1 -0
- package/dist/commands/eject.js +149 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/import.d.ts +16 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +278 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -27
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/projectlist-parser.d.ts +70 -0
- package/dist/lib/projectlist-parser.d.ts.map +1 -0
- package/dist/lib/projectlist-parser.js +200 -0
- package/dist/lib/projectlist-parser.js.map +1 -0
- package/dist/lib/skeleton.d.ts +41 -0
- package/dist/lib/skeleton.d.ts.map +1 -0
- package/dist/lib/skeleton.js +110 -0
- package/dist/lib/skeleton.js.map +1 -0
- package/dist/lib/templates.d.ts +2 -1
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +11 -10
- package/dist/lib/templates.js.map +1 -1
- package/package.json +5 -4
- package/{templates → skeleton}/DEPENDENCIES.md +3 -48
- package/skeleton/bin/agent-farm +7 -0
- package/skeleton/docs/commands/agent-farm.md +469 -0
- package/skeleton/docs/commands/codev.md +253 -0
- package/skeleton/docs/commands/consult.md +286 -0
- package/skeleton/docs/commands/overview.md +108 -0
- package/skeleton/maintain/.gitkeep +2 -0
- package/{templates → skeleton}/protocols/experiment/protocol.md +2 -2
- package/skeleton/protocols/maintain/protocol.md +502 -0
- package/skeleton/protocols/maintain/templates/maintenance-run.md +64 -0
- package/{templates → skeleton}/protocols/spider/protocol.md +9 -9
- package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/plan.md +22 -1
- package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/spec.md +30 -1
- package/skeleton/protocols/tick/protocol.md +277 -0
- package/skeleton/resources/lessons-learned.md +30 -0
- package/skeleton/resources/workflow-reference.md +242 -0
- package/skeleton/roles/architect.md +283 -0
- package/{templates → skeleton}/roles/builder.md +2 -0
- package/skeleton/roles/review-types/impl-review.md +56 -0
- package/skeleton/roles/review-types/integration-review.md +68 -0
- package/skeleton/roles/review-types/plan-review.md +59 -0
- package/skeleton/roles/review-types/pr-ready.md +72 -0
- package/skeleton/roles/review-types/spec-review.md +55 -0
- package/skeleton/templates/lessons-learned.md +28 -0
- package/{templates → skeleton}/templates/projectlist.md +17 -16
- package/dist/agent-farm/servers/annotate-server.d.ts +0 -9
- package/dist/agent-farm/servers/annotate-server.d.ts.map +0 -1
- package/dist/agent-farm/servers/annotate-server.js.map +0 -1
- package/templates/agents/architecture-documenter.md +0 -189
- package/templates/agents/codev-updater.md +0 -276
- package/templates/agents/spider-protocol-updater.md +0 -118
- package/templates/annotate.html +0 -903
- package/templates/bin/agent-farm +0 -18
- package/templates/bin/annotate-server.js +0 -140
- package/templates/dashboard-split.html +0 -1679
- package/templates/dashboard.html +0 -149
- package/templates/protocols/maintain/protocol.md +0 -235
- package/templates/protocols/spider/templates/plan.md +0 -169
- package/templates/protocols/spider/templates/review.md +0 -207
- package/templates/protocols/spider/templates/spec.md +0 -140
- package/templates/protocols/spider-solo/protocol.md +0 -619
- package/templates/protocols/tick/protocol.md +0 -250
- package/templates/roles/architect.md +0 -230
- package/templates/tower.html +0 -1032
- /package/{templates/AGENTS.md → skeleton/AGENTS.md.template} +0 -0
- /package/{templates/CLAUDE.md → skeleton/CLAUDE.md.template} +0 -0
- /package/{templates → skeleton}/bin/codev-doctor +0 -0
- /package/{templates → skeleton}/builders.md +0 -0
- /package/{templates → skeleton}/config.json +0 -0
- /package/{templates → skeleton}/plans/.gitkeep +0 -0
- /package/{templates → skeleton}/protocols/experiment/templates/notes.md +0 -0
- /package/{templates/protocols/spider-solo → skeleton/protocols/spider}/templates/review.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/plan.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/review.md +0 -0
- /package/{templates → skeleton}/protocols/tick/templates/spec.md +0 -0
- /package/{templates → skeleton}/reviews/.gitkeep +0 -0
- /package/{templates → skeleton}/roles/consultant.md +0 -0
- /package/{templates → skeleton}/specs/.gitkeep +0 -0
package/dist/cli.js
CHANGED
|
@@ -7,8 +7,10 @@ import { doctor } from './commands/doctor.js';
|
|
|
7
7
|
import { init } from './commands/init.js';
|
|
8
8
|
import { adopt } from './commands/adopt.js';
|
|
9
9
|
import { update } from './commands/update.js';
|
|
10
|
+
import { eject } from './commands/eject.js';
|
|
10
11
|
import { tower } from './commands/tower.js';
|
|
11
12
|
import { consult } from './commands/consult/index.js';
|
|
13
|
+
import { importCommand } from './commands/import.js';
|
|
12
14
|
import { runAgentFarm } from './agent-farm/cli.js';
|
|
13
15
|
const program = new Command();
|
|
14
16
|
program
|
|
@@ -72,6 +74,21 @@ program
|
|
|
72
74
|
process.exit(1);
|
|
73
75
|
}
|
|
74
76
|
});
|
|
77
|
+
// Eject command
|
|
78
|
+
program
|
|
79
|
+
.command('eject [path]')
|
|
80
|
+
.description('Copy embedded skeleton files locally for customization')
|
|
81
|
+
.option('-l, --list', 'List available files to eject')
|
|
82
|
+
.option('-f, --force', 'Overwrite existing files')
|
|
83
|
+
.action(async (targetPath, options) => {
|
|
84
|
+
try {
|
|
85
|
+
await eject(targetPath, { list: options.list, force: options.force });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
75
92
|
// Tower command
|
|
76
93
|
program
|
|
77
94
|
.command('tower')
|
|
@@ -98,6 +115,7 @@ program
|
|
|
98
115
|
.argument('[args...]', 'Arguments for the subcommand')
|
|
99
116
|
.requiredOption('-m, --model <model>', 'Model to use (gemini, codex, claude, or aliases: pro, gpt, opus)')
|
|
100
117
|
.option('-n, --dry-run', 'Show what would execute without running')
|
|
118
|
+
.option('-t, --type <type>', 'Review type: spec-review, plan-review, impl-review, pr-ready, integration-review')
|
|
101
119
|
.allowUnknownOption(true)
|
|
102
120
|
.action(async (subcommand, args, options) => {
|
|
103
121
|
try {
|
|
@@ -106,6 +124,7 @@ program
|
|
|
106
124
|
subcommand,
|
|
107
125
|
args,
|
|
108
126
|
dryRun: options.dryRun,
|
|
127
|
+
reviewType: options.type,
|
|
109
128
|
});
|
|
110
129
|
}
|
|
111
130
|
catch (error) {
|
|
@@ -113,6 +132,20 @@ program
|
|
|
113
132
|
process.exit(1);
|
|
114
133
|
}
|
|
115
134
|
});
|
|
135
|
+
// Import command
|
|
136
|
+
program
|
|
137
|
+
.command('import <source>')
|
|
138
|
+
.description('AI-assisted protocol import from other codev projects')
|
|
139
|
+
.option('-n, --dry-run', 'Show what would be imported without running Claude')
|
|
140
|
+
.action(async (source, options) => {
|
|
141
|
+
try {
|
|
142
|
+
await importCommand(source, { dryRun: options.dryRun });
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
116
149
|
// Agent-farm command (delegates to existing agent-farm CLI)
|
|
117
150
|
program
|
|
118
151
|
.command('agent-farm', { hidden: false })
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/adopt.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAyDD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyIrE"}
|
package/dist/commands/adopt.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* codev adopt - Add codev to an existing project
|
|
3
|
+
*
|
|
4
|
+
* Creates a minimal codev structure. Framework files (protocols, roles)
|
|
5
|
+
* are provided by the embedded skeleton at runtime, not copied to the project.
|
|
3
6
|
*/
|
|
4
7
|
import * as fs from 'node:fs';
|
|
5
8
|
import * as path from 'node:path';
|
|
6
9
|
import * as readline from 'node:readline';
|
|
7
10
|
import chalk from 'chalk';
|
|
8
|
-
import { getTemplatesDir
|
|
11
|
+
import { getTemplatesDir } from '../lib/templates.js';
|
|
9
12
|
/**
|
|
10
13
|
* Prompt for yes/no confirmation
|
|
11
14
|
*/
|
|
@@ -81,40 +84,43 @@ export async function adopt(options = {}) {
|
|
|
81
84
|
process.exit(0);
|
|
82
85
|
}
|
|
83
86
|
}
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
const hashes = {};
|
|
87
|
+
// Create minimal codev structure
|
|
88
|
+
// Framework files (protocols, roles) are provided by embedded skeleton at runtime
|
|
87
89
|
let fileCount = 0;
|
|
88
90
|
let skippedCount = 0;
|
|
89
|
-
console.log(chalk.dim('
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (action === 'copy') {
|
|
95
|
-
fileCount++;
|
|
96
|
-
console.log(chalk.green(' +'), `codev/${relativePath}`);
|
|
97
|
-
}
|
|
98
|
-
else if (action === 'skip') {
|
|
99
|
-
skippedCount++;
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
// Save hash store for future updates
|
|
104
|
-
saveHashStore(targetDir, hashes);
|
|
105
|
-
// Create empty directories for user data
|
|
106
|
-
const userDirs = ['specs', 'plans', 'reviews', 'resources'];
|
|
91
|
+
console.log(chalk.dim('Creating minimal codev structure...'));
|
|
92
|
+
console.log(chalk.dim('(Framework files provided by @cluesmith/codev at runtime)'));
|
|
93
|
+
console.log('');
|
|
94
|
+
// Create user data directories
|
|
95
|
+
const userDirs = ['specs', 'plans', 'reviews'];
|
|
107
96
|
for (const dir of userDirs) {
|
|
108
97
|
const dirPath = path.join(targetDir, 'codev', dir);
|
|
109
98
|
if (!fs.existsSync(dirPath)) {
|
|
110
99
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
111
100
|
// Create .gitkeep to preserve empty directory
|
|
112
101
|
fs.writeFileSync(path.join(dirPath, '.gitkeep'), '');
|
|
102
|
+
console.log(chalk.green(' +'), `codev/${dir}/`);
|
|
103
|
+
fileCount++;
|
|
113
104
|
}
|
|
114
105
|
}
|
|
115
|
-
//
|
|
116
|
-
const
|
|
117
|
-
|
|
106
|
+
// Create projectlist.md for tracking projects
|
|
107
|
+
const projectlistPath = path.join(targetDir, 'codev', 'projectlist.md');
|
|
108
|
+
if (!fs.existsSync(projectlistPath)) {
|
|
109
|
+
const projectlistContent = `# Project List
|
|
110
|
+
|
|
111
|
+
Track all projects here. See codev documentation for status values.
|
|
112
|
+
|
|
113
|
+
| ID | Name | Status | Priority | Notes |
|
|
114
|
+
|----|------|--------|----------|-------|
|
|
115
|
+
`;
|
|
116
|
+
fs.writeFileSync(projectlistPath, projectlistContent);
|
|
117
|
+
console.log(chalk.green(' +'), 'codev/projectlist.md');
|
|
118
|
+
fileCount++;
|
|
119
|
+
}
|
|
120
|
+
// Create CLAUDE.md / AGENTS.md at project root from skeleton templates
|
|
121
|
+
const skeletonDir = getTemplatesDir();
|
|
122
|
+
const claudeMdSrc = path.join(skeletonDir, 'CLAUDE.md.template');
|
|
123
|
+
const agentsMdSrc = path.join(skeletonDir, 'AGENTS.md.template');
|
|
118
124
|
const claudeMdDest = path.join(targetDir, 'CLAUDE.md');
|
|
119
125
|
const agentsMdDest = path.join(targetDir, 'AGENTS.md');
|
|
120
126
|
// CLAUDE.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/commands/adopt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* consult - AI consultation with external models
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Provides unified interface to gemini-cli, codex, and claude CLIs.
|
|
5
5
|
*/
|
|
6
6
|
interface ConsultOptions {
|
|
7
7
|
model: string;
|
|
8
8
|
subcommand: string;
|
|
9
9
|
args: string[];
|
|
10
10
|
dryRun?: boolean;
|
|
11
|
+
reviewType?: string;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* Main consult entry point
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/consult/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/consult/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+BH,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsZD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGpE"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* consult - AI consultation with external models
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Provides unified interface to gemini-cli, codex, and claude CLIs.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { spawn, execSync } from 'node:child_process';
|
|
9
9
|
import { tmpdir } from 'node:os';
|
|
10
10
|
import chalk from 'chalk';
|
|
11
|
+
import { readCodevFile, findProjectRoot } from '../../lib/skeleton.js';
|
|
11
12
|
const MODEL_CONFIGS = {
|
|
12
13
|
gemini: { cli: 'gemini', args: ['--yolo'], envVar: 'GEMINI_SYSTEM_MD' },
|
|
13
|
-
|
|
14
|
+
// Codex uses experimental_instructions_file config flag (not env var)
|
|
15
|
+
// See: https://github.com/openai/codex/discussions/3896
|
|
16
|
+
codex: { cli: 'codex', args: ['exec', '--full-auto'], envVar: null },
|
|
14
17
|
claude: { cli: 'claude', args: ['--print', '-p'], envVar: null },
|
|
15
18
|
};
|
|
16
19
|
// Model aliases
|
|
@@ -19,35 +22,41 @@ const MODEL_ALIASES = {
|
|
|
19
22
|
gpt: 'codex',
|
|
20
23
|
opus: 'claude',
|
|
21
24
|
};
|
|
25
|
+
// Valid review types
|
|
26
|
+
const VALID_REVIEW_TYPES = [
|
|
27
|
+
'spec-review',
|
|
28
|
+
'plan-review',
|
|
29
|
+
'impl-review',
|
|
30
|
+
'pr-ready',
|
|
31
|
+
'integration-review',
|
|
32
|
+
];
|
|
22
33
|
/**
|
|
23
|
-
*
|
|
34
|
+
* Load the consultant role.
|
|
35
|
+
* Checks local codev/roles/consultant.md first, then falls back to embedded skeleton.
|
|
24
36
|
*/
|
|
25
|
-
function
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
current = path.dirname(current);
|
|
37
|
+
function loadRole(projectRoot) {
|
|
38
|
+
const role = readCodevFile('roles/consultant.md', projectRoot);
|
|
39
|
+
if (!role) {
|
|
40
|
+
throw new Error('consultant.md not found.\n' +
|
|
41
|
+
'Checked: local codev/roles/consultant.md and embedded skeleton.\n' +
|
|
42
|
+
'Run from a codev-enabled project or install @cluesmith/codev globally.');
|
|
33
43
|
}
|
|
34
|
-
return
|
|
44
|
+
return role;
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
37
|
-
* Load
|
|
47
|
+
* Load a review type prompt.
|
|
48
|
+
* Checks local codev/roles/review-types/{type}.md first, then falls back to embedded skeleton.
|
|
38
49
|
*/
|
|
39
|
-
function
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
return fs.readFileSync(roleFile, 'utf-8');
|
|
50
|
+
function loadReviewTypePrompt(projectRoot, reviewType) {
|
|
51
|
+
const promptPath = `roles/review-types/${reviewType}.md`;
|
|
52
|
+
const prompt = readCodevFile(promptPath, projectRoot);
|
|
53
|
+
return prompt;
|
|
45
54
|
}
|
|
46
55
|
/**
|
|
47
56
|
* Load .env file if it exists
|
|
48
57
|
*/
|
|
49
|
-
function loadDotenv(
|
|
50
|
-
const envFile = path.join(
|
|
58
|
+
function loadDotenv(projectRoot) {
|
|
59
|
+
const envFile = path.join(projectRoot, '.env');
|
|
51
60
|
if (!fs.existsSync(envFile))
|
|
52
61
|
return;
|
|
53
62
|
const content = fs.readFileSync(envFile, 'utf-8');
|
|
@@ -74,8 +83,8 @@ function loadDotenv(codevRoot) {
|
|
|
74
83
|
/**
|
|
75
84
|
* Find a spec file by number
|
|
76
85
|
*/
|
|
77
|
-
function findSpec(
|
|
78
|
-
const specsDir = path.join(
|
|
86
|
+
function findSpec(projectRoot, number) {
|
|
87
|
+
const specsDir = path.join(projectRoot, 'codev', 'specs');
|
|
79
88
|
const pattern = String(number).padStart(4, '0');
|
|
80
89
|
if (fs.existsSync(specsDir)) {
|
|
81
90
|
const files = fs.readdirSync(specsDir);
|
|
@@ -90,8 +99,8 @@ function findSpec(codevRoot, number) {
|
|
|
90
99
|
/**
|
|
91
100
|
* Find a plan file by number
|
|
92
101
|
*/
|
|
93
|
-
function findPlan(
|
|
94
|
-
const plansDir = path.join(
|
|
102
|
+
function findPlan(projectRoot, number) {
|
|
103
|
+
const plansDir = path.join(projectRoot, 'codev', 'plans');
|
|
95
104
|
const pattern = String(number).padStart(4, '0');
|
|
96
105
|
if (fs.existsSync(plansDir)) {
|
|
97
106
|
const files = fs.readdirSync(plansDir);
|
|
@@ -106,9 +115,9 @@ function findPlan(codevRoot, number) {
|
|
|
106
115
|
/**
|
|
107
116
|
* Log query to history file
|
|
108
117
|
*/
|
|
109
|
-
function logQuery(
|
|
118
|
+
function logQuery(projectRoot, model, query, duration) {
|
|
110
119
|
try {
|
|
111
|
-
const logDir = path.join(
|
|
120
|
+
const logDir = path.join(projectRoot, '.consult');
|
|
112
121
|
if (!fs.existsSync(logDir)) {
|
|
113
122
|
fs.mkdirSync(logDir, { recursive: true });
|
|
114
123
|
}
|
|
@@ -137,8 +146,19 @@ function commandExists(cmd) {
|
|
|
137
146
|
/**
|
|
138
147
|
* Run the consultation
|
|
139
148
|
*/
|
|
140
|
-
async function runConsultation(model, query,
|
|
141
|
-
|
|
149
|
+
async function runConsultation(model, query, projectRoot, dryRun, reviewType) {
|
|
150
|
+
let role = loadRole(projectRoot);
|
|
151
|
+
// Append review type prompt if specified
|
|
152
|
+
if (reviewType) {
|
|
153
|
+
const typePrompt = loadReviewTypePrompt(projectRoot, reviewType);
|
|
154
|
+
if (typePrompt) {
|
|
155
|
+
role = role + '\n\n---\n\n' + typePrompt;
|
|
156
|
+
console.error(`Review type: ${reviewType}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.error(chalk.yellow(`Warning: Review type prompt not found: ${reviewType}`));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
142
162
|
const config = MODEL_CONFIGS[model];
|
|
143
163
|
if (!config) {
|
|
144
164
|
throw new Error(`Unknown model: ${model}`);
|
|
@@ -163,9 +183,18 @@ async function runConsultation(model, query, codevRoot, dryRun) {
|
|
|
163
183
|
cmd = [config.cli, ...config.args, query];
|
|
164
184
|
}
|
|
165
185
|
else if (model === 'codex') {
|
|
166
|
-
// Codex uses
|
|
167
|
-
|
|
168
|
-
|
|
186
|
+
// Codex uses experimental_instructions_file config flag (not env var)
|
|
187
|
+
// This is the official approach per https://github.com/openai/codex/discussions/3896
|
|
188
|
+
tempFile = path.join(tmpdir(), `codev-role-${Date.now()}.md`);
|
|
189
|
+
fs.writeFileSync(tempFile, role);
|
|
190
|
+
cmd = [
|
|
191
|
+
config.cli,
|
|
192
|
+
'exec',
|
|
193
|
+
'-c', `experimental_instructions_file=${tempFile}`,
|
|
194
|
+
'-c', 'model_reasoning_effort=low', // Faster responses (10-20% improvement)
|
|
195
|
+
'--full-auto',
|
|
196
|
+
query,
|
|
197
|
+
];
|
|
169
198
|
}
|
|
170
199
|
else if (model === 'claude') {
|
|
171
200
|
// Claude gets role prepended to query
|
|
@@ -203,7 +232,7 @@ async function runConsultation(model, query, codevRoot, dryRun) {
|
|
|
203
232
|
});
|
|
204
233
|
proc.on('close', (code) => {
|
|
205
234
|
const duration = (Date.now() - startTime) / 1000;
|
|
206
|
-
logQuery(
|
|
235
|
+
logQuery(projectRoot, model, query, duration);
|
|
207
236
|
if (tempFile && fs.existsSync(tempFile)) {
|
|
208
237
|
fs.unlinkSync(tempFile);
|
|
209
238
|
}
|
|
@@ -223,18 +252,53 @@ async function runConsultation(model, query, codevRoot, dryRun) {
|
|
|
223
252
|
});
|
|
224
253
|
});
|
|
225
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Fetch PR data and return it inline
|
|
257
|
+
*/
|
|
258
|
+
function fetchPRData(prNumber) {
|
|
259
|
+
console.error(`Fetching PR #${prNumber} data...`);
|
|
260
|
+
try {
|
|
261
|
+
const info = execSync(`gh pr view ${prNumber} --json title,body,state,author,baseRefName,headRefName,files,additions,deletions`, { encoding: 'utf-8' });
|
|
262
|
+
const diff = execSync(`gh pr diff ${prNumber}`, { encoding: 'utf-8' });
|
|
263
|
+
let comments = '(No comments)';
|
|
264
|
+
try {
|
|
265
|
+
comments = execSync(`gh pr view ${prNumber} --comments`, { encoding: 'utf-8' });
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
// No comments or error fetching
|
|
269
|
+
}
|
|
270
|
+
return { info, diff, comments };
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
throw new Error(`Failed to fetch PR data: ${err}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
226
276
|
/**
|
|
227
277
|
* Build query for PR review
|
|
228
278
|
*/
|
|
229
|
-
function buildPRQuery(prNumber,
|
|
230
|
-
const
|
|
279
|
+
function buildPRQuery(prNumber, _projectRoot) {
|
|
280
|
+
const prData = fetchPRData(prNumber);
|
|
281
|
+
// Truncate diff if too large (keep first 50k chars)
|
|
282
|
+
const maxDiffSize = 50000;
|
|
283
|
+
const diff = prData.diff.length > maxDiffSize
|
|
284
|
+
? prData.diff.substring(0, maxDiffSize) + '\n\n... (diff truncated, ' + prData.diff.length + ' chars total)'
|
|
285
|
+
: prData.diff;
|
|
231
286
|
return `Review Pull Request #${prNumber}
|
|
232
287
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
288
|
+
## PR Info
|
|
289
|
+
\`\`\`json
|
|
290
|
+
${prData.info}
|
|
291
|
+
\`\`\`
|
|
292
|
+
|
|
293
|
+
## Diff
|
|
294
|
+
\`\`\`diff
|
|
295
|
+
${diff}
|
|
296
|
+
\`\`\`
|
|
297
|
+
|
|
298
|
+
## Comments
|
|
299
|
+
${prData.comments}
|
|
300
|
+
|
|
301
|
+
---
|
|
238
302
|
|
|
239
303
|
Please review:
|
|
240
304
|
1. Code quality and correctness
|
|
@@ -322,7 +386,7 @@ KEY_ISSUES: [List of critical issues if any, or "None"]`;
|
|
|
322
386
|
* Main consult entry point
|
|
323
387
|
*/
|
|
324
388
|
export async function consult(options) {
|
|
325
|
-
const { model: modelInput, subcommand, args, dryRun = false } = options;
|
|
389
|
+
const { model: modelInput, subcommand, args, dryRun = false, reviewType } = options;
|
|
326
390
|
// Resolve model alias
|
|
327
391
|
const model = MODEL_ALIASES[modelInput.toLowerCase()] || modelInput.toLowerCase();
|
|
328
392
|
// Validate model
|
|
@@ -330,36 +394,40 @@ export async function consult(options) {
|
|
|
330
394
|
const validModels = [...Object.keys(MODEL_CONFIGS), ...Object.keys(MODEL_ALIASES)];
|
|
331
395
|
throw new Error(`Unknown model: ${modelInput}\nValid models: ${validModels.join(', ')}`);
|
|
332
396
|
}
|
|
333
|
-
|
|
334
|
-
|
|
397
|
+
// Validate review type if provided
|
|
398
|
+
if (reviewType && !VALID_REVIEW_TYPES.includes(reviewType)) {
|
|
399
|
+
throw new Error(`Invalid review type: ${reviewType}\nValid types: ${VALID_REVIEW_TYPES.join(', ')}`);
|
|
400
|
+
}
|
|
401
|
+
const projectRoot = findProjectRoot();
|
|
402
|
+
loadDotenv(projectRoot);
|
|
335
403
|
console.error(`[${subcommand} review]`);
|
|
336
404
|
console.error(`Model: ${model}`);
|
|
337
405
|
let query;
|
|
338
406
|
switch (subcommand.toLowerCase()) {
|
|
339
407
|
case 'pr': {
|
|
340
408
|
if (args.length === 0) {
|
|
341
|
-
throw new Error('PR number required\nUsage:
|
|
409
|
+
throw new Error('PR number required\nUsage: consult -m <model> pr <number>');
|
|
342
410
|
}
|
|
343
411
|
const prNumber = parseInt(args[0], 10);
|
|
344
412
|
if (isNaN(prNumber)) {
|
|
345
413
|
throw new Error(`Invalid PR number: ${args[0]}`);
|
|
346
414
|
}
|
|
347
|
-
query = buildPRQuery(prNumber,
|
|
415
|
+
query = buildPRQuery(prNumber, projectRoot);
|
|
348
416
|
break;
|
|
349
417
|
}
|
|
350
418
|
case 'spec': {
|
|
351
419
|
if (args.length === 0) {
|
|
352
|
-
throw new Error('Spec number required\nUsage:
|
|
420
|
+
throw new Error('Spec number required\nUsage: consult -m <model> spec <number>');
|
|
353
421
|
}
|
|
354
422
|
const specNumber = parseInt(args[0], 10);
|
|
355
423
|
if (isNaN(specNumber)) {
|
|
356
424
|
throw new Error(`Invalid spec number: ${args[0]}`);
|
|
357
425
|
}
|
|
358
|
-
const specPath = findSpec(
|
|
426
|
+
const specPath = findSpec(projectRoot, specNumber);
|
|
359
427
|
if (!specPath) {
|
|
360
428
|
throw new Error(`Spec ${specNumber} not found`);
|
|
361
429
|
}
|
|
362
|
-
const planPath = findPlan(
|
|
430
|
+
const planPath = findPlan(projectRoot, specNumber);
|
|
363
431
|
query = buildSpecQuery(specPath, planPath);
|
|
364
432
|
console.error(`Spec: ${specPath}`);
|
|
365
433
|
if (planPath)
|
|
@@ -368,17 +436,17 @@ export async function consult(options) {
|
|
|
368
436
|
}
|
|
369
437
|
case 'plan': {
|
|
370
438
|
if (args.length === 0) {
|
|
371
|
-
throw new Error('Plan number required\nUsage:
|
|
439
|
+
throw new Error('Plan number required\nUsage: consult -m <model> plan <number>');
|
|
372
440
|
}
|
|
373
441
|
const planNumber = parseInt(args[0], 10);
|
|
374
442
|
if (isNaN(planNumber)) {
|
|
375
443
|
throw new Error(`Invalid plan number: ${args[0]}`);
|
|
376
444
|
}
|
|
377
|
-
const planPath = findPlan(
|
|
445
|
+
const planPath = findPlan(projectRoot, planNumber);
|
|
378
446
|
if (!planPath) {
|
|
379
447
|
throw new Error(`Plan ${planNumber} not found`);
|
|
380
448
|
}
|
|
381
|
-
const specPath = findSpec(
|
|
449
|
+
const specPath = findSpec(projectRoot, planNumber);
|
|
382
450
|
query = buildPlanQuery(planPath, specPath);
|
|
383
451
|
console.error(`Plan: ${planPath}`);
|
|
384
452
|
if (specPath)
|
|
@@ -387,7 +455,7 @@ export async function consult(options) {
|
|
|
387
455
|
}
|
|
388
456
|
case 'general': {
|
|
389
457
|
if (args.length === 0) {
|
|
390
|
-
throw new Error('Query required\nUsage:
|
|
458
|
+
throw new Error('Query required\nUsage: consult -m <model> general "<query>"');
|
|
391
459
|
}
|
|
392
460
|
query = args.join(' ');
|
|
393
461
|
break;
|
|
@@ -395,11 +463,17 @@ export async function consult(options) {
|
|
|
395
463
|
default:
|
|
396
464
|
throw new Error(`Unknown subcommand: ${subcommand}\nValid subcommands: pr, spec, plan, general`);
|
|
397
465
|
}
|
|
466
|
+
// Show the query/prompt being sent
|
|
467
|
+
console.error('');
|
|
468
|
+
console.error('='.repeat(60));
|
|
469
|
+
console.error('PROMPT:');
|
|
470
|
+
console.error('='.repeat(60));
|
|
471
|
+
console.error(query);
|
|
398
472
|
console.error('');
|
|
399
473
|
console.error('='.repeat(60));
|
|
400
474
|
console.error(`[${model.toUpperCase()}] Starting consultation...`);
|
|
401
475
|
console.error('='.repeat(60));
|
|
402
476
|
console.error('');
|
|
403
|
-
await runConsultation(model, query,
|
|
477
|
+
await runConsultation(model, query, projectRoot, dryRun, reviewType);
|
|
404
478
|
}
|
|
405
479
|
//# sourceMappingURL=index.js.map
|