rrce-workflow 0.1.6 → 0.2.6

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.
@@ -48,7 +48,7 @@ Non-Negotiables
48
48
  6. Close the loop in `meta.json` when working within a task by setting `agents.documentation.status`, refreshing `checklist`, and updating overall `status`.
49
49
 
50
50
  Path Resolution
51
- - Storage mode: Determined by `.rrce-workflow.yaml` → global config → default (`global`)
51
+ - Storage mode: Determined by `config.yaml`storage.mode`` → global config → default (`global`)
52
52
  - `global`: Data in `~/.rrce-workflow/workspaces/<workspace-name>/`
53
53
  - `workspace`: Data in `<workspace>/.rrce-workflow/`
54
54
  - `both`: **Dual storage** - data stored in BOTH locations simultaneously
@@ -56,7 +56,7 @@ Path Resolution
56
56
  - Secondary (auto-synced): `~/.rrce-workflow/workspaces/<workspace-name>/`
57
57
  - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
58
58
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
59
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, customizable via `storage.globalPath` in config)
59
+ - Global home: `{{RRCE_HOME}}` - **To resolve:** read `.rrce-workflow/config.yaml` `storage.globalPath`, or default `~/.rrce-workflow`
60
60
  - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
61
61
  - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
62
62
 
@@ -52,17 +52,14 @@ Non-Negotiables
52
52
  6. Update `meta.json` as you proceed so statuses stay accurate.
53
53
 
54
54
  Path Resolution
55
- - Storage mode: Determined by `.rrce-workflow.yaml` global config default (`global`)
56
- - `global`: Data in `~/.rrce-workflow/workspaces/<workspace-name>/`
55
+ - **Config file**: `.rrce-workflow/config.yaml` (read this first to resolve paths)
56
+ - Storage mode: Determined by `config.yaml` `storage.mode` (default: `global`)
57
+ - `global`: Data in `{{RRCE_HOME}}/workspaces/<workspace-name>/`
57
58
  - `workspace`: Data in `<workspace>/.rrce-workflow/`
58
- - `both`: **Dual storage** - data stored in BOTH locations simultaneously
59
- - Primary (for reads): `<workspace>/.rrce-workflow/`
60
- - Secondary (auto-synced): `~/.rrce-workflow/workspaces/<workspace-name>/`
61
- - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
59
+ - `both`: Dual storage - data in BOTH locations
62
60
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
63
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, customizable via `storage.globalPath` in config)
64
- - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
65
- - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
61
+ - Global home: `{{RRCE_HOME}}` - **To resolve:** read `config.yaml` → `storage.globalPath`, or default `~/.rrce-workflow`
62
+ - Workspace name: `{{WORKSPACE_NAME}}` (from `config.yaml` `project.name`)
66
63
 
67
64
  Cross-Project References
68
65
  - Reference another project's context: `{{RRCE_HOME}}/workspaces/<other-project>/knowledge/`
@@ -34,17 +34,18 @@ Non-Negotiables
34
34
  6. Keep output actionable and scannable; use structured sections.
35
35
 
36
36
  Path Resolution
37
- - Storage mode: Determined by `.rrce-workflow.yaml` global config default (`global`)
37
+ - **Config file**: `.rrce-workflow/config.yaml` (read this first to resolve paths)
38
+ - Storage mode: Determined by `config.yaml` → `storage.mode` (default: `global`)
38
39
  - `global`: Data stored in `{{RRCE_HOME}}/workspaces/<workspace-name>/`
39
40
  - `workspace`: Data stored in `<workspace>/.rrce-workflow/`
40
- - `both`: **Dual storage** - data stored in BOTH locations simultaneously
41
- - Primary (for reads): `<workspace>/.rrce-workflow/`
42
- - Secondary (auto-synced): `{{RRCE_HOME}}/workspaces/<workspace-name>/`
43
- - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
41
+ - `both`: **Dual storage** - data in BOTH locations
44
42
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
45
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, can be customized via `storage.globalPath` in `.rrce-workflow.yaml`)
43
+ - Global home: `{{RRCE_HOME}}` - **To resolve:**
44
+ 1. Read `.rrce-workflow/config.yaml`
45
+ 2. If `storage.globalPath` exists, use that value
46
+ 3. Otherwise, default to `~/.rrce-workflow`
46
47
  - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
