superskills 0.1.0 → 0.2.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.
Files changed (54) hide show
  1. package/README.md +48 -9
  2. package/dist/discovery/analyze.d.ts.map +1 -1
  3. package/dist/discovery/analyze.js +6 -38
  4. package/dist/discovery/analyze.js.map +1 -1
  5. package/dist/discovery/index.d.ts.map +1 -1
  6. package/dist/discovery/index.js +3 -26
  7. package/dist/discovery/index.js.map +1 -1
  8. package/dist/evolve/index.d.ts +12 -0
  9. package/dist/evolve/index.d.ts.map +1 -0
  10. package/dist/evolve/index.js +96 -0
  11. package/dist/evolve/index.js.map +1 -0
  12. package/dist/evolve/proposer.d.ts +34 -0
  13. package/dist/evolve/proposer.d.ts.map +1 -0
  14. package/dist/evolve/proposer.js +170 -0
  15. package/dist/evolve/proposer.js.map +1 -0
  16. package/dist/evolve/scanner.d.ts +14 -0
  17. package/dist/evolve/scanner.d.ts.map +1 -0
  18. package/dist/evolve/scanner.js +69 -0
  19. package/dist/evolve/scanner.js.map +1 -0
  20. package/dist/handoff/collector.d.ts +24 -0
  21. package/dist/handoff/collector.d.ts.map +1 -0
  22. package/dist/handoff/collector.js +161 -0
  23. package/dist/handoff/collector.js.map +1 -0
  24. package/dist/handoff/index.d.ts +11 -0
  25. package/dist/handoff/index.d.ts.map +1 -0
  26. package/dist/handoff/index.js +38 -0
  27. package/dist/handoff/index.js.map +1 -0
  28. package/dist/handoff/renderer.d.ts +3 -0
  29. package/dist/handoff/renderer.d.ts.map +1 -0
  30. package/dist/handoff/renderer.js +71 -0
  31. package/dist/handoff/renderer.js.map +1 -0
  32. package/dist/index.js +143 -49
  33. package/dist/index.js.map +1 -1
  34. package/dist/scaffold/index.js +23 -23
  35. package/dist/scaffold/index.js.map +1 -1
  36. package/dist/scaffold/templates/skill-commands.d.ts.map +1 -1
  37. package/dist/scaffold/templates/skill-commands.js +20 -11
  38. package/dist/scaffold/templates/skill-commands.js.map +1 -1
  39. package/dist/scaffold/templates/teammate-prompts.d.ts.map +1 -1
  40. package/dist/scaffold/templates/teammate-prompts.js +20 -29
  41. package/dist/scaffold/templates/teammate-prompts.js.map +1 -1
  42. package/dist/utils/auth.d.ts +28 -0
  43. package/dist/utils/auth.d.ts.map +1 -0
  44. package/dist/utils/auth.js +136 -0
  45. package/dist/utils/auth.js.map +1 -0
  46. package/dist/utils/claude-cli.d.ts +11 -0
  47. package/dist/utils/claude-cli.d.ts.map +1 -0
  48. package/dist/utils/claude-cli.js +59 -0
  49. package/dist/utils/claude-cli.js.map +1 -0
  50. package/dist/utils/model-tiers.d.ts +11 -0
  51. package/dist/utils/model-tiers.d.ts.map +1 -0
  52. package/dist/utils/model-tiers.js +24 -0
  53. package/dist/utils/model-tiers.js.map +1 -0
  54. package/package.json +2 -1
package/README.md CHANGED
@@ -45,17 +45,23 @@ This is **EIID**. Discovery maps your business problem to these four layers. Eve
45
45
 
46
46
  **For the CLI (new project generation):**
47
47
  - Node.js 20 or later. Check with `node --version`.
