@hivehub/rulebook 3.4.2 → 4.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.
Files changed (148) 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 +32 -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/iteration-tracker.d.ts +28 -0
  45. package/dist/core/iteration-tracker.d.ts.map +1 -1
  46. package/dist/core/iteration-tracker.js +86 -0
  47. package/dist/core/iteration-tracker.js.map +1 -1
  48. package/dist/core/multi-tool-generator.d.ts +59 -0
  49. package/dist/core/multi-tool-generator.d.ts.map +1 -0
  50. package/dist/core/multi-tool-generator.js +157 -0
  51. package/dist/core/multi-tool-generator.js.map +1 -0
  52. package/dist/core/override-manager.d.ts +23 -0
  53. package/dist/core/override-manager.d.ts.map +1 -0
  54. package/dist/core/override-manager.js +82 -0
  55. package/dist/core/override-manager.js.map +1 -0
  56. package/dist/core/plans-manager.d.ts +46 -0
  57. package/dist/core/plans-manager.d.ts.map +1 -0
  58. package/dist/core/plans-manager.js +158 -0
  59. package/dist/core/plans-manager.js.map +1 -0
  60. package/dist/core/prd-generator.d.ts +12 -0
  61. package/dist/core/prd-generator.d.ts.map +1 -1
  62. package/dist/core/prd-generator.js +91 -2
  63. package/dist/core/prd-generator.js.map +1 -1
  64. package/dist/core/ralph-manager.d.ts +47 -1
  65. package/dist/core/ralph-manager.d.ts.map +1 -1
  66. package/dist/core/ralph-manager.js +107 -0
  67. package/dist/core/ralph-manager.js.map +1 -1
  68. package/dist/core/ralph-parallel.d.ts +55 -0
  69. package/dist/core/ralph-parallel.d.ts.map +1 -0
  70. package/dist/core/ralph-parallel.js +201 -0
  71. package/dist/core/ralph-parallel.js.map +1 -0
  72. package/dist/core/ralph-plan-checkpoint.d.ts +58 -0
  73. package/dist/core/ralph-plan-checkpoint.d.ts.map +1 -0
  74. package/dist/core/ralph-plan-checkpoint.js +154 -0
  75. package/dist/core/ralph-plan-checkpoint.js.map +1 -0
  76. package/dist/core/ralph-scripts.d.ts +12 -0
  77. package/dist/core/ralph-scripts.d.ts.map +1 -0
  78. package/dist/core/ralph-scripts.js +49 -0
  79. package/dist/core/ralph-scripts.js.map +1 -0
  80. package/dist/core/review-manager.d.ts +74 -0
  81. package/dist/core/review-manager.d.ts.map +1 -0
  82. package/dist/core/review-manager.js +371 -0
  83. package/dist/core/review-manager.js.map +1 -0
  84. package/dist/index.js +94 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  87. package/dist/mcp/rulebook-server.js +9 -2
  88. package/dist/mcp/rulebook-server.js.map +1 -1
  89. package/dist/memory/memory-store.d.ts.map +1 -1
  90. package/dist/memory/memory-store.js +4 -0
  91. package/dist/memory/memory-store.js.map +1 -1
  92. package/dist/types.d.ts +55 -2
  93. package/dist/types.d.ts.map +1 -1
  94. package/package.json +1 -1
  95. package/templates/agents/implementer.md +35 -0
  96. package/templates/agents/researcher.md +34 -0
  97. package/templates/agents/team-lead.md +34 -0
  98. package/templates/agents/tester.md +42 -0
  99. package/templates/ci/rulebook-review.yml +26 -0
  100. package/templates/core/AGENTS_LEAN.md +25 -0
  101. package/templates/core/AGENTS_OVERRIDE.md +16 -0
  102. package/templates/core/MULTI_AGENT.md +74 -0
  103. package/templates/core/PLANS.md +28 -0
  104. package/templates/core/RALPH.md +45 -4
  105. package/templates/ides/CONTINUE_RULES.md +16 -0
  106. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -0
  107. package/templates/ides/GEMINI_RULES.md +17 -0
  108. package/templates/ides/WINDSURF_RULES.md +14 -0
  109. package/templates/ides/cursor-mdc/go.mdc +24 -0
  110. package/templates/ides/cursor-mdc/python.mdc +24 -0
  111. package/templates/ides/cursor-mdc/quality.mdc +25 -0
  112. package/templates/ides/cursor-mdc/ralph.mdc +39 -0
  113. package/templates/ides/cursor-mdc/rulebook.mdc +38 -0
  114. package/templates/ides/cursor-mdc/rust.mdc +24 -0
  115. package/templates/ides/cursor-mdc/typescript.mdc +25 -0
  116. package/templates/modules/sequential-thinking.md +42 -0
  117. package/templates/ralph/ralph-history.bat +4 -0
  118. package/templates/ralph/ralph-history.sh +5 -0
  119. package/templates/ralph/ralph-init.bat +5 -0
  120. package/templates/ralph/ralph-init.sh +5 -0
  121. package/templates/ralph/ralph-pause.bat +5 -0
  122. package/templates/ralph/ralph-pause.sh +5 -0
  123. package/templates/ralph/ralph-run.bat +5 -0
  124. package/templates/ralph/ralph-run.sh +5 -0
  125. package/templates/ralph/ralph-status.bat +4 -0
  126. package/templates/ralph/ralph-status.sh +5 -0
  127. package/templates/services/DATADOG.md +26 -0
  128. package/templates/services/DOCKER.md +124 -0
  129. package/templates/services/DOCKER_COMPOSE.md +168 -0
  130. package/templates/services/HELM.md +194 -0
  131. package/templates/services/KUBERNETES.md +208 -0
  132. package/templates/services/OPENTELEMETRY.md +25 -0
  133. package/templates/services/PINO.md +24 -0
  134. package/templates/services/PROMETHEUS.md +33 -0
  135. package/templates/services/SENTRY.md +23 -0
  136. package/templates/services/WINSTON.md +30 -0
  137. package/dist/core/openspec-manager.d.ts +0 -133
  138. package/dist/core/openspec-manager.d.ts.map +0 -1
  139. package/dist/core/openspec-manager.js +0 -596
  140. package/dist/core/openspec-manager.js.map +0 -1
  141. package/dist/core/openspec-migrator.d.ts +0 -27
  142. package/dist/core/openspec-migrator.d.ts.map +0 -1
  143. package/dist/core/openspec-migrator.js +0 -262
  144. package/dist/core/openspec-migrator.js.map +0 -1
  145. package/dist/core/test-task-manager.d.ts +0 -49
  146. package/dist/core/test-task-manager.d.ts.map +0 -1
  147. package/dist/core/test-task-manager.js +0 -121
  148. package/dist/core/test-task-manager.js.map +0 -1
