ctxinit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +484 -0
  3. package/bin/ctx.js +3 -0
  4. package/dist/analysis/index.d.ts +2 -0
  5. package/dist/analysis/index.d.ts.map +1 -0
  6. package/dist/analysis/index.js +18 -0
  7. package/dist/analysis/index.js.map +1 -0
  8. package/dist/analysis/static-analysis.d.ts +79 -0
  9. package/dist/analysis/static-analysis.d.ts.map +1 -0
  10. package/dist/analysis/static-analysis.js +279 -0
  11. package/dist/analysis/static-analysis.js.map +1 -0
  12. package/dist/bootstrap/index.d.ts +8 -0
  13. package/dist/bootstrap/index.d.ts.map +1 -0
  14. package/dist/bootstrap/index.js +13 -0
  15. package/dist/bootstrap/index.js.map +1 -0
  16. package/dist/bootstrap/orchestrator.d.ts +48 -0
  17. package/dist/bootstrap/orchestrator.d.ts.map +1 -0
  18. package/dist/bootstrap/orchestrator.js +363 -0
  19. package/dist/bootstrap/orchestrator.js.map +1 -0
  20. package/dist/bootstrap/validator.d.ts +25 -0
  21. package/dist/bootstrap/validator.d.ts.map +1 -0
  22. package/dist/bootstrap/validator.js +412 -0
  23. package/dist/bootstrap/validator.js.map +1 -0
  24. package/dist/build/atomic.d.ts +74 -0
  25. package/dist/build/atomic.d.ts.map +1 -0
  26. package/dist/build/atomic.js +235 -0
  27. package/dist/build/atomic.js.map +1 -0
  28. package/dist/build/index.d.ts +10 -0
  29. package/dist/build/index.d.ts.map +1 -0
  30. package/dist/build/index.js +26 -0
  31. package/dist/build/index.js.map +1 -0
  32. package/dist/build/lock.d.ts +102 -0
  33. package/dist/build/lock.d.ts.map +1 -0
  34. package/dist/build/lock.js +297 -0
  35. package/dist/build/lock.js.map +1 -0
  36. package/dist/build/manifest.d.ts +138 -0
  37. package/dist/build/manifest.d.ts.map +1 -0
  38. package/dist/build/manifest.js +269 -0
  39. package/dist/build/manifest.js.map +1 -0
  40. package/dist/build/orchestrator.d.ts +103 -0
  41. package/dist/build/orchestrator.d.ts.map +1 -0
  42. package/dist/build/orchestrator.js +524 -0
  43. package/dist/build/orchestrator.js.map +1 -0
  44. package/dist/cli/bootstrap.d.ts +77 -0
  45. package/dist/cli/bootstrap.d.ts.map +1 -0
  46. package/dist/cli/bootstrap.js +527 -0
  47. package/dist/cli/bootstrap.js.map +1 -0
  48. package/dist/cli/build.d.ts +32 -0
  49. package/dist/cli/build.d.ts.map +1 -0
  50. package/dist/cli/build.js +156 -0
  51. package/dist/cli/build.js.map +1 -0
  52. package/dist/cli/diff.d.ts +23 -0
  53. package/dist/cli/diff.d.ts.map +1 -0
  54. package/dist/cli/diff.js +226 -0
  55. package/dist/cli/diff.js.map +1 -0
  56. package/dist/cli/hooks.d.ts +29 -0
  57. package/dist/cli/hooks.d.ts.map +1 -0
  58. package/dist/cli/hooks.js +176 -0
  59. package/dist/cli/hooks.js.map +1 -0
  60. package/dist/cli/init.d.ts +53 -0
  61. package/dist/cli/init.d.ts.map +1 -0
  62. package/dist/cli/init.js +254 -0
  63. package/dist/cli/init.js.map +1 -0
  64. package/dist/cli/lint.d.ts +46 -0
  65. package/dist/cli/lint.d.ts.map +1 -0
  66. package/dist/cli/lint.js +210 -0
  67. package/dist/cli/lint.js.map +1 -0
  68. package/dist/cli/migrate.d.ts +28 -0
  69. package/dist/cli/migrate.d.ts.map +1 -0
  70. package/dist/cli/migrate.js +350 -0
  71. package/dist/cli/migrate.js.map +1 -0
  72. package/dist/cli/verify.d.ts +21 -0
  73. package/dist/cli/verify.d.ts.map +1 -0
  74. package/dist/cli/verify.js +209 -0
  75. package/dist/cli/verify.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.d.ts.map +1 -0
  78. package/dist/cli.js +262 -0
  79. package/dist/cli.js.map +1 -0
  80. package/dist/compiler/agents-compiler.d.ts +24 -0
  81. package/dist/compiler/agents-compiler.d.ts.map +1 -0
  82. package/dist/compiler/agents-compiler.js +192 -0
  83. package/dist/compiler/agents-compiler.js.map +1 -0
  84. package/dist/compiler/base-compiler.d.ts +152 -0
  85. package/dist/compiler/base-compiler.d.ts.map +1 -0
  86. package/dist/compiler/base-compiler.js +180 -0
  87. package/dist/compiler/base-compiler.js.map +1 -0
  88. package/dist/compiler/claude-compiler.d.ts +24 -0
  89. package/dist/compiler/claude-compiler.d.ts.map +1 -0
  90. package/dist/compiler/claude-compiler.js +182 -0
  91. package/dist/compiler/claude-compiler.js.map +1 -0
  92. package/dist/compiler/cursor-compiler.d.ts +33 -0
  93. package/dist/compiler/cursor-compiler.d.ts.map +1 -0
  94. package/dist/compiler/cursor-compiler.js +136 -0
  95. package/dist/compiler/cursor-compiler.js.map +1 -0
  96. package/dist/compiler/index.d.ts +7 -0
  97. package/dist/compiler/index.d.ts.map +1 -0
  98. package/dist/compiler/index.js +24 -0
  99. package/dist/compiler/index.js.map +1 -0
  100. package/dist/compiler/rule-selector.d.ts +115 -0
  101. package/dist/compiler/rule-selector.d.ts.map +1 -0
  102. package/dist/compiler/rule-selector.js +273 -0
  103. package/dist/compiler/rule-selector.js.map +1 -0
  104. package/dist/compiler/token-estimator.d.ts +74 -0
  105. package/dist/compiler/token-estimator.d.ts.map +1 -0
  106. package/dist/compiler/token-estimator.js +191 -0
  107. package/dist/compiler/token-estimator.js.map +1 -0
  108. package/dist/config/index.d.ts +2 -0
  109. package/dist/config/index.d.ts.map +1 -0
  110. package/dist/config/index.js +18 -0
  111. package/dist/config/index.js.map +1 -0
  112. package/dist/config/loader.d.ts +48 -0
  113. package/dist/config/loader.d.ts.map +1 -0
  114. package/dist/config/loader.js +175 -0
  115. package/dist/config/loader.js.map +1 -0
  116. package/dist/git/gitignore.d.ts +59 -0
  117. package/dist/git/gitignore.d.ts.map +1 -0
  118. package/dist/git/gitignore.js +268 -0
  119. package/dist/git/gitignore.js.map +1 -0
  120. package/dist/git/hooks.d.ts +34 -0
  121. package/dist/git/hooks.d.ts.map +1 -0
  122. package/dist/git/hooks.js +129 -0
  123. package/dist/git/hooks.js.map +1 -0
  124. package/dist/git/husky.d.ts +52 -0
  125. package/dist/git/husky.d.ts.map +1 -0
  126. package/dist/git/husky.js +219 -0
  127. package/dist/git/husky.js.map +1 -0
  128. package/dist/git/index.d.ts +9 -0
  129. package/dist/git/index.d.ts.map +1 -0
  130. package/dist/git/index.js +15 -0
  131. package/dist/git/index.js.map +1 -0
  132. package/dist/index.d.ts +6 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +23 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/llm/base-provider.d.ts +43 -0
  137. package/dist/llm/base-provider.d.ts.map +1 -0
  138. package/dist/llm/base-provider.js +91 -0
  139. package/dist/llm/base-provider.js.map +1 -0
  140. package/dist/llm/index.d.ts +17 -0
  141. package/dist/llm/index.d.ts.map +1 -0
  142. package/dist/llm/index.js +36 -0
  143. package/dist/llm/index.js.map +1 -0
  144. package/dist/llm/prompts/bootstrap-prompt.d.ts +27 -0
  145. package/dist/llm/prompts/bootstrap-prompt.d.ts.map +1 -0
  146. package/dist/llm/prompts/bootstrap-prompt.js +278 -0
  147. package/dist/llm/prompts/bootstrap-prompt.js.map +1 -0
  148. package/dist/llm/prompts/index.d.ts +5 -0
  149. package/dist/llm/prompts/index.d.ts.map +1 -0
  150. package/dist/llm/prompts/index.js +11 -0
  151. package/dist/llm/prompts/index.js.map +1 -0
  152. package/dist/llm/provider-factory.d.ts +27 -0
  153. package/dist/llm/provider-factory.d.ts.map +1 -0
  154. package/dist/llm/provider-factory.js +213 -0
  155. package/dist/llm/provider-factory.js.map +1 -0
  156. package/dist/llm/providers/claude-api.d.ts +21 -0
  157. package/dist/llm/providers/claude-api.d.ts.map +1 -0
  158. package/dist/llm/providers/claude-api.js +110 -0
  159. package/dist/llm/providers/claude-api.js.map +1 -0
  160. package/dist/llm/providers/claude-code.d.ts +21 -0
  161. package/dist/llm/providers/claude-code.d.ts.map +1 -0
  162. package/dist/llm/providers/claude-code.js +120 -0
  163. package/dist/llm/providers/claude-code.js.map +1 -0
  164. package/dist/llm/providers/codex-cli.d.ts +25 -0
  165. package/dist/llm/providers/codex-cli.d.ts.map +1 -0
  166. package/dist/llm/providers/codex-cli.js +129 -0
  167. package/dist/llm/providers/codex-cli.js.map +1 -0
  168. package/dist/llm/providers/cursor-cli.d.ts +24 -0
  169. package/dist/llm/providers/cursor-cli.d.ts.map +1 -0
  170. package/dist/llm/providers/cursor-cli.js +106 -0
  171. package/dist/llm/providers/cursor-cli.js.map +1 -0
  172. package/dist/llm/providers/gemini-api.d.ts +20 -0
  173. package/dist/llm/providers/gemini-api.d.ts.map +1 -0
  174. package/dist/llm/providers/gemini-api.js +121 -0
  175. package/dist/llm/providers/gemini-api.js.map +1 -0
  176. package/dist/llm/providers/gemini-cli.d.ts +20 -0
  177. package/dist/llm/providers/gemini-cli.d.ts.map +1 -0
  178. package/dist/llm/providers/gemini-cli.js +109 -0
  179. package/dist/llm/providers/gemini-cli.js.map +1 -0
  180. package/dist/llm/providers/interactive.d.ts +42 -0
  181. package/dist/llm/providers/interactive.d.ts.map +1 -0
  182. package/dist/llm/providers/interactive.js +200 -0
  183. package/dist/llm/providers/interactive.js.map +1 -0
  184. package/dist/llm/providers/openai-api.d.ts +21 -0
  185. package/dist/llm/providers/openai-api.d.ts.map +1 -0
  186. package/dist/llm/providers/openai-api.js +107 -0
  187. package/dist/llm/providers/openai-api.js.map +1 -0
  188. package/dist/llm/types.d.ts +128 -0
  189. package/dist/llm/types.d.ts.map +1 -0
  190. package/dist/llm/types.js +8 -0
  191. package/dist/llm/types.js.map +1 -0
  192. package/dist/parser/index.d.ts +3 -0
  193. package/dist/parser/index.d.ts.map +1 -0
  194. package/dist/parser/index.js +19 -0
  195. package/dist/parser/index.js.map +1 -0
  196. package/dist/parser/path-security.d.ts +40 -0
  197. package/dist/parser/path-security.d.ts.map +1 -0
  198. package/dist/parser/path-security.js +183 -0
  199. package/dist/parser/path-security.js.map +1 -0
  200. package/dist/parser/rule-parser.d.ts +50 -0
  201. package/dist/parser/rule-parser.d.ts.map +1 -0
  202. package/dist/parser/rule-parser.js +203 -0
  203. package/dist/parser/rule-parser.js.map +1 -0
  204. package/dist/schemas/config.d.ts +202 -0
  205. package/dist/schemas/config.d.ts.map +1 -0
  206. package/dist/schemas/config.js +96 -0
  207. package/dist/schemas/config.js.map +1 -0
  208. package/dist/schemas/index.d.ts +3 -0
  209. package/dist/schemas/index.d.ts.map +1 -0
  210. package/dist/schemas/index.js +19 -0
  211. package/dist/schemas/index.js.map +1 -0
  212. package/dist/schemas/rule.d.ts +67 -0
  213. package/dist/schemas/rule.d.ts.map +1 -0
  214. package/dist/schemas/rule.js +44 -0
  215. package/dist/schemas/rule.js.map +1 -0
  216. package/package.json +69 -0
  217. package/templates/architecture.md +35 -0
  218. package/templates/bootstrap-prompt.md +242 -0
  219. package/templates/config.yaml +25 -0
  220. package/templates/project.md +44 -0
  221. package/templates/rules/example.md +36 -0
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RuleParseError = void 0;
40
+ exports.parseRule = parseRule;
41
+ exports.parseAllRules = parseAllRules;
42
+ exports.hasValidFrontmatter = hasValidFrontmatter;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const gray_matter_1 = __importDefault(require("gray-matter"));
46
+ const rule_1 = require("../schemas/rule");
47
+ const path_security_1 = require("./path-security");
48
+ /**
49
+ * Error thrown when rule parsing fails
50
+ */
51
+ class RuleParseError extends Error {
52
+ path;
53
+ line;
54
+ details;
55
+ constructor(message, path, line, details) {
56
+ super(message);
57
+ this.path = path;
58
+ this.line = line;
59
+ this.details = details;
60
+ this.name = 'RuleParseError';
61
+ }
62
+ }
63
+ exports.RuleParseError = RuleParseError;
64
+ /**
65
+ * Parse a single rule file
66
+ *
67
+ * @param filePath - Path to the rule file (relative to rulesDir)
68
+ * @param options - Parse options
69
+ * @returns Parsed rule
70
+ * @throws RuleParseError if parsing fails
71
+ * @throws PathSecurityError if path is unsafe
72
+ */
73
+ function parseRule(filePath, options) {
74
+ const rulesDir = options.rulesDir || path.join(options.projectRoot, '.context', 'rules');
75
+ // Validate path security
76
+ (0, path_security_1.validatePath)(filePath, options.projectRoot);
77
+ const absolutePath = path.join(rulesDir, filePath);
78
+ // Validate symlink if enabled
79
+ if (options.validateSymlinks !== false) {
80
+ (0, path_security_1.validateSymlink)(absolutePath, options.projectRoot);
81
+ }
82
+ // Read file content
83
+ let rawContent;
84
+ try {
85
+ rawContent = fs.readFileSync(absolutePath, 'utf-8');
86
+ }
87
+ catch (error) {
88
+ throw new RuleParseError(`Failed to read rule file: ${error.message}`, filePath);
89
+ }
90
+ // Handle empty files
91
+ if (!rawContent.trim()) {
92
+ throw new RuleParseError('Rule file is empty', filePath);
93
+ }
94
+ // Parse frontmatter using gray-matter
95
+ let parsed;
96
+ try {
97
+ parsed = (0, gray_matter_1.default)(rawContent);
98
+ }
99
+ catch (error) {
100
+ throw new RuleParseError(`Failed to parse frontmatter: ${error.message}`, filePath);
101
+ }
102
+ // Handle missing frontmatter
103
+ if (!parsed.data || Object.keys(parsed.data).length === 0) {
104
+ throw new RuleParseError('Rule file has no frontmatter. Add YAML frontmatter with at least an "id" field.', filePath);
105
+ }
106
+ // Validate frontmatter against schema
107
+ const validation = rule_1.RuleFrontmatterSchema.safeParse(parsed.data);
108
+ if (!validation.success) {
109
+ const firstError = validation.error.issues[0];
110
+ throw new RuleParseError(`Invalid frontmatter at '${firstError.path.join('.')}': ${firstError.message}`, filePath, undefined, validation.error);
111
+ }
112
+ const frontmatter = validation.data;
113
+ // Determine effective globs
114
+ const inferredGlobs = (0, rule_1.inferGlobsFromPath)(filePath);
115
+ let effectiveGlobs;
116
+ if (frontmatter.globs) {
117
+ // Use explicit globs
118
+ effectiveGlobs = Array.isArray(frontmatter.globs)
119
+ ? frontmatter.globs
120
+ : [frontmatter.globs];
121
+ }
122
+ else {
123
+ // Use inferred globs from directory path
124
+ effectiveGlobs = inferredGlobs;
125
+ }
126
+ return {
127
+ path: filePath,
128
+ absolutePath,
129
+ frontmatter,
130
+ content: parsed.content.trim(),
131
+ inferredGlobs,
132
+ effectiveGlobs,
133
+ };
134
+ }
135
+ /**
136
+ * Parse all rule files in a directory
137
+ *
138
+ * @param options - Parse options
139
+ * @returns Array of parsed rules and any errors encountered
140
+ */
141
+ function parseAllRules(options) {
142
+ const rulesDir = options.rulesDir || path.join(options.projectRoot, '.context', 'rules');
143
+ const rules = [];
144
+ const errors = [];
145
+ // Find all .md files recursively
146
+ const findMarkdownFiles = (dir, baseDir) => {
147
+ const files = [];
148
+ if (!fs.existsSync(dir)) {
149
+ return files;
150
+ }
151
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
152
+ for (const entry of entries) {
153
+ const fullPath = path.join(dir, entry.name);
154
+ const relativePath = path.relative(baseDir, fullPath);
155
+ if (entry.isDirectory()) {
156
+ files.push(...findMarkdownFiles(fullPath, baseDir));
157
+ }
158
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
159
+ files.push(relativePath);
160
+ }
161
+ }
162
+ return files;
163
+ };
164
+ const markdownFiles = findMarkdownFiles(rulesDir, rulesDir);
165
+ for (const file of markdownFiles) {
166
+ try {
167
+ const rule = parseRule(file, { ...options, rulesDir });
168
+ rules.push(rule);
169
+ }
170
+ catch (error) {
171
+ if (error instanceof RuleParseError) {
172
+ errors.push(error);
173
+ }
174
+ else if (error instanceof path_security_1.PathSecurityError) {
175
+ errors.push(new RuleParseError(`Security violation: ${error.message}`, file));
176
+ }
177
+ else {
178
+ errors.push(new RuleParseError(`Unexpected error: ${error.message}`, file));
179
+ }
180
+ }
181
+ }
182
+ return { rules, errors };
183
+ }
184
+ /**
185
+ * Check if a file has valid frontmatter without fully parsing
186
+ *
187
+ * @param content - File content
188
+ * @returns true if frontmatter appears valid
189
+ */
190
+ function hasValidFrontmatter(content) {
191
+ const trimmed = content.trim();
192
+ if (!trimmed.startsWith('---')) {
193
+ return false;
194
+ }
195
+ const endIndex = trimmed.indexOf('---', 3);
196
+ if (endIndex <= 3) {
197
+ return false;
198
+ }
199
+ // Check that frontmatter is not empty (has actual content between delimiters)
200
+ const frontmatterContent = trimmed.slice(3, endIndex).trim();
201
+ return frontmatterContent.length > 0;
202
+ }
203
+ //# sourceMappingURL=rule-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-parser.js","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Rule selection strategies for compilation
4
+ */
5
+ export declare const SelectionStrategySchema: z.ZodEnum<{
6
+ priority: "priority";
7
+ directory: "directory";
8
+ glob: "glob";
9
+ tag: "tag";
10
+ all: "all";
11
+ }>;
12
+ export type SelectionStrategy = z.infer<typeof SelectionStrategySchema>;
13
+ /**
14
+ * Conflict resolution strategies
15
+ */
16
+ export declare const ConflictResolutionStrategySchema: z.ZodEnum<{
17
+ priority_wins: "priority_wins";
18
+ merge: "merge";
19
+ }>;
20
+ export type ConflictResolutionStrategy = z.infer<typeof ConflictResolutionStrategySchema>;
21
+ /**
22
+ * Claude compilation target configuration
23
+ */
24
+ export declare const ClaudeTargetSchema: z.ZodObject<{
25
+ max_tokens: z.ZodDefault<z.ZodNumber>;
26
+ strategy: z.ZodDefault<z.ZodEnum<{
27
+ priority: "priority";
28
+ directory: "directory";
29
+ glob: "glob";
30
+ tag: "tag";
31
+ all: "all";
32
+ }>>;
33
+ always_include: z.ZodDefault<z.ZodArray<z.ZodString>>;
34
+ }, z.core.$strip>;
35
+ export type ClaudeTarget = z.infer<typeof ClaudeTargetSchema>;
36
+ /**
37
+ * Cursor compilation target configuration
38
+ */
39
+ export declare const CursorTargetSchema: z.ZodObject<{
40
+ strategy: z.ZodDefault<z.ZodEnum<{
41
+ priority: "priority";
42
+ directory: "directory";
43
+ glob: "glob";
44
+ tag: "tag";
45
+ all: "all";
46
+ }>>;
47
+ }, z.core.$strip>;
48
+ export type CursorTarget = z.infer<typeof CursorTargetSchema>;
49
+ /**
50
+ * Agents compilation target configuration
51
+ */
52
+ export declare const AgentsTargetSchema: z.ZodObject<{
53
+ max_tokens: z.ZodDefault<z.ZodNumber>;
54
+ strategy: z.ZodDefault<z.ZodEnum<{
55
+ priority: "priority";
56
+ directory: "directory";
57
+ glob: "glob";
58
+ tag: "tag";
59
+ all: "all";
60
+ }>>;
61
+ include_dirs: z.ZodDefault<z.ZodArray<z.ZodString>>;
62
+ }, z.core.$strip>;
63
+ export type AgentsTarget = z.infer<typeof AgentsTargetSchema>;
64
+ /**
65
+ * Compilation configuration for all targets
66
+ */
67
+ export declare const CompileConfigSchema: z.ZodObject<{
68
+ claude: z.ZodOptional<z.ZodObject<{
69
+ max_tokens: z.ZodDefault<z.ZodNumber>;
70
+ strategy: z.ZodDefault<z.ZodEnum<{
71
+ priority: "priority";
72
+ directory: "directory";
73
+ glob: "glob";
74
+ tag: "tag";
75
+ all: "all";
76
+ }>>;
77
+ always_include: z.ZodDefault<z.ZodArray<z.ZodString>>;
78
+ }, z.core.$strip>>;
79
+ cursor: z.ZodOptional<z.ZodObject<{
80
+ strategy: z.ZodDefault<z.ZodEnum<{
81
+ priority: "priority";
82
+ directory: "directory";
83
+ glob: "glob";
84
+ tag: "tag";
85
+ all: "all";
86
+ }>>;
87
+ }, z.core.$strip>>;
88
+ agents: z.ZodOptional<z.ZodObject<{
89
+ max_tokens: z.ZodDefault<z.ZodNumber>;
90
+ strategy: z.ZodDefault<z.ZodEnum<{
91
+ priority: "priority";
92
+ directory: "directory";
93
+ glob: "glob";
94
+ tag: "tag";
95
+ all: "all";
96
+ }>>;
97
+ include_dirs: z.ZodDefault<z.ZodArray<z.ZodString>>;
98
+ }, z.core.$strip>>;
99
+ }, z.core.$strip>;
100
+ export type CompileConfig = z.infer<typeof CompileConfigSchema>;
101
+ /**
102
+ * Build target types
103
+ */
104
+ export type BuildTarget = 'claude' | 'cursor' | 'agents';
105
+ export declare const BUILD_TARGETS: BuildTarget[];
106
+ /**
107
+ * Conflict resolution configuration
108
+ */
109
+ export declare const ConflictResolutionSchema: z.ZodObject<{
110
+ strategy: z.ZodDefault<z.ZodEnum<{
111
+ priority_wins: "priority_wins";
112
+ merge: "merge";
113
+ }>>;
114
+ fallback: z.ZodOptional<z.ZodEnum<{
115
+ priority_wins: "priority_wins";
116
+ merge: "merge";
117
+ }>>;
118
+ }, z.core.$strip>;
119
+ export type ConflictResolution = z.infer<typeof ConflictResolutionSchema>;
120
+ /**
121
+ * Migration mode configuration
122
+ */
123
+ export declare const MigrationModeSchema: z.ZodEnum<{
124
+ attach: "attach";
125
+ replace: "replace";
126
+ }>;
127
+ export type MigrationMode = z.infer<typeof MigrationModeSchema>;
128
+ /**
129
+ * Migration configuration for legacy file handling
130
+ */
131
+ export declare const MigrationConfigSchema: z.ZodObject<{
132
+ mode: z.ZodOptional<z.ZodEnum<{
133
+ attach: "attach";
134
+ replace: "replace";
135
+ }>>;
136
+ preserve_legacy: z.ZodDefault<z.ZodBoolean>;
137
+ legacy_files: z.ZodDefault<z.ZodArray<z.ZodString>>;
138
+ }, z.core.$strip>;
139
+ export type MigrationConfig = z.infer<typeof MigrationConfigSchema>;
140
+ /**
141
+ * Complete config.yaml schema
142
+ */
143
+ export declare const ConfigSchema: z.ZodObject<{
144
+ version: z.ZodDefault<z.ZodString>;
145
+ compile: z.ZodDefault<z.ZodObject<{
146
+ claude: z.ZodOptional<z.ZodObject<{
147
+ max_tokens: z.ZodDefault<z.ZodNumber>;
148
+ strategy: z.ZodDefault<z.ZodEnum<{
149
+ priority: "priority";
150
+ directory: "directory";
151
+ glob: "glob";
152
+ tag: "tag";
153
+ all: "all";
154
+ }>>;
155
+ always_include: z.ZodDefault<z.ZodArray<z.ZodString>>;
156
+ }, z.core.$strip>>;
157
+ cursor: z.ZodOptional<z.ZodObject<{
158
+ strategy: z.ZodDefault<z.ZodEnum<{
159
+ priority: "priority";
160
+ directory: "directory";
161
+ glob: "glob";
162
+ tag: "tag";
163
+ all: "all";
164
+ }>>;
165
+ }, z.core.$strip>>;
166
+ agents: z.ZodOptional<z.ZodObject<{
167
+ max_tokens: z.ZodDefault<z.ZodNumber>;
168
+ strategy: z.ZodDefault<z.ZodEnum<{
169
+ priority: "priority";
170
+ directory: "directory";
171
+ glob: "glob";
172
+ tag: "tag";
173
+ all: "all";
174
+ }>>;
175
+ include_dirs: z.ZodDefault<z.ZodArray<z.ZodString>>;
176
+ }, z.core.$strip>>;
177
+ }, z.core.$strip>>;
178
+ conflict_resolution: z.ZodDefault<z.ZodObject<{
179
+ strategy: z.ZodDefault<z.ZodEnum<{
180
+ priority_wins: "priority_wins";
181
+ merge: "merge";
182
+ }>>;
183
+ fallback: z.ZodOptional<z.ZodEnum<{
184
+ priority_wins: "priority_wins";
185
+ merge: "merge";
186
+ }>>;
187
+ }, z.core.$strip>>;
188
+ migration: z.ZodOptional<z.ZodObject<{
189
+ mode: z.ZodOptional<z.ZodEnum<{
190
+ attach: "attach";
191
+ replace: "replace";
192
+ }>>;
193
+ preserve_legacy: z.ZodDefault<z.ZodBoolean>;
194
+ legacy_files: z.ZodDefault<z.ZodArray<z.ZodString>>;
195
+ }, z.core.$strip>>;
196
+ }, z.core.$strip>;
197
+ export type Config = z.infer<typeof ConfigSchema>;
198
+ /**
199
+ * Default configuration values
200
+ */
201
+ export declare const DEFAULT_CONFIG: Config;
202
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;EAA0D,CAAC;AAC/F,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;EAAqC,CAAC;AACnF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;iBAE7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAI7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACzD,eAAO,MAAM,aAAa,EAAE,WAAW,EAAmC,CAAC;AAE3E;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;iBAGnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;EAAgC,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;iBAIhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAoB5B,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CONFIG = exports.ConfigSchema = exports.MigrationConfigSchema = exports.MigrationModeSchema = exports.ConflictResolutionSchema = exports.BUILD_TARGETS = exports.CompileConfigSchema = exports.AgentsTargetSchema = exports.CursorTargetSchema = exports.ClaudeTargetSchema = exports.ConflictResolutionStrategySchema = exports.SelectionStrategySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ /**
6
+ * Rule selection strategies for compilation
7
+ */
8
+ exports.SelectionStrategySchema = zod_1.z.enum(['priority', 'directory', 'glob', 'tag', 'all']);
9
+ /**
10
+ * Conflict resolution strategies
11
+ */
12
+ exports.ConflictResolutionStrategySchema = zod_1.z.enum(['priority_wins', 'merge']);
13
+ /**
14
+ * Claude compilation target configuration
15
+ */
16
+ exports.ClaudeTargetSchema = zod_1.z.object({
17
+ max_tokens: zod_1.z.number().int().positive().default(4000),
18
+ strategy: exports.SelectionStrategySchema.default('priority'),
19
+ always_include: zod_1.z.array(zod_1.z.string()).default([]),
20
+ });
21
+ /**
22
+ * Cursor compilation target configuration
23
+ */
24
+ exports.CursorTargetSchema = zod_1.z.object({
25
+ strategy: exports.SelectionStrategySchema.default('all'),
26
+ });
27
+ /**
28
+ * Agents compilation target configuration
29
+ */
30
+ exports.AgentsTargetSchema = zod_1.z.object({
31
+ max_tokens: zod_1.z.number().int().positive().default(8000),
32
+ strategy: exports.SelectionStrategySchema.default('priority'),
33
+ include_dirs: zod_1.z.array(zod_1.z.string()).default([]),
34
+ });
35
+ /**
36
+ * Compilation configuration for all targets
37
+ */
38
+ exports.CompileConfigSchema = zod_1.z.object({
39
+ claude: exports.ClaudeTargetSchema.optional(),
40
+ cursor: exports.CursorTargetSchema.optional(),
41
+ agents: exports.AgentsTargetSchema.optional(),
42
+ });
43
+ exports.BUILD_TARGETS = ['claude', 'cursor', 'agents'];
44
+ /**
45
+ * Conflict resolution configuration
46
+ */
47
+ exports.ConflictResolutionSchema = zod_1.z.object({
48
+ strategy: exports.ConflictResolutionStrategySchema.default('priority_wins'),
49
+ fallback: exports.ConflictResolutionStrategySchema.optional(),
50
+ });
51
+ /**
52
+ * Migration mode configuration
53
+ */
54
+ exports.MigrationModeSchema = zod_1.z.enum(['attach', 'replace']);
55
+ /**
56
+ * Migration configuration for legacy file handling
57
+ */
58
+ exports.MigrationConfigSchema = zod_1.z.object({
59
+ mode: exports.MigrationModeSchema.optional(),
60
+ preserve_legacy: zod_1.z.boolean().default(false),
61
+ legacy_files: zod_1.z.array(zod_1.z.string()).default([]),
62
+ });
63
+ /**
64
+ * Complete config.yaml schema
65
+ */
66
+ exports.ConfigSchema = zod_1.z.object({
67
+ version: zod_1.z.string().default('1.0'),
68
+ compile: exports.CompileConfigSchema.default({}),
69
+ conflict_resolution: exports.ConflictResolutionSchema.default({ strategy: 'priority_wins' }),
70
+ migration: exports.MigrationConfigSchema.optional(),
71
+ });
72
+ /**
73
+ * Default configuration values
74
+ */
75
+ exports.DEFAULT_CONFIG = {
76
+ version: '1.0',
77
+ compile: {
78
+ claude: {
79
+ max_tokens: 4000,
80
+ strategy: 'priority',
81
+ always_include: [],
82
+ },
83
+ cursor: {
84
+ strategy: 'all',
85
+ },
86
+ agents: {
87
+ max_tokens: 8000,
88
+ strategy: 'priority',
89
+ include_dirs: [],
90
+ },
91
+ },
92
+ conflict_resolution: {
93
+ strategy: 'priority_wins',
94
+ },
95
+ };
96
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/schemas/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './rule';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config"), exports);
18
+ __exportStar(require("./rule"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB"}
@@ -0,0 +1,67 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Rule frontmatter schema for .md rule files
4
+ */
5
+ export declare const RuleFrontmatterSchema: z.ZodObject<{
6
+ id: z.ZodString;
7
+ description: z.ZodOptional<z.ZodString>;
8
+ domain: z.ZodOptional<z.ZodString>;
9
+ globs: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
10
+ priority: z.ZodDefault<z.ZodNumber>;
11
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
12
+ always_apply: z.ZodDefault<z.ZodBoolean>;
13
+ }, z.core.$strip>;
14
+ export type RuleFrontmatter = z.infer<typeof RuleFrontmatterSchema>;
15
+ /**
16
+ * Complete parsed rule with frontmatter and content
17
+ */
18
+ export interface ParsedRule {
19
+ /** File path relative to .context/rules/ */
20
+ path: string;
21
+ /** Absolute file path */
22
+ absolutePath: string;
23
+ /** Parsed and validated frontmatter */
24
+ frontmatter: RuleFrontmatter;
25
+ /** Markdown content body (after frontmatter) */
26
+ content: string;
27
+ /** Inferred globs from directory path if not specified */
28
+ inferredGlobs: string[];
29
+ /** Effective globs (explicit or inferred) */
30
+ effectiveGlobs: string[];
31
+ }
32
+ /**
33
+ * Rule validation result
34
+ */
35
+ export interface RuleValidationResult {
36
+ valid: boolean;
37
+ errors: RuleValidationError[];
38
+ warnings: RuleValidationWarning[];
39
+ }
40
+ /**
41
+ * Rule validation error (blocking)
42
+ */
43
+ export interface RuleValidationError {
44
+ type: 'schema' | 'duplicate_id' | 'circular_reference' | 'path_traversal' | 'dead_link';
45
+ message: string;
46
+ path: string;
47
+ line?: number;
48
+ }
49
+ /**
50
+ * Rule validation warning (non-blocking)
51
+ */
52
+ export interface RuleValidationWarning {
53
+ type: 'ghost_rule' | 'token_limit' | 'deprecated';
54
+ message: string;
55
+ path: string;
56
+ }
57
+ /**
58
+ * Default priority value for rules without explicit priority
59
+ */
60
+ export declare const DEFAULT_PRIORITY = 50;
61
+ /**
62
+ * Infer globs from a rule's directory path
63
+ * @param rulePath - Relative path to the rule file (e.g., 'backend/auth/login.md')
64
+ * @returns Array of inferred glob patterns
65
+ */
66
+ export declare function inferGlobsFromPath(rulePath: string): string[];
67
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/schemas/rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;iBAQhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB7D"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PRIORITY = exports.RuleFrontmatterSchema = void 0;
4
+ exports.inferGlobsFromPath = inferGlobsFromPath;
5
+ const zod_1 = require("zod");
6
+ /**
7
+ * Rule frontmatter schema for .md rule files
8
+ */
9
+ exports.RuleFrontmatterSchema = zod_1.z.object({
10
+ id: zod_1.z.string().min(1, 'Rule ID is required'),
11
+ description: zod_1.z.string().optional(),
12
+ domain: zod_1.z.string().optional(),
13
+ globs: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
14
+ priority: zod_1.z.number().int().min(0).max(100).default(50),
15
+ tags: zod_1.z.array(zod_1.z.string()).default([]),
16
+ always_apply: zod_1.z.boolean().default(false),
17
+ });
18
+ /**
19
+ * Default priority value for rules without explicit priority
20
+ */
21
+ exports.DEFAULT_PRIORITY = 50;
22
+ /**
23
+ * Infer globs from a rule's directory path
24
+ * @param rulePath - Relative path to the rule file (e.g., 'backend/auth/login.md')
25
+ * @returns Array of inferred glob patterns
26
+ */
27
+ function inferGlobsFromPath(rulePath) {
28
+ const pathParts = rulePath.split('/');
29
+ // Remove the filename
30
+ pathParts.pop();
31
+ if (pathParts.length === 0) {
32
+ // Rule is in root of rules directory - applies to all files
33
+ return ['**/*'];
34
+ }
35
+ // Build glob pattern from directory path
36
+ // e.g., 'backend/auth' -> 'backend/auth/**/*', 'src/backend/auth/**/*'
37
+ const dirPath = pathParts.join('/');
38
+ return [
39
+ `${dirPath}/**/*`,
40
+ `src/${dirPath}/**/*`,
41
+ `lib/${dirPath}/**/*`,
42
+ ];
43
+ }
44
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/schemas/rule.ts"],"names":[],"mappings":";;;AAwEA,gDAmBC;AA3FD,6BAAwB;AAExB;;GAEG;AACU,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IAC5C,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC,CAAC,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACzC,CAAC,CAAC;AAiDH;;GAEG;AACU,QAAA,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,sBAAsB;IACtB,SAAS,CAAC,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,4DAA4D;QAC5D,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,yCAAyC;IACzC,uEAAuE;IACvE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO;QACL,GAAG,OAAO,OAAO;QACjB,OAAO,OAAO,OAAO;QACrB,OAAO,OAAO,OAAO;KACtB,CAAC;AACJ,CAAC"}