rrce-workflow 0.2.96 → 0.2.97
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 +33 -31
- package/dist/index.js +58 -3
- package/docs/architecture.md +3 -3
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -18,65 +18,67 @@ RRCE-Workflow transforms your AI coding assistant (GitHub Copilot, OpenCode, Cla
|
|
|
18
18
|
|
|
19
19
|
## 🚀 Quick Start
|
|
20
20
|
|
|
21
|
-
### 1.
|
|
21
|
+
### 1. Run the Wizard (Project Setup)
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
From the project you want to work on:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
|
|
26
|
+
cd your-project
|
|
27
|
+
npx rrce-workflow
|
|
27
28
|
```
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- **View Logs**: Debug agent interactions in real-time.
|
|
30
|
+
This launches the setup wizard and can:
|
|
31
|
+
- Create the `.rrce-workflow/` structure (workspace mode) or initialize global storage (global mode)
|
|
32
|
+
- Install IDE integrations (VSCode / Claude Desktop / OpenCode / Antigravity)
|
|
33
|
+
- Optionally expose the project to MCP and enable semantic search indexing
|
|
34
34
|
|
|
35
|
-
### 2.
|
|
35
|
+
### 2. Launch the MCP Dashboard (TUI)
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
The **MCP Dashboard** lets you manage exposed projects, indexing jobs, IDE integrations, and view logs.
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
|
|
41
|
-
npx rrce-workflow
|
|
40
|
+
npx rrce-workflow mcp
|
|
42
41
|
```
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
### 3. Run the MCP Server (for IDE integrations)
|
|
44
|
+
|
|
45
|
+
When an IDE connects via MCP, it launches the server in non-interactive mode:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx rrce-workflow mcp start
|
|
49
|
+
```
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
* **Global Storage**: Keeps your project directory clean; config lives in `~/.rrce-workflow/`.
|
|
48
|
-
* **MCP Enabled**: Exposes the project to your AI tools via the local server.
|
|
49
|
-
* **RAG Enabled**: Indexes your code for semantic search.
|
|
50
|
-
|
|
51
|
-
* **⚙️ Custom Setup**: Full control over storage location (Global vs Workspace), tool selection, and more.
|
|
51
|
+
Note: `mcp start` is intended for stdio-based MCP clients (it only auto-starts when `stdout` is not a TTY).
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
55
|
## 🧠 Model Context Protocol (MCP)
|
|
56
56
|
|
|
57
|
-
RRCE-Workflow uses the [Model Context Protocol](https://modelcontextprotocol.io/) to bridge your codebase with AI models. This allows your AI assistant to
|
|
57
|
+
RRCE-Workflow uses the [Model Context Protocol](https://modelcontextprotocol.io/) to bridge your codebase with AI models. This allows your AI assistant to access project context and knowledge without copy/paste.
|
|
58
58
|
|
|
59
59
|
### Features
|
|
60
60
|
* **Universal Context**: Access your project's `project-context.md`, architecture docs, and task history from *any* MCP-enabled tool.
|
|
61
61
|
* **Cross-Project References**: Your AI can read documentation from Project A while working on Project B (perfect for monorepos or microservices).
|
|
62
|
-
* **
|
|
62
|
+
* **MCP Tools**: Includes `search_knowledge`, `search_code`, `find_related_files`, `get_project_context`, `resolve_path`, task CRUD operations, and more.
|
|
63
63
|
|
|
64
64
|
### MCP Tools Reference
|
|
65
65
|
|
|
66
66
|
| Tool | Description |
|
|
67
67
|
|------|-------------|
|
|
68
|
-
| `resolve_path` | Resolve
|
|
69
|
-
| `list_projects` | List
|
|
70
|
-
| `get_project_context` | Get the project
|
|
71
|
-
| `search_knowledge` | Semantic search
|
|
72
|
-
| `
|
|
68
|
+
| `resolve_path` | Resolve configuration paths (`RRCE_DATA`, `WORKSPACE_ROOT`, etc.) for a project |
|
|
69
|
+
| `list_projects` | List projects exposed via MCP |
|
|
70
|
+
| `get_project_context` | Get the project context/architecture for a specific project |
|
|
71
|
+
| `search_knowledge` | Semantic search across project knowledge bases |
|
|
72
|
+
| `search_code` | Semantic search across code files (snippets + line numbers + context) |
|
|
73
|
+
| `find_related_files` | Find imports/imported-by relationships for a file |
|
|
74
|
+
| `index_knowledge` | Start (or query) the semantic indexing job for a project |
|
|
73
75
|
| `list_agents` | List available RRCE agents and their arguments |
|
|
74
|
-
| `get_agent_prompt` | Get the system prompt for a specific agent with context injection |
|
|
76
|
+
| `get_agent_prompt` | Get the system prompt for a specific agent (with context injection) |
|
|
75
77
|
| `list_tasks` | List all tasks for a project |
|
|
76
|
-
| `get_task` | Get details of a
|
|
77
|
-
| `create_task` | Create a
|
|
78
|
-
| `update_task` | Update
|
|
79
|
-
| `delete_task` | Delete a task
|
|
78
|
+
| `get_task` | Get details of a task |
|
|
79
|
+
| `create_task` | Create a task |
|
|
80
|
+
| `update_task` | Update a task (`meta.json`) |
|
|
81
|
+
| `delete_task` | Delete a task |
|
|
80
82
|
|
|
81
83
|
### Connecting Your IDE
|
|
82
84
|
|
package/dist/index.js
CHANGED
|
@@ -1718,6 +1718,14 @@ var init_rag = __esm({
|
|
|
1718
1718
|
this.maybeSaveIndex(true);
|
|
1719
1719
|
}
|
|
1720
1720
|
}
|
|
1721
|
+
/**
|
|
1722
|
+
* Get current indexed file paths
|
|
1723
|
+
*/
|
|
1724
|
+
getIndexedFiles() {
|
|
1725
|
+
this.loadIndex();
|
|
1726
|
+
if (!this.index || !this.index.fileMetadata) return [];
|
|
1727
|
+
return Object.keys(this.index.fileMetadata);
|
|
1728
|
+
}
|
|
1721
1729
|
/**
|
|
1722
1730
|
* Get index statistics
|
|
1723
1731
|
*/
|
|
@@ -2354,6 +2362,7 @@ import * as fs15 from "fs";
|
|
|
2354
2362
|
import * as path17 from "path";
|
|
2355
2363
|
import * as os2 from "os";
|
|
2356
2364
|
import * as crypto from "crypto";
|
|
2365
|
+
import ignore from "ignore";
|
|
2357
2366
|
function resolveProjectPaths(project, pathInput) {
|
|
2358
2367
|
const config = loadMCPConfig();
|
|
2359
2368
|
let workspaceRoot = pathInput;
|
|
@@ -2737,6 +2746,33 @@ async function indexKnowledge(projectName, force = false) {
|
|
|
2737
2746
|
".sql"
|
|
2738
2747
|
];
|
|
2739
2748
|
const SKIP_DIRS = ["node_modules", ".git", "dist", "build", ".next", "__pycache__", "venv", ".venv", "target", "vendor"];
|
|
2749
|
+
const gitignorePath = path17.join(scanRoot, ".gitignore");
|
|
2750
|
+
const ig = fs15.existsSync(gitignorePath) ? ignore().add(fs15.readFileSync(gitignorePath, "utf-8")) : null;
|
|
2751
|
+
const toPosixRelativePath = (absolutePath) => {
|
|
2752
|
+
const rel = path17.relative(scanRoot, absolutePath);
|
|
2753
|
+
return rel.split(path17.sep).join("/");
|
|
2754
|
+
};
|
|
2755
|
+
const isUnderGitDir = (absolutePath) => {
|
|
2756
|
+
const rel = toPosixRelativePath(absolutePath);
|
|
2757
|
+
return rel === ".git" || rel.startsWith(".git/");
|
|
2758
|
+
};
|
|
2759
|
+
const isIgnoredByGitignore = (absolutePath, isDir) => {
|
|
2760
|
+
if (!ig) return false;
|
|
2761
|
+
const rel = toPosixRelativePath(absolutePath);
|
|
2762
|
+
return ig.ignores(isDir ? `${rel}/` : rel);
|
|
2763
|
+
};
|
|
2764
|
+
const shouldSkipEntryDir = (absolutePath) => {
|
|
2765
|
+
const dirName = path17.basename(absolutePath);
|
|
2766
|
+
if (dirName === ".git") return true;
|
|
2767
|
+
if (SKIP_DIRS.includes(dirName)) return true;
|
|
2768
|
+
if (isIgnoredByGitignore(absolutePath, true)) return true;
|
|
2769
|
+
return false;
|
|
2770
|
+
};
|
|
2771
|
+
const shouldSkipEntryFile = (absolutePath) => {
|
|
2772
|
+
if (isUnderGitDir(absolutePath)) return true;
|
|
2773
|
+
if (isIgnoredByGitignore(absolutePath, false)) return true;
|
|
2774
|
+
return false;
|
|
2775
|
+
};
|
|
2740
2776
|
const runIndexing = async () => {
|
|
2741
2777
|
const indexPath = path17.join(project.knowledgePath || path17.join(scanRoot, ".rrce-workflow", "knowledge"), "embeddings.json");
|
|
2742
2778
|
const codeIndexPath = path17.join(project.knowledgePath || path17.join(scanRoot, ".rrce-workflow", "knowledge"), "code-embeddings.json");
|
|
@@ -2748,29 +2784,45 @@ async function indexKnowledge(projectName, force = false) {
|
|
|
2748
2784
|
let skipped = 0;
|
|
2749
2785
|
let itemsTotal = 0;
|
|
2750
2786
|
let itemsDone = 0;
|
|
2751
|
-
const shouldSkipDir = (dirName) => SKIP_DIRS.includes(dirName) || dirName.startsWith(".");
|
|
2752
2787
|
const preCount = (dir) => {
|
|
2753
2788
|
const entries = fs15.readdirSync(dir, { withFileTypes: true });
|
|
2754
2789
|
for (const entry of entries) {
|
|
2755
2790
|
const fullPath = path17.join(dir, entry.name);
|
|
2756
2791
|
if (entry.isDirectory()) {
|
|
2757
|
-
if (
|
|
2792
|
+
if (shouldSkipEntryDir(fullPath)) continue;
|
|
2758
2793
|
preCount(fullPath);
|
|
2759
2794
|
} else if (entry.isFile()) {
|
|
2760
2795
|
const ext = path17.extname(entry.name).toLowerCase();
|
|
2761
2796
|
if (!INDEXABLE_EXTENSIONS.includes(ext)) continue;
|
|
2797
|
+
if (shouldSkipEntryFile(fullPath)) continue;
|
|
2762
2798
|
itemsTotal++;
|
|
2763
2799
|
}
|
|
2764
2800
|
}
|
|
2765
2801
|
};
|
|
2766
2802
|
preCount(scanRoot);
|
|
2767
2803
|
indexingJobs.update(project.name, { itemsTotal });
|
|
2804
|
+
const cleanupIgnoredFiles = async () => {
|
|
2805
|
+
const indexedFiles = [...rag.getIndexedFiles(), ...codeRag.getIndexedFiles()];
|
|
2806
|
+
const unique = Array.from(new Set(indexedFiles));
|
|
2807
|
+
for (const filePath of unique) {
|
|
2808
|
+
if (!path17.isAbsolute(filePath)) continue;
|
|
2809
|
+
const relFilePath = filePath.split(path17.sep).join("/");
|
|
2810
|
+
const relScanRoot = scanRoot.split(path17.sep).join("/");
|
|
2811
|
+
const isInScanRoot = relFilePath === relScanRoot || relFilePath.startsWith(`${relScanRoot}/`);
|
|
2812
|
+
if (!isInScanRoot) continue;
|
|
2813
|
+
if (shouldSkipEntryFile(filePath)) {
|
|
2814
|
+
await rag.removeFile(filePath);
|
|
2815
|
+
await codeRag.removeFile(filePath);
|
|
2816
|
+
}
|
|
2817
|
+
}
|
|
2818
|
+
};
|
|
2819
|
+
await cleanupIgnoredFiles();
|
|
2768
2820
|
const scanDir = async (dir) => {
|
|
2769
2821
|
const entries = fs15.readdirSync(dir, { withFileTypes: true });
|
|
2770
2822
|
for (const entry of entries) {
|
|
2771
2823
|
const fullPath = path17.join(dir, entry.name);
|
|
2772
2824
|
if (entry.isDirectory()) {
|
|
2773
|
-
if (
|
|
2825
|
+
if (shouldSkipEntryDir(fullPath)) {
|
|
2774
2826
|
continue;
|
|
2775
2827
|
}
|
|
2776
2828
|
await scanDir(fullPath);
|
|
@@ -2779,6 +2831,9 @@ async function indexKnowledge(projectName, force = false) {
|
|
|
2779
2831
|
if (!INDEXABLE_EXTENSIONS.includes(ext)) {
|
|
2780
2832
|
continue;
|
|
2781
2833
|
}
|
|
2834
|
+
if (shouldSkipEntryFile(fullPath)) {
|
|
2835
|
+
continue;
|
|
2836
|
+
}
|
|
2782
2837
|
try {
|
|
2783
2838
|
indexingJobs.update(project.name, { currentItem: fullPath, itemsDone });
|
|
2784
2839
|
const stat = fs15.statSync(fullPath);
|
package/docs/architecture.md
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
> RR Context Engineering Workflow - A selection-agnostic agentic workflow system
|
|
4
4
|
>
|
|
5
|
-
> **Version**: 0.2.
|
|
5
|
+
> **Version**: 0.2.96 | **Last Updated**: 2026-01-02
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
9
9
|
RRCE-Workflow is a TUI-based agentic code workflow generator designed to work seamlessly across:
|
|
10
|
-
- **OpenCode** (Native agentic TUI environment
|
|
10
|
+
- **OpenCode** (Native agentic TUI environment; RRCE installs subagents invoked via `@rrce_<agent>`)
|
|
11
11
|
- **GitHub Copilot** (VSCode with MCP extension)
|
|
12
12
|
- **Antigravity IDE** (Google's agentic coding environment)
|
|
13
13
|
- **Claude Desktop** (MCP Server integration)
|
|
14
14
|
- **Any MCP-compatible client**
|
|
15
15
|
|
|
16
|
-
The system provides a structured multi-agent pipeline (7 agents) for software development tasks, with persistent knowledge caching, semantic search (RAG), and workspace-aware context management.
|
|
16
|
+
The system provides a structured multi-agent pipeline (7 agents) for software development tasks, with persistent knowledge caching, semantic search (RAG) across knowledge and code, and workspace-aware context management.
|
|
17
17
|
|
|
18
18
|
## Core Principles
|
|
19
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rrce-workflow",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.97",
|
|
4
4
|
"description": "RRCE-Workflow TUI - Agentic code workflow generator for AI-assisted development",
|
|
5
5
|
"author": "RRCE Team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
54
54
|
"@xenova/transformers": "^2.17.2",
|
|
55
55
|
"gray-matter": "^4.0.3",
|
|
56
|
+
"ignore": "^5.3.2",
|
|
56
57
|
"ink": "^6.6.0",
|
|
57
58
|
"ink-link": "^5.0.0",
|
|
58
59
|
"ink-spinner": "^5.0.0",
|