@cxtmanager/core 1.0.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 (42) hide show
  1. package/README.md +132 -0
  2. package/dist/context-manager.d.ts +55 -0
  3. package/dist/context-manager.d.ts.map +1 -0
  4. package/dist/context-manager.js +676 -0
  5. package/dist/context-manager.js.map +1 -0
  6. package/dist/file-watcher.d.ts +31 -0
  7. package/dist/file-watcher.d.ts.map +1 -0
  8. package/dist/file-watcher.js +121 -0
  9. package/dist/file-watcher.js.map +1 -0
  10. package/dist/git-hooks-manager.d.ts +40 -0
  11. package/dist/git-hooks-manager.d.ts.map +1 -0
  12. package/dist/git-hooks-manager.js +210 -0
  13. package/dist/git-hooks-manager.js.map +1 -0
  14. package/dist/git-repository.d.ts +65 -0
  15. package/dist/git-repository.d.ts.map +1 -0
  16. package/dist/git-repository.js +352 -0
  17. package/dist/git-repository.js.map +1 -0
  18. package/dist/index.d.ts +13 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +37 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/plan-manager.d.ts +55 -0
  23. package/dist/plan-manager.d.ts.map +1 -0
  24. package/dist/plan-manager.js +208 -0
  25. package/dist/plan-manager.js.map +1 -0
  26. package/dist/plan-templates.d.ts +15 -0
  27. package/dist/plan-templates.d.ts.map +1 -0
  28. package/dist/plan-templates.js +127 -0
  29. package/dist/plan-templates.js.map +1 -0
  30. package/dist/types/index.d.ts +143 -0
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/index.js +26 -0
  33. package/dist/types/index.js.map +1 -0
  34. package/dist/types.d.ts +176 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +3 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/validation-engine.d.ts +26 -0
  39. package/dist/validation-engine.d.ts.map +1 -0
  40. package/dist/validation-engine.js +344 -0
  41. package/dist/validation-engine.js.map +1 -0
  42. package/package.json +63 -0
