lynxprompt 1.0.0 → 1.0.3
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 +125 -90
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -324,19 +324,18 @@ function displayWelcome(user) {
|
|
|
324
324
|
const plan = user.plan?.toUpperCase() || "FREE";
|
|
325
325
|
const name = user.name || user.email.split("@")[0];
|
|
326
326
|
const planConfig = {
|
|
327
|
-
FREE: { color: chalk.gray, emoji: "\u{1F193}", badge: "
|
|
328
|
-
|
|
329
|
-
MAX: { color: chalk.magenta, emoji: "\u{1F680}", badge: "Max" },
|
|
330
|
-
TEAMS: { color: chalk.yellow, emoji: "\u{1F465}", badge: "Teams" }
|
|
327
|
+
FREE: { color: chalk.gray, emoji: "\u{1F193}", badge: "Users" },
|
|
328
|
+
TEAMS: { color: chalk.cyan, emoji: "\u{1F465}", badge: "Teams" }
|
|
331
329
|
};
|
|
332
|
-
const
|
|
333
|
-
const
|
|
330
|
+
const effectivePlan = plan === "PRO" || plan === "MAX" ? "FREE" : plan;
|
|
331
|
+
const config2 = planConfig[effectivePlan] || planConfig.FREE;
|
|
332
|
+
const W = 46;
|
|
334
333
|
const b = chalk.bold;
|
|
335
334
|
const pad = (s, len) => s + " ".repeat(Math.max(0, len - s.length));
|
|
336
335
|
console.log();
|
|
337
336
|
console.log(b("\u250C" + "\u2500".repeat(W) + "\u2510"));
|
|
338
337
|
console.log(b("\u2502") + " ".repeat(W) + b("\u2502"));
|
|
339
|
-
console.log(b("\u2502") + pad(` ${config2.emoji} Welcome to LynxPrompt CLI!`, W
|
|
338
|
+
console.log(b("\u2502") + pad(` ${config2.emoji} Welcome to LynxPrompt CLI!`, W) + b("\u2502"));
|
|
340
339
|
console.log(b("\u2502") + " ".repeat(W) + b("\u2502"));
|
|
341
340
|
console.log(b("\u2502") + pad(` User: ${name}`, W) + b("\u2502"));
|
|
342
341
|
console.log(b("\u2502") + pad(` Plan: ${config2.badge}`, W) + b("\u2502"));
|
|
@@ -345,22 +344,22 @@ function displayWelcome(user) {
|
|
|
345
344
|
console.log();
|
|
346
345
|
console.log(chalk.bold("\u{1F4CB} Your CLI Capabilities:"));
|
|
347
346
|
console.log();
|
|
348
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
349
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
350
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
351
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
352
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
353
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
354
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
355
|
-
console.log(chalk.green(" \u2713") + " " + chalk.white("
|
|
356
|
-
if (
|
|
347
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp wizard") + chalk.gray(" - Interactive config wizard"));
|
|
348
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp list") + chalk.gray(" - List your blueprints"));
|
|
349
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp pull <id>") + chalk.gray(" - Download blueprints"));
|
|
350
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp push") + chalk.gray(" - Upload blueprints to marketplace"));
|
|
351
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp link") + chalk.gray(" - Link project to blueprint"));
|
|
352
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp diff") + chalk.gray(" - Compare local vs cloud"));
|
|
353
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp whoami") + chalk.gray(" - Show account info"));
|
|
354
|
+
console.log(chalk.green(" \u2713") + " " + chalk.white("lynxp logout") + chalk.gray(" - Sign out of CLI"));
|
|
355
|
+
if (effectivePlan === "TEAMS") {
|
|
357
356
|
console.log();
|
|
358
357
|
console.log(chalk.cyan(" \u26A1") + " " + chalk.white("AI-powered editing") + chalk.gray(" - AI assistant for configs"));
|
|
359
|
-
console.log(chalk.
|
|
360
|
-
console.log(chalk.
|
|
358
|
+
console.log(chalk.cyan(" \u{1F465}") + " " + chalk.white("Team blueprints") + chalk.gray(" - Share with your team"));
|
|
359
|
+
console.log(chalk.cyan(" \u{1F465}") + " " + chalk.white("SSO integration") + chalk.gray(" - Enterprise authentication"));
|
|
361
360
|
}
|
|
362
361
|
console.log();
|
|
363
|
-
console.log(chalk.gray("Token stored securely. Run ") + chalk.cyan("
|
|
362
|
+
console.log(chalk.gray("Token stored securely. Run ") + chalk.cyan("lynxp --help") + chalk.gray(" to see all commands."));
|
|
364
363
|
console.log();
|
|
365
364
|
}
|
|
366
365
|
|
|
@@ -424,8 +423,8 @@ async function whoamiCommand() {
|
|
|
424
423
|
if (error.statusCode === 401) {
|
|
425
424
|
console.error(chalk3.red("Your session has expired. Please run 'lynxprompt login' again."));
|
|
426
425
|
} else if (error.statusCode === 403) {
|
|
427
|
-
console.error(chalk3.red("API access
|
|
428
|
-
console.error(chalk3.gray("
|
|
426
|
+
console.error(chalk3.red("API access error. Please check your subscription."));
|
|
427
|
+
console.error(chalk3.gray("Visit https://lynxprompt.com/pricing for plan details."));
|
|
429
428
|
} else {
|
|
430
429
|
console.error(chalk3.red(`Error: ${error.message}`));
|
|
431
430
|
}
|
|
@@ -438,12 +437,12 @@ async function whoamiCommand() {
|
|
|
438
437
|
function formatPlan(plan) {
|
|
439
438
|
const planColors = {
|
|
440
439
|
FREE: chalk3.gray,
|
|
441
|
-
PRO: chalk3.blue,
|
|
442
|
-
MAX: chalk3.magenta,
|
|
443
440
|
TEAMS: chalk3.cyan
|
|
444
441
|
};
|
|
445
|
-
const
|
|
446
|
-
|
|
442
|
+
const displayPlan = plan === "PRO" || plan === "MAX" ? "FREE" : plan;
|
|
443
|
+
const displayName = displayPlan === "FREE" ? "Users" : displayPlan;
|
|
444
|
+
const colorFn = planColors[displayPlan] || chalk3.white;
|
|
445
|
+
return colorFn(displayName);
|
|
447
446
|
}
|
|
448
447
|
|
|
449
448
|
// src/commands/list.ts
|
|
@@ -491,8 +490,8 @@ function printBlueprint(bp) {
|
|
|
491
490
|
}[bp.visibility] || "\u{1F4C4}";
|
|
492
491
|
const tierBadge = {
|
|
493
492
|
SIMPLE: chalk4.gray("[Basic]"),
|
|
494
|
-
INTERMEDIATE: chalk4.blue("[
|
|
495
|
-
ADVANCED: chalk4.
|
|
493
|
+
INTERMEDIATE: chalk4.blue("[Standard]"),
|
|
494
|
+
ADVANCED: chalk4.cyan("[Advanced]")
|
|
496
495
|
}[bp.tier] || "";
|
|
497
496
|
console.log(` ${visibilityIcon} ${chalk4.bold(bp.name)} ${tierBadge}`);
|
|
498
497
|
console.log(` ${chalk4.cyan(bp.id)}`);
|
|
@@ -515,8 +514,8 @@ function handleApiError(error) {
|
|
|
515
514
|
if (error.statusCode === 401) {
|
|
516
515
|
console.error(chalk4.red("Your session has expired. Please run 'lynxprompt login' again."));
|
|
517
516
|
} else if (error.statusCode === 403) {
|
|
518
|
-
console.error(chalk4.red("API access
|
|
519
|
-
console.error(chalk4.gray("
|
|
517
|
+
console.error(chalk4.red("API access error. Please check your subscription."));
|
|
518
|
+
console.error(chalk4.gray("Visit https://lynxprompt.com/pricing for plan details."));
|
|
520
519
|
} else {
|
|
521
520
|
console.error(chalk4.red(`Error: ${error.message}`));
|
|
522
521
|
}
|
|
@@ -2460,16 +2459,13 @@ function generateFileContent(options, platform2) {
|
|
|
2460
2459
|
sections.push("");
|
|
2461
2460
|
}
|
|
2462
2461
|
}
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
};
|
|
2471
|
-
}
|
|
2472
|
-
if (boundaries) {
|
|
2462
|
+
const presetBoundaries = BOUNDARIES[options.boundaries] || BOUNDARIES.standard;
|
|
2463
|
+
const boundaries = {
|
|
2464
|
+
always: options.boundaryAlways?.length ? options.boundaryAlways : presetBoundaries.always,
|
|
2465
|
+
never: options.boundaryNever?.length ? options.boundaryNever : presetBoundaries.never,
|
|
2466
|
+
askFirst: options.boundaryAsk?.length ? options.boundaryAsk : presetBoundaries.askFirst
|
|
2467
|
+
};
|
|
2468
|
+
if (boundaries.always?.length || boundaries.never?.length || boundaries.askFirst?.length) {
|
|
2473
2469
|
if (isMarkdown || isMdc) {
|
|
2474
2470
|
sections.push("## Boundaries");
|
|
2475
2471
|
sections.push("");
|
|
@@ -3818,8 +3814,8 @@ async function runWizardWithDraftProtection(options) {
|
|
|
3818
3814
|
const authenticated = isAuthenticated();
|
|
3819
3815
|
const user = getUser();
|
|
3820
3816
|
const userPlanRaw = user?.plan?.toLowerCase() || "free";
|
|
3821
|
-
const userTier =
|
|
3822
|
-
const userPlanDisplay =
|
|
3817
|
+
const userTier = userPlanRaw === "teams" ? "teams" : "users";
|
|
3818
|
+
const userPlanDisplay = userTier === "teams" ? "TEAMS" : "USERS";
|
|
3823
3819
|
if (!authenticated) {
|
|
3824
3820
|
const W = 55;
|
|
3825
3821
|
const y = chalk7.yellow;
|
|
@@ -3827,9 +3823,9 @@ async function runWizardWithDraftProtection(options) {
|
|
|
3827
3823
|
console.log(y("\u250C" + "\u2500".repeat(W) + "\u2510"));
|
|
3828
3824
|
console.log(y("\u2502") + pad(" \u{1F4A1} Log in for full wizard features:", W - 1) + y("\u2502"));
|
|
3829
3825
|
console.log(y("\u2502") + " ".repeat(W) + y("\u2502"));
|
|
3830
|
-
console.log(y("\u2502") + pad(" \u2022
|
|
3831
|
-
console.log(y("\u2502") + pad(" \u2022
|
|
3832
|
-
console.log(y("\u2502") + pad(" \u2022
|
|
3826
|
+
console.log(y("\u2502") + pad(" \u2022 Full wizard with all steps", W) + y("\u2502"));
|
|
3827
|
+
console.log(y("\u2502") + pad(" \u2022 Auto-detect from repos [TEAMS]", W) + y("\u2502"));
|
|
3828
|
+
console.log(y("\u2502") + pad(" \u2022 AI assistant for configs [TEAMS]", W) + y("\u2502"));
|
|
3833
3829
|
console.log(y("\u2502") + pad(" \u2022 Save preferences to your profile", W) + y("\u2502"));
|
|
3834
3830
|
console.log(y("\u2502") + pad(" \u2022 Push configs to cloud (lynxp push)", W) + y("\u2502"));
|
|
3835
3831
|
console.log(y("\u2502") + pad(" \u2022 Share across devices (lynxp push/pull)", W) + y("\u2502"));
|
|
@@ -3838,7 +3834,7 @@ async function runWizardWithDraftProtection(options) {
|
|
|
3838
3834
|
console.log(y("\u2514" + "\u2500".repeat(W) + "\u2518"));
|
|
3839
3835
|
console.log();
|
|
3840
3836
|
} else {
|
|
3841
|
-
const planEmoji = userTier === "teams" ? "\u{1F465}" :
|
|
3837
|
+
const planEmoji = userTier === "teams" ? "\u{1F465}" : "\u{1F193}";
|
|
3842
3838
|
console.log(chalk7.green(` \u2713 Logged in as ${chalk7.bold(user?.name || user?.email)} ${planEmoji} ${chalk7.gray(userPlanDisplay)}`));
|
|
3843
3839
|
console.log();
|
|
3844
3840
|
}
|
|
@@ -3865,19 +3861,19 @@ async function runWizardWithDraftProtection(options) {
|
|
|
3865
3861
|
console.log(chalk7.gray(" No project detected in current directory."));
|
|
3866
3862
|
console.log();
|
|
3867
3863
|
}
|
|
3868
|
-
const canDetectRemote =
|
|
3864
|
+
const canDetectRemote = true;
|
|
3869
3865
|
if (canDetectRemote) {
|
|
3870
3866
|
console.log();
|
|
3871
|
-
console.log(chalk7.magenta.bold(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\
|
|
3872
|
-
console.log(chalk7.magenta.bold(" \u2502 \u2728 AUTO-DETECT FROM REPOSITORY
|
|
3873
|
-
console.log(chalk7.magenta.bold(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\
|
|
3874
|
-
console.log(chalk7.gray(" Analyze any
|
|
3867
|
+
console.log(chalk7.magenta.bold(" \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"));
|
|
3868
|
+
console.log(chalk7.magenta.bold(" \u2502 \u2728 AUTO-DETECT FROM REPOSITORY \u2502"));
|
|
3869
|
+
console.log(chalk7.magenta.bold(" \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"));
|
|
3870
|
+
console.log(chalk7.gray(" Analyze any local path, GitHub/GitLab URL, or private repo with credentials."));
|
|
3875
3871
|
console.log(chalk7.gray(" We'll detect: languages, frameworks, commands, license, CI/CD, and more!"));
|
|
3876
3872
|
console.log();
|
|
3877
3873
|
const remoteResponse = await prompts3({
|
|
3878
3874
|
type: "confirm",
|
|
3879
3875
|
name: "useRemote",
|
|
3880
|
-
message: detected ? chalk7.white("\u{1F50D} Analyze a different
|
|
3876
|
+
message: detected ? chalk7.white("\u{1F50D} Analyze a different repository instead?") : chalk7.white("\u{1F50D} Analyze a repository (local path or URL)?"),
|
|
3881
3877
|
initial: false
|
|
3882
3878
|
// Default to No - user must explicitly choose Yes
|
|
3883
3879
|
}, promptConfig);
|
|
@@ -3885,33 +3881,58 @@ async function runWizardWithDraftProtection(options) {
|
|
|
3885
3881
|
const urlResponse = await prompts3({
|
|
3886
3882
|
type: "text",
|
|
3887
3883
|
name: "url",
|
|
3888
|
-
message: chalk7.white("Enter
|
|
3889
|
-
hint: chalk7.gray("
|
|
3890
|
-
validate: (v) =>
|
|
3884
|
+
message: chalk7.white("Enter local path or repository URL:"),
|
|
3885
|
+
hint: chalk7.gray("/path/to/project or https://github.com/user/repo"),
|
|
3886
|
+
validate: (v) => {
|
|
3887
|
+
if (!v || v.trim() === "") return "Please enter a path or URL";
|
|
3888
|
+
if (v.startsWith("/") || v.startsWith("~") || v.startsWith(".")) return true;
|
|
3889
|
+
if (isGitUrl(v)) return true;
|
|
3890
|
+
return "Please enter a valid local path or Git URL";
|
|
3891
|
+
}
|
|
3891
3892
|
}, promptConfig);
|
|
3892
3893
|
if (urlResponse.url) {
|
|
3893
|
-
const
|
|
3894
|
-
const
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
const
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
3894
|
+
const inputPath = urlResponse.url.trim();
|
|
3895
|
+
const isLocalPath = inputPath.startsWith("/") || inputPath.startsWith("~") || inputPath.startsWith(".");
|
|
3896
|
+
if (isLocalPath) {
|
|
3897
|
+
const { homedir } = await import("os");
|
|
3898
|
+
const resolvedPath = inputPath.startsWith("~") ? inputPath.replace("~", homedir()) : inputPath.startsWith(".") ? join4(process.cwd(), inputPath) : inputPath;
|
|
3899
|
+
const localSpinner = ora6(`Analyzing local repository at ${resolvedPath}...`).start();
|
|
3900
|
+
const localDetected = await detectProject(resolvedPath);
|
|
3901
|
+
if (localDetected) {
|
|
3902
|
+
detected = localDetected;
|
|
3903
|
+
localSpinner.succeed("Local repository analyzed");
|
|
3904
|
+
const detectedInfo = [
|
|
3905
|
+
chalk7.green("\u2713 Local project detected")
|
|
3906
|
+
];
|
|
3907
|
+
if (detected.name) detectedInfo.push(chalk7.gray(` Name: ${detected.name}`));
|
|
3908
|
+
if (detected.stack.length > 0) detectedInfo.push(chalk7.gray(` Stack: ${detected.stack.join(", ")}`));
|
|
3909
|
+
if (detected.packageManager) detectedInfo.push(chalk7.gray(` Package manager: ${detected.packageManager}`));
|
|
3910
|
+
printBox(detectedInfo, chalk7.gray);
|
|
3911
|
+
console.log();
|
|
3912
|
+
} else {
|
|
3913
|
+
localSpinner.fail("Could not analyze directory (no recognizable project structure)");
|
|
3914
|
+
}
|
|
3907
3915
|
} else {
|
|
3908
|
-
|
|
3916
|
+
const host = inputPath.toLowerCase().includes("github") ? "GitHub API" : inputPath.toLowerCase().includes("gitlab") ? "GitLab API" : "shallow clone";
|
|
3917
|
+
const remoteSpinner = ora6(`Analyzing remote repository via ${host}...`).start();
|
|
3918
|
+
const remoteDetected = await detectFromRemoteUrl(inputPath);
|
|
3919
|
+
if (remoteDetected) {
|
|
3920
|
+
detected = remoteDetected;
|
|
3921
|
+
remoteSpinner.succeed("Remote repository analyzed");
|
|
3922
|
+
const detectedInfo = [
|
|
3923
|
+
chalk7.green("\u2713 Remote project detected")
|
|
3924
|
+
];
|
|
3925
|
+
if (detected.name) detectedInfo.push(chalk7.gray(` Name: ${detected.name}`));
|
|
3926
|
+
if (detected.stack.length > 0) detectedInfo.push(chalk7.gray(` Stack: ${detected.stack.join(", ")}`));
|
|
3927
|
+
if (detected.repoUrl) detectedInfo.push(chalk7.gray(` Source: ${detected.repoUrl}`));
|
|
3928
|
+
printBox(detectedInfo, chalk7.gray);
|
|
3929
|
+
console.log();
|
|
3930
|
+
} else {
|
|
3931
|
+
remoteSpinner.fail("Could not analyze repository (may be private or inaccessible)");
|
|
3932
|
+
}
|
|
3909
3933
|
}
|
|
3910
3934
|
}
|
|
3911
3935
|
}
|
|
3912
|
-
} else if (!detected) {
|
|
3913
|
-
console.log(chalk7.yellow(" \u{1F4A1} Tip: Max/Teams users can analyze remote repository URLs"));
|
|
3914
|
-
console.log();
|
|
3915
3936
|
}
|
|
3916
3937
|
let config2;
|
|
3917
3938
|
if (options.yes) {
|
|
@@ -4793,22 +4814,50 @@ async function runInteractiveWizard(options, detected, userTier) {
|
|
|
4793
4814
|
instructions: false
|
|
4794
4815
|
}, promptConfig);
|
|
4795
4816
|
answers.importantFiles = importantFilesResponse.importantFiles || [];
|
|
4817
|
+
console.log();
|
|
4818
|
+
console.log(chalk7.gray(" \u2500\u2500\u2500 Cloud & AI Options \u2500\u2500\u2500"));
|
|
4819
|
+
console.log();
|
|
4820
|
+
console.log(chalk7.gray(" \u{1F4E4} Save your config to LynxPrompt cloud and add a curl command to auto-update."));
|
|
4821
|
+
console.log(chalk7.gray(" When you run the curl, your local config syncs with cloud changes."));
|
|
4822
|
+
const enableAutoUpdateResponse = await prompts3({
|
|
4823
|
+
type: "toggle",
|
|
4824
|
+
name: "enableAutoUpdate",
|
|
4825
|
+
message: chalk7.white("Save to cloud & enable auto-sync?"),
|
|
4826
|
+
initial: false,
|
|
4827
|
+
active: "Yes",
|
|
4828
|
+
inactive: "No",
|
|
4829
|
+
hint: chalk7.gray("Adds curl command for automatic updates")
|
|
4830
|
+
}, promptConfig);
|
|
4831
|
+
answers.enableAutoUpdate = enableAutoUpdateResponse.enableAutoUpdate || false;
|
|
4832
|
+
if (answers.enableAutoUpdate && !api) {
|
|
4833
|
+
console.log(chalk7.yellow(" \u26A0\uFE0F Cloud sync requires login. Run 'lynxp login' first."));
|
|
4834
|
+
console.log(chalk7.gray(" Continuing without cloud sync..."));
|
|
4835
|
+
answers.enableAutoUpdate = false;
|
|
4836
|
+
}
|
|
4837
|
+
console.log();
|
|
4838
|
+
console.log(chalk7.gray(" \u{1F9E0} Self-improving blueprints track your manual edits and suggest improvements."));
|
|
4839
|
+
console.log(chalk7.gray(" LynxPrompt learns your preferences to generate better configs over time."));
|
|
4796
4840
|
const selfImproveResponse = await prompts3({
|
|
4797
4841
|
type: "toggle",
|
|
4798
4842
|
name: "selfImprove",
|
|
4799
|
-
message: chalk7.white("Enable
|
|
4843
|
+
message: chalk7.white("Enable AI learning from your edits?"),
|
|
4800
4844
|
initial: false,
|
|
4801
4845
|
active: "Yes",
|
|
4802
|
-
inactive: "No"
|
|
4846
|
+
inactive: "No",
|
|
4847
|
+
hint: chalk7.gray("AI learns your style from manual changes")
|
|
4803
4848
|
}, promptConfig);
|
|
4804
4849
|
answers.selfImprove = selfImproveResponse.selfImprove || false;
|
|
4850
|
+
console.log();
|
|
4851
|
+
console.log(chalk7.gray(" \u{1F464} Include your profile info (name, email, persona) in the generated config."));
|
|
4852
|
+
console.log(chalk7.gray(" This helps AI tools personalize responses to your expertise level."));
|
|
4805
4853
|
const includePersonalResponse = await prompts3({
|
|
4806
4854
|
type: "toggle",
|
|
4807
4855
|
name: "includePersonalData",
|
|
4808
|
-
message: chalk7.white("Include
|
|
4856
|
+
message: chalk7.white("Include your profile data in config?"),
|
|
4809
4857
|
initial: false,
|
|
4810
4858
|
active: "Yes",
|
|
4811
|
-
inactive: "No"
|
|
4859
|
+
inactive: "No",
|
|
4860
|
+
hint: chalk7.gray("Name, email, expertise from your profile")
|
|
4812
4861
|
}, promptConfig);
|
|
4813
4862
|
answers.includePersonalData = includePersonalResponse.includePersonalData || false;
|
|
4814
4863
|
if (answers.includePersonalData && api) {
|
|
@@ -4826,20 +4875,6 @@ async function runInteractiveWizard(options, detected, userTier) {
|
|
|
4826
4875
|
console.log(chalk7.yellow(" Could not fetch profile data. Using defaults."));
|
|
4827
4876
|
}
|
|
4828
4877
|
}
|
|
4829
|
-
const enableAutoUpdateResponse = await prompts3({
|
|
4830
|
-
type: "toggle",
|
|
4831
|
-
name: "enableAutoUpdate",
|
|
4832
|
-
message: chalk7.white("Save to cloud & enable auto-update via API?"),
|
|
4833
|
-
initial: false,
|
|
4834
|
-
active: "Yes",
|
|
4835
|
-
inactive: "No"
|
|
4836
|
-
}, promptConfig);
|
|
4837
|
-
answers.enableAutoUpdate = enableAutoUpdateResponse.enableAutoUpdate || false;
|
|
4838
|
-
if (answers.enableAutoUpdate && !api) {
|
|
4839
|
-
console.log(chalk7.yellow(" \u26A0\uFE0F Auto-update requires login. Run 'lynxp login' first."));
|
|
4840
|
-
console.log(chalk7.gray(" Continuing without auto-update..."));
|
|
4841
|
-
answers.enableAutoUpdate = false;
|
|
4842
|
-
}
|
|
4843
4878
|
if (canAccessTier(userTier, "advanced")) {
|
|
4844
4879
|
const boundariesStep = getCurrentStep("boundaries");
|
|
4845
4880
|
showStep(currentStepNum, boundariesStep, userTier);
|