dmux 2.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +412 -179
- package/dist/DmuxApp.js.map +1 -1
- package/dist/MergePane.d.ts.map +1 -1
- package/dist/MergePane.js +4 -15
- 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 +2 -1
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +46 -100
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +5 -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.map +1 -1
- package/dist/hooks/useWorktreeActions.js +4 -0
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +43 -6
- 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 +5012 -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 +298 -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/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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentStatus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAgentStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzD,UAAU,oBAAoB;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAGD,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,oBAAoB,GAAG,cAAc,CAgE9G"}
|
|
@@ -1,206 +1,57 @@
|
|
|
1
1
|
import { useEffect, useState, useRef } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const lastCheckTimes = new Map();
|
|
5
|
-
const statusHistory = new Map();
|
|
6
|
-
export default function useAgentStatus({ panes, suspend }) {
|
|
2
|
+
import { getStatusDetector } from '../services/StatusDetector.js';
|
|
3
|
+
export default function useAgentStatus({ panes, suspend, onPaneRemoved }) {
|
|
7
4
|
const [statuses, setStatuses] = useState(new Map());
|
|
8
|
-
const
|
|
5
|
+
const statusDetector = useRef(getStatusDetector());
|
|
9
6
|
const panesRef = useRef(panes);
|
|
7
|
+
const onPaneRemovedRef = useRef(onPaneRemoved);
|
|
10
8
|
// Keep refs up to date
|
|
11
|
-
statusesRef.current = statuses;
|
|
12
9
|
panesRef.current = panes;
|
|
10
|
+
onPaneRemovedRef.current = onPaneRemoved;
|
|
13
11
|
useEffect(() => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
const detector = statusDetector.current;
|
|
13
|
+
// Subscribe to status updates from the detector
|
|
14
|
+
const handleStatusUpdate = (event) => {
|
|
15
|
+
setStatuses(prevStatuses => {
|
|
16
|
+
const newStatuses = new Map(prevStatuses);
|
|
17
|
+
newStatuses.set(event.paneId, event.status);
|
|
18
|
+
return newStatuses;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
// Handle pane removal events
|
|
22
|
+
const handlePaneRemoved = (event) => {
|
|
23
|
+
// Remove from statuses
|
|
24
|
+
setStatuses(prevStatuses => {
|
|
25
|
+
const newStatuses = new Map(prevStatuses);
|
|
26
|
+
newStatuses.delete(event.paneId);
|
|
27
|
+
return newStatuses;
|
|
28
|
+
});
|
|
29
|
+
// Call callback if provided
|
|
30
|
+
if (onPaneRemovedRef.current) {
|
|
31
|
+
onPaneRemovedRef.current(event.paneId);
|
|
22
32
|
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
// Check against our map instead of pane state
|
|
32
|
-
const lastCheck = lastCheckTimes.get(pane.id) || 0;
|
|
33
|
-
if (Date.now() - lastCheck < 500) {
|
|
34
|
-
// Keep current status if too soon to check again
|
|
35
|
-
newStatuses.set(pane.id, statusesRef.current.get(pane.id));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
// Update check time in map
|
|
39
|
-
lastCheckTimes.set(pane.id, Date.now());
|
|
40
|
-
let effectivePaneId = pane.paneId;
|
|
41
|
-
let paneExists = false;
|
|
42
|
-
try {
|
|
43
|
-
const paneIds = execSync(`tmux list-panes -s -F '#{pane_id}'`, {
|
|
44
|
-
encoding: 'utf-8',
|
|
45
|
-
stdio: 'pipe',
|
|
46
|
-
timeout: 500,
|
|
47
|
-
}).trim().split('\n').filter(id => id && id.startsWith('%'));
|
|
48
|
-
paneExists = paneIds.includes(effectivePaneId);
|
|
49
|
-
if (!paneExists) {
|
|
50
|
-
try {
|
|
51
|
-
const out = execSync(`tmux list-panes -s -F '#{pane_id}::#{pane_title}'`, {
|
|
52
|
-
encoding: 'utf-8',
|
|
53
|
-
stdio: 'pipe',
|
|
54
|
-
timeout: 500,
|
|
55
|
-
}).trim();
|
|
56
|
-
if (out) {
|
|
57
|
-
const titleToId = new Map();
|
|
58
|
-
out.split('\n').forEach(line => {
|
|
59
|
-
const [id, title] = line.split('::');
|
|
60
|
-
if (id && title)
|
|
61
|
-
titleToId.set(title.trim(), id);
|
|
62
|
-
});
|
|
63
|
-
const remappedId = titleToId.get(pane.slug);
|
|
64
|
-
if (remappedId) {
|
|
65
|
-
effectivePaneId = remappedId;
|
|
66
|
-
paneExists = true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
catch { }
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
paneExists = true;
|
|
75
|
-
}
|
|
76
|
-
if (!paneExists) {
|
|
77
|
-
// Keep current status if pane doesn't exist in tmux
|
|
78
|
-
newStatuses.set(pane.id, statusesRef.current.get(pane.id));
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const captureOutput = execSync(`tmux capture-pane -t '${effectivePaneId}' -p -S -30`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
82
|
-
const lines = captureOutput.split('\n');
|
|
83
|
-
const lastLines = lines.slice(-10).join('\n');
|
|
84
|
-
// First, detect if Claude/opencode is actively working
|
|
85
|
-
let isWorking = false;
|
|
86
|
-
if (pane.agent === 'opencode') {
|
|
87
|
-
const workingPatterns = [
|
|
88
|
-
/esc\s+(to\s+)?interrupt/i,
|
|
89
|
-
/working(\.|\.{2}|\.{3})/i,
|
|
90
|
-
];
|
|
91
|
-
isWorking = workingPatterns.some(pattern => pattern.test(lastLines));
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
// For Claude, "esc to interrupt" is the primary indicator it's working
|
|
95
|
-
isWorking = /esc to interrupt/i.test(captureOutput);
|
|
96
|
-
}
|
|
97
|
-
// If actively working, that takes precedence - don't check other patterns
|
|
98
|
-
let newStatus = 'idle';
|
|
99
|
-
if (isWorking) {
|
|
100
|
-
newStatus = 'working';
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// Only check for attention patterns if NOT working
|
|
104
|
-
const attentionPatterns = [
|
|
105
|
-
/\?\s*$/m,
|
|
106
|
-
/y\/n/i,
|
|
107
|
-
/yes.*no/i,
|
|
108
|
-
/\ballow\b.*\?/i,
|
|
109
|
-
/\bapprove\b.*\?/i,
|
|
110
|
-
/\bgrant\b.*\?/i,
|
|
111
|
-
/\btrust\b.*\?/i,
|
|
112
|
-
/\baccept\b.*\?/i,
|
|
113
|
-
/\bcontinue\b.*\?/i,
|
|
114
|
-
/\bproceed\b.*\?/i,
|
|
115
|
-
/permission/i,
|
|
116
|
-
/confirmation/i,
|
|
117
|
-
/press.*enter/i,
|
|
118
|
-
/waiting for/i,
|
|
119
|
-
/are you sure/i,
|
|
120
|
-
/would you like/i,
|
|
121
|
-
/do you want/i,
|
|
122
|
-
/please confirm/i,
|
|
123
|
-
/requires.*approval/i,
|
|
124
|
-
/needs.*input/i,
|
|
125
|
-
/⏵⏵\s*accept edits/i,
|
|
126
|
-
/shift\+tab to cycle/i,
|
|
127
|
-
];
|
|
128
|
-
const hasClaudeInputBox = /╭─+╮/.test(lastLines) && /╰─+╯/.test(lastLines) && /│\s+>\s+.*│/.test(lastLines);
|
|
129
|
-
const needsAttention = attentionPatterns.some(pattern => pattern.test(captureOutput)) ||
|
|
130
|
-
(pane.agent !== 'opencode' && hasClaudeInputBox);
|
|
131
|
-
if (needsAttention) {
|
|
132
|
-
newStatus = 'waiting';
|
|
133
|
-
}
|
|
134
|
-
// Additional Claude-specific checks
|
|
135
|
-
if (pane.agent !== 'opencode') {
|
|
136
|
-
// Check for accept edits specifically (without esc to interrupt means waiting)
|
|
137
|
-
if (/accept edits/i.test(captureOutput)) {
|
|
138
|
-
newStatus = 'waiting';
|
|
139
|
-
}
|
|
140
|
-
// Check for Claude questions
|
|
141
|
-
const claudeQuestionPatterns = [
|
|
142
|
-
/I (can|could|should|would|will|may|might)/i,
|
|
143
|
-
/Let me know/i,
|
|
144
|
-
/Please (tell|let|inform|advise)/i,
|
|
145
|
-
/Would you prefer/i,
|
|
146
|
-
/Should I (proceed|continue|go ahead)/i,
|
|
147
|
-
];
|
|
148
|
-
if (claudeQuestionPatterns.some(pattern => pattern.test(lastLines))) {
|
|
149
|
-
newStatus = 'waiting';
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
// Add stability check - require consistent status for multiple checks
|
|
154
|
-
const history = statusHistory.get(pane.id) || [];
|
|
155
|
-
const currentStatus = statusesRef.current.get(pane.id) || 'idle';
|
|
156
|
-
// Initialize with current status if no history
|
|
157
|
-
if (history.length === 0 && currentStatus !== 'idle') {
|
|
158
|
-
history.push(currentStatus);
|
|
159
|
-
}
|
|
160
|
-
history.push(newStatus);
|
|
161
|
-
// Keep only last 4 status checks for better stability
|
|
162
|
-
if (history.length > 4)
|
|
163
|
-
history.shift();
|
|
164
|
-
statusHistory.set(pane.id, history);
|
|
165
|
-
// Determine stable status - require 2 consistent readings to change
|
|
166
|
-
let stableStatus = currentStatus;
|
|
167
|
-
if (history.length >= 2) {
|
|
168
|
-
// Count occurrences of each status in recent history
|
|
169
|
-
const statusCounts = new Map();
|
|
170
|
-
history.forEach(s => statusCounts.set(s, (statusCounts.get(s) || 0) + 1));
|
|
171
|
-
// Find the most common status
|
|
172
|
-
let maxCount = 0;
|
|
173
|
-
let mostCommonStatus = stableStatus;
|
|
174
|
-
for (const [status, count] of statusCounts) {
|
|
175
|
-
if (count > maxCount) {
|
|
176
|
-
maxCount = count;
|
|
177
|
-
mostCommonStatus = status;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
// Only change if new status appears at least twice
|
|
181
|
-
if (mostCommonStatus !== currentStatus && maxCount >= 2) {
|
|
182
|
-
stableStatus = mostCommonStatus;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
// Set the status in the map
|
|
186
|
-
newStatuses.set(pane.id, stableStatus);
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
// On error, keep the current status
|
|
190
|
-
newStatuses.set(pane.id, statusesRef.current.get(pane.id));
|
|
191
|
-
}
|
|
192
|
-
}));
|
|
193
|
-
// Update the statuses state if there were any changes
|
|
194
|
-
setStatuses(newStatuses);
|
|
195
|
-
};
|
|
196
|
-
monitorAgentStatus();
|
|
197
|
-
const agentInterval = setInterval(monitorAgentStatus, 2000);
|
|
198
|
-
return () => clearInterval(agentInterval);
|
|
199
|
-
}, 500);
|
|
33
|
+
};
|
|
34
|
+
// Listen for status updates
|
|
35
|
+
detector.on('status-updated', handleStatusUpdate);
|
|
36
|
+
detector.on('pane-removed', handlePaneRemoved);
|
|
37
|
+
// Initial load of current statuses
|
|
38
|
+
const currentStatuses = detector.getAllStatuses();
|
|
39
|
+
setStatuses(currentStatuses);
|
|
200
40
|
return () => {
|
|
201
|
-
|
|
41
|
+
detector.off('status-updated', handleStatusUpdate);
|
|
42
|
+
detector.off('pane-removed', handlePaneRemoved);
|
|
202
43
|
};
|
|
203
|
-
}, [
|
|
44
|
+
}, []);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const detector = statusDetector.current;
|
|
47
|
+
// Update monitoring when panes change or suspend state changes
|
|
48
|
+
if (!suspend && panes.length > 0) {
|
|
49
|
+
// Start monitoring these panes
|
|
50
|
+
detector.monitorPanes(panes).catch(err => {
|
|
51
|
+
console.error('Failed to monitor panes:', err);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}, [panes, suspend]);
|
|
204
55
|
return statuses;
|
|
205
56
|
}
|
|
206
57
|
//# sourceMappingURL=useAgentStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentStatus.js","sourceRoot":"","sources":["../../src/hooks/useAgentStatus.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"useAgentStatus.js","sourceRoot":"","sources":["../../src/hooks/useAgentStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAWlE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAwB;IAC5F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAiB,IAAI,GAAG,EAAE,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAE/C,uBAAuB;IACvB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC;QAExC,gDAAgD;QAChD,MAAM,kBAAkB,GAAG,CAAC,KAAU,EAAE,EAAE;YACxC,WAAW,CAAC,YAAY,CAAC,EAAE;gBACzB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5C,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,6BAA6B;QAC7B,MAAM,iBAAiB,GAAG,CAAC,KAAU,EAAE,EAAE;YACvC,uBAAuB;YACvB,WAAW,CAAC,YAAY,CAAC,EAAE;gBACzB,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1C,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjC,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,4BAA4B;YAC5B,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QAEF,4BAA4B;QAC5B,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAE/C,mCAAmC;QACnC,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAClD,WAAW,CAAC,eAAe,CAAC,CAAC;QAE7B,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;YACnD,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAClD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC;QAExC,+DAA+D;QAC/D,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,+BAA+B;YAC/B,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACvC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -8,8 +8,9 @@ interface Params {
|
|
|
8
8
|
setNewPanePrompt: (v: string) => void;
|
|
9
9
|
loadPanes: () => Promise<void>;
|
|
10
10
|
panesFile: string;
|
|
11
|
+
availableAgents: Array<'claude' | 'opencode'>;
|
|
11
12
|
}
|
|
12
|
-
export default function usePaneCreation({ panes, savePanes, projectName, setIsCreatingPane, setStatusMessage, setNewPanePrompt, loadPanes, panesFile }: Params): {
|
|
13
|
+
export default function usePaneCreation({ panes, savePanes, projectName, setIsCreatingPane, setStatusMessage, setNewPanePrompt, loadPanes, panesFile, availableAgents }: Params): {
|
|
13
14
|
readonly openInEditor: (currentPrompt: string, setPrompt: (v: string) => void) => Promise<void>;
|
|
14
15
|
readonly createNewPane: (prompt: string, agent?: "claude" | "opencode") => Promise<void>;
|
|
15
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaneCreation.d.ts","sourceRoot":"","sources":["../../src/hooks/usePaneCreation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"usePaneCreation.d.ts","sourceRoot":"","sources":["../../src/hooks/usePaneCreation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,UAAU,MAAM;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;CAC/C;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM;2CAClI,MAAM,aAAa,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI;qCAqB5C,MAAM,UAAU,QAAQ,GAAG,UAAU;EA4E3E"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export default function usePaneCreation({ panes, savePanes, projectName, setIsCreatingPane, setStatusMessage, setNewPanePrompt, loadPanes, panesFile }) {
|
|
3
|
+
import { createPane } from '../utils/paneCreation.js';
|
|
4
|
+
export default function usePaneCreation({ panes, savePanes, projectName, setIsCreatingPane, setStatusMessage, setNewPanePrompt, loadPanes, panesFile, availableAgents }) {
|
|
6
5
|
const openInEditor = async (currentPrompt, setPrompt) => {
|
|
7
6
|
try {
|
|
8
7
|
const os = await import('os');
|
|
@@ -28,17 +27,7 @@ export default function usePaneCreation({ panes, savePanes, projectName, setIsCr
|
|
|
28
27
|
const createNewPane = async (prompt, agent) => {
|
|
29
28
|
setIsCreatingPane(true);
|
|
30
29
|
setStatusMessage('Generating slug...');
|
|
31
|
-
|
|
32
|
-
setStatusMessage(`Creating worktree: ${slug}...`);
|
|
33
|
-
let projectRoot;
|
|
34
|
-
try {
|
|
35
|
-
projectRoot = execSync('git rev-parse --show-toplevel', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
projectRoot = process.cwd();
|
|
39
|
-
}
|
|
40
|
-
const worktreePath = path.join(projectRoot, '.dmux', 'worktrees', slug);
|
|
41
|
-
const originalPaneId = execSync('tmux display-message -p "#{pane_id}"', { encoding: 'utf-8' }).trim();
|
|
30
|
+
// Clear the screen before creating pane
|
|
42
31
|
process.stdout.write('\x1b[2J\x1b[H');
|
|
43
32
|
process.stdout.write('\n'.repeat(100));
|
|
44
33
|
try {
|
|
@@ -51,100 +40,57 @@ export default function usePaneCreation({ panes, savePanes, projectName, setIsCr
|
|
|
51
40
|
execSync('tmux refresh-client', { stdio: 'pipe' });
|
|
52
41
|
}
|
|
53
42
|
catch { }
|
|
54
|
-
const paneCount = parseInt(execSync('tmux list-panes | wc -l', { encoding: 'utf-8' }).trim());
|
|
55
43
|
try {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
44
|
+
// Use the shared pane creation utility
|
|
45
|
+
const result = await createPane({
|
|
46
|
+
prompt,
|
|
47
|
+
agent,
|
|
48
|
+
projectName,
|
|
49
|
+
existingPanes: panes,
|
|
50
|
+
}, availableAgents);
|
|
51
|
+
if (result.needsAgentChoice) {
|
|
52
|
+
// This shouldn't happen in the TUI flow since we handle agent choice
|
|
53
|
+
// before calling createNewPane, but just in case
|
|
54
|
+
setStatusMessage('Agent choice is required');
|
|
55
|
+
setIsCreatingPane(false);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Update status as we go
|
|
59
|
+
setStatusMessage(`Creating worktree: ${result.pane.slug}...`);
|
|
71
60
|
await new Promise(r => setTimeout(r, 500));
|
|
72
61
|
setStatusMessage(agent ? `Worktree created, launching ${agent === 'opencode' ? 'opencode' : 'Claude'}...` : 'Worktree created.');
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
await new Promise(r => setTimeout(r,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
escapedCmd = claudeCmd.replace(/'/g, "'\\''");
|
|
90
|
-
execSync(`tmux send-keys -t '${paneInfo}' '${escapedCmd}'`, { stdio: 'pipe' });
|
|
91
|
-
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
92
|
-
}
|
|
93
|
-
else if (agent === 'opencode') {
|
|
94
|
-
const openCoderCmd = `opencode`;
|
|
95
|
-
const escapedOpenCmd = openCoderCmd.replace(/'/g, "'\\''");
|
|
96
|
-
execSync(`tmux send-keys -t '${paneInfo}' '${escapedOpenCmd}'`, { stdio: 'pipe' });
|
|
97
|
-
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
98
|
-
if (prompt && prompt.trim()) {
|
|
99
|
-
await new Promise(r => setTimeout(r, 1500));
|
|
100
|
-
const bufName = `dmux_prompt_${Date.now()}`;
|
|
101
|
-
const promptEsc = prompt.replace(/\\/g, '\\\\').replace(/'/g, "'\\''");
|
|
102
|
-
execSync(`tmux set-buffer -b '${bufName}' -- '${promptEsc}'`, { stdio: 'pipe' });
|
|
103
|
-
execSync(`tmux paste-buffer -b '${bufName}' -t '${paneInfo}'`, { stdio: 'pipe' });
|
|
104
|
-
await new Promise(r => setTimeout(r, 200));
|
|
105
|
-
execSync(`tmux delete-buffer -b '${bufName}'`, { stdio: 'pipe' });
|
|
106
|
-
execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
|
|
62
|
+
// Save the pane
|
|
63
|
+
const updatedPanes = [...panes, result.pane];
|
|
64
|
+
await savePanes(updatedPanes);
|
|
65
|
+
// Validate the pane was saved by checking the config
|
|
66
|
+
await new Promise(r => setTimeout(r, 100));
|
|
67
|
+
try {
|
|
68
|
+
const fs = await import('fs');
|
|
69
|
+
const configContent = await fs.promises.readFile(panesFile, 'utf-8');
|
|
70
|
+
const config = JSON.parse(configContent);
|
|
71
|
+
const savedPanes = Array.isArray(config) ? config : config.panes || [];
|
|
72
|
+
const paneExists = savedPanes.some((p) => p.id === result.pane.id);
|
|
73
|
+
if (!paneExists) {
|
|
74
|
+
console.error('Warning: Pane not found in config after save, retrying...');
|
|
75
|
+
await savePanes(updatedPanes);
|
|
76
|
+
}
|
|
107
77
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const newPane = {
|
|
111
|
-
id: `dmux-${Date.now()}`,
|
|
112
|
-
slug,
|
|
113
|
-
prompt: prompt ? (prompt.substring(0, 50) + (prompt.length > 50 ? '...' : '')) : 'No initial prompt',
|
|
114
|
-
paneId: paneInfo,
|
|
115
|
-
worktreePath,
|
|
116
|
-
agent,
|
|
117
|
-
};
|
|
118
|
-
const updatedPanes = [...panes, newPane];
|
|
119
|
-
await savePanes(updatedPanes);
|
|
120
|
-
// Validate the pane was saved by checking the config
|
|
121
|
-
// This helps catch race conditions
|
|
122
|
-
await new Promise(r => setTimeout(r, 100)); // Small delay to ensure write completes
|
|
123
|
-
try {
|
|
124
|
-
const fs = await import('fs');
|
|
125
|
-
const configContent = await fs.promises.readFile(panesFile, 'utf-8');
|
|
126
|
-
const config = JSON.parse(configContent);
|
|
127
|
-
const savedPanes = Array.isArray(config) ? config : config.panes || [];
|
|
128
|
-
const paneExists = savedPanes.some((p) => p.id === newPane.id);
|
|
129
|
-
if (!paneExists) {
|
|
130
|
-
// Retry the save if pane wasn't found
|
|
131
|
-
console.error('Warning: Pane not found in config after save, retrying...');
|
|
132
|
-
await savePanes(updatedPanes);
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error('Warning: Could not validate pane save:', error);
|
|
133
80
|
}
|
|
81
|
+
// Clear screen again
|
|
82
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
83
|
+
setIsCreatingPane(false);
|
|
84
|
+
setStatusMessage('');
|
|
85
|
+
setNewPanePrompt('');
|
|
86
|
+
await loadPanes();
|
|
134
87
|
}
|
|
135
88
|
catch (error) {
|
|
136
|
-
console.error('
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
execSync(`tmux select-pane -t '${originalPaneId}' -T "dmux-${projectName}"`, { stdio: 'pipe' });
|
|
89
|
+
console.error('Failed to create pane:', error);
|
|
90
|
+
setStatusMessage(`Failed to create pane: ${error}`);
|
|
91
|
+
setIsCreatingPane(false);
|
|
92
|
+
setTimeout(() => setStatusMessage(''), 3000);
|
|
141
93
|
}
|
|
142
|
-
catch { }
|
|
143
|
-
process.stdout.write('\x1b[2J\x1b[H');
|
|
144
|
-
setIsCreatingPane(false);
|
|
145
|
-
setStatusMessage('');
|
|
146
|
-
setNewPanePrompt('');
|
|
147
|
-
await loadPanes();
|
|
148
94
|
};
|
|
149
95
|
return { openInEditor, createNewPane };
|
|
150
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePaneCreation.js","sourceRoot":"","sources":["../../src/hooks/usePaneCreation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"usePaneCreation.js","sourceRoot":"","sources":["../../src/hooks/usePaneCreation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePanes.d.ts","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4C5C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;;;;;
|
|
1
|
+
{"version":3,"file":"usePanes.d.ts","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4C5C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;;;;;mCAwMnC,QAAQ,EAAE;EA8D9C"}
|
package/dist/hooks/usePanes.js
CHANGED
|
@@ -37,6 +37,7 @@ async function withWriteLock(operation) {
|
|
|
37
37
|
export default function usePanes(panesFile, skipLoading) {
|
|
38
38
|
const [panes, setPanes] = useState([]);
|
|
39
39
|
const [isLoading, setIsLoading] = useState(true);
|
|
40
|
+
const [initialLoadComplete, setInitialLoadComplete] = useState(false);
|
|
40
41
|
const loadPanes = async () => {
|
|
41
42
|
if (skipLoading)
|
|
42
43
|
return;
|
|
@@ -92,9 +93,9 @@ export default function usePanes(panesFile, skipLoading) {
|
|
|
92
93
|
}
|
|
93
94
|
return p;
|
|
94
95
|
});
|
|
95
|
-
// Only attempt to recreate missing panes on initial load
|
|
96
|
-
// This prevents disruptive recreation during regular polling
|
|
97
|
-
const missingPanes = (allPaneIds.length > 0 && panes.length === 0)
|
|
96
|
+
// Only attempt to recreate missing panes on initial load AND only if not already completed
|
|
97
|
+
// This prevents disruptive recreation during regular polling and race conditions with pane closing
|
|
98
|
+
const missingPanes = (allPaneIds.length > 0 && panes.length === 0 && !initialLoadComplete)
|
|
98
99
|
? reboundPanes.filter(pane => !allPaneIds.includes(pane.paneId))
|
|
99
100
|
: [];
|
|
100
101
|
// Recreate missing panes (only on initial load)
|
|
@@ -178,6 +179,7 @@ export default function usePanes(panesFile, skipLoading) {
|
|
|
178
179
|
catch { }
|
|
179
180
|
});
|
|
180
181
|
setPanes(activePanes);
|
|
182
|
+
setInitialLoadComplete(true);
|
|
181
183
|
return; // Exit early for initial load
|
|
182
184
|
}
|
|
183
185
|
// For subsequent loads, check if any pane IDs were remapped
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePanes.js","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,aAAa,CAAC;AAY7B,wDAAwD;AACxD,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,MAAM,UAAU,GAA4B,EAAE,CAAC;AAE/C,KAAK,UAAU,aAAa,CAAI,SAA2B;IACzD,IAAI,SAAS,EAAE,CAAC;QACd,uBAAuB;QACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;oBACjC,OAAO,CAAC,MAAa,CAAC,CAAC;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,gCAAgC;QAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,MAAM;gBAAE,MAAM,MAAM,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,SAAiB,EAAE,WAAoB;IACtE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"usePanes.js","sourceRoot":"","sources":["../../src/hooks/usePanes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalWidth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTerminalWidth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminalWidth.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,gBAAgB,WA+BvC"}
|