@lumenflow/host 5.0.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.
Files changed (47) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +19 -0
  3. package/dist/enrollment/index.d.ts +10 -0
  4. package/dist/enrollment/index.d.ts.map +1 -0
  5. package/dist/enrollment/index.js +11 -0
  6. package/dist/enrollment/index.js.map +1 -0
  7. package/dist/enrollment/phone-device.d.ts +73 -0
  8. package/dist/enrollment/phone-device.d.ts.map +1 -0
  9. package/dist/enrollment/phone-device.js +198 -0
  10. package/dist/enrollment/phone-device.js.map +1 -0
  11. package/dist/git/git-adapter.d.ts +452 -0
  12. package/dist/git/git-adapter.d.ts.map +1 -0
  13. package/dist/git/git-adapter.js +778 -0
  14. package/dist/git/git-adapter.js.map +1 -0
  15. package/dist/git/git-context-constants.d.ts +43 -0
  16. package/dist/git/git-context-constants.d.ts.map +1 -0
  17. package/dist/git/git-context-constants.js +45 -0
  18. package/dist/git/git-context-constants.js.map +1 -0
  19. package/dist/git/git-context-extractor.d.ts +102 -0
  20. package/dist/git/git-context-extractor.d.ts.map +1 -0
  21. package/dist/git/git-context-extractor.js +568 -0
  22. package/dist/git/git-context-extractor.js.map +1 -0
  23. package/dist/git/git-staged-validator.d.ts +33 -0
  24. package/dist/git/git-staged-validator.d.ts.map +1 -0
  25. package/dist/git/git-staged-validator.js +52 -0
  26. package/dist/git/git-staged-validator.js.map +1 -0
  27. package/dist/git/git-validator.ports.d.ts +114 -0
  28. package/dist/git/git-validator.ports.d.ts.map +1 -0
  29. package/dist/git/git-validator.ports.js +4 -0
  30. package/dist/git/git-validator.ports.js.map +1 -0
  31. package/dist/git/index.d.ts +12 -0
  32. package/dist/git/index.d.ts.map +1 -0
  33. package/dist/git/index.js +14 -0
  34. package/dist/git/index.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/workspace-config/index.d.ts +10 -0
  40. package/dist/workspace-config/index.d.ts.map +1 -0
  41. package/dist/workspace-config/index.js +12 -0
  42. package/dist/workspace-config/index.js.map +1 -0
  43. package/dist/workspace-config/lumenflow-config.d.ts +75 -0
  44. package/dist/workspace-config/lumenflow-config.d.ts.map +1 -0
  45. package/dist/workspace-config/lumenflow-config.js +212 -0
  46. package/dist/workspace-config/lumenflow-config.js.map +1 -0
  47. package/package.json +65 -0
