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 +1694 -305
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import
|
|
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(
|
|
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.
|
|
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.
|
|
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(
|
|
3260
|
-
|
|
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(`
|
|
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 = "
|
|
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
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
4852
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
...
|
|
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:
|
|
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
|
-
...
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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: "
|
|
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 =
|
|
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 =
|
|
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(
|
|
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
|
-
...
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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
|
-
...
|
|
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:
|
|
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 ||
|
|
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 =
|
|
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:
|
|
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
|
-
...
|
|
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 =
|
|
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 =
|
|
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:
|
|
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(
|
|
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 = "
|
|
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
|
-
${
|
|
9716
|
-
${
|
|
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
|
-
${
|
|
9723
|
-
${
|
|
9724
|
-
${
|
|
9725
|
-
${
|
|
9726
|
-
${
|
|
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
|
-
${
|
|
9729
|
-
${
|
|
9730
|
-
${
|
|
9731
|
-
${
|
|
9732
|
-
${
|
|
9733
|
-
${
|
|
9734
|
-
${
|
|
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
|
-
${
|
|
9737
|
-
${
|
|
9738
|
-
${
|
|
9739
|
-
${
|
|
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
|
-
${
|
|
9745
|
-
${
|
|
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
|
-
${
|
|
9750
|
-
${
|
|
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
|
-
${
|
|
11141
|
+
${chalk19.gray("Docs: https://lynxprompt.com/docs/cli")}
|
|
9753
11142
|
`
|
|
9754
11143
|
);
|
|
9755
11144
|
program.parse();
|