dmux 5.3.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/README.md +2 -1
  2. package/dist/DmuxApp.d.ts.map +1 -1
  3. package/dist/DmuxApp.js +226 -51
  4. package/dist/DmuxApp.js.map +1 -1
  5. package/dist/FileBrowserApp.d.ts +4 -0
  6. package/dist/FileBrowserApp.d.ts.map +1 -0
  7. package/dist/FileBrowserApp.js +693 -0
  8. package/dist/FileBrowserApp.js.map +1 -0
  9. package/dist/actions/implementations/closeAction.d.ts.map +1 -1
  10. package/dist/actions/implementations/closeAction.js +47 -5
  11. package/dist/actions/implementations/closeAction.js.map +1 -1
  12. package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
  13. package/dist/actions/implementations/mergeAction.js +51 -16
  14. package/dist/actions/implementations/mergeAction.js.map +1 -1
  15. package/dist/actions/implementations/viewAction.d.ts.map +1 -1
  16. package/dist/actions/implementations/viewAction.js +7 -0
  17. package/dist/actions/implementations/viewAction.js.map +1 -1
  18. package/dist/actions/index.d.ts.map +1 -1
  19. package/dist/actions/index.js +24 -0
  20. package/dist/actions/index.js.map +1 -1
  21. package/dist/actions/merge/multiMergeOrchestrator.js +1 -1
  22. package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -1
  23. package/dist/actions/types.d.ts +19 -4
  24. package/dist/actions/types.d.ts.map +1 -1
  25. package/dist/actions/types.js +91 -0
  26. package/dist/actions/types.js.map +1 -1
  27. package/dist/components/indicators/Spinner.d.ts +2 -0
  28. package/dist/components/indicators/Spinner.d.ts.map +1 -1
  29. package/dist/components/indicators/Spinner.js +4 -4
  30. package/dist/components/indicators/Spinner.js.map +1 -1
  31. package/dist/components/panes/KebabMenu.d.ts +2 -2
  32. package/dist/components/panes/KebabMenu.d.ts.map +1 -1
  33. package/dist/components/panes/KebabMenu.js +9 -4
  34. package/dist/components/panes/KebabMenu.js.map +1 -1
  35. package/dist/components/panes/PaneCard.d.ts.map +1 -1
  36. package/dist/components/panes/PaneCard.js +20 -4
  37. package/dist/components/panes/PaneCard.js.map +1 -1
  38. package/dist/components/panes/PanesGrid.d.ts +1 -0
  39. package/dist/components/panes/PanesGrid.d.ts.map +1 -1
  40. package/dist/components/panes/PanesGrid.js +11 -3
  41. package/dist/components/panes/PanesGrid.js.map +1 -1
  42. package/dist/components/popups/agentChoicePopup.js +29 -24
  43. package/dist/components/popups/agentChoicePopup.js.map +1 -1
  44. package/dist/components/popups/agentChoiceSelection.d.ts +8 -0
  45. package/dist/components/popups/agentChoiceSelection.d.ts.map +1 -0
  46. package/dist/components/popups/agentChoiceSelection.js +14 -0
  47. package/dist/components/popups/agentChoiceSelection.js.map +1 -0
  48. package/dist/components/popups/kebabMenuPopup.js +9 -4
  49. package/dist/components/popups/kebabMenuPopup.js.map +1 -1
  50. package/dist/components/popups/notificationSoundsPopup.d.ts +25 -0
  51. package/dist/components/popups/notificationSoundsPopup.d.ts.map +1 -0
  52. package/dist/components/popups/notificationSoundsPopup.js +165 -0
  53. package/dist/components/popups/notificationSoundsPopup.js.map +1 -0
  54. package/dist/components/popups/settingsPopup.js +361 -26
  55. package/dist/components/popups/settingsPopup.js.map +1 -1
  56. package/dist/components/popups/shortcutsPopup.js +11 -5
  57. package/dist/components/popups/shortcutsPopup.js.map +1 -1
  58. package/dist/constants/layout.d.ts +9 -0
  59. package/dist/constants/layout.d.ts.map +1 -0
  60. package/dist/constants/layout.js +9 -0
  61. package/dist/constants/layout.js.map +1 -0
  62. package/dist/hooks/useActionSystem.d.ts +9 -5
  63. package/dist/hooks/useActionSystem.d.ts.map +1 -1
  64. package/dist/hooks/useActionSystem.js +21 -19
  65. package/dist/hooks/useActionSystem.js.map +1 -1
  66. package/dist/hooks/useInputHandling.d.ts +1 -0
  67. package/dist/hooks/useInputHandling.d.ts.map +1 -1
  68. package/dist/hooks/useInputHandling.js +499 -79
  69. package/dist/hooks/useInputHandling.js.map +1 -1
  70. package/dist/hooks/usePaneCreation.d.ts +4 -2
  71. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  72. package/dist/hooks/usePaneCreation.js +6 -0
  73. package/dist/hooks/usePaneCreation.js.map +1 -1
  74. package/dist/hooks/usePaneLoading.d.ts +1 -0
  75. package/dist/hooks/usePaneLoading.d.ts.map +1 -1
  76. package/dist/hooks/usePaneLoading.js +10 -7
  77. package/dist/hooks/usePaneLoading.js.map +1 -1
  78. package/dist/hooks/usePaneSync.js +2 -2
  79. package/dist/hooks/usePaneSync.js.map +1 -1
  80. package/dist/hooks/usePanes.d.ts.map +1 -1
  81. package/dist/hooks/usePanes.js +18 -4
  82. package/dist/hooks/usePanes.js.map +1 -1
  83. package/dist/hooks/useProjectActivity.d.ts +7 -0
  84. package/dist/hooks/useProjectActivity.d.ts.map +1 -0
  85. package/dist/hooks/useProjectActivity.js +79 -0
  86. package/dist/hooks/useProjectActivity.js.map +1 -0
  87. package/dist/hooks/useServices.d.ts +3 -0
  88. package/dist/hooks/useServices.d.ts.map +1 -1
  89. package/dist/hooks/useServices.js +4 -0
  90. package/dist/hooks/useServices.js.map +1 -1
  91. package/dist/index.js +59 -15
  92. package/dist/index.js.map +1 -1
  93. package/dist/layout/LayoutCalculator.d.ts.map +1 -1
  94. package/dist/layout/LayoutCalculator.js +4 -1
  95. package/dist/layout/LayoutCalculator.js.map +1 -1
  96. package/dist/services/DmuxAttentionService.d.ts +33 -0
  97. package/dist/services/DmuxAttentionService.d.ts.map +1 -0
  98. package/dist/services/DmuxAttentionService.js +172 -0
  99. package/dist/services/DmuxAttentionService.js.map +1 -0
  100. package/dist/services/DmuxFocusService.d.ts +58 -0
  101. package/dist/services/DmuxFocusService.d.ts.map +1 -0
  102. package/dist/services/DmuxFocusService.js +671 -0
  103. package/dist/services/DmuxFocusService.js.map +1 -0
  104. package/dist/services/PaneAnalyzer.d.ts +11 -2
  105. package/dist/services/PaneAnalyzer.d.ts.map +1 -1
  106. package/dist/services/PaneAnalyzer.js +88 -22
  107. package/dist/services/PaneAnalyzer.js.map +1 -1
  108. package/dist/services/PopupManager.d.ts +31 -14
  109. package/dist/services/PopupManager.d.ts.map +1 -1
  110. package/dist/services/PopupManager.js +147 -68
  111. package/dist/services/PopupManager.js.map +1 -1
  112. package/dist/services/StatusDetector.d.ts +14 -0
  113. package/dist/services/StatusDetector.d.ts.map +1 -1
  114. package/dist/services/StatusDetector.js +60 -12
  115. package/dist/services/StatusDetector.js.map +1 -1
  116. package/dist/services/TmuxHookManager.d.ts.map +1 -1
  117. package/dist/services/TmuxHookManager.js +4 -2
  118. package/dist/services/TmuxHookManager.js.map +1 -1
  119. package/dist/services/TmuxService.d.ts +37 -2
  120. package/dist/services/TmuxService.d.ts.map +1 -1
  121. package/dist/services/TmuxService.js +138 -16
  122. package/dist/services/TmuxService.js.map +1 -1
  123. package/dist/types/activity.d.ts +4 -0
  124. package/dist/types/activity.d.ts.map +1 -0
  125. package/dist/types/activity.js +2 -0
  126. package/dist/types/activity.js.map +1 -0
  127. package/dist/types.d.ts +18 -1
  128. package/dist/types.d.ts.map +1 -1
  129. package/dist/utils/attachAgent.d.ts +4 -0
  130. package/dist/utils/attachAgent.d.ts.map +1 -1
  131. package/dist/utils/attachAgent.js +18 -7
  132. package/dist/utils/attachAgent.js.map +1 -1
  133. package/dist/utils/controlPaneRecovery.d.ts +2 -0
  134. package/dist/utils/controlPaneRecovery.d.ts.map +1 -0
  135. package/dist/utils/controlPaneRecovery.js +156 -0
  136. package/dist/utils/controlPaneRecovery.js.map +1 -0
  137. package/dist/utils/devWatchExit.d.ts +2 -0
  138. package/dist/utils/devWatchExit.d.ts.map +1 -0
  139. package/dist/utils/devWatchExit.js +10 -0
  140. package/dist/utils/devWatchExit.js.map +1 -0
  141. package/dist/utils/dmuxCommand.d.ts +3 -0
  142. package/dist/utils/dmuxCommand.d.ts.map +1 -0
  143. package/dist/utils/dmuxCommand.js +18 -0
  144. package/dist/utils/dmuxCommand.js.map +1 -0
  145. package/dist/utils/fileBrowser.d.ts +61 -0
  146. package/dist/utils/fileBrowser.d.ts.map +1 -0
  147. package/dist/utils/fileBrowser.js +567 -0
  148. package/dist/utils/fileBrowser.js.map +1 -0
  149. package/dist/utils/focusDetection.d.ts +38 -0
  150. package/dist/utils/focusDetection.d.ts.map +1 -0
  151. package/dist/utils/focusDetection.js +57 -0
  152. package/dist/utils/focusDetection.js.map +1 -0
  153. package/dist/utils/generated-agents-doc.d.ts +1 -1
  154. package/dist/utils/generated-agents-doc.js +1 -1
  155. package/dist/utils/git.d.ts +4 -0
  156. package/dist/utils/git.d.ts.map +1 -1
  157. package/dist/utils/git.js +15 -0
  158. package/dist/utils/git.js.map +1 -1
  159. package/dist/utils/layoutManager.d.ts +5 -1
  160. package/dist/utils/layoutManager.d.ts.map +1 -1
  161. package/dist/utils/layoutManager.js +103 -26
  162. package/dist/utils/layoutManager.js.map +1 -1
  163. package/dist/utils/mergeTargets.d.ts +17 -0
  164. package/dist/utils/mergeTargets.d.ts.map +1 -0
  165. package/dist/utils/mergeTargets.js +132 -0
  166. package/dist/utils/mergeTargets.js.map +1 -0
  167. package/dist/utils/mergeValidation.d.ts.map +1 -1
  168. package/dist/utils/mergeValidation.js +12 -5
  169. package/dist/utils/mergeValidation.js.map +1 -1
  170. package/dist/utils/notificationSoundPreview.d.ts +10 -0
  171. package/dist/utils/notificationSoundPreview.d.ts.map +1 -0
  172. package/dist/utils/notificationSoundPreview.js +54 -0
  173. package/dist/utils/notificationSoundPreview.js.map +1 -0
  174. package/dist/utils/notificationSounds.d.ts +17 -0
  175. package/dist/utils/notificationSounds.d.ts.map +1 -0
  176. package/dist/utils/notificationSounds.js +123 -0
  177. package/dist/utils/notificationSounds.js.map +1 -0
  178. package/dist/utils/paneAttentionHeuristics.d.ts +4 -0
  179. package/dist/utils/paneAttentionHeuristics.d.ts.map +1 -0
  180. package/dist/utils/paneAttentionHeuristics.js +135 -0
  181. package/dist/utils/paneAttentionHeuristics.js.map +1 -0
  182. package/dist/utils/paneCreation.d.ts +3 -1
  183. package/dist/utils/paneCreation.d.ts.map +1 -1
  184. package/dist/utils/paneCreation.js +23 -5
  185. package/dist/utils/paneCreation.js.map +1 -1
  186. package/dist/utils/paneVisibility.d.ts +12 -0
  187. package/dist/utils/paneVisibility.d.ts.map +1 -0
  188. package/dist/utils/paneVisibility.js +60 -0
  189. package/dist/utils/paneVisibility.js.map +1 -0
  190. package/dist/utils/processShutdown.d.ts +4 -0
  191. package/dist/utils/processShutdown.d.ts.map +1 -0
  192. package/dist/utils/processShutdown.js +27 -0
  193. package/dist/utils/processShutdown.js.map +1 -0
  194. package/dist/utils/promptStore.d.ts.map +1 -1
  195. package/dist/utils/promptStore.js +6 -0
  196. package/dist/utils/promptStore.js.map +1 -1
  197. package/dist/utils/reopenWorktree.d.ts.map +1 -1
  198. package/dist/utils/reopenWorktree.js +8 -0
  199. package/dist/utils/reopenWorktree.js.map +1 -1
  200. package/dist/utils/runtimePaths.d.ts +1 -0
  201. package/dist/utils/runtimePaths.d.ts.map +1 -1
  202. package/dist/utils/runtimePaths.js +3 -0
  203. package/dist/utils/runtimePaths.js.map +1 -1
  204. package/dist/utils/settingsManager.d.ts +3 -0
  205. package/dist/utils/settingsManager.d.ts.map +1 -1
  206. package/dist/utils/settingsManager.js +203 -11
  207. package/dist/utils/settingsManager.js.map +1 -1
  208. package/dist/utils/tmux.d.ts +5 -1
  209. package/dist/utils/tmux.d.ts.map +1 -1
  210. package/dist/utils/tmux.js +23 -5
  211. package/dist/utils/tmux.js.map +1 -1
  212. package/dist/utils/tmuxConfigOnboarding.js +1 -1
  213. package/dist/utils/tmuxConfigOnboarding.js.map +1 -1
  214. package/dist/utils/tmuxHookCommands.d.ts +14 -0
  215. package/dist/utils/tmuxHookCommands.d.ts.map +1 -0
  216. package/dist/utils/tmuxHookCommands.js +30 -0
  217. package/dist/utils/tmuxHookCommands.js.map +1 -0
  218. package/dist/utils/tmuxRuntimeCompatibility.d.ts +11 -0
  219. package/dist/utils/tmuxRuntimeCompatibility.d.ts.map +1 -0
  220. package/dist/utils/tmuxRuntimeCompatibility.js +71 -0
  221. package/dist/utils/tmuxRuntimeCompatibility.js.map +1 -0
  222. package/dist/utils/worktreeMetadata.d.ts +9 -0
  223. package/dist/utils/worktreeMetadata.d.ts.map +1 -0
  224. package/dist/utils/worktreeMetadata.js +60 -0
  225. package/dist/utils/worktreeMetadata.js.map +1 -0
  226. package/dist/workers/PaneWorker.js +64 -128
  227. package/dist/workers/PaneWorker.js.map +1 -1
  228. package/dist/workers/WorkerMessages.d.ts +4 -1
  229. package/dist/workers/WorkerMessages.d.ts.map +1 -1
  230. package/dist/workers/WorkerMessages.js.map +1 -1
  231. package/native/macos/dmux-helper-Info.plist +30 -0
  232. package/native/macos/dmux-helper-icon.png +0 -0
  233. package/native/macos/dmux-helper.swift +831 -0
  234. package/native/macos/sounds/dmux-braam.caf +0 -0
  235. package/native/macos/sounds/dmux-brass.caf +0 -0
  236. package/native/macos/sounds/dmux-ding-bell.caf +0 -0
  237. package/native/macos/sounds/dmux-future.caf +0 -0
  238. package/native/macos/sounds/dmux-harp.caf +0 -0
  239. package/native/macos/sounds/dmux-quiet-bells.caf +0 -0
  240. package/native/macos/sounds/dmux-sonar.caf +0 -0
  241. package/native/macos/sounds/dmux-success.caf +0 -0
  242. package/native/macos/sounds/dmux-triumphant-trumpet.caf +0 -0
  243. package/native/macos/sounds/dmux-war-horn.caf +0 -0
  244. package/package.json +3 -1
