@epiccontext/mcp 0.1.40 → 0.1.41

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.
@@ -0,0 +1,2 @@
1
+ export declare function generateSkillsCommand(): Promise<void>;
2
+ //# sourceMappingURL=generate-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-skills.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C3D"}
@@ -0,0 +1,50 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { getProjectRoot } from "../config.js";
4
+ import { generateAndWriteSkills } from "../../skills/generator.js";
5
+ export async function generateSkillsCommand() {
6
+ const projectRoot = getProjectRoot();
7
+ if (!projectRoot) {
8
+ console.log(chalk.yellow("Not in an EpicContext project."));
9
+ console.log(`Run ${chalk.cyan("epicontext init")} first, or navigate to a project directory.`);
10
+ return;
11
+ }
12
+ const spinner = ora("Generating Claude Code skills...").start();
13
+ try {
14
+ const result = generateAndWriteSkills(projectRoot);
15
+ if (result.errors.length > 0) {
16
+ spinner.warn(`Skills generated with ${result.errors.length} error(s)`);
17
+ for (const error of result.errors) {
18
+ console.log(chalk.yellow(` - ${error}`));
19
+ }
20
+ }
21
+ else {
22
+ spinner.succeed(`Generated ${result.written} skill file(s)`);
23
+ }
24
+ console.log("");
25
+ console.log(chalk.gray("Skills installed to:"));
26
+ console.log(chalk.cyan(" .claude/skills/"));
27
+ console.log(chalk.cyan(" .claude/commands/context.md"));
28
+ console.log("");
29
+ console.log(chalk.gray("Available skills:"));
30
+ console.log(chalk.gray(" - epicontext-core (always active)"));
31
+ console.log(chalk.gray(" - epicontext-alignment (cross-section validation)"));
32
+ console.log(chalk.gray(" - epicontext-users, epicontext-product, epicontext-development, ..."));
33
+ console.log(chalk.gray(" - epicontext-frontend, epicontext-backend"));
34
+ console.log("");
35
+ console.log(chalk.gray("Master command:"));
36
+ console.log(chalk.cyan(" /context [action] [section] [target]"));
37
+ console.log("");
38
+ console.log(chalk.gray("Examples:"));
39
+ console.log(chalk.gray(" /context check persona sarah"));
40
+ console.log(chalk.gray(" /context create journey \"onboarding\""));
41
+ console.log(chalk.gray(" /context align"));
42
+ console.log("");
43
+ }
44
+ catch (error) {
45
+ spinner.fail("Skills generation failed");
46
+ console.error(chalk.red("Error:"), error.message);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ //# sourceMappingURL=generate-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-skills.js","sourceRoot":"","sources":["../../../src/cli/commands/generate-skills.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export interface PullOptions {
2
2
  section?: string;
3
3
  force?: boolean;
4
4
  deleteOrphans?: boolean;
5
+ withSkills?: boolean;
5
6
  }
6
7
  export declare function pullCommand(options: PullOptions): Promise<void>;
7
8
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFrE"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuHrE"}
@@ -1,13 +1,14 @@
1
1
  import chalk from "chalk";
2
2
  import ora from "ora";
3
- import { loadConfig, getContextPath } from "../config.js";
3
+ import { loadConfig, getContextPath, getProjectRoot } from "../config.js";
4
4
  import { createClient } from "../../api/client.js";
5
5
  import { pullFromCloud } from "../../sync/pull.js";
