@hivehub/rulebook 3.4.2 → 4.1.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/.claude/commands/continue.md +33 -0
- package/.claude-plugin/marketplace.json +28 -29
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +66 -144
- package/dist/agents/ralph-parser.d.ts +41 -1
- package/dist/agents/ralph-parser.d.ts.map +1 -1
- package/dist/agents/ralph-parser.js +202 -14
- package/dist/agents/ralph-parser.js.map +1 -1
- package/dist/cli/commands.d.ts +65 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +837 -61
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/agent-manager.d.ts +7 -0
- package/dist/core/agent-manager.d.ts.map +1 -1
- package/dist/core/agent-manager.js +150 -3
- package/dist/core/agent-manager.js.map +1 -1
- package/dist/core/claude-mcp.d.ts +17 -0
- package/dist/core/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude-mcp.js +90 -6
- package/dist/core/claude-mcp.js.map +1 -1
- package/dist/core/config-manager.d.ts.map +1 -1
- package/dist/core/config-manager.js +40 -0
- package/dist/core/config-manager.js.map +1 -1
- package/dist/core/cursor-mdc-generator.d.ts +30 -0
- package/dist/core/cursor-mdc-generator.d.ts.map +1 -0
- package/dist/core/cursor-mdc-generator.js +98 -0
- package/dist/core/cursor-mdc-generator.js.map +1 -0
- package/dist/core/detector.d.ts +25 -1
- package/dist/core/detector.d.ts.map +1 -1
- package/dist/core/detector.js +321 -1
- package/dist/core/detector.js.map +1 -1
- package/dist/core/generator.d.ts +10 -0
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +177 -3
- package/dist/core/generator.js.map +1 -1
- package/dist/core/github-issues-importer.d.ts +82 -0
- package/dist/core/github-issues-importer.d.ts.map +1 -0
- package/dist/core/github-issues-importer.js +161 -0
- package/dist/core/github-issues-importer.js.map +1 -0
- package/dist/core/health-scorer.d.ts +39 -0
- package/dist/core/health-scorer.d.ts.map +1 -1
- package/dist/core/health-scorer.js +256 -13
- package/dist/core/health-scorer.js.map +1 -1
- package/dist/core/indexer/background-indexer.d.ts +27 -0
- package/dist/core/indexer/background-indexer.d.ts.map +1 -0
- package/dist/core/indexer/background-indexer.js +135 -0
- package/dist/core/indexer/background-indexer.js.map +1 -0
- package/dist/core/indexer/file-parser.d.ts +28 -0
- package/dist/core/indexer/file-parser.d.ts.map +1 -0
- package/dist/core/indexer/file-parser.js +171 -0
- package/dist/core/indexer/file-parser.js.map +1 -0
- package/dist/core/indexer/indexer-types.d.ts +35 -0
- package/dist/core/indexer/indexer-types.d.ts.map +1 -0
- package/dist/core/indexer/indexer-types.js +8 -0
- package/dist/core/indexer/indexer-types.js.map +1 -0
- package/dist/core/iteration-tracker.d.ts +28 -0
- package/dist/core/iteration-tracker.d.ts.map +1 -1
- package/dist/core/iteration-tracker.js +86 -0
- package/dist/core/iteration-tracker.js.map +1 -1
- package/dist/core/multi-tool-generator.d.ts +59 -0
- package/dist/core/multi-tool-generator.d.ts.map +1 -0
- package/dist/core/multi-tool-generator.js +157 -0
- package/dist/core/multi-tool-generator.js.map +1 -0
- package/dist/core/override-manager.d.ts +23 -0
- package/dist/core/override-manager.d.ts.map +1 -0
- package/dist/core/override-manager.js +82 -0
- package/dist/core/override-manager.js.map +1 -0
- package/dist/core/plans-manager.d.ts +46 -0
- package/dist/core/plans-manager.d.ts.map +1 -0
- package/dist/core/plans-manager.js +158 -0
- package/dist/core/plans-manager.js.map +1 -0
- package/dist/core/prd-generator.d.ts +12 -0
- package/dist/core/prd-generator.d.ts.map +1 -1
- package/dist/core/prd-generator.js +91 -2
- package/dist/core/prd-generator.js.map +1 -1
- package/dist/core/ralph-manager.d.ts +47 -1
- package/dist/core/ralph-manager.d.ts.map +1 -1
- package/dist/core/ralph-manager.js +107 -0
- package/dist/core/ralph-manager.js.map +1 -1
- package/dist/core/ralph-parallel.d.ts +55 -0
- package/dist/core/ralph-parallel.d.ts.map +1 -0
- package/dist/core/ralph-parallel.js +201 -0
- package/dist/core/ralph-parallel.js.map +1 -0
- package/dist/core/ralph-plan-checkpoint.d.ts +58 -0
- package/dist/core/ralph-plan-checkpoint.d.ts.map +1 -0
- package/dist/core/ralph-plan-checkpoint.js +154 -0
- package/dist/core/ralph-plan-checkpoint.js.map +1 -0
- package/dist/core/ralph-scripts.d.ts +12 -0
- package/dist/core/ralph-scripts.d.ts.map +1 -0
- package/dist/core/ralph-scripts.js +49 -0
- package/dist/core/ralph-scripts.js.map +1 -0
- package/dist/core/review-manager.d.ts +74 -0
- package/dist/core/review-manager.d.ts.map +1 -0
- package/dist/core/review-manager.js +371 -0
- package/dist/core/review-manager.js.map +1 -0
- package/dist/index.js +94 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +117 -8
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +4 -1
- package/dist/memory/memory-manager.d.ts.map +1 -1
- package/dist/memory/memory-manager.js +33 -4
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-search.d.ts +2 -2
- package/dist/memory/memory-search.d.ts.map +1 -1
- package/dist/memory/memory-search.js +19 -0
- package/dist/memory/memory-search.js.map +1 -1
- package/dist/memory/memory-store.d.ts +13 -0
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +92 -1
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/memory/memory-types.d.ts +15 -0
- package/dist/memory/memory-types.d.ts.map +1 -1
- package/dist/types.d.ts +55 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/agents/implementer.md +35 -0
- package/templates/agents/researcher.md +34 -0
- package/templates/agents/team-lead.md +34 -0
- package/templates/agents/tester.md +42 -0
- package/templates/ci/rulebook-review.yml +26 -0
- package/templates/commands/rulebook-task-archive.md +24 -0
- package/templates/core/AGENTS_LEAN.md +25 -0
- package/templates/core/AGENTS_OVERRIDE.md +16 -0
- package/templates/core/MULTI_AGENT.md +74 -0
- package/templates/core/PLANS.md +28 -0
- package/templates/core/RALPH.md +45 -4
- package/templates/core/RULEBOOK.md +42 -0
- package/templates/ides/CONTINUE_RULES.md +16 -0
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -0
- package/templates/ides/GEMINI_RULES.md +17 -0
- package/templates/ides/WINDSURF_RULES.md +14 -0
- package/templates/ides/cursor-mdc/go.mdc +24 -0
- package/templates/ides/cursor-mdc/python.mdc +24 -0
- package/templates/ides/cursor-mdc/quality.mdc +25 -0
- package/templates/ides/cursor-mdc/ralph.mdc +39 -0
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -0
- package/templates/ides/cursor-mdc/rust.mdc +24 -0
- package/templates/ides/cursor-mdc/typescript.mdc +25 -0
- package/templates/modules/sequential-thinking.md +42 -0
- package/templates/ralph/ralph-history.bat +4 -0
- package/templates/ralph/ralph-history.sh +5 -0
- package/templates/ralph/ralph-init.bat +5 -0
- package/templates/ralph/ralph-init.sh +5 -0
- package/templates/ralph/ralph-pause.bat +5 -0
- package/templates/ralph/ralph-pause.sh +5 -0
- package/templates/ralph/ralph-run.bat +5 -0
- package/templates/ralph/ralph-run.sh +5 -0
- package/templates/ralph/ralph-status.bat +4 -0
- package/templates/ralph/ralph-status.sh +5 -0
- package/templates/services/DATADOG.md +26 -0
- package/templates/services/DOCKER.md +124 -0
- package/templates/services/DOCKER_COMPOSE.md +168 -0
- package/templates/services/HELM.md +194 -0
- package/templates/services/KUBERNETES.md +208 -0
- package/templates/services/OPENTELEMETRY.md +25 -0
- package/templates/services/PINO.md +24 -0
- package/templates/services/PROMETHEUS.md +33 -0
- package/templates/services/SENTRY.md +23 -0
- package/templates/services/WINSTON.md +30 -0
- package/dist/core/openspec-manager.d.ts +0 -133
- package/dist/core/openspec-manager.d.ts.map +0 -1
- package/dist/core/openspec-manager.js +0 -596
- package/dist/core/openspec-manager.js.map +0 -1
- package/dist/core/openspec-migrator.d.ts +0 -27
- package/dist/core/openspec-migrator.d.ts.map +0 -1
- package/dist/core/openspec-migrator.js +0 -262
- package/dist/core/openspec-migrator.js.map +0 -1
- package/dist/core/test-task-manager.d.ts +0 -49
- package/dist/core/test-task-manager.d.ts.map +0 -1
- package/dist/core/test-task-manager.js +0 -121
- package/dist/core/test-task-manager.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'crypto';
|
|
2
|
+
import { readFileSync, statSync } from 'fs';
|
|
3
|
+
import { extname } from 'path';
|
|
4
|
+
export class CodeParser {
|
|
5
|
+
CHUNK_SIZE = 1500; // Character limit for basic chunking if AST not used
|
|
6
|
+
/**
|
|
7
|
+
* Main entry point to parse a file and generate Nodes and Edges
|
|
8
|
+
*/
|
|
9
|
+
parseFile(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
const stats = statSync(filePath);
|
|
12
|
+
if (stats.size > 1024 * 1024) {
|
|
13
|
+
// Skip files > 1MB automatically to prevent OOM
|
|
14
|
+
return { nodes: [], edges: [] };
|
|
15
|
+
}
|
|
16
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
17
|
+
const ext = extname(filePath).toLowerCase();
|
|
18
|
+
// Dispatch to specific language parsers or fallback to naive
|
|
19
|
+
if (['.ts', '.js', '.tsx', '.jsx'].includes(ext)) {
|
|
20
|
+
return this.parseTypeScript(filePath, content);
|
|
21
|
+
}
|
|
22
|
+
else if (ext === '.md') {
|
|
23
|
+
return this.parseMarkdown(filePath, content);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return this.parseNaive(filePath, content);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
console.error(`[Indexer] Failed to parse file ${filePath}:`, e);
|
|
31
|
+
return { nodes: [], edges: [] };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generates a stable hash for a node's content
|
|
36
|
+
*/
|
|
37
|
+
generateHash(content) {
|
|
38
|
+
return createHash('sha256').update(content).digest('hex');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generates a deterministic ID based on the file path and element name
|
|
42
|
+
*/
|
|
43
|
+
generateNodeId(filePath, elementPath) {
|
|
44
|
+
return createHash('md5').update(`${filePath}::${elementPath}`).digest('hex');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Regex-based parser for TypeScript/JavaScript (V1 Strategy)
|
|
48
|
+
* Future: Can be upgraded to use full AST (e.g. ts-morph / typescript compiler API)
|
|
49
|
+
*/
|
|
50
|
+
parseTypeScript(filePath, content) {
|
|
51
|
+
const nodes = [];
|
|
52
|
+
const edges = [];
|
|
53
|
+
const lines = content.split('\n');
|
|
54
|
+
let currentChunk = '';
|
|
55
|
+
let startLine = 1;
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
// 1. Create the base File Node
|
|
58
|
+
const fileNodeId = this.generateNodeId(filePath, 'file');
|
|
59
|
+
nodes.push({
|
|
60
|
+
id: fileNodeId,
|
|
61
|
+
type: 'file',
|
|
62
|
+
name: filePath.split(/[/\\]/).pop() || 'unknown',
|
|
63
|
+
filePath,
|
|
64
|
+
startLine: 1,
|
|
65
|
+
endLine: lines.length,
|
|
66
|
+
content,
|
|
67
|
+
hash: this.generateHash(content),
|
|
68
|
+
updatedAt: now,
|
|
69
|
+
});
|
|
70
|
+
// 2. Extract Imports to create Edges
|
|
71
|
+
// Simplistic regex for: import { X } from './Y' or import X from 'Y'
|
|
72
|
+
const importRegex = /import\s+.*?\s+from\s+['"]([^'"]+)['"]/g;
|
|
73
|
+
let match;
|
|
74
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
75
|
+
const targetModule = match[1];
|
|
76
|
+
edges.push({
|
|
77
|
+
id: randomUUID(),
|
|
78
|
+
sourceId: fileNodeId,
|
|
79
|
+
targetId: `__module__${targetModule}`, // We resolve this later in the manager to actual Node IDs if internal
|
|
80
|
+
type: 'imports',
|
|
81
|
+
weight: 1.0,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// 3. Naive Chunking for internal classes/functions (Regex based for v1)
|
|
85
|
+
// Looking for 'class X' or 'function Y' or 'const Z = ('
|
|
86
|
+
const classRegex = /export\s+class\s+([^ \n{]+)/;
|
|
87
|
+
const functionRegex = /export\s+(?:async\s+)?function\s+([^ \n(]+)/;
|
|
88
|
+
for (let i = 0; i < lines.length; i++) {
|
|
89
|
+
const line = lines[i];
|
|
90
|
+
let matchName = classRegex.exec(line)?.[1] || functionRegex.exec(line)?.[1];
|
|
91
|
+
if (matchName && currentChunk.length > 0) {
|
|
92
|
+
// Save previous chunk if exists before starting new semantic block
|
|
93
|
+
// (Simplified block separation)
|
|
94
|
+
}
|
|
95
|
+
currentChunk += line + '\n';
|
|
96
|
+
if (currentChunk.length >= this.CHUNK_SIZE) {
|
|
97
|
+
nodes.push(this.createNode(filePath, 'chunk', matchName || `chunk-${i}`, currentChunk, startLine, i + 1, now));
|
|
98
|
+
currentChunk = '';
|
|
99
|
+
startLine = i + 2;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Flush remaining
|
|
103
|
+
if (currentChunk.trim().length > 0) {
|
|
104
|
+
nodes.push(this.createNode(filePath, 'chunk', `chunk-end`, currentChunk, startLine, lines.length, now));
|
|
105
|
+
}
|
|
106
|
+
return { nodes, edges };
|
|
107
|
+
}
|
|
108
|
+
parseMarkdown(filePath, content) {
|
|
109
|
+
const nodes = [];
|
|
110
|
+
const lines = content.split('\n');
|
|
111
|
+
const now = Date.now();
|
|
112
|
+
let currentChunk = '';
|
|
113
|
+
let startLine = 1;
|
|
114
|
+
for (let i = 0; i < lines.length; i++) {
|
|
115
|
+
const line = lines[i];
|
|
116
|
+
if (line.startsWith('# ') || line.startsWith('## ')) {
|
|
117
|
+
if (currentChunk.trim().length > 0) {
|
|
118
|
+
nodes.push(this.createNode(filePath, 'unknown', `md-section-${startLine}`, currentChunk, startLine, i, now));
|
|
119
|
+
}
|
|
120
|
+
currentChunk = line + '\n';
|
|
121
|
+
startLine = i + 1;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
currentChunk += line + '\n';
|
|
125
|
+
}
|
|
126
|
+
if (currentChunk.length > this.CHUNK_SIZE * 2) {
|
|
127
|
+
nodes.push(this.createNode(filePath, 'unknown', `md-chunk-${startLine}`, currentChunk, startLine, i + 1, now));
|
|
128
|
+
currentChunk = '';
|
|
129
|
+
startLine = i + 2;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (currentChunk.trim().length > 0) {
|
|
133
|
+
nodes.push(this.createNode(filePath, 'unknown', `md-end`, currentChunk, startLine, lines.length, now));
|
|
134
|
+
}
|
|
135
|
+
return { nodes, edges: [] };
|
|
136
|
+
}
|
|
137
|
+
parseNaive(filePath, content) {
|
|
138
|
+
const nodes = [];
|
|
139
|
+
const lines = content.split('\n');
|
|
140
|
+
const now = Date.now();
|
|
141
|
+
// Just chunk it linearly
|
|
142
|
+
let currentChunk = '';
|
|
143
|
+
let startLine = 1;
|
|
144
|
+
for (let i = 0; i < lines.length; i++) {
|
|
145
|
+
currentChunk += lines[i] + '\n';
|
|
146
|
+
if (currentChunk.length >= this.CHUNK_SIZE) {
|
|
147
|
+
nodes.push(this.createNode(filePath, 'unknown', `chunk-${startLine}`, currentChunk, startLine, i + 1, now));
|
|
148
|
+
currentChunk = '';
|
|
149
|
+
startLine = i + 2;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (currentChunk.trim().length > 0) {
|
|
153
|
+
nodes.push(this.createNode(filePath, 'unknown', `chunk-end`, currentChunk, startLine, lines.length, now));
|
|
154
|
+
}
|
|
155
|
+
return { nodes, edges: [] };
|
|
156
|
+
}
|
|
157
|
+
createNode(filePath, type, name, content, startLine, endLine, now) {
|
|
158
|
+
return {
|
|
159
|
+
id: this.generateNodeId(filePath, `${startLine}-${endLine}`),
|
|
160
|
+
type: type,
|
|
161
|
+
name,
|
|
162
|
+
filePath,
|
|
163
|
+
startLine,
|
|
164
|
+
endLine,
|
|
165
|
+
content,
|
|
166
|
+
hash: this.generateHash(content),
|
|
167
|
+
updatedAt: now
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=file-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-parser.js","sourceRoot":"","sources":["../../../src/core/indexer/file-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexer System Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Core types for the background indexer, representing files,
|
|
5
|
+
* code symbols (classes, functions), and their relationships (Graph).
|
|
6
|
+
*/
|
|
7
|
+
export type CodeNodeType = 'file' | 'class' | 'function' | 'interface' | 'variable' | 'unknown';
|
|
8
|
+
export interface CodeNode {
|
|
9
|
+
id: string;
|
|
10
|
+
type: CodeNodeType;
|
|
11
|
+
name: string;
|
|
12
|
+
filePath: string;
|
|
13
|
+
startLine: number;
|
|
14
|
+
endLine: number;
|
|
15
|
+
content: string;
|
|
16
|
+
summary?: string;
|
|
17
|
+
hash: string;
|
|
18
|
+
updatedAt: number;
|
|
19
|
+
}
|
|
20
|
+
export type CodeEdgeType = 'imports' | 'exports' | 'implements' | 'calls' | 'extends' | 'instantiates' | 'unknown';
|
|
21
|
+
export interface CodeEdge {
|
|
22
|
+
id: string;
|
|
23
|
+
sourceId: string;
|
|
24
|
+
targetId: string;
|
|
25
|
+
type: CodeEdgeType;
|
|
26
|
+
weight: number;
|
|
27
|
+
}
|
|
28
|
+
export interface IndexerConfig {
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
watchPaths: string[];
|
|
31
|
+
ignorePatterns: string[];
|
|
32
|
+
chunkSize: number;
|
|
33
|
+
debounceMs: number;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=indexer-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer-types.d.ts","sourceRoot":"","sources":["../../../src/core/indexer/indexer-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhG,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;AAEnH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer-types.js","sourceRoot":"","sources":["../../../src/core/indexer/indexer-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { Logger } from './logger.js';
|
|
2
2
|
import { RalphIterationMetadata, IterationResult } from '../types.js';
|
|
3
|
+
/** Minimal interface for memory search — avoids hard dependency on MemoryManager */
|
|
4
|
+
export interface IterationMemoryAdapter {
|
|
5
|
+
searchMemory(input: {
|
|
6
|
+
query: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
mode?: 'bm25' | 'vector' | 'hybrid';
|
|
9
|
+
}): Promise<Array<{
|
|
10
|
+
title: string;
|
|
11
|
+
content: string;
|
|
12
|
+
tags?: string[];
|
|
13
|
+
}>>;
|
|
14
|
+
}
|
|
3
15
|
/**
|
|
4
16
|
* Tracks iteration history, metrics, and learnings across autonomous runs
|
|
5
17
|
*/
|
|
@@ -7,7 +19,13 @@ export declare class IterationTracker {
|
|
|
7
19
|
private ralphDir;
|
|
8
20
|
private historyDir;
|
|
9
21
|
private logger;
|
|
22
|
+
private memoryAdapter;
|
|
10
23
|
constructor(projectRoot: string, logger: Logger);
|
|
24
|
+
/**
|
|
25
|
+
* Attach a memory adapter for retrieving relevant past learnings.
|
|
26
|
+
* Optional — context compression still works without it.
|
|
27
|
+
*/
|
|
28
|
+
setMemoryAdapter(adapter: IterationMemoryAdapter): void;
|
|
11
29
|
/**
|
|
12
30
|
* Initialize tracker directories
|
|
13
31
|
*/
|
|
@@ -53,5 +71,15 @@ export declare class IterationTracker {
|
|
|
53
71
|
average_duration_ms: number;
|
|
54
72
|
quality_trend: number[];
|
|
55
73
|
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Build a compressed context string for injecting into iteration prompts.
|
|
76
|
+
* Recent iterations (default: last 3) appear in full detail.
|
|
77
|
+
* Older iterations are summarized to one line each.
|
|
78
|
+
*
|
|
79
|
+
* @param recentCount How many recent iterations to show in full (default: 3)
|
|
80
|
+
* @param threshold Minimum total iterations before compression applies (default: 5)
|
|
81
|
+
*/
|
|
82
|
+
buildCompressedContext(recentCount?: number, threshold?: number): Promise<string>;
|
|
83
|
+
private formatFullHistory;
|
|
56
84
|
}
|
|
57
85
|
//# sourceMappingURL=iteration-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iteration-tracker.d.ts","sourceRoot":"","sources":["../../src/core/iteration-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"iteration-tracker.d.ts","sourceRoot":"","sources":["../../src/core/iteration-tracker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEtE,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,KAAK,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACrC,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAuC;gBAEhD,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM/C;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAIvD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB/D;;OAEG;IACG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAuCpF;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAgBhF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAC7B,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IAoCF;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2CvC;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA4CF;;;;;;;OAOG;IACG,sBAAsB,CAAC,WAAW,SAAI,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAgE7E,OAAO,CAAC,iBAAiB;CAe1B"}
|
|
@@ -8,11 +8,19 @@ export class IterationTracker {
|
|
|
8
8
|
ralphDir;
|
|
9
9
|
historyDir;
|
|
10
10
|
logger;
|
|
11
|
+
memoryAdapter = null;
|
|
11
12
|
constructor(projectRoot, logger) {
|
|
12
13
|
this.logger = logger;
|
|
13
14
|
this.ralphDir = path.join(projectRoot, '.rulebook', 'ralph');
|
|
14
15
|
this.historyDir = path.join(this.ralphDir, 'history');
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Attach a memory adapter for retrieving relevant past learnings.
|
|
19
|
+
* Optional — context compression still works without it.
|
|
20
|
+
*/
|
|
21
|
+
setMemoryAdapter(adapter) {
|
|
22
|
+
this.memoryAdapter = adapter;
|
|
23
|
+
}
|
|
16
24
|
/**
|
|
17
25
|
* Initialize tracker directories
|
|
18
26
|
*/
|
|
@@ -205,5 +213,83 @@ export class IterationTracker {
|
|
|
205
213
|
quality_trend: qualityTrend,
|
|
206
214
|
};
|
|
207
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Build a compressed context string for injecting into iteration prompts.
|
|
218
|
+
* Recent iterations (default: last 3) appear in full detail.
|
|
219
|
+
* Older iterations are summarized to one line each.
|
|
220
|
+
*
|
|
221
|
+
* @param recentCount How many recent iterations to show in full (default: 3)
|
|
222
|
+
* @param threshold Minimum total iterations before compression applies (default: 5)
|
|
223
|
+
*/
|
|
224
|
+
async buildCompressedContext(recentCount = 3, threshold = 5) {
|
|
225
|
+
const iterations = await this.getHistory();
|
|
226
|
+
if (iterations.length === 0) {
|
|
227
|
+
return 'No iteration history available.';
|
|
228
|
+
}
|
|
229
|
+
// Sort ascending by iteration number
|
|
230
|
+
const sorted = [...iterations].sort((a, b) => a.iteration - b.iteration);
|
|
231
|
+
if (sorted.length < threshold) {
|
|
232
|
+
// Below threshold — return full history (not yet compressed)
|
|
233
|
+
return this.formatFullHistory(sorted);
|
|
234
|
+
}
|
|
235
|
+
const recent = sorted.slice(-recentCount);
|
|
236
|
+
const historical = sorted.slice(0, sorted.length - recentCount);
|
|
237
|
+
const lines = [];
|
|
238
|
+
// Memory-backed retrieval: search for relevant past learnings
|
|
239
|
+
if (this.memoryAdapter) {
|
|
240
|
+
try {
|
|
241
|
+
const currentTask = recent.at(-1)?.task_title ?? '';
|
|
242
|
+
const query = currentTask
|
|
243
|
+
? `Ralph iteration learnings ${currentTask}`
|
|
244
|
+
: 'Ralph iteration learnings errors fixes';
|
|
245
|
+
const memories = await this.memoryAdapter.searchMemory({ query, limit: 3, mode: 'hybrid' });
|
|
246
|
+
if (memories.length > 0) {
|
|
247
|
+
lines.push('## Relevant Past Learnings (from memory)');
|
|
248
|
+
for (const mem of memories) {
|
|
249
|
+
lines.push(`- **${mem.title}**: ${mem.content.slice(0, 200).replace(/\n/g, ' ')}`);
|
|
250
|
+
}
|
|
251
|
+
lines.push('');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// Memory retrieval is optional — skip on error
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Compressed historical summary
|
|
259
|
+
if (historical.length > 0) {
|
|
260
|
+
lines.push(`## Iteration History Summary (iterations 1–${historical.at(-1).iteration})`);
|
|
261
|
+
for (const iter of historical) {
|
|
262
|
+
const qualFlags = [
|
|
263
|
+
iter.quality_checks.type_check ? '✓ts' : '✗ts',
|
|
264
|
+
iter.quality_checks.lint ? '✓lint' : '✗lint',
|
|
265
|
+
iter.quality_checks.tests ? '✓test' : '✗test',
|
|
266
|
+
iter.quality_checks.coverage_met ? '✓cov' : '✗cov',
|
|
267
|
+
].join(' ');
|
|
268
|
+
lines.push(`- Iter ${iter.iteration}: [${iter.status}] ${iter.task_title} | ${qualFlags}`);
|
|
269
|
+
}
|
|
270
|
+
lines.push('');
|
|
271
|
+
}
|
|
272
|
+
// Full detail for recent iterations
|
|
273
|
+
if (recent.length > 0) {
|
|
274
|
+
lines.push(`## Recent Iterations (last ${recent.length})`);
|
|
275
|
+
lines.push(this.formatFullHistory(recent));
|
|
276
|
+
}
|
|
277
|
+
return lines.join('\n');
|
|
278
|
+
}
|
|
279
|
+
formatFullHistory(iterations) {
|
|
280
|
+
return iterations
|
|
281
|
+
.map((iter) => {
|
|
282
|
+
const qc = iter.quality_checks;
|
|
283
|
+
return [
|
|
284
|
+
`### Iteration ${iter.iteration}: ${iter.task_title}`,
|
|
285
|
+
`Status: ${iter.status}`,
|
|
286
|
+
`Quality: type-check=${qc.type_check ? 'PASS' : 'FAIL'} lint=${qc.lint ? 'PASS' : 'FAIL'} tests=${qc.tests ? 'PASS' : 'FAIL'} coverage=${qc.coverage_met ? 'PASS' : 'FAIL'}`,
|
|
287
|
+
iter.git_commit ? `Commit: ${iter.git_commit}` : '',
|
|
288
|
+
]
|
|
289
|
+
.filter(Boolean)
|
|
290
|
+
.join('\n');
|
|
291
|
+
})
|
|
292
|
+
.join('\n\n');
|
|
293
|
+
}
|
|
208
294
|
}
|
|
209
295
|
//# sourceMappingURL=iteration-tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iteration-tracker.js","sourceRoot":"","sources":["../../src/core/iteration-tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iteration-tracker.js","sourceRoot":"","sources":["../../src/core/iteration-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Tool Config Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates IDE/AI-tool configuration files for detected tools:
|
|
5
|
+
* - GEMINI.md for Gemini CLI
|
|
6
|
+
* - .continue/rules/RULEBOOK.md for Continue.dev
|
|
7
|
+
* - .windsurfrules for Windsurf IDE
|
|
8
|
+
* - .github/copilot-instructions.md for GitHub Copilot
|
|
9
|
+
*
|
|
10
|
+
* Each generator is idempotent: if the file already contains the
|
|
11
|
+
* RULEBOOK marker it gets updated; if it exists without the marker
|
|
12
|
+
* (user-owned file) it is skipped.
|
|
13
|
+
*/
|
|
14
|
+
import type { DetectionResult } from '../types.js';
|
|
15
|
+
/** Result of multi-tool config generation. Each field is the path written, or undefined if skipped. */
|
|
16
|
+
export interface MultiToolGeneratorResult {
|
|
17
|
+
geminiMd?: string;
|
|
18
|
+
continueRules?: string;
|
|
19
|
+
windsurfRules?: string;
|
|
20
|
+
copilotInstructions?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate GEMINI.md in the project root for Gemini CLI.
|
|
24
|
+
*
|
|
25
|
+
* @param projectRoot - Absolute path to the project root.
|
|
26
|
+
* @returns The path written, or null if skipped.
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateGeminiMd(projectRoot: string): Promise<string | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate .continue/rules/RULEBOOK.md for the Continue.dev IDE extension.
|
|
31
|
+
*
|
|
32
|
+
* @param projectRoot - Absolute path to the project root.
|
|
33
|
+
* @returns The path written, or null if skipped.
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateContinueRules(projectRoot: string): Promise<string | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Generate .windsurfrules in the project root for Windsurf IDE.
|
|
38
|
+
*
|
|
39
|
+
* @param projectRoot - Absolute path to the project root.
|
|
40
|
+
* @returns The path written, or null if skipped.
|
|
41
|
+
*/
|
|
42
|
+
export declare function generateWindsurfRules(projectRoot: string): Promise<string | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Generate .github/copilot-instructions.md for GitHub Copilot.
|
|
45
|
+
*
|
|
46
|
+
* @param projectRoot - Absolute path to the project root.
|
|
47
|
+
* @returns The path written, or null if skipped.
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateCopilotInstructions(projectRoot: string): Promise<string | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Generate configuration files for all detected AI tools.
|
|
52
|
+
* Only generates files for tools that are actually detected in the project.
|
|
53
|
+
*
|
|
54
|
+
* @param projectRoot - Absolute path to the project root.
|
|
55
|
+
* @param detection - The project detection result containing tool detection flags.
|
|
56
|
+
* @returns An object with paths of all generated files (undefined for skipped tools).
|
|
57
|
+
*/
|
|
58
|
+
export declare function generateMultiToolConfigs(projectRoot: string, detection: DetectionResult): Promise<MultiToolGeneratorResult>;
|
|
59
|
+
//# sourceMappingURL=multi-tool-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-tool-generator.d.ts","sourceRoot":"","sources":["../../src/core/multi-tool-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,uGAAuG;AACvG,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAiDD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQlF;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQvF;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQvF;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ7F;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAgCnC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Tool Config Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates IDE/AI-tool configuration files for detected tools:
|
|
5
|
+
* - GEMINI.md for Gemini CLI
|
|
6
|
+
* - .continue/rules/RULEBOOK.md for Continue.dev
|
|
7
|
+
* - .windsurfrules for Windsurf IDE
|
|
8
|
+
* - .github/copilot-instructions.md for GitHub Copilot
|
|
9
|
+
*
|
|
10
|
+
* Each generator is idempotent: if the file already contains the
|
|
11
|
+
* RULEBOOK marker it gets updated; if it exists without the marker
|
|
12
|
+
* (user-owned file) it is skipped.
|
|
13
|
+
*/
|
|
14
|
+
import path from 'path';
|
|
15
|
+
import { existsSync } from 'fs';
|
|
16
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
18
|
+
import { dirname } from 'path';
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
/** Marker used to identify rulebook-managed content in generated files. */
|
|
22
|
+
const RULEBOOK_MARKER = '<!-- RULEBOOK:START -->';
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the templates/ides/ directory relative to the compiled dist/ output.
|
|
25
|
+
* Uses the same __dirname strategy as cursor-mdc-generator.ts.
|
|
26
|
+
*/
|
|
27
|
+
function getTemplatesDir() {
|
|
28
|
+
return path.join(__dirname, '..', '..', 'templates', 'ides');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Read a template file from templates/ides/.
|
|
32
|
+
* Returns the template content or null if the template does not exist.
|
|
33
|
+
*/
|
|
34
|
+
async function readTemplate(templateName) {
|
|
35
|
+
const templatePath = path.join(getTemplatesDir(), templateName);
|
|
36
|
+
if (!existsSync(templatePath)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return readFile(templatePath, 'utf-8');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Write content to a destination file following the idempotent pattern:
|
|
43
|
+
* - If the file does not exist, create it with the template content.
|
|
44
|
+
* - If the file exists and contains the RULEBOOK marker, update it.
|
|
45
|
+
* - If the file exists without the marker (user-owned), skip and return null.
|
|
46
|
+
*
|
|
47
|
+
* Returns the absolute path written, or null if skipped.
|
|
48
|
+
*/
|
|
49
|
+
async function writeIdempotent(destPath, content) {
|
|
50
|
+
if (existsSync(destPath)) {
|
|
51
|
+
const existing = await readFile(destPath, 'utf-8');
|
|
52
|
+
if (!existing.includes(RULEBOOK_MARKER)) {
|
|
53
|
+
// User-owned file — do not overwrite
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Ensure the parent directory exists
|
|
58
|
+
const parentDir = path.dirname(destPath);
|
|
59
|
+
if (!existsSync(parentDir)) {
|
|
60
|
+
await mkdir(parentDir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
await writeFile(destPath, content, 'utf-8');
|
|
63
|
+
return destPath;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate GEMINI.md in the project root for Gemini CLI.
|
|
67
|
+
*
|
|
68
|
+
* @param projectRoot - Absolute path to the project root.
|
|
69
|
+
* @returns The path written, or null if skipped.
|
|
70
|
+
*/
|
|
71
|
+
export async function generateGeminiMd(projectRoot) {
|
|
72
|
+
const template = await readTemplate('GEMINI_RULES.md');
|
|
73
|
+
if (!template) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const destPath = path.join(projectRoot, 'GEMINI.md');
|
|
77
|
+
return writeIdempotent(destPath, template);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generate .continue/rules/RULEBOOK.md for the Continue.dev IDE extension.
|
|
81
|
+
*
|
|
82
|
+
* @param projectRoot - Absolute path to the project root.
|
|
83
|
+
* @returns The path written, or null if skipped.
|
|
84
|
+
*/
|
|
85
|
+
export async function generateContinueRules(projectRoot) {
|
|
86
|
+
const template = await readTemplate('CONTINUE_RULES.md');
|
|
87
|
+
if (!template) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const destPath = path.join(projectRoot, '.continue', 'rules', 'RULEBOOK.md');
|
|
91
|
+
return writeIdempotent(destPath, template);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate .windsurfrules in the project root for Windsurf IDE.
|
|
95
|
+
*
|
|
96
|
+
* @param projectRoot - Absolute path to the project root.
|
|
97
|
+
* @returns The path written, or null if skipped.
|
|
98
|
+
*/
|
|
99
|
+
export async function generateWindsurfRules(projectRoot) {
|
|
100
|
+
const template = await readTemplate('WINDSURF_RULES.md');
|
|
101
|
+
if (!template) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const destPath = path.join(projectRoot, '.windsurfrules');
|
|
105
|
+
return writeIdempotent(destPath, template);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generate .github/copilot-instructions.md for GitHub Copilot.
|
|
109
|
+
*
|
|
110
|
+
* @param projectRoot - Absolute path to the project root.
|
|
111
|
+
* @returns The path written, or null if skipped.
|
|
112
|
+
*/
|
|
113
|
+
export async function generateCopilotInstructions(projectRoot) {
|
|
114
|
+
const template = await readTemplate('COPILOT_INSTRUCTIONS.md');
|
|
115
|
+
if (!template) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const destPath = path.join(projectRoot, '.github', 'copilot-instructions.md');
|
|
119
|
+
return writeIdempotent(destPath, template);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Generate configuration files for all detected AI tools.
|
|
123
|
+
* Only generates files for tools that are actually detected in the project.
|
|
124
|
+
*
|
|
125
|
+
* @param projectRoot - Absolute path to the project root.
|
|
126
|
+
* @param detection - The project detection result containing tool detection flags.
|
|
127
|
+
* @returns An object with paths of all generated files (undefined for skipped tools).
|
|
128
|
+
*/
|
|
129
|
+
export async function generateMultiToolConfigs(projectRoot, detection) {
|
|
130
|
+
const result = {};
|
|
131
|
+
if (detection.geminiCli?.detected) {
|
|
132
|
+
const written = await generateGeminiMd(projectRoot);
|
|
133
|
+
if (written) {
|
|
134
|
+
result.geminiMd = written;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (detection.continueDev?.detected) {
|
|
138
|
+
const written = await generateContinueRules(projectRoot);
|
|
139
|
+
if (written) {
|
|
140
|
+
result.continueRules = written;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (detection.windsurf?.detected) {
|
|
144
|
+
const written = await generateWindsurfRules(projectRoot);
|
|
145
|
+
if (written) {
|
|
146
|
+
result.windsurfRules = written;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (detection.githubCopilot?.detected) {
|
|
150
|
+
const written = await generateCopilotInstructions(projectRoot);
|
|
151
|
+
if (written) {
|
|
152
|
+
result.copilotInstructions = written;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=multi-tool-generator.js.map
|