logicstamp-context 0.7.0 → 0.7.2
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/LLM_CONTEXT.md +1 -1
- package/README.md +34 -7
- package/dist/cli/commands/compare/cleanup.d.ts +8 -0
- package/dist/cli/commands/compare/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/compare/cleanup.js +27 -0
- package/dist/cli/commands/compare/cleanup.js.map +1 -0
- package/dist/cli/commands/compare/core.d.ts +29 -0
- package/dist/cli/commands/compare/core.d.ts.map +1 -0
- package/dist/cli/commands/compare/core.js +293 -0
- package/dist/cli/commands/compare/core.js.map +1 -0
- package/dist/cli/commands/compare/display.d.ts +9 -0
- package/dist/cli/commands/compare/display.d.ts.map +1 -0
- package/dist/cli/commands/compare/display.js +241 -0
- package/dist/cli/commands/compare/display.js.map +1 -0
- package/dist/cli/commands/compare/index.d.ts +26 -0
- package/dist/cli/commands/compare/index.d.ts.map +1 -0
- package/dist/cli/commands/compare/index.js +33 -0
- package/dist/cli/commands/compare/index.js.map +1 -0
- package/dist/cli/commands/compare/multiFile.d.ts +16 -0
- package/dist/cli/commands/compare/multiFile.d.ts.map +1 -0
- package/dist/cli/commands/compare/multiFile.js +113 -0
- package/dist/cli/commands/compare/multiFile.js.map +1 -0
- package/dist/cli/commands/compare/singleFile.d.ts +20 -0
- package/dist/cli/commands/compare/singleFile.d.ts.map +1 -0
- package/dist/cli/commands/compare/singleFile.js +341 -0
- package/dist/cli/commands/compare/singleFile.js.map +1 -0
- package/dist/cli/commands/{compare.d.ts → compare/types.d.ts} +19 -28
- package/dist/cli/commands/compare/types.d.ts.map +1 -0
- package/dist/cli/commands/compare/types.js +5 -0
- package/dist/cli/commands/compare/types.js.map +1 -0
- package/dist/cli/commands/compare/utils.d.ts +20 -0
- package/dist/cli/commands/compare/utils.d.ts.map +1 -0
- package/dist/cli/commands/compare/utils.js +94 -0
- package/dist/cli/commands/compare/utils.js.map +1 -0
- package/dist/cli/commands/context/fileWriter.d.ts +11 -0
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -1
- package/dist/cli/commands/context/fileWriter.js +52 -4
- package/dist/cli/commands/context/fileWriter.js.map +1 -1
- package/dist/cli/commands/context/index.d.ts +1 -3
- package/dist/cli/commands/context/index.d.ts.map +1 -1
- package/dist/cli/commands/context/index.js +1 -3
- package/dist/cli/commands/context/index.js.map +1 -1
- package/dist/cli/commands/context/{incrementalWatch.d.ts → watchMode/incrementalWatch.d.ts} +4 -4
- package/dist/cli/commands/context/watchMode/incrementalWatch.d.ts.map +1 -0
- package/dist/cli/commands/context/{incrementalWatch.js → watchMode/incrementalWatch.js} +8 -8
- package/dist/cli/commands/context/watchMode/incrementalWatch.js.map +1 -0
- package/dist/cli/commands/context/watchMode/index.d.ts +12 -0
- package/dist/cli/commands/context/watchMode/index.d.ts.map +1 -0
- package/dist/cli/commands/context/watchMode/index.js +12 -0
- package/dist/cli/commands/context/watchMode/index.js.map +1 -0
- package/dist/cli/commands/context/{watchDiff.d.ts → watchMode/watchDiff.d.ts} +2 -2
- package/dist/cli/commands/context/watchMode/watchDiff.d.ts.map +1 -0
- package/dist/cli/commands/context/{watchDiff.js → watchMode/watchDiff.js} +1 -1
- package/dist/cli/commands/context/watchMode/watchDiff.js.map +1 -0
- package/dist/cli/commands/context/{watchMode.d.ts → watchMode/watchMode.d.ts} +1 -1
- package/dist/cli/commands/context/watchMode/watchMode.d.ts.map +1 -0
- package/dist/cli/commands/context/{watchMode.js → watchMode/watchMode.js} +120 -25
- package/dist/cli/commands/context/watchMode/watchMode.js.map +1 -0
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +9 -6
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/handlers/compareHandler.d.ts.map +1 -1
- package/dist/cli/handlers/compareHandler.js +221 -3
- package/dist/cli/handlers/compareHandler.js.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser/argumentParser.d.ts +1 -0
- package/dist/cli/parser/argumentParser.d.ts.map +1 -1
- package/dist/cli/parser/argumentParser.js +24 -2
- package/dist/cli/parser/argumentParser.js.map +1 -1
- package/dist/cli/parser/helpText.d.ts.map +1 -1
- package/dist/cli/parser/helpText.js +32 -8
- package/dist/cli/parser/helpText.js.map +1 -1
- package/dist/extractors/shared/propTypeNormalizer.d.ts.map +1 -1
- package/dist/extractors/shared/propTypeNormalizer.js +2 -1
- package/dist/extractors/shared/propTypeNormalizer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +6 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +14 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/git.d.ts +135 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +429 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js +20 -4
- package/dist/utils/hash.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/compare.d.ts.map +0 -1
- package/dist/cli/commands/compare.js +0 -648
- package/dist/cli/commands/compare.js.map +0 -1
- package/dist/cli/commands/context/incrementalWatch.d.ts.map +0 -1
- package/dist/cli/commands/context/incrementalWatch.js.map +0 -1
- package/dist/cli/commands/context/watchDiff.d.ts.map +0 -1
- package/dist/cli/commands/context/watchDiff.js.map +0 -1
- package/dist/cli/commands/context/watchMode.d.ts.map +0 -1
- package/dist/cli/commands/context/watchMode.js.map +0 -1
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git utilities for baseline comparison
|
|
3
|
+
* Handles worktree creation, ref validation, and cleanup
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { rm, mkdir } from 'node:fs/promises';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { debugLog, debugError } from './debug.js';
|
|
10
|
+
/**
|
|
11
|
+
* Default timeout for regular git operations (30 seconds)
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_GIT_TIMEOUT = 30000;
|
|
14
|
+
/**
|
|
15
|
+
* Timeout for git ref resolution operations (15 seconds)
|
|
16
|
+
* git rev-parse is lightweight and should complete quickly
|
|
17
|
+
*/
|
|
18
|
+
export const GIT_REF_RESOLVE_TIMEOUT = 15000;
|
|
19
|
+
/**
|
|
20
|
+
* Timeout for git ref description operations (15 seconds)
|
|
21
|
+
* git rev-parse --abbrev-ref and --short are lightweight and should complete quickly
|
|
22
|
+
*/
|
|
23
|
+
export const GIT_REF_DESCRIBE_TIMEOUT = 15000;
|
|
24
|
+
/**
|
|
25
|
+
* Timeout for git worktree creation (60 seconds)
|
|
26
|
+
* Worktree creation can be slow on large repos due to file checkout operations
|
|
27
|
+
*/
|
|
28
|
+
export const GIT_WORKTREE_TIMEOUT = 60000;
|
|
29
|
+
/**
|
|
30
|
+
* Execute a git command and return stdout
|
|
31
|
+
* Uses spawn instead of exec for better security (no shell interpretation)
|
|
32
|
+
* @throws Error if git command fails
|
|
33
|
+
*/
|
|
34
|
+
async function execGit(args, options = {}) {
|
|
35
|
+
const cwd = options.cwd ?? process.cwd();
|
|
36
|
+
const timeout = options.timeout ?? DEFAULT_GIT_TIMEOUT;
|
|
37
|
+
const command = `git ${args.join(' ')}`;
|
|
38
|
+
debugLog('git', `Executing: ${command}`, { cwd });
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
const child = spawn('git', args, {
|
|
41
|
+
cwd,
|
|
42
|
+
timeout,
|
|
43
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
44
|
+
});
|
|
45
|
+
let stdout = '';
|
|
46
|
+
let stderr = '';
|
|
47
|
+
// TypeScript needs explicit type assertion for stdio pipes
|
|
48
|
+
if (child.stdout) {
|
|
49
|
+
child.stdout.on('data', (data) => {
|
|
50
|
+
stdout += data.toString();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (child.stderr) {
|
|
54
|
+
child.stderr.on('data', (data) => {
|
|
55
|
+
stderr += data.toString();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
child.on('error', (error) => {
|
|
59
|
+
debugError('git', 'execGit spawn error', {
|
|
60
|
+
command,
|
|
61
|
+
cwd,
|
|
62
|
+
message: error.message,
|
|
63
|
+
});
|
|
64
|
+
reject(new Error(`Git command failed: ${error.message}`));
|
|
65
|
+
});
|
|
66
|
+
child.on('close', (code) => {
|
|
67
|
+
if (code === 0) {
|
|
68
|
+
if (stderr && !stderr.includes('Preparing worktree')) {
|
|
69
|
+
// Some git commands output to stderr even on success
|
|
70
|
+
debugLog('git', `stderr: ${stderr.trim()}`);
|
|
71
|
+
}
|
|
72
|
+
resolve(stdout.trim());
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
debugError('git', 'execGit', {
|
|
76
|
+
command,
|
|
77
|
+
cwd,
|
|
78
|
+
code,
|
|
79
|
+
stderr: stderr.trim(),
|
|
80
|
+
});
|
|
81
|
+
const errorMessage = stderr.trim() || `Command failed with exit code ${code}`;
|
|
82
|
+
reject(new Error(`Git command failed: ${errorMessage}`));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if a directory is inside a git repository
|
|
89
|
+
*/
|
|
90
|
+
export async function isGitRepo(options = {}) {
|
|
91
|
+
try {
|
|
92
|
+
await execGit(['rev-parse', '--git-dir'], options);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the root directory of the git repository
|
|
101
|
+
*/
|
|
102
|
+
export async function getGitRoot(options = {}) {
|
|
103
|
+
const root = await execGit(['rev-parse', '--show-toplevel'], options);
|
|
104
|
+
return root;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if git worktrees are supported (git >= 2.5)
|
|
108
|
+
*/
|
|
109
|
+
export async function supportsWorktrees(options = {}) {
|
|
110
|
+
try {
|
|
111
|
+
// Try to list worktrees - will fail if not supported
|
|
112
|
+
await execGit(['worktree', 'list'], options);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Maximum length for git refs (256 characters)
|
|
121
|
+
* This is a defense-in-depth measure - Git itself will validate refs
|
|
122
|
+
*/
|
|
123
|
+
const MAX_REF_LENGTH = 256;
|
|
124
|
+
/**
|
|
125
|
+
* Validate git ref input (lightweight validation)
|
|
126
|
+
* Trims whitespace and checks length, but lets Git be the source of truth for semantic validity
|
|
127
|
+
*
|
|
128
|
+
* @param ref - Git ref to validate
|
|
129
|
+
* @throws Error if ref is empty or exceeds length limit
|
|
130
|
+
*/
|
|
131
|
+
function validateGitRef(ref) {
|
|
132
|
+
const trimmed = ref.trim();
|
|
133
|
+
if (trimmed.length === 0) {
|
|
134
|
+
throw new Error('Invalid baseline ref: ref is empty or exceeds 256 characters');
|
|
135
|
+
}
|
|
136
|
+
if (trimmed.length > MAX_REF_LENGTH) {
|
|
137
|
+
throw new Error('Invalid baseline ref: ref is empty or exceeds 256 characters');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Resolve a git ref to its commit hash
|
|
142
|
+
* Validates that the ref exists
|
|
143
|
+
*
|
|
144
|
+
* @param ref - Git ref (branch, tag, commit, HEAD, HEAD~1, etc.)
|
|
145
|
+
* @returns The resolved commit hash
|
|
146
|
+
* @throws Error if ref doesn't exist or is invalid
|
|
147
|
+
*/
|
|
148
|
+
export async function resolveGitRef(ref, options = {}) {
|
|
149
|
+
// Lightweight validation: trim whitespace and check length
|
|
150
|
+
// Let Git be the source of truth for semantic validity
|
|
151
|
+
validateGitRef(ref);
|
|
152
|
+
const trimmedRef = ref.trim();
|
|
153
|
+
try {
|
|
154
|
+
const hash = await execGit(['rev-parse', '--verify', trimmedRef], options);
|
|
155
|
+
return hash;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
throw new Error(`Invalid git ref "${trimmedRef}": ref does not exist`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get a short description of a git ref (for display)
|
|
163
|
+
* Returns branch name, tag name, or short commit hash
|
|
164
|
+
*/
|
|
165
|
+
export async function describeGitRef(ref, options = {}) {
|
|
166
|
+
// Use trimmed ref for consistency with resolveGitRef
|
|
167
|
+
const trimmedRef = ref.trim();
|
|
168
|
+
try {
|
|
169
|
+
// Try to get a symbolic name first
|
|
170
|
+
const symbolic = await execGit(['rev-parse', '--abbrev-ref', trimmedRef], options);
|
|
171
|
+
if (symbolic && symbolic !== 'HEAD') {
|
|
172
|
+
return symbolic;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Ignore - fall through to short hash
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
// Fall back to short commit hash
|
|
180
|
+
const shortHash = await execGit(['rev-parse', '--short', trimmedRef], options);
|
|
181
|
+
return shortHash;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return trimmedRef; // Return trimmed ref if all else fails
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Create a git worktree at a specific ref
|
|
189
|
+
*
|
|
190
|
+
* @param ref - Git ref to checkout (branch, tag, commit, etc.)
|
|
191
|
+
* @param targetDir - Directory to create the worktree in (optional, will create temp if not provided)
|
|
192
|
+
* @returns GitWorktreeResult with worktree path and commit info
|
|
193
|
+
* @throws Error if worktree creation fails
|
|
194
|
+
*/
|
|
195
|
+
export async function createWorktree(ref, targetDir, options = {}) {
|
|
196
|
+
// Use trimmed ref for consistency
|
|
197
|
+
const trimmedRef = ref.trim();
|
|
198
|
+
// Validate we're in a git repo
|
|
199
|
+
if (!(await isGitRepo(options))) {
|
|
200
|
+
throw new Error('Not a git repository');
|
|
201
|
+
}
|
|
202
|
+
// Check worktree support
|
|
203
|
+
if (!(await supportsWorktrees(options))) {
|
|
204
|
+
throw new Error('Git worktrees not supported (requires git >= 2.5)');
|
|
205
|
+
}
|
|
206
|
+
// Resolve the ref to a commit hash (this will also validate the ref)
|
|
207
|
+
const commitHash = await resolveGitRef(trimmedRef, options);
|
|
208
|
+
// Generate worktree path if not provided
|
|
209
|
+
const worktreePath = targetDir ?? join(tmpdir(), `logicstamp-worktree-${Date.now()}-${commitHash.substring(0, 8)}`);
|
|
210
|
+
debugLog('git', `Creating worktree at ${worktreePath} for ref ${trimmedRef}`, {
|
|
211
|
+
commitHash,
|
|
212
|
+
});
|
|
213
|
+
try {
|
|
214
|
+
// Create parent directory if needed
|
|
215
|
+
await mkdir(worktreePath, { recursive: true });
|
|
216
|
+
// Remove the directory we just created (git worktree add needs it to not exist)
|
|
217
|
+
await rm(worktreePath, { recursive: true, force: true });
|
|
218
|
+
// Create the worktree in detached HEAD mode
|
|
219
|
+
await execGit(['worktree', 'add', '--detach', worktreePath, commitHash], options);
|
|
220
|
+
debugLog('git', `Worktree created successfully at ${worktreePath}`);
|
|
221
|
+
return {
|
|
222
|
+
worktreePath,
|
|
223
|
+
commitHash,
|
|
224
|
+
ref: trimmedRef,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
// Clean up on failure
|
|
229
|
+
try {
|
|
230
|
+
await rm(worktreePath, { recursive: true, force: true });
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Ignore cleanup errors
|
|
234
|
+
}
|
|
235
|
+
const err = error;
|
|
236
|
+
debugError('git', 'createWorktree', {
|
|
237
|
+
ref: trimmedRef,
|
|
238
|
+
targetDir: worktreePath,
|
|
239
|
+
message: err.message,
|
|
240
|
+
});
|
|
241
|
+
throw new Error(`Failed to create worktree for "${trimmedRef}": ${err.message}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Remove a git worktree and clean up its directory
|
|
246
|
+
*
|
|
247
|
+
* @param worktreePath - Path to the worktree to remove
|
|
248
|
+
*/
|
|
249
|
+
export async function removeWorktree(worktreePath, options = {}) {
|
|
250
|
+
debugLog('git', `Removing worktree at ${worktreePath}`);
|
|
251
|
+
try {
|
|
252
|
+
// First, try to remove via git worktree command
|
|
253
|
+
await execGit(['worktree', 'remove', '--force', worktreePath], options);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
// If git worktree remove fails, try manual cleanup
|
|
257
|
+
debugLog('git', `git worktree remove failed, trying manual cleanup`);
|
|
258
|
+
try {
|
|
259
|
+
// Remove the directory
|
|
260
|
+
await rm(worktreePath, { recursive: true, force: true });
|
|
261
|
+
// Prune stale worktree entries
|
|
262
|
+
await execGit(['worktree', 'prune'], options);
|
|
263
|
+
}
|
|
264
|
+
catch (cleanupError) {
|
|
265
|
+
debugError('git', 'removeWorktree', {
|
|
266
|
+
worktreePath,
|
|
267
|
+
message: cleanupError.message,
|
|
268
|
+
});
|
|
269
|
+
// Don't throw - best effort cleanup
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
debugLog('git', `Worktree removed: ${worktreePath}`);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Check if there are uncommitted changes in the working directory
|
|
276
|
+
*/
|
|
277
|
+
export async function hasUncommittedChanges(options = {}) {
|
|
278
|
+
try {
|
|
279
|
+
const status = await execGit(['status', '--porcelain'], options);
|
|
280
|
+
return status.length > 0;
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the current branch name (or "HEAD" if detached)
|
|
288
|
+
*/
|
|
289
|
+
export async function getCurrentBranch(options = {}) {
|
|
290
|
+
try {
|
|
291
|
+
const branch = await execGit(['rev-parse', '--abbrev-ref', 'HEAD'], options);
|
|
292
|
+
return branch;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return 'HEAD';
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Parse a baseline string into ref and type
|
|
300
|
+
*
|
|
301
|
+
* @param baseline - Baseline string (e.g., "git:main", "git:HEAD", "git:v1.0.0")
|
|
302
|
+
* @returns Parsed baseline info or null if not a git baseline
|
|
303
|
+
*/
|
|
304
|
+
export function parseGitBaseline(baseline) {
|
|
305
|
+
if (!baseline.startsWith('git:')) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
const ref = baseline.substring(4); // Remove "git:" prefix
|
|
309
|
+
if (!ref) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
return { ref };
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Create directory structure for git baseline comparison
|
|
316
|
+
* Uses .logicstamp/compare/ for context files
|
|
317
|
+
*/
|
|
318
|
+
export async function createBaselinePaths(projectRoot, ref) {
|
|
319
|
+
const timestamp = Date.now();
|
|
320
|
+
const safeRef = ref.replace(/[^a-zA-Z0-9_-]/g, '_').substring(0, 20);
|
|
321
|
+
// Context files go in .logicstamp/compare/
|
|
322
|
+
const compareRoot = join(projectRoot, '.logicstamp', 'compare');
|
|
323
|
+
const baselineDir = join(compareRoot, 'baseline');
|
|
324
|
+
const currentDir = join(compareRoot, 'current');
|
|
325
|
+
// Worktree goes in system temp (it's large)
|
|
326
|
+
const worktreeDir = join(tmpdir(), `logicstamp-worktree-${safeRef}-${timestamp}`);
|
|
327
|
+
// Create directories
|
|
328
|
+
await mkdir(baselineDir, { recursive: true });
|
|
329
|
+
await mkdir(currentDir, { recursive: true });
|
|
330
|
+
return {
|
|
331
|
+
tempRoot: compareRoot,
|
|
332
|
+
baselineDir,
|
|
333
|
+
currentDir,
|
|
334
|
+
worktreeDir,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Check if a file is git-ignored
|
|
339
|
+
* @param filePath - File path relative to git root or absolute path
|
|
340
|
+
* @param options - Git options
|
|
341
|
+
* @returns true if the file is git-ignored, false otherwise
|
|
342
|
+
*/
|
|
343
|
+
export async function isGitIgnored(filePath, options = {}) {
|
|
344
|
+
try {
|
|
345
|
+
// git check-ignore --quiet returns exit code 0 if file is ignored, 1 if not ignored
|
|
346
|
+
// execGit throws on non-zero exit codes, so if it succeeds, file is ignored
|
|
347
|
+
await execGit(['check-ignore', '--quiet', filePath], options);
|
|
348
|
+
return true; // Command succeeded, file is ignored
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// Command failed (exit code 1), file is not ignored
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Filter out git-ignored files from an array of file paths
|
|
357
|
+
* @param filePaths - Array of file paths to filter (may be normalized basenames in git baseline mode)
|
|
358
|
+
* @param projectRoot - Project root directory (for resolving relative paths)
|
|
359
|
+
* @param options - Git options
|
|
360
|
+
* @returns Array of file paths that are NOT git-ignored
|
|
361
|
+
*/
|
|
362
|
+
export async function filterGitIgnoredFiles(filePaths, projectRoot, options = {}) {
|
|
363
|
+
const { relative } = await import('node:path');
|
|
364
|
+
const filtered = [];
|
|
365
|
+
for (const filePath of filePaths) {
|
|
366
|
+
let isIgnored = false;
|
|
367
|
+
// If the path contains a slash, it's a full relative path
|
|
368
|
+
if (filePath.includes('/')) {
|
|
369
|
+
// Convert to relative path from project root if needed
|
|
370
|
+
let relativePath;
|
|
371
|
+
if (filePath.startsWith('/') || filePath.match(/^[A-Z]:/)) {
|
|
372
|
+
// Absolute path - convert to relative
|
|
373
|
+
relativePath = relative(projectRoot, filePath).replace(/\\/g, '/');
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
relativePath = filePath;
|
|
377
|
+
}
|
|
378
|
+
// Check if file is git-ignored
|
|
379
|
+
isIgnored = await isGitIgnored(relativePath, { ...options, cwd: projectRoot });
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
// It's just a basename (normalized in git baseline mode)
|
|
383
|
+
// Check if the basename itself is git-ignored (works for root-level files like next-env.d.ts)
|
|
384
|
+
isIgnored = await isGitIgnored(filePath, { ...options, cwd: projectRoot });
|
|
385
|
+
// Also check common patterns that might match this basename
|
|
386
|
+
if (!isIgnored) {
|
|
387
|
+
// Check common git-ignore patterns that might match
|
|
388
|
+
const patternsToCheck = [
|
|
389
|
+
`**/${filePath}`,
|
|
390
|
+
`*/${filePath}`,
|
|
391
|
+
];
|
|
392
|
+
for (const pattern of patternsToCheck) {
|
|
393
|
+
if (await isGitIgnored(pattern, { ...options, cwd: projectRoot })) {
|
|
394
|
+
isIgnored = true;
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (!isIgnored) {
|
|
401
|
+
filtered.push(filePath);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return filtered;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Clean up git baseline comparison directories
|
|
408
|
+
*/
|
|
409
|
+
export async function cleanupBaselinePaths(paths, options = {}) {
|
|
410
|
+
debugLog('git', 'Cleaning up baseline paths', { ...paths });
|
|
411
|
+
// Remove worktree first (via git)
|
|
412
|
+
try {
|
|
413
|
+
await removeWorktree(paths.worktreeDir, options);
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
// Best effort - worktree might already be removed
|
|
417
|
+
}
|
|
418
|
+
// Remove context directories
|
|
419
|
+
try {
|
|
420
|
+
await rm(paths.tempRoot, { recursive: true, force: true });
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
debugError('git', 'cleanupBaselinePaths', {
|
|
424
|
+
tempRoot: paths.tempRoot,
|
|
425
|
+
message: error.message,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/hash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAShD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;AACvD,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC;AAYjE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,CA6DtF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EACvD,KAAK,EAAE,MAAM,EACb,aAAa,SAAQ,GACpB,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAShD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAC;AACvD,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC;AAYjE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,CA6DtF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EACvD,KAAK,EAAE,MAAM,EACb,aAAa,SAAQ,GACpB,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAqBpD;AAoCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjE"}
|
package/dist/utils/hash.js
CHANGED
|
@@ -153,8 +153,9 @@ export function bundleHash(nodes, depth, schemaVersion = '0.1') {
|
|
|
153
153
|
*/
|
|
154
154
|
export function stableStringify(obj) {
|
|
155
155
|
return JSON.stringify(obj, (k, v) => {
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
// Explicitly check for null (typeof null === 'object' in JavaScript)
|
|
157
|
+
if (v !== null && typeof v === 'object' && !Array.isArray(v)) {
|
|
158
|
+
// Sort object keys recursively
|
|
158
159
|
return Object.keys(v)
|
|
159
160
|
.sort()
|
|
160
161
|
.reduce((o, key) => {
|
|
@@ -163,7 +164,10 @@ export function stableStringify(obj) {
|
|
|
163
164
|
}, {});
|
|
164
165
|
}
|
|
165
166
|
if (Array.isArray(v)) {
|
|
166
|
-
//
|
|
167
|
+
// NOTE: Arrays are expected to be normalized and deterministically ordered
|
|
168
|
+
// by the extraction/normalization layer before reaching stableStringify.
|
|
169
|
+
// We only sort primitives here to prevent accidental ordering issues.
|
|
170
|
+
// Arrays of objects should be pre-sorted elsewhere (e.g., via sortObject).
|
|
167
171
|
return [...v].sort();
|
|
168
172
|
}
|
|
169
173
|
return v;
|
|
@@ -171,12 +175,24 @@ export function stableStringify(obj) {
|
|
|
171
175
|
}
|
|
172
176
|
/**
|
|
173
177
|
* Sort object keys for stable hashing
|
|
178
|
+
* Recursively sorts nested objects and arrays to ensure complete determinism
|
|
174
179
|
*/
|
|
175
180
|
function sortObject(obj) {
|
|
176
181
|
const sorted = Object.keys(obj)
|
|
177
182
|
.sort()
|
|
178
183
|
.reduce((acc, key) => {
|
|
179
|
-
|
|
184
|
+
const value = obj[key];
|
|
185
|
+
// Recursively sort nested objects
|
|
186
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && value !== null) {
|
|
187
|
+
acc[key] = sortObject(value);
|
|
188
|
+
}
|
|
189
|
+
// Sort arrays for determinism (e.g., literals arrays in PropType objects)
|
|
190
|
+
else if (Array.isArray(value)) {
|
|
191
|
+
acc[key] = [...value].sort();
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
acc[key] = value;
|
|
195
|
+
}
|
|
180
196
|
return acc;
|
|
181
197
|
}, {});
|
|
182
198
|
return sorted;
|
package/dist/utils/hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "logicstamp-context",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "The context compiler for TypeScript. Compile your codebase into deterministic architectural contracts and dependency graphs for AI coding workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/compare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;YAChG,GAAG,EAAE,GAAG,CAAC;YACT,GAAG,EAAE,GAAG,CAAC;SACV,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA+GD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAuJpF;AAiKD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyGxG;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CA2InH;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBnH"}
|