rrce-workflow 0.2.65 → 0.2.67

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.
Files changed (3) hide show
  1. package/README.md +31 -1
  2. package/dist/index.js +390 -127
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -28,7 +28,7 @@ npx rrce-workflow mcp
28
28
  From this dashboard, you can:
29
29
  - **Manage Projects**: Toggle which projects are exposed to your AI agents.
30
30
  - **Monitor Status**: See the health of the MCP server and RAG indexing.
31
- - **Install to IDE**: Automatically configure **VSCode** or **Claude Desktop** to use the RRCE MCP server.
31
+ - **Install to IDE**: Automatically configure **VSCode**, **Claude Desktop**, **Antigravity IDE**, or **OpenCode** to use the RRCE MCP server.
32
32
  - **View Logs**: Debug agent interactions in real-time.
33
33
 
34
34
  ### 2. Setting Up a Project
@@ -64,6 +64,22 @@ RRCE-Workflow uses the [Model Context Protocol](https://modelcontextprotocol.io/
64
64
 
65
65
  The easiest way to connect is via the TUI (`npx rrce-workflow mcp` -> **Install** tab), but you can also configure it manually.
66
66
 
67
+ #### OpenCode
68
+
69
+ Add to `~/.config/opencode/opencode.json`:
70
+ ```json
71
+ {
72
+ "$schema": "https://opencode.ai/config.json",
73
+ "mcp": {
74
+ "rrce": {
75
+ "type": "local",
76
+ "command": ["npx", "-y", "rrce-workflow", "mcp", "start"],
77
+ "enabled": true
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
67
83
  #### VSCode (with MCP Extension)
68
84
  Add to `.vscode/mcp.json`:
69
85
  ```json
@@ -91,6 +107,20 @@ Add to `~/.config/claude/claude_desktop_config.json`:
91
107
  }
