rrce-workflow 0.2.19 → 0.2.21
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 +3 -6
- package/agent-core/prompts/documentation.md +2 -2
- package/agent-core/prompts/executor.md +2 -2
- package/agent-core/prompts/init.md +1 -2
- package/agent-core/prompts/planning_orchestrator.md +2 -2
- package/agent-core/prompts/research_discussion.md +2 -2
- package/agent-core/prompts/sync.md +2 -2
- package/agent-core/templates/documentation_output.md +0 -1
- package/agent-core/templates/executor_output.md +0 -1
- package/agent-core/templates/init_output.md +0 -1
- package/agent-core/templates/planning_output.md +0 -1
- package/agent-core/templates/research_output.md +0 -1
- package/dist/index.js +61 -18
- package/docs/architecture.md +1 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ npx rrce-workflow
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
The wizard will:
|
|
34
|
-
1. Ask where to store workflow data (global
|
|
34
|
+
1. Ask where to store workflow data (global or workspace)
|
|
35
35
|
2. Let you choose a custom global path if the default isn't writable
|
|
36
36
|
3. Ask which AI tools you use (GitHub Copilot, Antigravity)
|
|
37
37
|
4. Set up prompts and knowledge folders
|
|
@@ -89,7 +89,7 @@ All agents read `.rrce-workflow/config.yaml` to resolve paths:
|
|
|
89
89
|
|
|
90
90
|
```yaml
|
|
91
91
|
storage:
|
|
92
|
-
mode: workspace # or: global
|
|
92
|
+
mode: workspace # or: global
|
|
93
93
|
globalPath: "~/.rrce-workflow" # optional custom path
|
|
94
94
|
|
|
95
95
|
project:
|
|
@@ -97,13 +97,11 @@ project:
|
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
Agents resolve `{{RRCE_DATA}}` based on storage mode:
|
|
100
|
-
- `workspace` → `.rrce-workflow/`
|
|
101
100
|
- `global` → `~/.rrce-workflow/workspaces/my-project/`
|
|
102
|
-
- `both` → `.rrce-workflow/` (primary, synced to global)
|
|
103
101
|
|
|
104
102
|
### Cross-Project References
|
|
105
103
|
|
|
106
|
-
When using `global`
|
|
104
|
+
When using `global` mode, you can reference other projects:
|
|
107
105
|
|
|
108
106
|
```
|
|
109
107
|
~/.rrce-workflow/workspaces/other-project/knowledge/project-context.md
|
|
@@ -151,7 +149,6 @@ When you run the wizard on an already-configured project, you'll see:
|
|
|
151
149
|
|------|----------|----------|
|
|
152
150
|
| `global` | `~/.rrce-workflow/workspaces/<name>/` | Clean workspace, cross-project references |
|
|
153
151
|
| `workspace` | `.rrce-workflow/` | Team sharing, portable with repo |
|
|
154
|
-
| `both` | Both locations (synced) | Full redundancy + cross-project access |
|
|
155
152
|
|
|
156
153
|
---
|
|
157
154
|
|
|
@@ -24,7 +24,7 @@ You are the Documentation Lead for the project. Operate like a senior engineerin
|
|
|
24
24
|
Before doing ANY work, read `.rrce-workflow/config.yaml` and resolve these variables:
|
|
25
25
|
```
|
|
26
26
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
27
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
27
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
28
28
|
```
|
|
29
29
|
Use these resolved paths for ALL subsequent file operations.
|
|
30
30
|
|
|
@@ -60,7 +60,7 @@ Path Resolution
|
|
|
60
60
|
|
|
61
61
|
**How to resolve `{{RRCE_DATA}}`**:
|
|
62
62
|
1. Read `config.yaml` → get `storage.mode` and `project.name`
|
|
63
|
-
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
63
|
+
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
64
64
|
|
|
65
65
|
**How to resolve `{{RRCE_HOME}}`**: `config.yaml` → `storage.globalPath` or default `~/.rrce-workflow`
|
|
66
66
|
|
|
@@ -20,7 +20,7 @@ You are the Executor for the project. Operate like a senior individual contribut
|
|
|
20
20
|
Before doing ANY work, read `.rrce-workflow/config.yaml` and resolve these variables:
|
|
21
21
|
```
|
|
22
22
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
23
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
23
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
24
24
|
```
|
|
25
25
|
Use these resolved paths for ALL subsequent file operations.
|
|
26
26
|
|
|
@@ -64,7 +64,7 @@ Path Resolution
|
|
|
64
64
|
|
|
65
65
|
**How to resolve `{{RRCE_DATA}}`**:
|
|
66
66
|
1. Read `config.yaml` → get `storage.mode` and `project.name`
|
|
67
|
-
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
67
|
+
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
68
68
|
|
|
69
69
|
**How to resolve `{{RRCE_HOME}}`**: `config.yaml` → `storage.globalPath` or default `~/.rrce-workflow`
|
|
70
70
|
|
|
@@ -19,7 +19,7 @@ You are the Project Initializer for RRCE-Workflow. Operate like a senior archite
|
|
|
19
19
|
Before doing ANY work, read `.rrce-workflow/config.yaml` (if it exists) and resolve these variables:
|
|
20
20
|
```
|
|
21
21
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
22
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
22
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
23
23
|
```
|
|
24
24
|
If config doesn't exist yet (new project), use defaults: `RRCE_HOME=~/.rrce-workflow`, `RRCE_DATA=.rrce-workflow/`
|
|
25
25
|
|
|
@@ -50,7 +50,6 @@ Path Resolution
|
|
|
50
50
|
3. Resolve based on mode:
|
|
51
51
|
- `workspace` → `<workspace>/.rrce-workflow/`
|
|
52
52
|
- `global` → `{{RRCE_HOME}}/workspaces/<project.name>/`
|
|
53
|
-
- `both` → `<workspace>/.rrce-workflow/` (primary), synced to global
|
|
54
53
|
|
|
55
54
|
**How to resolve `{{RRCE_HOME}}`** (global home):
|
|
56
55
|
1. Read `.rrce-workflow/config.yaml`
|
|
@@ -17,7 +17,7 @@ You are the Planning & Task Orchestrator for the project. Operate like an engine
|
|
|
17
17
|
Before doing ANY work, read `.rrce-workflow/config.yaml` and resolve these variables:
|
|
18
18
|
```
|
|
19
19
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
20
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
20
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
21
21
|
```
|
|
22
22
|
Use these resolved paths for ALL subsequent file operations.
|
|
23
23
|
|
|
@@ -56,7 +56,7 @@ Path Resolution
|
|
|
56
56
|
|
|
57
57
|
**How to resolve `{{RRCE_DATA}}`**:
|
|
58
58
|
1. Read `config.yaml` → get `storage.mode` and `project.name`
|
|
59
|
-
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
59
|
+
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
60
60
|
|
|
61
61
|
**How to resolve `{{RRCE_HOME}}`**: `config.yaml` → `storage.globalPath` or default `~/.rrce-workflow`
|
|
62
62
|
|
|
@@ -24,7 +24,7 @@ You are the Research & Discussion Lead for the project. Operate like a staff-lev
|
|
|
24
24
|
Before doing ANY work, read `.rrce-workflow/config.yaml` and resolve these variables:
|
|
25
25
|
```
|
|
26
26
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
27
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
27
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
28
28
|
```
|
|
29
29
|
Use these resolved paths for ALL subsequent file operations.
|
|
30
30
|
|
|
@@ -50,7 +50,7 @@ Path Resolution
|
|
|
50
50
|
|
|
51
51
|
**How to resolve `{{RRCE_DATA}}`**:
|
|
52
52
|
1. Read `config.yaml` → get `storage.mode` and `project.name`
|
|
53
|
-
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
53
|
+
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
54
54
|
|
|
55
55
|
**How to resolve `{{RRCE_HOME}}`**: `config.yaml` → `storage.globalPath` or default `~/.rrce-workflow`
|
|
56
56
|
|
|
@@ -18,7 +18,7 @@ You are the Knowledge Sync Lead. Act like a senior architect charged with keepin
|
|
|
18
18
|
Before doing ANY work, read `.rrce-workflow/config.yaml` and resolve these variables:
|
|
19
19
|
```
|
|
20
20
|
RRCE_HOME = config.storage.globalPath OR "~/.rrce-workflow"
|
|
21
|
-
RRCE_DATA = (config.storage.mode == "workspace"
|
|
21
|
+
RRCE_DATA = (config.storage.mode == "workspace") ? ".rrce-workflow/" : "${RRCE_HOME}/workspaces/${config.project.name}/"
|
|
22
22
|
```
|
|
23
23
|
Use these resolved paths for ALL subsequent file operations.
|
|
24
24
|
|
|
@@ -50,7 +50,7 @@ Path Resolution
|
|
|
50
50
|
|
|
51
51
|
**How to resolve `{{RRCE_DATA}}`**:
|
|
52
52
|
1. Read `config.yaml` → get `storage.mode` and `project.name`
|
|
53
|
-
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
53
|
+
2. Resolve: `workspace` → `.rrce-workflow/` | `global` → `{{RRCE_HOME}}/workspaces/<name>/`
|
|
54
54
|
|
|
55
55
|
**How to resolve `{{RRCE_HOME}}`**: `config.yaml` → `storage.globalPath` or default `~/.rrce-workflow`
|
|
56
56
|
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- {{RRCE_DATA}}: Primary storage path (resolves based on storage mode in .rrce-workflow/config.yaml)
|
|
4
4
|
- global: {{RRCE_HOME}}/workspaces/<workspace-name>/
|
|
5
5
|
- workspace: <workspace>/.rrce-workflow/
|
|
6
|
-
- both: <workspace>/.rrce-workflow/ (primary, auto-synced to global)
|
|
7
6
|
- {{RRCE_HOME}}: Global home (default: ~/.rrce-workflow, customizable via storage.globalPath in config)
|
|
8
7
|
- {{WORKSPACE_ROOT}}: Workspace root directory
|
|
9
8
|
- {{WORKSPACE_NAME}}: Workspace name from config or directory name
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- {{RRCE_DATA}}: Primary storage path (resolves based on storage mode in .rrce-workflow/config.yaml)
|
|
4
4
|
- global: {{RRCE_HOME}}/workspaces/<workspace-name>/
|
|
5
5
|
- workspace: <workspace>/.rrce-workflow/
|
|
6
|
-
- both: <workspace>/.rrce-workflow/ (primary, auto-synced to global)
|
|
7
6
|
- {{RRCE_HOME}}: Global home (default: ~/.rrce-workflow, customizable via storage.globalPath in config)
|
|
8
7
|
- {{WORKSPACE_ROOT}}: Workspace root directory
|
|
9
8
|
- {{WORKSPACE_NAME}}: Workspace name from config or directory name
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- {{RRCE_DATA}}: Primary storage path (resolves based on storage mode in .rrce-workflow/config.yaml)
|
|
4
4
|
- global: {{RRCE_HOME}}/workspaces/<workspace-name>/
|
|
5
5
|
- workspace: <workspace>/.rrce-workflow/
|
|
6
|
-
- both: <workspace>/.rrce-workflow/ (primary, auto-synced to global)
|
|
7
6
|
- {{RRCE_HOME}}: Global home (default: ~/.rrce-workflow, customizable via storage.globalPath in config)
|
|
8
7
|
- {{WORKSPACE_ROOT}}: Workspace root directory
|
|
9
8
|
- {{WORKSPACE_NAME}}: Workspace name from config or directory name
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- {{RRCE_DATA}}: Primary storage path (resolves based on storage mode in .rrce-workflow/config.yaml)
|
|
4
4
|
- global: {{RRCE_HOME}}/workspaces/<workspace-name>/
|
|
5
5
|
- workspace: <workspace>/.rrce-workflow/
|
|
6
|
-
- both: <workspace>/.rrce-workflow/ (primary, auto-synced to global)
|
|
7
6
|
- {{RRCE_HOME}}: Global home (default: ~/.rrce-workflow, customizable via storage.globalPath in config)
|
|
8
7
|
- {{WORKSPACE_ROOT}}: Workspace root directory
|
|
9
8
|
- {{WORKSPACE_NAME}}: Workspace name from config or directory name
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
- {{RRCE_DATA}}: Primary storage path (resolves based on storage mode in .rrce-workflow/config.yaml)
|
|
4
4
|
- global: {{RRCE_HOME}}/workspaces/<workspace-name>/
|
|
5
5
|
- workspace: <workspace>/.rrce-workflow/
|
|
6
|
-
- both: <workspace>/.rrce-workflow/ (primary, auto-synced to global)
|
|
7
6
|
- {{RRCE_HOME}}: Global home (default: ~/.rrce-workflow, customizable via storage.globalPath in config)
|
|
8
7
|
- {{WORKSPACE_ROOT}}: Workspace root directory
|
|
9
8
|
- {{WORKSPACE_NAME}}: Workspace name from config or directory name
|
package/dist/index.js
CHANGED
|
@@ -256,7 +256,7 @@ function parseWorkspaceConfig(configPath) {
|
|
|
256
256
|
try {
|
|
257
257
|
const content = fs2.readFileSync(configPath, "utf-8");
|
|
258
258
|
const nameMatch = content.match(/name:\s*["']?([^"'\n]+)["']?/);
|
|
259
|
-
const modeMatch = content.match(/mode:\s*(global|workspace
|
|
259
|
+
const modeMatch = content.match(/mode:\s*(global|workspace)/);
|
|
260
260
|
const linkedProjects = [];
|
|
261
261
|
const linkedMatch = content.match(/linked_projects:\s*\n((?:\s+-\s+[^\n]+\n?)+)/);
|
|
262
262
|
if (linkedMatch && linkedMatch[1]) {
|
|
@@ -348,7 +348,7 @@ function loadPromptsFromDir(dirPath) {
|
|
|
348
348
|
return prompts;
|
|
349
349
|
}
|
|
350
350
|
function getAgentCoreDir() {
|
|
351
|
-
return path3.join(__dirname, "..", "
|
|
351
|
+
return path3.join(__dirname, "..", "agent-core");
|
|
352
352
|
}
|
|
353
353
|
function getAgentCorePromptsDir() {
|
|
354
354
|
return path3.join(getAgentCoreDir(), "prompts");
|
|
@@ -578,9 +578,8 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
578
578
|
storageMode: () => select({
|
|
579
579
|
message: "Where should workflow data be stored?",
|
|
580
580
|
options: [
|
|
581
|
-
{ value: "global", label: "Global (~/.rrce-workflow/)" },
|
|
582
|
-
{ value: "workspace", label: "Workspace (.rrce-workflow/)" }
|
|
583
|
-
{ value: "both", label: "Both" }
|
|
581
|
+
{ value: "global", label: "Global (~/.rrce-workflow/)", hint: "Cross-project access, clean workspace" },
|
|
582
|
+
{ value: "workspace", label: "Workspace (.rrce-workflow/)", hint: "Self-contained, version with repo" }
|
|
584
583
|
],
|
|
585
584
|
initialValue: "global"
|
|
586
585
|
}),
|
|
@@ -609,6 +608,10 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
609
608
|
required: false
|
|
610
609
|
});
|
|
611
610
|
},
|
|
611
|
+
addToGitignore: () => confirm({
|
|
612
|
+
message: "Add generated folders to .gitignore?",
|
|
613
|
+
initialValue: true
|
|
614
|
+
}),
|
|
612
615
|
confirm: () => confirm({
|
|
613
616
|
message: "Create configuration?",
|
|
614
617
|
initialValue: true
|
|
@@ -626,7 +629,7 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
626
629
|
process.exit(0);
|
|
627
630
|
}
|
|
628
631
|
let customGlobalPath;
|
|
629
|
-
if (config.storageMode === "global"
|
|
632
|
+
if (config.storageMode === "global") {
|
|
630
633
|
customGlobalPath = await resolveGlobalPath();
|
|
631
634
|
if (!customGlobalPath) {
|
|
632
635
|
cancel("Setup cancelled - no writable global path available.");
|
|
@@ -639,7 +642,8 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
639
642
|
storageMode: config.storageMode,
|
|
640
643
|
globalPath: customGlobalPath,
|
|
641
644
|
tools: config.tools,
|
|
642
|
-
linkedProjects: config.linkedProjects
|
|
645
|
+
linkedProjects: config.linkedProjects,
|
|
646
|
+
addToGitignore: config.addToGitignore
|
|
643
647
|
}, workspacePath, workspaceName, existingProjects);
|
|
644
648
|
s.stop("Configuration generated");
|
|
645
649
|
const dataPaths = getDataPaths(
|
|
@@ -649,7 +653,7 @@ async function runSetupFlow(workspacePath, workspaceName, existingProjects) {
|
|
|
649
653
|
customGlobalPath
|
|
650
654
|
);
|
|
651
655
|
const summary = [
|
|
652
|
-
`Storage: ${config.storageMode
|
|
656
|
+
`Storage: ${config.storageMode}`
|
|
653
657
|
];
|
|
654
658
|
if (customGlobalPath && customGlobalPath !== getDefaultRRCEHome()) {
|
|
655
659
|
summary.push(`Global path: ${pc2.cyan(customGlobalPath)}`);
|
|
@@ -791,6 +795,9 @@ linked_projects:
|
|
|
791
795
|
});
|
|
792
796
|
}
|
|
793
797
|
fs7.writeFileSync(workspaceConfigPath, configContent);
|
|
798
|
+
if (config.addToGitignore) {
|
|
799
|
+
updateGitignore(workspacePath, config.storageMode, config.tools);
|
|
800
|
+
}
|
|
794
801
|
if (config.tools.includes("copilot") || config.linkedProjects.length > 0) {
|
|
795
802
|
const selectedProjects = allProjects.filter(
|
|
796
803
|
(p) => config.linkedProjects.includes(`${p.name}:${p.source}`)
|
|
@@ -806,12 +813,55 @@ function getDataPaths(mode, workspaceName, workspaceRoot, customGlobalPath) {
|
|
|
806
813
|
return [globalPath];
|
|
807
814
|
case "workspace":
|
|
808
815
|
return [workspacePath];
|
|
809
|
-
case "both":
|
|
810
|
-
return [workspacePath, globalPath];
|
|
811
816
|
default:
|
|
812
817
|
return [globalPath];
|
|
813
818
|
}
|
|
814
819
|
}
|
|
820
|
+
function updateGitignore(workspacePath, storageMode, tools) {
|
|
821
|
+
const gitignorePath = path7.join(workspacePath, ".gitignore");
|
|
822
|
+
const entries = [];
|
|
823
|
+
if (storageMode === "workspace") {
|
|
824
|
+
entries.push(".rrce-workflow/");
|
|
825
|
+
}
|
|
826
|
+
if (tools.includes("copilot")) {
|
|
827
|
+
entries.push(".github/agents/");
|
|
828
|
+
}
|
|
829
|
+
if (tools.includes("antigravity")) {
|
|
830
|
+
entries.push(".agent/");
|
|
831
|
+
}
|
|
832
|
+
if (entries.length === 0) {
|
|
833
|
+
return false;
|
|
834
|
+
}
|
|
835
|
+
try {
|
|
836
|
+
let content = "";
|
|
837
|
+
if (fs7.existsSync(gitignorePath)) {
|
|
838
|
+
content = fs7.readFileSync(gitignorePath, "utf-8");
|
|
839
|
+
}
|
|
840
|
+
const lines = content.split("\n").map((line) => line.trim());
|
|
841
|
+
const newEntries = [];
|
|
842
|
+
for (const entry of entries) {
|
|
843
|
+
const entryWithoutSlash = entry.replace(/\/$/, "");
|
|
844
|
+
if (!lines.some((line) => line === entry || line === entryWithoutSlash)) {
|
|
845
|
+
newEntries.push(entry);
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
if (newEntries.length === 0) {
|
|
849
|
+
return false;
|
|
850
|
+
}
|
|
851
|
+
let newContent = content;
|
|
852
|
+
if (!newContent.endsWith("\n") && newContent !== "") {
|
|
853
|
+
newContent += "\n";
|
|
854
|
+
}
|
|
855
|
+
if (newContent === "" || !content.includes("# rrce-workflow")) {
|
|
856
|
+
newContent += "\n# rrce-workflow generated folders\n";
|
|
857
|
+
}
|
|
858
|
+
newContent += newEntries.join("\n") + "\n";
|
|
859
|
+
fs7.writeFileSync(gitignorePath, newContent);
|
|
860
|
+
return true;
|
|
861
|
+
} catch {
|
|
862
|
+
return false;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
815
865
|
|
|
816
866
|
// src/commands/wizard/link-flow.ts
|
|
817
867
|
import { multiselect as multiselect2, spinner as spinner2, note as note2, outro as outro2, cancel as cancel2, isCancel as isCancel2 } from "@clack/prompts";
|
|
@@ -937,17 +987,12 @@ Destination: ${pc4.cyan(globalPath)}`,
|
|
|
937
987
|
ensureDir(destDir);
|
|
938
988
|
copyDirRecursive(srcDir, destDir);
|
|
939
989
|
}
|
|
940
|
-
const configFilePath = getConfigPath(workspacePath);
|
|
941
|
-
let configContent = fs9.readFileSync(configFilePath, "utf-8");
|
|
942
|
-
configContent = configContent.replace(/mode:\s*workspace/, "mode: both");
|
|
943
|
-
fs9.writeFileSync(configFilePath, configContent);
|
|
944
990
|
s.stop("Sync complete");
|
|
945
991
|
const summary = [
|
|
946
992
|
`Synced directories:`,
|
|
947
993
|
...existingDirs.map((d) => ` \u2713 ${d}/`),
|
|
948
994
|
``,
|
|
949
995
|
`Global path: ${pc4.cyan(globalPath)}`,
|
|
950
|
-
`Storage mode updated to: ${pc4.bold("both")}`,
|
|
951
996
|
``,
|
|
952
997
|
`Other projects can now link this knowledge!`
|
|
953
998
|
];
|
|
@@ -1032,8 +1077,6 @@ function resolveAllDataPathsWithCustomGlobal(mode, workspaceName, workspaceRoot,
|
|
|
1032
1077
|
return [globalPath];
|
|
1033
1078
|
case "workspace":
|
|
1034
1079
|
return [workspacePath];
|
|
1035
|
-
case "both":
|
|
1036
|
-
return [workspacePath, globalPath];
|
|
1037
1080
|
default:
|
|
1038
1081
|
return [globalPath];
|
|
1039
1082
|
}
|
|
@@ -1064,7 +1107,7 @@ Workspace: ${pc6.bold(workspaceName)}`,
|
|
|
1064
1107
|
if (isAlreadyConfigured) {
|
|
1065
1108
|
try {
|
|
1066
1109
|
const configContent = fs11.readFileSync(configFilePath, "utf-8");
|
|
1067
|
-
const modeMatch = configContent.match(/mode:\s*(global|workspace
|
|
1110
|
+
const modeMatch = configContent.match(/mode:\s*(global|workspace)/);
|
|
1068
1111
|
currentStorageMode = modeMatch?.[1] ?? null;
|
|
1069
1112
|
} catch {
|
|
1070
1113
|
}
|
package/docs/architecture.md
CHANGED
|
@@ -66,12 +66,11 @@ The system provides a structured multi-agent pipeline for software development t
|
|
|
66
66
|
|------|----------|----------|
|
|
67
67
|
| `global` (default) | `~/.rrce-workflow/workspaces/<workspace-name>/` | Non-intrusive, survives repo deletion |
|
|
68
68
|
| `workspace` | `<workspace>/.rrce-workflow/` | Portable, team-shareable |
|
|
69
|
-
| `both` | Both locations with sync | Redundancy, flexibility |
|
|
70
69
|
|
|
71
70
|
Configure via `.rrce-workflow.yaml`:
|
|
72
71
|
```yaml
|
|
73
72
|
storage:
|
|
74
|
-
mode: global # or: workspace
|
|
73
|
+
mode: global # or: workspace
|
|
75
74
|
```
|
|
76
75
|
|
|
77
76
|
### Environment Variables
|