48
- - An Anthropic API key: [console.anthropic.com/settings/keys](https://console.anthropic.com/settings/keys). Free tier available. Not needed from Claude Code.
48
+ - Authentication (one of):
49
+ - **Claude CLI** with an active subscription (Max or Pro). Detected automatically. No API key needed.
50
+ - **Anthropic API key**: [console.anthropic.com/settings/keys](https://console.anthropic.com/settings/keys). Free tier available.
49
51
 
50
52
  ## Install
51
53
 
54
+ ```bash
55
+ npm install -g superskills
56
+ ```
57
+
58
+ Or install from source:
59
+
52
60
  ```bash
53
61
  git clone https://github.com/Play-New/SuperSkills.git
54
62
  cd SuperSkills && npm install && npm run build && npm link
55
63
  ```
56
64
 
57
- After `npm link`, the `superskills` command works globally.
58
-
59
65
  If you only need the standalone skills (no CLI), skip the install. Just clone and copy the skill folders into your project (see below).
60
66
 
61
67
  ## Add skills to an existing project
@@ -125,9 +131,9 @@ For new projects, the CLI runs the full pipeline: describe the problem, analyze
125
131
  superskills
126
132
  ```
127
133
 
128
- It asks about your business problem step by step. If you don't have an API key set, it asks for one.
134
+ It asks about your business problem step by step. If you have Claude CLI installed with an active subscription, it uses that automatically. Otherwise it checks for an API key, and if neither is found, it offers an interactive menu.
129
135
 
130
- Optional one-time setup (saves your API key so you don't paste it every time):
136
+ Optional one-time setup (configures authentication and Claude Code integration):
131
137
 
132
138
  ```bash
133
139
  superskills init
@@ -169,6 +175,34 @@ Then open in Claude Code and run the init skills:
169
175
 
170
176
  These run once. After that, hooks handle ongoing checks automatically.
171
177
 
178
+ ## Keep skills in sync
179
+
180
+ As a project evolves (new dependencies, new delivery channels, framework changes), the skill configuration can drift. `evolve` detects this.
181
+
182
+ ```bash
183
+ superskills evolve
184
+ ```
185
+
186
+ It scans `package.json`, compares against the installed skill configuration, and proposes updates:
187
+
188
+ - **Skill implications**: "Stripe detected. Trust skill should check PCI-DSS patterns."
189
+ - **Negative constraints**: "Use Drizzle, NOT Prisma." Written to CLAUDE.md so Claude never suggests the wrong alternative.
190
+ - **MCP data connectors**: "Supabase MCP available for direct database queries." These are data connectors, not skill replacements.
191
+
192
+ The report can be appended to CLAUDE.md (`--apply`) or output as JSON (`--json`).
193
+
194
+ ## Developer handoff
195
+
196
+ When a project moves from one developer to another, `handoff` generates a complete status document.
197
+
198
+ ```bash
199
+ superskills handoff
200
+ ```
201
+
202
+ Writes `HANDOFF.md` with: tech stack, build/test status, EIID mapping, accumulated skill findings from CLAUDE.md, technology constraints, and dependency overview. Everything a new developer needs to understand the project state without reading the full codebase.
203
+
204
+ Options: `--no-build` and `--no-test` to skip running those checks. `--json` for machine-readable output.
205
+
172
206
  ## EIID in practice
173
207
 
174
208
  Same distributor, layer by layer.
@@ -322,7 +356,7 @@ npm install
322
356
  ### Commands
323
357
 
324
358
  ```bash
325
- npm test # 98 tests across 5 files
359
+ npm test # 166 tests across 10 files
326
360
  npm run type-check # TypeScript strict mode
327
361
  npm run dev # Run CLI in development mode
328
362
  npm run build # Compile to dist/
@@ -333,18 +367,23 @@ npm run lint # ESLint
333
367
 
334
368
  | Variable | Required | Default |
335
369
  |----------|----------|---------|
336
- | `ANTHROPIC_API_KEY` | Yes (for discovery) | Asked interactively if missing |
370
+ | `ANTHROPIC_API_KEY` | No (if Claude CLI available) | Detected via Claude CLI, env, or interactive prompt |
337
371
  | `SUPERSKILLS_MODEL` | No | `claude-opus-4-6` |
338
372
 
339
373
  ### Tests
340
374
 
341
- 98 tests across five files:
375
+ 166 tests across ten files:
342
376
 
343
377
  | File | Count | What It Tests |
344
378
  |------|-------|--------------|
345
- | `analyze.test.ts` | 18 | Claude API mocking, JSON validation, markdown stripping |
379
+ | `analyze.test.ts` | 16 | LLM call mocking, JSON validation, markdown stripping |
380
+ | `auth.test.ts` | 13 | Three-tier auth cascade, LLM dispatch, caching |
346
381
  | `catalog.test.ts` | 24 | Channel mapping, tool selection, category handling |
382
+ | `claude-cli.test.ts` | 11 | CLI detection, auth check, execution (child_process mocked) |
347
383
  | `discovery-core.test.ts` | 10 | Validation pipeline, error transformation |
384
+ | `evolve.test.ts` | 21 | Project scanning, skill implications, negative constraints, MCP suggestions |
385
+ | `handoff.test.ts` | 18 | Project info collection, HANDOFF.md rendering, skill finding extraction |
386
+ | `model-tiers.test.ts` | 7 | Model tier defaults, env override, stable aliases |
348
387
  | `scaffold.test.ts` | 26 | File generation, hooks, agents, skills, design tokens, Playwright, E2E |
349
388
  | `schema.test.ts` | 20 | Zod validation edge cases, defaults, JSON Schema output |
350
389
 
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/discovery/analyze.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+DlE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAyC3F;AA8CD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/discovery/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA0DlE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAuB3F;AA8CD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
@@ -1,5 +1,5 @@
1
- import Anthropic from '@anthropic-ai/sdk';
2
1
  import { StrategicAnalysisSchema, EIIDMappingSchema } from './schema.js';
2
+ import { executeLLMCall } from '../utils/auth.js';
3
3
  const ANALYSIS_PROMPT = `Generate strategic analysis for the following project.
4
4
 
5
5
  ANALYSIS FRAMEWORKS:
@@ -53,34 +53,15 @@ OUTPUT: JSON only, no markdown, no explanation.
53
53
  }
54
54
 
55
55
  STYLE: Direct statements. No "I recommend", no "you should". Facts and analysis only.`;
56
- const DEFAULT_MODEL = 'claude-opus-4-6';
57
- function getModel() {
58
- return process.env.SUPERSKILLS_MODEL || DEFAULT_MODEL;
59
- }
60
56
  export function stripMarkdownFences(text) {
61
57
  const match = text.match(/^\s*```(?:json)?\s*\n?([\s\S]*?)\n?\s*```\s*$/);
62
58
  return match ? match[1] : text;
63
59
  }
64
60
  export async function analyzeDiscoveryInput(input) {
65
- const apiKey = process.env.ANTHROPIC_API_KEY;
66
- if (!apiKey) {
67
- throw new Error('ANTHROPIC_API_KEY environment variable required');
68
- }
69
- const client = new Anthropic({ apiKey });
70
61
  const inputText = formatInputForAnalysis(input);
71
- const response = await client.messages.create({
72
- model: getModel(),
73
- max_tokens: 4096,
74
- messages: [{
75
- role: 'user',
76
- content: `${ANALYSIS_PROMPT}\n\n---\n\nPROJECT INFORMATION:\n\n${inputText}`
77
- }]
78
- });
79
- const textContent = response.content.find(c => c.type === 'text');
80
- if (!textContent || textContent.type !== 'text') {
81
- throw new Error('No text response from API');
82
- }
83
- const cleaned = stripMarkdownFences(textContent.text);
62
+ const prompt = `${ANALYSIS_PROMPT}\n\n---\n\nPROJECT INFORMATION:\n\n${inputText}`;
63
+ const responseText = await executeLLMCall(prompt, { maxTokens: 4096 });
64
+ const cleaned = stripMarkdownFences(responseText);
84
65
  let analysis;
85
66
  try {
86
67
  analysis = JSON.parse(cleaned);
@@ -139,11 +120,6 @@ function formatInputForAnalysis(input) {
139
120
  return lines.join('\n');
140
121
  }
141
122
  export async function analyzeRawContent(content, contentType, fileName) {
142
- const apiKey = process.env.ANTHROPIC_API_KEY;
143
- if (!apiKey) {
144
- throw new Error('ANTHROPIC_API_KEY environment variable required');
145
- }
146
- const client = new Anthropic({ apiKey });
147
123
  const extractPrompt = `Extract project information from this ${contentType === 'file' ? `file (${fileName})` : 'text'}.
148
124
 
149
125
  Return a JSON object with these fields (infer what you can, leave empty string if not found):
@@ -168,16 +144,8 @@ Return a JSON object with these fields (infer what you can, leave empty string i
168
144
  Content to analyze:
169
145
 
170
146
  ${content}`;
171
- const extractResponse = await client.messages.create({
172
- model: getModel(),
173
- max_tokens: 2048,
174
- messages: [{ role: 'user', content: extractPrompt }]
175
- });
176
- const extractText = extractResponse.content.find(c => c.type === 'text');
177
- if (!extractText || extractText.type !== 'text') {
178
- throw new Error('No response from extraction');
179
- }
180
- const cleanedExtract = stripMarkdownFences(extractText.text);
147
+ const extractText = await executeLLMCall(extractPrompt, { maxTokens: 2048 });
148
+ const cleanedExtract = stripMarkdownFences(extractText);
181
149
  let input;
182
150
  try {
183
151
  input = JSON.parse(cleanedExtract);
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/discovery/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/discovery/analyze.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsC,eAAe,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAElF,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqDpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsC,eAAe,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAElF,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA6BpE"}
@@ -7,29 +7,6 @@ export { processJsonInput, getInputJsonSchema, ValidationError } from './core.js
7
7
  export async function runDiscovery() {
8
8
  p.intro(pc.bgCyan(pc.black(' Discovery ')));
9
9
  console.log(pc.dim('\n Strategic planning for AI-native projects.\n'));
10
- if (!process.env.ANTHROPIC_API_KEY) {
11
- p.log.info(`You need an Anthropic API key for the AI analysis step.\n` +
12
- pc.dim(` Get one here (free tier available): `) +
13
- pc.cyan(`https://console.anthropic.com/settings/keys\n`) +
14
- pc.dim(` To skip this prompt next time: `) +
15
- pc.cyan(`export ANTHROPIC_API_KEY=sk-ant-...`));
16
- const key = await p.text({
17
- message: 'Paste your Anthropic API key:',
18
- placeholder: 'sk-ant-api03-...',
19
- validate: (v) => {
20
- if (!v)
21
- return 'API key is required. Get one at console.anthropic.com/settings/keys';
22
- if (!v.startsWith('sk-ant-'))
23
- return 'Should start with sk-ant-. Check you copied the full key.';
24
- return undefined;
25
- }
26
- });
27
- if (p.isCancel(key)) {
28
- p.cancel('Cancelled');
29
- return null;
30
- }
31
- process.env.ANTHROPIC_API_KEY = key;
32
- }
33
10
  const inputMode = await chooseInputMode();