92
108
  ```
93
109
 
110
+ ### Uninstalling MCP Integration
111
+
112
+ To remove RRCE from your IDEs:
113
+
114
+ ```bash
115
+ npx rrce-workflow mcp uninstall
116
+ ```
117
+
118
+ This will:
119
+ - Show you which IDEs currently have RRCE installed
120
+ - Let you select which ones to remove it from
121
+ - Ask for confirmation before removal
122
+ - Cleanly remove RRCE configuration while preserving other MCP servers and settings
123
+
94
124
  ---
95
125
 
96
126
  ## 📂 Storage Modes
package/dist/index.js CHANGED
@@ -2502,7 +2502,8 @@ function checkInstallStatus(workspacePath) {
2502
2502
  antigravity: checkAntigravityConfig(),
2503
2503
  claude: checkClaudeConfig(),
2504
2504
  vscodeGlobal: checkVSCodeGlobalConfig(),
2505
- vscodeWorkspace: workspacePath ? checkVSCodeWorkspaceConfig(workspacePath) : false
2505
+ vscodeWorkspace: workspacePath ? checkVSCodeWorkspaceConfig(workspacePath) : false,
2506
+ opencode: checkOpenCodeConfig()
2506
2507
  };
2507
2508
  }
2508
2509
  function checkAntigravityConfig() {
@@ -2542,9 +2543,18 @@ function checkVSCodeWorkspaceConfig(workspacePath) {
2542
2543
  return false;
2543
2544
  }
2544
2545
  }
2546
+ function checkOpenCodeConfig() {
2547
+ if (!fs14.existsSync(OPENCODE_CONFIG)) return false;
2548
+ try {
2549
+ const content = JSON.parse(fs14.readFileSync(OPENCODE_CONFIG, "utf-8"));
2550
+ return !!content.mcp?.["rrce"];
2551
+ } catch {
2552
+ return false;
2553
+ }
2554
+ }
2545
2555
  function isInstalledAnywhere(workspacePath) {
2546
2556
  const status = checkInstallStatus(workspacePath);
2547
- return status.antigravity || status.claude || status.vscodeGlobal || status.vscodeWorkspace;
2557
+ return status.antigravity || status.claude || status.vscodeGlobal || status.vscodeWorkspace || status.opencode;
2548
2558
  }
2549
2559
  function installToConfig(target, workspacePath) {
2550
2560
  switch (target) {
@@ -2556,6 +2566,8 @@ function installToConfig(target, workspacePath) {
2556
2566
  return installToVSCodeGlobal();
2557
2567
  case "vscode-workspace":
2558
2568
  return workspacePath ? installToVSCodeWorkspace(workspacePath) : false;
2569
+ case "opencode":
2570
+ return installToOpenCode();
2559
2571
  default:
2560
2572
  return false;
2561
2573
  }
@@ -2657,6 +2669,147 @@ function installToVSCodeWorkspace(workspacePath) {
2657
2669
  return false;
2658
2670
  }
2659
2671
  }
2672
+ function installToOpenCode() {
2673
+ const dir = path16.dirname(OPENCODE_CONFIG);
2674
+ if (!fs14.existsSync(dir)) {
2675
+ fs14.mkdirSync(dir, { recursive: true });
2676
+ }
2677
+ let config = {
2678
+ $schema: "https://opencode.ai/config.json"
2679
+ };
2680
+ if (fs14.existsSync(OPENCODE_CONFIG)) {
2681
+ try {
2682
+ config = JSON.parse(fs14.readFileSync(OPENCODE_CONFIG, "utf-8"));
2683
+ } catch (error) {
2684
+ console.error("Warning: Could not parse existing OpenCode config, creating fresh config");
2685
+ }
2686
+ }
2687
+ if (!config.mcp) config.mcp = {};
2688
+ config.mcp["rrce"] = {
2689
+ type: "local",
2690
+ command: ["npx", "-y", "rrce-workflow", "mcp", "start"],
2691
+ enabled: true
2692
+ };
2693
+ try {
2694
+ fs14.writeFileSync(OPENCODE_CONFIG, JSON.stringify(config, null, 2) + "\n");
2695
+ return true;
2696
+ } catch (error) {
2697
+ console.error("Failed to write OpenCode config:", error instanceof Error ? error.message : String(error));
2698
+ return false;
2699
+ }
2700
+ }
2701
+ function uninstallFromOpenCode() {
2702
+ if (!fs14.existsSync(OPENCODE_CONFIG)) {
2703
+ console.error("OpenCode config not found");
2704
+ return false;
2705
+ }
2706
+ try {
2707
+ const config = JSON.parse(fs14.readFileSync(OPENCODE_CONFIG, "utf-8"));
2708
+ if (!config.mcp?.["rrce"]) {
2709
+ console.warn("RRCE not found in OpenCode config");
2710
+ return false;
2711
+ }
2712
+ delete config.mcp["rrce"];
2713
+ fs14.writeFileSync(OPENCODE_CONFIG, JSON.stringify(config, null, 2) + "\n");
2714
+ return true;
2715
+ } catch (error) {
2716
+ console.error("Failed to uninstall from OpenCode:", error instanceof Error ? error.message : String(error));
2717
+ return false;
2718
+ }
2719
+ }
2720
+ function uninstallFromAntigravity() {
2721
+ if (!fs14.existsSync(ANTIGRAVITY_CONFIG)) {
2722
+ console.error("Antigravity config not found");
2723
+ return false;
2724
+ }
2725
+ try {
2726
+ const config = JSON.parse(fs14.readFileSync(ANTIGRAVITY_CONFIG, "utf-8"));
2727
+ if (!config.mcpServers?.["rrce"]) {
2728
+ console.warn("RRCE not found in Antigravity config");
2729
+ return false;
2730
+ }
2731
+ delete config.mcpServers["rrce"];
2732
+ fs14.writeFileSync(ANTIGRAVITY_CONFIG, JSON.stringify(config, null, 2) + "\n");
2733
+ return true;
2734
+ } catch (error) {
2735
+ console.error("Failed to uninstall from Antigravity:", error instanceof Error ? error.message : String(error));
2736
+ return false;
2737
+ }
2738
+ }
2739
+ function uninstallFromClaude() {
2740
+ if (!fs14.existsSync(CLAUDE_CONFIG)) {
2741
+ console.error("Claude Desktop config not found");
2742
+ return false;
2743
+ }
2744
+ try {
2745
+ const config = JSON.parse(fs14.readFileSync(CLAUDE_CONFIG, "utf-8"));
2746
+ if (!config.mcpServers?.["rrce"]) {
2747
+ console.warn("RRCE not found in Claude Desktop config");
2748
+ return false;
2749
+ }
2750
+ delete config.mcpServers["rrce"];
2751
+ fs14.writeFileSync(CLAUDE_CONFIG, JSON.stringify(config, null, 2) + "\n");
2752
+ return true;
2753
+ } catch (error) {
2754
+ console.error("Failed to uninstall from Claude Desktop:", error instanceof Error ? error.message : String(error));
2755
+ return false;
2756
+ }
2757
+ }
2758
+ function uninstallFromVSCodeGlobal() {
2759
+ if (!fs14.existsSync(VSCODE_GLOBAL_CONFIG)) {
2760
+ console.error("VSCode global config not found");
2761
+ return false;
2762
+ }
2763
+ try {
2764
+ const settings = JSON.parse(fs14.readFileSync(VSCODE_GLOBAL_CONFIG, "utf-8"));
2765
+ if (!settings["mcp.servers"]?.["rrce"]) {
2766
+ console.warn("RRCE not found in VSCode global settings");
2767
+ return false;
2768
+ }
2769
+ delete settings["mcp.servers"]["rrce"];
2770
+ fs14.writeFileSync(VSCODE_GLOBAL_CONFIG, JSON.stringify(settings, null, 2) + "\n");
2771
+ return true;
2772
+ } catch (error) {
2773
+ console.error("Failed to uninstall from VSCode (Global):", error instanceof Error ? error.message : String(error));
2774
+ return false;
2775
+ }
2776
+ }
2777
+ function uninstallFromVSCodeWorkspace(workspacePath) {
2778
+ const configPath = path16.join(workspacePath, ".vscode", "mcp.json");
2779
+ if (!fs14.existsSync(configPath)) {
2780
+ console.error("VSCode workspace config not found");
2781
+ return false;
2782
+ }
2783
+ try {
2784
+ const config = JSON.parse(fs14.readFileSync(configPath, "utf-8"));
2785
+ if (!config.servers?.["rrce"]) {
2786
+ console.warn("RRCE not found in VSCode workspace config");
2787
+ return false;
2788
+ }
2789
+ delete config.servers["rrce"];
2790
+ fs14.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
2791
+ return true;
2792
+ } catch (error) {
2793
+ console.error("Failed to uninstall from VSCode (Workspace):", error instanceof Error ? error.message : String(error));
2794
+ return false;
2795
+ }
2796
+ }
2797
+ function uninstallFromConfig(target, workspacePath) {
2798
+ switch (target) {
2799
+ case "antigravity":
2800
+ return uninstallFromAntigravity();
2801
+ case "claude":
2802
+ return uninstallFromClaude();
2803
+ case "vscode-global":
2804
+ return uninstallFromVSCodeGlobal();
2805
+ case "vscode-workspace":
2806
+ return workspacePath ? uninstallFromVSCodeWorkspace(workspacePath) : false;
2807
+ case "opencode":
2808
+ return uninstallFromOpenCode();
2809
+ default:
2810
+ return false;
2811
+ }
2812
+ }
2660
2813
  function getTargetLabel(target) {
2661
2814
  switch (target) {
2662
2815
  case "antigravity":
@@ -2667,17 +2820,20 @@ function getTargetLabel(target) {
2667
2820
  return "VSCode (Global)";
2668
2821
  case "vscode-workspace":
2669
2822
  return "VSCode (Workspace)";
2823
+ case "opencode":
2824
+ return "OpenCode";
2670
2825
  default:
2671
2826
  return target;
2672
2827
  }
2673
2828
  }
2674
- var ANTIGRAVITY_CONFIG, CLAUDE_CONFIG, VSCODE_GLOBAL_CONFIG;
2829
+ var ANTIGRAVITY_CONFIG, CLAUDE_CONFIG, VSCODE_GLOBAL_CONFIG, OPENCODE_CONFIG;
2675
2830
  var init_install = __esm({
2676
2831
  "src/mcp/install.ts"() {
2677
2832
  "use strict";
2678
2833
  ANTIGRAVITY_CONFIG = path16.join(os.homedir(), ".gemini/antigravity/mcp_config.json");
2679
2834
  CLAUDE_CONFIG = path16.join(os.homedir(), ".config/claude/claude_desktop_config.json");
2680
2835
  VSCODE_GLOBAL_CONFIG = path16.join(os.homedir(), ".config/Code/User/settings.json");
2836
+ OPENCODE_CONFIG = path16.join(os.homedir(), ".config/opencode/opencode.json");
2681
2837
  }
2682
2838
  });
2683
2839
 
@@ -2814,6 +2970,11 @@ import pc6 from "picocolors";
2814
2970
  async function runInstallWizard(workspacePath) {
2815
2971
  const status = checkInstallStatus(workspacePath);
2816
2972
  const options = [
2973
+ {
2974
+ value: "opencode",
2975
+ label: "OpenCode",
2976
+ hint: status.opencode ? pc6.green("\u2713 Installed") : pc6.dim("Not installed")
2977
+ },
2817
2978
  {
2818
2979
  value: "antigravity",
2819
2980
  label: "Antigravity IDE",
@@ -2839,6 +3000,7 @@ async function runInstallWizard(workspacePath) {
2839
3000
  message: "Select where to install RRCE MCP Server:",
2840
3001
  options,
2841
3002
  initialValues: [
3003
+ ...status.opencode ? ["opencode"] : [],
2842
3004
  ...status.antigravity ? ["antigravity"] : [],
2843
3005
  ...status.vscodeGlobal ? ["vscode-global"] : [],
2844
3006
  ...status.vscodeWorkspace ? ["vscode-workspace"] : [],
@@ -3105,6 +3267,11 @@ var init_InstallWizard = __esm({
3105
3267
  const [status, setStatus] = useState3(checkInstallStatus(workspacePath));
3106
3268
  const [message, setMessage] = useState3("");
3107
3269
  const options = [
3270
+ {
3271
+ value: "opencode",
3272
+ label: "OpenCode",
3273
+ hint: status.opencode ? "INSTALLED" : "Not installed"
3274
+ },
3108
3275
  {
3109
3276
  value: "antigravity",
3110
3277
  label: "Antigravity IDE",
@@ -3127,6 +3294,7 @@ var init_InstallWizard = __esm({
3127
3294
  }
3128
3295
  ];
3129
3296
  const initialSelected = [
3297
+ ...status.opencode ? ["opencode"] : [],
3130
3298
  ...status.antigravity ? ["antigravity"] : [],
3131
3299
  ...status.vscodeGlobal ? ["vscode-global"] : [],
3132
3300
  ...status.vscodeWorkspace ? ["vscode-workspace"] : [],
@@ -3185,7 +3353,7 @@ var init_InstallView = __esm({
3185
3353
  const workspacePath = detectWorkspaceRoot();
3186
3354
  return /* @__PURE__ */ jsxs5(Box6, { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: "magenta", flexGrow: 1, children: [
3187
3355
  /* @__PURE__ */ jsx6(Text6, { bold: true, color: "magenta", children: " Installation & Configuration " }),
3188
- /* @__PURE__ */ jsx6(Text6, { color: "dim", children: " Configure IDE integrations for VSCode, Claude, and Antigravity." }),
3356
+ /* @__PURE__ */ jsx6(Text6, { color: "dim", children: " Configure IDE integrations for OpenCode, VSCode, Claude, and Antigravity." }),
3189
3357
  /* @__PURE__ */ jsx6(Box6, { marginTop: 1, flexDirection: "column", children: /* @__PURE__ */ jsx6(
3190
3358
  InstallWizard,
3191
3359
  {
@@ -3689,47 +3857,138 @@ var init_status = __esm({
3689
3857
  }
3690
3858
  });
3691
3859
 
3692
- // src/mcp/commands/help.ts
3693
- import { note as note6 } from "@clack/prompts";
3860
+ // src/mcp/commands/uninstall-wizard.ts
3861
+ import { multiselect as multiselect4, note as note6, isCancel as isCancel6, confirm as confirm4 } from "@clack/prompts";
3694
3862
  import pc8 from "picocolors";
3863
+ async function runUninstallWizard(workspacePath) {
3864
+ const status = checkInstallStatus(workspacePath);
3865
+ const installedOptions = [];
3866
+ if (status.opencode) {
3867
+ installedOptions.push({
3868
+ value: "opencode",
3869
+ label: "OpenCode",
3870
+ hint: pc8.green("Currently installed")
3871
+ });
3872
+ }
3873
+ if (status.antigravity) {
3874
+ installedOptions.push({
3875
+ value: "antigravity",
3876
+ label: "Antigravity IDE",
3877
+ hint: pc8.green("Currently installed")
3878
+ });
3879
+ }
3880
+ if (status.vscodeGlobal) {
3881
+ installedOptions.push({
3882
+ value: "vscode-global",
3883
+ label: "VSCode (Global Settings)",
3884
+ hint: pc8.green("Currently installed")
3885
+ });
3886
+ }
3887
+ if (status.vscodeWorkspace) {
3888
+ installedOptions.push({
3889
+ value: "vscode-workspace",
3890
+ label: "VSCode (Workspace Config)",
3891
+ hint: pc8.green("Currently installed")
3892
+ });
3893
+ }
3894
+ if (status.claude) {
3895
+ installedOptions.push({
3896
+ value: "claude",
3897
+ label: "Claude Desktop",
3898
+ hint: pc8.green("Currently installed")
3899
+ });
3900
+ }
3901
+ if (installedOptions.length === 0) {
3902
+ note6(
3903
+ pc8.yellow("RRCE MCP Server is not installed in any supported IDE."),
3904
+ "Nothing to Uninstall"
3905
+ );
3906
+ return;
3907
+ }
3908
+ const selected = await multiselect4({
3909
+ message: "Select IDEs to remove RRCE MCP Server from:",
3910
+ options: installedOptions,
3911
+ required: false
3912
+ });
3913
+ if (isCancel6(selected) || selected.length === 0) {
3914
+ return;
3915
+ }
3916
+ const confirmed = await confirm4({
3917
+ message: `Remove RRCE from ${selected.length} IDE(s)?`,
3918
+ initialValue: false
3919
+ });
3920
+ if (isCancel6(confirmed) || !confirmed) {
3921
+ note6(pc8.dim("Uninstall cancelled."), "Cancelled");
3922
+ return;
3923
+ }
3924
+ const targets = selected;
3925
+ const results = [];
3926
+ let successCount = 0;
3927
+ let failureCount = 0;
3928
+ for (const target of targets) {
3929
+ const success = uninstallFromConfig(target, workspacePath);
3930
+ const label = getTargetLabel(target);
3931
+ if (success) {
3932
+ results.push(`${label}: ${pc8.green("\u2713 Removed")}`);
3933
+ successCount++;
3934
+ } else {
3935
+ results.push(`${label}: ${pc8.red("\u2717 Failed")}`);
3936
+ failureCount++;
3937
+ }
3938
+ }
3939
+ if (results.length > 0) {
3940
+ const summary = failureCount > 0 ? `${successCount} succeeded, ${failureCount} failed` : `All ${successCount} uninstalled successfully`;
3941
+ note6(results.join("\n"), `Uninstall Results (${summary})`);
3942
+ }
3943
+ }
3944
+ var init_uninstall_wizard = __esm({
3945
+ "src/mcp/commands/uninstall-wizard.ts"() {
3946
+ "use strict";
3947
+ init_install();
3948
+ }
3949
+ });
3950
+
3951
+ // src/mcp/commands/help.ts
3952
+ import { note as note7 } from "@clack/prompts";
3953
+ import pc9 from "picocolors";
3695
3954
  function showHelp() {
3696
3955
  const help = `