@@ -0,0 +1,567 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { spawnSync } from 'child_process';
4
+ import { highlight } from 'cli-highlight';
5
+ const MAX_GIT_BUFFER = 16 * 1024 * 1024;
6
+ const MAX_PREVIEW_BYTES = 200_000;
7
+ const DEPENDENCY_DIR_NAMES = new Set([
8
+ 'node_modules',
9
+ 'vendor',
10
+ '.pnpm',
11
+ '.pnpm-store',
12
+ '.yarn',
13
+ 'bower_components',
14
+ ]);
15
+ const STATUS_RANK = {
16
+ U: 100,
17
+ D: 90,
18
+ R: 80,
19
+ C: 75,
20
+ A: 70,
21
+ M: 60,
22
+ T: 50,
23
+ '??': 65,
24
+ '!!': 10,
25
+ '': 0,
26
+ };
27
+ function runGitText(rootPath, args, options) {
28
+ const result = spawnSync('git', args, {
29
+ cwd: rootPath,
30
+ encoding: 'utf-8',
31
+ maxBuffer: MAX_GIT_BUFFER,
32
+ });
33
+ if (result.status === 0) {
34
+ return result.stdout || '';
35
+ }
36
+ if (options?.allowFailure) {
37
+ return result.stdout || '';
38
+ }
39
+ throw new Error(result.stderr || `git ${args.join(' ')} failed`);
40
+ }
41
+ function decodeGitPath(rawPath) {
42
+ const trimmed = rawPath.trim();
43
+ if (!trimmed) {
44
+ return '';
45
+ }
46
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
47
+ try {
48
+ return JSON.parse(trimmed);
49
+ }
50
+ catch {
51
+ return trimmed.slice(1, -1);
52
+ }
53
+ }
54
+ return trimmed;
55
+ }
56
+ function normalizeStatusLabel(rawCode) {
57
+ const trimmed = rawCode.trim();
58
+ if (!trimmed) {
59
+ return '';
60
+ }
61
+ if (trimmed === '??' || trimmed === '!!') {
62
+ return trimmed;
63
+ }
64
+ const compact = rawCode.replace(/\s/g, '');
65
+ return compact.slice(0, 2);
66
+ }
67
+ function getStatusRank(label) {
68
+ if (!label) {
69
+ return 0;
70
+ }
71
+ if (label === '??' || label === '!!') {
72
+ return STATUS_RANK[label];
73
+ }
74
+ return label
75
+ .split('')
76
+ .reduce((highest, code) => Math.max(highest, STATUS_RANK[code] || 0), 0);
77
+ }
78
+ function pickDominantStatus(labels) {
79
+ let best = '';
80
+ let bestRank = 0;
81
+ for (const label of labels) {
82
+ const rank = getStatusRank(label);
83
+ if (rank > bestRank) {
84
+ best = label;
85
+ bestRank = rank;
86
+ }
87
+ }
88
+ return best;
89
+ }
90
+ function hasDependencySegment(relativePath) {
91
+ return relativePath
92
+ .split('/')
93
+ .some((segment) => DEPENDENCY_DIR_NAMES.has(segment));
94
+ }
95
+ function shouldIncludeDependencyPaths(filterQuery, activePath) {
96
+ const normalizedQuery = (filterQuery || '').toLowerCase();
97
+ if (normalizedQuery
98
+ && Array.from(DEPENDENCY_DIR_NAMES).some((name) => normalizedQuery.includes(name.toLowerCase()))) {
99
+ return true;
100
+ }
101
+ return !!activePath && hasDependencySegment(activePath);
102
+ }
103
+ function parseGitStatus(rootPath) {
104
+ const output = runGitText(rootPath, ['status', '--porcelain=v1', '--untracked-files=all'], {
105
+ allowFailure: true,
106
+ });
107
+ const statuses = new Map();
108
+ for (const line of output.split('\n')) {
109
+ if (!line.trim()) {
110
+ continue;
111
+ }
112
+ const statusCode = line.slice(0, 2);
113
+ let filePath = line.slice(3);
114
+ if ((statusCode.includes('R') || statusCode.includes('C')) && filePath.includes(' -> ')) {
115
+ filePath = filePath.split(' -> ').pop() || filePath;
116
+ }
117
+ const normalizedPath = decodeGitPath(filePath);
118
+ if (!normalizedPath || normalizedPath.startsWith('.git/') || normalizedPath.startsWith('.dmux/')) {
119
+ continue;
120
+ }
121
+ statuses.set(normalizedPath, statusCode);
122
+ }
123
+ return statuses;
124
+ }
125
+ function listRepositoryFiles(rootPath) {
126
+ const output = runGitText(rootPath, ['ls-files', '-z', '--cached', '--others', '--exclude-standard'], {
127
+ allowFailure: true,
128
+ });
129
+ return output
130
+ .split('\0')
131
+ .map((entry) => entry.trim())
132
+ .filter((entry) => entry.length > 0)
133
+ .filter((entry) => !entry.startsWith('.git/') && !entry.startsWith('.dmux/'));
134
+ }
135
+ export function loadBrowserSnapshot(rootPath) {
136
+ const repoFiles = new Set(listRepositoryFiles(rootPath));
137
+ const statuses = parseGitStatus(rootPath);
138
+ for (const filePath of statuses.keys()) {
139
+ repoFiles.add(filePath);
140
+ }
141
+ const files = Array.from(repoFiles)
142
+ .sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }))
143
+ .map((relativePath) => {
144
+ const statusCode = statuses.get(relativePath) || '';
145
+ const fullPath = path.join(rootPath, relativePath);
146
+ const exists = fs.existsSync(fullPath);
147
+ return {
148
+ path: relativePath,
149
+ name: path.basename(relativePath),
150
+ parentPath: getParentPath(relativePath),
151
+ exists,
152
+ changed: normalizeStatusLabel(statusCode) !== '',
153
+ statusCode,
154
+ statusLabel: normalizeStatusLabel(statusCode),
155
+ };
156
+ });
157
+ return {
158
+ rootPath,
159
+ files,
160
+ };
161
+ }
162
+ export function computeModifiedTimes(rootPath, relativePaths) {
163
+ const times = new Map();
164
+ for (const relativePath of relativePaths) {
165
+ const fullPath = path.join(rootPath, relativePath);
166
+ try {
167
+ const stats = fs.statSync(fullPath);
168
+ times.set(relativePath, stats.mtimeMs);
169
+ }
170
+ catch {
171
+ times.set(relativePath, 0);
172
+ }
173
+ }
174
+ return times;
175
+ }
176
+ function makeDirectoryNode(relativePath) {
177
+ return {
178
+ path: relativePath,
179
+ name: relativePath ? path.basename(relativePath) : '.',
180
+ parentPath: getParentPath(relativePath),
181
+ type: 'directory',
182
+ exists: true,
183
+ changed: false,
184
+ statusLabel: '',
185
+ sortModifiedAt: 0,
186
+ children: [],
187
+ };
188
+ }
189
+ function ensureDirectory(relativePath, nodeMap) {
190
+ const existing = nodeMap.get(relativePath);
191
+ if (existing) {
192
+ return existing;
193
+ }
194
+ const node = makeDirectoryNode(relativePath);
195
+ nodeMap.set(relativePath, node);
196
+ if (relativePath) {
197
+ const parent = ensureDirectory(getParentPath(relativePath) || '', nodeMap);
198
+ parent.children.push(node);
199
+ }
200
+ return node;
201
+ }
202
+ function compareNodes(left, right, sortMode) {
203
+ if (left.type !== right.type) {
204
+ return left.type === 'directory' ? -1 : 1;
205
+ }
206
+ if (sortMode === 'modified') {
207
+ const modifiedDiff = right.sortModifiedAt - left.sortModifiedAt;
208
+ if (modifiedDiff !== 0) {
209
+ return modifiedDiff;
210
+ }
211
+ }
212
+ if (sortMode === 'status') {
213
+ const rankDiff = getStatusRank(right.statusLabel) - getStatusRank(left.statusLabel);
214
+ if (rankDiff !== 0) {
215
+ return rankDiff;
216
+ }
217
+ }
218
+ return left.name.localeCompare(right.name, undefined, {
219
+ numeric: true,
220
+ sensitivity: 'base',
221
+ });
222
+ }
223
+ function compareSearchEntries(left, right, sortMode) {
224
+ if (left.type !== right.type) {
225
+ return left.type === 'directory' ? -1 : 1;
226
+ }
227
+ if (sortMode === 'modified') {
228
+ const modifiedDiff = right.sortModifiedAt - left.sortModifiedAt;
229
+ if (modifiedDiff !== 0) {
230
+ return modifiedDiff;
231
+ }
232
+ }
233
+ if (sortMode === 'status') {
234
+ const rankDiff = getStatusRank(right.statusLabel) - getStatusRank(left.statusLabel);
235
+ if (rankDiff !== 0) {
236
+ return rankDiff;
237
+ }
238
+ }
239
+ return left.path.localeCompare(right.path, undefined, {
240
+ numeric: true,
241
+ sensitivity: 'base',
242
+ });
243
+ }
244
+ function finalizeTree(node, sortMode) {
245
+ if (node.type === 'file') {
246
+ return node;
247
+ }
248
+ node.children = node.children.map((child) => finalizeTree(child, sortMode));
249
+ node.changed = node.children.some((child) => child.changed);
250
+ node.statusLabel = pickDominantStatus(node.children.map((child) => child.statusLabel));
251
+ node.sortModifiedAt = node.children.reduce((highest, child) => Math.max(highest, child.sortModifiedAt), 0);
252
+ node.children.sort((left, right) => compareNodes(left, right, sortMode));
253
+ return node;
254
+ }
255
+ function isFuzzyMatch(query, candidate) {
256
+ const normalizedQuery = query.trim().toLowerCase();
257
+ if (!normalizedQuery) {
258
+ return true;
259
+ }
260
+ const normalizedCandidate = candidate.toLowerCase();
261
+ if (normalizedCandidate.includes(normalizedQuery)) {
262
+ return true;
263
+ }
264
+ let queryIndex = 0;
265
+ for (const char of normalizedCandidate) {
266
+ if (char === normalizedQuery[queryIndex]) {
267
+ queryIndex += 1;
268
+ if (queryIndex === normalizedQuery.length) {
269
+ return true;
270
+ }
271
+ }
272
+ }
273
+ return false;
274
+ }
275
+ function filterTreeNodes(nodes, query) {
276
+ const filtered = [];
277
+ for (const node of nodes) {
278
+ const matchesSelf = isFuzzyMatch(query, node.path || node.name);
279
+ if (node.type === 'file') {
280
+ if (matchesSelf) {
281
+ filtered.push(node);
282
+ }
283
+ continue;
284
+ }
285
+ const filteredChildren = filterTreeNodes(node.children, query);
286
+ if (matchesSelf) {
287
+ filtered.push(node);
288
+ continue;
289
+ }
290
+ if (filteredChildren.length > 0) {
291
+ filtered.push({
292
+ ...node,
293
+ children: filteredChildren,
294
+ });
295
+ }
296
+ }
297
+ return filtered;
298
+ }
299
+ export function buildBrowserTree(snapshot, options) {
300
+ const rootNode = makeDirectoryNode('');
301
+ const nodeMap = new Map([['', rootNode]]);
302
+ const modifiedTimes = options.modifiedTimes || new Map();
303
+ const filterQuery = options.filterQuery?.trim() || '';
304
+ const includeDependencyPaths = shouldIncludeDependencyPaths(filterQuery, options.activePath);
305
+ for (const file of snapshot.files) {
306
+ if (options.filterMode === 'diffed' && !file.changed) {
307
+ continue;
308
+ }
309
+ if (!includeDependencyPaths && hasDependencySegment(file.path)) {
310
+ continue;
311
+ }
312
+ const parentPath = file.parentPath || '';
313
+ const parent = ensureDirectory(parentPath, nodeMap);
314
+ const fileNode = {
315
+ path: file.path,
316
+ name: file.name,
317
+ parentPath: file.parentPath,
318
+ type: 'file',
319
+ exists: file.exists,
320
+ changed: file.changed,
321
+ statusLabel: file.statusLabel,
322
+ sortModifiedAt: modifiedTimes.get(file.path) || 0,
323
+ children: [],
324
+ };
325
+ parent.children.push(fileNode);
326
+ }
327
+ const finalizedChildren = finalizeTree(rootNode, options.sortMode).children;
328
+ if (!filterQuery) {
329
+ return finalizedChildren;
330
+ }
331
+ return filterTreeNodes(finalizedChildren, filterQuery);
332
+ }
333
+ export function buildBrowserSearchEntries(snapshot, options) {
334
+ const filterQuery = options.filterQuery?.trim() || '';
335
+ if (!filterQuery) {
336
+ return [];
337
+ }
338
+ const modifiedTimes = options.modifiedTimes || new Map();
339
+ const includeDependencyPaths = shouldIncludeDependencyPaths(filterQuery, options.activePath);
340
+ const directoryEntries = new Map();
341
+ const fileEntries = [];
342
+ for (const file of snapshot.files) {
343
+ if (options.filterMode === 'diffed' && !file.changed) {
344
+ continue;
345
+ }
346
+ if (!includeDependencyPaths && hasDependencySegment(file.path)) {
347
+ continue;
348
+ }
349
+ const fileModifiedAt = modifiedTimes.get(file.path) || 0;
350
+ if (isFuzzyMatch(filterQuery, file.path)) {
351
+ fileEntries.push({
352
+ path: file.path,
353
+ name: file.name,
354
+ parentPath: file.parentPath,
355
+ type: 'file',
356
+ exists: file.exists,
357
+ changed: file.changed,
358
+ statusLabel: file.statusLabel,
359
+ sortModifiedAt: fileModifiedAt,
360
+ });
361
+ }
362
+ let currentDirectory = file.parentPath;
363
+ while (currentDirectory) {
364
+ const existing = directoryEntries.get(currentDirectory);
365
+ if (existing) {
366
+ existing.changed = existing.changed || file.changed;
367
+ existing.statusLabel = pickDominantStatus([existing.statusLabel, file.statusLabel]);
368
+ existing.sortModifiedAt = Math.max(existing.sortModifiedAt, fileModifiedAt);
369
+ }
370
+ else {
371
+ directoryEntries.set(currentDirectory, {
372
+ path: currentDirectory,
373
+ name: path.basename(currentDirectory),
374
+ parentPath: getParentPath(currentDirectory),
375
+ type: 'directory',
376
+ exists: true,
377
+ changed: file.changed,
378
+ statusLabel: file.changed ? pickDominantStatus([file.statusLabel]) : '',
379
+ sortModifiedAt: fileModifiedAt,
380
+ });
381
+ }
382
+ currentDirectory = getParentPath(currentDirectory);
383
+ }
384
+ }
385
+ const matches = [
386
+ ...Array.from(directoryEntries.values()).filter((entry) => isFuzzyMatch(filterQuery, entry.path)),
387
+ ...fileEntries,
388
+ ].sort((left, right) => compareSearchEntries(left, right, options.sortMode));
389
+ return matches.map((entry) => ({
390
+ path: entry.path,
391
+ name: entry.name,
392
+ parentPath: entry.parentPath,
393
+ type: entry.type,
394
+ exists: entry.exists,
395
+ changed: entry.changed,
396
+ statusLabel: entry.type === 'directory' ? (entry.changed ? 'M' : '') : entry.statusLabel,
397
+ isExpanded: false,
398
+ displayLabel: entry.type === 'directory' ? `${entry.path}/` : entry.path,
399
+ }));
400
+ }
401
+ function buildDisplayLabel(node, ancestorsHaveNext, isLast, isExpanded) {
402
+ const branchPrefix = ancestorsHaveNext
403
+ .map((hasNext) => (hasNext ? '│ ' : ' '))
404
+ .join('');
405
+ const connector = isLast ? '└─' : '├─';
406
+ if (node.type === 'directory') {
407
+ const icon = isExpanded ? '' : '';
408
+ return `${branchPrefix}${connector}${icon} ${node.name}/`;
409
+ }
410
+ const missingSuffix = node.exists ? '' : ' [missing]';
411
+ return `${branchPrefix}${connector} ${node.name}${missingSuffix}`;
412
+ }
413
+ function flattenNodes(nodes, expandedPaths, ancestorsHaveNext = [], options = {}) {
414
+ const rows = [];
415
+ nodes.forEach((node, index) => {
416
+ const isLast = index === nodes.length - 1;
417
+ const isExpanded = node.type === 'directory'
418
+ && (options.forceExpandDirectories || expandedPaths.has(node.path));
419
+ rows.push({
420
+ path: node.path,
421
+ name: node.name,
422
+ parentPath: node.parentPath,
423
+ type: node.type,
424
+ exists: node.exists,
425
+ changed: node.changed,
426
+ statusLabel: node.type === 'directory' ? (node.changed ? 'M' : '') : node.statusLabel,
427
+ isExpanded,
428
+ displayLabel: buildDisplayLabel(node, ancestorsHaveNext, isLast, isExpanded),
429
+ });
430
+ if (node.type === 'directory' && isExpanded && node.children.length > 0) {
431
+ rows.push(...flattenNodes(node.children, expandedPaths, [...ancestorsHaveNext, !isLast], options));
432
+ }
433
+ });
434
+ return rows;
435
+ }
436
+ export function flattenBrowserTree(nodes, expandedPaths, options = {}) {
437
+ return flattenNodes(nodes, expandedPaths, [], options);
438
+ }
439
+ export function getParentPath(relativePath) {
440
+ if (!relativePath) {
441
+ return null;
442
+ }
443
+ const parent = path.dirname(relativePath);
444
+ return parent === '.' ? null : parent;
445
+ }
446
+ export function getAncestorPaths(relativePath) {
447
+ const ancestors = [];
448
+ let current = getParentPath(relativePath);
449
+ while (current) {
450
+ ancestors.unshift(current);
451
+ current = getParentPath(current);
452
+ }
453
+ return ancestors;
454
+ }
455
+ function readPreviewChunk(fullPath) {
456
+ const stats = fs.statSync(fullPath);
457
+ const fileSize = stats.size;
458
+ const bytesToRead = Math.min(fileSize, MAX_PREVIEW_BYTES);
459
+ const fd = fs.openSync(fullPath, 'r');
460
+ try {
461
+ const buffer = Buffer.alloc(bytesToRead);
462
+ fs.readSync(fd, buffer, 0, bytesToRead, 0);
463
+ return {
464
+ buffer,
465
+ truncated: fileSize > MAX_PREVIEW_BYTES,
466
+ };
467
+ }
468
+ finally {
469
+ fs.closeSync(fd);
470
+ }
471
+ }
472
+ export function loadCodePreview(rootPath, relativePath) {
473
+ const fullPath = path.join(rootPath, relativePath);
474
+ if (!fs.existsSync(fullPath)) {
475
+ return ['File no longer exists in this worktree.', '', 'Press d to inspect its diff.'];
476
+ }
477
+ try {
478
+ const { buffer, truncated } = readPreviewChunk(fullPath);
479
+ if (buffer.includes(0)) {
480
+ return ['Binary file preview is disabled.', '', 'Open the file externally if needed.'];
481
+ }
482
+ const sourceText = buffer.toString('utf-8');
483
+ const highlighted = highlight(sourceText, {
484
+ ignoreIllegals: true,
485
+ });
486
+ const suffix = truncated ? '\n\n[truncated preview]' : '';
487
+ return `${highlighted}${suffix}`.split('\n');
488
+ }
489
+ catch (error) {
490
+ return [
491
+ `Failed to read ${relativePath}`,
492
+ '',
493
+ error instanceof Error ? error.message : String(error),
494
+ ];
495
+ }
496
+ }
497
+ function runGitPreview(rootPath, args) {
498
+ const result = spawnSync('git', args, {
499
+ cwd: rootPath,
500
+ encoding: 'utf-8',
501
+ maxBuffer: MAX_GIT_BUFFER,
502
+ });
503
+ if (result.status === 0) {
504
+ return result.stdout || '';
505
+ }
506
+ return result.stdout || result.stderr || '';
507
+ }
508
+ export function loadDiffPreview(rootPath, relativePath, statusLabel) {
509
+ const fullPath = path.join(rootPath, relativePath);
510
+ let diffOutput = '';
511
+ if (statusLabel === '??' && fs.existsSync(fullPath)) {
512
+ diffOutput = runGitPreview(rootPath, [
513
+ 'diff',
514
+ '--no-index',
515
+ '--color=always',
516
+ '--',
517
+ '/dev/null',
518
+ fullPath,
519
+ ]);
520
+ }
521
+ else {
522
+ diffOutput = runGitPreview(rootPath, [
523
+ 'diff',
524
+ '--no-ext-diff',
525
+ '--color=always',
526
+ 'HEAD',
527
+ '--',
528
+ relativePath,
529
+ ]);
530
+ }
531
+ const trimmed = diffOutput.trimEnd();
532
+ if (!trimmed) {
533
+ return ['No diff against HEAD for this file.'];
534
+ }
535
+ return trimmed.split('\n');
536
+ }
537
+ export function getStatusColor(statusLabel) {
538
+ if (!statusLabel) {
539
+ return undefined;
540
+ }
541
+ if (statusLabel === '??') {
542
+ return 'cyan';
543
+ }
544
+ if (statusLabel.includes('U') || statusLabel.includes('D')) {
545
+ return 'red';
546
+ }
547
+ if (statusLabel.includes('A')) {
548
+ return 'green';
549
+ }
550
+ if (statusLabel.includes('R') || statusLabel.includes('C')) {
551
+ return 'blue';
552
+ }
553
+ if (statusLabel.includes('M') || statusLabel.includes('T')) {
554
+ return 'yellow';
555
+ }
556
+ return undefined;
557
+ }
558
+ export function getCurrentDirectoryPath(rootPath, entry) {
559
+ if (!entry) {
560
+ return rootPath;
561
+ }
562
+ if (entry.type === 'directory') {
563
+ return path.join(rootPath, entry.path);
564
+ }
565
+ return path.join(rootPath, entry.parentPath || '');
566
+ }
567
+ //# sourceMappingURL=fileBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileBrowser.js","sourceRoot":"","sources":["../../src/utils/fileBrowser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface DmuxHelperSubscribeMessage {
2
+ type: 'subscribe';
3
+ instanceId: string;
4
+ titleToken: string;
5
+ bundleId?: string;
6
+ terminalProgram?: string;
7
+ }
8
+ export interface DmuxHelperNotifyMessage {
9
+ type: 'notify';
10
+ title: string;
11
+ subtitle?: string;
12
+ body: string;
13
+ soundName?: string;
14
+ titleToken?: string;
15
+ bundleId?: string;
16
+ tmuxPaneId?: string;
17
+ tmuxSocketPath?: string;
18
+ }
19
+ export interface DmuxHelperPreviewSoundMessage {
20
+ type: 'preview-sound';
21
+ soundName?: string;
22
+ }
23
+ export interface DmuxHelperFocusStateMessage {
24
+ type: 'focus-state';
25
+ instanceId: string;
26
+ fullyFocused: boolean;
27
+ accessibilityTrusted: boolean;
28
+ matchedTitleToken: boolean;
29
+ frontmostAppBundleId?: string;
30
+ focusedWindowTitle?: string;
31
+ }
32
+ export declare function buildFocusToken(instanceId: string): string;
33
+ export declare function buildFocusWindowTitle(projectName: string, token: string): string;
34
+ export declare function buildTerminalTitleSequence(title: string, insideTmux: boolean): string;
35
+ export declare function mapTerminalProgramToBundleId(termProgram?: string): string | undefined;
36
+ export declare function parseTmuxSocketPath(tmuxEnv?: string): string | undefined;
37
+ export declare function supportsNativeDmuxHelper(platform?: NodeJS.Platform): boolean;
38
+ //# sourceMappingURL=focusDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusDetection.d.ts","sourceRoot":"","sources":["../../src/utils/focusDetection.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAQrF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8BrF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOxE;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAE9F"}