@epiccontext/mcp 0.1.29 → 0.1.31
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/dist/cli/commands/pull.d.ts +1 -0
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +15 -2
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts +1 -0
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +44 -12
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +5 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +327 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/files.d.ts +8 -0
- package/dist/cli/files.d.ts.map +1 -1
- package/dist/cli/files.js +204 -18
- package/dist/cli/files.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/sync/pull.d.ts +4 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +19 -1
- package/dist/sync/pull.js.map +1 -1
- package/package.json +1 -1
|
@@ -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;
|
|
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"}
|
|
@@ -36,12 +36,25 @@ export async function pullCommand(options) {
|
|
|
36
36
|
const result = await pullFromCloud(client, contextPath, {
|
|
37
37
|
section: options.section,
|
|
38
38
|
force: options.force,
|
|
39
|
+
deleteOrphans: options.deleteOrphans,
|
|
39
40
|
});
|
|
40
41
|
spinner.succeed("Pull complete!");
|
|
41
42
|
console.log("");
|
|
42
43
|
if (result.filesWritten > 0) {
|
|
43
44
|
console.log(chalk.green(` ${result.filesWritten} file(s) written`));
|
|
44
45
|
}
|
|
46
|
+
// Show deleted files (orphans removed)
|
|
47
|
+
if (result.filesDeleted > 0 && result.deletedPaths.length > 0) {
|
|
48
|
+
console.log(chalk.red(` Deleted: ${result.filesDeleted} orphan file(s)`));
|
|
49
|
+
// Show a few examples
|
|
50
|
+
const deletedExamples = result.deletedPaths.slice(0, 5);
|
|
51
|
+
for (const path of deletedExamples) {
|
|
52
|
+
console.log(chalk.red(` - ${path}`));
|
|
53
|
+
}
|
|
54
|
+
if (result.deletedPaths.length > 5) {
|
|
55
|
+
console.log(chalk.red(` ... and ${result.deletedPaths.length - 5} more`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
45
58
|
// Show skipped files with explanation (local files that are newer)
|
|
46
59
|
if (result.filesSkipped > 0 && result.skippedPaths.length > 0) {
|
|
47
60
|
console.log(chalk.gray(` Skipped: ${result.filesSkipped} file(s) - local version is newer`));
|
|
@@ -59,8 +72,8 @@ export async function pullCommand(options) {
|
|
|
59
72
|
else if (result.filesSkipped > 0) {
|
|
60
73
|
console.log(chalk.yellow(` ${result.filesSkipped} file(s) skipped`));
|
|
61
74
|
}
|
|
62
|
-
if (result.filesWritten === 0 && result.filesSkipped === 0) {
|
|
63
|
-
console.log(chalk.gray(" No
|
|
75
|
+
if (result.filesWritten === 0 && result.filesSkipped === 0 && result.filesDeleted === 0) {
|
|
76
|
+
console.log(chalk.gray(" No changes (local folder is in sync)"));
|
|
64
77
|
}
|
|
65
78
|
console.log("");
|
|
66
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
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":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GrE"}
|
|
@@ -5,9 +5,23 @@ import { createClient } from "../../api/client.js";
|
|
|
5
5
|
import { pushToCloud } from "../../sync/push.js";
|
|
6
6
|
export async function pushCommand(options) {
|
|
7
7
|
const config = loadConfig();
|
|
8
|
-
if
|
|
9
|
-
|
|
10
|
-
console.log(
|
|
8
|
+
// Check if linked to a project
|
|
9
|
+
if (!config) {
|
|
10
|
+
console.log(chalk.red("Not linked to an EpicContext project.\n"));
|
|
11
|
+
console.log("To sync your CONTEXT folder, you need to:");
|
|
12
|
+
console.log(` 1. Run ${chalk.cyan("npx @epiccontext/mcp link")} to connect to your project`);
|
|
13
|
+
console.log(` 2. Then run ${chalk.cyan("npx @epiccontext/mcp push")} to sync\n`);
|
|
14
|
+
console.log(chalk.gray("Tip: Get your project URL from the EpicContext web app settings."));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (!config.project?.id) {
|
|
18
|
+
console.log(chalk.red("Project ID is missing from configuration.\n"));
|
|
19
|
+
console.log(`Run ${chalk.cyan("npx @epiccontext/mcp link")} to reconnect to your project.`);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!config.auth?.apiKey) {
|
|
23
|
+
console.log(chalk.red("API key is missing from configuration.\n"));
|
|
24
|
+
console.log(`Run ${chalk.cyan("npx @epiccontext/mcp link")} to set up authentication.`);
|
|
11
25
|
return;
|
|
12
26
|
}
|
|
13
27
|
const contextPath = getContextPath();
|
|
@@ -31,30 +45,45 @@ export async function pushCommand(options) {
|
|
|
31
45
|
apiKey: config.auth.apiKey,
|
|
32
46
|
projectId: config.project.id,
|
|
33
47
|
});
|
|
34
|
-
const
|
|
48
|
+
const isDryRun = options.dryRun ?? false;
|
|
49
|
+
const spinnerText = isDryRun
|
|
50
|
+
? "Checking what would be pushed..."
|
|
51
|
+
: "Pushing to EpicContext...";
|
|
52
|
+
const spinner = ora(spinnerText).start();
|
|
35
53
|
try {
|
|
36
54
|
// Default to folder_wins for push - user is explicitly sending local changes to cloud
|
|
37
|
-
// Use --no-force (future option) or --timestamp for timestamp-based resolution
|
|
38
55
|
const result = await pushToCloud(client, contextPath, {
|
|
39
56
|
path: options.section,
|
|
40
57
|
conflictResolution: "folder_wins",
|
|
58
|
+
dryRun: isDryRun,
|
|
41
59
|
});
|
|
42
|
-
|
|
43
|
-
|
|
60
|
+
if (isDryRun) {
|
|
61
|
+
spinner.succeed("Dry run complete - no changes were made");
|
|
62
|
+
console.log("");
|
|
63
|
+
console.log(chalk.cyan(" The following changes would be made:\n"));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
spinner.succeed("Push complete!");
|
|
67
|
+
console.log("");
|
|
68
|
+
}
|
|
44
69
|
console.log(chalk.gray(` Files processed: ${result.filesProcessed}`));
|
|
45
70
|
if (result.result.created > 0) {
|
|
46
|
-
|
|
71
|
+
const verb = isDryRun ? "Would create" : "Created";
|
|
72
|
+
console.log(chalk.green(` ${verb}: ${result.result.created} block(s)`));
|
|
47
73
|
}
|
|
48
74
|
if (result.result.updated > 0) {
|
|
49
|
-
|
|
75
|
+
const verb = isDryRun ? "Would update" : "Updated";
|
|
76
|
+
console.log(chalk.blue(` ${verb}: ${result.result.updated} block(s)`));
|
|
50
77
|
}
|
|
51
78
|
// Show deleted orphan blocks
|
|
52
79
|
if (result.result.deleted && result.result.deleted > 0) {
|
|
53
|
-
|
|
80
|
+
const verb = isDryRun ? "Would delete" : "Deleted";
|
|
81
|
+
console.log(chalk.yellow(` ${verb}: ${result.result.deleted} orphan block(s)`));
|
|
54
82
|
}
|
|
55
83
|
// Show skipped files (should be rare with folder_wins, but can happen with parse errors)
|
|
56
84
|
if (result.result.skipped > 0) {
|
|
57
|
-
|
|
85
|
+
const verb = isDryRun ? "Would skip" : "Skipped";
|
|
86
|
+
console.log(chalk.gray(` ${verb}: ${result.result.skipped} file(s)`));
|
|
58
87
|
}
|
|
59
88
|
if (result.result.errors.length > 0) {
|
|
60
89
|
console.log(chalk.red(` Errors: ${result.result.errors.length}`));
|
|
@@ -63,9 +92,12 @@ export async function pushCommand(options) {
|
|
|
63
92
|
}
|
|
64
93
|
}
|
|
65
94
|
console.log("");
|
|
95
|
+
if (isDryRun && (result.result.created > 0 || result.result.updated > 0 || (result.result.deleted && result.result.deleted > 0))) {
|
|
96
|
+
console.log(chalk.gray(`Run ${chalk.cyan("npx @epicontext/mcp push")} (without --dry-run) to apply these changes.`));
|
|
97
|
+
}
|
|
66
98
|
}
|
|
67
99
|
catch (error) {
|
|
68
|
-
spinner.fail("Push failed");
|
|
100
|
+
spinner.fail(isDryRun ? "Dry run failed" : "Push failed");
|
|
69
101
|
console.error(chalk.red("Error:"), error.message);
|
|
70
102
|
process.exit(1);
|
|
71
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA4SD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF7E"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import { getContextPath } from "../config.js";
|
|
6
|
+
import { readContextFolder } from "../files.js";
|
|
7
|
+
// Block type to allowed sections and subfolder mapping
|
|
8
|
+
// Derived from block-type-masters.ts
|
|
9
|
+
const BLOCK_TYPE_RULES = {
|
|
10
|
+
// Development section
|
|
11
|
+
epic: { allowedSections: ["development"], subfolder: "epics" },
|
|
12
|
+
user_story: { allowedSections: ["development"], subfolder: "stories" },
|
|
13
|
+
task: { allowedSections: ["development"], subfolder: "tasks" },
|
|
14
|
+
roadmap: { allowedSections: ["development"], subfolder: "roadmaps" },
|
|
15
|
+
release: { allowedSections: ["development"], subfolder: "releases" },
|
|
16
|
+
impact_effort_matrix: { allowedSections: ["development"] },
|
|
17
|
+
// Users section
|
|
18
|
+
persona: { allowedSections: ["users"], subfolder: "personas" },
|
|
19
|
+
jtbd: { allowedSections: ["users"], subfolder: "jobs" },
|
|
20
|
+
journey_map: { allowedSections: ["users"], subfolder: "journeys" },
|
|
21
|
+
// Product section
|
|
22
|
+
feature: { allowedSections: ["product"], subfolder: "features" },
|
|
23
|
+
product_overview: { allowedSections: ["product"] },
|
|
24
|
+
feature_market_analysis: { allowedSections: ["product"] },
|
|
25
|
+
swot_analysis: { allowedSections: ["product"] },
|
|
26
|
+
// Brand section
|
|
27
|
+
brand_positioning: { allowedSections: ["brand"] },
|
|
28
|
+
brand_color_palette: { allowedSections: ["brand"] },
|
|
29
|
+
brand_typography: { allowedSections: ["brand"] },
|
|
30
|
+
brand_iconography: { allowedSections: ["brand"] },
|
|
31
|
+
tone_of_voice: { allowedSections: ["brand"] },
|
|
32
|
+
messaging_framework: { allowedSections: ["brand"] },
|
|
33
|
+
logo: { allowedSections: ["brand"] },
|
|
34
|
+
brand_assets: { allowedSections: ["brand"] },
|
|
35
|
+
// Technical section
|
|
36
|
+
tech_stack: { allowedSections: ["technical"] },
|
|
37
|
+
architecture_diagram: { allowedSections: ["technical"] },
|
|
38
|
+
integration: { allowedSections: ["technical"], subfolder: "integrations" },
|
|
39
|
+
constraint: { allowedSections: ["technical", "constitution"] },
|
|
40
|
+
// Research section
|
|
41
|
+
competitor: { allowedSections: ["research"], subfolder: "competitors" },
|
|
42
|
+
market_research: { allowedSections: ["research"] },
|
|
43
|
+
user_research: { allowedSections: ["research"] },
|
|
44
|
+
// Decisions section
|
|
45
|
+
decision: { allowedSections: ["decisions"] },
|
|
46
|
+
// Metrics section
|
|
47
|
+
north_star: { allowedSections: ["metrics"] },
|
|
48
|
+
kpi: { allowedSections: ["metrics"] },
|
|
49
|
+
metric: { allowedSections: ["metrics"] },
|
|
50
|
+
analytics_event: { allowedSections: ["metrics"] },
|
|
51
|
+
// Information Architecture section
|
|
52
|
+
ia_tree: { allowedSections: ["information-architecture", "information_architecture"] },
|
|
53
|
+
taxonomy: { allowedSections: ["information-architecture", "information_architecture"] },
|
|
54
|
+
// Design System section
|
|
55
|
+
storybook_link: { allowedSections: ["design-system", "design_system"] },
|
|
56
|
+
figma_embed: { allowedSections: ["design-system", "design_system"] },
|
|
57
|
+
// Constitution section
|
|
58
|
+
ai_rules: { allowedSections: ["constitution"] },
|
|
59
|
+
context_guide: { allowedSections: ["constitution"] },
|
|
60
|
+
implementation_log: { allowedSections: ["constitution"] },
|
|
61
|
+
// Business Strategy section
|
|
62
|
+
ogsm: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
63
|
+
obeya_board: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
64
|
+
product_strategy_canvas: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
65
|
+
business_model_canvas: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
66
|
+
porters_five_forces: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
67
|
+
strategic_group_map: { allowedSections: ["business-strategy", "business_strategy"] },
|
|
68
|
+
// Generic types (allowed in most sections)
|
|
69
|
+
section_guide: { allowedSections: ["*"] },
|
|
70
|
+
text: { allowedSections: ["*"] },
|
|
71
|
+
};
|
|
72
|
+
// Valid sections (folder names)
|
|
73
|
+
const VALID_SECTIONS = [
|
|
74
|
+
"constitution",
|
|
75
|
+
"brand",
|
|
76
|
+
"product",
|
|
77
|
+
"business-strategy",
|
|
78
|
+
"users",
|
|
79
|
+
"research",
|
|
80
|
+
"technical",
|
|
81
|
+
"design-system",
|
|
82
|
+
"information-architecture",
|
|
83
|
+
"metrics",
|
|
84
|
+
"decisions",
|
|
85
|
+
"development",
|
|
86
|
+
];
|
|
87
|
+
/**
|
|
88
|
+
* Extract frontmatter from markdown content
|
|
89
|
+
*/
|
|
90
|
+
function extractFrontmatter(content) {
|
|
91
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
92
|
+
if (!match)
|
|
93
|
+
return null;
|
|
94
|
+
const frontmatter = {};
|
|
95
|
+
const lines = match[1].split("\n");
|
|
96
|
+
for (const line of lines) {
|
|
97
|
+
const colonIndex = line.indexOf(":");
|
|
98
|
+
if (colonIndex > 0) {
|
|
99
|
+
const key = line.slice(0, colonIndex).trim();
|
|
100
|
+
let value = line.slice(colonIndex + 1).trim();
|
|
101
|
+
// Remove quotes
|
|
102
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
103
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
104
|
+
value = value.slice(1, -1);
|
|
105
|
+
}
|
|
106
|
+
frontmatter[key] = value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return frontmatter;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get section from file path
|
|
113
|
+
*/
|
|
114
|
+
function getSectionFromPath(filePath) {
|
|
115
|
+
// Path is like: users/personas/primary-user.md or brand/tone-of-voice.md
|
|
116
|
+
const parts = filePath.split("/");
|
|
117
|
+
if (parts.length >= 1) {
|
|
118
|
+
return parts[0];
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Normalize section name (handle hyphen/underscore differences)
|
|
124
|
+
*/
|
|
125
|
+
function normalizeSection(section) {
|
|
126
|
+
return section.replace(/-/g, "_").toLowerCase();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if block type is allowed in section
|
|
130
|
+
*/
|
|
131
|
+
function isBlockTypeAllowedInSection(blockType, section) {
|
|
132
|
+
const rules = BLOCK_TYPE_RULES[blockType];
|
|
133
|
+
if (!rules) {
|
|
134
|
+
// Unknown block type - allow anywhere (will be caught by block type validation)
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
if (rules.allowedSections.includes("*")) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
const normalizedSection = normalizeSection(section);
|
|
141
|
+
return rules.allowedSections.some(s => normalizeSection(s) === normalizedSection);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get suggested section for a block type
|
|
145
|
+
*/
|
|
146
|
+
function getSuggestedSection(blockType) {
|
|
147
|
+
const rules = BLOCK_TYPE_RULES[blockType];
|
|
148
|
+
if (!rules || rules.allowedSections.includes("*")) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return rules.allowedSections[0];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate a single file
|
|
155
|
+
*/
|
|
156
|
+
function validateFile(filePath, content) {
|
|
157
|
+
const issues = [];
|
|
158
|
+
// Check for frontmatter
|
|
159
|
+
const frontmatter = extractFrontmatter(content);
|
|
160
|
+
if (!frontmatter) {
|
|
161
|
+
issues.push({
|
|
162
|
+
path: filePath,
|
|
163
|
+
severity: "error",
|
|
164
|
+
message: "Missing YAML frontmatter",
|
|
165
|
+
suggestion: "Add frontmatter with: type, section, key, name, status",
|
|
166
|
+
});
|
|
167
|
+
return issues;
|
|
168
|
+
}
|
|
169
|
+
// Check required frontmatter fields
|
|
170
|
+
const requiredFields = ["type", "section", "key", "name", "status"];
|
|
171
|
+
for (const field of requiredFields) {
|
|
172
|
+
if (!frontmatter[field]) {
|
|
173
|
+
issues.push({
|
|
174
|
+
path: filePath,
|
|
175
|
+
severity: "error",
|
|
176
|
+
message: `Missing required frontmatter field: ${field}`,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// If missing type or section, can't do further validation
|
|
181
|
+
if (!frontmatter.type || !frontmatter.section) {
|
|
182
|
+
return issues;
|
|
183
|
+
}
|
|
184
|
+
// Check if block type is known
|
|
185
|
+
const blockType = frontmatter.type;
|
|
186
|
+
if (!BLOCK_TYPE_RULES[blockType]) {
|
|
187
|
+
issues.push({
|
|
188
|
+
path: filePath,
|
|
189
|
+
severity: "warning",
|
|
190
|
+
message: `Unknown block type: "${blockType}"`,
|
|
191
|
+
suggestion: "Check CONTEXT/AI-GUIDE.md for valid block types",
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
// Check section validity
|
|
195
|
+
const declaredSection = frontmatter.section;
|
|
196
|
+
const fileSection = getSectionFromPath(filePath);
|
|
197
|
+
if (fileSection && !VALID_SECTIONS.includes(fileSection)) {
|
|
198
|
+
issues.push({
|
|
199
|
+
path: filePath,
|
|
200
|
+
severity: "warning",
|
|
201
|
+
message: `File is in non-standard folder: "${fileSection}"`,
|
|
202
|
+
suggestion: `Valid sections: ${VALID_SECTIONS.join(", ")}`,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// Check section mismatch between frontmatter and file location
|
|
206
|
+
if (fileSection && normalizeSection(declaredSection) !== normalizeSection(fileSection)) {
|
|
207
|
+
issues.push({
|
|
208
|
+
path: filePath,
|
|
209
|
+
severity: "error",
|
|
210
|
+
message: `Section mismatch: frontmatter says "${declaredSection}" but file is in "${fileSection}"`,
|
|
211
|
+
suggestion: `Update frontmatter to: section: ${fileSection}`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Check if block type is allowed in section (the key validation)
|
|
215
|
+
if (fileSection && !isBlockTypeAllowedInSection(blockType, fileSection)) {
|
|
216
|
+
const suggestedSection = getSuggestedSection(blockType);
|
|
217
|
+
issues.push({
|
|
218
|
+
path: filePath,
|
|
219
|
+
severity: "error",
|
|
220
|
+
message: `Block type "${blockType}" is not allowed in "${fileSection}" section`,
|
|
221
|
+
suggestion: suggestedSection
|
|
222
|
+
? `Move file to: ${suggestedSection}/${path.basename(filePath)}`
|
|
223
|
+
: `Check CONTEXT/AI-GUIDE.md for where "${blockType}" blocks should go`,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// Check status value
|
|
227
|
+
if (frontmatter.status) {
|
|
228
|
+
const validStatuses = ["draft", "complete", "empty"];
|
|
229
|
+
if (!validStatuses.includes(frontmatter.status)) {
|
|
230
|
+
issues.push({
|
|
231
|
+
path: filePath,
|
|
232
|
+
severity: "warning",
|
|
233
|
+
message: `Invalid status: "${frontmatter.status}"`,
|
|
234
|
+
suggestion: `Valid statuses: ${validStatuses.join(", ")}`,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Check key format (should be kebab-case)
|
|
239
|
+
if (frontmatter.key) {
|
|
240
|
+
const key = frontmatter.key;
|
|
241
|
+
if (key !== key.toLowerCase() || key.includes(" ") || /[A-Z]/.test(key)) {
|
|
242
|
+
issues.push({
|
|
243
|
+
path: filePath,
|
|
244
|
+
severity: "warning",
|
|
245
|
+
message: `Key "${key}" should be kebab-case (lowercase with hyphens)`,
|
|
246
|
+
suggestion: `Use: ${key.toLowerCase().replace(/\s+/g, "-").replace(/[A-Z]/g, (c) => c.toLowerCase())}`,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return issues;
|
|
251
|
+
}
|
|
252
|
+
export async function validateCommand(options) {
|
|
253
|
+
const contextPath = getContextPath();
|
|
254
|
+
if (!contextPath) {
|
|
255
|
+
// If not linked, try to find CONTEXT folder in current directory
|
|
256
|
+
const defaultPath = path.join(process.cwd(), "CONTEXT");
|
|
257
|
+
if (!fs.existsSync(defaultPath)) {
|
|
258
|
+
console.log(chalk.red("No CONTEXT folder found."));
|
|
259
|
+
console.log(`Run ${chalk.cyan("npx @epicontext/mcp init")} to create one.`);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const folderToValidate = contextPath || path.join(process.cwd(), "CONTEXT");
|
|
264
|
+
const spinner = ora("Validating CONTEXT folder...").start();
|
|
265
|
+
try {
|
|
266
|
+
const files = readContextFolder(folderToValidate);
|
|
267
|
+
if (files.length === 0) {
|
|
268
|
+
spinner.succeed("CONTEXT folder is empty (no markdown files to validate)");
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const allIssues = [];
|
|
272
|
+
for (const file of files) {
|
|
273
|
+
const issues = validateFile(file.path, file.content);
|
|
274
|
+
allIssues.push(...issues);
|
|
275
|
+
}
|
|
276
|
+
spinner.stop();
|
|
277
|
+
// Group issues by severity
|
|
278
|
+
const errors = allIssues.filter((i) => i.severity === "error");
|
|
279
|
+
const warnings = allIssues.filter((i) => i.severity === "warning");
|
|
280
|
+
console.log("");
|
|
281
|
+
console.log(chalk.bold(`Validated ${files.length} file(s)\n`));
|
|
282
|
+
if (allIssues.length === 0) {
|
|
283
|
+
console.log(chalk.green("✓ All files are valid!\n"));
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// Show errors
|
|
287
|
+
if (errors.length > 0) {
|
|
288
|
+
console.log(chalk.red(`✗ ${errors.length} error(s):\n`));
|
|
289
|
+
for (const issue of errors) {
|
|
290
|
+
console.log(chalk.red(` ${issue.path}`));
|
|
291
|
+
console.log(chalk.red(` ${issue.message}`));
|
|
292
|
+
if (issue.suggestion) {
|
|
293
|
+
console.log(chalk.gray(` → ${issue.suggestion}`));
|
|
294
|
+
}
|
|
295
|
+
console.log("");
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Show warnings
|
|
299
|
+
if (warnings.length > 0) {
|
|
300
|
+
console.log(chalk.yellow(`⚠ ${warnings.length} warning(s):\n`));
|
|
301
|
+
for (const issue of warnings) {
|
|
302
|
+
console.log(chalk.yellow(` ${issue.path}`));
|
|
303
|
+
console.log(chalk.yellow(` ${issue.message}`));
|
|
304
|
+
if (issue.suggestion) {
|
|
305
|
+
console.log(chalk.gray(` → ${issue.suggestion}`));
|
|
306
|
+
}
|
|
307
|
+
console.log("");
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Summary
|
|
311
|
+
if (errors.length > 0) {
|
|
312
|
+
console.log(chalk.red(`\nValidation failed with ${errors.length} error(s) and ${warnings.length} warning(s).`));
|
|
313
|
+
console.log(chalk.gray("Fix the errors before pushing to EpicContext."));
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
console.log(chalk.yellow(`\nValidation passed with ${warnings.length} warning(s).`));
|
|
318
|
+
console.log(chalk.gray("You can push to EpicContext, but consider fixing the warnings."));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
spinner.fail("Validation failed");
|
|
323
|
+
console.error(chalk.red("Error:"), error.message);
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/files.d.ts
CHANGED
|
@@ -15,6 +15,14 @@ export declare function writeContextFolder(contextPath: string, files: FileInfo[
|
|
|
15
15
|
skipped: number;
|
|
16
16
|
skippedPaths: string[];
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Delete local files that don't exist in the cloud
|
|
20
|
+
* Used during pull to remove files that were deleted in the UI
|
|
21
|
+
*/
|
|
22
|
+
export declare function deleteOrphanedLocalFiles(contextPath: string, cloudFiles: FileInfo[]): {
|
|
23
|
+
deleted: number;
|
|
24
|
+
deletedPaths: string[];
|
|
25
|
+
};
|
|
18
26
|
/**
|
|
19
27
|
* Ensure the context folder exists with basic structure
|
|
20
28
|
*/
|
package/dist/cli/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,YAAiB,GACzB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAsC9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,YAAiB,GACzB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAsC9D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,QAAQ,EAAE,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAyB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgyE7D;AA4BD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,IAAI,CAkGrG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOpD"}
|
package/dist/cli/files.js
CHANGED
|
@@ -73,6 +73,34 @@ export function writeContextFolder(contextPath, files, options = {}) {
|
|
|
73
73
|
}
|
|
74
74
|
return { written, skipped, skippedPaths };
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Delete local files that don't exist in the cloud
|
|
78
|
+
* Used during pull to remove files that were deleted in the UI
|
|
79
|
+
*/
|
|
80
|
+
export function deleteOrphanedLocalFiles(contextPath, cloudFiles) {
|
|
81
|
+
// Build a set of all cloud file paths (normalized)
|
|
82
|
+
const cloudPaths = new Set();
|
|
83
|
+
for (const file of cloudFiles) {
|
|
84
|
+
cloudPaths.add(file.path);
|
|
85
|
+
}
|
|
86
|
+
// Get all local markdown files
|
|
87
|
+
const localFiles = readContextFolder(contextPath);
|
|
88
|
+
const deleted = [];
|
|
89
|
+
for (const localFile of localFiles) {
|
|
90
|
+
// If local file doesn't exist in cloud, delete it
|
|
91
|
+
if (!cloudPaths.has(localFile.path)) {
|
|
92
|
+
const fullPath = path.join(contextPath, localFile.path);
|
|
93
|
+
try {
|
|
94
|
+
fs.unlinkSync(fullPath);
|
|
95
|
+
deleted.push(localFile.path);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error(`Failed to delete ${localFile.path}:`, error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return { deleted: deleted.length, deletedPaths: deleted };
|
|
103
|
+
}
|
|
76
104
|
/**
|
|
77
105
|
* Ensure the context folder exists with basic structure
|
|
78
106
|
*/
|
|
@@ -2228,33 +2256,179 @@ status: draft
|
|
|
2228
2256
|
`;
|
|
2229
2257
|
fs.writeFileSync(aiGuidePath, aiGuide, "utf-8");
|
|
2230
2258
|
}
|
|
2231
|
-
// Create README.md for each section
|
|
2259
|
+
// Create README.md for each section with detailed guidance
|
|
2232
2260
|
const sectionDescriptions = {
|
|
2233
|
-
"constitution":
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
"
|
|
2261
|
+
"constitution": {
|
|
2262
|
+
description: "Non-negotiable rules and principles that guide all work",
|
|
2263
|
+
guidance: `Use this section to document:
|
|
2264
|
+
- **AI Rules**: Guidelines that AI agents must follow when working on this project
|
|
2265
|
+
- **Context Guide**: How to navigate and use the CONTEXT folder
|
|
2266
|
+
- **Constraints**: Technical, business, or legal limitations that affect all work
|
|
2267
|
+
- **Core Principles**: Fundamental values that guide decision-making
|
|
2268
|
+
|
|
2269
|
+
This is the first section AI agents should read to understand project boundaries.`,
|
|
2270
|
+
blockTypes: ["ai_rules", "context_guide", "constraint", "implementation_log"],
|
|
2271
|
+
},
|
|
2272
|
+
"brand": {
|
|
2273
|
+
description: "Identity, voice, and visual system",
|
|
2274
|
+
guidance: `Use this section to document:
|
|
2275
|
+
- **Brand Positioning**: Golden Circle (WHY/HOW/WHAT) and positioning statement
|
|
2276
|
+
- **Color Palette**: Primary, secondary, and semantic colors with hex/RGB values
|
|
2277
|
+
- **Typography**: Font families, weights, and usage guidelines
|
|
2278
|
+
- **Iconography**: Icon library, style, and selected icons
|
|
2279
|
+
- **Tone of Voice**: Brand personality, voice archetype, vocabulary
|
|
2280
|
+
- **Messaging**: Elevator pitch, value propositions, CTAs
|
|
2281
|
+
- **Logos**: Logo variants for different backgrounds`,
|
|
2282
|
+
blockTypes: ["brand_positioning", "brand_color_palette", "brand_typography", "brand_iconography", "tone_of_voice", "messaging_framework", "logo", "brand_assets"],
|
|
2283
|
+
},
|
|
2284
|
+
"product": {
|
|
2285
|
+
description: "Vision, features, and roadmap",
|
|
2286
|
+
guidance: `Use this section to document:
|
|
2287
|
+
- **Product Overview**: Vision, mission, and product strategy
|
|
2288
|
+
- **Features**: Individual feature definitions with acceptance criteria
|
|
2289
|
+
- **SWOT Analysis**: Strengths, weaknesses, opportunities, threats
|
|
2290
|
+
- **Feature Market Analysis**: Competitive analysis for specific features`,
|
|
2291
|
+
blockTypes: ["product_overview", "feature", "swot_analysis", "feature_market_analysis"],
|
|
2292
|
+
},
|
|
2293
|
+
"business-strategy": {
|
|
2294
|
+
description: "Strategic planning frameworks and business models",
|
|
2295
|
+
guidance: `Use this section to document:
|
|
2296
|
+
- **OGSM**: Objectives, Goals, Strategies, Measures framework
|
|
2297
|
+
- **Business Model Canvas**: 9-block business model visualization
|
|
2298
|
+
- **Product Strategy Canvas**: Product-specific strategy
|
|
2299
|
+
- **Porter's Five Forces**: Competitive forces analysis
|
|
2300
|
+
- **Strategic Group Map**: Market positioning visualization
|
|
2301
|
+
- **Obeya Board**: Visual management board`,
|
|
2302
|
+
blockTypes: ["ogsm", "business_model_canvas", "product_strategy_canvas", "porters_five_forces", "strategic_group_map", "obeya_board"],
|
|
2303
|
+
},
|
|
2304
|
+
"users": {
|
|
2305
|
+
description: "Personas, jobs to be done, and user journeys",
|
|
2306
|
+
guidance: `Use this section to document:
|
|
2307
|
+
- **Personas**: Detailed user archetypes with goals, frustrations, behaviors
|
|
2308
|
+
- **Jobs to Be Done**: Functional and emotional jobs users are trying to accomplish
|
|
2309
|
+
- **Journey Maps**: Step-by-step user experiences with touchpoints and emotions
|
|
2310
|
+
|
|
2311
|
+
Organize files in subfolders:
|
|
2312
|
+
- \`personas/\` - User persona files
|
|
2313
|
+
- \`jobs/\` - JTBD files
|
|
2314
|
+
- \`journeys/\` - Journey map files`,
|
|
2315
|
+
blockTypes: ["persona", "jtbd", "journey_map"],
|
|
2316
|
+
},
|
|
2317
|
+
"research": {
|
|
2318
|
+
description: "Market and competitor analysis",
|
|
2319
|
+
guidance: `Use this section to document:
|
|
2320
|
+
- **Competitors**: Analysis of competing products/services
|
|
2321
|
+
- **Market Research**: Market size, trends, and opportunities
|
|
2322
|
+
- **User Research**: Findings from user interviews, surveys, usability tests
|
|
2323
|
+
|
|
2324
|
+
Organize competitor files in: \`competitors/\``,
|
|
2325
|
+
blockTypes: ["competitor", "market_research", "user_research"],
|
|
2326
|
+
},
|
|
2327
|
+
"technical": {
|
|
2328
|
+
description: "Stack, architecture, and constraints",
|
|
2329
|
+
guidance: `Use this section to document:
|
|
2330
|
+
- **Tech Stack**: Frontend, backend, infrastructure, and tools
|
|
2331
|
+
- **Architecture Diagrams**: C4 model diagrams (Context, Container, Component)
|
|
2332
|
+
- **Integrations**: Third-party services and APIs
|
|
2333
|
+
- **Constraints**: Technical limitations and requirements
|
|
2334
|
+
|
|
2335
|
+
Organize integration files in: \`integrations/\``,
|
|
2336
|
+
blockTypes: ["tech_stack", "architecture_diagram", "integration", "constraint"],
|
|
2337
|
+
},
|
|
2338
|
+
"design-system": {
|
|
2339
|
+
description: "Links to Storybook and Figma design resources",
|
|
2340
|
+
guidance: `Use this section to link external design resources:
|
|
2341
|
+
- **Storybook Link**: Connect to your hosted Storybook for component documentation
|
|
2342
|
+
- Supports EpicContext authentication for protected Storybooks
|
|
2343
|
+
- Use the storybook-template repo for easy setup
|
|
2344
|
+
- **Figma Embed**: Link to Figma design files
|
|
2345
|
+
|
|
2346
|
+
Note: This section is for linking external design tools, not for documenting
|
|
2347
|
+
components directly. Component documentation lives in Storybook.`,
|
|
2348
|
+
blockTypes: ["storybook_link", "figma_embed"],
|
|
2349
|
+
},
|
|
2350
|
+
"information-architecture": {
|
|
2351
|
+
description: "Site structure and taxonomies",
|
|
2352
|
+
guidance: `Use this section to document:
|
|
2353
|
+
- **IA Tree**: Visual representation of page hierarchy and navigation
|
|
2354
|
+
- Shows pages, modals, and their relationships
|
|
2355
|
+
- Documents cross-page links and user flows
|
|
2356
|
+
- Uses embedded JSON for sync compatibility
|
|
2357
|
+
- **Taxonomy**: Content classification systems
|
|
2358
|
+
- Categories, tags, and content types
|
|
2359
|
+
- Hierarchical organization of content
|
|
2360
|
+
|
|
2361
|
+
These blocks use visual editors in the EpicContext app.`,
|
|
2362
|
+
blockTypes: ["ia_tree", "taxonomy"],
|
|
2363
|
+
},
|
|
2364
|
+
"metrics": {
|
|
2365
|
+
description: "KPIs and analytics",
|
|
2366
|
+
guidance: `Use this section to document:
|
|
2367
|
+
- **North Star**: The single most important metric for the product
|
|
2368
|
+
- **KPIs**: Key Performance Indicators with targets and tracking
|
|
2369
|
+
- **Metrics**: Individual metric definitions
|
|
2370
|
+
- **Analytics Events**: Event tracking definitions for implementation`,
|
|
2371
|
+
blockTypes: ["north_star", "kpi", "metric", "analytics_event"],
|
|
2372
|
+
},
|
|
2373
|
+
"decisions": {
|
|
2374
|
+
description: "Architecture decision records",
|
|
2375
|
+
guidance: `Use this section to document:
|
|
2376
|
+
- **Decisions**: Architecture Decision Records (ADRs)
|
|
2377
|
+
- Context: What situation led to this decision?
|
|
2378
|
+
- Options: What alternatives were considered?
|
|
2379
|
+
- Decision: What was decided?
|
|
2380
|
+
- Rationale: Why this choice over alternatives?
|
|
2381
|
+
- Consequences: What are the implications?
|
|
2382
|
+
|
|
2383
|
+
Good ADRs help future team members understand why things are built this way.`,
|
|
2384
|
+
blockTypes: ["decision"],
|
|
2385
|
+
},
|
|
2386
|
+
"development": {
|
|
2387
|
+
description: "Epics, stories, tasks, and roadmaps",
|
|
2388
|
+
guidance: `Use this section to track development work:
|
|
2389
|
+
- **Epics**: Large initiatives spanning multiple sprints
|
|
2390
|
+
- **User Stories**: User-facing features with acceptance criteria
|
|
2391
|
+
- **Tasks**: Technical implementation plans (often created by AI agents)
|
|
2392
|
+
- **Roadmaps**: Timeline visualization of epics and milestones
|
|
2393
|
+
|
|
2394
|
+
Hierarchy: Epic → User Story → Task
|
|
2395
|
+
|
|
2396
|
+
Organize files in subfolders:
|
|
2397
|
+
- \`epics/\` - Epic files
|
|
2398
|
+
- \`stories/\` - User story files
|
|
2399
|
+
- \`tasks/\` - Task/implementation plan files
|
|
2400
|
+
- \`roadmaps/\` - Roadmap files`,
|
|
2401
|
+
blockTypes: ["epic", "user_story", "task", "roadmap", "release", "impact_effort_matrix"],
|
|
2402
|
+
},
|
|
2245
2403
|
};
|
|
2246
2404
|
for (const section of defaultSections) {
|
|
2247
2405
|
const sectionReadmePath = path.join(contextPath, section, "README.md");
|
|
2248
2406
|
if (!fs.existsSync(sectionReadmePath)) {
|
|
2249
|
-
const
|
|
2407
|
+
const sectionInfo = sectionDescriptions[section];
|
|
2408
|
+
const description = sectionInfo?.description || section;
|
|
2409
|
+
const guidance = sectionInfo?.guidance || "Add blocks via the EpicContext app or create markdown files with proper frontmatter.";
|
|
2410
|
+
const blockTypes = sectionInfo?.blockTypes || [];
|
|
2250
2411
|
const sectionName = section.split("-").map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
2251
2412
|
const sectionReadme = `# ${sectionName}
|
|
2252
2413
|
|
|
2253
2414
|
> ${description}
|
|
2254
2415
|
|
|
2255
|
-
|
|
2416
|
+
## When to Use This Section
|
|
2417
|
+
|
|
2418
|
+
${guidance}
|
|
2256
2419
|
|
|
2257
|
-
|
|
2420
|
+
## Block Types
|
|
2421
|
+
|
|
2422
|
+
${blockTypes.length > 0 ? blockTypes.map(t => `- \`${t}\``).join("\n") : "See AI-GUIDE.md for available block types."}
|
|
2423
|
+
|
|
2424
|
+
## Getting Started
|
|
2425
|
+
|
|
2426
|
+
1. Create a new markdown file in this folder
|
|
2427
|
+
2. Add YAML frontmatter with: type, section, key, name, status
|
|
2428
|
+
3. Write content following the block type schema
|
|
2429
|
+
4. Sync with EpicContext: \`npx @epicontext/mcp push\`
|
|
2430
|
+
|
|
2431
|
+
See \`AI-GUIDE.md\` in the root CONTEXT folder for detailed format instructions.
|
|
2258
2432
|
`;
|
|
2259
2433
|
fs.writeFileSync(sectionReadmePath, sectionReadme, "utf-8");
|
|
2260
2434
|
}
|
|
@@ -2329,14 +2503,26 @@ status: draft
|
|
|
2329
2503
|
[Content following the block type schema]
|
|
2330
2504
|
\`\`\`
|
|
2331
2505
|
|
|
2332
|
-
## Syncing
|
|
2506
|
+
## Syncing with EpicContext Cloud
|
|
2333
2507
|
|
|
2334
|
-
After creating or editing files, sync
|
|
2508
|
+
After creating or editing CONTEXT files, sync them to EpicContext:
|
|
2335
2509
|
|
|
2336
2510
|
\`\`\`bash
|
|
2511
|
+
# Check sync status
|
|
2512
|
+
npx @epiccontext/mcp status
|
|
2513
|
+
|
|
2514
|
+
# Push local changes to cloud (overwrites cloud version)
|
|
2337
2515
|
npx @epiccontext/mcp push
|
|
2516
|
+
|
|
2517
|
+
# Pull changes from cloud to local
|
|
2518
|
+
npx @epiccontext/mcp pull
|
|
2519
|
+
|
|
2520
|
+
# Push only a specific section
|
|
2521
|
+
npx @epiccontext/mcp push --section product
|
|
2338
2522
|
\`\`\`
|
|
2339
2523
|
|
|
2524
|
+
**IMPORTANT:** Always run \`npx @epiccontext/mcp push\` after creating or updating CONTEXT files to sync changes to the EpicContext cloud.
|
|
2525
|
+
|
|
2340
2526
|
For full documentation, see \`${relativeContextPath}/AI-GUIDE.md\`
|
|
2341
2527
|
`;
|
|
2342
2528
|
// CLAUDE.md - Claude Code / Anthropic Claude
|
package/dist/cli/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAgF9B,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { pushCommand } from "./commands/push.js";
|
|
|
8
8
|
import { statusCommand } from "./commands/status.js";
|
|
9
9
|
import { watchCommand } from "./commands/watch.js";
|
|
10
10
|
import { serveCommand } from "./commands/serve.js";
|
|
11
|
+
import { validateCommand } from "./commands/validate.js";
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program
|
|
13
14
|
.name("epiccontext")
|
|
@@ -51,6 +52,7 @@ program
|
|
|
51
52
|
.command("push")
|
|
52
53
|
.description("Push local changes to cloud (overwrites cloud version)")
|
|
53
54
|
.option("-s, --section <type>", "Only push specific section")
|
|
55
|
+
.option("-d, --dry-run", "Preview changes without applying them")
|
|
54
56
|
.action(pushCommand);
|
|
55
57
|
// Watch command - auto-push on file changes (local → cloud only)
|
|
56
58
|
program
|
|
@@ -64,6 +66,11 @@ program
|
|
|
64
66
|
.description("Start MCP server for AI tools")
|
|
65
67
|
.option("-t, --transport <type>", "Transport type: stdio", "stdio")
|
|
66
68
|
.action(serveCommand);
|
|
69
|
+
// Validate command - check CONTEXT files before pushing
|
|
70
|
+
program
|
|
71
|
+
.command("validate")
|
|
72
|
+
.description("Validate CONTEXT files for errors before pushing")
|
|
73
|
+
.action(validateCommand);
|
|
67
74
|
// Error handling
|
|
68
75
|
program.exitOverride();
|
|
69
76
|
export async function run() {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/pull.d.ts
CHANGED
|
@@ -2,17 +2,21 @@ import { EpicContextClient } from "../api/client.js";
|
|
|
2
2
|
export interface PullOptions {
|
|
3
3
|
force?: boolean;
|
|
4
4
|
section?: string;
|
|
5
|
+
deleteOrphans?: boolean;
|
|
5
6
|
}
|
|
6
7
|
export interface PullResult {
|
|
7
8
|
success: boolean;
|
|
8
9
|
filesWritten: number;
|
|
9
10
|
filesSkipped: number;
|
|
11
|
+
filesDeleted: number;
|
|
10
12
|
skippedPaths: string[];
|
|
13
|
+
deletedPaths: string[];
|
|
11
14
|
totalFiles: number;
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
14
17
|
* Pull from cloud to local CONTEXT folder
|
|
15
18
|
* By default, skips files where local version is newer than cloud version
|
|
19
|
+
* With deleteOrphans, removes local files that don't exist in cloud
|
|
16
20
|
*/
|
|
17
21
|
export declare function pullFromCloud(client: EpicContextClient, contextPath: string, options?: PullOptions): Promise<PullResult>;
|
|
18
22
|
//# sourceMappingURL=pull.d.ts.map
|
package/dist/sync/pull.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA2DrB"}
|
package/dist/sync/pull.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { writeContextFolder, ensureContextFolder } from "../cli/files.js";
|
|
1
|
+
import { writeContextFolder, ensureContextFolder, deleteOrphanedLocalFiles } from "../cli/files.js";
|
|
2
2
|
/**
|
|
3
3
|
* Pull from cloud to local CONTEXT folder
|
|
4
4
|
* By default, skips files where local version is newer than cloud version
|
|
5
|
+
* With deleteOrphans, removes local files that don't exist in cloud
|
|
5
6
|
*/
|
|
6
7
|
export async function pullFromCloud(client, contextPath, options = {}) {
|
|
7
8
|
// Ensure context folder exists
|
|
@@ -13,7 +14,9 @@ export async function pullFromCloud(client, contextPath, options = {}) {
|
|
|
13
14
|
success: true,
|
|
14
15
|
filesWritten: 0,
|
|
15
16
|
filesSkipped: 0,
|
|
17
|
+
filesDeleted: 0,
|
|
16
18
|
skippedPaths: [],
|
|
19
|
+
deletedPaths: [],
|
|
17
20
|
totalFiles: 0,
|
|
18
21
|
};
|
|
19
22
|
}
|
|
@@ -25,11 +28,26 @@ export async function pullFromCloud(client, contextPath, options = {}) {
|
|
|
25
28
|
// Write files to local folder
|
|
26
29
|
// Pass force option to allow overwriting newer local files
|
|
27
30
|
const { written, skipped, skippedPaths } = writeContextFolder(contextPath, filesToWrite, { force: options.force });
|
|
31
|
+
// Delete local files that don't exist in cloud (orphans)
|
|
32
|
+
// Default to true for pull - cloud is source of truth
|
|
33
|
+
let filesDeleted = 0;
|
|
34
|
+
let deletedPaths = [];
|
|
35
|
+
if (options.deleteOrphans !== false) {
|
|
36
|
+
// Only delete orphans if we're not filtering by section
|
|
37
|
+
// (otherwise we'd delete files from other sections)
|
|
38
|
+
if (!options.section) {
|
|
39
|
+
const deleteResult = deleteOrphanedLocalFiles(contextPath, response.files);
|
|
40
|
+
filesDeleted = deleteResult.deleted;
|
|
41
|
+
deletedPaths = deleteResult.deletedPaths;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
28
44
|
return {
|
|
29
45
|
success: true,
|
|
30
46
|
filesWritten: written,
|
|
31
47
|
filesSkipped: skipped,
|
|
48
|
+
filesDeleted,
|
|
32
49
|
skippedPaths,
|
|
50
|
+
deletedPaths,
|
|
33
51
|
totalFiles: filesToWrite.length,
|
|
34
52
|
};
|
|
35
53
|
}
|
package/dist/sync/pull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/sync/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAkBpG;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAyB,EACzB,WAAmB,EACnB,UAAuB,EAAE;IAEzB,+BAA+B;IAC/B,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAE5C,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;IAClC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAQ,CAAC,CACpC,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,2DAA2D;IAC3D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAC3D,WAAW,EACX,YAAY,EACZ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACzB,CAAC;IAEF,yDAAyD;IACzD,sDAAsD;IACtD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACpC,wDAAwD;QACxD,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3E,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;YACpC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,OAAO;QACrB,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,UAAU,EAAE,YAAY,CAAC,MAAM;KAChC,CAAC;AACJ,CAAC"}
|