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.
- package/README.md +31 -1
- package/dist/index.js +390 -127
- 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
|
|
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/
|
|
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
|
-
${
|
|
3956
|
+
${pc9.bold("RRCE MCP Hub")} - Cross-project AI assistant server
|
|
3698
3957
|
|
|
3699
|
-
${
|
|
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
|
-
${
|
|
3705
|
-
${
|
|
3706
|
-
${
|
|
3707
|
-
${
|
|
3708
|
-
${
|
|
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
|
-
${
|
|
3711
|
-
${
|
|
3712
|
-
${
|
|
3713
|
-
${
|
|
3714
|
-
${
|
|
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
|
-
${
|
|
3717
|
-
${
|
|
3718
|
-
${
|
|
3719
|
-
${
|
|
3720
|
-
${
|
|
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
|
-
${
|
|
3723
|
-
${
|
|
3724
|
-
${
|
|
3725
|
-
${
|
|
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
|
-
${
|
|
3728
|
-
${
|
|
3729
|
-
${
|
|
3730
|
-
${
|
|
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
|
-
|
|
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
|
|
3749
|
-
import
|
|
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(
|
|
4043
|
+
intro(pc10.bgCyan(pc10.black(" MCP Setup ")));
|
|
3782
4044
|
const configured = await handleConfigureGlobalPath();
|
|
3783
4045
|
if (!configured) {
|
|
3784
|
-
outro(
|
|
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(
|
|
3791
|
-
|
|
3792
|
-
`${
|
|
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
|
|
4058
|
+
const shouldInstall = await confirm5({
|
|
3797
4059
|
message: "Install MCP server integrations now?",
|
|
3798
4060
|
initialValue: true
|
|
3799
4061
|
});
|
|
3800
|
-
if (shouldInstall && !
|
|
4062
|
+
if (shouldInstall && !isCancel7(shouldInstall)) {
|
|
3801
4063
|
await runInstallWizard(workspacePath);
|
|
3802
|
-
const shouldStart = await
|
|
4064
|
+
const shouldStart = await confirm5({
|
|
3803
4065
|
message: "Start the MCP Dashboard?",
|
|
3804
4066
|
initialValue: true
|
|
3805
4067
|
});
|
|
3806
|
-
if (shouldStart && !
|
|
4068
|
+
if (shouldStart && !isCancel7(shouldStart)) {
|
|
3807
4069
|
await handleStartServer();
|
|
3808
4070
|
}
|
|
3809
4071
|
} else {
|
|
3810
|
-
outro(
|
|
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(
|
|
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(
|
|
4087
|
+
console.log(pc10.dim("MCP server is already stopped."));
|
|
3826
4088
|
return;
|
|
3827
4089
|
}
|
|
3828
4090
|
stopMCPServer2();
|
|
3829
|
-
console.log(
|
|
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
|
|
3848
|
-
import
|
|
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 (
|
|
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
|
-
|
|
3872
|
-
`${
|
|
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
|
|
4143
|
+
const confirmed = await confirm6({
|
|
3881
4144
|
message: "Proceed with express setup?",
|
|
3882
4145
|
initialValue: true
|
|
3883
4146
|
});
|
|
3884
|
-
if (
|
|
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
|
|
4161
|
+
const startMCP = await confirm6({
|
|
3899
4162
|
message: "Start MCP server now?",
|
|
3900
4163
|
initialValue: true
|
|
3901
4164
|
});
|
|
3902
|
-
if (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(
|
|
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 (
|
|
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
|
-
`${
|
|
3983
|
-
config.tools.length > 0 ? `${
|
|
3984
|
-
config.exposeToMCP ? `${
|
|
3985
|
-
config.enableRAG ? `${
|
|
3986
|
-
config.linkedProjects.length > 0 ? `${
|
|
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
|
-
|
|
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
|
-
${
|
|
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
|
|
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 && !
|
|
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(
|
|
4273
|
+
outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
|
|
4011
4274
|
} else {
|
|
4012
|
-
outro2(
|
|
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(
|
|
4280
|
+
outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
|
|
4018
4281
|
} else {
|
|
4019
|
-
outro2(
|
|
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
|
|
4037
|
-
import
|
|
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(
|
|
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
|
|
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} ${
|
|
4055
|
-
hint:
|
|
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 (
|
|
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} ${
|
|
4372
|
+
...selectedProjects.map((p) => ` \u2713 ${p.name} ${pc12.dim(`(${p.source})`)}`),
|
|
4110
4373
|
``,
|
|
4111
|
-
`Workspace file: ${
|
|
4374
|
+
`Workspace file: ${pc12.cyan(workspaceFile)}`
|
|
4112
4375
|
];
|
|
4113
|
-
|
|
4114
|
-
outro3(
|
|
4115
|
-
const shouldExpose = await
|
|
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 && !
|
|
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
|
-
|
|
4390
|
+
note10("Projects have been added to the global MCP configuration.", "MCP Updated");
|
|
4128
4391
|
} catch (err) {
|
|
4129
|
-
|
|
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
|
|
4144
|
-
import
|
|
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(
|
|
4419
|
+
outro4(pc13.yellow("No data found in workspace storage to sync."));
|
|
4157
4420
|
return;
|
|
4158
4421
|
}
|
|
4159
|
-
|
|
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: ${
|
|
4426
|
+
Destination: ${pc13.cyan(globalPath)}`,
|
|
4164
4427
|
"Sync Preview"
|
|
4165
4428
|
);
|
|
4166
|
-
const shouldSync = await
|
|
4429
|
+
const shouldSync = await confirm8({
|
|
4167
4430
|
message: "Proceed with sync to global storage?",
|
|
4168
4431
|
initialValue: true
|
|
4169
4432
|
});
|
|
4170
|
-
if (
|
|
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: ${
|
|
4452
|
+
`Global path: ${pc13.cyan(globalPath)}`,
|
|
4190
4453
|
``,
|
|
4191
4454
|
`Other projects can now link this knowledge!`
|
|
4192
4455
|
];
|
|
4193
|
-
|
|
4194
|
-
outro4(
|
|
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
|
|
4211
|
-
import
|
|
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
|
-
|
|
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
|
|
4496
|
+
const shouldUpdate = await confirm9({
|
|
4234
4497
|
message: "Proceed with update?",
|
|
4235
4498
|
initialValue: true
|
|
4236
4499
|
});
|
|
4237
|
-
if (
|
|
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
|
-
|
|
4268
|
-
outro5(
|
|
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
|
|
4298
|
-
import
|
|
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
|
-
|
|
4566
|
+
note13("No globally stored projects found to delete.", "Info");
|
|
4304
4567
|
return;
|
|
4305
4568
|
}
|
|
4306
|
-
const selectedProjects = await
|
|
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 (
|
|
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
|
-
|
|
4584
|
+
note13("No projects selected.", "Cancelled");
|
|
4322
4585
|
return;
|
|
4323
4586
|
}
|
|
4324
|
-
const confirmed = await
|
|
4325
|
-
message: `${
|
|
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 ||
|
|
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
|
-
|
|
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
|
|
4371
|
-
import
|
|
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(
|
|
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
|
-
|
|
4391
|
-
`Git User: ${
|
|
4392
|
-
Workspace: ${
|
|
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 (
|
|
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
|
|
4508
|
-
import
|
|
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(
|
|
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 (
|
|
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
|
-
|
|
4816
|
+
note15(
|
|
4554
4817
|
`Use this agent in your IDE by invoking:
|
|
4555
|
-
${
|
|
4818
|
+
${pc17.bold(pc17.cyan(`@${prompt.frontmatter.name}`))}`,
|
|
4556
4819
|
"Agent Selected"
|
|
4557
4820
|
);
|
|
4558
4821
|
outro8("Done");
|