@codebakers/cli 1.4.3 → 1.4.5
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/generate.js +8 -2
- package/dist/commands/init.js +8 -2
- package/dist/commands/scaffold.js +10 -4
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/commands/generate.ts +9 -2
- package/src/commands/init.ts +9 -2
- package/src/commands/scaffold.ts +11 -4
- package/src/index.ts +1 -1
|
@@ -487,13 +487,19 @@ async function generate(options) {
|
|
|
487
487
|
// If type not provided, ask
|
|
488
488
|
if (!type) {
|
|
489
489
|
console.log(chalk_1.default.white(' What would you like to generate?\n'));
|
|
490
|
+
console.log(chalk_1.default.gray(' 0. ') + chalk_1.default.magenta('You Decide') + chalk_1.default.gray(' - Let AI pick based on context'));
|
|
490
491
|
for (const gen of generators) {
|
|
491
492
|
console.log(chalk_1.default.gray(` ${gen.key}. `) + chalk_1.default.cyan(gen.name) + chalk_1.default.gray(` - ${gen.desc}`));
|
|
492
493
|
}
|
|
493
494
|
console.log('');
|
|
494
495
|
let choice = '';
|
|
495
|
-
while (!['1', '2', '3', '4', '5', '6', '7'].includes(choice)) {
|
|
496
|
-
choice = await prompt(' Enter
|
|
496
|
+
while (!['0', '1', '2', '3', '4', '5', '6', '7'].includes(choice)) {
|
|
497
|
+
choice = await prompt(' Enter 0-7: ');
|
|
498
|
+
}
|
|
499
|
+
// "You Decide" defaults to component (most common)
|
|
500
|
+
if (choice === '0') {
|
|
501
|
+
console.log(chalk_1.default.magenta(' → AI chose: component (most common)\n'));
|
|
502
|
+
choice = '1';
|
|
497
503
|
}
|
|
498
504
|
type = generators.find(g => g.key === choice)?.name;
|
|
499
505
|
}
|
package/dist/commands/init.js
CHANGED
|
@@ -695,12 +695,18 @@ async function init() {
|
|
|
695
695
|
else {
|
|
696
696
|
console.log(chalk_1.default.gray(' A PRD helps the AI understand what you\'re building.\n'));
|
|
697
697
|
console.log(chalk_1.default.white(' How would you like to set up your PRD?\n'));
|
|
698
|
+
console.log(chalk_1.default.gray(' 0. ') + chalk_1.default.magenta('You Decide') + chalk_1.default.gray(' - Let AI pick the best option'));
|
|
698
699
|
console.log(chalk_1.default.gray(' 1. ') + chalk_1.default.cyan('CREATE TEMPLATE') + chalk_1.default.gray(' - I\'ll fill it out'));
|
|
699
700
|
console.log(chalk_1.default.gray(' 2. ') + chalk_1.default.cyan('PASTE CONTENT') + chalk_1.default.gray(' - I have requirements ready'));
|
|
700
701
|
console.log(chalk_1.default.gray(' 3. ') + chalk_1.default.cyan('SKIP FOR NOW') + chalk_1.default.gray(' - I\'ll add it later\n'));
|
|
701
702
|
let prdChoice = '';
|
|
702
|
-
while (!['1', '2', '3'].includes(prdChoice)) {
|
|
703
|
-
prdChoice = await prompt(' Enter 1, 2, or 3: ');
|
|
703
|
+
while (!['0', '1', '2', '3'].includes(prdChoice)) {
|
|
704
|
+
prdChoice = await prompt(' Enter 0, 1, 2, or 3: ');
|
|
705
|
+
}
|
|
706
|
+
// "You Decide" defaults to creating a template (most helpful)
|
|
707
|
+
if (prdChoice === '0') {
|
|
708
|
+
console.log(chalk_1.default.magenta(' → AI chose: Create Template (recommended)\n'));
|
|
709
|
+
prdChoice = '1';
|
|
704
710
|
}
|
|
705
711
|
if (prdChoice === '1') {
|
|
706
712
|
// Create template
|
|
@@ -308,7 +308,7 @@ async function scaffold() {
|
|
|
308
308
|
return;
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
|
-
// Ask about experience level
|
|
311
|
+
// Ask about experience level (user must decide - AI can't know this)
|
|
312
312
|
console.log(chalk_1.default.white('\n What\'s your experience level?\n'));
|
|
313
313
|
console.log(chalk_1.default.gray(' 1. ') + chalk_1.default.cyan('Beginner') + chalk_1.default.gray(' - New to coding, explain everything'));
|
|
314
314
|
console.log(chalk_1.default.gray(' 2. ') + chalk_1.default.cyan('Intermediate') + chalk_1.default.gray(' - Know some coding, brief explanations'));
|
|
@@ -320,6 +320,7 @@ async function scaffold() {
|
|
|
320
320
|
const isBeginnerMode = experienceLevel === '1';
|
|
321
321
|
// Select stack with explanations for beginners
|
|
322
322
|
console.log(chalk_1.default.white('\n Select your stack:\n'));
|
|
323
|
+
console.log(chalk_1.default.gray(' 0. ') + chalk_1.default.magenta('You Decide') + chalk_1.default.gray(' - Let AI pick the best option'));
|
|
323
324
|
if (isBeginnerMode) {
|
|
324
325
|
console.log(chalk_1.default.gray(' 1. ') + chalk_1.default.cyan('Next.js + Supabase + Drizzle') + chalk_1.default.green(' (Recommended)'));
|
|
325
326
|
console.log(chalk_1.default.gray(' ') + chalk_1.default.dim('Next.js = Framework for building websites with React'));
|
|
@@ -334,13 +335,18 @@ async function scaffold() {
|
|
|
334
335
|
console.log('');
|
|
335
336
|
}
|
|
336
337
|
else {
|
|
337
|
-
console.log(chalk_1.default.gray(' 1. ') + chalk_1.default.cyan('Next.js + Supabase + Drizzle') + chalk_1.default.
|
|
338
|
+
console.log(chalk_1.default.gray(' 1. ') + chalk_1.default.cyan('Next.js + Supabase + Drizzle') + chalk_1.default.green(' (Recommended)'));
|
|
338
339
|
console.log(chalk_1.default.gray(' 2. ') + chalk_1.default.cyan('Next.js + Prisma') + chalk_1.default.gray(' (Coming soon)'));
|
|
339
340
|
console.log(chalk_1.default.gray(' 3. ') + chalk_1.default.cyan('Express API') + chalk_1.default.gray(' (Coming soon)\n'));
|
|
340
341
|
}
|
|
341
342
|
let stackChoice = '';
|
|
342
|
-
while (!['1', '2', '3'].includes(stackChoice)) {
|
|
343
|
-
stackChoice = await prompt(' Enter 1, 2, or 3: ');
|
|
343
|
+
while (!['0', '1', '2', '3'].includes(stackChoice)) {
|
|
344
|
+
stackChoice = await prompt(' Enter 0, 1, 2, or 3: ');
|
|
345
|
+
}
|
|
346
|
+
// "You Decide" defaults to recommended stack
|
|
347
|
+
if (stackChoice === '0') {
|
|
348
|
+
console.log(chalk_1.default.magenta(' → AI chose: Next.js + Supabase + Drizzle (recommended)\n'));
|
|
349
|
+
stackChoice = '1';
|
|
344
350
|
}
|
|
345
351
|
if (stackChoice !== '1') {
|
|
346
352
|
console.log(chalk_1.default.yellow('\n That stack is coming soon! Using Next.js + Supabase + Drizzle.\n'));
|
package/dist/index.js
CHANGED
|
@@ -53,7 +53,7 @@ const program = new commander_1.Command();
|
|
|
53
53
|
program
|
|
54
54
|
.name('codebakers')
|
|
55
55
|
.description('CodeBakers CLI - Production patterns for AI-assisted development')
|
|
56
|
-
.version('1.4.
|
|
56
|
+
.version('1.4.5');
|
|
57
57
|
// Primary command - one-time setup
|
|
58
58
|
program
|
|
59
59
|
.command('setup')
|
package/package.json
CHANGED
package/src/commands/generate.ts
CHANGED
|
@@ -517,14 +517,21 @@ export async function generate(options: GenerateOptions): Promise<void> {
|
|
|
517
517
|
// If type not provided, ask
|
|
518
518
|
if (!type) {
|
|
519
519
|
console.log(chalk.white(' What would you like to generate?\n'));
|
|
520
|
+
console.log(chalk.gray(' 0. ') + chalk.magenta('You Decide') + chalk.gray(' - Let AI pick based on context'));
|
|
520
521
|
for (const gen of generators) {
|
|
521
522
|
console.log(chalk.gray(` ${gen.key}. `) + chalk.cyan(gen.name) + chalk.gray(` - ${gen.desc}`));
|
|
522
523
|
}
|
|
523
524
|
console.log('');
|
|
524
525
|
|
|
525
526
|
let choice = '';
|
|
526
|
-
while (!['1', '2', '3', '4', '5', '6', '7'].includes(choice)) {
|
|
527
|
-
choice = await prompt(' Enter
|
|
527
|
+
while (!['0', '1', '2', '3', '4', '5', '6', '7'].includes(choice)) {
|
|
528
|
+
choice = await prompt(' Enter 0-7: ');
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// "You Decide" defaults to component (most common)
|
|
532
|
+
if (choice === '0') {
|
|
533
|
+
console.log(chalk.magenta(' → AI chose: component (most common)\n'));
|
|
534
|
+
choice = '1';
|
|
528
535
|
}
|
|
529
536
|
|
|
530
537
|
type = generators.find(g => g.key === choice)?.name;
|
package/src/commands/init.ts
CHANGED
|
@@ -743,13 +743,20 @@ export async function init(): Promise<void> {
|
|
|
743
743
|
} else {
|
|
744
744
|
console.log(chalk.gray(' A PRD helps the AI understand what you\'re building.\n'));
|
|
745
745
|
console.log(chalk.white(' How would you like to set up your PRD?\n'));
|
|
746
|
+
console.log(chalk.gray(' 0. ') + chalk.magenta('You Decide') + chalk.gray(' - Let AI pick the best option'));
|
|
746
747
|
console.log(chalk.gray(' 1. ') + chalk.cyan('CREATE TEMPLATE') + chalk.gray(' - I\'ll fill it out'));
|
|
747
748
|
console.log(chalk.gray(' 2. ') + chalk.cyan('PASTE CONTENT') + chalk.gray(' - I have requirements ready'));
|
|
748
749
|
console.log(chalk.gray(' 3. ') + chalk.cyan('SKIP FOR NOW') + chalk.gray(' - I\'ll add it later\n'));
|
|
749
750
|
|
|
750
751
|
let prdChoice = '';
|
|
751
|
-
while (!['1', '2', '3'].includes(prdChoice)) {
|
|
752
|
-
prdChoice = await prompt(' Enter 1, 2, or 3: ');
|
|
752
|
+
while (!['0', '1', '2', '3'].includes(prdChoice)) {
|
|
753
|
+
prdChoice = await prompt(' Enter 0, 1, 2, or 3: ');
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
// "You Decide" defaults to creating a template (most helpful)
|
|
757
|
+
if (prdChoice === '0') {
|
|
758
|
+
console.log(chalk.magenta(' → AI chose: Create Template (recommended)\n'));
|
|
759
|
+
prdChoice = '1';
|
|
753
760
|
}
|
|
754
761
|
|
|
755
762
|
if (prdChoice === '1') {
|
package/src/commands/scaffold.ts
CHANGED
|
@@ -288,7 +288,7 @@ export async function scaffold(): Promise<void> {
|
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
// Ask about experience level
|
|
291
|
+
// Ask about experience level (user must decide - AI can't know this)
|
|
292
292
|
console.log(chalk.white('\n What\'s your experience level?\n'));
|
|
293
293
|
console.log(chalk.gray(' 1. ') + chalk.cyan('Beginner') + chalk.gray(' - New to coding, explain everything'));
|
|
294
294
|
console.log(chalk.gray(' 2. ') + chalk.cyan('Intermediate') + chalk.gray(' - Know some coding, brief explanations'));
|
|
@@ -304,6 +304,7 @@ export async function scaffold(): Promise<void> {
|
|
|
304
304
|
// Select stack with explanations for beginners
|
|
305
305
|
console.log(chalk.white('\n Select your stack:\n'));
|
|
306
306
|
|
|
307
|
+
console.log(chalk.gray(' 0. ') + chalk.magenta('You Decide') + chalk.gray(' - Let AI pick the best option'));
|
|
307
308
|
if (isBeginnerMode) {
|
|
308
309
|
console.log(chalk.gray(' 1. ') + chalk.cyan('Next.js + Supabase + Drizzle') + chalk.green(' (Recommended)'));
|
|
309
310
|
console.log(chalk.gray(' ') + chalk.dim('Next.js = Framework for building websites with React'));
|
|
@@ -317,14 +318,20 @@ export async function scaffold(): Promise<void> {
|
|
|
317
318
|
console.log(chalk.gray(' ') + chalk.dim('Express = Lightweight server, good for APIs without a frontend'));
|
|
318
319
|
console.log('');
|
|
319
320
|
} else {
|
|
320
|
-
console.log(chalk.gray(' 1. ') + chalk.cyan('Next.js + Supabase + Drizzle') + chalk.
|
|
321
|
+
console.log(chalk.gray(' 1. ') + chalk.cyan('Next.js + Supabase + Drizzle') + chalk.green(' (Recommended)'));
|
|
321
322
|
console.log(chalk.gray(' 2. ') + chalk.cyan('Next.js + Prisma') + chalk.gray(' (Coming soon)'));
|
|
322
323
|
console.log(chalk.gray(' 3. ') + chalk.cyan('Express API') + chalk.gray(' (Coming soon)\n'));
|
|
323
324
|
}
|
|
324
325
|
|
|
325
326
|
let stackChoice = '';
|
|
326
|
-
while (!['1', '2', '3'].includes(stackChoice)) {
|
|
327
|
-
stackChoice = await prompt(' Enter 1, 2, or 3: ');
|
|
327
|
+
while (!['0', '1', '2', '3'].includes(stackChoice)) {
|
|
328
|
+
stackChoice = await prompt(' Enter 0, 1, 2, or 3: ');
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// "You Decide" defaults to recommended stack
|
|
332
|
+
if (stackChoice === '0') {
|
|
333
|
+
console.log(chalk.magenta(' → AI chose: Next.js + Supabase + Drizzle (recommended)\n'));
|
|
334
|
+
stackChoice = '1';
|
|
328
335
|
}
|
|
329
336
|
|
|
330
337
|
if (stackChoice !== '1') {
|
package/src/index.ts
CHANGED