@@ -0,0 +1,352 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GitRepository = void 0;
37
+ const simple_git_1 = require("simple-git");
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * GitRepository - Handles all Git operations for CxtManager
42
+ * Implements Git-like commands and ensures .cxt/ folder is tracked
43
+ */
44
+ class GitRepository {
45
+ constructor(projectRoot) {
46
+ this.projectRoot = projectRoot;
47
+ this.git = (0, simple_git_1.simpleGit)(projectRoot);
48
+ }
49
+ /**
50
+ * Ensure Git repository exists, initialize if needed
51
+ */
52
+ async ensureGitRepo() {
53
+ const isRepo = await this.isGitRepo();
54
+ if (!isRepo) {
55
+ console.log('📁 Initializing Git repository...');
56
+ await this.git.init();
57
+ // Create .gitignore if it doesn't exist (trackInGit will be set later)
58
+ await this.ensureGitignore(true);
59
+ }
60
+ }
61
+ /**
62
+ * Check if current directory is a Git repository
63
+ */
64
+ async isGitRepo() {
65
+ try {
66
+ await this.git.status();
67
+ return true;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ /**
74
+ * Add files and create a commit
75
+ */
76
+ async addAndCommit(files, message, author) {
77
+ if (!await this.isGitRepo()) {
78
+ throw new Error('Not a Git repository.\n' +
79
+ ' 💡 Run "git init" to initialize a Git repository\n' +
80
+ ' 💡 Or run "cit init" which will initialize Git automatically');
81
+ }
82
+ // Ensure files is an array
83
+ const fileArray = Array.isArray(files) ? files : [files];
84
+ try {
85
+ // Add files to staging
86
+ await this.git.add(fileArray);
87
+ // Create commit with optional author attribution
88
+ if (author) {
89
+ await this.git.commit(message, undefined, {
90
+ '--author': author
91
+ });
92
+ }
93
+ else {
94
+ await this.git.commit(message);
95
+ }
96
+ }
97
+ catch (error) {
98
+ if (error.message.includes('EACCES') || error.message.includes('permission denied')) {
99
+ throw new Error('Permission denied. Cannot write to Git repository.\n' +
100
+ ' 💡 Check file system permissions\n' +
101
+ ' 💡 Ensure you have write access to .git/ directory');
102
+ }
103
+ if (error.message.includes('not a git repository')) {
104
+ throw new Error('Not a Git repository.\n' +
105
+ ' 💡 Run "git init" to initialize a Git repository\n' +
106
+ ' 💡 Or run "cit init" which will initialize Git automatically');
107
+ }
108
+ throw error;
109
+ }
110
+ }
111
+ /**
112
+ * Get current Git status
113
+ */
114
+ async getStatus() {
115
+ if (!await this.isGitRepo()) {
116
+ throw new Error('Not a Git repository.\n' +
117
+ ' 💡 Run "git init" to initialize a Git repository\n' +
118
+ ' 💡 Or run "cit init" which will initialize Git automatically');
119
+ }
120
+ try {
121
+ const status = await this.git.status();
122
+ return {
123
+ staged: status.staged,
124
+ modified: status.modified,
125
+ untracked: status.not_added
126
+ };
127
+ }
128
+ catch (error) {
129
+ if (error.message.includes('not a git repository')) {
130
+ throw new Error('Not a Git repository.\n' +
131
+ ' 💡 Run "git init" to initialize a Git repository\n' +
132
+ ' 💡 Or run "cit init" which will initialize Git automatically');
133
+ }
134
+ throw error;
135
+ }
136
+ }
137
+ /**
138
+ * Get Git repository information
139
+ */
140
+ async getInfo() {
141
+ if (!await this.isGitRepo()) {
142
+ return {
143
+ isRepo: false,
144
+ branch: '',
145
+ hasRemote: false,
146
+ commitCount: 0,
147
+ lastCommit: undefined
148
+ };
149
+ }
150
+ try {
151
+ const [status, branches, log] = await Promise.all([
152
+ this.git.status(),
153
+ this.git.branch(),
154
+ this.git.log({ maxCount: 1 }).catch(() => null)
155
+ ]);
156
+ const commitCount = await this.getCommitCount();
157
+ // Check for remote
158
+ const remotes = await this.git.getRemotes(true);
159
+ const hasRemote = remotes.length > 0;
160
+ const remoteUrl = hasRemote ? remotes[0].refs.fetch : undefined;
161
+ // Build lastCommit object if we have log data
162
+ let lastCommit = undefined;
163
+ if (log?.latest) {
164
+ lastCommit = {
165
+ hash: log.latest.hash,
166
+ message: log.latest.message,
167
+ author: log.latest.author_name,
168
+ date: new Date(log.latest.date)
169
+ };
170
+ }
171
+ return {
172
+ isRepo: true,
173
+ branch: branches.current,
174
+ hasRemote,
175
+ remoteUrl,
176
+ commitCount,
177
+ lastCommit
178
+ };
179
+ }
180
+ catch (error) {
181
+ return {
182
+ isRepo: true,
183
+ branch: '',
184
+ hasRemote: false,
185
+ commitCount: 0,
186
+ lastCommit: undefined
187
+ };
188
+ }
189
+ }
190
+ /**
191
+ * Get file blame information
192
+ */
193
+ async blame(filePath) {
194
+ try {
195
+ const blame = await this.git.raw(['blame', '--line-porcelain', filePath]);
196
+ return this.parseBlameOutput(blame);
197
+ }
198
+ catch (error) {
199
+ console.warn(`Could not get blame for ${filePath}:`, error);
200
+ return [];
201
+ }
202
+ }
203
+ /**
204
+ * Get commit log for a file
205
+ */
206
+ async getFileHistory(filePath) {
207
+ try {
208
+ const log = await this.git.log({ file: filePath });
209
+ return log.all.map(commit => ({
210
+ hash: commit.hash,
211
+ message: commit.message,
212
+ author: commit.author_name,
213
+ email: commit.author_email,
214
+ date: new Date(commit.date),
215
+ refs: commit.refs
216
+ }));
217
+ }
218
+ catch (error) {
219
+ console.warn(`Could not get history for ${filePath}:`, error);
220
+ return [];
221
+ }
222
+ }
223
+ /**
224
+ * Get diff for a file or between commits
225
+ */
226
+ async getDiff(filePath, fromCommit, toCommit) {
227
+ try {
228
+ const options = ['diff'];
229
+ if (fromCommit) {
230
+ options.push(fromCommit);
231
+ if (toCommit) {
232
+ options.push(toCommit);
233
+ }
234
+ }
235
+ if (filePath) {
236
+ options.push('--', filePath);
237
+ }
238
+ return await this.git.raw(options);
239
+ }
240
+ catch (error) {
241
+ console.warn('Could not get diff:', error);
242
+ return '';
243
+ }
244
+ }
245
+ /**
246
+ * Checkout a specific commit or branch
247
+ */
248
+ async checkout(target) {
249
+ await this.git.checkout(target);
250
+ }
251
+ /**
252
+ * Get list of branches
253
+ */
254
+ async getBranches() {
255
+ const branches = await this.git.branch();
256
+ return {
257
+ current: branches.current,
258
+ all: branches.all
259
+ };
260
+ }
261
+ // Private helper methods
262
+ async getCommitCount() {
263
+ try {
264
+ const result = await this.git.raw(['rev-list', '--count', 'HEAD']);
265
+ return parseInt(result.trim(), 10);
266
+ }
267
+ catch {
268
+ return 0;
269
+ }
270
+ }
271
+ parseBlameOutput(blameText) {
272
+ // TODO: Implement proper blame parsing
273
+ // This is a simplified version - full implementation would parse the porcelain format
274
+ const lines = blameText.split('\n');
275
+ return lines.map((line, index) => ({
276
+ line: index + 1,
277
+ content: line,
278
+ author: 'unknown',
279
+ hash: 'unknown',
280
+ timestamp: new Date()
281
+ }));
282
+ }
283
+ /**
284
+ * Ensure .gitignore exists and configure .cxt/ tracking
285
+ * @param trackInGit - If false, adds .cxt/ to .gitignore for privacy (default: true)
286
+ */
287
+ async ensureGitignore(trackInGit = true) {
288
+ const gitignorePath = path.join(this.projectRoot, '.gitignore');
289
+ // Default .gitignore content for CxtManager projects
290
+ const defaultGitignore = `# Dependencies
291
+ node_modules/
292
+ npm-debug.log*
293
+
294
+ # Build outputs
295
+ dist/
296
+ build/
297
+
298
+ # Environment variables
299
+ .env
300
+ .env.local
301
+
302
+ # IDE files
303
+ .vscode/settings.json
304
+ .idea/
305
+
306
+ # OS files
307
+ .DS_Store
308
+ Thumbs.db
309
+
310
+ ${trackInGit ? '# CxtManager: Track .cxt/ folder - this is important!\n# .cxt/ folder should be committed to share context with team' : '# CxtManager: .cxt/ folder is private (not tracked in Git)\n.cxt/'}
311
+ `;
312
+ if (!await fs.pathExists(gitignorePath)) {
313
+ await fs.writeFile(gitignorePath, defaultGitignore);
314
+ }
315
+ else {
316
+ const gitignore = await fs.readFile(gitignorePath, 'utf-8');
317
+ const hasCxtIgnore = gitignore.includes('.cxt/') || gitignore.includes('.cxt');
318
+ if (trackInGit && hasCxtIgnore) {
319
+ // Remove .cxt/ from gitignore if it exists (only CxtManager entries)
320
+ const lines = gitignore.split('\n');
321
+ const updated = lines
322
+ .filter((line, index) => {
323
+ // Remove lines that are .cxt/ or .cxt (with or without comment)
324
+ const trimmed = line.trim();
325
+ if (trimmed === '.cxt/' || trimmed === '.cxt' || trimmed.startsWith('.cxt/') || trimmed.startsWith('.cxt ')) {
326
+ // Also remove preceding CxtManager comment if present
327
+ if (index > 0 && lines[index - 1].includes('CxtManager')) {
328
+ return false; // Remove comment line too
329
+ }
330
+ return false;
331
+ }
332
+ // Remove CxtManager comment lines about .cxt/
333
+ if (trimmed.includes('CxtManager') && (trimmed.includes('.cxt/') || trimmed.includes('.cxt'))) {
334
+ return false;
335
+ }
336
+ return true;
337
+ })
338
+ .join('\n');
339
+ await fs.writeFile(gitignorePath, updated);
340
+ console.log('✅ Removed .cxt/ from .gitignore (context will be tracked in Git)');
341
+ }
342
+ else if (!trackInGit && !hasCxtIgnore) {
343
+ // Add .cxt/ to gitignore
344
+ const updated = gitignore.trim() + '\n\n# CxtManager: .cxt/ folder is private (not tracked in Git)\n.cxt/\n';
345
+ await fs.writeFile(gitignorePath, updated);
346
+ console.log('✅ Added .cxt/ to .gitignore (context will remain private)');
347
+ }
348
+ }
349
+ }
350
+ }
351
+ exports.GitRepository = GitRepository;
352
+ //# sourceMappingURL=git-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-repository.js","sourceRoot":"","sources":["../src/git-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @cxtmanager/core - Core functionality for CxtManager
3
+ * Git for AI Context - Stop being the context monkey
4
+ */
5
+ export { ContextManager } from './context-manager';
6
+ export { GitRepository } from './git-repository';
7
+ export { FileWatcher } from './file-watcher';
8
+ export { ValidationEngine } from './validation-engine';
9
+ export { PlanManager } from './plan-manager';
10
+ export { PlanTemplates } from './plan-templates';
11
+ export { GitHooksManager } from './git-hooks-manager';
12
+ export * from './types';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * @cxtmanager/core - Core functionality for CxtManager
4
+ * Git for AI Context - Stop being the context monkey
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.GitHooksManager = exports.PlanTemplates = exports.PlanManager = exports.ValidationEngine = exports.FileWatcher = exports.GitRepository = exports.ContextManager = void 0;
22
+ var context_manager_1 = require("./context-manager");
23
+ Object.defineProperty(exports, "ContextManager", { enumerable: true, get: function () { return context_manager_1.ContextManager; } });
24
+ var git_repository_1 = require("./git-repository");
25
+ Object.defineProperty(exports, "GitRepository", { enumerable: true, get: function () { return git_repository_1.GitRepository; } });
26
+ var file_watcher_1 = require("./file-watcher");
27
+ Object.defineProperty(exports, "FileWatcher", { enumerable: true, get: function () { return file_watcher_1.FileWatcher; } });
28
+ var validation_engine_1 = require("./validation-engine");
29
+ Object.defineProperty(exports, "ValidationEngine", { enumerable: true, get: function () { return validation_engine_1.ValidationEngine; } });
30
+ var plan_manager_1 = require("./plan-manager");
31
+ Object.defineProperty(exports, "PlanManager", { enumerable: true, get: function () { return plan_manager_1.PlanManager; } });
32
+ var plan_templates_1 = require("./plan-templates");
33
+ Object.defineProperty(exports, "PlanTemplates", { enumerable: true, get: function () { return plan_templates_1.PlanTemplates; } });
34
+ var git_hooks_manager_1 = require("./git-hooks-manager");
35
+ Object.defineProperty(exports, "GitHooksManager", { enumerable: true, get: function () { return git_hooks_manager_1.GitHooksManager; } });
36
+ __exportStar(require("./types"), exports);
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AAExB,0CAAwB"}
@@ -0,0 +1,55 @@
1
+ import { GitRepository } from './git-repository';
2
+ import { CxtConfig, SyncPlanOptions, SyncPlanResult } from './types';
3
+ export declare class PlanManager {
4
+ private cxtPath;
5
+ private planPath;
6
+ private planHistoryPath;
7
+ private gitRepo;
8
+ private config;
9
+ constructor(cxtPath: string, gitRepo: GitRepository, config: CxtConfig);
10
+ /**
11
+ * Get current branch name
12
+ */
13
+ getCurrentBranch(): Promise<string>;
14
+ /**
15
+ * Get sanitized branch name for file system (remove special chars)
16
+ */
17
+ private sanitizeBranchName;
18
+ /**
19
+ * Get path to branch-specific plan backup
20
+ */
21
+ private getBranchPlanPath;
22
+ /**
23
+ * Save current plan.md to .plan-history/{branch}.md
24
+ */
25
+ saveCurrentPlan(branch: string): Promise<void>;
26
+ /**
27
+ * Restore plan.md from .plan-history/{branch}.md
28
+ */
29
+ restorePlan(branch: string): Promise<boolean>;
30
+ /**
31
+ * Create blank plan.md template
32
+ */
33
+ createBlankPlan(template?: 'minimal' | 'detailed'): Promise<void>;
34
+ /**
35
+ * Check if plan.md has uncommitted changes
36
+ */
37
+ hasUncommittedChanges(): Promise<boolean>;
38
+ /**
39
+ * Main sync method: save current, restore for new branch
40
+ */
41
+ syncPlan(options?: SyncPlanOptions): Promise<SyncPlanResult>;
42
+ /**
43
+ * Check if branch has saved plan
44
+ */
45
+ hasBranchPlan(branch: string): Promise<boolean>;
46
+ /**
47
+ * List all saved branch plans
48
+ */
49
+ listBranchPlans(): Promise<string[]>;
50
+ /**
51
+ * Archive completed branch plan
52
+ */
53
+ archivePlan(branch: string): Promise<void>;
54
+ }
55
+ //# sourceMappingURL=plan-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-manager.d.ts","sourceRoot":"","sources":["../src/plan-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGrE,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAY;gBAGxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,SAAS;IASnB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYnD;;OAEG;IACG,eAAe,CAAC,QAAQ,GAAE,SAAS,GAAG,UAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlF;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDtE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjD"}