dmux 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +119 -183
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +15 -40
- package/dist/actions/implementations/closeAction.js.map +1 -1
- package/dist/actions/types.d.ts +0 -1
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +7 -0
- package/dist/actions/types.js.map +1 -1
- package/dist/components/panes/PanesGrid.d.ts +2 -0
- package/dist/components/panes/PanesGrid.d.ts.map +1 -1
- package/dist/components/panes/PanesGrid.js +122 -42
- package/dist/components/panes/PanesGrid.js.map +1 -1
- package/dist/components/popups/agentChoicePopup.d.ts +1 -1
- package/dist/components/popups/agentChoicePopup.js +37 -23
- package/dist/components/popups/agentChoicePopup.js.map +1 -1
- package/dist/components/popups/newPanePopup.js +4 -3
- package/dist/components/popups/newPanePopup.js.map +1 -1
- package/dist/components/popups/shortcutsPopup.js +6 -4
- package/dist/components/popups/shortcutsPopup.js.map +1 -1
- package/dist/components/ui/FooterHelp.d.ts +0 -8
- package/dist/components/ui/FooterHelp.d.ts.map +1 -1
- package/dist/components/ui/FooterHelp.js +5 -24
- package/dist/components/ui/FooterHelp.js.map +1 -1
- package/dist/hooks/useActionSystem.d.ts +1 -2
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +9 -25
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useAgentDetection.d.ts +2 -1
- package/dist/hooks/useAgentDetection.d.ts.map +1 -1
- package/dist/hooks/useAgentDetection.js.map +1 -1
- package/dist/hooks/useAgentStatus.d.ts.map +1 -1
- package/dist/hooks/useAgentStatus.js +18 -6
- package/dist/hooks/useAgentStatus.js.map +1 -1
- package/dist/hooks/useInputHandling.d.ts +6 -9
- package/dist/hooks/useInputHandling.d.ts.map +1 -1
- package/dist/hooks/useInputHandling.js +91 -69
- package/dist/hooks/useInputHandling.js.map +1 -1
- package/dist/hooks/useLayoutManagement.d.ts +1 -2
- package/dist/hooks/useLayoutManagement.d.ts.map +1 -1
- package/dist/hooks/useLayoutManagement.js +2 -9
- package/dist/hooks/useLayoutManagement.js.map +1 -1
- package/dist/hooks/useNavigation.d.ts +1 -1
- package/dist/hooks/useNavigation.d.ts.map +1 -1
- package/dist/hooks/useNavigation.js +29 -36
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +10 -4
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +20 -49
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneLoading.d.ts.map +1 -1
- package/dist/hooks/usePaneLoading.js +21 -23
- package/dist/hooks/usePaneLoading.js.map +1 -1
- package/dist/hooks/usePaneRunner.d.ts +1 -1
- package/dist/hooks/usePaneRunner.d.ts.map +1 -1
- package/dist/hooks/usePaneRunner.js +5 -2
- package/dist/hooks/usePaneRunner.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts.map +1 -1
- package/dist/hooks/usePaneSync.js +29 -20
- package/dist/hooks/usePaneSync.js.map +1 -1
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +61 -65
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useServices.d.ts +4 -7
- package/dist/hooks/useServices.d.ts.map +1 -1
- package/dist/hooks/useServices.js +0 -4
- package/dist/hooks/useServices.js.map +1 -1
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +0 -14
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts +1 -2
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +2 -8
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +260 -51
- package/dist/index.js.map +1 -1
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +381 -236
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/routes/panesRoutes.d.ts.map +1 -1
- package/dist/server/routes/panesRoutes.js +16 -2
- package/dist/server/routes/panesRoutes.js.map +1 -1
- package/dist/services/PopupManager.d.ts +5 -7
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +8 -42
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/types.d.ts +2 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agentLaunch.d.ts +12 -0
- package/dist/utils/agentLaunch.d.ts.map +1 -0
- package/dist/utils/agentLaunch.js +56 -0
- package/dist/utils/agentLaunch.js.map +1 -0
- package/dist/utils/paneCreation.d.ts +4 -0
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +33 -17
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/paneGrouping.d.ts +15 -0
- package/dist/utils/paneGrouping.d.ts.map +1 -0
- package/dist/utils/paneGrouping.js +24 -0
- package/dist/utils/paneGrouping.js.map +1 -0
- package/dist/utils/paneProject.d.ts +16 -0
- package/dist/utils/paneProject.d.ts.map +1 -0
- package/dist/utils/paneProject.js +40 -0
- package/dist/utils/paneProject.js.map +1 -0
- package/dist/utils/paneRebinding.d.ts.map +1 -1
- package/dist/utils/paneRebinding.js +13 -7
- package/dist/utils/paneRebinding.js.map +1 -1
- package/dist/utils/paneTitle.d.ts +13 -0
- package/dist/utils/paneTitle.d.ts.map +1 -0
- package/dist/utils/paneTitle.js +48 -0
- package/dist/utils/paneTitle.js.map +1 -0
- package/dist/utils/projectActions.d.ts +32 -0
- package/dist/utils/projectActions.d.ts.map +1 -0
- package/dist/utils/projectActions.js +108 -0
- package/dist/utils/projectActions.js.map +1 -0
- package/dist/utils/projectRoot.d.ts +10 -0
- package/dist/utils/projectRoot.d.ts.map +1 -0
- package/dist/utils/projectRoot.js +66 -0
- package/dist/utils/projectRoot.js.map +1 -0
- package/dist/utils/reopenWorktree.d.ts +2 -0
- package/dist/utils/reopenWorktree.d.ts.map +1 -1
- package/dist/utils/reopenWorktree.js +14 -4
- package/dist/utils/reopenWorktree.js.map +1 -1
- package/dist/utils/shellPaneDetection.d.ts.map +1 -1
- package/dist/utils/shellPaneDetection.js +21 -0
- package/dist/utils/shellPaneDetection.js.map +1 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +0 -8
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/tmuxConfigOnboarding.d.ts +19 -0
- package/dist/utils/tmuxConfigOnboarding.d.ts.map +1 -0
- package/dist/utils/tmuxConfigOnboarding.js +299 -0
- package/dist/utils/tmuxConfigOnboarding.js.map +1 -0
- package/dist/workers/panePollingWorker.js +0 -6
- package/dist/workers/panePollingWorker.js.map +1 -1
- package/package.json +1 -1
package/dist/hooks/usePanes.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState, useRef } from 'react';
|
|
2
|
+
import path from 'path';
|
|
2
3
|
import PQueue from 'p-queue';
|
|
3
4
|
import { LogService } from '../services/LogService.js';
|
|
4
5
|
import { PANE_POLLING_INTERVAL } from '../constants/timing.js';
|
|
@@ -16,88 +17,82 @@ async function withWriteLock(operation) {
|
|
|
16
17
|
export default function usePanes(panesFile, skipLoading, sessionName, controlPaneId, useHooks // undefined = not yet decided, true = use hooks, false = use polling
|
|
17
18
|
) {
|
|
18
19
|
const [panes, setPanes] = useState([]);
|
|
20
|
+
const panesRef = useRef([]);
|
|
19
21
|
const [isLoading, setIsLoading] = useState(true);
|
|
20
22
|
const [eventMode, setEventMode] = useState('disabled');
|
|
21
23
|
const initialLoadComplete = useRef(false);
|
|
22
24
|
const isLoadingPanes = useRef(false); // Guard against concurrent loadPanes calls
|
|
25
|
+
const pendingLoad = useRef(false);
|
|
23
26
|
const paneEventService = useRef(PaneEventService.getInstance());
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
panesRef.current = panes;
|
|
29
|
+
}, [panes]);
|
|
24
30
|
const loadPanes = async () => {
|
|
25
31
|
if (skipLoading)
|
|
26
32
|
return;
|
|
27
33
|
// Prevent concurrent loadPanes calls which can cause race conditions
|
|
28
34
|
// and duplicate pane detection
|
|
29
35
|
if (isLoadingPanes.current) {
|
|
36
|
+
pendingLoad.current = true;
|
|
30
37
|
return;
|
|
31
38
|
}
|
|
32
39
|
isLoadingPanes.current = true;
|
|
33
40
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return; // Exit early for initial load
|
|
45
|
-
}
|
|
46
|
-
// Rebind and filter panes (removes dead shell panes, keeps worktree panes)
|
|
47
|
-
const { activePanes, shellPanesRemoved, worktreePanesToRecreate } = rebindAndFilterPanes(loadedPanes, titleToId, allPaneIds, !initialLoadComplete.current);
|
|
48
|
-
// Recreate worktree panes that were killed (e.g., via Ctrl+b x)
|
|
49
|
-
let finalPanes = activePanes;
|
|
50
|
-
if (worktreePanesToRecreate.length > 0) {
|
|
51
|
-
finalPanes = await recreateKilledWorktreePanes(activePanes, allPaneIds, panesFile);
|
|
52
|
-
// Re-fetch pane IDs after recreation
|
|
53
|
-
const freshData = await fetchTmuxPaneIds();
|
|
54
|
-
const updatedIds = freshData.allPaneIds;
|
|
55
|
-
const updatedTitleToId = freshData.titleToId;
|
|
56
|
-
// Re-rebind after recreation using the utility function
|
|
57
|
-
finalPanes = finalPanes.map(p => rebindPaneByTitle(p, updatedTitleToId, updatedIds));
|
|
58
|
-
}
|
|
59
|
-
// Detect untracked panes (only after initial load)
|
|
60
|
-
let shellPanesAdded = false;
|
|
61
|
-
if (initialLoadComplete.current) {
|
|
62
|
-
// LogService.getInstance().debug(
|
|
63
|
-
// `Shell detection check: allPaneIds=${allPaneIds.length}, initialLoadComplete=${initialLoadComplete.current}`,
|
|
64
|
-
// 'shellDetection'
|
|
65
|
-
// );
|
|
66
|
-
const { updatedPanes, shellPanesAdded: added } = await detectAndAddShellPanes(panesFile, finalPanes, allPaneIds);
|
|
67
|
-
finalPanes = updatedPanes;
|
|
68
|
-
shellPanesAdded = added;
|
|
69
|
-
}
|
|
70
|
-
// Destroy welcome pane if transitioning from 0 to >0 panes
|
|
71
|
-
await destroyWelcomePaneIfNeeded(panesFile, panes.length, finalPanes.length);
|
|
72
|
-
// Enforce pane titles always match slug (worktree name)
|
|
73
|
-
await enforcePaneTitles(finalPanes, allPaneIds);
|
|
74
|
-
// Check if panes changed (compare IDs and paneIds only)
|
|
75
|
-
const currentPaneIds = panes.map(p => `${p.id}:${p.paneId}`).sort().join(',');
|
|
76
|
-
const newPaneIds = finalPanes.map(p => `${p.id}:${p.paneId}`).sort().join(',');
|
|
77
|
-
// Check if IDs were remapped
|
|
78
|
-
const idsChanged = finalPanes.some((pane, idx) => loadedPanes[idx] && loadedPanes[idx].paneId !== pane.paneId);
|
|
79
|
-
// Update state and save if panes changed OR if shell panes were added/removed
|
|
80
|
-
if (currentPaneIds !== newPaneIds || shellPanesAdded || shellPanesRemoved) {
|
|
81
|
-
setPanes(finalPanes);
|
|
82
|
-
// Save to file if IDs were remapped OR if shell panes were added/removed
|
|
83
|
-
if (idsChanged || shellPanesAdded || shellPanesRemoved) {
|
|
84
|
-
// LogService.getInstance().debug(
|
|
85
|
-
// `Saving config: idsChanged=${idsChanged}, shellPanesAdded=${shellPanesAdded}, shellPanesRemoved=${shellPanesRemoved}, finalPanes=${finalPanes.length}`,
|
|
86
|
-
// 'shellDetection'
|
|
87
|
-
// );
|
|
88
|
-
await saveUpdatedPaneConfig(panesFile, finalPanes, withWriteLock);
|
|
89
|
-
// If shell panes were removed and we now have 0 panes, recreate welcome pane
|
|
90
|
-
if (shellPanesRemoved && finalPanes.length === 0) {
|
|
91
|
-
await handleLastPaneRemoval(process.cwd());
|
|
92
|
-
}
|
|
41
|
+
do {
|
|
42
|
+
pendingLoad.current = false;
|
|
43
|
+
// Load panes from file and rebind IDs based on tmux state
|
|
44
|
+
const { panes: loadedPanes, allPaneIds, titleToId } = await loadAndProcessPanes(panesFile, !initialLoadComplete.current);
|
|
45
|
+
// For initial load, set the loaded panes and mark as complete
|
|
46
|
+
if (!initialLoadComplete.current) {
|
|
47
|
+
panesRef.current = loadedPanes;
|
|
48
|
+
setPanes(loadedPanes);
|
|
49
|
+
initialLoadComplete.current = true;
|
|
50
|
+
continue;
|
|
93
51
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
52
|
+
// Rebind and filter panes (removes dead shell panes, keeps worktree panes)
|
|
53
|
+
const { activePanes, shellPanesRemoved, worktreePanesToRecreate } = rebindAndFilterPanes(loadedPanes, titleToId, allPaneIds, !initialLoadComplete.current);
|
|
54
|
+
// Recreate worktree panes that were killed (e.g., via Ctrl+b x)
|
|
55
|
+
let finalPanes = activePanes;
|
|
56
|
+
if (worktreePanesToRecreate.length > 0) {
|
|
57
|
+
finalPanes = await recreateKilledWorktreePanes(activePanes, allPaneIds, panesFile);
|
|
58
|
+
// Re-fetch pane IDs after recreation
|
|
59
|
+
const freshData = await fetchTmuxPaneIds();
|
|
60
|
+
const updatedIds = freshData.allPaneIds;
|
|
61
|
+
const updatedTitleToId = freshData.titleToId;
|
|
62
|
+
// Re-rebind after recreation using the utility function
|
|
63
|
+
finalPanes = finalPanes.map(p => rebindPaneByTitle(p, updatedTitleToId, updatedIds));
|
|
99
64
|
}
|
|
100
|
-
|
|
65
|
+
// Detect untracked panes (only after initial load)
|
|
66
|
+
let shellPanesAdded = false;
|
|
67
|
+
if (initialLoadComplete.current) {
|
|
68
|
+
const { updatedPanes, shellPanesAdded: added } = await detectAndAddShellPanes(panesFile, finalPanes, allPaneIds);
|
|
69
|
+
finalPanes = updatedPanes;
|
|
70
|
+
shellPanesAdded = added;
|
|
71
|
+
}
|
|
72
|
+
// Destroy welcome pane if transitioning from 0 to >0 panes
|
|
73
|
+
await destroyWelcomePaneIfNeeded(panesFile, panesRef.current.length, finalPanes.length);
|
|
74
|
+
// Enforce pane titles always match slug (worktree name)
|
|
75
|
+
await enforcePaneTitles(finalPanes, allPaneIds);
|
|
76
|
+
// Check if panes changed (compare IDs and paneIds only)
|
|
77
|
+
const currentPaneIds = panesRef.current.map(p => `${p.id}:${p.paneId}`).sort().join(',');
|
|
78
|
+
const newPaneIds = finalPanes.map(p => `${p.id}:${p.paneId}`).sort().join(',');
|
|
79
|
+
// Check if IDs were remapped
|
|
80
|
+
const idsChanged = finalPanes.some((pane, idx) => loadedPanes[idx] && loadedPanes[idx].paneId !== pane.paneId);
|
|
81
|
+
// Update state and save if panes changed OR if shell panes were added/removed
|
|
82
|
+
if (currentPaneIds !== newPaneIds || shellPanesAdded || shellPanesRemoved) {
|
|
83
|
+
panesRef.current = finalPanes;
|
|
84
|
+
setPanes(finalPanes);
|
|
85
|
+
// Save to file if IDs were remapped OR if shell panes were added/removed
|
|
86
|
+
if (idsChanged || shellPanesAdded || shellPanesRemoved) {
|
|
87
|
+
await saveUpdatedPaneConfig(panesFile, finalPanes, withWriteLock);
|
|
88
|
+
// If shell panes were removed and we now have 0 panes, recreate welcome pane
|
|
89
|
+
if (shellPanesRemoved && finalPanes.length === 0) {
|
|
90
|
+
const sessionProjectRoot = path.dirname(path.dirname(panesFile));
|
|
91
|
+
await handleLastPaneRemoval(sessionProjectRoot);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
} while (pendingLoad.current);
|
|
101
96
|
}
|
|
102
97
|
catch (error) {
|
|
103
98
|
// Silently ignore errors during pane loading to prevent UI crashes
|
|
@@ -112,6 +107,7 @@ export default function usePanes(panesFile, skipLoading, sessionName, controlPan
|
|
|
112
107
|
};
|
|
113
108
|
const savePanes = async (newPanes) => {
|
|
114
109
|
const updatedPanes = await savePanesToFile(panesFile, newPanes, withWriteLock);
|
|
110
|
+
panesRef.current = updatedPanes;
|
|
115
111
|
setPanes(updatedPanes);
|
|
116
112
|
};
|
|
117
113
|
// Initialize PaneEventService when session info is available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePanes.js","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAsB,MAAM,iCAAiC,CAAC;AAEvF,0EAA0E;AAC1E,gFAAgF;AAChF,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AAEnD,KAAK,UAAU,aAAa,CAAI,SAA2B;IACzD,OAAO,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAUD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC9B,SAAiB,EACjB,WAAoB,EACpB,WAAoB,EACpB,aAAsB,EACtB,QAAkB,CAAC,qEAAqE;;IAExF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,UAAU,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C;IACjF,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhE,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,WAAW;YAAE,OAAO;QAExB,qEAAqE;QACrE,+BAA+B;QAC/B,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAE9B,IAAI,CAAC;YACH,0DAA0D;
|
|
1
|
+
{"version":3,"file":"usePanes.js","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { PopupManager } from "../services/PopupManager.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ProjectSettings } from "../types.js";
|
|
3
|
+
import type { AgentName } from "../utils/agentLaunch.js";
|
|
3
4
|
interface UseServicesProps {
|
|
4
5
|
sidebarWidth: number;
|
|
5
6
|
projectRoot: string;
|
|
6
7
|
popupsSupported: boolean;
|
|
7
8
|
terminalWidth: number;
|
|
8
9
|
terminalHeight: number;
|
|
9
|
-
availableAgents:
|
|
10
|
-
agentChoice:
|
|
11
|
-
serverPort?: number;
|
|
12
|
-
server?: any;
|
|
10
|
+
availableAgents: AgentName[];
|
|
11
|
+
agentChoice: AgentName | null;
|
|
13
12
|
settingsManager: any;
|
|
14
13
|
projectSettings: ProjectSettings;
|
|
15
14
|
setStatusMessage: (msg: string) => void;
|
|
16
15
|
setIgnoreInput: (ignore: boolean) => void;
|
|
17
|
-
savePanes: (panes: DmuxPane[]) => Promise<void>;
|
|
18
|
-
loadPanes: () => Promise<void>;
|
|
19
16
|
}
|
|
20
17
|
export declare function useServices(props: UseServicesProps): {
|
|
21
18
|
popupManager: PopupManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useServices.d.ts","sourceRoot":"","sources":["../../src/hooks/useServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA2B,MAAM,6BAA6B,CAAA;AACnF,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useServices.d.ts","sourceRoot":"","sources":["../../src/hooks/useServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA2B,MAAM,6BAA6B,CAAA;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,UAAU,gBAAgB;IAExB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,SAAS,EAAE,CAAA;IAC5B,WAAW,EAAE,SAAS,GAAG,IAAI,CAAA;IAC7B,eAAe,EAAE,GAAG,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAGhC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CAC1C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB;;EAqClD"}
|
|
@@ -11,8 +11,6 @@ export function useServices(props) {
|
|
|
11
11
|
terminalHeight: props.terminalHeight,
|
|
12
12
|
availableAgents: props.availableAgents,
|
|
13
13
|
agentChoice: props.agentChoice,
|
|
14
|
-
serverPort: props.serverPort,
|
|
15
|
-
server: props.server,
|
|
16
14
|
settingsManager: props.settingsManager,
|
|
17
15
|
projectSettings: props.projectSettings,
|
|
18
16
|
};
|
|
@@ -25,8 +23,6 @@ export function useServices(props) {
|
|
|
25
23
|
props.terminalHeight,
|
|
26
24
|
props.availableAgents,
|
|
27
25
|
props.agentChoice,
|
|
28
|
-
props.serverPort,
|
|
29
|
-
props.server,
|
|
30
26
|
props.settingsManager,
|
|
31
27
|
props.projectSettings,
|
|
32
28
|
props.setStatusMessage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useServices.js","sourceRoot":"","sources":["../../src/hooks/useServices.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useServices.js","sourceRoot":"","sources":["../../src/hooks/useServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,YAAY,EAA2B,MAAM,6BAA6B,CAAA;AAqBnF,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,MAAM,GAAuB;YACjC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAA;QAED,OAAO,IAAI,YAAY,CACrB,MAAM,EACN,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,cAAc,CACrB,CAAA;IACH,CAAC,EAAE;QACD,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,aAAa;QACnB,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,cAAc;KACrB,CAAC,CAAA;IAEF,OAAO;QACL,YAAY;KACb,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalWidth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTerminalWidth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,gBAAgB,WAgBvC"}
|
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import { TmuxService } from '../services/TmuxService.js';
|
|
3
2
|
export default function useTerminalWidth() {
|
|
4
|
-
const tmuxService = TmuxService.getInstance();
|
|
5
3
|
const [terminalWidth, setTerminalWidth] = useState(process.stdout.columns || 80);
|
|
6
|
-
// Repaint trigger forces Ink to re-render after resize clearing
|
|
7
|
-
const [repaintTrigger, setRepaintTrigger] = useState(0);
|
|
8
4
|
useEffect(() => {
|
|
9
5
|
const handleResize = () => {
|
|
10
6
|
const newWidth = process.stdout.columns || 80;
|
|
11
7
|
setTerminalWidth(newWidth);
|
|
12
|
-
// CRITICAL: Force re-render FIRST before clearing
|
|
13
|
-
// This prevents blank screen during terminal resize
|
|
14
|
-
setRepaintTrigger(prev => prev + 1);
|
|
15
|
-
// Clear screen artifacts when terminal is resized
|
|
16
|
-
// This happens when tmux panes are closed/opened, causing layout shifts
|
|
17
|
-
// Clear screen with ANSI codes
|
|
18
|
-
process.stdout.write('\x1b[2J\x1b[H');
|
|
19
|
-
// Clear tmux history and refresh (using TmuxService for proper error handling)
|
|
20
|
-
tmuxService.clearHistorySync();
|
|
21
|
-
tmuxService.refreshClientSync();
|
|
22
8
|
};
|
|
23
9
|
process.stdout.on('resize', handleResize);
|
|
24
10
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalWidth.js","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useTerminalWidth.js","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACtC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAEzF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC9C,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -5,9 +5,8 @@ interface Params {
|
|
|
5
5
|
setStatusMessage: (msg: string) => void;
|
|
6
6
|
setShowMergeConfirmation: (v: boolean) => void;
|
|
7
7
|
setMergedPane: (pane: DmuxPane | null) => void;
|
|
8
|
-
forceRepaint?: () => void;
|
|
9
8
|
}
|
|
10
|
-
export default function useWorktreeActions({ panes, savePanes, setStatusMessage, setShowMergeConfirmation, setMergedPane
|
|
9
|
+
export default function useWorktreeActions({ panes, savePanes, setStatusMessage, setShowMergeConfirmation, setMergedPane }: Params): {
|
|
11
10
|
readonly closePane: (pane: DmuxPane) => Promise<void>;
|
|
12
11
|
readonly mergeWorktree: (pane: DmuxPane) => Promise<void>;
|
|
13
12
|
readonly mergeAndPrune: (pane: DmuxPane) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWorktreeActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useWorktreeActions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,UAAU,MAAM;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useWorktreeActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useWorktreeActions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,UAAU,MAAM;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wBAAwB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,aAAa,EAAE,EAAE,MAAM;+BAGrF,QAAQ;mCA2BJ,QAAQ;mCA4DR,QAAQ;0CAyDD,QAAQ;yCAmBT,MAAM,QAAQ,QAAQ;EAkB5E"}
|
|
@@ -5,7 +5,7 @@ import { enforceControlPaneSize } from '../utils/tmux.js';
|
|
|
5
5
|
import { SIDEBAR_WIDTH } from '../utils/layoutManager.js';
|
|
6
6
|
import { getCurrentBranch } from '../utils/git.js';
|
|
7
7
|
import { useTemporaryStatus } from './useTemporaryStatus.js';
|
|
8
|
-
export default function useWorktreeActions({ panes, savePanes, setStatusMessage, setShowMergeConfirmation, setMergedPane
|
|
8
|
+
export default function useWorktreeActions({ panes, savePanes, setStatusMessage, setShowMergeConfirmation, setMergedPane }) {
|
|
9
9
|
const showTemporary = useTemporaryStatus(setStatusMessage);
|
|
10
10
|
const closePane = useCallback(async (pane) => {
|
|
11
11
|
try {
|
|
@@ -22,12 +22,6 @@ export default function useWorktreeActions({ panes, savePanes, setStatusMessage,
|
|
|
22
22
|
}
|
|
23
23
|
catch { }
|
|
24
24
|
}
|
|
25
|
-
// CRITICAL: Force repaint FIRST to prevent blank screen
|
|
26
|
-
if (forceRepaint) {
|
|
27
|
-
forceRepaint();
|
|
28
|
-
}
|
|
29
|
-
// Minimal clearing to avoid layout shifts
|
|
30
|
-
process.stdout.write('\x1b[2J\x1b[H');
|
|
31
25
|
await tmuxService.killPane(pane.paneId);
|
|
32
26
|
// Don't apply global layouts - just enforce sidebar width
|
|
33
27
|
try {
|
|
@@ -42,7 +36,7 @@ export default function useWorktreeActions({ panes, savePanes, setStatusMessage,
|
|
|
42
36
|
catch {
|
|
43
37
|
showTemporary('Failed to close pane', 2000);
|
|
44
38
|
}
|
|
45
|
-
}, [panes, savePanes, showTemporary
|
|
39
|
+
}, [panes, savePanes, showTemporary]);
|
|
46
40
|
const mergeWorktree = useCallback(async (pane) => {
|
|
47
41
|
if (!pane.worktreePath) {
|
|
48
42
|
setStatusMessage('No worktree to merge');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWorktreeActions.js","sourceRoot":"","sources":["../../src/hooks/useWorktreeActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"useWorktreeActions.js","sourceRoot":"","sources":["../../src/hooks/useWorktreeActions.ts"],"names":[],"mappings":"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"}
|