rrce-workflow 0.2.83 → 0.2.85
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/agent-core/prompts/doctor.md +4 -1
- package/agent-core/prompts/documentation.md +4 -1
- package/agent-core/prompts/executor.md +4 -1
- package/agent-core/prompts/init.md +4 -1
- package/agent-core/prompts/planning_discussion.md +4 -1
- package/agent-core/prompts/research_discussion.md +4 -1
- package/agent-core/prompts/sync.md +4 -1
- package/agent-core/templates/doctor_output.md +2 -2
- package/agent-core/templates/documentation_output.md +2 -2
- package/agent-core/templates/executor_output.md +2 -2
- package/agent-core/templates/init_output.md +3 -4
- package/agent-core/templates/planning_output.md +2 -2
- package/agent-core/templates/research_output.md +2 -2
- package/dist/index.js +60 -39
- package/package.json +1 -1
|
@@ -18,8 +18,11 @@ auto-identity:
|
|
|
18
18
|
|
|
19
19
|
You are the Project Doctor for RRCE-Workflow. Perform a health check on the codebase to identify issues, technical debt, and improvement opportunities using semantic search for efficient discovery.
|
|
20
20
|
|
|
21
|
-
## Path Resolution
|
|
21
|
+
## Path Resolution (CRITICAL)
|
|
22
22
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
23
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
24
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
25
|
+
|
|
23
26
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
24
27
|
|
|
25
28
|
## Pipeline Position
|
|
@@ -20,8 +20,11 @@ auto-identity:
|
|
|
20
20
|
|
|
21
21
|
You are the Documentation Lead for the project. Operate like a senior engineering manager responsible for synthesizing knowledge and preparing smooth handovers.
|
|
22
22
|
|
|
23
|
-
## Path Resolution
|
|
23
|
+
## Path Resolution (CRITICAL)
|
|
24
24
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
25
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
26
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
27
|
+
|
|
25
28
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
26
29
|
|
|
27
30
|
### Tool Usage Guidance
|
|
@@ -16,8 +16,11 @@ auto-identity:
|
|
|
16
16
|
|
|
17
17
|
You are the Executor for RRCE-Workflow. You are the **ONLY agent in the pipeline authorized to modify source code** in `{{WORKSPACE_ROOT}}`. Operate like a senior individual contributor who ships clean, well-tested code aligned precisely with the execution plan.
|
|
18
18
|
|
|
19
|
-
## Path Resolution
|
|
19
|
+
## Path Resolution (CRITICAL)
|
|
20
20
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
21
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
22
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
23
|
+
|
|
21
24
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
22
25
|
|
|
23
26
|
### Tool Usage Guidance
|
|
@@ -15,8 +15,11 @@ auto-identity:
|
|
|
15
15
|
|
|
16
16
|
You are the Project Initializer for RRCE-Workflow. Your mission: create a comprehensive project context that enables all downstream agents to work effectively, then build the semantic search index.
|
|
17
17
|
|
|
18
|
-
## Path Resolution
|
|
18
|
+
## Path Resolution (CRITICAL)
|
|
19
19
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
20
|
+
**CRITICAL:** When filling templates (like `init_output.md`), replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
21
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
22
|
+
|
|
20
23
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
21
24
|
|
|
22
25
|
### Tool Usage Guidance
|
|
@@ -13,8 +13,11 @@ auto-identity:
|
|
|
13
13
|
|
|
14
14
|
You are the Planning & Task Orchestrator for RRCE-Workflow. Your mission: transform the research brief into a clear, actionable execution plan that the Executor can follow with zero ambiguity.
|
|
15
15
|
|
|
16
|
-
## Path Resolution
|
|
16
|
+
## Path Resolution (CRITICAL)
|
|
17
17
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
18
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
19
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
20
|
+
|
|
18
21
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
19
22
|
|
|
20
23
|
### Tool Usage Guidance
|
|
@@ -20,8 +20,11 @@ auto-identity:
|
|
|
20
20
|
|
|
21
21
|
You are the Research & Discussion Lead for RRCE-Workflow. Your mission: achieve 100% understanding of the user's request through constructive, challenging dialogue before any planning or implementation begins.
|
|
22
22
|
|
|
23
|
-
## Path Resolution
|
|
23
|
+
## Path Resolution (CRITICAL)
|
|
24
24
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
25
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
26
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
27
|
+
|
|
25
28
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
26
29
|
|
|
27
30
|
### Tool Usage Guidance
|
|
@@ -14,8 +14,11 @@ auto-identity:
|
|
|
14
14
|
|
|
15
15
|
You are the Knowledge Sync Lead. Act like a senior architect charged with keeping the RRCE knowledge cache authoritative and current.
|
|
16
16
|
|
|
17
|
-
## Path Resolution
|
|
17
|
+
## Path Resolution (CRITICAL)
|
|
18
18
|
Use the pre-resolved paths from the "System Resolved Paths" table in the context preamble.
|
|
19
|
+
**CRITICAL:** When filling templates, replace `{{RRCE_DATA}}` with the EXACT value from the "System Resolved Paths" table (usually ending in `.rrce-workflow/`).
|
|
20
|
+
**DO NOT** use `.rrce/` or any other guessed path. If you see `{{RRCE_DATA}}` in a template, use the system-provided value.
|
|
21
|
+
|
|
19
22
|
For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
20
23
|
|
|
21
24
|
### Tool Usage Guidance
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
3. Add findings under appropriate priority sections
|
|
8
8
|
4. Remove empty sections and placeholder rows
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
10
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
11
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
12
12
|
- {{WORKSPACE_ROOT}}: Source code directory
|
|
13
13
|
|
|
14
14
|
AGENT-FILLED VARIABLES:
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
2. Replace {{variable}} placeholders with actual values
|
|
10
10
|
3. Remove empty sections
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
12
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
13
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
14
14
|
- {{WORKSPACE_NAME}}: Project name
|
|
15
15
|
|
|
16
16
|
AGENT-FILLED VARIABLES:
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
3. Update Implementation Steps table as work progresses
|
|
8
8
|
4. Remove empty sections
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
10
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
11
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
12
12
|
- {{WORKSPACE_NAME}}: Project name
|
|
13
13
|
|
|
14
14
|
AGENT-FILLED VARIABLES:
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
3. Delete sections marked (OPTIONAL) if empty after population
|
|
8
8
|
4. Fill in remaining sections with discovered information
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
11
11
|
- {{WORKSPACE_ROOT}}: Source code directory
|
|
12
12
|
- {{WORKSPACE_NAME}}: Project name
|
|
13
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
13
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
14
14
|
- {{RRCE_HOME}}: Global RRCE home directory
|
|
15
15
|
|
|
16
16
|
AGENT-FILLED VARIABLES:
|
|
@@ -138,8 +138,7 @@
|
|
|
138
138
|
- **Async Patterns**:
|
|
139
139
|
- **Logging**:
|
|
140
140
|
- **Configuration**:
|
|
141
|
-
|
|
142
|
-
### Code Quality Gates
|
|
141
|
+
- **Code Quality Gates**:
|
|
143
142
|
- [ ] Type checking enforced
|
|
144
143
|
- [ ] Lint checks in CI
|
|
145
144
|
- [ ] Code review required
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
2. Replace {{variable}} placeholders with actual values
|
|
7
7
|
3. Remove unused table rows and empty sections
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
9
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
10
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
11
11
|
- {{WORKSPACE_NAME}}: Project name
|
|
12
12
|
|
|
13
13
|
AGENT-FILLED VARIABLES:
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
2. Replace {{variable}} placeholders with actual values
|
|
7
7
|
3. Delete sections that are empty after population
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- {{RRCE_DATA}}: Storage path for knowledge/tasks
|
|
9
|
+
SYSTEM PATH VARIABLES (Must be replaced by agent using System Resolved Paths):
|
|
10
|
+
- {{RRCE_DATA}}: Storage path for knowledge/tasks (Use value from system context!)
|
|
11
11
|
- {{WORKSPACE_NAME}}: Project name
|
|
12
12
|
|
|
13
13
|
AGENT-FILLED VARIABLES:
|
package/dist/index.js
CHANGED
|
@@ -2727,6 +2727,7 @@ var init_resources2 = __esm({
|
|
|
2727
2727
|
|
|
2728
2728
|
// src/mcp/prompts.ts
|
|
2729
2729
|
import * as path17 from "path";
|
|
2730
|
+
import * as fs15 from "fs";
|
|
2730
2731
|
function getAllPrompts() {
|
|
2731
2732
|
const prompts = loadPromptsFromDir(getAgentCorePromptsDir());
|
|
2732
2733
|
return prompts.map((p) => {
|
|
@@ -2765,7 +2766,11 @@ function getPromptDef(name) {
|
|
|
2765
2766
|
}
|
|
2766
2767
|
function renderPromptWithContext(content, args) {
|
|
2767
2768
|
const renderArgs = { ...args };
|
|
2768
|
-
|
|
2769
|
+
let activeProject = detectActiveProject();
|
|
2770
|
+
if (!activeProject) {
|
|
2771
|
+
projectService.refresh();
|
|
2772
|
+
activeProject = detectActiveProject();
|
|
2773
|
+
}
|
|
2769
2774
|
const DEFAULT_RRCE_HOME = getEffectiveGlobalPath();
|
|
2770
2775
|
let resolvedRrceData = ".rrce-workflow/";
|
|
2771
2776
|
let resolvedRrceHome = DEFAULT_RRCE_HOME;
|
|
@@ -2782,6 +2787,21 @@ function renderPromptWithContext(content, args) {
|
|
|
2782
2787
|
const workspacesDir = path17.dirname(activeProject.dataPath);
|
|
2783
2788
|
resolvedRrceHome = path17.dirname(workspacesDir);
|
|
2784
2789
|
}
|
|
2790
|
+
} else {
|
|
2791
|
+
try {
|
|
2792
|
+
const workspaceRoot = detectWorkspaceRoot();
|
|
2793
|
+
const workspaceName = path17.basename(workspaceRoot);
|
|
2794
|
+
const globalWorkspacePath = path17.join(DEFAULT_RRCE_HOME, "workspaces", workspaceName);
|
|
2795
|
+
if (fs15.existsSync(globalWorkspacePath)) {
|
|
2796
|
+
resolvedRrceData = globalWorkspacePath;
|
|
2797
|
+
resolvedWorkspaceRoot = workspaceRoot;
|
|
2798
|
+
resolvedWorkspaceName = workspaceName;
|
|
2799
|
+
if (!resolvedRrceData.endsWith("/") && !resolvedRrceData.endsWith("\\")) {
|
|
2800
|
+
resolvedRrceData += "/";
|
|
2801
|
+
}
|
|
2802
|
+
}
|
|
2803
|
+
} catch (e) {
|
|
2804
|
+
}
|
|
2785
2805
|
}
|
|
2786
2806
|
if (!renderArgs["RRCE_DATA"]) renderArgs["RRCE_DATA"] = resolvedRrceData;
|
|
2787
2807
|
if (!renderArgs["RRCE_HOME"]) renderArgs["RRCE_HOME"] = resolvedRrceHome;
|
|
@@ -2810,6 +2830,7 @@ var init_prompts2 = __esm({
|
|
|
2810
2830
|
init_prompts();
|
|
2811
2831
|
init_resources();
|
|
2812
2832
|
init_paths();
|
|
2833
|
+
init_detection_service();
|
|
2813
2834
|
}
|
|
2814
2835
|
});
|
|
2815
2836
|
|
|
@@ -3323,7 +3344,7 @@ Hidden projects: ${projects.length - exposedCount}`,
|
|
|
3323
3344
|
}
|
|
3324
3345
|
async function handleConfigureGlobalPath() {
|
|
3325
3346
|
const { resolveGlobalPath: resolveGlobalPath2 } = await Promise.resolve().then(() => (init_tui_utils(), tui_utils_exports));
|
|
3326
|
-
const
|
|
3347
|
+
const fs22 = await import("fs");
|
|
3327
3348
|
const path21 = await import("path");
|
|
3328
3349
|
note3(
|
|
3329
3350
|
`MCP Hub requires a ${pc5.bold("global storage path")} to store its configuration
|
|
@@ -3338,8 +3359,8 @@ locally in each project. MCP needs a central location.`,
|
|
|
3338
3359
|
return false;
|
|
3339
3360
|
}
|
|
3340
3361
|
try {
|
|
3341
|
-
if (!
|
|
3342
|
-
|
|
3362
|
+
if (!fs22.existsSync(resolvedPath)) {
|
|
3363
|
+
fs22.mkdirSync(resolvedPath, { recursive: true });
|
|
3343
3364
|
}
|
|
3344
3365
|
const config = loadMCPConfig();
|
|
3345
3366
|
saveMCPConfig(config);
|
|
@@ -3993,7 +4014,7 @@ __export(App_exports, {
|
|
|
3993
4014
|
});
|
|
3994
4015
|
import { useState as useState5, useEffect as useEffect4, useMemo as useMemo2, useCallback } from "react";
|
|
3995
4016
|
import { Box as Box11, useInput as useInput4, useApp } from "ink";
|
|
3996
|
-
import
|
|
4017
|
+
import fs16 from "fs";
|
|
3997
4018
|
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
3998
4019
|
var App;
|
|
3999
4020
|
var init_App = __esm({
|
|
@@ -4078,18 +4099,18 @@ var init_App = __esm({
|
|
|
4078
4099
|
useEffect4(() => {
|
|
4079
4100
|
const logPath = getLogFilePath();
|
|
4080
4101
|
let lastSize = 0;
|
|
4081
|
-
if (
|
|
4082
|
-
const stats =
|
|
4102
|
+
if (fs16.existsSync(logPath)) {
|
|
4103
|
+
const stats = fs16.statSync(logPath);
|
|
4083
4104
|
lastSize = stats.size;
|
|
4084
4105
|
}
|
|
4085
4106
|
const interval = setInterval(() => {
|
|
4086
|
-
if (
|
|
4087
|
-
const stats =
|
|
4107
|
+
if (fs16.existsSync(logPath)) {
|
|
4108
|
+
const stats = fs16.statSync(logPath);
|
|
4088
4109
|
if (stats.size > lastSize) {
|
|
4089
4110
|
const buffer = Buffer.alloc(stats.size - lastSize);
|
|
4090
|
-
const fd =
|
|
4091
|
-
|
|
4092
|
-
|
|
4111
|
+
const fd = fs16.openSync(logPath, "r");
|
|
4112
|
+
fs16.readSync(fd, buffer, 0, buffer.length, lastSize);
|
|
4113
|
+
fs16.closeSync(fd);
|
|
4093
4114
|
const newContent = buffer.toString("utf-8");
|
|
4094
4115
|
const newLines = newContent.split("\n").filter((l) => l.trim());
|
|
4095
4116
|
setLogs((prev) => {
|
|
@@ -4745,7 +4766,7 @@ var init_setup_flow = __esm({
|
|
|
4745
4766
|
// src/commands/wizard/link-flow.ts
|
|
4746
4767
|
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";
|
|
4747
4768
|
import pc12 from "picocolors";
|
|
4748
|
-
import * as
|
|
4769
|
+
import * as fs17 from "fs";
|
|
4749
4770
|
async function runLinkProjectsFlow(workspacePath, workspaceName) {
|
|
4750
4771
|
const projects = scanForProjects({
|
|
4751
4772
|
excludeWorkspace: workspaceName,
|
|
@@ -4783,7 +4804,7 @@ async function runLinkProjectsFlow(workspacePath, workspaceName) {
|
|
|
4783
4804
|
const s = spinner4();
|
|
4784
4805
|
s.start("Linking projects");
|
|
4785
4806
|
const configFilePath = getConfigPath(workspacePath);
|
|
4786
|
-
let configContent =
|
|
4807
|
+
let configContent = fs17.readFileSync(configFilePath, "utf-8");
|
|
4787
4808
|
if (configContent.includes("linked_projects:")) {
|
|
4788
4809
|
const lines = configContent.split("\n");
|
|
4789
4810
|
const linkedIndex = lines.findIndex((l) => l.trim() === "linked_projects:");
|
|
@@ -4810,7 +4831,7 @@ linked_projects:
|
|
|
4810
4831
|
`;
|
|
4811
4832
|
});
|
|
4812
4833
|
}
|
|
4813
|
-
|
|
4834
|
+
fs17.writeFileSync(configFilePath, configContent);
|
|
4814
4835
|
generateVSCodeWorkspace(workspacePath, workspaceName, selectedProjects, customGlobalPath);
|
|
4815
4836
|
s.stop("Projects linked");
|
|
4816
4837
|
const workspaceFile = `${workspaceName}.code-workspace`;
|
|
@@ -4852,7 +4873,7 @@ var init_link_flow = __esm({
|
|
|
4852
4873
|
// src/commands/wizard/sync-flow.ts
|
|
4853
4874
|
import { confirm as confirm8, spinner as spinner5, note as note11, outro as outro4, cancel as cancel5, isCancel as isCancel10 } from "@clack/prompts";
|
|
4854
4875
|
import pc13 from "picocolors";
|
|
4855
|
-
import * as
|
|
4876
|
+
import * as fs18 from "fs";
|
|
4856
4877
|
import * as path18 from "path";
|
|
4857
4878
|
async function runSyncToGlobalFlow(workspacePath, workspaceName) {
|
|
4858
4879
|
const localPath = getLocalWorkspacePath(workspacePath);
|
|
@@ -4860,7 +4881,7 @@ async function runSyncToGlobalFlow(workspacePath, workspaceName) {
|
|
|
4860
4881
|
const globalPath = path18.join(customGlobalPath, "workspaces", workspaceName);
|
|
4861
4882
|
const subdirs = ["knowledge", "prompts", "templates", "tasks", "refs"];
|
|
4862
4883
|
const existingDirs = subdirs.filter(
|
|
4863
|
-
(dir) =>
|
|
4884
|
+
(dir) => fs18.existsSync(path18.join(localPath, dir))
|
|
4864
4885
|
);
|
|
4865
4886
|
if (existingDirs.length === 0) {
|
|
4866
4887
|
outro4(pc13.yellow("No data found in workspace storage to sync."));
|
|
@@ -4919,7 +4940,7 @@ var init_sync_flow = __esm({
|
|
|
4919
4940
|
// src/commands/wizard/update-flow.ts
|
|
4920
4941
|
import { confirm as confirm9, spinner as spinner6, note as note12, outro as outro5, cancel as cancel6, isCancel as isCancel11 } from "@clack/prompts";
|
|
4921
4942
|
import pc14 from "picocolors";
|
|
4922
|
-
import * as
|
|
4943
|
+
import * as fs19 from "fs";
|
|
4923
4944
|
import * as path19 from "path";
|
|
4924
4945
|
import { stringify as stringify3 } from "yaml";
|
|
4925
4946
|
async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
|
|
@@ -4939,8 +4960,8 @@ async function runUpdateFlow(workspacePath, workspaceName, currentStorageMode) {
|
|
|
4939
4960
|
];
|
|
4940
4961
|
const configFilePath = getConfigPath(workspacePath);
|
|
4941
4962
|
const ideTargets = [];
|
|
4942
|
-
if (
|
|
4943
|
-
const configContent =
|
|
4963
|
+
if (fs19.existsSync(configFilePath)) {
|
|
4964
|
+
const configContent = fs19.readFileSync(configFilePath, "utf-8");
|
|
4944
4965
|
if (configContent.includes("opencode: true")) ideTargets.push("OpenCode agents");
|
|
4945
4966
|
if (configContent.includes("copilot: true")) ideTargets.push("GitHub Copilot");
|
|
4946
4967
|
if (configContent.includes("antigravity: true")) ideTargets.push("Antigravity");
|
|
@@ -4975,8 +4996,8 @@ ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
|
|
|
4975
4996
|
ensureDir(path19.join(rrceHome, "docs"));
|
|
4976
4997
|
copyDirRecursive(path19.join(agentCoreDir, "templates"), path19.join(rrceHome, "templates"));
|
|
4977
4998
|
copyDirRecursive(path19.join(agentCoreDir, "docs"), path19.join(rrceHome, "docs"));
|
|
4978
|
-
if (
|
|
4979
|
-
const configContent =
|
|
4999
|
+
if (fs19.existsSync(configFilePath)) {
|
|
5000
|
+
const configContent = fs19.readFileSync(configFilePath, "utf-8");
|
|
4980
5001
|
if (configContent.includes("copilot: true")) {
|
|
4981
5002
|
const copilotPath = getAgentPromptPath(workspacePath, "copilot");
|
|
4982
5003
|
ensureDir(copilotPath);
|
|
@@ -5026,8 +5047,8 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
|
|
|
5026
5047
|
const promptsDir = path19.join(path19.dirname(OPENCODE_CONFIG), "prompts");
|
|
5027
5048
|
ensureDir(promptsDir);
|
|
5028
5049
|
let opencodeConfig = { $schema: "https://opencode.ai/config.json" };
|
|
5029
|
-
if (
|
|
5030
|
-
opencodeConfig = JSON.parse(
|
|
5050
|
+
if (fs19.existsSync(OPENCODE_CONFIG)) {
|
|
5051
|
+
opencodeConfig = JSON.parse(fs19.readFileSync(OPENCODE_CONFIG, "utf-8"));
|
|
5031
5052
|
}
|
|
5032
5053
|
if (!opencodeConfig.agent) opencodeConfig.agent = {};
|
|
5033
5054
|
const currentAgentNames = prompts.map((p) => path19.basename(p.filePath, ".md"));
|
|
@@ -5039,8 +5060,8 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
|
|
|
5039
5060
|
if (isRrceAgent && !stillExists) {
|
|
5040
5061
|
delete opencodeConfig.agent[existingName];
|
|
5041
5062
|
const oldPromptFile = path19.join(promptsDir, `rrce-${existingName}.md`);
|
|
5042
|
-
if (
|
|
5043
|
-
|
|
5063
|
+
if (fs19.existsSync(oldPromptFile)) {
|
|
5064
|
+
fs19.unlinkSync(oldPromptFile);
|
|
5044
5065
|
}
|
|
5045
5066
|
}
|
|
5046
5067
|
}
|
|
@@ -5048,11 +5069,11 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
|
|
|
5048
5069
|
const baseName = path19.basename(prompt.filePath, ".md");
|
|
5049
5070
|
const promptFileName = `rrce-${baseName}.md`;
|
|
5050
5071
|
const promptFilePath = path19.join(promptsDir, promptFileName);
|
|
5051
|
-
|
|
5072
|
+
fs19.writeFileSync(promptFilePath, prompt.content);
|
|
5052
5073
|
const agentConfig = convertToOpenCodeAgent(prompt, true, `./prompts/${promptFileName}`);
|
|
5053
5074
|
opencodeConfig.agent[baseName] = agentConfig;
|
|
5054
5075
|
}
|
|
5055
|
-
|
|
5076
|
+
fs19.writeFileSync(OPENCODE_CONFIG, JSON.stringify(opencodeConfig, null, 2) + "\n");
|
|
5056
5077
|
} catch (e) {
|
|
5057
5078
|
console.error("Failed to update global OpenCode config with agents:", e);
|
|
5058
5079
|
}
|
|
@@ -5070,16 +5091,16 @@ ${stringify3({
|
|
|
5070
5091
|
tools: agentConfig.tools
|
|
5071
5092
|
})}---
|
|
5072
5093
|
${agentConfig.prompt}`;
|
|
5073
|
-
|
|
5094
|
+
fs19.writeFileSync(path19.join(opencodeBaseDir, `${baseName}.md`), content);
|
|
5074
5095
|
}
|
|
5075
5096
|
}
|
|
5076
5097
|
}
|
|
5077
5098
|
function clearDirectory(dirPath) {
|
|
5078
|
-
if (!
|
|
5079
|
-
const entries =
|
|
5099
|
+
if (!fs19.existsSync(dirPath)) return;
|
|
5100
|
+
const entries = fs19.readdirSync(dirPath, { withFileTypes: true });
|
|
5080
5101
|
for (const entry of entries) {
|
|
5081
5102
|
if (entry.isFile()) {
|
|
5082
|
-
|
|
5103
|
+
fs19.unlinkSync(path19.join(dirPath, entry.name));
|
|
5083
5104
|
}
|
|
5084
5105
|
}
|
|
5085
5106
|
}
|
|
@@ -5108,7 +5129,7 @@ var init_update_flow = __esm({
|
|
|
5108
5129
|
// src/commands/wizard/delete-flow.ts
|
|
5109
5130
|
import { multiselect as multiselect6, confirm as confirm10, spinner as spinner7, note as note13, cancel as cancel7, isCancel as isCancel12 } from "@clack/prompts";
|
|
5110
5131
|
import pc15 from "picocolors";
|
|
5111
|
-
import * as
|
|
5132
|
+
import * as fs20 from "fs";
|
|
5112
5133
|
async function runDeleteGlobalProjectFlow(availableProjects) {
|
|
5113
5134
|
const globalProjects = availableProjects.filter((p) => p.source === "global");
|
|
5114
5135
|
if (globalProjects.length === 0) {
|
|
@@ -5150,8 +5171,8 @@ Are you sure?`,
|
|
|
5150
5171
|
for (const projectName of projectsToDelete) {
|
|
5151
5172
|
const project = globalProjects.find((p) => p.name === projectName);
|
|
5152
5173
|
if (!project) continue;
|
|
5153
|
-
if (
|
|
5154
|
-
|
|
5174
|
+
if (fs20.existsSync(project.dataPath)) {
|
|
5175
|
+
fs20.rmSync(project.dataPath, { recursive: true, force: true });
|
|
5155
5176
|
}
|
|
5156
5177
|
const newConfig = removeProjectConfig(mcpConfig, projectName);
|
|
5157
5178
|
configChanged = true;
|
|
@@ -5181,7 +5202,7 @@ __export(wizard_exports, {
|
|
|
5181
5202
|
});
|
|
5182
5203
|
import { intro as intro2, select as select5, spinner as spinner8, note as note14, outro as outro7, isCancel as isCancel13 } from "@clack/prompts";
|
|
5183
5204
|
import pc16 from "picocolors";
|
|
5184
|
-
import * as
|
|
5205
|
+
import * as fs21 from "fs";
|
|
5185
5206
|
async function runWizard() {
|
|
5186
5207
|
intro2(pc16.cyan(pc16.inverse(" RRCE-Workflow Setup ")));
|
|
5187
5208
|
const s = spinner8();
|
|
@@ -5209,11 +5230,11 @@ Workspace: ${pc16.bold(workspaceName)}`,
|
|
|
5209
5230
|
workspacePath
|
|
5210
5231
|
});
|
|
5211
5232
|
const configFilePath = getConfigPath(workspacePath);
|
|
5212
|
-
let isAlreadyConfigured =
|
|
5233
|
+
let isAlreadyConfigured = fs21.existsSync(configFilePath);
|
|
5213
5234
|
let currentStorageMode = null;
|
|
5214
5235
|
if (isAlreadyConfigured) {
|
|
5215
5236
|
try {
|
|
5216
|
-
const configContent =
|
|
5237
|
+
const configContent = fs21.readFileSync(configFilePath, "utf-8");
|
|
5217
5238
|
const modeMatch = configContent.match(/mode:\s*(global|workspace)/);
|
|
5218
5239
|
currentStorageMode = modeMatch?.[1] ?? null;
|
|
5219
5240
|
} catch {
|
|
@@ -5230,7 +5251,7 @@ Workspace: ${pc16.bold(workspaceName)}`,
|
|
|
5230
5251
|
}
|
|
5231
5252
|
}
|
|
5232
5253
|
const localDataPath = getLocalWorkspacePath(workspacePath);
|
|
5233
|
-
const hasLocalData =
|
|
5254
|
+
const hasLocalData = fs21.existsSync(localDataPath);
|
|
5234
5255
|
if (isAlreadyConfigured) {
|
|
5235
5256
|
const menuOptions = [];
|
|
5236
5257
|
menuOptions.push({
|