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.
- package/LICENSE +21 -0
- package/LLM_CONTEXT.md +260 -0
- package/README.md +949 -0
- package/dist/cli/commands/clean.d.ts +15 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +142 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/compare.d.ts +88 -0
- package/dist/cli/commands/compare.d.ts.map +1 -0
- package/dist/cli/commands/compare.js +519 -0
- package/dist/cli/commands/compare.js.map +1 -0
- package/dist/cli/commands/context.d.ts +24 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +576 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +71 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +52 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +368 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +223 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/stamp.d.ts +7 -0
- package/dist/cli/stamp.d.ts.map +1 -0
- package/dist/cli/stamp.js +961 -0
- package/dist/cli/stamp.js.map +1 -0
- package/dist/cli/validate-index.d.ts +7 -0
- package/dist/cli/validate-index.d.ts.map +1 -0
- package/dist/cli/validate-index.js +55 -0
- package/dist/cli/validate-index.js.map +1 -0
- package/dist/core/astParser.d.ts +47 -0
- package/dist/core/astParser.d.ts.map +1 -0
- package/dist/core/astParser.js +417 -0
- package/dist/core/astParser.js.map +1 -0
- package/dist/core/contractBuilder.d.ts +48 -0
- package/dist/core/contractBuilder.d.ts.map +1 -0
- package/dist/core/contractBuilder.js +120 -0
- package/dist/core/contractBuilder.js.map +1 -0
- package/dist/core/manifest.d.ts +75 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +173 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/pack.d.ts +190 -0
- package/dist/core/pack.d.ts.map +1 -0
- package/dist/core/pack.js +438 -0
- package/dist/core/pack.js.map +1 -0
- package/dist/core/signature.d.ts +47 -0
- package/dist/core/signature.d.ts.map +1 -0
- package/dist/core/signature.js +208 -0
- package/dist/core/signature.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/types/UIFContract.d.ts +112 -0
- package/dist/types/UIFContract.d.ts.map +1 -0
- package/dist/types/UIFContract.js +36 -0
- package/dist/types/UIFContract.js.map +1 -0
- package/dist/utils/config.d.ts +34 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +62 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fsx.d.ts +85 -0
- package/dist/utils/fsx.d.ts.map +1 -0
- package/dist/utils/fsx.js +181 -0
- package/dist/utils/fsx.js.map +1 -0
- package/dist/utils/gitignore.d.ts +62 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +183 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/hash.d.ts +73 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +159 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/llmContext.d.ts +34 -0
- package/dist/utils/llmContext.d.ts.map +1 -0
- package/dist/utils/llmContext.js +136 -0
- package/dist/utils/llmContext.js.map +1 -0
- package/dist/utils/tokens.d.ts +23 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +29 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +69 -0
- 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":"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"}
|
|
@@ -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"}
|