47
- - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
48
+ - Workspace name: `{{WORKSPACE_NAME}}` (from `config.yaml` → `project.name` or directory name)
48
49
 
49
50
  Cross-Project References
50
51
  - To reference another project's context: `{{RRCE_HOME}}/workspaces/<other-project-name>/knowledge/`
@@ -44,7 +44,7 @@ Non-Negotiables
44
44
  6. Keep the written plan under 500 lines and reference supporting materials explicitly.
45
45
 
46
46
  Path Resolution
47
- - Storage mode: Determined by `.rrce-workflow.yaml` → global config → default (`global`)
47
+ - Storage mode: Determined by `config.yaml`storage.mode`` → global config → default (`global`)
48
48
  - `global`: Data in `~/.rrce-workflow/workspaces/<workspace-name>/`
49
49
  - `workspace`: Data in `<workspace>/.rrce-workflow/`
50
50
  - `both`: **Dual storage** - data stored in BOTH locations simultaneously
@@ -52,7 +52,7 @@ Path Resolution
52
52
  - Secondary (auto-synced): `~/.rrce-workflow/workspaces/<workspace-name>/`
53
53
  - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
54
54
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
55
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, customizable via `storage.globalPath` in config)
55
+ - Global home: `{{RRCE_HOME}}` - **To resolve:** read `.rrce-workflow/config.yaml` `storage.globalPath`, or default `~/.rrce-workflow`
56
56
  - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
57
57
  - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
58
58
 
@@ -38,7 +38,7 @@ Non-Negotiables
38
38
  6. Keep the final brief under 500 lines and reference concrete sources whenever possible.
39
39
 
40
40
  Path Resolution
41
- - Storage mode: Determined by `.rrce-workflow.yaml` → global config → default (`global`)
41
+ - Storage mode: Determined by `config.yaml`storage.mode`` → global config → default (`global`)
42
42
  - `global`: Data in `~/.rrce-workflow/workspaces/<workspace-name>/`
43
43
  - `workspace`: Data in `<workspace>/.rrce-workflow/`
44
44
  - `both`: **Dual storage** - data stored in BOTH locations simultaneously
@@ -46,7 +46,7 @@ Path Resolution
46
46
  - Secondary (auto-synced): `~/.rrce-workflow/workspaces/<workspace-name>/`
47
47
  - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
48
48
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
49
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, customizable via `storage.globalPath` in config)
49
+ - Global home: `{{RRCE_HOME}}` - **To resolve:** read `.rrce-workflow/config.yaml` `storage.globalPath`, or default `~/.rrce-workflow`
50
50
  - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
51
51
  - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
52
52
 
@@ -38,7 +38,7 @@ Non-Negotiables
38
38
  5. Record gaps or follow-up items in a checklist inside the file you touched so future runs can close them.
39
39
 
40
40
  Path Resolution
41
- - Storage mode: Determined by `.rrce-workflow.yaml` → global config → default (`global`)
41
+ - Storage mode: Determined by `config.yaml`storage.mode`` → global config → default (`global`)
42
42
  - `global`: Data in `~/.rrce-workflow/workspaces/<workspace-name>/`
43
43
  - `workspace`: Data in `<workspace>/.rrce-workflow/`
44
44
  - `both`: **Dual storage** - data stored in BOTH locations simultaneously
@@ -46,7 +46,7 @@ Path Resolution
46
46
  - Secondary (auto-synced): `~/.rrce-workflow/workspaces/<workspace-name>/`
47
47
  - When writing, always write to `{{RRCE_DATA}}` - the system ensures both locations stay in sync
48
48
  - Data path: `{{RRCE_DATA}}` (resolves to primary storage based on mode)
49
- - Global home: `{{RRCE_HOME}}` (default: `~/.rrce-workflow`, customizable via `storage.globalPath` in config)
49
+ - Global home: `{{RRCE_HOME}}` - **To resolve:** read `.rrce-workflow/config.yaml` `storage.globalPath`, or default `~/.rrce-workflow`
50
50
  - Workspace root: `{{WORKSPACE_ROOT}}` (auto-detected or via `$RRCE_WORKSPACE`)
51
51
  - Workspace name: `{{WORKSPACE_NAME}}` (from config or directory name)