3697
- ${pc8.bold("RRCE MCP Hub")} - Cross-project AI assistant server
3956
+ ${pc9.bold("RRCE MCP Hub")} - Cross-project AI assistant server
3698
3957
 
3699
- ${pc8.bold("ABOUT")}
3958
+ ${pc9.bold("ABOUT")}
3700
3959
  MCP (Model Context Protocol) allows AI assistants like Claude to
3701
3960
  access your project knowledge in real-time. The RRCE MCP Hub
3702
3961
  provides a central server that exposes selected projects.
3703
3962
 
3704
- ${pc8.bold("MENU OPTIONS")}
3705
- ${pc8.cyan("Start MCP server")} Start the server for AI access
3706
- ${pc8.cyan("Configure projects")} Choose which projects to expose
3707
- ${pc8.cyan("Install to IDE")} Add to Antigravity, VSCode, or Claude
3708
- ${pc8.cyan("View status")} See which projects are exposed
3963
+ ${pc9.bold("MENU OPTIONS")}
3964
+ ${pc9.cyan("Start MCP server")} Start the server for AI access
3965
+ ${pc9.cyan("Configure projects")} Choose which projects to expose
3966
+ ${pc9.cyan("Install to IDE")} Add to Antigravity, VSCode, or Claude
3967
+ ${pc9.cyan("View status")} See which projects are exposed
3709
3968
 
