superspec 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/cli/commands/archive.d.ts +7 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +322 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +306 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +9 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +268 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/show.d.ts +6 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +273 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +8 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +209 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +7 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +328 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/view.d.ts +6 -0
- package/dist/cli/commands/view.d.ts.map +1 -0
- package/dist/cli/commands/view.js +290 -0
- package/dist/cli/commands/view.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +87 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/display.d.ts +189 -0
- package/dist/cli/ui/display.d.ts.map +1 -0
- package/dist/cli/ui/display.js +449 -0
- package/dist/cli/ui/display.js.map +1 -0
- package/dist/cli/ui/index.d.ts +12 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +71 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/ui/interactive.d.ts +21 -0
- package/dist/cli/ui/interactive.d.ts.map +1 -0
- package/dist/cli/ui/interactive.js +60 -0
- package/dist/cli/ui/interactive.js.map +1 -0
- package/dist/cli/ui/palette.d.ts +301 -0
- package/dist/cli/ui/palette.d.ts.map +1 -0
- package/dist/cli/ui/palette.js +673 -0
- package/dist/cli/ui/palette.js.map +1 -0
- package/dist/cli/ui/prompts.d.ts +62 -0
- package/dist/cli/ui/prompts.d.ts.map +1 -0
- package/dist/cli/ui/prompts.js +119 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +38 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +72 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/core/config/project-config.d.ts +100 -0
- package/dist/core/config/project-config.d.ts.map +1 -0
- package/dist/core/config/project-config.js +87 -0
- package/dist/core/config/project-config.js.map +1 -0
- package/dist/core/parsers/spec-parser.d.ts +48 -0
- package/dist/core/parsers/spec-parser.d.ts.map +1 -0
- package/dist/core/parsers/spec-parser.js +322 -0
- package/dist/core/parsers/spec-parser.js.map +1 -0
- package/dist/core/validation/spec-validator.d.ts +32 -0
- package/dist/core/validation/spec-validator.d.ts.map +1 -0
- package/dist/core/validation/spec-validator.js +242 -0
- package/dist/core/validation/spec-validator.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/package.json +66 -0
- package/schemas/superspec-workflow/schema.yaml +166 -0
- package/templates/design.md +71 -0
- package/templates/plan.md +78 -0
- package/templates/proposal.md +36 -0
- package/templates/spec.md +57 -0
- package/templates/tasks.md +29 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/cli/commands/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAiDA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6ID,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyKnF"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync, symlinkSync, readlinkSync, readFileSync } from 'fs';
|
|
2
|
+
import { join, resolve, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { PALETTE, BANNER, ICONS, startSpinner, spinnerSuccess, spinnerFail, confirmPrompt, sectionHeader, displayTree, displayCommand, } from '../ui/index.js';
|
|
6
|
+
// Get the SuperSpec package root directory
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
const SUPERSPEC_ROOT = resolve(__dirname, '..', '..', '..');
|
|
10
|
+
const SKILLS_SOURCE = join(SUPERSPEC_ROOT, 'skills');
|
|
11
|
+
// Skill mappings: global name -> source directory
|
|
12
|
+
const SKILL_MAPPINGS = {
|
|
13
|
+
// Core SuperSpec workflow
|
|
14
|
+
'superspec:brainstorm': 'brainstorm',
|
|
15
|
+
'superspec:kickoff': 'kickoff',
|
|
16
|
+
'superspec:plan': 'plan-writing',
|
|
17
|
+
'superspec:execute': 'subagent-development',
|
|
18
|
+
'superspec:verify': 'verify',
|
|
19
|
+
'superspec:archive': 'archive',
|
|
20
|
+
'superspec:finish-branch': 'finish-branch',
|
|
21
|
+
// Development skills
|
|
22
|
+
'tdd': 'tdd',
|
|
23
|
+
'git-worktree': 'git-worktree',
|
|
24
|
+
'systematic-debugging': 'systematic-debugging',
|
|
25
|
+
'code-review': 'code-review',
|
|
26
|
+
// Quality & discipline skills
|
|
27
|
+
'verification-before-completion': 'verification-before-completion',
|
|
28
|
+
'receiving-code-review': 'receiving-code-review',
|
|
29
|
+
// Execution skills
|
|
30
|
+
'dispatching-parallel-agents': 'dispatching-parallel-agents',
|
|
31
|
+
'executing-plans': 'executing-plans',
|
|
32
|
+
// Other skills
|
|
33
|
+
'spec-validation': 'spec-validation',
|
|
34
|
+
'using-superspec': 'using-superspec',
|
|
35
|
+
};
|
|
36
|
+
// CLAUDE.md managed block markers
|
|
37
|
+
const CLAUDE_MD_START = '<!-- SUPERSPEC:START -->';
|
|
38
|
+
const CLAUDE_MD_END = '<!-- SUPERSPEC:END -->';
|
|
39
|
+
// CLAUDE.md managed content
|
|
40
|
+
const CLAUDE_MD_CONTENT = `${CLAUDE_MD_START}
|
|
41
|
+
# SuperSpec Instructions
|
|
42
|
+
|
|
43
|
+
This project uses SuperSpec for spec-driven development with TDD discipline.
|
|
44
|
+
|
|
45
|
+
## Quick Reference
|
|
46
|
+
|
|
47
|
+
| Command | Description |
|
|
48
|
+
|---------|-------------|
|
|
49
|
+
| \`/superspec:kickoff\` | **Fast track**: brainstorm + validate + plan in one session |
|
|
50
|
+
| \`/superspec:brainstorm\` | **Full workflow**: progressive design (Explore → Propose → Spec) |
|
|
51
|
+
| \`superspec validate [id]\` | Validate specifications (CLI) |
|
|
52
|
+
| \`/superspec:plan\` | Create TDD implementation plan (after brainstorm) |
|
|
53
|
+
| \`/superspec:execute\` | Execute with subagent-driven TDD |
|
|
54
|
+
| \`/superspec:verify\` | Verify implementation matches specs |
|
|
55
|
+
| \`/superspec:finish-branch\` | Complete branch (merge/PR) |
|
|
56
|
+
| \`/superspec:archive\` | Archive changes |
|
|
57
|
+
|
|
58
|
+
## Four Iron Rules
|
|
59
|
+
|
|
60
|
+
1. **TDD Rule**: No production code without a failing test first
|
|
61
|
+
2. **Spec Rule**: Specs are truth. Changes are proposals.
|
|
62
|
+
3. **SuperSpec Rule**: Every Scenario becomes a test. Every test traces to a Scenario.
|
|
63
|
+
4. **Verification Rule**: No completion claims without fresh verification evidence
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
\`\`\`
|
|
68
|
+
Fast track: /superspec:kickoff → execute → verify → finish-branch → archive
|
|
69
|
+
Full workflow: brainstorm → validate → plan → execute → verify → finish-branch → archive
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
Use \`/superspec:kickoff\` for quick features or \`/superspec:brainstorm\` for larger changes.
|
|
73
|
+
|
|
74
|
+
Keep this managed block so \`superspec init\` can refresh the instructions.
|
|
75
|
+
${CLAUDE_MD_END}`;
|
|
76
|
+
/**
|
|
77
|
+
* Update CLAUDE.md with SuperSpec managed block
|
|
78
|
+
* - If no CLAUDE.md exists, create it
|
|
79
|
+
* - If CLAUDE.md exists without markers, prepend the block
|
|
80
|
+
* - If CLAUDE.md exists with markers, replace only the marked section
|
|
81
|
+
*/
|
|
82
|
+
function updateClaudeMd(projectPath) {
|
|
83
|
+
const claudeMdPath = join(projectPath, 'CLAUDE.md');
|
|
84
|
+
if (!existsSync(claudeMdPath)) {
|
|
85
|
+
// Create new CLAUDE.md
|
|
86
|
+
writeFileSync(claudeMdPath, CLAUDE_MD_CONTENT + '\n');
|
|
87
|
+
return { action: 'created' };
|
|
88
|
+
}
|
|
89
|
+
const existingContent = readFileSync(claudeMdPath, 'utf-8');
|
|
90
|
+
// Check if markers exist
|
|
91
|
+
const startIndex = existingContent.indexOf(CLAUDE_MD_START);
|
|
92
|
+
const endIndex = existingContent.indexOf(CLAUDE_MD_END);
|
|
93
|
+
if (startIndex !== -1 && endIndex !== -1 && endIndex > startIndex) {
|
|
94
|
+
// Replace existing managed block
|
|
95
|
+
const before = existingContent.substring(0, startIndex);
|
|
96
|
+
const after = existingContent.substring(endIndex + CLAUDE_MD_END.length);
|
|
97
|
+
const newContent = before + CLAUDE_MD_CONTENT + after;
|
|
98
|
+
if (newContent === existingContent) {
|
|
99
|
+
return { action: 'unchanged' };
|
|
100
|
+
}
|
|
101
|
+
writeFileSync(claudeMdPath, newContent);
|
|
102
|
+
return { action: 'updated' };
|
|
103
|
+
}
|
|
104
|
+
// No markers found, prepend the block
|
|
105
|
+
const newContent = CLAUDE_MD_CONTENT + '\n\n' + existingContent;
|
|
106
|
+
writeFileSync(claudeMdPath, newContent);
|
|
107
|
+
return { action: 'updated' };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Install SuperSpec skills to global Claude Code skills directory
|
|
111
|
+
*/
|
|
112
|
+
async function installGlobalSkills() {
|
|
113
|
+
const globalSkillsDir = join(homedir(), '.claude', 'skills');
|
|
114
|
+
const result = { installed: [], skipped: [], failed: [] };
|
|
115
|
+
// Create global skills directory if it doesn't exist
|
|
116
|
+
if (!existsSync(globalSkillsDir)) {
|
|
117
|
+
mkdirSync(globalSkillsDir, { recursive: true });
|
|
118
|
+
}
|
|
119
|
+
// Check if skills source exists
|
|
120
|
+
if (!existsSync(SKILLS_SOURCE)) {
|
|
121
|
+
console.log(` ${ICONS.warning} ${PALETTE.warning('Skills directory not found at ' + SKILLS_SOURCE)}`);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
// Install each skill
|
|
125
|
+
for (const [globalName, sourceName] of Object.entries(SKILL_MAPPINGS)) {
|
|
126
|
+
const sourcePath = join(SKILLS_SOURCE, sourceName);
|
|
127
|
+
const targetPath = join(globalSkillsDir, globalName);
|
|
128
|
+
try {
|
|
129
|
+
// Skip if source doesn't exist
|
|
130
|
+
if (!existsSync(sourcePath)) {
|
|
131
|
+
result.skipped.push(globalName);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
// Check if already linked correctly
|
|
135
|
+
if (existsSync(targetPath)) {
|
|
136
|
+
try {
|
|
137
|
+
const existingLink = readlinkSync(targetPath);
|
|
138
|
+
if (existingLink === sourcePath) {
|
|
139
|
+
result.skipped.push(globalName);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Not a symlink, skip
|
|
145
|
+
result.skipped.push(globalName);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Create symlink
|
|
150
|
+
symlinkSync(sourcePath, targetPath);
|
|
151
|
+
result.installed.push(globalName);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
result.failed.push(globalName);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
export async function initCommand(path, options) {
|
|
160
|
+
const projectPath = resolve(path);
|
|
161
|
+
const superspecPath = join(projectPath, 'superspec');
|
|
162
|
+
// Display banner
|
|
163
|
+
console.log(BANNER);
|
|
164
|
+
// Check if already initialized
|
|
165
|
+
if (existsSync(superspecPath) && !options.force) {
|
|
166
|
+
console.log(` ${ICONS.warning} ${PALETTE.warning('SuperSpec already initialized in this directory.')}`);
|
|
167
|
+
console.log();
|
|
168
|
+
const proceed = await confirmPrompt({
|
|
169
|
+
message: 'Reinitialize? This will overwrite existing configuration.',
|
|
170
|
+
default: false,
|
|
171
|
+
});
|
|
172
|
+
if (!proceed) {
|
|
173
|
+
console.log(` ${PALETTE.dim('Initialization cancelled.')}`);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Start initialization
|
|
178
|
+
console.log();
|
|
179
|
+
const spinner = startSpinner('Creating SuperSpec structure...');
|
|
180
|
+
try {
|
|
181
|
+
// Create directory structure
|
|
182
|
+
const directories = [
|
|
183
|
+
'superspec',
|
|
184
|
+
'superspec/specs',
|
|
185
|
+
'superspec/changes',
|
|
186
|
+
'superspec/changes/archive',
|
|
187
|
+
];
|
|
188
|
+
for (const dir of directories) {
|
|
189
|
+
const dirPath = join(projectPath, dir);
|
|
190
|
+
if (!existsSync(dirPath)) {
|
|
191
|
+
mkdirSync(dirPath, { recursive: true });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Create .gitkeep files
|
|
195
|
+
const gitkeeps = [
|
|
196
|
+
'superspec/specs/.gitkeep',
|
|
197
|
+
'superspec/changes/.gitkeep',
|
|
198
|
+
'superspec/changes/archive/.gitkeep',
|
|
199
|
+
];
|
|
200
|
+
for (const gitkeep of gitkeeps) {
|
|
201
|
+
const gitkeepPath = join(projectPath, gitkeep);
|
|
202
|
+
if (!existsSync(gitkeepPath)) {
|
|
203
|
+
writeFileSync(gitkeepPath, '');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Create project config
|
|
207
|
+
const configPath = join(superspecPath, 'project.yaml');
|
|
208
|
+
const projectName = path === '.' ? 'my-project' : path;
|
|
209
|
+
const config = `# SuperSpec Project Configuration
|
|
210
|
+
version: 1
|
|
211
|
+
|
|
212
|
+
# Project settings
|
|
213
|
+
project:
|
|
214
|
+
name: ${projectName}
|
|
215
|
+
|
|
216
|
+
# Workflow settings
|
|
217
|
+
workflow:
|
|
218
|
+
require_design: true
|
|
219
|
+
require_validation: true
|
|
220
|
+
strict_mode: false
|
|
221
|
+
|
|
222
|
+
# Git settings
|
|
223
|
+
git:
|
|
224
|
+
worktree_dir: .worktrees
|
|
225
|
+
branch_prefix: feature/
|
|
226
|
+
|
|
227
|
+
# Test settings
|
|
228
|
+
test:
|
|
229
|
+
command: npm test
|
|
230
|
+
coverage: false
|
|
231
|
+
`;
|
|
232
|
+
writeFileSync(configPath, config);
|
|
233
|
+
spinnerSuccess(spinner, 'SuperSpec structure created');
|
|
234
|
+
// Install global skills for Claude Code
|
|
235
|
+
const skillsInstalled = await installGlobalSkills();
|
|
236
|
+
// Update CLAUDE.md
|
|
237
|
+
const claudeMdResult = updateClaudeMd(projectPath);
|
|
238
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
239
|
+
// SUCCESS OUTPUT
|
|
240
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
241
|
+
console.log();
|
|
242
|
+
console.log(` ${ICONS.success} ${PALETTE.bold(PALETTE.success('Initialization complete!'))}`);
|
|
243
|
+
// Directory Structure Section
|
|
244
|
+
console.log(sectionHeader('Directory Structure', '📁'));
|
|
245
|
+
console.log();
|
|
246
|
+
displayTree([
|
|
247
|
+
{
|
|
248
|
+
name: PALETTE.primaryBright('superspec/'),
|
|
249
|
+
icon: PALETTE.primary('◆'),
|
|
250
|
+
children: [
|
|
251
|
+
{ name: `${PALETTE.primary('specs/')} ${PALETTE.dim('Main specifications')}`, icon: PALETTE.dim('○') },
|
|
252
|
+
{ name: `${PALETTE.primary('changes/')} ${PALETTE.dim('Active changes')}`, icon: PALETTE.dim('○') },
|
|
253
|
+
{ name: `${PALETTE.dim(' └─ archive/')} ${PALETTE.dim('Completed changes')}`, icon: ' ' },
|
|
254
|
+
{ name: `${PALETTE.white('project.yaml')} ${PALETTE.dim('Configuration')}`, icon: PALETTE.dim('○') },
|
|
255
|
+
]
|
|
256
|
+
}
|
|
257
|
+
]);
|
|
258
|
+
// Skills Section
|
|
259
|
+
console.log(sectionHeader('Claude Code Skills', '🔧'));
|
|
260
|
+
console.log();
|
|
261
|
+
if (skillsInstalled.installed.length > 0) {
|
|
262
|
+
const installedList = skillsInstalled.installed.slice(0, 5).join(', ');
|
|
263
|
+
const more = skillsInstalled.installed.length > 5
|
|
264
|
+
? PALETTE.dim(` +${skillsInstalled.installed.length - 5} more`)
|
|
265
|
+
: '';
|
|
266
|
+
console.log(` ${ICONS.success} ${PALETTE.success('Installed:')} ${installedList}${more}`);
|
|
267
|
+
}
|
|
268
|
+
if (skillsInstalled.skipped.length > 0) {
|
|
269
|
+
console.log(` ${ICONS.info} ${PALETTE.info('Already installed:')} ${skillsInstalled.skipped.length} skills`);
|
|
270
|
+
}
|
|
271
|
+
if (skillsInstalled.failed.length > 0) {
|
|
272
|
+
console.log(` ${ICONS.warning} ${PALETTE.warning('Failed:')} ${skillsInstalled.failed.join(', ')}`);
|
|
273
|
+
}
|
|
274
|
+
console.log();
|
|
275
|
+
console.log(` ${PALETTE.dim('Location:')} ${PALETTE.muted('~/.claude/skills/')}`);
|
|
276
|
+
// CLAUDE.md Section
|
|
277
|
+
console.log(sectionHeader('CLAUDE.md', '📄'));
|
|
278
|
+
console.log();
|
|
279
|
+
if (claudeMdResult.action === 'created') {
|
|
280
|
+
console.log(` ${ICONS.success} ${PALETTE.success('Created')} CLAUDE.md with SuperSpec instructions`);
|
|
281
|
+
}
|
|
282
|
+
else if (claudeMdResult.action === 'updated') {
|
|
283
|
+
console.log(` ${ICONS.success} ${PALETTE.success('Updated')} SuperSpec block in CLAUDE.md`);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
console.log(` ${ICONS.info} ${PALETTE.info('Already up to date')}`);
|
|
287
|
+
}
|
|
288
|
+
console.log();
|
|
289
|
+
console.log(` ${PALETTE.dim('Managed block preserved between:')}`);
|
|
290
|
+
console.log(` ${PALETTE.dark('<!-- SUPERSPEC:START --> ... <!-- SUPERSPEC:END -->')}`);
|
|
291
|
+
// Next Steps Section
|
|
292
|
+
console.log(sectionHeader('Next Steps', '🚀'));
|
|
293
|
+
console.log();
|
|
294
|
+
displayCommand('/superspec:kickoff', 'Fast-track a new feature');
|
|
295
|
+
displayCommand('/superspec:brainstorm', 'Progressive design for larger changes');
|
|
296
|
+
displayCommand('superspec view', 'View the project dashboard');
|
|
297
|
+
console.log();
|
|
298
|
+
console.log(` ${PALETTE.accent('💡')} ${PALETTE.dim('Use Claude Code skills to brainstorm and design your changes!')}`);
|
|
299
|
+
console.log();
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
spinnerFail(spinner, 'Failed to initialize SuperSpec');
|
|
303
|
+
throw error;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAeA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrE"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import matter from 'gray-matter';
|
|
4
|
+
import { PALETTE, ICONS, commandHeader, sectionHeader, createProgressBar, isInteractive, selectPrompt, displayStats, displayCommand, } from '../ui/index.js';
|
|
5
|
+
export async function listCommand(options) {
|
|
6
|
+
const superspecPath = join(process.cwd(), 'superspec');
|
|
7
|
+
if (!existsSync(superspecPath)) {
|
|
8
|
+
console.log(` ${ICONS.error} ${PALETTE.error('SuperSpec not initialized.')}`);
|
|
9
|
+
console.log(` ${PALETTE.dim('Run:')} ${PALETTE.accent('superspec init')}`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
if (options.specs) {
|
|
13
|
+
await listSpecs(superspecPath, options);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
await listChanges(superspecPath, options);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function listChanges(superspecPath, options) {
|
|
20
|
+
const changesPath = join(superspecPath, 'changes');
|
|
21
|
+
const archivePath = join(changesPath, 'archive');
|
|
22
|
+
const changes = [];
|
|
23
|
+
// List active changes
|
|
24
|
+
if (existsSync(changesPath)) {
|
|
25
|
+
const entries = readdirSync(changesPath, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (entry.isDirectory() && entry.name !== 'archive') {
|
|
28
|
+
const changePath = join(changesPath, entry.name);
|
|
29
|
+
changes.push(getChangeInfo(entry.name, changePath, 'active'));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// List archived changes if requested
|
|
34
|
+
if (options.archived && existsSync(archivePath)) {
|
|
35
|
+
const entries = readdirSync(archivePath, { withFileTypes: true });
|
|
36
|
+
for (const entry of entries) {
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
const changePath = join(archivePath, entry.name);
|
|
39
|
+
changes.push(getChangeInfo(entry.name, changePath, 'archived'));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (options.json) {
|
|
44
|
+
console.log(JSON.stringify(changes, null, 2));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Header
|
|
48
|
+
console.log(commandHeader('list', 'View all changes and their status'));
|
|
49
|
+
// Group by status
|
|
50
|
+
const active = changes.filter(c => c.status === 'active');
|
|
51
|
+
const archived = changes.filter(c => c.status === 'archived');
|
|
52
|
+
if (changes.length === 0) {
|
|
53
|
+
console.log();
|
|
54
|
+
console.log(` ${PALETTE.dim('No changes found.')}`);
|
|
55
|
+
console.log();
|
|
56
|
+
displayCommand('/superspec:brainstorm', 'Start a new change');
|
|
57
|
+
console.log();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Stats summary
|
|
61
|
+
console.log();
|
|
62
|
+
displayStats([
|
|
63
|
+
{ label: 'Active', value: active.length, icon: PALETTE.success('●') },
|
|
64
|
+
{ label: 'Archived', value: archived.length, icon: PALETTE.dim('○') },
|
|
65
|
+
]);
|
|
66
|
+
// Active Changes
|
|
67
|
+
if (active.length > 0) {
|
|
68
|
+
console.log(sectionHeader('Active Changes', '●'));
|
|
69
|
+
console.log();
|
|
70
|
+
for (const change of active) {
|
|
71
|
+
printChangeCard(change);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Archived Changes
|
|
75
|
+
if (archived.length > 0 && options.archived) {
|
|
76
|
+
console.log(sectionHeader('Archived Changes', '○'));
|
|
77
|
+
console.log();
|
|
78
|
+
for (const change of archived) {
|
|
79
|
+
printChangeCard(change);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Interactive mode - offer to select
|
|
83
|
+
if (isInteractive(options) && active.length > 0) {
|
|
84
|
+
console.log(` ${PALETTE.subtle('─'.repeat(55))}`);
|
|
85
|
+
console.log();
|
|
86
|
+
const viewChange = await selectPrompt({
|
|
87
|
+
message: 'Select a change to view details:',
|
|
88
|
+
choices: [
|
|
89
|
+
...active.map(c => ({
|
|
90
|
+
name: `${PALETTE.primary('›')} ${c.id}${c.title ? ` - ${c.title}` : ''}`,
|
|
91
|
+
value: c.id,
|
|
92
|
+
})),
|
|
93
|
+
{ name: PALETTE.dim(' (Cancel)'), value: '' },
|
|
94
|
+
],
|
|
95
|
+
});
|
|
96
|
+
if (viewChange) {
|
|
97
|
+
// Import and run show command
|
|
98
|
+
const { showCommand } = await import('./show.js');
|
|
99
|
+
await showCommand(viewChange, {});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
console.log();
|
|
103
|
+
}
|
|
104
|
+
function getChangeInfo(id, path, status) {
|
|
105
|
+
const info = {
|
|
106
|
+
id,
|
|
107
|
+
status,
|
|
108
|
+
hasProposal: existsSync(join(path, 'proposal.md')),
|
|
109
|
+
hasDesign: existsSync(join(path, 'design.md')),
|
|
110
|
+
hasSpecs: existsSync(join(path, 'specs')),
|
|
111
|
+
hasPlan: existsSync(join(path, 'plan.md')),
|
|
112
|
+
path,
|
|
113
|
+
};
|
|
114
|
+
// Try to get title from proposal
|
|
115
|
+
if (info.hasProposal) {
|
|
116
|
+
try {
|
|
117
|
+
const content = readFileSync(join(path, 'proposal.md'), 'utf-8');
|
|
118
|
+
const { data } = matter(content);
|
|
119
|
+
if (data['title']) {
|
|
120
|
+
info.title = data['title'];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore parsing errors
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Get task progress
|
|
128
|
+
const tasksPath = join(path, 'tasks.md');
|
|
129
|
+
if (existsSync(tasksPath)) {
|
|
130
|
+
try {
|
|
131
|
+
const content = readFileSync(tasksPath, 'utf-8');
|
|
132
|
+
const total = (content.match(/^- \[[ x]\]/gm) ?? []).length;
|
|
133
|
+
const completed = (content.match(/^- \[x\]/gm) ?? []).length;
|
|
134
|
+
info.taskProgress = { completed, total };
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Ignore
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return info;
|
|
141
|
+
}
|
|
142
|
+
function printChangeCard(change) {
|
|
143
|
+
// Status icon
|
|
144
|
+
const statusIcon = change.status === 'archived'
|
|
145
|
+
? PALETTE.dim('○')
|
|
146
|
+
: PALETTE.success('●');
|
|
147
|
+
// Document indicators
|
|
148
|
+
const docs = [
|
|
149
|
+
change.hasProposal ? PALETTE.success('P') : PALETTE.dark('P'),
|
|
150
|
+
change.hasDesign ? PALETTE.success('D') : PALETTE.dark('D'),
|
|
151
|
+
change.hasSpecs ? PALETTE.success('S') : PALETTE.dark('S'),
|
|
152
|
+
change.hasPlan ? PALETTE.success('L') : PALETTE.dark('L'),
|
|
153
|
+
].join('');
|
|
154
|
+
// Title
|
|
155
|
+
const title = change.title
|
|
156
|
+
? PALETTE.dim(change.title.length > 40 ? change.title.slice(0, 37) + '…' : change.title)
|
|
157
|
+
: '';
|
|
158
|
+
// Card layout
|
|
159
|
+
console.log(` ${PALETTE.subtle('┌─')} ${statusIcon} ${PALETTE.bold(PALETTE.white(change.id))}`);
|
|
160
|
+
if (title) {
|
|
161
|
+
console.log(` ${PALETTE.subtle('│')} ${title}`);
|
|
162
|
+
}
|
|
163
|
+
console.log(` ${PALETTE.subtle('│')} ${PALETTE.dim('Docs:')} [${docs}] ${PALETTE.dark('P=Proposal D=Design S=Specs L=Plan')}`);
|
|
164
|
+
// Progress bar if has tasks
|
|
165
|
+
if (change.taskProgress && change.taskProgress.total > 0) {
|
|
166
|
+
const { completed, total } = change.taskProgress;
|
|
167
|
+
const bar = createProgressBar(completed, total, { width: 15 });
|
|
168
|
+
console.log(` ${PALETTE.subtle('│')} ${PALETTE.dim('Progress:')} ${bar}`);
|
|
169
|
+
}
|
|
170
|
+
console.log(` ${PALETTE.subtle('└─')}`);
|
|
171
|
+
console.log();
|
|
172
|
+
}
|
|
173
|
+
async function listSpecs(superspecPath, options) {
|
|
174
|
+
const specsPath = join(superspecPath, 'specs');
|
|
175
|
+
const specs = [];
|
|
176
|
+
if (existsSync(specsPath)) {
|
|
177
|
+
const entries = readdirSync(specsPath, { withFileTypes: true });
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
if (entry.isDirectory()) {
|
|
180
|
+
const specPath = join(specsPath, entry.name, 'spec.md');
|
|
181
|
+
if (existsSync(specPath)) {
|
|
182
|
+
specs.push(getSpecInfo(entry.name, specPath));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (options.json) {
|
|
188
|
+
console.log(JSON.stringify(specs, null, 2));
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// Header
|
|
192
|
+
console.log(commandHeader('list --specs', 'View all main specifications'));
|
|
193
|
+
if (specs.length === 0) {
|
|
194
|
+
console.log();
|
|
195
|
+
console.log(` ${PALETTE.dim('No specs found.')}`);
|
|
196
|
+
console.log();
|
|
197
|
+
console.log(` ${PALETTE.accent('💡')} ${PALETTE.dim('Archive a change to create main specs.')}`);
|
|
198
|
+
console.log();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Stats
|
|
202
|
+
const totalReqs = specs.reduce((sum, s) => sum + s.requirementCount, 0);
|
|
203
|
+
const totalScenarios = specs.reduce((sum, s) => sum + s.scenarioCount, 0);
|
|
204
|
+
console.log();
|
|
205
|
+
displayStats([
|
|
206
|
+
{ label: 'Specs', value: specs.length, icon: ICONS.spec },
|
|
207
|
+
{ label: 'Requirements', value: totalReqs, icon: PALETTE.primary('◆') },
|
|
208
|
+
{ label: 'Scenarios', value: totalScenarios, icon: PALETTE.accent('◆') },
|
|
209
|
+
]);
|
|
210
|
+
console.log(sectionHeader('Specifications'));
|
|
211
|
+
console.log();
|
|
212
|
+
for (const spec of specs) {
|
|
213
|
+
const purpose = spec.purpose
|
|
214
|
+
? PALETTE.dim(spec.purpose.length > 50 ? spec.purpose.slice(0, 47) + '…' : spec.purpose)
|
|
215
|
+
: '';
|
|
216
|
+
console.log(` ${PALETTE.subtle('┌─')} ${ICONS.spec} ${PALETTE.bold(PALETTE.primaryBright(spec.name))}`);
|
|
217
|
+
if (purpose) {
|
|
218
|
+
console.log(` ${PALETTE.subtle('│')} ${purpose}`);
|
|
219
|
+
}
|
|
220
|
+
console.log(` ${PALETTE.subtle('│')} ${PALETTE.success(String(spec.requirementCount))} requirements ${PALETTE.dim('·')} ${PALETTE.info(String(spec.scenarioCount))} scenarios`);
|
|
221
|
+
console.log(` ${PALETTE.subtle('└─')}`);
|
|
222
|
+
console.log();
|
|
223
|
+
}
|
|
224
|
+
// Interactive selection
|
|
225
|
+
if (isInteractive(options) && specs.length > 0) {
|
|
226
|
+
console.log(` ${PALETTE.subtle('─'.repeat(55))}`);
|
|
227
|
+
console.log();
|
|
228
|
+
const viewSpec = await selectPrompt({
|
|
229
|
+
message: 'Select a spec to view details:',
|
|
230
|
+
choices: [
|
|
231
|
+
...specs.map(s => ({
|
|
232
|
+
name: `${PALETTE.primary('›')} ${s.name} (${s.requirementCount} req)`,
|
|
233
|
+
value: s.name,
|
|
234
|
+
})),
|
|
235
|
+
{ name: PALETTE.dim(' (Cancel)'), value: '' },
|
|
236
|
+
],
|
|
237
|
+
});
|
|
238
|
+
if (viewSpec) {
|
|
239
|
+
const { showCommand } = await import('./show.js');
|
|
240
|
+
await showCommand(viewSpec, {});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
console.log();
|
|
244
|
+
}
|
|
245
|
+
function getSpecInfo(name, path) {
|
|
246
|
+
const info = {
|
|
247
|
+
name,
|
|
248
|
+
requirementCount: 0,
|
|
249
|
+
scenarioCount: 0,
|
|
250
|
+
path,
|
|
251
|
+
};
|
|
252
|
+
try {
|
|
253
|
+
const content = readFileSync(path, 'utf-8');
|
|
254
|
+
// Count requirements and scenarios
|
|
255
|
+
info.requirementCount = (content.match(/^### Requirement:/gm) ?? []).length;
|
|
256
|
+
info.scenarioCount = (content.match(/^#### Scenario:/gm) ?? []).length;
|
|
257
|
+
// Get purpose
|
|
258
|
+
const purposeMatch = content.match(/## Purpose\s*\n\s*(.+)/);
|
|
259
|
+
if (purposeMatch?.[1]) {
|
|
260
|
+
info.purpose = purposeMatch[1].trim();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Ignore parsing errors
|
|
265
|
+
}
|
|
266
|
+
return info;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=list.js.map
|