52
52
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rrce-workflow",
3
- "version": "0.1.6",
3
+ "version": "0.2.6",
4
4
  "description": "RRCE-Workflow TUI - Agentic code workflow generator for AI-assisted development",
5
5
  "author": "RRCE Team",
6
6
  "license": "MIT",
@@ -1,13 +1,13 @@
1
1
  import { intro, select, spinner, note, outro, cancel, isCancel } from '@clack/prompts';
2
2
  import pc from 'picocolors';
3
3
  import * as fs from 'fs';
4
- import * as path from 'path';
5
4
  import { getGitUser } from '../../lib/git';
6
5
  import {
7
6
  detectWorkspaceRoot,
8
7
  getWorkspaceName,
9
8
  listGlobalProjects,
10
- getLocalWorkspacePath
9
+ getLocalWorkspacePath,
10
+ getConfigPath
11
11
  } from '../../lib/paths';
12
12
 
13
13
  // Import flows
@@ -38,8 +38,8 @@ Workspace: ${pc.bold(workspaceName)}`,
38
38
  // Check for existing projects in global storage
39
39
  const existingProjects = listGlobalProjects(workspaceName);
40
40
 
41
- // Check if already configured
42
- const configFilePath = path.join(workspacePath, '.rrce-workflow.yaml');
41
+ // Check if already configured (using getConfigPath for new/legacy support)
42
+ const configFilePath = getConfigPath(workspacePath);
43
43
  const isAlreadyConfigured = fs.existsSync(configFilePath);
44
44
 
45
45
  // Check current storage mode from config
@@ -1,8 +1,7 @@
1
1
  import { multiselect, spinner, note, outro, cancel, isCancel } from '@clack/prompts';
2
2
  import pc from 'picocolors';
3
3
  import * as fs from 'fs';
4
- import * as path from 'path';
5
- import { listGlobalProjects, getEffectiveRRCEHome } from '../../lib/paths';
4
+ import { listGlobalProjects, getEffectiveRRCEHome, getConfigPath } from '../../lib/paths';
6
5
  import { generateVSCodeWorkspace } from './vscode';
7
6
 
8
7
  /**
@@ -48,8 +47,8 @@ export async function runLinkProjectsFlow(
48
47
  const s = spinner();
49
48
  s.start('Linking projects');
50
49
 
51
- // Update .rrce-workflow.yaml with linked projects
52
- const configFilePath = path.join(workspacePath, '.rrce-workflow.yaml');
50
+ // Update config.yaml with linked projects
51
+ const configFilePath = getConfigPath(workspacePath);
53
52
  let configContent = fs.readFileSync(configFilePath, 'utf-8');
54
53
 
55
54
  // Check if linked_projects section exists
@@ -290,8 +290,10 @@ async function generateConfiguration(
290
290
  copyPromptsToDir(prompts, antigravityPath, '.md');
291
291
  }
292
292
 
293
- // Create workspace config
294
- const workspaceConfigPath = path.join(workspacePath, '.rrce-workflow.yaml');
293
+ // Create workspace config (inside .rrce-workflow folder)
294
+ const workspaceConfigPath = path.join(workspacePath, '.rrce-workflow', 'config.yaml');
295
+ ensureDir(path.dirname(workspaceConfigPath));
296
+
295
297
  let configContent = `# RRCE-Workflow Configuration
296
298
  version: 1
297
299
 
@@ -6,7 +6,8 @@ import {
6
6
  ensureDir,
7
7
  getLocalWorkspacePath,
8
8
  getGlobalWorkspacePath,
9
- getEffectiveRRCEHome
9
+ getEffectiveRRCEHome,
10
+ getConfigPath
10
11
  } from '../../lib/paths';
11
12
  import { copyDirRecursive } from './utils';
12
13
 
@@ -63,7 +64,7 @@ export async function runSyncToGlobalFlow(workspacePath: string, workspaceName:
63
64
  }
64
65
 
65
66
  // Update the config to reflect 'both' mode
66
- const configFilePath = path.join(workspacePath, '.rrce-workflow.yaml');
67
+ const configFilePath = getConfigPath(workspacePath);
67
68
  let configContent = fs.readFileSync(configFilePath, 'utf-8');
