dmux 2.2.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +433 -179
- package/dist/DmuxApp.js.map +1 -1
- package/dist/MergePane.d.ts.map +1 -1
- package/dist/MergePane.js +4 -6
- package/dist/MergePane.js.map +1 -1
- package/dist/PaneAnalyzer.d.ts +45 -0
- package/dist/PaneAnalyzer.d.ts.map +1 -0
- package/dist/PaneAnalyzer.js +278 -0
- package/dist/PaneAnalyzer.js.map +1 -0
- package/dist/_plugin-vue_export-helper.css +1 -0
- package/dist/actions/index.d.ts +19 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +54 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/paneActions.d.ts +45 -0
- package/dist/actions/paneActions.d.ts.map +1 -0
- package/dist/actions/paneActions.js +932 -0
- package/dist/actions/paneActions.js.map +1 -0
- package/dist/actions/types.d.ts +101 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +129 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/adapters/apiActionHandler.d.ts +64 -0
- package/dist/adapters/apiActionHandler.d.ts.map +1 -0
- package/dist/adapters/apiActionHandler.js +170 -0
- package/dist/adapters/apiActionHandler.js.map +1 -0
- package/dist/adapters/tuiActionHandler.d.ts +57 -0
- package/dist/adapters/tuiActionHandler.d.ts.map +1 -0
- package/dist/adapters/tuiActionHandler.js +152 -0
- package/dist/adapters/tuiActionHandler.js.map +1 -0
- package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +28 -0
- package/dist/components/ActionChoiceDialog.d.ts +16 -0
- package/dist/components/ActionChoiceDialog.d.ts.map +1 -0
- package/dist/components/ActionChoiceDialog.js +29 -0
- package/dist/components/ActionChoiceDialog.js.map +1 -0
- package/dist/components/ActionConfirmDialog.d.ts +16 -0
- package/dist/components/ActionConfirmDialog.d.ts.map +1 -0
- package/dist/components/ActionConfirmDialog.js +31 -0
- package/dist/components/ActionConfirmDialog.js.map +1 -0
- package/dist/components/ActionInputDialog.d.ts +16 -0
- package/dist/components/ActionInputDialog.d.ts.map +1 -0
- package/dist/components/ActionInputDialog.js +49 -0
- package/dist/components/ActionInputDialog.js.map +1 -0
- package/dist/components/ActionProgressDialog.d.ts +13 -0
- package/dist/components/ActionProgressDialog.d.ts.map +1 -0
- package/dist/components/ActionProgressDialog.js +20 -0
- package/dist/components/ActionProgressDialog.js.map +1 -0
- package/dist/components/FooterHelp.d.ts +2 -0
- package/dist/components/FooterHelp.d.ts.map +1 -1
- package/dist/components/FooterHelp.js +9 -2
- package/dist/components/FooterHelp.js.map +1 -1
- package/dist/components/KebabMenu.d.ts +10 -0
- package/dist/components/KebabMenu.d.ts.map +1 -0
- package/dist/components/KebabMenu.js +18 -0
- package/dist/components/KebabMenu.js.map +1 -0
- package/dist/components/LoadingIndicator.d.ts.map +1 -1
- package/dist/components/LoadingIndicator.js +5 -5
- package/dist/components/LoadingIndicator.js.map +1 -1
- package/dist/components/PaneCard.d.ts +1 -0
- package/dist/components/PaneCard.d.ts.map +1 -1
- package/dist/components/PaneCard.js +21 -20
- package/dist/components/PaneCard.js.map +1 -1
- package/dist/components/PanesGrid.d.ts +1 -0
- package/dist/components/PanesGrid.d.ts.map +1 -1
- package/dist/components/PanesGrid.js +5 -4
- package/dist/components/PanesGrid.js.map +1 -1
- package/dist/components/QRCode.d.ts +7 -0
- package/dist/components/QRCode.d.ts.map +1 -0
- package/dist/components/QRCode.js +19 -0
- package/dist/components/QRCode.js.map +1 -0
- package/dist/components/Spinner.d.ts +10 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +15 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/dashboard.html +14 -0
- package/dist/dashboard.js +2 -0
- package/dist/hooks/useActionSystem.d.ts +31 -0
- package/dist/hooks/useActionSystem.d.ts.map +1 -0
- package/dist/hooks/useActionSystem.js +95 -0
- package/dist/hooks/useActionSystem.js.map +1 -0
- package/dist/hooks/useAgentStatus.d.ts +4 -3
- package/dist/hooks/useAgentStatus.d.ts.map +1 -1
- package/dist/hooks/useAgentStatus.js +45 -194
- package/dist/hooks/useAgentStatus.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +3 -1
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +49 -99
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +6 -3
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +18 -1
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts +2 -1
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +9 -1
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +48 -3
- package/dist/index.js.map +1 -1
- package/dist/server/actionsApi.d.ts +37 -0
- package/dist/server/actionsApi.d.ts.map +1 -0
- package/dist/server/actionsApi.js +256 -0
- package/dist/server/actionsApi.js.map +1 -0
- package/dist/server/embedded-assets.d.ts +13 -0
- package/dist/server/embedded-assets.d.ts.map +1 -0
- package/dist/server/embedded-assets.js +5038 -0
- package/dist/server/embedded-assets.js.map +1 -0
- package/dist/server/index.d.ts +21 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +99 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +672 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/static.d.ts +6 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +3040 -0
- package/dist/server/static.js.map +1 -0
- package/dist/services/ConfigWatcher.d.ts +20 -0
- package/dist/services/ConfigWatcher.d.ts.map +1 -0
- package/dist/services/ConfigWatcher.js +75 -0
- package/dist/services/ConfigWatcher.js.map +1 -0
- package/dist/services/PaneWorkerManager.d.ts +69 -0
- package/dist/services/PaneWorkerManager.d.ts.map +1 -0
- package/dist/services/PaneWorkerManager.js +272 -0
- package/dist/services/PaneWorkerManager.js.map +1 -0
- package/dist/services/StatusDetector.d.ts +87 -0
- package/dist/services/StatusDetector.d.ts.map +1 -0
- package/dist/services/StatusDetector.js +387 -0
- package/dist/services/StatusDetector.js.map +1 -0
- package/dist/services/TerminalDiffer.d.ts +85 -0
- package/dist/services/TerminalDiffer.d.ts.map +1 -0
- package/dist/services/TerminalDiffer.js +499 -0
- package/dist/services/TerminalDiffer.js.map +1 -0
- package/dist/services/TerminalStreamer.d.ts +80 -0
- package/dist/services/TerminalStreamer.d.ts.map +1 -0
- package/dist/services/TerminalStreamer.js +490 -0
- package/dist/services/TerminalStreamer.js.map +1 -0
- package/dist/services/TunnelService.d.ts +9 -0
- package/dist/services/TunnelService.d.ts.map +1 -0
- package/dist/services/TunnelService.js +34 -0
- package/dist/services/TunnelService.js.map +1 -0
- package/dist/services/WorkerMessageBus.d.ts +48 -0
- package/dist/services/WorkerMessageBus.d.ts.map +1 -0
- package/dist/services/WorkerMessageBus.js +120 -0
- package/dist/services/WorkerMessageBus.js.map +1 -0
- package/dist/shared/StateManager.d.ts +34 -0
- package/dist/shared/StateManager.d.ts.map +1 -0
- package/dist/shared/StateManager.js +108 -0
- package/dist/shared/StateManager.js.map +1 -0
- package/dist/shared/StreamProtocol.d.ts +75 -0
- package/dist/shared/StreamProtocol.d.ts.map +1 -0
- package/dist/shared/StreamProtocol.js +37 -0
- package/dist/shared/StreamProtocol.js.map +1 -0
- package/dist/terminal.html +17 -0
- package/dist/terminal.js +3 -0
- package/dist/types.d.ts +21 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agentDetection.d.ts +18 -0
- package/dist/utils/agentDetection.d.ts.map +1 -0
- package/dist/utils/agentDetection.js +73 -0
- package/dist/utils/agentDetection.js.map +1 -0
- package/dist/utils/aiMerge.d.ts +35 -0
- package/dist/utils/aiMerge.d.ts.map +1 -0
- package/dist/utils/aiMerge.js +302 -0
- package/dist/utils/aiMerge.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts +19 -0
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -0
- package/dist/utils/conflictResolutionPane.js +214 -0
- package/dist/utils/conflictResolutionPane.js.map +1 -0
- package/dist/utils/mergeExecution.d.ts +52 -0
- package/dist/utils/mergeExecution.d.ts.map +1 -0
- package/dist/utils/mergeExecution.js +192 -0
- package/dist/utils/mergeExecution.js.map +1 -0
- package/dist/utils/mergeValidation.d.ts +67 -0
- package/dist/utils/mergeValidation.d.ts.map +1 -0
- package/dist/utils/mergeValidation.js +213 -0
- package/dist/utils/mergeValidation.js.map +1 -0
- package/dist/utils/paneCreation.d.ts +17 -0
- package/dist/utils/paneCreation.d.ts.map +1 -0
- package/dist/utils/paneCreation.js +274 -0
- package/dist/utils/paneCreation.js.map +1 -0
- package/dist/utils/port.d.ts +5 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +54 -0
- package/dist/utils/port.js.map +1 -0
- package/dist/utils/slug.d.ts.map +1 -1
- package/dist/utils/slug.js +32 -25
- package/dist/utils/slug.js.map +1 -1
- package/dist/workers/PaneWorker.d.ts +2 -0
- package/dist/workers/PaneWorker.d.ts.map +1 -0
- package/dist/workers/PaneWorker.js +362 -0
- package/dist/workers/PaneWorker.js.map +1 -0
- package/dist/workers/WorkerMessages.d.ts +36 -0
- package/dist/workers/WorkerMessages.d.ts.map +1 -0
- package/dist/workers/WorkerMessages.js +9 -0
- package/dist/workers/WorkerMessages.js.map +1 -0
- package/package.json +19 -5
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { applySmartLayout } from './tmux.js';
|
|
4
|
+
import { generateSlug } from './slug.js';
|
|
5
|
+
/**
|
|
6
|
+
* Core pane creation logic that can be used by both TUI and API
|
|
7
|
+
* Returns the newly created pane and whether agent choice is needed
|
|
8
|
+
*/
|
|
9
|
+
export async function createPane(options, availableAgents) {
|
|
10
|
+
const { prompt, projectName, existingPanes } = options;
|
|
11
|
+
let { agent } = options;
|
|
12
|
+
// Determine if we need agent choice
|
|
13
|
+
if (!agent && availableAgents.length > 1) {
|
|
14
|
+
// Need to ask which agent to use
|
|
15
|
+
return {
|
|
16
|
+
pane: null,
|
|
17
|
+
needsAgentChoice: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// Auto-select agent if only one is available or if not specified
|
|
21
|
+
if (!agent && availableAgents.length === 1) {
|
|
22
|
+
agent = availableAgents[0];
|
|
23
|
+
}
|
|
24
|
+
// Generate slug
|
|
25
|
+
const slug = await generateSlug(prompt);
|
|
26
|
+
// Get project root
|
|
27
|
+
let projectRoot;
|
|
28
|
+
try {
|
|
29
|
+
projectRoot = execSync('git rev-parse --show-toplevel', {
|
|
30
|
+
encoding: 'utf-8',
|
|
31
|
+
stdio: 'pipe',
|
|
32
|
+
}).trim();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
projectRoot = process.cwd();
|
|
36
|
+
}
|
|
37
|
+
const worktreePath = path.join(projectRoot, '.dmux', 'worktrees', slug);
|
|
38
|
+
const originalPaneId = execSync('tmux display-message -p "#{pane_id}"', {
|
|
39
|
+
encoding: 'utf-8',
|
|
40
|
+
}).trim();
|
|
41
|
+
// Get current pane count
|
|
42
|
+
const paneCount = parseInt(execSync('tmux list-panes | wc -l', { encoding: 'utf-8' }).trim());
|
|
43
|
+
// Enable pane borders to show titles
|
|
44
|
+
try {
|
|
45
|
+
execSync(`tmux set-option -g pane-border-status top`, { stdio: 'pipe' });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Ignore if already set or fails
|
|
49
|
+
}
|
|
50
|
+
// Create new pane
|
|
51
|
+
const paneInfo = execSync(`tmux split-window -h -P -F '#{pane_id}'`, {
|
|
52
|
+
encoding: 'utf-8',
|
|
53
|
+
}).trim();
|
|
54
|
+
// Wait for pane creation to settle
|
|
55
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
56
|
+
// Set pane title to match the slug
|
|
57
|
+
try {
|
|
58
|
+
execSync(`tmux select-pane -t '${paneInfo}' -T "${slug}"`, {
|
|
59
|
+
stdio: 'pipe',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Ignore if setting title fails
|
|
64
|
+
}
|
|
65
|
+
// Apply smart layout based on pane count
|
|
66
|
+
const newPaneCount = paneCount + 1;
|
|
67
|
+
applySmartLayout(newPaneCount);
|
|
68
|
+
// Create git worktree and cd into it
|
|
69
|
+
try {
|
|
70
|
+
const worktreeCmd = `git worktree add "${worktreePath}" -b ${slug} 2>/dev/null ; cd "${worktreePath}"`;
|
|
71
|
+
execSync(`tmux send-keys -t '${paneInfo}' '${worktreeCmd}' Enter`, {
|
|
72
|
+
stdio: 'pipe',
|
|
73
|
+
});
|
|
74
|
+
// Wait for worktree creation and cd to complete
|
|
75
|
+
await new Promise((resolve) => setTimeout(resolve, 2500));
|
|
76
|
+
// Verify we're in the worktree directory
|
|
77
|
+
execSync(`tmux send-keys -t '${paneInfo}' 'echo "Worktree created at:" && pwd' Enter`, { stdio: 'pipe' });
|
|
78
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// Even if worktree creation failed, try to cd to the directory
|
|
82
|
+
execSync(`tmux send-keys -t '${paneInfo}' 'cd "${worktreePath}" 2>/dev/null || (echo "ERROR: Failed to create/enter worktree ${slug}" && pwd)' Enter`, { stdio: 'pipe' });
|
|
83
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
84
|
+
}
|
|
85
|
+
// Launch agent if specified
|
|
86
|
+
if (agent === 'claude') {
|
|
87
|
+
let claudeCmd;
|
|
88
|
+
if (prompt && prompt.trim()) {
|
|
89
|
+
const escapedPrompt = prompt
|
|
90
|
+
.replace(/\\/g, '\\\\')
|
|
91
|
+
.replace(/"/g, '\\"')
|
|
92
|
+
.replace(/`/g, '\\`')
|
|
93
|
+
.replace(/\$/g, '\\$');
|
|
94
|
+
claudeCmd = `claude "${escapedPrompt}" --permission-mode=acceptEdits`;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
claudeCmd = `claude --permission-mode=acceptEdits`;
|
|
98
|
+
}
|
|
99
|
+
const escapedCmd = claudeCmd.replace(/'/g, "'\\''");
|
|
100
|
+
execSync(`tmux send-keys -t '${paneInfo}' '${escapedCmd}'`, {
|
|
101
|
+
stdio: 'pipe',
|
|
102
|
+
});
|
|
103
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
104
|
+
// Auto-approve trust prompts for Claude
|
|
105
|
+
autoApproveTrustPrompt(paneInfo, prompt).catch(() => {
|
|
106
|
+
// Ignore errors in background monitoring
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else if (agent === 'opencode') {
|
|
110
|
+
const openCoderCmd = `opencode`;
|
|
111
|
+
const escapedOpenCmd = openCoderCmd.replace(/'/g, "'\\''");
|
|
112
|
+
execSync(`tmux send-keys -t '${paneInfo}' '${escapedOpenCmd}'`, {
|
|
113
|
+
stdio: 'pipe',
|
|
114
|
+
});
|
|
115
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
116
|
+
if (prompt && prompt.trim()) {
|
|
117
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
118
|
+
const bufName = `dmux_prompt_${Date.now()}`;
|
|
119
|
+
const promptEsc = prompt.replace(/\\/g, '\\\\').replace(/'/g, "'\\''");
|
|
120
|
+
execSync(`tmux set-buffer -b '${bufName}' -- '${promptEsc}'`, {
|
|
121
|
+
stdio: 'pipe',
|
|
122
|
+
});
|
|
123
|
+
execSync(`tmux paste-buffer -b '${bufName}' -t '${paneInfo}'`, {
|
|
124
|
+
stdio: 'pipe',
|
|
125
|
+
});
|
|
126
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
127
|
+
execSync(`tmux delete-buffer -b '${bufName}'`, { stdio: 'pipe' });
|
|
128
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Keep focus on the new pane
|
|
132
|
+
execSync(`tmux select-pane -t '${paneInfo}'`, { stdio: 'pipe' });
|
|
133
|
+
// Create the pane object
|
|
134
|
+
const newPane = {
|
|
135
|
+
id: `dmux-${Date.now()}`,
|
|
136
|
+
slug,
|
|
137
|
+
prompt: prompt || 'No initial prompt',
|
|
138
|
+
paneId: paneInfo,
|
|
139
|
+
worktreePath,
|
|
140
|
+
agent,
|
|
141
|
+
};
|
|
142
|
+
// Switch back to the original pane
|
|
143
|
+
execSync(`tmux select-pane -t '${originalPaneId}'`, { stdio: 'pipe' });
|
|
144
|
+
// Re-set the title for the dmux pane
|
|
145
|
+
try {
|
|
146
|
+
execSync(`tmux select-pane -t '${originalPaneId}' -T "dmux-${projectName}"`, { stdio: 'pipe' });
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Ignore if setting title fails
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
pane: newPane,
|
|
153
|
+
needsAgentChoice: false,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Auto-approve Claude trust prompts
|
|
158
|
+
*/
|
|
159
|
+
async function autoApproveTrustPrompt(paneInfo, prompt) {
|
|
160
|
+
// Wait for Claude to start up before checking for prompts
|
|
161
|
+
await new Promise((resolve) => setTimeout(resolve, 800));
|
|
162
|
+
const maxChecks = 100; // 100 checks * 100ms = 10 seconds total
|
|
163
|
+
const checkInterval = 100; // Check every 100ms
|
|
164
|
+
let lastContent = '';
|
|
165
|
+
let stableContentCount = 0;
|
|
166
|
+
let promptHandled = false;
|
|
167
|
+
// Trust prompt patterns
|
|
168
|
+
const trustPromptPatterns = [
|
|
169
|
+
/Do you trust the files in this folder\?/i,
|
|
170
|
+
/Trust the files in this workspace\?/i,
|
|
171
|
+
/Do you trust the authors of the files/i,
|
|
172
|
+
/Do you want to trust this workspace\?/i,
|
|
173
|
+
/trust.*files.*folder/i,
|
|
174
|
+
/trust.*workspace/i,
|
|
175
|
+
/Do you trust/i,
|
|
176
|
+
/Trust this folder/i,
|
|
177
|
+
/trust.*directory/i,
|
|
178
|
+
/permission.*grant/i,
|
|
179
|
+
/allow.*access/i,
|
|
180
|
+
/workspace.*trust/i,
|
|
181
|
+
/accept.*edits/i,
|
|
182
|
+
/permission.*mode/i,
|
|
183
|
+
/allow.*claude/i,
|
|
184
|
+
/\[y\/n\]/i,
|
|
185
|
+
/\(y\/n\)/i,
|
|
186
|
+
/Yes\/No/i,
|
|
187
|
+
/\[Y\/n\]/i,
|
|
188
|
+
/press.*enter.*accept/i,
|
|
189
|
+
/press.*enter.*continue/i,
|
|
190
|
+
/❯\s*1\.\s*Yes,\s*proceed/i,
|
|
191
|
+
/Enter to confirm.*Esc to exit/i,
|
|
192
|
+
/1\.\s*Yes,\s*proceed/i,
|
|
193
|
+
/2\.\s*No,\s*exit/i,
|
|
194
|
+
];
|
|
195
|
+
for (let i = 0; i < maxChecks; i++) {
|
|
196
|
+
await new Promise((resolve) => setTimeout(resolve, checkInterval));
|
|
197
|
+
try {
|
|
198
|
+
// Capture the pane content
|
|
199
|
+
const paneContent = execSync(`tmux capture-pane -t '${paneInfo}' -p -S -30`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
200
|
+
// Check if content has stabilized
|
|
201
|
+
if (paneContent === lastContent) {
|
|
202
|
+
stableContentCount++;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
stableContentCount = 0;
|
|
206
|
+
lastContent = paneContent;
|
|
207
|
+
}
|
|
208
|
+
// Look for trust prompt
|
|
209
|
+
const hasTrustPrompt = trustPromptPatterns.some((pattern) => pattern.test(paneContent));
|
|
210
|
+
const hasClaudePermissionPrompt = paneContent.includes('Do you trust') ||
|
|
211
|
+
paneContent.includes('trust the files') ||
|
|
212
|
+
paneContent.includes('permission') ||
|
|
213
|
+
paneContent.includes('allow') ||
|
|
214
|
+
(paneContent.includes('folder') && paneContent.includes('?'));
|
|
215
|
+
if ((hasTrustPrompt || hasClaudePermissionPrompt) && !promptHandled) {
|
|
216
|
+
// Content is stable and we found a prompt
|
|
217
|
+
if (stableContentCount >= 2) {
|
|
218
|
+
// Check if this is the new Claude numbered menu format
|
|
219
|
+
const isNewClaudeFormat = /❯\s*1\.\s*Yes,\s*proceed/i.test(paneContent) ||
|
|
220
|
+
/Enter to confirm.*Esc to exit/i.test(paneContent);
|
|
221
|
+
if (isNewClaudeFormat) {
|
|
222
|
+
// For new Claude format, just press Enter
|
|
223
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
|
|
224
|
+
stdio: 'pipe',
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Try multiple response methods for older formats
|
|
229
|
+
execSync(`tmux send-keys -t '${paneInfo}' 'y'`, { stdio: 'pipe' });
|
|
230
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
231
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
|
|
232
|
+
stdio: 'pipe',
|
|
233
|
+
});
|
|
234
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
235
|
+
execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
|
|
236
|
+
stdio: 'pipe',
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
promptHandled = true;
|
|
240
|
+
// Wait and check if prompt is gone
|
|
241
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
242
|
+
// Verify the prompt is gone
|
|
243
|
+
const updatedContent = execSync(`tmux capture-pane -t '${paneInfo}' -p -S -10`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
244
|
+
const promptGone = !trustPromptPatterns.some((p) => p.test(updatedContent));
|
|
245
|
+
if (promptGone) {
|
|
246
|
+
// Check if Claude is running
|
|
247
|
+
const claudeRunning = updatedContent.includes('Claude') ||
|
|
248
|
+
updatedContent.includes('claude') ||
|
|
249
|
+
updatedContent.includes('Assistant') ||
|
|
250
|
+
(prompt &&
|
|
251
|
+
updatedContent.includes(prompt.substring(0, Math.min(20, prompt.length))));
|
|
252
|
+
if (!claudeRunning && !updatedContent.includes('$')) {
|
|
253
|
+
// Resend Claude command if needed
|
|
254
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
255
|
+
// Note: We can't easily resend the command here without the escapedCmd
|
|
256
|
+
// This is a limitation, but the TUI handles it
|
|
257
|
+
}
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// If Claude is already running, we're done
|
|
263
|
+
if (!hasTrustPrompt &&
|
|
264
|
+
!hasClaudePermissionPrompt &&
|
|
265
|
+
(paneContent.includes('Claude') || paneContent.includes('Assistant'))) {
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
// Continue checking, errors are non-fatal
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=paneCreation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paneCreation.js","sourceRoot":"","sources":["../../src/utils/paneCreation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,cAAc,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBtF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import net from 'net';
|
|
2
|
+
/**
|
|
3
|
+
* Find an available port, trying preferred ports first
|
|
4
|
+
*/
|
|
5
|
+
export async function findAvailablePort(preferredPorts = []) {
|
|
6
|
+
// Try preferred ports first
|
|
7
|
+
for (const port of preferredPorts) {
|
|
8
|
+
if (await isPortAvailable(port)) {
|
|
9
|
+
return port;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// Try random ports in the 42000-43000 range
|
|
13
|
+
for (let i = 0; i < 100; i++) {
|
|
14
|
+
const port = Math.floor(Math.random() * 1000) + 42000;
|
|
15
|
+
if (await isPortAvailable(port)) {
|
|
16
|
+
return port;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Fallback to any available port
|
|
20
|
+
return getRandomPort();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if a specific port is available
|
|
24
|
+
*/
|
|
25
|
+
async function isPortAvailable(port) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const server = net.createServer();
|
|
28
|
+
server.once('error', () => {
|
|
29
|
+
resolve(false);
|
|
30
|
+
});
|
|
31
|
+
server.once('listening', () => {
|
|
32
|
+
server.close();
|
|
33
|
+
resolve(true);
|
|
34
|
+
});
|
|
35
|
+
server.listen(port, '127.0.0.1');
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get a random available port (system-assigned)
|
|
40
|
+
*/
|
|
41
|
+
async function getRandomPort() {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const server = net.createServer();
|
|
44
|
+
server.once('error', (err) => {
|
|
45
|
+
reject(err);
|
|
46
|
+
});
|
|
47
|
+
server.listen(0, '127.0.0.1', () => {
|
|
48
|
+
const address = server.address();
|
|
49
|
+
const port = typeof address === 'object' && address !== null ? address.port : 0;
|
|
50
|
+
server.close(() => resolve(port));
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,iBAA2B,EAAE;IACnE,4BAA4B;IAC5B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QACtD,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/utils/slug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAgB1E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAgB1E,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAkDjE,CAAC"}
|
package/dist/utils/slug.js
CHANGED
|
@@ -19,33 +19,40 @@ export const generateSlug = async (prompt) => {
|
|
|
19
19
|
return `dmux-${Date.now()}`;
|
|
20
20
|
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
21
21
|
if (apiKey) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
'
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (
|
|
45
|
-
|
|
22
|
+
// Try multiple models with fallback
|
|
23
|
+
const models = ['google/gemini-2.5-flash', 'x-ai/grok-4-fast:free', 'openai/gpt-4o-mini'];
|
|
24
|
+
for (const model of models) {
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: {
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({
|
|
33
|
+
model,
|
|
34
|
+
messages: [
|
|
35
|
+
{
|
|
36
|
+
role: 'user',
|
|
37
|
+
content: `Generate a 1-2 word kebab-case slug for this prompt. Only respond with the slug, nothing else: "${prompt}"`
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
max_tokens: 10,
|
|
41
|
+
temperature: 0.3
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
if (response.ok) {
|
|
45
|
+
const data = await response.json();
|
|
46
|
+
const slug = data.choices[0].message.content.trim().toLowerCase().replace(/[^a-z0-9-]/g, '');
|
|
47
|
+
if (slug)
|
|
48
|
+
return slug;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Try next model
|
|
53
|
+
continue;
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
|
-
catch { }
|
|
49
56
|
}
|
|
50
57
|
const claudeResponse = await callClaudeCode(`Generate a 1-2 word kebab-case slug for this prompt. Only respond with the slug, nothing else: "${prompt}"`);
|
|
51
58
|
if (claudeResponse) {
|
package/dist/utils/slug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAA0B,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,mEAAmE,EACvG;YACE,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI;SACd,CACF,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAA0B,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,mEAAmE,EACvG;YACE,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI;SACd,CACF,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,oCAAoC;QACpC,MAAM,MAAM,GAAG,CAAC,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+CAA+C,EAAE;oBAC5E,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,UAAU,MAAM,EAAE;qBACpC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK;wBACL,QAAQ,EAAE;4BACR;gCACE,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,mGAAmG,MAAM,GAAG;6BACtH;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,WAAW,EAAE,GAAG;qBACjB,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;oBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;oBAC7F,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;gBACjB,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,cAAc,CACzC,mGAAmG,MAAM,GAAG,CAC7G,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC9B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaneWorker.d.ts","sourceRoot":"","sources":["../../src/workers/PaneWorker.ts"],"names":[],"mappings":""}
|