@specsafe/cli 0.8.0 → 2.0.2
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/README.md +100 -279
- package/canonical/personas/bolt-zane.md +29 -0
- package/canonical/personas/forge-reva.md +29 -0
- package/canonical/personas/herald-cass.md +30 -0
- package/canonical/personas/mason-kai.md +30 -0
- package/canonical/personas/scout-elena.md +27 -0
- package/canonical/personas/warden-lyra.md +30 -0
- package/canonical/rules/.cursorrules.mdc +53 -0
- package/canonical/rules/.rules +48 -0
- package/canonical/rules/AGENTS.md +48 -0
- package/canonical/rules/CLAUDE.md +48 -0
- package/canonical/rules/CONVENTIONS.md +41 -0
- package/canonical/rules/GEMINI.md +50 -0
- package/canonical/rules/continue-config.yaml +5 -0
- package/canonical/skills/specsafe-archive/SKILL.md +63 -0
- package/canonical/skills/specsafe-code/SKILL.md +7 -0
- package/canonical/skills/specsafe-code/workflow.md +212 -0
- package/canonical/skills/specsafe-complete/SKILL.md +7 -0
- package/canonical/skills/specsafe-complete/workflow.md +130 -0
- package/canonical/skills/specsafe-doctor/SKILL.md +103 -0
- package/canonical/skills/specsafe-explore/SKILL.md +7 -0
- package/canonical/skills/specsafe-explore/workflow.md +100 -0
- package/canonical/skills/specsafe-init/SKILL.md +119 -0
- package/canonical/skills/specsafe-new/SKILL.md +7 -0
- package/canonical/skills/specsafe-new/workflow.md +156 -0
- package/canonical/skills/specsafe-qa/SKILL.md +7 -0
- package/canonical/skills/specsafe-qa/workflow.md +223 -0
- package/canonical/skills/specsafe-spec/SKILL.md +7 -0
- package/canonical/skills/specsafe-spec/workflow.md +158 -0
- package/canonical/skills/specsafe-status/SKILL.md +77 -0
- package/canonical/skills/specsafe-test/SKILL.md +7 -0
- package/canonical/skills/specsafe-test/workflow.md +210 -0
- package/canonical/skills/specsafe-verify/SKILL.md +7 -0
- package/canonical/skills/specsafe-verify/workflow.md +143 -0
- package/canonical/templates/project-state-template.md +33 -0
- package/canonical/templates/qa-report-template.md +55 -0
- package/canonical/templates/spec-template.md +52 -0
- package/canonical/templates/specsafe-config-template.json +10 -0
- package/generators/dist/adapters/aider.d.ts +2 -0
- package/generators/dist/adapters/aider.js +23 -0
- package/generators/dist/adapters/aider.js.map +1 -0
- package/generators/dist/adapters/antigravity.d.ts +2 -0
- package/generators/dist/adapters/antigravity.js +33 -0
- package/generators/dist/adapters/antigravity.js.map +1 -0
- package/generators/dist/adapters/claude-code.d.ts +2 -0
- package/generators/dist/adapters/claude-code.js +31 -0
- package/generators/dist/adapters/claude-code.js.map +1 -0
- package/generators/dist/adapters/continue.d.ts +2 -0
- package/generators/dist/adapters/continue.js +33 -0
- package/generators/dist/adapters/continue.js.map +1 -0
- package/generators/dist/adapters/cursor.d.ts +2 -0
- package/generators/dist/adapters/cursor.js +32 -0
- package/generators/dist/adapters/cursor.js.map +1 -0
- package/generators/dist/adapters/gemini.d.ts +2 -0
- package/generators/dist/adapters/gemini.js +36 -0
- package/generators/dist/adapters/gemini.js.map +1 -0
- package/generators/dist/adapters/index.d.ts +13 -0
- package/generators/dist/adapters/index.js +29 -0
- package/generators/dist/adapters/index.js.map +1 -0
- package/generators/dist/adapters/opencode.d.ts +2 -0
- package/generators/dist/adapters/opencode.js +32 -0
- package/generators/dist/adapters/opencode.js.map +1 -0
- package/generators/dist/adapters/types.d.ts +49 -0
- package/generators/dist/adapters/types.js +14 -0
- package/generators/dist/adapters/types.js.map +1 -0
- package/generators/dist/adapters/utils.d.ts +12 -0
- package/generators/dist/adapters/utils.js +68 -0
- package/generators/dist/adapters/utils.js.map +1 -0
- package/generators/dist/adapters/zed.d.ts +2 -0
- package/generators/dist/adapters/zed.js +31 -0
- package/generators/dist/adapters/zed.js.map +1 -0
- package/generators/dist/doctor.d.ts +10 -0
- package/generators/dist/doctor.js +123 -0
- package/generators/dist/doctor.js.map +1 -0
- package/generators/dist/index.d.ts +2 -0
- package/generators/dist/index.js +45 -0
- package/generators/dist/index.js.map +1 -0
- package/generators/dist/init.d.ts +9 -0
- package/generators/dist/init.js +167 -0
- package/generators/dist/init.js.map +1 -0
- package/generators/dist/install.d.ts +5 -0
- package/generators/dist/install.js +66 -0
- package/generators/dist/install.js.map +1 -0
- package/generators/dist/registry.d.ts +3 -0
- package/generators/dist/registry.js +8 -0
- package/generators/dist/registry.js.map +1 -0
- package/generators/dist/update.d.ts +5 -0
- package/generators/dist/update.js +40 -0
- package/generators/dist/update.js.map +1 -0
- package/package.json +31 -27
- package/dist/commands/apply.d.ts +0 -3
- package/dist/commands/apply.d.ts.map +0 -1
- package/dist/commands/apply.js +0 -182
- package/dist/commands/apply.js.map +0 -1
- package/dist/commands/archive.d.ts +0 -3
- package/dist/commands/archive.d.ts.map +0 -1
- package/dist/commands/archive.js +0 -99
- package/dist/commands/archive.js.map +0 -1
- package/dist/commands/capsule.d.ts +0 -8
- package/dist/commands/capsule.d.ts.map +0 -1
- package/dist/commands/capsule.js +0 -466
- package/dist/commands/capsule.js.map +0 -1
- package/dist/commands/complete.d.ts +0 -3
- package/dist/commands/complete.d.ts.map +0 -1
- package/dist/commands/complete.js +0 -140
- package/dist/commands/complete.js.map +0 -1
- package/dist/commands/constitution.d.ts +0 -3
- package/dist/commands/constitution.d.ts.map +0 -1
- package/dist/commands/constitution.js +0 -192
- package/dist/commands/constitution.js.map +0 -1
- package/dist/commands/create.d.ts +0 -10
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -120
- package/dist/commands/create.js.map +0 -1
- package/dist/commands/delta.d.ts +0 -3
- package/dist/commands/delta.d.ts.map +0 -1
- package/dist/commands/delta.js +0 -82
- package/dist/commands/delta.js.map +0 -1
- package/dist/commands/diff.d.ts +0 -3
- package/dist/commands/diff.d.ts.map +0 -1
- package/dist/commands/diff.js +0 -102
- package/dist/commands/diff.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -3
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -204
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/done.d.ts +0 -3
- package/dist/commands/done.d.ts.map +0 -1
- package/dist/commands/done.js +0 -237
- package/dist/commands/done.js.map +0 -1
- package/dist/commands/explore.d.ts +0 -3
- package/dist/commands/explore.d.ts.map +0 -1
- package/dist/commands/explore.js +0 -236
- package/dist/commands/explore.js.map +0 -1
- package/dist/commands/export.d.ts +0 -7
- package/dist/commands/export.d.ts.map +0 -1
- package/dist/commands/export.js +0 -179
- package/dist/commands/export.js.map +0 -1
- package/dist/commands/extend.d.ts +0 -6
- package/dist/commands/extend.d.ts.map +0 -1
- package/dist/commands/extend.js +0 -167
- package/dist/commands/extend.js.map +0 -1
- package/dist/commands/init-old.d.ts +0 -3
- package/dist/commands/init-old.d.ts.map +0 -1
- package/dist/commands/init-old.js +0 -146
- package/dist/commands/init-old.js.map +0 -1
- package/dist/commands/init.d.ts +0 -3
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -298
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.d.ts +0 -3
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js +0 -122
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -3
- package/dist/commands/memory.d.ts.map +0 -1
- package/dist/commands/memory.js +0 -166
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/new.d.ts +0 -3
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -508
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/qa.d.ts +0 -3
- package/dist/commands/qa.d.ts.map +0 -1
- package/dist/commands/qa.js +0 -179
- package/dist/commands/qa.js.map +0 -1
- package/dist/commands/rules.d.ts +0 -6
- package/dist/commands/rules.d.ts.map +0 -1
- package/dist/commands/rules.js +0 -232
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/shard.d.ts +0 -6
- package/dist/commands/shard.d.ts.map +0 -1
- package/dist/commands/shard.js +0 -199
- package/dist/commands/shard.js.map +0 -1
- package/dist/commands/spec.d.ts +0 -3
- package/dist/commands/spec.d.ts.map +0 -1
- package/dist/commands/spec.js +0 -302
- package/dist/commands/spec.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -47
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/test-apply.d.ts +0 -3
- package/dist/commands/test-apply.d.ts.map +0 -1
- package/dist/commands/test-apply.js +0 -228
- package/dist/commands/test-apply.js.map +0 -1
- package/dist/commands/test-create.d.ts +0 -3
- package/dist/commands/test-create.d.ts.map +0 -1
- package/dist/commands/test-create.js +0 -183
- package/dist/commands/test-create.js.map +0 -1
- package/dist/commands/test-guide.d.ts +0 -3
- package/dist/commands/test-guide.d.ts.map +0 -1
- package/dist/commands/test-guide.js +0 -190
- package/dist/commands/test-guide.js.map +0 -1
- package/dist/commands/test-report.d.ts +0 -3
- package/dist/commands/test-report.d.ts.map +0 -1
- package/dist/commands/test-report.js +0 -196
- package/dist/commands/test-report.js.map +0 -1
- package/dist/commands/test-submit.d.ts +0 -6
- package/dist/commands/test-submit.d.ts.map +0 -1
- package/dist/commands/test-submit.js +0 -236
- package/dist/commands/test-submit.js.map +0 -1
- package/dist/commands/verify.d.ts +0 -3
- package/dist/commands/verify.d.ts.map +0 -1
- package/dist/commands/verify.js +0 -288
- package/dist/commands/verify.js.map +0 -1
- package/dist/config.d.ts +0 -23
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -44
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -129
- package/dist/index.js.map +0 -1
- package/dist/rules/downloader.d.ts +0 -40
- package/dist/rules/downloader.d.ts.map +0 -1
- package/dist/rules/downloader.js +0 -253
- package/dist/rules/downloader.js.map +0 -1
- package/dist/rules/index.d.ts +0 -8
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -8
- package/dist/rules/index.js.map +0 -1
- package/dist/rules/registry.d.ts +0 -45
- package/dist/rules/registry.d.ts.map +0 -1
- package/dist/rules/registry.js +0 -158
- package/dist/rules/registry.js.map +0 -1
- package/dist/rules/types.d.ts +0 -86
- package/dist/rules/types.d.ts.map +0 -1
- package/dist/rules/types.js +0 -6
- package/dist/rules/types.js.map +0 -1
- package/dist/utils/detectTools.d.ts +0 -15
- package/dist/utils/detectTools.d.ts.map +0 -1
- package/dist/utils/detectTools.js +0 -54
- package/dist/utils/detectTools.js.map +0 -1
- package/dist/utils/generateToolConfig.d.ts +0 -12
- package/dist/utils/generateToolConfig.d.ts.map +0 -1
- package/dist/utils/generateToolConfig.js +0 -1179
- package/dist/utils/generateToolConfig.js.map +0 -1
- package/dist/utils/testRunner.d.ts +0 -39
- package/dist/utils/testRunner.d.ts.map +0 -1
- package/dist/utils/testRunner.js +0 -325
- package/dist/utils/testRunner.js.map +0 -1
package/dist/commands/new.js
DELETED
|
@@ -1,508 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import ora from 'ora';
|
|
4
|
-
import { writeFile, mkdir, readdir } from 'fs/promises';
|
|
5
|
-
import { join, basename } from 'path';
|
|
6
|
-
import { Workflow, ProjectTracker, generateEARSTemplate, SteeringEngine, ProjectMemoryManager } from '@specsafe/core';
|
|
7
|
-
import { input, editor, select } from '@inquirer/prompts';
|
|
8
|
-
export const newCommand = new Command('new')
|
|
9
|
-
.description('Create a new spec with interactive PRD creation')
|
|
10
|
-
.argument('[name]', 'Spec name (kebab-case)')
|
|
11
|
-
.option('-d, --description <desc>', 'Spec description')
|
|
12
|
-
.option('-a, --author <author>', 'Author name', 'developer')
|
|
13
|
-
.option('-n, --dry-run', 'Preview changes without writing files')
|
|
14
|
-
.option('--skip-interactive', 'Skip interactive prompts and use defaults')
|
|
15
|
-
.option('--ears', 'Use EARS (Easy Approach to Requirements Syntax) template')
|
|
16
|
-
.action(async (name, options) => {
|
|
17
|
-
const spinner = ora('Creating new spec...').start();
|
|
18
|
-
try {
|
|
19
|
-
const workflow = new Workflow();
|
|
20
|
-
const tracker = new ProjectTracker(process.cwd());
|
|
21
|
-
// Generate spec ID with auto-increment to avoid collisions
|
|
22
|
-
const date = new Date().toISOString().split('T')[0].replace(/-/g, '');
|
|
23
|
-
// Check if specs/active directory exists
|
|
24
|
-
try {
|
|
25
|
-
await readdir('specs/active');
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
if (err.code === 'ENOENT') {
|
|
29
|
-
throw new Error('specs/active/ directory not found. Run "specsafe init" first to initialize the project.');
|
|
30
|
-
}
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
33
|
-
// List existing specs for today and find max suffix
|
|
34
|
-
let maxSuffix = 0;
|
|
35
|
-
try {
|
|
36
|
-
const files = await readdir('specs/active');
|
|
37
|
-
const todayPrefix = `SPEC-${date}-`;
|
|
38
|
-
for (const file of files) {
|
|
39
|
-
if (file.startsWith(todayPrefix) && file.endsWith('.md')) {
|
|
40
|
-
const suffix = parseInt(file.replace(todayPrefix, '').replace('.md', ''), 10);
|
|
41
|
-
if (!isNaN(suffix) && suffix > maxSuffix) {
|
|
42
|
-
maxSuffix = suffix;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Directory doesn't exist yet, that's fine
|
|
49
|
-
}
|
|
50
|
-
const id = `SPEC-${date}-${String(maxSuffix + 1).padStart(3, '0')}`;
|
|
51
|
-
// Load project memory for context
|
|
52
|
-
let steeringEngine = null;
|
|
53
|
-
let memoryContext = null;
|
|
54
|
-
try {
|
|
55
|
-
steeringEngine = new SteeringEngine(process.cwd());
|
|
56
|
-
await steeringEngine.initialize(basename(process.cwd()));
|
|
57
|
-
const analysis = steeringEngine.analyze({ currentSpec: id });
|
|
58
|
-
// Get top patterns
|
|
59
|
-
const patterns = steeringEngine.recommendPatterns(id, 3).map(p => ({
|
|
60
|
-
name: p.name,
|
|
61
|
-
usageCount: p.usageCount,
|
|
62
|
-
description: p.description
|
|
63
|
-
}));
|
|
64
|
-
memoryContext = {
|
|
65
|
-
patterns,
|
|
66
|
-
warnings: analysis.warnings,
|
|
67
|
-
recommendations: analysis.recommendations
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
// Memory not available yet, that's fine
|
|
72
|
-
}
|
|
73
|
-
// Interactive mode or defaults
|
|
74
|
-
spinner.stop();
|
|
75
|
-
// Get feature name if not provided
|
|
76
|
-
let featureName = name;
|
|
77
|
-
if (!featureName && !options.skipInteractive) {
|
|
78
|
-
featureName = await input({
|
|
79
|
-
message: 'Feature name (kebab-case):',
|
|
80
|
-
validate: (value) => value.length > 0 || 'Feature name is required'
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
else if (!featureName) {
|
|
84
|
-
featureName = 'untitled-feature';
|
|
85
|
-
}
|
|
86
|
-
// Display project memory context if available
|
|
87
|
-
if (memoryContext && (memoryContext.patterns.length > 0 || memoryContext.recommendations.length > 0)) {
|
|
88
|
-
console.log(chalk.blue('\n🧠 Project Memory Context\n'));
|
|
89
|
-
if (memoryContext.patterns.length > 0) {
|
|
90
|
-
console.log(chalk.cyan('Reusable patterns from project:'));
|
|
91
|
-
for (const pattern of memoryContext.patterns) {
|
|
92
|
-
const color = pattern.usageCount >= 3 ? chalk.green : chalk.yellow;
|
|
93
|
-
console.log(color(` • ${pattern.name} ${chalk.gray(`(${pattern.usageCount} specs)`)}`));
|
|
94
|
-
console.log(chalk.gray(` ${pattern.description}`));
|
|
95
|
-
}
|
|
96
|
-
console.log();
|
|
97
|
-
}
|
|
98
|
-
if (memoryContext.recommendations.length > 0) {
|
|
99
|
-
console.log(chalk.cyan('Recommendations:'));
|
|
100
|
-
for (const rec of memoryContext.recommendations.slice(0, 3)) {
|
|
101
|
-
const icon = rec.confidence === 'high' ? '✓' : rec.confidence === 'medium' ? '~' : '?';
|
|
102
|
-
console.log(chalk.gray(` ${icon} ${rec.message}`));
|
|
103
|
-
}
|
|
104
|
-
console.log();
|
|
105
|
-
}
|
|
106
|
-
if (memoryContext.warnings.length > 0) {
|
|
107
|
-
const highSeverity = memoryContext.warnings.filter(w => w.severity === 'high');
|
|
108
|
-
if (highSeverity.length > 0) {
|
|
109
|
-
console.log(chalk.yellow('⚠️ Warnings:'));
|
|
110
|
-
for (const warning of highSeverity.slice(0, 2)) {
|
|
111
|
-
console.log(chalk.yellow(` • ${warning.message}`));
|
|
112
|
-
}
|
|
113
|
-
console.log();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
console.log(chalk.gray('─'.repeat(63)));
|
|
117
|
-
}
|
|
118
|
-
// Interactive PRD + BRD creation
|
|
119
|
-
let problemStatement = '';
|
|
120
|
-
let userStories = '';
|
|
121
|
-
let acceptanceCriteria = '';
|
|
122
|
-
let technicalConsiderations = '';
|
|
123
|
-
let businessJustification = '';
|
|
124
|
-
let successMetrics = '';
|
|
125
|
-
let stakeholders = '';
|
|
126
|
-
let timeline = '';
|
|
127
|
-
let priority = 'P1';
|
|
128
|
-
if (!options.skipInteractive && !options.dryRun && !options.ears) {
|
|
129
|
-
console.log(chalk.blue('\n📋 Let\'s create a Product Requirements Document (PRD)\n'));
|
|
130
|
-
problemStatement = await editor({
|
|
131
|
-
message: 'Problem Statement (what problem does this solve?):',
|
|
132
|
-
default: '<!-- Describe the problem this feature solves -->'
|
|
133
|
-
});
|
|
134
|
-
userStories = await editor({
|
|
135
|
-
message: 'User Stories (who benefits and how?):',
|
|
136
|
-
default: `As a [type of user]
|
|
137
|
-
I want [some goal]
|
|
138
|
-
So that [some reason]
|
|
139
|
-
|
|
140
|
-
<!-- Add more user stories as needed -->`
|
|
141
|
-
});
|
|
142
|
-
acceptanceCriteria = await editor({
|
|
143
|
-
message: 'Acceptance Criteria (how do we know it\'s done?):',
|
|
144
|
-
default: `- [ ] Criterion 1
|
|
145
|
-
- [ ] Criterion 2
|
|
146
|
-
- [ ] Criterion 3`
|
|
147
|
-
});
|
|
148
|
-
technicalConsiderations = await editor({
|
|
149
|
-
message: 'Technical Requirements (dependencies, constraints, stack):',
|
|
150
|
-
default: `<!-- Technical constraints, dependencies, integrations needed -->
|
|
151
|
-
- Required APIs:
|
|
152
|
-
- Data storage:
|
|
153
|
-
- Security requirements:`
|
|
154
|
-
});
|
|
155
|
-
console.log(chalk.blue('\n💼 Now let\'s create a Business Requirements Document (BRD)\n'));
|
|
156
|
-
businessJustification = await editor({
|
|
157
|
-
message: 'Business Justification (why invest in this?):',
|
|
158
|
-
default: `<!-- Why should we build this? Business value, market need, strategic alignment -->`
|
|
159
|
-
});
|
|
160
|
-
successMetrics = await editor({
|
|
161
|
-
message: 'Success Metrics (how do we measure success?):',
|
|
162
|
-
default: `- Metric 1: [e.g., "Reduce processing time by 50%"]
|
|
163
|
-
- Metric 2: [e.g., "Increase user engagement by 20%"]
|
|
164
|
-
- Metric 3: [e.g., "Zero critical bugs in production"]`
|
|
165
|
-
});
|
|
166
|
-
stakeholders = await editor({
|
|
167
|
-
message: 'Stakeholders (who cares about this?):',
|
|
168
|
-
default: `| Role | Name/Team | Responsibility |
|
|
169
|
-
|------|-----------|----------------|
|
|
170
|
-
| Product Owner | | Decision maker |
|
|
171
|
-
| Engineering Lead | | Technical oversight |
|
|
172
|
-
| QA Lead | | Quality assurance |`
|
|
173
|
-
});
|
|
174
|
-
timeline = await editor({
|
|
175
|
-
message: 'Timeline (key milestones):',
|
|
176
|
-
default: `| Phase | Milestone | Target Date |
|
|
177
|
-
|-------|-----------|-------------|
|
|
178
|
-
| 1 | Requirements final | |
|
|
179
|
-
| 2 | Development complete | |
|
|
180
|
-
| 3 | QA complete | |
|
|
181
|
-
| 4 | Release | |`
|
|
182
|
-
});
|
|
183
|
-
priority = await select({
|
|
184
|
-
message: 'Priority:',
|
|
185
|
-
choices: [
|
|
186
|
-
{ name: 'P0 - Critical (blocks release)', value: 'P0' },
|
|
187
|
-
{ name: 'P1 - High (should have)', value: 'P1' },
|
|
188
|
-
{ name: 'P2 - Medium (nice to have)', value: 'P2' },
|
|
189
|
-
],
|
|
190
|
-
default: 'P1'
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
spinner.start('Creating spec files...');
|
|
194
|
-
// Create spec
|
|
195
|
-
const spec = workflow.createSpec(id, featureName, options.description || `Spec for ${featureName}`, options.author, basename(process.cwd()));
|
|
196
|
-
// Use EARS template if requested
|
|
197
|
-
let specContent;
|
|
198
|
-
if (options.ears) {
|
|
199
|
-
specContent = generateEARSTemplate(id, featureName, options.author, priority);
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
// Create PRD + BRD-enhanced spec content
|
|
203
|
-
specContent = `# ${featureName} Specification
|
|
204
|
-
|
|
205
|
-
**ID:** ${id}
|
|
206
|
-
**Status:** SPEC
|
|
207
|
-
**Created:** ${new Date().toISOString().split('T')[0]}
|
|
208
|
-
**Author:** ${options.author}
|
|
209
|
-
**Priority:** ${priority}
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## PRD (Product Requirements Document)
|
|
214
|
-
|
|
215
|
-
### Problem Statement
|
|
216
|
-
${problemStatement || '<!-- Describe the problem this feature solves -->'}
|
|
217
|
-
|
|
218
|
-
### User Stories
|
|
219
|
-
${userStories || `As a [type of user]
|
|
220
|
-
I want [some goal]
|
|
221
|
-
So that [some reason]
|
|
222
|
-
|
|
223
|
-
<!-- Add more user stories as needed -->`}
|
|
224
|
-
|
|
225
|
-
### Acceptance Criteria
|
|
226
|
-
${acceptanceCriteria || `- [ ] Criterion 1
|
|
227
|
-
- [ ] Criterion 2
|
|
228
|
-
- [ ] Criterion 3`}
|
|
229
|
-
|
|
230
|
-
### Technical Requirements
|
|
231
|
-
${technicalConsiderations || `<!-- Technical constraints, dependencies, integrations needed -->
|
|
232
|
-
- Required APIs:
|
|
233
|
-
- Data storage:
|
|
234
|
-
- Security requirements:`}
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## BRD (Business Requirements Document)
|
|
239
|
-
|
|
240
|
-
### Business Justification
|
|
241
|
-
${businessJustification || '<!-- Why should we build this? Business value, market need, strategic alignment -->'}
|
|
242
|
-
|
|
243
|
-
### Success Metrics
|
|
244
|
-
${successMetrics || `- Metric 1: [e.g., "Reduce processing time by 50%"]
|
|
245
|
-
- Metric 2: [e.g., "Increase user engagement by 20%"]
|
|
246
|
-
- Metric 3: [e.g., "Zero critical bugs in production"]`}
|
|
247
|
-
|
|
248
|
-
### Stakeholders
|
|
249
|
-
${stakeholders || `| Role | Name/Team | Responsibility |
|
|
250
|
-
|------|-----------|----------------|
|
|
251
|
-
| Product Owner | | Decision maker |
|
|
252
|
-
| Engineering Lead | | Technical oversight |
|
|
253
|
-
| QA Lead | | Quality assurance |`}
|
|
254
|
-
|
|
255
|
-
### Timeline
|
|
256
|
-
${timeline || `| Phase | Milestone | Target Date |
|
|
257
|
-
|-------|-----------|-------------|
|
|
258
|
-
| 1 | Requirements final | |
|
|
259
|
-
| 2 | Development complete | |
|
|
260
|
-
| 3 | QA complete | |
|
|
261
|
-
| 4 | Release | |`}
|
|
262
|
-
|
|
263
|
-
---
|
|
264
|
-
|
|
265
|
-
## Scope (WHAT)
|
|
266
|
-
|
|
267
|
-
### In Scope
|
|
268
|
-
-
|
|
269
|
-
|
|
270
|
-
### Out of Scope
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
## Requirements
|
|
274
|
-
|
|
275
|
-
### Functional Requirements
|
|
276
|
-
| ID | Requirement | Priority | Acceptance Criteria |
|
|
277
|
-
|----|-------------|----------|---------------------|
|
|
278
|
-
| FR-1 | | P0 | |
|
|
279
|
-
|
|
280
|
-
### Non-Functional Requirements
|
|
281
|
-
| ID | Requirement | Metric |
|
|
282
|
-
|----|-------------|--------|
|
|
283
|
-
| NFR-1 | | |
|
|
284
|
-
|
|
285
|
-
## Scenarios (Given/When/Then)
|
|
286
|
-
|
|
287
|
-
### Scenario 1: [Name]
|
|
288
|
-
- **Given** [initial context]
|
|
289
|
-
- **When** [action/event occurs]
|
|
290
|
-
- **Then** [expected outcome]
|
|
291
|
-
|
|
292
|
-
## Technical Approach (HOW)
|
|
293
|
-
|
|
294
|
-
### Tech Stack
|
|
295
|
-
<!-- Refer to .specsafe/tech-stack.md -->
|
|
296
|
-
|
|
297
|
-
### Architecture
|
|
298
|
-
|
|
299
|
-
### Dependencies
|
|
300
|
-
|
|
301
|
-
## Test Strategy (TDD)
|
|
302
|
-
|
|
303
|
-
### Unit Tests
|
|
304
|
-
-
|
|
305
|
-
|
|
306
|
-
### Integration Tests
|
|
307
|
-
-
|
|
308
|
-
|
|
309
|
-
## Implementation Plan
|
|
310
|
-
|
|
311
|
-
| Phase | Task | Est. Time | Dependencies |
|
|
312
|
-
|-------|------|-----------|--------------|
|
|
313
|
-
| 1 | | | |
|
|
314
|
-
|
|
315
|
-
## Success Criteria
|
|
316
|
-
- [ ] All P0 requirements met
|
|
317
|
-
- [ ] All tests passing
|
|
318
|
-
- [ ] Documentation complete
|
|
319
|
-
|
|
320
|
-
## Risks & Mitigations
|
|
321
|
-
|
|
322
|
-
| Risk | Probability | Impact | Mitigation |
|
|
323
|
-
|------|-------------|--------|------------|
|
|
324
|
-
| | | | |
|
|
325
|
-
|
|
326
|
-
## Notes & References
|
|
327
|
-
-
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
*Generated by SpecSafe v0.4.0 - OpenSpec Workflow*
|
|
332
|
-
`;
|
|
333
|
-
}
|
|
334
|
-
const specPath = join('specs/active', `${id}.md`);
|
|
335
|
-
// Handle dry-run mode
|
|
336
|
-
if (options.dryRun) {
|
|
337
|
-
spinner.stop();
|
|
338
|
-
console.log(chalk.cyan('[DRY RUN] Would create the following files:\n'));
|
|
339
|
-
console.log(chalk.cyan(` ${specPath}`));
|
|
340
|
-
console.log(chalk.cyan(`\nContent preview (first 30 lines):\n`));
|
|
341
|
-
const previewLines = specContent.split('\n').slice(0, 30).join('\n');
|
|
342
|
-
console.log(chalk.gray(previewLines));
|
|
343
|
-
if (specContent.split('\n').length > 30) {
|
|
344
|
-
console.log(chalk.gray(' ... (truncated)'));
|
|
345
|
-
}
|
|
346
|
-
console.log(chalk.cyan(`\nWould update PROJECT_STATE.md with spec: ${id}`));
|
|
347
|
-
process.exit(0);
|
|
348
|
-
}
|
|
349
|
-
// Create .specsafe directory and supporting files
|
|
350
|
-
await mkdir('.specsafe', { recursive: true });
|
|
351
|
-
// Create tech-stack.md if it doesn't exist
|
|
352
|
-
const techStackPath = join('.specsafe', 'tech-stack.md');
|
|
353
|
-
const techStackContent = `# Tech Stack
|
|
354
|
-
|
|
355
|
-
**Project:** ${basename(process.cwd())}
|
|
356
|
-
**Last Updated:** ${new Date().toISOString().split('T')[0]}
|
|
357
|
-
|
|
358
|
-
## Core Technologies
|
|
359
|
-
|
|
360
|
-
| Category | Technology | Version | Purpose |
|
|
361
|
-
|----------|------------|---------|---------|
|
|
362
|
-
| Language | TypeScript | ^5.0 | Primary language |
|
|
363
|
-
| Testing | Vitest | ^1.0 | Unit testing |
|
|
364
|
-
| Linting | ESLint | ^8.0 | Code quality |
|
|
365
|
-
|
|
366
|
-
## Project Structure
|
|
367
|
-
|
|
368
|
-
\`\`\`
|
|
369
|
-
src/
|
|
370
|
-
├── components/ # UI components
|
|
371
|
-
├── utils/ # Utility functions
|
|
372
|
-
└── index.ts # Entry point
|
|
373
|
-
|
|
374
|
-
tests/
|
|
375
|
-
└── *.test.ts # Test files
|
|
376
|
-
|
|
377
|
-
specs/
|
|
378
|
-
├── active/ # Active specs
|
|
379
|
-
├── completed/ # Completed specs
|
|
380
|
-
└── archive/ # Archived specs
|
|
381
|
-
\`\`\`
|
|
382
|
-
|
|
383
|
-
## Dependencies
|
|
384
|
-
|
|
385
|
-
### Production
|
|
386
|
-
- None yet
|
|
387
|
-
|
|
388
|
-
### Development
|
|
389
|
-
- @specsafe/core
|
|
390
|
-
- @specsafe/cli
|
|
391
|
-
- @specsafe/test-gen
|
|
392
|
-
|
|
393
|
-
## Guidelines
|
|
394
|
-
|
|
395
|
-
1. Follow existing code patterns
|
|
396
|
-
2. Write tests before implementation
|
|
397
|
-
3. Update specs as requirements change
|
|
398
|
-
4. Use TypeScript strict mode
|
|
399
|
-
|
|
400
|
-
---
|
|
401
|
-
|
|
402
|
-
*Auto-generated by specsafe new*
|
|
403
|
-
`;
|
|
404
|
-
// Create rules.md if it doesn't exist
|
|
405
|
-
const rulesContent = `# Project Rules
|
|
406
|
-
|
|
407
|
-
**Project:** ${basename(process.cwd())}
|
|
408
|
-
**Last Updated:** ${new Date().toISOString().split('T')[0]}
|
|
409
|
-
|
|
410
|
-
## Coding Standards
|
|
411
|
-
|
|
412
|
-
1. **TypeScript First**: All code must be TypeScript with strict mode enabled
|
|
413
|
-
2. **Test-Driven**: Write tests before implementation
|
|
414
|
-
3. **Documentation**: Document all public APIs
|
|
415
|
-
4. **Error Handling**: Always handle errors gracefully
|
|
416
|
-
|
|
417
|
-
## SpecSafe Workflow Rules
|
|
418
|
-
|
|
419
|
-
1. **SPEC Stage**: Requirements must be clear and testable
|
|
420
|
-
2. **TEST Stage**: All tests must be written before code
|
|
421
|
-
3. **CODE Stage**: Implementation follows tests exactly
|
|
422
|
-
4. **QA Stage**: All tests must pass before completion
|
|
423
|
-
5. **COMPLETE Stage**: Archive spec after completion
|
|
424
|
-
|
|
425
|
-
## AI Assistant Guidelines
|
|
426
|
-
|
|
427
|
-
When assisting with this project:
|
|
428
|
-
|
|
429
|
-
1. Always read the relevant spec before making changes
|
|
430
|
-
2. Follow the acceptance criteria in the PRD
|
|
431
|
-
3. Update spec status as work progresses
|
|
432
|
-
4. Suggest running \`specsafe verify\` after changes
|
|
433
|
-
5. Respect the out-of-scope section
|
|
434
|
-
|
|
435
|
-
## Communication Style
|
|
436
|
-
|
|
437
|
-
- Be concise but thorough
|
|
438
|
-
- Provide code examples when helpful
|
|
439
|
-
- Explain the "why" behind suggestions
|
|
440
|
-
- Flag any spec violations immediately
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
*Auto-generated by specsafe new*
|
|
445
|
-
`;
|
|
446
|
-
// Create spec file
|
|
447
|
-
await mkdir('specs/active', { recursive: true });
|
|
448
|
-
await writeFile(specPath, specContent);
|
|
449
|
-
// Create supporting files (only if they don't exist)
|
|
450
|
-
try {
|
|
451
|
-
await writeFile(techStackPath, techStackContent, { flag: 'wx' });
|
|
452
|
-
}
|
|
453
|
-
catch {
|
|
454
|
-
// File already exists, skip
|
|
455
|
-
}
|
|
456
|
-
try {
|
|
457
|
-
await writeFile(join('.specsafe', 'rules.md'), rulesContent, { flag: 'wx' });
|
|
458
|
-
}
|
|
459
|
-
catch {
|
|
460
|
-
// File already exists, skip
|
|
461
|
-
}
|
|
462
|
-
// Update project state
|
|
463
|
-
await tracker.addSpec(spec);
|
|
464
|
-
// Update project memory
|
|
465
|
-
try {
|
|
466
|
-
const memoryManager = new ProjectMemoryManager(process.cwd());
|
|
467
|
-
await memoryManager.load(basename(process.cwd()));
|
|
468
|
-
memoryManager.addSpec(id);
|
|
469
|
-
await memoryManager.save();
|
|
470
|
-
}
|
|
471
|
-
catch {
|
|
472
|
-
// Memory update failed, but spec was created - don't fail
|
|
473
|
-
}
|
|
474
|
-
spinner.succeed(chalk.green(`Created spec: ${id}${options.ears ? ' (EARS format)' : ''}`));
|
|
475
|
-
console.log(chalk.blue(` Location: ${specPath}`));
|
|
476
|
-
console.log(chalk.blue(` Tech Stack: .specsafe/tech-stack.md`));
|
|
477
|
-
console.log(chalk.blue(` Rules: .specsafe/rules.md`));
|
|
478
|
-
if (options.ears) {
|
|
479
|
-
console.log(chalk.green('\n ✨ Using EARS (Easy Approach to Requirements Syntax)'));
|
|
480
|
-
console.log(chalk.gray(' EARS patterns make requirements testable by construction'));
|
|
481
|
-
}
|
|
482
|
-
console.log(chalk.gray('\n Next steps:'));
|
|
483
|
-
console.log(chalk.gray(` 1. Edit ${specPath} to refine requirements`));
|
|
484
|
-
if (options.ears) {
|
|
485
|
-
console.log(chalk.gray(` 2. Follow EARS patterns in the template`));
|
|
486
|
-
console.log(chalk.gray(` 3. Run: specsafe qa ${id} --ears (to validate EARS compliance)`));
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
489
|
-
console.log(chalk.gray(` 2. Run: specsafe spec ${id}`));
|
|
490
|
-
console.log(chalk.gray(` 3. Or explore: specsafe explore`));
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
catch (error) {
|
|
494
|
-
spinner.fail(chalk.red(`Failed to create spec: ${error.message}`));
|
|
495
|
-
if (error.message.includes('specs/active/')) {
|
|
496
|
-
console.log(chalk.gray('💡 Tip: Run "specsafe init" to initialize the project first.'));
|
|
497
|
-
}
|
|
498
|
-
else if (error.message.includes('already exists')) {
|
|
499
|
-
console.log(chalk.gray('💡 Tip: Use a different spec name or delete the existing spec first.'));
|
|
500
|
-
}
|
|
501
|
-
else if (error.message.includes('User force closed')) {
|
|
502
|
-
console.log(chalk.gray('💡 Tip: Creation was cancelled.'));
|
|
503
|
-
process.exit(0);
|
|
504
|
-
}
|
|
505
|
-
process.exit(1);
|
|
506
|
-
}
|
|
507
|
-
});
|
|
508
|
-
//# sourceMappingURL=new.js.map
|
package/dist/commands/new.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/qa.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,SAAS,SA4KlB,CAAC"}
|