logicstamp-context 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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/LLM_CONTEXT.md +260 -0
  3. package/README.md +949 -0
  4. package/dist/cli/commands/clean.d.ts +15 -0
  5. package/dist/cli/commands/clean.d.ts.map +1 -0
  6. package/dist/cli/commands/clean.js +142 -0
  7. package/dist/cli/commands/clean.js.map +1 -0
  8. package/dist/cli/commands/compare.d.ts +88 -0
  9. package/dist/cli/commands/compare.d.ts.map +1 -0
  10. package/dist/cli/commands/compare.js +519 -0
  11. package/dist/cli/commands/compare.js.map +1 -0
  12. package/dist/cli/commands/context.d.ts +24 -0
  13. package/dist/cli/commands/context.d.ts.map +1 -0
  14. package/dist/cli/commands/context.js +576 -0
  15. package/dist/cli/commands/context.js.map +1 -0
  16. package/dist/cli/commands/init.d.ts +14 -0
  17. package/dist/cli/commands/init.d.ts.map +1 -0
  18. package/dist/cli/commands/init.js +71 -0
  19. package/dist/cli/commands/init.js.map +1 -0
  20. package/dist/cli/commands/validate.d.ts +52 -0
  21. package/dist/cli/commands/validate.d.ts.map +1 -0
  22. package/dist/cli/commands/validate.js +368 -0
  23. package/dist/cli/commands/validate.js.map +1 -0
  24. package/dist/cli/index.d.ts +7 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +223 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/cli/stamp.d.ts +7 -0
  29. package/dist/cli/stamp.d.ts.map +1 -0
  30. package/dist/cli/stamp.js +961 -0
  31. package/dist/cli/stamp.js.map +1 -0
  32. package/dist/cli/validate-index.d.ts +7 -0
  33. package/dist/cli/validate-index.d.ts.map +1 -0
  34. package/dist/cli/validate-index.js +55 -0
  35. package/dist/cli/validate-index.js.map +1 -0
  36. package/dist/core/astParser.d.ts +47 -0
  37. package/dist/core/astParser.d.ts.map +1 -0
  38. package/dist/core/astParser.js +417 -0
  39. package/dist/core/astParser.js.map +1 -0
  40. package/dist/core/contractBuilder.d.ts +48 -0
  41. package/dist/core/contractBuilder.d.ts.map +1 -0
  42. package/dist/core/contractBuilder.js +120 -0
  43. package/dist/core/contractBuilder.js.map +1 -0
  44. package/dist/core/manifest.d.ts +75 -0
  45. package/dist/core/manifest.d.ts.map +1 -0
  46. package/dist/core/manifest.js +173 -0
  47. package/dist/core/manifest.js.map +1 -0
  48. package/dist/core/pack.d.ts +190 -0
  49. package/dist/core/pack.d.ts.map +1 -0
  50. package/dist/core/pack.js +438 -0
  51. package/dist/core/pack.js.map +1 -0
  52. package/dist/core/signature.d.ts +47 -0
  53. package/dist/core/signature.d.ts.map +1 -0
  54. package/dist/core/signature.js +208 -0
  55. package/dist/core/signature.js.map +1 -0
  56. package/dist/index.d.ts +27 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +23 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/types/UIFContract.d.ts +112 -0
  61. package/dist/types/UIFContract.d.ts.map +1 -0
  62. package/dist/types/UIFContract.js +36 -0
  63. package/dist/types/UIFContract.js.map +1 -0
  64. package/dist/utils/config.d.ts +34 -0
  65. package/dist/utils/config.d.ts.map +1 -0
  66. package/dist/utils/config.js +62 -0
  67. package/dist/utils/config.js.map +1 -0
  68. package/dist/utils/fsx.d.ts +85 -0
  69. package/dist/utils/fsx.d.ts.map +1 -0
  70. package/dist/utils/fsx.js +181 -0
  71. package/dist/utils/fsx.js.map +1 -0
  72. package/dist/utils/gitignore.d.ts +62 -0
  73. package/dist/utils/gitignore.d.ts.map +1 -0
  74. package/dist/utils/gitignore.js +183 -0
  75. package/dist/utils/gitignore.js.map +1 -0
  76. package/dist/utils/hash.d.ts +73 -0
  77. package/dist/utils/hash.d.ts.map +1 -0
  78. package/dist/utils/hash.js +159 -0
  79. package/dist/utils/hash.js.map +1 -0
  80. package/dist/utils/llmContext.d.ts +34 -0
  81. package/dist/utils/llmContext.d.ts.map +1 -0
  82. package/dist/utils/llmContext.js +136 -0
  83. package/dist/utils/llmContext.js.map +1 -0
  84. package/dist/utils/tokens.d.ts +23 -0
  85. package/dist/utils/tokens.d.ts.map +1 -0
  86. package/dist/utils/tokens.js +29 -0
  87. package/dist/utils/tokens.js.map +1 -0
  88. package/package.json +69 -0
  89. package/schema/logicstamp.context.schema.json +430 -0