34
11
  if (!inputMode)
35
12
  return null;
@@ -57,9 +34,9 @@ async function chooseInputMode() {
57
34
  const mode = await p.select({
58
35
  message: 'How would you like to provide project information?',
59
36
  options: [
60
- { value: 'paste', label: 'Paste text', hint: 'Brief, email, notes' },
61
- { value: 'file', label: 'Load file', hint: 'Text or Markdown' },
62
- { value: 'questions', label: 'Answer questions', hint: 'Guided flow' }
37
+ { value: 'questions', label: 'Guided flow (Recommended)', hint: 'Step-by-step questions' },
38
+ { value: 'paste', label: 'Paste a brief', hint: 'Already have a description? Skips all questions' },
39
+ { value: 'file', label: 'Load from file', hint: '.txt or .md' },
63
40
  ]
64
41
  });
65
42
  if (p.isCancel(mode)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type EvolveReport } from './proposer.js';
2
+ export interface EvolveOptions {
3
+ json?: boolean;
4
+ apply?: boolean;
5
+ output?: string;
6
+ }
7
+ export declare function runEvolve(projectDir: string, options?: EvolveOptions): Promise<EvolveReport>;
8
+ export { scanProject } from './scanner.js';
9
+ export { proposeChanges } from './proposer.js';
10
+ export type { EvolveReport, SkillImplication, NegativeConstraint, McpSuggestion } from './proposer.js';
11
+ export type { ProjectState } from './scanner.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evolve/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+BtG;AA+ED,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACvG,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,96 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import { scanProject } from './scanner.js';
6
+ import { proposeChanges } from './proposer.js';
7
+ export async function runEvolve(projectDir, options = {}) {
8
+ const state = await scanProject(projectDir);
9
+ const report = proposeChanges(state);
10
+ if (options.json) {
11
+ const output = JSON.stringify(report, null, 2);
12
+ if (options.output) {
13
+ await fs.writeFile(options.output, output);
14
+ }
15
+ else {
16
+ console.log(output);
17
+ }
18
+ return report;
19
+ }
20
+ // Interactive display
21
+ displayReport(report, state.name);
22
+ if (options.apply && report.skillImplications.length > 0) {
23
+ await applyToClaudeMd(projectDir, report);
24
+ }
25
+ else if (!options.apply && hasRecommendations(report)) {
26
+ const shouldApply = await p.confirm({
27
+ message: 'Append recommendations to CLAUDE.md?',
28
+ initialValue: true,
29
+ });
30
+ if (!p.isCancel(shouldApply) && shouldApply) {
31
+ await applyToClaudeMd(projectDir, report);
32
+ }
33
+ }
34
+ return report;
35
+ }
36
+ function hasRecommendations(report) {
37
+ return report.skillImplications.length > 0
38
+ || report.constraints.length > 0
39
+ || report.mcpSuggestions.length > 0;
40
+ }
41
+ function displayReport(report, projectName) {
42
+ if (!hasRecommendations(report)) {
43
+ p.log.success('No new recommendations. Skills are up to date.');
44
+ return;
45
+ }
46
+ console.log('');
47
+ if (report.skillImplications.length > 0) {
48
+ const lines = report.skillImplications.map(s => `${pc.bold(s.skill)}: ${s.recommendation} ${pc.dim(`(${s.trigger})`)}`);
49
+ p.note(lines.join('\n'), `Skill recommendations for ${projectName}`);
50
+ }
51
+ if (report.constraints.length > 0) {
52
+ const lines = report.constraints.map(c => `Use ${pc.bold(c.use)}, NOT ${c.notUse.join(', ')}`);
53
+ p.note(lines.join('\n'), 'Technology constraints');
54
+ }
55
+ if (report.mcpSuggestions.length > 0) {
56
+ const lines = report.mcpSuggestions.map(m => `${pc.bold(m.name)}: ${m.description}`);
57
+ p.note(lines.join('\n'), 'MCP server suggestions (data connectors)');
58
+ }
59
+ }
60
+ async function applyToClaudeMd(projectDir, report) {
61
+ const claudeMdPath = path.join(projectDir, 'CLAUDE.md');
62
+ const sections = [];
63
+ sections.push(`\n## Evolve Report (${new Date().toISOString().slice(0, 10)})\n`);
64
+ if (report.skillImplications.length > 0) {
65
+ sections.push('### Skill Recommendations\n');
66
+ for (const s of report.skillImplications) {
67
+ sections.push(`- **${s.skill}**: ${s.recommendation}`);
68
+ }
69
+ sections.push('');
70
+ }
71
+ if (report.constraints.length > 0) {
72
+ sections.push('### Technology Constraints\n');
73
+ for (const c of report.constraints) {
74
+ sections.push(`- Use ${c.use}, NOT ${c.notUse.join(', ')}.`);
75
+ }
76
+ sections.push('');
77
+ }
78
+ if (report.mcpSuggestions.length > 0) {
79
+ sections.push('### MCP Data Connectors\n');
80
+ for (const m of report.mcpSuggestions) {
81
+ sections.push(`- **${m.name}**: ${m.description}`);
82
+ }
83
+ sections.push('');
84
+ }
85
+ const content = sections.join('\n');
86
+ if (await fs.pathExists(claudeMdPath)) {
87
+ await fs.appendFile(claudeMdPath, content);
88
+ }
89
+ else {
90
+ await fs.writeFile(claudeMdPath, `# ${path.basename(projectDir)}\n${content}`);
91
+ }
92
+ p.log.success(`Appended to ${pc.cyan(claudeMdPath)}`);
93
+ }
94
+ export { scanProject } from './scanner.js';
95
+ export { proposeChanges } from './proposer.js';
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evolve/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ProjectState } from './scanner.js';
2
+ type SkillName = 'trust' | 'design' | 'testing' | 'efficiency' | 'strategy';
3
+ export interface SkillImplication {
4
+ skill: SkillName;
5
+ recommendation: string;
6
+ trigger: string;
7
+ }
8
+ export interface NegativeConstraint {
9
+ use: string;
10
+ notUse: string[];
11
+ }
12
+ export interface McpSuggestion {
13
+ name: string;
14
+ description: string;
15
+ trigger: string;
16
+ }
17
+ export interface EvolveReport {
18
+ skillImplications: SkillImplication[];
19
+ constraints: NegativeConstraint[];
20
+ mcpSuggestions: McpSuggestion[];
21
+ }
22
+ declare const SKILL_IMPLICATIONS: Array<{
23
+ match: string | string[];
24
+ implications: SkillImplication[];
25
+ }>;
26
+ declare const ALTERNATIVE_GROUPS: Array<Array<[string, string]>>;
27
+ declare const MCP_SUGGESTIONS: Array<{
28
+ match: string | string[];
29
+ name: string;
30
+ description: string;
31
+ }>;
32
+ export declare function proposeChanges(state: ProjectState): EvolveReport;
33
+ export { SKILL_IMPLICATIONS, ALTERNATIVE_GROUPS, MCP_SUGGESTIONS };
34
+ //# sourceMappingURL=proposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposer.d.ts","sourceRoot":"","sources":["../../src/evolve/proposer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAKD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC,CA4EA,CAAC;AAIF,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAStD,CAAC;AAGF,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAgBA,CAAC;AAIF,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAShE;AA8DD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,170 @@
1
+ // --- Data tables ---
2
+ // dependency pattern -> skill implications
3
+ const SKILL_IMPLICATIONS = [
4
+ {
5
+ match: 'stripe',
6
+ implications: [
7
+ { skill: 'trust', recommendation: 'Enable PCI-DSS compliance checks for payment processing.', trigger: 'stripe' },
8
+ { skill: 'efficiency', recommendation: 'Monitor Stripe API call costs and rate limits.', trigger: 'stripe' },
9
+ ],
10
+ },
11
+ {
12
+ match: '@supabase/supabase-js',
13
+ implications: [
14
+ { skill: 'trust', recommendation: 'Verify Row Level Security policies on all tables.', trigger: '@supabase/supabase-js' },
15
+ { skill: 'trust', recommendation: 'Check that service_role key is never exposed to the client.', trigger: '@supabase/supabase-js' },
16
+ ],
17
+ },
18
+ {
19
+ match: ['redis', 'ioredis', '@upstash/redis'],
20
+ implications: [
21
+ { skill: 'efficiency', recommendation: 'Monitor cache hit rates and memory usage.', trigger: 'redis' },
22
+ { skill: 'trust', recommendation: 'Verify Redis connection uses TLS in production.', trigger: 'redis' },
23
+ ],
24
+ },
25
+ {
26
+ match: 'inngest',
27
+ implications: [
28
+ { skill: 'efficiency', recommendation: 'Monitor Inngest function execution costs and retry rates.', trigger: 'inngest' },
29
+ { skill: 'testing', recommendation: 'Add integration tests for Inngest function handlers.', trigger: 'inngest' },
30
+ ],
31
+ },
32
+ {
33
+ match: ['@clerk/nextjs', 'next-auth', 'lucia'],
34
+ implications: [
35
+ { skill: 'trust', recommendation: 'Verify auth middleware covers all protected routes.', trigger: 'auth library' },
36
+ { skill: 'testing', recommendation: 'Add E2E tests for login/logout/session-expiry flows.', trigger: 'auth library' },
37
+ ],
38
+ },
39
+ {
40
+ match: ['openai', '@anthropic-ai/sdk'],
41
+ implications: [
42
+ { skill: 'efficiency', recommendation: 'Track LLM API costs per feature. Set budget alerts.', trigger: 'LLM SDK' },
43
+ { skill: 'trust', recommendation: 'Validate and sanitize all user input before sending to LLM.', trigger: 'LLM SDK' },
44
+ ],
45
+ },
46
+ {
47
+ match: ['@sendgrid/mail', '@brevo/brevo', 'nodemailer', 'resend'],
48
+ implications: [
49
+ { skill: 'trust', recommendation: 'Verify email templates do not leak PII in headers or tracking.', trigger: 'email library' },
50
+ { skill: 'strategy', recommendation: 'Email detected as delivery channel. Verify EIID Delivery layer includes email triggers.', trigger: 'email library' },
51
+ ],
52
+ },
53
+ {
54
+ match: ['@slack/web-api', '@slack/bolt'],
55
+ implications: [
56
+ { skill: 'strategy', recommendation: 'Slack detected as delivery channel. Verify EIID Delivery layer includes Slack triggers.', trigger: 'Slack SDK' },
57
+ ],
58
+ },
59
+ {
60
+ match: 'playwright',
61
+ implications: [
62
+ { skill: 'testing', recommendation: 'Ensure Playwright E2E tests cover all critical user flows.', trigger: 'playwright' },
63
+ ],
64
+ },
65
+ {
66
+ match: ['prisma', 'drizzle-orm', 'kysely', 'typeorm'],
67
+ implications: [
68
+ { skill: 'trust', recommendation: 'Verify ORM queries use parameterized inputs (no raw SQL with user data).', trigger: 'ORM' },
69
+ { skill: 'efficiency', recommendation: 'Check for N+1 query patterns in data-heavy routes.', trigger: 'ORM' },
70
+ ],
71
+ },
72
+ {
73
+ match: 'next',
74
+ implications: [
75
+ { skill: 'efficiency', recommendation: 'Monitor bundle size. Check for client-side imports of server-only packages.', trigger: 'next' },
76
+ { skill: 'design', recommendation: 'Verify all pages meet Core Web Vitals thresholds (LCP < 2.5s, CLS < 0.1).', trigger: 'next' },
77
+ ],
78
+ },
79
+ ];
80
+ // Alternative groups for negative constraints
81
+ // Each group: array of [npmPackage, displayName]
82
+ const ALTERNATIVE_GROUPS = [
83
+ [['prisma', 'Prisma'], ['drizzle-orm', 'Drizzle'], ['typeorm', 'TypeORM'], ['kysely', 'Kysely'], ['sequelize', 'Sequelize']],
84
+ [['vitest', 'Vitest'], ['jest', 'Jest'], ['mocha', 'Mocha']],
85
+ [['eslint', 'ESLint'], ['@biomejs/biome', 'Biome'], ['oxlint', 'oxlint']],
86
+ [['tailwindcss', 'Tailwind CSS'], ['styled-components', 'styled-components'], ['@emotion/react', 'Emotion'], ['@vanilla-extract/css', 'vanilla-extract']],
87
+ [['zustand', 'Zustand'], ['jotai', 'Jotai'], ['@reduxjs/toolkit', 'Redux Toolkit'], ['valtio', 'Valtio']],
88
+ [['@supabase/supabase-js', 'Supabase'], ['firebase', 'Firebase'], ['@aws-amplify/core', 'AWS Amplify']],
89
+ [['next-auth', 'NextAuth'], ['@clerk/nextjs', 'Clerk'], ['lucia', 'Lucia'], ['@supabase/auth-helpers-nextjs', 'Supabase Auth']],
90
+ [['express', 'Express'], ['fastify', 'Fastify'], ['hono', 'Hono'], ['koa', 'Koa']],
91
+ ];
92
+ // MCP server suggestions: dep pattern -> suggestion
93
+ const MCP_SUGGESTIONS = [
94
+ {
95
+ match: '@supabase/supabase-js',
96
+ name: 'Supabase MCP',
97
+ description: 'Direct database queries and auth management. Data connector, not a skill replacement.',
98
+ },
99
+ {
100
+ match: 'stripe',
101
+ name: 'Stripe MCP',
102
+ description: 'Payment data access and webhook inspection. Data connector, not a skill replacement.',
103
+ },
104
+ {
105
+ match: ['@slack/web-api', '@slack/bolt'],
106
+ name: 'Slack MCP',
107
+ description: 'Message and channel data access. Data connector, not a skill replacement.',
108
+ },
109
+ ];
110
+ // --- Core logic ---
111
+ export function proposeChanges(state) {
112
+ const allDeps = { ...state.dependencies, ...state.devDependencies };
113
+ const depNames = Object.keys(allDeps);
114
+ const skillImplications = collectSkillImplications(depNames, state.claudeMdContent);
115
+ const constraints = collectConstraints(depNames, state.packageManager);
116
+ const mcpSuggestions = collectMcpSuggestions(depNames);
117
+ return { skillImplications, constraints, mcpSuggestions };
118
+ }
119
+ function collectSkillImplications(depNames, claudeMdContent) {
120
+ const results = [];
121
+ for (const entry of SKILL_IMPLICATIONS) {
122
+ const matches = Array.isArray(entry.match) ? entry.match : [entry.match];
123
+ const found = matches.some(m => depNames.includes(m));
124
+ if (!found)
125
+ continue;
126
+ for (const impl of entry.implications) {
127
+ // Skip if already mentioned in CLAUDE.md
128
+ if (claudeMdContent && claudeMdContent.includes(impl.recommendation))
129
+ continue;
130
+ results.push(impl);
131
+ }
132
+ }
133
+ return results;
134
+ }
135
+ function collectConstraints(depNames, packageManager) {
136
+ const results = [];
137
+ for (const group of ALTERNATIVE_GROUPS) {
138
+ const installed = group.filter(([pkg]) => depNames.includes(pkg));
139
+ if (installed.length !== 1)
140
+ continue; // skip if none or multiple installed
141
+ const [, useName] = installed[0];
142
+ const others = group
143
+ .filter(([pkg]) => !depNames.includes(pkg))
144
+ .map(([, name]) => name);
145
+ if (others.length > 0) {
146
+ results.push({ use: useName, notUse: others });
147
+ }
148
+ }
149
+ // Package manager constraint
150
+ const pmNames = { npm: 'npm', pnpm: 'pnpm', yarn: 'Yarn', bun: 'Bun' };
151
+ const pmAlternatives = Object.entries(pmNames)
152
+ .filter(([key]) => key !== packageManager)
153
+ .map(([, name]) => name);
154
+ results.push({ use: pmNames[packageManager], notUse: pmAlternatives });
155
+ return results;
156
+ }
157
+ function collectMcpSuggestions(depNames) {
158
+ const results = [];
159
+ for (const entry of MCP_SUGGESTIONS) {
160
+ const matches = Array.isArray(entry.match) ? entry.match : [entry.match];
161
+ const trigger = matches.find(m => depNames.includes(m));
162
+ if (trigger) {
163
+ results.push({ name: entry.name, description: entry.description, trigger });
164
+ }
165
+ }
166
+ return results;
167
+ }
168
+ // Exported for testing
169
+ export { SKILL_IMPLICATIONS, ALTERNATIVE_GROUPS, MCP_SUGGESTIONS };
170
+ //# sourceMappingURL=proposer.js.map