logicstamp-context 0.7.1 → 0.8.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 (81) hide show
  1. package/README.md +10 -1
  2. package/dist/cli/commands/clean.d.ts +2 -1
  3. package/dist/cli/commands/clean.d.ts.map +1 -1
  4. package/dist/cli/commands/clean.js +30 -2
  5. package/dist/cli/commands/clean.js.map +1 -1
  6. package/dist/cli/commands/compare/cleanup.d.ts +8 -0
  7. package/dist/cli/commands/compare/cleanup.d.ts.map +1 -0
  8. package/dist/cli/commands/compare/cleanup.js +27 -0
  9. package/dist/cli/commands/compare/cleanup.js.map +1 -0
  10. package/dist/cli/commands/compare/core.d.ts +29 -0
  11. package/dist/cli/commands/compare/core.d.ts.map +1 -0
  12. package/dist/cli/commands/compare/core.js +249 -0
  13. package/dist/cli/commands/compare/core.js.map +1 -0
  14. package/dist/cli/commands/compare/display.d.ts +9 -0
  15. package/dist/cli/commands/compare/display.d.ts.map +1 -0
  16. package/dist/cli/commands/compare/display.js +251 -0
  17. package/dist/cli/commands/compare/display.js.map +1 -0
  18. package/dist/cli/commands/compare/index.d.ts +26 -0
  19. package/dist/cli/commands/compare/index.d.ts.map +1 -0
  20. package/dist/cli/commands/compare/index.js +33 -0
  21. package/dist/cli/commands/compare/index.js.map +1 -0
  22. package/dist/cli/commands/compare/multiFile.d.ts +16 -0
  23. package/dist/cli/commands/compare/multiFile.d.ts.map +1 -0
  24. package/dist/cli/commands/compare/multiFile.js +113 -0
  25. package/dist/cli/commands/compare/multiFile.js.map +1 -0
  26. package/dist/cli/commands/compare/singleFile.d.ts +20 -0
  27. package/dist/cli/commands/compare/singleFile.d.ts.map +1 -0
  28. package/dist/cli/commands/compare/singleFile.js +341 -0
  29. package/dist/cli/commands/compare/singleFile.js.map +1 -0
  30. package/dist/cli/commands/{compare.d.ts → compare/types.d.ts} +21 -28
  31. package/dist/cli/commands/compare/types.d.ts.map +1 -0
  32. package/dist/cli/commands/compare/types.js +5 -0
  33. package/dist/cli/commands/compare/types.js.map +1 -0
  34. package/dist/cli/commands/compare/utils.d.ts +20 -0
  35. package/dist/cli/commands/compare/utils.d.ts.map +1 -0
  36. package/dist/cli/commands/compare/utils.js +94 -0
  37. package/dist/cli/commands/compare/utils.js.map +1 -0
  38. package/dist/cli/commands/context/watchMode/watchMode.d.ts.map +1 -1
  39. package/dist/cli/commands/context/watchMode/watchMode.js +2 -107
  40. package/dist/cli/commands/context/watchMode/watchMode.js.map +1 -1
  41. package/dist/cli/commands/context.d.ts +1 -0
  42. package/dist/cli/commands/context.d.ts.map +1 -1
  43. package/dist/cli/commands/context.js +3 -1
  44. package/dist/cli/commands/context.js.map +1 -1
  45. package/dist/cli/handlers/compareHandler.d.ts.map +1 -1
  46. package/dist/cli/handlers/compareHandler.js +297 -9
  47. package/dist/cli/handlers/compareHandler.js.map +1 -1
  48. package/dist/cli/index.js +1 -1
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/parser/argumentParser.d.ts +2 -0
  51. package/dist/cli/parser/argumentParser.d.ts.map +1 -1
  52. package/dist/cli/parser/argumentParser.js +20 -2
  53. package/dist/cli/parser/argumentParser.js.map +1 -1
  54. package/dist/cli/parser/helpText.d.ts.map +1 -1
  55. package/dist/cli/parser/helpText.js +29 -0
  56. package/dist/cli/parser/helpText.js.map +1 -1
  57. package/dist/core/violations.d.ts +36 -0
  58. package/dist/core/violations.d.ts.map +1 -0
  59. package/dist/core/violations.js +292 -0
  60. package/dist/core/violations.js.map +1 -0
  61. package/dist/extractors/shared/propTypeNormalizer.d.ts.map +1 -1
  62. package/dist/extractors/shared/propTypeNormalizer.js +2 -1
  63. package/dist/extractors/shared/propTypeNormalizer.js.map +1 -1
  64. package/dist/index.d.ts +2 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/utils/fileLock.d.ts.map +1 -1
  69. package/dist/utils/fileLock.js +79 -5
  70. package/dist/utils/fileLock.js.map +1 -1
  71. package/dist/utils/git.d.ts +135 -0
  72. package/dist/utils/git.d.ts.map +1 -0
  73. package/dist/utils/git.js +429 -0
  74. package/dist/utils/git.js.map +1 -0
  75. package/dist/utils/hash.d.ts.map +1 -1
  76. package/dist/utils/hash.js +20 -4
  77. package/dist/utils/hash.js.map +1 -1
  78. package/package.json +2 -1
  79. package/dist/cli/commands/compare.d.ts.map +0 -1
  80. package/dist/cli/commands/compare.js +0 -648
  81. package/dist/cli/commands/compare.js.map +0 -1
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Single file comparison logic
3
+ */
4
+ import { readFile } from 'node:fs/promises';
5
+ import { debugError } from '../../../utils/debug.js';
6
+ import { formatTokenCount } from '../../../utils/tokens.js';
7
+ import { index, diff } from './core.js';
8
+ import { calculateTokens } from './utils.js';
9
+ /**
10
+ * Compare a single folder's context file
11
+ */
12
+ export async function compareFolderContext(oldContextPath, newContextPath, stats, quiet, gitBaseline = false) {
13
+ // Load both files
14
+ let oldContent;
15
+ let newContent;
16
+ try {
17
+ oldContent = await readFile(oldContextPath, 'utf8');
18
+ }
19
+ catch (error) {
20
+ const err = error;
21
+ debugError('compare', 'compareFolderContext', {
22
+ oldContextPath,
23
+ message: err.message,
24
+ code: err.code,
25
+ });
26
+ throw new Error(`Failed to read old context file "${oldContextPath}": ${err.code === 'ENOENT' ? 'File not found' : err.message}`);
27
+ }
28
+ try {
29
+ newContent = await readFile(newContextPath, 'utf8');
30
+ }
31
+ catch (error) {
32
+ const err = error;
33
+ debugError('compare', 'compareFolderContext', {
34
+ newContextPath,
35
+ message: err.message,
36
+ code: err.code,
37
+ });
38
+ throw new Error(`Failed to read new context file "${newContextPath}": ${err.code === 'ENOENT' ? 'File not found' : err.message}`);
39
+ }
40
+ let oldBundles;
41
+ let newBundles;
42
+ try {
43
+ oldBundles = JSON.parse(oldContent);
44
+ newBundles = JSON.parse(newContent);
45
+ }
46
+ catch (error) {
47
+ const err = error;
48
+ debugError('compare', 'compareFolderContext', {
49
+ oldContextPath,
50
+ newContextPath,
51
+ message: err.message,
52
+ });
53
+ throw new Error(`Failed to parse context files for folder: ${err.message}`);
54
+ }
55
+ // Index bundles (with normalization for git baseline mode)
56
+ const normalize = gitBaseline;
57
+ const ignoreHashOnly = gitBaseline; // Ignore hash-only changes in git baseline mode
58
+ const oldIdx = index(oldBundles, normalize);
59
+ const newIdx = index(newBundles, normalize);
60
+ // Compute diff
61
+ const result = diff(oldIdx, newIdx, normalize, ignoreHashOnly);
62
+ // Calculate token delta if stats requested and not in quiet mode
63
+ let tokenDelta;
64
+ if (stats && !quiet) {
65
+ const oldTokens = await calculateTokens(oldBundles);
66
+ const newTokens = await calculateTokens(newBundles);
67
+ tokenDelta = {
68
+ gpt4: newTokens.gpt4 - oldTokens.gpt4,
69
+ claude: newTokens.claude - oldTokens.claude,
70
+ };
71
+ }
72
+ return { result, tokenDelta };
73
+ }
74
+ /**
75
+ * Main compare command
76
+ * Returns the comparison result instead of exiting, allowing caller to handle approval logic
77
+ */
78
+ export async function compareCommand(options) {
79
+ // Load both files
80
+ let oldContent;
81
+ let newContent;
82
+ try {
83
+ oldContent = await readFile(options.oldFile, 'utf8');
84
+ }
85
+ catch (error) {
86
+ const err = error;
87
+ debugError('compare', 'compareCommand', {
88
+ file: options.oldFile,
89
+ message: err.message,
90
+ code: err.code,
91
+ });
92
+ throw new Error(`Failed to read old file "${options.oldFile}": ${err.code === 'ENOENT' ? 'File not found' : err.message}`);
93
+ }
94
+ try {
95
+ newContent = await readFile(options.newFile, 'utf8');
96
+ }
97
+ catch (error) {
98
+ const err = error;
99
+ debugError('compare', 'compareCommand', {
100
+ file: options.newFile,
101
+ message: err.message,
102
+ code: err.code,
103
+ });
104
+ throw new Error(`Failed to read new file "${options.newFile}": ${err.code === 'ENOENT' ? 'File not found' : err.message}`);
105
+ }
106
+ let oldBundles;
107
+ let newBundles;
108
+ try {
109
+ oldBundles = JSON.parse(oldContent);
110
+ newBundles = JSON.parse(newContent);
111
+ }
112
+ catch (error) {
113
+ const err = error;
114
+ debugError('compare', 'compareCommand', {
115
+ oldFile: options.oldFile,
116
+ newFile: options.newFile,
117
+ message: err.message,
118
+ });
119
+ throw new Error(`Failed to parse context files: ${err.message}`);
120
+ }
121
+ // Index bundles (with normalization for git baseline mode)
122
+ const normalize = options.gitBaseline ?? false;
123
+ const ignoreHashOnly = options.gitBaseline ?? false; // Ignore hash-only changes in git baseline mode
124
+ const oldIdx = index(oldBundles, normalize);
125
+ const newIdx = index(newBundles, normalize);
126
+ // Compute diff
127
+ const result = diff(oldIdx, newIdx, normalize, ignoreHashOnly);
128
+ // Output result (skip PASS status in quiet mode)
129
+ if (options.quiet && result.status === 'PASS') {
130
+ // Minimal output in quiet mode for PASS
131
+ process.stdout.write('✓\n');
132
+ }
133
+ else if (!options.quiet || result.status === 'DRIFT') {
134
+ console.log(`\n${result.status === 'PASS' ? '✅' : '⚠️'} ${result.status}\n`);
135
+ }
136
+ if (result.status === 'DRIFT') {
137
+ if (result.added.length > 0) {
138
+ if (!options.quiet) {
139
+ console.log(`Added components: ${result.added.length}`);
140
+ }
141
+ result.added.forEach(id => console.log(` + ${id}`));
142
+ if (!options.quiet) {
143
+ console.log();
144
+ }
145
+ }
146
+ if (result.removed.length > 0) {
147
+ if (!options.quiet) {
148
+ console.log(`Removed components: ${result.removed.length}`);
149
+ }
150
+ result.removed.forEach(id => console.log(` - ${id}`));
151
+ if (!options.quiet) {
152
+ console.log();
153
+ }
154
+ }
155
+ if (result.changed.length > 0) {
156
+ if (!options.quiet) {
157
+ console.log(`Changed components: ${result.changed.length}`);
158
+ }
159
+ result.changed.forEach(({ id, deltas }) => {
160
+ console.log(` ~ ${id}`);
161
+ deltas.forEach(delta => {
162
+ console.log(` Δ ${delta.type}`);
163
+ if (delta.type === 'hash') {
164
+ console.log(` old: ${delta.old}`);
165
+ console.log(` new: ${delta.new}`);
166
+ }
167
+ else if (delta.type === 'imports' || delta.type === 'hooks' || delta.type === 'functions' ||
168
+ delta.type === 'components' || delta.type === 'variables') {
169
+ const oldSet = new Set(delta.old);
170
+ const newSet = new Set(delta.new);
171
+ // Find removed items
172
+ const removed = delta.old.filter((item) => !newSet.has(item));
173
+ // Find added items
174
+ const added = delta.new.filter((item) => !oldSet.has(item));
175
+ if (removed.length > 0) {
176
+ removed.forEach((item) => console.log(` - ${item}`));
177
+ }
178
+ if (added.length > 0) {
179
+ added.forEach((item) => console.log(` + ${item}`));
180
+ }
181
+ if (removed.length === 0 && added.length === 0) {
182
+ // Order changed but items are the same
183
+ console.log(` (order changed)`);
184
+ }
185
+ }
186
+ else if (delta.type === 'props' || delta.type === 'emits') {
187
+ // Props and emits should be arrays of strings (prop/emit names)
188
+ // Handle both arrays and objects (defensive coding for edge cases)
189
+ // If objects are passed, extract keys; if arrays, use directly
190
+ let oldArray;
191
+ let newArray;
192
+ if (Array.isArray(delta.old)) {
193
+ oldArray = delta.old;
194
+ }
195
+ else if (delta.old && typeof delta.old === 'object') {
196
+ // If it's an object, extract the keys
197
+ oldArray = Object.keys(delta.old);
198
+ }
199
+ else {
200
+ // Fallback: treat as empty array
201
+ oldArray = [];
202
+ }
203
+ if (Array.isArray(delta.new)) {
204
+ newArray = delta.new;
205
+ }
206
+ else if (delta.new && typeof delta.new === 'object') {
207
+ // If it's an object, extract the keys
208
+ newArray = Object.keys(delta.new);
209
+ }
210
+ else {
211
+ // Fallback: treat as empty array
212
+ newArray = [];
213
+ }
214
+ const oldSet = new Set(oldArray);
215
+ const newSet = new Set(newArray);
216
+ // Find removed items
217
+ const removed = oldArray.filter((item) => !newSet.has(item));
218
+ // Find added items
219
+ const added = newArray.filter((item) => !oldSet.has(item));
220
+ if (removed.length > 0) {
221
+ removed.forEach((item) => console.log(` - ${item}`));
222
+ }
223
+ if (added.length > 0) {
224
+ added.forEach((item) => console.log(` + ${item}`));
225
+ }
226
+ if (removed.length === 0 && added.length === 0 && oldArray.length > 0) {
227
+ // Only show "order changed" if arrays are non-empty and identical
228
+ console.log(` (order changed)`);
229
+ }
230
+ }
231
+ else if (delta.type === 'state') {
232
+ const oldState = delta.old;
233
+ const newState = delta.new;
234
+ const oldKeys = Object.keys(oldState);
235
+ const newKeys = Object.keys(newState);
236
+ const oldSet = new Set(oldKeys);
237
+ const newSet = new Set(newKeys);
238
+ // Find removed state variables
239
+ const removed = oldKeys.filter((key) => !newSet.has(key));
240
+ // Find added state variables
241
+ const added = newKeys.filter((key) => !oldSet.has(key));
242
+ // Find changed state variables (type changed)
243
+ const changed = oldKeys.filter((key) => {
244
+ if (newSet.has(key)) {
245
+ return JSON.stringify(oldState[key]) !== JSON.stringify(newState[key]);
246
+ }
247
+ return false;
248
+ });
249
+ if (removed.length > 0) {
250
+ removed.forEach((key) => console.log(` - ${key}`));
251
+ }
252
+ if (added.length > 0) {
253
+ added.forEach((key) => console.log(` + ${key}`));
254
+ }
255
+ if (changed.length > 0) {
256
+ changed.forEach((key) => {
257
+ console.log(` ~ ${key}: ${JSON.stringify(oldState[key])} → ${JSON.stringify(newState[key])}`);
258
+ });
259
+ }
260
+ }
261
+ else if (delta.type === 'exports') {
262
+ console.log(` ${delta.old} → ${delta.new}`);
263
+ }
264
+ else if (delta.type === 'apiSignature') {
265
+ const oldSig = delta.old;
266
+ const newSig = delta.new;
267
+ // Handle null/undefined cases
268
+ if (!oldSig && newSig) {
269
+ console.log(` + Added API signature`);
270
+ if (newSig.parameters)
271
+ console.log(` parameters: ${JSON.stringify(newSig.parameters)}`);
272
+ if (newSig.returnType)
273
+ console.log(` returnType: ${newSig.returnType}`);
274
+ if (newSig.requestType)
275
+ console.log(` requestType: ${newSig.requestType}`);
276
+ if (newSig.responseType)
277
+ console.log(` responseType: ${newSig.responseType}`);
278
+ }
279
+ else if (oldSig && !newSig) {
280
+ console.log(` - Removed API signature`);
281
+ }
282
+ else if (oldSig && newSig) {
283
+ // Compare individual fields
284
+ const oldParams = oldSig.parameters ?? {};
285
+ const newParams = newSig.parameters ?? {};
286
+ const oldKeys = Object.keys(oldParams);
287
+ const newKeys = Object.keys(newParams);
288
+ const paramRemoved = oldKeys.filter(k => !(k in newParams));
289
+ const paramAdded = newKeys.filter(k => !(k in oldParams));
290
+ const paramChanged = oldKeys.filter(k => k in newParams && oldParams[k] !== newParams[k]);
291
+ if (paramRemoved.length > 0) {
292
+ paramRemoved.forEach(k => console.log(` - parameters.${k}: ${oldParams[k]}`));
293
+ }
294
+ if (paramAdded.length > 0) {
295
+ paramAdded.forEach(k => console.log(` + parameters.${k}: ${newParams[k]}`));
296
+ }
297
+ if (paramChanged.length > 0) {
298
+ paramChanged.forEach(k => console.log(` ~ parameters.${k}: ${oldParams[k]} → ${newParams[k]}`));
299
+ }
300
+ if (oldSig.returnType !== newSig.returnType) {
301
+ console.log(` ~ returnType: ${oldSig.returnType ?? '(none)'} → ${newSig.returnType ?? '(none)'}`);
302
+ }
303
+ if (oldSig.requestType !== newSig.requestType) {
304
+ console.log(` ~ requestType: ${oldSig.requestType ?? '(none)'} → ${newSig.requestType ?? '(none)'}`);
305
+ }
306
+ if (oldSig.responseType !== newSig.responseType) {
307
+ console.log(` ~ responseType: ${oldSig.responseType ?? '(none)'} → ${newSig.responseType ?? '(none)'}`);
308
+ }
309
+ }
310
+ }
311
+ });
312
+ });
313
+ if (!options.quiet) {
314
+ console.log();
315
+ }
316
+ }
317
+ }
318
+ // Show token stats if requested (skip in quiet mode)
319
+ if (options.stats && !options.quiet) {
320
+ const oldTokens = await calculateTokens(oldBundles);
321
+ const newTokens = await calculateTokens(newBundles);
322
+ const deltaStat = newTokens.gpt4 - oldTokens.gpt4;
323
+ let deltaPercentStr = '0.00';
324
+ let deltaPercentNum = 0;
325
+ if (oldTokens.gpt4 > 0) {
326
+ deltaPercentNum = (deltaStat / oldTokens.gpt4) * 100;
327
+ deltaPercentStr = deltaPercentNum.toFixed(2);
328
+ }
329
+ const sign = deltaStat > 0 ? '+' : '';
330
+ const percentSign = deltaPercentNum > 0 ? '+' : deltaPercentNum < 0 ? '' : '';
331
+ console.log('Token Stats:');
332
+ console.log(` ⚠️ Current mode = tokenizer-based.`);
333
+ console.log(` Other modes / raw source = heuristic.`);
334
+ console.log(` For precise per-mode breakdown, use "stamp context --compare-modes".`);
335
+ console.log(` Old: ${formatTokenCount(oldTokens.gpt4)} (GPT-4o-mini) | ${formatTokenCount(oldTokens.claude)} (Claude)`);
336
+ console.log(` New: ${formatTokenCount(newTokens.gpt4)} (GPT-4o-mini) | ${formatTokenCount(newTokens.claude)} (Claude)`);
337
+ console.log(` Δ ${sign}${formatTokenCount(deltaStat)} (${percentSign}${deltaPercentStr}%)\n`);
338
+ }
339
+ return result;
340
+ }
341
+ //# sourceMappingURL=singleFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleFile.js","sourceRoot":"","sources":["../../../../src/cli/commands/compare/singleFile.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,20 @@
1
1
  /**
2
- * Compare command - Diffs two context.json files
3
- * Detects added/removed components and changed signatures
2
+ * Compare command types and interfaces
4
3
  */
