rrce-workflow 0.2.65 → 0.2.66
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 +383 -126
- 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"] : [],
|
|
@@ -3689,47 +3851,138 @@ var init_status = __esm({
|
|
|
3689
3851
|
}
|
|
3690
3852
|
});
|
|
3691
3853
|
|
|
3692
|
-
// src/mcp/commands/
|
|
3693
|
-
import { note as note6 } from "@clack/prompts";
|
|
3854
|
+
// src/mcp/commands/uninstall-wizard.ts
|
|
3855
|
+
import { multiselect as multiselect4, note as note6, isCancel as isCancel6, confirm as confirm4 } from "@clack/prompts";
|
|
3694
3856
|
import pc8 from "picocolors";
|
|
3857
|
+
async function runUninstallWizard(workspacePath) {
|
|
3858
|
+
const status = checkInstallStatus(workspacePath);
|
|
3859
|
+
const installedOptions = [];
|
|
3860
|
+
if (status.opencode) {
|
|
3861
|
+
installedOptions.push({
|
|
3862
|
+
value: "opencode",
|
|
3863
|
+
label: "OpenCode",
|
|
3864
|
+
hint: pc8.green("Currently installed")
|
|
3865
|
+
});
|
|
3866
|
+
}
|
|
3867
|
+
if (status.antigravity) {
|
|
3868
|
+
installedOptions.push({
|
|
3869
|
+
value: "antigravity",
|
|
3870
|
+
label: "Antigravity IDE",
|
|
3871
|
+
hint: pc8.green("Currently installed")
|
|
3872
|
+
});
|
|
3873
|
+
}
|
|
3874
|
+
if (status.vscodeGlobal) {
|
|
3875
|
+
installedOptions.push({
|
|
3876
|
+
value: "vscode-global",
|
|
3877
|
+
label: "VSCode (Global Settings)",
|
|
3878
|
+
hint: pc8.green("Currently installed")
|
|
3879
|
+
});
|
|
3880
|
+
}
|
|
3881
|
+
if (status.vscodeWorkspace) {
|
|
3882
|
+
installedOptions.push({
|
|
3883
|
+
value: "vscode-workspace",
|
|
3884
|
+
label: "VSCode (Workspace Config)",
|
|
3885
|
+
hint: pc8.green("Currently installed")
|
|
3886
|
+
});
|
|
3887
|
+
}
|
|
3888
|
+
if (status.claude) {
|
|
3889
|
+
installedOptions.push({
|
|
3890
|
+
value: "claude",
|
|
3891
|
+
label: "Claude Desktop",
|
|
3892
|
+
hint: pc8.green("Currently installed")
|
|
3893
|
+
});
|
|
3894
|
+
}
|
|
3895
|
+
if (installedOptions.length === 0) {
|
|
3896
|
+
note6(
|
|
3897
|
+
pc8.yellow("RRCE MCP Server is not installed in any supported IDE."),
|
|
3898
|
+
"Nothing to Uninstall"
|
|
3899
|
+
);
|
|
3900
|
+
return;
|
|
3901
|
+
}
|
|
3902
|
+
const selected = await multiselect4({
|
|
3903
|
+
message: "Select IDEs to remove RRCE MCP Server from:",
|
|
3904
|
+
options: installedOptions,
|
|
3905
|
+
required: false
|
|
3906
|
+
});
|
|
3907
|
+
if (isCancel6(selected) || selected.length === 0) {
|
|
3908
|
+
return;
|
|
3909
|
+
}
|
|
3910
|
+
const confirmed = await confirm4({
|
|
3911
|
+
message: `Remove RRCE from ${selected.length} IDE(s)?`,
|
|
3912
|
+
initialValue: false
|
|
3913
|
+
});
|
|
3914
|
+
if (isCancel6(confirmed) || !confirmed) {
|
|
3915
|
+
note6(pc8.dim("Uninstall cancelled."), "Cancelled");
|
|
3916
|
+
return;
|
|
3917
|
+
}
|
|
3918
|
+
const targets = selected;
|
|
3919
|
+
const results = [];
|
|
3920
|
+
let successCount = 0;
|
|
3921
|
+
let failureCount = 0;
|
|
3922
|
+
for (const target of targets) {
|
|
3923
|
+
const success = uninstallFromConfig(target, workspacePath);
|
|
3924
|
+
const label = getTargetLabel(target);
|
|
3925
|
+
if (success) {
|
|
3926
|
+
results.push(`${label}: ${pc8.green("\u2713 Removed")}`);
|
|
3927
|
+
successCount++;
|
|
3928
|
+
} else {
|
|
3929
|
+
results.push(`${label}: ${pc8.red("\u2717 Failed")}`);
|
|
3930
|
+
failureCount++;
|
|
3931
|
+
}
|
|
3932
|
+
}
|
|
3933
|
+
if (results.length > 0) {
|
|
3934
|
+
const summary = failureCount > 0 ? `${successCount} succeeded, ${failureCount} failed` : `All ${successCount} uninstalled successfully`;
|
|
3935
|
+
note6(results.join("\n"), `Uninstall Results (${summary})`);
|
|
3936
|
+
}
|
|
3937
|
+
}
|
|
3938
|
+
var init_uninstall_wizard = __esm({
|
|
3939
|
+
"src/mcp/commands/uninstall-wizard.ts"() {
|
|
3940
|
+
"use strict";
|
|
3941
|
+
init_install();
|
|
3942
|
+
}
|
|
3943
|
+
});
|
|
3944
|
+
|
|
3945
|
+
// src/mcp/commands/help.ts
|
|
3946
|
+
import { note as note7 } from "@clack/prompts";
|
|
3947
|
+
import pc9 from "picocolors";
|
|
3695
3948
|
function showHelp() {
|
|
3696
3949
|
const help = `
|
|
3697
|
-
${
|
|
3950
|
+
${pc9.bold("RRCE MCP Hub")} - Cross-project AI assistant server
|
|
3698
3951
|
|
|
3699
|
-
${
|
|
3952
|
+
${pc9.bold("ABOUT")}
|
|
3700
3953
|
MCP (Model Context Protocol) allows AI assistants like Claude to
|
|
3701
3954
|
access your project knowledge in real-time. The RRCE MCP Hub
|
|
3702
3955
|
provides a central server that exposes selected projects.
|
|
3703
3956
|
|
|
3704
|
-
${
|
|
3705
|
-
${
|
|
3706
|
-
${
|
|
3707
|
-
${
|
|
3708
|
-
${
|
|
3957
|
+
${pc9.bold("MENU OPTIONS")}
|
|
3958
|
+
${pc9.cyan("Start MCP server")} Start the server for AI access
|
|
3959
|
+
${pc9.cyan("Configure projects")} Choose which projects to expose
|
|
3960
|
+
${pc9.cyan("Install to IDE")} Add to Antigravity, VSCode, or Claude
|
|
3961
|
+
${pc9.cyan("View status")} See which projects are exposed
|
|
3709
3962
|
|
|
3710
|
-
${
|
|
3711
|
-
${
|
|
3712
|
-
${
|
|
3713
|
-
${
|
|
3714
|
-
${
|
|
3963
|
+
${pc9.bold("DIRECT COMMANDS")}
|
|
3964
|
+
${pc9.dim("rrce-workflow mcp start")} Start server directly
|
|
3965
|
+
${pc9.dim("rrce-workflow mcp stop")} Stop server directly
|
|
3966
|
+
${pc9.dim("rrce-workflow mcp status")} Show status directly
|
|
3967
|
+
${pc9.dim("rrce-workflow mcp help")} Show this help
|
|
3715
3968
|
|
|
3716
|
-
${
|
|
3717
|
-
${
|
|
3718
|
-
${
|
|
3719
|
-
${
|
|
3720
|
-
${
|
|
3969
|
+
${pc9.bold("IDE INSTALLATION")}
|
|
3970
|
+
${pc9.cyan("Antigravity")} ~/.gemini/antigravity/mcp_config.json
|
|
3971
|
+
${pc9.cyan("VSCode Global")} ~/.config/Code/User/settings.json
|
|
3972
|
+
${pc9.cyan("VSCode Workspace")} .vscode/mcp.json
|
|
3973
|
+
${pc9.cyan("Claude Desktop")} ~/.config/claude/claude_desktop_config.json
|
|
3721
3974
|
|
|
3722
|
-
${
|
|
3723
|
-
${
|
|
3724
|
-
${
|
|
3725
|
-
${
|
|
3975
|
+
${pc9.bold("SERVER COMMANDS")} (while running)
|
|
3976
|
+
${pc9.cyan("q")} Stop and quit ${pc9.cyan("p")} Reconfigure projects
|
|
3977
|
+
${pc9.cyan("i")} Install to IDE ${pc9.cyan("r")} Reload config
|
|
3978
|
+
${pc9.cyan("c")} Clear logs ${pc9.cyan("?")} Show help
|
|
3726
3979
|
|
|
3727
|
-
${
|
|
3728
|
-
${
|
|
3729
|
-
${
|
|
3730
|
-
${
|
|
3980
|
+
${pc9.bold("RESOURCES EXPOSED")}
|
|
3981
|
+
${pc9.cyan("rrce://projects")} List all exposed projects
|
|
3982
|
+
${pc9.cyan("rrce://projects/{name}/context")} Get project context
|
|
3983
|
+
${pc9.cyan("rrce://projects/{name}/tasks")} Get project tasks
|
|
3731
3984
|
`;
|
|
3732
|
-
|
|
3985
|
+
note7(help.trim(), "Help");
|
|
3733
3986
|
}
|
|
3734
3987
|
var init_help = __esm({
|
|
3735
3988
|
"src/mcp/commands/help.ts"() {
|
|
@@ -3745,9 +3998,10 @@ __export(mcp_exports, {
|
|
|
3745
3998
|
handleStartServer: () => handleStartServer,
|
|
3746
3999
|
runMCP: () => runMCP
|
|
3747
4000
|
});
|
|
3748
|
-
import { intro, outro, confirm as
|
|
3749
|
-
import
|
|
4001
|
+
import { intro, outro, confirm as confirm5, note as note8, isCancel as isCancel7 } from "@clack/prompts";
|
|
4002
|
+
import pc10 from "picocolors";
|
|
3750
4003
|
async function runMCP(subcommand2) {
|
|
4004
|
+
const workspacePath = detectWorkspaceRoot();
|
|
3751
4005
|
if (subcommand2) {
|
|
3752
4006
|
switch (subcommand2) {
|
|
3753
4007
|
case "start":
|
|
@@ -3765,6 +4019,9 @@ async function runMCP(subcommand2) {
|
|
|
3765
4019
|
case "status":
|
|
3766
4020
|
await handleShowStatus();
|
|
3767
4021
|
return;
|
|
4022
|
+
case "uninstall":
|
|
4023
|
+
await runUninstallWizard(workspacePath);
|
|
4024
|
+
return;
|
|
3768
4025
|
case "help":
|
|
3769
4026
|
showHelp();
|
|
3770
4027
|
return;
|
|
@@ -3775,39 +4032,38 @@ async function runMCP(subcommand2) {
|
|
|
3775
4032
|
break;
|
|
3776
4033
|
}
|
|
3777
4034
|
}
|
|
3778
|
-
const workspacePath = detectWorkspaceRoot();
|
|
3779
4035
|
const globalPathCheck = await ensureMCPGlobalPath();
|
|
3780
4036
|
if (!globalPathCheck.configured) {
|
|
3781
|
-
intro(
|
|
4037
|
+
intro(pc10.bgCyan(pc10.black(" MCP Setup ")));
|
|
3782
4038
|
const configured = await handleConfigureGlobalPath();
|
|
3783
4039
|
if (!configured) {
|
|
3784
|
-
outro(
|
|
4040
|
+
outro(pc10.yellow("MCP requires a global storage path. Setup cancelled."));
|
|
3785
4041
|
return;
|
|
3786
4042
|
}
|
|
3787
4043
|
}
|
|
3788
4044
|
const installed = isInstalledAnywhere(workspacePath);
|
|
3789
4045
|
if (!installed) {
|
|
3790
|
-
intro(
|
|
3791
|
-
|
|
3792
|
-
`${
|
|
4046
|
+
intro(pc10.bgCyan(pc10.black(" Welcome to MCP Hub ")));
|
|
4047
|
+
note8(
|
|
4048
|
+
`${pc10.bold("Set up Model Context Protocol")}
|
|
3793
4049
|
Allow AI assistants to access your project context.`,
|
|
3794
4050
|
"Getting Started"
|
|
3795
4051
|
);
|
|
3796
|
-
const shouldInstall = await
|
|
4052
|
+
const shouldInstall = await confirm5({
|
|
3797
4053
|
message: "Install MCP server integrations now?",
|
|
3798
4054
|
initialValue: true
|
|
3799
4055
|
});
|
|
3800
|
-
if (shouldInstall && !
|
|
4056
|
+
if (shouldInstall && !isCancel7(shouldInstall)) {
|
|
3801
4057
|
await runInstallWizard(workspacePath);
|
|
3802
|
-
const shouldStart = await
|
|
4058
|
+
const shouldStart = await confirm5({
|
|
3803
4059
|
message: "Start the MCP Dashboard?",
|
|
3804
4060
|
initialValue: true
|
|
3805
4061
|
});
|
|
3806
|
-
if (shouldStart && !
|
|
4062
|
+
if (shouldStart && !isCancel7(shouldStart)) {
|
|
3807
4063
|
await handleStartServer();
|
|
3808
4064
|
}
|
|
3809
4065
|
} else {
|
|
3810
|
-
outro(
|
|
4066
|
+
outro(pc10.dim('Setup skipped. Run "npx rrce-workflow mcp" later to restart.'));
|
|
3811
4067
|
}
|
|
3812
4068
|
return;
|
|
3813
4069
|
}
|
|
@@ -3815,18 +4071,18 @@ Allow AI assistants to access your project context.`,
|
|
|
3815
4071
|
await handleStartServer();
|
|
3816
4072
|
} catch (err) {
|
|
3817
4073
|
console.error(err);
|
|
3818
|
-
outro(
|
|
4074
|
+
outro(pc10.red("Failed to launch MCP Dashboard"));
|
|
3819
4075
|
}
|
|
3820
4076
|
}
|
|
3821
4077
|
async function handleStopServer() {
|
|
3822
4078
|
const { stopMCPServer: stopMCPServer2 } = await Promise.resolve().then(() => (init_server(), server_exports));
|
|
3823
4079
|
const status = getMCPServerStatus();
|
|
3824
4080
|
if (!status.running) {
|
|
3825
|
-
console.log(
|
|
4081
|
+
console.log(pc10.dim("MCP server is already stopped."));
|
|
3826
4082
|
return;
|
|
3827
4083
|
}
|
|
3828
4084
|
stopMCPServer2();
|
|
3829
|
-
console.log(
|
|
4085
|
+
console.log(pc10.green("MCP server stopped."));
|
|
3830
4086
|
}
|
|
3831
4087
|
var init_mcp = __esm({
|
|
3832
4088
|
"src/mcp/index.ts"() {
|
|
@@ -3839,13 +4095,14 @@ var init_mcp = __esm({
|
|
|
3839
4095
|
init_configure();
|
|
3840
4096
|
init_status();
|
|
3841
4097
|
init_install_wizard();
|
|
4098
|
+
init_uninstall_wizard();
|
|
3842
4099
|
init_help();
|
|
3843
4100
|
}
|
|
3844
4101
|
});
|
|
3845
4102
|
|
|
3846
4103
|
// src/commands/wizard/setup-flow.ts
|
|
3847
|
-
import { spinner as spinner3, note as
|
|
3848
|
-
import
|
|
4104
|
+
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";
|
|
4105
|
+
import pc11 from "picocolors";
|
|
3849
4106
|
async function runExpressSetup(workspacePath, workspaceName, existingProjects, s) {
|
|
3850
4107
|
const storageModeResult = await select3({
|
|
3851
4108
|
message: "Where should workflow data be stored?",
|
|
@@ -3855,7 +4112,7 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
|
|
|
3855
4112
|
],
|
|
3856
4113
|
initialValue: "global"
|
|
3857
4114
|
});
|
|
3858
|
-
if (
|
|
4115
|
+
if (isCancel8(storageModeResult)) {
|
|
3859
4116
|
cancel3("Setup cancelled.");
|
|
3860
4117
|
process.exit(0);
|
|
3861
4118
|
}
|
|
@@ -3868,8 +4125,8 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
|
|
|
3868
4125
|
process.exit(0);
|
|
3869
4126
|
}
|
|
3870
4127
|
}
|
|
3871
|
-
|
|
3872
|
-
`${
|
|
4128
|
+
note9(
|
|
4129
|
+
`${pc11.bold("Express Setup will configure:")}
|
|
3873
4130
|
\u2022 Storage: ${storageMode === "global" ? "Global" : "Workspace"}
|
|
3874
4131
|
\u2022 MCP Server: Enabled
|
|
3875
4132
|
\u2022 Semantic Search (RAG): Enabled
|
|
@@ -3877,11 +4134,11 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
|
|
|
3877
4134
|
\u2022 AI Tools: All available`,
|
|
3878
4135
|
"Configuration Preview"
|
|
3879
4136
|
);
|
|
3880
|
-
const confirmed = await
|
|
4137
|
+
const confirmed = await confirm6({
|
|
3881
4138
|
message: "Proceed with express setup?",
|
|
3882
4139
|
initialValue: true
|
|
3883
4140
|
});
|
|
3884
|
-
if (
|
|
4141
|
+
if (isCancel8(confirmed) || !confirmed) {
|
|
3885
4142
|
cancel3("Setup cancelled.");
|
|
3886
4143
|
process.exit(0);
|
|
3887
4144
|
}
|
|
@@ -3895,15 +4152,15 @@ async function runExpressSetup(workspacePath, workspaceName, existingProjects, s
|
|
|
3895
4152
|
enableRAG: true
|
|
3896
4153
|
};
|
|
3897
4154
|
await executeSetup(config, workspacePath, workspaceName, existingProjects, s);
|
|
3898
|
-
const startMCP = await
|
|
4155
|
+
const startMCP = await confirm6({
|
|
3899
4156
|
message: "Start MCP server now?",
|
|
3900
4157
|
initialValue: true
|
|
3901
4158
|
});
|
|
3902
|
-
if (startMCP && !
|
|
4159
|
+
if (startMCP && !isCancel8(startMCP)) {
|
|
3903
4160
|
const { runMCP: runMCP2 } = await Promise.resolve().then(() => (init_mcp(), mcp_exports));
|
|
3904
4161
|
await runMCP2();
|
|
3905
4162
|
} else {
|
|
3906
|
-
outro2(
|
|
4163
|
+
outro2(pc11.green(`\u2713 Express setup complete! Run ${pc11.cyan("npx rrce-workflow mcp")} to start the server.`));
|
|
3907
4164
|
}
|
|
3908
4165
|
}
|
|
3909
4166
|
async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
@@ -3916,7 +4173,7 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
3916
4173
|
],
|
|
3917
4174
|
initialValue: "express"
|
|
3918
4175
|
});
|
|
3919
|
-
if (
|
|
4176
|
+
if (isCancel8(setupModeResult)) {
|
|
3920
4177
|
cancel3("Setup cancelled.");
|
|
3921
4178
|
process.exit(0);
|
|
3922
4179
|
}
|
|
@@ -3979,44 +4236,44 @@ async function executeSetup(config, workspacePath, workspaceName, allProjects, s
|
|
|
3979
4236
|
s.stop("Configuration generated");
|
|
3980
4237
|
const dataSummary = getDataPaths(config.storageMode, workspaceName, workspacePath, config.globalPath);
|
|
3981
4238
|
const summary = [
|
|
3982
|
-
`${
|
|
3983
|
-
config.tools.length > 0 ? `${
|
|
3984
|
-
config.exposeToMCP ? `${
|
|
3985
|
-
config.enableRAG ? `${
|
|
3986
|
-
config.linkedProjects.length > 0 ? `${
|
|
4239
|
+
`${pc11.green("\u2713")} Data stored at: ${pc11.dim(dataSummary[0])}`,
|
|
4240
|
+
config.tools.length > 0 ? `${pc11.green("\u2713")} Tools: ${config.tools.join(", ")}` : null,
|
|
4241
|
+
config.exposeToMCP ? `${pc11.green("\u2713")} MCP server configured` : null,
|
|
4242
|
+
config.enableRAG ? `${pc11.green("\u2713")} Semantic Search enabled` : null,
|
|
4243
|
+
config.linkedProjects.length > 0 ? `${pc11.green("\u2713")} Linked ${config.linkedProjects.length} project(s)` : null
|
|
3987
4244
|
].filter(Boolean);
|
|
3988
|
-
|
|
4245
|
+
note9(summary.join("\n"), "Setup Complete");
|
|
3989
4246
|
} catch (error) {
|
|
3990
4247
|
s.stop("Error occurred");
|
|
3991
4248
|
cancel3(
|
|
3992
4249
|
`Setup failed: ${error instanceof Error ? error.message : String(error)}
|
|
3993
4250
|
|
|
3994
|
-
${
|
|
4251
|
+
${pc11.dim("Tip: You can re-run the wizard to try again.")}`
|
|
3995
4252
|
);
|
|
3996
4253
|
process.exit(1);
|
|
3997
4254
|
}
|
|
3998
4255
|
}
|
|
3999
4256
|
async function handlePostSetup(config, workspacePath, workspaceName, linkedProjects) {
|
|
4000
4257
|
if (config.exposeToMCP) {
|
|
4001
|
-
const shouldConfigureMCP = await
|
|
4258
|
+
const shouldConfigureMCP = await confirm6({
|
|
4002
4259
|
message: "Would you like to start the MCP server now?",
|
|
4003
4260
|
initialValue: true
|
|
4004
4261
|
});
|
|
4005
|
-
if (shouldConfigureMCP && !
|
|
4262
|
+
if (shouldConfigureMCP && !isCancel8(shouldConfigureMCP)) {
|
|
4006
4263
|
const { runMCP: runMCP2 } = await Promise.resolve().then(() => (init_mcp(), mcp_exports));
|
|
4007
4264
|
await runMCP2();
|
|
4008
4265
|
} else {
|
|
4009
4266
|
if (linkedProjects.length > 0) {
|
|
4010
|
-
outro2(
|
|
4267
|
+
outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
|
|
4011
4268
|
} else {
|
|
4012
|
-
outro2(
|
|
4269
|
+
outro2(pc11.green(`\u2713 Setup complete! Run ${pc11.cyan("npx rrce-workflow mcp")} to start the server.`));
|
|
4013
4270
|
}
|
|
4014
4271
|
}
|
|
4015
4272
|
} else {
|
|
4016
4273
|
if (linkedProjects.length > 0) {
|
|
4017
|
-
outro2(
|
|
4274
|
+
outro2(pc11.green(`\u2713 Setup complete! Open ${pc11.bold(`${workspaceName}.code-workspace`)} in VSCode.`));
|
|
4018
4275
|
} else {
|
|
4019
|
-
outro2(
|
|
4276
|
+
outro2(pc11.green(`\u2713 Setup complete! Your agents are ready to use.`));
|
|
4020
4277
|
}
|
|
4021
4278
|
}
|
|
4022
4279
|
}
|
|
@@ -4033,8 +4290,8 @@ var init_setup_flow = __esm({
|
|
|
4033
4290
|
});
|
|
4034
4291
|
|
|
4035
4292
|
// src/commands/wizard/link-flow.ts
|
|
4036
|
-
import { multiselect as
|
|
4037
|
-
import
|
|
4293
|
+
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";
|
|
4294
|
+
import pc12 from "picocolors";
|
|
4038
4295
|
import * as fs16 from "fs";
|
|
4039
4296
|
async function runLinkProjectsFlow(workspacePath, workspaceName) {
|
|
4040
4297
|
const projects = scanForProjects({
|
|
@@ -4042,23 +4299,23 @@ async function runLinkProjectsFlow(workspacePath, workspaceName) {
|
|
|
4042
4299
|
workspacePath
|
|
4043
4300
|
});
|
|
4044
4301
|
if (projects.length === 0) {
|
|
4045
|
-
outro3(
|
|
4302
|
+
outro3(pc12.yellow("No other projects found. Try setting up another project first."));
|
|
4046
4303
|
return;
|
|
4047
4304
|
}
|
|
4048
4305
|
const customGlobalPath = getEffectiveRRCEHome(workspacePath);
|
|
4049
|
-
const linkedProjects = await
|
|
4306
|
+
const linkedProjects = await multiselect5({
|
|
4050
4307
|
message: "Select projects to link:",
|
|
4051
4308
|
options: projects.map((project) => ({
|
|
4052
4309
|
value: `${project.name}:${project.source}`,
|
|
4053
4310
|
// Unique key
|
|
4054
|
-
label: `${project.name} ${
|
|
4055
|
-
hint:
|
|
4311
|
+
label: `${project.name} ${pc12.dim(`(${project.source})`)}`,
|
|
4312
|
+
hint: pc12.dim(
|
|
4056
4313
|
project.source === "global" ? `~/.rrce-workflow/workspaces/${project.name}` : project.dataPath
|
|
4057
4314
|
)
|
|
4058
4315
|
})),
|
|
4059
4316
|
required: true
|
|
4060
4317
|
});
|
|
4061
|
-
if (
|
|
4318
|
+
if (isCancel9(linkedProjects)) {
|
|
4062
4319
|
cancel4("Cancelled.");
|
|
4063
4320
|
process.exit(0);
|
|
4064
4321
|
}
|
|
@@ -4106,17 +4363,17 @@ linked_projects:
|
|
|
4106
4363
|
const workspaceFile = `${workspaceName}.code-workspace`;
|
|
4107
4364
|
const summary = [
|
|
4108
4365
|
`Linked projects:`,
|
|
4109
|
-
...selectedProjects.map((p) => ` \u2713 ${p.name} ${
|
|
4366
|
+
...selectedProjects.map((p) => ` \u2713 ${p.name} ${pc12.dim(`(${p.source})`)}`),
|
|
4110
4367
|
``,
|
|
4111
|
-
`Workspace file: ${
|
|
4368
|
+
`Workspace file: ${pc12.cyan(workspaceFile)}`
|
|
4112
4369
|
];
|
|
4113
|
-
|
|
4114
|
-
outro3(
|
|
4115
|
-
const shouldExpose = await
|
|
4370
|
+
note10(summary.join("\n"), "Link Summary");
|
|
4371
|
+
outro3(pc12.green(`\u2713 Projects linked! Open ${pc12.bold(workspaceFile)} in VSCode to access linked data.`));
|
|
4372
|
+
const shouldExpose = await confirm7({
|
|
4116
4373
|
message: "Also expose these linked projects to the MCP server (for Agent access)?",
|
|
4117
4374
|
initialValue: true
|
|
4118
4375
|
});
|
|
4119
|
-
if (shouldExpose && !
|
|
4376
|
+
if (shouldExpose && !isCancel9(shouldExpose)) {
|
|
4120
4377
|
try {
|
|
4121
4378
|
const { loadMCPConfig: loadMCPConfig3, saveMCPConfig: saveMCPConfig2, setProjectConfig: setProjectConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
4122
4379
|
const mcpConfig = loadMCPConfig3();
|
|
@@ -4124,9 +4381,9 @@ linked_projects:
|
|
|
4124
4381
|
setProjectConfig2(mcpConfig, project.name, true, void 0, project.dataPath);
|
|
4125
4382
|
}
|
|
4126
4383
|
saveMCPConfig2(mcpConfig);
|
|
4127
|
-
|
|
4384
|
+
note10("Projects have been added to the global MCP configuration.", "MCP Updated");
|
|
4128
4385
|
} catch (err) {
|
|
4129
|
-
|
|
4386
|
+
note10(`Failed to update MCP config: ${err}`, "MCP Update Failed");
|
|
4130
4387
|
}
|
|
4131
4388
|
}
|
|
4132
4389
|
}
|
|
@@ -4140,8 +4397,8 @@ var init_link_flow = __esm({
|
|
|
4140
4397
|
});
|
|
4141
4398
|
|
|
4142
4399
|
// src/commands/wizard/sync-flow.ts
|
|
4143
|
-
import { confirm as
|
|
4144
|
-
import
|
|
4400
|
+
import { confirm as confirm8, spinner as spinner5, note as note11, outro as outro4, cancel as cancel5, isCancel as isCancel10 } from "@clack/prompts";
|
|
4401
|
+
import pc13 from "picocolors";
|
|
4145
4402
|
import * as fs17 from "fs";
|
|
4146
4403
|
import * as path17 from "path";
|
|
4147
4404
|
async function runSyncToGlobalFlow(workspacePath, workspaceName) {
|
|
@@ -4153,21 +4410,21 @@ async function runSyncToGlobalFlow(workspacePath, workspaceName) {
|
|
|
4153
4410
|
(dir) => fs17.existsSync(path17.join(localPath, dir))
|
|
4154
4411
|
);
|
|
4155
4412
|
if (existingDirs.length === 0) {
|
|
4156
|
-
outro4(
|
|
4413
|
+
outro4(pc13.yellow("No data found in workspace storage to sync."));
|
|
4157
4414
|
return;
|
|
4158
4415
|
}
|
|
4159
|
-
|
|
4416
|
+
note11(
|
|
4160
4417
|
`The following will be copied to global storage:
|
|
4161
4418
|
${existingDirs.map((d) => ` \u2022 ${d}/`).join("\n")}
|
|
4162
4419
|
|
|
4163
|
-
Destination: ${
|
|
4420
|
+
Destination: ${pc13.cyan(globalPath)}`,
|
|
4164
4421
|
"Sync Preview"
|
|
4165
4422
|
);
|
|
4166
|
-
const shouldSync = await
|
|
4423
|
+
const shouldSync = await confirm8({
|
|
4167
4424
|
message: "Proceed with sync to global storage?",
|
|
4168
4425
|
initialValue: true
|
|
4169
4426
|
});
|
|
4170
|
-
if (
|
|
4427
|
+
if (isCancel10(shouldSync) || !shouldSync) {
|
|
4171
4428
|
outro4("Sync cancelled.");
|
|
4172
4429
|
return;
|
|
4173
4430
|
}
|
|
@@ -4186,12 +4443,12 @@ Destination: ${pc12.cyan(globalPath)}`,
|
|
|
4186
4443
|
`Synced directories:`,
|
|
4187
4444
|
...existingDirs.map((d) => ` \u2713 ${d}/`),
|
|
4188
4445
|
``,
|
|
4189
|
-
`Global path: ${
|
|
4446
|
+
`Global path: ${pc13.cyan(globalPath)}`,
|
|
4190
4447
|
``,
|
|
4191
4448
|
`Other projects can now link this knowledge!`
|
|
4192
4449
|
];
|
|
4193
|
-
|
|
4194
|
-
outro4(
|
|
4450
|
+
note11(summary.join("\n"), "Sync Summary");
|
|
4451
|
+
outro4(pc13.green("\u2713 Workspace knowledge synced to global storage!"));
|
|
4195
4452
|
} catch (error) {
|
|
4196
4453
|
s.stop("Error occurred");
|
|
4197
4454
|
cancel5(`Failed to sync: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -4207,8 +4464,8 @@ var init_sync_flow = __esm({
|
|
|
4207
4464
|
});
|
|
4208
4465
|
|
|
4209
4466
|
// src/commands/wizard/update-flow.ts
|
|
4210
|
-
import { confirm as
|
|
4211
|
-
import
|
|
4467
|
+
import { confirm as confirm9, spinner as spinner6, note as note12, outro as outro5, cancel as cancel6, isCancel as isCancel11 } from "@clack/prompts";
|
|
4468
|
+
import pc14 from "picocolors";
|
|
4212
4469
|
import * as fs18 from "fs";
|
|
4213
4470
|
import * as path18 from "path";
|
|
4214
4471
|
async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
|
|
@@ -4221,7 +4478,7 @@ async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
|
|
|
4221
4478
|
const customGlobalPath = getEffectiveRRCEHome(workspacePath);
|
|
4222
4479
|
const dataPaths = resolveAllDataPathsWithCustomGlobal(mode, workspaceName, workspacePath, customGlobalPath);
|
|
4223
4480
|
s.stop("Updates found");
|
|
4224
|
-
|
|
4481
|
+
note12(
|
|
4225
4482
|
`The following will be updated from the package:
|
|
4226
4483
|
\u2022 prompts/ (${prompts.length} agent prompts)
|
|
4227
4484
|
\u2022 templates/ (output templates)
|
|
@@ -4230,11 +4487,11 @@ Target locations:
|
|
|
4230
4487
|
${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
|
|
4231
4488
|
"Update Preview"
|
|
4232
4489
|
);
|
|
4233
|
-
const shouldUpdate = await
|
|
4490
|
+
const shouldUpdate = await confirm9({
|
|
4234
4491
|
message: "Proceed with update?",
|
|
4235
4492
|
initialValue: true
|
|
4236
4493
|
});
|
|
4237
|
-
if (
|
|
4494
|
+
if (isCancel11(shouldUpdate) || !shouldUpdate) {
|
|
4238
4495
|
outro5("Update cancelled.");
|
|
4239
4496
|
return;
|
|
4240
4497
|
}
|
|
@@ -4264,8 +4521,8 @@ ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
|
|
|
4264
4521
|
``,
|
|
4265
4522
|
`Your configuration and knowledge files were preserved.`
|
|
4266
4523
|
];
|
|
4267
|
-
|
|
4268
|
-
outro5(
|
|
4524
|
+
note12(summary.join("\n"), "Update Summary");
|
|
4525
|
+
outro5(pc14.green("\u2713 Successfully updated from package!"));
|
|
4269
4526
|
} catch (error) {
|
|
4270
4527
|
s.stop("Error occurred");
|
|
4271
4528
|
cancel6(`Failed to update: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -4294,16 +4551,16 @@ var init_update_flow = __esm({
|
|
|
4294
4551
|
});
|
|
4295
4552
|
|
|
4296
4553
|
// src/commands/wizard/delete-flow.ts
|
|
4297
|
-
import { multiselect as
|
|
4298
|
-
import
|
|
4554
|
+
import { multiselect as multiselect6, confirm as confirm10, spinner as spinner7, note as note13, cancel as cancel7, isCancel as isCancel12 } from "@clack/prompts";
|
|
4555
|
+
import pc15 from "picocolors";
|
|
4299
4556
|
import * as fs19 from "fs";
|
|
4300
4557
|
async function runDeleteGlobalProjectFlow(availableProjects) {
|
|
4301
4558
|
const globalProjects = availableProjects.filter((p) => p.source === "global");
|
|
4302
4559
|
if (globalProjects.length === 0) {
|
|
4303
|
-
|
|
4560
|
+
note13("No globally stored projects found to delete.", "Info");
|
|
4304
4561
|
return;
|
|
4305
4562
|
}
|
|
4306
|
-
const selectedProjects = await
|
|
4563
|
+
const selectedProjects = await multiselect6({
|
|
4307
4564
|
message: "Select global projects to DELETE (Irreversible)",
|
|
4308
4565
|
options: globalProjects.map((p) => ({
|
|
4309
4566
|
value: p.name,
|
|
@@ -4312,21 +4569,21 @@ async function runDeleteGlobalProjectFlow(availableProjects) {
|
|
|
4312
4569
|
})),
|
|
4313
4570
|
required: false
|
|
4314
4571
|
});
|
|
4315
|
-
if (
|
|
4572
|
+
if (isCancel12(selectedProjects)) {
|
|
4316
4573
|
cancel7("Deletion cancelled.");
|
|
4317
4574
|
return;
|
|
4318
4575
|
}
|
|
4319
4576
|
const projectsToDelete = selectedProjects;
|
|
4320
4577
|
if (projectsToDelete.length === 0) {
|
|
4321
|
-
|
|
4578
|
+
note13("No projects selected.", "Cancelled");
|
|
4322
4579
|
return;
|
|
4323
4580
|
}
|
|
4324
|
-
const confirmed = await
|
|
4325
|
-
message: `${
|
|
4581
|
+
const confirmed = await confirm10({
|
|
4582
|
+
message: `${pc15.red("WARNING:")} This will PERMANENTLY DELETE the knowledge/config for ${projectsToDelete.length} detected global projects.
|
|
4326
4583
|
Are you sure?`,
|
|
4327
4584
|
initialValue: false
|
|
4328
4585
|
});
|
|
4329
|
-
if (!confirmed ||
|
|
4586
|
+
if (!confirmed || isCancel12(confirmed)) {
|
|
4330
4587
|
cancel7("Deletion cancelled.");
|
|
4331
4588
|
return;
|
|
4332
4589
|
}
|
|
@@ -4351,7 +4608,7 @@ Are you sure?`,
|
|
|
4351
4608
|
await new Promise((r) => setTimeout(r, 1e3));
|
|
4352
4609
|
} catch (error) {
|
|
4353
4610
|
s.stop("Error occurred during deletion");
|
|
4354
|
-
|
|
4611
|
+
note13(`Failed to delete some projects: ${error}`, "Error");
|
|
4355
4612
|
}
|
|
4356
4613
|
}
|
|
4357
4614
|
var init_delete_flow = __esm({
|
|
@@ -4367,11 +4624,11 @@ var wizard_exports = {};
|
|
|
4367
4624
|
__export(wizard_exports, {
|
|
4368
4625
|
runWizard: () => runWizard
|
|
4369
4626
|
});
|
|
4370
|
-
import { intro as intro2, select as select5, spinner as spinner8, note as
|
|
4371
|
-
import
|
|
4627
|
+
import { intro as intro2, select as select5, spinner as spinner8, note as note14, outro as outro7, isCancel as isCancel13 } from "@clack/prompts";
|
|
4628
|
+
import pc16 from "picocolors";
|
|
4372
4629
|
import * as fs20 from "fs";
|
|
4373
4630
|
async function runWizard() {
|
|
4374
|
-
intro2(
|
|
4631
|
+
intro2(pc16.cyan(pc16.inverse(" RRCE-Workflow Setup ")));
|
|
4375
4632
|
const s = spinner8();
|
|
4376
4633
|
s.start("Detecting environment");
|
|
4377
4634
|
const workspacePath = detectWorkspaceRoot();
|
|
@@ -4387,9 +4644,9 @@ async function runWizard() {
|
|
|
4387
4644
|
}
|
|
4388
4645
|
await new Promise((r) => setTimeout(r, 800));
|
|
4389
4646
|
s.stop("Environment detected");
|
|
4390
|
-
|
|
4391
|
-
`Git User: ${
|
|
4392
|
-
Workspace: ${
|
|
4647
|
+
note14(
|
|
4648
|
+
`Git User: ${pc16.bold(gitUser || "(not found)")}
|
|
4649
|
+
Workspace: ${pc16.bold(workspaceName)}`,
|
|
4393
4650
|
"Context"
|
|
4394
4651
|
);
|
|
4395
4652
|
const detectedProjects = projectService.scan({
|
|
@@ -4454,7 +4711,7 @@ Workspace: ${pc15.bold(workspaceName)}`,
|
|
|
4454
4711
|
message: "This workspace is already configured. What would you like to do?",
|
|
4455
4712
|
options: menuOptions
|
|
4456
4713
|
});
|
|
4457
|
-
if (
|
|
4714
|
+
if (isCancel13(action) || action === "exit") {
|
|
4458
4715
|
outro7("Exited.");
|
|
4459
4716
|
process.exit(0);
|
|
4460
4717
|
}
|
|
@@ -4504,12 +4761,12 @@ init_wizard();
|
|
|
4504
4761
|
|
|
4505
4762
|
// src/commands/selector.ts
|
|
4506
4763
|
init_prompts();
|
|
4507
|
-
import { intro as intro3, select as select6, note as
|
|
4508
|
-
import
|
|
4764
|
+
import { intro as intro3, select as select6, note as note15, cancel as cancel9, isCancel as isCancel14, outro as outro8 } from "@clack/prompts";
|
|
4765
|
+
import pc17 from "picocolors";
|
|
4509
4766
|
import * as path19 from "path";
|
|
4510
4767
|
async function runSelector() {
|
|
4511
4768
|
const workspaceName = path19.basename(process.cwd());
|
|
4512
|
-
intro3(
|
|
4769
|
+
intro3(pc17.cyan(pc17.inverse(` RRCE-Workflow | ${workspaceName} `)));
|
|
4513
4770
|
const prompts = loadPromptsFromDir(getAgentCorePromptsDir());
|
|
4514
4771
|
if (prompts.length === 0) {
|
|
4515
4772
|
cancel9("No agents found. Run `rrce-workflow` to set up.");
|
|
@@ -4535,7 +4792,7 @@ async function runSelector() {
|
|
|
4535
4792
|
}))
|
|
4536
4793
|
]
|
|
4537
4794
|
});
|
|
4538
|
-
if (
|
|
4795
|
+
if (isCancel14(selection)) {
|
|
4539
4796
|
cancel9("Selection cancelled.");
|
|
4540
4797
|
process.exit(0);
|
|
4541
4798
|
}
|
|
@@ -4550,9 +4807,9 @@ async function runSelector() {
|
|
|
4550
4807
|
return;
|
|
4551
4808
|
}
|
|
4552
4809
|
const prompt = selection;
|
|
4553
|
-
|
|
4810
|
+
note15(
|
|
4554
4811
|
`Use this agent in your IDE by invoking:
|
|
4555
|
-
${
|
|
4812
|
+
${pc17.bold(pc17.cyan(`@${prompt.frontmatter.name}`))}`,
|
|
4556
4813
|
"Agent Selected"
|
|
4557
4814
|
);
|
|
4558
4815
|
outro8("Done");
|