3710
- ${pc8.bold("DIRECT COMMANDS")}
3711
- ${pc8.dim("rrce-workflow mcp start")} Start server directly
3712
- ${pc8.dim("rrce-workflow mcp stop")} Stop server directly
3713
- ${pc8.dim("rrce-workflow mcp status")} Show status directly
3714
- ${pc8.dim("rrce-workflow mcp help")} Show this help
3969
+ ${pc9.bold("DIRECT COMMANDS")}
3970
+ ${pc9.dim("rrce-workflow mcp start")} Start server directly
3971
+ ${pc9.dim("rrce-workflow mcp stop")} Stop server directly
3972
+ ${pc9.dim("rrce-workflow mcp status")} Show status directly
3973
+ ${pc9.dim("rrce-workflow mcp help")} Show this help
3715
3974
 
3716
- ${pc8.bold("IDE INSTALLATION")}
3717
- ${pc8.cyan("Antigravity")} ~/.gemini/antigravity/mcp_config.json
3718
- ${pc8.cyan("VSCode Global")} ~/.config/Code/User/settings.json
3719
- ${pc8.cyan("VSCode Workspace")} .vscode/mcp.json
3720
- ${pc8.cyan("Claude Desktop")} ~/.config/claude/claude_desktop_config.json
3975
+ ${pc9.bold("IDE INSTALLATION")}
3976
+ ${pc9.cyan("Antigravity")} ~/.gemini/antigravity/mcp_config.json
3977
+ ${pc9.cyan("VSCode Global")} ~/.config/Code/User/settings.json
3978
+ ${pc9.cyan("VSCode Workspace")} .vscode/mcp.json
3979
+ ${pc9.cyan("Claude Desktop")} ~/.config/claude/claude_desktop_config.json
3721
3980
 
3722
- ${pc8.bold("SERVER COMMANDS")} (while running)
3723
- ${pc8.cyan("q")} Stop and quit ${pc8.cyan("p")} Reconfigure projects
3724
- ${pc8.cyan("i")} Install to IDE ${pc8.cyan("r")} Reload config
3725
- ${pc8.cyan("c")} Clear logs ${pc8.cyan("?")} Show help
3981
+ ${pc9.bold("SERVER COMMANDS")} (while running)
3982
+ ${pc9.cyan("q")} Stop and quit ${pc9.cyan("p")} Reconfigure projects
3983
+ ${pc9.cyan("i")} Install to IDE ${pc9.cyan("r")} Reload config
3984
+ ${pc9.cyan("c")} Clear logs ${pc9.cyan("?")} Show help
3726
3985
 
3727
- ${pc8.bold("RESOURCES EXPOSED")}
3728
- ${pc8.cyan("rrce://projects")} List all exposed projects
3729
- ${pc8.cyan("rrce://projects/{name}/context")} Get project context
3730
- ${pc8.cyan("rrce://projects/{name}/tasks")} Get project tasks
3986
+ ${pc9.bold("RESOURCES EXPOSED")}
3987
+ ${pc9.cyan("rrce://projects")} List all exposed projects
3988
+ ${pc9.cyan("rrce://projects/{name}/context")} Get project context
3989
+ ${pc9.cyan("rrce://projects/{name}/tasks")} Get project tasks
3731
3990
  `;
3732
- note6(help.trim(), "Help");
3991
+ note7(help.trim(), "Help");
3733
3992
  }
3734
3993
  var init_help = __esm({
3735
3994
  "src/mcp/commands/help.ts"() {
@@ -3745,9 +4004,10 @@ __export(mcp_exports, {
3745
4004
  handleStartServer: () => handleStartServer,
3746
4005
  runMCP: () => runMCP
3747
4006
  });
3748
- import { intro, outro, confirm as confirm4, note as note7, isCancel as isCancel6 } from "@clack/prompts";
3749
- import pc9 from "picocolors";
4007
+ import { intro, outro, confirm as confirm5, note as note8, isCancel as isCancel7 } from "@clack/prompts";
4008
+ import pc10 from "picocolors";
3750
4009
  async function runMCP(subcommand2) {
4010
+ const workspacePath = detectWorkspaceRoot();
3751
4011
  if (subcommand2) {
3752
4012
  switch (subcommand2) {
3753
4013
  case "start":
@@ -3765,6 +4025,9 @@ async function runMCP(subcommand2) {
3765
4025
  case "status":
3766
4026
  await handleShowStatus();
3767
4027
  return;
4028
+ case "uninstall":
4029
+ await runUninstallWizard(workspacePath);
4030
+ return;
3768
4031
  case "help":
3769
4032
  showHelp();
3770
4033
  return;
@@ -3775,39 +4038,38 @@ async function runMCP(subcommand2) {
3775
4038
  break;
3776
4039
  }
3777
4040
  }
3778
- const workspacePath = detectWorkspaceRoot();
3779
4041
  const globalPathCheck = await ensureMCPGlobalPath();
3780
4042
  if (!globalPathCheck.configured) {
3781
- intro(pc9.bgCyan(pc9.black(" MCP Setup ")));
4043
+ intro(pc10.bgCyan(pc10.black(" MCP Setup ")));
3782
4044
  const configured = await handleConfigureGlobalPath();
3783
4045
  if (!configured) {
3784
- outro(pc9.yellow("MCP requires a global storage path. Setup cancelled."));
4046
+ outro(pc10.yellow("MCP requires a global storage path. Setup cancelled."));
3785
4047
  return;
3786
4048
  }
3787
4049
  }
3788
4050
  const installed = isInstalledAnywhere(workspacePath);
3789
4051
  if (!installed) {
3790
- intro(pc9.bgCyan(pc9.black(" Welcome to MCP Hub ")));
3791
- note7(
3792
- `${pc9.bold("Set up Model Context Protocol")}
4052
+ intro(pc10.bgCyan(pc10.black(" Welcome to MCP Hub ")));
4053
+ note8(
4054
+ `${pc10.bold("Set up Model Context Protocol")}
3793
4055
  Allow AI assistants to access your project context.`,
3794
4056
  "Getting Started"
3795
4057
  );
