@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.
- package/.claude/commands/continue.md +33 -0
- package/.claude-plugin/marketplace.json +28 -29
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +32 -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/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 +9 -2
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +4 -0
- package/dist/memory/memory-store.js.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/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/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
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, mkdirSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { fileExists, readFile, writeFile } from '../utils/file-system.js';
|
|
4
|
-
import { createTaskManager } from './task-manager.js';
|
|
5
|
-
const OPENSPEC_DIR = 'openspec';
|
|
6
|
-
const CHANGES_DIR = 'changes';
|
|
7
|
-
const SPECS_DIR = 'specs';
|
|
8
|
-
const TASKS_FILE = 'tasks.md';
|
|
9
|
-
const PROPOSAL_FILE = 'proposal.md';
|
|
10
|
-
const DESIGN_FILE = 'design.md';
|
|
11
|
-
/**
|
|
12
|
-
* Migrate OpenSpec tasks to Rulebook format
|
|
13
|
-
*/
|
|
14
|
-
export async function migrateOpenSpecToRulebook(projectRoot, rulebookDir = '.rulebook') {
|
|
15
|
-
const result = {
|
|
16
|
-
migrated: 0,
|
|
17
|
-
skipped: 0,
|
|
18
|
-
errors: [],
|
|
19
|
-
migratedTasks: [],
|
|
20
|
-
};
|
|
21
|
-
const openspecPath = join(projectRoot, OPENSPEC_DIR);
|
|
22
|
-
const changesPath = join(openspecPath, CHANGES_DIR);
|
|
23
|
-
// Check if OpenSpec directory exists
|
|
24
|
-
if (!existsSync(changesPath)) {
|
|
25
|
-
return result; // No OpenSpec tasks to migrate
|
|
26
|
-
}
|
|
27
|
-
// Get all change directories
|
|
28
|
-
let changeDirs = [];
|
|
29
|
-
try {
|
|
30
|
-
changeDirs = readdirSync(changesPath, { withFileTypes: true })
|
|
31
|
-
.filter((dirent) => dirent.isDirectory())
|
|
32
|
-
.map((dirent) => dirent.name);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
result.errors.push(`Failed to read OpenSpec changes directory: ${error.message}`);
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
if (changeDirs.length === 0) {
|
|
39
|
-
return result; // No tasks to migrate
|
|
40
|
-
}
|
|
41
|
-
// Initialize TaskManager
|
|
42
|
-
const taskManager = createTaskManager(projectRoot, rulebookDir);
|
|
43
|
-
await taskManager.initialize();
|
|
44
|
-
// Migrate each task
|
|
45
|
-
for (const changeDir of changeDirs) {
|
|
46
|
-
const taskId = changeDir; // Use directory name as task ID
|
|
47
|
-
const sourceTaskPath = join(changesPath, changeDir);
|
|
48
|
-
const targetTaskPath = join(projectRoot, rulebookDir, 'tasks', taskId);
|
|
49
|
-
try {
|
|
50
|
-
// Check if task already exists in Rulebook
|
|
51
|
-
if (existsSync(targetTaskPath)) {
|
|
52
|
-
result.skipped++;
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
// Create target directory
|
|
56
|
-
mkdirSync(targetTaskPath, { recursive: true });
|
|
57
|
-
mkdirSync(join(targetTaskPath, SPECS_DIR), { recursive: true });
|
|
58
|
-
// Migrate proposal.md
|
|
59
|
-
const proposalSource = join(sourceTaskPath, PROPOSAL_FILE);
|
|
60
|
-
if (await fileExists(proposalSource)) {
|
|
61
|
-
const proposalContent = await readFile(proposalSource);
|
|
62
|
-
await writeFile(join(targetTaskPath, PROPOSAL_FILE), proposalContent);
|
|
63
|
-
}
|
|
64
|
-
// Migrate tasks.md
|
|
65
|
-
const tasksSource = join(sourceTaskPath, TASKS_FILE);
|
|
66
|
-
if (await fileExists(tasksSource)) {
|
|
67
|
-
const tasksContent = await readFile(tasksSource);
|
|
68
|
-
await writeFile(join(targetTaskPath, TASKS_FILE), tasksContent);
|
|
69
|
-
}
|
|
70
|
-
// Migrate design.md (if exists)
|
|
71
|
-
const designSource = join(sourceTaskPath, DESIGN_FILE);
|
|
72
|
-
if (await fileExists(designSource)) {
|
|
73
|
-
const designContent = await readFile(designSource);
|
|
74
|
-
await writeFile(join(targetTaskPath, DESIGN_FILE), designContent);
|
|
75
|
-
}
|
|
76
|
-
// Migrate specs
|
|
77
|
-
const specsSource = join(sourceTaskPath, SPECS_DIR);
|
|
78
|
-
if (existsSync(specsSource)) {
|
|
79
|
-
const specDirs = readdirSync(specsSource, { withFileTypes: true })
|
|
80
|
-
.filter((dirent) => dirent.isDirectory())
|
|
81
|
-
.map((dirent) => dirent.name);
|
|
82
|
-
for (const specDir of specDirs) {
|
|
83
|
-
const specSource = join(specsSource, specDir, 'spec.md');
|
|
84
|
-
if (await fileExists(specSource)) {
|
|
85
|
-
const specContent = await readFile(specSource);
|
|
86
|
-
const targetSpecDir = join(targetTaskPath, SPECS_DIR, specDir);
|
|
87
|
-
mkdirSync(targetSpecDir, { recursive: true });
|
|
88
|
-
await writeFile(join(targetSpecDir, 'spec.md'), specContent);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
result.migrated++;
|
|
93
|
-
result.migratedTasks.push(taskId);
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
result.errors.push(`Failed to migrate task ${taskId}: ${error.message}`);
|
|
97
|
-
result.skipped++;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Migrate OpenSpec archived tasks to Rulebook format
|
|
104
|
-
*/
|
|
105
|
-
export async function migrateOpenSpecArchives(projectRoot, rulebookDir = '.rulebook') {
|
|
106
|
-
const result = {
|
|
107
|
-
migrated: 0,
|
|
108
|
-
skipped: 0,
|
|
109
|
-
errors: [],
|
|
110
|
-
migratedTasks: [],
|
|
111
|
-
};
|
|
112
|
-
const openspecPath = join(projectRoot, OPENSPEC_DIR);
|
|
113
|
-
const archivePath = join(openspecPath, CHANGES_DIR, 'archive');
|
|
114
|
-
// Check if OpenSpec archive directory exists
|
|
115
|
-
if (!existsSync(archivePath)) {
|
|
116
|
-
return result; // No archived tasks to migrate
|
|
117
|
-
}
|
|
118
|
-
// Get all archived task directories
|
|
119
|
-
let archiveDirs = [];
|
|
120
|
-
try {
|
|
121
|
-
archiveDirs = readdirSync(archivePath, { withFileTypes: true })
|
|
122
|
-
.filter((dirent) => dirent.isDirectory())
|
|
123
|
-
.map((dirent) => dirent.name);
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
result.errors.push(`Failed to read OpenSpec archive directory: ${error.message}`);
|
|
127
|
-
return result;
|
|
128
|
-
}
|
|
129
|
-
if (archiveDirs.length === 0) {
|
|
130
|
-
return result; // No archived tasks to migrate
|
|
131
|
-
}
|
|
132
|
-
// Initialize TaskManager
|
|
133
|
-
const taskManager = createTaskManager(projectRoot, rulebookDir);
|
|
134
|
-
await taskManager.initialize();
|
|
135
|
-
// Migrate each archived task
|
|
136
|
-
for (const archiveDir of archiveDirs) {
|
|
137
|
-
const sourceArchivePath = join(archivePath, archiveDir);
|
|
138
|
-
// Preserve archive date prefix (YYYY-MM-DD-task-id format)
|
|
139
|
-
const archiveName = archiveDir; // Keep original name with date prefix
|
|
140
|
-
const targetArchivePath = join(projectRoot, rulebookDir, 'tasks', 'archive', archiveName);
|
|
141
|
-
try {
|
|
142
|
-
// Check if archive already exists in Rulebook
|
|
143
|
-
if (existsSync(targetArchivePath)) {
|
|
144
|
-
result.skipped++;
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
// Create target archive directory
|
|
148
|
-
mkdirSync(targetArchivePath, { recursive: true });
|
|
149
|
-
mkdirSync(join(targetArchivePath, SPECS_DIR), { recursive: true });
|
|
150
|
-
// Migrate proposal.md
|
|
151
|
-
const proposalSource = join(sourceArchivePath, PROPOSAL_FILE);
|
|
152
|
-
if (await fileExists(proposalSource)) {
|
|
153
|
-
const proposalContent = await readFile(proposalSource);
|
|
154
|
-
await writeFile(join(targetArchivePath, PROPOSAL_FILE), proposalContent);
|
|
155
|
-
}
|
|
156
|
-
// Migrate tasks.md
|
|
157
|
-
const tasksSource = join(sourceArchivePath, TASKS_FILE);
|
|
158
|
-
if (await fileExists(tasksSource)) {
|
|
159
|
-
const tasksContent = await readFile(tasksSource);
|
|
160
|
-
await writeFile(join(targetArchivePath, TASKS_FILE), tasksContent);
|
|
161
|
-
}
|
|
162
|
-
// Migrate design.md (if exists)
|
|
163
|
-
const designSource = join(sourceArchivePath, DESIGN_FILE);
|
|
164
|
-
if (await fileExists(designSource)) {
|
|
165
|
-
const designContent = await readFile(designSource);
|
|
166
|
-
await writeFile(join(targetArchivePath, DESIGN_FILE), designContent);
|
|
167
|
-
}
|
|
168
|
-
// Migrate specs
|
|
169
|
-
const specsSource = join(sourceArchivePath, SPECS_DIR);
|
|
170
|
-
if (existsSync(specsSource)) {
|
|
171
|
-
const specDirs = readdirSync(specsSource, { withFileTypes: true })
|
|
172
|
-
.filter((dirent) => dirent.isDirectory())
|
|
173
|
-
.map((dirent) => dirent.name);
|
|
174
|
-
for (const specDir of specDirs) {
|
|
175
|
-
const specSource = join(specsSource, specDir, 'spec.md');
|
|
176
|
-
if (await fileExists(specSource)) {
|
|
177
|
-
const specContent = await readFile(specSource);
|
|
178
|
-
const targetSpecDir = join(targetArchivePath, SPECS_DIR, specDir);
|
|
179
|
-
mkdirSync(targetSpecDir, { recursive: true });
|
|
180
|
-
await writeFile(join(targetSpecDir, 'spec.md'), specContent);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
result.migrated++;
|
|
185
|
-
result.migratedTasks.push(archiveName);
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
result.errors.push(`Failed to migrate archived task ${archiveName}: ${error.message}`);
|
|
189
|
-
result.skipped++;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
return result;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Remove /rulebook/specs/OPENSPEC.md if it exists
|
|
196
|
-
*/
|
|
197
|
-
export async function removeOpenSpecRulebookFile(projectRoot, rulebookDir = '.rulebook') {
|
|
198
|
-
const { unlink } = await import('fs/promises');
|
|
199
|
-
// Check both new specs/ path and legacy flat path
|
|
200
|
-
const specsPath = join(projectRoot, rulebookDir, 'specs', 'OPENSPEC.md');
|
|
201
|
-
const legacyPath = join(projectRoot, rulebookDir, 'OPENSPEC.md');
|
|
202
|
-
let removed = false;
|
|
203
|
-
if (await fileExists(specsPath)) {
|
|
204
|
-
await unlink(specsPath);
|
|
205
|
-
removed = true;
|
|
206
|
-
}
|
|
207
|
-
if (await fileExists(legacyPath)) {
|
|
208
|
-
await unlink(legacyPath);
|
|
209
|
-
removed = true;
|
|
210
|
-
}
|
|
211
|
-
return removed;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Remove OpenSpec commands from .cursor/commands/
|
|
215
|
-
*/
|
|
216
|
-
export async function removeOpenSpecCommands(projectRoot) {
|
|
217
|
-
const commandsDir = join(projectRoot, '.cursor', 'commands');
|
|
218
|
-
if (!existsSync(commandsDir)) {
|
|
219
|
-
return 0;
|
|
220
|
-
}
|
|
221
|
-
const openspecCommands = ['openspec-proposal.md', 'openspec-archive.md', 'openspec-apply.md'];
|
|
222
|
-
let removed = 0;
|
|
223
|
-
for (const command of openspecCommands) {
|
|
224
|
-
const commandPath = join(commandsDir, command);
|
|
225
|
-
if (await fileExists(commandPath)) {
|
|
226
|
-
const { unlink } = await import('fs/promises');
|
|
227
|
-
await unlink(commandPath);
|
|
228
|
-
removed++;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return removed;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Archive OpenSpec directory (move to archive)
|
|
235
|
-
*/
|
|
236
|
-
export async function archiveOpenSpecDirectory(projectRoot) {
|
|
237
|
-
const openspecPath = join(projectRoot, OPENSPEC_DIR);
|
|
238
|
-
if (!existsSync(openspecPath)) {
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
const archiveDate = new Date().toISOString().split('T')[0];
|
|
242
|
-
const archivePath = join(projectRoot, `openspec-archive-${archiveDate}`);
|
|
243
|
-
try {
|
|
244
|
-
// Use mv command to move directory
|
|
245
|
-
const { execSync } = await import('child_process');
|
|
246
|
-
execSync(`mv "${openspecPath}" "${archivePath}"`, { cwd: projectRoot });
|
|
247
|
-
return true;
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
// Fallback: copy and remove
|
|
251
|
-
const { cpSync, rmSync } = await import('fs');
|
|
252
|
-
try {
|
|
253
|
-
cpSync(openspecPath, archivePath, { recursive: true });
|
|
254
|
-
rmSync(openspecPath, { recursive: true, force: true });
|
|
255
|
-
return true;
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
//# sourceMappingURL=openspec-migrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openspec-migrator.js","sourceRoot":"","sources":["../../src/core/openspec-migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { OpenSpecManager } from './openspec-manager.js';
|
|
2
|
-
import type { OpenSpecTask } from '../types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Test Task Manager
|
|
5
|
-
* Handles creation and execution of test tasks
|
|
6
|
-
*/
|
|
7
|
-
export declare class TestTaskManager {
|
|
8
|
-
private openspecManager;
|
|
9
|
-
constructor(openspecManager: OpenSpecManager);
|
|
10
|
-
/**
|
|
11
|
-
* Create a test task with the given title and description
|
|
12
|
-
*/
|
|
13
|
-
createTestTask(title: string, description: string): Promise<string>;
|
|
14
|
-
/**
|
|
15
|
-
* Execute a test task
|
|
16
|
-
*/
|
|
17
|
-
executeTestTask(taskId: string): Promise<boolean>;
|
|
18
|
-
/**
|
|
19
|
-
* Get all test tasks
|
|
20
|
-
*/
|
|
21
|
-
getTestTasks(): Promise<OpenSpecTask[]>;
|
|
22
|
-
/**
|
|
23
|
-
* Get test task statistics
|
|
24
|
-
*/
|
|
25
|
-
getTestTaskStats(): Promise<{
|
|
26
|
-
total: number;
|
|
27
|
-
pending: number;
|
|
28
|
-
inProgress: number;
|
|
29
|
-
completed: number;
|
|
30
|
-
failed: number;
|
|
31
|
-
}>;
|
|
32
|
-
/**
|
|
33
|
-
* Run all pending test tasks
|
|
34
|
-
*/
|
|
35
|
-
runAllTestTasks(): Promise<{
|
|
36
|
-
passed: number;
|
|
37
|
-
failed: number;
|
|
38
|
-
total: number;
|
|
39
|
-
}>;
|
|
40
|
-
/**
|
|
41
|
-
* Utility method for delays
|
|
42
|
-
*/
|
|
43
|
-
private delay;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Factory function to create TestTaskManager
|
|
47
|
-
*/
|
|
48
|
-
export declare function createTestTaskManager(openspecManager: OpenSpecManager): TestTaskManager;
|
|
49
|
-
//# sourceMappingURL=test-task-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-task-manager.d.ts","sourceRoot":"","sources":["../../src/core/test-task-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,eAAe,EAAE,eAAe;IAI5C;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBzE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCvD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAYF;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAyBnF;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,eAAe,GAAG,eAAe,CAEvF"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test Task Manager
|
|
3
|
-
* Handles creation and execution of test tasks
|
|
4
|
-
*/
|
|
5
|
-
export class TestTaskManager {
|
|
6
|
-
openspecManager;
|
|
7
|
-
constructor(openspecManager) {
|
|
8
|
-
this.openspecManager = openspecManager;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Create a test task with the given title and description
|
|
12
|
-
*/
|
|
13
|
-
async createTestTask(title, description) {
|
|
14
|
-
const task = {
|
|
15
|
-
title,
|
|
16
|
-
description,
|
|
17
|
-
priority: 1,
|
|
18
|
-
status: 'pending',
|
|
19
|
-
dependencies: [],
|
|
20
|
-
estimatedTime: 30, // 30 minutes estimated
|
|
21
|
-
tags: ['test', 'automated'],
|
|
22
|
-
metadata: {
|
|
23
|
-
type: 'test-task',
|
|
24
|
-
createdBy: 'test-task-manager',
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
return await this.openspecManager.addTask(task);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Execute a test task
|
|
31
|
-
*/
|
|
32
|
-
async executeTestTask(taskId) {
|
|
33
|
-
try {
|
|
34
|
-
const task = await this.openspecManager.getTask(taskId);
|
|
35
|
-
if (!task) {
|
|
36
|
-
throw new Error(`Task ${taskId} not found`);
|
|
37
|
-
}
|
|
38
|
-
// Update task status to in-progress
|
|
39
|
-
await this.openspecManager.updateTaskStatus(taskId, 'in-progress');
|
|
40
|
-
// Simulate test execution
|
|
41
|
-
console.log(`๐งช Executing test task: ${task.title}`);
|
|
42
|
-
console.log(`๐ Description: ${task.description}`);
|
|
43
|
-
// Simulate some work
|
|
44
|
-
await this.delay(1000);
|
|
45
|
-
// Simulate test results (randomly pass/fail for demo)
|
|
46
|
-
const testPassed = Math.random() > 0.3; // 70% success rate
|
|
47
|
-
if (testPassed) {
|
|
48
|
-
console.log('โ
Test task completed successfully');
|
|
49
|
-
await this.openspecManager.markTaskComplete(taskId);
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
console.log('โ Test task failed');
|
|
54
|
-
await this.openspecManager.updateTaskStatus(taskId, 'failed');
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
console.error('Error executing test task:', error);
|
|
60
|
-
await this.openspecManager.updateTaskStatus(taskId, 'failed');
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get all test tasks
|
|
66
|
-
*/
|
|
67
|
-
async getTestTasks() {
|
|
68
|
-
const data = await this.openspecManager.loadOpenSpec();
|
|
69
|
-
return data.tasks.filter((task) => task.tags.includes('test') || task.metadata?.type === 'test-task');
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Get test task statistics
|
|
73
|
-
*/
|
|
74
|
-
async getTestTaskStats() {
|
|
75
|
-
const testTasks = await this.getTestTasks();
|
|
76
|
-
return {
|
|
77
|
-
total: testTasks.length,
|
|
78
|
-
pending: testTasks.filter((t) => t.status === 'pending').length,
|
|
79
|
-
inProgress: testTasks.filter((t) => t.status === 'in-progress').length,
|
|
80
|
-
completed: testTasks.filter((t) => t.status === 'completed').length,
|
|
81
|
-
failed: testTasks.filter((t) => t.status === 'failed').length,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Run all pending test tasks
|
|
86
|
-
*/
|
|
87
|
-
async runAllTestTasks() {
|
|
88
|
-
const testTasks = await this.getTestTasks();
|
|
89
|
-
const pendingTasks = testTasks.filter((t) => t.status === 'pending');
|
|
90
|
-
let passed = 0;
|
|
91
|
-
let failed = 0;
|
|
92
|
-
console.log(`๐ Running ${pendingTasks.length} test tasks...`);
|
|
93
|
-
for (const task of pendingTasks) {
|
|
94
|
-
const success = await this.executeTestTask(task.id);
|
|
95
|
-
if (success) {
|
|
96
|
-
passed++;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
failed++;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return {
|
|
103
|
-
passed,
|
|
104
|
-
failed,
|
|
105
|
-
total: pendingTasks.length,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Utility method for delays
|
|
110
|
-
*/
|
|
111
|
-
delay(ms) {
|
|
112
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Factory function to create TestTaskManager
|
|
117
|
-
*/
|
|
118
|
-
export function createTestTaskManager(openspecManager) {
|
|
119
|
-
return new TestTaskManager(openspecManager);
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=test-task-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-task-manager.js","sourceRoot":"","sources":["../../src/core/test-task-manager.ts"],"names":[],"mappings":"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"}
|