lynxprompt 1.4.13 → 2.0.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/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/index.ts
4
4
  import { Command } from "commander";
5
- import chalk18 from "chalk";
5
+ import chalk19 from "chalk";
6
6
 
7
7
  // src/commands/login.ts
8
8
  import chalk from "chalk";
@@ -18,7 +18,7 @@ var config = new Conf({
18
18
  },
19
19
  apiUrl: {
20
20
  type: "string",
21
- default: "https://lynxprompt.com"
21
+ default: "https://api.lynxprompt.com"
22
22
  },
23
23
  user: {
24
24
  type: "object",
@@ -31,7 +31,7 @@ var config = new Conf({
31
31
  }
32
32
  },
33
33
  defaults: {
34
- apiUrl: "https://lynxprompt.com"
34
+ apiUrl: "https://api.lynxprompt.com"
35
35
  }
36
36
  });
37
37
  function getToken() {
@@ -55,6 +55,9 @@ function getApiUrl() {
55
55
  }
56
56
  return config.get("apiUrl");
57
57
  }
58
+ function setApiUrl(url) {
59
+ config.set("apiUrl", url);
60
+ }
58
61
  function getUser() {
59
62
  return config.get("user");
60
63
  }
@@ -64,6 +67,9 @@ function setUser(user) {
64
67
  function isAuthenticated() {
65
68
  return !!getToken();
66
69
  }
70
+ function getConfigPath() {
71
+ return config.path;
72
+ }
67
73
 
68
74
  // src/api.ts
69
75
  var ApiClient = class {
@@ -350,24 +356,16 @@ function sleep(ms) {
350
356
  return new Promise((resolve) => setTimeout(resolve, ms));
351
357
  }
352
358
  function displayWelcome(user) {
353
- const plan = user.plan?.toUpperCase() || "FREE";
354
359
  const name = user.name || user.email.split("@")[0];
355
- const planConfig = {
356
- FREE: { color: chalk.gray, emoji: "\u{1F193}", badge: "Users" },
357
- TEAMS: { color: chalk.cyan, emoji: "\u{1F465}", badge: "Teams" }
358
- };
359
- const effectivePlan = plan === "PRO" || plan === "MAX" ? "FREE" : plan;
360
- const config2 = planConfig[effectivePlan] || planConfig.FREE;
361
360
  const W = 46;
362
361
  const b = chalk.bold;
363
362
  const pad = (s, len) => s + " ".repeat(Math.max(0, len - s.length));
364
363
  console.log();
365
364
  console.log(b("\u250C" + "\u2500".repeat(W) + "\u2510"));
366
365
  console.log(b("\u2502") + " ".repeat(W) + b("\u2502"));
367
- console.log(b("\u2502") + pad(` ${config2.emoji} Welcome to LynxPrompt CLI!`, W) + b("\u2502"));
366
+ console.log(b("\u2502") + pad(" \u{1F431} Welcome to LynxPrompt CLI!", W) + b("\u2502"));
368
367
  console.log(b("\u2502") + " ".repeat(W) + b("\u2502"));
369
368
  console.log(b("\u2502") + pad(` User: ${name}`, W) + b("\u2502"));
370
- console.log(b("\u2502") + pad(` Plan: ${config2.badge}`, W) + b("\u2502"));
371
369
  console.log(b("\u2502") + " ".repeat(W) + b("\u2502"));
372
370
  console.log(b("\u2514" + "\u2500".repeat(W) + "\u2518"));
373
371
  console.log();
@@ -381,12 +379,6 @@ function displayWelcome(user) {
381
379
  console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp diff") + chalk.gray(" - Compare local vs cloud"));
382
380
  console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp whoami") + chalk.gray(" - Show account info"));
383
381
  console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp logout") + chalk.gray(" - Sign out of CLI"));
384
- if (effectivePlan === "TEAMS") {
385
- console.log();
386
- console.log(chalk.cyan(" \u26A1") + " " + chalk.white("AI-powered editing") + chalk.gray(" - AI assistant for configs"));
387
- console.log(chalk.cyan(" \u{1F465}") + " " + chalk.white("Team blueprints") + chalk.gray(" - Share with your team"));
388
- console.log(chalk.cyan(" \u{1F465}") + " " + chalk.white("SSO integration") + chalk.gray(" - Enterprise authentication"));
389
- }
390
382
  console.log();
391
383
  console.log(chalk.gray("Token stored securely. Run ") + chalk.cyan("lynxp --help") + chalk.gray(" to see all commands."));
392
384
  console.log();
@@ -422,7 +414,7 @@ async function whoamiCommand() {
422
414
  id: user.id,
423
415
  email: user.email,
424
416
  name: user.name,
425
- plan: user.subscription.plan
417
+ plan: user.plan
426
418
  });
427
419
  console.log();
428
420
  console.log(chalk3.cyan("\u{1F431} LynxPrompt Account"));
@@ -434,14 +426,6 @@ async function whoamiCommand() {
434
426
  if (user.display_name) {
435
427
  console.log(` ${chalk3.gray("Display:")} ${user.display_name}`);
436
428
  }
437
- console.log(` ${chalk3.gray("Plan:")} ${formatPlan(user.subscription.plan)}`);
438
- if (user.subscription.status) {
439
- console.log(` ${chalk3.gray("Status:")} ${user.subscription.status}`);
440
- }
441
- if (user.subscription.current_period_end) {
442
- const endDate = new Date(user.subscription.current_period_end);
443
- console.log(` ${chalk3.gray("Renews:")} ${endDate.toLocaleDateString()}`);
444
- }
445
429
  console.log();
446
430
  console.log(` ${chalk3.gray("Blueprints:")} ${user.stats.blueprints_count}`);
447
431
  console.log(` ${chalk3.gray("Member since:")} ${new Date(user.created_at).toLocaleDateString()}`);
@@ -452,8 +436,7 @@ async function whoamiCommand() {
452
436
  if (error.statusCode === 401) {
453
437
  console.error(chalk3.red("Your session has expired. Please run 'lynxprompt login' again."));
454
438
  } else if (error.statusCode === 403) {
455
- console.error(chalk3.red("API access error. Please check your subscription."));
456
- console.error(chalk3.gray("Visit https://lynxprompt.com/pricing for plan details."));
439
+ console.error(chalk3.red("API access error."));
457
440
  } else {
458
441
  console.error(chalk3.red(`Error: ${error.message}`));
459
442
  }
@@ -463,16 +446,6 @@ async function whoamiCommand() {
463
446
  process.exit(1);
464
447
  }
465
448
  }
466
- function formatPlan(plan) {
467
- const planColors = {
468
- FREE: chalk3.gray,
469
- TEAMS: chalk3.cyan
470
- };
471
- const displayPlan = plan === "PRO" || plan === "MAX" ? "FREE" : plan;
472
- const displayName = displayPlan === "FREE" ? "Users" : displayPlan;
473
- const colorFn = planColors[displayPlan] || chalk3.white;
474
- return colorFn(displayName);
475
- }
476
449
 
477
450
  // src/commands/list.ts
478
451
  import chalk4 from "chalk";
@@ -2777,7 +2750,13 @@ var AI_BEHAVIOR_DESCRIPTIONS = {
2777
2750
  prefer_simple: "Prefer simpler solutions over clever ones",
2778
2751
  test_first: "Write tests before implementing new functionality (TDD)",
2779
2752
  no_console: "Remove console.log/print statements before committing",
2780
- type_strict: "Be strict with types - avoid any/Any/Object types"
2753
+ type_strict: "Be strict with types - avoid any/Any/Object types",
2754
+ // Burke Holland-inspired rules
2755
+ code_for_llms: "Optimize code for LLM reasoning: prefer flat/explicit patterns, minimal abstractions, structured logging, and linear control flow",
2756
+ self_improving: "When you learn new project patterns or conventions, suggest updates to this configuration file",
2757
+ verify_work: "Always verify your work before returning: run tests, check builds, confirm changes work as expected",
2758
+ terminal_management: "Reuse existing terminals when possible. Close terminals you no longer need",
2759
+ check_docs_first: "Always check documentation (via MCP or project docs) before assuming knowledge about APIs or libraries"
2781
2760
  };
2782
2761
  var IMPORTANT_FILES_PATHS = {
2783
2762
  readme: "README.md",
@@ -3216,13 +3195,13 @@ function generateFileContent(options, platform2) {
3216
3195
  sections.push(`# Using curl with environment variable (token stored in $${tokenEnvVar}):`);
3217
3196
  sections.push("");
3218
3197
  sections.push("# Push local changes to cloud:");
3219
- sections.push(`curl -X PUT "https://lynxprompt.com/api/v1/blueprints/${bpId}" \\`);
3198
+ sections.push(`curl -X PUT "https://api.lynxprompt.com/api/v1/blueprints/${bpId}" \\`);
3220
3199
  sections.push(` -H "Authorization: Bearer $${tokenEnvVar}" \\`);
3221
3200
  sections.push(' -H "Content-Type: application/json" \\');
3222
3201
  sections.push(` -d "{\\"content\\": \\"$(cat ${fileName} | jq -Rs .)\\"}"`);
3223
3202
  sections.push("");
3224
3203
  sections.push("# Pull cloud changes to local:");
3225
- sections.push(`curl -s "https://lynxprompt.com/api/v1/blueprints/${bpId}" \\`);
3204
+ sections.push(`curl -s "https://api.lynxprompt.com/api/v1/blueprints/${bpId}" \\`);
3226
3205
  sections.push(` -H "Authorization: Bearer $${tokenEnvVar}" | jq -r '.content' > ${fileName}`);
3227
3206
  sections.push("");
3228
3207
  sections.push(`# Set your token: export ${tokenEnvVar}="your_token_here"`);
@@ -3255,16 +3234,15 @@ function generateFileContent(options, platform2) {
3255
3234
  if (isMarkdown || isMdc) {
3256
3235
  sections.push("## Persona");
3257
3236
  sections.push("");
3237
+ sections.push(`You assist developers working on ${projectName}.`);
3258
3238
  if (personaDesc) {
3259
- sections.push(`You are ${personaDesc}. You assist developers working on ${projectName}.`);
3260
- } else {
3261
- sections.push(`You assist developers working on ${projectName}.`);
3239
+ sections.push("");
3240
+ sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);
3262
3241
  }
3263
3242
  } else {
3243
+ sections.push(`You assist developers working on ${projectName}.`);
3264
3244
  if (personaDesc) {
3265
- sections.push(`You are ${personaDesc}. You assist developers working on ${projectName}.`);
3266
- } else {
3267
- sections.push(`You assist developers working on ${projectName}.`);
3245
+ sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);
3268
3246
  }
3269
3247
  }
3270
3248
  if (options.description) {
@@ -3466,6 +3444,11 @@ function generateFileContent(options, platform2) {
3466
3444
  sections.push(`- ${planModeDescriptions[options.planModeFrequency]}`);
3467
3445
  }
3468
3446
  }
3447
+ if (options.attemptWorkarounds === true) {
3448
+ sections.push("- When stuck, **attempt creative workarounds** before asking for help");
3449
+ } else if (options.attemptWorkarounds === false) {
3450
+ sections.push("- When stuck, **stop and ask** rather than attempting workarounds");
3451
+ }
3469
3452
  sections.push("");
3470
3453
  }
3471
3454
  }
@@ -3482,6 +3465,37 @@ function generateFileContent(options, platform2) {
3482
3465
  }
3483
3466
  sections.push("");
3484
3467
  }
3468
+ if (options.mcpServers) {
3469
+ const servers = options.mcpServers.split(",").map((s) => s.trim()).filter(Boolean);
3470
+ if (servers.length > 0 && (isMarkdown || isMdc)) {
3471
+ sections.push("## MCP Servers");
3472
+ sections.push("");
3473
+ sections.push("The developer has these MCP (Model Context Protocol) servers available. Use them when relevant:");
3474
+ sections.push("");
3475
+ for (const server of servers) {
3476
+ sections.push(`- ${server}`);
3477
+ }
3478
+ sections.push("");
3479
+ }
3480
+ }
3481
+ if ((options.serverAccess || options.manualDeployment) && (isMarkdown || isMdc)) {
3482
+ sections.push("## Infrastructure");
3483
+ sections.push("");
3484
+ if (options.serverAccess) {
3485
+ const keyInfo = options.sshKeyPath ? `SSH key: \`${options.sshKeyPath}\`` : "SSH key in default location (~/.ssh/)";
3486
+ sections.push(`- **Server access**: via SSH. ${keyInfo}`);
3487
+ }
3488
+ if (options.manualDeployment && options.deploymentMethod) {
3489
+ const methods = {
3490
+ portainer: "Portainer (GitOps stacks)",
3491
+ docker_compose: "Docker Compose (manual)",
3492
+ kubernetes: "Kubernetes (kubectl apply)",
3493
+ bare_metal: "Bare metal (direct deployment)"
3494
+ };
3495
+ sections.push(`- **Deployment**: ${methods[options.deploymentMethod] || options.deploymentMethod}`);
3496
+ }
3497
+ sections.push("");
3498
+ }
3485
3499
  if (options.importantFiles && options.importantFiles.length > 0) {
3486
3500
  if (isMarkdown || isMdc) {
3487
3501
  sections.push("## Important Files to Read");
@@ -4086,9 +4100,1389 @@ function generateYamlConfig(options, platform2) {
4086
4100
  return lines.join("\n");
4087
4101
  }
4088
4102
 
4103
+ // ../packages/shared/dist/wizard/languages.js
4104
+ var LANGUAGES = [
4105
+ // Popular
4106
+ { id: "typescript", label: "TypeScript", icon: "\u{1F4D8}" },
4107
+ { id: "javascript", label: "JavaScript", icon: "\u{1F4D2}" },
4108
+ { id: "python", label: "Python", icon: "\u{1F40D}" },
4109
+ { id: "go", label: "Go", icon: "\u{1F439}" },
4110
+ { id: "rust", label: "Rust", icon: "\u{1F980}" },
4111
+ { id: "java", label: "Java", icon: "\u2615" },
4112
+ { id: "csharp", label: "C#", icon: "\u{1F3AF}" },
4113
+ { id: "php", label: "PHP", icon: "\u{1F418}" },
4114
+ { id: "ruby", label: "Ruby", icon: "\u{1F48E}" },
4115
+ { id: "swift", label: "Swift", icon: "\u{1F34E}" },
4116
+ { id: "kotlin", label: "Kotlin", icon: "\u{1F3A8}" },
4117
+ { id: "cpp", label: "C++", icon: "\u2699\uFE0F" },
4118
+ // Additional
4119
+ { id: "c", label: "C", icon: "\u{1F527}" },
4120
+ { id: "scala", label: "Scala", icon: "\u{1F534}" },
4121
+ { id: "elixir", label: "Elixir", icon: "\u{1F4A7}" },
4122
+ { id: "clojure", label: "Clojure", icon: "\u{1F52E}" },
4123
+ { id: "haskell", label: "Haskell", icon: "\u03BB" },
4124
+ { id: "fsharp", label: "F#", icon: "\u{1F7E6}" },
4125
+ { id: "dart", label: "Dart", icon: "\u{1F3AF}" },
4126
+ { id: "lua", label: "Lua", icon: "\u{1F319}" },
4127
+ { id: "perl", label: "Perl", icon: "\u{1F42A}" },
4128
+ { id: "r", label: "R", icon: "\u{1F4CA}" },
4129
+ { id: "julia", label: "Julia", icon: "\u{1F52C}" },
4130
+ { id: "zig", label: "Zig", icon: "\u26A1" },
4131
+ { id: "nim", label: "Nim", icon: "\u{1F451}" },
4132
+ { id: "ocaml", label: "OCaml", icon: "\u{1F42B}" },
4133
+ { id: "erlang", label: "Erlang", icon: "\u{1F4DE}" },
4134
+ { id: "groovy", label: "Groovy", icon: "\u{1F3B5}" },
4135
+ { id: "objectivec", label: "Objective-C", icon: "\u{1F4F1}" },
4136
+ { id: "shell", label: "Shell/Bash", icon: "\u{1F41A}" },
4137
+ { id: "powershell", label: "PowerShell", icon: "\u{1F4BB}" },
4138
+ { id: "sql", label: "SQL", icon: "\u{1F5C3}\uFE0F" },
4139
+ // Blockchain
4140
+ { id: "solidity", label: "Solidity", icon: "\u26D3\uFE0F" },
4141
+ { id: "move", label: "Move", icon: "\u{1F512}" },
4142
+ { id: "cairo", label: "Cairo", icon: "\u{1F3DB}\uFE0F" },
4143
+ { id: "wasm", label: "WebAssembly", icon: "\u{1F310}" },
4144
+ // IaC & DevOps Languages
4145
+ { id: "hcl", label: "HCL (Terraform)", icon: "\u{1F3D7}\uFE0F" },
4146
+ { id: "yaml", label: "YAML", icon: "\u{1F4C4}" },
4147
+ { id: "jsonnet", label: "Jsonnet", icon: "\u{1F527}" },
4148
+ { id: "dhall", label: "Dhall", icon: "\u2699\uFE0F" },
4149
+ { id: "cue", label: "CUE", icon: "\u{1F537}" },
4150
+ { id: "starlark", label: "Starlark", icon: "\u2B50" },
4151
+ { id: "rego", label: "Rego (OPA)", icon: "\u{1F6E1}\uFE0F" },
4152
+ { id: "nix", label: "Nix", icon: "\u2744\uFE0F" }
4153
+ ];
4154
+ var LANGUAGE_IDS = LANGUAGES.map((l) => l.id);
4155
+
4156
+ // ../packages/shared/dist/wizard/frameworks.js
4157
+ var FRAMEWORKS = [
4158
+ // Frontend
4159
+ { id: "react", label: "React", icon: "\u269B\uFE0F" },
4160
+ { id: "nextjs", label: "Next.js", icon: "\u25B2" },
4161
+ { id: "vue", label: "Vue.js", icon: "\u{1F49A}" },
4162
+ { id: "nuxt", label: "Nuxt.js", icon: "\u{1F49A}" },
4163
+ { id: "angular", label: "Angular", icon: "\u{1F170}\uFE0F" },
4164
+ { id: "svelte", label: "Svelte", icon: "\u{1F525}" },
4165
+ { id: "sveltekit", label: "SvelteKit", icon: "\u{1F525}" },
4166
+ { id: "solid", label: "SolidJS", icon: "\u{1F48E}" },
4167
+ { id: "qwik", label: "Qwik", icon: "\u26A1" },
4168
+ { id: "astro", label: "Astro", icon: "\u{1F680}" },
4169
+ { id: "remix", label: "Remix", icon: "\u{1F4BF}" },
4170
+ { id: "gatsby", label: "Gatsby", icon: "\u{1F7E3}" },
4171
+ // Backend Node
4172
+ { id: "express", label: "Express.js", icon: "\u{1F4E6}" },
4173
+ { id: "nestjs", label: "NestJS", icon: "\u{1F431}" },
4174
+ { id: "fastify", label: "Fastify", icon: "\u{1F680}" },
4175
+ { id: "hono", label: "Hono", icon: "\u{1F525}" },
4176
+ { id: "koa", label: "Koa", icon: "\u{1F33F}" },
4177
+ // Python
4178
+ { id: "fastapi", label: "FastAPI", icon: "\u26A1" },
4179
+ { id: "django", label: "Django", icon: "\u{1F3B8}" },
4180
+ { id: "flask", label: "Flask", icon: "\u{1F336}\uFE0F" },
4181
+ { id: "starlette", label: "Starlette", icon: "\u2B50" },
4182
+ { id: "tornado", label: "Tornado", icon: "\u{1F32A}\uFE0F" },
4183
+ { id: "pyramid", label: "Pyramid", icon: "\u{1F53A}" },
4184
+ // Java/Kotlin
4185
+ { id: "spring", label: "Spring Boot", icon: "\u{1F331}" },
4186
+ { id: "quarkus", label: "Quarkus", icon: "\u{1F537}" },
4187
+ { id: "micronaut", label: "Micronaut", icon: "\u{1F535}" },
4188
+ { id: "ktor", label: "Ktor", icon: "\u{1F3A8}" },
4189
+ // .NET
4190
+ { id: "dotnet", label: ".NET", icon: "\u{1F537}" },
4191
+ { id: "blazor", label: "Blazor", icon: "\u{1F537}" },
4192
+ // Ruby
4193
+ { id: "rails", label: "Ruby on Rails", icon: "\u{1F6E4}\uFE0F" },
4194
+ { id: "sinatra", label: "Sinatra", icon: "\u{1F3A4}" },
4195
+ { id: "hanami", label: "Hanami", icon: "\u{1F338}" },
4196
+ // Go
4197
+ { id: "gin", label: "Gin", icon: "\u{1F378}" },
4198
+ { id: "fiber", label: "Fiber", icon: "\u26A1" },
4199
+ { id: "echo", label: "Echo", icon: "\u{1F4E3}" },
4200
+ { id: "chi", label: "Chi", icon: "\u{1F439}" },
4201
+ // Rust
4202
+ { id: "actix", label: "Actix", icon: "\u{1F980}" },
4203
+ { id: "axum", label: "Axum", icon: "\u{1F980}" },
4204
+ { id: "rocket", label: "Rocket", icon: "\u{1F680}" },
4205
+ { id: "warp", label: "Warp", icon: "\u{1F980}" },
4206
+ // PHP
4207
+ { id: "laravel", label: "Laravel", icon: "\u{1F534}" },
4208
+ { id: "symfony", label: "Symfony", icon: "\u{1F3B5}" },
4209
+ { id: "lumen", label: "Lumen", icon: "\u{1F4A1}" },
4210
+ { id: "codeigniter", label: "CodeIgniter", icon: "\u{1F525}" },
4211
+ // Mobile
4212
+ { id: "react-native", label: "React Native", icon: "\u{1F4F1}" },
4213
+ { id: "flutter", label: "Flutter", icon: "\u{1F426}" },
4214
+ { id: "ionic", label: "Ionic", icon: "\u26A1" },
4215
+ { id: "expo", label: "Expo", icon: "\u{1F4F1}" },
4216
+ // Desktop
4217
+ { id: "electron", label: "Electron", icon: "\u26A1" },
4218
+ { id: "tauri", label: "Tauri", icon: "\u{1F980}" },
4219
+ // Tools/Build
4220
+ { id: "vite", label: "Vite", icon: "\u26A1" },
4221
+ { id: "webpack", label: "Webpack", icon: "\u{1F4E6}" },
4222
+ { id: "esbuild", label: "esbuild", icon: "\u{1F4E6}" },
4223
+ { id: "turbopack", label: "Turbopack", icon: "\u26A1" },
4224
+ // CSS
4225
+ { id: "tailwind", label: "Tailwind CSS", icon: "\u{1F30A}" },
4226
+ { id: "bootstrap", label: "Bootstrap", icon: "\u{1F171}\uFE0F" },
4227
+ { id: "material-ui", label: "Material UI", icon: "\u{1F3A8}" },
4228
+ { id: "chakra", label: "Chakra UI", icon: "\u26A1" },
4229
+ { id: "shadcn", label: "shadcn/ui", icon: "\u{1F3A8}" },
4230
+ // Testing
4231
+ { id: "jest", label: "Jest", icon: "\u{1F0CF}" },
4232
+ { id: "vitest", label: "Vitest", icon: "\u26A1" },
4233
+ { id: "playwright", label: "Playwright", icon: "\u{1F3AD}" },
4234
+ { id: "cypress", label: "Cypress", icon: "\u{1F332}" },
4235
+ // Data
4236
+ { id: "prisma", label: "Prisma", icon: "\u{1F537}" },
4237
+ { id: "drizzle", label: "Drizzle", icon: "\u{1F4A7}" },
4238
+ { id: "graphql", label: "GraphQL", icon: "\u25C8" },
4239
+ { id: "trpc", label: "tRPC", icon: "\u{1F537}" },
4240
+ // Additional ORMs
4241
+ { id: "typeorm", label: "TypeORM", icon: "\u{1F4E6}" },
4242
+ { id: "sequelize", label: "Sequelize", icon: "\u{1F4E6}" },
4243
+ { id: "mongoose", label: "Mongoose", icon: "\u{1F343}" },
4244
+ { id: "sqlalchemy", label: "SQLAlchemy", icon: "\u{1F40D}" },
4245
+ // DevOps/Infra - Containers
4246
+ { id: "docker", label: "Docker", icon: "\u{1F433}" },
4247
+ { id: "podman", label: "Podman", icon: "\u{1F9AD}" },
4248
+ { id: "containerd", label: "containerd", icon: "\u{1F4E6}" },
4249
+ { id: "buildah", label: "Buildah", icon: "\u{1F528}" },
4250
+ // Kubernetes & Orchestration
4251
+ { id: "kubernetes", label: "Kubernetes", icon: "\u2638\uFE0F" },
4252
+ { id: "helm", label: "Helm", icon: "\u2388" },
4253
+ { id: "kustomize", label: "Kustomize", icon: "\u{1F4CB}" },
4254
+ { id: "kubebuilder", label: "Kubebuilder", icon: "\u{1F527}" },
4255
+ { id: "operatorsdk", label: "Operator SDK", icon: "\u2699\uFE0F" },
4256
+ { id: "crossplane", label: "Crossplane", icon: "\u{1F500}" },
4257
+ { id: "k3s", label: "K3s", icon: "\u2638\uFE0F" },
4258
+ { id: "kind", label: "Kind", icon: "\u{1F4E6}" },
4259
+ { id: "minikube", label: "Minikube", icon: "\u{1F4BB}" },
4260
+ { id: "rancher", label: "Rancher", icon: "\u{1F404}" },
4261
+ { id: "openshift", label: "OpenShift", icon: "\u{1F3A9}" },
4262
+ // IaC - Infrastructure as Code
4263
+ { id: "terraform", label: "Terraform", icon: "\u{1F3D7}\uFE0F" },
4264
+ { id: "terragrunt", label: "Terragrunt", icon: "\u{1F3D7}\uFE0F" },
4265
+ { id: "opentofu", label: "OpenTofu", icon: "\u{1F3D7}\uFE0F" },
4266
+ { id: "pulumi", label: "Pulumi", icon: "\u2601\uFE0F" },
4267
+ { id: "cdktf", label: "CDK for Terraform", icon: "\u{1F3D7}\uFE0F" },
4268
+ { id: "awscdk", label: "AWS CDK", icon: "\u2601\uFE0F" },
4269
+ { id: "cloudformation", label: "CloudFormation", icon: "\u2601\uFE0F" },
4270
+ { id: "bicep", label: "Bicep (Azure)", icon: "\u{1F4AA}" },
4271
+ { id: "arm", label: "ARM Templates", icon: "\u2601\uFE0F" },
4272
+ // Configuration Management
4273
+ { id: "ansible", label: "Ansible", icon: "\u{1F527}" },
4274
+ { id: "chef", label: "Chef", icon: "\u{1F468}\u200D\u{1F373}" },
4275
+ { id: "puppet", label: "Puppet", icon: "\u{1F3AD}" },
4276
+ { id: "saltstack", label: "SaltStack", icon: "\u{1F9C2}" },
4277
+ // GitOps
4278
+ { id: "argocd", label: "ArgoCD", icon: "\u{1F419}" },
4279
+ { id: "fluxcd", label: "FluxCD", icon: "\u{1F504}" },
4280
+ { id: "jenkinsx", label: "Jenkins X", icon: "\u{1F527}" },
4281
+ // Service Mesh & Networking
4282
+ { id: "istio", label: "Istio", icon: "\u{1F578}\uFE0F" },
4283
+ { id: "linkerd", label: "Linkerd", icon: "\u{1F517}" },
4284
+ { id: "consul", label: "Consul", icon: "\u{1F50D}" },
4285
+ { id: "envoy", label: "Envoy", icon: "\u{1F4EC}" },
4286
+ { id: "nginx", label: "NGINX", icon: "\u{1F310}" },
4287
+ { id: "traefik", label: "Traefik", icon: "\u{1F6A6}" },
4288
+ { id: "caddy", label: "Caddy", icon: "\u{1F512}" },
4289
+ { id: "haproxy", label: "HAProxy", icon: "\u2696\uFE0F" },
4290
+ // Observability & Monitoring
4291
+ { id: "prometheus", label: "Prometheus", icon: "\u{1F4CA}" },
4292
+ { id: "grafana", label: "Grafana", icon: "\u{1F4C8}" },
4293
+ { id: "datadog", label: "Datadog", icon: "\u{1F415}" },
4294
+ { id: "newrelic", label: "New Relic", icon: "\u{1F4CA}" },
4295
+ { id: "opentelemetry", label: "OpenTelemetry", icon: "\u{1F52D}" },
4296
+ { id: "jaeger", label: "Jaeger", icon: "\u{1F50D}" },
4297
+ { id: "zipkin", label: "Zipkin", icon: "\u{1F50D}" },
4298
+ { id: "elk", label: "ELK Stack", icon: "\u{1F4CB}" },
4299
+ { id: "loki", label: "Loki", icon: "\u{1F4DD}" },
4300
+ { id: "fluentd", label: "Fluentd", icon: "\u{1F4E4}" },
4301
+ { id: "fluentbit", label: "Fluent Bit", icon: "\u{1F4E4}" },
4302
+ { id: "vector", label: "Vector", icon: "\u27A1\uFE0F" },
4303
+ // Secrets & Security
4304
+ { id: "vault", label: "HashiCorp Vault", icon: "\u{1F510}" },
4305
+ { id: "sops", label: "SOPS", icon: "\u{1F512}" },
4306
+ { id: "externalsecrets", label: "External Secrets", icon: "\u{1F511}" },
4307
+ { id: "sealedsecrets", label: "Sealed Secrets", icon: "\u{1F4E6}" },
4308
+ { id: "trivy", label: "Trivy", icon: "\u{1F6E1}\uFE0F" },
4309
+ { id: "snyk", label: "Snyk", icon: "\u{1F50D}" },
4310
+ { id: "falco", label: "Falco", icon: "\u{1F985}" },
4311
+ { id: "opa", label: "Open Policy Agent", icon: "\u{1F6E1}\uFE0F" },
4312
+ { id: "kyverno", label: "Kyverno", icon: "\u{1F6E1}\uFE0F" },
4313
+ // CI/CD Tools
4314
+ { id: "jenkins", label: "Jenkins", icon: "\u{1F527}" },
4315
+ { id: "tekton", label: "Tekton", icon: "\u{1F527}" },
4316
+ { id: "drone", label: "Drone CI", icon: "\u{1F41D}" },
4317
+ { id: "concourse", label: "Concourse", icon: "\u2708\uFE0F" },
4318
+ { id: "spinnaker", label: "Spinnaker", icon: "\u{1F3A1}" },
4319
+ // Message Queues
4320
+ { id: "kafka", label: "Apache Kafka", icon: "\u{1F4E8}" },
4321
+ { id: "rabbitmq", label: "RabbitMQ", icon: "\u{1F430}" },
4322
+ { id: "nats", label: "NATS", icon: "\u{1F4EC}" },
4323
+ { id: "pulsar", label: "Apache Pulsar", icon: "\u2B50" },
4324
+ { id: "sqs", label: "AWS SQS", icon: "\u{1F4EC}" },
4325
+ // ML/AI Ops
4326
+ { id: "mlflow", label: "MLflow", icon: "\u{1F9EA}" },
4327
+ { id: "kubeflow", label: "Kubeflow", icon: "\u2638\uFE0F" },
4328
+ { id: "airflow", label: "Apache Airflow", icon: "\u{1F32C}\uFE0F" },
4329
+ { id: "dagster", label: "Dagster", icon: "\u{1F4CA}" },
4330
+ { id: "prefect", label: "Prefect", icon: "\u{1F504}" },
4331
+ { id: "ray", label: "Ray", icon: "\u2600\uFE0F" },
4332
+ // Serverless
4333
+ { id: "serverless", label: "Serverless Framework", icon: "\u26A1" },
4334
+ { id: "sam", label: "AWS SAM", icon: "\u2601\uFE0F" },
4335
+ { id: "openfaas", label: "OpenFaaS", icon: "\u03BB" },
4336
+ { id: "knative", label: "Knative", icon: "\u2638\uFE0F" },
4337
+ // State Management
4338
+ { id: "redux", label: "Redux", icon: "\u{1F504}" },
4339
+ { id: "zustand", label: "Zustand", icon: "\u{1F43B}" },
4340
+ { id: "tanstack", label: "TanStack Query", icon: "\u{1F52E}" },
4341
+ // Additional UI
4342
+ { id: "mui", label: "Material UI", icon: "\u{1F3A8}" },
4343
+ { id: "antdesign", label: "Ant Design", icon: "\u{1F41C}" }
4344
+ ];
4345
+ var FRAMEWORK_IDS = FRAMEWORKS.map((f) => f.id);
4346
+
4347
+ // ../packages/shared/dist/wizard/databases.js
4348
+ var DATABASES = [
4349
+ // === OPEN SOURCE RELATIONAL ===
4350
+ { id: "postgresql", label: "PostgreSQL", icon: "\u{1F418}", category: "opensource" },
4351
+ { id: "mysql", label: "MySQL", icon: "\u{1F42C}", category: "opensource" },
4352
+ { id: "mariadb", label: "MariaDB", icon: "\u{1F9AD}", category: "opensource" },
4353
+ { id: "sqlite", label: "SQLite", icon: "\u{1F4E6}", category: "opensource" },
4354
+ { id: "cockroachdb", label: "CockroachDB", icon: "\u{1FAB3}", category: "opensource" },
4355
+ { id: "yugabytedb", label: "YugabyteDB", icon: "\u{1F535}", category: "opensource" },
4356
+ { id: "tidb", label: "TiDB", icon: "\u26A1", category: "opensource" },
4357
+ { id: "vitess", label: "Vitess", icon: "\u{1F7E2}", category: "opensource" },
4358
+ // === OPEN SOURCE NOSQL - Document ===
4359
+ { id: "mongodb", label: "MongoDB", icon: "\u{1F343}", category: "opensource" },
4360
+ { id: "couchdb", label: "CouchDB", icon: "\u{1F6CB}\uFE0F", category: "opensource" },
4361
+ { id: "arangodb", label: "ArangoDB", icon: "\u{1F951}", category: "opensource" },
4362
+ { id: "ferretdb", label: "FerretDB", icon: "\u{1F43B}", category: "opensource" },
4363
+ { id: "pouchdb", label: "PouchDB", icon: "\u{1F4F1}", category: "opensource" },
4364
+ // === OPEN SOURCE NOSQL - Key-Value ===
4365
+ { id: "redis", label: "Redis", icon: "\u{1F534}", category: "opensource" },
4366
+ { id: "valkey", label: "Valkey", icon: "\u{1F511}", category: "opensource" },
4367
+ { id: "keydb", label: "KeyDB", icon: "\u{1F5DD}\uFE0F", category: "opensource" },
4368
+ { id: "dragonfly", label: "Dragonfly", icon: "\u{1F409}", category: "opensource" },
4369
+ { id: "memcached", label: "Memcached", icon: "\u{1F4BE}", category: "opensource" },
4370
+ { id: "etcd", label: "etcd", icon: "\u{1F527}", category: "opensource" },
4371
+ // === OPEN SOURCE NOSQL - Wide Column ===
4372
+ { id: "cassandra", label: "Apache Cassandra", icon: "\u{1F441}\uFE0F", category: "opensource" },
4373
+ { id: "scylladb", label: "ScyllaDB", icon: "\u{1F982}", category: "opensource" },
4374
+ { id: "hbase", label: "Apache HBase", icon: "\u{1F418}", category: "opensource" },
4375
+ // === OPEN SOURCE NOSQL - Graph ===
4376
+ { id: "neo4j", label: "Neo4j", icon: "\u{1F517}", category: "opensource" },
4377
+ { id: "dgraph", label: "Dgraph", icon: "\u{1F4CA}", category: "opensource" },
4378
+ { id: "janusgraph", label: "JanusGraph", icon: "\u{1FA90}", category: "opensource" },
4379
+ { id: "agensgraph", label: "AgensGraph", icon: "\u{1F310}", category: "opensource" },
4380
+ // === OPEN SOURCE - Time Series ===
4381
+ { id: "timescaledb", label: "TimescaleDB", icon: "\u23F1\uFE0F", category: "opensource" },
4382
+ { id: "influxdb", label: "InfluxDB", icon: "\u{1F4C8}", category: "opensource" },
4383
+ { id: "questdb", label: "QuestDB", icon: "\u{1F3CE}\uFE0F", category: "opensource" },
4384
+ { id: "victoriametrics", label: "VictoriaMetrics", icon: "\u{1F4CA}", category: "opensource" },
4385
+ { id: "prometheus", label: "Prometheus", icon: "\u{1F525}", category: "opensource" },
4386
+ // === OPEN SOURCE - Analytics/OLAP ===
4387
+ { id: "clickhouse", label: "ClickHouse", icon: "\u{1F3E0}", category: "opensource" },
4388
+ { id: "apache_druid", label: "Apache Druid", icon: "\u{1F9D9}", category: "opensource" },
4389
+ { id: "apache_pinot", label: "Apache Pinot", icon: "\u{1F3AF}", category: "opensource" },
4390
+ { id: "duckdb", label: "DuckDB", icon: "\u{1F986}", category: "opensource" },
4391
+ { id: "starrocks", label: "StarRocks", icon: "\u2B50", category: "opensource" },
4392
+ // === OPEN SOURCE - Search ===
4393
+ { id: "elasticsearch", label: "Elasticsearch", icon: "\u{1F50D}", category: "opensource" },
4394
+ { id: "opensearch", label: "OpenSearch", icon: "\u{1F50E}", category: "opensource" },
4395
+ { id: "meilisearch", label: "Meilisearch", icon: "\u26A1", category: "opensource" },
4396
+ { id: "typesense", label: "Typesense", icon: "\u{1F524}", category: "opensource" },
4397
+ { id: "solr", label: "Apache Solr", icon: "\u2600\uFE0F", category: "opensource" },
4398
+ { id: "zinc", label: "Zinc", icon: "\u{1F52C}", category: "opensource" },
4399
+ // === OPEN SOURCE - Vector/AI ===
4400
+ { id: "milvus", label: "Milvus", icon: "\u{1F9E0}", category: "opensource" },
4401
+ { id: "weaviate", label: "Weaviate", icon: "\u{1F578}\uFE0F", category: "opensource" },
4402
+ { id: "qdrant", label: "Qdrant", icon: "\u{1F3AF}", category: "opensource" },
4403
+ { id: "chroma", label: "Chroma", icon: "\u{1F3A8}", category: "opensource" },
4404
+ { id: "pgvector", label: "pgvector", icon: "\u{1F418}", category: "opensource" },
4405
+ // === OPEN SOURCE - Message Queues (often used as DBs) ===
4406
+ { id: "kafka", label: "Apache Kafka", icon: "\u{1F4E8}", category: "opensource" },
4407
+ { id: "rabbitmq", label: "RabbitMQ", icon: "\u{1F430}", category: "opensource" },
4408
+ { id: "nats", label: "NATS", icon: "\u{1F4EC}", category: "opensource" },
4409
+ { id: "pulsar", label: "Apache Pulsar", icon: "\u{1F4AB}", category: "opensource" },
4410
+ { id: "redpanda", label: "Redpanda", icon: "\u{1F43C}", category: "opensource" },
4411
+ // === OPEN SOURCE - Embedded/Edge ===
4412
+ { id: "leveldb", label: "LevelDB", icon: "\u{1F4DA}", category: "opensource" },
4413
+ { id: "rocksdb", label: "RocksDB", icon: "\u{1FAA8}", category: "opensource" },
4414
+ { id: "badger", label: "Badger", icon: "\u{1F9A1}", category: "opensource" },
4415
+ { id: "surrealdb", label: "SurrealDB", icon: "\u{1F30A}", category: "opensource" },
4416
+ { id: "rqlite", label: "rqlite", icon: "\u{1F4E1}", category: "opensource" },
4417
+ // === CLOUD MANAGED - AWS ===
4418
+ { id: "aws_rds", label: "AWS RDS", icon: "\u2601\uFE0F", category: "cloud" },
4419
+ { id: "aws_aurora", label: "AWS Aurora", icon: "\u{1F305}", category: "cloud" },
4420
+ { id: "aws_dynamodb", label: "AWS DynamoDB", icon: "\u26A1", category: "cloud" },
4421
+ { id: "aws_redshift", label: "AWS Redshift", icon: "\u{1F4CA}", category: "cloud" },
4422
+ { id: "aws_neptune", label: "AWS Neptune", icon: "\u{1F531}", category: "cloud" },
4423
+ { id: "aws_timestream", label: "AWS Timestream", icon: "\u23F0", category: "cloud" },
4424
+ { id: "aws_documentdb", label: "AWS DocumentDB", icon: "\u{1F4C4}", category: "cloud" },
4425
+ { id: "aws_elasticache", label: "AWS ElastiCache", icon: "\u{1F4A8}", category: "cloud" },
4426
+ { id: "aws_memorydb", label: "AWS MemoryDB", icon: "\u{1F9E0}", category: "cloud" },
4427
+ // === CLOUD MANAGED - GCP ===
4428
+ { id: "gcp_cloudsql", label: "GCP Cloud SQL", icon: "\u2601\uFE0F", category: "cloud" },
4429
+ { id: "gcp_spanner", label: "GCP Cloud Spanner", icon: "\u{1F310}", category: "cloud" },
4430
+ { id: "gcp_firestore", label: "GCP Firestore", icon: "\u{1F525}", category: "cloud" },
4431
+ { id: "gcp_bigtable", label: "GCP Bigtable", icon: "\u{1F4CA}", category: "cloud" },
4432
+ { id: "gcp_bigquery", label: "GCP BigQuery", icon: "\u{1F4C8}", category: "cloud" },
4433
+ { id: "gcp_memorystore", label: "GCP Memorystore", icon: "\u{1F4BE}", category: "cloud" },
4434
+ // === CLOUD MANAGED - Azure ===
4435
+ { id: "azure_sql", label: "Azure SQL", icon: "\u2601\uFE0F", category: "cloud" },
4436
+ { id: "azure_cosmosdb", label: "Azure Cosmos DB", icon: "\u{1F30C}", category: "cloud" },
4437
+ { id: "azure_synapse", label: "Azure Synapse", icon: "\u{1F4CA}", category: "cloud" },
4438
+ { id: "azure_cache", label: "Azure Cache", icon: "\u{1F4A8}", category: "cloud" },
4439
+ // === CLOUD MANAGED - Other ===
4440
+ { id: "supabase", label: "Supabase", icon: "\u26A1", category: "cloud" },
4441
+ { id: "firebase", label: "Firebase", icon: "\u{1F525}", category: "cloud" },
4442
+ { id: "planetscale", label: "PlanetScale", icon: "\u{1FA90}", category: "cloud" },
4443
+ { id: "neon", label: "Neon", icon: "\u{1F4A1}", category: "cloud" },
4444
+ { id: "turso", label: "Turso", icon: "\u{1F426}", category: "cloud" },
4445
+ { id: "xata", label: "Xata", icon: "\u26A1", category: "cloud" },
4446
+ { id: "upstash", label: "Upstash", icon: "\u{1F680}", category: "cloud" },
4447
+ { id: "fauna", label: "Fauna", icon: "\u{1F98E}", category: "cloud" },
4448
+ { id: "mongodb_atlas", label: "MongoDB Atlas", icon: "\u{1F343}", category: "cloud" },
4449
+ { id: "datastax_astra", label: "DataStax Astra", icon: "\u2728", category: "cloud" },
4450
+ { id: "cockroach_cloud", label: "CockroachDB Cloud", icon: "\u{1FAB3}", category: "cloud" },
4451
+ { id: "timescale_cloud", label: "Timescale Cloud", icon: "\u23F1\uFE0F", category: "cloud" },
4452
+ { id: "influx_cloud", label: "InfluxDB Cloud", icon: "\u{1F4C8}", category: "cloud" },
4453
+ { id: "elastic_cloud", label: "Elastic Cloud", icon: "\u{1F50D}", category: "cloud" },
4454
+ { id: "algolia", label: "Algolia", icon: "\u{1F50E}", category: "cloud" },
4455
+ { id: "pinecone", label: "Pinecone", icon: "\u{1F332}", category: "cloud" },
4456
+ // === PROPRIETARY ===
4457
+ { id: "oracle", label: "Oracle Database", icon: "\u{1F536}", category: "proprietary" },
4458
+ { id: "mssql", label: "Microsoft SQL Server", icon: "\u{1F7E6}", category: "proprietary" },
4459
+ { id: "db2", label: "IBM Db2", icon: "\u{1F537}", category: "proprietary" },
4460
+ { id: "teradata", label: "Teradata", icon: "\u{1F7E0}", category: "proprietary" },
4461
+ { id: "sap_hana", label: "SAP HANA", icon: "\u{1F535}", category: "proprietary" },
4462
+ { id: "informix", label: "IBM Informix", icon: "\u{1F4CA}", category: "proprietary" },
4463
+ { id: "sybase", label: "SAP ASE (Sybase)", icon: "\u{1F537}", category: "proprietary" },
4464
+ { id: "singlestore", label: "SingleStore", icon: "\u26A1", category: "proprietary" },
4465
+ { id: "marklogic", label: "MarkLogic", icon: "\u{1F4C1}", category: "proprietary" },
4466
+ { id: "intersystems_cache", label: "InterSystems Cach\xE9", icon: "\u{1F48E}", category: "proprietary" }
4467
+ ];
4468
+ var DATABASE_IDS = DATABASES.map((d) => d.id);
4469
+
4470
+ // ../packages/shared/dist/wizard/tech-stack.js
4471
+ var PACKAGE_MANAGERS = [
4472
+ { id: "npm", label: "npm", icon: "\u{1F4E6}", description: "Node Package Manager (default)" },
4473
+ { id: "yarn", label: "Yarn", icon: "\u{1F9F6}", description: "Fast, reliable, and secure" },
4474
+ { id: "pnpm", label: "pnpm", icon: "\u{1F4C0}", description: "Fast, disk space efficient" },
4475
+ { id: "bun", label: "Bun", icon: "\u{1F95F}", description: "All-in-one JS runtime + PM" }
4476
+ ];
4477
+ var MONOREPO_TOOLS = [
4478
+ { id: "", label: "None", icon: "\u{1F4C1}", description: "Single package repository" },
4479
+ { id: "turborepo", label: "Turborepo", icon: "\u26A1", description: "High-performance build system" },
4480
+ { id: "nx", label: "Nx", icon: "\u{1F537}", description: "Smart, extensible build framework" },
4481
+ { id: "lerna", label: "Lerna", icon: "\u{1F409}", description: "Multi-package repositories" },
4482
+ { id: "pnpm_workspaces", label: "pnpm Workspaces", icon: "\u{1F4C0}", description: "Native pnpm monorepo" },
4483
+ { id: "yarn_workspaces", label: "Yarn Workspaces", icon: "\u{1F9F6}", description: "Native Yarn monorepo" },
4484
+ { id: "npm_workspaces", label: "npm Workspaces", icon: "\u{1F4E6}", description: "Native npm monorepo" },
4485
+ { id: "rush", label: "Rush", icon: "\u{1F680}", description: "Microsoft's scalable monorepo" },
4486
+ { id: "moon", label: "moon", icon: "\u{1F319}", description: "Repository management tool" }
4487
+ ];
4488
+ var JS_RUNTIMES = [
4489
+ { id: "node", label: "Node.js", icon: "\u{1F7E2}", description: "Standard JavaScript runtime" },
4490
+ { id: "deno", label: "Deno", icon: "\u{1F995}", description: "Secure runtime with TypeScript" },
4491
+ { id: "bun", label: "Bun", icon: "\u{1F95F}", description: "Fast all-in-one JS runtime" }
4492
+ ];
4493
+ var ORM_OPTIONS = [
4494
+ { id: "", label: "None / Raw SQL", icon: "\u{1F4DD}" },
4495
+ // JavaScript/TypeScript
4496
+ { id: "prisma", label: "Prisma", icon: "\u{1F537}", languages: ["typescript", "javascript"] },
4497
+ { id: "drizzle", label: "Drizzle", icon: "\u{1F4A7}", languages: ["typescript", "javascript"] },
4498
+ { id: "typeorm", label: "TypeORM", icon: "\u{1F536}", languages: ["typescript", "javascript"] },
4499
+ { id: "sequelize", label: "Sequelize", icon: "\u{1F4D8}", languages: ["typescript", "javascript"] },
4500
+ { id: "knex", label: "Knex.js", icon: "\u{1F527}", languages: ["typescript", "javascript"] },
4501
+ { id: "kysely", label: "Kysely", icon: "\u{1F3AF}", languages: ["typescript", "javascript"] },
4502
+ { id: "mikro-orm", label: "MikroORM", icon: "\u{1F535}", languages: ["typescript", "javascript"] },
4503
+ { id: "objection", label: "Objection.js", icon: "\u{1F4CA}", languages: ["typescript", "javascript"] },
4504
+ // Python
4505
+ { id: "sqlalchemy", label: "SQLAlchemy", icon: "\u{1F40D}", languages: ["python"] },
4506
+ { id: "django_orm", label: "Django ORM", icon: "\u{1F3B8}", languages: ["python"] },
4507
+ { id: "tortoise", label: "Tortoise ORM", icon: "\u{1F422}", languages: ["python"] },
4508
+ { id: "sqlmodel", label: "SQLModel", icon: "\u26A1", languages: ["python"] },
4509
+ { id: "peewee", label: "Peewee", icon: "\u{1F426}", languages: ["python"] },
4510
+ // Go
4511
+ { id: "gorm", label: "GORM", icon: "\u{1F439}", languages: ["go"] },
4512
+ { id: "ent", label: "Ent", icon: "\u{1F3D7}\uFE0F", languages: ["go"] },
4513
+ { id: "sqlc", label: "sqlc", icon: "\u{1F4DD}", languages: ["go"] },
4514
+ { id: "bun_go", label: "Bun (Go)", icon: "\u{1F95F}", languages: ["go"] },
4515
+ // Rust
4516
+ { id: "diesel", label: "Diesel", icon: "\u{1F980}", languages: ["rust"] },
4517
+ { id: "sea-orm", label: "SeaORM", icon: "\u{1F30A}", languages: ["rust"] },
4518
+ { id: "sqlx", label: "SQLx", icon: "\u{1F4E6}", languages: ["rust"] },
4519
+ // Java/Kotlin
4520
+ { id: "hibernate", label: "Hibernate", icon: "\u2615", languages: ["java", "kotlin"] },
4521
+ { id: "jooq", label: "jOOQ", icon: "\u{1F3B5}", languages: ["java", "kotlin"] },
4522
+ { id: "exposed", label: "Exposed", icon: "\u{1F3A8}", languages: ["kotlin"] },
4523
+ // .NET
4524
+ { id: "ef_core", label: "Entity Framework", icon: "\u{1F537}", languages: ["csharp"] },
4525
+ { id: "dapper", label: "Dapper", icon: "\u26A1", languages: ["csharp"] },
4526
+ // Ruby
4527
+ { id: "activerecord", label: "ActiveRecord", icon: "\u{1F48E}", languages: ["ruby"] },
4528
+ { id: "sequel", label: "Sequel", icon: "\u{1F4DA}", languages: ["ruby"] },
4529
+ // PHP
4530
+ { id: "eloquent", label: "Eloquent", icon: "\u{1F418}", languages: ["php"] },
4531
+ { id: "doctrine", label: "Doctrine", icon: "\u{1F4D6}", languages: ["php"] }
4532
+ ];
4533
+
4534
+ // ../packages/shared/dist/wizard/project-types.js
4535
+ var PROJECT_TYPES = [
4536
+ { id: "web_frontend", label: "Web Frontend", icon: "\u{1F310}", description: "React, Vue, Angular, etc." },
4537
+ { id: "web_fullstack", label: "Full-stack Web", icon: "\u{1F5A5}\uFE0F", description: "Next.js, Nuxt, SvelteKit, etc." },
4538
+ { id: "api_backend", label: "API / Backend", icon: "\u2699\uFE0F", description: "REST, GraphQL, gRPC services" },
4539
+ { id: "cli_tool", label: "CLI Tool", icon: "\u{1F4BB}", description: "Command-line applications" },
4540
+ { id: "library", label: "Library / Package", icon: "\u{1F4E6}", description: "Reusable npm/pip/cargo package" },
4541
+ { id: "mobile", label: "Mobile App", icon: "\u{1F4F1}", description: "React Native, Flutter, native" },
4542
+ { id: "desktop", label: "Desktop App", icon: "\u{1F5A5}\uFE0F", description: "Electron, Tauri, native" },
4543
+ { id: "microservice", label: "Microservice", icon: "\u{1F527}", description: "Single-purpose service" },
4544
+ { id: "monolith", label: "Monolith", icon: "\u{1F3E2}", description: "All-in-one application" },
4545
+ { id: "data_science", label: "Data Science", icon: "\u{1F4CA}", description: "ML, analytics, notebooks" },
4546
+ { id: "devops", label: "DevOps / IaC", icon: "\u{1F504}", description: "Terraform, Ansible, K8s manifests" },
4547
+ { id: "game", label: "Game", icon: "\u{1F3AE}", description: "Unity, Godot, web games" },
4548
+ { id: "embedded", label: "Embedded / IoT", icon: "\u{1F50C}", description: "Firmware, hardware control" },
4549
+ { id: "blockchain", label: "Blockchain / Web3", icon: "\u26D3\uFE0F", description: "Smart contracts, dApps" },
4550
+ { id: "other", label: "Other", icon: "\u{1F4C1}", description: "Custom project type" }
4551
+ ];
4552
+ var ARCHITECTURE_PATTERNS = [
4553
+ { id: "mvc", label: "MVC", description: "Model-View-Controller" },
4554
+ { id: "mvvm", label: "MVVM", description: "Model-View-ViewModel" },
4555
+ { id: "clean", label: "Clean Architecture", description: "Dependency rule, use cases" },
4556
+ { id: "hexagonal", label: "Hexagonal / Ports & Adapters", description: "Domain-centric, pluggable" },
4557
+ { id: "ddd", label: "Domain-Driven Design", description: "Bounded contexts, aggregates" },
4558
+ { id: "microservices", label: "Microservices", description: "Distributed services" },
4559
+ { id: "multi_image_docker", label: "Multi-Image Docker", description: "Shared codebase, multiple container images" },
4560
+ { id: "serverless", label: "Serverless", description: "FaaS, event-driven" },
4561
+ { id: "event_driven", label: "Event-Driven", description: "Event sourcing, CQRS" },
4562
+ { id: "modular_monolith", label: "Modular Monolith", description: "Organized monolith" },
4563
+ { id: "layered", label: "Layered / N-Tier", description: "Presentation, business, data" },
4564
+ { id: "component_based", label: "Component-Based", description: "React, Vue components" },
4565
+ { id: "plugin", label: "Plugin Architecture", description: "Extensible core + plugins" },
4566
+ { id: "other", label: "Other", description: "Custom architecture" }
4567
+ ];
4568
+ var DEV_OS_OPTIONS = [
4569
+ { id: "macos", label: "macOS", icon: "\u{1F34E}" },
4570
+ { id: "linux", label: "Linux", icon: "\u{1F427}" },
4571
+ { id: "windows", label: "Windows", icon: "\u{1FA9F}" },
4572
+ { id: "wsl", label: "WSL", icon: "\u{1F427}" }
4573
+ ];
4574
+
4575
+ // ../packages/shared/dist/wizard/repository.js
4576
+ var REPO_HOSTS = [
4577
+ { id: "github", label: "GitHub", icon: "\u{1F419}" },
4578
+ { id: "gitlab", label: "GitLab", icon: "\u{1F98A}" },
4579
+ { id: "gitea", label: "Gitea", icon: "\u{1F375}" },
4580
+ { id: "forgejo", label: "Forgejo", icon: "\u{1F527}" },
4581
+ { id: "bitbucket", label: "Bitbucket", icon: "\u{1FAA3}" },
4582
+ { id: "codeberg", label: "Codeberg", icon: "\u{1F3D4}\uFE0F" },
4583
+ { id: "sourcehut", label: "SourceHut", icon: "\u{1F4E6}" },
4584
+ { id: "gogs", label: "Gogs", icon: "\u{1F419}" },
4585
+ { id: "aws_codecommit", label: "AWS CodeCommit", icon: "\u2601\uFE0F" },
4586
+ { id: "azure_devops", label: "Azure DevOps", icon: "\u2601\uFE0F" },
4587
+ { id: "gerrit", label: "Gerrit", icon: "\u{1F50D}" },
4588
+ { id: "phabricator", label: "Phabricator", icon: "\u{1F4E6}" },
4589
+ { id: "other", label: "Other", icon: "\u{1F4E6}" }
4590
+ ];
4591
+ var CICD_OPTIONS = [
4592
+ { id: "github_actions", label: "GitHub Actions", icon: "\u{1F419}" },
4593
+ { id: "gitlab_ci", label: "GitLab CI/CD", icon: "\u{1F98A}" },
4594
+ { id: "jenkins", label: "Jenkins", icon: "\u{1F527}" },
4595
+ { id: "circleci", label: "CircleCI", icon: "\u{1F535}" },
4596
+ { id: "travis", label: "Travis CI", icon: "\u{1F528}" },
4597
+ { id: "azure_pipelines", label: "Azure Pipelines", icon: "\u2601\uFE0F" },
4598
+ { id: "aws_codepipeline", label: "AWS CodePipeline", icon: "\u2601\uFE0F" },
4599
+ { id: "gcp_cloudbuild", label: "GCP Cloud Build", icon: "\u2601\uFE0F" },
4600
+ { id: "bitbucket_pipelines", label: "Bitbucket Pipelines", icon: "\u{1FAA3}" },
4601
+ { id: "teamcity", label: "TeamCity", icon: "\u{1F3E2}" },
4602
+ { id: "drone", label: "Drone CI", icon: "\u{1F681}" },
4603
+ { id: "buildkite", label: "Buildkite", icon: "\u{1F9F1}" },
4604
+ { id: "concourse", label: "Concourse CI", icon: "\u2708\uFE0F" },
4605
+ { id: "woodpecker", label: "Woodpecker CI", icon: "\u{1F426}" },
4606
+ { id: "dagger", label: "Dagger", icon: "\u{1F5E1}\uFE0F" },
4607
+ { id: "earthly", label: "Earthly", icon: "\u{1F30D}" }
4608
+ ];
4609
+ var LICENSES = [
4610
+ { id: "mit", label: "MIT", description: "Permissive, simple" },
4611
+ { id: "apache-2.0", label: "Apache 2.0", description: "Permissive with patent grant" },
4612
+ { id: "gpl-3.0", label: "GPL 3.0", description: "Strong copyleft" },
4613
+ { id: "lgpl-3.0", label: "LGPL 3.0", description: "Weak copyleft" },
4614
+ { id: "agpl-3.0", label: "AGPL 3.0", description: "Network copyleft" },
4615
+ { id: "bsd-2", label: "BSD 2-Clause", description: "Permissive, simple" },
4616
+ { id: "bsd-3", label: "BSD 3-Clause", description: "Permissive, no endorsement" },
4617
+ { id: "mpl-2.0", label: "MPL 2.0", description: "File-level copyleft" },
4618
+ { id: "isc", label: "ISC", description: "Simple permissive" },
4619
+ { id: "unlicense", label: "Unlicense", description: "Public domain" },
4620
+ { id: "cc0", label: "CC0", description: "Public domain" },
4621
+ { id: "none", label: "None / Proprietary", description: "All rights reserved" },
4622
+ { id: "other", label: "Other", description: "Custom license" }
4623
+ ];
4624
+ var BRANCH_STRATEGIES = [
4625
+ { id: "none", label: "None (toy project)", icon: "\u{1F3AE}", description: "No branching, commit directly to main" },
4626
+ { id: "github_flow", label: "GitHub Flow", icon: "\u{1F30A}", description: "Simple: main + feature branches" },
4627
+ { id: "gitflow", label: "Gitflow", icon: "\u{1F333}", description: "develop, feature, release, hotfix branches" },
4628
+ { id: "trunk_based", label: "Trunk-Based", icon: "\u{1F682}", description: "Short-lived branches, continuous integration" },
4629
+ { id: "gitlab_flow", label: "GitLab Flow", icon: "\u{1F98A}", description: "Environment branches (staging, production)" },
4630
+ { id: "release_flow", label: "Release Flow", icon: "\u{1F680}", description: "Microsoft style: main + release branches" }
4631
+ ];
4632
+ var DEFAULT_BRANCHES = [
4633
+ { id: "main", label: "main" },
4634
+ { id: "master", label: "master" },
4635
+ { id: "develop", label: "develop" },
4636
+ { id: "trunk", label: "trunk" },
4637
+ { id: "other", label: "Other" }
4638
+ ];
4639
+ var SELF_HOSTED_TARGETS = [
4640
+ { id: "docker", label: "Docker", icon: "\u{1F433}", category: "self_hosted" },
4641
+ { id: "docker_compose", label: "Docker Compose", icon: "\u{1F433}", category: "self_hosted" },
4642
+ { id: "kubernetes", label: "Kubernetes", icon: "\u2638\uFE0F", category: "self_hosted" },
4643
+ { id: "podman", label: "Podman", icon: "\u{1F9AD}", category: "self_hosted" },
4644
+ { id: "lxc", label: "LXC/LXD", icon: "\u{1F4E6}", category: "self_hosted" },
4645
+ { id: "bare_metal", label: "Bare Metal", icon: "\u{1F5A5}\uFE0F", category: "self_hosted" },
4646
+ { id: "vm", label: "Virtual Machine", icon: "\u{1F4BB}", category: "self_hosted" },
4647
+ { id: "proxmox", label: "Proxmox", icon: "\u{1F537}", category: "self_hosted" },
4648
+ { id: "unraid", label: "Unraid", icon: "\u{1F7E0}", category: "self_hosted" },
4649
+ { id: "truenas", label: "TrueNAS", icon: "\u{1F535}", category: "self_hosted" },
4650
+ { id: "synology", label: "Synology NAS", icon: "\u{1F4C1}", category: "self_hosted" },
4651
+ { id: "coolify", label: "Coolify", icon: "\u2744\uFE0F", category: "self_hosted" },
4652
+ { id: "dokku", label: "Dokku", icon: "\u{1F433}", category: "self_hosted" },
4653
+ { id: "caprover", label: "CapRover", icon: "\u{1F6A2}", category: "self_hosted" },
4654
+ { id: "portainer", label: "Portainer", icon: "\u{1F40B}", category: "self_hosted" },
4655
+ { id: "rancher", label: "Rancher", icon: "\u{1F404}", category: "self_hosted" },
4656
+ { id: "k3s", label: "K3s", icon: "\u2638\uFE0F", category: "self_hosted" },
4657
+ { id: "microk8s", label: "MicroK8s", icon: "\u2638\uFE0F", category: "self_hosted" },
4658
+ { id: "nomad", label: "Nomad", icon: "\u{1F3D5}\uFE0F", category: "self_hosted" }
4659
+ ];
4660
+ var CLOUD_TARGETS = [
4661
+ { id: "vercel", label: "Vercel", icon: "\u25B2", category: "cloud" },
4662
+ { id: "netlify", label: "Netlify", icon: "\u{1F310}", category: "cloud" },
4663
+ { id: "cloudflare_pages", label: "Cloudflare Pages", icon: "\u{1F536}", category: "cloud" },
4664
+ { id: "cloudflare_workers", label: "Cloudflare Workers", icon: "\u{1F536}", category: "cloud" },
4665
+ { id: "aws_lambda", label: "AWS Lambda", icon: "\u2601\uFE0F", category: "cloud" },
4666
+ { id: "aws_ecs", label: "AWS ECS", icon: "\u2601\uFE0F", category: "cloud" },
4667
+ { id: "aws_eks", label: "AWS EKS", icon: "\u2601\uFE0F", category: "cloud" },
4668
+ { id: "aws_ec2", label: "AWS EC2", icon: "\u2601\uFE0F", category: "cloud" },
4669
+ { id: "aws_lightsail", label: "AWS Lightsail", icon: "\u2601\uFE0F", category: "cloud" },
4670
+ { id: "aws_amplify", label: "AWS Amplify", icon: "\u2601\uFE0F", category: "cloud" },
4671
+ { id: "gcp_cloudrun", label: "GCP Cloud Run", icon: "\u{1F308}", category: "cloud" },
4672
+ { id: "gcp_gke", label: "GCP GKE", icon: "\u{1F308}", category: "cloud" },
4673
+ { id: "gcp_appengine", label: "GCP App Engine", icon: "\u{1F308}", category: "cloud" },
4674
+ { id: "gcp_functions", label: "GCP Cloud Functions", icon: "\u{1F308}", category: "cloud" },
4675
+ { id: "azure_functions", label: "Azure Functions", icon: "\u{1F537}", category: "cloud" },
4676
+ { id: "azure_aks", label: "Azure AKS", icon: "\u{1F537}", category: "cloud" },
4677
+ { id: "azure_container", label: "Azure Container Apps", icon: "\u{1F537}", category: "cloud" },
4678
+ { id: "azure_appservice", label: "Azure App Service", icon: "\u{1F537}", category: "cloud" },
4679
+ { id: "railway", label: "Railway", icon: "\u{1F682}", category: "cloud" },
4680
+ { id: "render", label: "Render", icon: "\u{1F3A8}", category: "cloud" },
4681
+ { id: "fly", label: "Fly.io", icon: "\u2708\uFE0F", category: "cloud" },
4682
+ { id: "digitalocean_app", label: "DigitalOcean App Platform", icon: "\u{1F535}", category: "cloud" },
4683
+ { id: "digitalocean_droplet", label: "DigitalOcean Droplet", icon: "\u{1F535}", category: "cloud" },
4684
+ { id: "heroku", label: "Heroku", icon: "\u{1F7E3}", category: "cloud" },
4685
+ { id: "deno_deploy", label: "Deno Deploy", icon: "\u{1F995}", category: "cloud" },
4686
+ { id: "supabase_edge", label: "Supabase Edge Functions", icon: "\u26A1", category: "cloud" }
4687
+ ];
4688
+ var DEPLOYMENT_TARGETS = [...SELF_HOSTED_TARGETS, ...CLOUD_TARGETS];
4689
+ var CONTAINER_REGISTRIES = [
4690
+ { id: "dockerhub", label: "Docker Hub", icon: "\u{1F433}" },
4691
+ { id: "ghcr", label: "GitHub Container Registry", icon: "\u{1F419}" },
4692
+ { id: "gcr", label: "Google Container Registry", icon: "\u{1F308}" },
4693
+ { id: "ecr", label: "AWS ECR", icon: "\u2601\uFE0F" },
4694
+ { id: "acr", label: "Azure Container Registry", icon: "\u{1F537}" },
4695
+ { id: "quay", label: "Quay.io", icon: "\u{1F534}" },
4696
+ { id: "gitlab_registry", label: "GitLab Container Registry", icon: "\u{1F98A}" },
4697
+ { id: "harbor", label: "Harbor", icon: "\u{1F6A2}" },
4698
+ { id: "self_hosted", label: "Self-hosted Registry", icon: "\u{1F3E0}" }
4699
+ ];
4700
+ var VERSION_TAG_FORMATS = [
4701
+ { id: "v_prefix", label: "v*", icon: "\u{1F3F7}\uFE0F", description: "e.g., v1.0.0" },
4702
+ { id: "no_prefix", label: "* (no prefix)", icon: "\u{1F3F7}\uFE0F", description: "e.g., 1.0.0" },
4703
+ { id: "app_prefix", label: "app-v*", icon: "\u{1F3F7}\uFE0F", description: "e.g., app-v1.0.0" },
4704
+ { id: "cli_prefix", label: "cli-v*", icon: "\u{1F3F7}\uFE0F", description: "e.g., cli-v1.0.0" },
4705
+ { id: "monorepo", label: "package@version", icon: "\u{1F3F7}\uFE0F", description: "e.g., @scope/pkg@1.0.0" },
4706
+ { id: "custom", label: "Custom format", icon: "\u{1F3F7}\uFE0F", description: "Define your own tag format" }
4707
+ ];
4708
+ var CHANGELOG_OPTIONS = [
4709
+ { id: "manual", label: "Manual", icon: "\u270D\uFE0F", description: "Write CHANGELOG.md manually" },
4710
+ { id: "conventional_changelog", label: "conventional-changelog", icon: "\u{1F4DD}", description: "Auto-generate from commits" },
4711
+ { id: "release_please", label: "release-please", icon: "\u{1F916}", description: "Google's release automation" },
4712
+ { id: "semantic_release", label: "semantic-release", icon: "\u{1F680}", description: "Fully automated versioning" },
4713
+ { id: "changesets", label: "Changesets", icon: "\u{1F4E6}", description: "Monorepo version management" },
4714
+ { id: "git_cliff", label: "git-cliff", icon: "\u{1F3D4}\uFE0F", description: "Customizable changelog generator" },
4715
+ { id: "auto", label: "auto (Intuit)", icon: "\u26A1", description: "Automated releases based on labels" },
4716
+ { id: "standard_version", label: "standard-version", icon: "\u{1F4CB}", description: "Automate versioning and CHANGELOG" },
4717
+ { id: "lerna_changelog", label: "lerna-changelog", icon: "\u{1F409}", description: "For Lerna monorepos" },
4718
+ { id: "keep_a_changelog", label: "Keep a Changelog", icon: "\u{1F4D6}", description: "Manual following keepachangelog.com" },
4719
+ { id: "github_releases", label: "GitHub Releases", icon: "\u{1F419}", description: "Use GitHub release notes" },
4720
+ { id: "none", label: "None", icon: "\u274C", description: "No changelog" }
4721
+ ];
4722
+ var VPN_OPTIONS = [
4723
+ { id: "tailscale", label: "Tailscale", icon: "\u{1F517}", description: "Zero-config mesh VPN" },
4724
+ { id: "headscale", label: "Headscale", icon: "\u{1F517}", description: "Self-hosted Tailscale control server" },
4725
+ { id: "wireguard", label: "WireGuard", icon: "\u{1F6E1}\uFE0F", description: "Modern VPN protocol" },
4726
+ { id: "netbird", label: "NetBird", icon: "\u{1F426}", description: "Open-source network as code" },
4727
+ { id: "zerotier", label: "ZeroTier", icon: "\u{1F310}", description: "Global area networking" },
4728
+ { id: "nebula", label: "Nebula", icon: "\u{1F30C}", description: "Slack's mesh networking tool" },
4729
+ { id: "innernet", label: "innernet", icon: "\u{1F510}", description: "WireGuard-based private network" },
4730
+ { id: "netmaker", label: "Netmaker", icon: "\u{1F578}\uFE0F", description: "WireGuard automation platform" },
4731
+ { id: "firezone", label: "Firezone", icon: "\u{1F525}", description: "Self-hosted VPN server" },
4732
+ { id: "pritunl", label: "Pritunl", icon: "\u{1F512}", description: "Enterprise VPN server" },
4733
+ { id: "openvpn", label: "OpenVPN", icon: "\u{1F513}", description: "Classic open-source VPN" },
4734
+ { id: "cloudflare_tunnel", label: "Cloudflare Tunnel", icon: "\u{1F536}", description: "Expose services via Cloudflare" },
4735
+ { id: "ngrok", label: "ngrok", icon: "\u{1F687}", description: "Secure tunnels to localhost" },
4736
+ { id: "none", label: "None", icon: "\u274C", description: "No VPN/tunneling" }
4737
+ ];
4738
+ var GITOPS_TOOLS = [
4739
+ { id: "portainer", label: "Portainer", icon: "\u{1F40B}", description: "Docker/K8s management UI" },
4740
+ { id: "argocd", label: "ArgoCD", icon: "\u{1F419}", description: "GitOps continuous delivery for K8s" },
4741
+ { id: "fluxcd", label: "FluxCD", icon: "\u{1F504}", description: "GitOps toolkit for Kubernetes" },
4742
+ { id: "rancher", label: "Rancher", icon: "\u{1F404}", description: "Multi-cluster K8s management" },
4743
+ { id: "lens", label: "Lens", icon: "\u{1F50D}", description: "Kubernetes IDE" },
4744
+ { id: "k9s", label: "k9s", icon: "\u{1F415}", description: "Terminal UI for K8s" },
4745
+ { id: "terraform", label: "Terraform", icon: "\u{1F3D7}\uFE0F", description: "Infrastructure as Code" },
4746
+ { id: "pulumi", label: "Pulumi", icon: "\u2601\uFE0F", description: "IaC with programming languages" },
4747
+ { id: "ansible", label: "Ansible", icon: "\u{1F4DC}", description: "Automation and configuration" },
4748
+ { id: "chef", label: "Chef", icon: "\u{1F468}\u200D\u{1F373}", description: "Configuration management" },
4749
+ { id: "puppet", label: "Puppet", icon: "\u{1F3AD}", description: "Infrastructure automation" },
4750
+ { id: "saltstack", label: "SaltStack", icon: "\u{1F9C2}", description: "Event-driven automation" },
4751
+ { id: "crossplane", label: "Crossplane", icon: "\u2716\uFE0F", description: "Control plane for cloud infrastructure" },
4752
+ { id: "waypoint", label: "HashiCorp Waypoint", icon: "\u{1F9ED}", description: "Build, deploy, release" },
4753
+ { id: "spinnaker", label: "Spinnaker", icon: "\u{1F3A1}", description: "Multi-cloud continuous delivery" },
4754
+ { id: "none", label: "None", icon: "\u274C", description: "No GitOps tooling" }
4755
+ ];
4756
+
4757
+ // ../packages/shared/dist/wizard/ai-behavior.js
4758
+ var AI_BEHAVIOR_RULES = [
4759
+ { id: "always_debug_after_build", label: "Always Debug After Building", description: "Run and test locally after making changes", recommended: true },
4760
+ { id: "check_logs_after_build", label: "Check Logs After Build/Commit", description: "Check logs when build or commit finishes", recommended: true },
4761
+ { id: "run_tests_before_commit", label: "Run Tests Before Commit", description: "Ensure tests pass before committing", recommended: true },
4762
+ { id: "follow_existing_patterns", label: "Follow Existing Patterns", description: "Match the codebase's existing style", recommended: true },
4763
+ { id: "ask_before_large_refactors", label: "Ask Before Large Refactors", description: "Confirm before significant changes", recommended: true },
4764
+ { id: "prefer_small_commits", label: "Prefer Small Commits", description: "Make atomic, focused commits" },
4765
+ { id: "document_complex_logic", label: "Document Complex Logic", description: "Add comments for non-obvious code" },
4766
+ { id: "avoid_breaking_changes", label: "Avoid Breaking Changes", description: "Maintain backward compatibility" },
4767
+ { id: "use_conventional_commits", label: "Use Conventional Commits", description: "Follow commit message conventions" },
4768
+ { id: "prefer_composition", label: "Prefer Composition Over Inheritance", description: "Use composition patterns" }
4769
+ ];
4770
+ var PLAN_MODE_FREQUENCY = [
4771
+ { id: "always", label: "Always", icon: "\u{1F9E0}", description: "Plan before every task, even simple ones" },
4772
+ { id: "complex_tasks", label: "Complex Tasks Only", icon: "\u{1F3AF}", description: "Plan for multi-step or complex changes (recommended)" },
4773
+ { id: "multi_file", label: "Multi-file Changes", icon: "\u{1F4C1}", description: "Plan when changes span multiple files" },
4774
+ { id: "new_features", label: "New Features", icon: "\u2728", description: "Plan only for new feature implementations" },
4775
+ { id: "on_request", label: "On Request", icon: "\u{1F64B}", description: "Only plan when explicitly asked" },
4776
+ { id: "never", label: "Never", icon: "\u26A1", description: "Execute immediately without planning" }
4777
+ ];
4778
+ var IMPORTANT_FILES = [
4779
+ { id: "readme", label: "README.md", icon: "\u{1F4C4}", description: "Project overview and setup" },
4780
+ { id: "contributing", label: "CONTRIBUTING.md", icon: "\u{1F91D}", description: "Contribution guidelines" },
4781
+ { id: "architecture", label: "ARCHITECTURE.md", icon: "\u{1F3D7}\uFE0F", description: "System design docs" },
4782
+ { id: "api_docs", label: "API Documentation", icon: "\u{1F4DA}", description: "API reference" },
4783
+ { id: "changelog", label: "CHANGELOG.md", icon: "\u{1F4DD}", description: "Version history" },
4784
+ { id: "agents", label: "AGENTS.md", icon: "\u{1F916}", description: "AI agent instructions" },
4785
+ { id: "package_json", label: "package.json", icon: "\u{1F4E6}", description: "Project dependencies" },
4786
+ { id: "tsconfig", label: "tsconfig.json", icon: "\u{1F4D8}", description: "TypeScript config" },
4787
+ { id: "env_example", label: ".env.example", icon: "\u{1F512}", description: "Environment variables" },
4788
+ { id: "docker_compose", label: "docker-compose.yml", icon: "\u{1F433}", description: "Docker services" },
4789
+ { id: "makefile", label: "Makefile", icon: "\u{1F527}", description: "Build commands" },
4790
+ { id: "openapi", label: "openapi.yaml", icon: "\u{1F4C4}", description: "OpenAPI spec" },
4791
+ { id: "prisma_schema", label: "prisma/schema.prisma", icon: "\u{1F537}", description: "Database schema" },
4792
+ { id: "other", label: "Other", icon: "\u{1F4C1}", description: "Custom file" }
4793
+ ];
4794
+
4795
+ // ../packages/shared/dist/wizard/security.js
4796
+ var AUTH_PROVIDERS = [
4797
+ // Username/Password
4798
+ { id: "username_password", label: "Simple user or Email & Password", description: "Traditional username/email + password login", recommended: true },
4799
+ // OAuth Providers
4800
+ { id: "github_oauth", label: "GitHub OAuth", description: "Sign in with GitHub" },
4801
+ { id: "google_oauth", label: "Google OAuth", description: "Sign in with Google" },
4802
+ { id: "microsoft_oauth", label: "Microsoft / Azure AD", description: "Sign in with Microsoft" },
4803
+ { id: "apple_oauth", label: "Apple Sign In", description: "Sign in with Apple" },
4804
+ { id: "facebook_oauth", label: "Facebook OAuth", description: "Sign in with Facebook" },
4805
+ { id: "twitter_oauth", label: "X (Twitter) OAuth", description: "Sign in with X/Twitter" },
4806
+ { id: "linkedin_oauth", label: "LinkedIn OAuth", description: "Sign in with LinkedIn" },
4807
+ { id: "discord_oauth", label: "Discord OAuth", description: "Sign in with Discord" },
4808
+ { id: "slack_oauth", label: "Slack OAuth", description: "Sign in with Slack" },
4809
+ { id: "gitlab_oauth", label: "GitLab OAuth", description: "Sign in with GitLab" },
4810
+ { id: "bitbucket_oauth", label: "Bitbucket OAuth", description: "Sign in with Bitbucket" },
4811
+ { id: "twitch_oauth", label: "Twitch OAuth", description: "Sign in with Twitch" },
4812
+ { id: "spotify_oauth", label: "Spotify OAuth", description: "Sign in with Spotify" },
4813
+ // Passwordless
4814
+ { id: "magic_link", label: "Magic Link (Email)", description: "Passwordless email login" },
4815
+ { id: "passkeys", label: "Passkeys / WebAuthn", description: "Biometric/hardware keys" },
4816
+ { id: "sms_otp", label: "SMS OTP", description: "Phone number verification" },
4817
+ { id: "email_otp", label: "Email OTP", description: "Email code verification" },
4818
+ // Enterprise SSO
4819
+ { id: "okta", label: "Okta", description: "Enterprise identity management" },
4820
+ { id: "auth0", label: "Auth0", description: "Identity platform" },
4821
+ { id: "keycloak", label: "Keycloak", description: "Open-source IAM" },
4822
+ { id: "cognito", label: "AWS Cognito", description: "AWS user pools" },
4823
+ { id: "firebase_auth", label: "Firebase Auth", description: "Google Firebase authentication" },
4824
+ { id: "supabase_auth", label: "Supabase Auth", description: "Supabase authentication" },
4825
+ { id: "clerk", label: "Clerk", description: "Modern auth for developers" },
4826
+ { id: "workos", label: "WorkOS", description: "Enterprise SSO & directory sync" },
4827
+ { id: "fusionauth", label: "FusionAuth", description: "Customer identity management" },
4828
+ { id: "authentik", label: "Authentik", description: "Open-source identity provider" },
4829
+ { id: "zitadel", label: "Zitadel", description: "Cloud-native identity management" },
4830
+ // Other
4831
+ { id: "ldap", label: "LDAP / Active Directory", description: "Directory service auth" },
4832
+ { id: "radius", label: "RADIUS", description: "Network access auth" },
4833
+ { id: "kerberos", label: "Kerberos", description: "Network authentication protocol" },
4834
+ { id: "other", label: "Other", description: "Custom auth provider" }
4835
+ ];
4836
+ var SECRETS_MANAGEMENT_OPTIONS = [
4837
+ { id: "env_vars", label: "Environment Variables", description: "Use .env files locally, env vars in prod", recommended: true },
4838
+ { id: "dotenv", label: "dotenv / dotenvx", description: "Load .env files with dotenv library" },
4839
+ { id: "vault", label: "HashiCorp Vault", description: "Enterprise secrets management" },
4840
+ { id: "aws_secrets", label: "AWS Secrets Manager", description: "AWS native secrets storage" },
4841
+ { id: "aws_ssm", label: "AWS SSM Parameter Store", description: "AWS Systems Manager parameters" },
4842
+ { id: "gcp_secrets", label: "GCP Secret Manager", description: "Google Cloud secrets storage" },
4843
+ { id: "azure_keyvault", label: "Azure Key Vault", description: "Azure secrets and keys" },
4844
+ { id: "infisical", label: "Infisical", description: "Open-source secrets management" },
4845
+ { id: "doppler", label: "Doppler", description: "Universal secrets platform" },
4846
+ { id: "1password", label: "1Password Secrets Automation", description: "1Password for teams/CI" },
4847
+ { id: "bitwarden", label: "Bitwarden Secrets Manager", description: "Bitwarden for secrets" },
4848
+ { id: "sops", label: "SOPS (Mozilla)", description: "Encrypted files with KMS" },
4849
+ { id: "age", label: "age encryption", description: "Simple file encryption" },
4850
+ { id: "sealed_secrets", label: "Sealed Secrets (K8s)", description: "Kubernetes encrypted secrets" },
4851
+ { id: "external_secrets", label: "External Secrets Operator", description: "K8s external secrets sync" },
4852
+ { id: "git_crypt", label: "git-crypt", description: "Transparent file encryption in git" },
4853
+ { id: "chamber", label: "Chamber", description: "AWS SSM-based secrets tool" },
4854
+ { id: "berglas", label: "Berglas", description: "GCP secrets CLI tool" },
4855
+ { id: "other", label: "Other", description: "Custom secrets management" }
4856
+ ];
4857
+ var SECURITY_TOOLING_OPTIONS = [
4858
+ { id: "dependabot", label: "Dependabot", description: "GitHub dependency updates", recommended: true },
4859
+ { id: "renovate", label: "Renovate", description: "Automated dependency updates" },
4860
+ { id: "snyk", label: "Snyk", description: "Vulnerability scanning" },
4861
+ { id: "sonarqube", label: "SonarQube", description: "Code quality and security" },
4862
+ { id: "codeql", label: "CodeQL", description: "GitHub semantic analysis" },
4863
+ { id: "semgrep", label: "Semgrep", description: "Lightweight static analysis" },
4864
+ { id: "trivy", label: "Trivy", description: "Container/IaC scanning" },
4865
+ { id: "grype", label: "Grype", description: "Container vulnerability scanner" },
4866
+ { id: "checkov", label: "Checkov", description: "IaC security scanning" },
4867
+ { id: "tfsec", label: "tfsec", description: "Terraform security scanner" },
4868
+ { id: "bandit", label: "Bandit", description: "Python security linter" },
4869
+ { id: "brakeman", label: "Brakeman", description: "Rails security scanner" },
4870
+ { id: "gosec", label: "gosec", description: "Go security checker" },
4871
+ { id: "safety", label: "Safety", description: "Python dependency checker" },
4872
+ { id: "npm_audit", label: "npm audit", description: "Node.js vulnerability check" },
4873
+ { id: "ossf_scorecard", label: "OSSF Scorecard", description: "Open source security metrics" },
4874
+ { id: "gitleaks", label: "Gitleaks", description: "Secret detection in git" },
4875
+ { id: "trufflehog", label: "TruffleHog", description: "Secret scanning" },
4876
+ { id: "other", label: "Other", description: "Custom security tooling" }
4877
+ ];
4878
+ var AUTH_PATTERNS_OPTIONS = [
4879
+ { id: "session", label: "Session-based", description: "Server-side sessions with cookies", recommended: true },
4880
+ { id: "jwt", label: "JWT Tokens", description: "Stateless JSON Web Tokens" },
4881
+ { id: "oauth2", label: "OAuth 2.0", description: "Third-party authorization" },
4882
+ { id: "oidc", label: "OpenID Connect", description: "OAuth2 + identity layer" },
4883
+ { id: "saml", label: "SAML", description: "Enterprise SSO" },
4884
+ { id: "passkeys", label: "Passkeys / WebAuthn", description: "Passwordless authentication" },
4885
+ { id: "magic_link", label: "Magic Links", description: "Email-based passwordless" },
4886
+ { id: "api_keys", label: "API Keys", description: "Simple key authentication" },
4887
+ { id: "mfa", label: "Multi-Factor Auth", description: "TOTP, SMS, or hardware keys" },
4888
+ { id: "basic_auth", label: "Basic Auth", description: "Username/password in header" },
4889
+ { id: "mtls", label: "Mutual TLS", description: "Client certificate auth" },
4890
+ { id: "other", label: "Other", description: "Custom authentication" }
4891
+ ];
4892
+ var DATA_HANDLING_OPTIONS = [
4893
+ { id: "encryption_at_rest", label: "Encryption at Rest", description: "Encrypt stored data", recommended: true },
4894
+ { id: "encryption_in_transit", label: "Encryption in Transit", description: "TLS/HTTPS everywhere", recommended: true },
4895
+ { id: "input_validation", label: "Input Validation", description: "Validate all user input", recommended: true },
4896
+ { id: "output_encoding", label: "Output Encoding", description: "Prevent XSS attacks", recommended: true },
4897
+ { id: "parameterized_queries", label: "Parameterized Queries", description: "Prevent SQL injection", recommended: true },
4898
+ { id: "rate_limiting", label: "Rate Limiting", description: "Prevent abuse" },
4899
+ { id: "pii_handling", label: "PII Handling", description: "Personal data protection" },
4900
+ { id: "data_masking", label: "Data Masking", description: "Hide sensitive data" },
4901
+ { id: "audit_logging", label: "Audit Logging", description: "Track data access" },
4902
+ { id: "backup_encryption", label: "Backup Encryption", description: "Encrypt backups" },
4903
+ { id: "data_retention", label: "Data Retention Policy", description: "Auto-delete old data" },
4904
+ { id: "data_minimization", label: "Data Minimization", description: "Collect only necessary data" },
4905
+ { id: "right_to_erasure", label: "Right to Erasure", description: "Support data deletion requests" },
4906
+ { id: "data_portability", label: "Data Portability", description: "Export user data on request" },
4907
+ { id: "consent_management", label: "Consent Management", description: "Track user consent" },
4908
+ { id: "other", label: "Other", description: "Custom data handling" }
4909
+ ];
4910
+ var COMPLIANCE_OPTIONS = [
4911
+ // Privacy regulations
4912
+ { id: "gdpr", label: "GDPR", description: "EU General Data Protection Regulation", recommended: true },
4913
+ { id: "ccpa", label: "CCPA/CPRA", description: "California Consumer Privacy Act" },
4914
+ { id: "lgpd", label: "LGPD", description: "Brazil's data protection law" },
4915
+ { id: "pipeda", label: "PIPEDA", description: "Canada's privacy law" },
4916
+ { id: "pdpa", label: "PDPA", description: "Singapore's Personal Data Protection Act" },
4917
+ { id: "appi", label: "APPI", description: "Japan's privacy law" },
4918
+ // Industry-specific
4919
+ { id: "hipaa", label: "HIPAA", description: "US healthcare data protection" },
4920
+ { id: "pci_dss", label: "PCI-DSS", description: "Payment card data security" },
4921
+ { id: "ferpa", label: "FERPA", description: "US student education records" },
4922
+ { id: "coppa", label: "COPPA", description: "US children's online privacy" },
4923
+ { id: "glba", label: "GLBA", description: "US financial services privacy" },
4924
+ // Security frameworks
4925
+ { id: "soc2", label: "SOC 2", description: "Service Organization Controls" },
4926
+ { id: "iso27001", label: "ISO 27001", description: "Information security management" },
4927
+ { id: "iso27701", label: "ISO 27701", description: "Privacy information management" },
4928
+ { id: "nist", label: "NIST CSF", description: "Cybersecurity framework" },
4929
+ { id: "fedramp", label: "FedRAMP", description: "US federal cloud security" },
4930
+ { id: "cis", label: "CIS Controls", description: "Center for Internet Security" },
4931
+ // Accessibility
4932
+ { id: "wcag", label: "WCAG 2.1", description: "Web accessibility guidelines" },
4933
+ { id: "section508", label: "Section 508", description: "US federal accessibility" },
4934
+ { id: "ada", label: "ADA", description: "Americans with Disabilities Act" },
4935
+ // Other
4936
+ { id: "other", label: "Other", description: "Custom compliance requirements" }
4937
+ ];
4938
+ var ANALYTICS_OPTIONS = [
4939
+ // Privacy-focused / cookie-less
4940
+ { id: "umami", label: "Umami", description: "Privacy-focused, cookie-less, self-hosted", recommended: true },
4941
+ { id: "plausible", label: "Plausible", description: "Privacy-focused, cookie-less" },
4942
+ { id: "fathom", label: "Fathom", description: "Privacy-first analytics" },
4943
+ { id: "simple_analytics", label: "Simple Analytics", description: "Privacy-friendly, no cookies" },
4944
+ { id: "pirsch", label: "Pirsch", description: "Cookie-free web analytics" },
4945
+ { id: "counter", label: "Counter.dev", description: "Privacy-first, open-source" },
4946
+ { id: "cabin", label: "Cabin", description: "Privacy-first carbon-aware analytics" },
4947
+ { id: "goatcounter", label: "GoatCounter", description: "Open-source, privacy-aware" },
4948
+ { id: "ackee", label: "Ackee", description: "Self-hosted, privacy-focused" },
4949
+ { id: "matomo", label: "Matomo", description: "Self-hosted Google Analytics alternative" },
4950
+ // Traditional (require cookies/consent)
4951
+ { id: "google_analytics", label: "Google Analytics", description: "Requires cookie consent" },
4952
+ { id: "mixpanel", label: "Mixpanel", description: "Product analytics" },
4953
+ { id: "amplitude", label: "Amplitude", description: "Product analytics platform" },
4954
+ { id: "heap", label: "Heap", description: "Digital insights platform" },
4955
+ { id: "posthog", label: "PostHog", description: "Open-source product analytics" },
4956
+ { id: "none", label: "No Analytics", description: "Don't track users" }
4957
+ ];
4958
+
4959
+ // ../packages/shared/dist/wizard/code-style.js
4960
+ var NAMING_CONVENTIONS = [
4961
+ { id: "language_default", label: "Follow language conventions", description: "Use idiomatic style for selected language(s)" },
4962
+ { id: "camelCase", label: "camelCase", description: "JavaScript, TypeScript, Java" },
4963
+ { id: "snake_case", label: "snake_case", description: "Python, Ruby, Rust, Go" },
4964
+ { id: "PascalCase", label: "PascalCase", description: "C#, .NET classes" },
4965
+ { id: "kebab-case", label: "kebab-case", description: "CSS, HTML attributes, URLs" },
4966
+ { id: "SCREAMING_SNAKE_CASE", label: "SCREAMING_SNAKE_CASE", description: "Constants, environment variables" }
4967
+ ];
4968
+ var ERROR_HANDLING_PATTERNS = [
4969
+ { id: "try_catch", label: "Try-Catch", description: "Standard exception handling" },
4970
+ { id: "result_type", label: "Result/Either Type", description: "Functional error handling" },
4971
+ { id: "error_codes", label: "Error Codes", description: "Numeric/string error codes" },
4972
+ { id: "monads", label: "Monads (Option/Maybe)", description: "Functional programming style" },
4973
+ { id: "panic_recover", label: "Panic/Recover", description: "Go-style error handling" },
4974
+ { id: "error_boundaries", label: "Error Boundaries", description: "React error boundaries" },
4975
+ { id: "global_handler", label: "Global Error Handler", description: "Centralized error handling" },
4976
+ { id: "other", label: "Other", description: "Custom error handling" }
4977
+ ];
4978
+ var LOGGING_OPTIONS = [
4979
+ { id: "structured", label: "Structured Logging", description: "JSON logs with metadata" },
4980
+ { id: "console", label: "Console Logging", description: "Simple console.log/print" },
4981
+ { id: "log_levels", label: "Log Levels", description: "DEBUG, INFO, WARN, ERROR" },
4982
+ { id: "winston", label: "Winston", description: "Node.js logging library" },
4983
+ { id: "pino", label: "Pino", description: "Fast Node.js logger" },
4984
+ { id: "bunyan", label: "Bunyan", description: "JSON logging for Node.js" },
4985
+ { id: "log4j", label: "Log4j / Logback", description: "Java logging framework" },
4986
+ { id: "slog", label: "slog", description: "Go structured logging" },
4987
+ { id: "logrus", label: "Logrus", description: "Go structured logger" },
4988
+ { id: "zap", label: "Zap", description: "Uber's Go logger" },
4989
+ { id: "python_logging", label: "Python logging", description: "Standard library logging" },
4990
+ { id: "loguru", label: "Loguru", description: "Python logging made simple" },
4991
+ { id: "tracing", label: "tracing", description: "Rust async logging" },
4992
+ { id: "serilog", label: "Serilog", description: ".NET structured logging" },
4993
+ { id: "elk", label: "ELK Stack", description: "Elasticsearch, Logstash, Kibana" },
4994
+ { id: "loki", label: "Grafana Loki", description: "Log aggregation" },
4995
+ { id: "datadog", label: "Datadog Logs", description: "Cloud logging service" },
4996
+ { id: "other", label: "Other", description: "Custom logging" }
4997
+ ];
4998
+ var BOUNDARY_OPTIONS = [
4999
+ // File operations
5000
+ { action: "Delete files", category: "files" },
5001
+ { action: "Create new files", category: "files" },
5002
+ { action: "Rename/move files", category: "files" },
5003
+ // Code changes
5004
+ { action: "Rewrite large sections", category: "code" },
5005
+ { action: "Refactor architecture", category: "code" },
5006
+ { action: "Add new dependencies", category: "code" },
5007
+ { action: "Remove dependencies", category: "code" },
5008
+ { action: "Change public APIs", category: "code" },
5009
+ // Database
5010
+ { action: "Modify database schema", category: "database" },
5011
+ { action: "Write migrations", category: "database" },
5012
+ { action: "Delete data", category: "database" },
5013
+ // Git
5014
+ { action: "Make commits", category: "git" },
5015
+ { action: "Push to remote", category: "git" },
5016
+ { action: "Create branches", category: "git" },
5017
+ { action: "Merge branches", category: "git" },
5018
+ // Deployment
5019
+ { action: "Deploy to production", category: "deployment" },
5020
+ { action: "Modify CI/CD config", category: "deployment" },
5021
+ { action: "Change environment variables", category: "deployment" },
5022
+ // Security
5023
+ { action: "Modify authentication", category: "security" },
5024
+ { action: "Change permissions", category: "security" },
5025
+ { action: "Access secrets", category: "security" }
5026
+ ];
5027
+
5028
+ // ../packages/shared/dist/wizard/testing.js
5029
+ var TEST_LEVELS = [
5030
+ { id: "unit", label: "Unit Tests", description: "Test individual functions/components" },
5031
+ { id: "integration", label: "Integration Tests", description: "Test component interactions" },
5032
+ { id: "e2e", label: "End-to-End Tests", description: "Test full user flows" },
5033
+ { id: "smoke", label: "Smoke Tests", description: "Quick sanity checks" },
5034
+ { id: "regression", label: "Regression Tests", description: "Prevent bug recurrence" },
5035
+ { id: "performance", label: "Performance Tests", description: "Load and stress testing" },
5036
+ { id: "security", label: "Security Tests", description: "Vulnerability scanning" },
5037
+ { id: "accessibility", label: "Accessibility Tests", description: "WCAG compliance" },
5038
+ { id: "visual", label: "Visual Regression", description: "Screenshot comparison" },
5039
+ { id: "contract", label: "Contract Tests", description: "API contract validation" }
5040
+ ];
5041
+ var TEST_FRAMEWORKS = [
5042
+ // JavaScript/TypeScript
5043
+ "Jest",
5044
+ "Vitest",
5045
+ "Mocha",
5046
+ "Jasmine",
5047
+ "AVA",
5048
+ "Tape",
5049
+ "QUnit",
5050
+ "Node Test Runner",
5051
+ // E2E / Browser
5052
+ "Playwright",
5053
+ "Cypress",
5054
+ "Puppeteer",
5055
+ "Selenium",
5056
+ "WebdriverIO",
5057
+ "TestCafe",
5058
+ "Nightwatch",
5059
+ // React
5060
+ "React Testing Library",
5061
+ "Enzyme",
5062
+ // Vue
5063
+ "Vue Test Utils",
5064
+ "Vue Testing Library",
5065
+ // Angular
5066
+ "Angular Testing",
5067
+ "Karma",
5068
+ // Python
5069
+ "pytest",
5070
+ "unittest",
5071
+ "nose2",
5072
+ "doctest",
5073
+ "hypothesis",
5074
+ "tox",
5075
+ "nox",
5076
+ "Robot Framework",
5077
+ // Go
5078
+ "testing (stdlib)",
5079
+ "testify",
5080
+ "ginkgo",
5081
+ "gomega",
5082
+ "gocheck",
5083
+ // Rust
5084
+ "cargo test",
5085
+ "proptest",
5086
+ "quickcheck",
5087
+ "criterion",
5088
+ // Java
5089
+ "JUnit",
5090
+ "TestNG",
5091
+ "Mockito",
5092
+ "Spock",
5093
+ "Cucumber",
5094
+ // .NET
5095
+ "xUnit",
5096
+ "NUnit",
5097
+ "MSTest",
5098
+ "SpecFlow",
5099
+ // Ruby
5100
+ "RSpec",
5101
+ "Minitest",
5102
+ "Capybara",
5103
+ "Cucumber",
5104
+ // PHP
5105
+ "PHPUnit",
5106
+ "Pest",
5107
+ "Codeception",
5108
+ "Behat",
5109
+ // Mobile
5110
+ "XCTest",
5111
+ "Espresso",
5112
+ "Detox",
5113
+ "Appium",
5114
+ // API
5115
+ "Postman",
5116
+ "Insomnia",
5117
+ "REST Assured",
5118
+ "Supertest",
5119
+ "httpx",
5120
+ // Load
5121
+ "k6",
5122
+ "Locust",
5123
+ "Artillery",
5124
+ "JMeter",
5125
+ "Gatling",
5126
+ // Other
5127
+ "Storybook",
5128
+ "Chromatic",
5129
+ "Percy",
5130
+ "Applitools"
5131
+ ];
5132
+
5133
+ // ../packages/shared/dist/wizard/commands.js
5134
+ var COMMON_COMMANDS = [
5135
+ // Build commands - JavaScript/Node
5136
+ { cmd: "npm run build", category: "build" },
5137
+ { cmd: "pnpm build", category: "build" },
5138
+ { cmd: "yarn build", category: "build" },
5139
+ { cmd: "bun run build", category: "build" },
5140
+ { cmd: "next build", category: "build" },
5141
+ { cmd: "vite build", category: "build" },
5142
+ { cmd: "tsc", category: "build" },
5143
+ { cmd: "esbuild", category: "build" },
5144
+ { cmd: "rollup -c", category: "build" },
5145
+ { cmd: "webpack", category: "build" },
5146
+ { cmd: "parcel build", category: "build" },
5147
+ // Build - Python
5148
+ { cmd: "python setup.py build", category: "build" },
5149
+ { cmd: "pip install -e .", category: "build" },
5150
+ { cmd: "poetry build", category: "build" },
5151
+ { cmd: "pdm build", category: "build" },
5152
+ { cmd: "hatch build", category: "build" },
5153
+ // Build - Go
5154
+ { cmd: "go build", category: "build" },
5155
+ { cmd: "go build ./...", category: "build" },
5156
+ { cmd: "go install", category: "build" },
5157
+ // Build - Rust
5158
+ { cmd: "cargo build", category: "build" },
5159
+ { cmd: "cargo build --release", category: "build" },
5160
+ // Build - Java/JVM
5161
+ { cmd: "mvn package", category: "build" },
5162
+ { cmd: "mvn clean install", category: "build" },
5163
+ { cmd: "gradle build", category: "build" },
5164
+ { cmd: "./gradlew build", category: "build" },
5165
+ // Build - .NET
5166
+ { cmd: "dotnet build", category: "build" },
5167
+ { cmd: "dotnet publish", category: "build" },
5168
+ // Build - Containers
5169
+ { cmd: "docker build -t app .", category: "build" },
5170
+ { cmd: "docker compose build", category: "build" },
5171
+ { cmd: "podman build -t app .", category: "build" },
5172
+ // Build - IaC
5173
+ { cmd: "terraform init", category: "build" },
5174
+ { cmd: "terraform plan", category: "build" },
5175
+ { cmd: "pulumi preview", category: "build" },
5176
+ { cmd: "cdk synth", category: "build" },
5177
+ // Test commands - JavaScript
5178
+ { cmd: "npm test", category: "test" },
5179
+ { cmd: "pnpm test", category: "test" },
5180
+ { cmd: "yarn test", category: "test" },
5181
+ { cmd: "bun test", category: "test" },
5182
+ { cmd: "vitest", category: "test" },
5183
+ { cmd: "vitest run", category: "test" },
5184
+ { cmd: "vitest --coverage", category: "test" },
5185
+ { cmd: "jest", category: "test" },
5186
+ { cmd: "jest --coverage", category: "test" },
5187
+ { cmd: "mocha", category: "test" },
5188
+ // Test - E2E
5189
+ { cmd: "playwright test", category: "test" },
5190
+ { cmd: "cypress run", category: "test" },
5191
+ { cmd: "cypress open", category: "test" },
5192
+ // Test - Python
5193
+ { cmd: "pytest", category: "test" },
5194
+ { cmd: "pytest --cov", category: "test" },
5195
+ { cmd: "pytest -v", category: "test" },
5196
+ { cmd: "python -m unittest", category: "test" },
5197
+ { cmd: "tox", category: "test" },
5198
+ { cmd: "nox", category: "test" },
5199
+ // Test - Go
5200
+ { cmd: "go test ./...", category: "test" },
5201
+ { cmd: "go test -v ./...", category: "test" },
5202
+ { cmd: "go test -cover ./...", category: "test" },
5203
+ // Test - Rust
5204
+ { cmd: "cargo test", category: "test" },
5205
+ { cmd: "cargo test --all", category: "test" },
5206
+ // Test - Java
5207
+ { cmd: "mvn test", category: "test" },
5208
+ { cmd: "gradle test", category: "test" },
5209
+ { cmd: "./gradlew test", category: "test" },
5210
+ // Test - .NET
5211
+ { cmd: "dotnet test", category: "test" },
5212
+ // Test - Load
5213
+ { cmd: "k6 run", category: "test" },
5214
+ { cmd: "locust", category: "test" },
5215
+ { cmd: "artillery run", category: "test" },
5216
+ // Lint commands - JavaScript
5217
+ { cmd: "npm run lint", category: "lint" },
5218
+ { cmd: "eslint .", category: "lint" },
5219
+ { cmd: "eslint . --fix", category: "lint" },
5220
+ { cmd: "next lint", category: "lint" },
5221
+ { cmd: "biome check", category: "lint" },
5222
+ { cmd: "oxlint", category: "lint" },
5223
+ // Lint - Python
5224
+ { cmd: "ruff check .", category: "lint" },
5225
+ { cmd: "flake8", category: "lint" },
5226
+ { cmd: "pylint", category: "lint" },
5227
+ // Lint - Go
5228
+ { cmd: "golangci-lint run", category: "lint" },
5229
+ // Lint - Rust
5230
+ { cmd: "cargo clippy", category: "lint" },
5231
+ // Lint - Shell
5232
+ { cmd: "shellcheck *.sh", category: "lint" },
5233
+ // Lint - IaC
5234
+ { cmd: "terraform validate", category: "lint" },
5235
+ { cmd: "tflint", category: "lint" },
5236
+ { cmd: "checkov", category: "lint" },
5237
+ { cmd: "ansible-lint", category: "lint" },
5238
+ { cmd: "yamllint .", category: "lint" },
5239
+ { cmd: "helm lint", category: "lint" },
5240
+ // Lint - Docker
5241
+ { cmd: "hadolint Dockerfile", category: "lint" },
5242
+ // Dev commands
5243
+ { cmd: "npm run dev", category: "dev" },
5244
+ { cmd: "pnpm dev", category: "dev" },
5245
+ { cmd: "yarn dev", category: "dev" },
5246
+ { cmd: "bun dev", category: "dev" },
5247
+ { cmd: "next dev", category: "dev" },
5248
+ { cmd: "next dev --turbo", category: "dev" },
5249
+ { cmd: "vite", category: "dev" },
5250
+ { cmd: "vite dev", category: "dev" },
5251
+ { cmd: "nuxt dev", category: "dev" },
5252
+ { cmd: "remix dev", category: "dev" },
5253
+ { cmd: "astro dev", category: "dev" },
5254
+ // Dev - Python
5255
+ { cmd: "python app.py", category: "dev" },
5256
+ { cmd: "flask run", category: "dev" },
5257
+ { cmd: "uvicorn main:app --reload", category: "dev" },
5258
+ { cmd: "python manage.py runserver", category: "dev" },
5259
+ // Dev - Go
5260
+ { cmd: "go run .", category: "dev" },
5261
+ { cmd: "air", category: "dev" },
5262
+ // Dev - Rust
5263
+ { cmd: "cargo run", category: "dev" },
5264
+ { cmd: "cargo watch -x run", category: "dev" },
5265
+ // Dev - Containers
5266
+ { cmd: "docker compose up", category: "dev" },
5267
+ { cmd: "docker compose up -d", category: "dev" },
5268
+ { cmd: "docker compose watch", category: "dev" },
5269
+ // Dev - Kubernetes
5270
+ { cmd: "skaffold dev", category: "dev" },
5271
+ { cmd: "tilt up", category: "dev" },
5272
+ // Format commands - JavaScript
5273
+ { cmd: "prettier --write .", category: "format" },
5274
+ { cmd: "npm run format", category: "format" },
5275
+ { cmd: "pnpm format", category: "format" },
5276
+ { cmd: "biome format --write .", category: "format" },
5277
+ { cmd: "dprint fmt", category: "format" },
5278
+ // Format - Python
5279
+ { cmd: "black .", category: "format" },
5280
+ { cmd: "ruff format .", category: "format" },
5281
+ { cmd: "isort .", category: "format" },
5282
+ // Format - Go
5283
+ { cmd: "go fmt ./...", category: "format" },
5284
+ { cmd: "gofmt -w .", category: "format" },
5285
+ { cmd: "goimports -w .", category: "format" },
5286
+ // Format - Rust
5287
+ { cmd: "cargo fmt", category: "format" },
5288
+ // Format - Other
5289
+ { cmd: "shfmt -w .", category: "format" },
5290
+ { cmd: "terraform fmt -recursive", category: "format" },
5291
+ // Typecheck commands - TypeScript
5292
+ { cmd: "tsc --noEmit", category: "typecheck" },
5293
+ { cmd: "npm run typecheck", category: "typecheck" },
5294
+ { cmd: "pnpm typecheck", category: "typecheck" },
5295
+ { cmd: "vue-tsc --noEmit", category: "typecheck" },
5296
+ // Typecheck - Python
5297
+ { cmd: "mypy .", category: "typecheck" },
5298
+ { cmd: "pyright", category: "typecheck" },
5299
+ { cmd: "pyre check", category: "typecheck" },
5300
+ // Typecheck - Go
5301
+ { cmd: "go vet ./...", category: "typecheck" },
5302
+ { cmd: "staticcheck ./...", category: "typecheck" },
5303
+ // Typecheck - Rust
5304
+ { cmd: "cargo check", category: "typecheck" },
5305
+ // Clean commands
5306
+ { cmd: "npm run clean", category: "clean" },
5307
+ { cmd: "rm -rf node_modules", category: "clean" },
5308
+ { cmd: "rm -rf dist", category: "clean" },
5309
+ { cmd: "rm -rf .next", category: "clean" },
5310
+ { cmd: "rm -rf build", category: "clean" },
5311
+ { cmd: "rm -rf coverage", category: "clean" },
5312
+ { cmd: "pnpm clean", category: "clean" },
5313
+ // Clean - Python
5314
+ { cmd: "rm -rf __pycache__", category: "clean" },
5315
+ { cmd: "rm -rf .pytest_cache", category: "clean" },
5316
+ { cmd: "find . -name '*.pyc' -delete", category: "clean" },
5317
+ // Clean - Go
5318
+ { cmd: "go clean -cache", category: "clean" },
5319
+ { cmd: "go clean -testcache", category: "clean" },
5320
+ // Clean - Rust
5321
+ { cmd: "cargo clean", category: "clean" },
5322
+ // Clean - Containers
5323
+ { cmd: "docker system prune -af", category: "clean" },
5324
+ { cmd: "docker compose down -v", category: "clean" },
5325
+ // Pre-commit hooks
5326
+ { cmd: "npx husky install", category: "preCommit" },
5327
+ { cmd: "pnpm dlx husky install", category: "preCommit" },
5328
+ { cmd: "lefthook install", category: "preCommit" },
5329
+ { cmd: "pre-commit install", category: "preCommit" },
5330
+ { cmd: "pre-commit run --all-files", category: "preCommit" },
5331
+ { cmd: "lint-staged", category: "preCommit" },
5332
+ { cmd: "npx lint-staged", category: "preCommit" },
5333
+ // Other/Misc commands
5334
+ { cmd: "npm run storybook", category: "other" },
5335
+ { cmd: "prisma db push", category: "other" },
5336
+ { cmd: "prisma generate", category: "other" },
5337
+ { cmd: "prisma migrate dev", category: "other" },
5338
+ { cmd: "drizzle-kit push", category: "other" },
5339
+ // Deploy
5340
+ { cmd: "terraform apply", category: "other" },
5341
+ { cmd: "pulumi up", category: "other" },
5342
+ { cmd: "cdk deploy", category: "other" },
5343
+ { cmd: "ansible-playbook", category: "other" },
5344
+ { cmd: "helm install", category: "other" },
5345
+ { cmd: "helm upgrade --install", category: "other" },
5346
+ { cmd: "kubectl apply -f", category: "other" }
5347
+ ];
5348
+ var getCommandsByCategory = (category) => COMMON_COMMANDS.filter((c) => c.category === category).map((c) => c.cmd);
5349
+ var COMMANDS_BY_CATEGORY = {
5350
+ build: getCommandsByCategory("build"),
5351
+ test: getCommandsByCategory("test"),
5352
+ lint: getCommandsByCategory("lint"),
5353
+ dev: getCommandsByCategory("dev"),
5354
+ format: getCommandsByCategory("format"),
5355
+ typecheck: getCommandsByCategory("typecheck"),
5356
+ clean: getCommandsByCategory("clean"),
5357
+ preCommit: getCommandsByCategory("preCommit"),
5358
+ additional: getCommandsByCategory("other")
5359
+ };
5360
+
5361
+ // src/utils/wizard-options.ts
5362
+ function toCliFormat(options) {
5363
+ return options.map((o) => ({
5364
+ title: o.icon ? `${o.icon} ${o.label}` : o.label,
5365
+ value: o.id
5366
+ }));
5367
+ }
5368
+ function toCliFormatWithDesc(options) {
5369
+ return options.map((o) => ({
5370
+ title: o.icon ? `${o.icon} ${o.label}` : o.label,
5371
+ value: o.id,
5372
+ description: o.description
5373
+ }));
5374
+ }
5375
+ var LANGUAGES2 = toCliFormat(LANGUAGES);
5376
+ var FRAMEWORKS2 = toCliFormat(FRAMEWORKS);
5377
+ var DATABASES2 = toCliFormat(DATABASES);
5378
+ var PACKAGE_MANAGERS2 = PACKAGE_MANAGERS.map((o) => ({
5379
+ title: `${o.icon} ${o.label}`,
5380
+ value: o.id,
5381
+ desc: o.description
5382
+ }));
5383
+ var MONOREPO_TOOLS2 = MONOREPO_TOOLS.map((o) => ({
5384
+ title: `${o.icon} ${o.label}`,
5385
+ value: o.id,
5386
+ desc: o.description
5387
+ }));
5388
+ var JS_RUNTIMES2 = JS_RUNTIMES.map((o) => ({
5389
+ title: `${o.icon} ${o.label}`,
5390
+ value: o.id,
5391
+ desc: o.description
5392
+ }));
5393
+ var ORM_OPTIONS2 = ORM_OPTIONS.map((o) => ({
5394
+ title: o.icon ? `${o.icon} ${o.label}` : o.label,
5395
+ value: o.id,
5396
+ langs: o.languages || []
5397
+ }));
5398
+ var PROJECT_TYPES2 = PROJECT_TYPES.map((o) => ({
5399
+ id: o.id,
5400
+ label: o.label,
5401
+ icon: o.icon,
5402
+ description: o.description
5403
+ }));
5404
+ var ARCHITECTURE_PATTERNS2 = ARCHITECTURE_PATTERNS.map((o) => ({
5405
+ id: o.id,
5406
+ label: o.label,
5407
+ description: o.description
5408
+ }));
5409
+ var DEV_OS_OPTIONS2 = DEV_OS_OPTIONS.map((o) => ({
5410
+ id: o.id,
5411
+ label: o.label,
5412
+ icon: o.icon
5413
+ }));
5414
+ var REPO_HOSTS2 = REPO_HOSTS.map((o) => ({
5415
+ id: o.id,
5416
+ label: o.label,
5417
+ icon: o.icon
5418
+ }));
5419
+ var CICD_OPTIONS2 = CICD_OPTIONS.map((o) => ({
5420
+ id: o.id,
5421
+ label: o.label,
5422
+ icon: o.icon
5423
+ }));
5424
+ var LICENSES2 = LICENSES.map((o) => ({
5425
+ id: o.id,
5426
+ label: o.label
5427
+ }));
5428
+ var BRANCH_STRATEGIES2 = toCliFormatWithDesc(BRANCH_STRATEGIES);
5429
+ var DEFAULT_BRANCHES2 = toCliFormat(DEFAULT_BRANCHES);
5430
+ var SELF_HOSTED_TARGETS2 = toCliFormat(SELF_HOSTED_TARGETS);
5431
+ var CLOUD_TARGETS2 = toCliFormat(CLOUD_TARGETS);
5432
+ var DEPLOYMENT_TARGETS2 = [...SELF_HOSTED_TARGETS2, ...CLOUD_TARGETS2];
5433
+ var CONTAINER_REGISTRIES2 = CONTAINER_REGISTRIES.map((o) => ({
5434
+ id: o.id,
5435
+ label: o.label,
5436
+ icon: o.icon
5437
+ }));
5438
+ var VERSION_TAG_FORMATS2 = toCliFormatWithDesc(VERSION_TAG_FORMATS);
5439
+ var CHANGELOG_OPTIONS2 = toCliFormatWithDesc(CHANGELOG_OPTIONS);
5440
+ var VPN_OPTIONS2 = toCliFormatWithDesc(VPN_OPTIONS);
5441
+ var GITOPS_TOOLS2 = toCliFormatWithDesc(GITOPS_TOOLS);
5442
+ var AI_BEHAVIOR_RULES2 = AI_BEHAVIOR_RULES.map((o) => ({
5443
+ id: o.id,
5444
+ label: o.label,
5445
+ description: o.description,
5446
+ recommended: o.recommended
5447
+ }));
5448
+ var IMPORTANT_FILES2 = IMPORTANT_FILES.map((o) => ({
5449
+ id: o.id,
5450
+ label: o.label,
5451
+ icon: o.icon,
5452
+ description: o.description
5453
+ }));
5454
+ var PLAN_MODE_FREQUENCY2 = toCliFormatWithDesc(PLAN_MODE_FREQUENCY);
5455
+ var AUTH_PROVIDERS2 = toCliFormatWithDesc(AUTH_PROVIDERS);
5456
+ var SECRETS_MANAGEMENT_OPTIONS2 = toCliFormatWithDesc(SECRETS_MANAGEMENT_OPTIONS);
5457
+ var SECURITY_TOOLING_OPTIONS2 = toCliFormatWithDesc(SECURITY_TOOLING_OPTIONS);
5458
+ var AUTH_PATTERNS_OPTIONS2 = toCliFormatWithDesc(AUTH_PATTERNS_OPTIONS);
5459
+ var DATA_HANDLING_OPTIONS2 = toCliFormatWithDesc(DATA_HANDLING_OPTIONS);
5460
+ var COMPLIANCE_OPTIONS2 = toCliFormatWithDesc(COMPLIANCE_OPTIONS);
5461
+ var ANALYTICS_OPTIONS2 = toCliFormatWithDesc(ANALYTICS_OPTIONS);
5462
+ var NAMING_CONVENTIONS2 = NAMING_CONVENTIONS.map((o) => ({
5463
+ id: o.id,
5464
+ label: o.label,
5465
+ desc: o.description
5466
+ }));
5467
+ var ERROR_PATTERNS = ERROR_HANDLING_PATTERNS.map((o) => ({
5468
+ id: o.id,
5469
+ label: o.label
5470
+ }));
5471
+ var LOGGING_OPTIONS2 = LOGGING_OPTIONS.map((o) => ({
5472
+ id: o.id,
5473
+ label: o.label
5474
+ }));
5475
+ var BOUNDARY_OPTIONS2 = BOUNDARY_OPTIONS.map((o) => o.action);
5476
+ var TEST_LEVELS2 = TEST_LEVELS.map((o) => ({
5477
+ id: o.id,
5478
+ label: o.label,
5479
+ desc: o.description
5480
+ }));
5481
+ var TEST_FRAMEWORKS2 = TEST_FRAMEWORKS;
5482
+
4089
5483
  // src/commands/wizard.ts
4090
5484
  var DRAFTS_DIR = ".lynxprompt/drafts";
4091
- var CLI_VERSION = "1.4.13";
5485
+ var CLI_VERSION = "2.0.1";
4092
5486
  async function saveDraftLocally(name, config2, stepReached) {
4093
5487
  const draftsPath = join4(process.cwd(), DRAFTS_DIR);
4094
5488
  await mkdir3(draftsPath, { recursive: true });
@@ -4232,59 +5626,21 @@ var ALL_PLATFORMS = [
4232
5626
  { id: "crush", name: "Crush", file: "CRUSH.md", icon: "\u{1F4A5}", note: "AI coding assistant" },
4233
5627
  { id: "firebender", name: "Firebender", file: "firebender.json", icon: "\u{1F525}", note: "AI code transformation" }
4234
5628
  ];
4235
- var LANGUAGES = [
4236
- { title: "\u{1F537} TypeScript", value: "typescript" },
4237
- { title: "\u{1F7E1} JavaScript", value: "javascript" },
4238
- { title: "\u{1F40D} Python", value: "python" },
4239
- { title: "\u{1F535} Go", value: "go" },
4240
- { title: "\u{1F980} Rust", value: "rust" },
4241
- { title: "\u2615 Java", value: "java" },
4242
- { title: "\u{1F49C} C#/.NET", value: "csharp" },
4243
- { title: "\u{1F48E} Ruby", value: "ruby" },
4244
- { title: "\u{1F418} PHP", value: "php" },
4245
- { title: "\u{1F34E} Swift", value: "swift" },
4246
- { title: "\u{1F536} Kotlin", value: "kotlin" },
4247
- { title: "\u2B1B C/C++", value: "cpp" }
4248
- ];
4249
- var FRAMEWORKS = [
4250
- { title: "\u269B\uFE0F React", value: "react" },
4251
- { title: "\u25B2 Next.js", value: "nextjs" },
4252
- { title: "\u{1F49A} Vue.js", value: "vue" },
4253
- { title: "\u{1F170}\uFE0F Angular", value: "angular" },
4254
- { title: "\u{1F525} Svelte", value: "svelte" },
4255
- { title: "\u{1F682} Express", value: "express" },
4256
- { title: "\u26A1 FastAPI", value: "fastapi" },
4257
- { title: "\u{1F3B8} Django", value: "django" },
4258
- { title: "\u{1F9EA} Flask", value: "flask" },
4259
- { title: "\u{1F343} Spring", value: "spring" },
4260
- { title: "\u{1F48E} Rails", value: "rails" },
4261
- { title: "\u{1F534} Laravel", value: "laravel" },
4262
- { title: "\u{1F3D7}\uFE0F NestJS", value: "nestjs" },
4263
- { title: "\u26A1 Vite", value: "vite" },
4264
- { title: "\u{1F4F1} React Native", value: "react-native" }
4265
- ];
4266
- var DATABASES = [
4267
- { title: "\u{1F418} PostgreSQL", value: "postgresql" },
4268
- { title: "\u{1F42C} MySQL", value: "mysql" },
4269
- { title: "\u{1F343} MongoDB", value: "mongodb" },
4270
- { title: "\u{1F534} Redis", value: "redis" },
4271
- { title: "\u{1F4CA} SQLite", value: "sqlite" },
4272
- { title: "\u2601\uFE0F Supabase", value: "supabase" },
4273
- { title: "\u{1F525} Firebase", value: "firebase" },
4274
- { title: "\u{1F4C2} Prisma", value: "prisma" }
4275
- ];
4276
- var PACKAGE_MANAGERS = [
5629
+ var LANGUAGES3 = LANGUAGES2;
5630
+ var FRAMEWORKS3 = FRAMEWORKS2;
5631
+ var DATABASES3 = DATABASES2;
5632
+ var PACKAGE_MANAGERS3 = [
4277
5633
  { title: "\u{1F4E6} npm", value: "npm", desc: "Node Package Manager (default)" },
4278
5634
  { title: "\u{1F9F6} Yarn", value: "yarn", desc: "Fast, reliable, and secure" },
4279
5635
  { title: "\u{1F4C0} pnpm", value: "pnpm", desc: "Fast, disk space efficient" },
4280
5636
  { title: "\u{1F95F} Bun", value: "bun", desc: "All-in-one JS runtime + PM" }
4281
5637
  ];
4282
- var JS_RUNTIMES = [
5638
+ var JS_RUNTIMES3 = [
4283
5639
  { title: "\u{1F7E2} Node.js", value: "node", desc: "Standard JavaScript runtime" },
4284
5640
  { title: "\u{1F995} Deno", value: "deno", desc: "Secure runtime with TypeScript" },
4285
5641
  { title: "\u{1F95F} Bun", value: "bun", desc: "Fast all-in-one JS runtime" }
4286
5642
  ];
4287
- var MONOREPO_TOOLS = [
5643
+ var MONOREPO_TOOLS3 = [
4288
5644
  { title: "\u{1F4C1} None", value: "", desc: "Single package repository" },
4289
5645
  { title: "\u26A1 Turborepo", value: "turborepo", desc: "High-performance build system" },
4290
5646
  { title: "\u{1F537} Nx", value: "nx", desc: "Smart, extensible build framework" },
@@ -4293,7 +5649,7 @@ var MONOREPO_TOOLS = [
4293
5649
  { title: "\u{1F9F6} Yarn Workspaces", value: "yarn_workspaces", desc: "Native Yarn monorepo" },
4294
5650
  { title: "\u{1F4E6} npm Workspaces", value: "npm_workspaces", desc: "Native npm monorepo" }
4295
5651
  ];
4296
- var ORM_OPTIONS = [
5652
+ var ORM_OPTIONS3 = [
4297
5653
  { title: "\u{1F4DD} None / Raw SQL", value: "", langs: [] },
4298
5654
  // JavaScript/TypeScript
4299
5655
  { title: "\u{1F537} Prisma", value: "prisma", langs: ["javascript", "typescript"] },
@@ -4327,7 +5683,7 @@ var ORM_OPTIONS = [
4327
5683
  { title: "\u{1F418} Eloquent", value: "eloquent", langs: ["php"] },
4328
5684
  { title: "\u{1F4D6} Doctrine", value: "doctrine", langs: ["php"] }
4329
5685
  ];
4330
- var REPO_HOSTS = [
5686
+ var REPO_HOSTS3 = [
4331
5687
  { id: "github", label: "GitHub", icon: "\u{1F419}" },
4332
5688
  { id: "gitlab", label: "GitLab", icon: "\u{1F98A}" },
4333
5689
  { id: "bitbucket", label: "Bitbucket", icon: "\u{1FAA3}" },
@@ -4335,7 +5691,7 @@ var REPO_HOSTS = [
4335
5691
  { id: "azure", label: "Azure DevOps", icon: "\u2601\uFE0F" },
4336
5692
  { id: "other", label: "Other", icon: "\u{1F4E6}" }
4337
5693
  ];
4338
- var LICENSES = [
5694
+ var LICENSES3 = [
4339
5695
  { id: "mit", label: "MIT" },
4340
5696
  { id: "apache-2.0", label: "Apache 2.0" },
4341
5697
  { id: "gpl-3.0", label: "GPL 3.0" },
@@ -4346,7 +5702,7 @@ var LICENSES = [
4346
5702
  { id: "unlicense", label: "Unlicense" },
4347
5703
  { id: "none", label: "None / Proprietary" }
4348
5704
  ];
4349
- var CICD_OPTIONS = [
5705
+ var CICD_OPTIONS3 = [
4350
5706
  { id: "github_actions", label: "GitHub Actions", icon: "\u{1F419}" },
4351
5707
  { id: "gitlab_ci", label: "GitLab CI", icon: "\u{1F98A}" },
4352
5708
  { id: "jenkins", label: "Jenkins", icon: "\u{1F527}" },
@@ -4364,7 +5720,7 @@ var CICD_OPTIONS = [
4364
5720
  { id: "none", label: "None / Manual", icon: "\u{1F527}" },
4365
5721
  { id: "other", label: "Other", icon: "\u{1F4E6}" }
4366
5722
  ];
4367
- var CLOUD_TARGETS = [
5723
+ var CLOUD_TARGETS3 = [
4368
5724
  { id: "vercel", label: "Vercel", icon: "\u25B2 " },
4369
5725
  { id: "netlify", label: "Netlify", icon: "\u{1F310}" },
4370
5726
  { id: "cloudflare_pages", label: "Cloudflare Pages", icon: "\u{1F536}" },
@@ -4383,7 +5739,7 @@ var CLOUD_TARGETS = [
4383
5739
  { id: "digitalocean_app", label: "DigitalOcean App Platform", icon: "\u{1F535}" },
4384
5740
  { id: "deno_deploy", label: "Deno Deploy", icon: "\u{1F995}" }
4385
5741
  ];
4386
- var SELF_HOSTED_TARGETS = [
5742
+ var SELF_HOSTED_TARGETS3 = [
4387
5743
  { id: "docker", label: "Docker", icon: "\u{1F433}" },
4388
5744
  { id: "docker_compose", label: "Docker Compose", icon: "\u{1F433}" },
4389
5745
  { id: "kubernetes", label: "Kubernetes", icon: "\u2638\uFE0F " },
@@ -4401,7 +5757,7 @@ var SELF_HOSTED_TARGETS = [
4401
5757
  { id: "portainer", label: "Portainer", icon: "\u{1F40B}" },
4402
5758
  { id: "rancher", label: "Rancher", icon: "\u{1F404}" }
4403
5759
  ];
4404
- var CONTAINER_REGISTRIES = [
5760
+ var CONTAINER_REGISTRIES3 = [
4405
5761
  { id: "dockerhub", label: "Docker Hub", icon: "\u{1F433}" },
4406
5762
  { id: "ghcr", label: "GitHub Container Registry", icon: "\u{1F419}" },
4407
5763
  { id: "gcr", label: "Google Container Registry", icon: "\u{1F308}" },
@@ -4411,7 +5767,7 @@ var CONTAINER_REGISTRIES = [
4411
5767
  { id: "gitlab", label: "GitLab Registry", icon: "\u{1F98A}" },
4412
5768
  { id: "custom", label: "Custom/Self-hosted", icon: "\u{1F3E0}" }
4413
5769
  ];
4414
- var COMMON_COMMANDS = {
5770
+ var COMMON_COMMANDS2 = {
4415
5771
  build: [
4416
5772
  // JavaScript/Node
4417
5773
  "npm run build",
@@ -4686,21 +6042,21 @@ var COMMON_COMMANDS = {
4686
6042
  "railway up"
4687
6043
  ]
4688
6044
  };
4689
- var NAMING_CONVENTIONS = [
6045
+ var NAMING_CONVENTIONS3 = [
4690
6046
  { id: "language_default", label: "Follow language conventions", desc: "Use idiomatic style (recommended)" },
4691
6047
  { id: "camelCase", label: "camelCase", desc: "JavaScript, TypeScript, Java" },
4692
6048
  { id: "snake_case", label: "snake_case", desc: "Python, Ruby, Rust, Go" },
4693
6049
  { id: "PascalCase", label: "PascalCase", desc: "C#, .NET classes" },
4694
6050
  { id: "kebab-case", label: "kebab-case", desc: "CSS, HTML, URLs" }
4695
6051
  ];
4696
- var ERROR_PATTERNS = [
6052
+ var ERROR_PATTERNS2 = [
4697
6053
  { id: "try_catch", label: "try/catch blocks" },
4698
6054
  { id: "result_types", label: "Result/Either types" },
4699
6055
  { id: "error_codes", label: "Error codes" },
4700
6056
  { id: "exceptions", label: "Custom exceptions" },
4701
6057
  { id: "other", label: "Other" }
4702
6058
  ];
4703
- var LOGGING_OPTIONS = [
6059
+ var LOGGING_OPTIONS3 = [
4704
6060
  { id: "structured_json", label: "Structured JSON" },
4705
6061
  { id: "console_log", label: "Console.log (dev)" },
4706
6062
  { id: "log_levels", label: "Log Levels (debug/info/warn/error)" },
@@ -4713,14 +6069,20 @@ var LOGGING_OPTIONS = [
4713
6069
  { id: "opentelemetry", label: "OpenTelemetry" },
4714
6070
  { id: "other", label: "Other" }
4715
6071
  ];
4716
- var AI_BEHAVIOR_RULES = [
6072
+ var AI_BEHAVIOR_RULES3 = [
4717
6073
  { id: "always_debug_after_build", label: "Always Debug After Building", description: "AI should build and run code locally to verify changes work before suggesting them as complete", recommended: true },
4718
6074
  { id: "check_logs_after_build", label: "Check Logs After Build/Commit", description: "AI should review build output, test logs, and error messages to catch issues early", recommended: true },
4719
6075
  { id: "run_tests_before_commit", label: "Run Tests Before Commit", description: "AI must run the test suite and ensure all tests pass before suggesting a commit", recommended: true },
4720
6076
  { id: "follow_existing_patterns", label: "Follow Existing Patterns", description: "AI should study existing code and follow the same naming, structure, and conventions used in the codebase", recommended: true },
4721
- { id: "ask_before_large_refactors", label: "Ask Before Large Refactors", description: "AI should always ask for explicit approval before making significant architectural changes or refactoring multiple files", recommended: true }
6077
+ { id: "ask_before_large_refactors", label: "Ask Before Large Refactors", description: "AI should always ask for explicit approval before making significant architectural changes or refactoring multiple files", recommended: true },
6078
+ // Burke Holland-inspired rules
6079
+ { id: "code_for_llms", label: "Code for LLMs", description: "Optimize code for LLM reasoning: flat/explicit patterns, minimal abstractions, structured logging" },
6080
+ { id: "self_improving", label: "Self-Improving Config", description: "AI updates this config file when it learns new project patterns or conventions" },
6081
+ { id: "verify_work", label: "Always Verify Work", description: "Run tests, check builds, and confirm changes work before returning control", recommended: true },
6082
+ { id: "terminal_management", label: "Terminal Management", description: "Reuse existing terminals and close unused ones" },
6083
+ { id: "check_docs_first", label: "Check Docs First", description: "Check documentation via MCP or project docs before assuming knowledge about APIs" }
4722
6084
  ];
4723
- var SECRETS_MANAGEMENT_OPTIONS = [
6085
+ var SECRETS_MANAGEMENT_OPTIONS3 = [
4724
6086
  { id: "env_vars", label: "Environment Variables", description: "Use .env files locally, env vars in prod", recommended: true },
4725
6087
  { id: "dotenv", label: "dotenv / dotenvx", description: "Load .env files with dotenv library" },
4726
6088
  { id: "vault", label: "HashiCorp Vault", description: "Enterprise secrets management" },
@@ -4741,7 +6103,7 @@ var SECRETS_MANAGEMENT_OPTIONS = [
4741
6103
  { id: "berglas", label: "Berglas", description: "GCP secrets CLI tool" },
4742
6104
  { id: "other", label: "Other", description: "Custom secrets management" }
4743
6105
  ];
4744
- var SECURITY_TOOLING_OPTIONS = [
6106
+ var SECURITY_TOOLING_OPTIONS3 = [
4745
6107
  { id: "dependabot", label: "Dependabot", description: "GitHub dependency updates", recommended: true },
4746
6108
  { id: "renovate", label: "Renovate", description: "Multi-platform dependency updates", recommended: true },
4747
6109
  { id: "snyk", label: "Snyk", description: "Vulnerability scanning & fixing" },
@@ -4770,7 +6132,7 @@ var SECURITY_TOOLING_OPTIONS = [
4770
6132
  { id: "fossa", label: "FOSSA", description: "License & security compliance" },
4771
6133
  { id: "other", label: "Other", description: "Custom security tooling" }
4772
6134
  ];
4773
- var AUTH_PATTERNS_OPTIONS = [
6135
+ var AUTH_PATTERNS_OPTIONS3 = [
4774
6136
  { id: "oauth2", label: "OAuth 2.0", description: "Standard authorization framework", recommended: true },
4775
6137
  { id: "oidc", label: "OpenID Connect (OIDC)", description: "Identity layer on OAuth 2.0", recommended: true },
4776
6138
  { id: "jwt", label: "JWT (JSON Web Tokens)", description: "Stateless token authentication" },
@@ -4793,7 +6155,7 @@ var AUTH_PATTERNS_OPTIONS = [
4793
6155
  { id: "workos", label: "WorkOS", description: "Enterprise SSO" },
4794
6156
  { id: "other", label: "Other", description: "Custom auth pattern" }
4795
6157
  ];
4796
- var DATA_HANDLING_OPTIONS = [
6158
+ var DATA_HANDLING_OPTIONS3 = [
4797
6159
  { id: "encryption_at_rest", label: "Encryption at Rest", description: "Encrypt stored data", recommended: true },
4798
6160
  { id: "encryption_in_transit", label: "Encryption in Transit (TLS)", description: "HTTPS/TLS for all connections", recommended: true },
4799
6161
  { id: "pii_handling", label: "PII Data Handling", description: "Special handling for personal data" },
@@ -4815,7 +6177,7 @@ var DATA_HANDLING_OPTIONS = [
4815
6177
  { id: "dlp", label: "DLP (Data Loss Prevention)", description: "Prevent data leakage" },
4816
6178
  { id: "other", label: "Other", description: "Custom data handling" }
4817
6179
  ];
4818
- var IMPORTANT_FILES = [
6180
+ var IMPORTANT_FILES3 = [
4819
6181
  { id: "readme", label: "README.md", icon: "\u{1F4D6}", description: "Project overview, setup instructions, and documentation" },
4820
6182
  { id: "package_json", label: "package.json", icon: "\u{1F4E6}", description: "Dependencies, scripts, and project metadata" },
4821
6183
  { id: "changelog", label: "CHANGELOG.md", icon: "\u{1F4DD}", description: "Version history and release notes" },
@@ -4829,7 +6191,7 @@ var IMPORTANT_FILES = [
4829
6191
  { id: "api_docs", label: "API documentation", icon: "\u{1F4DA}", description: "API reference and usage examples" },
4830
6192
  { id: "database_schema", label: "Database schema / migrations", icon: "\u{1F5C4}\uFE0F", description: "Database structure and migration files" }
4831
6193
  ];
4832
- var BOUNDARY_OPTIONS = [
6194
+ var BOUNDARY_OPTIONS3 = [
4833
6195
  "Delete files",
4834
6196
  "Create new files",
4835
6197
  "Rename/move files",
@@ -4848,133 +6210,20 @@ var BOUNDARY_OPTIONS = [
4848
6210
  "Delete failing tests",
4849
6211
  "Skip tests temporarily"
4850
6212
  ];
4851
- var TEST_FRAMEWORKS = [
4852
- // JavaScript/TypeScript
4853
- "jest",
4854
- "vitest",
4855
- "mocha",
4856
- "ava",
4857
- "tap",
4858
- "bun:test",
4859
- // E2E/Integration
4860
- "playwright",
4861
- "cypress",
4862
- "puppeteer",
4863
- "selenium",
4864
- "webdriverio",
4865
- "testcafe",
4866
- // React/Frontend
4867
- "rtl",
4868
- "enzyme",
4869
- "storybook",
4870
- "chromatic",
4871
- // API/Mocking
4872
- "msw",
4873
- "supertest",
4874
- "pact",
4875
- "dredd",
4876
- "karate",
4877
- "postman",
4878
- "insomnia",
4879
- // Python
4880
- "pytest",
4881
- "unittest",
4882
- "nose2",
4883
- "hypothesis",
4884
- "behave",
4885
- "robot",
4886
- // Go
4887
- "go-test",
4888
- "testify",
4889
- "ginkgo",
4890
- "gomega",
4891
- // Java/JVM
4892
- "junit",
4893
- "testng",
4894
- "mockito",
4895
- "spock",
4896
- "cucumber-jvm",
4897
- // Ruby
4898
- "rspec",
4899
- "minitest",
4900
- "capybara",
4901
- "factory_bot",
4902
- // .NET
4903
- "xunit",
4904
- "nunit",
4905
- "mstest",
4906
- "specflow",
4907
- // Infrastructure/DevOps
4908
- "terratest",
4909
- "conftest",
4910
- "opa",
4911
- "inspec",
4912
- "serverspec",
4913
- "molecule",
4914
- "kitchen",
4915
- "goss",
4916
- // Kubernetes
4917
- "kubetest",
4918
- "kuttl",
4919
- "chainsaw",
4920
- "helm-unittest",
4921
- // Security
4922
- "owasp-zap",
4923
- "burpsuite",
4924
- "nuclei",
4925
- "semgrep",
4926
- // Load/Performance
4927
- "k6",
4928
- "locust",
4929
- "jmeter",
4930
- "artillery",
4931
- "gatling",
4932
- "vegeta",
4933
- "wrk",
4934
- "ab",
4935
- // Chaos Engineering
4936
- "chaos-mesh",
4937
- "litmus",
4938
- "gremlin",
4939
- "toxiproxy",
4940
- // Contract Testing
4941
- "spring-cloud-contract",
4942
- "specmatic",
4943
- // BDD
4944
- "cucumber",
4945
- "gauge",
4946
- "concordion",
4947
- // Mutation Testing
4948
- "stryker",
4949
- "pitest",
4950
- "mutmut",
4951
- // Fuzzing
4952
- "go-fuzz",
4953
- "afl",
4954
- "libfuzzer",
4955
- "jazzer",
4956
- // PHP
4957
- "phpunit",
4958
- "pest",
4959
- "codeception",
4960
- // Rust
4961
- "cargo-test",
4962
- "rstest",
4963
- "proptest"
4964
- ];
4965
- var TEST_LEVELS = [
6213
+ var TEST_FRAMEWORKS3 = TEST_FRAMEWORKS2;
6214
+ var TEST_LEVELS3 = [
4966
6215
  { id: "smoke", label: "Smoke", desc: "Quick sanity checks" },
4967
6216
  { id: "unit", label: "Unit", desc: "Individual functions/components" },
4968
6217
  { id: "integration", label: "Integration", desc: "Component interactions" },
4969
6218
  { id: "e2e", label: "E2E", desc: "Full user flows" }
4970
6219
  ];
4971
- var PROJECT_TYPES = [
6220
+ var PROJECT_TYPES3 = [
4972
6221
  { id: "work", label: "Work", icon: "\u{1F4BC}", description: "Professional/enterprise project" },
4973
6222
  { id: "leisure", label: "Leisure", icon: "\u{1F3AE}", description: "Personal/hobby project" },
4974
6223
  { id: "opensource", label: "Open Source", icon: "\u{1F30D}", description: "Community-driven project" },
4975
6224
  { id: "learning", label: "Learning", icon: "\u{1F4DA}", description: "Educational/experimental" }
4976
6225
  ];
4977
- var DEV_OS_OPTIONS = [
6226
+ var DEV_OS_OPTIONS3 = [
4978
6227
  { id: "macos", label: "macOS", icon: "\u{1F34E}" },
4979
6228
  { id: "linux", label: "Linux", icon: "\u{1F427}" },
4980
6229
  { id: "windows", label: "Windows", icon: "\u{1FA9F}" },
@@ -4990,7 +6239,7 @@ function detectCurrentOS() {
4990
6239
  if (platform2 === "win32") return "windows";
4991
6240
  return "";
4992
6241
  }
4993
- var ARCHITECTURE_PATTERNS = [
6242
+ var ARCHITECTURE_PATTERNS3 = [
4994
6243
  { id: "monolith", label: "Monolith" },
4995
6244
  { id: "microservices", label: "Microservices" },
4996
6245
  { id: "multi_image_docker", label: "Multi-Image Docker (shared codebase)" },
@@ -5254,13 +6503,11 @@ async function runWizardWithDraftProtection(options) {
5254
6503
  const user = getUser();
5255
6504
  const userPlanRaw = user?.plan?.toLowerCase() || "free";
5256
6505
  const userTier = userPlanRaw === "teams" ? "teams" : "users";
5257
- const userPlanDisplay = userTier === "teams" ? "TEAMS" : "USERS";
5258
6506
  if (!authenticated) {
5259
6507
  console.log(chalk7.gray(` \u{1F464} Running as guest. ${chalk7.cyan("lynxp login")} for cloud sync & sharing.`));
5260
6508
  console.log();
5261
6509
  } else {
5262
- const planEmoji = userTier === "teams" ? "\u{1F465}" : "\u{1F193}";
5263
- console.log(chalk7.green(` \u2713 Logged in as ${chalk7.bold(user?.name || user?.email)} ${planEmoji} ${chalk7.gray(userPlanDisplay)}`));
6510
+ console.log(chalk7.green(` \u2713 Logged in as ${chalk7.bold(user?.name || user?.email)}`));
5264
6511
  console.log();
5265
6512
  }
5266
6513
  showWizardOverview(userTier);
@@ -5693,7 +6940,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5693
6940
  const isDetectedOpenSource = detected?.isPublicRepo === true;
5694
6941
  const projectTypeChoices = [
5695
6942
  { title: chalk7.gray("\u23ED Skip"), value: "" },
5696
- ...PROJECT_TYPES.map((t) => ({
6943
+ ...PROJECT_TYPES3.map((t) => ({
5697
6944
  title: t.id === "opensource" && isDetectedOpenSource ? `${t.icon} ${t.label} ${chalk7.green("(detected)")}` : `${t.icon} ${t.label}`,
5698
6945
  value: t.id,
5699
6946
  description: chalk7.gray(t.description)
@@ -5713,7 +6960,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5713
6960
  type: "autocompleteMultiselect",
5714
6961
  name: "devOS",
5715
6962
  message: chalk7.white("Development environment(s) (type to search):"),
5716
- choices: DEV_OS_OPTIONS.map((o) => ({
6963
+ choices: DEV_OS_OPTIONS3.map((o) => ({
5717
6964
  title: o.id === currentOS ? `${o.icon} ${o.label} ${chalk7.green("(detected by your current system)")}` : `${o.icon} ${o.label}`,
5718
6965
  value: o.id,
5719
6966
  selected: o.id === currentOS
@@ -5729,7 +6976,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5729
6976
  message: chalk7.white("Architecture pattern:"),
5730
6977
  choices: [
5731
6978
  { title: chalk7.gray("\u23ED Skip"), value: "" },
5732
- ...ARCHITECTURE_PATTERNS.map((a) => ({
6979
+ ...ARCHITECTURE_PATTERNS3.map((a) => ({
5733
6980
  title: a.label,
5734
6981
  value: a.id
5735
6982
  }))
@@ -5782,7 +7029,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5782
7029
  console.log(chalk7.green(` \u2713 Detected in project: ${detected.stack.join(", ")}`));
5783
7030
  console.log();
5784
7031
  }
5785
- const languageChoices = sortSelectedFirst(LANGUAGES.map((s) => {
7032
+ const languageChoices = sortSelectedFirst(LANGUAGES3.map((s) => {
5786
7033
  const isDetected = detected?.stack?.includes(s.value);
5787
7034
  return {
5788
7035
  title: isDetected ? `${s.title} ${chalk7.green("(detected)")}` : s.title,
@@ -5799,7 +7046,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5799
7046
  instructions: false
5800
7047
  }, promptConfig);
5801
7048
  const selectedLanguages = languageResponse.languages || [];
5802
- const frameworkChoices = sortSelectedFirst(FRAMEWORKS.map((s) => {
7049
+ const frameworkChoices = sortSelectedFirst(FRAMEWORKS3.map((s) => {
5803
7050
  const isDetected = detected?.stack?.includes(s.value);
5804
7051
  return {
5805
7052
  title: isDetected ? `${s.title} ${chalk7.green("(detected)")}` : s.title,
@@ -5816,7 +7063,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5816
7063
  instructions: false
5817
7064
  }, promptConfig);
5818
7065
  const selectedFrameworks = frameworkResponse.frameworks || [];
5819
- const databaseChoices = sortSelectedFirst(DATABASES.map((s) => {
7066
+ const databaseChoices = sortSelectedFirst(DATABASES3.map((s) => {
5820
7067
  const isDetected = detected?.stack?.includes(s.value);
5821
7068
  return {
5822
7069
  title: isDetected ? `${s.title} ${chalk7.green("(detected)")}` : s.title,
@@ -5842,7 +7089,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5842
7089
  type: "select",
5843
7090
  name: "packageManager",
5844
7091
  message: chalk7.white("Package manager:"),
5845
- choices: PACKAGE_MANAGERS.map((pm) => ({
7092
+ choices: PACKAGE_MANAGERS3.map((pm) => ({
5846
7093
  title: `${pm.title} - ${chalk7.gray(pm.desc)}`,
5847
7094
  value: pm.value
5848
7095
  })),
@@ -5853,7 +7100,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5853
7100
  type: "select",
5854
7101
  name: "jsRuntime",
5855
7102
  message: chalk7.white("JavaScript runtime:"),
5856
- choices: JS_RUNTIMES.map((rt) => ({
7103
+ choices: JS_RUNTIMES3.map((rt) => ({
5857
7104
  title: `${rt.title} - ${chalk7.gray(rt.desc)}`,
5858
7105
  value: rt.value
5859
7106
  })),
@@ -5864,7 +7111,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5864
7111
  type: "select",
5865
7112
  name: "monorepoTool",
5866
7113
  message: chalk7.white("Monorepo tool:"),
5867
- choices: MONOREPO_TOOLS.map((mt) => ({
7114
+ choices: MONOREPO_TOOLS3.map((mt) => ({
5868
7115
  title: `${mt.title} - ${chalk7.gray(mt.desc)}`,
5869
7116
  value: mt.value
5870
7117
  })),
@@ -5876,7 +7123,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5876
7123
  console.log();
5877
7124
  console.log(chalk7.cyan(" \u{1F517} ORM / Database Library"));
5878
7125
  console.log();
5879
- const relevantOrms = ORM_OPTIONS.filter(
7126
+ const relevantOrms = ORM_OPTIONS3.filter(
5880
7127
  (orm) => orm.langs.length === 0 || orm.langs.some((l) => selectedLanguages.includes(l))
5881
7128
  );
5882
7129
  const ormResponse = await prompts3({
@@ -5911,7 +7158,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5911
7158
  }
5912
7159
  const repoHostChoices = [
5913
7160
  { title: chalk7.gray("\u23ED Skip"), value: "" },
5914
- ...REPO_HOSTS.map((h) => ({
7161
+ ...REPO_HOSTS3.map((h) => ({
5915
7162
  title: detected?.repoHost === h.id ? `${h.icon} ${h.label} ${chalk7.green("(detected)")}` : `${h.icon} ${h.label}`,
5916
7163
  value: h.id
5917
7164
  }))
@@ -5938,7 +7185,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5938
7185
  answers.isPublic = visibilityResponse.isPublic ?? true;
5939
7186
  const licenseChoices = [
5940
7187
  { title: chalk7.gray("\u23ED Skip"), value: "" },
5941
- ...LICENSES.map((l) => ({
7188
+ ...LICENSES3.map((l) => ({
5942
7189
  title: detected?.license === l.id ? `${l.label} ${chalk7.green("(detected)")}` : l.label,
5943
7190
  value: l.id
5944
7191
  }))
@@ -6071,10 +7318,10 @@ async function runInteractiveWizard(options, detected, userTier) {
6071
7318
  name: "useGitWorktrees",
6072
7319
  message: chalk7.white("\u{1F332} Do you plan on working with several AI agent sessions in this repository?"),
6073
7320
  initial: true,
6074
- hint: "If yes, AI will be instructed to always use git worktrees for each task"
7321
+ hint: "Enable if you use multiple AI agents (Cursor, Claude, Copilot) in parallel. Each task gets its own git worktree to prevent branch conflicts."
6075
7322
  }, promptConfig);
6076
7323
  answers.useGitWorktrees = useGitWorktreesResponse.useGitWorktrees ?? true;
6077
- const cicdChoices = CICD_OPTIONS.map((c) => ({
7324
+ const cicdChoices = CICD_OPTIONS3.map((c) => ({
6078
7325
  title: detected?.cicd === c.id ? `${c.icon} ${c.label} ${chalk7.green("(detected)")}` : `${c.icon} ${c.label}`,
6079
7326
  value: c.id,
6080
7327
  selected: detected?.cicd === c.id
@@ -6112,7 +7359,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6112
7359
  const deployType = deployTypeResponse.deployType || "skip";
6113
7360
  let allDeployTargets = [];
6114
7361
  if (deployType === "cloud" || deployType === "both") {
6115
- const cloudChoices = CLOUD_TARGETS.map((t) => ({
7362
+ const cloudChoices = CLOUD_TARGETS3.map((t) => ({
6116
7363
  title: `${t.icon}${t.label}`,
6117
7364
  value: t.id
6118
7365
  }));
@@ -6127,7 +7374,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6127
7374
  allDeployTargets = [...cloudResponse.cloudTargets || []];
6128
7375
  }
6129
7376
  if (deployType === "self_hosted" || deployType === "both") {
6130
- const selfHostedChoices = sortSelectedFirst(SELF_HOSTED_TARGETS.map((t) => ({
7377
+ const selfHostedChoices = sortSelectedFirst(SELF_HOSTED_TARGETS3.map((t) => ({
6131
7378
  title: t.id === "docker" && detected?.hasDocker ? `${t.icon}${t.label} ${chalk7.green("(detected)")}` : `${t.icon}${t.label}`,
6132
7379
  selected: t.id === "docker" && detected?.hasDocker,
6133
7380
  value: t.id
@@ -6163,7 +7410,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6163
7410
  message: chalk7.white("Container registry:"),
6164
7411
  choices: [
6165
7412
  { title: chalk7.gray("\u23ED Skip"), value: "" },
6166
- ...CONTAINER_REGISTRIES.map((r) => ({
7413
+ ...CONTAINER_REGISTRIES3.map((r) => ({
6167
7414
  title: `${r.icon} ${r.label}`,
6168
7415
  value: r.id
6169
7416
  }))
@@ -6262,7 +7509,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6262
7509
  type: "autocompleteMultiselect",
6263
7510
  name: "secretsManagement",
6264
7511
  message: chalk7.white("Secrets management strategies (type to search):"),
6265
- choices: SECRETS_MANAGEMENT_OPTIONS.map((opt) => ({
7512
+ choices: SECRETS_MANAGEMENT_OPTIONS3.map((opt) => ({
6266
7513
  title: opt.recommended ? `${opt.label} ${chalk7.green("\u2605 recommended")}` : opt.label,
6267
7514
  value: opt.id,
6268
7515
  description: chalk7.gray(opt.description),
@@ -6289,7 +7536,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6289
7536
  type: "autocompleteMultiselect",
6290
7537
  name: "securityTooling",
6291
7538
  message: chalk7.white("Security tools (type to search):"),
6292
- choices: SECURITY_TOOLING_OPTIONS.map((opt) => ({
7539
+ choices: SECURITY_TOOLING_OPTIONS3.map((opt) => ({
6293
7540
  title: opt.recommended ? `${opt.label} ${chalk7.green("\u2605 recommended")}` : opt.label,
6294
7541
  value: opt.id,
6295
7542
  description: chalk7.gray(opt.description),
@@ -6316,7 +7563,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6316
7563
  type: "autocompleteMultiselect",
6317
7564
  name: "authPatterns",
6318
7565
  message: chalk7.white("Auth patterns (type to search):"),
6319
- choices: AUTH_PATTERNS_OPTIONS.map((opt) => ({
7566
+ choices: AUTH_PATTERNS_OPTIONS3.map((opt) => ({
6320
7567
  title: opt.recommended ? `${opt.label} ${chalk7.green("\u2605 recommended")}` : opt.label,
6321
7568
  value: opt.id,
6322
7569
  description: chalk7.gray(opt.description)
@@ -6342,7 +7589,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6342
7589
  type: "autocompleteMultiselect",
6343
7590
  name: "dataHandling",
6344
7591
  message: chalk7.white("Data handling policies (type to search):"),
6345
- choices: DATA_HANDLING_OPTIONS.map((opt) => ({
7592
+ choices: DATA_HANDLING_OPTIONS3.map((opt) => ({
6346
7593
  title: opt.recommended ? `${opt.label} ${chalk7.green("\u2605 recommended")}` : opt.label,
6347
7594
  value: opt.id,
6348
7595
  description: chalk7.gray(opt.description),
@@ -6487,7 +7734,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6487
7734
  console.log();
6488
7735
  }
6489
7736
  }
6490
- const buildChoices = buildCommandChoices("build", COMMON_COMMANDS.build, chalk7.cyan);
7737
+ const buildChoices = buildCommandChoices("build", COMMON_COMMANDS2.build, chalk7.cyan);
6491
7738
  const buildResponse = await prompts3({
6492
7739
  type: "autocompleteMultiselect",
6493
7740
  name: "build",
@@ -6496,7 +7743,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6496
7743
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6497
7744
  instructions: false
6498
7745
  }, promptConfig);
6499
- const testChoices = buildCommandChoices("test", COMMON_COMMANDS.test, chalk7.yellow);
7746
+ const testChoices = buildCommandChoices("test", COMMON_COMMANDS2.test, chalk7.yellow);
6500
7747
  const testResponse = await prompts3({
6501
7748
  type: "autocompleteMultiselect",
6502
7749
  name: "test",
@@ -6505,7 +7752,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6505
7752
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6506
7753
  instructions: false
6507
7754
  }, promptConfig);
6508
- const lintChoices = buildCommandChoices("lint", COMMON_COMMANDS.lint, chalk7.green);
7755
+ const lintChoices = buildCommandChoices("lint", COMMON_COMMANDS2.lint, chalk7.green);
6509
7756
  const lintResponse = await prompts3({
6510
7757
  type: "autocompleteMultiselect",
6511
7758
  name: "lint",
@@ -6514,7 +7761,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6514
7761
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6515
7762
  instructions: false
6516
7763
  }, promptConfig);
6517
- const devChoices = buildCommandChoices("dev", COMMON_COMMANDS.dev, chalk7.magenta);
7764
+ const devChoices = buildCommandChoices("dev", COMMON_COMMANDS2.dev, chalk7.magenta);
6518
7765
  const devResponse = await prompts3({
6519
7766
  type: "autocompleteMultiselect",
6520
7767
  name: "dev",
@@ -6523,7 +7770,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6523
7770
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6524
7771
  instructions: false
6525
7772
  }, promptConfig);
6526
- const formatChoices = buildCommandChoices("format", COMMON_COMMANDS.format, chalk7.blue);
7773
+ const formatChoices = buildCommandChoices("format", COMMON_COMMANDS2.format, chalk7.blue);
6527
7774
  const formatResponse = await prompts3({
6528
7775
  type: "autocompleteMultiselect",
6529
7776
  name: "format",
@@ -6532,7 +7779,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6532
7779
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6533
7780
  instructions: false
6534
7781
  }, promptConfig);
6535
- const typecheckChoices = buildCommandChoices("typecheck", COMMON_COMMANDS.typecheck, chalk7.gray);
7782
+ const typecheckChoices = buildCommandChoices("typecheck", COMMON_COMMANDS2.typecheck, chalk7.gray);
6536
7783
  const typecheckResponse = await prompts3({
6537
7784
  type: "autocompleteMultiselect",
6538
7785
  name: "typecheck",
@@ -6541,7 +7788,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6541
7788
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6542
7789
  instructions: false
6543
7790
  }, promptConfig);
6544
- const cleanChoices = buildCommandChoices("clean", COMMON_COMMANDS.clean, chalk7.red);
7791
+ const cleanChoices = buildCommandChoices("clean", COMMON_COMMANDS2.clean, chalk7.red);
6545
7792
  const cleanResponse = await prompts3({
6546
7793
  type: "autocompleteMultiselect",
6547
7794
  name: "clean",
@@ -6550,7 +7797,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6550
7797
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6551
7798
  instructions: false
6552
7799
  }, promptConfig);
6553
- const preCommitChoices = buildCommandChoices("preCommit", COMMON_COMMANDS.preCommit, chalk7.yellow);
7800
+ const preCommitChoices = buildCommandChoices("preCommit", COMMON_COMMANDS2.preCommit, chalk7.yellow);
6554
7801
  const preCommitResponse = await prompts3({
6555
7802
  type: "autocompleteMultiselect",
6556
7803
  name: "preCommit",
@@ -6559,7 +7806,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6559
7806
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6560
7807
  instructions: false
6561
7808
  }, promptConfig);
6562
- const additionalChoices = buildCommandChoices("additional", COMMON_COMMANDS.additional, chalk7.blue);
7809
+ const additionalChoices = buildCommandChoices("additional", COMMON_COMMANDS2.additional, chalk7.blue);
6563
7810
  const additionalResponse = await prompts3({
6564
7811
  type: "autocompleteMultiselect",
6565
7812
  name: "additional",
@@ -6600,7 +7847,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6600
7847
  message: chalk7.white("Naming convention:"),
6601
7848
  choices: [
6602
7849
  { title: chalk7.gray("\u23ED Skip"), value: "" },
6603
- ...NAMING_CONVENTIONS.map((n) => ({
7850
+ ...NAMING_CONVENTIONS3.map((n) => ({
6604
7851
  title: n.id === "language_default" ? `${n.label} ${chalk7.green("\u2605 recommended")}` : n.label,
6605
7852
  value: n.id,
6606
7853
  description: chalk7.gray(n.desc)
@@ -6616,7 +7863,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6616
7863
  message: chalk7.white("Error handling pattern:"),
6617
7864
  choices: [
6618
7865
  { title: chalk7.gray("\u23ED Skip"), value: "" },
6619
- ...ERROR_PATTERNS.map((e) => ({
7866
+ ...ERROR_PATTERNS2.map((e) => ({
6620
7867
  title: e.label,
6621
7868
  value: e.id
6622
7869
  }))
@@ -6639,7 +7886,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6639
7886
  message: chalk7.white("Logging conventions (type to search):"),
6640
7887
  choices: [
6641
7888
  { title: chalk7.gray("\u23ED Skip"), value: "" },
6642
- ...LOGGING_OPTIONS.map((l) => ({
7889
+ ...LOGGING_OPTIONS3.map((l) => ({
6643
7890
  title: l.label,
6644
7891
  value: l.id
6645
7892
  }))
@@ -6780,7 +8027,7 @@ async function runInteractiveWizard(options, detected, userTier) {
6780
8027
  type: "autocompleteMultiselect",
6781
8028
  name: "aiBehavior",
6782
8029
  message: chalk7.white("AI behavior rules (type to filter):"),
6783
- choices: AI_BEHAVIOR_RULES.map((r) => ({
8030
+ choices: AI_BEHAVIOR_RULES3.map((r) => ({
6784
8031
  title: r.recommended ? `${r.label} ${chalk7.green("\u2605 recommended")}` : r.label,
6785
8032
  value: r.id,
6786
8033
  description: chalk7.gray(r.description),
@@ -6790,11 +8037,11 @@ async function runInteractiveWizard(options, detected, userTier) {
6790
8037
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
6791
8038
  instructions: false
6792
8039
  }, promptConfig);
6793
- answers.aiBehavior = aiBehaviorResponse.aiBehavior || AI_BEHAVIOR_RULES.map((r) => r.id);
8040
+ answers.aiBehavior = aiBehaviorResponse.aiBehavior || AI_BEHAVIOR_RULES3.map((r) => r.id);
6794
8041
  if (answers.aiBehavior.length > 0) {
6795
8042
  console.log(chalk7.green(" \u2713 Selected:"));
6796
8043
  for (const ruleId of answers.aiBehavior) {
6797
- const rule = AI_BEHAVIOR_RULES.find((r) => r.id === ruleId);
8044
+ const rule = AI_BEHAVIOR_RULES3.find((r) => r.id === ruleId);
6798
8045
  if (rule) console.log(chalk7.cyan(` \u2022 ${rule.label}`));
6799
8046
  }
6800
8047
  }
@@ -6826,6 +8073,15 @@ async function runInteractiveWizard(options, detected, userTier) {
6826
8073
  initial: 1
6827
8074
  }, promptConfig);
6828
8075
  answers.explanationVerbosity = verbosityResponse.explanationVerbosity || "balanced";
8076
+ const workaroundResponse = await prompts3({
8077
+ type: "toggle",
8078
+ name: "attemptWorkarounds",
8079
+ message: chalk7.white("When stuck, should the AI attempt workarounds?"),
8080
+ initial: true,
8081
+ active: "Yes, try workarounds",
8082
+ inactive: "No, stop and ask"
8083
+ }, promptConfig);
8084
+ answers.attemptWorkarounds = workaroundResponse.attemptWorkarounds ?? true;
6829
8085
  const accessibilityResponse = await prompts3({
6830
8086
  type: "toggle",
6831
8087
  name: "accessibilityFocus",
@@ -6845,13 +8101,67 @@ async function runInteractiveWizard(options, detected, userTier) {
6845
8101
  }, promptConfig);
6846
8102
  answers.performanceFocus = performanceResponse.performanceFocus ?? false;
6847
8103
  console.log();
8104
+ console.log(chalk7.gray(" \u{1F50C} MCP (Model Context Protocol) servers let the AI interact with external tools"));
8105
+ console.log(chalk7.gray(" like databases, APIs, file systems, and more. List any you have configured."));
8106
+ const mcpServersResponse = await prompts3({
8107
+ type: "text",
8108
+ name: "mcpServers",
8109
+ message: chalk7.white("MCP servers (comma-separated, or leave empty):"),
8110
+ hint: chalk7.gray("e.g. filesystem, github, postgres, docker")
8111
+ }, promptConfig);
8112
+ answers.mcpServers = mcpServersResponse.mcpServers || "";
8113
+ const serverAccessResponse = await prompts3({
8114
+ type: "toggle",
8115
+ name: "serverAccess",
8116
+ message: chalk7.white("Does this project require logging into a server?"),
8117
+ initial: false,
8118
+ active: "Yes",
8119
+ inactive: "No"
8120
+ }, promptConfig);
8121
+ answers.serverAccess = serverAccessResponse.serverAccess ?? false;
8122
+ if (answers.serverAccess) {
8123
+ const sshKeyPathResponse = await prompts3({
8124
+ type: "text",
8125
+ name: "sshKeyPath",
8126
+ message: chalk7.white("SSH key path (leave empty for default ~/.ssh/):"),
8127
+ hint: chalk7.gray("e.g. ~/.ssh/id_ed25519")
8128
+ }, promptConfig);
8129
+ answers.sshKeyPath = sshKeyPathResponse.sshKeyPath || "";
8130
+ }
8131
+ const hasCicd = answers.cicd?.length > 0;
8132
+ if (!hasCicd) {
8133
+ const manualDeployResponse = await prompts3({
8134
+ type: "toggle",
8135
+ name: "manualDeployment",
8136
+ message: chalk7.white("Do you deploy manually (no CI/CD)?"),
8137
+ initial: false,
8138
+ active: "Yes",
8139
+ inactive: "No"
8140
+ }, promptConfig);
8141
+ answers.manualDeployment = manualDeployResponse.manualDeployment ?? false;
8142
+ if (answers.manualDeployment) {
8143
+ const deployMethodResponse = await prompts3({
8144
+ type: "select",
8145
+ name: "deploymentMethod",
8146
+ message: chalk7.white("How do you deploy?"),
8147
+ choices: [
8148
+ { title: "\u{1F433} Portainer (GitOps stacks)", value: "portainer" },
8149
+ { title: "\u{1F4E6} Docker Compose (manual)", value: "docker_compose" },
8150
+ { title: "\u2638\uFE0F Kubernetes (kubectl)", value: "kubernetes" },
8151
+ { title: "\u{1F5A5}\uFE0F Bare metal (direct)", value: "bare_metal" }
8152
+ ]
8153
+ }, promptConfig);
8154
+ answers.deploymentMethod = deployMethodResponse.deploymentMethod || "";
8155
+ }
8156
+ }
8157
+ console.log();
6848
8158
  console.log(chalk7.gray(" \u{1F4C1} Select files the AI should read first to understand your project context."));
6849
8159
  console.log(chalk7.gray(" These help the AI understand your codebase, APIs, and conventions."));
6850
8160
  const importantFilesResponse = await prompts3({
6851
8161
  type: "autocompleteMultiselect",
6852
8162
  name: "importantFiles",
6853
8163
  message: chalk7.white("Important files AI should read (type to search):"),
6854
- choices: IMPORTANT_FILES.map((f) => ({
8164
+ choices: IMPORTANT_FILES3.map((f) => ({
6855
8165
  title: `${f.icon} ${f.label}`,
6856
8166
  value: f.id,
6857
8167
  description: chalk7.gray(f.description)
@@ -7030,7 +8340,7 @@ async function runInteractiveWizard(options, detected, userTier) {
7030
8340
  name: "never",
7031
8341
  message: chalk7.white("Never allow (type to filter):"),
7032
8342
  choices: [
7033
- ...BOUNDARY_OPTIONS.map((o) => ({
8343
+ ...BOUNDARY_OPTIONS3.map((o) => ({
7034
8344
  title: chalk7.red(o),
7035
8345
  value: o
7036
8346
  })),
@@ -7056,7 +8366,7 @@ async function runInteractiveWizard(options, detected, userTier) {
7056
8366
  neverList.forEach((o) => usedOptions.add(o));
7057
8367
  console.log();
7058
8368
  console.log(chalk7.yellow.bold(" ? ASK FIRST - AI will ask before doing"));
7059
- const availableForAsk = BOUNDARY_OPTIONS.filter((o) => !usedOptions.has(o));
8369
+ const availableForAsk = BOUNDARY_OPTIONS3.filter((o) => !usedOptions.has(o));
7060
8370
  const askResponse = await prompts3({
7061
8371
  type: "autocompleteMultiselect",
7062
8372
  name: "ask",
@@ -7088,7 +8398,7 @@ async function runInteractiveWizard(options, detected, userTier) {
7088
8398
  askList.forEach((o) => usedOptions.add(o));
7089
8399
  console.log();
7090
8400
  console.log(chalk7.green.bold(" \u2713 ALWAYS ALLOW - AI will do these automatically"));
7091
- const availableForAlways = BOUNDARY_OPTIONS.filter((o) => !usedOptions.has(o));
8401
+ const availableForAlways = BOUNDARY_OPTIONS3.filter((o) => !usedOptions.has(o));
7092
8402
  const alwaysResponse = await prompts3({
7093
8403
  type: "autocompleteMultiselect",
7094
8404
  name: "always",
@@ -7138,7 +8448,7 @@ async function runInteractiveWizard(options, detected, userTier) {
7138
8448
  type: "autocompleteMultiselect",
7139
8449
  name: "testLevels",
7140
8450
  message: chalk7.white("Test levels (type to search):"),
7141
- choices: TEST_LEVELS.map((l) => ({
8451
+ choices: TEST_LEVELS3.map((l) => ({
7142
8452
  title: `${l.label} - ${chalk7.gray(l.desc)}`,
7143
8453
  value: l.id,
7144
8454
  selected: l.id === "unit" || l.id === "integration"
@@ -7148,7 +8458,7 @@ async function runInteractiveWizard(options, detected, userTier) {
7148
8458
  }, promptConfig);
7149
8459
  answers.testLevels = testLevelsResponse.testLevels || [];
7150
8460
  const detectedFrameworks = answers.stack?.includes("typescript") || answers.stack?.includes("javascript") ? ["jest", "vitest"] : answers.stack?.includes("python") ? ["pytest"] : [];
7151
- const testFrameworkChoices = sortSelectedFirst(TEST_FRAMEWORKS.map((f) => ({
8461
+ const testFrameworkChoices = sortSelectedFirst(TEST_FRAMEWORKS3.map((f) => ({
7152
8462
  title: f,
7153
8463
  value: f,
7154
8464
  selected: detectedFrameworks.includes(f)
@@ -7527,7 +8837,17 @@ async function runInteractiveWizard(options, detected, userTier) {
7527
8837
  // Additional libraries (not in predefined lists)
7528
8838
  additionalLibraries: answers.additionalLibraries,
7529
8839
  // Docker image names
7530
- dockerImageNames: answers.dockerImageNames
8840
+ dockerImageNames: answers.dockerImageNames,
8841
+ // MCP servers
8842
+ mcpServers: answers.mcpServers,
8843
+ // Workaround behavior
8844
+ attemptWorkarounds: answers.attemptWorkarounds,
8845
+ // Server access
8846
+ serverAccess: answers.serverAccess,
8847
+ sshKeyPath: answers.sshKeyPath,
8848
+ // Manual deployment
8849
+ manualDeployment: answers.manualDeployment,
8850
+ deploymentMethod: answers.deploymentMethod
7531
8851
  };
7532
8852
  }
7533
8853
 
@@ -9687,8 +11007,70 @@ function handleError2(error) {
9687
11007
  process.exit(1);
9688
11008
  }
9689
11009
 
11010
+ // src/commands/config.ts
11011
+ import chalk18 from "chalk";
11012
+ async function configCommand(action, valueArg) {
11013
+ if (!action || action === "show") {
11014
+ console.log();
11015
+ console.log(chalk18.cyan("\u2699\uFE0F LynxPrompt CLI Configuration"));
11016
+ console.log();
11017
+ console.log(
11018
+ chalk18.white(" API URL: ") + chalk18.green(getApiUrl())
11019
+ );
11020
+ console.log(
11021
+ chalk18.white(" Config: ") + chalk18.gray(getConfigPath())
11022
+ );
11023
+ if (process.env.LYNXPROMPT_API_URL) {
11024
+ console.log(
11025
+ chalk18.gray(
11026
+ " (API URL overridden by LYNXPROMPT_API_URL env var)"
11027
+ )
11028
+ );
11029
+ }
11030
+ console.log();
11031
+ return;
11032
+ }
11033
+ if (action === "set-url") {
11034
+ if (!valueArg) {
11035
+ console.error(
11036
+ chalk18.red("Usage: lynxp config set-url <url>")
11037
+ );
11038
+ process.exit(1);
11039
+ }
11040
+ try {
11041
+ new URL(valueArg);
11042
+ } catch {
11043
+ console.error(chalk18.red(`Invalid URL: ${valueArg}`));
11044
+ process.exit(1);
11045
+ }
11046
+ const clean = valueArg.replace(/\/+$/, "");
11047
+ setApiUrl(clean);
11048
+ console.log(
11049
+ chalk18.green("\u2713") + ` API URL set to ${chalk18.cyan(clean)}`
11050
+ );
11051
+ console.log(
11052
+ chalk18.gray(" Run 'lynxp login' to authenticate with this instance.")
11053
+ );
11054
+ return;
11055
+ }
11056
+ if (action === "reset-url") {
11057
+ setApiUrl("https://api.lynxprompt.com");
11058
+ console.log(
11059
+ chalk18.green("\u2713") + " API URL reset to " + chalk18.cyan("https://api.lynxprompt.com")
11060
+ );
11061
+ return;
11062
+ }
11063
+ if (action === "path") {
11064
+ console.log(getConfigPath());
11065
+ return;
11066
+ }
11067
+ console.error(chalk18.red(`Unknown config action: ${action}`));
11068
+ console.error(chalk18.gray("Available: show, set-url <url>, reset-url, path"));
11069
+ process.exit(1);
11070
+ }
11071
+
9690
11072
  // src/index.ts
9691
- var CLI_VERSION2 = "1.4.13";
11073
+ var CLI_VERSION2 = "2.0.1";
9692
11074
  var program = new Command();
9693
11075
  program.name("lynxprompt").description("CLI for LynxPrompt - Generate AI IDE configuration files").version(CLI_VERSION2);
9694
11076
  program.command("wizard").description("Generate AI IDE configuration (recommended for most users)").option("-n, --name <name>", "Project name").option("-d, --description <description>", "Project description").option("-s, --stack <stack>", "Tech stack (comma-separated)").option("-f, --format <format>", "Output format: agents, cursor, or comma-separated for multiple").option("-p, --platforms <platforms>", "Alias for --format (deprecated)").option("--persona <persona>", "AI persona (fullstack, backend, frontend, devops, data, security)").option("--boundaries <level>", "Boundary preset (conservative, standard, permissive)").option("-y, --yes", "Skip prompts, use defaults (generates AGENTS.md)").option("-o, --output <dir>", "Output directory (default: current directory)").option("--repo-url <url>", "Analyze remote repository URL (GitHub/GitLab supported)").option("--blueprint", "Generate with [[VARIABLE|default]] placeholders for templates").option("--license <type>", "License type (mit, apache-2.0, gpl-3.0, etc.)").option("--ci-cd <platform>", "CI/CD platform (github_actions, gitlab_ci, jenkins, etc.)").option("--project-type <type>", "Project type (work, leisure, opensource, learning)").option("--detect-only", "Only detect project info, don't generate files").option("--load-draft <name>", "Load a saved wizard draft").option("--save-draft <name>", "Save wizard state as a draft (auto-saves at end)").option("--vars <values>", "Fill variables: VAR1=value1,VAR2=value2").action(wizardCommand);
@@ -9709,47 +11091,54 @@ program.command("diff [file-or-id]").description("Compare tracked files with the
9709
11091
  program.command("login").description("Authenticate with LynxPrompt (opens browser)").action(loginCommand);
9710
11092
  program.command("logout").description("Log out and remove stored credentials").action(logoutCommand);
9711
11093
  program.command("whoami").description("Show current authenticated user").action(whoamiCommand);
11094
+ program.command("config [action] [value]").description("View or change CLI settings (set-url, reset-url, path)").action(configCommand);
9712
11095
  program.addHelpText(
9713
11096
  "beforeAll",
9714
11097
  `
9715
- ${chalk18.cyan("\u{1F431} LynxPrompt CLI")} ${chalk18.gray("(also available as: lynxp)")}
9716
- ${chalk18.gray("Generate AI IDE configuration files from your terminal")}
11098
+ ${chalk19.cyan("\u{1F431} LynxPrompt CLI")} ${chalk19.gray("(also available as: lynxp)")}
11099
+ ${chalk19.gray("Generate AI IDE configuration files from your terminal")}
9717
11100
  `
9718
11101
  );
9719
11102
  program.addHelpText(
9720
11103
  "after",
9721
11104
  `
9722
- ${chalk18.cyan("Quick Start:")}
9723
- ${chalk18.white("$ lynxp wizard")} ${chalk18.gray("Generate config interactively")}
9724
- ${chalk18.white("$ lynxp wizard -y")} ${chalk18.gray("Generate AGENTS.md with defaults")}
9725
- ${chalk18.white("$ lynxp wizard -f cursor")} ${chalk18.gray("Generate .cursor/rules/")}
9726
- ${chalk18.white("$ lynxp wizard --blueprint")} ${chalk18.gray("Generate with [[VAR|default]] placeholders")}
11105
+ ${chalk19.cyan("Quick Start:")}
11106
+ ${chalk19.white("$ lynxp wizard")} ${chalk19.gray("Generate config interactively")}
11107
+ ${chalk19.white("$ lynxp wizard -y")} ${chalk19.gray("Generate AGENTS.md with defaults")}
11108
+ ${chalk19.white("$ lynxp wizard -f cursor")} ${chalk19.gray("Generate .cursor/rules/")}
11109
+ ${chalk19.white("$ lynxp wizard --blueprint")} ${chalk19.gray("Generate with [[VAR|default]] placeholders")}
11110
+
11111
+ ${chalk19.cyan("Analysis & Tools:")}
11112
+ ${chalk19.white("$ lynxp analyze")} ${chalk19.gray("Analyze project tech stack")}
11113
+ ${chalk19.white("$ lynxp analyze -r <url>")} ${chalk19.gray("Analyze remote repository")}
11114
+ ${chalk19.white("$ lynxp import")} ${chalk19.gray("Scan repo for AGENTS.md files")}
11115
+ ${chalk19.white("$ lynxp import --dry-run")} ${chalk19.gray("Preview monorepo hierarchy")}
11116
+ ${chalk19.white("$ lynxp convert AGENTS.md cursor")} ${chalk19.gray("Convert to Cursor format")}
11117
+ ${chalk19.white("$ lynxp merge a.md b.md -o out.md")} ${chalk19.gray("Merge multiple configs")}
9727
11118
 
9728
- ${chalk18.cyan("Analysis & Tools:")}
9729
- ${chalk18.white("$ lynxp analyze")} ${chalk18.gray("Analyze project tech stack")}
9730
- ${chalk18.white("$ lynxp analyze -r <url>")} ${chalk18.gray("Analyze remote repository")}
9731
- ${chalk18.white("$ lynxp import")} ${chalk18.gray("Scan repo for AGENTS.md files")}
9732
- ${chalk18.white("$ lynxp import --dry-run")} ${chalk18.gray("Preview monorepo hierarchy")}
9733
- ${chalk18.white("$ lynxp convert AGENTS.md cursor")} ${chalk18.gray("Convert to Cursor format")}
9734
- ${chalk18.white("$ lynxp merge a.md b.md -o out.md")} ${chalk18.gray("Merge multiple configs")}
11119
+ ${chalk19.cyan("Marketplace:")}
11120
+ ${chalk19.white("$ lynxp search nextjs")} ${chalk19.gray("Search blueprints")}
11121
+ ${chalk19.white("$ lynxp pull bp_abc123")} ${chalk19.gray("Download and track a blueprint")}
11122
+ ${chalk19.white("$ lynxp pull ha_xyz789")} ${chalk19.gray("Download entire hierarchy")}
11123
+ ${chalk19.white("$ lynxp push")} ${chalk19.gray("Push local file to cloud")}
11124
+ ${chalk19.white("$ lynxp hierarchies")} ${chalk19.gray("List your hierarchies")}
11125
+ ${chalk19.white("$ lynxp link --list")} ${chalk19.gray("Show tracked blueprints")}
9735
11126
 
9736
- ${chalk18.cyan("Marketplace:")}
9737
- ${chalk18.white("$ lynxp search nextjs")} ${chalk18.gray("Search blueprints")}
9738
- ${chalk18.white("$ lynxp pull bp_abc123")} ${chalk18.gray("Download and track a blueprint")}
9739
- ${chalk18.white("$ lynxp pull ha_xyz789")} ${chalk18.gray("Download entire hierarchy")}
9740
- ${chalk18.white("$ lynxp push")} ${chalk18.gray("Push local file to cloud")}
9741
- ${chalk18.white("$ lynxp hierarchies")} ${chalk18.gray("List your hierarchies")}
9742
- ${chalk18.white("$ lynxp link --list")} ${chalk18.gray("Show tracked blueprints")}
11127
+ ${chalk19.cyan("Blueprint Tracking:")}
11128
+ ${chalk19.white("$ lynxp link AGENTS.md bp_xyz")} ${chalk19.gray("Link existing file to blueprint")}
11129
+ ${chalk19.white("$ lynxp unlink AGENTS.md")} ${chalk19.gray("Disconnect from cloud")}
11130
+ ${chalk19.white("$ lynxp diff bp_abc123")} ${chalk19.gray("Show changes vs cloud version")}
9743
11131
 
9744
- ${chalk18.cyan("Blueprint Tracking:")}
9745
- ${chalk18.white("$ lynxp link AGENTS.md bp_xyz")} ${chalk18.gray("Link existing file to blueprint")}
9746
- ${chalk18.white("$ lynxp unlink AGENTS.md")} ${chalk18.gray("Disconnect from cloud")}
9747
- ${chalk18.white("$ lynxp diff bp_abc123")} ${chalk18.gray("Show changes vs cloud version")}
11132
+ ${chalk19.cyan("CI/CD:")}
11133
+ ${chalk19.white("$ lynxp check --ci")} ${chalk19.gray("Validate config (exit code)")}
9748
11134
 
9749
- ${chalk18.cyan("CI/CD:")}
9750
- ${chalk18.white("$ lynxp check --ci")} ${chalk18.gray("Validate config (exit code)")}
11135
+ ${chalk19.cyan("Configuration:")}
11136
+ ${chalk19.white("$ lynxp config")} ${chalk19.gray("Show current settings")}
11137
+ ${chalk19.white("$ lynxp config set-url <url>")} ${chalk19.gray("Point CLI to a self-hosted instance")}
11138
+ ${chalk19.white("$ lynxp config reset-url")} ${chalk19.gray("Reset to https://api.lynxprompt.com")}
11139
+ ${chalk19.white("$ lynxp config path")} ${chalk19.gray("Show config file location")}
9751
11140
 
9752
- ${chalk18.gray("Docs: https://lynxprompt.com/docs/cli")}
11141
+ ${chalk19.gray("Docs: https://lynxprompt.com/docs/cli")}
9753
11142
  `
9754
11143
  );
9755
11144
  program.parse();