prjct-cli 1.2.0 → 1.2.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/CHANGELOG.md +48 -0
- package/bin/prjct.ts +25 -31
- package/core/cli/start.ts +45 -59
- package/core/index.ts +20 -24
- package/core/infrastructure/setup.ts +29 -32
- package/core/schemas/ideas.ts +1 -1
- package/core/utils/help.ts +42 -45
- package/core/utils/subtask-table.ts +27 -34
- package/core/workflow/workflow-preferences.ts +11 -17
- package/dist/bin/prjct.mjs +317 -353
- package/dist/core/infrastructure/setup.js +29 -30
- package/package.json +1 -1
package/dist/bin/prjct.mjs
CHANGED
|
@@ -2550,6 +2550,7 @@ __export(start_exports, {
|
|
|
2550
2550
|
import fs9 from "node:fs";
|
|
2551
2551
|
import os4 from "node:os";
|
|
2552
2552
|
import path9 from "node:path";
|
|
2553
|
+
import chalk3 from "chalk";
|
|
2553
2554
|
function showBanner() {
|
|
2554
2555
|
console.clear();
|
|
2555
2556
|
console.log(BANNER);
|
|
@@ -2557,15 +2558,15 @@ function showBanner() {
|
|
|
2557
2558
|
}
|
|
2558
2559
|
function showProviderSelection(options, currentIndex) {
|
|
2559
2560
|
console.log(`
|
|
2560
|
-
${
|
|
2561
|
+
${chalk3.bold(" Select AI providers to configure:")}
|
|
2561
2562
|
`);
|
|
2562
|
-
console.log(` ${
|
|
2563
|
+
console.log(` ${chalk3.dim("(Use arrow keys to navigate, space to toggle, enter to confirm)")}
|
|
2563
2564
|
`);
|
|
2564
2565
|
options.forEach((option, index) => {
|
|
2565
|
-
const cursor = index === currentIndex ?
|
|
2566
|
-
const checkbox = option.selected ?
|
|
2567
|
-
const status = option.installed ?
|
|
2568
|
-
const name = index === currentIndex ?
|
|
2566
|
+
const cursor = index === currentIndex ? chalk3.cyan("\u276F") : " ";
|
|
2567
|
+
const checkbox = option.selected ? chalk3.green("[\u2713]") : chalk3.dim("[ ]");
|
|
2568
|
+
const status = option.installed ? chalk3.green("(installed)") : chalk3.yellow("(will install)");
|
|
2569
|
+
const name = index === currentIndex ? chalk3.bold(option.displayName) : option.displayName;
|
|
2569
2570
|
console.log(` ${cursor} ${checkbox} ${name} ${status}`);
|
|
2570
2571
|
});
|
|
2571
2572
|
console.log("");
|
|
@@ -2591,11 +2592,11 @@ async function selectProviders() {
|
|
|
2591
2592
|
}
|
|
2592
2593
|
if (!process.stdin.isTTY) {
|
|
2593
2594
|
console.log(`
|
|
2594
|
-
${
|
|
2595
|
+
${chalk3.bold(" Detected providers:")}
|
|
2595
2596
|
`);
|
|
2596
2597
|
options.forEach((option) => {
|
|
2597
2598
|
if (option.installed) {
|
|
2598
|
-
console.log(` ${
|
|
2599
|
+
console.log(` ${chalk3.green("\u2713")} ${option.displayName}`);
|
|
2599
2600
|
}
|
|
2600
2601
|
});
|
|
2601
2602
|
console.log("");
|
|
@@ -2665,7 +2666,7 @@ async function installRouter(provider) {
|
|
|
2665
2666
|
return false;
|
|
2666
2667
|
} catch (error) {
|
|
2667
2668
|
console.error(
|
|
2668
|
-
` ${
|
|
2669
|
+
` ${chalk3.yellow("\u26A0")} Failed to install ${provider} router: ${error.message}`
|
|
2669
2670
|
);
|
|
2670
2671
|
return false;
|
|
2671
2672
|
}
|
|
@@ -2709,7 +2710,7 @@ ${content}`);
|
|
|
2709
2710
|
return false;
|
|
2710
2711
|
} catch (error) {
|
|
2711
2712
|
console.error(
|
|
2712
|
-
` ${
|
|
2713
|
+
` ${chalk3.yellow("\u26A0")} Failed to install ${provider} config: ${error.message}`
|
|
2713
2714
|
);
|
|
2714
2715
|
return false;
|
|
2715
2716
|
}
|
|
@@ -2731,26 +2732,26 @@ async function saveSetupConfig(providers) {
|
|
|
2731
2732
|
}
|
|
2732
2733
|
function showCompletion(providers) {
|
|
2733
2734
|
console.log(`
|
|
2734
|
-
${
|
|
2735
|
+
${chalk3.green.bold(" \u2713 Setup complete!")}
|
|
2735
2736
|
`);
|
|
2736
|
-
console.log(` ${
|
|
2737
|
+
console.log(` ${chalk3.dim("Configured providers:")}`);
|
|
2737
2738
|
providers.forEach((p) => {
|
|
2738
2739
|
const config = Providers[p];
|
|
2739
|
-
console.log(` ${
|
|
2740
|
+
console.log(` ${chalk3.green("\u2713")} ${config.displayName}`);
|
|
2740
2741
|
});
|
|
2741
2742
|
console.log(`
|
|
2742
|
-
${
|
|
2743
|
+
${chalk3.bold("Next steps:")}
|
|
2743
2744
|
|
|
2744
|
-
${
|
|
2745
|
-
${
|
|
2746
|
-
${
|
|
2745
|
+
${chalk3.cyan("1.")} Navigate to your project directory
|
|
2746
|
+
${chalk3.cyan("2.")} Run ${chalk3.bold("p. init")} to initialize prjct for that project
|
|
2747
|
+
${chalk3.cyan("3.")} Start tracking with ${chalk3.bold('p. task "your task"')}
|
|
2747
2748
|
|
|
2748
|
-
${
|
|
2749
|
-
${
|
|
2750
|
-
${
|
|
2751
|
-
${
|
|
2749
|
+
${chalk3.dim("Tips:")}
|
|
2750
|
+
${chalk3.dim("\u2022")} Use ${chalk3.bold("p. sync")} to analyze your codebase
|
|
2751
|
+
${chalk3.dim("\u2022")} Use ${chalk3.bold("p. done")} to complete tasks
|
|
2752
|
+
${chalk3.dim("\u2022")} Use ${chalk3.bold("p. ship")} to create PRs
|
|
2752
2753
|
|
|
2753
|
-
${
|
|
2754
|
+
${chalk3.dim("Learn more: https://prjct.app/docs")}
|
|
2754
2755
|
`);
|
|
2755
2756
|
}
|
|
2756
2757
|
async function runStart() {
|
|
@@ -2759,8 +2760,8 @@ async function runStart() {
|
|
|
2759
2760
|
if (fs9.existsSync(configPath)) {
|
|
2760
2761
|
const existing = JSON.parse(fs9.readFileSync(configPath, "utf-8"));
|
|
2761
2762
|
if (existing.version === VERSION) {
|
|
2762
|
-
console.log(` ${
|
|
2763
|
-
console.log(` ${
|
|
2763
|
+
console.log(` ${chalk3.yellow("\u2139")} Already configured for v${VERSION}`);
|
|
2764
|
+
console.log(` ${chalk3.dim("Run with --force to reconfigure")}
|
|
2764
2765
|
`);
|
|
2765
2766
|
if (!process.argv.includes("--force")) {
|
|
2766
2767
|
return;
|
|
@@ -2769,57 +2770,50 @@ async function runStart() {
|
|
|
2769
2770
|
}
|
|
2770
2771
|
const selectedProviders = await selectProviders();
|
|
2771
2772
|
console.log(`
|
|
2772
|
-
${
|
|
2773
|
+
${chalk3.cyan("Setting up...")}
|
|
2773
2774
|
`);
|
|
2774
2775
|
for (const provider of selectedProviders) {
|
|
2775
2776
|
const config = Providers[provider];
|
|
2776
|
-
process.stdout.write(` ${
|
|
2777
|
+
process.stdout.write(` ${chalk3.dim("\u2022")} ${config.displayName}... `);
|
|
2777
2778
|
const routerOk = await installRouter(provider);
|
|
2778
2779
|
const configOk = await installGlobalConfig(provider);
|
|
2779
2780
|
if (routerOk && configOk) {
|
|
2780
|
-
console.log(
|
|
2781
|
+
console.log(chalk3.green("\u2713"));
|
|
2781
2782
|
} else if (routerOk || configOk) {
|
|
2782
|
-
console.log(
|
|
2783
|
+
console.log(chalk3.yellow("partial"));
|
|
2783
2784
|
} else {
|
|
2784
|
-
console.log(
|
|
2785
|
+
console.log(chalk3.yellow("skipped"));
|
|
2785
2786
|
}
|
|
2786
2787
|
}
|
|
2787
2788
|
await saveSetupConfig(selectedProviders);
|
|
2788
2789
|
showCompletion(selectedProviders);
|
|
2789
2790
|
}
|
|
2790
|
-
var
|
|
2791
|
+
var G1, G2, G3, G4, G5, BANNER, WELCOME_BOX, start_default;
|
|
2791
2792
|
var init_start = __esm({
|
|
2792
2793
|
"core/cli/start.ts"() {
|
|
2793
2794
|
"use strict";
|
|
2794
2795
|
init_ai_provider();
|
|
2795
2796
|
init_version();
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
CYAN = "\x1B[36m";
|
|
2802
|
-
WHITE = "\x1B[37m";
|
|
2803
|
-
G1 = "\x1B[38;2;0;255;255m";
|
|
2804
|
-
G2 = "\x1B[38;2;80;180;255m";
|
|
2805
|
-
G3 = "\x1B[38;2;140;120;255m";
|
|
2806
|
-
G4 = "\x1B[38;2;200;80;220m";
|
|
2807
|
-
G5 = "\x1B[38;2;255;80;180m";
|
|
2797
|
+
G1 = chalk3.rgb(0, 255, 255);
|
|
2798
|
+
G2 = chalk3.rgb(80, 180, 255);
|
|
2799
|
+
G3 = chalk3.rgb(140, 120, 255);
|
|
2800
|
+
G4 = chalk3.rgb(200, 80, 220);
|
|
2801
|
+
G5 = chalk3.rgb(255, 80, 180);
|
|
2808
2802
|
BANNER = `
|
|
2809
2803
|
|
|
2810
|
-
${G1
|
|
2811
|
-
${G1
|
|
2812
|
-
${G1
|
|
2813
|
-
${G1
|
|
2814
|
-
${G1
|
|
2815
|
-
${G1
|
|
2804
|
+
${G1(" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 ")}${G2(" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 ")}${G3(" \u2588\u2588\u2557")}${G4(" \u2588\u2588\u2588\u2588\u2588\u2588\u2557")}${G5("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557")}
|
|
2805
|
+
${G1(" \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557")}${G2(" \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557")}${G3(" \u2588\u2588\u2551")}${G4("\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D")}${G5("\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D")}
|
|
2806
|
+
${G1(" \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D")}${G2(" \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D")}${G3(" \u2588\u2588\u2551")}${G4("\u2588\u2588\u2551 ")}${G5(" \u2588\u2588\u2551 ")}
|
|
2807
|
+
${G1(" \u2588\u2588\u2554\u2550\u2550\u2550\u255D ")}${G2(" \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557")}${G3("\u2588\u2588 \u2588\u2588\u2551")}${G4("\u2588\u2588\u2551 ")}${G5(" \u2588\u2588\u2551 ")}
|
|
2808
|
+
${G1(" \u2588\u2588\u2551 ")}${G2(" \u2588\u2588\u2551 \u2588\u2588\u2551")}${G3("\u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D")}${G4("\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557")}${G5(" \u2588\u2588\u2551 ")}
|
|
2809
|
+
${G1(" \u255A\u2550\u255D ")}${G2(" \u255A\u2550\u255D \u255A\u2550\u255D")}${G3(" \u255A\u2550\u2550\u2550\u2550\u255D ")}${G4(" \u255A\u2550\u2550\u2550\u2550\u2550\u255D")}${G5(" \u255A\u2550\u255D ")}
|
|
2816
2810
|
|
|
2817
2811
|
`;
|
|
2818
|
-
WELCOME_BOX = ` ${
|
|
2812
|
+
WELCOME_BOX = ` ${chalk3.white("Context Layer for AI Agents")} ${chalk3.dim(`v${VERSION}`)}
|
|
2819
2813
|
|
|
2820
|
-
${
|
|
2821
|
-
Works with Claude Code, Gemini CLI, and more
|
|
2822
|
-
${
|
|
2814
|
+
${chalk3.dim(`Project context layer for AI coding agents.
|
|
2815
|
+
Works with Claude Code, Gemini CLI, and more.`)}
|
|
2816
|
+
${chalk3.cyan("https://prjct.app")}
|
|
2823
2817
|
`;
|
|
2824
2818
|
__name(showBanner, "showBanner");
|
|
2825
2819
|
__name(showProviderSelection, "showProviderSelection");
|
|
@@ -5449,7 +5443,7 @@ __export(hooks_service_exports, {
|
|
|
5449
5443
|
});
|
|
5450
5444
|
import fs15 from "node:fs";
|
|
5451
5445
|
import path15 from "node:path";
|
|
5452
|
-
import
|
|
5446
|
+
import chalk4 from "chalk";
|
|
5453
5447
|
function getPostCommitScript() {
|
|
5454
5448
|
return `#!/bin/sh
|
|
5455
5449
|
# prjct auto-sync hook (post-commit)
|
|
@@ -5788,19 +5782,19 @@ var init_hooks_service = __esm({
|
|
|
5788
5782
|
output_default.section("Git Hooks Installation");
|
|
5789
5783
|
const detected = detectHookManagers(projectPath);
|
|
5790
5784
|
const strategy = selectStrategy(detected);
|
|
5791
|
-
console.log(` Strategy: ${
|
|
5792
|
-
console.log(` Hooks: ${
|
|
5785
|
+
console.log(` Strategy: ${chalk4.cyan(strategy)}`);
|
|
5786
|
+
console.log(` Hooks: ${chalk4.dim("post-commit, post-checkout")}`);
|
|
5793
5787
|
console.log("");
|
|
5794
5788
|
const result = await this.install(projectPath, { strategy });
|
|
5795
5789
|
if (result.success) {
|
|
5796
5790
|
output_default.done(`Hooks installed via ${result.strategy}`);
|
|
5797
5791
|
console.log("");
|
|
5798
5792
|
for (const hook of result.hooksInstalled) {
|
|
5799
|
-
console.log(` ${
|
|
5793
|
+
console.log(` ${chalk4.green("\u2713")} ${hook}`);
|
|
5800
5794
|
}
|
|
5801
5795
|
console.log("");
|
|
5802
|
-
console.log(
|
|
5803
|
-
console.log(
|
|
5796
|
+
console.log(chalk4.dim(" Context will auto-sync on commit and branch switch."));
|
|
5797
|
+
console.log(chalk4.dim(" Remove with: prjct hooks uninstall"));
|
|
5804
5798
|
} else {
|
|
5805
5799
|
output_default.fail(result.error || "Failed to install hooks");
|
|
5806
5800
|
}
|
|
@@ -5826,24 +5820,24 @@ var init_hooks_service = __esm({
|
|
|
5826
5820
|
output_default.section("Git Hooks Status");
|
|
5827
5821
|
const status = await this.status(projectPath);
|
|
5828
5822
|
if (status.installed) {
|
|
5829
|
-
console.log(` Status: ${
|
|
5830
|
-
console.log(` Strategy: ${
|
|
5823
|
+
console.log(` Status: ${chalk4.green("Active")}`);
|
|
5824
|
+
console.log(` Strategy: ${chalk4.cyan(status.strategy)}`);
|
|
5831
5825
|
} else {
|
|
5832
|
-
console.log(` Status: ${
|
|
5826
|
+
console.log(` Status: ${chalk4.dim("Not installed")}`);
|
|
5833
5827
|
}
|
|
5834
5828
|
console.log("");
|
|
5835
5829
|
for (const hook of status.hooks) {
|
|
5836
|
-
const icon = hook.installed ?
|
|
5837
|
-
const label = hook.installed ? hook.name :
|
|
5830
|
+
const icon = hook.installed ? chalk4.green("\u2713") : chalk4.dim("\u25CB");
|
|
5831
|
+
const label = hook.installed ? hook.name : chalk4.dim(hook.name);
|
|
5838
5832
|
console.log(` ${icon} ${label}`);
|
|
5839
5833
|
}
|
|
5840
5834
|
if (status.detectedManagers.length > 0) {
|
|
5841
5835
|
console.log("");
|
|
5842
|
-
console.log(` ${
|
|
5836
|
+
console.log(` ${chalk4.dim("Available managers:")} ${status.detectedManagers.join(", ")}`);
|
|
5843
5837
|
}
|
|
5844
5838
|
if (!status.installed) {
|
|
5845
5839
|
console.log("");
|
|
5846
|
-
console.log(
|
|
5840
|
+
console.log(chalk4.dim(" Install with: prjct hooks install"));
|
|
5847
5841
|
}
|
|
5848
5842
|
console.log("");
|
|
5849
5843
|
output_default.end();
|
|
@@ -5929,7 +5923,7 @@ __export(doctor_service_exports, {
|
|
|
5929
5923
|
import { execSync as execSync2 } from "node:child_process";
|
|
5930
5924
|
import fs16 from "node:fs/promises";
|
|
5931
5925
|
import path16 from "node:path";
|
|
5932
|
-
import
|
|
5926
|
+
import chalk5 from "chalk";
|
|
5933
5927
|
var DoctorService, doctorService;
|
|
5934
5928
|
var init_doctor_service = __esm({
|
|
5935
5929
|
"core/services/doctor-service.ts"() {
|
|
@@ -6199,8 +6193,8 @@ var init_doctor_service = __esm({
|
|
|
6199
6193
|
const icon = this.getStatusIcon(check.status, check.optional);
|
|
6200
6194
|
const name = check.name.padEnd(14);
|
|
6201
6195
|
const detail = check.version || check.message || "";
|
|
6202
|
-
const optionalTag = check.optional && check.status === "error" ?
|
|
6203
|
-
return `${icon} ${name} ${
|
|
6196
|
+
const optionalTag = check.optional && check.status === "error" ? chalk5.dim(" (optional)") : "";
|
|
6197
|
+
return `${icon} ${name} ${chalk5.dim(detail)}${optionalTag}`;
|
|
6204
6198
|
});
|
|
6205
6199
|
for (const item of items) {
|
|
6206
6200
|
console.log(` ${item}`);
|
|
@@ -6208,11 +6202,11 @@ var init_doctor_service = __esm({
|
|
|
6208
6202
|
}
|
|
6209
6203
|
printRecommendations(recommendations) {
|
|
6210
6204
|
output_default.section("Recommendations");
|
|
6211
|
-
output_default.list(recommendations, { bullet:
|
|
6205
|
+
output_default.list(recommendations, { bullet: chalk5.yellow("\u2022") });
|
|
6212
6206
|
}
|
|
6213
6207
|
printSummary(result) {
|
|
6214
6208
|
console.log("");
|
|
6215
|
-
console.log(
|
|
6209
|
+
console.log(chalk5.dim("\u2500".repeat(40)));
|
|
6216
6210
|
if (result.hasErrors) {
|
|
6217
6211
|
output_default.fail("Some required checks failed");
|
|
6218
6212
|
} else if (result.hasWarnings) {
|
|
@@ -6225,11 +6219,11 @@ var init_doctor_service = __esm({
|
|
|
6225
6219
|
getStatusIcon(status, optional) {
|
|
6226
6220
|
switch (status) {
|
|
6227
6221
|
case "ok":
|
|
6228
|
-
return
|
|
6222
|
+
return chalk5.green("\u2713");
|
|
6229
6223
|
case "warn":
|
|
6230
|
-
return
|
|
6224
|
+
return chalk5.yellow("\u26A0");
|
|
6231
6225
|
case "error":
|
|
6232
|
-
return optional ?
|
|
6226
|
+
return optional ? chalk5.dim("\u25CB") : chalk5.red("\u2717");
|
|
6233
6227
|
}
|
|
6234
6228
|
}
|
|
6235
6229
|
};
|
|
@@ -6775,7 +6769,7 @@ var init_command_installer = __esm({
|
|
|
6775
6769
|
});
|
|
6776
6770
|
|
|
6777
6771
|
// core/utils/agent-stream.ts
|
|
6778
|
-
import
|
|
6772
|
+
import chalk6 from "chalk";
|
|
6779
6773
|
function getIcon(domain) {
|
|
6780
6774
|
return DOMAIN_ICONS[domain.toLowerCase()] || DOMAIN_ICONS.default;
|
|
6781
6775
|
}
|
|
@@ -6814,7 +6808,7 @@ var init_agent_stream = __esm({
|
|
|
6814
6808
|
*/
|
|
6815
6809
|
orchestrate(domains) {
|
|
6816
6810
|
if (this.quiet) return;
|
|
6817
|
-
console.log(
|
|
6811
|
+
console.log(chalk6.cyan(`
|
|
6818
6812
|
\u{1F3AF} Orchestrating: ${domains.join(", ")} domains detected
|
|
6819
6813
|
`));
|
|
6820
6814
|
}
|
|
@@ -6826,9 +6820,9 @@ var init_agent_stream = __esm({
|
|
|
6826
6820
|
this.currentAgent = name;
|
|
6827
6821
|
this.startTime = Date.now();
|
|
6828
6822
|
const icon = getIcon(domain);
|
|
6829
|
-
console.log(
|
|
6823
|
+
console.log(chalk6.cyan(`\u250C\u2500 ${icon} ${name} (${domain})`));
|
|
6830
6824
|
if (description) {
|
|
6831
|
-
console.log(
|
|
6825
|
+
console.log(chalk6.dim(`\u2502 ${description}`));
|
|
6832
6826
|
}
|
|
6833
6827
|
}
|
|
6834
6828
|
/**
|
|
@@ -6836,7 +6830,7 @@ var init_agent_stream = __esm({
|
|
|
6836
6830
|
*/
|
|
6837
6831
|
progress(message) {
|
|
6838
6832
|
if (this.quiet || !this.currentAgent) return;
|
|
6839
|
-
console.log(
|
|
6833
|
+
console.log(chalk6.dim(`\u2502 \u2514\u2500\u2500 ${message}`));
|
|
6840
6834
|
}
|
|
6841
6835
|
/**
|
|
6842
6836
|
* Show multiple progress items
|
|
@@ -6844,7 +6838,7 @@ var init_agent_stream = __esm({
|
|
|
6844
6838
|
progressList(items) {
|
|
6845
6839
|
if (this.quiet || !this.currentAgent) return;
|
|
6846
6840
|
for (const item of items) {
|
|
6847
|
-
console.log(
|
|
6841
|
+
console.log(chalk6.dim(`\u2502 \u2514\u2500\u2500 ${item}`));
|
|
6848
6842
|
}
|
|
6849
6843
|
}
|
|
6850
6844
|
/**
|
|
@@ -6854,9 +6848,9 @@ var init_agent_stream = __esm({
|
|
|
6854
6848
|
if (this.quiet || !this.currentAgent) return;
|
|
6855
6849
|
const duration = Date.now() - this.startTime;
|
|
6856
6850
|
const durationStr = this.formatDuration(duration);
|
|
6857
|
-
const icon = success ?
|
|
6851
|
+
const icon = success ? chalk6.green("\u2713") : chalk6.red("\u2717");
|
|
6858
6852
|
const status = success ? "Complete" : "Failed";
|
|
6859
|
-
console.log(`\u2514\u2500 ${icon} ${status} ${
|
|
6853
|
+
console.log(`\u2514\u2500 ${icon} ${status} ${chalk6.dim(`(${durationStr})`)}
|
|
6860
6854
|
`);
|
|
6861
6855
|
this.currentAgent = null;
|
|
6862
6856
|
}
|
|
@@ -6872,8 +6866,8 @@ var init_agent_stream = __esm({
|
|
|
6872
6866
|
*/
|
|
6873
6867
|
complete(taskName, totalDuration) {
|
|
6874
6868
|
if (this.quiet) return;
|
|
6875
|
-
const durationStr = totalDuration ? ` ${
|
|
6876
|
-
console.log(
|
|
6869
|
+
const durationStr = totalDuration ? ` ${chalk6.dim(`[${this.formatDuration(totalDuration)}]`)}` : "";
|
|
6870
|
+
console.log(chalk6.green(`\u2705 ${taskName}${durationStr}`));
|
|
6877
6871
|
}
|
|
6878
6872
|
/**
|
|
6879
6873
|
* Format duration in human-readable form
|
|
@@ -6889,6 +6883,7 @@ var init_agent_stream = __esm({
|
|
|
6889
6883
|
});
|
|
6890
6884
|
|
|
6891
6885
|
// core/utils/subtask-table.ts
|
|
6886
|
+
import chalk7 from "chalk";
|
|
6892
6887
|
function getDomainColor(domain) {
|
|
6893
6888
|
let hash = 0;
|
|
6894
6889
|
for (const char of domain) {
|
|
@@ -6899,29 +6894,29 @@ function getDomainColor(domain) {
|
|
|
6899
6894
|
return DOMAIN_COLOR_PALETTE[index];
|
|
6900
6895
|
}
|
|
6901
6896
|
function formatSubtaskLine(index, subtask, spinnerFrame = "\u25B6") {
|
|
6902
|
-
const num =
|
|
6903
|
-
const
|
|
6904
|
-
const domain =
|
|
6897
|
+
const num = chalk7.dim(String(index + 1).padStart(2));
|
|
6898
|
+
const domainColorFn = getDomainColor(subtask.domain);
|
|
6899
|
+
const domain = domainColorFn(subtask.domain.padEnd(10));
|
|
6905
6900
|
const desc = subtask.description.length > 32 ? `${subtask.description.slice(0, 29)}...` : subtask.description.padEnd(32);
|
|
6906
6901
|
let status;
|
|
6907
6902
|
switch (subtask.status) {
|
|
6908
6903
|
case "completed":
|
|
6909
|
-
status =
|
|
6904
|
+
status = chalk7.green("\u2713 Complete");
|
|
6910
6905
|
break;
|
|
6911
6906
|
case "in_progress":
|
|
6912
|
-
status = `${
|
|
6907
|
+
status = chalk7.yellow(`${spinnerFrame} Working...`);
|
|
6913
6908
|
break;
|
|
6914
6909
|
case "pending":
|
|
6915
|
-
status =
|
|
6910
|
+
status = chalk7.gray("\u25CB Pending");
|
|
6916
6911
|
break;
|
|
6917
6912
|
case "failed":
|
|
6918
|
-
status =
|
|
6913
|
+
status = chalk7.red("\u2717 Failed");
|
|
6919
6914
|
break;
|
|
6920
6915
|
case "blocked":
|
|
6921
|
-
status =
|
|
6916
|
+
status = chalk7.gray("\u2298 Blocked");
|
|
6922
6917
|
break;
|
|
6923
6918
|
default:
|
|
6924
|
-
status =
|
|
6919
|
+
status = chalk7.gray(`\u25CB ${subtask.status}`);
|
|
6925
6920
|
}
|
|
6926
6921
|
return ` ${num} ${domain} ${desc} ${status}`;
|
|
6927
6922
|
}
|
|
@@ -6929,8 +6924,8 @@ function renderSubtaskProgress(subtasks) {
|
|
|
6929
6924
|
if (subtasks.length === 0) return "";
|
|
6930
6925
|
const lines = [];
|
|
6931
6926
|
lines.push("");
|
|
6932
|
-
lines.push(` ${
|
|
6933
|
-
lines.push(` ${
|
|
6927
|
+
lines.push(` ${chalk7.bold.white("SUBTASK PROGRESS")}`);
|
|
6928
|
+
lines.push(` ${chalk7.dim("\u2500".repeat(58))}`);
|
|
6934
6929
|
for (let i = 0; i < subtasks.length; i++) {
|
|
6935
6930
|
lines.push(formatSubtaskLine(i, subtasks[i]));
|
|
6936
6931
|
}
|
|
@@ -6940,34 +6935,19 @@ function renderSubtaskProgress(subtasks) {
|
|
|
6940
6935
|
function printSubtaskProgress(subtasks) {
|
|
6941
6936
|
console.log(renderSubtaskProgress(subtasks));
|
|
6942
6937
|
}
|
|
6943
|
-
var
|
|
6938
|
+
var DOMAIN_COLOR_PALETTE;
|
|
6944
6939
|
var init_subtask_table = __esm({
|
|
6945
6940
|
"core/utils/subtask-table.ts"() {
|
|
6946
6941
|
"use strict";
|
|
6947
|
-
RESET2 = "\x1B[0m";
|
|
6948
|
-
BOLD2 = "\x1B[1m";
|
|
6949
|
-
DIM2 = "\x1B[2m";
|
|
6950
|
-
GREEN2 = "\x1B[32m";
|
|
6951
|
-
YELLOW2 = "\x1B[33m";
|
|
6952
|
-
WHITE2 = "\x1B[37m";
|
|
6953
|
-
GRAY = "\x1B[90m";
|
|
6954
6942
|
DOMAIN_COLOR_PALETTE = [
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
|
|
6959
|
-
|
|
6960
|
-
|
|
6961
|
-
|
|
6962
|
-
|
|
6963
|
-
"\x1B[32m",
|
|
6964
|
-
// Green
|
|
6965
|
-
"\x1B[91m",
|
|
6966
|
-
// Light Red
|
|
6967
|
-
"\x1B[95m",
|
|
6968
|
-
// Light Magenta
|
|
6969
|
-
"\x1B[96m"
|
|
6970
|
-
// Light Cyan
|
|
6943
|
+
chalk7.cyan,
|
|
6944
|
+
chalk7.magenta,
|
|
6945
|
+
chalk7.yellow,
|
|
6946
|
+
chalk7.blue,
|
|
6947
|
+
chalk7.green,
|
|
6948
|
+
chalk7.redBright,
|
|
6949
|
+
chalk7.magentaBright,
|
|
6950
|
+
chalk7.cyanBright
|
|
6971
6951
|
];
|
|
6972
6952
|
__name(getDomainColor, "getDomainColor");
|
|
6973
6953
|
__name(formatSubtaskLine, "formatSubtaskLine");
|
|
@@ -8270,7 +8250,7 @@ var init_ideas = __esm({
|
|
|
8270
8250
|
name: z3.string(),
|
|
8271
8251
|
// "Multi-tenant"
|
|
8272
8252
|
description: z3.string()
|
|
8273
|
-
// "
|
|
8253
|
+
// "Strict RLS for organizations"
|
|
8274
8254
|
});
|
|
8275
8255
|
IdeaRoleSchema = z3.object({
|
|
8276
8256
|
name: z3.string(),
|
|
@@ -14601,7 +14581,7 @@ import fs30 from "node:fs";
|
|
|
14601
14581
|
import https from "node:https";
|
|
14602
14582
|
import os10 from "node:os";
|
|
14603
14583
|
import path29 from "node:path";
|
|
14604
|
-
import
|
|
14584
|
+
import chalk8 from "chalk";
|
|
14605
14585
|
var UpdateChecker, update_checker_default;
|
|
14606
14586
|
var init_update_checker = __esm({
|
|
14607
14587
|
"core/infrastructure/update-checker.ts"() {
|
|
@@ -14764,7 +14744,7 @@ var init_update_checker = __esm({
|
|
|
14764
14744
|
if (!result || !result.updateAvailable) {
|
|
14765
14745
|
return null;
|
|
14766
14746
|
}
|
|
14767
|
-
return "\n" +
|
|
14747
|
+
return "\n" + chalk8.yellow("\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510") + "\n" + chalk8.yellow("\u2502") + " " + chalk8.bold("Update available!") + " " + chalk8.dim(`${result.currentVersion} \u2192 ${result.latestVersion}`) + " " + chalk8.yellow("\u2502") + "\n" + chalk8.yellow("\u2502") + " " + chalk8.yellow("\u2502") + "\n" + chalk8.yellow("\u2502") + " Run: " + chalk8.cyan("npm update -g prjct-cli") + " " + chalk8.yellow("\u2502") + "\n" + chalk8.yellow("\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518") + "\n";
|
|
14768
14748
|
}
|
|
14769
14749
|
};
|
|
14770
14750
|
update_checker_default = UpdateChecker;
|
|
@@ -17199,7 +17179,7 @@ var init_state_machine = __esm({
|
|
|
17199
17179
|
});
|
|
17200
17180
|
|
|
17201
17181
|
// core/utils/next-steps.ts
|
|
17202
|
-
import
|
|
17182
|
+
import chalk9 from "chalk";
|
|
17203
17183
|
function showNextSteps(command, options = {}) {
|
|
17204
17184
|
if (options.quiet) return;
|
|
17205
17185
|
const resultingState = COMMAND_TO_STATE[command] || "idle";
|
|
@@ -17209,15 +17189,15 @@ function showNextSteps(command, options = {}) {
|
|
|
17209
17189
|
cmd: `p. ${cmd}`,
|
|
17210
17190
|
desc: CMD_DESCRIPTIONS[cmd] || cmd
|
|
17211
17191
|
}));
|
|
17212
|
-
console.log(
|
|
17192
|
+
console.log(chalk9.dim("\nNext:"));
|
|
17213
17193
|
for (const step of steps) {
|
|
17214
|
-
const cmd =
|
|
17215
|
-
console.log(
|
|
17194
|
+
const cmd = chalk9.cyan(step.cmd.padEnd(12));
|
|
17195
|
+
console.log(chalk9.dim(` ${cmd} \u2192 ${step.desc}`));
|
|
17216
17196
|
}
|
|
17217
17197
|
}
|
|
17218
17198
|
function showStateInfo(state) {
|
|
17219
17199
|
const info = workflowStateMachine.getStateInfo(state);
|
|
17220
|
-
console.log(
|
|
17200
|
+
console.log(chalk9.dim(`\u{1F4CD} State: ${chalk9.white(state.toUpperCase())} - ${info.description}`));
|
|
17221
17201
|
}
|
|
17222
17202
|
var CMD_DESCRIPTIONS, COMMAND_TO_STATE;
|
|
17223
17203
|
var init_next_steps = __esm({
|
|
@@ -17255,7 +17235,7 @@ var init_next_steps = __esm({
|
|
|
17255
17235
|
});
|
|
17256
17236
|
|
|
17257
17237
|
// core/wizard/onboarding.ts
|
|
17258
|
-
import
|
|
17238
|
+
import chalk10 from "chalk";
|
|
17259
17239
|
import prompts from "prompts";
|
|
17260
17240
|
var PROJECT_TYPES, AI_AGENTS, OnboardingWizard;
|
|
17261
17241
|
var init_onboarding = __esm({
|
|
@@ -17410,7 +17390,7 @@ var init_onboarding = __esm({
|
|
|
17410
17390
|
async stepStack() {
|
|
17411
17391
|
this.detectedStack = await this.detectStack();
|
|
17412
17392
|
const stackDisplay = this.formatStackDisplay(this.detectedStack);
|
|
17413
|
-
console.log(
|
|
17393
|
+
console.log(chalk10.dim(`
|
|
17414
17394
|
Detected: ${stackDisplay}
|
|
17415
17395
|
`));
|
|
17416
17396
|
const response = await prompts(
|
|
@@ -17492,15 +17472,15 @@ var init_onboarding = __esm({
|
|
|
17492
17472
|
*/
|
|
17493
17473
|
async stepSummary() {
|
|
17494
17474
|
console.log("");
|
|
17495
|
-
console.log(
|
|
17496
|
-
console.log(
|
|
17497
|
-
console.log(` ${
|
|
17475
|
+
console.log(chalk10.bold(" Configuration Summary"));
|
|
17476
|
+
console.log(chalk10.dim(` ${"\u2500".repeat(40)}`));
|
|
17477
|
+
console.log(` ${chalk10.cyan("Project Type:")} ${this.getProjectTypeLabel(this.confirmedType)}`);
|
|
17498
17478
|
console.log(
|
|
17499
|
-
` ${
|
|
17479
|
+
` ${chalk10.cyan("AI Agents:")} ${this.selectedAgents.map((a) => this.getAgentLabel(a)).join(", ")}`
|
|
17500
17480
|
);
|
|
17501
|
-
console.log(` ${
|
|
17502
|
-
console.log(` ${
|
|
17503
|
-
console.log(` ${
|
|
17481
|
+
console.log(` ${chalk10.cyan("Stack:")} ${this.formatStackDisplay(this.confirmedStack)}`);
|
|
17482
|
+
console.log(` ${chalk10.cyan("Verbosity:")} ${this.preferences.verbosity}`);
|
|
17483
|
+
console.log(` ${chalk10.cyan("Auto-sync:")} ${this.preferences.autoSync ? "Yes" : "No"}`);
|
|
17504
17484
|
console.log("");
|
|
17505
17485
|
const response = await prompts(
|
|
17506
17486
|
{
|
|
@@ -17657,18 +17637,18 @@ var init_onboarding = __esm({
|
|
|
17657
17637
|
// ==========================================================================
|
|
17658
17638
|
printWelcome() {
|
|
17659
17639
|
console.log("");
|
|
17660
|
-
console.log(
|
|
17661
|
-
console.log(
|
|
17640
|
+
console.log(chalk10.bold.cyan(" Welcome to prjct-cli!"));
|
|
17641
|
+
console.log(chalk10.dim(" Let's set up your project in 60 seconds."));
|
|
17662
17642
|
console.log("");
|
|
17663
17643
|
}
|
|
17664
17644
|
printStepHeader(title) {
|
|
17665
17645
|
console.log("");
|
|
17666
|
-
console.log(
|
|
17646
|
+
console.log(chalk10.dim(` Step ${this.currentStep}/${this.totalSteps}: ${title}`));
|
|
17667
17647
|
console.log("");
|
|
17668
17648
|
}
|
|
17669
17649
|
handleCancel() {
|
|
17670
17650
|
this.aborted = true;
|
|
17671
|
-
console.log(
|
|
17651
|
+
console.log(chalk10.yellow("\n Setup cancelled. Run again anytime.\n"));
|
|
17672
17652
|
}
|
|
17673
17653
|
getProjectTypeLabel(type) {
|
|
17674
17654
|
return PROJECT_TYPES.find((pt) => pt.value === type)?.title || "Unknown";
|
|
@@ -18279,7 +18259,7 @@ var init_analyzer2 = __esm({
|
|
|
18279
18259
|
});
|
|
18280
18260
|
|
|
18281
18261
|
// core/services/diff-generator.ts
|
|
18282
|
-
import
|
|
18262
|
+
import chalk11 from "chalk";
|
|
18283
18263
|
function estimateTokens(content) {
|
|
18284
18264
|
return Math.ceil(content.length / CHARS_PER_TOKEN2);
|
|
18285
18265
|
}
|
|
@@ -18380,11 +18360,11 @@ function generateSyncDiff(oldContent, newContent) {
|
|
|
18380
18360
|
function formatDiffPreview(diff, options = {}) {
|
|
18381
18361
|
const { colorize = true } = options;
|
|
18382
18362
|
const lines = [];
|
|
18383
|
-
const green = colorize ?
|
|
18384
|
-
const red = colorize ?
|
|
18385
|
-
const yellow = colorize ?
|
|
18386
|
-
const dim = colorize ?
|
|
18387
|
-
const bold = colorize ?
|
|
18363
|
+
const green = colorize ? chalk11.green : (s) => s;
|
|
18364
|
+
const red = colorize ? chalk11.red : (s) => s;
|
|
18365
|
+
const yellow = colorize ? chalk11.yellow : (s) => s;
|
|
18366
|
+
const dim = colorize ? chalk11.dim : (s) => s;
|
|
18367
|
+
const bold = colorize ? chalk11.bold : (s) => s;
|
|
18388
18368
|
if (!diff.hasChanges) {
|
|
18389
18369
|
lines.push(dim("No changes detected (context is up to date)"));
|
|
18390
18370
|
return lines.join("\n");
|
|
@@ -18432,10 +18412,10 @@ function formatDiffPreview(diff, options = {}) {
|
|
|
18432
18412
|
function formatFullDiff(diff, options = {}) {
|
|
18433
18413
|
const { colorize = true } = options;
|
|
18434
18414
|
const lines = [];
|
|
18435
|
-
const green = colorize ?
|
|
18436
|
-
const red = colorize ?
|
|
18437
|
-
const cyan = colorize ?
|
|
18438
|
-
const dim = colorize ?
|
|
18415
|
+
const green = colorize ? chalk11.green : (s) => s;
|
|
18416
|
+
const red = colorize ? chalk11.red : (s) => s;
|
|
18417
|
+
const cyan = colorize ? chalk11.cyan : (s) => s;
|
|
18418
|
+
const dim = colorize ? chalk11.dim : (s) => s;
|
|
18439
18419
|
for (const section of diff.added) {
|
|
18440
18420
|
lines.push(cyan(`@@ +${section.name} @@`));
|
|
18441
18421
|
if (section.after) {
|
|
@@ -22011,7 +21991,7 @@ import fs44 from "node:fs/promises";
|
|
|
22011
21991
|
import os12 from "node:os";
|
|
22012
21992
|
import path46 from "node:path";
|
|
22013
21993
|
import readline2 from "node:readline";
|
|
22014
|
-
import
|
|
21994
|
+
import chalk12 from "chalk";
|
|
22015
21995
|
async function getDirectorySize(dirPath) {
|
|
22016
21996
|
let totalSize = 0;
|
|
22017
21997
|
try {
|
|
@@ -22266,7 +22246,7 @@ async function uninstall(options = {}, _projectPath = process.cwd()) {
|
|
|
22266
22246
|
const installation = detectInstallation();
|
|
22267
22247
|
const existingItems = items.filter((i) => i.exists);
|
|
22268
22248
|
if (existingItems.length === 0 && !installation.homebrew && !installation.npm) {
|
|
22269
|
-
console.log(
|
|
22249
|
+
console.log(chalk12.yellow("\nNo prjct installation found."));
|
|
22270
22250
|
return {
|
|
22271
22251
|
success: true,
|
|
22272
22252
|
message: "Nothing to uninstall"
|
|
@@ -22274,36 +22254,36 @@ async function uninstall(options = {}, _projectPath = process.cwd()) {
|
|
|
22274
22254
|
}
|
|
22275
22255
|
const totalSize = existingItems.reduce((sum, item) => sum + (item.size || 0), 0);
|
|
22276
22256
|
console.log("");
|
|
22277
|
-
console.log(
|
|
22257
|
+
console.log(chalk12.red.bold(" WARNING: This action is DANGEROUS and IRREVERSIBLE"));
|
|
22278
22258
|
console.log("");
|
|
22279
|
-
console.log(
|
|
22259
|
+
console.log(chalk12.white("The following will be permanently deleted:"));
|
|
22280
22260
|
console.log("");
|
|
22281
22261
|
for (const item of existingItems) {
|
|
22282
22262
|
const displayPath = path_manager_default.getDisplayPath(item.path);
|
|
22283
22263
|
let info = "";
|
|
22284
22264
|
if (item.type === "section") {
|
|
22285
|
-
info =
|
|
22265
|
+
info = chalk12.dim("(section only)");
|
|
22286
22266
|
} else if (item.size) {
|
|
22287
|
-
info =
|
|
22267
|
+
info = chalk12.dim(`(${formatSize(item.size)})`);
|
|
22288
22268
|
}
|
|
22289
|
-
console.log(` ${
|
|
22290
|
-
console.log(` ${
|
|
22269
|
+
console.log(` ${chalk12.cyan(displayPath.padEnd(35))} ${info}`);
|
|
22270
|
+
console.log(` ${chalk12.dim(item.description)}`);
|
|
22291
22271
|
console.log("");
|
|
22292
22272
|
}
|
|
22293
22273
|
if (installation.homebrew) {
|
|
22294
|
-
console.log(` ${
|
|
22274
|
+
console.log(` ${chalk12.cyan("Homebrew".padEnd(35))} ${chalk12.dim("prjct-cli formula")}`);
|
|
22295
22275
|
console.log("");
|
|
22296
22276
|
}
|
|
22297
22277
|
if (installation.npm) {
|
|
22298
|
-
console.log(` ${
|
|
22278
|
+
console.log(` ${chalk12.cyan("npm global".padEnd(35))} ${chalk12.dim("prjct-cli package")}`);
|
|
22299
22279
|
console.log("");
|
|
22300
22280
|
}
|
|
22301
22281
|
if (totalSize > 0) {
|
|
22302
|
-
console.log(
|
|
22282
|
+
console.log(chalk12.dim(` Total size: ${formatSize(totalSize)}`));
|
|
22303
22283
|
console.log("");
|
|
22304
22284
|
}
|
|
22305
22285
|
if (options.dryRun) {
|
|
22306
|
-
console.log(
|
|
22286
|
+
console.log(chalk12.yellow("Dry run - no changes made"));
|
|
22307
22287
|
return {
|
|
22308
22288
|
success: true,
|
|
22309
22289
|
message: "Dry run complete",
|
|
@@ -22311,20 +22291,20 @@ async function uninstall(options = {}, _projectPath = process.cwd()) {
|
|
|
22311
22291
|
};
|
|
22312
22292
|
}
|
|
22313
22293
|
if (options.backup) {
|
|
22314
|
-
console.log(
|
|
22294
|
+
console.log(chalk12.blue("Creating backup..."));
|
|
22315
22295
|
const backupPath = await createBackup();
|
|
22316
22296
|
if (backupPath) {
|
|
22317
|
-
console.log(
|
|
22297
|
+
console.log(chalk12.green(`Backup created: ${path_manager_default.getDisplayPath(backupPath)}`));
|
|
22318
22298
|
console.log("");
|
|
22319
22299
|
} else {
|
|
22320
|
-
console.log(
|
|
22300
|
+
console.log(chalk12.yellow("Failed to create backup, continuing..."));
|
|
22321
22301
|
}
|
|
22322
22302
|
}
|
|
22323
22303
|
if (!options.force) {
|
|
22324
|
-
console.log(
|
|
22304
|
+
console.log(chalk12.yellow('Type "uninstall" to confirm:'));
|
|
22325
22305
|
const confirmed = await promptConfirmation("> ");
|
|
22326
22306
|
if (!confirmed) {
|
|
22327
|
-
console.log(
|
|
22307
|
+
console.log(chalk12.yellow("\nUninstall cancelled."));
|
|
22328
22308
|
return {
|
|
22329
22309
|
success: false,
|
|
22330
22310
|
message: "Uninstall cancelled by user"
|
|
@@ -22332,22 +22312,22 @@ async function uninstall(options = {}, _projectPath = process.cwd()) {
|
|
|
22332
22312
|
}
|
|
22333
22313
|
}
|
|
22334
22314
|
console.log("");
|
|
22335
|
-
console.log(
|
|
22315
|
+
console.log(chalk12.blue("Removing prjct..."));
|
|
22336
22316
|
const { deleted, errors } = await performUninstall(items, installation, options);
|
|
22337
22317
|
console.log("");
|
|
22338
22318
|
if (deleted.length > 0) {
|
|
22339
|
-
console.log(
|
|
22319
|
+
console.log(chalk12.green(`Removed ${deleted.length} items`));
|
|
22340
22320
|
}
|
|
22341
22321
|
if (errors.length > 0) {
|
|
22342
|
-
console.log(
|
|
22322
|
+
console.log(chalk12.yellow(`
|
|
22343
22323
|
${errors.length} errors:`));
|
|
22344
22324
|
for (const error of errors) {
|
|
22345
|
-
console.log(
|
|
22325
|
+
console.log(chalk12.red(` - ${error}`));
|
|
22346
22326
|
}
|
|
22347
22327
|
}
|
|
22348
22328
|
console.log("");
|
|
22349
|
-
console.log(
|
|
22350
|
-
console.log(
|
|
22329
|
+
console.log(chalk12.green("prjct has been uninstalled."));
|
|
22330
|
+
console.log(chalk12.dim("Thanks for using prjct! We hope to see you again."));
|
|
22351
22331
|
console.log("");
|
|
22352
22332
|
return {
|
|
22353
22333
|
success: errors.length === 0,
|
|
@@ -22394,7 +22374,7 @@ __export(watch_service_exports, {
|
|
|
22394
22374
|
watchService: () => watchService
|
|
22395
22375
|
});
|
|
22396
22376
|
import path47 from "node:path";
|
|
22397
|
-
import
|
|
22377
|
+
import chalk13 from "chalk";
|
|
22398
22378
|
import chokidar from "chokidar";
|
|
22399
22379
|
var TRIGGER_PATTERNS, IGNORE_PATTERNS2, WatchService, watchService;
|
|
22400
22380
|
var init_watch_service = __esm({
|
|
@@ -22504,7 +22484,7 @@ var init_watch_service = __esm({
|
|
|
22504
22484
|
async stop() {
|
|
22505
22485
|
if (!this.options.quiet) {
|
|
22506
22486
|
console.log("");
|
|
22507
|
-
console.log(
|
|
22487
|
+
console.log(chalk13.dim(`
|
|
22508
22488
|
\u{1F44B} Stopped watching (${this.syncCount} syncs performed)`));
|
|
22509
22489
|
}
|
|
22510
22490
|
if (this.debounceTimer) {
|
|
@@ -22525,7 +22505,7 @@ var init_watch_service = __esm({
|
|
|
22525
22505
|
this.pendingChanges.add(filePath);
|
|
22526
22506
|
if (this.options.verbose && !this.options.quiet) {
|
|
22527
22507
|
const eventIcon = event === "add" ? "\u2795" : event === "unlink" ? "\u2796" : "\u{1F4DD}";
|
|
22528
|
-
console.log(
|
|
22508
|
+
console.log(chalk13.dim(` ${eventIcon} ${filePath}`));
|
|
22529
22509
|
}
|
|
22530
22510
|
this.scheduleSyncIfNeeded();
|
|
22531
22511
|
}
|
|
@@ -22542,7 +22522,7 @@ var init_watch_service = __esm({
|
|
|
22542
22522
|
if (timeSinceLastSync < this.options.minIntervalMs && this.lastSyncTime > 0) {
|
|
22543
22523
|
const waitTime = this.options.minIntervalMs - timeSinceLastSync;
|
|
22544
22524
|
if (this.options.verbose && !this.options.quiet) {
|
|
22545
|
-
console.log(
|
|
22525
|
+
console.log(chalk13.dim(` \u23F3 Rate limited, waiting ${Math.round(waitTime / 1e3)}s...`));
|
|
22546
22526
|
}
|
|
22547
22527
|
this.debounceTimer = setTimeout(() => this.performSync(), waitTime);
|
|
22548
22528
|
return;
|
|
@@ -22562,7 +22542,7 @@ var init_watch_service = __esm({
|
|
|
22562
22542
|
const filesSummary = changedFiles.length === 1 ? changedFiles[0] : `${changedFiles.length} files`;
|
|
22563
22543
|
console.log(
|
|
22564
22544
|
`
|
|
22565
|
-
${
|
|
22545
|
+
${chalk13.dim(`[${timestamp}]`)} ${chalk13.cyan("\u27F3")} ${filesSummary} changed \u2192 syncing...`
|
|
22566
22546
|
);
|
|
22567
22547
|
}
|
|
22568
22548
|
try {
|
|
@@ -22573,16 +22553,16 @@ ${chalk11.dim(`[${timestamp}]`)} ${chalk11.cyan("\u27F3")} ${filesSummary} chang
|
|
|
22573
22553
|
if (!this.options.quiet) {
|
|
22574
22554
|
const agents = result.agents.filter((a) => a.type === "domain").map((a) => a.name);
|
|
22575
22555
|
const agentStr = agents.length > 0 ? ` [${agents.join(", ")}]` : "";
|
|
22576
|
-
console.log(`${
|
|
22556
|
+
console.log(`${chalk13.dim(`[${timestamp}]`)} ${chalk13.green("\u2713")} Synced${agentStr}`);
|
|
22577
22557
|
}
|
|
22578
22558
|
} else {
|
|
22579
22559
|
console.error(
|
|
22580
|
-
`${
|
|
22560
|
+
`${chalk13.dim(`[${timestamp}]`)} ${chalk13.red("\u2717")} Sync failed: ${result.error}`
|
|
22581
22561
|
);
|
|
22582
22562
|
}
|
|
22583
22563
|
} catch (error) {
|
|
22584
22564
|
console.error(
|
|
22585
|
-
`${
|
|
22565
|
+
`${chalk13.dim(`[${timestamp}]`)} ${chalk13.red("\u2717")} Error: ${error.message}`
|
|
22586
22566
|
);
|
|
22587
22567
|
}
|
|
22588
22568
|
}
|
|
@@ -22590,19 +22570,19 @@ ${chalk11.dim(`[${timestamp}]`)} ${chalk11.cyan("\u27F3")} ${filesSummary} chang
|
|
|
22590
22570
|
* Handle watcher errors
|
|
22591
22571
|
*/
|
|
22592
22572
|
handleError(error) {
|
|
22593
|
-
console.error(
|
|
22573
|
+
console.error(chalk13.red(`Watch error: ${error.message}`));
|
|
22594
22574
|
}
|
|
22595
22575
|
/**
|
|
22596
22576
|
* Print startup message
|
|
22597
22577
|
*/
|
|
22598
22578
|
printStartup() {
|
|
22599
22579
|
console.log("");
|
|
22600
|
-
console.log(
|
|
22601
|
-
console.log(
|
|
22602
|
-
console.log(
|
|
22603
|
-
console.log(
|
|
22580
|
+
console.log(chalk13.cyan("\u{1F441}\uFE0F Watching for changes..."));
|
|
22581
|
+
console.log(chalk13.dim(` Project: ${path47.basename(this.projectPath)}`));
|
|
22582
|
+
console.log(chalk13.dim(` Debounce: ${this.options.debounceMs}ms`));
|
|
22583
|
+
console.log(chalk13.dim(` Min interval: ${this.options.minIntervalMs / 1e3}s`));
|
|
22604
22584
|
console.log("");
|
|
22605
|
-
console.log(
|
|
22585
|
+
console.log(chalk13.dim(" Press Ctrl+C to stop"));
|
|
22606
22586
|
console.log("");
|
|
22607
22587
|
}
|
|
22608
22588
|
};
|
|
@@ -23013,47 +22993,52 @@ __export(help_exports, {
|
|
|
23013
22993
|
formatTerminalCommandHelp: () => formatTerminalCommandHelp,
|
|
23014
22994
|
getHelp: () => getHelp
|
|
23015
22995
|
});
|
|
22996
|
+
import chalk14 from "chalk";
|
|
23016
22997
|
function formatMainHelp() {
|
|
23017
22998
|
const lines = [];
|
|
23018
22999
|
lines.push("");
|
|
23019
|
-
lines.push(`${
|
|
23020
|
-
lines.push(
|
|
23000
|
+
lines.push(`${chalk14.cyan.bold("prjct")} v${VERSION} - Context layer for AI coding agents`);
|
|
23001
|
+
lines.push(chalk14.dim("Works with Claude Code, Gemini CLI, Cursor, Windsurf, and more."));
|
|
23021
23002
|
lines.push("");
|
|
23022
|
-
lines.push(
|
|
23023
|
-
lines.push(
|
|
23024
|
-
lines.push(
|
|
23025
|
-
|
|
23026
|
-
|
|
23027
|
-
lines.push(` ${
|
|
23003
|
+
lines.push(chalk14.bold("QUICK START"));
|
|
23004
|
+
lines.push(chalk14.dim("\u2500".repeat(60)));
|
|
23005
|
+
lines.push(
|
|
23006
|
+
` ${chalk14.green("1.")} prjct start ${chalk14.dim("# Configure AI providers")}`
|
|
23007
|
+
);
|
|
23008
|
+
lines.push(` ${chalk14.green("2.")} cd my-project && prjct init`);
|
|
23009
|
+
lines.push(` ${chalk14.green("3.")} Open in Claude Code / Gemini CLI / Cursor`);
|
|
23010
|
+
lines.push(` ${chalk14.green("4.")} p. sync ${chalk14.dim("# Analyze project")}`);
|
|
23028
23011
|
lines.push("");
|
|
23029
|
-
lines.push(
|
|
23030
|
-
lines.push(
|
|
23012
|
+
lines.push(chalk14.bold("TERMINAL COMMANDS"));
|
|
23013
|
+
lines.push(chalk14.dim("\u2500".repeat(60)));
|
|
23031
23014
|
for (const cmd of TERMINAL_COMMANDS) {
|
|
23032
23015
|
const name = `prjct ${cmd.name}`.padEnd(22);
|
|
23033
23016
|
lines.push(` ${name} ${cmd.description}`);
|
|
23034
23017
|
}
|
|
23035
23018
|
lines.push("");
|
|
23036
|
-
lines.push(`${
|
|
23037
|
-
lines.push(
|
|
23019
|
+
lines.push(`${chalk14.bold("AI AGENT COMMANDS")} ${chalk14.dim("(inside Claude/Gemini/Cursor)")}`);
|
|
23020
|
+
lines.push(chalk14.dim("\u2500".repeat(60)));
|
|
23038
23021
|
lines.push(` ${"Command".padEnd(22)} Description`);
|
|
23039
|
-
lines.push(` ${
|
|
23022
|
+
lines.push(` ${chalk14.dim("\u2500".repeat(56))}`);
|
|
23040
23023
|
const coreCommands = COMMANDS.filter((c) => c.group === "core" && c.usage?.claude);
|
|
23041
23024
|
for (const cmd of coreCommands.slice(0, 10)) {
|
|
23042
23025
|
const usage = `p. ${cmd.name}`.padEnd(22);
|
|
23043
23026
|
lines.push(` ${usage} ${cmd.description}`);
|
|
23044
23027
|
}
|
|
23045
|
-
lines.push(
|
|
23028
|
+
lines.push(
|
|
23029
|
+
` ${chalk14.dim(`... and ${coreCommands.length - 10} more (run 'prjct help commands')`)}`
|
|
23030
|
+
);
|
|
23046
23031
|
lines.push("");
|
|
23047
|
-
lines.push(
|
|
23048
|
-
lines.push(
|
|
23032
|
+
lines.push(chalk14.bold("FLAGS"));
|
|
23033
|
+
lines.push(chalk14.dim("\u2500".repeat(60)));
|
|
23049
23034
|
for (const flag of GLOBAL_FLAGS) {
|
|
23050
23035
|
lines.push(` ${flag.flag.padEnd(22)} ${flag.description}`);
|
|
23051
23036
|
}
|
|
23052
23037
|
lines.push("");
|
|
23053
|
-
lines.push(
|
|
23054
|
-
lines.push(
|
|
23055
|
-
lines.push(` Documentation: ${
|
|
23056
|
-
lines.push(` GitHub: ${
|
|
23038
|
+
lines.push(chalk14.bold("MORE INFO"));
|
|
23039
|
+
lines.push(chalk14.dim("\u2500".repeat(60)));
|
|
23040
|
+
lines.push(` Documentation: ${chalk14.cyan("https://prjct.app")}`);
|
|
23041
|
+
lines.push(` GitHub: ${chalk14.cyan("https://github.com/jlopezlira/prjct-cli")}`);
|
|
23057
23042
|
lines.push(` Per-command: prjct help <command>`);
|
|
23058
23043
|
lines.push("");
|
|
23059
23044
|
return lines.join("\n");
|
|
@@ -23063,20 +23048,20 @@ function formatTerminalCommandHelp(commandName) {
|
|
|
23063
23048
|
if (!cmd) return null;
|
|
23064
23049
|
const lines = [];
|
|
23065
23050
|
lines.push("");
|
|
23066
|
-
lines.push(`${
|
|
23051
|
+
lines.push(`${chalk14.cyan.bold(`prjct ${cmd.name}`)} - ${cmd.description}`);
|
|
23067
23052
|
lines.push("");
|
|
23068
|
-
lines.push(
|
|
23053
|
+
lines.push(chalk14.bold("USAGE"));
|
|
23069
23054
|
lines.push(` ${cmd.example}`);
|
|
23070
23055
|
lines.push("");
|
|
23071
23056
|
if (cmd.options) {
|
|
23072
|
-
lines.push(
|
|
23057
|
+
lines.push(chalk14.bold("OPTIONS"));
|
|
23073
23058
|
for (const opt of cmd.options) {
|
|
23074
23059
|
lines.push(` ${opt}`);
|
|
23075
23060
|
}
|
|
23076
23061
|
lines.push("");
|
|
23077
23062
|
}
|
|
23078
23063
|
if (cmd.subcommands) {
|
|
23079
|
-
lines.push(
|
|
23064
|
+
lines.push(chalk14.bold("SUBCOMMANDS"));
|
|
23080
23065
|
for (const sub of cmd.subcommands) {
|
|
23081
23066
|
lines.push(` ${sub}`);
|
|
23082
23067
|
}
|
|
@@ -23089,9 +23074,9 @@ function formatAgentCommandHelp(commandName) {
|
|
|
23089
23074
|
if (!cmd) return null;
|
|
23090
23075
|
const lines = [];
|
|
23091
23076
|
lines.push("");
|
|
23092
|
-
lines.push(`${
|
|
23077
|
+
lines.push(`${chalk14.cyan.bold(`p. ${cmd.name}`)} - ${cmd.description}`);
|
|
23093
23078
|
lines.push("");
|
|
23094
|
-
lines.push(
|
|
23079
|
+
lines.push(chalk14.bold("USAGE"));
|
|
23095
23080
|
if (cmd.usage?.claude) {
|
|
23096
23081
|
lines.push(` Claude/Gemini: ${cmd.usage.claude.replace("/p:", "p. ")}`);
|
|
23097
23082
|
}
|
|
@@ -23100,27 +23085,27 @@ function formatAgentCommandHelp(commandName) {
|
|
|
23100
23085
|
}
|
|
23101
23086
|
lines.push("");
|
|
23102
23087
|
if (cmd.params) {
|
|
23103
|
-
lines.push(
|
|
23088
|
+
lines.push(chalk14.bold("PARAMETERS"));
|
|
23104
23089
|
lines.push(` ${cmd.params}`);
|
|
23105
23090
|
lines.push("");
|
|
23106
23091
|
}
|
|
23107
23092
|
if (cmd.features && cmd.features.length > 0) {
|
|
23108
|
-
lines.push(
|
|
23093
|
+
lines.push(chalk14.bold("FEATURES"));
|
|
23109
23094
|
for (const feature of cmd.features) {
|
|
23110
23095
|
lines.push(` \u2022 ${feature}`);
|
|
23111
23096
|
}
|
|
23112
23097
|
lines.push("");
|
|
23113
23098
|
}
|
|
23114
23099
|
if (cmd.blockingRules) {
|
|
23115
|
-
lines.push(
|
|
23116
|
-
lines.push(` ${
|
|
23100
|
+
lines.push(chalk14.bold("REQUIREMENTS"));
|
|
23101
|
+
lines.push(` ${chalk14.yellow("\u26A0")} ${cmd.blockingRules.check}`);
|
|
23117
23102
|
lines.push("");
|
|
23118
23103
|
}
|
|
23119
23104
|
const category = CATEGORIES[cmd.group];
|
|
23120
23105
|
if (category) {
|
|
23121
|
-
lines.push(
|
|
23106
|
+
lines.push(chalk14.dim(`Category: ${category.title}`));
|
|
23122
23107
|
if (cmd.isOptional) {
|
|
23123
|
-
lines.push(
|
|
23108
|
+
lines.push(chalk14.dim("This is an optional command."));
|
|
23124
23109
|
}
|
|
23125
23110
|
lines.push("");
|
|
23126
23111
|
}
|
|
@@ -23132,7 +23117,7 @@ function formatCommandHelp(commandName) {
|
|
|
23132
23117
|
const agentHelp = formatAgentCommandHelp(commandName);
|
|
23133
23118
|
if (agentHelp) return agentHelp;
|
|
23134
23119
|
return `
|
|
23135
|
-
${
|
|
23120
|
+
${chalk14.yellow(`Command '${commandName}' not found.`)}
|
|
23136
23121
|
|
|
23137
23122
|
Run 'prjct help' to see all available commands.
|
|
23138
23123
|
`;
|
|
@@ -23140,16 +23125,16 @@ Run 'prjct help' to see all available commands.
|
|
|
23140
23125
|
function formatCommandList() {
|
|
23141
23126
|
const lines = [];
|
|
23142
23127
|
lines.push("");
|
|
23143
|
-
lines.push(
|
|
23128
|
+
lines.push(chalk14.cyan.bold("All Commands"));
|
|
23144
23129
|
lines.push("");
|
|
23145
23130
|
const categories = Object.entries(CATEGORIES).sort((a, b) => a[1].order - b[1].order);
|
|
23146
23131
|
for (const [categoryKey, category] of categories) {
|
|
23147
23132
|
const categoryCommands = COMMANDS.filter((c) => c.group === categoryKey);
|
|
23148
23133
|
if (categoryCommands.length === 0) continue;
|
|
23149
23134
|
lines.push(
|
|
23150
|
-
`${
|
|
23135
|
+
`${chalk14.bold(category.title)} ${chalk14.dim(`(${categoryCommands.length} commands)`)}`
|
|
23151
23136
|
);
|
|
23152
|
-
lines.push(
|
|
23137
|
+
lines.push(chalk14.dim(category.description));
|
|
23153
23138
|
lines.push("");
|
|
23154
23139
|
for (const cmd of categoryCommands) {
|
|
23155
23140
|
const name = `p. ${cmd.name}`.padEnd(18);
|
|
@@ -23158,7 +23143,7 @@ function formatCommandList() {
|
|
|
23158
23143
|
}
|
|
23159
23144
|
lines.push("");
|
|
23160
23145
|
}
|
|
23161
|
-
lines.push(
|
|
23146
|
+
lines.push(chalk14.dim("Run 'prjct help <command>' for detailed help on a specific command."));
|
|
23162
23147
|
lines.push("");
|
|
23163
23148
|
return lines.join("\n");
|
|
23164
23149
|
}
|
|
@@ -23171,18 +23156,12 @@ function getHelp(topic) {
|
|
|
23171
23156
|
}
|
|
23172
23157
|
return formatCommandHelp(topic);
|
|
23173
23158
|
}
|
|
23174
|
-
var
|
|
23159
|
+
var TERMINAL_COMMANDS, GLOBAL_FLAGS, help_default;
|
|
23175
23160
|
var init_help = __esm({
|
|
23176
23161
|
"core/utils/help.ts"() {
|
|
23177
23162
|
"use strict";
|
|
23178
23163
|
init_command_data();
|
|
23179
23164
|
init_version();
|
|
23180
|
-
CYAN2 = "\x1B[36m";
|
|
23181
|
-
DIM3 = "\x1B[2m";
|
|
23182
|
-
BOLD3 = "\x1B[1m";
|
|
23183
|
-
RESET3 = "\x1B[0m";
|
|
23184
|
-
GREEN3 = "\x1B[32m";
|
|
23185
|
-
YELLOW3 = "\x1B[33m";
|
|
23186
23165
|
TERMINAL_COMMANDS = [
|
|
23187
23166
|
{
|
|
23188
23167
|
name: "start",
|
|
@@ -23280,50 +23259,53 @@ import { execSync as execSync7 } from "node:child_process";
|
|
|
23280
23259
|
import fs45 from "node:fs";
|
|
23281
23260
|
import os13 from "node:os";
|
|
23282
23261
|
import path48 from "node:path";
|
|
23262
|
+
import chalk15 from "chalk";
|
|
23283
23263
|
async function installAICLI(provider) {
|
|
23284
23264
|
const packageName = provider.name === "claude" ? "@anthropic-ai/claude-code" : "@google/gemini-cli";
|
|
23285
23265
|
if (!dependencyValidator.isAvailable("npm")) {
|
|
23286
|
-
console.log(`${
|
|
23266
|
+
console.log(`${chalk15.yellow("\u26A0\uFE0F npm is not available")}`);
|
|
23287
23267
|
console.log("");
|
|
23288
|
-
console.log(`${
|
|
23289
|
-
console.log(
|
|
23268
|
+
console.log(`${chalk15.dim(`Install ${provider.displayName} using one of:`)}`);
|
|
23269
|
+
console.log(chalk15.dim(" \u2022 Install Node.js: https://nodejs.org"));
|
|
23290
23270
|
console.log(
|
|
23291
|
-
|
|
23271
|
+
chalk15.dim(
|
|
23272
|
+
` \u2022 Use Homebrew: brew install ${provider.name === "claude" ? "claude" : "gemini"}`
|
|
23273
|
+
)
|
|
23292
23274
|
);
|
|
23293
|
-
console.log(
|
|
23275
|
+
console.log(chalk15.dim(` \u2022 Use npx directly: npx ${packageName}`));
|
|
23294
23276
|
console.log("");
|
|
23295
23277
|
return false;
|
|
23296
23278
|
}
|
|
23297
23279
|
try {
|
|
23298
|
-
console.log(
|
|
23280
|
+
console.log(chalk15.yellow(`\u{1F4E6} ${provider.displayName} not found. Installing...`));
|
|
23299
23281
|
console.log("");
|
|
23300
23282
|
execSync7(`npm install -g ${packageName}`, {
|
|
23301
23283
|
stdio: "inherit",
|
|
23302
23284
|
timeout: getTimeout("NPM_INSTALL")
|
|
23303
23285
|
});
|
|
23304
23286
|
console.log("");
|
|
23305
|
-
console.log(`${
|
|
23287
|
+
console.log(`${chalk15.green("\u2713")} ${provider.displayName} installed successfully`);
|
|
23306
23288
|
console.log("");
|
|
23307
23289
|
return true;
|
|
23308
23290
|
} catch (error) {
|
|
23309
23291
|
const err = error;
|
|
23310
23292
|
const isTimeout = err.killed && err.signal === "SIGTERM";
|
|
23311
23293
|
if (isTimeout) {
|
|
23312
|
-
console.log(
|
|
23294
|
+
console.log(chalk15.yellow(`\u26A0\uFE0F Installation timed out for ${provider.displayName}`));
|
|
23313
23295
|
console.log("");
|
|
23314
|
-
console.log(
|
|
23315
|
-
console.log(
|
|
23316
|
-
console.log(
|
|
23296
|
+
console.log(chalk15.dim("The npm install took too long. Try:"));
|
|
23297
|
+
console.log(chalk15.dim(" \u2022 Set PRJCT_TIMEOUT_NPM_INSTALL=300000 for 5 minutes"));
|
|
23298
|
+
console.log(chalk15.dim(` \u2022 Run manually: npm install -g ${packageName}`));
|
|
23317
23299
|
} else {
|
|
23318
|
-
console.log(
|
|
23300
|
+
console.log(chalk15.yellow(`\u26A0\uFE0F Failed to install ${provider.displayName}: ${err.message}`));
|
|
23319
23301
|
}
|
|
23320
23302
|
console.log("");
|
|
23321
|
-
console.log(
|
|
23322
|
-
console.log(
|
|
23323
|
-
console.log(
|
|
23324
|
-
console.log(
|
|
23303
|
+
console.log(chalk15.dim("Alternative installation methods:"));
|
|
23304
|
+
console.log(chalk15.dim(` \u2022 npm: npm install -g ${packageName}`));
|
|
23305
|
+
console.log(chalk15.dim(` \u2022 yarn: yarn global add ${packageName}`));
|
|
23306
|
+
console.log(chalk15.dim(` \u2022 pnpm: pnpm add -g ${packageName}`));
|
|
23325
23307
|
console.log(
|
|
23326
|
-
|
|
23308
|
+
chalk15.dim(` \u2022 brew: brew install ${provider.name === "claude" ? "claude" : "gemini"}`)
|
|
23327
23309
|
);
|
|
23328
23310
|
console.log("");
|
|
23329
23311
|
return false;
|
|
@@ -23403,7 +23385,7 @@ async function run() {
|
|
|
23403
23385
|
if (antigravityDetection.installed) {
|
|
23404
23386
|
const antigravityResult = await installAntigravitySkill();
|
|
23405
23387
|
if (antigravityResult.success) {
|
|
23406
|
-
console.log(` ${
|
|
23388
|
+
console.log(` ${chalk15.green("\u2713")} Antigravity skill installed`);
|
|
23407
23389
|
}
|
|
23408
23390
|
}
|
|
23409
23391
|
await editors_config_default.saveConfig(VERSION, command_installer_default.getInstallPath(), selection.provider);
|
|
@@ -23703,7 +23685,7 @@ async function migrateProjectsCliVersion() {
|
|
|
23703
23685
|
}
|
|
23704
23686
|
}
|
|
23705
23687
|
if (migrated > 0) {
|
|
23706
|
-
console.log(` ${
|
|
23688
|
+
console.log(` ${chalk15.green("\u2713")} Updated ${migrated} project(s) to v${VERSION}`);
|
|
23707
23689
|
}
|
|
23708
23690
|
} catch (error) {
|
|
23709
23691
|
if (!isNotFoundError(error)) {
|
|
@@ -23909,29 +23891,29 @@ function ensureStatusLineSymlink(linkPath, targetPath) {
|
|
|
23909
23891
|
function showResults(results, provider) {
|
|
23910
23892
|
console.log("");
|
|
23911
23893
|
if (results.cliInstalled) {
|
|
23912
|
-
console.log(` ${
|
|
23894
|
+
console.log(` ${chalk15.green("\u2713")} ${provider.displayName} CLI installed`);
|
|
23913
23895
|
} else {
|
|
23914
|
-
console.log(` ${
|
|
23896
|
+
console.log(` ${chalk15.green("\u2713")} ${provider.displayName} CLI found`);
|
|
23915
23897
|
}
|
|
23916
23898
|
const totalCommands = results.commandsAdded + results.commandsUpdated;
|
|
23917
23899
|
if (totalCommands > 0) {
|
|
23918
23900
|
const parts = [];
|
|
23919
23901
|
if (results.commandsAdded > 0) parts.push(`${results.commandsAdded} new`);
|
|
23920
23902
|
if (results.commandsUpdated > 0) parts.push(`${results.commandsUpdated} updated`);
|
|
23921
|
-
console.log(` ${
|
|
23903
|
+
console.log(` ${chalk15.green("\u2713")} Commands synced (${parts.join(", ")})`);
|
|
23922
23904
|
} else {
|
|
23923
|
-
console.log(` ${
|
|
23905
|
+
console.log(` ${chalk15.green("\u2713")} Commands up to date`);
|
|
23924
23906
|
}
|
|
23925
23907
|
if (results.configAction === "created") {
|
|
23926
|
-
console.log(` ${
|
|
23908
|
+
console.log(` ${chalk15.green("\u2713")} Global config created (${provider.contextFile})`);
|
|
23927
23909
|
} else if (results.configAction === "updated") {
|
|
23928
|
-
console.log(` ${
|
|
23910
|
+
console.log(` ${chalk15.green("\u2713")} Global config updated (${provider.contextFile})`);
|
|
23929
23911
|
} else if (results.configAction === "appended") {
|
|
23930
|
-
console.log(` ${
|
|
23912
|
+
console.log(` ${chalk15.green("\u2713")} Global config merged (${provider.contextFile})`);
|
|
23931
23913
|
}
|
|
23932
23914
|
console.log("");
|
|
23933
23915
|
}
|
|
23934
|
-
var
|
|
23916
|
+
var setup_default, isDirectRun;
|
|
23935
23917
|
var init_setup = __esm({
|
|
23936
23918
|
"core/infrastructure/setup.ts"() {
|
|
23937
23919
|
"use strict";
|
|
@@ -23942,10 +23924,6 @@ var init_setup = __esm({
|
|
|
23942
23924
|
init_ai_provider();
|
|
23943
23925
|
init_command_installer();
|
|
23944
23926
|
init_editors_config();
|
|
23945
|
-
GREEN4 = "\x1B[32m";
|
|
23946
|
-
YELLOW4 = "\x1B[33m";
|
|
23947
|
-
DIM4 = "\x1B[2m";
|
|
23948
|
-
NC = "\x1B[0m";
|
|
23949
23927
|
__name(installAICLI, "installAICLI");
|
|
23950
23928
|
__name(run, "run");
|
|
23951
23929
|
setup_default = { run };
|
|
@@ -25218,7 +25196,7 @@ var init_maintenance = __esm({
|
|
|
25218
25196
|
// core/commands/setup.ts
|
|
25219
25197
|
import fs47 from "node:fs";
|
|
25220
25198
|
import path54 from "node:path";
|
|
25221
|
-
import
|
|
25199
|
+
import chalk16 from "chalk";
|
|
25222
25200
|
var SetupCommands;
|
|
25223
25201
|
var init_setup2 = __esm({
|
|
25224
25202
|
"core/commands/setup.ts"() {
|
|
@@ -25424,45 +25402,45 @@ echo "\u26A1 prjct"
|
|
|
25424
25402
|
* Show beautiful ASCII art with quick start
|
|
25425
25403
|
*/
|
|
25426
25404
|
showAsciiArt() {
|
|
25427
|
-
console.log(
|
|
25405
|
+
console.log(chalk16.cyan("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"));
|
|
25428
25406
|
console.log("");
|
|
25429
|
-
console.log(
|
|
25430
|
-
console.log(
|
|
25431
|
-
console.log(
|
|
25432
|
-
console.log(
|
|
25433
|
-
console.log(
|
|
25434
|
-
console.log(
|
|
25407
|
+
console.log(chalk16.bold.cyan(" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557"));
|
|
25408
|
+
console.log(chalk16.bold.cyan(" \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D"));
|
|
25409
|
+
console.log(chalk16.bold.cyan(" \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551"));
|
|
25410
|
+
console.log(chalk16.bold.cyan(" \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551"));
|
|
25411
|
+
console.log(chalk16.bold.cyan(" \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551"));
|
|
25412
|
+
console.log(chalk16.bold.cyan(" \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D"));
|
|
25435
25413
|
console.log("");
|
|
25436
25414
|
console.log(
|
|
25437
|
-
` ${
|
|
25415
|
+
` ${chalk16.bold.cyan("prjct")}${chalk16.magenta("/")}${chalk16.green("cli")} ${chalk16.dim.white(`v${VERSION} installed`)}`
|
|
25438
25416
|
);
|
|
25439
25417
|
console.log("");
|
|
25440
|
-
console.log(` ${
|
|
25441
|
-
console.log(` ${
|
|
25442
|
-
console.log(` ${
|
|
25418
|
+
console.log(` ${chalk16.yellow("\u26A1")} Ship faster with zero friction`);
|
|
25419
|
+
console.log(` ${chalk16.green("\u{1F4DD}")} From idea to technical tasks in minutes`);
|
|
25420
|
+
console.log(` ${chalk16.cyan("\u{1F916}")} Perfect context for AI agents`);
|
|
25443
25421
|
console.log("");
|
|
25444
|
-
console.log(
|
|
25422
|
+
console.log(chalk16.cyan("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"));
|
|
25445
25423
|
console.log("");
|
|
25446
|
-
console.log(
|
|
25447
|
-
console.log(
|
|
25424
|
+
console.log(chalk16.bold.cyan("\u{1F680} Quick Start"));
|
|
25425
|
+
console.log(chalk16.dim("\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\u2500\u2500"));
|
|
25448
25426
|
console.log("");
|
|
25449
|
-
console.log(` ${
|
|
25450
|
-
console.log(` ${
|
|
25427
|
+
console.log(` ${chalk16.bold("1.")} Initialize your project:`);
|
|
25428
|
+
console.log(` ${chalk16.green("cd your-project && prjct init")}`);
|
|
25451
25429
|
console.log("");
|
|
25452
|
-
console.log(` ${
|
|
25453
|
-
console.log(` ${
|
|
25430
|
+
console.log(` ${chalk16.bold("2.")} Start your first task:`);
|
|
25431
|
+
console.log(` ${chalk16.green('prjct task "build auth"')}`);
|
|
25454
25432
|
console.log("");
|
|
25455
|
-
console.log(` ${
|
|
25456
|
-
console.log(` ${
|
|
25433
|
+
console.log(` ${chalk16.bold("3.")} Ship & celebrate:`);
|
|
25434
|
+
console.log(` ${chalk16.green('prjct ship "user login"')}`);
|
|
25457
25435
|
console.log("");
|
|
25458
|
-
console.log(
|
|
25436
|
+
console.log(chalk16.dim("\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\u2500\u2500"));
|
|
25459
25437
|
console.log("");
|
|
25460
|
-
console.log(` ${
|
|
25438
|
+
console.log(` ${chalk16.dim("Documentation:")} ${chalk16.cyan("https://prjct.app")}`);
|
|
25461
25439
|
console.log(
|
|
25462
|
-
` ${
|
|
25440
|
+
` ${chalk16.dim("Report issues:")} ${chalk16.cyan("https://github.com/jlopezlira/prjct-cli/issues")}`
|
|
25463
25441
|
);
|
|
25464
25442
|
console.log("");
|
|
25465
|
-
console.log(
|
|
25443
|
+
console.log(chalk16.bold.magenta("Happy shipping! \u{1F680}"));
|
|
25466
25444
|
console.log("");
|
|
25467
25445
|
}
|
|
25468
25446
|
};
|
|
@@ -25553,6 +25531,7 @@ var init_project_commands = __esm({
|
|
|
25553
25531
|
// core/workflow/workflow-preferences.ts
|
|
25554
25532
|
import { exec as exec12 } from "node:child_process";
|
|
25555
25533
|
import { promisify as promisify12 } from "node:util";
|
|
25534
|
+
import chalk17 from "chalk";
|
|
25556
25535
|
function prefKey(hook, command) {
|
|
25557
25536
|
return `workflow:${hook}_${command}`;
|
|
25558
25537
|
}
|
|
@@ -25620,7 +25599,7 @@ async function runWorkflowHooks(projectId, phase, command, options = {}) {
|
|
|
25620
25599
|
oncePreferences.delete(key);
|
|
25621
25600
|
}
|
|
25622
25601
|
console.log(`
|
|
25623
|
-
${
|
|
25602
|
+
${chalk17.dim(`Running ${phase}-${command}: ${action}`)}`);
|
|
25624
25603
|
try {
|
|
25625
25604
|
const startTime = Date.now();
|
|
25626
25605
|
await execAsync7(action, {
|
|
@@ -25630,12 +25609,12 @@ ${DIM5}Running ${phase}-${command}: ${action}${RESET4}`);
|
|
|
25630
25609
|
});
|
|
25631
25610
|
const elapsed = Date.now() - startTime;
|
|
25632
25611
|
const timeStr = elapsed > 1e3 ? `${(elapsed / 1e3).toFixed(1)}s` : `${elapsed}ms`;
|
|
25633
|
-
console.log(`${
|
|
25612
|
+
console.log(`${chalk17.green("\u2713")} ${chalk17.dim(`(${timeStr})`)}`);
|
|
25634
25613
|
return { success: true };
|
|
25635
25614
|
} catch (error) {
|
|
25636
|
-
console.log(
|
|
25615
|
+
console.log(chalk17.red("\u2717 failed"));
|
|
25637
25616
|
const errorMessage = error.message || "Unknown error";
|
|
25638
|
-
console.log(
|
|
25617
|
+
console.log(chalk17.dim(errorMessage.split("\n")[0]));
|
|
25639
25618
|
return { success: false, failed: action, output: errorMessage };
|
|
25640
25619
|
}
|
|
25641
25620
|
}
|
|
@@ -25673,31 +25652,26 @@ async function removeWorkflowPreference(projectId, hook, command) {
|
|
|
25673
25652
|
}
|
|
25674
25653
|
function formatWorkflowPreferences(preferences) {
|
|
25675
25654
|
if (preferences.length === 0) {
|
|
25676
|
-
return `${
|
|
25655
|
+
return `${chalk17.dim("No workflow preferences configured.")}
|
|
25677
25656
|
|
|
25678
25657
|
Set one: "p. workflow antes de ship corre los tests"`;
|
|
25679
25658
|
}
|
|
25680
25659
|
const lines = ["", "WORKFLOW PREFERENCES", "\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"];
|
|
25681
25660
|
for (const pref of preferences) {
|
|
25682
|
-
const scopeBadge = pref.scope === "permanent" ?
|
|
25661
|
+
const scopeBadge = pref.scope === "permanent" ? chalk17.green("permanent") : pref.scope === "session" ? chalk17.yellow("session") : chalk17.dim("once");
|
|
25683
25662
|
lines.push(` [${scopeBadge}] ${pref.key.padEnd(15)} \u2192 ${pref.action}`);
|
|
25684
25663
|
}
|
|
25685
25664
|
lines.push("");
|
|
25686
|
-
lines.push(
|
|
25687
|
-
lines.push(
|
|
25665
|
+
lines.push(chalk17.dim('Modify: "p. workflow antes de ship corre npm test"'));
|
|
25666
|
+
lines.push(chalk17.dim('Remove: "p. workflow quita el hook de ship"'));
|
|
25688
25667
|
return lines.join("\n");
|
|
25689
25668
|
}
|
|
25690
|
-
var execAsync7,
|
|
25669
|
+
var execAsync7, sessionPreferences, oncePreferences;
|
|
25691
25670
|
var init_workflow_preferences = __esm({
|
|
25692
25671
|
"core/workflow/workflow-preferences.ts"() {
|
|
25693
25672
|
"use strict";
|
|
25694
25673
|
init_memory_system();
|
|
25695
25674
|
execAsync7 = promisify12(exec12);
|
|
25696
|
-
DIM5 = "\x1B[2m";
|
|
25697
|
-
GREEN5 = "\x1B[32m";
|
|
25698
|
-
RED = "\x1B[31m";
|
|
25699
|
-
YELLOW5 = "\x1B[33m";
|
|
25700
|
-
RESET4 = "\x1B[0m";
|
|
25701
25675
|
sessionPreferences = /* @__PURE__ */ new Map();
|
|
25702
25676
|
oncePreferences = /* @__PURE__ */ new Map();
|
|
25703
25677
|
__name(prefKey, "prefKey");
|
|
@@ -27360,7 +27334,7 @@ var require_package = __commonJS({
|
|
|
27360
27334
|
"package.json"(exports, module) {
|
|
27361
27335
|
module.exports = {
|
|
27362
27336
|
name: "prjct-cli",
|
|
27363
|
-
version: "1.2.
|
|
27337
|
+
version: "1.2.1",
|
|
27364
27338
|
description: "Context layer for AI agents. Project context for Claude Code, Gemini CLI, and more.",
|
|
27365
27339
|
main: "core/index.ts",
|
|
27366
27340
|
bin: {
|
|
@@ -27470,6 +27444,7 @@ var core_exports = {};
|
|
|
27470
27444
|
import fs49 from "node:fs";
|
|
27471
27445
|
import os15 from "node:os";
|
|
27472
27446
|
import path58 from "node:path";
|
|
27447
|
+
import chalk18 from "chalk";
|
|
27473
27448
|
async function main() {
|
|
27474
27449
|
const [commandName, ...rawArgs] = process.argv.slice(2);
|
|
27475
27450
|
if (["-v", "--version", "version"].includes(commandName)) {
|
|
@@ -27608,42 +27583,42 @@ function displayVersion(version) {
|
|
|
27608
27583
|
const cursorConfigured = fs49.existsSync(path58.join(process.cwd(), ".cursor", "commands", "sync.md"));
|
|
27609
27584
|
const cursorExists = fs49.existsSync(path58.join(process.cwd(), ".cursor"));
|
|
27610
27585
|
console.log(`
|
|
27611
|
-
${
|
|
27612
|
-
${
|
|
27586
|
+
${chalk18.cyan("p/")} prjct v${version}
|
|
27587
|
+
${chalk18.dim("Context layer for AI coding agents")}
|
|
27613
27588
|
|
|
27614
|
-
${
|
|
27589
|
+
${chalk18.dim("Providers:")}`);
|
|
27615
27590
|
if (detection.claude.installed) {
|
|
27616
|
-
const status = claudeConfigured ?
|
|
27591
|
+
const status = claudeConfigured ? chalk18.green("\u2713 ready") : chalk18.yellow("\u25CF installed");
|
|
27617
27592
|
const ver = detection.claude.version ? ` (v${detection.claude.version})` : "";
|
|
27618
|
-
console.log(` Claude Code ${status}${
|
|
27593
|
+
console.log(` Claude Code ${status}${chalk18.dim(ver)}`);
|
|
27619
27594
|
} else {
|
|
27620
|
-
console.log(` Claude Code ${
|
|
27595
|
+
console.log(` Claude Code ${chalk18.dim("\u25CB not installed")}`);
|
|
27621
27596
|
}
|
|
27622
27597
|
if (detection.gemini.installed) {
|
|
27623
|
-
const status = geminiConfigured ?
|
|
27598
|
+
const status = geminiConfigured ? chalk18.green("\u2713 ready") : chalk18.yellow("\u25CF installed");
|
|
27624
27599
|
const ver = detection.gemini.version ? ` (v${detection.gemini.version})` : "";
|
|
27625
|
-
console.log(` Gemini CLI ${status}${
|
|
27600
|
+
console.log(` Gemini CLI ${status}${chalk18.dim(ver)}`);
|
|
27626
27601
|
} else {
|
|
27627
|
-
console.log(` Gemini CLI ${
|
|
27602
|
+
console.log(` Gemini CLI ${chalk18.dim("\u25CB not installed")}`);
|
|
27628
27603
|
}
|
|
27629
27604
|
const antigravityDetection = detectAntigravity();
|
|
27630
27605
|
if (antigravityDetection.installed) {
|
|
27631
|
-
const status = antigravityDetection.skillInstalled ?
|
|
27632
|
-
const hint = antigravityDetection.skillInstalled ? "" : ` ${
|
|
27606
|
+
const status = antigravityDetection.skillInstalled ? chalk18.green("\u2713 ready") : chalk18.yellow("\u25CF detected");
|
|
27607
|
+
const hint = antigravityDetection.skillInstalled ? "" : ` ${chalk18.dim("(run prjct start)")}`;
|
|
27633
27608
|
console.log(` Antigravity ${status}${hint}`);
|
|
27634
27609
|
} else {
|
|
27635
|
-
console.log(` Antigravity ${
|
|
27610
|
+
console.log(` Antigravity ${chalk18.dim("\u25CB not installed")}`);
|
|
27636
27611
|
}
|
|
27637
27612
|
if (cursorConfigured) {
|
|
27638
|
-
console.log(` Cursor IDE ${
|
|
27613
|
+
console.log(` Cursor IDE ${chalk18.green("\u2713 ready")} ${chalk18.dim("(use /sync, /task)")}`);
|
|
27639
27614
|
} else if (cursorExists) {
|
|
27640
|
-
console.log(` Cursor IDE ${
|
|
27615
|
+
console.log(` Cursor IDE ${chalk18.yellow("\u25CF detected")} ${chalk18.dim("(run prjct init)")}`);
|
|
27641
27616
|
} else {
|
|
27642
|
-
console.log(` Cursor IDE ${
|
|
27617
|
+
console.log(` Cursor IDE ${chalk18.dim("\u25CB no .cursor/ folder")}`);
|
|
27643
27618
|
}
|
|
27644
27619
|
console.log(`
|
|
27645
|
-
${
|
|
27646
|
-
${
|
|
27620
|
+
${chalk18.dim("Run 'prjct start' for Claude/Gemini, 'prjct init' for Cursor")}
|
|
27621
|
+
${chalk18.cyan("https://prjct.app")}
|
|
27647
27622
|
`);
|
|
27648
27623
|
}
|
|
27649
27624
|
function displayHelp() {
|
|
@@ -27708,7 +27683,6 @@ MORE INFO
|
|
|
27708
27683
|
GitHub: https://github.com/jlopezlira/prjct-cli
|
|
27709
27684
|
`);
|
|
27710
27685
|
}
|
|
27711
|
-
var CYAN3, GREEN6, YELLOW6, DIM6, RESET5;
|
|
27712
27686
|
var init_core = __esm({
|
|
27713
27687
|
"core/index.ts"() {
|
|
27714
27688
|
"use strict";
|
|
@@ -27719,11 +27693,6 @@ var init_core = __esm({
|
|
|
27719
27693
|
init_output();
|
|
27720
27694
|
__name(main, "main");
|
|
27721
27695
|
__name(parseCommandArgs, "parseCommandArgs");
|
|
27722
|
-
CYAN3 = "\x1B[36m";
|
|
27723
|
-
GREEN6 = "\x1B[32m";
|
|
27724
|
-
YELLOW6 = "\x1B[33m";
|
|
27725
|
-
DIM6 = "\x1B[2m";
|
|
27726
|
-
RESET5 = "\x1B[0m";
|
|
27727
27696
|
__name(displayVersion, "displayVersion");
|
|
27728
27697
|
__name(displayHelp, "displayHelp");
|
|
27729
27698
|
main().catch((error) => {
|
|
@@ -27743,6 +27712,7 @@ init_editors_config();
|
|
|
27743
27712
|
import fs50 from "node:fs";
|
|
27744
27713
|
import os16 from "node:os";
|
|
27745
27714
|
import path59 from "node:path";
|
|
27715
|
+
import chalk19 from "chalk";
|
|
27746
27716
|
|
|
27747
27717
|
// core/server/server.ts
|
|
27748
27718
|
import { Hono as Hono3 } from "hono";
|
|
@@ -28509,11 +28479,6 @@ if (isQuietMode2) {
|
|
|
28509
28479
|
const { setQuietMode: setQuietMode2 } = await Promise.resolve().then(() => (init_output(), output_exports));
|
|
28510
28480
|
setQuietMode2(true);
|
|
28511
28481
|
}
|
|
28512
|
-
var CYAN4 = "\x1B[36m";
|
|
28513
|
-
var YELLOW7 = "\x1B[33m";
|
|
28514
|
-
var DIM7 = "\x1B[2m";
|
|
28515
|
-
var BOLD4 = "\x1B[1m";
|
|
28516
|
-
var RESET6 = "\x1B[0m";
|
|
28517
28482
|
if (args[0] === "start" || args[0] === "setup") {
|
|
28518
28483
|
const { runStart: runStart2 } = await Promise.resolve().then(() => (init_start(), start_exports));
|
|
28519
28484
|
await runStart2();
|
|
@@ -28622,54 +28587,53 @@ if (args[0] === "start" || args[0] === "setup") {
|
|
|
28622
28587
|
const cursorConfigured = fs50.existsSync(path59.join(cwd, ".cursor", "rules", "prjct.mdc"));
|
|
28623
28588
|
const windsurfDetected = fs50.existsSync(path59.join(cwd, ".windsurf"));
|
|
28624
28589
|
const windsurfConfigured = fs50.existsSync(path59.join(cwd, ".windsurf", "rules", "prjct.md"));
|
|
28625
|
-
const GREEN7 = "\x1B[32m";
|
|
28626
28590
|
console.log(`
|
|
28627
|
-
${
|
|
28628
|
-
${
|
|
28591
|
+
${chalk19.cyan("p/")} prjct v${VERSION}
|
|
28592
|
+
${chalk19.dim("Context layer for AI coding agents")}
|
|
28629
28593
|
|
|
28630
|
-
${
|
|
28594
|
+
${chalk19.dim("Providers:")}`);
|
|
28631
28595
|
if (detection.claude.installed) {
|
|
28632
|
-
const status = claudeConfigured ?
|
|
28596
|
+
const status = claudeConfigured ? chalk19.green("\u2713 ready") : chalk19.yellow("\u25CF installed");
|
|
28633
28597
|
const ver = detection.claude.version ? ` (v${detection.claude.version})` : "";
|
|
28634
|
-
console.log(` Claude Code ${status}${
|
|
28598
|
+
console.log(` Claude Code ${status}${chalk19.dim(ver)}`);
|
|
28635
28599
|
} else {
|
|
28636
|
-
console.log(` Claude Code ${
|
|
28600
|
+
console.log(` Claude Code ${chalk19.dim("\u25CB not installed")}`);
|
|
28637
28601
|
}
|
|
28638
28602
|
if (detection.gemini.installed) {
|
|
28639
|
-
const status = geminiConfigured ?
|
|
28603
|
+
const status = geminiConfigured ? chalk19.green("\u2713 ready") : chalk19.yellow("\u25CF installed");
|
|
28640
28604
|
const ver = detection.gemini.version ? ` (v${detection.gemini.version})` : "";
|
|
28641
|
-
console.log(` Gemini CLI ${status}${
|
|
28605
|
+
console.log(` Gemini CLI ${status}${chalk19.dim(ver)}`);
|
|
28642
28606
|
} else {
|
|
28643
|
-
console.log(` Gemini CLI ${
|
|
28607
|
+
console.log(` Gemini CLI ${chalk19.dim("\u25CB not installed")}`);
|
|
28644
28608
|
}
|
|
28645
28609
|
if (cursorDetected) {
|
|
28646
|
-
const status = cursorConfigured ?
|
|
28647
|
-
console.log(` Cursor IDE ${status}${
|
|
28610
|
+
const status = cursorConfigured ? chalk19.green("\u2713 ready") : chalk19.yellow("\u25CF detected");
|
|
28611
|
+
console.log(` Cursor IDE ${status}${chalk19.dim(" (project)")}`);
|
|
28648
28612
|
} else {
|
|
28649
|
-
console.log(` Cursor IDE ${
|
|
28613
|
+
console.log(` Cursor IDE ${chalk19.dim("\u25CB not detected")}`);
|
|
28650
28614
|
}
|
|
28651
28615
|
if (windsurfDetected) {
|
|
28652
|
-
const status = windsurfConfigured ?
|
|
28653
|
-
console.log(` Windsurf IDE ${status}${
|
|
28616
|
+
const status = windsurfConfigured ? chalk19.green("\u2713 ready") : chalk19.yellow("\u25CF detected");
|
|
28617
|
+
console.log(` Windsurf IDE ${status}${chalk19.dim(" (project)")}`);
|
|
28654
28618
|
} else {
|
|
28655
|
-
console.log(` Windsurf IDE ${
|
|
28619
|
+
console.log(` Windsurf IDE ${chalk19.dim("\u25CB not detected")}`);
|
|
28656
28620
|
}
|
|
28657
28621
|
console.log(`
|
|
28658
|
-
${
|
|
28659
|
-
${
|
|
28660
|
-
${
|
|
28622
|
+
${chalk19.dim("Run 'prjct start' to configure (CLI providers)")}
|
|
28623
|
+
${chalk19.dim("Run 'prjct init' to configure (Cursor/Windsurf IDE)")}
|
|
28624
|
+
${chalk19.cyan("https://prjct.app")}
|
|
28661
28625
|
`);
|
|
28662
28626
|
} else {
|
|
28663
28627
|
const configPath = path59.join(os16.homedir(), ".prjct-cli", "config", "installed-editors.json");
|
|
28664
28628
|
const routersInstalled = checkRoutersInstalled();
|
|
28665
28629
|
if (!fs50.existsSync(configPath) || !routersInstalled) {
|
|
28666
28630
|
console.log(`
|
|
28667
|
-
${
|
|
28631
|
+
${chalk19.cyan.bold(" Welcome to prjct!")}
|
|
28668
28632
|
|
|
28669
|
-
Run ${
|
|
28633
|
+
Run ${chalk19.bold("prjct start")} to configure your AI providers.
|
|
28670
28634
|
|
|
28671
|
-
${
|
|
28672
|
-
Claude Code, Gemini CLI, or both
|
|
28635
|
+
${chalk19.dim(`This is a one-time setup that lets you choose between
|
|
28636
|
+
Claude Code, Gemini CLI, or both.`)}
|
|
28673
28637
|
`);
|
|
28674
28638
|
process.exitCode = 0;
|
|
28675
28639
|
} else {
|
|
@@ -28677,7 +28641,7 @@ ${CYAN4}${BOLD4} Welcome to prjct!${RESET6}
|
|
|
28677
28641
|
const lastVersion = await editors_config_default.getLastVersion();
|
|
28678
28642
|
if (lastVersion && lastVersion !== VERSION) {
|
|
28679
28643
|
console.log(`
|
|
28680
|
-
${
|
|
28644
|
+
${chalk19.yellow("\u2139")} Updating prjct v${lastVersion} \u2192 v${VERSION}...
|
|
28681
28645
|
`);
|
|
28682
28646
|
const { default: setup2 } = await Promise.resolve().then(() => (init_setup(), setup_exports));
|
|
28683
28647
|
await setup2.run();
|