@@ -1,596 +0,0 @@
1
- import { readFile, writeFile, existsSync, readdirSync } from 'fs';
2
- import { promisify } from 'util';
3
- import { join } from 'path';
4
- import { randomUUID } from 'crypto';
5
- const readFileAsync = promisify(readFile);
6
- const writeFileAsync = promisify(writeFile);
7
- const OPENSPEC_DIR = 'openspec';
8
- const CHANGES_DIR = 'changes';
9
- const TASKS_FILE = 'tasks.md';
10
- export class OpenSpecManager {
11
- openspecPath;
12
- changesPath;
13
- data = null;
14
- onLog;
15
- constructor(projectRoot) {
16
- this.openspecPath = join(projectRoot, OPENSPEC_DIR);
17
- this.changesPath = join(this.openspecPath, CHANGES_DIR);
18
- }
19
- /**
20
- * Set callback for logging (used by watcher UI)
21
- */
22
- setLogCallback(callback) {
23
- this.onLog = callback;
24
- }
25
- /**
26
- * Initialize OpenSpec directory structure (deprecated - no longer creates directories)
27
- * OpenSpec is legacy; only operates on existing directories.
28
- */
29
- async initialize() {
30
- // No-op: OpenSpec is deprecated. Do not create openspec/ directory.
31
- // Existing openspec/ directories are handled by the migration system.
32
- }
33
- /**
34
- * Load OpenSpec data from changes directory
35
- */
36
- async loadOpenSpec() {
37
- if (this.data) {
38
- return this.data;
39
- }
40
- await this.initialize();
41
- try {
42
- // Load tasks from all changes
43
- const tasks = await this.loadTasksFromChanges();
44
- // Load current task from metadata
45
- let currentTask;
46
- // Load history from completed tasks
47
- const history = tasks.filter((t) => t.status === 'completed');
48
- this.data = {
49
- tasks: tasks.filter((t) => t.status !== 'completed'),
50
- currentTask,
51
- history,
52
- metadata: {
53
- version: '1.0.0',
54
- createdAt: new Date().toISOString(),
55
- updatedAt: new Date().toISOString(),
56
- totalTasks: tasks.length,
57
- completedTasks: history.length,
58
- },
59
- };
60
- return this.data;
61
- }
62
- catch (error) {
63
- throw new Error(`Failed to load OpenSpec data: ${error}`);
64
- }
65
- }
66
- /**
67
- * Save OpenSpec data (tasks are managed in changes, so this is mostly for metadata)
68
- */
69
- async saveOpenSpec() {
70
- if (!this.data) {
71
- throw new Error('No data to save');
72
- }
73
- try {
74
- await this.initialize();
75
- // Update metadata
76
- this.data.metadata.updatedAt = new Date().toISOString();
77
- this.data.metadata.totalTasks = this.data.tasks.length + this.data.history.length;
78
- this.data.metadata.completedTasks = this.data.history.length;
79
- // Tasks are managed in individual change files, not in a central file
80
- }
81
- catch (error) {
82
- throw new Error(`Failed to save OpenSpec data: ${error}`);
83
- }
84
- }
85
- /**
86
- * Sync task status on agent start
87
- * Loads all tasks and ensures the data is fresh
88
- */
89
- async syncTaskStatus() {
90
- // Clear cached data to force reload
91
- this.data = null;
92
- // Reload all tasks
93
- const data = await this.loadOpenSpec();
94
- // Log task summary
95
- const totalTasks = data.tasks.length + data.history.length;
96
- const pendingTasks = data.tasks.filter((t) => t.status === 'pending').length;
97
- const inProgressTasks = data.tasks.filter((t) => t.status === 'in-progress').length;
98
- const completedTasks = data.history.length;
99
- const msg = ` Tasks: ${totalTasks} total | ${pendingTasks} pending | ${inProgressTasks} in progress | ${completedTasks} completed`;
100
- // Use callback if available (watcher mode), otherwise console.log (CLI mode)
101
- if (this.onLog) {
102
- this.onLog('info', msg);
103
- }
104
- else {
105
- console.log(msg);
106
- }
107
- }
108
- /**
109
- * Load tasks from all changes directories
110
- */
111
- async loadTasksFromChanges() {
112
- const allTasks = [];
113
- if (!existsSync(this.changesPath)) {
114
- return allTasks;
115
- }
116
- try {
117
- const changeDirs = readdirSync(this.changesPath, { withFileTypes: true })
118
- .filter((dirent) => dirent.isDirectory())
119
- .map((dirent) => dirent.name);
120
- for (const changeDir of changeDirs) {
121
- const tasksPath = join(this.changesPath, changeDir, TASKS_FILE);
122
- if (existsSync(tasksPath)) {
123
- const tasksContent = await readFileAsync(tasksPath, 'utf-8');
124
- const tasks = this.parseTasksFromMarkdown(tasksContent);
125
- allTasks.push(...tasks);
126
- }
127
- }
128
- }
129
- catch (error) {
130
- const msg = `Warning: Could not load tasks from changes: ${error}`;
131
- if (this.onLog) {
132
- this.onLog('warning', msg);
133
- }
134
- else {
135
- console.warn(msg);
136
- }
137
- }
138
- return allTasks;
139
- }
140
- /**
141
- * Parse tasks from markdown content
142
- */
143
- parseTasksFromMarkdown(content) {
144
- const tasks = [];
145
- const lines = content.split('\n');
146
- for (let i = 0; i < lines.length; i++) {
147
- const line = lines[i].trim();
148
- // Check for task list items
149
- if (line.startsWith('- [') && line.includes(']')) {
150
- const statusMatch = line.match(/^- \[([x ])\] (.+)$/);
151
- if (statusMatch) {
152
- const isCompleted = statusMatch[1] === 'x';
153
- const taskTitle = statusMatch[2];
154
- // Extract task ID from title - handle both formats:
155
- // 1. **TASK-ID**: Description (current format)
156
- // 2. Description (id: TASK-ID) (legacy format)
157
- let id;
158
- let title;
159
- const boldIdMatch = taskTitle.match(/^\*\*(.+?)\*\*: (.+)$/);
160
- if (boldIdMatch) {
161
- id = boldIdMatch[1];
162
- title = boldIdMatch[2];
163
- }
164
- else {
165
- const idMatch = taskTitle.match(/^(.+) \(id: (.+)\)$/);
166
- if (idMatch) {
167
- title = idMatch[1];
168
- id = idMatch[2];
169
- }
170
- else {
171
- id = randomUUID();
172
- title = taskTitle;
173
- }
174
- }
175
- // Extract priority from task ID if it follows pattern like INIT-001, REFACTOR-002, etc.
176
- let priority = 1;
177
- const priorityMatch = id.match(/^([A-Z]+)-(\d+)$/);
178
- if (priorityMatch) {
179
- const phase = priorityMatch[1];
180
- const phaseNumber = parseInt(priorityMatch[2]);
181
- // Map phase names to priority numbers
182
- const phasePriority = {
183
- INIT: 0,
184
- TEST: 1,
185
- REFACTOR: 2,
186
- IMPLEMENT: 3,
187
- INTEGRATE: 4,
188
- STYLE: 5,
189
- OPTIMIZE: 6,
190
- DOCS: 7,
191
- QA: 8,
192
- };
193
- priority = (phasePriority[phase] || 9) * 1000 + phaseNumber;
194
- }
195
- // Extract dependencies from subsequent lines
196
- const dependencies = [];
197
- let j = i + 1;
198
- while (j < lines.length && lines[j].startsWith(' -')) {
199
- const depMatch = lines[j].match(/^- (.+) \(id: (.+)\)$/);
200
- if (depMatch) {
201
- dependencies.push(depMatch[2]);
202
- }
203
- j++;
204
- }
205
- const task = {
206
- id,
207
- title,
208
- description: title,
209
- priority,
210
- status: isCompleted ? 'completed' : 'pending',
211
- dependencies,
212
- estimatedTime: 1800, // Default 30 minutes
213
- createdAt: new Date().toISOString(),
214
- updatedAt: new Date().toISOString(),
215
- attempts: 0,
216
- tags: [],
217
- };
218
- tasks.push(task);
219
- }
220
- }
221
- }
222
- return tasks;
223
- }
224
- /**
225
- * Get tasks ordered by priority
226
- */
227
- async getTasksByPriority() {
228
- const data = await this.loadOpenSpec();
229
- return data.tasks
230
- .filter((task) => task.status === 'pending')
231
- .sort((a, b) => a.priority - b.priority);
232
- }
233
- /**
234
- * Get current active task
235
- */
236
- async getCurrentTask() {
237
- const data = await this.loadOpenSpec();
238
- if (!data.currentTask) {
239
- return null;
240
- }
241
- return data.tasks.find((task) => task.id === data.currentTask) || null;
242
- }
243
- /**
244
- * Set current task
245
- */
246
- async setCurrentTask(taskId) {
247
- const data = await this.loadOpenSpec();
248
- const task = data.tasks.find((t) => t.id === taskId);
249
- if (!task) {
250
- throw new Error(`Task ${taskId} not found`);
251
- }
252
- data.currentTask = taskId;
253
- this.data = data;
254
- await this.saveOpenSpec();
255
- }
256
- /**
257
- * Update task status
258
- */
259
- async updateTaskStatus(taskId, status) {
260
- const data = await this.loadOpenSpec();
261
- const taskIndex = data.tasks.findIndex((t) => t.id === taskId);
262
- if (taskIndex === -1) {
263
- throw new Error(`Task ${taskId} not found`);
264
- }
265
- const task = data.tasks[taskIndex];
266
- task.status = status;
267
- task.updatedAt = new Date().toISOString();
268
- if (status === 'completed') {
269
- task.completedAt = new Date().toISOString();
270
- // Move to history
271
- data.history.push(task);
272
- data.tasks.splice(taskIndex, 1);
273
- // Clear current task if it was completed
274
- if (data.currentTask === taskId) {
275
- data.currentTask = undefined;
276
- }
277
- }
278
- else if (status === 'in-progress') {
279
- data.currentTask = taskId;
280
- }
281
- this.data = data;
282
- await this.saveOpenSpec();
283
- // Update markdown files for all status changes (only for relevant statuses)
284
- if (status === 'completed' || status === 'in-progress' || status === 'failed') {
285
- await this.updateMarkdownTaskStatus(taskId, status);
286
- }
287
- }
288
- /**
289
- * Mark task as complete
290
- */
291
- async markTaskComplete(taskId) {
292
- await this.updateTaskStatus(taskId, 'completed');
293
- // Automatically update OpenSpec markdown files
294
- await this.updateMarkdownTaskStatus(taskId, 'completed');
295
- }
296
- /**
297
- * Update task status in markdown files
298
- */
299
- async updateMarkdownTaskStatus(taskId, status) {
300
- try {
301
- // Find all tasks.md files in the changes directory
302
- const changesDirs = readdirSync(this.changesPath, { withFileTypes: true })
303
- .filter((dirent) => dirent.isDirectory())
304
- .map((dirent) => dirent.name);
305
- for (const dir of changesDirs) {
306
- const tasksFilePath = join(this.changesPath, dir, TASKS_FILE);
307
- if (existsSync(tasksFilePath)) {
308
- const content = await readFileAsync(tasksFilePath, 'utf8');
309
- // Update task status in markdown
310
- const updatedContent = this.updateTaskInMarkdown(content, taskId, status);
311
- if (updatedContent !== content) {
312
- await writeFileAsync(tasksFilePath, updatedContent, 'utf8');
313
- if (this.onLog) {
314
- this.onLog('success', `Updated task status in ${join(dir, TASKS_FILE)}`);
315
- }
316
- }
317
- }
318
- }
319
- }
320
- catch (error) {
321
- if (this.onLog) {
322
- this.onLog('warning', `Failed to update markdown files: ${error}`);
323
- }
324
- }
325
- }
326
- /**
327
- * Update task status in markdown content
328
- */
329
- updateTaskInMarkdown(content, taskId, status) {
330
- // Create regex pattern to match task lines with the specific task ID
331
- const taskPattern = new RegExp(`(- \\[ \\] \\*\\*${taskId}\\*\\*.*?)(?=\\n|$)`, 'g');
332
- let updatedContent = content;
333
- let hasChanges = false;
334
- // Replace pending tasks with completed/in-progress/failed
335
- updatedContent = updatedContent.replace(taskPattern, (match) => {
336
- hasChanges = true;
337
- if (status === 'completed') {
338
- return match.replace('- [ ]', '- [x]');
339
- }
340
- else if (status === 'in-progress') {
341
- return match.replace('- [ ]', '- [~]'); // Using ~ for in-progress
342
- }
343
- else if (status === 'failed') {
344
- return match.replace('- [ ]', '- [!]'); // Using ! for failed
345
- }
346
- return match;
347
- });
348
- return hasChanges ? updatedContent : content;
349
- }
350
- /**
351
- * Add new task
352
- */
353
- async addTask(task) {
354
- const data = await this.loadOpenSpec();
355
- const newTask = {
356
- ...task,
357
- id: randomUUID(),
358
- createdAt: new Date().toISOString(),
359
- updatedAt: new Date().toISOString(),
360
- attempts: 0,
361
- };
362
- data.tasks.push(newTask);
363
- this.data = data;
364
- await this.saveOpenSpec();
365
- return newTask.id;
366
- }
367
- /**
368
- * Get task by ID
369
- */
370
- async getTask(taskId) {
371
- const data = await this.loadOpenSpec();
372
- return data.tasks.find((t) => t.id === taskId) || null;
373
- }
374
- /**
375
- * Get task dependencies
376
- */
377
- async getTaskDependencies(taskId) {
378
- const data = await this.loadOpenSpec();
379
- const task = data.tasks.find((t) => t.id === taskId);
380
- if (!task) {
381
- return [];
382
- }
383
- return data.tasks.filter((t) => task.dependencies.includes(t.id));
384
- }
385
- /**
386
- * Check if task dependencies are satisfied
387
- */
388
- async areDependenciesSatisfied(taskId) {
389
- const dependencies = await this.getTaskDependencies(taskId);
390
- return dependencies.every((dep) => dep.status === 'completed');
391
- }
392
- /**
393
- * Get next available task
394
- */
395
- async getNextTask() {
396
- const pendingTasks = await this.getTasksByPriority();
397
- for (const task of pendingTasks) {
398
- if (await this.areDependenciesSatisfied(task.id)) {
399
- return task;
400
- }
401
- }
402
- return null;
403
- }
404
- /**
405
- * Increment task attempts
406
- */
407
- async incrementTaskAttempts(taskId) {
408
- const data = await this.loadOpenSpec();
409
- const task = data.tasks.find((t) => t.id === taskId);
410
- if (task) {
411
- task.attempts++;
412
- task.updatedAt = new Date().toISOString();
413
- this.data = data;
414
- await this.saveOpenSpec();
415
- }
416
- }
417
- /**
418
- * Get task statistics
419
- */
420
- async getTaskStats() {
421
- const data = await this.loadOpenSpec();
422
- const stats = {
423
- total: data.tasks.length + data.history.length,
424
- pending: 0,
425
- inProgress: 0,
426
- completed: data.history.length,
427
- failed: 0,
428
- skipped: 0,
429
- };
430
- for (const task of data.tasks) {
431
- if (task.status === 'in-progress') {
432
- stats.inProgress++;
433
- }
434
- else {
435
- stats[task.status]++;
436
- }
437
- }
438
- return stats;
439
- }
440
- /**
441
- * Generate ASCII dependency tree
442
- */
443
- async generateDependencyTree() {
444
- const data = await this.loadOpenSpec();
445
- const lines = [];
446
- lines.push('Task Dependency Tree:');
447
- lines.push('');
448
- const visited = new Set();
449
- const processing = new Set();
450
- const buildTree = (taskId, depth = 0) => {
451
- if (processing.has(taskId)) {
452
- lines.push(`${' '.repeat(depth)}└─ ${taskId} (circular dependency)`);
453
- return;
454
- }
455
- if (visited.has(taskId)) {
456
- return;
457
- }
458
- processing.add(taskId);
459
- visited.add(taskId);
460
- const task = [...data.tasks, ...data.history].find((t) => t.id === taskId);
461
- if (!task) {
462
- processing.delete(taskId);
463
- return;
464
- }
465
- const prefix = depth === 0 ? '├─' : '└─';
466
- const status = task.status === 'completed'
467
- ? '✓'
468
- : task.status === 'in-progress'
469
- ? '⚙'
470
- : task.status === 'failed'
471
- ? '✗'
472
- : '○';
473
- lines.push(`${' '.repeat(depth)}${prefix} ${status} ${task.title} (${task.status})`);
474
- for (const depId of task.dependencies) {
475
- buildTree(depId, depth + 1);
476
- }
477
- processing.delete(taskId);
478
- };
479
- // Start with tasks that have no dependencies
480
- const allTasks = [...data.tasks, ...data.history];
481
- const rootTasks = allTasks.filter((task) => task.dependencies.length === 0);
482
- for (const task of rootTasks) {
483
- buildTree(task.id);
484
- }
485
- return lines.join('\n');
486
- }
487
- /**
488
- * Validate dependency graph for cycles
489
- */
490
- async validateDependencyGraph() {
491
- const data = await this.loadOpenSpec();
492
- const visited = new Set();
493
- const processing = new Set();
494
- const cycles = [];
495
- const dfs = (taskId, path) => {
496
- if (processing.has(taskId)) {
497
- // Found a cycle
498
- const cycleStart = path.indexOf(taskId);
499
- cycles.push(path.slice(cycleStart));
500
- return;
501
- }
502
- if (visited.has(taskId)) {
503
- return;
504
- }
505
- visited.add(taskId);
506
- processing.add(taskId);
507
- const allTasks = [...data.tasks, ...data.history];
508
- const task = allTasks.find((t) => t.id === taskId);
509
- if (task) {
510
- for (const depId of task.dependencies) {
511
- dfs(depId, [...path, taskId]);
512
- }
513
- }
514
- processing.delete(taskId);
515
- };
516
- // Check all tasks
517
- const allTasks = [...data.tasks, ...data.history];
518
- for (const task of allTasks) {
519
- if (!visited.has(task.id)) {
520
- dfs(task.id, []);
521
- }
522
- }
523
- return {
524
- valid: cycles.length === 0,
525
- cycles,
526
- };
527
- }
528
- /**
529
- * Get tasks that can be executed in parallel
530
- */
531
- async getParallelExecutableTasks() {
532
- const data = await this.loadOpenSpec();
533
- const levels = [];
534
- const processed = new Set();
535
- const getLevel = (tasks, level = 0) => {
536
- if (tasks.length === 0)
537
- return;
538
- if (!levels[level]) {
539
- levels[level] = [];
540
- }
541
- const currentLevelTasks = [];
542
- for (const task of tasks) {
543
- if (processed.has(task.id))
544
- continue;
545
- const dependencies = data.tasks.filter((t) => task.dependencies.includes(t.id));
546
- const allDependenciesProcessed = dependencies.every((dep) => processed.has(dep.id));
547
- if (allDependenciesProcessed) {
548
- currentLevelTasks.push(task);
549
- processed.add(task.id);
550
- }
551
- }
552
- if (currentLevelTasks.length > 0) {
553
- levels[level] = currentLevelTasks;
554
- getLevel(data.tasks.filter((t) => !processed.has(t.id)), level + 1);
555
- }
556
- };
557
- getLevel(data.tasks.filter((t) => t.status === 'pending'));
558
- return levels.filter((level) => level.length > 0);
559
- }
560
- /**
561
- * Get execution order respecting dependencies
562
- */
563
- async getExecutionOrder() {
564
- const parallelLevels = await this.getParallelExecutableTasks();
565
- const executionOrder = [];
566
- for (const level of parallelLevels) {
567
- executionOrder.push(...level);
568
- }
569
- return executionOrder;
570
- }
571
- /**
572
- * Check if task can be started (dependencies satisfied)
573
- */
574
- async canStartTask(taskId) {
575
- const dependencies = await this.getTaskDependencies(taskId);
576
- return dependencies.every((dep) => dep.status === 'completed');
577
- }
578
- /**
579
- * Get blocking tasks (tasks that block the given task)
580
- */
581
- async getBlockingTasks(taskId) {
582
- const data = await this.loadOpenSpec();
583
- const task = data.tasks.find((t) => t.id === taskId);
584
- if (!task) {
585
- return [];
586
- }
587
- return data.tasks.filter((t) => task.dependencies.includes(t.id) && t.status !== 'completed');
588
- }
589
- }
590
- /**
591
- * Create a new OpenSpecManager instance
592
- */
593
- export function createOpenSpecManager(projectRoot) {
594
- return new OpenSpecManager(projectRoot);
595
- }
596
- //# sourceMappingURL=openspec-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openspec-manager.js","sourceRoot":"","sources":["../../src/core/openspec-manager.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- export interface MigrationResult {
2
- migrated: number;
3
- skipped: number;
4
- errors: string[];
5
- migratedTasks: string[];
6
- }
7
- /**
8
- * Migrate OpenSpec tasks to Rulebook format
9
- */
10
- export declare function migrateOpenSpecToRulebook(projectRoot: string, rulebookDir?: string): Promise<MigrationResult>;
11
- /**
12
- * Migrate OpenSpec archived tasks to Rulebook format
13
- */
14
- export declare function migrateOpenSpecArchives(projectRoot: string, rulebookDir?: string): Promise<MigrationResult>;
15
- /**
16
- * Remove /rulebook/specs/OPENSPEC.md if it exists
17
- */
18
- export declare function removeOpenSpecRulebookFile(projectRoot: string, rulebookDir?: string): Promise<boolean>;
19
- /**
20
- * Remove OpenSpec commands from .cursor/commands/
21
- */
22
- export declare function removeOpenSpecCommands(projectRoot: string): Promise<number>;
23
- /**
24
- * Archive OpenSpec directory (move to archive)
25
- */
26
- export declare function archiveOpenSpecDirectory(projectRoot: string): Promise<boolean>;
27
- //# sourceMappingURL=openspec-migrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openspec-migrator.d.ts","sourceRoot":"","sources":["../../src/core/openspec-migrator.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAoB,GAChC,OAAO,CAAC,eAAe,CAAC,CAoG1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAoB,GAChC,OAAO,CAAC,eAAe,CAAC,CAqG1B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAoB,GAChC,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBjF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBpF"}