lynxprompt 1.2.3 → 1.2.4

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
@@ -3359,7 +3359,7 @@ function generateYamlConfig(options, platform2) {
3359
3359
 
3360
3360
  // src/commands/wizard.ts
3361
3361
  var DRAFTS_DIR = ".lynxprompt/drafts";
3362
- var CLI_VERSION = "1.2.3";
3362
+ var CLI_VERSION = "1.2.4";
3363
3363
  async function saveDraftLocally(name, config2, stepReached) {
3364
3364
  const draftsPath = join4(process.cwd(), DRAFTS_DIR);
3365
3365
  await mkdir3(draftsPath, { recursive: true });
@@ -3544,6 +3544,60 @@ var DATABASES = [
3544
3544
  { title: "\u{1F525} Firebase", value: "firebase" },
3545
3545
  { title: "\u{1F4C2} Prisma", value: "prisma" }
3546
3546
  ];
3547
+ var PACKAGE_MANAGERS = [
3548
+ { title: "\u{1F4E6} npm", value: "npm", desc: "Node Package Manager (default)" },
3549
+ { title: "\u{1F9F6} Yarn", value: "yarn", desc: "Fast, reliable, and secure" },
3550
+ { title: "\u{1F4C0} pnpm", value: "pnpm", desc: "Fast, disk space efficient" },
3551
+ { title: "\u{1F95F} Bun", value: "bun", desc: "All-in-one JS runtime + PM" }
3552
+ ];
3553
+ var JS_RUNTIMES = [
3554
+ { title: "\u{1F7E2} Node.js", value: "node", desc: "Standard JavaScript runtime" },
3555
+ { title: "\u{1F995} Deno", value: "deno", desc: "Secure runtime with TypeScript" },
3556
+ { title: "\u{1F95F} Bun", value: "bun", desc: "Fast all-in-one JS runtime" }
3557
+ ];
3558
+ var MONOREPO_TOOLS = [
3559
+ { title: "\u{1F4C1} None", value: "", desc: "Single package repository" },
3560
+ { title: "\u26A1 Turborepo", value: "turborepo", desc: "High-performance build system" },
3561
+ { title: "\u{1F537} Nx", value: "nx", desc: "Smart, extensible build framework" },
3562
+ { title: "\u{1F409} Lerna", value: "lerna", desc: "Multi-package repositories" },
3563
+ { title: "\u{1F4C0} pnpm Workspaces", value: "pnpm_workspaces", desc: "Native pnpm monorepo" },
3564
+ { title: "\u{1F9F6} Yarn Workspaces", value: "yarn_workspaces", desc: "Native Yarn monorepo" },
3565
+ { title: "\u{1F4E6} npm Workspaces", value: "npm_workspaces", desc: "Native npm monorepo" }
3566
+ ];
3567
+ var ORM_OPTIONS = [
3568
+ { title: "\u{1F4DD} None / Raw SQL", value: "", langs: [] },
3569
+ // JavaScript/TypeScript
3570
+ { title: "\u{1F537} Prisma", value: "prisma", langs: ["javascript", "typescript"] },
3571
+ { title: "\u{1F4A7} Drizzle", value: "drizzle", langs: ["javascript", "typescript"] },
3572
+ { title: "\u{1F536} TypeORM", value: "typeorm", langs: ["javascript", "typescript"] },
3573
+ { title: "\u{1F4D8} Sequelize", value: "sequelize", langs: ["javascript", "typescript"] },
3574
+ { title: "\u{1F527} Knex.js", value: "knex", langs: ["javascript", "typescript"] },
3575
+ { title: "\u{1F3AF} Kysely", value: "kysely", langs: ["javascript", "typescript"] },
3576
+ // Python
3577
+ { title: "\u{1F40D} SQLAlchemy", value: "sqlalchemy", langs: ["python"] },
3578
+ { title: "\u{1F3B8} Django ORM", value: "django_orm", langs: ["python"] },
3579
+ { title: "\u{1F422} Tortoise ORM", value: "tortoise", langs: ["python"] },
3580
+ { title: "\u26A1 SQLModel", value: "sqlmodel", langs: ["python"] },
3581
+ // Go
3582
+ { title: "\u{1F439} GORM", value: "gorm", langs: ["go"] },
3583
+ { title: "\u{1F3D7}\uFE0F Ent", value: "ent", langs: ["go"] },
3584
+ { title: "\u{1F4DD} sqlc", value: "sqlc", langs: ["go"] },
3585
+ // Rust
3586
+ { title: "\u{1F980} Diesel", value: "diesel", langs: ["rust"] },
3587
+ { title: "\u{1F30A} SeaORM", value: "sea-orm", langs: ["rust"] },
3588
+ { title: "\u{1F4E6} SQLx", value: "sqlx", langs: ["rust"] },
3589
+ // Java/Kotlin
3590
+ { title: "\u2615 Hibernate", value: "hibernate", langs: ["java", "kotlin"] },
3591
+ { title: "\u{1F3B5} jOOQ", value: "jooq", langs: ["java", "kotlin"] },
3592
+ // .NET
3593
+ { title: "\u{1F537} Entity Framework", value: "ef_core", langs: ["csharp"] },
3594
+ { title: "\u26A1 Dapper", value: "dapper", langs: ["csharp"] },
3595
+ // Ruby
3596
+ { title: "\u{1F48E} ActiveRecord", value: "activerecord", langs: ["ruby"] },
3597
+ // PHP
3598
+ { title: "\u{1F418} Eloquent", value: "eloquent", langs: ["php"] },
3599
+ { title: "\u{1F4D6} Doctrine", value: "doctrine", langs: ["php"] }
3600
+ ];
3547
3601
  var REPO_HOSTS = [
3548
3602
  { id: "github", label: "GitHub", icon: "\u{1F419}" },
3549
3603
  { id: "gitlab", label: "GitLab", icon: "\u{1F98A}" },
@@ -3776,6 +3830,79 @@ var COMMON_COMMANDS = {
3776
3830
  "docker compose up",
3777
3831
  "docker compose up -d"
3778
3832
  ],
3833
+ format: [
3834
+ // JavaScript/Node
3835
+ "prettier --write .",
3836
+ "npm run format",
3837
+ "pnpm format",
3838
+ "biome format --write .",
3839
+ "dprint fmt",
3840
+ // Python
3841
+ "black .",
3842
+ "ruff format .",
3843
+ "isort .",
3844
+ "autopep8 --in-place -r .",
3845
+ // Go
3846
+ "go fmt ./...",
3847
+ "gofmt -w .",
3848
+ "goimports -w .",
3849
+ // Rust
3850
+ "cargo fmt",
3851
+ // Other
3852
+ "shfmt -w .",
3853
+ "terraform fmt -recursive"
3854
+ ],
3855
+ typecheck: [
3856
+ // TypeScript
3857
+ "tsc --noEmit",
3858
+ "npm run typecheck",
3859
+ "pnpm typecheck",
3860
+ "vue-tsc --noEmit",
3861
+ "tsc -b",
3862
+ // Python
3863
+ "mypy .",
3864
+ "pyright",
3865
+ "pyre check",
3866
+ // Go
3867
+ "go vet ./...",
3868
+ "staticcheck ./...",
3869
+ // Rust
3870
+ "cargo check"
3871
+ ],
3872
+ clean: [
3873
+ // JavaScript/Node
3874
+ "npm run clean",
3875
+ "rm -rf node_modules",
3876
+ "rm -rf dist",
3877
+ "rm -rf .next",
3878
+ "rm -rf build",
3879
+ "rm -rf coverage",
3880
+ // Python
3881
+ "rm -rf __pycache__",
3882
+ "find . -name '*.pyc' -delete",
3883
+ // Go
3884
+ "go clean -cache",
3885
+ "go clean -testcache",
3886
+ // Rust
3887
+ "cargo clean",
3888
+ // Docker
3889
+ "docker system prune -af",
3890
+ "docker compose down -v",
3891
+ // Make
3892
+ "make clean"
3893
+ ],
3894
+ preCommit: [
3895
+ // JavaScript
3896
+ "npx husky install",
3897
+ "pnpm dlx husky install",
3898
+ "lefthook install",
3899
+ "lint-staged",
3900
+ "npx lint-staged",
3901
+ "simple-git-hooks",
3902
+ // Python
3903
+ "pre-commit install",
3904
+ "pre-commit run --all-files"
3905
+ ],
3779
3906
  additional: [
3780
3907
  // Database
3781
3908
  "npm run db:push",
@@ -3798,11 +3925,7 @@ var COMMON_COMMANDS = {
3798
3925
  "vercel",
3799
3926
  "netlify deploy",
3800
3927
  "flyctl deploy",
3801
- "railway up",
3802
- // Clean
3803
- "npm run clean",
3804
- "make clean",
3805
- "cargo clean"
3928
+ "railway up"
3806
3929
  ]
3807
3930
  };
3808
3931
  var NAMING_CONVENTIONS = [
@@ -4922,6 +5045,61 @@ async function runInteractiveWizard(options, detected, userTier) {
4922
5045
  instructions: false
4923
5046
  }, promptConfig);
4924
5047
  const selectedDatabases = databaseResponse.databases || [];
5048
+ const hasJsTs = selectedLanguages.includes("javascript") || selectedLanguages.includes("typescript");
5049
+ if (hasJsTs) {
5050
+ console.log();
5051
+ console.log(chalk7.cyan(" \u{1F4E6} JavaScript/TypeScript Options"));
5052
+ console.log();
5053
+ const pmResponse = await prompts3({
5054
+ type: "select",
5055
+ name: "packageManager",
5056
+ message: chalk7.white("Package manager:"),
5057
+ choices: PACKAGE_MANAGERS.map((pm) => ({
5058
+ title: `${pm.title} - ${chalk7.gray(pm.desc)}`,
5059
+ value: pm.value
5060
+ })),
5061
+ initial: 0
5062
+ }, promptConfig);
5063
+ answers.packageManager = pmResponse.packageManager || "npm";
5064
+ const runtimeResponse = await prompts3({
5065
+ type: "select",
5066
+ name: "jsRuntime",
5067
+ message: chalk7.white("JavaScript runtime:"),
5068
+ choices: JS_RUNTIMES.map((rt) => ({
5069
+ title: `${rt.title} - ${chalk7.gray(rt.desc)}`,
5070
+ value: rt.value
5071
+ })),
5072
+ initial: 0
5073
+ }, promptConfig);
5074
+ answers.jsRuntime = runtimeResponse.jsRuntime || "node";
5075
+ const monoResponse = await prompts3({
5076
+ type: "select",
5077
+ name: "monorepoTool",
5078
+ message: chalk7.white("Monorepo tool:"),
5079
+ choices: MONOREPO_TOOLS.map((mt) => ({
5080
+ title: `${mt.title} - ${chalk7.gray(mt.desc)}`,
5081
+ value: mt.value
5082
+ })),
5083
+ initial: 0
5084
+ }, promptConfig);
5085
+ answers.monorepoTool = monoResponse.monorepoTool || "";
5086
+ }
5087
+ if (selectedDatabases.length > 0) {
5088
+ console.log();
5089
+ console.log(chalk7.cyan(" \u{1F517} ORM / Database Library"));
5090
+ console.log();
5091
+ const relevantOrms = ORM_OPTIONS.filter(
5092
+ (orm) => orm.langs.length === 0 || orm.langs.some((l) => selectedLanguages.includes(l))
5093
+ );
5094
+ const ormResponse = await prompts3({
5095
+ type: "select",
5096
+ name: "orm",
5097
+ message: chalk7.white("ORM / Database library:"),
5098
+ choices: relevantOrms.map((orm) => ({ title: orm.title, value: orm.value })),
5099
+ initial: 0
5100
+ }, promptConfig);
5101
+ answers.orm = ormResponse.orm || "";
5102
+ }
4925
5103
  answers.stack = [...selectedLanguages, ...selectedFrameworks, ...selectedDatabases];
4926
5104
  const repoStep = getCurrentStep("repo");
4927
5105
  showStep(currentStepNum, repoStep, userTier);
@@ -4994,6 +5172,42 @@ async function runInteractiveWizard(options, detected, userTier) {
4994
5172
  inactive: "No"
4995
5173
  }, promptConfig);
4996
5174
  answers.semver = semverResponse.semver ?? true;
5175
+ const signingResponse = await prompts3({
5176
+ type: "toggle",
5177
+ name: "commitSigning",
5178
+ message: chalk7.white("Require commit signing (GPG/SSH)?"),
5179
+ initial: false,
5180
+ active: "Yes",
5181
+ inactive: "No"
5182
+ }, promptConfig);
5183
+ answers.commitSigning = signingResponse.commitSigning ?? false;
5184
+ const branchStrategyResponse = await prompts3({
5185
+ type: "select",
5186
+ name: "branchStrategy",
5187
+ message: chalk7.white("Branch strategy:"),
5188
+ choices: [
5189
+ { title: "\u{1F30A} GitHub Flow - Simple: main + feature branches", value: "github_flow" },
5190
+ { title: "\u{1F333} Gitflow - develop, feature, release, hotfix branches", value: "gitflow" },
5191
+ { title: "\u{1F682} Trunk-Based - Short-lived branches, continuous integration", value: "trunk_based" },
5192
+ { title: "\u{1F98A} GitLab Flow - Environment branches (staging, production)", value: "gitlab_flow" },
5193
+ { title: "\u{1F680} Release Flow - main + release branches", value: "release_flow" }
5194
+ ],
5195
+ initial: 0
5196
+ }, promptConfig);
5197
+ answers.branchStrategy = branchStrategyResponse.branchStrategy || "github_flow";
5198
+ const defaultBranchResponse = await prompts3({
5199
+ type: "select",
5200
+ name: "defaultBranch",
5201
+ message: chalk7.white("Default branch name:"),
5202
+ choices: [
5203
+ { title: "main", value: "main" },
5204
+ { title: "master", value: "master" },
5205
+ { title: "develop", value: "develop" },
5206
+ { title: "trunk", value: "trunk" }
5207
+ ],
5208
+ initial: 0
5209
+ }, promptConfig);
5210
+ answers.defaultBranch = defaultBranchResponse.defaultBranch || "main";
4997
5211
  const cicdChoices = [
4998
5212
  { title: chalk7.gray("\u23ED Skip"), value: "" },
4999
5213
  ...CICD_OPTIONS.map((c) => ({
@@ -5276,6 +5490,50 @@ async function runInteractiveWizard(options, detected, userTier) {
5276
5490
  hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5277
5491
  instructions: false
5278
5492
  }, promptConfig);
5493
+ const formatResponse = await prompts3({
5494
+ type: "autocompleteMultiselect",
5495
+ name: "format",
5496
+ message: chalk7.white("Format commands (type to search):"),
5497
+ choices: COMMON_COMMANDS.format.map((c) => ({
5498
+ title: chalk7.blue(c),
5499
+ value: c
5500
+ })),
5501
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5502
+ instructions: false
5503
+ }, promptConfig);
5504
+ const typecheckResponse = await prompts3({
5505
+ type: "autocompleteMultiselect",
5506
+ name: "typecheck",
5507
+ message: chalk7.white("Typecheck commands (type to search):"),
5508
+ choices: COMMON_COMMANDS.typecheck.map((c) => ({
5509
+ title: chalk7.gray(c),
5510
+ value: c
5511
+ })),
5512
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5513
+ instructions: false
5514
+ }, promptConfig);
5515
+ const cleanResponse = await prompts3({
5516
+ type: "autocompleteMultiselect",
5517
+ name: "clean",
5518
+ message: chalk7.white("Clean commands (type to search):"),
5519
+ choices: COMMON_COMMANDS.clean.map((c) => ({
5520
+ title: chalk7.red(c),
5521
+ value: c
5522
+ })),
5523
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5524
+ instructions: false
5525
+ }, promptConfig);
5526
+ const preCommitResponse = await prompts3({
5527
+ type: "autocompleteMultiselect",
5528
+ name: "preCommit",
5529
+ message: chalk7.white("Pre-commit hooks (type to search):"),
5530
+ choices: COMMON_COMMANDS.preCommit.map((c) => ({
5531
+ title: chalk7.yellow(c),
5532
+ value: c
5533
+ })),
5534
+ hint: chalk7.gray("type to filter \u2022 space select \u2022 enter confirm"),
5535
+ instructions: false
5536
+ }, promptConfig);
5279
5537
  const additionalResponse = await prompts3({
5280
5538
  type: "autocompleteMultiselect",
5281
5539
  name: "additional",
@@ -5292,6 +5550,10 @@ async function runInteractiveWizard(options, detected, userTier) {
5292
5550
  test: testResponse.test || [],
5293
5551
  lint: lintResponse.lint || [],
5294
5552
  dev: devResponse.dev || [],
5553
+ format: formatResponse.format || [],
5554
+ typecheck: typecheckResponse.typecheck || [],
5555
+ clean: cleanResponse.clean || [],
5556
+ preCommit: preCommitResponse.preCommit || [],
5295
5557
  additional: additionalResponse.additional || []
5296
5558
  };
5297
5559
  const customCmdResponse = await prompts3({
@@ -5371,6 +5633,56 @@ async function runInteractiveWizard(options, detected, userTier) {
5371
5633
  }, promptConfig);
5372
5634
  answers.loggingConventionsOther = customLoggingResponse.customLogging || "";
5373
5635
  }
5636
+ const maxFileLengthResponse = await prompts3({
5637
+ type: "number",
5638
+ name: "maxFileLength",
5639
+ message: chalk7.white("Max file length (lines, 100-1000):"),
5640
+ initial: 300,
5641
+ min: 100,
5642
+ max: 1e3
5643
+ }, promptConfig);
5644
+ answers.maxFileLength = maxFileLengthResponse.maxFileLength || 300;
5645
+ const importOrderResponse = await prompts3({
5646
+ type: "select",
5647
+ name: "importOrder",
5648
+ message: chalk7.white("Import order preference:"),
5649
+ choices: [
5650
+ { title: "Grouped (external \u2192 internal \u2192 relative)", value: "grouped" },
5651
+ { title: "Alphabetical (sort A-Z)", value: "sorted" },
5652
+ { title: "Natural (leave as written)", value: "natural" }
5653
+ ],
5654
+ initial: 0
5655
+ }, promptConfig);
5656
+ answers.importOrder = importOrderResponse.importOrder || "grouped";
5657
+ const commentLangResponse = await prompts3({
5658
+ type: "select",
5659
+ name: "commentLanguage",
5660
+ message: chalk7.white("Comment language:"),
5661
+ choices: [
5662
+ { title: "\u{1F1EC}\u{1F1E7} English", value: "english" },
5663
+ { title: "\u{1F30D} Native language", value: "native" },
5664
+ { title: "\u{1F5E3}\uFE0F Any (team preference)", value: "any" }
5665
+ ],
5666
+ initial: 0
5667
+ }, promptConfig);
5668
+ answers.commentLanguage = commentLangResponse.commentLanguage || "english";
5669
+ const docStyleResponse = await prompts3({
5670
+ type: "select",
5671
+ name: "docStyle",
5672
+ message: chalk7.white("Documentation style:"),
5673
+ choices: [
5674
+ { title: chalk7.gray("\u23ED Skip (language default)"), value: "" },
5675
+ { title: "JSDoc", value: "jsdoc" },
5676
+ { title: "TSDoc", value: "tsdoc" },
5677
+ { title: "Python docstrings", value: "pydoc" },
5678
+ { title: "Go doc comments", value: "godoc" },
5679
+ { title: "Rust doc (///)", value: "rustdoc" },
5680
+ { title: "Javadoc", value: "javadoc" },
5681
+ { title: "C# XML docs", value: "xmldoc" }
5682
+ ],
5683
+ initial: 0
5684
+ }, promptConfig);
5685
+ answers.docStyle = docStyleResponse.docStyle || "";
5374
5686
  const styleNotesResponse = await prompts3({
5375
5687
  type: "text",
5376
5688
  name: "styleNotes",
@@ -5403,6 +5715,36 @@ async function runInteractiveWizard(options, detected, userTier) {
5403
5715
  if (rule) console.log(chalk7.cyan(` \u2022 ${rule.label}`));
5404
5716
  }
5405
5717
  }
5718
+ const verbosityResponse = await prompts3({
5719
+ type: "select",
5720
+ name: "explanationVerbosity",
5721
+ message: chalk7.white("Explanation verbosity:"),
5722
+ choices: [
5723
+ { title: "\u{1F4DD} Concise - Brief, to the point", value: "concise" },
5724
+ { title: "\u2696\uFE0F Balanced - Clear with context", value: "balanced" },
5725
+ { title: "\u{1F4DA} Detailed - In-depth explanations", value: "detailed" }
5726
+ ],
5727
+ initial: 1
5728
+ }, promptConfig);
5729
+ answers.explanationVerbosity = verbosityResponse.explanationVerbosity || "balanced";
5730
+ const accessibilityResponse = await prompts3({
5731
+ type: "toggle",
5732
+ name: "accessibilityFocus",
5733
+ message: chalk7.white("Prioritize accessibility (WCAG, a11y)?"),
5734
+ initial: false,
5735
+ active: "Yes",
5736
+ inactive: "No"
5737
+ }, promptConfig);
5738
+ answers.accessibilityFocus = accessibilityResponse.accessibilityFocus ?? false;
5739
+ const performanceResponse = await prompts3({
5740
+ type: "toggle",
5741
+ name: "performanceFocus",
5742
+ message: chalk7.white("Prioritize performance optimizations?"),
5743
+ initial: false,
5744
+ active: "Yes",
5745
+ inactive: "No"
5746
+ }, promptConfig);
5747
+ answers.performanceFocus = performanceResponse.performanceFocus ?? false;
5406
5748
  console.log();
5407
5749
  console.log(chalk7.gray(" \u{1F4C1} Select files the AI should read first to understand your project context."));
5408
5750
  console.log(chalk7.gray(" These help the AI understand your codebase, APIs, and conventions."));
@@ -5658,6 +6000,36 @@ async function runInteractiveWizard(options, detected, userTier) {
5658
6000
  max: 100
5659
6001
  }, promptConfig);
5660
6002
  answers.coverageTarget = coverageResponse.coverage ?? 80;
6003
+ const tddResponse = await prompts3({
6004
+ type: "toggle",
6005
+ name: "tddPreference",
6006
+ message: chalk7.white("Use Test-Driven Development (TDD)?"),
6007
+ initial: false,
6008
+ active: "Yes",
6009
+ inactive: "No"
6010
+ }, promptConfig);
6011
+ answers.tddPreference = tddResponse.tddPreference ?? false;
6012
+ const snapshotResponse = await prompts3({
6013
+ type: "toggle",
6014
+ name: "snapshotTesting",
6015
+ message: chalk7.white("Use snapshot testing?"),
6016
+ initial: false,
6017
+ active: "Yes",
6018
+ inactive: "No"
6019
+ }, promptConfig);
6020
+ answers.snapshotTesting = snapshotResponse.snapshotTesting ?? false;
6021
+ const mockResponse = await prompts3({
6022
+ type: "select",
6023
+ name: "mockStrategy",
6024
+ message: chalk7.white("Mock strategy:"),
6025
+ choices: [
6026
+ { title: "Minimal - Only mock external dependencies", value: "minimal" },
6027
+ { title: "Comprehensive - Mock for isolation", value: "comprehensive" },
6028
+ { title: "None - No mocking preferred", value: "none" }
6029
+ ],
6030
+ initial: 0
6031
+ }, promptConfig);
6032
+ answers.mockStrategy = mockResponse.mockStrategy || "minimal";
5661
6033
  const testNotesResponse = await prompts3({
5662
6034
  type: "text",
5663
6035
  name: "testNotes",
@@ -8022,7 +8394,7 @@ function handleError2(error) {
8022
8394
  }
8023
8395
 
8024
8396
  // src/index.ts
8025
- var CLI_VERSION2 = "1.2.3";
8397
+ var CLI_VERSION2 = "1.2.4";
8026
8398
  var program = new Command();
8027
8399
  program.name("lynxprompt").description("CLI for LynxPrompt - Generate AI IDE configuration files").version(CLI_VERSION2);
8028
8400
  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);