lynxprompt 1.2.12 → 1.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3587,7 +3587,7 @@ function generateYamlConfig(options, platform2) {
3587
3587
 
3588
3588
  // src/commands/wizard.ts
3589
3589
  var DRAFTS_DIR = ".lynxprompt/drafts";
3590
- var CLI_VERSION = "1.2.12";
3590
+ var CLI_VERSION = "1.2.13";
3591
3591
  async function saveDraftLocally(name, config2, stepReached) {
3592
3592
  const draftsPath = join4(process.cwd(), DRAFTS_DIR);
3593
3593
  await mkdir3(draftsPath, { recursive: true });
@@ -3857,19 +3857,42 @@ var CICD_OPTIONS = [
3857
3857
  { id: "drone", label: "Drone", icon: "\u{1F681}" },
3858
3858
  { id: "buildkite", label: "Buildkite", icon: "\u{1F9F1}" }
3859
3859
  ];
3860
- var DEPLOYMENT_TARGETS = [
3860
+ var CLOUD_TARGETS = [
3861
3861
  { id: "vercel", label: "Vercel", icon: "\u25B2 " },
3862
3862
  { id: "netlify", label: "Netlify", icon: "\u{1F310}" },
3863
- { id: "aws", label: "AWS", icon: "\u2601\uFE0F " },
3864
- { id: "gcp", label: "Google Cloud", icon: "\u{1F308}" },
3865
- { id: "azure", label: "Azure", icon: "\u{1F537}" },
3866
- { id: "docker", label: "Docker", icon: "\u{1F433}" },
3867
- { id: "kubernetes", label: "Kubernetes", icon: "\u2638\uFE0F " },
3868
- { id: "heroku", label: "Heroku", icon: "\u{1F7E3}" },
3869
- { id: "digitalocean", label: "DigitalOcean", icon: "\u{1F535}" },
3863
+ { id: "cloudflare_pages", label: "Cloudflare Pages", icon: "\u{1F536}" },
3864
+ { id: "cloudflare_workers", label: "Cloudflare Workers", icon: "\u{1F536}" },
3865
+ { id: "aws_lambda", label: "AWS Lambda", icon: "\u2601\uFE0F " },
3866
+ { id: "aws_ecs", label: "AWS ECS", icon: "\u2601\uFE0F " },
3867
+ { id: "aws_ec2", label: "AWS EC2", icon: "\u2601\uFE0F " },
3868
+ { id: "gcp_cloudrun", label: "GCP Cloud Run", icon: "\u{1F308}" },
3869
+ { id: "gcp_appengine", label: "GCP App Engine", icon: "\u{1F308}" },
3870
+ { id: "azure_appservice", label: "Azure App Service", icon: "\u{1F537}" },
3871
+ { id: "azure_functions", label: "Azure Functions", icon: "\u{1F537}" },
3870
3872
  { id: "railway", label: "Railway", icon: "\u{1F682}" },
3873
+ { id: "render", label: "Render", icon: "\u{1F3A8}" },
3871
3874
  { id: "fly", label: "Fly.io", icon: "\u2708\uFE0F " },
3872
- { id: "cloudflare", label: "Cloudflare", icon: "\u{1F536}" }
3875
+ { id: "heroku", label: "Heroku", icon: "\u{1F7E3}" },
3876
+ { id: "digitalocean_app", label: "DigitalOcean App Platform", icon: "\u{1F535}" },
3877
+ { id: "deno_deploy", label: "Deno Deploy", icon: "\u{1F995}" }
3878
+ ];
3879
+ var SELF_HOSTED_TARGETS = [
3880
+ { id: "docker", label: "Docker", icon: "\u{1F433}" },
3881
+ { id: "docker_compose", label: "Docker Compose", icon: "\u{1F433}" },
3882
+ { id: "kubernetes", label: "Kubernetes", icon: "\u2638\uFE0F " },
3883
+ { id: "k3s", label: "K3s", icon: "\u2638\uFE0F " },
3884
+ { id: "podman", label: "Podman", icon: "\u{1F9AD}" },
3885
+ { id: "bare_metal", label: "Bare Metal", icon: "\u{1F5A5}\uFE0F " },
3886
+ { id: "vm", label: "Virtual Machine", icon: "\u{1F4BB}" },
3887
+ { id: "proxmox", label: "Proxmox", icon: "\u{1F537}" },
3888
+ { id: "unraid", label: "Unraid", icon: "\u{1F7E0}" },
3889
+ { id: "truenas", label: "TrueNAS", icon: "\u{1F535}" },
3890
+ { id: "synology", label: "Synology NAS", icon: "\u{1F4C1}" },
3891
+ { id: "coolify", label: "Coolify", icon: "\u2744\uFE0F " },
3892
+ { id: "dokku", label: "Dokku", icon: "\u{1F433}" },
3893
+ { id: "caprover", label: "CapRover", icon: "\u{1F6A2}" },
3894
+ { id: "portainer", label: "Portainer", icon: "\u{1F40B}" },
3895
+ { id: "rancher", label: "Rancher", icon: "\u{1F404}" }
3873
3896
  ];
3874
3897
  var CONTAINER_REGISTRIES = [
3875
3898
  { id: "dockerhub", label: "Docker Hub", icon: "\u{1F433}" },
@@ -5446,14 +5469,14 @@ async function runInteractiveWizard(options, detected, userTier) {
5446
5469
  name: "changelogTool",
5447
5470
  message: chalk7.white("Changelog management:"),
5448
5471
  choices: [
5449
- { title: "Manual", value: "manual" },
5450
- { title: "Conventional Changelog", value: "conventional_changelog" },
5451
- { title: "Release Please", value: "release_please" },
5452
- { title: "Semantic Release", value: "semantic_release" },
5453
- { title: "Changesets", value: "changesets" },
5454
- { title: "GitHub Releases", value: "github_releases" },
5455
- { title: "Keep a Changelog", value: "keep_a_changelog" },
5456
- { title: "Other", value: "other" }
5472
+ { title: "Manual - Write CHANGELOG.md by hand", value: "manual" },
5473
+ { title: "Conventional Changelog - Auto-generate from commit messages", value: "conventional_changelog" },
5474
+ { title: "Release Please - Google's automated release management", value: "release_please" },
5475
+ { title: "Semantic Release - Fully automated versioning & publishing", value: "semantic_release" },
5476
+ { title: "Changesets - Monorepo-friendly version management", value: "changesets" },
5477
+ { title: "GitHub Releases - Use GitHub's built-in release notes", value: "github_releases" },
5478
+ { title: "Keep a Changelog - Manual following keepachangelog.com format", value: "keep_a_changelog" },
5479
+ { title: "Other - Custom changelog tooling", value: "other" }
5457
5480
  ],
5458
5481
  initial: 0
5459
5482
  }, promptConfig);
@@ -5473,13 +5496,15 @@ async function runInteractiveWizard(options, detected, userTier) {
5473
5496
  name: "branchStrategy",
5474
5497
  message: chalk7.white("Branch strategy:"),
5475
5498
  choices: [
5499
+ { title: "\u{1F3AE} None (toy project) - No branching, commit directly to main", value: "none" },
5476
5500
  { title: "\u{1F30A} GitHub Flow - Simple: main + feature branches", value: "github_flow" },
5477
5501
  { title: "\u{1F333} Gitflow - develop, feature, release, hotfix branches", value: "gitflow" },
5478
5502
  { title: "\u{1F682} Trunk-Based - Short-lived branches, continuous integration", value: "trunk_based" },
5479
5503
  { title: "\u{1F98A} GitLab Flow - Environment branches (staging, production)", value: "gitlab_flow" },
5480
5504
  { title: "\u{1F680} Release Flow - main + release branches", value: "release_flow" }
5481
5505
  ],
5482
- initial: 0
5506
+ initial: 1
5507
+ // Default to GitHub Flow (index 1 after adding "none")
5483
5508
  }, promptConfig);
5484
5509
  answers.branchStrategy = branchStrategyResponse.branchStrategy || "github_flow";
5485
5510
  const defaultBranchResponse = await prompts3({
@@ -5495,18 +5520,7 @@ async function runInteractiveWizard(options, detected, userTier) {
5495
5520
  initial: 0
5496
5521
  }, promptConfig);
5497
5522
  answers.defaultBranch = defaultBranchResponse.defaultBranch || "main";
5498
- const commitWorkflowResponse = await prompts3({
5499
- type: "select",
5500
- name: "commitWorkflow",
5501
- message: chalk7.white("Commit workflow preference:"),
5502
- choices: [
5503
- { title: "\u{1F500} Branch + PR - Create branches and open pull requests", value: "branch_pr" },
5504
- { title: "\u2B06\uFE0F Direct to main - Commit directly to main/master branch", value: "direct_main" }
5505
- ],
5506
- initial: 0
5507
- // Default to branch + PR
5508
- }, promptConfig);
5509
- answers.commitWorkflow = commitWorkflowResponse.commitWorkflow || "branch_pr";
5523
+ answers.commitWorkflow = answers.branchStrategy === "none" ? "direct_main" : "branch_pr";
5510
5524
  const cicdChoices = [
5511
5525
  { title: chalk7.gray("\u23ED Skip"), value: "" },
5512
5526
  ...CICD_OPTIONS.map((c) => ({
@@ -5523,27 +5537,61 @@ async function runInteractiveWizard(options, detected, userTier) {
5523
5537
  initial: detectedCicdIndex > 0 ? detectedCicdIndex : 0
5524
5538
  }, promptConfig);
5525
5539
  answers.cicd = cicdResponse.cicd || "";
5526
- const deployChoices = sortSelectedFirst(DEPLOYMENT_TARGETS.map((t) => ({
5527
- title: t.id === "docker" && detected?.hasDocker ? `${t.icon}${t.label} ${chalk7.green("(detected)")}` : `${t.icon}${t.label}`,
5528
- selected: t.id === "docker" && detected?.hasDocker,
5529
- value: t.id
5530
- })));
5531
- const deployResponse = await prompts3({
5532
- type: "autocompleteMultiselect",
5533
- name: "deploymentTargets",
5534
- message: chalk7.white("Deployment targets (type to search):"),
5535
- choices: deployChoices,
5536
- hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5537
- instructions: false
5540
+ const deployTypeResponse = await prompts3({
5541
+ type: "select",
5542
+ name: "deployType",
5543
+ message: chalk7.white("Deployment environment:"),
5544
+ choices: [
5545
+ { title: "\u2601\uFE0F Cloud only - PaaS, serverless, managed services", value: "cloud" },
5546
+ { title: "\u{1F3E0} Self-hosted only - On-premise, homelab, VPS", value: "self_hosted" },
5547
+ { title: "\u{1F504} Both cloud and self-hosted", value: "both" },
5548
+ { title: chalk7.gray("\u23ED Skip"), value: "skip" }
5549
+ ],
5550
+ initial: 0
5538
5551
  }, promptConfig);
5539
- answers.deploymentTargets = deployResponse.deploymentTargets || [];
5540
- const dockerSelected = (answers.deploymentTargets || []).includes("docker");
5552
+ const deployType = deployTypeResponse.deployType || "skip";
5553
+ let allDeployTargets = [];
5554
+ if (deployType === "cloud" || deployType === "both") {
5555
+ const cloudChoices = CLOUD_TARGETS.map((t) => ({
5556
+ title: `${t.icon}${t.label}`,
5557
+ value: t.id
5558
+ }));
5559
+ const cloudResponse = await prompts3({
5560
+ type: "autocompleteMultiselect",
5561
+ name: "cloudTargets",
5562
+ message: chalk7.white("Cloud deployment targets (type to search):"),
5563
+ choices: cloudChoices,
5564
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5565
+ instructions: false
5566
+ }, promptConfig);
5567
+ allDeployTargets = [...cloudResponse.cloudTargets || []];
5568
+ }
5569
+ if (deployType === "self_hosted" || deployType === "both") {
5570
+ const selfHostedChoices = sortSelectedFirst(SELF_HOSTED_TARGETS.map((t) => ({
5571
+ title: t.id === "docker" && detected?.hasDocker ? `${t.icon}${t.label} ${chalk7.green("(detected)")}` : `${t.icon}${t.label}`,
5572
+ selected: t.id === "docker" && detected?.hasDocker,
5573
+ value: t.id
5574
+ })));
5575
+ const selfHostedResponse = await prompts3({
5576
+ type: "autocompleteMultiselect",
5577
+ name: "selfHostedTargets",
5578
+ message: chalk7.white("Self-hosted deployment targets (type to search):"),
5579
+ choices: selfHostedChoices,
5580
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5581
+ instructions: false
5582
+ }, promptConfig);
5583
+ allDeployTargets = [...allDeployTargets, ...selfHostedResponse.selfHostedTargets || []];
5584
+ }
5585
+ answers.deploymentTargets = allDeployTargets;
5586
+ const dockerSelected = (answers.deploymentTargets || []).some(
5587
+ (t) => ["docker", "docker_compose", "kubernetes", "k3s", "podman"].includes(t)
5588
+ ) || detected?.hasDocker;
5541
5589
  const containerResponse = await prompts3({
5542
5590
  type: "toggle",
5543
5591
  name: "buildContainer",
5544
5592
  message: chalk7.white("Build container images (Docker)?"),
5545
5593
  initial: dockerSelected,
5546
- // Default Yes if Docker selected
5594
+ // Default Yes if container platform selected
5547
5595
  active: "Yes",
5548
5596
  inactive: "No"
5549
5597
  }, promptConfig);
@@ -8810,7 +8858,7 @@ function handleError2(error) {
8810
8858
  }
8811
8859
 
8812
8860
  // src/index.ts
8813
- var CLI_VERSION2 = "1.2.12";
8861
+ var CLI_VERSION2 = "1.2.13";
8814
8862
  var program = new Command();
8815
8863
  program.name("lynxprompt").description("CLI for LynxPrompt - Generate AI IDE configuration files").version(CLI_VERSION2);
8816
8864
  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);