6
+ import { generateAndWriteSkills } from "../../skills/generator.js";
6
7
  export async function pullCommand(options) {
7
8
  const config = loadConfig();
8
9
  if (!config?.project?.id || !config?.auth?.apiKey) {
9
10
  console.log(chalk.yellow("Not linked to an EpicContext project."));
10
- console.log(`Run ${chalk.cyan("epiccontext link")} to connect.`);
11
+ console.log(`Run ${chalk.cyan("epicontext link")} to connect.`);
11
12
  return;
12
13
  }
13
14
  const contextPath = getContextPath();
@@ -48,8 +49,8 @@ export async function pullCommand(options) {
48
49
  console.log(chalk.red(` Deleted: ${result.filesDeleted} orphan file(s)`));
49
50
  // Show a few examples
50
51
  const deletedExamples = result.deletedPaths.slice(0, 5);
51
- for (const path of deletedExamples) {
52
- console.log(chalk.red(` - ${path}`));
52
+ for (const deletedPath of deletedExamples) {
53
+ console.log(chalk.red(` - ${deletedPath}`));
53
54
  }
54
55
  if (result.deletedPaths.length > 5) {
55
56
  console.log(chalk.red(` ... and ${result.deletedPaths.length - 5} more`));
@@ -60,8 +61,8 @@ export async function pullCommand(options) {
60
61
  console.log(chalk.gray(` Skipped: ${result.filesSkipped} file(s) - local version is newer`));
61
62
  // Show a few examples
62
63
  const examples = result.skippedPaths.slice(0, 3);
63
- for (const path of examples) {
64
- console.log(chalk.gray(` - ${path}`));
64
+ for (const skippedPath of examples) {
65
+ console.log(chalk.gray(` - ${skippedPath}`));
65
66
  }
66
67
  if (result.skippedPaths.length > 3) {
67
68
  console.log(chalk.gray(` ... and ${result.skippedPaths.length - 3} more`));
@@ -75,6 +76,36 @@ export async function pullCommand(options) {
75
76
  if (result.filesWritten === 0 && result.filesSkipped === 0 && result.filesDeleted === 0) {
76
77
  console.log(chalk.gray(" No changes (local folder is in sync)"));
77
78
  }
79
+ // Generate skills if --with-skills flag is set
80
+ if (options.withSkills) {
81
+ console.log("");
82
+ const skillSpinner = ora("Generating Claude Code skills...").start();
83
+ try {
84
+ const projectRoot = getProjectRoot();
85
+ if (!projectRoot) {
86
+ skillSpinner.warn("Could not determine project root for skills generation");
87
+ }
88
+ else {
89
+ const skillResult = generateAndWriteSkills(projectRoot);
90
+ if (skillResult.errors.length > 0) {
91
+ skillSpinner.warn(`Skills generated with ${skillResult.errors.length} error(s)`);
92
+ for (const error of skillResult.errors.slice(0, 3)) {
93
+ console.log(chalk.yellow(` - ${error}`));
94
+ }
95
+ }
96
+ else {
97
+ skillSpinner.succeed(`Generated ${skillResult.written} skill file(s)`);
98
+ }
99
+ console.log(chalk.gray(` Skills installed to .claude/skills/`));
100
+ console.log(chalk.gray(` Master command: /context [action] [section] [target]`));
101
+ }
102
+ }
103
+ catch (skillError) {
104
+ skillSpinner.fail("Skills generation failed");
105
+ console.error(chalk.yellow(" Warning:"), skillError.message);
106
+ // Don't exit - skills are optional, pull succeeded
107
+ }
108
+ }
78
109
  console.log("");
79
110
  }
80
111
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAiF9B,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAwF9B,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,7 @@ import { statusCommand } from "./commands/status.js";
9
9
  import { watchCommand } from "./commands/watch.js";
10
10
  import { serveCommand } from "./commands/serve.js";
11
11
  import { validateCommand } from "./commands/validate.js";
12
+ import { generateSkillsCommand } from "./commands/generate-skills.js";
12
13
  const program = new Command();
13
14
  program
14
15
  .name("epiccontext")
@@ -47,6 +48,7 @@ program
47
48
  .option("-s, --section <type>", "Only pull specific section")
48
49
  .option("-f, --force", "Overwrite local changes without confirmation")
49
50
  .option("--delete-orphans", "Delete local files that don't exist in cloud (use with caution)")
51
+ .option("--with-skills", "Generate .claude/skills/ for AI coding agents (Claude Code)")
50
52
  .action(pullCommand);
51
53
  // Push command - push to cloud (always overwrites cloud with local)
52
54
  program
@@ -72,6 +74,11 @@ program
72
74
  .command("validate")
73
75
  .description("Validate CONTEXT files for errors before pushing")
74
76
  .action(validateCommand);
77
+ // Generate skills command - generate Claude Code skills
78
+ program
79
+ .command("generate-skills")
80
+ .description("Generate .claude/skills/ for AI coding agents (Claude Code)")
81
+ .action(generateSkillsCommand);
75
82
  // Error handling
76
83
  program.exitOverride();
77
84
  export async function run() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Skill Generator for EpicContext
3
+ *
4
+ * Generates .claude/skills/ and .claude/commands/ from skill definitions.
5
+ * Called during `npx @epiccontext/mcp pull --with-skills`
6
+ *
7
+ * @see ADR-008 for architecture details
8
+ */
9
+ interface GeneratedFile {
10
+ path: string;
11
+ content: string;
12
+ }
13
+ interface SkillGenerationResult {
14
+ skills: GeneratedFile[];
15
+ workflows: GeneratedFile[];
16
+ commands: GeneratedFile[];
17
+ errors: string[];
18
+ }
19
+ /**
20
+ * Generate all skills and commands
21
+ */
22
+ export declare function generateSkills(projectRoot: string): SkillGenerationResult;
23
+ /**
24
+ * Write generated skills to disk
25
+ */
26
+ export declare function writeSkills(projectRoot: string, result: SkillGenerationResult): {
27
+ written: number;
28
+ errors: string[];
29
+ };
30
+ /**
31
+ * Main entry point for skill generation
32
+ */
33
+ export declare function generateAndWriteSkills(projectRoot: string): {
34
+ written: number;
35
+ errors: string[];
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/skills/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkCH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAidD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAuLzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,GAC5B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAGA"}
@@ -0,0 +1,659 @@
1
+ /**
2
+ * Skill Generator for EpicContext
3
+ *
4
+ * Generates .claude/skills/ and .claude/commands/ from skill definitions.
5
+ * Called during `npx @epiccontext/mcp pull --with-skills`
6
+ *
7
+ * @see ADR-008 for architecture details
8
+ */
9
+ import * as fs from "fs";
10
+ import * as path from "path";
11
+ // ============================================
12
+ // SKILL DEFINITIONS (embedded for portability)
13
+ // ============================================
14
+ // Note: In a full implementation, these would be imported from config/skill-definitions.ts
15
+ // For the MCP package, we embed essential definitions to avoid complex build dependencies
16
+ const SECTION_CONFIGS = {
17
+ constitution: {
18
+ name: "Constitution Guardian",
19
+ description: "Enforces project rules, constraints, and AI development guidelines",
20
+ folder: "constitution",
21
+ blockTypes: ["ai_rules", "context_guide", "constraint", "glossary"],
22
+ },
23
+ brand: {
24
+ name: "Brand Expert",
25
+ description: "Guides brand identity documentation and ensures consistency",
26
+ folder: "brand",
27
+ blockTypes: ["brand_positioning", "brand_color_palette", "brand_typography", "tone_of_voice"],
28
+ },
29
+ product: {
30
+ name: "Product Advisor",
31
+ description: "Helps document product features and ensures completeness",
32
+ folder: "product",
33
+ blockTypes: ["product_overview", "feature", "product_strategy_canvas"],
34
+ },
35
+ users: {
36
+ name: "User Researcher",
37
+ description: "Ensures user documentation is complete and user-centered",
38
+ folder: "users",
39
+ blockTypes: ["persona", "jtbd"],
40
+ },
41
+ journeys: {
42
+ name: "Journey Expert",
43
+ description: "Analyzes user journeys and identifies improvement opportunities",
44
+ folder: "users/journey-maps",
45
+ blockTypes: ["journey_map"],
46
+ },
47
+ research: {
48
+ name: "Research Analyst",
49
+ description: "Helps analyze market and competitive landscape",
50
+ folder: "research",
51
+ blockTypes: ["competitor", "market_research", "user_research"],
52
+ },
53
+ technical: {
54
+ name: "Tech Advisor",
55
+ description: "Reviews technical documentation for completeness and accuracy",
56
+ folder: "technical",
57
+ blockTypes: ["tech_stack", "architecture_diagram", "integration", "constraint"],
58
+ },
59
+ design_system: {
60
+ name: "Design System Expert",
61
+ description: "Maintains design system documentation and consistency",
62
+ folder: "design-system",
63
+ blockTypes: ["storybook_link", "figma_embed"],
64
+ },
65
+ information_architecture: {
66
+ name: "IA Architect",
67
+ description: "Reviews information architecture for completeness and usability",
68
+ folder: "information-architecture",
69
+ blockTypes: ["ia_tree", "taxonomy"],
70
+ },
71
+ metrics: {
72
+ name: "Metrics Advisor",
73
+ description: "Reviews metrics documentation for clarity and actionability",
74
+ folder: "metrics",
75
+ blockTypes: ["metric", "analytics_event"],
76
+ },
77
+ decisions: {
78
+ name: "Decision Recorder",
79
+ description: "Ensures decisions are properly documented with context and rationale",
80
+ folder: "decisions",
81
+ blockTypes: ["decision"],
82
+ },
83
+ development: {
84
+ name: "Dev Planner",
85
+ description: "Reviews development documentation and tracks implementation progress",
86
+ folder: "development",
87
+ blockTypes: ["epic", "user_story", "task", "roadmap"],
88
+ },
89
+ business_strategy: {
90
+ name: "Strategy Advisor",
91
+ description: "Reviews business strategy documentation for completeness",
92
+ folder: "business-strategy",
93
+ blockTypes: ["ogsm", "business_model_canvas", "swot_analysis"],
94
+ },
95
+ };
96
+ // ============================================
97
+ // TEMPLATE GENERATORS
98
+ // ============================================
99
+ /**
100
+ * Generate SKILL.md content for a section skill
101
+ */
102
+ function generateSectionSkillMd(sectionType) {
103
+ const config = SECTION_CONFIGS[sectionType];
104
+ if (!config)
105
+ return "";
106
+ const skillId = `epicontext-${sectionType.replace(/_/g, "-")}`;
107
+ return `---
108
+ name: ${skillId}
109
+ description: >
110
+ ${config.description}.
111
+ Use when working on ${sectionType.replace(/_/g, " ")} content or documentation.
112
+ Manages CONTEXT/${config.folder}/ folder.
113
+ allowed-tools: Read, Grep, Glob
114
+ ---
115
+
116
+ # ${config.name}
117
+
118
+ ${config.description}.
119
+
120
+ ## Project Context (Read First)
121
+
122
+ Before any work in this section, read:
123
+ - \`CONTEXT/AI-GUIDE.md\` - Block type schemas
124
+ - \`CONTEXT/${config.folder}/\` - Current content
125
+
126
+ ## Your Capabilities
127
+
128
+ - **review**: Analyze content and provide feedback
129
+ - **suggest**: Suggest improvements and additions
130
+ - **proactive_advice**: Offer unsolicited helpful tips
131
+
132
+ ## Block Types You Manage
133
+
134
+ ${config.blockTypes.map((t) => `- \`${t}\``).join("\n")}
135
+
136
+ See \`CONTEXT/AI-GUIDE.md\` for detailed schemas.
137
+
138
+ ## Instructions
139
+
140
+ 1. Always read existing content before suggesting changes
141
+ 2. Follow the block type schemas exactly
142
+ 3. Use proper frontmatter (type, section, key, name, status)
143
+ 4. Create one block per file
144
+ 5. Use kebab-case for keys and filenames
145
+
146
+ ## Output Requirements
147
+
148
+ When completing any task, you MUST:
149
+ 1. List which CONTEXT files you read
150
+ 2. Quote relevant sections you're basing decisions on
151
+ 3. Show traceability to existing content
152
+
153
+ Example:
154
+ \`\`\`
155
+ **Sources consulted:**
156
+ - CONTEXT/${config.folder}/[file].md (field: value)
157
+
158
+ **Traceability:**
159
+ - This addresses: [link to existing content]
160
+ \`\`\`
161
+
162
+ ## Anti-Patterns to Avoid
163
+
164
+ - Creating content without reading existing CONTEXT
165
+ - Missing required frontmatter fields
166
+ - Not linking to related sections
167
+ - Using placeholder text (TBD, TODO, Lorem ipsum)
168
+ - Using wrong block types for the content
169
+ `;
170
+ }
171
+ /**
172
+ * Generate the core skill SKILL.md
173
+ */
174
+ function generateCoreSkillMd() {
175
+ return `---
176
+ name: epicontext-core
177
+ description: >
178
+ Core project rules for EpicContext projects. ALWAYS relevant for any
179
+ development task in this codebase. Enforces CONTEXT folder usage,
180
+ traceability requirements, and project conventions.
181
+ Use for ANY code changes, feature work, or documentation.
182
+ allowed-tools: Read, Grep, Glob
183
+ ---
184
+
185
+ # EpicContext Core
186
+
187
+ This project uses EpicContext for structured product documentation.
188
+ The CONTEXT/ folder is the single source of truth.
189
+
190
+ ## Critical Rules
191
+
192
+ 1. **ALWAYS read CONTEXT first** - Before any development task, check relevant sections
193
+ 2. **Traceability required** - All code must trace to documented requirements
194
+ 3. **One block per file** - Never combine multiple items
195
+ 4. **Use correct block types** - See CONTEXT/AI-GUIDE.md
196
+
197
+ ## Quick Navigation
198
+
199
+ | Need | Check |
200
+ |------|-------|
201
+ | Project rules | CONTEXT/constitution/ |
202
+ | Who we're building for | CONTEXT/users/personas/ |
203
+ | What to build | CONTEXT/product/ or CONTEXT/development/stories/ |
204
+ | How to build | CONTEXT/technical/ |
205
+ | Past decisions | CONTEXT/decisions/ |
206
+ | Visual design | CONTEXT/design-system/ and CONTEXT/brand/ |
207
+
208
+ ## Before Starting Work
209
+
210
+ 1. Read \`CONTEXT/AI-GUIDE.md\` for block schemas
211
+ 2. Check relevant sections for your task
212
+ 3. Cite sources in your output
213
+ 4. Update CONTEXT if you make decisions
214
+
215
+ ## Sync Commands
216
+
217
+ \`\`\`bash
218
+ npx @epiccontext/mcp push # Push changes to cloud
219
+ npx @epiccontext/mcp pull # Pull from cloud
220
+ npx @epiccontext/mcp status # Check sync status
221
+ \`\`\`
222
+ `;
223
+ }
224
+ /**
225
+ * Generate the alignment skill SKILL.md
226
+ */
227
+ function generateAlignmentSkillMd() {
228
+ return `---
229
+ name: epicontext-alignment
230
+ description: >
231
+ Validates cross-section alignment, checks link integrity, ensures
232
+ consistency across all CONTEXT documentation. Use for project audits,
233
+ before releases, checking documentation health, finding orphan blocks,
234
+ or validating cross-references.
235
+ allowed-tools: Read, Grep, Glob
236
+ ---
237
+
238
+ # Context Alignment Agent
239
+
240
+ Validates cross-section consistency and link integrity.
241
+
242
+ ## Alignment Checks
243
+
244
+ ### 1. Link Integrity
245
+ Check that all *_ref fields resolve:
246
+ - \`epic_ref\` → CONTEXT/development/epics/
247
+ - \`story_ref\` → CONTEXT/development/stories/
248
+ - \`persona_ref\` → CONTEXT/users/personas/
249
+
250
+ ### 2. Required Parent Links
251
+ These are REQUIRED:
252
+ - Every \`user_story\` must have \`epic_ref\`
253
+ - Every \`task\` must have \`story_ref\`
254
+ - Every \`journey_map\` must have \`persona_ref\`
255
+
256
+ ### 3. Completeness
257
+ - Personas: goals AND frustrations required
258
+ - User Stories: acceptance_criteria required
259
+ - Decisions: context, decision, rationale required
260
+
261
+ ### 4. Format Validation
262
+ - Keys: kebab-case
263
+ - Frontmatter: type, section, key, name, status
264
+
265
+ ### 5. Content Quality
266
+ - No placeholder text: "TBD", "TODO", "[fill in]"
267
+ - Status accuracy
268
+
269
+ ## How to Run
270
+
271
+ Use the workflow commands:
272
+ - \`/epicontext-alignment/full-check\` - Complete validation
273
+ - \`/epicontext-alignment/check-links\` - Link validation only
274
+ - \`/epicontext-alignment/find-orphans\` - Find orphan blocks
275
+
276
+ ## Report Format
277
+
278
+ \`\`\`
279
+ ## Context Alignment Report
280
+
281
+ ### ✅ Passed Checks
282
+ - [list]
283
+
284
+ ### ⚠️ Warnings
285
+ - [list]
286
+
287
+ ### ❌ Critical Issues
288
+ - [list]
289
+
290
+ ### 📋 Recommendations
291
+ - [list]
292
+ \`\`\`
293
+ `;
294
+ }
295
+ /**
296
+ * Generate the frontend skill SKILL.md
297
+ */
298
+ function generateFrontendSkillMd() {
299
+ return `---
300
+ name: epicontext-frontend
301
+ description: >
302
+ Frontend development with project design system integration.
303
+ Creates distinctive, production-grade interfaces following project
304
+ brand and component library. Use when building UI components,
305
+ pages, flows, features, React components, styling, or any frontend work.
306
+ allowed-tools: Read, Grep, Glob, Bash
307
+ ---
308
+
309
+ # Frontend Expert
310
+
311
+ Frontend development with project design system integration.
312
+
313
+ ## Project Context (Read First)
314
+
315
+ Before any frontend work, check:
316
+ - \`CONTEXT/design-system/\` - Design tokens, Storybook links
317
+ - \`CONTEXT/brand/\` - Colors, typography, visual identity
318
+ - \`CONTEXT/technical/\` - Tech stack and conventions
319
+
320
+ ## Design Philosophy
321
+
322
+ Create distinctive, production-grade interfaces that:
323
+ - Follow the project's design system
324
+ - Use design tokens (not hardcoded values)
325
+ - Respect brand voice and identity
326
+ - Are accessible (WCAG 2.1 AA)
327
+ - Avoid generic "AI slop" aesthetics
328
+
329
+ ## When Building Components
330
+
331
+ 1. Check if similar component exists
332
+ 2. Use project color palette from CONTEXT/brand/
333
+ 3. Use typography from CONTEXT/brand/
334
+ 4. Follow naming conventions from CONTEXT/technical/
335
+
336
+ ## Output Requirements
337
+
338
+ When creating UI:
339
+ - Cite CONTEXT sources
340
+ - Use Tailwind classes mapping to design tokens
341
+ - Include accessibility attributes
342
+ `;
343
+ }
344
+ /**
345
+ * Generate the backend skill SKILL.md
346
+ */
347
+ function generateBackendSkillMd() {
348
+ return `---
349
+ name: epicontext-backend
350
+ description: >
351
+ Backend development with project tech stack integration.
352
+ Use when building APIs, database queries, server-side logic,
353
+ endpoints, Supabase, authentication, or any backend work.
354
+ allowed-tools: Read, Grep, Glob, Bash
355
+ ---
356
+
357
+ # Backend Expert
358
+
359
+ Backend development with project tech stack integration.
360
+
361
+ ## Project Context (Read First)
362
+
363
+ Before any backend work, check:
364
+ - \`CONTEXT/technical/\` - Tech stack, integrations, constraints
365
+ - \`CONTEXT/technical/api/\` - API endpoint documentation
366
+ - \`CONTEXT/decisions/\` - Architecture decisions
367
+
368
+ ## Tech Stack Reference
369
+
370
+ Read CONTEXT/technical/ to understand:
371
+ - Database technology
372
+ - Authentication approach
373
+ - API patterns
374
+ - Error handling conventions
375
+
376
+ ## Security Checklist
377
+
378
+ - Input validation (use zod or similar)
379
+ - Authentication required?
380
+ - Authorization checks?
381
+ - Rate limiting?
382
+ - No credentials in code
383
+ `;
384
+ }
385
+ /**
386
+ * Generate workflow markdown
387
+ */
388
+ function generateWorkflowMd(skillId, workflow) {
389
+ return `---
390
+ description: ${workflow.description}
391
+ ${workflow.argumentHint ? `argument-hint: ${workflow.argumentHint}` : ""}
392
+ allowed-tools: ${workflow.allowedTools.join(", ")}
393
+ ---
394
+
395
+ ${workflow.prompt}
396
+ `;
397
+ }
398
+ /**
399
+ * Generate the master /context command
400
+ */
401
+ function generateMasterCommandMd() {
402
+ return `---
403
+ description: EpicContext - work with project context (check, create, list, align)
404
+ argument-hint: [action] [section] [target]
405
+ ---
406
+
407
+ # EpicContext Command
408
+
409
+ You are working with an EpicContext project. The CONTEXT/ folder contains
410
+ all project knowledge structured in sections.
411
+
412
+ ## Your Task: $ARGUMENTS
413
+
414
+ ## Process
415
+
416
+ 1. **Read the guide first:**
417
+ Read CONTEXT/AI-GUIDE.md to understand block schemas
418
+
419
+ 2. **Parse the request:**
420
+ - Action: check, create, list, align
421
+ - Section: users, journeys, product, development, etc.
422
+ - Target: specific item name (if applicable)
423
+
424
+ 3. **Route to skill:**
425
+
426
+ | Keyword | Skill |
427
+ |---------|-------|
428
+ | persona, user, research | epicontext-users |
429
+ | journey, flow, experience | epicontext-journeys |
430
+ | feature, requirement, product | epicontext-product |
431
+ | epic, story, task, dev | epicontext-development |
432
+ | frontend, component, ui | epicontext-frontend |
433
+ | backend, api, endpoint | epicontext-backend |
434
+ | align, check-all, audit | epicontext-alignment |
435
+
436
+ 4. **Follow skill instructions**
437
+
438
+ 5. **Cite sources** - Always show which CONTEXT files you read
439
+
440
+ ## Example Commands
441
+
442
+ - \`/context check persona sarah\` - Validate Sarah persona
443
+ - \`/context create journey "onboarding"\` - Create journey map
444
+ - \`/context list stories\` - Show all user stories
445
+ - \`/context align\` - Run full alignment check
446
+
447
+ ## Available Sections
448
+
449
+ Run \`ls CONTEXT/\` to see all sections.
450
+ `;
451
+ }
452
+ // ============================================
453
+ // MAIN GENERATOR
454
+ // ============================================
455
+ /**
456
+ * Generate all skills and commands
457
+ */
458
+ export function generateSkills(projectRoot) {
459
+ const result = {
460
+ skills: [],
461
+ workflows: [],
462
+ commands: [],
463
+ errors: [],
464
+ };
465
+ // Core skill
466
+ result.skills.push({
467
+ path: ".claude/skills/epicontext-core/SKILL.md",
468
+ content: generateCoreSkillMd(),
469
+ });
470
+ // Alignment skill with workflows
471
+ result.skills.push({
472
+ path: ".claude/skills/epicontext-alignment/SKILL.md",
473
+ content: generateAlignmentSkillMd(),
474
+ });
475
+ // Alignment workflows
476
+ result.workflows.push({
477
+ path: ".claude/skills/epicontext-alignment/workflows/full-check.md",
478
+ content: generateWorkflowMd("epicontext-alignment", {
479
+ id: "full-check",
480
+ name: "Full Check",
481
+ description: "Run complete alignment validation across all sections",
482
+ allowedTools: ["Read", "Grep", "Glob"],
483
+ prompt: `# Full Alignment Check
484
+
485
+ ## Process
486
+
487
+ 1. Read CONTEXT/AI-GUIDE.md
488
+ 2. Glob all CONTEXT/**/*.md files
489
+ 3. For each file:
490
+ - Validate frontmatter
491
+ - Check *_ref fields resolve
492
+ - Flag placeholder text
493
+ 4. Generate report
494
+
495
+ ## Report Format
496
+
497
+ \`\`\`
498
+ ## Context Alignment Report
499
+
500
+ ### ✅ Passed ([count])
501
+ ### ⚠️ Warnings ([count])
502
+ ### ❌ Issues ([count])
503
+ ### 📋 Recommendations
504
+ \`\`\``,
505
+ }),
506
+ });
507
+ result.workflows.push({
508
+ path: ".claude/skills/epicontext-alignment/workflows/check-links.md",
509
+ content: generateWorkflowMd("epicontext-alignment", {
510
+ id: "check-links",
511
+ name: "Check Links",
512
+ description: "Validate all cross-references between blocks",
513
+ allowedTools: ["Grep", "Glob", "Read"],
514
+ prompt: `# Check Links
515
+
516
+ Grep for "*_ref:" in CONTEXT/**/*.md and verify each target exists.`,
517
+ }),
518
+ });
519
+ result.workflows.push({
520
+ path: ".claude/skills/epicontext-alignment/workflows/find-orphans.md",
521
+ content: generateWorkflowMd("epicontext-alignment", {
522
+ id: "find-orphans",
523
+ name: "Find Orphans",
524
+ description: "Find blocks without required parent links",
525
+ allowedTools: ["Grep", "Glob"],
526
+ prompt: `# Find Orphan Blocks
527
+
528
+ Find:
529
+ - User stories without epic_ref
530
+ - Tasks without story_ref
531
+ - Journey maps without persona_ref`,
532
+ }),
533
+ });
534
+ // Section-based skills
535
+ for (const sectionType of Object.keys(SECTION_CONFIGS)) {
536
+ const skillId = `epicontext-${sectionType.replace(/_/g, "-")}`;
537
+ result.skills.push({
538
+ path: `.claude/skills/${skillId}/SKILL.md`,
539
+ content: generateSectionSkillMd(sectionType),
540
+ });
541
+ // Standard workflows for each section
542
+ const config = SECTION_CONFIGS[sectionType];
543
+ result.workflows.push({
544
+ path: `.claude/skills/${skillId}/workflows/check.md`,
545
+ content: generateWorkflowMd(skillId, {
546
+ id: "check",
547
+ name: "Check",
548
+ description: `Validate ${sectionType.replace(/_/g, " ")} content`,
549
+ argumentHint: "[name]",
550
+ allowedTools: ["Read", "Grep", "Glob"],
551
+ prompt: `# Check ${config.name}
552
+
553
+ ## Target
554
+ CONTEXT/${config.folder}/$ARGUMENTS.md
555
+
556
+ ## Validate
557
+ - Required frontmatter fields
558
+ - Block type schema compliance
559
+ - Links resolve
560
+ - No placeholder text`,
561
+ }),
562
+ });
563
+ result.workflows.push({
564
+ path: `.claude/skills/${skillId}/workflows/create.md`,
565
+ content: generateWorkflowMd(skillId, {
566
+ id: "create",
567
+ name: "Create",
568
+ description: `Create a new ${sectionType.replace(/_/g, " ")} block`,
569
+ argumentHint: "[name]",
570
+ allowedTools: ["Read", "Write", "Glob"],
571
+ prompt: `# Create ${config.name} Block
572
+
573
+ ## Target
574
+ CONTEXT/${config.folder}/$ARGUMENTS.md
575
+
576
+ ## Block Types
577
+ ${config.blockTypes.map((t) => `- ${t}`).join("\n")}
578
+
579
+ ## Template
580
+ \`\`\`markdown
581
+ ---
582
+ type: [block_type]
583
+ section: ${sectionType.replace(/_/g, "-")}
584
+ key: [kebab-case-key]
585
+ name: "[Name]"
586
+ status: draft
587
+ ---
588
+
589
+ # [Title]
590
+
591
+ [Content]
592
+ \`\`\``,
593
+ }),
594
+ });
595
+ result.workflows.push({
596
+ path: `.claude/skills/${skillId}/workflows/list.md`,
597
+ content: generateWorkflowMd(skillId, {
598
+ id: "list",
599
+ name: "List",
600
+ description: `List all ${sectionType.replace(/_/g, " ")} blocks`,
601
+ allowedTools: ["Glob", "Grep", "Read"],
602
+ prompt: `# List ${config.name} Blocks
603
+
604
+ Glob CONTEXT/${config.folder}/**/*.md and extract:
605
+ - name, type, status, key
606
+
607
+ Format as table.`,
608
+ }),
609
+ });
610
+ }
611
+ // Extended skills (frontend, backend)
612
+ result.skills.push({
613
+ path: ".claude/skills/epicontext-frontend/SKILL.md",
614
+ content: generateFrontendSkillMd(),
615
+ });
616
+ result.skills.push({
617
+ path: ".claude/skills/epicontext-backend/SKILL.md",
618
+ content: generateBackendSkillMd(),
619
+ });
620
+ // Master command
621
+ result.commands.push({
622
+ path: ".claude/commands/context.md",
623
+ content: generateMasterCommandMd(),
624
+ });
625
+ return result;
626
+ }
627
+ /**
628
+ * Write generated skills to disk
629
+ */
630
+ export function writeSkills(projectRoot, result) {
631
+ let written = 0;
632
+ const errors = [];
633
+ const allFiles = [...result.skills, ...result.workflows, ...result.commands];
634
+ for (const file of allFiles) {
635
+ const fullPath = path.join(projectRoot, file.path);
636
+ const dir = path.dirname(fullPath);
637
+ try {
638
+ // Create directory if needed
639
+ if (!fs.existsSync(dir)) {
640
+ fs.mkdirSync(dir, { recursive: true });
641
+ }
642
+ // Write file
643
+ fs.writeFileSync(fullPath, file.content, "utf-8");
644
+ written++;
645
+ }
646
+ catch (error) {
647
+ errors.push(`Failed to write ${file.path}: ${error.message}`);
648
+ }
649
+ }
650
+ return { written, errors };
651
+ }
652
+ /**
653
+ * Main entry point for skill generation
654
+ */
655
+ export function generateAndWriteSkills(projectRoot) {
656
+ const result = generateSkills(projectRoot);
657
+ return writeSkills(projectRoot, result);
658
+ }
659
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/skills/generator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epiccontext/mcp",
3
- "version": "0.1.40",
3
+ "version": "0.1.41",
4
4
  "description": "MCP server and CLI for syncing EpicContext documentation with local codebases",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",