@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.
Files changed (173) hide show
  1. package/.claude/commands/continue.md +33 -0
  2. package/.claude-plugin/marketplace.json +28 -29
  3. package/.claude-plugin/plugin.json +8 -8
  4. package/README.md +66 -144
  5. package/dist/agents/ralph-parser.d.ts +41 -1
  6. package/dist/agents/ralph-parser.d.ts.map +1 -1
  7. package/dist/agents/ralph-parser.js +202 -14
  8. package/dist/agents/ralph-parser.js.map +1 -1
  9. package/dist/cli/commands.d.ts +65 -0
  10. package/dist/cli/commands.d.ts.map +1 -1
  11. package/dist/cli/commands.js +837 -61
  12. package/dist/cli/commands.js.map +1 -1
  13. package/dist/core/agent-manager.d.ts +7 -0
  14. package/dist/core/agent-manager.d.ts.map +1 -1
  15. package/dist/core/agent-manager.js +150 -3
  16. package/dist/core/agent-manager.js.map +1 -1
  17. package/dist/core/claude-mcp.d.ts +17 -0
  18. package/dist/core/claude-mcp.d.ts.map +1 -1
  19. package/dist/core/claude-mcp.js +90 -6
  20. package/dist/core/claude-mcp.js.map +1 -1
  21. package/dist/core/config-manager.d.ts.map +1 -1
  22. package/dist/core/config-manager.js +40 -0
  23. package/dist/core/config-manager.js.map +1 -1
  24. package/dist/core/cursor-mdc-generator.d.ts +30 -0
  25. package/dist/core/cursor-mdc-generator.d.ts.map +1 -0
  26. package/dist/core/cursor-mdc-generator.js +98 -0
  27. package/dist/core/cursor-mdc-generator.js.map +1 -0
  28. package/dist/core/detector.d.ts +25 -1
  29. package/dist/core/detector.d.ts.map +1 -1
  30. package/dist/core/detector.js +321 -1
  31. package/dist/core/detector.js.map +1 -1
  32. package/dist/core/generator.d.ts +10 -0
  33. package/dist/core/generator.d.ts.map +1 -1
  34. package/dist/core/generator.js +177 -3
  35. package/dist/core/generator.js.map +1 -1
  36. package/dist/core/github-issues-importer.d.ts +82 -0
  37. package/dist/core/github-issues-importer.d.ts.map +1 -0
  38. package/dist/core/github-issues-importer.js +161 -0
  39. package/dist/core/github-issues-importer.js.map +1 -0
  40. package/dist/core/health-scorer.d.ts +39 -0
  41. package/dist/core/health-scorer.d.ts.map +1 -1
  42. package/dist/core/health-scorer.js +256 -13
  43. package/dist/core/health-scorer.js.map +1 -1
  44. package/dist/core/indexer/background-indexer.d.ts +27 -0
  45. package/dist/core/indexer/background-indexer.d.ts.map +1 -0
  46. package/dist/core/indexer/background-indexer.js +135 -0
  47. package/dist/core/indexer/background-indexer.js.map +1 -0
  48. package/dist/core/indexer/file-parser.d.ts +28 -0
  49. package/dist/core/indexer/file-parser.d.ts.map +1 -0
  50. package/dist/core/indexer/file-parser.js +171 -0
  51. package/dist/core/indexer/file-parser.js.map +1 -0
  52. package/dist/core/indexer/indexer-types.d.ts +35 -0
  53. package/dist/core/indexer/indexer-types.d.ts.map +1 -0
  54. package/dist/core/indexer/indexer-types.js +8 -0
  55. package/dist/core/indexer/indexer-types.js.map +1 -0
  56. package/dist/core/iteration-tracker.d.ts +28 -0
  57. package/dist/core/iteration-tracker.d.ts.map +1 -1
  58. package/dist/core/iteration-tracker.js +86 -0
  59. package/dist/core/iteration-tracker.js.map +1 -1
  60. package/dist/core/multi-tool-generator.d.ts +59 -0
  61. package/dist/core/multi-tool-generator.d.ts.map +1 -0
  62. package/dist/core/multi-tool-generator.js +157 -0
  63. package/dist/core/multi-tool-generator.js.map +1 -0
  64. package/dist/core/override-manager.d.ts +23 -0
  65. package/dist/core/override-manager.d.ts.map +1 -0
  66. package/dist/core/override-manager.js +82 -0
  67. package/dist/core/override-manager.js.map +1 -0
  68. package/dist/core/plans-manager.d.ts +46 -0
  69. package/dist/core/plans-manager.d.ts.map +1 -0
  70. package/dist/core/plans-manager.js +158 -0
  71. package/dist/core/plans-manager.js.map +1 -0
  72. package/dist/core/prd-generator.d.ts +12 -0
  73. package/dist/core/prd-generator.d.ts.map +1 -1
  74. package/dist/core/prd-generator.js +91 -2
  75. package/dist/core/prd-generator.js.map +1 -1
  76. package/dist/core/ralph-manager.d.ts +47 -1
  77. package/dist/core/ralph-manager.d.ts.map +1 -1
  78. package/dist/core/ralph-manager.js +107 -0
  79. package/dist/core/ralph-manager.js.map +1 -1
  80. package/dist/core/ralph-parallel.d.ts +55 -0
  81. package/dist/core/ralph-parallel.d.ts.map +1 -0
  82. package/dist/core/ralph-parallel.js +201 -0
  83. package/dist/core/ralph-parallel.js.map +1 -0
  84. package/dist/core/ralph-plan-checkpoint.d.ts +58 -0
  85. package/dist/core/ralph-plan-checkpoint.d.ts.map +1 -0
  86. package/dist/core/ralph-plan-checkpoint.js +154 -0
  87. package/dist/core/ralph-plan-checkpoint.js.map +1 -0
  88. package/dist/core/ralph-scripts.d.ts +12 -0
  89. package/dist/core/ralph-scripts.d.ts.map +1 -0
  90. package/dist/core/ralph-scripts.js +49 -0
  91. package/dist/core/ralph-scripts.js.map +1 -0
  92. package/dist/core/review-manager.d.ts +74 -0
  93. package/dist/core/review-manager.d.ts.map +1 -0
  94. package/dist/core/review-manager.js +371 -0
  95. package/dist/core/review-manager.js.map +1 -0
  96. package/dist/index.js +94 -2
  97. package/dist/index.js.map +1 -1
  98. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  99. package/dist/mcp/rulebook-server.js +117 -8
  100. package/dist/mcp/rulebook-server.js.map +1 -1
  101. package/dist/memory/memory-manager.d.ts +4 -1
  102. package/dist/memory/memory-manager.d.ts.map +1 -1
  103. package/dist/memory/memory-manager.js +33 -4
  104. package/dist/memory/memory-manager.js.map +1 -1
  105. package/dist/memory/memory-search.d.ts +2 -2
  106. package/dist/memory/memory-search.d.ts.map +1 -1
  107. package/dist/memory/memory-search.js +19 -0
  108. package/dist/memory/memory-search.js.map +1 -1
  109. package/dist/memory/memory-store.d.ts +13 -0
  110. package/dist/memory/memory-store.d.ts.map +1 -1
  111. package/dist/memory/memory-store.js +92 -1
  112. package/dist/memory/memory-store.js.map +1 -1
  113. package/dist/memory/memory-types.d.ts +15 -0
  114. package/dist/memory/memory-types.d.ts.map +1 -1
  115. package/dist/types.d.ts +55 -2
  116. package/dist/types.d.ts.map +1 -1
  117. package/package.json +1 -1
  118. package/templates/agents/implementer.md +35 -0
  119. package/templates/agents/researcher.md +34 -0
  120. package/templates/agents/team-lead.md +34 -0
  121. package/templates/agents/tester.md +42 -0
  122. package/templates/ci/rulebook-review.yml +26 -0
  123. package/templates/commands/rulebook-task-archive.md +24 -0
  124. package/templates/core/AGENTS_LEAN.md +25 -0
  125. package/templates/core/AGENTS_OVERRIDE.md +16 -0
  126. package/templates/core/MULTI_AGENT.md +74 -0
  127. package/templates/core/PLANS.md +28 -0
  128. package/templates/core/RALPH.md +45 -4
  129. package/templates/core/RULEBOOK.md +42 -0
  130. package/templates/ides/CONTINUE_RULES.md +16 -0
  131. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -0
  132. package/templates/ides/GEMINI_RULES.md +17 -0
  133. package/templates/ides/WINDSURF_RULES.md +14 -0
  134. package/templates/ides/cursor-mdc/go.mdc +24 -0
  135. package/templates/ides/cursor-mdc/python.mdc +24 -0
  136. package/templates/ides/cursor-mdc/quality.mdc +25 -0
  137. package/templates/ides/cursor-mdc/ralph.mdc +39 -0
  138. package/templates/ides/cursor-mdc/rulebook.mdc +38 -0
  139. package/templates/ides/cursor-mdc/rust.mdc +24 -0
  140. package/templates/ides/cursor-mdc/typescript.mdc +25 -0
  141. package/templates/modules/sequential-thinking.md +42 -0
  142. package/templates/ralph/ralph-history.bat +4 -0
  143. package/templates/ralph/ralph-history.sh +5 -0
  144. package/templates/ralph/ralph-init.bat +5 -0
  145. package/templates/ralph/ralph-init.sh +5 -0
  146. package/templates/ralph/ralph-pause.bat +5 -0
  147. package/templates/ralph/ralph-pause.sh +5 -0
  148. package/templates/ralph/ralph-run.bat +5 -0
  149. package/templates/ralph/ralph-run.sh +5 -0
  150. package/templates/ralph/ralph-status.bat +4 -0
  151. package/templates/ralph/ralph-status.sh +5 -0
  152. package/templates/services/DATADOG.md +26 -0
  153. package/templates/services/DOCKER.md +124 -0
  154. package/templates/services/DOCKER_COMPOSE.md +168 -0
  155. package/templates/services/HELM.md +194 -0
  156. package/templates/services/KUBERNETES.md +208 -0
  157. package/templates/services/OPENTELEMETRY.md +25 -0
  158. package/templates/services/PINO.md +24 -0
  159. package/templates/services/PROMETHEUS.md +33 -0
  160. package/templates/services/SENTRY.md +23 -0
  161. package/templates/services/WINSTON.md +30 -0
  162. package/dist/core/openspec-manager.d.ts +0 -133
  163. package/dist/core/openspec-manager.d.ts.map +0 -1
  164. package/dist/core/openspec-manager.js +0 -596
  165. package/dist/core/openspec-manager.js.map +0 -1
  166. package/dist/core/openspec-migrator.d.ts +0 -27
  167. package/dist/core/openspec-migrator.d.ts.map +0 -1
  168. package/dist/core/openspec-migrator.js +0 -262
  169. package/dist/core/openspec-migrator.js.map +0 -1
  170. package/dist/core/test-task-manager.d.ts +0 -49
  171. package/dist/core/test-task-manager.d.ts.map +0 -1
  172. package/dist/core/test-task-manager.js +0 -121
  173. 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,8 @@
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 {};
8
+ //# sourceMappingURL=indexer-types.js.map
@@ -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;gBAEX,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM/C;;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;CA2CH"}
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":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,MAAM,CAAS;IAEvB,YAAY,WAAmB,EAAE,MAAc;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAuB;QAC3C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,QAAQ,GAA2B;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,iBAAiB;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC;QAEF,MAAM,QAAQ,GAAG,aAAa,MAAM,CAAC,SAAS,OAAO,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEtD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAE5D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAc,EAAE,MAAe;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,UAAU,GAA6B,EAAE,CAAC;QAEhD,sCAAsC;QACtC,MAAM,MAAM,GAAG,KAAK;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAClD,OAAO,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QAEL,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAA2B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE7D,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE1B,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;oBACxC,MAAM;gBACR,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,YAAoB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,YAAY,OAAO,CAAC,CAAC;QAE9E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,YAAY,KAAK,GAAG,EAAE,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QAajB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE3C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,gBAAgB,EAAE,CAAC;gBACnB,qBAAqB,EAAE,CAAC;gBACxB,iBAAiB,EAAE,CAAC;gBACpB,mBAAmB,EAAE,CAAC;gBACtB,YAAY,EAAE,CAAC;gBACf,iBAAiB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;aACrE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACtE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAElE,MAAM,gBAAgB,GAAG;YACvB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,MAAM;YACxE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM;YAC5D,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM;YAC9D,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM;SACzE,CAAC;QAEF,OAAO;YACL,gBAAgB,EAAE,UAAU,CAAC,MAAM;YACnC,qBAAqB,EAAE,UAAU;YACjC,iBAAiB,EAAE,MAAM;YACzB,mBAAmB,EAAE,WAAW;YAChC,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM;YAC5C,iBAAiB,EAAE,gBAAgB;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,yBAAyB;YACzB,MAAM,OAAO,GACX,IAAI,CAAC,cAAc,CAAC,UAAU;gBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI;gBACxB,IAAI,CAAC,cAAc,CAAC,KAAK;gBACzB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;YAEnC,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzC,SAAS,CAAC,IAAI,CACZ,eAAe,IAAI,CAAC,SAAS,iCAAiC,IAAI,CAAC,UAAU,GAAG,CACjF,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU;oBAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY;oBAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEjE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,IAAI,CACZ,eAAe,IAAI,CAAC,SAAS,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CACZ,oBAAoB,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC,gBAAgB,GAAG,CACxH,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAMlC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,gBAAgB,EAAE,CAAC;gBACnB,mBAAmB,EAAE,EAAE;gBACvB,mBAAmB,EAAE,CAAC;gBACtB,aAAa,EAAE,EAAE;aAClB,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CACjF,CAAC;QAEF,gBAAgB;QAChB,MAAM,YAAY,GAAG,UAAU;aAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,MAAM,GAAG;gBACb,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC,CAAC,CAAC;QAEL,OAAO;YACL,gBAAgB,EAAE,UAAU,CAAC,MAAM;YACnC,mBAAmB,EAAE,UAAU;YAC/B,mBAAmB,EAAE,WAAW;YAChC,aAAa,EAAE,YAAY;SAC5B,CAAC;IACJ,CAAC;CACF"}
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