@@ -0,0 +1,519 @@
1
+ /**
2
+ * Compare command - Diffs two context.json files
3
+ * Detects added/removed components and changed signatures
4
+ */
5
+ import { readFile, unlink } from 'node:fs/promises';
6
+ import { join, dirname } from 'node:path';
7
+ import { estimateGPT4Tokens, estimateClaudeTokens, formatTokenCount } from '../../utils/tokens.js';
8
+ /**
9
+ * Index bundles into a map of entryId -> LiteSig
10
+ */
11
+ function index(bundles) {
12
+ const m = new Map();
13
+ for (const b of bundles) {
14
+ for (const n of b.graph.nodes) {
15
+ const c = n.contract;
16
+ m.set(c.entryId.toLowerCase(), {
17
+ semanticHash: c.semanticHash,
18
+ imports: c.version?.imports ?? [],
19
+ hooks: c.version?.hooks ?? [],
20
+ functions: c.version?.functions ?? [],
21
+ components: c.version?.components ?? [],
22
+ props: Object.keys(c.logicSignature?.props ?? {}),
23
+ emits: Object.keys(c.logicSignature?.emits ?? {}),
24
+ exportKind: typeof c.exports === 'string' ? 'default'
25
+ : c.exports?.named?.length ? 'named' : 'none',
26
+ });
27
+ }
28
+ }
29
+ return m;
30
+ }
31
+ /**
32
+ * Diff two indexed bundles with detailed change information
33
+ */
34
+ function diff(oldIdx, newIdx) {
35
+ const added = [];
36
+ const removed = [];
37
+ const changed = [];
38
+ // Find added components
39
+ for (const id of newIdx.keys()) {
40
+ if (!oldIdx.has(id)) {
41
+ added.push(id);
42
+ }
43
+ }
44
+ // Find removed components
45
+ for (const id of oldIdx.keys()) {
46
+ if (!newIdx.has(id)) {
47
+ removed.push(id);
48
+ }
49
+ }
50
+ // Find changed components with detailed deltas
51
+ for (const id of newIdx.keys()) {
52
+ if (oldIdx.has(id)) {
53
+ const a = oldIdx.get(id);
54
+ const b = newIdx.get(id);
55
+ const deltas = [];
56
+ if (a.semanticHash !== b.semanticHash) {
57
+ deltas.push({ type: 'hash', old: a.semanticHash, new: b.semanticHash });
58
+ }
59
+ if (JSON.stringify(a.imports) !== JSON.stringify(b.imports)) {
60
+ deltas.push({ type: 'imports', old: a.imports, new: b.imports });
61
+ }
62
+ if (JSON.stringify(a.hooks) !== JSON.stringify(b.hooks)) {
63
+ deltas.push({ type: 'hooks', old: a.hooks, new: b.hooks });
64
+ }
65
+ if (JSON.stringify(a.functions) !== JSON.stringify(b.functions)) {
66
+ deltas.push({ type: 'functions', old: a.functions, new: b.functions });
67
+ }
68
+ if (JSON.stringify(a.components) !== JSON.stringify(b.components)) {
69
+ deltas.push({ type: 'components', old: a.components, new: b.components });
70
+ }
71
+ if (JSON.stringify(a.props) !== JSON.stringify(b.props)) {
72
+ deltas.push({ type: 'props', old: a.props, new: b.props });
73
+ }
74
+ if (JSON.stringify(a.emits) !== JSON.stringify(b.emits)) {
75
+ deltas.push({ type: 'emits', old: a.emits, new: b.emits });
76
+ }
77
+ if (a.exportKind !== b.exportKind) {
78
+ deltas.push({ type: 'exports', old: a.exportKind, new: b.exportKind });
79
+ }
80
+ if (deltas.length > 0) {
81
+ changed.push({ id, deltas });
82
+ }
83
+ }
84
+ }
85
+ const status = added.length === 0 && removed.length === 0 && changed.length === 0
86
+ ? 'PASS'
87
+ : 'DRIFT';
88
+ return { status, added, removed, changed };
89
+ }
90
+ /**
91
+ * Calculate token count for bundles
92
+ */
93
+ function calculateTokens(bundles) {
94
+ const text = JSON.stringify(bundles);
95
+ return {
96
+ gpt4: estimateGPT4Tokens(text),
97
+ claude: estimateClaudeTokens(text),
98
+ };
99
+ }
100
+ /**
101
+ * Main compare command
102
+ * Returns the comparison result instead of exiting, allowing caller to handle approval logic
103
+ */
104
+ export async function compareCommand(options) {
105
+ // Load both files
106
+ const oldContent = await readFile(options.oldFile, 'utf8');
107
+ const newContent = await readFile(options.newFile, 'utf8');
108
+ const oldBundles = JSON.parse(oldContent);
109
+ const newBundles = JSON.parse(newContent);
110
+ // Index bundles
111
+ const oldIdx = index(oldBundles);
112
+ const newIdx = index(newBundles);
113
+ // Compute diff
114
+ const result = diff(oldIdx, newIdx);
115
+ // Output result (skip PASS status in quiet mode)
116
+ if (options.quiet && result.status === 'PASS') {
117
+ // Minimal output in quiet mode for PASS
118
+ process.stdout.write('✓\n');
119
+ }
120
+ else if (!options.quiet || result.status === 'DRIFT') {
121
+ console.log(`\n${result.status === 'PASS' ? '✅' : '⚠️'} ${result.status}\n`);
122
+ }
123
+ if (result.status === 'DRIFT') {
124
+ if (result.added.length > 0) {
125
+ if (!options.quiet) {
126
+ console.log(`Added components: ${result.added.length}`);
127
+ }
128
+ result.added.forEach(id => console.log(` + ${id}`));
129
+ if (!options.quiet) {
130
+ console.log();
131
+ }
132
+ }
133
+ if (result.removed.length > 0) {
134
+ if (!options.quiet) {
135
+ console.log(`Removed components: ${result.removed.length}`);
136
+ }
137
+ result.removed.forEach(id => console.log(` - ${id}`));
138
+ if (!options.quiet) {
139
+ console.log();
140
+ }
141
+ }
142
+ if (result.changed.length > 0) {
143
+ if (!options.quiet) {
144
+ console.log(`Changed components: ${result.changed.length}`);
145
+ }
146
+ result.changed.forEach(({ id, deltas }) => {
147
+ console.log(` ~ ${id}`);
148
+ deltas.forEach(delta => {
149
+ console.log(` Δ ${delta.type}`);
150
+ if (delta.type === 'hash') {
151
+ console.log(` old: ${delta.old}`);
152
+ console.log(` new: ${delta.new}`);
153
+ }
154
+ else if (delta.type === 'imports' || delta.type === 'hooks' || delta.type === 'functions' ||
155
+ delta.type === 'components' || delta.type === 'props' || delta.type === 'emits') {
156
+ const oldSet = new Set(delta.old);
157
+ const newSet = new Set(delta.new);
158
+ // Find removed items
159
+ const removed = delta.old.filter((item) => !newSet.has(item));
160
+ // Find added items
161
+ const added = delta.new.filter((item) => !oldSet.has(item));
162
+ if (removed.length > 0) {
163
+ removed.forEach((item) => console.log(` - ${item}`));
164
+ }
165
+ if (added.length > 0) {
166
+ added.forEach((item) => console.log(` + ${item}`));
167
+ }
168
+ if (removed.length === 0 && added.length === 0) {
169
+ // Order changed but items are the same
170
+ console.log(` (order changed)`);
171
+ }
172
+ }
173
+ else if (delta.type === 'exports') {
174
+ console.log(` ${delta.old} → ${delta.new}`);
175
+ }
176
+ });
177
+ });
178
+ if (!options.quiet) {
179
+ console.log();
180
+ }
181
+ }
182
+ }
183
+ // Show token stats if requested (skip in quiet mode)
184
+ if (options.stats && !options.quiet) {
185
+ const oldTokens = calculateTokens(oldBundles);
186
+ const newTokens = calculateTokens(newBundles);
187
+ const deltaStat = newTokens.gpt4 - oldTokens.gpt4;
188
+ const deltaPercent = ((deltaStat / oldTokens.gpt4) * 100).toFixed(2);
189
+ console.log('Token Stats:');
190
+ console.log(` Old: ${formatTokenCount(oldTokens.gpt4)} (GPT-4o-mini) | ${formatTokenCount(oldTokens.claude)} (Claude)`);
191
+ console.log(` New: ${formatTokenCount(newTokens.gpt4)} (GPT-4o-mini) | ${formatTokenCount(newTokens.claude)} (Claude)`);
192
+ console.log(` Δ ${deltaStat > 0 ? '+' : ''}${formatTokenCount(deltaStat)} (${deltaPercent > '0' ? '+' : ''}${deltaPercent}%)\n`);
193
+ }
194
+ return result;
195
+ }
196
+ /**
197
+ * Load LogicStampIndex from file
198
+ */
199
+ async function loadIndex(indexPath) {
200
+ try {
201
+ const content = await readFile(indexPath, 'utf8');
202
+ const index = JSON.parse(content);
203
+ if (index.type !== 'LogicStampIndex') {
204
+ throw new Error(`Invalid index file: expected type 'LogicStampIndex', got '${index.type}'`);
205
+ }
206
+ return index;
207
+ }
208
+ catch (error) {
209
+ throw new Error(`Failed to load index from ${indexPath}: ${error.message}`);
210
+ }
211
+ }
212
+ /**
213
+ * Discover orphaned context files on disk that are not in the new index
214
+ */
215
+ async function findOrphanedFiles(oldIndex, newIndex, baseDir) {
216
+ const orphaned = [];
217
+ const newContextFiles = new Set(newIndex.folders.map(f => f.contextFile));
218
+ // Check each old folder's context file
219
+ for (const folder of oldIndex.folders) {
220
+ if (!newContextFiles.has(folder.contextFile)) {
221
+ // Check if file still exists on disk
222
+ const contextPath = join(baseDir, folder.contextFile);
223
+ try {
224
+ await readFile(contextPath, 'utf8');
225
+ orphaned.push(folder.contextFile);
226
+ }
227
+ catch {
228
+ // File doesn't exist, not orphaned (already deleted)
229
+ }
230
+ }
231
+ }
232
+ return orphaned;
233
+ }
234
+ /**
235
+ * Compare a single folder's context file
236
+ */
237
+ async function compareFolderContext(oldContextPath, newContextPath, stats, quiet) {
238
+ // Load both files
239
+ const oldContent = await readFile(oldContextPath, 'utf8');
240
+ const newContent = await readFile(newContextPath, 'utf8');
241
+ const oldBundles = JSON.parse(oldContent);
242
+ const newBundles = JSON.parse(newContent);
243
+ // Index bundles
244
+ const oldIdx = index(oldBundles);
245
+ const newIdx = index(newBundles);
246
+ // Compute diff
247
+ const result = diff(oldIdx, newIdx);
248
+ // Calculate token delta if stats requested and not in quiet mode
249
+ let tokenDelta;
250
+ if (stats && !quiet) {
251
+ const oldTokens = calculateTokens(oldBundles);
252
+ const newTokens = calculateTokens(newBundles);
253
+ tokenDelta = {
254
+ gpt4: newTokens.gpt4 - oldTokens.gpt4,
255
+ claude: newTokens.claude - oldTokens.claude,
256
+ };
257
+ }
258
+ return { result, tokenDelta };
259
+ }
260
+ /**
261
+ * Multi-file comparison - compares all context files using context_main.json indices
262
+ * This is the comprehensive comparison that handles:
263
+ * 1. context_main.json as root index
264
+ * 2. All folder context.json files
265
+ * 3. ADDED FILE detection (new folders)
266
+ * 4. ORPHANED FILE detection (deleted folders)
267
+ * 5. DRIFT detection (changed files)
268
+ * 6. PASS detection (unchanged files)
269
+ */
270
+ export async function multiFileCompare(options) {
271
+ const oldBaseDir = dirname(options.oldIndexFile);
272
+ const newBaseDir = dirname(options.newIndexFile);
273
+ // Load both index files
274
+ const oldIndex = await loadIndex(options.oldIndexFile);
275
+ const newIndex = await loadIndex(options.newIndexFile);
276
+ // Create maps for quick lookup
277
+ const oldFolderMap = new Map(oldIndex.folders.map(f => [f.contextFile, f]));
278
+ const newFolderMap = new Map(newIndex.folders.map(f => [f.contextFile, f]));
279
+ const folderResults = [];
280
+ let totalComponentsAdded = 0;
281
+ let totalComponentsRemoved = 0;
282
+ let totalComponentsChanged = 0;
283
+ // Compare folders that exist in both old and new
284
+ const allContextFiles = new Set([
285
+ ...oldIndex.folders.map(f => f.contextFile),
286
+ ...newIndex.folders.map(f => f.contextFile),
287
+ ]);
288
+ for (const contextFile of allContextFiles) {
289
+ const oldFolder = oldFolderMap.get(contextFile);
290
+ const newFolder = newFolderMap.get(contextFile);
291
+ if (oldFolder && newFolder) {
292
+ // Folder exists in both - compare context files
293
+ const oldPath = join(oldBaseDir, oldFolder.contextFile);
294
+ const newPath = join(newBaseDir, newFolder.contextFile);
295
+ try {
296
+ const { result, tokenDelta } = await compareFolderContext(oldPath, newPath, options.stats || false, options.quiet);
297
+ folderResults.push({
298
+ folderPath: newFolder.path,
299
+ contextFile: newFolder.contextFile,
300
+ status: result.status,
301
+ componentResult: result,
302
+ tokenDelta,
303
+ });
304
+ if (result.status === 'DRIFT') {
305
+ totalComponentsAdded += result.added.length;
306
+ totalComponentsRemoved += result.removed.length;
307
+ totalComponentsChanged += result.changed.length;
308
+ }
309
+ }
310
+ catch (error) {
311
+ // If comparison fails, treat as drift
312
+ console.error(`⚠️ Failed to compare ${contextFile}: ${error.message}`);
313
+ folderResults.push({
314
+ folderPath: newFolder.path,
315
+ contextFile: newFolder.contextFile,
316
+ status: 'DRIFT',
317
+ });
318
+ }
319
+ }
320
+ else if (!oldFolder && newFolder) {
321
+ // New folder - ADDED FILE
322
+ folderResults.push({
323
+ folderPath: newFolder.path,
324
+ contextFile: newFolder.contextFile,
325
+ status: 'ADDED',
326
+ });
327
+ totalComponentsAdded += newFolder.bundles;
328
+ }
329
+ else if (oldFolder && !newFolder) {
330
+ // Removed folder - ORPHANED FILE
331
+ folderResults.push({
332
+ folderPath: oldFolder.path,
333
+ contextFile: oldFolder.contextFile,
334
+ status: 'ORPHANED',
335
+ });
336
+ totalComponentsRemoved += oldFolder.bundles;
337
+ }
338
+ }
339
+ // Find orphaned files on disk
340
+ const orphanedFiles = await findOrphanedFiles(oldIndex, newIndex, oldBaseDir);
341
+ // Calculate summary
342
+ const addedFolders = folderResults.filter(f => f.status === 'ADDED').length;
343
+ const orphanedFolders = folderResults.filter(f => f.status === 'ORPHANED').length;
344
+ const driftFolders = folderResults.filter(f => f.status === 'DRIFT').length;
345
+ const passFolders = folderResults.filter(f => f.status === 'PASS').length;
346
+ const status = addedFolders > 0 || orphanedFolders > 0 || driftFolders > 0 ? 'DRIFT' : 'PASS';
347
+ // Sort folder results by path for consistent output
348
+ folderResults.sort((a, b) => a.folderPath.localeCompare(b.folderPath));
349
+ return {
350
+ status,
351
+ folders: folderResults,
352
+ summary: {
353
+ totalFolders: folderResults.length,
354
+ addedFolders,
355
+ orphanedFolders,
356
+ driftFolders,
357
+ passFolders,
358
+ totalComponentsAdded,
359
+ totalComponentsRemoved,
360
+ totalComponentsChanged,
361
+ },
362
+ orphanedFiles: orphanedFiles.length > 0 ? orphanedFiles : undefined,
363
+ };
364
+ }
365
+ /**
366
+ * Format and display multi-file comparison results
367
+ */
368
+ export function displayMultiFileCompareResult(result, stats, quiet) {
369
+ // Skip status header in quiet mode unless there's drift
370
+ if (quiet && result.status === 'PASS') {
371
+ // Minimal output in quiet mode for PASS
372
+ process.stdout.write('✓\n');
373
+ }
374
+ else if (!quiet || result.status === 'DRIFT') {
375
+ console.log(`\n${result.status === 'PASS' ? '✅' : '⚠️'} ${result.status}\n`);
376
+ }
377
+ // Skip summaries in quiet mode
378
+ if (!quiet) {
379
+ // Display folder-level summary
380
+ console.log('📁 Folder Summary:');
381
+ console.log(` Total folders: ${result.summary.totalFolders}`);
382
+ if (result.summary.addedFolders > 0) {
383
+ console.log(` ➕ Added folders: ${result.summary.addedFolders}`);
384
+ }
385
+ if (result.summary.orphanedFolders > 0) {
386
+ console.log(` 🗑️ Orphaned folders: ${result.summary.orphanedFolders}`);
387
+ }
388
+ if (result.summary.driftFolders > 0) {
389
+ console.log(` ~ Changed folders: ${result.summary.driftFolders}`);
390
+ }
391
+ if (result.summary.passFolders > 0) {
392
+ console.log(` ✓ Unchanged folders: ${result.summary.passFolders}`);
393
+ }
394
+ console.log();
395
+ // Display component-level summary
396
+ if (result.status === 'DRIFT') {
397
+ console.log('📦 Component Summary:');
398
+ if (result.summary.totalComponentsAdded > 0) {
399
+ console.log(` + Added: ${result.summary.totalComponentsAdded}`);
400
+ }
401
+ if (result.summary.totalComponentsRemoved > 0) {
402
+ console.log(` - Removed: ${result.summary.totalComponentsRemoved}`);
403
+ }
404
+ if (result.summary.totalComponentsChanged > 0) {
405
+ console.log(` ~ Changed: ${result.summary.totalComponentsChanged}`);
406
+ }
407
+ console.log();
408
+ }
409
+ // Display detailed folder results
410
+ console.log('📂 Folder Details:\n');
411
+ }
412
+ for (const folder of result.folders) {
413
+ if (folder.status === 'ADDED') {
414
+ console.log(` ➕ ADDED FILE: ${folder.contextFile}`);
415
+ console.log(` Path: ${folder.folderPath}`);
416
+ console.log();
417
+ }
418
+ else if (folder.status === 'ORPHANED') {
419
+ console.log(` 🗑️ ORPHANED FILE: ${folder.contextFile}`);
420
+ console.log(` Path: ${folder.folderPath}`);
421
+ console.log();
422
+ }
423
+ else if (folder.status === 'DRIFT') {
424
+ console.log(` ⚠️ DRIFT: ${folder.contextFile}`);
425
+ console.log(` Path: ${folder.folderPath}`);
426
+ if (folder.componentResult) {
427
+ const cr = folder.componentResult;
428
+ if (cr.added.length > 0) {
429
+ console.log(` + Added components (${cr.added.length}):`);
430
+ cr.added.forEach(id => console.log(` + ${id}`));
431
+ }
432
+ if (cr.removed.length > 0) {
433
+ console.log(` - Removed components (${cr.removed.length}):`);
434
+ cr.removed.forEach(id => console.log(` - ${id}`));
435
+ }
436
+ if (cr.changed.length > 0) {
437
+ console.log(` ~ Changed components (${cr.changed.length}):`);
438
+ cr.changed.forEach(({ id, deltas }) => {
439
+ console.log(` ~ ${id}`);
440
+ deltas.forEach(delta => {
441
+ console.log(` Δ ${delta.type}`);
442
+ if (delta.type === 'hash') {
443
+ console.log(` old: ${delta.old}`);
444
+ console.log(` new: ${delta.new}`);
445
+ }
446
+ else if (delta.type === 'imports' || delta.type === 'hooks' || delta.type === 'functions' ||
447
+ delta.type === 'components' || delta.type === 'props' || delta.type === 'emits') {
448
+ const oldSet = new Set(delta.old);
449
+ const newSet = new Set(delta.new);
450
+ const removed = delta.old.filter((item) => !newSet.has(item));
451
+ const added = delta.new.filter((item) => !oldSet.has(item));
452
+ if (removed.length > 0) {
453
+ removed.forEach((item) => console.log(` - ${item}`));
454
+ }
455
+ if (added.length > 0) {
456
+ added.forEach((item) => console.log(` + ${item}`));
457
+ }
458
+ if (removed.length === 0 && added.length === 0) {
459
+ console.log(` (order changed)`);
460
+ }
461
+ }
462
+ else if (delta.type === 'exports') {
463
+ console.log(` ${delta.old} → ${delta.new}`);
464
+ }
465
+ });
466
+ });
467
+ }
468
+ }
469
+ if (stats && !quiet && folder.tokenDelta) {
470
+ const sign = folder.tokenDelta.gpt4 > 0 ? '+' : '';
471
+ console.log(` Token Δ: ${sign}${formatTokenCount(folder.tokenDelta.gpt4)} (GPT-4) | ${sign}${formatTokenCount(folder.tokenDelta.claude)} (Claude)`);
472
+ }
473
+ console.log();
474
+ }
475
+ else if (folder.status === 'PASS') {
476
+ // Skip PASS folders in quiet mode
477
+ if (!quiet) {
478
+ console.log(` ✅ PASS: ${folder.contextFile}`);
479
+ console.log(` Path: ${folder.folderPath}`);
480
+ console.log();
481
+ }
482
+ }
483
+ }
484
+ // Display orphaned files on disk (only if not in quiet mode, or show as diff)
485
+ if (result.orphanedFiles && result.orphanedFiles.length > 0) {
486
+ if (!quiet) {
487
+ console.log('🗑️ Orphaned Files on Disk:');
488
+ console.log(' (These files exist on disk but are not in the new index)\n');
489
+ }
490
+ result.orphanedFiles.forEach(file => {
491
+ console.log(` 🗑️ ${file}`);
492
+ });
493
+ if (!quiet) {
494
+ console.log();
495
+ }
496
+ }
497
+ }
498
+ /**
499
+ * Clean up orphaned files
500
+ */
501
+ export async function cleanOrphanedFiles(orphanedFiles, baseDir, quiet) {
502
+ let deletedCount = 0;
503
+ for (const file of orphanedFiles) {
504
+ const filePath = join(baseDir, file);
505
+ try {
506
+ await unlink(filePath);
507
+ if (!quiet) {
508
+ console.log(` 🗑️ Deleted: ${file}`);
509
+ }
510
+ deletedCount++;
511
+ }
512
+ catch (error) {
513
+ // Always show errors even in quiet mode
514
+ console.error(` ⚠️ Failed to delete ${file}: ${error.message}`);
515
+ }
516
+ }
517
+ return deletedCount;
518
+ }
519
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/cli/commands/compare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAW,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA0EnG;;GAEG;AACH,SAAS,KAAK,CAAC,OAA2B;IACxC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YACrB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC7B,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;gBACjC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC7B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE;gBACrC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE;gBACvC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;gBACjD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;gBACjD,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS;oBAC1C,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;aACzD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,SAAS,IAAI,CAAC,MAA4B,EAAE,MAA4B;IACtE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA6B,EAAE,CAAC;IAE7C,wBAAwB;IACxB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC1B,MAAM,MAAM,GAA+C,EAAE,CAAC;YAE9D,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAC/E,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC;IAEZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAA2B;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;QACL,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;QAC9B,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAuB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAuB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE9D,gBAAgB;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAEjC,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,iDAAiD;IACjD,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9C,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBACxC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACzC,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;wBAChF,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAElC,qBAAqB;wBACrB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;wBACtE,mBAAmB;wBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;wBAEpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;wBACpE,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACrB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;wBAClE,CAAC;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC/C,uCAAuC;4BACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAClD,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzH,OAAO,CAAC,GAAG,CAAC,UAAU,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzH,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,MAAM,CAAC,CAAC;IACpI,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,SAAiB;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAErD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,6DAA6D,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAyB,EACzB,QAAyB,EACzB,OAAe;IAEf,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1E,uCAAuC;IACvC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,qCAAqC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,qDAAqD;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,cAAsB,EACtB,cAAsB,EACtB,KAAc,EACd,KAAe;IAEf,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAuB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAuB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE9D,gBAAgB;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAEjC,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,iEAAiE;IACjE,IAAI,UAAwD,CAAC;IAC7D,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9C,UAAU,GAAG;YACX,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI;YACrC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;SAC5C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEjD,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,aAAa,GAA0B,EAAE,CAAC;IAChD,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAE/B,iDAAiD;IACjD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;QAC9B,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAC3C,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;KAC5C,CAAC,CAAC;IAEH,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,gDAAgD;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YAExD,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAEnH,aAAa,CAAC,IAAI,CAAC;oBACjB,UAAU,EAAE,SAAS,CAAC,IAAI;oBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,eAAe,EAAE,MAAM;oBACvB,UAAU;iBACX,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC9B,oBAAoB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC5C,sBAAsB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAChD,sBAAsB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnF,aAAa,CAAC,IAAI,CAAC;oBACjB,UAAU,EAAE,SAAS,CAAC,IAAI;oBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,MAAM,EAAE,OAAO;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YACnC,0BAA0B;YAC1B,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,SAAS,CAAC,IAAI;gBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YACH,oBAAoB,IAAI,SAAS,CAAC,OAAO,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,iCAAiC;YACjC,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,SAAS,CAAC,IAAI;gBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YACH,sBAAsB,IAAI,SAAS,CAAC,OAAO,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE9E,oBAAoB;IACpB,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IAClF,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAE1E,MAAM,MAAM,GAAG,YAAY,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAE9F,oDAAoD;IACpD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvE,OAAO;QACL,MAAM;QACN,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE;YACP,YAAY,EAAE,aAAa,CAAC,MAAM;YAClC,YAAY;YACZ,eAAe;YACf,YAAY;YACZ,WAAW;YACX,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;SACvB;QACD,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;KACpE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAA8B,EAAE,KAAc,EAAE,KAAe;IAC3G,wDAAwD;IACxD,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACtC,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,kCAAkC;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,kCAAkC;QAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAEhD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;gBAClC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;oBAC9D,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;gBACD,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;oBAClE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;oBAClE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;wBACpC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;wBAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACrB,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BAEzC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gCAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gCAC7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;4BAC/C,CAAC;iCAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gCAChF,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gCAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gCAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gCAClC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gCACtE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gCAEpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCACvB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;gCAC1E,CAAC;gCACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCACrB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC;gCACxE,CAAC;gCACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCAC/C,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gCAC7C,CAAC;4BACH,CAAC;iCAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gCACpC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;4BACzD,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3J,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACpC,kCAAkC;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,aAAuB,EAAE,OAAe,EAAE,KAAe;IAChG,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Context command - Generates context bundles from React/TypeScript codebases
3
+ */
4
+ export interface ContextOptions {
5
+ entry?: string;
6
+ depth: number;
7
+ includeCode: 'none' | 'header' | 'full';
8
+ format: 'json' | 'pretty' | 'ndjson';
9
+ out: string;
10
+ hashLock: boolean;
11
+ strict: boolean;
12
+ allowMissing: boolean;
13
+ maxNodes: number;
14
+ profile: 'llm-safe' | 'llm-chat' | 'ci-strict';
15
+ predictBehavior: boolean;
16
+ dryRun: boolean;
17
+ stats: boolean;
18
+ strictMissing: boolean;
19
+ compareModes: boolean;
20
+ skipGitignore?: boolean;
21
+ quiet?: boolean;
22
+ }
23
+ export declare function contextCommand(options: ContextOptions): Promise<void>;
24
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuEH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqjB3E"}