vralphy 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +47 -16
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +77 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +47 -16
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/spec.d.ts +3 -0
- package/dist/commands/spec.d.ts.map +1 -1
- package/dist/commands/spec.js +76 -15
- package/dist/commands/spec.js.map +1 -1
- package/dist/index.js +72 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +23 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +63 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +2 -2
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/engines/base.d.ts +57 -8
- package/dist/lib/engines/base.d.ts.map +1 -1
- package/dist/lib/engines/base.js +58 -5
- package/dist/lib/engines/base.js.map +1 -1
- package/dist/lib/engines/claude.d.ts +5 -2
- package/dist/lib/engines/claude.d.ts.map +1 -1
- package/dist/lib/engines/claude.js +58 -12
- package/dist/lib/engines/claude.js.map +1 -1
- package/dist/lib/engines/codex.d.ts +5 -2
- package/dist/lib/engines/codex.d.ts.map +1 -1
- package/dist/lib/engines/codex.js +58 -12
- package/dist/lib/engines/codex.js.map +1 -1
- package/dist/lib/engines/index.d.ts +11 -1
- package/dist/lib/engines/index.d.ts.map +1 -1
- package/dist/lib/engines/index.js +16 -0
- package/dist/lib/engines/index.js.map +1 -1
- package/dist/lib/engines/opencode.d.ts +5 -2
- package/dist/lib/engines/opencode.d.ts.map +1 -1
- package/dist/lib/engines/opencode.js +49 -11
- package/dist/lib/engines/opencode.js.map +1 -1
- package/dist/lib/init.d.ts +17 -1
- package/dist/lib/init.d.ts.map +1 -1
- package/dist/lib/init.js +242 -55
- package/dist/lib/init.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/init.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
+
import { DEFAULT_PLAN_PROMPT, DEFAULT_BUILD_PROMPT, DEFAULT_SPEC_PROMPT, DEFAULT_INIT_PROMPT } from './prompts.js';
|
|
5
|
+
import { gatherProjectContext, formatContextForPrompt } from './context.js';
|
|
6
|
+
import { detectEngines, getEngine } from './engines/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Detect project info from package.json
|
|
9
|
+
*/
|
|
4
10
|
async function detectFromPackageJson(dir) {
|
|
5
11
|
const path = join(dir, 'package.json');
|
|
6
12
|
if (!existsSync(path))
|
|
@@ -10,9 +16,11 @@ async function detectFromPackageJson(dir) {
|
|
|
10
16
|
const pkg = JSON.parse(content);
|
|
11
17
|
const scripts = pkg.scripts ?? {};
|
|
12
18
|
return {
|
|
19
|
+
projectType: 'node',
|
|
13
20
|
buildCommand: scripts.build ? 'npm run build' : undefined,
|
|
14
21
|
testCommand: scripts.test ? 'npm test' : undefined,
|
|
15
22
|
lintCommand: scripts.lint ? 'npm run lint' : undefined,
|
|
23
|
+
typecheckCommand: scripts.typecheck ? 'npm run typecheck' : undefined,
|
|
16
24
|
devCommand: scripts.dev ? 'npm run dev' : undefined,
|
|
17
25
|
};
|
|
18
26
|
}
|
|
@@ -20,106 +28,267 @@ async function detectFromPackageJson(dir) {
|
|
|
20
28
|
return {};
|
|
21
29
|
}
|
|
22
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Detect project info from Cargo.toml
|
|
33
|
+
*/
|
|
23
34
|
async function detectFromCargoToml(dir) {
|
|
24
|
-
|
|
35
|
+
const path = join(dir, 'Cargo.toml');
|
|
36
|
+
if (!existsSync(path))
|
|
25
37
|
return {};
|
|
26
38
|
return {
|
|
39
|
+
projectType: 'rust',
|
|
27
40
|
buildCommand: 'cargo build',
|
|
28
41
|
testCommand: 'cargo test',
|
|
29
42
|
lintCommand: 'cargo clippy',
|
|
43
|
+
typecheckCommand: 'cargo check',
|
|
30
44
|
};
|
|
31
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Detect project info from go.mod
|
|
48
|
+
*/
|
|
32
49
|
async function detectFromGoMod(dir) {
|
|
33
|
-
|
|
50
|
+
const path = join(dir, 'go.mod');
|
|
51
|
+
if (!existsSync(path))
|
|
34
52
|
return {};
|
|
35
53
|
return {
|
|
54
|
+
projectType: 'go',
|
|
36
55
|
buildCommand: 'go build ./...',
|
|
37
56
|
testCommand: 'go test ./...',
|
|
38
|
-
lintCommand: '
|
|
57
|
+
lintCommand: 'golangci-lint run',
|
|
58
|
+
typecheckCommand: 'go vet ./...',
|
|
39
59
|
};
|
|
40
60
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Extract patterns from existing documentation
|
|
63
|
+
*/
|
|
64
|
+
async function extractFromDocs(dir) {
|
|
65
|
+
const patterns = [];
|
|
66
|
+
const docFiles = ['CLAUDE.md', 'claude.md', 'AGENTS.md', 'agents.md', 'README.md'];
|
|
67
|
+
for (const file of docFiles) {
|
|
68
|
+
const path = join(dir, file);
|
|
69
|
+
if (!existsSync(path))
|
|
70
|
+
continue;
|
|
71
|
+
try {
|
|
72
|
+
const content = await readFile(path, 'utf-8');
|
|
73
|
+
const lines = content.split('\n');
|
|
74
|
+
for (const line of lines) {
|
|
75
|
+
if (line.startsWith('- ') && line.length < 150) {
|
|
76
|
+
const pattern = line.slice(2).trim();
|
|
77
|
+
if (pattern && !patterns.includes(pattern)) {
|
|
78
|
+
patterns.push(pattern);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (patterns.length >= 10)
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return patterns.slice(0, 10);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate lightweight AGENTS.md (max ~60 lines) using template
|
|
93
|
+
*/
|
|
94
|
+
function generateAgentsMdTemplate(info) {
|
|
95
|
+
const lines = [];
|
|
96
|
+
lines.push('## Build & Run');
|
|
97
|
+
lines.push('');
|
|
98
|
+
if (info.buildCommand) {
|
|
44
99
|
lines.push(`- Build: \`${info.buildCommand}\``);
|
|
45
|
-
|
|
100
|
+
}
|
|
101
|
+
if (info.devCommand) {
|
|
46
102
|
lines.push(`- Dev: \`${info.devCommand}\``);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
103
|
+
}
|
|
104
|
+
lines.push('');
|
|
105
|
+
lines.push('## Validation');
|
|
106
|
+
lines.push('');
|
|
107
|
+
if (info.testCommand) {
|
|
108
|
+
lines.push(`- Tests: \`${info.testCommand}\``);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
lines.push('- Tests: [configure]');
|
|
112
|
+
}
|
|
113
|
+
if (info.typecheckCommand) {
|
|
114
|
+
lines.push(`- Typecheck: \`${info.typecheckCommand}\``);
|
|
115
|
+
}
|
|
116
|
+
if (info.lintCommand) {
|
|
50
117
|
lines.push(`- Lint: \`${info.lintCommand}\``);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
lines.push('
|
|
118
|
+
}
|
|
119
|
+
if (info.patterns.length > 0) {
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push('## Codebase Patterns');
|
|
122
|
+
lines.push('');
|
|
123
|
+
for (const pattern of info.patterns.slice(0, 5)) {
|
|
124
|
+
lines.push(`- ${pattern}`);
|
|
125
|
+
}
|
|
54
126
|
}
|
|
55
127
|
lines.push('');
|
|
56
128
|
return lines.join('\n');
|
|
57
129
|
}
|
|
58
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Template-based init (fallback when no AI available)
|
|
132
|
+
*/
|
|
133
|
+
export async function templateBasedInit(dir) {
|
|
59
134
|
const created = [];
|
|
60
135
|
const skipped = [];
|
|
61
|
-
|
|
136
|
+
const info = {
|
|
137
|
+
patterns: [],
|
|
138
|
+
};
|
|
62
139
|
const [pkgInfo, cargoInfo, goInfo] = await Promise.all([
|
|
63
140
|
detectFromPackageJson(dir),
|
|
64
141
|
detectFromCargoToml(dir),
|
|
65
142
|
detectFromGoMod(dir),
|
|
66
143
|
]);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
144
|
+
Object.assign(info, pkgInfo, cargoInfo, goInfo);
|
|
145
|
+
info.patterns = await extractFromDocs(dir);
|
|
146
|
+
// Create scaffold and return the generated content
|
|
147
|
+
const agentsMdContent = generateAgentsMdTemplate(info);
|
|
148
|
+
const scaffoldResult = await createScaffold(dir, agentsMdContent);
|
|
149
|
+
return {
|
|
150
|
+
created: scaffoldResult.created,
|
|
151
|
+
skipped: scaffoldResult.skipped,
|
|
152
|
+
agentsMdContent,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* AI-powered init using the specified engine
|
|
157
|
+
*/
|
|
158
|
+
export async function aiPoweredInit(dir, engineName, options) {
|
|
159
|
+
const engine = getEngine(engineName);
|
|
160
|
+
// Gather project context
|
|
161
|
+
const context = await gatherProjectContext(dir);
|
|
162
|
+
const formattedContext = formatContextForPrompt(context);
|
|
163
|
+
// Build the prompt
|
|
164
|
+
const prompt = DEFAULT_INIT_PROMPT.replace('${projectContext}', formattedContext);
|
|
165
|
+
if (options.verbose) {
|
|
166
|
+
console.log('\n--- AI Init Prompt ---');
|
|
167
|
+
console.log(prompt);
|
|
168
|
+
console.log('--- End Prompt ---\n');
|
|
169
|
+
}
|
|
170
|
+
// Execute AI engine
|
|
171
|
+
const executeOptions = {
|
|
172
|
+
model: 'sonnet', // Use sonnet for init - fast and cost-effective
|
|
173
|
+
executor: 'sonnet',
|
|
174
|
+
headless: true,
|
|
175
|
+
skipPermissions: true,
|
|
176
|
+
verbose: options.verbose ?? false,
|
|
177
|
+
};
|
|
178
|
+
let agentsMdContent = '';
|
|
179
|
+
console.log(`\nGenerating AGENTS.md with ${engineName}...`);
|
|
180
|
+
try {
|
|
181
|
+
// Engine handles output to terminal, we just capture for saving
|
|
182
|
+
for await (const chunk of engine.execute(prompt, executeOptions)) {
|
|
183
|
+
if (chunk.type === 'text' && chunk.content) {
|
|
184
|
+
agentsMdContent += chunk.content;
|
|
185
|
+
}
|
|
186
|
+
else if (chunk.type === 'error') {
|
|
187
|
+
throw new Error(chunk.error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
console.error('\nAI generation failed, falling back to template...');
|
|
193
|
+
if (options.verbose && error instanceof Error) {
|
|
194
|
+
console.error('Error:', error.message);
|
|
195
|
+
}
|
|
196
|
+
return templateBasedInit(dir);
|
|
197
|
+
}
|
|
198
|
+
// Clean up the content (remove any markdown code fences if present)
|
|
199
|
+
agentsMdContent = agentsMdContent.trim();
|
|
200
|
+
if (agentsMdContent.startsWith('```markdown')) {
|
|
201
|
+
agentsMdContent = agentsMdContent.slice('```markdown'.length);
|
|
202
|
+
}
|
|
203
|
+
else if (agentsMdContent.startsWith('```md')) {
|
|
204
|
+
agentsMdContent = agentsMdContent.slice('```md'.length);
|
|
205
|
+
}
|
|
206
|
+
else if (agentsMdContent.startsWith('```')) {
|
|
207
|
+
agentsMdContent = agentsMdContent.slice(3);
|
|
208
|
+
}
|
|
209
|
+
if (agentsMdContent.endsWith('```')) {
|
|
210
|
+
agentsMdContent = agentsMdContent.slice(0, -3);
|
|
211
|
+
}
|
|
212
|
+
agentsMdContent = agentsMdContent.trim();
|
|
213
|
+
// Validate line count
|
|
214
|
+
const lineCount = agentsMdContent.split('\n').length;
|
|
215
|
+
if (lineCount > 80) {
|
|
216
|
+
console.warn(`\nWarning: Generated AGENTS.md is ${lineCount} lines (target: 60). Consider trimming.`);
|
|
72
217
|
}
|
|
73
|
-
|
|
218
|
+
console.log('\n');
|
|
219
|
+
// Create scaffold with AI-generated content
|
|
220
|
+
const scaffoldResult = await createScaffold(dir, agentsMdContent);
|
|
221
|
+
return {
|
|
222
|
+
created: scaffoldResult.created,
|
|
223
|
+
skipped: scaffoldResult.skipped,
|
|
224
|
+
agentsMdContent,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create project scaffold (directories, files)
|
|
229
|
+
*/
|
|
230
|
+
async function createScaffold(dir, agentsMdContent) {
|
|
231
|
+
const created = [];
|
|
232
|
+
const skipped = [];
|
|
233
|
+
// Create specs/ directory
|
|
234
|
+
const specsDir = join(dir, 'specs');
|
|
235
|
+
if (!existsSync(specsDir)) {
|
|
236
|
+
await mkdir(specsDir, { recursive: true });
|
|
237
|
+
created.push('specs/');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
skipped.push('specs/');
|
|
241
|
+
}
|
|
242
|
+
// Create .vralphy/ directory
|
|
243
|
+
const vralphyDir = join(dir, '.vralphy');
|
|
244
|
+
// Create AGENTS.md in .vralphy/ (vralphy's internal operational guide)
|
|
74
245
|
const agentsMd = join(vralphyDir, 'AGENTS.md');
|
|
75
246
|
if (!existsSync(agentsMd)) {
|
|
76
|
-
|
|
247
|
+
// Ensure .vralphy directory exists first
|
|
248
|
+
if (!existsSync(vralphyDir)) {
|
|
249
|
+
await mkdir(vralphyDir, { recursive: true });
|
|
250
|
+
}
|
|
251
|
+
await writeFile(agentsMd, agentsMdContent);
|
|
77
252
|
created.push('.vralphy/AGENTS.md');
|
|
78
253
|
}
|
|
79
254
|
else {
|
|
80
255
|
skipped.push('.vralphy/AGENTS.md');
|
|
81
256
|
}
|
|
82
|
-
// Create prompts directory
|
|
257
|
+
// Create .vralphy/prompts/ directory
|
|
83
258
|
const promptsDir = join(vralphyDir, 'prompts');
|
|
84
259
|
if (!existsSync(promptsDir)) {
|
|
85
260
|
await mkdir(promptsDir, { recursive: true });
|
|
261
|
+
created.push('.vralphy/prompts/');
|
|
86
262
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
Analyze specs/ and src/ to identify gaps.
|
|
90
|
-
Update IMPLEMENTATION_PLAN.md with prioritized tasks.
|
|
91
|
-
Do not implement - only plan.`;
|
|
92
|
-
const defaultBuildPrompt = `Read AGENTS.md and IMPLEMENTATION_PLAN.md.
|
|
93
|
-
Pick the highest priority incomplete task.
|
|
94
|
-
Implement it, run tests, commit if passing.
|
|
95
|
-
Update IMPLEMENTATION_PLAN.md to mark progress.`;
|
|
96
|
-
const defaultSpecPrompt = `Help define requirements for: \${topic}
|
|
97
|
-
Ask clarifying questions.
|
|
98
|
-
Output a structured spec document.`;
|
|
99
|
-
for (const [name, content] of [
|
|
100
|
-
['plan.md', defaultPlanPrompt],
|
|
101
|
-
['build.md', defaultBuildPrompt],
|
|
102
|
-
['spec.md', defaultSpecPrompt],
|
|
103
|
-
]) {
|
|
104
|
-
const path = join(promptsDir, name);
|
|
105
|
-
if (!existsSync(path)) {
|
|
106
|
-
await writeFile(path, content);
|
|
107
|
-
created.push(`.vralphy/prompts/${name}`);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
skipped.push(`.vralphy/prompts/${name}`);
|
|
111
|
-
}
|
|
263
|
+
else {
|
|
264
|
+
skipped.push('.vralphy/prompts/');
|
|
112
265
|
}
|
|
113
|
-
// Create
|
|
114
|
-
const
|
|
115
|
-
if (!existsSync(
|
|
116
|
-
await
|
|
117
|
-
created.push('
|
|
266
|
+
// Create prompts in .vralphy/prompts/
|
|
267
|
+
const planPrompt = join(promptsDir, 'plan.md');
|
|
268
|
+
if (!existsSync(planPrompt)) {
|
|
269
|
+
await writeFile(planPrompt, DEFAULT_PLAN_PROMPT);
|
|
270
|
+
created.push('.vralphy/prompts/plan.md');
|
|
118
271
|
}
|
|
119
272
|
else {
|
|
120
|
-
skipped.push('
|
|
273
|
+
skipped.push('.vralphy/prompts/plan.md');
|
|
274
|
+
}
|
|
275
|
+
const buildPrompt = join(promptsDir, 'build.md');
|
|
276
|
+
if (!existsSync(buildPrompt)) {
|
|
277
|
+
await writeFile(buildPrompt, DEFAULT_BUILD_PROMPT);
|
|
278
|
+
created.push('.vralphy/prompts/build.md');
|
|
121
279
|
}
|
|
122
|
-
|
|
280
|
+
else {
|
|
281
|
+
skipped.push('.vralphy/prompts/build.md');
|
|
282
|
+
}
|
|
283
|
+
const specPrompt = join(promptsDir, 'spec.md');
|
|
284
|
+
if (!existsSync(specPrompt)) {
|
|
285
|
+
await writeFile(specPrompt, DEFAULT_SPEC_PROMPT);
|
|
286
|
+
created.push('.vralphy/prompts/spec.md');
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
skipped.push('.vralphy/prompts/spec.md');
|
|
290
|
+
}
|
|
291
|
+
// Create IMPLEMENTATION_PLAN.md in project root
|
|
123
292
|
const implPlan = join(dir, 'IMPLEMENTATION_PLAN.md');
|
|
124
293
|
if (!existsSync(implPlan)) {
|
|
125
294
|
await writeFile(implPlan, '# Implementation Plan\n\n- [ ] Initial setup\n');
|
|
@@ -130,4 +299,22 @@ Output a structured spec document.`;
|
|
|
130
299
|
}
|
|
131
300
|
return { created, skipped };
|
|
132
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Initialize a project for vralphy
|
|
304
|
+
*/
|
|
305
|
+
export async function initProject(dir = process.cwd(), options = {}) {
|
|
306
|
+
// Check for available engines if AI mode is enabled
|
|
307
|
+
if (!options.noAi) {
|
|
308
|
+
const availableEngines = await detectEngines();
|
|
309
|
+
if (availableEngines.length > 0) {
|
|
310
|
+
// Use specified engine or first available
|
|
311
|
+
const engineToUse = options.engine && availableEngines.includes(options.engine)
|
|
312
|
+
? options.engine
|
|
313
|
+
: availableEngines[0];
|
|
314
|
+
return aiPoweredInit(dir, engineToUse, options);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Fall back to template-based init
|
|
318
|
+
return templateBasedInit(dir);
|
|
319
|
+
}
|
|
133
320
|
//# sourceMappingURL=init.js.map
|
package/dist/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"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"}
|