4
+ import type { ApiSignature } from '../../../types/UIFContract.js';
5
+ export interface LiteSig {
6
+ semanticHash: string;
7
+ imports: string[];
8
+ hooks: string[];
9
+ exportKind: 'default' | 'named' | 'none';
10
+ functions: string[];
11
+ components: string[];
12
+ props: Record<string, any>;
13
+ emits: Record<string, any>;
14
+ variables: string[];
15
+ state: Record<string, any>;
16
+ apiSignature?: ApiSignature;
17
+ }
5
18
  export interface CompareResult {
6
19
  status: 'PASS' | 'DRIFT';
7
20
  added: string[];
@@ -9,7 +22,7 @@ export interface CompareResult {
9
22
  changed: Array<{
10
23
  id: string;
11
24
  deltas: Array<{
12
- type: 'hash' | 'imports' | 'hooks' | 'exports' | 'functions' | 'components' | 'props' | 'emits';
25
+ type: 'hash' | 'imports' | 'hooks' | 'exports' | 'functions' | 'components' | 'props' | 'emits' | 'variables' | 'state' | 'apiSignature';
13
26
  old: any;
14
27
  new: any;
15
28
  }>;
@@ -52,6 +65,8 @@ export interface CompareOptions {
52
65
  stats?: boolean;
53
66
  approve?: boolean;
54
67
  quiet?: boolean;
68
+ gitBaseline?: boolean;
69
+ strict?: boolean;
55
70
  }
56
71
  export interface MultiFileCompareOptions {
57
72
  oldIndexFile: string;
@@ -60,29 +75,7 @@ export interface MultiFileCompareOptions {
60
75
  approve?: boolean;
61
76
  autoCleanOrphaned?: boolean;
62
77
  quiet?: boolean;
78
+ gitBaseline?: boolean;
79
+ strict?: boolean;
63
80
  }
64
- /**
65
- * Main compare command
66
- * Returns the comparison result instead of exiting, allowing caller to handle approval logic
67
- */
68
- export declare function compareCommand(options: CompareOptions): Promise<CompareResult>;
69
- /**
70
- * Multi-file comparison - compares all context files using context_main.json indices
71
- * This is the comprehensive comparison that handles:
72
- * 1. context_main.json as root index
73
- * 2. All folder context.json files
74
- * 3. ADDED FILE detection (new folders)
75
- * 4. ORPHANED FILE detection (deleted folders)
76
- * 5. DRIFT detection (changed files)
77
- * 6. PASS detection (unchanged files)
78
- */
79
- export declare function multiFileCompare(options: MultiFileCompareOptions): Promise<MultiFileCompareResult>;
80
- /**
81
- * Format and display multi-file comparison results
82
- */
83
- export declare function displayMultiFileCompareResult(result: MultiFileCompareResult, stats: boolean, quiet?: boolean): void;
84
- /**
85
- * Clean up orphaned files
86
- */
87
- export declare function cleanOrphanedFiles(orphanedFiles: string[], baseDir: string, quiet?: boolean): Promise<number>;
88
- //# sourceMappingURL=compare.d.ts.map
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/compare/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compare command types and interfaces
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/compare/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Utility functions for compare command
3
+ */
4
+ import type { LogicStampBundle, LogicStampIndex } from '../../../core/pack.js';
5
+ /**
6
+ * Calculate token count for bundles
7
+ */
8
+ export declare function calculateTokens(bundles: LogicStampBundle[]): Promise<{
9
+ gpt4: number;
10
+ claude: number;
11
+ }>;
12
+ /**
13
+ * Load LogicStampIndex from file
14
+ */
15
+ export declare function loadIndex(indexPath: string): Promise<LogicStampIndex>;
16
+ /**
17
+ * Discover orphaned context files on disk that are not in the new index
18
+ */
19
+ export declare function findOrphanedFiles(oldIndex: LogicStampIndex, newIndex: LogicStampIndex, baseDir: string): Promise<string[]>;
20
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/compare/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI/E;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAM5G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4C3E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BnB"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Utility functions for compare command
3
+ */
4
+ import { readFile } from 'node:fs/promises';
5
+ import { join } from 'node:path';
6
+ import { estimateGPT4Tokens, estimateClaudeTokens } from '../../../utils/tokens.js';
7
+ import { debugError } from '../../../utils/debug.js';
8
+ /**
9
+ * Calculate token count for bundles
10
+ */
11
+ export async function calculateTokens(bundles) {
12
+ const text = JSON.stringify(bundles);
13
+ return {
14
+ gpt4: await estimateGPT4Tokens(text),
15
+ claude: await estimateClaudeTokens(text),
16
+ };
17
+ }
18
+ /**
19
+ * Load LogicStampIndex from file
20
+ */
21
+ export async function loadIndex(indexPath) {
22
+ let content;
23
+ try {
24
+ content = await readFile(indexPath, 'utf8');
25
+ }
26
+ catch (error) {
27
+ const err = error;
28
+ debugError('compare', 'loadIndex', {
29
+ indexPath,
30
+ message: err.message,
31
+ code: err.code,
32
+ });
33
+ throw new Error(`Failed to load index from ${indexPath}: ${err.code === 'ENOENT' ? 'File not found' : err.message}`);
34
+ }
35
+ try {
36
+ const index = JSON.parse(content);
37
+ if (index.type !== 'LogicStampIndex') {
38
+ throw new Error(`Invalid index file: expected type 'LogicStampIndex', got '${index.type}'`);
39
+ }
40
+ // Backward compatibility: warn about old schema version
41
+ if (index.schemaVersion === '0.1') {
42
+ console.warn(`⚠️ Warning: context_main.json uses schema version 0.1 (legacy format).`);
43
+ console.warn(``);
44
+ console.warn(` Consider recompiling with "stamp context" to upgrade to version 0.2 (relative paths).`);
45
+ console.warn(``);
46
+ console.warn(` Optional cleanup: "stamp context clean --all --yes".`);
47
+ console.warn(``);
48
+ console.warn(` See docs/MIGRATION_0.3.2.md for details.\n`);
49
+ }
50
+ else if (index.schemaVersion !== '0.2') {
51
+ console.warn(`⚠️ Warning: Unknown schema version "${index.schemaVersion}". Expected '0.1' or '0.2'.`);
52
+ }
53
+ return index;
54
+ }
55
+ catch (error) {
56
+ const err = error;
57
+ debugError('compare', 'loadIndex', {
58
+ indexPath,
59
+ message: err.message,
60
+ });
61
+ throw new Error(`Failed to load index from ${indexPath}: ${err.message}`);
62
+ }
63
+ }
64
+ /**
65
+ * Discover orphaned context files on disk that are not in the new index
66
+ */
67
+ export async function findOrphanedFiles(oldIndex, newIndex, baseDir) {
68
+ const orphaned = [];
69
+ const newContextFiles = new Set(newIndex.folders.map(f => f.contextFile));
70
+ // Check each old folder's context file
71
+ for (const folder of oldIndex.folders) {
72
+ if (!newContextFiles.has(folder.contextFile)) {
73
+ // Check if file still exists on disk
74
+ const contextPath = join(baseDir, folder.contextFile);
75
+ try {
76
+ await readFile(contextPath, 'utf8');
77
+ orphaned.push(folder.contextFile);
78
+ }
79
+ catch (error) {
80
+ // File doesn't exist, not orphaned (already deleted)
81
+ const err = error;
82
+ if (err.code !== 'ENOENT') {
83
+ debugError('compare', 'findOrphanedFiles', {
84
+ contextPath,
85
+ message: err.message,
86
+ code: err.code,
87
+ });
88
+ }
89
+ }
90
+ }
91
+ }
92
+ return orphaned;
93
+ }
94
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/commands/compare/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"watchMode.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/context/watchMode/watchMode.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AASpB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAyIvE;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAE,UAAU,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+lBxI"}
1
+ {"version":3,"file":"watchMode.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/context/watchMode/watchMode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AASpB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkBvE;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAE,UAAU,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+lBxI"}