dmux 5.1.0 → 5.3.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 +46 -143
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +99 -56
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +55 -21
- package/dist/actions/implementations/closeAction.js.map +1 -1
- package/dist/actions/implementations/index.d.ts +1 -0
- package/dist/actions/implementations/index.d.ts.map +1 -1
- package/dist/actions/implementations/index.js +3 -0
- package/dist/actions/implementations/index.js.map +1 -1
- package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
- package/dist/actions/implementations/mergeAction.js +61 -20
- package/dist/actions/implementations/mergeAction.js.map +1 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +6 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/merge/conflictResolution.d.ts.map +1 -1
- package/dist/actions/merge/conflictResolution.js +19 -13
- package/dist/actions/merge/conflictResolution.js.map +1 -1
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts.map +1 -1
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js +8 -6
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js.map +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts.map +1 -1
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js +9 -2
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js.map +1 -1
- package/dist/actions/merge/mergeExecution.d.ts.map +1 -1
- package/dist/actions/merge/mergeExecution.js +2 -1
- package/dist/actions/merge/mergeExecution.js.map +1 -1
- package/dist/actions/merge/multiMergeOrchestrator.d.ts.map +1 -1
- package/dist/actions/merge/multiMergeOrchestrator.js +33 -14
- package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -1
- package/dist/actions/types.d.ts +4 -2
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +19 -1
- package/dist/actions/types.js.map +1 -1
- package/dist/components/dialogs/AgentChoiceDialog.d.ts +2 -1
- package/dist/components/dialogs/AgentChoiceDialog.d.ts.map +1 -1
- package/dist/components/dialogs/AgentChoiceDialog.js +4 -5
- package/dist/components/dialogs/AgentChoiceDialog.js.map +1 -1
- package/dist/components/dialogs/SettingsDialog.d.ts.map +1 -1
- package/dist/components/dialogs/SettingsDialog.js +3 -1
- package/dist/components/dialogs/SettingsDialog.js.map +1 -1
- package/dist/components/panes/MergePane.d.ts +1 -0
- package/dist/components/panes/MergePane.d.ts.map +1 -1
- package/dist/components/panes/MergePane.js +14 -3
- package/dist/components/panes/MergePane.js.map +1 -1
- package/dist/components/panes/PaneCard.d.ts +1 -3
- package/dist/components/panes/PaneCard.d.ts.map +1 -1
- package/dist/components/panes/PaneCard.js +54 -37
- package/dist/components/panes/PaneCard.js.map +1 -1
- package/dist/components/panes/PanesGrid.d.ts +1 -0
- package/dist/components/panes/PanesGrid.d.ts.map +1 -1
- package/dist/components/panes/PanesGrid.js +60 -78
- package/dist/components/panes/PanesGrid.js.map +1 -1
- package/dist/components/popups/agentChoicePopup.d.ts +2 -2
- package/dist/components/popups/agentChoicePopup.js +85 -56
- package/dist/components/popups/agentChoicePopup.js.map +1 -1
- package/dist/components/popups/diffPeekPopup.d.ts +7 -0
- package/dist/components/popups/diffPeekPopup.d.ts.map +1 -0
- package/dist/components/popups/diffPeekPopup.js +99 -0
- package/dist/components/popups/diffPeekPopup.js.map +1 -0
- package/dist/components/popups/enabledAgentsPopup.d.ts +7 -0
- package/dist/components/popups/enabledAgentsPopup.d.ts.map +1 -0
- package/dist/components/popups/enabledAgentsPopup.js +196 -0
- package/dist/components/popups/enabledAgentsPopup.js.map +1 -0
- package/dist/components/popups/kebabMenuPopup.js +2 -2
- package/dist/components/popups/kebabMenuPopup.js.map +1 -1
- package/dist/components/popups/mergeUncommittedChoicePopup.d.ts +7 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.d.ts.map +1 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.js +289 -0
- package/dist/components/popups/mergeUncommittedChoicePopup.js.map +1 -0
- package/dist/components/popups/newPanePopup.js +8 -0
- package/dist/components/popups/newPanePopup.js.map +1 -1
- package/dist/components/popups/projectSelectPopup.d.ts +7 -0
- package/dist/components/popups/projectSelectPopup.d.ts.map +1 -0
- package/dist/components/popups/projectSelectPopup.js +124 -0
- package/dist/components/popups/projectSelectPopup.js.map +1 -0
- package/dist/components/popups/reopenWorktreePopup.js +33 -3
- package/dist/components/popups/reopenWorktreePopup.js.map +1 -1
- package/dist/components/popups/settingsPopup.js +25 -8
- package/dist/components/popups/settingsPopup.js.map +1 -1
- package/dist/components/popups/shared/DirectoryList.d.ts +14 -0
- package/dist/components/popups/shared/DirectoryList.d.ts.map +1 -0
- package/dist/components/popups/shared/DirectoryList.js +46 -0
- package/dist/components/popups/shared/DirectoryList.js.map +1 -0
- package/dist/components/popups/shared/index.d.ts +1 -0
- package/dist/components/popups/shared/index.d.ts.map +1 -1
- package/dist/components/popups/shared/index.js +1 -0
- package/dist/components/popups/shared/index.js.map +1 -1
- package/dist/components/popups/shortcutsPopup.js +15 -12
- package/dist/components/popups/shortcutsPopup.js.map +1 -1
- package/dist/components/popups/singleAgentChoicePopup.d.ts +7 -0
- package/dist/components/popups/singleAgentChoicePopup.d.ts.map +1 -0
- package/dist/components/popups/singleAgentChoicePopup.js +95 -0
- package/dist/components/popups/singleAgentChoicePopup.js.map +1 -0
- package/dist/components/ui/FooterHelp.js +1 -1
- package/dist/components/ui/FooterHelp.js.map +1 -1
- package/dist/hooks/useActionSystem.d.ts +1 -1
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +1 -1
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useAgentDetection.d.ts +2 -2
- package/dist/hooks/useAgentDetection.d.ts.map +1 -1
- package/dist/hooks/useAgentDetection.js +18 -88
- package/dist/hooks/useAgentDetection.js.map +1 -1
- package/dist/hooks/useAutoUpdater.d.ts.map +1 -1
- package/dist/hooks/useAutoUpdater.js +43 -26
- package/dist/hooks/useAutoUpdater.js.map +1 -1
- package/dist/hooks/useInputHandling.d.ts +5 -0
- package/dist/hooks/useInputHandling.d.ts.map +1 -1
- package/dist/hooks/useInputHandling.js +89 -16
- package/dist/hooks/useInputHandling.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 +26 -4
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +5 -2
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +123 -23
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts +1 -1
- package/dist/hooks/usePaneSync.d.ts.map +1 -1
- package/dist/hooks/usePaneSync.js +14 -1
- package/dist/hooks/usePaneSync.js.map +1 -1
- package/dist/hooks/usePanes.js +1 -1
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useServices.d.ts +1 -1
- package/dist/hooks/useServices.d.ts.map +1 -1
- package/dist/hooks/useServices.js +2 -2
- package/dist/hooks/useServices.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +16 -8
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +199 -18
- package/dist/index.js.map +1 -1
- package/dist/layout/SpacerManager.d.ts.map +1 -1
- package/dist/layout/SpacerManager.js +2 -1
- package/dist/layout/SpacerManager.js.map +1 -1
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +37 -26
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/services/AutoUpdater.d.ts +4 -0
- package/dist/services/AutoUpdater.d.ts.map +1 -1
- package/dist/services/AutoUpdater.js +23 -0
- package/dist/services/AutoUpdater.js.map +1 -1
- package/dist/services/PaneEventService.d.ts.map +1 -1
- package/dist/services/PaneEventService.js +2 -5
- package/dist/services/PaneEventService.js.map +1 -1
- package/dist/services/PaneWorkerManager.d.ts.map +1 -1
- package/dist/services/PaneWorkerManager.js +2 -14
- package/dist/services/PaneWorkerManager.js.map +1 -1
- package/dist/services/PopupManager.d.ts +8 -2
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +149 -27
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/services/TmuxService.d.ts +15 -1
- package/dist/services/TmuxService.d.ts.map +1 -1
- package/dist/services/TmuxService.js +29 -3
- package/dist/services/TmuxService.js.map +1 -1
- package/dist/services/WorktreeCleanupService.d.ts +22 -0
- package/dist/services/WorktreeCleanupService.d.ts.map +1 -0
- package/dist/services/WorktreeCleanupService.js +80 -0
- package/dist/services/WorktreeCleanupService.js.map +1 -0
- package/dist/types.d.ts +9 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agentDetection.d.ts +15 -8
- package/dist/utils/agentDetection.d.ts.map +1 -1
- package/dist/utils/agentDetection.js +49 -73
- package/dist/utils/agentDetection.js.map +1 -1
- package/dist/utils/agentLaunch.d.ts +63 -1
- package/dist/utils/agentLaunch.d.ts.map +1 -1
- package/dist/utils/agentLaunch.js +497 -24
- package/dist/utils/agentLaunch.js.map +1 -1
- package/dist/utils/agentPromptDispatch.d.ts +33 -0
- package/dist/utils/agentPromptDispatch.d.ts.map +1 -0
- package/dist/utils/agentPromptDispatch.js +99 -0
- package/dist/utils/agentPromptDispatch.js.map +1 -0
- package/dist/utils/asciiArt.d.ts.map +1 -1
- package/dist/utils/asciiArt.js +6 -7
- package/dist/utils/asciiArt.js.map +1 -1
- package/dist/utils/attachAgent.d.ts +21 -0
- package/dist/utils/attachAgent.d.ts.map +1 -0
- package/dist/utils/attachAgent.js +128 -0
- package/dist/utils/attachAgent.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts +2 -1
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
- package/dist/utils/conflictResolutionPane.js +69 -36
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/devSource.d.ts +7 -0
- package/dist/utils/devSource.d.ts.map +1 -0
- package/dist/utils/devSource.js +19 -0
- package/dist/utils/devSource.js.map +1 -0
- package/dist/utils/devWatchCommand.d.ts +8 -0
- package/dist/utils/devWatchCommand.d.ts.map +1 -0
- package/dist/utils/devWatchCommand.js +14 -0
- package/dist/utils/devWatchCommand.js.map +1 -0
- package/dist/utils/dirScanner.d.ts +30 -0
- package/dist/utils/dirScanner.d.ts.map +1 -0
- package/dist/utils/dirScanner.js +99 -0
- package/dist/utils/dirScanner.js.map +1 -0
- package/dist/utils/geminiTrust.d.ts +8 -0
- package/dist/utils/geminiTrust.d.ts.map +1 -0
- package/dist/utils/geminiTrust.js +67 -0
- package/dist/utils/geminiTrust.js.map +1 -0
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +3 -3
- package/dist/utils/git.d.ts +13 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +20 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/hooks.js +1 -1
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +2 -9
- package/dist/utils/hooksDocs.d.ts.map +1 -1
- package/dist/utils/hooksDocs.js +26 -6
- package/dist/utils/hooksDocs.js.map +1 -1
- package/dist/utils/mergeExecution.d.ts.map +1 -1
- package/dist/utils/mergeExecution.js +6 -3
- package/dist/utils/mergeExecution.js.map +1 -1
- package/dist/utils/paneCreation.d.ts +8 -2
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +129 -80
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/paneGrouping.d.ts.map +1 -1
- package/dist/utils/paneGrouping.js +30 -0
- package/dist/utils/paneGrouping.js.map +1 -1
- package/dist/utils/projectActions.d.ts +5 -0
- package/dist/utils/projectActions.d.ts.map +1 -1
- package/dist/utils/projectActions.js +15 -4
- package/dist/utils/projectActions.js.map +1 -1
- package/dist/utils/promptStore.d.ts +7 -0
- package/dist/utils/promptStore.d.ts.map +1 -0
- package/dist/utils/promptStore.js +75 -0
- package/dist/utils/promptStore.js.map +1 -0
- package/dist/utils/reopenWorktree.d.ts +1 -1
- package/dist/utils/reopenWorktree.d.ts.map +1 -1
- package/dist/utils/reopenWorktree.js +26 -27
- package/dist/utils/reopenWorktree.js.map +1 -1
- package/dist/utils/runtimePaths.d.ts +2 -0
- package/dist/utils/runtimePaths.d.ts.map +1 -0
- package/dist/utils/runtimePaths.js +8 -0
- package/dist/utils/runtimePaths.js.map +1 -0
- package/dist/utils/settingsManager.d.ts.map +1 -1
- package/dist/utils/settingsManager.js +96 -4
- package/dist/utils/settingsManager.js.map +1 -1
- package/dist/utils/systemCheck.d.ts.map +1 -1
- package/dist/utils/systemCheck.js +0 -13
- package/dist/utils/systemCheck.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +2 -1
- package/dist/utils/welcomePane.d.ts.map +1 -1
- package/dist/utils/welcomePane.js +3 -2
- package/dist/utils/welcomePane.js.map +1 -1
- package/dist/utils/welcomePaneManager.js +1 -1
- package/dist/utils/welcomePaneManager.js.map +1 -1
- package/dist/workers/PaneWorker.js.map +1 -1
- package/dist/workers/WorkerMessages.d.ts +2 -1
- package/dist/workers/WorkerMessages.d.ts.map +1 -1
- package/dist/workers/WorkerMessages.js.map +1 -1
- package/dist/workers/updateChecker.js +21 -6
- package/dist/workers/updateChecker.js.map +1 -1
- package/package.json +14 -12
- package/dist/components/popups/remotePopup.d.ts +0 -6
- package/dist/components/popups/remotePopup.d.ts.map +0 -1
- package/dist/components/popups/remotePopup.js +0 -166
- package/dist/components/popups/remotePopup.js.map +0 -1
- package/dist/hooks/useTunnelManagement.d.ts +0 -18
- package/dist/hooks/useTunnelManagement.d.ts.map +0 -1
- package/dist/hooks/useTunnelManagement.js +0 -55
- package/dist/hooks/useTunnelManagement.js.map +0 -1
- package/dist/server/actionsApi.d.ts +0 -37
- package/dist/server/actionsApi.d.ts.map +0 -1
- package/dist/server/actionsApi.js +0 -256
- package/dist/server/actionsApi.js.map +0 -1
- package/dist/server/index.d.ts +0 -21
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -100
- package/dist/server/index.js.map +0 -1
- package/dist/server/routes/actionsRoutes.d.ts +0 -2
- package/dist/server/routes/actionsRoutes.d.ts.map +0 -1
- package/dist/server/routes/actionsRoutes.js +0 -110
- package/dist/server/routes/actionsRoutes.js.map +0 -1
- package/dist/server/routes/healthRoutes.d.ts +0 -13
- package/dist/server/routes/healthRoutes.d.ts.map +0 -1
- package/dist/server/routes/healthRoutes.js +0 -70
- package/dist/server/routes/healthRoutes.js.map +0 -1
- package/dist/server/routes/index.d.ts +0 -8
- package/dist/server/routes/index.d.ts.map +0 -1
- package/dist/server/routes/index.js +0 -67
- package/dist/server/routes/index.js.map +0 -1
- package/dist/server/routes/keysRoutes.d.ts +0 -33
- package/dist/server/routes/keysRoutes.d.ts.map +0 -1
- package/dist/server/routes/keysRoutes.js +0 -128
- package/dist/server/routes/keysRoutes.js.map +0 -1
- package/dist/server/routes/panesRoutes.d.ts +0 -2
- package/dist/server/routes/panesRoutes.d.ts.map +0 -1
- package/dist/server/routes/panesRoutes.js +0 -414
- package/dist/server/routes/panesRoutes.js.map +0 -1
- package/dist/server/routes/settingsRoutes.d.ts +0 -94
- package/dist/server/routes/settingsRoutes.d.ts.map +0 -1
- package/dist/server/routes/settingsRoutes.js +0 -159
- package/dist/server/routes/settingsRoutes.js.map +0 -1
- package/dist/server/routes/streamRoutes.d.ts +0 -18
- package/dist/server/routes/streamRoutes.d.ts.map +0 -1
- package/dist/server/routes/streamRoutes.js +0 -87
- package/dist/server/routes/streamRoutes.js.map +0 -1
- package/dist/server/routes/tunnelRoutes.d.ts +0 -11
- package/dist/server/routes/tunnelRoutes.d.ts.map +0 -1
- package/dist/server/routes/tunnelRoutes.js +0 -28
- package/dist/server/routes/tunnelRoutes.js.map +0 -1
- package/dist/server/routes.d.ts +0 -17
- package/dist/server/routes.d.ts.map +0 -1
- package/dist/server/routes.js +0 -17
- package/dist/server/routes.js.map +0 -1
- package/dist/services/TunnelService.d.ts +0 -10
- package/dist/services/TunnelService.d.ts.map +0 -1
- package/dist/services/TunnelService.js +0 -98
- package/dist/services/TunnelService.js.map +0 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const DEFAULT_STARTUP_TIMEOUT_MS = 5000;
|
|
2
|
+
const DEFAULT_POLL_INTERVAL_MS = 75;
|
|
3
|
+
// Common shell process names reported by tmux for inactive panes.
|
|
4
|
+
const SHELL_PROCESS_NAMES = new Set([
|
|
5
|
+
'bash',
|
|
6
|
+
'zsh',
|
|
7
|
+
'sh',
|
|
8
|
+
'fish',
|
|
9
|
+
'dash',
|
|
10
|
+
'ksh',
|
|
11
|
+
'tcsh',
|
|
12
|
+
]);
|
|
13
|
+
function sleep(ms) {
|
|
14
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wait for a pane to hand off from the shell to a foreground command.
|
|
18
|
+
*
|
|
19
|
+
* This avoids output-content heuristics and uses tmux process metadata.
|
|
20
|
+
* If we time out, callers may still send input because the PTY typically buffers it.
|
|
21
|
+
*/
|
|
22
|
+
export async function waitForForegroundCommand(options) {
|
|
23
|
+
const { paneId, tmuxService, expectedCommand, baselineCommand, timeoutMs = DEFAULT_STARTUP_TIMEOUT_MS, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS, } = options;
|
|
24
|
+
const deadline = Date.now() + timeoutMs;
|
|
25
|
+
while (Date.now() < deadline) {
|
|
26
|
+
let currentCommand = '';
|
|
27
|
+
try {
|
|
28
|
+
currentCommand = await tmuxService.getPaneCurrentCommand(paneId);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
await sleep(pollIntervalMs);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!currentCommand) {
|
|
35
|
+
await sleep(pollIntervalMs);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (expectedCommand && currentCommand === expectedCommand) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (baselineCommand && currentCommand !== baselineCommand) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (!expectedCommand && !baselineCommand && !SHELL_PROCESS_NAMES.has(currentCommand)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
await sleep(pollIntervalMs);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send a full prompt payload to an already-starting interactive agent via tmux paste buffer.
|
|
52
|
+
*/
|
|
53
|
+
export async function sendPromptViaTmux(options) {
|
|
54
|
+
const { paneId, prompt, tmuxService, expectedCommand, baselineCommand, prePromptKeys = [], submitKeys = ['Enter'], postPasteDelayMs = 0, readyDelayMs = 0, } = options;
|
|
55
|
+
try {
|
|
56
|
+
await waitForForegroundCommand({
|
|
57
|
+
paneId,
|
|
58
|
+
tmuxService,
|
|
59
|
+
expectedCommand,
|
|
60
|
+
baselineCommand,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Fall through - PTY input buffering still makes this safe in practice.
|
|
65
|
+
}
|
|
66
|
+
if (readyDelayMs > 0) {
|
|
67
|
+
await sleep(readyDelayMs);
|
|
68
|
+
}
|
|
69
|
+
const bufferName = `dmux-prompt-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
70
|
+
const interKeyDelayMs = 120;
|
|
71
|
+
const interSubmitDelayMs = 60;
|
|
72
|
+
try {
|
|
73
|
+
for (const prePromptKey of prePromptKeys) {
|
|
74
|
+
await tmuxService.sendTmuxKeys(paneId, prePromptKey);
|
|
75
|
+
await sleep(interKeyDelayMs);
|
|
76
|
+
}
|
|
77
|
+
await tmuxService.setBuffer(bufferName, prompt);
|
|
78
|
+
await tmuxService.pasteBuffer(bufferName, paneId);
|
|
79
|
+
if (postPasteDelayMs > 0) {
|
|
80
|
+
await sleep(postPasteDelayMs);
|
|
81
|
+
}
|
|
82
|
+
for (let i = 0; i < submitKeys.length; i += 1) {
|
|
83
|
+
const submitKey = submitKeys[i];
|
|
84
|
+
await tmuxService.sendTmuxKeys(paneId, submitKey);
|
|
85
|
+
if (i < submitKeys.length - 1) {
|
|
86
|
+
await sleep(interSubmitDelayMs);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
try {
|
|
92
|
+
await tmuxService.deleteBuffer(bufferName);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Ignore cleanup failures for ephemeral buffers.
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=agentPromptDispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentPromptDispatch.js","sourceRoot":"","sources":["../../src/utils/agentPromptDispatch.ts"],"names":[],"mappings":"AAEA,MAAM,0BAA0B,GAAG,IAAI,CAAC;AACxC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC,kEAAkE;AAClE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,MAAM;IACN,KAAK;IACL,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;CACP,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAWD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAwC;IAExC,MAAM,EACJ,MAAM,EACN,WAAW,EACX,eAAe,EACf,eAAe,EACf,SAAS,GAAG,0BAA0B,EACtC,cAAc,GAAG,wBAAwB,GAC1C,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,eAAe,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,eAAe,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACrF,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAcD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAiC;IAEjC,MAAM,EACJ,MAAM,EACN,MAAM,EACN,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,GAAG,EAAE,EAClB,UAAU,GAAG,CAAC,OAAO,CAAC,EACtB,gBAAgB,GAAG,CAAC,EACpB,YAAY,GAAG,CAAC,GACjB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC;YAC7B,MAAM;YACN,WAAW;YACX,eAAe;YACf,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,eAAe,GAAG,GAAG,CAAC;IAC5B,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asciiArt.d.ts","sourceRoot":"","sources":["../../src/utils/asciiArt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asciiArt.d.ts","sourceRoot":"","sources":["../../src/utils/asciiArt.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;CAiBrB,CAAA"}
|
package/dist/utils/asciiArt.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { TmuxService } from "../services/TmuxService.js";
|
|
2
2
|
import { ASCII_ART_RENDER_DELAY } from "../constants/timing.js";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
import { resolveDistPath } from "./runtimePaths.js";
|
|
3
7
|
/**
|
|
4
8
|
* Render ASCII art centered in a tmux pane with fill characters
|
|
5
9
|
* Uses a persistent node script that re-renders on resize
|
|
@@ -14,16 +18,11 @@ import { ASCII_ART_RENDER_DELAY } from "../constants/timing.js";
|
|
|
14
18
|
export async function renderAsciiArt(options) {
|
|
15
19
|
const { paneId } = options;
|
|
16
20
|
const tmuxService = TmuxService.getInstance();
|
|
17
|
-
// Find the decorative pane script - check both dist and src directories
|
|
18
|
-
const path = await import("path");
|
|
19
|
-
const { fileURLToPath } = await import("url");
|
|
20
|
-
const fs = await import("fs");
|
|
21
21
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
22
|
-
//
|
|
22
|
+
// Prefer package dist path first to keep runtime behavior aligned.
|
|
23
23
|
const possiblePaths = [
|
|
24
|
+
resolveDistPath("panes", "decorative-pane.js"),
|
|
24
25
|
path.join(__dirname, "..", "panes", "decorative-pane.js"),
|
|
25
|
-
path.join(__dirname, "..", "..", "dist", "panes", "decorative-pane.js"),
|
|
26
|
-
path.join(process.cwd(), "dist", "panes", "decorative-pane.js"),
|
|
27
26
|
];
|
|
28
27
|
let scriptPath = possiblePaths[0]; // Default
|
|
29
28
|
for (const p of possiblePaths) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asciiArt.js","sourceRoot":"","sources":["../../src/utils/asciiArt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"asciiArt.js","sourceRoot":"","sources":["../../src/utils/asciiArt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAUnD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAC1B,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;IAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAE9D,mEAAmE;IACnE,MAAM,aAAa,GAAG;QACpB,eAAe,CAAC,OAAO,EAAE,oBAAoB,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC;KAC1D,CAAA;IAED,IAAI,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA,CAAC,UAAU;IAC5C,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,UAAU,GAAG,CAAC,CAAA;YACd,MAAK;QACP,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uCAAuC,UAAU,YAAY,aAAa,CAAC,IAAI,CAC7E,IAAI,CACL,EAAE,CACJ,CAAA;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;IACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAE3E,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC9C,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,MAAM,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,YAAY,UAAU,CAAC,CAAA;IACpE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE;;;;;;;;;;;;;;;GAeZ;CACF,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attach a second (or Nth) agent to an existing worktree pane.
|
|
3
|
+
*
|
|
4
|
+
* Creates a new tmux pane that `cd`s into the same worktree directory,
|
|
5
|
+
* launches the chosen agent, and returns a sibling DmuxPane that shares
|
|
6
|
+
* the same worktreePath/branchName/projectRoot.
|
|
7
|
+
*/
|
|
8
|
+
import type { DmuxPane } from '../types.js';
|
|
9
|
+
import type { AgentName } from './agentLaunch.js';
|
|
10
|
+
export interface AttachAgentOptions {
|
|
11
|
+
targetPane: DmuxPane;
|
|
12
|
+
prompt: string;
|
|
13
|
+
agent: AgentName;
|
|
14
|
+
existingPanes: DmuxPane[];
|
|
15
|
+
sessionProjectRoot: string;
|
|
16
|
+
sessionConfigPath: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function attachAgentToWorktree(options: AttachAgentOptions): Promise<{
|
|
19
|
+
pane: DmuxPane;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=attachAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachAgent.d.ts","sourceRoot":"","sources":["../../src/utils/attachAgent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAUlD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,QAAQ,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAcD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAgI7B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attach a second (or Nth) agent to an existing worktree pane.
|
|
3
|
+
*
|
|
4
|
+
* Creates a new tmux pane that `cd`s into the same worktree directory,
|
|
5
|
+
* launches the chosen agent, and returns a sibling DmuxPane that shares
|
|
6
|
+
* the same worktreePath/branchName/projectRoot.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { launchAgentInPane } from './agentLaunch.js';
|
|
11
|
+
import { autoApproveTrustPrompt } from './paneCreation.js';
|
|
12
|
+
import { TmuxService } from '../services/TmuxService.js';
|
|
13
|
+
import { splitPane, getTerminalDimensions } from './tmux.js';
|
|
14
|
+
import { recalculateAndApplyLayout } from './layoutManager.js';
|
|
15
|
+
import { buildWorktreePaneTitle } from './paneTitle.js';
|
|
16
|
+
import { SettingsManager } from './settingsManager.js';
|
|
17
|
+
import { LogService } from '../services/LogService.js';
|
|
18
|
+
/**
|
|
19
|
+
* Generate a unique sibling slug like `fix-auth-a2`, `fix-auth-a3`, etc.
|
|
20
|
+
*/
|
|
21
|
+
function generateSiblingSlug(baseSlug, existingPanes) {
|
|
22
|
+
const existingSlugs = new Set(existingPanes.map(p => p.slug));
|
|
23
|
+
let n = 2;
|
|
24
|
+
while (existingSlugs.has(`${baseSlug}-a${n}`)) {
|
|
25
|
+
n++;
|
|
26
|
+
}
|
|
27
|
+
return `${baseSlug}-a${n}`;
|
|
28
|
+
}
|
|
29
|
+
export async function attachAgentToWorktree(options) {
|
|
30
|
+
const { targetPane, prompt, agent, existingPanes, sessionProjectRoot, sessionConfigPath, } = options;
|
|
31
|
+
if (!targetPane.worktreePath) {
|
|
32
|
+
throw new Error('Target pane has no worktree to attach to');
|
|
33
|
+
}
|
|
34
|
+
const projectRoot = targetPane.projectRoot || sessionProjectRoot;
|
|
35
|
+
const settingsManager = new SettingsManager(projectRoot);
|
|
36
|
+
const settings = settingsManager.getSettings();
|
|
37
|
+
// Generate a unique slug for this sibling
|
|
38
|
+
const slug = generateSiblingSlug(targetPane.slug, existingPanes);
|
|
39
|
+
const tmuxService = TmuxService.getInstance();
|
|
40
|
+
const originalPaneId = tmuxService.getCurrentPaneIdSync();
|
|
41
|
+
// Load config to get control pane info
|
|
42
|
+
let controlPaneId;
|
|
43
|
+
try {
|
|
44
|
+
const configContent = fs.readFileSync(sessionConfigPath, 'utf-8');
|
|
45
|
+
const config = JSON.parse(configContent);
|
|
46
|
+
controlPaneId = config.controlPaneId;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
controlPaneId = originalPaneId;
|
|
50
|
+
}
|
|
51
|
+
// Split from the last existing pane (standard grid placement)
|
|
52
|
+
const dmuxPaneIds = existingPanes.map(p => p.paneId);
|
|
53
|
+
const splitTarget = dmuxPaneIds[dmuxPaneIds.length - 1];
|
|
54
|
+
const paneInfo = splitPane({ targetPane: splitTarget, cwd: projectRoot });
|
|
55
|
+
// Wait for pane to be ready
|
|
56
|
+
const start = Date.now();
|
|
57
|
+
while ((Date.now() - start) < 600) {
|
|
58
|
+
if (await tmuxService.paneExists(paneInfo))
|
|
59
|
+
break;
|
|
60
|
+
await new Promise(r => setTimeout(r, 30));
|
|
61
|
+
}
|
|
62
|
+
// Set pane title
|
|
63
|
+
try {
|
|
64
|
+
const paneProjectName = targetPane.projectName || path.basename(projectRoot);
|
|
65
|
+
const paneTitle = projectRoot === sessionProjectRoot
|
|
66
|
+
? slug
|
|
67
|
+
: buildWorktreePaneTitle(slug, projectRoot, paneProjectName);
|
|
68
|
+
await tmuxService.setPaneTitle(paneInfo, paneTitle);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore title errors
|
|
72
|
+
}
|
|
73
|
+
// Recalculate layout
|
|
74
|
+
if (controlPaneId) {
|
|
75
|
+
const dimensions = getTerminalDimensions();
|
|
76
|
+
const allContentPaneIds = [...existingPanes.map(p => p.paneId), paneInfo];
|
|
77
|
+
await recalculateAndApplyLayout(controlPaneId, allContentPaneIds, dimensions.width, dimensions.height);
|
|
78
|
+
await tmuxService.refreshClient();
|
|
79
|
+
}
|
|
80
|
+
// cd into the existing worktree (no git worktree add)
|
|
81
|
+
const cdCmd = `cd "${targetPane.worktreePath}"`;
|
|
82
|
+
await tmuxService.sendShellCommand(paneInfo, cdCmd);
|
|
83
|
+
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
84
|
+
// Small delay for cd to complete
|
|
85
|
+
await new Promise(r => setTimeout(r, 300));
|
|
86
|
+
// Launch the agent
|
|
87
|
+
await launchAgentInPane({
|
|
88
|
+
paneId: paneInfo,
|
|
89
|
+
agent,
|
|
90
|
+
prompt,
|
|
91
|
+
slug,
|
|
92
|
+
projectRoot,
|
|
93
|
+
permissionMode: settings.permissionMode,
|
|
94
|
+
});
|
|
95
|
+
// Auto-approve trust prompts for Claude
|
|
96
|
+
if (agent === 'claude') {
|
|
97
|
+
autoApproveTrustPrompt(paneInfo, prompt).catch(() => {
|
|
98
|
+
// Ignore errors in background monitoring
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// Keep focus on the new pane
|
|
102
|
+
await tmuxService.selectPane(paneInfo);
|
|
103
|
+
// Build the sibling pane object — shares worktree/branch with target
|
|
104
|
+
const newPane = {
|
|
105
|
+
id: `dmux-${Date.now()}`,
|
|
106
|
+
slug,
|
|
107
|
+
branchName: targetPane.branchName,
|
|
108
|
+
prompt: prompt || 'No initial prompt',
|
|
109
|
+
paneId: paneInfo,
|
|
110
|
+
projectRoot,
|
|
111
|
+
projectName: targetPane.projectName,
|
|
112
|
+
worktreePath: targetPane.worktreePath,
|
|
113
|
+
agent,
|
|
114
|
+
autopilot: settings.enableAutopilotByDefault ?? false,
|
|
115
|
+
};
|
|
116
|
+
// Switch focus back to control pane
|
|
117
|
+
await tmuxService.selectPane(originalPaneId);
|
|
118
|
+
// Re-set the dmux sidebar title
|
|
119
|
+
try {
|
|
120
|
+
await tmuxService.setPaneTitle(originalPaneId, "dmux");
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Ignore title errors
|
|
124
|
+
}
|
|
125
|
+
LogService.getInstance().info(`Attached ${agent} to worktree ${targetPane.worktreePath} as ${slug}`, 'attachAgent');
|
|
126
|
+
return { pane: newPane };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=attachAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachAgent.js","sourceRoot":"","sources":["../../src/utils/attachAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* Utilities for creating a new pane specifically for AI-assisted merge conflict resolution
|
|
5
5
|
*/
|
|
6
6
|
import type { DmuxPane } from '../types.js';
|
|
7
|
+
import { type AgentName } from './agentLaunch.js';
|
|
7
8
|
export interface ConflictResolutionPaneOptions {
|
|
8
9
|
sourceBranch: string;
|
|
9
10
|
targetBranch: string;
|
|
10
11
|
targetRepoPath: string;
|
|
11
|
-
agent:
|
|
12
|
+
agent: AgentName;
|
|
12
13
|
projectName: string;
|
|
13
14
|
existingPanes: DmuxPane[];
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflictResolutionPane.d.ts","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"conflictResolutionPane.d.ts","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAY5C,OAAO,EASL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAiLnB"}
|
|
@@ -8,12 +8,18 @@ import { enforceControlPaneSize, splitPane } from './tmux.js';
|
|
|
8
8
|
import { capturePaneContent } from './paneCapture.js';
|
|
9
9
|
import { SIDEBAR_WIDTH } from './layoutManager.js';
|
|
10
10
|
import { TMUX_LAYOUT_APPLY_DELAY, TMUX_SPLIT_DELAY } from '../constants/timing.js';
|
|
11
|
+
import { buildPromptReadAndDeleteSnippet, deletePromptFile, writePromptFile, } from './promptStore.js';
|
|
12
|
+
import { ensureGeminiFolderTrusted } from './geminiTrust.js';
|
|
13
|
+
import { buildAgentCommand, buildInitialPromptCommand, getAgentProcessName, getPromptTransport, getSendKeysPostPasteDelayMs, getSendKeysPrePrompt, getSendKeysReadyDelayMs, getSendKeysSubmit, } from './agentLaunch.js';
|
|
14
|
+
import { sendPromptViaTmux } from './agentPromptDispatch.js';
|
|
11
15
|
/**
|
|
12
16
|
* Create a pane for resolving merge conflicts with AI assistance
|
|
13
17
|
*/
|
|
14
18
|
export async function createConflictResolutionPane(options) {
|
|
15
19
|
const { sourceBranch, targetBranch, targetRepoPath, agent, projectName, existingPanes } = options;
|
|
16
20
|
const tmuxService = TmuxService.getInstance();
|
|
21
|
+
const { SettingsManager } = await import('./settingsManager.js');
|
|
22
|
+
const settings = new SettingsManager(targetRepoPath).getSettings();
|
|
17
23
|
// Generate slug for this conflict resolution session
|
|
18
24
|
const slug = `merge-${sourceBranch}-into-${targetBranch}`.substring(0, 50);
|
|
19
25
|
// Get current pane info
|
|
@@ -75,44 +81,71 @@ export async function createConflictResolutionPane(options) {
|
|
|
75
81
|
}
|
|
76
82
|
// Construct the AI prompt for conflict resolution
|
|
77
83
|
const prompt = `There are conflicts merging ${targetBranch} into ${sourceBranch}. Both are valid changes, so please keep both feature sets and merge them intelligently. Check git status to see the conflicting files, then resolve each conflict to preserve both sets of changes. Once all conflicts are resolved, commit the merge.`;
|
|
84
|
+
const shouldSendPromptViaTmux = getPromptTransport(agent) === 'send-keys';
|
|
85
|
+
let promptFilePath = null;
|
|
86
|
+
if (!shouldSendPromptViaTmux) {
|
|
87
|
+
try {
|
|
88
|
+
promptFilePath = await writePromptFile(targetRepoPath, slug, prompt);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Fall back to escaped inline flows if prompt file creation fails
|
|
92
|
+
}
|
|
93
|
+
}
|
|
78
94
|
// Launch agent with the conflict resolution prompt
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
{
|
|
96
|
+
if (agent === 'gemini') {
|
|
97
|
+
ensureGeminiFolderTrusted(targetRepoPath);
|
|
98
|
+
}
|
|
99
|
+
let baselineCommand;
|
|
100
|
+
if (shouldSendPromptViaTmux) {
|
|
101
|
+
try {
|
|
102
|
+
baselineCommand = await tmuxService.getPaneCurrentCommand(paneInfo);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
baselineCommand = undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
let launchCommand;
|
|
109
|
+
if (promptFilePath && !shouldSendPromptViaTmux) {
|
|
110
|
+
const promptBootstrap = buildPromptReadAndDeleteSnippet(promptFilePath);
|
|
111
|
+
launchCommand = `${promptBootstrap}; ${buildInitialPromptCommand(agent, '"$DMUX_PROMPT_CONTENT"', settings.permissionMode)}`;
|
|
112
|
+
promptFilePath = null;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const escapedPrompt = prompt
|
|
116
|
+
.replace(/\\/g, '\\\\')
|
|
117
|
+
.replace(/"/g, '\\"')
|
|
118
|
+
.replace(/`/g, '\\`')
|
|
119
|
+
.replace(/\$/g, '\\$');
|
|
120
|
+
launchCommand = buildInitialPromptCommand(agent, `"${escapedPrompt}"`, settings.permissionMode);
|
|
121
|
+
}
|
|
122
|
+
if (!launchCommand) {
|
|
123
|
+
launchCommand = buildAgentCommand(agent, settings.permissionMode);
|
|
124
|
+
}
|
|
125
|
+
await tmuxService.sendShellCommand(paneInfo, launchCommand);
|
|
102
126
|
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
127
|
+
if (shouldSendPromptViaTmux) {
|
|
128
|
+
await sendPromptViaTmux({
|
|
129
|
+
paneId: paneInfo,
|
|
130
|
+
prompt,
|
|
131
|
+
tmuxService,
|
|
132
|
+
expectedCommand: getAgentProcessName(agent),
|
|
133
|
+
baselineCommand,
|
|
134
|
+
prePromptKeys: getSendKeysPrePrompt(agent),
|
|
135
|
+
submitKeys: getSendKeysSubmit(agent),
|
|
136
|
+
postPasteDelayMs: getSendKeysPostPasteDelayMs(agent),
|
|
137
|
+
readyDelayMs: getSendKeysReadyDelayMs(agent),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
if (agent === 'claude') {
|
|
141
|
+
// Auto-approve trust prompts for Claude (workspace trust, not edit permissions)
|
|
142
|
+
autoApproveTrustPrompt(paneInfo).catch(() => {
|
|
143
|
+
// Ignore errors in background monitoring
|
|
144
|
+
});
|
|
145
|
+
}
|
|
103
146
|
}
|
|
104
|
-
|
|
105
|
-
await
|
|
106
|
-
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
107
|
-
// Wait for opencode to start, then paste the prompt
|
|
108
|
-
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
109
|
-
const bufName = `dmux_prompt_${Date.now()}`;
|
|
110
|
-
const promptEsc = prompt.replace(/\\/g, '\\\\').replace(/'/g, "'\\''");
|
|
111
|
-
await tmuxService.setBuffer(bufName, promptEsc);
|
|
112
|
-
await tmuxService.pasteBuffer(bufName, paneInfo);
|
|
113
|
-
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
114
|
-
await tmuxService.deleteBuffer(bufName);
|
|
115
|
-
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
147
|
+
if (promptFilePath) {
|
|
148
|
+
await deletePromptFile(promptFilePath);
|
|
116
149
|
}
|
|
117
150
|
// Keep focus on the new pane
|
|
118
151
|
await tmuxService.selectPane(paneInfo);
|
|
@@ -129,7 +162,7 @@ export async function createConflictResolutionPane(options) {
|
|
|
129
162
|
await tmuxService.selectPane(originalPaneId);
|
|
130
163
|
// Re-set the title for the dmux pane
|
|
131
164
|
try {
|
|
132
|
-
await tmuxService.setPaneTitle(originalPaneId,
|
|
165
|
+
await tmuxService.setPaneTitle(originalPaneId, "dmux");
|
|
133
166
|
}
|
|
134
167
|
catch {
|
|
135
168
|
// Ignore if setting title fails
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflictResolutionPane.js","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"conflictResolutionPane.js","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface DevSourceResolution {
|
|
2
|
+
nextSourcePath: string;
|
|
3
|
+
toggledToRoot: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function isActiveDevSourcePath(paneWorktreePath?: string, activeSourcePath?: string): boolean;
|
|
6
|
+
export declare function resolveNextDevSourcePath(paneWorktreePath: string, activeSourcePath: string, projectRoot: string): DevSourceResolution;
|
|
7
|
+
//# sourceMappingURL=devSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devSource.d.ts","sourceRoot":"","sources":["../../src/utils/devSource.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,qBAAqB,CACnC,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAGT;AAED,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAYrB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
export function isActiveDevSourcePath(paneWorktreePath, activeSourcePath) {
|
|
3
|
+
if (!paneWorktreePath || !activeSourcePath)
|
|
4
|
+
return false;
|
|
5
|
+
return path.resolve(paneWorktreePath) === path.resolve(activeSourcePath);
|
|
6
|
+
}
|
|
7
|
+
export function resolveNextDevSourcePath(paneWorktreePath, activeSourcePath, projectRoot) {
|
|
8
|
+
if (isActiveDevSourcePath(paneWorktreePath, activeSourcePath)) {
|
|
9
|
+
return {
|
|
10
|
+
nextSourcePath: projectRoot,
|
|
11
|
+
toggledToRoot: true,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
nextSourcePath: paneWorktreePath,
|
|
16
|
+
toggledToRoot: false,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=devSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devSource.js","sourceRoot":"","sources":["../../src/utils/devSource.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAOvB,MAAM,UAAU,qBAAqB,CACnC,gBAAyB,EACzB,gBAAyB;IAEzB,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAA;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,gBAAwB,EACxB,gBAAwB,EACxB,WAAmB;IAEnB,IAAI,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC9D,OAAO;YACL,cAAc,EAAE,WAAW;YAC3B,aAAa,EAAE,IAAI;SACpB,CAAA;IACH,CAAC;IAED,OAAO;QACL,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,KAAK;KACrB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a shell-safe command for restarting dmux dev watch from a source path.
|
|
3
|
+
* For respawned tmux panes, we append an interactive shell so the pane stays open
|
|
4
|
+
* after dmux exits intentionally.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildDevWatchCommand(sourcePath: string): string;
|
|
7
|
+
export declare function buildDevWatchRespawnCommand(sourcePath: string): string;
|
|
8
|
+
//# sourceMappingURL=devWatchCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devWatchCommand.d.ts","sourceRoot":"","sources":["../../src/utils/devWatchCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a shell-safe command for restarting dmux dev watch from a source path.
|
|
3
|
+
* For respawned tmux panes, we append an interactive shell so the pane stays open
|
|
4
|
+
* after dmux exits intentionally.
|
|
5
|
+
*/
|
|
6
|
+
const escapeForDoubleQuotedShell = (value) => value.replace(/([\\$"`])/g, "\\$1");
|
|
7
|
+
export function buildDevWatchCommand(sourcePath) {
|
|
8
|
+
const escapedPath = escapeForDoubleQuotedShell(sourcePath);
|
|
9
|
+
return `cd "${escapedPath}" && pnpm dev:watch`;
|
|
10
|
+
}
|
|
11
|
+
export function buildDevWatchRespawnCommand(sourcePath) {
|
|
12
|
+
return `${buildDevWatchCommand(sourcePath)}; exec "\${SHELL:-/bin/zsh}" -l`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=devWatchCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devWatchCommand.js","sourceRoot":"","sources":["../../src/utils/devWatchCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,0BAA0B,GAAG,CAAC,KAAa,EAAU,EAAE,CAC3D,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAEtC,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,WAAW,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC3D,OAAO,OAAO,WAAW,qBAAqB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAkB;IAC5D,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,iCAAiC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface DirEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
fullPath: string;
|
|
4
|
+
isGitRepo: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Expand ~ to the user's home directory
|
|
8
|
+
*/
|
|
9
|
+
export declare function expandTilde(inputPath: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Split user input into parentDir + prefix for filtering.
|
|
12
|
+
*
|
|
13
|
+
* Examples:
|
|
14
|
+
* "~/pro" → { parentDir: "/Users/x", prefix: "pro" }
|
|
15
|
+
* "~/projects/" → { parentDir: "/Users/x/projects", prefix: "" }
|
|
16
|
+
* "/tmp" → { parentDir: "/", prefix: "tmp" }
|
|
17
|
+
* "/tmp/" → { parentDir: "/tmp", prefix: "" }
|
|
18
|
+
* "" → { parentDir: homedir, prefix: "" }
|
|
19
|
+
*/
|
|
20
|
+
export declare function parsePathInput(input: string): {
|
|
21
|
+
parentDir: string;
|
|
22
|
+
prefix: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Scan a directory for subdirectories, optionally filtering by prefix.
|
|
26
|
+
* Results are cached by parentDir for 500ms.
|
|
27
|
+
* Returns max 50 entries, sorted: git repos first, then alphabetical.
|
|
28
|
+
*/
|
|
29
|
+
export declare function scanDirectories(parentDir: string, prefix: string): DirEntry[];
|
|
30
|
+
//# sourceMappingURL=dirScanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirScanner.d.ts","sourceRoot":"","sources":["../../src/utils/dirScanner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACnB;AAWD;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAgBA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,QAAQ,EAAE,CA0BZ"}
|