dmux 3.4.3 → 3.5.1

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 (32) hide show
  1. package/dist/actions/implementations/mergeAction.d.ts +3 -1
  2. package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
  3. package/dist/actions/implementations/mergeAction.js +38 -4
  4. package/dist/actions/implementations/mergeAction.js.map +1 -1
  5. package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -1
  6. package/dist/actions/merge/commitMessageHandler.js +7 -0
  7. package/dist/actions/merge/commitMessageHandler.js.map +1 -1
  8. package/dist/actions/merge/multiMergeOrchestrator.d.ts +22 -0
  9. package/dist/actions/merge/multiMergeOrchestrator.d.ts.map +1 -0
  10. package/dist/actions/merge/multiMergeOrchestrator.js +629 -0
  11. package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -0
  12. package/dist/actions/merge/types.d.ts +62 -0
  13. package/dist/actions/merge/types.d.ts.map +1 -0
  14. package/dist/actions/merge/types.js +7 -0
  15. package/dist/actions/merge/types.js.map +1 -0
  16. package/dist/services/PopupManager.d.ts.map +1 -1
  17. package/dist/services/PopupManager.js +9 -2
  18. package/dist/services/PopupManager.js.map +1 -1
  19. package/dist/utils/aiMerge.d.ts.map +1 -1
  20. package/dist/utils/aiMerge.js +7 -1
  21. package/dist/utils/aiMerge.js.map +1 -1
  22. package/dist/utils/generated-agents-doc.d.ts +1 -1
  23. package/dist/utils/generated-agents-doc.js +1 -1
  24. package/dist/utils/hooksDocs.d.ts +1 -1
  25. package/dist/utils/mergeValidation.d.ts.map +1 -1
  26. package/dist/utils/mergeValidation.js +48 -2
  27. package/dist/utils/mergeValidation.js.map +1 -1
  28. package/dist/utils/worktreeDiscovery.d.ts +39 -0
  29. package/dist/utils/worktreeDiscovery.d.ts.map +1 -0
  30. package/dist/utils/worktreeDiscovery.js +241 -0
  31. package/dist/utils/worktreeDiscovery.js.map +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Worktree Discovery Utilities