@@ -0,0 +1,452 @@
1
+ /**
2
+ * @file git-adapter.ts
3
+ * @description Git operations adapter using simple-git library
4
+ * WU-1082: Extract shared utilities (eliminate run() duplication)
5
+ * WU-1213: Refactor to use simple-git library (eliminate execSync)
6
+ * WU-2242: Add runtime type assertions to prevent silent API misuse
7
+ *
8
+ * Replaces run() function in:
9
+ * - tools/wu-claim.ts
10
+ * - tools/wu-done.ts
11
+ * - tools/wu-block.ts
12
+ * - tools/wu-unblock.ts
13
+ * - tools/wu-create.ts
14
+ * - tools/wu-cleanup.ts
15
+ * - tools/gates-pre-commit.ts
16
+ * - tools/validate.ts
17
+ * - tools/guard-worktree-commit.ts
18
+ */
19
+ import { type SimpleGit } from 'simple-git';
20
+ import type { DeleteBranchOptions, MergeOptions, MergeResult, PushOptions, WorktreeRemoveOptions } from './git-validator.ports.js';
21
+ interface GitAdapterOptions {
22
+ git?: SimpleGit;
23
+ baseDir?: string;
24
+ }
25
+ interface ResetOptions {
26
+ hard?: boolean;
27
+ }
28
+ interface LogOptions {
29
+ maxCount?: number;
30
+ }
31
+ /**
32
+ * Git operations adapter with dependency injection support
33
+ * @class GitAdapter
34
+ */
35
+ export declare class GitAdapter {
36
+ private readonly git;
37
+ /**
38
+ * Create a GitAdapter instance
39
+ * @param {object} [options] - Configuration options
40
+ * @param {object} [options.git] - simple-git instance (for testing)
41
+ * @param {string} [options.baseDir] - Base directory for git operations
42
+ */
43
+ constructor(options?: GitAdapterOptions);
44
+ /**
45
+ * Get current branch name
46
+ * @returns {Promise<string>} Current branch name
47
+ * @example
48
+ * await git.getCurrentBranch(); // "lane/operations/wu-1213"
49
+ */
50
+ getCurrentBranch(): Promise<string>;
51
+ /**
52
+ * Get git status (porcelain format string for compatibility)
53
+ * @returns {Promise<string>} Status output in porcelain format
54
+ * @example
55
+ * await git.getStatus(); // " M file.txt\n?? untracked.txt"
56
+ */
57
+ getStatus(): Promise<string>;
58
+ /**
59
+ * Get unpushed commits (compared to upstream)
60
+ * @returns {Promise<string>} Oneline log output for unpushed commits
61
+ * @example
62
+ * await git.getUnpushedCommits(); // "abc123 fix: ...\n"
63
+ */
64
+ getUnpushedCommits(): Promise<string>;
65
+ /**
66
+ * Check if a branch exists
67
+ * @param {string} branch - Branch name
68
+ * @returns {Promise<boolean>} True if branch exists
69
+ * @throws {TypeError} If branch is not a string
70
+ * @throws {Error} If branch is empty
71
+ * @example
72
+ * await git.branchExists('main'); // true
73
+ * await git.branchExists('nonexistent'); // false
74
+ */
75
+ branchExists(branch: string): Promise<boolean>;
76
+ /**
77
+ * Check if a remote branch exists via git ls-remote --heads
78
+ * @param {string} remote - Remote name (e.g., 'origin')
79
+ * @param {string} branch - Branch name
80
+ * @returns {Promise<boolean>} True if remote branch exists
81
+ * @throws {TypeError} If remote or branch is not a string
82
+ * @throws {Error} If remote or branch is empty
83
+ * @example
84
+ * await git.remoteBranchExists('origin', 'lane/operations/wu-123'); // true/false
85
+ */
86
+ remoteBranchExists(remote: string, branch: string): Promise<boolean>;
87
+ /**
88
+ * Fetch from remote
89
+ * @param {string} [remote] - Remote name (defaults to fetching all)
90
+ * @param {string} [branch] - Branch name
91
+ * @throws {TypeError} If remote or branch is not a string (when provided)
92
+ * @example
93
+ * await git.fetch('origin', 'main');
94
+ * await git.fetch(); // Fetch all remotes
95
+ */
96
+ fetch(remote?: string, branch?: string): Promise<void>;
97
+ /**
98
+ * Pull from remote branch
99
+ * @param {string} remote - Remote name
100
+ * @param {string} branch - Branch name
101
+ * @throws {TypeError} If remote or branch is not a string
102
+ * @example
103
+ * await git.pull('origin', 'main');
104
+ */
105
+ pull(remote: string, branch: string): Promise<void>;
106
+ /**
107
+ * Get git config value
108
+ * @param {string} key - Config key (e.g., 'user.email')
109
+ * @returns {Promise<string>} Config value
110
+ * @example
111
+ * await git.getConfigValue('user.email'); // "user@example.com"
112
+ */
113
+ getConfigValue(key: string): Promise<string>;
114
+ /**
115
+ * Check if working tree is clean (no uncommitted changes)
116
+ * @returns {Promise<boolean>} True if clean
117
+ * @example
118
+ * await git.isClean(); // true or false
119
+ */
120
+ isClean(): Promise<boolean>;
121
+ /**
122
+ * Add files to staging area
123
+ * @param {string|string[]} files - Files to add
124
+ * @throws {TypeError} If files is not a string or array
125
+ * @throws {Error} If files is empty string or empty array
126
+ * @example
127
+ * await git.add('file.txt');
128
+ * await git.add(['file1.txt', 'file2.txt']);
129
+ * await git.add('.'); // Add all
130
+ */
131
+ add(files: string | string[]): Promise<void>;
132
+ /**
133
+ * Return the subset of supplied paths that are matched by `.gitignore`.
134
+ *
135
+ * WU-2572: Wraps `git check-ignore` (via simple-git's `checkIgnore`). Unlike
136
+ * `check-ignore` on the CLI, which exits non-zero when there are no matches,
137
+ * simple-git's wrapper normalises the result to an array. Returns an empty
138
+ * array when no paths are ignored OR when git reports an error (fail-open —
139
+ * a broken check must not silently drop paths from a downstream stage).
140
+ *
141
+ * @param paths - Candidate paths to test (relative or absolute; git resolves)
142
+ * @returns Array of paths that ARE gitignored
143
+ */
144
+ checkIgnore(paths: string[]): Promise<string[]>;
145
+ /**
146
+ * Add files to staging area including deletions
147
+ *
148
+ * WU-1813: Stages modifications, additions, AND deletions for specified files.
149
+ * Unlike add(), this uses `git add -A` which properly handles tracked file deletions.
150
+ *
151
+ * When files array is empty, stages all changes in the working directory (git add -A .)
152
+ * to catch UnsafeAny deletions that might not have been explicitly listed.
153
+ *
154
+ * WU-2572: Silently filter out gitignored paths before staging. Previously,
155
+ * any consumer whose `.gitignore` covered a file in the stage list (e.g.
156
+ * `LUMENFLOW.local.md` under the File Ownership Model) saw:
157
+ * `The following paths are ignored by one of your .gitignore files: ...`
158
+ * emitted to stderr, and the add then failed — which for the upgrade flow
159
+ * triggered a fallback to the direct-upgrade path. Filtering here makes
160
+ * every micro-worktree staging call gitignore-safe without each caller
161
+ * needing to know which of its paths might be ignored in the consumer
162
+ * repo's .gitignore.
163
+ *
164
+ * @param {string[]} files - Files to add (empty array = add all)
165
+ * @example
166
+ * await git.addWithDeletions(['modified.txt', 'deleted.txt']);
167
+ * await git.addWithDeletions([]); // Add all changes including deletions
168
+ */
169
+ addWithDeletions(files: string[]): Promise<void>;
170
+ /**
171
+ * Commit changes
172
+ * @param {string} message - Commit message
173
+ * @throws {TypeError} If message is not a string
174
+ * @throws {Error} If message is empty
175
+ * @example
176
+ * await git.commit('feat: add new feature');
177
+ */
178
+ commit(message: string): Promise<void>;
179
+ /**
180
+ * Push to remote
181
+ * @param {string} [remote='origin'] - Remote name
182
+ * @param {string} [branch] - Branch name (uses current branch if not specified)
183
+ * @param {object} [options] - Push options
184
+ * @param {boolean} [options.setUpstream] - Set upstream tracking (-u flag)
185
+ * @throws {TypeError} If remote or branch is not a string (when provided)
186
+ * @example
187
+ * await git.push('origin', 'main');
188
+ * await git.push('origin', 'feature', { setUpstream: true });
189
+ */
190
+ push(remote?: string, branch?: string, options?: PushOptions): Promise<void>;
191
+ /**
192
+ * Push using refspec to push local ref to different remote ref
193
+ *
194
+ * WU-1435: Enables push-only pattern to keep local main pristine.
195
+ * Pushes directly to origin/main without updating local main.
196
+ *
197
+ * @param {string} remote - Remote name (e.g., 'origin')
198
+ * @param {string} localRef - Local ref to push (e.g., 'tmp/wu-claim/wu-123')
199
+ * @param {string} remoteRef - Remote ref to update (e.g., 'main')
200
+ * @example
201
+ * await git.pushRefspec('origin', 'tmp/wu-claim/wu-123', 'main');
202
+ * // Equivalent to: git push origin tmp/wu-claim/wu-123:main
203
+ */
204
+ pushRefspec(remote: string, localRef: string, remoteRef: string): Promise<void>;
205
+ /**
206
+ * Create and checkout a new branch
207
+ * @param {string} branch - Branch name
208
+ * @param {string} [startPoint] - Starting commit (defaults to HEAD)
209
+ * @throws {TypeError} If branch is not a string, or startPoint is not a string (when provided)
210
+ * @throws {Error} If branch is empty
211
+ * @example
212
+ * await git.createBranch('feature/new-feature');
213
+ * await git.createBranch('hotfix/bug', 'main');
214
+ */
215
+ createBranch(branch: string, startPoint?: string): Promise<void>;
216
+ /**
217
+ * Checkout a branch
218
+ * @param {string} branch - Branch name
219
+ * @throws {TypeError} If branch is not a string
220
+ * @throws {Error} If branch is empty
221
+ * @example
222
+ * await git.checkout('main');
223
+ */
224
+ checkout(branch: string): Promise<void>;
225
+ /**
226
+ * Get commit hash
227
+ * @param {string} [ref='HEAD'] - Git ref
228
+ * @returns {Promise<string>} Commit hash
229
+ * @example
230
+ * await git.getCommitHash(); // "a1b2c3d..."
231
+ * await git.getCommitHash('main'); // "e4f5g6h..."
232
+ */
233
+ getCommitHash(ref?: string): Promise<string>;
234
+ /**
235
+ * Merge a branch
236
+ *
237
+ * WU-1749: Bug 1 fix - Return success status and handle false positive failures.
238
+ * simple-git's merge() returns a MergeSummary that we now properly handle.
239
+ *
240
+ * @param {string} branch - Branch to merge
241
+ * @param {object} [options] - Merge options
242
+ * @param {boolean} [options.ffOnly] - Fast-forward only merge
243
+ * @returns {Promise<{success: boolean}>} Merge result
244
+ * @throws {TypeError} If branch is not a string
245
+ * @throws {Error} If branch is empty
246
+ * @example
247
+ * await git.merge('feature-branch');
248
+ * await git.merge('feature-branch', { ffOnly: true });
249
+ */
250
+ merge(branch: string, options?: MergeOptions): Promise<MergeResult>;
251
+ /**
252
+ * Get commit log
253
+ *
254
+ * WU-1749: Bug 4 fix - Add log() method for counting commits.
255
+ * Used by wu-done-retry-helpers.ts to count previous completion attempts.
256
+ *
257
+ * @param {object} [options] - Log options
258
+ * @param {number} [options.maxCount] - Maximum number of commits to return
259
+ * @returns {Promise<{all: Array<{hash: string, message: string}>, total: number}>} Log result
260
+ * @example
261
+ * await git.log({ maxCount: 50 });
262
+ */
263
+ log(options?: LogOptions): Promise<import("simple-git").LogResult<import("simple-git").DefaultLogFields>>;
264
+ /**
265
+ * Find common ancestor (merge base) of two refs
266
+ * @param {string} ref1 - First ref
267
+ * @param {string} ref2 - Second ref
268
+ * @returns {Promise<string>} Common ancestor commit hash
269
+ * @throws {TypeError} If ref1 or ref2 is not a string
270
+ * @example
271
+ * await git.mergeBase('main', 'feature'); // "abc123def456"
272
+ */
273
+ mergeBase(ref1: string, ref2: string): Promise<string>;
274
+ /**
275
+ * Simulate merge and detect conflicts without touching working tree
276
+ * @param {string} base - Base commit hash
277
+ * @param {string} ref1 - First ref to merge
278
+ * @param {string} ref2 - Second ref to merge
279
+ * @returns {Promise<string>} Merge tree output (contains conflict markers if conflicts exist)
280
+ * @example
281
+ * await git.mergeTree('base123', 'main', 'feature');
282
+ */
283
+ mergeTree(base: string, ref1: string, ref2: string): Promise<string>;
284
+ /**
285
+ * List commits with various options
286
+ * @param {string[]} args - Arguments to pass to git rev-list
287
+ * @returns {Promise<string>} Rev-list output
288
+ * @example
289
+ * await git.revList(['--count', '--left-right', 'main...feature']); // "5\t0"
290
+ */
291
+ revList(args: string[]): Promise<string>;
292
+ /**
293
+ * Add a worktree with new branch
294
+ * @param {string} path - Worktree path
295
+ * @param {string} branch - Branch name
296
+ * @param {string} [startPoint] - Starting commit (defaults to HEAD)
297
+ * @throws {TypeError} If path or branch is not a string
298
+ * @throws {Error} If path or branch is empty
299
+ * @example
300
+ * await git.worktreeAdd('worktrees/feature', 'feature-branch', 'main');
301
+ */
302
+ worktreeAdd(path: string, branch: string, startPoint?: string): Promise<void>;
303
+ /**
304
+ * Remove a worktree
305
+ *
306
+ * WU-1476: Layer 1 defense - explicit directory cleanup after git worktree remove.
307
+ * Git worktree remove can leave orphan directories when:
308
+ * - The worktree was forcefully removed
309
+ * - Git worktree metadata was corrupted
310
+ * - Previous wu:done failed mid-workflow
311
+ *
312
+ * @param {string} worktreePath - Worktree path
313
+ * @param {object} [options] - Remove options
314
+ * @param {boolean} [options.force] - Force removal
315
+ * @example
316
+ * await git.worktreeRemove('worktrees/feature');
317
+ * await git.worktreeRemove('worktrees/feature', { force: true });
318
+ */
319
+ worktreeRemove(worktreePath: string, options?: WorktreeRemoveOptions): Promise<void>;
320
+ /**
321
+ * List all worktrees
322
+ * @returns {Promise<string>} Worktree list in porcelain format
323
+ * @example
324
+ * await git.worktreeList();
325
+ */
326
+ worktreeList(): Promise<string>;
327
+ /**
328
+ * Delete a branch
329
+ * @param {string} branch - Branch name
330
+ * @param {object} [options] - Delete options
331
+ * @param {boolean} [options.force] - Force delete (use -D instead of -d)
332
+ * @throws {TypeError} If branch is not a string
333
+ * @throws {Error} If branch is empty
334
+ * @example
335
+ * await git.deleteBranch('feature');
336
+ * await git.deleteBranch('feature', { force: true });
337
+ */
338
+ deleteBranch(branch: string, options?: DeleteBranchOptions): Promise<void>;
339
+ /**
340
+ * Create a branch WITHOUT switching to it (WU-1262)
341
+ * Used for micro-worktree pattern where main checkout stays on main
342
+ * @param {string} branch - Branch name to create
343
+ * @param {string} [startPoint] - Starting commit (defaults to HEAD)
344
+ * @example
345
+ * await git.createBranchNoCheckout('tmp/wu-create/wu-123', 'main');
346
+ */
347
+ createBranchNoCheckout(branch: string, startPoint?: string): Promise<void>;
348
+ /**
349
+ * Add a worktree for an EXISTING branch (WU-1262)
350
+ * Unlike worktreeAdd, this doesn't create a new branch
351
+ * @param {string} path - Worktree path
352
+ * @param {string} branch - Existing branch name
353
+ * @example
354
+ * await git.worktreeAddExisting('/tmp/wu-create-xyz', 'tmp/wu-create/wu-123');
355
+ */
356
+ worktreeAddExisting(path: string, branch: string): Promise<void>;
357
+ /**
358
+ * Rebase current branch onto target (WU-1262)
359
+ * Used in micro-worktree to rebase temp branch when main moves
360
+ * @param {string} onto - Target ref to rebase onto
361
+ * @throws {TypeError} If onto is not a string
362
+ * @throws {Error} If onto is empty
363
+ * @example
364
+ * await git.rebase('main');
365
+ */
366
+ rebase(onto: string): Promise<void>;
367
+ /**
368
+ * Reset HEAD to specified commit
369
+ * @param {string} [ref] - Commit ref to reset to (defaults to HEAD)
370
+ * @param {object} [options] - Reset options
371
+ * @param {boolean} [options.hard] - Hard reset (--hard flag)
372
+ * @example
373
+ * await git.reset('abc123', { hard: true });
374
+ */
375
+ reset(ref?: string, options?: ResetOptions): Promise<void>;
376
+ /**
377
+ * Execute arbitrary git command via raw()
378
+ * @param {string[]} args - Git command arguments
379
+ * @returns {Promise<string>} Command output
380
+ * @throws {TypeError} If args is not an array
381
+ * @example
382
+ * await git.raw(['status', '--porcelain']);
383
+ */
384
+ raw(args: string[]): Promise<string>;
385
+ /**
386
+ * WU-2208: List file/directory names at a given git ref and tree path.
387
+ *
388
+ * Uses `git ls-tree --name-only <ref> <path>/` to enumerate entries.
389
+ * Returns an array of filenames (not full paths) within the directory.
390
+ * Returns empty array if the path does not exist at the given ref.
391
+ *
392
+ * @param ref - Git ref (e.g., 'origin/main')
393
+ * @param path - Directory path relative to repo root
394
+ * @returns Array of filenames in the directory at the given ref
395
+ */
396
+ listTreeAtRef(ref: string, path: string): Promise<string[]>;
397
+ /**
398
+ * WU-2208: Show a file's content at a given git ref.
399
+ *
400
+ * Uses `git show <ref>:<path>` to retrieve file content.
401
+ * Returns empty string if the file does not exist at the given ref.
402
+ *
403
+ * @param ref - Git ref (e.g., 'origin/main')
404
+ * @param path - File path relative to repo root
405
+ * @returns File content as string, or empty string if not found
406
+ */
407
+ showFileAtRef(ref: string, path: string): Promise<string>;
408
+ /**
409
+ * @deprecated Use async methods directly instead
410
+ * Legacy method for backward compatibility
411
+ * Execute a git command and return trimmed output
412
+ * @param {string} cmd - Command to execute
413
+ * @returns {string} Trimmed command output
414
+ */
415
+ run(cmd: string): never;
416
+ /**
417
+ * @deprecated Use worktreeAdd() instead
418
+ */
419
+ addWorktree(path: string, branch: string, startPoint?: string): Promise<void>;
420
+ /**
421
+ * @deprecated Use worktreeRemove() instead
422
+ */
423
+ removeWorktree(path: string, options?: WorktreeRemoveOptions): Promise<void>;
424
+ }
425
+ /**
426
+ * Create a GitAdapter for a specific directory
427
+ * Use this when you need git operations in an explicit path (e.g., worktree vs main)
428
+ * @param {string} baseDir - Directory for git operations
429
+ * @returns {GitAdapter} New GitAdapter instance for the specified directory
430
+ * @example
431
+ * const gitWorktree = createGitForPath('/path/to/worktree');
432
+ * const gitMain = createGitForPath('/path/to/main');
433
+ */
434
+ export declare function createGitForPath(baseDir: string): GitAdapter;
435
+ /**
436
+ * Create a GitAdapter for the current working directory
437
+ * Captures process.cwd() at call time (not import time)
438
+ * Use this after process.chdir() to get an adapter for the new directory
439
+ * @returns {GitAdapter} New GitAdapter instance for current process.cwd()
440
+ * @example
441
+ * process.chdir(worktreePath);
442
+ * const git = getGitForCwd(); // Uses new directory
443
+ */
444
+ export declare function getGitForCwd(): GitAdapter;
445
+ /**
446
+ * Reset singleton warning flag (for testing only)
447
+ * @internal
448
+ */
449
+ export declare function _resetSingletonWarning(): void;
450
+ export declare const git: GitAdapter;
451
+ export {};
452
+ //# sourceMappingURL=git-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-adapter.d.ts","sourceRoot":"","sources":["../../src/git/git-adapter.ts"],"names":[],"mappings":"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"}