@thynameisjayvee/alpha-cli 0.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/LICENSE +21 -0
- package/README.md +143 -0
- package/bin/alpha.js +15 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +125 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/alpha.d.ts +64 -0
- package/dist/core/alpha.d.ts.map +1 -0
- package/dist/core/alpha.js +94 -0
- package/dist/core/alpha.js.map +1 -0
- package/dist/core/generator/index.d.ts +16 -0
- package/dist/core/generator/index.d.ts.map +1 -0
- package/dist/core/generator/index.js +231 -0
- package/dist/core/generator/index.js.map +1 -0
- package/dist/core/implementation/index.d.ts +22 -0
- package/dist/core/implementation/index.d.ts.map +1 -0
- package/dist/core/implementation/index.js +398 -0
- package/dist/core/implementation/index.js.map +1 -0
- package/dist/core/init/catalog.d.ts +23 -0
- package/dist/core/init/catalog.d.ts.map +1 -0
- package/dist/core/init/catalog.js +87 -0
- package/dist/core/init/catalog.js.map +1 -0
- package/dist/core/init/index.d.ts +10 -0
- package/dist/core/init/index.d.ts.map +1 -0
- package/dist/core/init/index.js +214 -0
- package/dist/core/init/index.js.map +1 -0
- package/dist/core/requirements/index.d.ts +10 -0
- package/dist/core/requirements/index.d.ts.map +1 -0
- package/dist/core/requirements/index.js +232 -0
- package/dist/core/requirements/index.js.map +1 -0
- package/dist/core/reviewer/index.d.ts +29 -0
- package/dist/core/reviewer/index.d.ts.map +1 -0
- package/dist/core/reviewer/index.js +419 -0
- package/dist/core/reviewer/index.js.map +1 -0
- package/dist/core/stack/index.d.ts +10 -0
- package/dist/core/stack/index.d.ts.map +1 -0
- package/dist/core/stack/index.js +243 -0
- package/dist/core/stack/index.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +128 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +105 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +99 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file-system.d.ts +17 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +48 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/input.d.ts +18 -0
- package/dist/utils/input.d.ts.map +1 -0
- package/dist/utils/input.js +50 -0
- package/dist/utils/input.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +109 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +26 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +51 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +79 -0
- package/scripts/postinstall.js +110 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { logger, emit } from '../../utils/logger.js';
|
|
3
|
+
import { writeFile, ensureDir, readJsonFile } from '../../utils/file-system.js';
|
|
4
|
+
import { getAlphaDir } from '../../utils/paths.js';
|
|
5
|
+
import { readInputJson } from '../../utils/input.js';
|
|
6
|
+
/**
|
|
7
|
+
* Reference stack templates. These are *not* an automatic decision — they are
|
|
8
|
+
* candidate data the calling LLM (or human) can choose from or ignore entirely.
|
|
9
|
+
*/
|
|
10
|
+
const STACK_TEMPLATES = {
|
|
11
|
+
'fullstack-nextjs': {
|
|
12
|
+
stack: {
|
|
13
|
+
frontend: ['Next.js 14', 'React', 'TypeScript', 'Tailwind CSS'],
|
|
14
|
+
backend: ['Next.js API Routes', 'Server Actions'],
|
|
15
|
+
database: ['PostgreSQL', 'Prisma ORM'],
|
|
16
|
+
infrastructure: ['Vercel'],
|
|
17
|
+
tools: ['Turborepo', 'ESLint', 'Prettier'],
|
|
18
|
+
},
|
|
19
|
+
pros: [
|
|
20
|
+
'Excellent developer experience',
|
|
21
|
+
'Great for content-heavy sites',
|
|
22
|
+
'Built-in SSR and SSG',
|
|
23
|
+
'Zero config deployment on Vercel',
|
|
24
|
+
],
|
|
25
|
+
cons: [
|
|
26
|
+
'Vendor lock-in with Vercel',
|
|
27
|
+
'Limited backend complexity support',
|
|
28
|
+
'Cold starts on serverless',
|
|
29
|
+
],
|
|
30
|
+
rationale: 'Best for marketing sites, blogs, and content-driven applications',
|
|
31
|
+
confidence: 0.85,
|
|
32
|
+
},
|
|
33
|
+
'enterprise-nestjs': {
|
|
34
|
+
stack: {
|
|
35
|
+
frontend: ['React', 'TypeScript', 'Tailwind CSS', 'shadcn/ui'],
|
|
36
|
+
backend: ['NestJS', 'TypeScript', 'Node.js'],
|
|
37
|
+
database: ['PostgreSQL', 'Prisma ORM'],
|
|
38
|
+
infrastructure: ['Docker', 'Kubernetes', 'AWS/GCP'],
|
|
39
|
+
tools: ['Jest', 'ESLint', 'Prettier', 'Husky'],
|
|
40
|
+
},
|
|
41
|
+
pros: [
|
|
42
|
+
'Enterprise-grade architecture',
|
|
43
|
+
'Strong typing end-to-end',
|
|
44
|
+
'Scalable microservices-ready',
|
|
45
|
+
'Rich ecosystem',
|
|
46
|
+
],
|
|
47
|
+
cons: [
|
|
48
|
+
'Steeper learning curve',
|
|
49
|
+
'More boilerplate',
|
|
50
|
+
'Requires infrastructure management',
|
|
51
|
+
],
|
|
52
|
+
rationale: 'Ideal for complex enterprise applications with multiple teams',
|
|
53
|
+
confidence: 0.9,
|
|
54
|
+
},
|
|
55
|
+
'rapid-prototype': {
|
|
56
|
+
stack: {
|
|
57
|
+
frontend: ['Vue 3', 'Nuxt UI', 'Tailwind CSS'],
|
|
58
|
+
backend: ['Hono', 'Bun'],
|
|
59
|
+
database: ['SQLite', 'Drizzle ORM'],
|
|
60
|
+
infrastructure: ['Railway', 'Render'],
|
|
61
|
+
tools: ['Vite', 'ESLint'],
|
|
62
|
+
},
|
|
63
|
+
pros: [
|
|
64
|
+
'Extremely fast development',
|
|
65
|
+
'Minimal configuration',
|
|
66
|
+
'Low resource usage',
|
|
67
|
+
'Great for MVPs',
|
|
68
|
+
],
|
|
69
|
+
cons: [
|
|
70
|
+
'Smaller ecosystem',
|
|
71
|
+
'May need to migrate for scale',
|
|
72
|
+
'Limited enterprise patterns',
|
|
73
|
+
],
|
|
74
|
+
rationale: 'Perfect for rapid prototyping and MVP development',
|
|
75
|
+
confidence: 0.8,
|
|
76
|
+
},
|
|
77
|
+
'data-intensive': {
|
|
78
|
+
stack: {
|
|
79
|
+
frontend: ['React', 'TypeScript', 'TanStack Query', 'AG Grid'],
|
|
80
|
+
backend: ['FastAPI', 'Python'],
|
|
81
|
+
database: ['PostgreSQL', 'Redis', 'ClickHouse'],
|
|
82
|
+
infrastructure: ['Docker', 'AWS'],
|
|
83
|
+
tools: ['Pandas', 'NumPy', 'Celery'],
|
|
84
|
+
},
|
|
85
|
+
pros: [
|
|
86
|
+
'Excellent for data processing',
|
|
87
|
+
'Rich ML/AI ecosystem',
|
|
88
|
+
'High performance analytics',
|
|
89
|
+
'Scalable async processing',
|
|
90
|
+
],
|
|
91
|
+
cons: [
|
|
92
|
+
'Python GIL limitations',
|
|
93
|
+
'Higher memory usage',
|
|
94
|
+
'More complex deployment',
|
|
95
|
+
],
|
|
96
|
+
rationale: 'Optimized for data-heavy applications and analytics',
|
|
97
|
+
confidence: 0.88,
|
|
98
|
+
},
|
|
99
|
+
'tauri-desktop': {
|
|
100
|
+
stack: {
|
|
101
|
+
frontend: ['React', 'TypeScript', 'Tailwind CSS'],
|
|
102
|
+
backend: ['Tauri v2', 'Rust'],
|
|
103
|
+
database: ['SQLite', 'Dexie.js'],
|
|
104
|
+
infrastructure: ['AppImage', 'DMG', 'MSI'],
|
|
105
|
+
tools: ['Vite', 'ESLint', 'Prettier'],
|
|
106
|
+
},
|
|
107
|
+
pros: [
|
|
108
|
+
'Small bundle sizes',
|
|
109
|
+
'Native performance',
|
|
110
|
+
'Cross-platform support',
|
|
111
|
+
'Strong security model',
|
|
112
|
+
],
|
|
113
|
+
cons: ['Rust learning curve', 'Limited mobile support', 'Younger ecosystem'],
|
|
114
|
+
rationale: 'Best for cross-platform desktop applications',
|
|
115
|
+
confidence: 0.87,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
async function loadProjectContext() {
|
|
119
|
+
try {
|
|
120
|
+
const contextPath = `${getAlphaDir()}/project-context.json`;
|
|
121
|
+
return await readJsonFile(contextPath);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function saveStackDecision(context, recommendation) {
|
|
128
|
+
const alphaDir = getAlphaDir();
|
|
129
|
+
await ensureDir(alphaDir);
|
|
130
|
+
if (context) {
|
|
131
|
+
const updatedContext = { ...context, techStack: recommendation.stack };
|
|
132
|
+
await writeFile(`${alphaDir}/project-context.json`, JSON.stringify(updatedContext, null, 2));
|
|
133
|
+
}
|
|
134
|
+
await writeFile(`${alphaDir}/tech-stack.json`, JSON.stringify(recommendation, null, 2));
|
|
135
|
+
logger.success('Tech stack decision saved!');
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Normalise flexible input into a StackRecommendation. Accepts a full
|
|
139
|
+
* recommendation, a bare TechStack, or `{ template: "<key>" }`.
|
|
140
|
+
*/
|
|
141
|
+
function buildRecommendation(raw) {
|
|
142
|
+
if (raw.template && STACK_TEMPLATES[raw.template]) {
|
|
143
|
+
return STACK_TEMPLATES[raw.template];
|
|
144
|
+
}
|
|
145
|
+
const stack = raw.stack ? raw.stack : raw;
|
|
146
|
+
return {
|
|
147
|
+
stack: {
|
|
148
|
+
frontend: stack.frontend,
|
|
149
|
+
backend: stack.backend,
|
|
150
|
+
database: stack.database,
|
|
151
|
+
infrastructure: stack.infrastructure,
|
|
152
|
+
tools: stack.tools,
|
|
153
|
+
},
|
|
154
|
+
pros: Array.isArray(raw.pros) ? raw.pros : [],
|
|
155
|
+
cons: Array.isArray(raw.cons) ? raw.cons : [],
|
|
156
|
+
rationale: raw.rationale || 'Stack selected by caller',
|
|
157
|
+
confidence: typeof raw.confidence === 'number' ? raw.confidence : 1,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function renderTemplates(context) {
|
|
161
|
+
const lines = [
|
|
162
|
+
`# Tech Stack Selection`,
|
|
163
|
+
``,
|
|
164
|
+
];
|
|
165
|
+
if (context) {
|
|
166
|
+
lines.push(`Project: ${context.name}`, context.description ? `Description: ${context.description}` : '', ``);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
lines.push(`(No project context found — run \`alpha gather\` first for richer guidance.)`, ``);
|
|
170
|
+
}
|
|
171
|
+
lines.push(`Choose or adapt one of the reference stacks below, then submit your`, `decision:`, ``, '```bash', `alpha stack --input stack.json`, `# or: echo '{ "template": "enterprise-nestjs" }' | alpha stack --input -`, '```', ``, `Input may be a template key, a bare TechStack, or a full recommendation.`, ``, `## Reference stacks`, ``);
|
|
172
|
+
for (const [key, rec] of Object.entries(STACK_TEMPLATES)) {
|
|
173
|
+
lines.push(`### \`${key}\``, rec.rationale, '', `- Frontend: ${(rec.stack.frontend || []).join(', ')}`, `- Backend: ${(rec.stack.backend || []).join(', ')}`, `- Database: ${(rec.stack.database || []).join(', ')}`, ``);
|
|
174
|
+
}
|
|
175
|
+
return lines.filter((l) => l !== undefined).join('\n');
|
|
176
|
+
}
|
|
177
|
+
async function stackInteractive(context) {
|
|
178
|
+
const inquirer = (await import('inquirer')).default;
|
|
179
|
+
const chalk = (await import('chalk')).default;
|
|
180
|
+
const templateEntries = Object.entries(STACK_TEMPLATES);
|
|
181
|
+
const { selection } = await inquirer.prompt([
|
|
182
|
+
{
|
|
183
|
+
type: 'list',
|
|
184
|
+
name: 'selection',
|
|
185
|
+
message: chalk.cyan('Which tech stack would you like to use?'),
|
|
186
|
+
choices: [
|
|
187
|
+
...templateEntries.map(([key, rec]) => ({
|
|
188
|
+
name: `${key} — ${rec.rationale}`,
|
|
189
|
+
value: key,
|
|
190
|
+
})),
|
|
191
|
+
{ name: 'Custom stack', value: '__custom__' },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
]);
|
|
195
|
+
if (selection !== '__custom__') {
|
|
196
|
+
await saveStackDecision(context, STACK_TEMPLATES[selection]);
|
|
197
|
+
return STACK_TEMPLATES[selection];
|
|
198
|
+
}
|
|
199
|
+
const custom = await inquirer.prompt([
|
|
200
|
+
{ type: 'input', name: 'frontend', message: chalk.cyan('Frontend (comma-separated):') },
|
|
201
|
+
{ type: 'input', name: 'backend', message: chalk.cyan('Backend (comma-separated):') },
|
|
202
|
+
{ type: 'input', name: 'database', message: chalk.cyan('Database (comma-separated):') },
|
|
203
|
+
]);
|
|
204
|
+
const recommendation = buildRecommendation({
|
|
205
|
+
stack: {
|
|
206
|
+
frontend: custom.frontend.split(',').map((s) => s.trim()).filter(Boolean),
|
|
207
|
+
backend: custom.backend.split(',').map((s) => s.trim()).filter(Boolean),
|
|
208
|
+
database: custom.database.split(',').map((s) => s.trim()).filter(Boolean),
|
|
209
|
+
},
|
|
210
|
+
rationale: 'Custom stack based on user preferences',
|
|
211
|
+
});
|
|
212
|
+
await saveStackDecision(context, recommendation);
|
|
213
|
+
return recommendation;
|
|
214
|
+
}
|
|
215
|
+
export async function adviseStack(options = {}) {
|
|
216
|
+
try {
|
|
217
|
+
const context = await loadProjectContext();
|
|
218
|
+
const inputData = await readInputJson(options.input);
|
|
219
|
+
if (options.interactive) {
|
|
220
|
+
const recommendation = await stackInteractive(context);
|
|
221
|
+
emit('stack', recommendation);
|
|
222
|
+
return recommendation;
|
|
223
|
+
}
|
|
224
|
+
if (inputData) {
|
|
225
|
+
const recommendation = buildRecommendation(inputData);
|
|
226
|
+
await saveStackDecision(context, recommendation);
|
|
227
|
+
emit('stack', recommendation);
|
|
228
|
+
return recommendation;
|
|
229
|
+
}
|
|
230
|
+
emit('stack', { mode: 'templates', context, templates: STACK_TEMPLATES }, renderTemplates(context));
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.error(`Stack advice failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
235
|
+
process.exitCode = 1;
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// CLI entry point
|
|
240
|
+
if (process.argv[1]?.endsWith('advisor.ts')) {
|
|
241
|
+
adviseStack();
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/stack/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @thynameisjayvee/alpha-cli - AI development assistive harness
|
|
3
|
+
*
|
|
4
|
+
* Programmatic entry point. Alpha never edits code and never spawns agents;
|
|
5
|
+
* the calling LLM drives these functions and acts on their emitted output.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Alpha } from '@thynameisjayvee/alpha-cli';
|
|
10
|
+
*
|
|
11
|
+
* const alpha = await Alpha.open();
|
|
12
|
+
* const review = await alpha.review({ target: 'src/' });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
export { Alpha } from './core/alpha.js';
|
|
18
|
+
export { runInit, type InitOptions, type AgentTarget } from './core/init/index.js';
|
|
19
|
+
export { gatherRequirements, type GatherOptions } from './core/requirements/index.js';
|
|
20
|
+
export { adviseStack, type StackOptions } from './core/stack/index.js';
|
|
21
|
+
export { generateSpec, type SpecOptions } from './core/generator/index.js';
|
|
22
|
+
export { runReview, type ReviewOptions } from './core/reviewer/index.js';
|
|
23
|
+
export { runImplementation, type ImplementOptions, } from './core/implementation/index.js';
|
|
24
|
+
export { buildProgram, run } from './cli.js';
|
|
25
|
+
export type { ProjectContext, TechStack, StackRecommendation, Specification, AcceptanceCriterion, Dependency, ImplementationOption, ReviewReport, ReviewFinding, RecommendationOption, ClarifyingQuestion, SubAgentTask, SubAgentResult, } from './types/index.js';
|
|
26
|
+
export { getProjectRoot, getAlphaDir, getSpecsDir, getReportsDir, ensureAlphaDir, getConfigPath, } from './utils/paths.js';
|
|
27
|
+
export { writeFile, readFile, fileExists, deleteFile, readJsonFile, writeJsonFile, listDirectory, ensureDir, } from './utils/file-system.js';
|
|
28
|
+
export { logger, emit, emitError, setJsonMode, isJsonMode, } from './utils/logger.js';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG7C,YAAY,EACV,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @thynameisjayvee/alpha-cli - AI development assistive harness
|
|
3
|
+
*
|
|
4
|
+
* Programmatic entry point. Alpha never edits code and never spawns agents;
|
|
5
|
+
* the calling LLM drives these functions and acts on their emitted output.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Alpha } from '@thynameisjayvee/alpha-cli';
|
|
10
|
+
*
|
|
11
|
+
* const alpha = await Alpha.open();
|
|
12
|
+
* const review = await alpha.review({ target: 'src/' });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
// Main Alpha class (programmatic API)
|
|
18
|
+
export { Alpha } from './core/alpha.js';
|
|
19
|
+
// Core modules (can be used independently)
|
|
20
|
+
export { runInit } from './core/init/index.js';
|
|
21
|
+
export { gatherRequirements } from './core/requirements/index.js';
|
|
22
|
+
export { adviseStack } from './core/stack/index.js';
|
|
23
|
+
export { generateSpec } from './core/generator/index.js';
|
|
24
|
+
export { runReview } from './core/reviewer/index.js';
|
|
25
|
+
export { runImplementation, } from './core/implementation/index.js';
|
|
26
|
+
// CLI (for embedding/testing)
|
|
27
|
+
export { buildProgram, run } from './cli.js';
|
|
28
|
+
// Utility exports
|
|
29
|
+
export { getProjectRoot, getAlphaDir, getSpecsDir, getReportsDir, ensureAlphaDir, getConfigPath, } from './utils/paths.js';
|
|
30
|
+
export { writeFile, readFile, fileExists, deleteFile, readJsonFile, writeJsonFile, listDirectory, ensureDir, } from './utils/file-system.js';
|
|
31
|
+
export { logger, emit, emitError, setJsonMode, isJsonMode, } from './utils/logger.js';
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,sCAAsC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAsC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAoB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAsB,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,iBAAiB,GAElB,MAAM,gCAAgC,CAAC;AAExC,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAmB7C,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for Project Alpha
|
|
3
|
+
*/
|
|
4
|
+
export interface ProjectContext {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
intent: string;
|
|
8
|
+
goals: string[];
|
|
9
|
+
constraints: string[];
|
|
10
|
+
techStack?: TechStack;
|
|
11
|
+
}
|
|
12
|
+
export interface TechStack {
|
|
13
|
+
frontend?: string[];
|
|
14
|
+
backend?: string[];
|
|
15
|
+
database?: string[];
|
|
16
|
+
infrastructure?: string[];
|
|
17
|
+
tools?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface StackRecommendation {
|
|
20
|
+
stack: TechStack;
|
|
21
|
+
pros: string[];
|
|
22
|
+
cons: string[];
|
|
23
|
+
rationale: string;
|
|
24
|
+
confidence: number;
|
|
25
|
+
}
|
|
26
|
+
export interface Specification {
|
|
27
|
+
id: string;
|
|
28
|
+
title: string;
|
|
29
|
+
type: 'feature' | 'bugfix' | 'refactor' | 'enhancement';
|
|
30
|
+
description: string;
|
|
31
|
+
acceptanceCriteria: AcceptanceCriterion[];
|
|
32
|
+
dependencies: Dependency[];
|
|
33
|
+
implementationOptions: ImplementationOption[];
|
|
34
|
+
metadata: SpecMetadata;
|
|
35
|
+
}
|
|
36
|
+
export interface AcceptanceCriterion {
|
|
37
|
+
id: string;
|
|
38
|
+
description: string;
|
|
39
|
+
layer: 'unit' | 'integration' | 'e2e' | 'manual';
|
|
40
|
+
priority: 'must' | 'should' | 'could';
|
|
41
|
+
}
|
|
42
|
+
export interface Dependency {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
type: 'file' | 'module' | 'service' | 'external' | 'skill';
|
|
46
|
+
path?: string;
|
|
47
|
+
description: string;
|
|
48
|
+
status: 'exists' | 'needs-creation' | 'needs-modification';
|
|
49
|
+
}
|
|
50
|
+
export interface ImplementationOption {
|
|
51
|
+
id: string;
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
approach: string;
|
|
55
|
+
pros: string[];
|
|
56
|
+
cons: string[];
|
|
57
|
+
estimatedEffort: 'low' | 'medium' | 'high';
|
|
58
|
+
risks: string[];
|
|
59
|
+
recommended?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface SpecMetadata {
|
|
62
|
+
createdAt: string;
|
|
63
|
+
updatedAt: string;
|
|
64
|
+
version: string;
|
|
65
|
+
status: 'draft' | 'finalized' | 'implemented' | 'deprecated';
|
|
66
|
+
codebasePath?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface ReviewFinding {
|
|
69
|
+
id: string;
|
|
70
|
+
title: string;
|
|
71
|
+
description: string;
|
|
72
|
+
severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
73
|
+
location?: {
|
|
74
|
+
file?: string;
|
|
75
|
+
line?: number;
|
|
76
|
+
function?: string;
|
|
77
|
+
};
|
|
78
|
+
dependencies: Dependency[];
|
|
79
|
+
recommendationOptions: RecommendationOption[];
|
|
80
|
+
}
|
|
81
|
+
export interface RecommendationOption {
|
|
82
|
+
id: string;
|
|
83
|
+
title: string;
|
|
84
|
+
description: string;
|
|
85
|
+
implementationSteps: string[];
|
|
86
|
+
estimatedEffort: 'low' | 'medium' | 'high';
|
|
87
|
+
risks: string[];
|
|
88
|
+
recommended?: boolean;
|
|
89
|
+
}
|
|
90
|
+
export interface ReviewReport {
|
|
91
|
+
id: string;
|
|
92
|
+
title: string;
|
|
93
|
+
reviewTarget: string;
|
|
94
|
+
findings: ReviewFinding[];
|
|
95
|
+
summary: {
|
|
96
|
+
totalFindings: number;
|
|
97
|
+
critical: number;
|
|
98
|
+
high: number;
|
|
99
|
+
medium: number;
|
|
100
|
+
low: number;
|
|
101
|
+
info: number;
|
|
102
|
+
};
|
|
103
|
+
createdAt: string;
|
|
104
|
+
status: 'pending-review' | 'ready-for-implementation' | 'implemented' | 'dismissed';
|
|
105
|
+
}
|
|
106
|
+
export interface ClarifyingQuestion {
|
|
107
|
+
id: string;
|
|
108
|
+
question: string;
|
|
109
|
+
category: 'intent' | 'scope' | 'constraints' | 'preferences' | 'technical';
|
|
110
|
+
required: boolean;
|
|
111
|
+
options?: string[];
|
|
112
|
+
followUpQuestions?: ClarifyingQuestion[];
|
|
113
|
+
}
|
|
114
|
+
export interface SubAgentTask {
|
|
115
|
+
id: string;
|
|
116
|
+
type: 'spec-analysis' | 'code-review' | 'implementation' | 'testing';
|
|
117
|
+
prompt: string;
|
|
118
|
+
dependencies?: string[];
|
|
119
|
+
timeout?: number;
|
|
120
|
+
}
|
|
121
|
+
export interface SubAgentResult {
|
|
122
|
+
taskId: string;
|
|
123
|
+
success: boolean;
|
|
124
|
+
output?: string;
|
|
125
|
+
error?: string;
|
|
126
|
+
duration: number;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;IACjD,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;CAC5D;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1D,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,GAAG,0BAA0B,GAAG,aAAa,GAAG,WAAW,CAAC;CACrF;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,GAAG,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loader with zod validation
|
|
3
|
+
*
|
|
4
|
+
* Loads and validates .alpha/config.json with type-safe defaults
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Configuration schema with defaults
|
|
9
|
+
*/
|
|
10
|
+
declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
11
|
+
version: z.ZodDefault<z.ZodString>;
|
|
12
|
+
output: z.ZodDefault<z.ZodObject<{
|
|
13
|
+
alphaDir: z.ZodDefault<z.ZodString>;
|
|
14
|
+
specsDir: z.ZodDefault<z.ZodString>;
|
|
15
|
+
reportsDir: z.ZodDefault<z.ZodString>;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
alphaDir: string;
|
|
18
|
+
specsDir: string;
|
|
19
|
+
reportsDir: string;
|
|
20
|
+
}, {
|
|
21
|
+
alphaDir?: string | undefined;
|
|
22
|
+
specsDir?: string | undefined;
|
|
23
|
+
reportsDir?: string | undefined;
|
|
24
|
+
}>>;
|
|
25
|
+
review: z.ZodDefault<z.ZodObject<{
|
|
26
|
+
defaultChecks: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
27
|
+
autoSelectRecommended: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
+
maxFiles: z.ZodDefault<z.ZodNumber>;
|
|
29
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
defaultChecks: string[];
|
|
32
|
+
autoSelectRecommended: boolean;
|
|
33
|
+
maxFiles: number;
|
|
34
|
+
timeout: number;
|
|
35
|
+
}, {
|
|
36
|
+
defaultChecks?: string[] | undefined;
|
|
37
|
+
autoSelectRecommended?: boolean | undefined;
|
|
38
|
+
maxFiles?: number | undefined;
|
|
39
|
+
timeout?: number | undefined;
|
|
40
|
+
}>>;
|
|
41
|
+
implementation: z.ZodDefault<z.ZodObject<{
|
|
42
|
+
autoVerify: z.ZodDefault<z.ZodBoolean>;
|
|
43
|
+
cleanupOnVerify: z.ZodDefault<z.ZodBoolean>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
autoVerify: boolean;
|
|
46
|
+
cleanupOnVerify: boolean;
|
|
47
|
+
}, {
|
|
48
|
+
autoVerify?: boolean | undefined;
|
|
49
|
+
cleanupOnVerify?: boolean | undefined;
|
|
50
|
+
}>>;
|
|
51
|
+
}, "strip", z.ZodTypeAny, {
|
|
52
|
+
version: string;
|
|
53
|
+
output: {
|
|
54
|
+
alphaDir: string;
|
|
55
|
+
specsDir: string;
|
|
56
|
+
reportsDir: string;
|
|
57
|
+
};
|
|
58
|
+
review: {
|
|
59
|
+
defaultChecks: string[];
|
|
60
|
+
autoSelectRecommended: boolean;
|
|
61
|
+
maxFiles: number;
|
|
62
|
+
timeout: number;
|
|
63
|
+
};
|
|
64
|
+
implementation: {
|
|
65
|
+
autoVerify: boolean;
|
|
66
|
+
cleanupOnVerify: boolean;
|
|
67
|
+
};
|
|
68
|
+
}, {
|
|
69
|
+
version?: string | undefined;
|
|
70
|
+
output?: {
|
|
71
|
+
alphaDir?: string | undefined;
|
|
72
|
+
specsDir?: string | undefined;
|
|
73
|
+
reportsDir?: string | undefined;
|
|
74
|
+
} | undefined;
|
|
75
|
+
review?: {
|
|
76
|
+
defaultChecks?: string[] | undefined;
|
|
77
|
+
autoSelectRecommended?: boolean | undefined;
|
|
78
|
+
maxFiles?: number | undefined;
|
|
79
|
+
timeout?: number | undefined;
|
|
80
|
+
} | undefined;
|
|
81
|
+
implementation?: {
|
|
82
|
+
autoVerify?: boolean | undefined;
|
|
83
|
+
cleanupOnVerify?: boolean | undefined;
|
|
84
|
+
} | undefined;
|
|
85
|
+
}>>;
|
|
86
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
87
|
+
/**
|
|
88
|
+
* Load configuration from .alpha/config.json
|
|
89
|
+
* Falls back to defaults if file doesn't exist
|
|
90
|
+
*/
|
|
91
|
+
export declare function loadConfig(): Promise<Config>;
|
|
92
|
+
/**
|
|
93
|
+
* Save configuration to .alpha/config.json
|
|
94
|
+
*/
|
|
95
|
+
export declare function saveConfig(config: Partial<Config>): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Get configuration with overrides
|
|
98
|
+
*/
|
|
99
|
+
export declare function getConfigWithOverrides(overrides?: Partial<Config>): Promise<Config>;
|
|
100
|
+
/**
|
|
101
|
+
* Initialize default configuration file
|
|
102
|
+
*/
|
|
103
|
+
export declare function initializeConfig(): Promise<Config>;
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiBJ,CAAC;AAEf,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AASlD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CA4BlD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAczF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAWxD"}
|