3
+ *
4
+ * Scans a directory for nested git worktrees (including the root).
5
+ * Used for multi-merge to find sub-worktrees created by hooks.
6
+ */
7
+ import { execSync } from 'child_process';
8
+ import { readdirSync, statSync, existsSync } from 'fs';
9
+ import { join, basename, relative } from 'path';
10
+ import { getCurrentBranch } from './git.js';
11
+ /**
12
+ * Detect all git worktrees within a directory (recursively)
13
+ *
14
+ * @param rootWorktreePath - The root worktree path (dmux pane's worktree)
15
+ * @returns Array of WorktreeInfo objects, ordered by depth (deepest first, root last)
16
+ */
17
+ export function detectAllWorktrees(rootWorktreePath) {
18
+ const worktrees = [];
19
+ // Add the root worktree first
20
+ const rootInfo = getWorktreeInfo(rootWorktreePath, rootWorktreePath, true);
21
+ if (rootInfo) {
22
+ worktrees.push(rootInfo);
23
+ }
24
+ // Recursively scan for sub-worktrees
25
+ scanForWorktrees(rootWorktreePath, rootWorktreePath, worktrees, 1);
26
+ // Sort by depth descending (deepest first, root last)
27
+ // This ensures sub-worktrees are merged before their parents
28
+ worktrees.sort((a, b) => b.depth - a.depth);
29
+ return worktrees;
30
+ }
31
+ /**
32
+ * Recursively scan a directory for git worktrees
33
+ */
34
+ function scanForWorktrees(dirPath, rootWorktreePath, worktrees, depth) {
35
+ try {
36
+ const entries = readdirSync(dirPath, { withFileTypes: true });
37
+ for (const entry of entries) {
38
+ // Skip hidden directories (except we need to check for .git)
39
+ if (entry.name.startsWith('.') && entry.name !== '.git') {
40
+ continue;
41
+ }
42
+ // Skip node_modules and other common large directories
43
+ if (entry.name === 'node_modules' || entry.name === 'vendor' || entry.name === '.pnpm') {
44
+ continue;
45
+ }
46
+ const fullPath = join(dirPath, entry.name);
47
+ if (entry.isDirectory()) {
48
+ // Check if this directory is a worktree (has .git file, not directory)
49
+ const gitPath = join(fullPath, '.git');
50
+ if (existsSync(gitPath)) {
51
+ const gitStat = statSync(gitPath);
52
+ if (gitStat.isFile()) {
53
+ // This is a worktree (has .git file pointing to parent)
54
+ const worktreeInfo = getWorktreeInfo(fullPath, rootWorktreePath, false, depth);
55
+ if (worktreeInfo) {
56
+ worktrees.push(worktreeInfo);
57
+ }
58
+ // Continue scanning inside this worktree for nested worktrees
59
+ scanForWorktrees(fullPath, rootWorktreePath, worktrees, depth + 1);
60
+ }
61
+ else if (gitStat.isDirectory()) {
62
+ // This is a full git repository, not a worktree
63
+ // It could still contain worktrees inside it, but we skip the repo itself
64
+ // (it's not a worktree of another repo)
65
+ scanForWorktrees(fullPath, rootWorktreePath, worktrees, depth + 1);
66
+ }
67
+ }
68
+ else {
69
+ // Regular directory, continue scanning
70
+ scanForWorktrees(fullPath, rootWorktreePath, worktrees, depth);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ catch (error) {
76
+ // Permission denied or other errors - skip this directory
77
+ console.error(`[worktreeDiscovery] Error scanning ${dirPath}: ${error}`);
78
+ }
79
+ }
80
+ /**
81
+ * Get detailed information about a worktree
82
+ */
83
+ function getWorktreeInfo(worktreePath, rootWorktreePath, isRoot, depth = 0) {
84
+ try {
85
+ // Get the parent repo path using git rev-parse
86
+ const parentRepoPath = getWorktreeParentPath(worktreePath);
87
+ if (!parentRepoPath) {
88
+ console.error(`[worktreeDiscovery] Could not determine parent for ${worktreePath}`);
89
+ return null;
90
+ }
91
+ // Get repo name from parent path
92
+ const repoName = getRepoName(parentRepoPath);
93
+ // Get current branch in worktree
94
+ const branch = getCurrentBranch(worktreePath);
95
+ // Get main branch in parent repo
96
+ const mainBranch = getMainBranchForRepo(parentRepoPath);
97
+ // Calculate relative path from root
98
+ const relativePath = isRoot ? '.' : relative(rootWorktreePath, worktreePath);
99
+ return {
100
+ worktreePath,
101
+ parentRepoPath,
102
+ repoName,
103
+ branch,
104
+ mainBranch,
105
+ isRoot,
106
+ relativePath,
107
+ depth,
108
+ };
109
+ }
110
+ catch (error) {
111
+ console.error(`[worktreeDiscovery] Error getting info for ${worktreePath}: ${error}`);
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * Get the parent repository path for a worktree
117
+ *
118
+ * Uses: git rev-parse --path-format=absolute --git-common-dir
119
+ * Then removes ".git" suffix to get repo root
120
+ */
121
+ export function getWorktreeParentPath(worktreePath) {
122
+ try {
123
+ // Get the common git directory (the parent repo's .git or .git/worktrees/...)
124
+ const gitCommonDir = execSync('git rev-parse --path-format=absolute --git-common-dir', {
125
+ cwd: worktreePath,
126
+ encoding: 'utf-8',
127
+ stdio: 'pipe',
128
+ }).trim();
129
+ // The git-common-dir returns the .git directory path
130
+ // Remove the ".git" suffix to get the repo root
131
+ // Handle both "/path/to/repo/.git" and "/path/to/repo/.git/worktrees/name"
132
+ let parentPath = gitCommonDir;
133
+ // If it ends with .git, remove it
134
+ if (parentPath.endsWith('.git')) {
135
+ parentPath = parentPath.slice(0, -4); // Remove ".git"
136
+ if (parentPath.endsWith('/')) {
137
+ parentPath = parentPath.slice(0, -1); // Remove trailing slash
138
+ }
139
+ }
140
+ else if (parentPath.includes('/.git/')) {
141
+ // It's a path like /repo/.git/worktrees/name, extract the repo path
142
+ parentPath = parentPath.split('/.git/')[0];
143
+ }
144
+ // Verify by getting the toplevel
145
+ const topLevel = execSync('git rev-parse --path-format=absolute --show-toplevel', {
146
+ cwd: parentPath,
147
+ encoding: 'utf-8',
148
+ stdio: 'pipe',
149
+ }).trim();
150
+ return topLevel;
151
+ }
152
+ catch (error) {
153
+ console.error(`[worktreeDiscovery] Error getting parent path for ${worktreePath}: ${error}`);
154
+ return null;
155
+ }
156
+ }
157
+ /**
158
+ * Get repository name from path (directory name)
159
+ */
160
+ export function getRepoName(repoPath) {
161
+ return basename(repoPath);
162
+ }
163
+ /**
164
+ * Get main branch for a specific repo (running git commands in that repo's context)
165
+ */
166
+ function getMainBranchForRepo(repoPath) {
167
+ try {
168
+ // First try to get the default branch from origin
169
+ const originHead = execSync('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null', {
170
+ cwd: repoPath,
171
+ encoding: 'utf8',
172
+ stdio: 'pipe',
173
+ }).trim();
174
+ if (originHead) {
175
+ const match = originHead.match(/refs\/remotes\/origin\/(.+)/);
176
+ if (match) {
177
+ return match[1];
178
+ }
179
+ }
180
+ }
181
+ catch {
182
+ // Fallback if origin/HEAD is not set
183
+ }
184
+ try {
185
+ // Check if 'main' branch exists
186
+ execSync('git show-ref --verify --quiet refs/heads/main', {
187
+ cwd: repoPath,
188
+ stdio: 'pipe',
189
+ });
190
+ return 'main';
191
+ }
192
+ catch {
193
+ // main doesn't exist
194
+ }
195
+ try {
196
+ // Check if 'master' branch exists
197
+ execSync('git show-ref --verify --quiet refs/heads/master', {
198
+ cwd: repoPath,
199
+ stdio: 'pipe',
200
+ });
201
+ return 'master';
202
+ }
203
+ catch {
204
+ // master doesn't exist
205
+ }
206
+ return 'main'; // Default fallback
207
+ }
208
+ /**
209
+ * Check if a directory is a git worktree (has .git file, not directory)
210
+ */
211
+ export function isGitWorktree(dirPath) {
212
+ const gitPath = join(dirPath, '.git');
213
+ if (!existsSync(gitPath)) {
214
+ return false;
215
+ }
216
+ const stat = statSync(gitPath);
217
+ return stat.isFile();
218
+ }
219
+ /**
220
+ * Check if a directory is a git repository root (has .git directory)
221
+ */
222
+ export function isGitRepository(dirPath) {
223
+ const gitPath = join(dirPath, '.git');
224
+ if (!existsSync(gitPath)) {
225
+ return false;
226
+ }
227
+ const stat = statSync(gitPath);
228
+ return stat.isDirectory();
229
+ }
230
+ /**
231
+ * Generate a display label for a worktree
232
+ * Format: "repo-name (branch)" or "repo-name (branch) - relative/path"
233
+ */
234
+ export function getWorktreeDisplayLabel(worktree) {
235
+ const baseLabel = `${worktree.repoName} (${worktree.branch})`;
236
+ if (worktree.isRoot || worktree.relativePath === '.') {
237
+ return baseLabel;
238
+ }
239
+ return `${baseLabel} - ${worktree.relativePath}`;
240
+ }
241
+ //# sourceMappingURL=worktreeDiscovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeDiscovery.js","sourceRoot":"","sources":["../../src/utils/worktreeDiscovery.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dmux",
3
- "version": "3.4.3",
3
+ "version": "3.5.1",
4
4
  "description": "Tmux pane manager with AI agent integration for parallel development workflows",
5
5
  "type": "module",
6
6
  "author": "Justin Schroeder",