rrce-workflow 0.2.79 → 0.2.81
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 +3 -3
- package/agent-core/prompts/documentation.md +10 -5
- package/agent-core/prompts/executor.md +12 -7
- package/agent-core/prompts/init.md +1 -1
- package/agent-core/prompts/planning_discussion.md +13 -8
- package/agent-core/prompts/research_discussion.md +13 -8
- package/agent-core/prompts/sync.md +11 -6
- package/dist/index.js +50 -34
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Doctor
|
|
3
3
|
description: Analyze codebase health using semantic search; identify issues and recommend improvement tasks.
|
|
4
4
|
argument-hint: "[PROJECT_NAME=<name>] [FOCUS_AREA=<area>]"
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'list_projects']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'list_projects', 'create_task']
|
|
6
6
|
required-args: []
|
|
7
7
|
optional-args:
|
|
8
8
|
- name: PROJECT_NAME
|
|
@@ -55,7 +55,7 @@ For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
|
55
55
|
### Step 1: Load Project Context
|
|
56
56
|
|
|
57
57
|
```
|
|
58
|
-
Tool:
|
|
58
|
+
Tool: rrce_get_project_context
|
|
59
59
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
60
60
|
```
|
|
61
61
|
|
|
@@ -93,7 +93,7 @@ Use `search_knowledge` to efficiently find problem areas. Run queries based on F
|
|
|
93
93
|
|
|
94
94
|
**Query Execution:**
|
|
95
95
|
```
|
|
96
|
-
Tool:
|
|
96
|
+
Tool: rrce_search_knowledge
|
|
97
97
|
Args: { "query": "<query>", "project": "{{WORKSPACE_NAME}}" }
|
|
98
98
|
```
|
|
99
99
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Documentation
|
|
3
3
|
description: Produce project documentation aligned with the latest delivery.
|
|
4
4
|
argument-hint: "DOC_TYPE=<type> [TASK_SLUG=<slug> | TARGET_PATH=<relative>] [RELEASE_REF=<tag/sha>]"
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'update_task', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
6
6
|
required-args:
|
|
7
7
|
- name: DOC_TYPE
|
|
8
8
|
prompt: "Enter the documentation type (e.g., api, architecture, runbook, changelog)"
|
|
@@ -44,11 +44,16 @@ Pipeline Position
|
|
|
44
44
|
1. **Path Resolution**: Always use the "System Resolved Paths" from the context preamble.
|
|
45
45
|
- Use `{{RRCE_DATA}}` for all RRCE-specific storage.
|
|
46
46
|
- Use `{{WORKSPACE_ROOT}}` for project source code.
|
|
47
|
-
2. **
|
|
47
|
+
2. **Metadata Updates**: For `meta.json` changes, use the MCP tool:
|
|
48
|
+
```
|
|
49
|
+
Tool: rrce_update_task
|
|
50
|
+
Args: { "project": "{{WORKSPACE_NAME}}", "task_slug": "{{TASK_SLUG}}", "updates": { ... } }
|
|
51
|
+
```
|
|
52
|
+
This tool saves the file automatically. Do NOT use `write` for meta.json.
|
|
53
|
+
3. **File Writing**: When using the `write` tool for other files:
|
|
48
54
|
- The `content` parameter **MUST be a string**.
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
3. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
55
|
+
- For JSON in other files, stringify first: `JSON.stringify(data, null, 2)`
|
|
56
|
+
4. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
52
57
|
|
|
53
58
|
Prerequisites (RECOMMENDED)
|
|
54
59
|
If a `TASK_SLUG` is provided:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Executor
|
|
3
3
|
description: Execute the planned tasks to deliver working code and tests. The ONLY agent authorized to modify source code.
|
|
4
4
|
argument-hint: "TASK_SLUG=<slug> [BRANCH=<git ref>]"
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'terminalLastCommand', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'update_task', 'terminalLastCommand', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
6
6
|
required-args:
|
|
7
7
|
- name: TASK_SLUG
|
|
8
8
|
prompt: "Enter the task slug to execute"
|
|
@@ -79,11 +79,16 @@ Before touching ANY code, verify ALL of the following in order:
|
|
|
79
79
|
1. **Path Resolution**: Always use the "System Resolved Paths" from the context preamble.
|
|
80
80
|
- Use `{{RRCE_DATA}}` for all RRCE-specific storage.
|
|
81
81
|
- Use `{{WORKSPACE_ROOT}}` for project source code.
|
|
82
|
-
2. **
|
|
82
|
+
2. **Metadata Updates**: For `meta.json` changes, use the MCP tool:
|
|
83
|
+
```
|
|
84
|
+
Tool: rrce_update_task
|
|
85
|
+
Args: { "project": "{{WORKSPACE_NAME}}", "task_slug": "{{TASK_SLUG}}", "updates": { ... } }
|
|
86
|
+
```
|
|
87
|
+
This tool saves the file automatically. Do NOT use `write` for meta.json.
|
|
88
|
+
3. **File Writing**: When using the `write` tool for other files:
|
|
83
89
|
- The `content` parameter **MUST be a string**.
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
3. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
90
|
+
- For JSON in other files, stringify first: `JSON.stringify(data, null, 2)`
|
|
91
|
+
4. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
87
92
|
|
|
88
93
|
## Mission
|
|
89
94
|
- Implement the scoped work as defined in the execution plan
|
|
@@ -96,7 +101,7 @@ Before touching ANY code, verify ALL of the following in order:
|
|
|
96
101
|
|
|
97
102
|
Before implementing, search for relevant patterns:
|
|
98
103
|
```
|
|
99
|
-
Tool:
|
|
104
|
+
Tool: rrce_search_knowledge
|
|
100
105
|
Args: { "query": "<component or pattern name>", "project": "{{WORKSPACE_NAME}}" }
|
|
101
106
|
```
|
|
102
107
|
|
|
@@ -262,7 +267,7 @@ After completing execution:
|
|
|
262
267
|
|
|
263
268
|
If significant code was added or modified, suggest running:
|
|
264
269
|
```
|
|
265
|
-
Tool:
|
|
270
|
+
Tool: rrce_index_knowledge
|
|
266
271
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
267
272
|
```
|
|
268
273
|
|
|
@@ -132,7 +132,7 @@ Scan in this priority order. Stop early if sufficient information gathered:
|
|
|
132
132
|
**Always run after generating/updating context:**
|
|
133
133
|
|
|
134
134
|
```
|
|
135
|
-
Tool:
|
|
135
|
+
Tool: rrce_index_knowledge
|
|
136
136
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
137
137
|
```
|
|
138
138
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Planning
|
|
3
3
|
description: Transform research findings into an actionable execution plan through interactive task breakdown.
|
|
4
4
|
argument-hint: "TASK_SLUG=<slug>"
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'read', 'glob', 'grep', 'write', 'bash']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'update_task', 'read', 'glob', 'grep', 'write', 'bash']
|
|
6
6
|
required-args:
|
|
7
7
|
- name: TASK_SLUG
|
|
8
8
|
prompt: "Enter the task slug to create a plan for"
|
|
@@ -52,13 +52,18 @@ For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
|
52
52
|
1. **Path Resolution**: Always use the "System Resolved Paths" from the context preamble.
|
|
53
53
|
- Use `{{RRCE_DATA}}` for all RRCE-specific storage.
|
|
54
54
|
- Use `{{WORKSPACE_ROOT}}` for reading project source code (READ ONLY).
|
|
55
|
-
2. **
|
|
55
|
+
2. **Metadata Updates**: For `meta.json` changes, use the MCP tool:
|
|
56
|
+
```
|
|
57
|
+
Tool: rrce_update_task
|
|
58
|
+
Args: { "project": "{{WORKSPACE_NAME}}", "task_slug": "{{TASK_SLUG}}", "updates": { ... } }
|
|
59
|
+
```
|
|
60
|
+
This tool saves the file automatically. Do NOT use `write` for meta.json.
|
|
61
|
+
3. **File Writing**: When using the `write` tool for other files:
|
|
56
62
|
- The `content` parameter **MUST be a string**.
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
3. **Write Permissions**: You may ONLY write to:
|
|
63
|
+
- For JSON in other files, stringify first: `JSON.stringify(data, null, 2)`
|
|
64
|
+
4. **Write Permissions**: You may ONLY write to:
|
|
60
65
|
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/planning/` (plan artifacts)
|
|
61
|
-
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/meta.json` (metadata)
|
|
66
|
+
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/meta.json` (metadata via rrce_update_task)
|
|
62
67
|
- `{{RRCE_DATA}}/knowledge/` (new knowledge documents)
|
|
63
68
|
|
|
64
69
|
## Prerequisites (STRICT)
|
|
@@ -113,7 +118,7 @@ Extract and internalize:
|
|
|
113
118
|
|
|
114
119
|
Search for related patterns and prior art:
|
|
115
120
|
```
|
|
116
|
-
Tool:
|
|
121
|
+
Tool: rrce_search_knowledge
|
|
117
122
|
Args: { "query": "<task keywords>", "project": "{{WORKSPACE_NAME}}" }
|
|
118
123
|
```
|
|
119
124
|
|
|
@@ -273,7 +278,7 @@ After saving the plan and updating metadata:
|
|
|
273
278
|
|
|
274
279
|
If new knowledge files were created in `{{RRCE_DATA}}/knowledge/`, suggest running:
|
|
275
280
|
```
|
|
276
|
-
Tool:
|
|
281
|
+
Tool: rrce_index_knowledge
|
|
277
282
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
278
283
|
```
|
|
279
284
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Research
|
|
3
3
|
description: Interactive research and requirements clarification through constructive dialogue. Achieves 100% understanding before planning.
|
|
4
4
|
argument-hint: REQUEST="<user prompt>" [TASK_SLUG=<slug>] [TITLE="<task title>"] [SOURCE=<url>]
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'read', 'glob', 'grep', 'write', 'bash']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'list_projects', 'create_task', 'update_task', 'read', 'glob', 'grep', 'write', 'bash']
|
|
6
6
|
required-args:
|
|
7
7
|
- name: TASK_SLUG
|
|
8
8
|
prompt: "Enter a task slug (kebab-case identifier)"
|
|
@@ -57,13 +57,18 @@ For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
|
57
57
|
1. **Path Resolution**: Always use the "System Resolved Paths" from the context preamble.
|
|
58
58
|
- Use `{{RRCE_DATA}}` for all RRCE-specific storage.
|
|
59
59
|
- Use `{{WORKSPACE_ROOT}}` for reading project source code (READ ONLY).
|
|
60
|
-
2. **
|
|
60
|
+
2. **Metadata Updates**: For `meta.json` changes, use the MCP tool:
|
|
61
|
+
```
|
|
62
|
+
Tool: rrce_update_task
|
|
63
|
+
Args: { "project": "{{WORKSPACE_NAME}}", "task_slug": "{{TASK_SLUG}}", "updates": { ... } }
|
|
64
|
+
```
|
|
65
|
+
This tool saves the file automatically. Do NOT use `write` for meta.json.
|
|
66
|
+
3. **File Writing**: When using the `write` tool for other files:
|
|
61
67
|
- The `content` parameter **MUST be a string**.
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
3. **Write Permissions**: You may ONLY write to:
|
|
68
|
+
- For JSON in other files, stringify first: `JSON.stringify(data, null, 2)`
|
|
69
|
+
4. **Write Permissions**: You may ONLY write to:
|
|
65
70
|
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/` (task artifacts)
|
|
66
|
-
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/meta.json` (metadata)
|
|
71
|
+
- `{{RRCE_DATA}}/tasks/{{TASK_SLUG}}/meta.json` (metadata via rrce_update_task)
|
|
67
72
|
|
|
68
73
|
## Mission
|
|
69
74
|
- Challenge and refine the incoming request until intent, constraints, and success criteria are explicit
|
|
@@ -78,7 +83,7 @@ For details, see: `{{RRCE_DATA}}/docs/path-resolution.md`
|
|
|
78
83
|
**Search existing knowledge for relevant context:**
|
|
79
84
|
|
|
80
85
|
```
|
|
81
|
-
Tool:
|
|
86
|
+
Tool: rrce_search_knowledge
|
|
82
87
|
Args: { "query": "<keywords from REQUEST>", "project": "{{WORKSPACE_NAME}}" }
|
|
83
88
|
```
|
|
84
89
|
|
|
@@ -91,7 +96,7 @@ Look for:
|
|
|
91
96
|
**Get project context:**
|
|
92
97
|
|
|
93
98
|
```
|
|
94
|
-
Tool:
|
|
99
|
+
Tool: rrce_get_project_context
|
|
95
100
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
96
101
|
```
|
|
97
102
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: RRCE Sync
|
|
3
3
|
description: Reconcile project state with the RRCE knowledge base and update semantic index.
|
|
4
4
|
argument-hint: "[SCOPE=<path|module>]"
|
|
5
|
-
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'list_projects', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
5
|
+
tools: ['search_knowledge', 'get_project_context', 'index_knowledge', 'list_projects', 'update_task', 'read', 'write', 'edit', 'bash', 'glob', 'grep']
|
|
6
6
|
required-args: []
|
|
7
7
|
optional-args:
|
|
8
8
|
- name: SCOPE
|
|
@@ -27,11 +27,16 @@ Pipeline Position
|
|
|
27
27
|
1. **Path Resolution**: Always use the "System Resolved Paths" from the context preamble.
|
|
28
28
|
- Use `{{RRCE_DATA}}` for all RRCE-specific storage.
|
|
29
29
|
- Use `{{WORKSPACE_ROOT}}` for project source code.
|
|
30
|
-
2. **
|
|
30
|
+
2. **Metadata Updates**: For `meta.json` changes, use the MCP tool:
|
|
31
|
+
```
|
|
32
|
+
Tool: rrce_update_task
|
|
33
|
+
Args: { "project": "{{WORKSPACE_NAME}}", "task_slug": "{{TASK_SLUG}}", "updates": { ... } }
|
|
34
|
+
```
|
|
35
|
+
This tool saves the file automatically. Do NOT use `write` for meta.json.
|
|
36
|
+
3. **File Writing**: When using the `write` tool for other files:
|
|
31
37
|
- The `content` parameter **MUST be a string**.
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
3. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
38
|
+
- For JSON in other files, stringify first: `JSON.stringify(data, null, 2)`
|
|
39
|
+
4. **Directory Safety**: Use `bash` with `mkdir -p` to ensure parent directories exist before writing files if they might be missing.
|
|
35
40
|
|
|
36
41
|
Prerequisites (STRICT)
|
|
37
42
|
1. **Project Context Exists**: Check `{{RRCE_DATA}}/knowledge/project-context.md` exists.
|
|
@@ -62,7 +67,7 @@ Workflow
|
|
|
62
67
|
5. Summarize any unresolved questions or future sync needs at the bottom of the modified file(s) under a `Checklist` heading.
|
|
63
68
|
6. **Semantic Indexing (MANDATORY)**: After updating any knowledge files, run the indexer to keep search current:
|
|
64
69
|
```
|
|
65
|
-
Tool:
|
|
70
|
+
Tool: rrce_index_knowledge
|
|
66
71
|
Args: { "project": "{{WORKSPACE_NAME}}" }
|
|
67
72
|
```
|
|
68
73
|
|
package/dist/index.js
CHANGED
|
@@ -1260,7 +1260,7 @@ function copyPromptsToDir(prompts, targetDir, extension) {
|
|
|
1260
1260
|
fs7.writeFileSync(targetPath, content);
|
|
1261
1261
|
}
|
|
1262
1262
|
}
|
|
1263
|
-
function convertToOpenCodeAgent(prompt) {
|
|
1263
|
+
function convertToOpenCodeAgent(prompt, useFileReference = false, promptFilePath) {
|
|
1264
1264
|
const { frontmatter, content } = prompt;
|
|
1265
1265
|
const tools = {};
|
|
1266
1266
|
const hostTools = ["read", "write", "edit", "bash", "grep", "glob", "webfetch", "terminalLastCommand"];
|
|
@@ -1277,7 +1277,7 @@ function convertToOpenCodeAgent(prompt) {
|
|
|
1277
1277
|
return {
|
|
1278
1278
|
description: frontmatter.description,
|
|
1279
1279
|
mode: "primary",
|
|
1280
|
-
prompt: content,
|
|
1280
|
+
prompt: useFileReference && promptFilePath ? `{file:${promptFilePath}}` : content,
|
|
1281
1281
|
tools
|
|
1282
1282
|
};
|
|
1283
1283
|
}
|
|
@@ -1694,6 +1694,8 @@ async function installAgentPrompts(config, workspacePath, dataPaths) {
|
|
|
1694
1694
|
if (primaryDataPath) {
|
|
1695
1695
|
if (config.storageMode === "global") {
|
|
1696
1696
|
try {
|
|
1697
|
+
const promptsDir = path12.join(path12.dirname(OPENCODE_CONFIG), "prompts");
|
|
1698
|
+
ensureDir(promptsDir);
|
|
1697
1699
|
let opencodeConfig = { $schema: "https://opencode.ai/config.json" };
|
|
1698
1700
|
if (fs10.existsSync(OPENCODE_CONFIG)) {
|
|
1699
1701
|
opencodeConfig = JSON.parse(fs10.readFileSync(OPENCODE_CONFIG, "utf-8"));
|
|
@@ -1701,7 +1703,10 @@ async function installAgentPrompts(config, workspacePath, dataPaths) {
|
|
|
1701
1703
|
if (!opencodeConfig.agent) opencodeConfig.agent = {};
|
|
1702
1704
|
for (const prompt of prompts) {
|
|
1703
1705
|
const baseName = path12.basename(prompt.filePath, ".md");
|
|
1704
|
-
const
|
|
1706
|
+
const promptFileName = `rrce-${baseName}.md`;
|
|
1707
|
+
const promptFilePath = path12.join(promptsDir, promptFileName);
|
|
1708
|
+
fs10.writeFileSync(promptFilePath, prompt.content);
|
|
1709
|
+
const agentConfig = convertToOpenCodeAgent(prompt, true, `./prompts/${promptFileName}`);
|
|
1705
1710
|
opencodeConfig.agent[baseName] = agentConfig;
|
|
1706
1711
|
}
|
|
1707
1712
|
fs10.writeFileSync(OPENCODE_CONFIG, JSON.stringify(opencodeConfig, null, 2) + "\n");
|
|
@@ -2816,7 +2821,7 @@ function registerToolHandlers(server) {
|
|
|
2816
2821
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
2817
2822
|
const tools = [
|
|
2818
2823
|
{
|
|
2819
|
-
name: "
|
|
2824
|
+
name: "rrce_search_knowledge",
|
|
2820
2825
|
description: "Search across all exposed project knowledge bases",
|
|
2821
2826
|
inputSchema: {
|
|
2822
2827
|
type: "object",
|
|
@@ -2828,7 +2833,7 @@ function registerToolHandlers(server) {
|
|
|
2828
2833
|
}
|
|
2829
2834
|
},
|
|
2830
2835
|
{
|
|
2831
|
-
name: "
|
|
2836
|
+
name: "rrce_index_knowledge",
|
|
2832
2837
|
description: "Update the semantic search index for a specific project",
|
|
2833
2838
|
inputSchema: {
|
|
2834
2839
|
type: "object",
|
|
@@ -2840,12 +2845,12 @@ function registerToolHandlers(server) {
|
|
|
2840
2845
|
}
|
|
2841
2846
|
},
|
|
2842
2847
|
{
|
|
2843
|
-
name: "
|
|
2848
|
+
name: "rrce_list_projects",
|
|
2844
2849
|
description: "List all projects exposed via MCP. Use these names for project-specific tools.",
|
|
2845
2850
|
inputSchema: { type: "object", properties: {} }
|
|
2846
2851
|
},
|
|
2847
2852
|
{
|
|
2848
|
-
name: "
|
|
2853
|
+
name: "rrce_get_project_context",
|
|
2849
2854
|
description: "Get the project context/architecture for a specific project",
|
|
2850
2855
|
inputSchema: {
|
|
2851
2856
|
type: "object",
|
|
@@ -2854,12 +2859,12 @@ function registerToolHandlers(server) {
|
|
|
2854
2859
|
}
|
|
2855
2860
|
},
|
|
2856
2861
|
{
|
|
2857
|
-
name: "
|
|
2862
|
+
name: "rrce_list_agents",
|
|
2858
2863
|
description: "List available agents (e.g. init, plan) and their arguments. Use this to discover which agent to call.",
|
|
2859
2864
|
inputSchema: { type: "object", properties: {} }
|
|
2860
2865
|
},
|
|
2861
2866
|
{
|
|
2862
|
-
name: "
|
|
2867
|
+
name: "rrce_get_agent_prompt",
|
|
2863
2868
|
description: 'Get the system prompt for a specific agent. Accepts agent Name (e.g. "RRCE Init") or ID (e.g. "init").',
|
|
2864
2869
|
inputSchema: {
|
|
2865
2870
|
type: "object",
|
|
@@ -2871,7 +2876,7 @@ function registerToolHandlers(server) {
|
|
|
2871
2876
|
}
|
|
2872
2877
|
},
|
|
2873
2878
|
{
|
|
2874
|
-
name: "
|
|
2879
|
+
name: "rrce_list_tasks",
|
|
2875
2880
|
description: "List all tasks for a project",
|
|
2876
2881
|
inputSchema: {
|
|
2877
2882
|
type: "object",
|
|
@@ -2880,7 +2885,7 @@ function registerToolHandlers(server) {
|
|
|
2880
2885
|
}
|
|
2881
2886
|
},
|
|
2882
2887
|
{
|
|
2883
|
-
name: "
|
|
2888
|
+
name: "rrce_get_task",
|
|
2884
2889
|
description: "Get details of a specific task",
|
|
2885
2890
|
inputSchema: {
|
|
2886
2891
|
type: "object",
|
|
@@ -2892,7 +2897,7 @@ function registerToolHandlers(server) {
|
|
|
2892
2897
|
}
|
|
2893
2898
|
},
|
|
2894
2899
|
{
|
|
2895
|
-
name: "
|
|
2900
|
+
name: "rrce_create_task",
|
|
2896
2901
|
description: "Create a new task in the project",
|
|
2897
2902
|
inputSchema: {
|
|
2898
2903
|
type: "object",
|
|
@@ -2906,7 +2911,7 @@ function registerToolHandlers(server) {
|
|
|
2906
2911
|
}
|
|
2907
2912
|
},
|
|
2908
2913
|
{
|
|
2909
|
-
name: "
|
|
2914
|
+
name: "rrce_update_task",
|
|
2910
2915
|
description: "Update an existing task",
|
|
2911
2916
|
inputSchema: {
|
|
2912
2917
|
type: "object",
|
|
@@ -2919,7 +2924,7 @@ function registerToolHandlers(server) {
|
|
|
2919
2924
|
}
|
|
2920
2925
|
},
|
|
2921
2926
|
{
|
|
2922
|
-
name: "
|
|
2927
|
+
name: "rrce_delete_task",
|
|
2923
2928
|
description: "Delete a task from the project",
|
|
2924
2929
|
inputSchema: {
|
|
2925
2930
|
type: "object",
|
|
@@ -2934,7 +2939,7 @@ function registerToolHandlers(server) {
|
|
|
2934
2939
|
const projects = getExposedProjects();
|
|
2935
2940
|
if (projects.length === 0) {
|
|
2936
2941
|
tools.push({
|
|
2937
|
-
name: "
|
|
2942
|
+
name: "rrce_help_setup",
|
|
2938
2943
|
description: "Get help on how to configure projects for the RRCE MCP Server",
|
|
2939
2944
|
inputSchema: { type: "object", properties: {} }
|
|
2940
2945
|
});
|
|
@@ -2946,27 +2951,27 @@ function registerToolHandlers(server) {
|
|
|
2946
2951
|
logger.info(`Calling tool: ${name}`, args);
|
|
2947
2952
|
try {
|
|
2948
2953
|
switch (name) {
|
|
2949
|
-
case "
|
|
2954
|
+
case "rrce_search_knowledge": {
|
|
2950
2955
|
const params = args;
|
|
2951
2956
|
const results = await searchKnowledge(params.query, params.project);
|
|
2952
2957
|
return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] };
|
|
2953
2958
|
}
|
|
2954
|
-
case "
|
|
2959
|
+
case "rrce_index_knowledge": {
|
|
2955
2960
|
const params = args;
|
|
2956
2961
|
const result = await indexKnowledge(params.project, params.force);
|
|
2957
2962
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
2958
2963
|
}
|
|
2959
|
-
case "
|
|
2964
|
+
case "rrce_list_projects": {
|
|
2960
2965
|
const projects = getExposedProjects();
|
|
2961
2966
|
const list = projects.map((p) => ({ name: p.name, source: p.source, path: p.path }));
|
|
2962
2967
|
return {
|
|
2963
2968
|
content: [{
|
|
2964
2969
|
type: "text",
|
|
2965
|
-
text: JSON.stringify(list, null, 2) + "\n\nTip: Use these project names for tools like `
|
|
2970
|
+
text: JSON.stringify(list, null, 2) + "\n\nTip: Use these project names for tools like `rrce_get_project_context` or `rrce_index_knowledge`."
|
|
2966
2971
|
}]
|
|
2967
2972
|
};
|
|
2968
2973
|
}
|
|
2969
|
-
case "
|
|
2974
|
+
case "rrce_get_project_context": {
|
|
2970
2975
|
const context = getProjectContext(args.project);
|
|
2971
2976
|
if (!context) {
|
|
2972
2977
|
const projects = getExposedProjects().map((p) => p.name).join(", ");
|
|
@@ -2977,7 +2982,7 @@ Available projects: ${projects}`;
|
|
|
2977
2982
|
}
|
|
2978
2983
|
return { content: [{ type: "text", text: context }] };
|
|
2979
2984
|
}
|
|
2980
|
-
case "
|
|
2985
|
+
case "rrce_list_agents": {
|
|
2981
2986
|
const prompts = getAllPrompts();
|
|
2982
2987
|
return {
|
|
2983
2988
|
content: [{
|
|
@@ -2987,11 +2992,11 @@ Available projects: ${projects}`;
|
|
|
2987
2992
|
id: p.id,
|
|
2988
2993
|
description: p.description,
|
|
2989
2994
|
arguments: p.arguments
|
|
2990
|
-
})), null, 2) + "\n\nTip: Retrieve the prompt for an agent using `
|
|
2995
|
+
})), null, 2) + "\n\nTip: Retrieve the prompt for an agent using `rrce_get_agent_prompt` with its name or ID."
|
|
2991
2996
|
}]
|
|
2992
2997
|
};
|
|
2993
2998
|
}
|
|
2994
|
-
case "
|
|
2999
|
+
case "rrce_get_agent_prompt": {
|
|
2995
3000
|
const params = args;
|
|
2996
3001
|
const agentName = params.agent;
|
|
2997
3002
|
const promptDef = getPromptDef(agentName);
|
|
@@ -3016,12 +3021,12 @@ The system has pre-resolved the configuration for this project. Use these values
|
|
|
3016
3021
|
`;
|
|
3017
3022
|
return { content: [{ type: "text", text: contextPreamble + rendered }] };
|
|
3018
3023
|
}
|
|
3019
|
-
case "
|
|
3024
|
+
case "rrce_list_tasks": {
|
|
3020
3025
|
const params = args;
|
|
3021
3026
|
const tasks = getProjectTasks(params.project);
|
|
3022
3027
|
return { content: [{ type: "text", text: JSON.stringify(tasks, null, 2) }] };
|
|
3023
3028
|
}
|
|
3024
|
-
case "
|
|
3029
|
+
case "rrce_get_task": {
|
|
3025
3030
|
const params = args;
|
|
3026
3031
|
const task = getTask(params.project, params.task_slug);
|
|
3027
3032
|
if (!task) {
|
|
@@ -3029,26 +3034,28 @@ The system has pre-resolved the configuration for this project. Use these values
|
|
|
3029
3034
|
}
|
|
3030
3035
|
return { content: [{ type: "text", text: JSON.stringify(task, null, 2) }] };
|
|
3031
3036
|
}
|
|
3032
|
-
case "
|
|
3037
|
+
case "rrce_create_task": {
|
|
3033
3038
|
const params = args;
|
|
3034
3039
|
const taskData = {
|
|
3035
3040
|
title: params.title || params.task_slug,
|
|
3036
3041
|
summary: params.summary || ""
|
|
3037
3042
|
};
|
|
3038
3043
|
const task = await createTask(params.project, params.task_slug, taskData);
|
|
3039
|
-
return { content: [{ type: "text", text:
|
|
3044
|
+
return { content: [{ type: "text", text: `\u2713 Task '${params.task_slug}' created. meta.json saved.
|
|
3045
|
+
${JSON.stringify(task, null, 2)}` }] };
|
|
3040
3046
|
}
|
|
3041
|
-
case "
|
|
3047
|
+
case "rrce_update_task": {
|
|
3042
3048
|
const params = args;
|
|
3043
3049
|
const task = await updateTask(params.project, params.task_slug, params.updates);
|
|
3044
|
-
return { content: [{ type: "text", text:
|
|
3050
|
+
return { content: [{ type: "text", text: `\u2713 Task '${params.task_slug}' updated. meta.json saved.
|
|
3051
|
+
${JSON.stringify(task, null, 2)}` }] };
|
|
3045
3052
|
}
|
|
3046
|
-
case "
|
|
3053
|
+
case "rrce_delete_task": {
|
|
3047
3054
|
const params = args;
|
|
3048
3055
|
const success = deleteTask(params.project, params.task_slug);
|
|
3049
|
-
return { content: [{ type: "text", text: success ?
|
|
3056
|
+
return { content: [{ type: "text", text: success ? `\u2713 Task '${params.task_slug}' deleted.` : `\u2717 Failed to delete '${params.task_slug}'.` }] };
|
|
3050
3057
|
}
|
|
3051
|
-
case "
|
|
3058
|
+
case "rrce_help_setup": {
|
|
3052
3059
|
const msg = `
|
|
3053
3060
|
RRCE MCP Server is running, but no projects are configured/exposed.
|
|
3054
3061
|
|
|
@@ -3286,7 +3293,7 @@ async function handleConfigure() {
|
|
|
3286
3293
|
enableSemanticSearch = shouldEnable;
|
|
3287
3294
|
if (enableSemanticSearch) {
|
|
3288
3295
|
note3(
|
|
3289
|
-
`This enables "
|
|
3296
|
+
`This enables "rrce_search_knowledge" tool for agents.
|
|
3290
3297
|
First use will download a ~100MB embedding model (all-MiniLM-L6-v2)
|
|
3291
3298
|
to your local device (one-time).`,
|
|
3292
3299
|
"Semantic Search Enabled"
|
|
@@ -5013,6 +5020,8 @@ ${dataPaths.map((p) => ` \u2022 ${p}`).join("\n")}`,
|
|
|
5013
5020
|
function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
|
|
5014
5021
|
if (mode === "global") {
|
|
5015
5022
|
try {
|
|
5023
|
+
const promptsDir = path19.join(path19.dirname(OPENCODE_CONFIG), "prompts");
|
|
5024
|
+
ensureDir(promptsDir);
|
|
5016
5025
|
let opencodeConfig = { $schema: "https://opencode.ai/config.json" };
|
|
5017
5026
|
if (fs18.existsSync(OPENCODE_CONFIG)) {
|
|
5018
5027
|
opencodeConfig = JSON.parse(fs18.readFileSync(OPENCODE_CONFIG, "utf-8"));
|
|
@@ -5026,11 +5035,18 @@ function updateOpenCodeAgents(prompts, mode, primaryDataPath) {
|
|
|
5026
5035
|
const stillExists = currentAgentNames.includes(existingName);
|
|
5027
5036
|
if (isRrceAgent && !stillExists) {
|
|
5028
5037
|
delete opencodeConfig.agent[existingName];
|
|
5038
|
+
const oldPromptFile = path19.join(promptsDir, `rrce-${existingName}.md`);
|
|
5039
|
+
if (fs18.existsSync(oldPromptFile)) {
|
|
5040
|
+
fs18.unlinkSync(oldPromptFile);
|
|
5041
|
+
}
|
|
5029
5042
|
}
|
|
5030
5043
|
}
|
|
5031
5044
|
for (const prompt of prompts) {
|
|
5032
5045
|
const baseName = path19.basename(prompt.filePath, ".md");
|
|
5033
|
-
const
|
|
5046
|
+
const promptFileName = `rrce-${baseName}.md`;
|
|
5047
|
+
const promptFilePath = path19.join(promptsDir, promptFileName);
|
|
5048
|
+
fs18.writeFileSync(promptFilePath, prompt.content);
|
|
5049
|
+
const agentConfig = convertToOpenCodeAgent(prompt, true, `./prompts/${promptFileName}`);
|
|
5034
5050
|
opencodeConfig.agent[baseName] = agentConfig;
|
|
5035
5051
|
}
|
|
5036
5052
|
fs18.writeFileSync(OPENCODE_CONFIG, JSON.stringify(opencodeConfig, null, 2) + "\n");
|