68
69
  configContent = configContent.replace(/mode:\s*workspace/, 'mode: both');
69
70
  fs.writeFileSync(configFilePath, configContent);
@@ -8,7 +8,8 @@ import {
8
8
  resolveAllDataPaths,
9
9
  getAgentPromptPath,
10
10
  copyDirToAllStoragePaths,
11
- getEffectiveRRCEHome
11
+ getEffectiveRRCEHome,
12
+ getConfigPath
12
13
  } from '../../lib/paths';
13
14
  import { loadPromptsFromDir, getAgentCorePromptsDir, getAgentCoreDir } from '../../lib/prompts';
14
15
  import { copyPromptsToDir } from './utils';
@@ -67,7 +68,7 @@ export async function runUpdateFlow(
67
68
  }
68
69
 
69
70
  // Also update tool-specific locations if configured
70
- const configFilePath = path.join(workspacePath, '.rrce-workflow.yaml');
71
+ const configFilePath = getConfigPath(workspacePath);
71
72
  const configContent = fs.readFileSync(configFilePath, 'utf-8');
72
73
 
73
74
  if (configContent.includes('copilot: true')) {
package/src/lib/paths.ts CHANGED
@@ -18,8 +18,10 @@ export function detectWorkspaceRoot(): string {
18
18
  let current = process.cwd();
19
19
 
20
20
  while (current !== '/') {
21
- // Check for .git or .rrce-workflow.yaml
21
+ // Check for .git or .rrce-workflow/config.yaml (new location)
22
+ // Also check legacy .rrce-workflow.yaml for backwards compatibility
22
23
  if (fs.existsSync(path.join(current, '.git')) ||
24
+ fs.existsSync(path.join(current, '.rrce-workflow', 'config.yaml')) ||
23
25
  fs.existsSync(path.join(current, '.rrce-workflow.yaml'))) {
24
26
  return current;
25
27
  }
@@ -29,6 +31,27 @@ export function detectWorkspaceRoot(): string {
29
31
  return process.cwd();
30
32
  }
31
33
 
34
+ /**
35
+ * Get the config file path for a workspace
36
+ * New location: .rrce-workflow/config.yaml
37
+ * Legacy location: .rrce-workflow.yaml (for backwards compatibility)
38
+ */
39
+ export function getConfigPath(workspaceRoot: string): string {
40
+ const newPath = path.join(workspaceRoot, '.rrce-workflow', 'config.yaml');
41
+ const legacyPath = path.join(workspaceRoot, '.rrce-workflow.yaml');
42
+
43
+ // Prefer new location, fall back to legacy
44
+ if (fs.existsSync(newPath)) {
45
+ return newPath;
46
+ }
47
+ if (fs.existsSync(legacyPath)) {
48
+ return legacyPath;
49
+ }
50
+
51
+ // Default to new location for new configs
52
+ return newPath;
53
+ }
54
+
32
55
  /**
33
56
  * Get workspace name from directory or config
34
57
  */
@@ -139,13 +162,10 @@ export function ensureDir(dirPath: string): void {
139
162
 
140
163
  /**
141
164
  * Get path for agent prompts based on tool
165
+ * Now consolidated under .rrce-workflow/prompts/<tool>/
142
166
  */
143
167
  export function getAgentPromptPath(workspaceRoot: string, tool: 'copilot' | 'antigravity'): string {
144
- if (tool === 'copilot') {
145
- return path.join(workspaceRoot, '.github', 'agents');
146
- } else {
147
- return path.join(workspaceRoot, '.agent', 'workflows');
148
- }
168
+ return path.join(workspaceRoot, '.rrce-workflow', 'prompts', tool);
149
169
  }
150
170
 
151
171
  /**
@@ -289,7 +309,7 @@ export function getSuggestedGlobalPaths(): Array<{ path: string; label: string;
289
309
  export function getEffectiveRRCEHome(workspaceRoot?: string): string {
290
310
  // Check workspace config for custom globalPath
291
311
  if (workspaceRoot) {
292
- const configPath = path.join(workspaceRoot, '.rrce-workflow.yaml');
312
+ const configPath = getConfigPath(workspaceRoot);
293
313
  if (fs.existsSync(configPath)) {
294
314
  try {
295
315
  const content = fs.readFileSync(configPath, 'utf-8');