specweave 0.1.0 ā 0.1.1
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 +18 -8
- package/SPECWEAVE.md +2 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +37 -53
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/utils/auto-install.d.ts +44 -0
- package/dist/utils/auto-install.d.ts.map +1 -0
- package/dist/utils/auto-install.js +277 -0
- package/dist/utils/auto-install.js.map +1 -0
- package/package.json +1 -1
- package/src/agents/diagrams-architect/AGENT.md +380 -0
- package/src/agents/diagrams-architect/templates/c4-component-template.mmd +45 -0
- package/src/agents/diagrams-architect/templates/c4-container-template.mmd +48 -0
- package/src/agents/diagrams-architect/templates/c4-context-template.mmd +29 -0
- package/src/agents/diagrams-architect/templates/deployment-template.mmd +77 -0
- package/src/agents/diagrams-architect/templates/er-diagram-template.mmd +64 -0
- package/src/agents/diagrams-architect/templates/sequence-template.mmd +55 -0
- package/src/agents/diagrams-architect/test-cases/test-1-c4-context.yaml +131 -0
- package/src/agents/diagrams-architect/test-cases/test-2-sequence.yaml +150 -0
- package/src/agents/diagrams-architect/test-cases/test-3-er-diagram.yaml +182 -0
- package/src/skills/diagrams-architect/test-cases/test-1-c4-context.yaml +13 -0
- package/src/skills/diagrams-architect/test-cases/test-2-sequence-diagram.yaml +13 -0
- package/src/skills/diagrams-architect/test-cases/test-3-er-diagram.yaml +13 -0
- package/src/skills/diagrams-generator/SKILL.md +213 -13
- package/src/skills/dotnet-backend/test-cases/test-1-rest-api.yaml +14 -0
- package/src/skills/dotnet-backend/test-cases/test-2-authentication.yaml +13 -0
- package/src/skills/dotnet-backend/test-cases/test-3-minimal-api.yaml +13 -0
- package/src/skills/figma-designer/test-cases/test-1-design-system.yaml +13 -0
- package/src/skills/figma-designer/test-cases/test-2-component-library.yaml +13 -0
- package/src/skills/figma-designer/test-cases/test-3-responsive-layout.yaml +13 -0
- package/src/skills/figma-implementer/test-cases/test-1-design-to-react.yaml +13 -0
- package/src/skills/figma-implementer/test-cases/test-2-storybook.yaml +13 -0
- package/src/skills/figma-implementer/test-cases/test-3-design-tokens.yaml +13 -0
- package/src/skills/frontend/test-cases/test-1-react-component.yaml +13 -0
- package/src/skills/frontend/test-cases/test-2-form-validation.yaml +13 -0
- package/src/skills/frontend/test-cases/test-3-state-management.yaml +13 -0
- package/src/skills/nextjs/test-cases/test-1-app-router.yaml +13 -0
- package/src/skills/nextjs/test-cases/test-2-server-actions.yaml +13 -0
- package/src/skills/nextjs/test-cases/test-3-api-routes.yaml +13 -0
- package/src/skills/nodejs-backend/test-cases/test-1-express-api.yaml +13 -0
- package/src/skills/nodejs-backend/test-cases/test-2-prisma-orm.yaml +13 -0
- package/src/skills/nodejs-backend/test-cases/test-3-authentication.yaml +13 -0
- package/src/skills/python-backend/test-cases/test-1-fastapi-crud.yaml +13 -0
- package/src/skills/python-backend/test-cases/test-2-sqlalchemy.yaml +13 -0
- package/src/skills/python-backend/test-cases/test-3-authentication.yaml +13 -0
- package/src/skills/specweave-ado-mapper/test-cases/test-1-export-to-ado.yaml +13 -0
- package/src/skills/specweave-ado-mapper/test-cases/test-2-import-from-ado.yaml +13 -0
- package/src/skills/specweave-ado-mapper/test-cases/test-3-bidirectional-sync.yaml +13 -0
- package/src/skills/specweave-detector/SKILL.md +146 -0
- package/src/skills/specweave-jira-mapper/test-cases/test-1-export-to-jira.yaml +13 -0
- package/src/skills/specweave-jira-mapper/test-cases/test-2-import-from-jira.yaml +13 -0
- package/src/skills/specweave-jira-mapper/test-cases/test-3-sync-status.yaml +13 -0
- package/src/templates/config.yaml +18 -0
package/README.md
CHANGED
|
@@ -88,14 +88,13 @@ specweave init my-saas
|
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
90
|
specweave init [project] # Create new project
|
|
91
|
-
specweave install [component] # Install agents/skills (--local or --global)
|
|
92
91
|
specweave list # List all available components
|
|
93
|
-
specweave list --installed # Show installed components
|
|
92
|
+
specweave list --installed # Show auto-installed components
|
|
94
93
|
specweave --version # Show version
|
|
95
94
|
specweave --help # Show help
|
|
96
95
|
```
|
|
97
96
|
|
|
98
|
-
**
|
|
97
|
+
**Note**: Components (agents & skills) auto-install on-demand - no manual installation needed!
|
|
99
98
|
|
|
100
99
|
---
|
|
101
100
|
|
|
@@ -104,9 +103,19 @@ specweave --help # Show help
|
|
|
104
103
|
```bash
|
|
105
104
|
# SpecWeave auto-activates when .specweave/ detected
|
|
106
105
|
|
|
107
|
-
User: "Create authentication
|
|
106
|
+
User: "Create Next.js authentication with email and OAuth"
|
|
108
107
|
ā
|
|
109
|
-
SpecWeave:
|
|
108
|
+
SpecWeave: š· SpecWeave Active
|
|
109
|
+
|
|
110
|
+
š¦ Installing required components...
|
|
111
|
+
ā
Installed nextjs skill
|
|
112
|
+
ā
Installed nodejs-backend skill
|
|
113
|
+
ā
Installed security agent
|
|
114
|
+
ā
Installed pm agent
|
|
115
|
+
ā
Installed architect agent
|
|
116
|
+
|
|
117
|
+
š Creating increment 0001-user-authentication...
|
|
118
|
+
|
|
110
119
|
ā
Increment created: .specweave/increments/0001-user-authentication/
|
|
111
120
|
ā
Files: spec.md, plan.md, tasks.md, tests.md
|
|
112
121
|
|
|
@@ -125,9 +134,10 @@ SpecWeave: (orchestrates PM ā Architect ā Backend ā QA ā Docs)
|
|
|
125
134
|
|
|
126
135
|
**How it works**:
|
|
127
136
|
1. `.specweave/` detected ā `specweave-detector` activates automatically
|
|
128
|
-
2.
|
|
129
|
-
3.
|
|
130
|
-
4.
|
|
137
|
+
2. **User intent analyzed** ā required components auto-installed (just-in-time)
|
|
138
|
+
3. Request parsed ā routed to appropriate skills
|
|
139
|
+
4. Skills coordinate agents ā artifacts generated
|
|
140
|
+
5. Context loaded precisely ā only relevant specs (70%+ reduction)
|
|
131
141
|
|
|
132
142
|
---
|
|
133
143
|
|
package/SPECWEAVE.md
CHANGED
|
@@ -206,6 +206,7 @@ npx specweave list --installed # See what's installed
|
|
|
206
206
|
|-------|---------|----------------|
|
|
207
207
|
| `pm` | Product requirements, user stories | Planning features, requirements analysis |
|
|
208
208
|
| `architect` | System design, ADRs, architecture | Technical design, architecture decisions |
|
|
209
|
+
| `diagrams-architect` | Mermaid diagrams (C4, sequence, ER) | Creating diagrams (invoked by diagrams-generator skill) |
|
|
209
210
|
| `security` | Threat modeling, security review | Security concerns, vulnerability assessment |
|
|
210
211
|
| `qa-lead` | Test strategy, test cases | Testing, quality assurance |
|
|
211
212
|
| `devops` | Infrastructure, deployment | Deployment, CI/CD, infrastructure |
|
|
@@ -230,6 +231,7 @@ npx specweave list --installed # See what's installed
|
|
|
230
231
|
| `increment-planner` | Plan features with context | Creating/planning features |
|
|
231
232
|
| `skill-router` | Route to appropriate skills | Ambiguous requests |
|
|
232
233
|
| `context-loader` | Load context selectively | Working on increments |
|
|
234
|
+
| `diagrams-generator` | Coordinate diagram creation | "create diagram", "draw diagram", C4, sequence, ER |
|
|
233
235
|
|
|
234
236
|
**Technology Skills** (Implementation knowledge):
|
|
235
237
|
|
|
@@ -242,7 +244,6 @@ npx specweave list --installed # See what's installed
|
|
|
242
244
|
| `frontend` | React/Vue/Angular frontend | React, Vue, Angular components |
|
|
243
245
|
| `figma-implementer` | Figma to code conversion | Figma to code, implement design |
|
|
244
246
|
| `figma-designer` | Figma design creation | Create Figma design, design system |
|
|
245
|
-
| `diagrams-architect` | Mermaid/C4 diagrams | Create diagram, architecture diagram |
|
|
246
247
|
|
|
247
248
|
**Integration Skills** (External tools):
|
|
248
249
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,WAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,WAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAyFf"}
|
|
@@ -91,18 +91,12 @@ async function initCommand(projectName, options = { template: 'saas' }) {
|
|
|
91
91
|
const templatesDir = path.join(__dirname, '../../../templates');
|
|
92
92
|
copyTemplates(templatesDir, targetDir, projectName);
|
|
93
93
|
spinner.text = 'Templates copied...';
|
|
94
|
-
// 5. Copy
|
|
95
|
-
const skillsDir = path.join(__dirname, '../../../templates/skills');
|
|
96
|
-
copySkills(skillsDir, path.join(targetDir, 'src/skills'));
|
|
97
|
-
spinner.text = 'Skills installed...';
|
|
98
|
-
// 6. Copy hooks
|
|
99
|
-
const hooksDir = path.join(__dirname, '../../../templates/hooks');
|
|
100
|
-
copyHooks(hooksDir, targetDir);
|
|
101
|
-
spinner.text = 'Hooks installed...';
|
|
102
|
-
// 7. Copy commands
|
|
94
|
+
// 5. Copy commands (slash commands)
|
|
103
95
|
const commandsDir = path.join(__dirname, '../../../templates/commands');
|
|
104
96
|
copyCommands(commandsDir, path.join(targetDir, '.claude/commands'));
|
|
105
|
-
spinner.text = '
|
|
97
|
+
spinner.text = 'Slash commands installed...';
|
|
98
|
+
// NOTE: Skills and agents are NOT pre-installed
|
|
99
|
+
// They will be auto-installed on-demand based on user requests
|
|
106
100
|
// 8. Initialize git
|
|
107
101
|
try {
|
|
108
102
|
(0, child_process_1.execSync)('git init', { cwd: targetDir, stdio: 'ignore' });
|
|
@@ -144,11 +138,9 @@ function createDirectoryStructure(targetDir) {
|
|
|
144
138
|
'.specweave/work',
|
|
145
139
|
'.specweave/cache',
|
|
146
140
|
'.specweave/logs',
|
|
147
|
-
'src/skills',
|
|
148
|
-
'src/hooks',
|
|
149
|
-
'.claude/hooks',
|
|
150
141
|
'.claude/commands',
|
|
151
|
-
'.claude/skills',
|
|
142
|
+
'.claude/skills', // Components auto-install here
|
|
143
|
+
'.claude/agents', // Components auto-install here
|
|
152
144
|
];
|
|
153
145
|
directories.forEach((dir) => {
|
|
154
146
|
fs.mkdirSync(path.join(targetDir, dir), { recursive: true });
|
|
@@ -180,27 +172,6 @@ function copyTemplates(templatesDir, targetDir, projectName) {
|
|
|
180
172
|
fs.copyFileSync(gitignoreTemplate, path.join(targetDir, '.gitignore'));
|
|
181
173
|
}
|
|
182
174
|
}
|
|
183
|
-
function copySkills(skillsDir, targetSkillsDir) {
|
|
184
|
-
if (fs.existsSync(skillsDir)) {
|
|
185
|
-
fs.copySync(skillsDir, targetSkillsDir);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
function copyHooks(hooksDir, targetDir) {
|
|
189
|
-
if (fs.existsSync(hooksDir)) {
|
|
190
|
-
// Copy to src/hooks/
|
|
191
|
-
fs.copySync(hooksDir, path.join(targetDir, 'src/hooks'));
|
|
192
|
-
// Copy to .claude/hooks/
|
|
193
|
-
fs.copySync(hooksDir, path.join(targetDir, '.claude/hooks'));
|
|
194
|
-
// Make hooks executable
|
|
195
|
-
const hookFiles = fs.readdirSync(path.join(targetDir, '.claude/hooks'));
|
|
196
|
-
hookFiles.forEach((file) => {
|
|
197
|
-
if (file.endsWith('.sh')) {
|
|
198
|
-
const hookPath = path.join(targetDir, '.claude/hooks', file);
|
|
199
|
-
fs.chmodSync(hookPath, '755');
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
175
|
function copyCommands(commandsDir, targetCommandsDir) {
|
|
205
176
|
if (fs.existsSync(commandsDir)) {
|
|
206
177
|
fs.copySync(commandsDir, targetCommandsDir);
|
|
@@ -212,36 +183,49 @@ function showNextSteps(projectName) {
|
|
|
212
183
|
console.log('');
|
|
213
184
|
console.log(chalk_1.default.cyan('š Project structure:'));
|
|
214
185
|
console.log(` ${projectName}/`);
|
|
215
|
-
console.log(' āāā .specweave/ # SpecWeave configuration
|
|
216
|
-
console.log(' āāā
|
|
217
|
-
console.log(' āāā src/hooks/ # Automation hooks');
|
|
218
|
-
console.log(' āāā .claude/ # Claude Code integration');
|
|
186
|
+
console.log(' āāā .specweave/ # SpecWeave configuration');
|
|
187
|
+
console.log(' āāā .claude/commands/ # Slash commands for Claude Code');
|
|
219
188
|
console.log(' āāā README.md # Project documentation');
|
|
220
189
|
console.log(' āāā CLAUDE.md # Instructions for Claude');
|
|
221
190
|
console.log('');
|
|
191
|
+
console.log(chalk_1.default.yellow.bold('š¦ Smart Component Installation'));
|
|
192
|
+
console.log(' Components (agents & skills) auto-install based on what you build!');
|
|
193
|
+
console.log(' No manual installation needed - just describe your project.');
|
|
194
|
+
console.log('');
|
|
222
195
|
console.log(chalk_1.default.cyan.bold('šÆ Next steps:'));
|
|
223
196
|
console.log('');
|
|
224
197
|
console.log(` 1. ${chalk_1.default.white(`cd ${projectName}`)}`);
|
|
225
198
|
console.log('');
|
|
226
|
-
console.log(` 2. ${chalk_1.default.white('
|
|
227
|
-
console.log(` ${chalk_1.default.gray('
|
|
199
|
+
console.log(` 2. ${chalk_1.default.white('Install SpecWeave as dependency:')}`);
|
|
200
|
+
console.log(` ${chalk_1.default.gray('npm install specweave --save-dev')}`);
|
|
201
|
+
console.log('');
|
|
202
|
+
console.log(` 3. ${chalk_1.default.white('Open Claude Code and describe your project:')}`);
|
|
203
|
+
console.log(` ${chalk_1.default.gray('"Create Next.js authentication with OAuth"')}`);
|
|
204
|
+
console.log(` ${chalk_1.default.gray('"Build FastAPI backend with PostgreSQL"')}`);
|
|
205
|
+
console.log(` ${chalk_1.default.gray('"Create real estate SaaS with payment processing"')}`);
|
|
206
|
+
console.log('');
|
|
207
|
+
console.log(` 4. ${chalk_1.default.white('SpecWeave automatically:')}`);
|
|
208
|
+
console.log(' ⢠Detects tech stack from your request');
|
|
209
|
+
console.log(' ⢠Installs needed components (nextjs, security, pm, etc.)');
|
|
210
|
+
console.log(' ⢠Creates strategic analysis');
|
|
211
|
+
console.log(' ⢠Generates specifications and tasks');
|
|
212
|
+
console.log(' ⢠Builds implementation');
|
|
228
213
|
console.log('');
|
|
229
|
-
console.log(
|
|
230
|
-
console.log(' ⢠Ask clarifying questions');
|
|
231
|
-
console.log(' ⢠Create strategic analysis (PM, Architect, DevOps, QA)');
|
|
232
|
-
console.log(' ⢠Generate comprehensive documentation');
|
|
233
|
-
console.log(' ⢠Create implementation tasks');
|
|
234
|
-
console.log(' ⢠Build autonomously');
|
|
214
|
+
console.log(chalk_1.default.cyan.bold('š” Example workflow:'));
|
|
235
215
|
console.log('');
|
|
236
|
-
console.log(`
|
|
237
|
-
console.log(` ${chalk_1.default.gray('/review-docs')}`);
|
|
216
|
+
console.log(` User: ${chalk_1.default.gray('"Create Next.js authentication"')}`);
|
|
238
217
|
console.log('');
|
|
239
|
-
console.log(`
|
|
240
|
-
console.log(`
|
|
218
|
+
console.log(` SpecWeave: ${chalk_1.default.green('š· SpecWeave Active')}`);
|
|
219
|
+
console.log(` ${chalk_1.default.green('š¦ Installing required components...')}`);
|
|
220
|
+
console.log(` ${chalk_1.default.green(' ā
Installed nextjs skill')}`);
|
|
221
|
+
console.log(` ${chalk_1.default.green(' ā
Installed security agent')}`);
|
|
222
|
+
console.log(` ${chalk_1.default.green(' ā
Installed pm agent')}`);
|
|
223
|
+
console.log(` ${chalk_1.default.green('š Creating increment 0001-authentication...')}`);
|
|
241
224
|
console.log('');
|
|
242
|
-
console.log(chalk_1.default.green.bold('š Ready to build!'));
|
|
225
|
+
console.log(chalk_1.default.green.bold('š Ready to build - no configuration needed!'));
|
|
243
226
|
console.log('');
|
|
244
|
-
console.log(chalk_1.default.gray('
|
|
227
|
+
console.log(chalk_1.default.gray('Documentation: https://spec-weave.com'));
|
|
228
|
+
console.log(chalk_1.default.gray('GitHub: https://github.com/anton-abyzov/specweave'));
|
|
245
229
|
console.log('');
|
|
246
230
|
}
|
|
247
231
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Install Utility
|
|
3
|
+
*
|
|
4
|
+
* Handles just-in-time installation of SpecWeave components based on user intent.
|
|
5
|
+
* Components are copied from the npm package to .claude/ directories.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Keyword ā Component Mapping
|
|
9
|
+
* Maps user keywords to required skills and agents
|
|
10
|
+
*/
|
|
11
|
+
export declare const COMPONENT_MAPPING: Record<string, {
|
|
12
|
+
skills: string[];
|
|
13
|
+
agents: string[];
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Analyze user intent and determine required components
|
|
17
|
+
*/
|
|
18
|
+
export declare function analyzeUserIntent(prompt: string): {
|
|
19
|
+
skills: string[];
|
|
20
|
+
agents: string[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Auto-install missing components based on user intent
|
|
24
|
+
*/
|
|
25
|
+
export declare function autoInstallComponents(prompt: string, options?: {
|
|
26
|
+
verbose?: boolean;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
installed: {
|
|
29
|
+
skills: string[];
|
|
30
|
+
agents: string[];
|
|
31
|
+
};
|
|
32
|
+
skipped: {
|
|
33
|
+
skills: string[];
|
|
34
|
+
agents: string[];
|
|
35
|
+
};
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Get list of all available components
|
|
39
|
+
*/
|
|
40
|
+
export declare function getAvailableComponents(): {
|
|
41
|
+
skills: string[];
|
|
42
|
+
agents: string[];
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=auto-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-install.d.ts","sourceRoot":"","sources":["../../src/utils/auto-install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+CpF,CAAC;AAuBF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBxF;AA0DD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC;IAAE,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC,CA2DjH;AA+BD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB/E"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Install Utility
|
|
4
|
+
*
|
|
5
|
+
* Handles just-in-time installation of SpecWeave components based on user intent.
|
|
6
|
+
* Components are copied from the npm package to .claude/ directories.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.COMPONENT_MAPPING = void 0;
|
|
43
|
+
exports.analyzeUserIntent = analyzeUserIntent;
|
|
44
|
+
exports.autoInstallComponents = autoInstallComponents;
|
|
45
|
+
exports.getAvailableComponents = getAvailableComponents;
|
|
46
|
+
const fs = __importStar(require("fs-extra"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const yaml = __importStar(require("yaml"));
|
|
49
|
+
/**
|
|
50
|
+
* Keyword ā Component Mapping
|
|
51
|
+
* Maps user keywords to required skills and agents
|
|
52
|
+
*/
|
|
53
|
+
exports.COMPONENT_MAPPING = {
|
|
54
|
+
// Framework detection
|
|
55
|
+
'next.js': { skills: ['nextjs', 'nodejs-backend'], agents: [] },
|
|
56
|
+
'nextjs': { skills: ['nextjs', 'nodejs-backend'], agents: [] },
|
|
57
|
+
'react': { skills: ['frontend'], agents: [] },
|
|
58
|
+
'vue': { skills: ['frontend'], agents: [] },
|
|
59
|
+
'angular': { skills: ['frontend'], agents: [] },
|
|
60
|
+
'fastapi': { skills: ['python-backend'], agents: [] },
|
|
61
|
+
'django': { skills: ['python-backend'], agents: [] },
|
|
62
|
+
'flask': { skills: ['python-backend'], agents: [] },
|
|
63
|
+
'.net': { skills: ['dotnet-backend'], agents: [] },
|
|
64
|
+
'asp.net': { skills: ['dotnet-backend'], agents: [] },
|
|
65
|
+
'express': { skills: ['nodejs-backend'], agents: [] },
|
|
66
|
+
'nestjs': { skills: ['nodejs-backend'], agents: [] },
|
|
67
|
+
// Feature detection
|
|
68
|
+
'authentication': { skills: ['nodejs-backend'], agents: ['security'] },
|
|
69
|
+
'auth': { skills: [], agents: ['security'] },
|
|
70
|
+
'oauth': { skills: [], agents: ['security'] },
|
|
71
|
+
'login': { skills: [], agents: ['security'] },
|
|
72
|
+
'payment': { skills: ['stripe-integrator'], agents: ['security'] },
|
|
73
|
+
'stripe': { skills: ['stripe-integrator'], agents: ['security'] },
|
|
74
|
+
// Infrastructure detection
|
|
75
|
+
'deploy': { skills: [], agents: ['devops'] },
|
|
76
|
+
'deployment': { skills: [], agents: ['devops'] },
|
|
77
|
+
'infrastructure': { skills: [], agents: ['devops'] },
|
|
78
|
+
'hetzner': { skills: ['hetzner-provisioner'], agents: ['devops'] },
|
|
79
|
+
'aws': { skills: [], agents: ['devops'] },
|
|
80
|
+
'vercel': { skills: [], agents: ['devops'] },
|
|
81
|
+
'docker': { skills: [], agents: ['devops'] },
|
|
82
|
+
// Testing detection
|
|
83
|
+
'test': { skills: [], agents: ['qa-lead'] },
|
|
84
|
+
'testing': { skills: [], agents: ['qa-lead'] },
|
|
85
|
+
'e2e': { skills: ['e2e-playwright'], agents: ['qa-lead'] },
|
|
86
|
+
'playwright': { skills: ['e2e-playwright'], agents: ['qa-lead'] },
|
|
87
|
+
// Design detection
|
|
88
|
+
'figma': { skills: ['figma-implementer', 'figma-designer'], agents: [] },
|
|
89
|
+
'design system': { skills: ['design-system-architect'], agents: [] },
|
|
90
|
+
// Integration detection
|
|
91
|
+
'jira': { skills: ['jira-sync'], agents: [] },
|
|
92
|
+
'ado': { skills: ['ado-sync'], agents: [] },
|
|
93
|
+
'azure devops': { skills: ['ado-sync'], agents: [] },
|
|
94
|
+
'github': { skills: ['github-sync'], agents: [] },
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Always-needed agents for creating new features
|
|
98
|
+
*/
|
|
99
|
+
const STRATEGIC_AGENTS = ['pm', 'architect'];
|
|
100
|
+
/**
|
|
101
|
+
* Extract keywords from user prompt
|
|
102
|
+
*/
|
|
103
|
+
function extractKeywords(prompt) {
|
|
104
|
+
const normalized = prompt.toLowerCase();
|
|
105
|
+
const keywords = [];
|
|
106
|
+
for (const keyword of Object.keys(exports.COMPONENT_MAPPING)) {
|
|
107
|
+
if (normalized.includes(keyword)) {
|
|
108
|
+
keywords.push(keyword);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return keywords;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Analyze user intent and determine required components
|
|
115
|
+
*/
|
|
116
|
+
function analyzeUserIntent(prompt) {
|
|
117
|
+
const keywords = extractKeywords(prompt);
|
|
118
|
+
const required = { skills: new Set(), agents: new Set() };
|
|
119
|
+
// Map keywords to components
|
|
120
|
+
for (const keyword of keywords) {
|
|
121
|
+
const mapping = exports.COMPONENT_MAPPING[keyword];
|
|
122
|
+
if (mapping) {
|
|
123
|
+
mapping.skills.forEach(skill => required.skills.add(skill));
|
|
124
|
+
mapping.agents.forEach(agent => required.agents.add(agent));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Always include strategic agents for new features
|
|
128
|
+
if (prompt.toLowerCase().includes('create') ||
|
|
129
|
+
prompt.toLowerCase().includes('build') ||
|
|
130
|
+
prompt.toLowerCase().includes('implement')) {
|
|
131
|
+
STRATEGIC_AGENTS.forEach(agent => required.agents.add(agent));
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
skills: Array.from(required.skills),
|
|
135
|
+
agents: Array.from(required.agents),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Find npm package location
|
|
140
|
+
*/
|
|
141
|
+
function findNpmPackagePath() {
|
|
142
|
+
// Try multiple locations
|
|
143
|
+
const possiblePaths = [
|
|
144
|
+
path.join(process.cwd(), 'node_modules', 'specweave'),
|
|
145
|
+
path.join(process.cwd(), '..', '..', '..'), // If running from node_modules/specweave/dist
|
|
146
|
+
path.join(__dirname, '..', '..'), // If running from dist/utils
|
|
147
|
+
];
|
|
148
|
+
for (const pkgPath of possiblePaths) {
|
|
149
|
+
const srcPath = path.join(pkgPath, 'src');
|
|
150
|
+
if (fs.existsSync(srcPath)) {
|
|
151
|
+
return pkgPath;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
throw new Error('SpecWeave package not found. Ensure it is installed: npm install specweave');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if component is already installed
|
|
158
|
+
*/
|
|
159
|
+
function isComponentInstalled(type, name) {
|
|
160
|
+
const componentPath = path.join(process.cwd(), '.claude', type, name);
|
|
161
|
+
return fs.existsSync(componentPath);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Install a component (skill or agent)
|
|
165
|
+
*/
|
|
166
|
+
async function installComponent(type, name, npmPackagePath, verbose = true) {
|
|
167
|
+
const sourcePath = path.join(npmPackagePath, 'src', type, name);
|
|
168
|
+
const destPath = path.join(process.cwd(), '.claude', type, name);
|
|
169
|
+
if (!fs.existsSync(sourcePath)) {
|
|
170
|
+
throw new Error(`Component not found: ${type}/${name}`);
|
|
171
|
+
}
|
|
172
|
+
// Ensure destination directory exists
|
|
173
|
+
await fs.ensureDir(path.dirname(destPath));
|
|
174
|
+
// Copy component
|
|
175
|
+
await fs.copy(sourcePath, destPath);
|
|
176
|
+
if (verbose) {
|
|
177
|
+
console.log(` ā
Installed ${name} ${type === 'skills' ? 'skill' : 'agent'}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Auto-install missing components based on user intent
|
|
182
|
+
*/
|
|
183
|
+
async function autoInstallComponents(prompt, options = {}) {
|
|
184
|
+
const { verbose = true } = options;
|
|
185
|
+
// Check if auto-install is enabled
|
|
186
|
+
const configPath = path.join(process.cwd(), '.specweave', 'config.yaml');
|
|
187
|
+
if (fs.existsSync(configPath)) {
|
|
188
|
+
const config = yaml.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
189
|
+
if (config.auto_install === false) {
|
|
190
|
+
return { installed: { skills: [], agents: [] }, skipped: { skills: [], agents: [] } };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Analyze user intent
|
|
194
|
+
const required = analyzeUserIntent(prompt);
|
|
195
|
+
if (required.skills.length === 0 && required.agents.length === 0) {
|
|
196
|
+
return { installed: { skills: [], agents: [] }, skipped: { skills: [], agents: [] } };
|
|
197
|
+
}
|
|
198
|
+
// Find npm package
|
|
199
|
+
const npmPackagePath = findNpmPackagePath();
|
|
200
|
+
const installed = { skills: [], agents: [] };
|
|
201
|
+
const skipped = { skills: [], agents: [] };
|
|
202
|
+
if (verbose && (required.skills.length > 0 || required.agents.length > 0)) {
|
|
203
|
+
console.log('\nš¦ Installing required components...');
|
|
204
|
+
}
|
|
205
|
+
// Install skills
|
|
206
|
+
for (const skill of required.skills) {
|
|
207
|
+
if (isComponentInstalled('skills', skill)) {
|
|
208
|
+
skipped.skills.push(skill);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
await installComponent('skills', skill, npmPackagePath, verbose);
|
|
212
|
+
installed.skills.push(skill);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Install agents
|
|
216
|
+
for (const agent of required.agents) {
|
|
217
|
+
if (isComponentInstalled('agents', agent)) {
|
|
218
|
+
skipped.agents.push(agent);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
await installComponent('agents', agent, npmPackagePath, verbose);
|
|
222
|
+
installed.agents.push(agent);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Update config with installed components
|
|
226
|
+
if (installed.skills.length > 0 || installed.agents.length > 0) {
|
|
227
|
+
await updateInstalledComponents(installed);
|
|
228
|
+
}
|
|
229
|
+
if (verbose && (installed.skills.length > 0 || installed.agents.length > 0)) {
|
|
230
|
+
console.log('');
|
|
231
|
+
}
|
|
232
|
+
return { installed, skipped };
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Update .specweave/config.yaml with installed components
|
|
236
|
+
*/
|
|
237
|
+
async function updateInstalledComponents(installed) {
|
|
238
|
+
const configPath = path.join(process.cwd(), '.specweave', 'config.yaml');
|
|
239
|
+
if (!fs.existsSync(configPath)) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const config = yaml.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
243
|
+
// Initialize installed_components if not exists
|
|
244
|
+
if (!config.installed_components) {
|
|
245
|
+
config.installed_components = { skills: [], agents: [] };
|
|
246
|
+
}
|
|
247
|
+
// Add new components
|
|
248
|
+
config.installed_components.skills = [
|
|
249
|
+
...new Set([...(config.installed_components.skills || []), ...installed.skills])
|
|
250
|
+
];
|
|
251
|
+
config.installed_components.agents = [
|
|
252
|
+
...new Set([...(config.installed_components.agents || []), ...installed.agents])
|
|
253
|
+
];
|
|
254
|
+
// Write back
|
|
255
|
+
await fs.writeFile(configPath, yaml.stringify(config), 'utf-8');
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get list of all available components
|
|
259
|
+
*/
|
|
260
|
+
function getAvailableComponents() {
|
|
261
|
+
try {
|
|
262
|
+
const npmPackagePath = findNpmPackagePath();
|
|
263
|
+
const skillsPath = path.join(npmPackagePath, 'src', 'skills');
|
|
264
|
+
const agentsPath = path.join(npmPackagePath, 'src', 'agents');
|
|
265
|
+
const skills = fs.existsSync(skillsPath)
|
|
266
|
+
? fs.readdirSync(skillsPath).filter(name => fs.statSync(path.join(skillsPath, name)).isDirectory())
|
|
267
|
+
: [];
|
|
268
|
+
const agents = fs.existsSync(agentsPath)
|
|
269
|
+
? fs.readdirSync(agentsPath).filter(name => fs.statSync(path.join(agentsPath, name)).isDirectory())
|
|
270
|
+
: [];
|
|
271
|
+
return { skills, agents };
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
return { skills: [], agents: [] };
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=auto-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-install.js","sourceRoot":"","sources":["../../src/utils/auto-install.ts"],"names":[],"mappings":"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"}
|