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 +379 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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);
|