superskills 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 +363 -0
- package/bin/superskills +6 -0
- package/dist/catalog/index.d.ts +11 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +203 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/tools-catalog.json +243 -0
- package/dist/catalog/types.d.ts +59 -0
- package/dist/catalog/types.d.ts.map +1 -0
- package/dist/catalog/types.js +2 -0
- package/dist/catalog/types.js.map +1 -0
- package/dist/catalog/ui.d.ts +4 -0
- package/dist/catalog/ui.d.ts.map +1 -0
- package/dist/catalog/ui.js +86 -0
- package/dist/catalog/ui.js.map +1 -0
- package/dist/cli/colors.d.ts +8 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +11 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/discovery/analyze.d.ts +5 -0
- package/dist/discovery/analyze.d.ts.map +1 -0
- package/dist/discovery/analyze.js +190 -0
- package/dist/discovery/analyze.js.map +1 -0
- package/dist/discovery/core.d.ts +16 -0
- package/dist/discovery/core.d.ts.map +1 -0
- package/dist/discovery/core.js +51 -0
- package/dist/discovery/core.js.map +1 -0
- package/dist/discovery/index.d.ts +4 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +233 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/schema.d.ts +111 -0
- package/dist/discovery/schema.d.ts.map +1 -0
- package/dist/discovery/schema.js +87 -0
- package/dist/discovery/schema.js.map +1 -0
- package/dist/discovery/types.d.ts +56 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +2 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +523 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold/index.d.ts +4 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +262 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/templates/claude-md.d.ts +4 -0
- package/dist/scaffold/templates/claude-md.d.ts.map +1 -0
- package/dist/scaffold/templates/claude-md.js +229 -0
- package/dist/scaffold/templates/claude-md.js.map +1 -0
- package/dist/scaffold/templates/claude-settings.d.ts +3 -0
- package/dist/scaffold/templates/claude-settings.d.ts.map +1 -0
- package/dist/scaffold/templates/claude-settings.js +48 -0
- package/dist/scaffold/templates/claude-settings.js.map +1 -0
- package/dist/scaffold/templates/env-example.d.ts +3 -0
- package/dist/scaffold/templates/env-example.d.ts.map +1 -0
- package/dist/scaffold/templates/env-example.js +103 -0
- package/dist/scaffold/templates/env-example.js.map +1 -0
- package/dist/scaffold/templates/package-json.d.ts +2 -0
- package/dist/scaffold/templates/package-json.d.ts.map +1 -0
- package/dist/scaffold/templates/package-json.js +56 -0
- package/dist/scaffold/templates/package-json.js.map +1 -0
- package/dist/scaffold/templates/project-files.d.ts +4 -0
- package/dist/scaffold/templates/project-files.d.ts.map +1 -0
- package/dist/scaffold/templates/project-files.js +459 -0
- package/dist/scaffold/templates/project-files.js.map +1 -0
- package/dist/scaffold/templates/skill-agents.d.ts +4 -0
- package/dist/scaffold/templates/skill-agents.d.ts.map +1 -0
- package/dist/scaffold/templates/skill-agents.js +68 -0
- package/dist/scaffold/templates/skill-agents.js.map +1 -0
- package/dist/scaffold/templates/skill-commands.d.ts +3 -0
- package/dist/scaffold/templates/skill-commands.d.ts.map +1 -0
- package/dist/scaffold/templates/skill-commands.js +509 -0
- package/dist/scaffold/templates/skill-commands.js.map +1 -0
- package/dist/scaffold/templates/teammate-prompts.d.ts +8 -0
- package/dist/scaffold/templates/teammate-prompts.d.ts.map +1 -0
- package/dist/scaffold/templates/teammate-prompts.js +506 -0
- package/dist/scaffold/templates/teammate-prompts.js.map +1 -0
- package/dist/scaffold/types.d.ts +68 -0
- package/dist/scaffold/types.d.ts.map +1 -0
- package/dist/scaffold/types.js +2 -0
- package/dist/scaffold/types.js.map +1 -0
- package/dist/scaffold/ui.d.ts +5 -0
- package/dist/scaffold/ui.d.ts.map +1 -0
- package/dist/scaffold/ui.js +127 -0
- package/dist/scaffold/ui.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { generateClaudeMd } from './templates/claude-md.js';
|
|
4
|
+
import { generateEnvExample } from './templates/env-example.js';
|
|
5
|
+
import { generateClaudeSettings } from './templates/claude-settings.js';
|
|
6
|
+
import { generatePackageJson } from './templates/package-json.js';
|
|
7
|
+
import { generateProjectFiles } from './templates/project-files.js';
|
|
8
|
+
import { generateSkillAgents } from './templates/skill-agents.js';
|
|
9
|
+
import { generateSkillCommands } from './templates/skill-commands.js';
|
|
10
|
+
import { createStrategyPrompt, createDesignPrompt, createTrustPrompt, createEfficiencyPrompt, createTestingPrompt } from './templates/teammate-prompts.js';
|
|
11
|
+
export async function scaffold(input, options) {
|
|
12
|
+
const { discovery, tools } = input;
|
|
13
|
+
const { outputDir } = options;
|
|
14
|
+
const projectName = slugify(discovery.projectName);
|
|
15
|
+
const projectPath = path.resolve(outputDir, projectName);
|
|
16
|
+
// Ensure output directory exists
|
|
17
|
+
await fs.ensureDir(projectPath);
|
|
18
|
+
const filesCreated = [];
|
|
19
|
+
// Generate CLAUDE.md
|
|
20
|
+
const claudeMd = generateClaudeMd(discovery, tools);
|
|
21
|
+
await fs.writeFile(path.join(projectPath, 'CLAUDE.md'), claudeMd);
|
|
22
|
+
filesCreated.push('CLAUDE.md');
|
|
23
|
+
// Generate .env.example
|
|
24
|
+
const envExample = generateEnvExample(tools);
|
|
25
|
+
await fs.writeFile(path.join(projectPath, '.env.example'), envExample);
|
|
26
|
+
filesCreated.push('.env.example');
|
|
27
|
+
// Generate agent team config
|
|
28
|
+
const agentTeam = createAgentTeamConfig(discovery, tools);
|
|
29
|
+
// Generate .claude/settings.json with real hooks
|
|
30
|
+
const claudeSettings = generateClaudeSettings(agentTeam, projectName);
|
|
31
|
+
await fs.ensureDir(path.join(projectPath, '.claude'));
|
|
32
|
+
await fs.writeFile(path.join(projectPath, '.claude', 'settings.json'), JSON.stringify(claudeSettings, null, 2));
|
|
33
|
+
filesCreated.push('.claude/settings.json');
|
|
34
|
+
// Generate .claude/agents/ subagent files
|
|
35
|
+
const agentFiles = generateSkillAgents(discovery, tools);
|
|
36
|
+
for (const [filePath, content] of Object.entries(agentFiles)) {
|
|
37
|
+
const fullPath = path.join(projectPath, filePath);
|
|
38
|
+
await fs.ensureDir(path.dirname(fullPath));
|
|
39
|
+
await fs.writeFile(fullPath, content);
|
|
40
|
+
filesCreated.push(filePath);
|
|
41
|
+
}
|
|
42
|
+
// Generate .claude/skills/ skill command files
|
|
43
|
+
const skillFiles = generateSkillCommands(discovery);
|
|
44
|
+
for (const [filePath, content] of Object.entries(skillFiles)) {
|
|
45
|
+
const fullPath = path.join(projectPath, filePath);
|
|
46
|
+
await fs.ensureDir(path.dirname(fullPath));
|
|
47
|
+
await fs.writeFile(fullPath, content);
|
|
48
|
+
filesCreated.push(filePath);
|
|
49
|
+
}
|
|
50
|
+
// Generate first-run hook script
|
|
51
|
+
const hookScript = generateFirstRunScript();
|
|
52
|
+
const hookScriptPath = path.join(projectPath, '.claude', 'hooks', 'first-run-check.sh');
|
|
53
|
+
await fs.ensureDir(path.dirname(hookScriptPath));
|
|
54
|
+
await fs.writeFile(hookScriptPath, hookScript, { mode: 0o755 });
|
|
55
|
+
filesCreated.push('.claude/hooks/first-run-check.sh');
|
|
56
|
+
// Generate package.json
|
|
57
|
+
const packages = tools.all.map(s => s.tool.sdk).filter((s) => s !== null);
|
|
58
|
+
const packageJson = generatePackageJson(projectName, packages);
|
|
59
|
+
await fs.writeFile(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
60
|
+
filesCreated.push('package.json');
|
|
61
|
+
// Generate project structure
|
|
62
|
+
const projectFiles = await generateProjectFiles(discovery, tools);
|
|
63
|
+
for (const [filePath, content] of Object.entries(projectFiles)) {
|
|
64
|
+
const fullPath = path.join(projectPath, filePath);
|
|
65
|
+
await fs.ensureDir(path.dirname(fullPath));
|
|
66
|
+
await fs.writeFile(fullPath, content);
|
|
67
|
+
filesCreated.push(filePath);
|
|
68
|
+
}
|
|
69
|
+
// Generate .gitignore
|
|
70
|
+
const gitignore = `node_modules/
|
|
71
|
+
.next/
|
|
72
|
+
.env
|
|
73
|
+
.env.local
|
|
74
|
+
dist/
|
|
75
|
+
.DS_Store
|
|
76
|
+
`;
|
|
77
|
+
await fs.writeFile(path.join(projectPath, '.gitignore'), gitignore);
|
|
78
|
+
filesCreated.push('.gitignore');
|
|
79
|
+
return {
|
|
80
|
+
projectPath,
|
|
81
|
+
filesCreated,
|
|
82
|
+
packagesToInstall: packages,
|
|
83
|
+
envVars: tools.all.flatMap(s => s.tool.envVars),
|
|
84
|
+
agentTeam
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function createAgentTeamConfig(discovery, tools) {
|
|
88
|
+
const skills = [
|
|
89
|
+
{
|
|
90
|
+
name: 'strategy',
|
|
91
|
+
focus: 'EIID alignment, CLAUDE.md sync, architectural decisions',
|
|
92
|
+
triggers: ['every commit', 'new features', 'weekly review'],
|
|
93
|
+
systemPrompt: createStrategyPrompt(discovery)
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'design',
|
|
97
|
+
focus: 'shadcn components, design tokens, brand voice, accessibility',
|
|
98
|
+
triggers: ['changes in components/', 'changes in app/**/page.tsx'],
|
|
99
|
+
systemPrompt: createDesignPrompt(discovery)
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'trust',
|
|
103
|
+
focus: 'OWASP top 10, auth, GDPR, data handling, input validation',
|
|
104
|
+
triggers: ['pre-commit on api/', 'pre-commit on auth/', 'pre-commit on lib/db/'],
|
|
105
|
+
systemPrompt: createTrustPrompt(discovery)
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'efficiency',
|
|
109
|
+
focus: 'Bundle size, Core Web Vitals, N+1 queries, API costs',
|
|
110
|
+
triggers: ['pre-commit', 'weekly cost review'],
|
|
111
|
+
systemPrompt: createEfficiencyPrompt(discovery, tools)
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'testing',
|
|
115
|
+
focus: 'vitest, Playwright E2E, accessibility audits, regression prevention',
|
|
116
|
+
triggers: ['pre-stop', 'task-completed'],
|
|
117
|
+
systemPrompt: createTestingPrompt(discovery)
|
|
118
|
+
}
|
|
119
|
+
];
|
|
120
|
+
return {
|
|
121
|
+
skills,
|
|
122
|
+
hooks: {
|
|
123
|
+
sessionStart: [{
|
|
124
|
+
matcher: 'startup',
|
|
125
|
+
hooks: [{
|
|
126
|
+
type: 'command',
|
|
127
|
+
command: '"$CLAUDE_PROJECT_DIR"/.claude/hooks/first-run-check.sh',
|
|
128
|
+
statusMessage: 'Checking project setup...'
|
|
129
|
+
}]
|
|
130
|
+
}],
|
|
131
|
+
preToolUse: [{
|
|
132
|
+
matcher: 'Bash',
|
|
133
|
+
hooks: [{
|
|
134
|
+
type: 'prompt',
|
|
135
|
+
prompt: 'Security check for [projectName]. Check if this command is safe: $ARGUMENTS. Look for: hardcoded secrets, rm -rf, SQL injection via shell, exposure of sensitive data. Respond {"ok": true} if safe, {"ok": false, "reason": "..."} if dangerous.',
|
|
136
|
+
timeout: 15
|
|
137
|
+
}]
|
|
138
|
+
}],
|
|
139
|
+
postToolUse: [{
|
|
140
|
+
matcher: 'Write|Edit',
|
|
141
|
+
hooks: [{
|
|
142
|
+
type: 'prompt',
|
|
143
|
+
prompt: 'Security gate for [projectName]. Check this file change for: hardcoded API keys or secrets, SQL injection, XSS, auth bypass, PII in logs or URLs. $ARGUMENTS. Respond {"ok": true} if safe, {"ok": false, "reason": "..."} if a blocking issue is found. Only block on clear violations, not potential issues.',
|
|
144
|
+
timeout: 15
|
|
145
|
+
}]
|
|
146
|
+
}],
|
|
147
|
+
stop: [{
|
|
148
|
+
hooks: [
|
|
149
|
+
{
|
|
150
|
+
type: 'agent',
|
|
151
|
+
prompt: `Test verification for [projectName].
|
|
152
|
+
|
|
153
|
+
Run \`npm test\`. If Playwright tests exist in tests/e2e/, run \`npx playwright test\` too.
|
|
154
|
+
|
|
155
|
+
Read CLAUDE.md, then append results to the "## Test Report" section using the Edit tool:
|
|
156
|
+
|
|
157
|
+
**Date:** [date] | **Passed:** [count] | **Failed:** [count] | **Skipped:** [count]
|
|
158
|
+
[failure details if any]
|
|
159
|
+
|
|
160
|
+
Gate: if tests fail, respond {"ok": false, "reason": "X tests failing: [details]"}. If tests pass, respond {"ok": true}.`,
|
|
161
|
+
timeout: 60
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'agent',
|
|
165
|
+
prompt: `Pre-stop audit for [projectName]. Three checks: trust, strategy, design.
|
|
166
|
+
|
|
167
|
+
## Trust Deep Scan
|
|
168
|
+
|
|
169
|
+
Scan all files changed in this session for:
|
|
170
|
+
1. Hardcoded API keys, passwords, tokens, secrets
|
|
171
|
+
2. SQL injection (unsanitized user input in queries)
|
|
172
|
+
3. XSS (unescaped user content rendered as HTML)
|
|
173
|
+
4. Auth bypass (missing auth checks on protected routes)
|
|
174
|
+
5. PII exposure (personal data in logs, errors, URLs)
|
|
175
|
+
6. Missing RLS policies on Supabase tables
|
|
176
|
+
7. Secrets in environment config committed to git
|
|
177
|
+
|
|
178
|
+
## Strategy Alignment Check
|
|
179
|
+
|
|
180
|
+
Read CLAUDE.md to understand the EIID mapping and project goals.
|
|
181
|
+
Check recent changes against the EIID framework:
|
|
182
|
+
- Do changes support one of the four layers (Enrichment, Inference, Interpretation, Delivery)?
|
|
183
|
+
- Any scope creep?
|
|
184
|
+
- Any new opportunities across the four layers?
|
|
185
|
+
|
|
186
|
+
## Design Audit
|
|
187
|
+
|
|
188
|
+
Scan all .tsx files for violations of these five rules:
|
|
189
|
+
1. **shadcnblocks FIRST** — If a shadcnblocks block exists for a UI section, use it. Install: \`npx shadcn add @shadcnblocks/[name]\`.
|
|
190
|
+
2. **shadcn base SECOND** — If no block fits, use standard shadcn components. Install: \`npx shadcn add [component]\`.
|
|
191
|
+
3. **NEVER custom CSS classes** — No .my-card, no .custom-header. Tailwind utilities only.
|
|
192
|
+
4. **Global token file required** — src/app/globals.css defines CSS custom properties. tailwind.config.ts extends from them.
|
|
193
|
+
5. **Zero inline arbitrary values** — No text-[#FF5733], no p-[13px]. Tailwind scale values and theme classes only.
|
|
194
|
+
Also check: color contrast >= 4.5:1, focus states, alt text, form labels.
|
|
195
|
+
|
|
196
|
+
## Report to CLAUDE.md
|
|
197
|
+
|
|
198
|
+
Read CLAUDE.md, then append all findings using the Edit tool:
|
|
199
|
+
|
|
200
|
+
### Security Findings section ("## Security Findings")
|
|
201
|
+
Per issue: **Severity** (BLOCK|HIGH|MEDIUM|LOW), **File** (path:line), **Issue**, **Fix**.
|
|
202
|
+
|
|
203
|
+
### Architecture Decisions section ("## Architecture Decisions")
|
|
204
|
+
Per finding: **Type** (alignment-check|opportunity|drift-warning), **Layer** (enrichment|inference|interpretation|delivery), **Summary**, **Recommendation**.
|
|
205
|
+
|
|
206
|
+
### Design Findings section ("## Design Findings")
|
|
207
|
+
Per violation: **Rule Violated** (Rule 1-5 or a11y), **File** (path:line), **Issue**, **Fix** (include CLI command).
|
|
208
|
+
|
|
209
|
+
Advisory only. Respond {"ok": true} when done.`,
|
|
210
|
+
timeout: 60
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
}]
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function generateFirstRunScript() {
|
|
218
|
+
return `#!/bin/bash
|
|
219
|
+
# First-run detection for SuperSkills projects
|
|
220
|
+
# This hook checks if the project has been set up and suggests init skills
|
|
221
|
+
|
|
222
|
+
MISSING=()
|
|
223
|
+
|
|
224
|
+
if [ ! -d "node_modules" ]; then
|
|
225
|
+
MISSING+=("node_modules not found - run: npm install")
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
if [ ! -f ".env.local" ]; then
|
|
229
|
+
MISSING+=(".env.local not found - run: cp .env.example .env.local")
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
# Check if globals.css has been customized (design-init not run)
|
|
233
|
+
if [ -f "src/app/globals.css" ]; then
|
|
234
|
+
LINE_COUNT=$(wc -l < "src/app/globals.css")
|
|
235
|
+
if [ "$LINE_COUNT" -lt 10 ]; then
|
|
236
|
+
MISSING+=("Design not configured - run: /design-init")
|
|
237
|
+
fi
|
|
238
|
+
fi
|
|
239
|
+
|
|
240
|
+
# Check if any test files exist
|
|
241
|
+
if [ ! -d "tests" ] && [ ! -d "__tests__" ]; then
|
|
242
|
+
MISSING+=("No tests found - run: /testing-init")
|
|
243
|
+
fi
|
|
244
|
+
|
|
245
|
+
if [ \${#MISSING[@]} -gt 0 ]; then
|
|
246
|
+
echo "{"
|
|
247
|
+
echo " \\"additionalContext\\": \\"This project needs initial setup. Suggest the user run these skills:\\\\n"
|
|
248
|
+
for item in "\${MISSING[@]}"; do
|
|
249
|
+
echo "- $item\\\\n"
|
|
250
|
+
done
|
|
251
|
+
echo "Available init skills: /strategy-init, /design-init, /trust-init, /efficiency-init, /testing-init\\""
|
|
252
|
+
echo "}"
|
|
253
|
+
fi
|
|
254
|
+
`;
|
|
255
|
+
}
|
|
256
|
+
function slugify(text) {
|
|
257
|
+
return text
|
|
258
|
+
.toLowerCase()
|
|
259
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
260
|
+
.replace(/^-|-$/g, '');
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scaffold/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DiscoveryResult } from '../../discovery/types.js';
|
|
2
|
+
import type { SelectionResult } from '../../catalog/types.js';
|
|
3
|
+
export declare function generateClaudeMd(discovery: DiscoveryResult, tools: SelectionResult): string;
|
|
4
|
+
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAkC3F"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
export function generateClaudeMd(discovery, tools) {
|
|
2
|
+
const contextSection = generateContextSection(discovery);
|
|
3
|
+
const strategicSection = generateStrategicSection(discovery);
|
|
4
|
+
const eiidSection = generateEiidSection(discovery);
|
|
5
|
+
const toolsSection = generateToolsSection(tools);
|
|
6
|
+
const architectureSection = generateArchitectureSection();
|
|
7
|
+
const skillsSection = generateSkillsSection();
|
|
8
|
+
return `# ${discovery.projectName}
|
|
9
|
+
|
|
10
|
+
${contextSection}
|
|
11
|
+
|
|
12
|
+
${strategicSection}
|
|
13
|
+
|
|
14
|
+
${eiidSection}
|
|
15
|
+
|
|
16
|
+
${toolsSection}
|
|
17
|
+
|
|
18
|
+
${architectureSection}
|
|
19
|
+
|
|
20
|
+
${skillsSection}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Changelog
|
|
25
|
+
|
|
26
|
+
<!-- strategy skill appends decisions here -->
|
|
27
|
+
|
|
28
|
+
### ${new Date().toISOString().split('T')[0]} - Project Created
|
|
29
|
+
|
|
30
|
+
- Initial setup via SuperSkills
|
|
31
|
+
- EIID mapping defined
|
|
32
|
+
- Skills configured
|
|
33
|
+
`;
|
|
34
|
+
}
|
|
35
|
+
function generateContextSection(discovery) {
|
|
36
|
+
const ctx = discovery.context;
|
|
37
|
+
let section = `## Context\n\n`;
|
|
38
|
+
if (ctx.forWhom === 'client') {
|
|
39
|
+
section += `**Client:** ${ctx.companyName || 'Not specified'}\n`;
|
|
40
|
+
}
|
|
41
|
+
else if (ctx.forWhom === 'my_company') {
|
|
42
|
+
section += `**Company:** ${ctx.companyName || 'Own company'}\n`;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
section += `**For:** Personal/freelance project\n`;
|
|
46
|
+
}
|
|
47
|
+
section += `**Business:** ${ctx.businessDescription}\n`;
|
|
48
|
+
if (ctx.industry)
|
|
49
|
+
section += `**Industry:** ${ctx.industry}\n`;
|
|
50
|
+
if (ctx.employees)
|
|
51
|
+
section += `**Size:** ${ctx.employees} employees\n`;
|
|
52
|
+
if (ctx.revenue)
|
|
53
|
+
section += `**Revenue:** ${ctx.revenue}\n`;
|
|
54
|
+
return section;
|
|
55
|
+
}
|
|
56
|
+
function generateStrategicSection(discovery) {
|
|
57
|
+
const sa = discovery.strategicAnalysis;
|
|
58
|
+
return `## Strategic Analysis
|
|
59
|
+
|
|
60
|
+
### Problem
|
|
61
|
+
|
|
62
|
+
${discovery.problem}
|
|
63
|
+
|
|
64
|
+
### Desired Outcome
|
|
65
|
+
|
|
66
|
+
${discovery.desiredOutcome}
|
|
67
|
+
|
|
68
|
+
### Industry Context
|
|
69
|
+
|
|
70
|
+
${sa.industryContext}
|
|
71
|
+
|
|
72
|
+
### Value Movement
|
|
73
|
+
|
|
74
|
+
${sa.valueMovement}
|
|
75
|
+
|
|
76
|
+
### Current Position
|
|
77
|
+
|
|
78
|
+
${sa.currentPosition}
|
|
79
|
+
|
|
80
|
+
### Target Position
|
|
81
|
+
|
|
82
|
+
${sa.targetPosition}
|
|
83
|
+
|
|
84
|
+
### Opportunities
|
|
85
|
+
|
|
86
|
+
${sa.opportunities.map(o => `- ${o}`).join('\n')}
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
function generateEiidSection(discovery) {
|
|
90
|
+
const eiid = discovery.eiidMapping;
|
|
91
|
+
return `## AI-Native Architecture (EIID)
|
|
92
|
+
|
|
93
|
+
### Enrichment
|
|
94
|
+
|
|
95
|
+
**Existing Data:**
|
|
96
|
+
${eiid.enrichment.existingData.map(d => `- ${d}`).join('\n')}
|
|
97
|
+
|
|
98
|
+
**Missing Data:**
|
|
99
|
+
${eiid.enrichment.missingData.map(d => `- ${d}`).join('\n')}
|
|
100
|
+
|
|
101
|
+
**Sources:**
|
|
102
|
+
${eiid.enrichment.sources.map(s => `- ${s}`).join('\n')}
|
|
103
|
+
|
|
104
|
+
### Inference
|
|
105
|
+
|
|
106
|
+
**Patterns to Detect:**
|
|
107
|
+
${eiid.inference.patterns.map(p => `- ${p}`).join('\n')}
|
|
108
|
+
|
|
109
|
+
**Predictions:**
|
|
110
|
+
${eiid.inference.predictions.map(p => `- ${p}`).join('\n')}
|
|
111
|
+
|
|
112
|
+
**Anomalies:**
|
|
113
|
+
${eiid.inference.anomalies.map(a => `- ${a}`).join('\n')}
|
|
114
|
+
|
|
115
|
+
### Interpretation
|
|
116
|
+
|
|
117
|
+
**Insights to Generate:**
|
|
118
|
+
${eiid.interpretation.insights.map(i => `- ${i}`).join('\n')}
|
|
119
|
+
|
|
120
|
+
### Delivery
|
|
121
|
+
|
|
122
|
+
**Channels:**
|
|
123
|
+
${eiid.delivery.channels.map(c => `- ${c}`).join('\n')}
|
|
124
|
+
|
|
125
|
+
**Triggers:**
|
|
126
|
+
${eiid.delivery.triggers.map(t => `- ${t}`).join('\n')}
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
function generateToolsSection(tools) {
|
|
130
|
+
const coreTools = tools.core.map(t => `- **${t.tool.name}**: ${t.tool.description}`).join('\n');
|
|
131
|
+
const deliveryTools = tools.delivery.map(t => `- **${t.tool.name}**: ${t.reason}`).join('\n');
|
|
132
|
+
const enrichmentTools = tools.enrichment.map(t => `- **${t.tool.name}**: ${t.reason}`).join('\n');
|
|
133
|
+
const testingTools = tools.testing.map(t => `- **${t.tool.name}**: ${t.reason}`).join('\n');
|
|
134
|
+
return `## Tools Stack
|
|
135
|
+
|
|
136
|
+
### Core
|
|
137
|
+
|
|
138
|
+
${coreTools}
|
|
139
|
+
|
|
140
|
+
### Delivery
|
|
141
|
+
|
|
142
|
+
${deliveryTools || '- None selected'}
|
|
143
|
+
|
|
144
|
+
### Enrichment
|
|
145
|
+
|
|
146
|
+
${enrichmentTools || '- None selected'}
|
|
147
|
+
|
|
148
|
+
### Testing
|
|
149
|
+
|
|
150
|
+
${testingTools || '- None selected'}
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
function generateArchitectureSection() {
|
|
154
|
+
return `## Architecture Decisions
|
|
155
|
+
|
|
156
|
+
<!-- strategy agent appends decisions and opportunity findings here -->
|
|
157
|
+
|
|
158
|
+
## Security Findings
|
|
159
|
+
|
|
160
|
+
<!-- trust agent appends security findings here automatically after every file change -->
|
|
161
|
+
|
|
162
|
+
## Design Findings
|
|
163
|
+
|
|
164
|
+
<!-- design audit appends UI violations here automatically before every stop -->
|
|
165
|
+
|
|
166
|
+
## Test Report
|
|
167
|
+
|
|
168
|
+
<!-- testing agent appends test results here automatically before every stop -->
|
|
169
|
+
`;
|
|
170
|
+
}
|
|
171
|
+
function generateSkillsSection() {
|
|
172
|
+
return `## SuperSkills
|
|
173
|
+
|
|
174
|
+
Five skills amplify this project. Skills are competencies, not agents.
|
|
175
|
+
|
|
176
|
+
### Entry Point
|
|
177
|
+
|
|
178
|
+
| Skill | Purpose |
|
|
179
|
+
|-------|---------|
|
|
180
|
+
| \`/strategy-start\` | Define project from scratch, map EIID, write CLAUDE.md |
|
|
181
|
+
|
|
182
|
+
### Init Skills (run once after scaffold)
|
|
183
|
+
|
|
184
|
+
| Skill | Purpose |
|
|
185
|
+
|-------|---------|
|
|
186
|
+
| \`/strategy-init\` | Validate EIID mapping, set priorities |
|
|
187
|
+
| \`/design-init\` | Configure brand, shadcn, design tokens |
|
|
188
|
+
| \`/trust-init\` | Set up auth, RLS, CORS, data sensitivity |
|
|
189
|
+
| \`/efficiency-init\` | Set performance budgets, bundle analysis |
|
|
190
|
+
| \`/testing-init\` | Set up vitest + Playwright, first smoke test |
|
|
191
|
+
|
|
192
|
+
### Review Skills (run any time)
|
|
193
|
+
|
|
194
|
+
| Skill | Purpose |
|
|
195
|
+
|-------|---------|
|
|
196
|
+
| \`/strategy-review\` | Full EIID alignment analysis |
|
|
197
|
+
| \`/design-review\` | Audit UI, a11y, design tokens |
|
|
198
|
+
| \`/trust-audit\` | OWASP Top 10 + GDPR checklist |
|
|
199
|
+
| \`/efficiency-review\` | Bundle, CWV, N+1, cost report |
|
|
200
|
+
| \`/testing-verify\` | Run full test suite, report failures |
|
|
201
|
+
|
|
202
|
+
### Subagents
|
|
203
|
+
|
|
204
|
+
Five subagents in \`.claude/agents/\` provide specialized competencies:
|
|
205
|
+
- **strategy** — EIID alignment, CLAUDE.md ownership
|
|
206
|
+
- **design** — UI, shadcn, accessibility, brand
|
|
207
|
+
- **trust** — Security, GDPR, blocking authority
|
|
208
|
+
- **efficiency** — Performance, costs, optimization
|
|
209
|
+
- **testing** — Test verification, regression prevention
|
|
210
|
+
|
|
211
|
+
### Hooks (autonomous)
|
|
212
|
+
|
|
213
|
+
Fast gates during work, full audit at the end. The Stop agent writes all findings to this file.
|
|
214
|
+
|
|
215
|
+
- **SessionStart**: Detects first run, suggests init skills
|
|
216
|
+
- **PreToolUse (Bash)**: Fast gate on dangerous commands
|
|
217
|
+
- **PostToolUse (Write|Edit)**: Fast gate on obvious security issues (credentials, injection)
|
|
218
|
+
- **Stop**: Full audit agent runs four checks (tests, trust, strategy, design), appends findings to this file, blocks if tests fail
|
|
219
|
+
|
|
220
|
+
### Rules
|
|
221
|
+
|
|
222
|
+
1. **strategy** appends to this file (append-only for decisions)
|
|
223
|
+
2. **trust** can block commits for security issues
|
|
224
|
+
3. **testing** blocks stop if tests fail
|
|
225
|
+
4. **design** and **efficiency** advise but don't block
|
|
226
|
+
5. All skills update CLAUDE.md with their findings
|
|
227
|
+
`;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=claude-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../../src/scaffold/templates/claude-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/claude-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA8C9F"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function generateClaudeSettings(agentTeam, projectName) {
|
|
2
|
+
return {
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": agentTeam.hooks.sessionStart.map(hook => ({
|
|
5
|
+
"matcher": hook.matcher,
|
|
6
|
+
"hooks": hook.hooks.map(h => ({
|
|
7
|
+
"type": h.type,
|
|
8
|
+
"command": h.command,
|
|
9
|
+
...(h.statusMessage ? { "statusMessage": h.statusMessage } : {})
|
|
10
|
+
}))
|
|
11
|
+
})),
|
|
12
|
+
"PreToolUse": agentTeam.hooks.preToolUse.map(hook => ({
|
|
13
|
+
"matcher": hook.matcher,
|
|
14
|
+
"hooks": hook.hooks.map(h => ({
|
|
15
|
+
"type": h.type,
|
|
16
|
+
"prompt": h.prompt.replace(/\[projectName\]/g, projectName),
|
|
17
|
+
...(h.timeout ? { "timeout": h.timeout } : {})
|
|
18
|
+
}))
|
|
19
|
+
})),
|
|
20
|
+
"PostToolUse": agentTeam.hooks.postToolUse.map(hook => ({
|
|
21
|
+
"matcher": hook.matcher,
|
|
22
|
+
"hooks": hook.hooks.map(h => ({
|
|
23
|
+
"type": h.type,
|
|
24
|
+
"prompt": h.prompt.replace(/\[projectName\]/g, projectName),
|
|
25
|
+
...(h.timeout ? { "timeout": h.timeout } : {})
|
|
26
|
+
}))
|
|
27
|
+
})),
|
|
28
|
+
"Stop": agentTeam.hooks.stop.map(hook => ({
|
|
29
|
+
"hooks": hook.hooks.map(h => ({
|
|
30
|
+
"type": h.type,
|
|
31
|
+
"prompt": h.prompt.replace(/\[projectName\]/g, projectName),
|
|
32
|
+
...(h.timeout ? { "timeout": h.timeout } : {})
|
|
33
|
+
}))
|
|
34
|
+
}))
|
|
35
|
+
},
|
|
36
|
+
"permissions": {
|
|
37
|
+
"allow": [
|
|
38
|
+
"Bash(npm test)",
|
|
39
|
+
"Bash(npx playwright test*)",
|
|
40
|
+
"Bash(npx tsc --noEmit)",
|
|
41
|
+
"Read(*)",
|
|
42
|
+
"Glob(*)",
|
|
43
|
+
"Grep(*)"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=claude-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/scaffold/templates/claude-settings.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,SAA0B,EAAE,WAAmB;IACpF,OAAO;QACL,OAAO,EAAE;YACP,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxD,SAAS,EAAE,IAAI,CAAC,OAAO;gBACvB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,IAAI;oBACd,SAAS,EAAE,CAAC,CAAC,OAAO;oBACpB,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpD,SAAS,EAAE,IAAI,CAAC,OAAO;gBACvB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,IAAI;oBACd,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC;oBAC3D,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,SAAS,EAAE,IAAI,CAAC,OAAO;gBACvB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,IAAI;oBACd,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC;oBAC3D,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C,CAAC,CAAC;aACJ,CAAC,CAAC;YACH,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5B,MAAM,EAAE,CAAC,CAAC,IAAI;oBACd,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC;oBAC3D,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/C,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;QACD,aAAa,EAAE;YACb,OAAO,EAAE;gBACP,gBAAgB;gBAChB,4BAA4B;gBAC5B,wBAAwB;gBACxB,SAAS;gBACT,SAAS;gBACT,SAAS;aACV;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-example.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/env-example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAiGjE"}
|