3796
- const shouldInstall = await confirm4({
4058
+ const shouldInstall = await confirm5({
3797
4059
  message: "Install MCP server integrations now?",
3798
4060
  initialValue: true
3799
4061
  });
3800
- if (shouldInstall && !isCancel6(shouldInstall)) {
4062
+ if (shouldInstall && !isCancel7(shouldInstall)) {
3801
4063
  await runInstallWizard(workspacePath);
3802
- const shouldStart = await confirm4({
4064
+ const shouldStart = await confirm5({
3803
4065
  message: "Start the MCP Dashboard?",
3804
4066
  initialValue: true
3805
4067
  });
3806
- if (shouldStart && !isCancel6(shouldStart)) {
4068
+ if (shouldStart && !isCancel7(shouldStart)) {
3807
4069
  await handleStartServer();
3808
4070
  }
3809
4071
  } else {
3810
- outro(pc9.dim('Setup skipped. Run "npx rrce-workflow mcp" later to restart.'));
4072
+ outro(pc10.dim('Setup skipped. Run "npx rrce-workflow mcp" later to restart.'));
3811
4073
  }
3812
4074
  return;
3813
4075
  }
@@ -3815,18 +4077,18 @@ Allow AI assistants to access your project context.`,
3815
4077
  await handleStartServer();
3816
4078
  } catch (err) {
3817
4079
  console.error(err);
3818
- outro(pc9.red("Failed to launch MCP Dashboard"));
4080
+ outro(pc10.red("Failed to launch MCP Dashboard"));
3819
4081
  }
3820
4082
  }
3821
4083
  async function handleStopServer() {
3822
4084
  const { stopMCPServer: stopMCPServer2 } = await Promise.resolve().then(() => (init_server(), server_exports));
3823
4085
  const status = getMCPServerStatus();
3824
4086
  if (!status.running) {
3825
- console.log(pc9.dim("MCP server is already stopped."));
4087
+ console.log(pc10.dim("MCP server is already stopped."));
3826
4088
  return;
3827
4089
  }
3828
4090
  stopMCPServer2();
3829
- console.log(pc9.green("MCP server stopped."));
4091
+ console.log(pc10.green("MCP server stopped."));
3830
4092
  }
3831
4093
  var init_mcp = __esm({
3832
4094
  "src/mcp/index.ts"() {
@@ -3839,13 +4101,14 @@ var init_mcp = __esm({
3839
4101
  init_configure();
3840
4102
  init_status();
3841
4103
  init_install_wizard();
4104
+ init_uninstall_wizard();
3842
4105
  init_help();
3843
4106
  }
3844
4107
  });
3845
4108
 
3846
4109
  // src/commands/wizard/setup-flow.ts
3847
- import { spinner as spinner3, note as note8, outro as outro2, cancel as cancel3, isCancel as isCancel7, confirm as confirm5, select as select3 } from "@clack/prompts";
3848
- import pc10 from "picocolors";
4110
+ import { spinner as spinner3, note as note9, outro as outro2, cancel as cancel3, isCancel as isCancel8, confirm as confirm6, select as select3 } from "@clack/prompts";
4111
+ import pc11 from "picocolors";
3849
4112
  async function runExpressSetup(workspacePath, workspaceName, existingProjects, s) {
3850
4113
  const storageModeResult = await select3({
3851
4114
  message: "Where should workflow data be stored?",
@@ -3855,7 +4118,7 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
3855
4118
  ],
3856
4119
  initialValue: "global"
3857
4120
  });
3858
- if (isCancel7(storageModeResult)) {
4121
+ if (isCancel8(storageModeResult)) {
3859
4122
  cancel3("Setup cancelled.");
3860
4123
  process.exit(0);
3861
4124
  }
@@ -3868,8 +4131,8 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
3868
4131
  process.exit(0);
3869
4132
  }
3870
4133
  }
3871
- note8(
3872
- `${pc10.bold("Express Setup will configure:")}
4134
+ note9(
4135
+ `${pc11.bold("Express Setup will configure:")}
3873
4136
  \u2022 Storage: ${storageMode === "global" ? "Global" : "Workspace"}
3874
4137
  \u2022 MCP Server: Enabled
3875
4138
  \u2022 Semantic Search (RAG): Enabled
@@ -3877,11 +4140,11 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
3877
4140
  \u2022 AI Tools: All available`,
3878
4141
  "Configuration Preview"
3879
4142
  );
3880
- const confirmed = await confirm5({
4143
+ const confirmed = await confirm6({
3881
4144
  message: "Proceed with express setup?",
3882
4145
  initialValue: true
3883
4146
  });
3884
- if (isCancel7(confirmed) || !confirmed) {
4147
+ if (isCancel8(confirmed) || !confirmed) {
3885
4148
  cancel3("Setup cancelled.");
3886
4149
  process.exit(0);
3887
4150
  }
@@ -3895,15 +4158,15 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
3895
4158
  enableRAG: true
3896
4159
  };
3897
4160
  await executeSetup(config, workspacePath, workspaceName, existingProjects, s);
3898
- const startMCP = await confirm5({
4161
+ const startMCP = await confirm6({
3899
4162
  message: "Start MCP server now?",
3900
4163
  initialValue: true
3901
4164
  });
3902
- if (startMCP && !isCancel7(startMCP)) {
4165
+ if (startMCP && !isCancel8(startMCP)) {
3903
4166
  const { runMCP: runMCP2 } = await Promise.resolve().then(() => (init_mcp(), mcp_exports));
3904
4167
  await runMCP2();
3905
4168
  } else {
3906
- outro2(pc10.green(`\u2713 Express setup complete! Run ${pc10.cyan("npx rrce-workflow mcp")} to start the server.`));
4169
+ outro2(pc11.green(`\u2713 Express setup complete! Run ${pc11.cyan("npx rrce-workflow mcp")} to start the server.`));
3907
4170
  }
3908
4171
  }
3909
4172
  async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
@@ -3916,7 +4179,7 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
3916
4179
  ],
3917
4180
  initialValue: "express"
3918
4181
  });
3919
- if (isCancel7(setupModeResult)) {
4182
+ if (isCancel8(setupModeResult)) {
3920
4183
  cancel3("Setup cancelled.");
3921
4184
  process.exit(0);
3922
4185
  }
@@ -3979,44 +4242,44 @@ async function executeSetup(config, workspacePath, workspaceName, allProjects, s
3979
4242
  s.stop("Configuration generated");
3980
4243
  const dataSummary = getDataPaths(config.storageMode, workspaceName, workspacePath, config.globalPath);
3981
4244
  const summary = [
3982
- `${pc10.green("\u2713")} Data stored at: ${pc10.dim(dataSummary[0])}`,
3983
- config.tools.length > 0 ? `${pc10.green("\u2713")} Tools: ${config.tools.join(", ")}` : null,
3984
- config.exposeToMCP ? `${pc10.green("\u2713")} MCP server configured` : null,
3985
- config.enableRAG ? `${pc10.green("\u2713")} Semantic Search enabled` : null,
3986
- config.linkedProjects.length > 0 ? `${pc10.green("\u2713")} Linked ${config.linkedProjects.length} project(s)` : null
4245
+ `${pc11.green("\u2713")} Data stored at: ${pc11.dim(dataSummary[0])}`,
4246
+ config.tools.length > 0 ? `${pc11.green("\u2713")} Tools: ${config.tools.join(", ")}` : null,
4247
+ config.exposeToMCP ? `${pc11.green("\u2713")} MCP server configured` : null,
4248
+ config.enableRAG ? `${pc11.green("\u2713")} Semantic Search enabled` : null,
4249
+ config.linkedProjects.length > 0 ? `${pc11.green("\u2713")} Linked ${config.linkedProjects.length} project(s)` : null
3987
4250
  ].filter(Boolean);
3988
- note8(summary.join("\n"), "Setup Complete");
4251
+ note9(summary.join("\n"), "Setup Complete");
3989
4252
  } catch (error) {
3990
4253
  s.stop("Error occurred");
3991
4254
  cancel3(
3992
4255
  `Setup failed: ${error instanceof Error ? error.message : String(error)}
3993
4256
 
3994
- ${pc10.dim("Tip: You can re-run the wizard to try again.")}`
4257
+ ${pc11.dim("Tip: You can re-run the wizard to try again.")}`
3995
4258
  );
3996
4259
  process.exit(1);
3997
4260
  }
3998
4261
  }
3999
4262
  async function handlePostSetup(config, workspacePath, workspaceName, linkedProjects) {
4000
4263
  if (config.exposeToMCP) {
4001
- const shouldConfigureMCP = await confirm5({
4264
+ const shouldConfigureMCP = await confirm6({
4002
4265
  message: "Would you like to start the MCP server now?",
4003
4266
  initialValue: true
4004
4267
  });
4005
- if (shouldConfigureMCP && !isCancel7(shouldConfigureMCP)) {
4268
+ if (shouldConfigureMCP && !isCancel8(shouldConfigureMCP)) {
4006
4269
  const { runMCP: runMCP2 } = await Promise.resolve().then(() => (init_mcp(), mcp_exports));
4007
4270
  await runMCP2();
4008
4271
  } else {
4009
4272
  if (linkedProjects.length > 0) {
4010
- outro2(pc10.green(`\u2713 Setup complete! Open ${pc10.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
4273
+ outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
4011
4274
  } else {
4012
- outro2(pc10.green(`\u2713 Setup complete! Run ${pc10.cyan("npx rrce-workflow mcp")} to start the server.`));
4275
+ outro2(pc11.green(`\u2713 Setup complete! Run ${pc11.cyan("npx rrce-workflow mcp")} to start the server.`));
4013
4276
  }
4014
4277
  }
4015
4278
  } else {
4016
4279
  if (linkedProjects.length > 0) {
4017
- outro2(pc10.green(`\u2713 Setup complete! Open ${pc10.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
4280
+ outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
4018
4281
  } else {
4019
- outro2(pc10.green(`\u2713 Setup complete! Your agents are ready to use.`));
4282
+ outro2(pc11.green(`\u2713 Setup complete! Your agents are ready to use.`));
4020
4283
  }
4021
4284
  }
4022
4285
  }
@@ -4033,8 +4296,8 @@ var init_setup_flow = __esm({
4033
4296
  });
4034
4297
 
4035
4298
  // src/commands/wizard/link-flow.ts
4036
- import { multiselect as multiselect4, spinner as spinner4, note as note9, outro as outro3, cancel as cancel4, isCancel as isCancel8, confirm as confirm6 } from "@clack/prompts";
4037
- import pc11 from "picocolors";
4299
+ import { multiselect as multiselect5, spinner as spinner4, note as note10, outro as outro3, cancel as cancel4, isCancel as isCancel9, confirm as confirm7 } from "@clack/prompts";
4300
+ import pc12 from "picocolors";
4038
4301
  import * as fs16 from "fs";
4039
4302
  async function runLinkProjectsFlow(workspacePath, workspaceName) {
4040
4303
  const projects = scanForProjects({
@@ -4042,23 +4305,23 @@ async function runLinkProjectsFlow(workspacePath, workspaceName) {
4042
4305
  workspacePath
4043
4306
  });
4044
4307
  if (projects.length === 0) {
4045
- outro3(pc11.yellow("No other projects found. Try setting up another project first."));
4308
+ outro3(pc12.yellow("No other projects found. Try setting up another project first."));
4046
4309
  return;
4047
4310
  }
4048
4311
  const customGlobalPath = getEffectiveRRCEHome(workspacePath);
4049
- const linkedProjects = await multiselect4({
4312
+ const linkedProjects = await multiselect5({
4050
4313
  message: "Select projects to link:",
4051
4314
  options: projects.map((project) => ({
4052
4315
  value: `${project.name}:${project.source}`,
4053
4316
  // Unique key
4054
- label: `${project.name} ${pc11.dim(`(${project.source})`)}`,
4055
- hint: pc11.dim(
4317
+ label: `${project.name} ${pc12.dim(`(${project.source})`)}`,
4318
+ hint: pc12.dim(
4056
4319
  project.source === "global" ? `~/.rrce-workflow/workspaces/${project.name}` : project.dataPath
4057
4320
  )
4058
4321
  })),
4059
4322
  required: true
4060
4323
  });
4061
- if (isCancel8(linkedProjects)) {
4324
+ if (isCancel9(linkedProjects)) {
4062
4325
  cancel4("Cancelled.");
4063
4326
  process.exit(0);
4064
4327
  }
@@ -4106,17 +4369,17 @@ linked_projects:
4106
4369
  const workspaceFile = `${workspaceName}.code-workspace`;
4107
4370
  const summary = [
4108
4371
  `Linked projects:`,
4109
- ...selectedProjects.map((p) => ` \u2713 ${p.name} ${pc11.dim(`(${p.source})`)}`),
4372
+ ...selectedProjects.map((p) => ` \u2713 ${p.name} ${pc12.dim(`(${p.source})`)}`),
4110
4373
  ``,
4111
- `Workspace file: ${pc11.cyan(workspaceFile)}`
4374
+ `Workspace file: ${pc12.cyan(workspaceFile)}`
4112
4375
  ];
4113
- note9(summary.join("\n"), "Link Summary");
4114
- outro3(pc11.green(`\u2713 Projects linked! Open ${pc11.bold(workspaceFile)} in VSCode to access linked data.`));
4115
- const shouldExpose = await confirm6({
4376
+ note10(summary.join("\n"), "Link Summary");
4377
+ outro3(pc12.green(`\u2713 Projects linked! Open ${pc12.bold(workspaceFile)} in VSCode to access linked data.`));
4378
+ const shouldExpose = await confirm7({
4116
4379
  message: "Also expose these linked projects to the MCP server (for Agent access)?",
4117
4380
  initialValue: true
4118
4381
  });
4119
- if (shouldExpose && !isCancel8(shouldExpose)) {
4382
+ if (shouldExpose && !isCancel9(shouldExpose)) {
4120
4383
  try {
4121
4384
  const { loadMCPConfig: loadMCPConfig3, saveMCPConfig: saveMCPConfig2, setProjectConfig: setProjectConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
4122
4385
  const mcpConfig = loadMCPConfig3();
@@ -4124,9 +4387,9 @@ linked_projects:
4124
4387
  setProjectConfig2(mcpConfig, project.name, true, void 0, project.dataPath);
4125
4388
  }
4126
4389
  saveMCPConfig2(mcpConfig);
4127
- note9("Projects have been added to the global MCP configuration.", "MCP Updated");
4390
+ note10("Projects have been added to the global MCP configuration.", "MCP Updated");
4128
4391
  } catch (err) {
4129
- note9(`Failed to update MCP config: ${err}`, "MCP Update Failed");
4392
+ note10(`Failed to update MCP config: ${err}`, "MCP Update Failed");
4130
4393
  }
4131
4394
  }
4132
4395
  }
@@ -4140,8 +4403,8 @@ var init_link_flow = __esm({
4140
4403
  });
4141
4404
 
4142
4405
  // src/commands/wizard/sync-flow.ts
4143
- import { confirm as confirm7, spinner as spinner5, note as note10, outro as outro4, cancel as cancel5, isCancel as isCancel9 } from "@clack/prompts";
4144
- import pc12 from "picocolors";
4406
+ import { confirm as confirm8, spinner as spinner5, note as note11, outro as outro4, cancel as cancel5, isCancel as isCancel10 } from "@clack/prompts";
4407
+ import pc13 from "picocolors";
4145
4408
  import * as fs17 from "fs";
4146
4409
  import * as path17 from "path";
4147
4410
  async function runSyncToGlobalFlow(workspacePath, workspaceName) {
@@ -4153,21 +4416,21 @@ async function runSyncToGlobalFlow(workspacePath, workspaceName) {
4153
4416
  (dir) => fs17.existsSync(path17.join(localPath, dir))
4154
4417
  );
4155
4418
  if (existingDirs.length === 0) {
4156
- outro4(pc12.yellow("No data found in workspace storage to sync."));
4419
+ outro4(pc13.yellow("No data found in workspace storage to sync."));
4157
4420
  return;
4158
4421
  }
4159
- note10(
4422
+ note11(
4160
4423
  `The following will be copied to global storage:
4161
4424
  ${existingDirs.map((d) => ` \u2022 ${d}/`).join("\n")}
4162
4425
 
4163
- Destination: ${pc12.cyan(globalPath)}`,
4426
+ Destination: ${pc13.cyan(globalPath)}`,
4164
4427
  "Sync Preview"
4165
4428
  );
4166
- const shouldSync = await confirm7({
4429
+ const shouldSync = await confirm8({
4167
4430
  message: "Proceed with sync to global storage?",
4168
4431
  initialValue: true
4169
4432
  });
4170
- if (isCancel9(shouldSync) || !shouldSync) {
4433
+ if (isCancel10(shouldSync) || !shouldSync) {
4171
4434
  outro4("Sync cancelled.");
4172
4435
  return;
4173
4436
  }
@@ -4186,12 +4449,12 @@ Destination: ${pc12.cyan(globalPath)}`,
4186
4449
  `Synced directories:`,
4187
4450
  ...existingDirs.map((d) => ` \u2713 ${d}/`),
4188
4451
  ``,
4189
- `Global path: ${pc12.cyan(globalPath)}`,
4452
+ `Global path: ${pc13.cyan(globalPath)}`,
4190
4453
  ``,
4191
4454
  `Other projects can now link this knowledge!`
4192
4455
  ];
4193
- note10(summary.join("\n"), "Sync Summary");
4194
- outro4(pc12.green("\u2713 Workspace knowledge synced to global storage!"));
4456
+ note11(summary.join("\n"), "Sync Summary");
4457
+ outro4(pc13.green("\u2713 Workspace knowledge synced to global storage!"));
4195
4458
  } catch (error) {
4196
4459
  s.stop("Error occurred");
4197
4460
  cancel5(`Failed to sync: ${error instanceof Error ? error.message : String(error)}`);
@@ -4207,8 +4470,8 @@ var init_sync_flow = __esm({
4207
4470
  });
4208
4471
 
4209
4472
  // src/commands/wizard/update-flow.ts
4210
- import { confirm as confirm8, spinner as spinner6, note as note11, outro as outro5, cancel as cancel6, isCancel as isCancel10 } from "@clack/prompts";
4211
- import pc13 from "picocolors";
4473
+ import { confirm as confirm9, spinner as spinner6, note as note12, outro as outro5, cancel as cancel6, isCancel as isCancel11 } from "@clack/prompts";
4474
+ import pc14 from "picocolors";
4212
4475
  import * as fs18 from "fs";
4213
4476
  import * as path18 from "path";
4214
4477
  async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
@@ -4221,7 +4484,7 @@ async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
4221
4484
  const customGlobalPath = getEffectiveRRCEHome(workspacePath);
4222
4485
  const dataPaths = resolveAllDataPathsWithCustomGlobal(mode, workspaceName, workspacePath, customGlobalPath);
4223
4486
  s.stop("Updates found");
4224
- note11(
4487
+ note12(
4225
4488
  `The following will be updated from the package:
4226
4489
  \u2022 prompts/ (${prompts.length} agent prompts)
4227
4490
  \u2022 templates/ (output templates)
@@ -4230,11 +4493,11 @@ Target locations:
4230
4493
  ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
4231
4494
  "Update Preview"
4232
4495
  );
4233
- const shouldUpdate = await confirm8({
4496
+ const shouldUpdate = await confirm9({
4234
4497
  message: "Proceed with update?",
4235
4498
  initialValue: true
4236
4499
  });
4237
- if (isCancel10(shouldUpdate) || !shouldUpdate) {
4500
+ if (isCancel11(shouldUpdate) || !shouldUpdate) {
4238
4501
  outro5("Update cancelled.");
4239
4502
  return;
4240
4503
  }
@@ -4264,8 +4527,8 @@ ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
4264
4527
  ``,
4265
4528
  `Your configuration and knowledge files were preserved.`
4266
4529
  ];
4267
- note11(summary.join("\n"), "Update Summary");
4268
- outro5(pc13.green("\u2713 Successfully updated from package!"));
4530
+ note12(summary.join("\n"), "Update Summary");
4531
+ outro5(pc14.green("\u2713 Successfully updated from package!"));
4269
4532
  } catch (error) {
4270
4533
  s.stop("Error occurred");
4271
4534
  cancel6(`Failed to update: ${error instanceof Error ? error.message : String(error)}`);
@@ -4294,16 +4557,16 @@ var init_update_flow = __esm({
4294
4557
  });
4295
4558
 
4296
4559
  // src/commands/wizard/delete-flow.ts
4297
- import { multiselect as multiselect5, confirm as confirm9, spinner as spinner7, note as note12, cancel as cancel7, isCancel as isCancel11 } from "@clack/prompts";
4298
- import pc14 from "picocolors";
4560
+ import { multiselect as multiselect6, confirm as confirm10, spinner as spinner7, note as note13, cancel as cancel7, isCancel as isCancel12 } from "@clack/prompts";
4561
+ import pc15 from "picocolors";
4299
4562
  import * as fs19 from "fs";
4300
4563
  async function runDeleteGlobalProjectFlow(availableProjects) {
4301
4564
  const globalProjects = availableProjects.filter((p) => p.source === "global");
4302
4565
  if (globalProjects.length === 0) {
4303
- note12("No globally stored projects found to delete.", "Info");
4566
+ note13("No globally stored projects found to delete.", "Info");
4304
4567
  return;
4305
4568
  }
4306
- const selectedProjects = await multiselect5({
4569
+ const selectedProjects = await multiselect6({
4307
4570
  message: "Select global projects to DELETE (Irreversible)",
4308
4571
  options: globalProjects.map((p) => ({
4309
4572
  value: p.name,
@@ -4312,21 +4575,21 @@ async function runDeleteGlobalProjectFlow(availableProjects) {
4312
4575
  })),
4313
4576
  required: false
4314
4577
  });
4315
- if (isCancel11(selectedProjects)) {
4578
+ if (isCancel12(selectedProjects)) {
4316
4579
  cancel7("Deletion cancelled.");
4317
4580
  return;
4318
4581
  }
4319
4582
  const projectsToDelete = selectedProjects;
4320
4583
  if (projectsToDelete.length === 0) {
4321
- note12("No projects selected.", "Cancelled");
4584
+ note13("No projects selected.", "Cancelled");
4322
4585
  return;
4323
4586
  }
4324
- const confirmed = await confirm9({
4325
- message: `${pc14.red("WARNING:")} This will PERMANENTLY DELETE the knowledge/config for ${projectsToDelete.length} detected global projects.
4587
+ const confirmed = await confirm10({
4588
+ message: `${pc15.red("WARNING:")} This will PERMANENTLY DELETE the knowledge/config for ${projectsToDelete.length} detected global projects.
4326
4589
  Are you sure?`,
4327
4590
  initialValue: false
4328
4591
  });
4329
- if (!confirmed || isCancel11(confirmed)) {
4592
+ if (!confirmed || isCancel12(confirmed)) {
4330
4593
  cancel7("Deletion cancelled.");
4331
4594
  return;
4332
4595
  }
@@ -4351,7 +4614,7 @@ Are you sure?`,
4351
4614
  await new Promise((r) => setTimeout(r, 1e3));
4352
4615
  } catch (error) {
4353
4616
  s.stop("Error occurred during deletion");
4354
- note12(`Failed to delete some projects: ${error}`, "Error");
4617
+ note13(`Failed to delete some projects: ${error}`, "Error");
4355
4618
  }
4356
4619
  }
4357
4620
  var init_delete_flow = __esm({
@@ -4367,11 +4630,11 @@ var wizard_exports = {};
4367
4630
  __export(wizard_exports, {
4368
4631
  runWizard: () => runWizard
4369
4632
  });
4370
- import { intro as intro2, select as select5, spinner as spinner8, note as note13, outro as outro7, isCancel as isCancel12 } from "@clack/prompts";
4371
- import pc15 from "picocolors";
4633
+ import { intro as intro2, select as select5, spinner as spinner8, note as note14, outro as outro7, isCancel as isCancel13 } from "@clack/prompts";
4634
+ import pc16 from "picocolors";
4372
4635
  import * as fs20 from "fs";
4373
4636
  async function runWizard() {
4374
- intro2(pc15.cyan(pc15.inverse(" RRCE-Workflow Setup ")));
4637
+ intro2(pc16.cyan(pc16.inverse(" RRCE-Workflow Setup ")));
4375
4638
  const s = spinner8();
4376
4639
  s.start("Detecting environment");
4377
4640
  const workspacePath = detectWorkspaceRoot();
@@ -4387,9 +4650,9 @@ async function runWizard() {
4387
4650
  }
4388
4651
  await new Promise((r) => setTimeout(r, 800));
4389
4652
  s.stop("Environment detected");
4390
- note13(
4391
- `Git User: ${pc15.bold(gitUser || "(not found)")}
4392
- Workspace: ${pc15.bold(workspaceName)}`,
4653
+ note14(
4654
+ `Git User: ${pc16.bold(gitUser || "(not found)")}
4655
+ Workspace: ${pc16.bold(workspaceName)}`,
4393
4656
  "Context"
4394
4657
  );
4395
4658
  const detectedProjects = projectService.scan({
@@ -4454,7 +4717,7 @@ Workspace: ${pc15.bold(workspaceName)}`,
4454
4717
  message: "This workspace is already configured. What would you like to do?",
4455
4718
  options: menuOptions
4456
4719
  });
4457
- if (isCancel12(action) || action === "exit") {
4720
+ if (isCancel13(action) || action === "exit") {
4458
4721
  outro7("Exited.");
4459
4722
  process.exit(0);
4460
4723
  }
@@ -4504,12 +4767,12 @@ init_wizard();
4504
4767
 
4505
4768
  // src/commands/selector.ts
4506
4769
  init_prompts();
4507
- import { intro as intro3, select as select6, note as note14, cancel as cancel9, isCancel as isCancel13, outro as outro8 } from "@clack/prompts";
4508
- import pc16 from "picocolors";
4770
+ import { intro as intro3, select as select6, note as note15, cancel as cancel9, isCancel as isCancel14, outro as outro8 } from "@clack/prompts";
4771
+ import pc17 from "picocolors";
4509
4772
  import * as path19 from "path";
4510
4773
  async function runSelector() {
4511
4774
  const workspaceName = path19.basename(process.cwd());
4512
- intro3(pc16.cyan(pc16.inverse(` RRCE-Workflow | ${workspaceName} `)));
4775
+ intro3(pc17.cyan(pc17.inverse(` RRCE-Workflow | ${workspaceName} `)));
4513
4776
  const prompts = loadPromptsFromDir(getAgentCorePromptsDir());
4514
4777
  if (prompts.length === 0) {
4515
4778
  cancel9("No agents found. Run `rrce-workflow` to set up.");
@@ -4535,7 +4798,7 @@ async function runSelector() {
4535
4798
  }))
4536
4799
  ]
4537
4800
  });
4538
- if (isCancel13(selection)) {
4801
+ if (isCancel14(selection)) {
4539
4802
  cancel9("Selection cancelled.");
4540
4803
  process.exit(0);
4541
4804
  }
@@ -4550,9 +4813,9 @@ async function runSelector() {
4550
4813
  return;
4551
4814
  }
4552
4815
  const prompt = selection;
4553
- note14(
4816
+ note15(
4554
4817
  `Use this agent in your IDE by invoking:
4555
- ${pc16.bold(pc16.cyan(`@${prompt.frontmatter.name}`))}`,
4818
+ ${pc17.bold(pc17.cyan(`@${prompt.frontmatter.name}`))}`,
4556
4819
  "Agent Selected"
4557
4820
  );
4558
4821
  outro8("Done");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrce-workflow",
3
- "version": "0.2.65",
3
+ "version": "0.2.67",
4
4
  "description": "RRCE-Workflow TUI - Agentic code workflow generator for AI-assisted development",
5
5
  "author": "RRCE Team",
6
6
  "license": "MIT",