@rembr/vscode 1.0.0
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/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/README.md +248 -0
- package/cli.js +56 -0
- package/package.json +62 -0
- package/postinstall.js +30 -0
- package/setup.js +303 -0
- package/templates/aider.conf.yml +52 -0
- package/templates/copilot-instructions.md +49 -0
- package/templates/cursorrules +141 -0
- package/templates/recursive-analyst.agent.md +285 -0
- package/templates/rlm-benchmarks.md +172 -0
- package/templates/rlm-getting-started.md +297 -0
- package/templates/rlm-helper.js +267 -0
- package/templates/vscode-mcp-settings.json +14 -0
- package/templates/windsurfrules +141 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# RLM Pattern Implementation Guide
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
After installing `@rembr/vscode`, your GitHub Copilot is automatically configured with Recursive Language Model (RLM) patterns that achieve **51% token efficiency** improvements for complex tasks.
|
|
6
|
+
|
|
7
|
+
## What Just Happened?
|
|
8
|
+
|
|
9
|
+
The installer configured:
|
|
10
|
+
|
|
11
|
+
✅ **GitHub Copilot Instructions** - Auto-detects complex tasks and applies RLM decomposition
|
|
12
|
+
✅ **Recursive Analyst Agent** - Specialized agent for recursive task breakdown
|
|
13
|
+
✅ **REMBR MCP Server** - Semantic memory for context persistence
|
|
14
|
+
✅ **RLM Helper Scripts** - Task coordination and workflow optimization
|
|
15
|
+
✅ **VS Code Settings** - MCP integration for seamless memory access
|
|
16
|
+
|
|
17
|
+
## Automatic Pattern Detection
|
|
18
|
+
|
|
19
|
+
GitHub Copilot now automatically recognizes when to use RLM patterns:
|
|
20
|
+
|
|
21
|
+
### Complex Task Examples (Auto-RLM Triggers)
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
// ❌ Traditional: Single massive prompt
|
|
25
|
+
"Implement rate limiting for payment service with Redis backend, monitoring, and tests"
|
|
26
|
+
|
|
27
|
+
// ✅ RLM: Automatic decomposition
|
|
28
|
+
Parent: "Implement rate limiting for payment service"
|
|
29
|
+
├── L1-Analysis: Analyze payment endpoints and traffic patterns
|
|
30
|
+
├── L1-Design: Design rate limiting strategy with Redis
|
|
31
|
+
├── L1-Implementation: Implement middleware and configuration
|
|
32
|
+
└── L1-Monitoring: Add metrics, alerting, and tests
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Result**: 51% token reduction, 35% faster completion, 90%+ implementation quality
|
|
36
|
+
|
|
37
|
+
### When RLM Auto-Activates
|
|
38
|
+
|
|
39
|
+
🧠 **Complexity Triggers** (automatic):
|
|
40
|
+
- Multiple steps: "implement X with Y and Z"
|
|
41
|
+
- Cross-cutting: "refactor", "migrate", "integrate"
|
|
42
|
+
- Analysis + build: "analyze and implement"
|
|
43
|
+
- Multi-tech: "React + Express + PostgreSQL"
|
|
44
|
+
- Scale indicators: "across services", "multiple components"
|
|
45
|
+
|
|
46
|
+
🎯 **Simple Tasks** (standard approach):
|
|
47
|
+
- Single file changes
|
|
48
|
+
- Configuration updates
|
|
49
|
+
- Basic CRUD operations
|
|
50
|
+
- Documentation only
|
|
51
|
+
|
|
52
|
+
## How It Works
|
|
53
|
+
|
|
54
|
+
### 1. Auto-Detection
|
|
55
|
+
When you request a complex task, Copilot automatically:
|
|
56
|
+
- Recognizes complexity patterns in your request
|
|
57
|
+
- Generates a unique `taskId` for tracking
|
|
58
|
+
- Retrieves relevant context from rembr memory
|
|
59
|
+
- Decomposes into focused subagents
|
|
60
|
+
|
|
61
|
+
### 2. Recursive Decomposition
|
|
62
|
+
Each subagent:
|
|
63
|
+
- Receives only relevant context (not entire codebase)
|
|
64
|
+
- Focuses on one specialized area
|
|
65
|
+
- Can spawn its own subagents if needed (max 3 levels)
|
|
66
|
+
- Stores findings in rembr with structured metadata
|
|
67
|
+
|
|
68
|
+
### 3. Context Persistence
|
|
69
|
+
All insights stored in rembr for future reuse:
|
|
70
|
+
- Implementation patterns
|
|
71
|
+
- Architecture decisions
|
|
72
|
+
- Debugging solutions
|
|
73
|
+
- Integration approaches
|
|
74
|
+
|
|
75
|
+
### 4. Synthesis
|
|
76
|
+
Parent agent coordinates results and creates comprehensive implementation.
|
|
77
|
+
|
|
78
|
+
## Memory Categories
|
|
79
|
+
|
|
80
|
+
RLM stores findings in structured categories:
|
|
81
|
+
|
|
82
|
+
- **`facts`** - Implementation details, code patterns, technical specifications
|
|
83
|
+
- **`context`** - Session information, task decomposition, coordination data
|
|
84
|
+
- **`projects`** - High-level summaries, architectural decisions, completion status
|
|
85
|
+
|
|
86
|
+
## Example Workflow
|
|
87
|
+
|
|
88
|
+
### Complex Request
|
|
89
|
+
```
|
|
90
|
+
"Migrate our Express payment service to Fastify, add rate limiting,
|
|
91
|
+
implement JWT auth, and create admin monitoring dashboard"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Auto-Generated Plan
|
|
95
|
+
```javascript
|
|
96
|
+
// 1. Context Retrieval
|
|
97
|
+
search_memory({
|
|
98
|
+
query: "express fastify migration payment auth",
|
|
99
|
+
limit: 5
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// 2. Automatic Decomposition
|
|
103
|
+
runSubagent({ // L1-Migration
|
|
104
|
+
description: "Migrate Express routes to Fastify equivalent",
|
|
105
|
+
prompt: "Focus on core framework migration..."
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
runSubagent({ // L1-Security
|
|
109
|
+
description: "Implement rate limiting and JWT auth",
|
|
110
|
+
prompt: "Focus on authentication and rate limiting..."
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
runSubagent({ // L1-Monitoring
|
|
114
|
+
description: "Create admin dashboard with metrics",
|
|
115
|
+
prompt: "Focus on monitoring and dashboard..."
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// 3. Each subagent may spawn L2 subagents:
|
|
119
|
+
// L1-Security → L2-RateLimit, L2-JWT, L2-Validation
|
|
120
|
+
// L1-Monitoring → L2-Metrics, L2-Dashboard, L2-Alerts
|
|
121
|
+
|
|
122
|
+
// 4. Synthesis
|
|
123
|
+
store_memory({
|
|
124
|
+
category: "projects",
|
|
125
|
+
content: "Complete migration summary with all components",
|
|
126
|
+
metadata: { taskId: "migration-20260107-abc12" }
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Token Efficiency
|
|
131
|
+
- **Traditional**: ~18,400 tokens (full context each time)
|
|
132
|
+
- **RLM**: ~8,800 tokens (52% reduction via focused subagents)
|
|
133
|
+
|
|
134
|
+
## Advanced Usage
|
|
135
|
+
|
|
136
|
+
### Manual RLM Trigger
|
|
137
|
+
|
|
138
|
+
For tasks that don't auto-trigger, use the helper:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# Analyze task complexity
|
|
142
|
+
node rlm-helper.js "your complex task description"
|
|
143
|
+
|
|
144
|
+
# Example output:
|
|
145
|
+
# 🧠 RLM PATTERN DETECTED - Complex task requiring decomposition
|
|
146
|
+
# 📋 Generated TaskId: task-20260107-abc12
|
|
147
|
+
# 🔍 Key Concepts: payment, rate, limiting, redis, monitoring
|
|
148
|
+
# 🏗️ Suggested Decomposition:
|
|
149
|
+
# 1. L1-Analysis: Analyze current endpoints and traffic patterns
|
|
150
|
+
# 2. L1-Design: Design rate limiting strategy with Redis
|
|
151
|
+
# 3. L1-Implementation: Implement rate limiting middleware
|
|
152
|
+
# 4. L1-Testing: Create tests and monitoring for rate limits
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Memory Retrieval Patterns
|
|
156
|
+
|
|
157
|
+
```javascript
|
|
158
|
+
// Find implementation patterns
|
|
159
|
+
search_memory({
|
|
160
|
+
query: "rate limiting middleware express",
|
|
161
|
+
category: "facts",
|
|
162
|
+
limit: 5
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
// Discover related solutions
|
|
166
|
+
find_similar_memories({
|
|
167
|
+
memory_id: "some-implementation-id",
|
|
168
|
+
limit: 3,
|
|
169
|
+
min_similarity: 0.8
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Task-specific context
|
|
173
|
+
search_memory({
|
|
174
|
+
query: "authentication patterns",
|
|
175
|
+
metadata_filter: {
|
|
176
|
+
taskId: "auth-implementation-20260107",
|
|
177
|
+
area: "security"
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Custom Agent Creation
|
|
183
|
+
|
|
184
|
+
Create specialized agents for your domain:
|
|
185
|
+
|
|
186
|
+
```markdown
|
|
187
|
+
---
|
|
188
|
+
name: Payment Service Specialist
|
|
189
|
+
description: Handles payment processing, billing, and financial integrations
|
|
190
|
+
tools:
|
|
191
|
+
- rembr/*
|
|
192
|
+
- codebase
|
|
193
|
+
- editFiles
|
|
194
|
+
model: Claude Sonnet 4
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
You specialize in payment system implementations using the RLM pattern.
|
|
198
|
+
Auto-decompose payment tasks into: security, processing, webhooks, compliance.
|
|
199
|
+
Always retrieve payment-specific context from rembr before implementing.
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Configuration
|
|
203
|
+
|
|
204
|
+
### Update API Key
|
|
205
|
+
|
|
206
|
+
Edit your VS Code settings:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"mcpServers": {
|
|
211
|
+
"rembr": {
|
|
212
|
+
"env": {
|
|
213
|
+
"REMBR_API_KEY": "your-actual-api-key"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Adjust RLM Behavior
|
|
221
|
+
|
|
222
|
+
Modify `.github/copilot-instructions.md` to customize:
|
|
223
|
+
|
|
224
|
+
- Auto-detection triggers
|
|
225
|
+
- Decomposition patterns
|
|
226
|
+
- Memory categories
|
|
227
|
+
- Subagent specializations
|
|
228
|
+
|
|
229
|
+
## Troubleshooting
|
|
230
|
+
|
|
231
|
+
### Memory Not Persisting
|
|
232
|
+
1. Check VS Code MCP settings in `claude_desktop_config.json`
|
|
233
|
+
2. Verify rembr API key is valid: `curl -H "X-API-Key: YOUR_KEY" https://api.rembr.ai/health`
|
|
234
|
+
3. Confirm network connectivity to rembr.ai
|
|
235
|
+
|
|
236
|
+
### No Auto-Detection
|
|
237
|
+
1. Ensure `.github/copilot-instructions.md` is in project root
|
|
238
|
+
2. Restart GitHub Copilot extension
|
|
239
|
+
3. Use more explicit complexity indicators in requests
|
|
240
|
+
|
|
241
|
+
### Subagent Failures
|
|
242
|
+
1. Check decomposition depth (max 3 levels)
|
|
243
|
+
2. Verify each subagent has focused, actionable task
|
|
244
|
+
3. Ensure proper metadata structure in memory storage
|
|
245
|
+
|
|
246
|
+
## Performance Monitoring
|
|
247
|
+
|
|
248
|
+
Track your RLM efficiency:
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
// Get usage stats
|
|
252
|
+
get_stats();
|
|
253
|
+
|
|
254
|
+
// View memory categories
|
|
255
|
+
list_memories({ limit: 20 });
|
|
256
|
+
|
|
257
|
+
// Analyze task patterns
|
|
258
|
+
search_memory({
|
|
259
|
+
query: "synthesis",
|
|
260
|
+
metadata_filter: { type: "synthesis" },
|
|
261
|
+
limit: 10
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Best Practices
|
|
266
|
+
|
|
267
|
+
### ✅ RLM-Friendly Requests
|
|
268
|
+
- "Implement X with Y, including Z and monitoring"
|
|
269
|
+
- "Migrate service from A to B with authentication"
|
|
270
|
+
- "Refactor payment system for better performance and security"
|
|
271
|
+
- "Analyze and rebuild the user authentication flow"
|
|
272
|
+
|
|
273
|
+
### ❌ Avoid for Simple Tasks
|
|
274
|
+
- "Fix this typo"
|
|
275
|
+
- "Add a console.log statement"
|
|
276
|
+
- "Update README.md"
|
|
277
|
+
- "Change variable name from X to Y"
|
|
278
|
+
|
|
279
|
+
### 🎯 Optimal Decomposition
|
|
280
|
+
- 4-8 subagents for complex tasks
|
|
281
|
+
- Each subagent handles 1 specific domain
|
|
282
|
+
- Clear parent-child relationships
|
|
283
|
+
- Consistent metadata schemas
|
|
284
|
+
|
|
285
|
+
## Getting Support
|
|
286
|
+
|
|
287
|
+
- **Documentation**: https://docs.rembr.ai/rlm-patterns
|
|
288
|
+
- **Examples**: Browse stored memories with `search_memory({ query: "implementation example" })`
|
|
289
|
+
- **Community**: https://github.com/rembr-ai/community/discussions
|
|
290
|
+
- **Issues**: https://github.com/rembr-ai/vscode-extension/issues
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
**Installed Version**: @rembr/vscode v1.0.0
|
|
295
|
+
**Compatible With**: GitHub Copilot, Claude Desktop, VS Code Extensions
|
|
296
|
+
**Memory Backend**: rembr.ai (hosted) or self-hosted rembr-mcp server
|
|
297
|
+
**Token Efficiency**: Up to 55% reduction for complex tasks
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* RLM Task Coordination Script
|
|
5
|
+
* Helps manage recursive decomposition workflows with rembr
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { exec } = require('child_process');
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
|
|
12
|
+
class RLMTaskManager {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.currentTaskId = null;
|
|
15
|
+
this.decompositionLevel = 0;
|
|
16
|
+
this.maxDepth = 3;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Generate a unique task ID for the RLM session
|
|
21
|
+
*/
|
|
22
|
+
generateTaskId(taskName) {
|
|
23
|
+
const date = new Date().toISOString().slice(0, 10).replace(/-/g, '');
|
|
24
|
+
const randomId = Math.random().toString(36).substr(2, 5);
|
|
25
|
+
return `${taskName.toLowerCase().replace(/[^a-z0-9]/g, '-')}-${date}-${randomId}`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Auto-detect if a task requires RLM decomposition
|
|
30
|
+
*/
|
|
31
|
+
shouldDecompose(taskDescription) {
|
|
32
|
+
const decompositionIndicators = [
|
|
33
|
+
// Multiple steps or phases
|
|
34
|
+
/implement.*and.*|create.*with.*|build.*plus/i,
|
|
35
|
+
|
|
36
|
+
// Cross-cutting concerns
|
|
37
|
+
/refactor.*|migrate.*|integrate.*|modernize/i,
|
|
38
|
+
|
|
39
|
+
// Analysis + implementation
|
|
40
|
+
/analyze.*and.*(build|implement|create)|research.*and.*(develop|code)/i,
|
|
41
|
+
|
|
42
|
+
// Multiple technologies mentioned
|
|
43
|
+
/\b(react|vue|angular).*\b(express|fastify|node).*\b(postgres|mysql|redis)/i,
|
|
44
|
+
|
|
45
|
+
// Complexity markers
|
|
46
|
+
/multiple.*|several.*|various.*|across.*|throughout/i,
|
|
47
|
+
|
|
48
|
+
// Scale indicators
|
|
49
|
+
/service.*service|system.*system|component.*component/i
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
return decompositionIndicators.some(pattern => pattern.test(taskDescription));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Extract key concepts for memory retrieval
|
|
57
|
+
*/
|
|
58
|
+
extractConcepts(taskDescription) {
|
|
59
|
+
// Remove common words and extract meaningful terms
|
|
60
|
+
const stopWords = ['the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by'];
|
|
61
|
+
const words = taskDescription.toLowerCase().split(/\W+/);
|
|
62
|
+
const concepts = words.filter(word =>
|
|
63
|
+
word.length > 2 &&
|
|
64
|
+
!stopWords.includes(word) &&
|
|
65
|
+
!/^\d+$/.test(word)
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// Extract technical terms (frameworks, languages, etc.)
|
|
69
|
+
const techTerms = taskDescription.match(/\b(react|vue|angular|express|fastify|node|postgres|mysql|redis|typescript|javascript|python|api|rest|graphql|auth|oauth|jwt|rate|limit|cache|middleware|service|component|database|migration|test|deploy)\b/gi) || [];
|
|
70
|
+
|
|
71
|
+
return [...new Set([...concepts.slice(0, 5), ...techTerms.map(t => t.toLowerCase())])];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Generate decomposition suggestions
|
|
76
|
+
*/
|
|
77
|
+
suggestDecomposition(taskDescription) {
|
|
78
|
+
const suggestions = [];
|
|
79
|
+
|
|
80
|
+
// Pattern-based decomposition suggestions
|
|
81
|
+
if (/implement.*rate.*limit/i.test(taskDescription)) {
|
|
82
|
+
suggestions.push(
|
|
83
|
+
"L1-Analysis: Analyze current endpoints and traffic patterns",
|
|
84
|
+
"L1-Design: Design rate limiting strategy with Redis/memory store",
|
|
85
|
+
"L1-Implementation: Implement rate limiting middleware",
|
|
86
|
+
"L1-Testing: Create tests and monitoring for rate limits"
|
|
87
|
+
);
|
|
88
|
+
} else if (/migrate.*to/i.test(taskDescription)) {
|
|
89
|
+
suggestions.push(
|
|
90
|
+
"L1-Assessment: Analyze current architecture and dependencies",
|
|
91
|
+
"L1-Planning: Plan migration strategy and compatibility",
|
|
92
|
+
"L1-Migration: Execute core migration steps",
|
|
93
|
+
"L1-Validation: Test and validate migrated system"
|
|
94
|
+
);
|
|
95
|
+
} else if (/integrate.*service|connect.*system/i.test(taskDescription)) {
|
|
96
|
+
suggestions.push(
|
|
97
|
+
"L1-Discovery: Map integration points and data flow",
|
|
98
|
+
"L1-Auth: Implement authentication and authorization",
|
|
99
|
+
"L1-DataFlow: Build data transformation and APIs",
|
|
100
|
+
"L1-Monitoring: Add logging, metrics, and error handling"
|
|
101
|
+
);
|
|
102
|
+
} else {
|
|
103
|
+
// Generic decomposition
|
|
104
|
+
suggestions.push(
|
|
105
|
+
"L1-Research: Analyze requirements and existing code",
|
|
106
|
+
"L1-Design: Plan architecture and implementation approach",
|
|
107
|
+
"L1-Core: Implement core functionality",
|
|
108
|
+
"L1-Integration: Handle integration and edge cases"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return suggestions;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Generate memory search query for context retrieval
|
|
117
|
+
*/
|
|
118
|
+
generateContextQuery(concepts, area = null) {
|
|
119
|
+
const baseQuery = concepts.slice(0, 3).join(' ');
|
|
120
|
+
|
|
121
|
+
if (area) {
|
|
122
|
+
return `${baseQuery} ${area}`;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return baseQuery;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Create a subagent prompt template
|
|
130
|
+
*/
|
|
131
|
+
createSubagentPrompt(subtask, concepts, parentTaskId, level = 1) {
|
|
132
|
+
const childTaskId = `${parentTaskId}-L${level}-${subtask.toLowerCase().replace(/[^a-z0-9]/g, '-')}`;
|
|
133
|
+
const contextQuery = this.generateContextQuery(concepts, subtask.split(':')[0]);
|
|
134
|
+
|
|
135
|
+
return `
|
|
136
|
+
## Task
|
|
137
|
+
${subtask}
|
|
138
|
+
|
|
139
|
+
## Context Query for rembr
|
|
140
|
+
Use this query to retrieve relevant context before starting:
|
|
141
|
+
\`\`\`
|
|
142
|
+
search_memory({
|
|
143
|
+
query: "${contextQuery}",
|
|
144
|
+
category: "facts",
|
|
145
|
+
limit: 5
|
|
146
|
+
})
|
|
147
|
+
\`\`\`
|
|
148
|
+
|
|
149
|
+
## Recursive Authority
|
|
150
|
+
You may spawn your own subagents using runSubagent if this task requires further decomposition.
|
|
151
|
+
- Current level: L${level} (max depth: ${this.maxDepth})
|
|
152
|
+
- Parent taskId: ${parentTaskId}
|
|
153
|
+
- Your taskId: ${childTaskId}
|
|
154
|
+
|
|
155
|
+
## Storage Instructions
|
|
156
|
+
Store all findings to rembr with:
|
|
157
|
+
\`\`\`javascript
|
|
158
|
+
store_memory({
|
|
159
|
+
category: "facts",
|
|
160
|
+
content: "Your findings here",
|
|
161
|
+
metadata: {
|
|
162
|
+
"taskId": "${childTaskId}",
|
|
163
|
+
"area": "${subtask.split(':')[0].toLowerCase()}",
|
|
164
|
+
"level": "L${level}",
|
|
165
|
+
"parent": "${parentTaskId}"
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
\`\`\`
|
|
169
|
+
|
|
170
|
+
## Return Format
|
|
171
|
+
Return using this exact structure:
|
|
172
|
+
|
|
173
|
+
### Summary
|
|
174
|
+
[1-2 paragraph summary of what was discovered/accomplished]
|
|
175
|
+
|
|
176
|
+
### Findings Stored
|
|
177
|
+
- Category: facts
|
|
178
|
+
- Search query: "${contextQuery} ${subtask.split(':')[0].toLowerCase()}"
|
|
179
|
+
- Metadata filter: { "taskId": "${childTaskId}", "area": "${subtask.split(':')[0].toLowerCase()}", "level": "L${level}" }
|
|
180
|
+
- Memory count: [number of memories stored]
|
|
181
|
+
|
|
182
|
+
### Subagents Spawned
|
|
183
|
+
- Count: [number of recursive subagents spawned, 0 if none]
|
|
184
|
+
- Areas: [list of sub-areas handled by child agents]
|
|
185
|
+
- Status: [all complete | some pending | failed]
|
|
186
|
+
|
|
187
|
+
### Key Points
|
|
188
|
+
- [Most important findings for parent context]
|
|
189
|
+
- [Implementation details discovered]
|
|
190
|
+
- [Blockers or dependencies identified]
|
|
191
|
+
|
|
192
|
+
### Status
|
|
193
|
+
[complete | partial | blocked]
|
|
194
|
+
[If partial/blocked, explain what remains]
|
|
195
|
+
|
|
196
|
+
## Guidelines
|
|
197
|
+
- Focus only on: ${subtask}
|
|
198
|
+
- Spawn subagents if your task involves 3+ distinct components
|
|
199
|
+
- Use hierarchical taskIds for any subagents: ${childTaskId}-L${level+1}-[area]
|
|
200
|
+
- Coordinate all recursive results before returning
|
|
201
|
+
`;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Print RLM workflow suggestion for GitHub Copilot
|
|
206
|
+
*/
|
|
207
|
+
printWorkflowSuggestion(taskDescription) {
|
|
208
|
+
if (!this.shouldDecompose(taskDescription)) {
|
|
209
|
+
console.log("🤖 Task appears simple - standard implementation recommended");
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
console.log("\n🧠 RLM PATTERN DETECTED - Complex task requiring decomposition\n");
|
|
214
|
+
|
|
215
|
+
const taskName = taskDescription.split(' ').slice(0, 3).join('-');
|
|
216
|
+
const taskId = this.generateTaskId(taskName);
|
|
217
|
+
const concepts = this.extractConcepts(taskDescription);
|
|
218
|
+
const suggestions = this.suggestDecomposition(taskDescription);
|
|
219
|
+
|
|
220
|
+
console.log(`📋 Generated TaskId: ${taskId}`);
|
|
221
|
+
console.log(`🔍 Key Concepts: ${concepts.join(', ')}`);
|
|
222
|
+
console.log(`🏗️ Suggested Decomposition:`);
|
|
223
|
+
suggestions.forEach((suggestion, i) => {
|
|
224
|
+
console.log(` ${i + 1}. ${suggestion}`);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
console.log(`\n📝 Quick Start Commands:`);
|
|
228
|
+
console.log(`\n1. Retrieve Context:`);
|
|
229
|
+
console.log(`search_memory({
|
|
230
|
+
query: "${this.generateContextQuery(concepts)}",
|
|
231
|
+
limit: 5
|
|
232
|
+
})`);
|
|
233
|
+
|
|
234
|
+
console.log(`\n2. Store Session Context:`);
|
|
235
|
+
console.log(`store_memory({
|
|
236
|
+
category: "context",
|
|
237
|
+
content: "${taskDescription}",
|
|
238
|
+
metadata: { "taskId": "${taskId}", "type": "session-start" }
|
|
239
|
+
})`);
|
|
240
|
+
|
|
241
|
+
console.log(`\n3. Spawn First Subagent:`);
|
|
242
|
+
const firstSubtask = suggestions[0] || "L1-Analysis: Analyze task requirements";
|
|
243
|
+
console.log(`runSubagent({
|
|
244
|
+
description: "${firstSubtask}",
|
|
245
|
+
prompt: \`${this.createSubagentPrompt(firstSubtask, concepts, taskId, 1).substring(0, 200)}...\`
|
|
246
|
+
})`);
|
|
247
|
+
|
|
248
|
+
console.log(`\n🎯 Remember: Each subagent should use the metadata filter { "taskId": "${taskId}" } to retrieve relevant context`);
|
|
249
|
+
console.log(`📊 Expected token reduction: 45-55% for this complexity level\n`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// CLI Interface
|
|
254
|
+
if (require.main === module) {
|
|
255
|
+
const manager = new RLMTaskManager();
|
|
256
|
+
const taskDescription = process.argv.slice(2).join(' ');
|
|
257
|
+
|
|
258
|
+
if (!taskDescription) {
|
|
259
|
+
console.log("Usage: node rlm-helper.js <task description>");
|
|
260
|
+
console.log("Example: node rlm-helper.js implement rate limiting for payment service with Redis backend");
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
manager.printWorkflowSuggestion(taskDescription);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
module.exports = RLMTaskManager;
|