dmux 5.2.0 → 5.4.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 +9 -5
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +100 -56
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +84 -13
- 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 +59 -19
- package/dist/actions/implementations/mergeAction.js.map +1 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +18 -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 +17 -12
- 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/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 +5 -2
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +28 -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/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 +90 -56
- package/dist/components/popups/agentChoicePopup.js.map +1 -1
- package/dist/components/popups/agentChoiceSelection.d.ts +8 -0
- package/dist/components/popups/agentChoiceSelection.d.ts.map +1 -0
- package/dist/components/popups/agentChoiceSelection.js +14 -0
- package/dist/components/popups/agentChoiceSelection.js.map +1 -0
- 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/reopenWorktreePopup.js +33 -3
- package/dist/components/popups/reopenWorktreePopup.js.map +1 -1
- package/dist/components/popups/settingsPopup.js +346 -25
- package/dist/components/popups/settingsPopup.js.map +1 -1
- package/dist/components/popups/shortcutsPopup.js +17 -13
- 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/constants/layout.d.ts +9 -0
- package/dist/constants/layout.d.ts.map +1 -0
- package/dist/constants/layout.js +9 -0
- package/dist/constants/layout.js.map +1 -0
- 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 +2 -4
- 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 +230 -22
- 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.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +19 -5
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useServices.d.ts +2 -1
- package/dist/hooks/useServices.d.ts.map +1 -1
- package/dist/hooks/useServices.js +4 -2
- package/dist/hooks/useServices.js.map +1 -1
- package/dist/index.js +200 -21
- package/dist/index.js.map +1 -1
- package/dist/layout/LayoutCalculator.d.ts.map +1 -1
- package/dist/layout/LayoutCalculator.js +4 -1
- package/dist/layout/LayoutCalculator.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/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 +14 -2
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +162 -24
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/services/TmuxHookManager.d.ts.map +1 -1
- package/dist/services/TmuxHookManager.js +4 -2
- package/dist/services/TmuxHookManager.js.map +1 -1
- package/dist/services/TmuxService.d.ts +9 -0
- package/dist/services/TmuxService.d.ts.map +1 -1
- package/dist/services/TmuxService.js +18 -2
- package/dist/services/TmuxService.js.map +1 -1
- package/dist/types.d.ts +11 -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 +60 -2
- package/dist/utils/agentLaunch.d.ts.map +1 -1
- package/dist/utils/agentLaunch.js +490 -41
- 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 +25 -0
- package/dist/utils/attachAgent.d.ts.map +1 -0
- package/dist/utils/attachAgent.js +139 -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 +48 -53
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/controlPaneRecovery.d.ts +2 -0
- package/dist/utils/controlPaneRecovery.d.ts.map +1 -0
- package/dist/utils/controlPaneRecovery.js +156 -0
- package/dist/utils/controlPaneRecovery.js.map +1 -0
- 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/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/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/layoutManager.d.ts +5 -1
- package/dist/utils/layoutManager.d.ts.map +1 -1
- package/dist/utils/layoutManager.js +103 -26
- package/dist/utils/layoutManager.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 +82 -105
- 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/reopenWorktree.d.ts +1 -1
- package/dist/utils/reopenWorktree.d.ts.map +1 -1
- package/dist/utils/reopenWorktree.js +23 -31
- 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 +3 -0
- package/dist/utils/settingsManager.d.ts.map +1 -1
- package/dist/utils/settingsManager.js +200 -9
- 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/tmux.d.ts +5 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +23 -5
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/tmuxHookCommands.d.ts +14 -0
- package/dist/utils/tmuxHookCommands.d.ts.map +1 -0
- package/dist/utils/tmuxHookCommands.js +30 -0
- package/dist/utils/tmuxHookCommands.js.map +1 -0
- 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/package.json +11 -6
|
@@ -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":"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"}
|
|
@@ -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,25 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* Generate a unique sibling slug like `fix-auth-a2`, `fix-auth-a3`, etc.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateSiblingSlugForTargetPane(targetPane: Pick<DmuxPane, 'slug' | 'worktreePath'>, existingPanes: ReadonlyArray<Pick<DmuxPane, 'slug'>>): string;
|
|
22
|
+
export declare function attachAgentToWorktree(options: AttachAgentOptions): Promise<{
|
|
23
|
+
pane: DmuxPane;
|
|
24
|
+
}>;
|
|
25
|
+
//# 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;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,EACnD,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GACnD,MAAM,CAmBR;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAgI7B"}
|
|
@@ -0,0 +1,139 @@
|
|
|
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
|
+
export function generateSiblingSlugForTargetPane(targetPane, existingPanes) {
|
|
22
|
+
// Always anchor attached-agent slugs to the real worktree directory name.
|
|
23
|
+
// This avoids repeated suffixes when attaching from an already attached pane.
|
|
24
|
+
const worktreeSlug = targetPane.worktreePath
|
|
25
|
+
? path.basename(targetPane.worktreePath)
|
|
26
|
+
: '';
|
|
27
|
+
const baseSlug = worktreeSlug || targetPane.slug;
|
|
28
|
+
const siblingPrefix = `${baseSlug}-a`;
|
|
29
|
+
let maxSibling = 1;
|
|
30
|
+
for (const pane of existingPanes) {
|
|
31
|
+
if (!pane.slug.startsWith(siblingPrefix))
|
|
32
|
+
continue;
|
|
33
|
+
const suffix = pane.slug.slice(siblingPrefix.length);
|
|
34
|
+
if (!/^\d+$/.test(suffix))
|
|
35
|
+
continue;
|
|
36
|
+
maxSibling = Math.max(maxSibling, Number.parseInt(suffix, 10));
|
|
37
|
+
}
|
|
38
|
+
return `${baseSlug}-a${maxSibling + 1}`;
|
|
39
|
+
}
|
|
40
|
+
export async function attachAgentToWorktree(options) {
|
|
41
|
+
const { targetPane, prompt, agent, existingPanes, sessionProjectRoot, sessionConfigPath, } = options;
|
|
42
|
+
if (!targetPane.worktreePath) {
|
|
43
|
+
throw new Error('Target pane has no worktree to attach to');
|
|
44
|
+
}
|
|
45
|
+
const projectRoot = targetPane.projectRoot || sessionProjectRoot;
|
|
46
|
+
const settingsManager = new SettingsManager(projectRoot);
|
|
47
|
+
const settings = settingsManager.getSettings();
|
|
48
|
+
// Generate a unique slug for this sibling
|
|
49
|
+
const slug = generateSiblingSlugForTargetPane(targetPane, existingPanes);
|
|
50
|
+
const tmuxService = TmuxService.getInstance();
|
|
51
|
+
const originalPaneId = tmuxService.getCurrentPaneIdSync();
|
|
52
|
+
// Load config to get control pane info
|
|
53
|
+
let controlPaneId;
|
|
54
|
+
try {
|
|
55
|
+
const configContent = fs.readFileSync(sessionConfigPath, 'utf-8');
|
|
56
|
+
const config = JSON.parse(configContent);
|
|
57
|
+
controlPaneId = config.controlPaneId;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
controlPaneId = originalPaneId;
|
|
61
|
+
}
|
|
62
|
+
// Split from the last existing pane (standard grid placement)
|
|
63
|
+
const dmuxPaneIds = existingPanes.map(p => p.paneId);
|
|
64
|
+
const splitTarget = dmuxPaneIds[dmuxPaneIds.length - 1];
|
|
65
|
+
const paneInfo = splitPane({ targetPane: splitTarget, cwd: projectRoot });
|
|
66
|
+
// Wait for pane to be ready
|
|
67
|
+
const start = Date.now();
|
|
68
|
+
while ((Date.now() - start) < 600) {
|
|
69
|
+
if (await tmuxService.paneExists(paneInfo))
|
|
70
|
+
break;
|
|
71
|
+
await new Promise(r => setTimeout(r, 30));
|
|
72
|
+
}
|
|
73
|
+
// Set pane title
|
|
74
|
+
try {
|
|
75
|
+
const paneProjectName = targetPane.projectName || path.basename(projectRoot);
|
|
76
|
+
const paneTitle = projectRoot === sessionProjectRoot
|
|
77
|
+
? slug
|
|
78
|
+
: buildWorktreePaneTitle(slug, projectRoot, paneProjectName);
|
|
79
|
+
await tmuxService.setPaneTitle(paneInfo, paneTitle);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Ignore title errors
|
|
83
|
+
}
|
|
84
|
+
// Recalculate layout
|
|
85
|
+
if (controlPaneId) {
|
|
86
|
+
const dimensions = getTerminalDimensions();
|
|
87
|
+
const allContentPaneIds = [...existingPanes.map(p => p.paneId), paneInfo];
|
|
88
|
+
await recalculateAndApplyLayout(controlPaneId, allContentPaneIds, dimensions.width, dimensions.height);
|
|
89
|
+
await tmuxService.refreshClient();
|
|
90
|
+
}
|
|
91
|
+
// cd into the existing worktree (no git worktree add)
|
|
92
|
+
const cdCmd = `cd "${targetPane.worktreePath}"`;
|
|
93
|
+
await tmuxService.sendShellCommand(paneInfo, cdCmd);
|
|
94
|
+
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
95
|
+
// Small delay for cd to complete
|
|
96
|
+
await new Promise(r => setTimeout(r, 300));
|
|
97
|
+
// Launch the agent
|
|
98
|
+
await launchAgentInPane({
|
|
99
|
+
paneId: paneInfo,
|
|
100
|
+
agent,
|
|
101
|
+
prompt,
|
|
102
|
+
slug,
|
|
103
|
+
projectRoot,
|
|
104
|
+
permissionMode: settings.permissionMode,
|
|
105
|
+
});
|
|
106
|
+
// Auto-approve trust prompts for Claude
|
|
107
|
+
if (agent === 'claude') {
|
|
108
|
+
autoApproveTrustPrompt(paneInfo, prompt).catch(() => {
|
|
109
|
+
// Ignore errors in background monitoring
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Keep focus on the new pane
|
|
113
|
+
await tmuxService.selectPane(paneInfo);
|
|
114
|
+
// Build the sibling pane object — shares worktree/branch with target
|
|
115
|
+
const newPane = {
|
|
116
|
+
id: `dmux-${Date.now()}`,
|
|
117
|
+
slug,
|
|
118
|
+
branchName: targetPane.branchName,
|
|
119
|
+
prompt: prompt || 'No initial prompt',
|
|
120
|
+
paneId: paneInfo,
|
|
121
|
+
projectRoot,
|
|
122
|
+
projectName: targetPane.projectName,
|
|
123
|
+
worktreePath: targetPane.worktreePath,
|
|
124
|
+
agent,
|
|
125
|
+
autopilot: settings.enableAutopilotByDefault ?? false,
|
|
126
|
+
};
|
|
127
|
+
// Switch focus back to control pane
|
|
128
|
+
await tmuxService.selectPane(originalPaneId);
|
|
129
|
+
// Re-set the dmux sidebar title
|
|
130
|
+
try {
|
|
131
|
+
await tmuxService.setPaneTitle(originalPaneId, "dmux");
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Ignore title errors
|
|
135
|
+
}
|
|
136
|
+
LogService.getInstance().info(`Attached ${agent} to worktree ${targetPane.worktreePath} as ${slug}`, 'attachAgent');
|
|
137
|
+
return { pane: newPane };
|
|
138
|
+
}
|
|
139
|
+
//# 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"}
|
|
@@ -9,7 +9,9 @@ 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
11
|
import { buildPromptReadAndDeleteSnippet, deletePromptFile, writePromptFile, } from './promptStore.js';
|
|
12
|
-
import {
|
|
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';
|
|
13
15
|
/**
|
|
14
16
|
* Create a pane for resolving merge conflicts with AI assistance
|
|
15
17
|
*/
|
|
@@ -79,45 +81,34 @@ export async function createConflictResolutionPane(options) {
|
|
|
79
81
|
}
|
|
80
82
|
// Construct the AI prompt for conflict resolution
|
|
81
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';
|
|
82
85
|
let promptFilePath = null;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
+
}
|
|
88
93
|
}
|
|
89
94
|
// Launch agent with the conflict resolution prompt
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
let claudeCmd;
|
|
94
|
-
if (promptFilePath) {
|
|
95
|
-
const promptBootstrap = buildPromptReadAndDeleteSnippet(promptFilePath);
|
|
96
|
-
claudeCmd = `${promptBootstrap}; claude "$DMUX_PROMPT_CONTENT"${permissionSuffix}`;
|
|
97
|
-
promptFilePath = null;
|
|
95
|
+
{
|
|
96
|
+
if (agent === 'gemini') {
|
|
97
|
+
ensureGeminiFolderTrusted(targetRepoPath);
|
|
98
98
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
let baselineCommand;
|
|
100
|
+
if (shouldSendPromptViaTmux) {
|
|
101
|
+
try {
|
|
102
|
+
baselineCommand = await tmuxService.getPaneCurrentCommand(paneInfo);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
baselineCommand = undefined;
|
|
106
|
+
}
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// Auto-approve trust prompts for Claude (workspace trust, not edit permissions)
|
|
110
|
-
autoApproveTrustPrompt(paneInfo).catch(() => {
|
|
111
|
-
// Ignore errors in background monitoring
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
else if (agent === 'codex') {
|
|
115
|
-
const permissionFlags = getPermissionFlags('codex', settings.permissionMode);
|
|
116
|
-
const permissionSuffix = permissionFlags ? ` ${permissionFlags}` : '';
|
|
117
|
-
let codexCmd;
|
|
118
|
-
if (promptFilePath) {
|
|
108
|
+
let launchCommand;
|
|
109
|
+
if (promptFilePath && !shouldSendPromptViaTmux) {
|
|
119
110
|
const promptBootstrap = buildPromptReadAndDeleteSnippet(promptFilePath);
|
|
120
|
-
|
|
111
|
+
launchCommand = `${promptBootstrap}; ${buildInitialPromptCommand(agent, '"$DMUX_PROMPT_CONTENT"', settings.permissionMode)}`;
|
|
121
112
|
promptFilePath = null;
|
|
122
113
|
}
|
|
123
114
|
else {
|
|
@@ -126,28 +117,32 @@ export async function createConflictResolutionPane(options) {
|
|
|
126
117
|
.replace(/"/g, '\\"')
|
|
127
118
|
.replace(/`/g, '\\`')
|
|
128
119
|
.replace(/\$/g, '\\$');
|
|
129
|
-
|
|
120
|
+
launchCommand = buildInitialPromptCommand(agent, `"${escapedPrompt}"`, settings.permissionMode);
|
|
130
121
|
}
|
|
131
|
-
|
|
122
|
+
if (!launchCommand) {
|
|
123
|
+
launchCommand = buildAgentCommand(agent, settings.permissionMode);
|
|
124
|
+
}
|
|
125
|
+
await tmuxService.sendShellCommand(paneInfo, launchCommand);
|
|
132
126
|
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
+
});
|
|
140
139
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
.replace(/\$/g, '\\$');
|
|
147
|
-
opencodeCmd = `opencode --prompt "${escapedPrompt}"`;
|
|
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
|
+
});
|
|
148
145
|
}
|
|
149
|
-
await tmuxService.sendShellCommand(paneInfo, opencodeCmd);
|
|
150
|
-
await tmuxService.sendTmuxKeys(paneInfo, 'Enter');
|
|
151
146
|
}
|
|
152
147
|
if (promptFilePath) {
|
|
153
148
|
await deletePromptFile(promptFilePath);
|
|
@@ -167,7 +162,7 @@ export async function createConflictResolutionPane(options) {
|
|
|
167
162
|
await tmuxService.selectPane(originalPaneId);
|
|
168
163
|
// Re-set the title for the dmux pane
|
|
169
164
|
try {
|
|
170
|
-
await tmuxService.setPaneTitle(originalPaneId,
|
|
165
|
+
await tmuxService.setPaneTitle(originalPaneId, "dmux");
|
|
171
166
|
}
|
|
172
167
|
catch {
|
|
173
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;AACnF,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"conflictResolutionPane.js","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlPaneRecovery.d.ts","sourceRoot":"","sources":["../../src/utils/controlPaneRecovery.ts"],"names":[],"mappings":""}
|