dmux 3.1.1 → 3.2.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/CleanTextInput.d.ts +9 -0
- package/dist/CleanTextInput.d.ts.map +1 -1
- package/dist/CleanTextInput.js +127 -47
- package/dist/CleanTextInput.js.map +1 -1
- package/dist/DmuxApp.d.ts +2 -2
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +1396 -750
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/paneActions.d.ts.map +1 -1
- package/dist/actions/paneActions.js +68 -11
- package/dist/actions/paneActions.js.map +1 -1
- package/dist/actions/types.d.ts +1 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +1 -0
- package/dist/actions/types.js.map +1 -1
- package/dist/components/ActionInputDialog.d.ts.map +1 -1
- package/dist/components/ActionInputDialog.js +3 -2
- package/dist/components/ActionInputDialog.js.map +1 -1
- package/dist/components/DialogBox.d.ts +16 -0
- package/dist/components/DialogBox.d.ts.map +1 -0
- package/dist/components/DialogBox.js +12 -0
- package/dist/components/DialogBox.js.map +1 -0
- package/dist/components/FooterHelp.d.ts +9 -0
- package/dist/components/FooterHelp.d.ts.map +1 -1
- package/dist/components/FooterHelp.js +41 -5
- package/dist/components/FooterHelp.js.map +1 -1
- package/dist/components/PaneCard.d.ts +3 -1
- package/dist/components/PaneCard.d.ts.map +1 -1
- package/dist/components/PaneCard.js +50 -33
- package/dist/components/PaneCard.js.map +1 -1
- package/dist/components/PanesGrid.d.ts +3 -5
- package/dist/components/PanesGrid.d.ts.map +1 -1
- package/dist/components/PanesGrid.js +40 -10
- package/dist/components/PanesGrid.js.map +1 -1
- package/dist/dashboard.js +1 -1
- package/dist/decorative-pane.d.ts +3 -0
- package/dist/decorative-pane.d.ts.map +1 -0
- package/dist/decorative-pane.js +136 -0
- package/dist/decorative-pane.js.map +1 -0
- package/dist/hooks/useActionSystem.d.ts +14 -1
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +93 -4
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useNavigation.js +1 -1
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +1 -2
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +13 -27
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneRunner.d.ts.map +1 -1
- package/dist/hooks/usePaneRunner.js +8 -3
- package/dist/hooks/usePaneRunner.js.map +1 -1
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +210 -37
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +7 -13
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +217 -29
- package/dist/index.js.map +1 -1
- package/dist/popups/agentChoicePopup.d.ts +7 -0
- package/dist/popups/agentChoicePopup.d.ts.map +1 -0
- package/dist/popups/agentChoicePopup.js +74 -0
- package/dist/popups/agentChoicePopup.js.map +1 -0
- package/dist/popups/choicePopup.d.ts +7 -0
- package/dist/popups/choicePopup.d.ts.map +1 -0
- package/dist/popups/choicePopup.js +64 -0
- package/dist/popups/choicePopup.js.map +1 -0
- package/dist/popups/components/FileList.d.ts +13 -0
- package/dist/popups/components/FileList.d.ts.map +1 -0
- package/dist/popups/components/FileList.js +61 -0
- package/dist/popups/components/FileList.js.map +1 -0
- package/dist/popups/components/PopupContainer.d.ts +14 -0
- package/dist/popups/components/PopupContainer.d.ts.map +1 -0
- package/dist/popups/components/PopupContainer.js +15 -0
- package/dist/popups/components/PopupContainer.js.map +1 -0
- package/dist/popups/components/PopupInputBox.d.ts +11 -0
- package/dist/popups/components/PopupInputBox.d.ts.map +1 -0
- package/dist/popups/components/PopupInputBox.js +10 -0
- package/dist/popups/components/PopupInputBox.js.map +1 -0
- package/dist/popups/components/PopupWrapper.d.ts +37 -0
- package/dist/popups/components/PopupWrapper.d.ts.map +1 -0
- package/dist/popups/components/PopupWrapper.js +88 -0
- package/dist/popups/components/PopupWrapper.js.map +1 -0
- package/dist/popups/components/index.d.ts +8 -0
- package/dist/popups/components/index.d.ts.map +1 -0
- package/dist/popups/components/index.js +8 -0
- package/dist/popups/components/index.js.map +1 -0
- package/dist/popups/config.d.ts +40 -0
- package/dist/popups/config.d.ts.map +1 -0
- package/dist/popups/config.js +40 -0
- package/dist/popups/config.js.map +1 -0
- package/dist/popups/confirmPopup.d.ts +7 -0
- package/dist/popups/confirmPopup.d.ts.map +1 -0
- package/dist/popups/confirmPopup.js +72 -0
- package/dist/popups/confirmPopup.js.map +1 -0
- package/dist/popups/hooksPopup.d.ts +7 -0
- package/dist/popups/hooksPopup.d.ts.map +1 -0
- package/dist/popups/hooksPopup.js +71 -0
- package/dist/popups/hooksPopup.js.map +1 -0
- package/dist/popups/inputPopup.d.ts +7 -0
- package/dist/popups/inputPopup.d.ts.map +1 -0
- package/dist/popups/inputPopup.js +48 -0
- package/dist/popups/inputPopup.js.map +1 -0
- package/dist/popups/kebabMenuPopup.d.ts +7 -0
- package/dist/popups/kebabMenuPopup.d.ts.map +1 -0
- package/dist/popups/kebabMenuPopup.js +52 -0
- package/dist/popups/kebabMenuPopup.js.map +1 -0
- package/dist/popups/logsPopup.d.ts +12 -0
- package/dist/popups/logsPopup.d.ts.map +1 -0
- package/dist/popups/logsPopup.js +364 -0
- package/dist/popups/logsPopup.js.map +1 -0
- package/dist/popups/mergePopup.d.ts +7 -0
- package/dist/popups/mergePopup.d.ts.map +1 -0
- package/dist/popups/mergePopup.js +310 -0
- package/dist/popups/mergePopup.js.map +1 -0
- package/dist/popups/newPanePopup.d.ts +7 -0
- package/dist/popups/newPanePopup.d.ts.map +1 -0
- package/dist/popups/newPanePopup.js +234 -0
- package/dist/popups/newPanePopup.js.map +1 -0
- package/dist/popups/progressPopup.d.ts +8 -0
- package/dist/popups/progressPopup.d.ts.map +1 -0
- package/dist/popups/progressPopup.js +54 -0
- package/dist/popups/progressPopup.js.map +1 -0
- package/dist/popups/remotePopup.d.ts +6 -0
- package/dist/popups/remotePopup.d.ts.map +1 -0
- package/dist/popups/remotePopup.js +166 -0
- package/dist/popups/remotePopup.js.map +1 -0
- package/dist/popups/settingsPopup.d.ts +7 -0
- package/dist/popups/settingsPopup.d.ts.map +1 -0
- package/dist/popups/settingsPopup.js +212 -0
- package/dist/popups/settingsPopup.js.map +1 -0
- package/dist/popups/shortcutsPopup.d.ts +6 -0
- package/dist/popups/shortcutsPopup.d.ts.map +1 -0
- package/dist/popups/shortcutsPopup.js +74 -0
- package/dist/popups/shortcutsPopup.js.map +1 -0
- package/dist/popups/templates/SimpleInputPopup.d.ts +15 -0
- package/dist/popups/templates/SimpleInputPopup.d.ts.map +1 -0
- package/dist/popups/templates/SimpleInputPopup.js +28 -0
- package/dist/popups/templates/SimpleInputPopup.js.map +1 -0
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +2066 -968
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes.d.ts +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +73 -6
- package/dist/server/routes.js.map +1 -1
- package/dist/services/ConfigWatcher.d.ts.map +1 -1
- package/dist/services/ConfigWatcher.js +10 -3
- package/dist/services/ConfigWatcher.js.map +1 -1
- package/dist/services/LogService.d.ts +112 -0
- package/dist/services/LogService.d.ts.map +1 -0
- package/dist/services/LogService.js +252 -0
- package/dist/services/LogService.js.map +1 -0
- package/dist/services/PaneWorkerManager.d.ts.map +1 -1
- package/dist/services/PaneWorkerManager.js +35 -9
- package/dist/services/PaneWorkerManager.js.map +1 -1
- package/dist/services/TunnelService.d.ts +1 -0
- package/dist/services/TunnelService.d.ts.map +1 -1
- package/dist/services/TunnelService.js +56 -15
- package/dist/services/TunnelService.js.map +1 -1
- package/dist/shared/StateManager.d.ts +49 -1
- package/dist/shared/StateManager.d.ts.map +1 -1
- package/dist/shared/StateManager.js +97 -2
- package/dist/shared/StateManager.js.map +1 -1
- package/dist/spacer-pane.d.ts +8 -0
- package/dist/spacer-pane.d.ts.map +1 -0
- package/dist/spacer-pane.js +40 -0
- package/dist/spacer-pane.js.map +1 -0
- package/dist/theme/colors.d.ts +25 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +33 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/asciiArt.d.ts +26 -0
- package/dist/utils/asciiArt.d.ts.map +1 -0
- package/dist/utils/asciiArt.js +88 -0
- package/dist/utils/asciiArt.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
- package/dist/utils/conflictResolutionPane.js +8 -4
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/fileScanner.d.ts +23 -0
- package/dist/utils/fileScanner.d.ts.map +1 -0
- package/dist/utils/fileScanner.js +123 -0
- package/dist/utils/fileScanner.js.map +1 -0
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +1 -1
- package/dist/utils/hooks.d.ts.map +1 -1
- package/dist/utils/hooks.js +65 -36
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts +45 -0
- package/dist/utils/layoutManager.d.ts.map +1 -0
- package/dist/utils/layoutManager.js +500 -0
- package/dist/utils/layoutManager.js.map +1 -0
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +125 -11
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/popup.d.ts +97 -0
- package/dist/utils/popup.d.ts.map +1 -0
- package/dist/utils/popup.js +509 -0
- package/dist/utils/popup.js.map +1 -0
- package/dist/utils/postPaneCleanup.d.ts +12 -0
- package/dist/utils/postPaneCleanup.d.ts.map +1 -0
- package/dist/utils/postPaneCleanup.js +53 -0
- package/dist/utils/postPaneCleanup.js.map +1 -0
- package/dist/utils/shellPaneDetection.d.ts +44 -0
- package/dist/utils/shellPaneDetection.d.ts.map +1 -0
- package/dist/utils/shellPaneDetection.js +175 -0
- package/dist/utils/shellPaneDetection.js.map +1 -0
- package/dist/utils/tmux.d.ts +53 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +352 -84
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +22 -0
- package/dist/utils/welcomePane.d.ts.map +1 -0
- package/dist/utils/welcomePane.js +119 -0
- package/dist/utils/welcomePane.js.map +1 -0
- package/dist/utils/welcomePaneManager.d.ts +36 -0
- package/dist/utils/welcomePaneManager.d.ts.map +1 -0
- package/dist/utils/welcomePaneManager.js +160 -0
- package/dist/utils/welcomePaneManager.js.map +1 -0
- package/dist/workers/PaneWorker.js +2 -0
- package/dist/workers/PaneWorker.js.map +1 -1
- package/package.json +5 -2
- package/dist/components/NewPaneDialog.d.ts +0 -9
- package/dist/components/NewPaneDialog.d.ts.map +0 -1
- package/dist/components/NewPaneDialog.js +0 -11
- package/dist/components/NewPaneDialog.js.map +0 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized Logging Service for dmux
|
|
3
|
+
*
|
|
4
|
+
* Replaces scattered console.log/error calls with a unified logging system
|
|
5
|
+
* that can be viewed in a dedicated UI without messing up pane formatting.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
/**
|
|
9
|
+
* LogService singleton - central logging hub for dmux
|
|
10
|
+
*/
|
|
11
|
+
export class LogService extends EventEmitter {
|
|
12
|
+
static instance;
|
|
13
|
+
logs = [];
|
|
14
|
+
maxLogs = 1000; // Circular buffer size
|
|
15
|
+
logCounter = 0;
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
static getInstance() {
|
|
20
|
+
if (!LogService.instance) {
|
|
21
|
+
LogService.instance = new LogService();
|
|
22
|
+
}
|
|
23
|
+
return LogService.instance;
|
|
24
|
+
}
|
|
25
|
+
suppressConsole = false;
|
|
26
|
+
/**
|
|
27
|
+
* Suppress console output (prevents logs from appearing in terminal)
|
|
28
|
+
*/
|
|
29
|
+
setSuppressConsole(suppress) {
|
|
30
|
+
this.suppressConsole = suppress;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a log entry
|
|
34
|
+
*/
|
|
35
|
+
addLog(level, message, source, paneId, stack) {
|
|
36
|
+
const entry = {
|
|
37
|
+
id: `log-${Date.now()}-${this.logCounter++}`,
|
|
38
|
+
timestamp: Date.now(),
|
|
39
|
+
level,
|
|
40
|
+
message,
|
|
41
|
+
source,
|
|
42
|
+
paneId,
|
|
43
|
+
read: false,
|
|
44
|
+
stack,
|
|
45
|
+
};
|
|
46
|
+
this.logs.push(entry);
|
|
47
|
+
// Maintain circular buffer - remove oldest logs when limit exceeded
|
|
48
|
+
if (this.logs.length > this.maxLogs) {
|
|
49
|
+
this.logs.shift();
|
|
50
|
+
}
|
|
51
|
+
// Emit event for listeners (StateManager will pick this up)
|
|
52
|
+
this.emit('log-added', entry);
|
|
53
|
+
// Also log to console for development (can be disabled in production)
|
|
54
|
+
if (!this.suppressConsole && (process.env.NODE_ENV !== 'production' || level === 'error')) {
|
|
55
|
+
const prefix = `[${source || 'dmux'}]`;
|
|
56
|
+
switch (level) {
|
|
57
|
+
case 'error':
|
|
58
|
+
console.error(prefix, message, stack || '');
|
|
59
|
+
break;
|
|
60
|
+
case 'warn':
|
|
61
|
+
console.warn(prefix, message);
|
|
62
|
+
break;
|
|
63
|
+
case 'info':
|
|
64
|
+
console.log(prefix, message);
|
|
65
|
+
break;
|
|
66
|
+
case 'debug':
|
|
67
|
+
// Always show debug logs
|
|
68
|
+
console.log(prefix, message);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log an error
|
|
75
|
+
*/
|
|
76
|
+
error(message, source, paneId, error) {
|
|
77
|
+
const stack = error?.stack;
|
|
78
|
+
this.addLog('error', message, source, paneId, stack);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Log a warning
|
|
82
|
+
*/
|
|
83
|
+
warn(message, source, paneId) {
|
|
84
|
+
this.addLog('warn', message, source, paneId);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Log an info message
|
|
88
|
+
*/
|
|
89
|
+
info(message, source, paneId) {
|
|
90
|
+
this.addLog('info', message, source, paneId);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log a debug message
|
|
94
|
+
*/
|
|
95
|
+
debug(message, source, paneId) {
|
|
96
|
+
this.addLog('debug', message, source, paneId);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get all logs with optional filtering
|
|
100
|
+
*/
|
|
101
|
+
getLogs(filter) {
|
|
102
|
+
let filtered = [...this.logs];
|
|
103
|
+
if (filter) {
|
|
104
|
+
if (filter.level) {
|
|
105
|
+
const levels = Array.isArray(filter.level) ? filter.level : [filter.level];
|
|
106
|
+
filtered = filtered.filter(log => levels.includes(log.level));
|
|
107
|
+
}
|
|
108
|
+
if (filter.source) {
|
|
109
|
+
filtered = filtered.filter(log => log.source === filter.source);
|
|
110
|
+
}
|
|
111
|
+
if (filter.paneId) {
|
|
112
|
+
filtered = filtered.filter(log => log.paneId === filter.paneId);
|
|
113
|
+
}
|
|
114
|
+
if (filter.unreadOnly) {
|
|
115
|
+
filtered = filtered.filter(log => !log.read);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Return oldest first (newest at bottom)
|
|
119
|
+
return filtered;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get count of unread errors
|
|
123
|
+
*/
|
|
124
|
+
getUnreadErrorCount() {
|
|
125
|
+
return this.logs.filter(log => log.level === 'error' && !log.read).length;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get count of unread warnings
|
|
129
|
+
*/
|
|
130
|
+
getUnreadWarningCount() {
|
|
131
|
+
return this.logs.filter(log => log.level === 'warn' && !log.read).length;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Mark specific logs as read
|
|
135
|
+
*/
|
|
136
|
+
markAsRead(logIds) {
|
|
137
|
+
const idsSet = new Set(logIds);
|
|
138
|
+
this.logs.forEach(log => {
|
|
139
|
+
if (idsSet.has(log.id)) {
|
|
140
|
+
log.read = true;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
this.emit('logs-marked-read', logIds);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Mark all logs as read
|
|
147
|
+
*/
|
|
148
|
+
markAllAsRead() {
|
|
149
|
+
this.logs.forEach(log => {
|
|
150
|
+
log.read = true;
|
|
151
|
+
});
|
|
152
|
+
this.emit('all-logs-marked-read');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Mark all logs for a specific level as read
|
|
156
|
+
*/
|
|
157
|
+
markLevelAsRead(level) {
|
|
158
|
+
const markedIds = [];
|
|
159
|
+
this.logs.forEach(log => {
|
|
160
|
+
if (log.level === level && !log.read) {
|
|
161
|
+
log.read = true;
|
|
162
|
+
markedIds.push(log.id);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
if (markedIds.length > 0) {
|
|
166
|
+
this.emit('logs-marked-read', markedIds);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Clear all logs
|
|
171
|
+
*/
|
|
172
|
+
clearAll() {
|
|
173
|
+
this.logs = [];
|
|
174
|
+
this.emit('logs-cleared');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Clear logs for a specific pane
|
|
178
|
+
*/
|
|
179
|
+
clearForPane(paneId) {
|
|
180
|
+
const before = this.logs.length;
|
|
181
|
+
this.logs = this.logs.filter(log => log.paneId !== paneId);
|
|
182
|
+
const after = this.logs.length;
|
|
183
|
+
if (before !== after) {
|
|
184
|
+
this.emit('logs-cleared', { paneId, count: before - after });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get summary stats
|
|
189
|
+
*/
|
|
190
|
+
getStats() {
|
|
191
|
+
return {
|
|
192
|
+
total: this.logs.length,
|
|
193
|
+
errors: this.logs.filter(l => l.level === 'error').length,
|
|
194
|
+
warnings: this.logs.filter(l => l.level === 'warn').length,
|
|
195
|
+
unreadErrors: this.getUnreadErrorCount(),
|
|
196
|
+
unreadWarnings: this.getUnreadWarningCount(),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Reset the service (for testing)
|
|
201
|
+
*/
|
|
202
|
+
reset() {
|
|
203
|
+
this.logs = [];
|
|
204
|
+
this.logCounter = 0;
|
|
205
|
+
this.removeAllListeners();
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate test logs for UI development
|
|
209
|
+
*/
|
|
210
|
+
generateTestLogs(count = 100) {
|
|
211
|
+
// Suppress console output while generating test logs
|
|
212
|
+
this.suppressConsole = true;
|
|
213
|
+
const sources = ['startup', 'git', 'tmux', 'paneActions', 'api', 'server'];
|
|
214
|
+
const messages = [
|
|
215
|
+
'Press [L] to view logs, [L] to reset layout',
|
|
216
|
+
'Development mode enabled - this is a test warning',
|
|
217
|
+
'Debug log: System initialized successfully',
|
|
218
|
+
'HTTP server running on port 42001',
|
|
219
|
+
'Project root: /Volumes/StudioExternal/Primary/projects/dmux',
|
|
220
|
+
'dmux started for project: dmux',
|
|
221
|
+
'Pane created successfully',
|
|
222
|
+
'Git worktree initialized',
|
|
223
|
+
'Branch merged into main',
|
|
224
|
+
'File change detected. Starting incremental compilation...',
|
|
225
|
+
'Found 0 errors. Watching for file changes',
|
|
226
|
+
'Agent launched with prompt: Add user authentication',
|
|
227
|
+
'Connection established',
|
|
228
|
+
'Database connection failed: timeout after 5s',
|
|
229
|
+
'API request completed in 245ms',
|
|
230
|
+
'Cache cleared successfully',
|
|
231
|
+
'Session expired, redirecting to login',
|
|
232
|
+
'Build completed successfully',
|
|
233
|
+
'Tests passed: 42/42',
|
|
234
|
+
'Memory usage: 456MB / 2GB',
|
|
235
|
+
];
|
|
236
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
237
|
+
for (let i = 0; i < count; i++) {
|
|
238
|
+
const level = levels[Math.floor(Math.random() * levels.length)];
|
|
239
|
+
const source = sources[Math.floor(Math.random() * sources.length)];
|
|
240
|
+
const message = messages[Math.floor(Math.random() * messages.length)];
|
|
241
|
+
const paneId = Math.random() > 0.7 ? `dmux-${Math.floor(Math.random() * 5)}` : undefined;
|
|
242
|
+
this.addLog(level, `${message} (${i + 1})`, source, paneId);
|
|
243
|
+
// Space out timestamps slightly
|
|
244
|
+
this.logCounter++;
|
|
245
|
+
}
|
|
246
|
+
// Re-enable console output
|
|
247
|
+
this.suppressConsole = false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Export singleton instance
|
|
251
|
+
export default LogService.getInstance();
|
|
252
|
+
//# sourceMappingURL=LogService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogService.js","sourceRoot":"","sources":["../../src/services/LogService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneWorkerManager.d.ts","sourceRoot":"","sources":["../../src/services/PaneWorkerManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEhB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"PaneWorkerManager.d.ts","sourceRoot":"","sources":["../../src/services/PaneWorkerManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAatC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,gBAAgB;IAcxC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAyDlC;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC;IAsB3B;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAClC,IAAI;IAwBP;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,IAAI;IAiB7D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;YACW,aAAa;IAgC3B;;OAEG;IACH,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC,CAAC;KACJ;IAaD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC"}
|
|
@@ -2,6 +2,7 @@ import { Worker } from 'worker_threads';
|
|
|
2
2
|
import { randomUUID } from 'crypto';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
|
+
import { LogService } from './LogService.js';
|
|
5
6
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
7
|
/**
|
|
7
8
|
* Manages lifecycle of pane worker threads
|
|
@@ -14,7 +15,16 @@ export class PaneWorkerManager {
|
|
|
14
15
|
constructor(messageBus) {
|
|
15
16
|
this.messageBus = messageBus;
|
|
16
17
|
// Path to compiled worker file
|
|
17
|
-
|
|
18
|
+
// In dev mode with tsx, __dirname is src/services, but workers are in dist/
|
|
19
|
+
// In production, __dirname is dist/services, so relative path works
|
|
20
|
+
if (process.env.DMUX_DEV === 'true') {
|
|
21
|
+
// Development: use dist folder relative to project root
|
|
22
|
+
this.workerPath = path.join(__dirname, '..', '..', 'dist', 'workers', 'PaneWorker.js');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Production: use relative path from dist/services to dist/workers
|
|
26
|
+
this.workerPath = path.join(__dirname, '..', 'workers', 'PaneWorker.js');
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
29
|
/**
|
|
20
30
|
* Create a new worker for a pane
|
|
@@ -47,20 +57,26 @@ export class PaneWorkerManager {
|
|
|
47
57
|
});
|
|
48
58
|
// Handle worker errors
|
|
49
59
|
worker.on('error', (error) => {
|
|
50
|
-
|
|
60
|
+
const msg = `Worker ${pane.id} error`;
|
|
61
|
+
console.error(msg, error);
|
|
62
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', pane.id, error);
|
|
51
63
|
this.handleWorkerError(pane.id, error);
|
|
52
64
|
});
|
|
53
65
|
// Handle worker exit
|
|
54
66
|
worker.on('exit', (code) => {
|
|
55
67
|
if (code !== 0 && !this.isShuttingDown) {
|
|
56
|
-
|
|
68
|
+
const msg = `Worker ${pane.id} exited with code ${code}`;
|
|
69
|
+
console.error(msg);
|
|
70
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', pane.id);
|
|
57
71
|
this.handleWorkerExit(pane.id);
|
|
58
72
|
}
|
|
59
73
|
});
|
|
60
74
|
this.workers.set(pane.id, workerInfo);
|
|
61
75
|
}
|
|
62
76
|
catch (error) {
|
|
63
|
-
|
|
77
|
+
const msg = `Failed to create worker for pane ${pane.id}`;
|
|
78
|
+
console.error(msg, error);
|
|
79
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', pane.id, error instanceof Error ? error : undefined);
|
|
64
80
|
}
|
|
65
81
|
}
|
|
66
82
|
/**
|
|
@@ -89,7 +105,9 @@ export class PaneWorkerManager {
|
|
|
89
105
|
notifyWorker(paneId, message) {
|
|
90
106
|
const workerInfo = this.workers.get(paneId);
|
|
91
107
|
if (!workerInfo) {
|
|
92
|
-
|
|
108
|
+
const msg = `No worker found for pane ${paneId}`;
|
|
109
|
+
console.error(msg);
|
|
110
|
+
LogService.getInstance().warn(msg, 'PaneWorkerManager', paneId);
|
|
93
111
|
return;
|
|
94
112
|
}
|
|
95
113
|
const fullMessage = {
|
|
@@ -101,7 +119,9 @@ export class PaneWorkerManager {
|
|
|
101
119
|
workerInfo.worker.postMessage(fullMessage);
|
|
102
120
|
}
|
|
103
121
|
catch (error) {
|
|
104
|
-
|
|
122
|
+
const msg = `Failed to notify worker ${paneId}`;
|
|
123
|
+
console.error(msg, error);
|
|
124
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', paneId, error instanceof Error ? error : undefined);
|
|
105
125
|
}
|
|
106
126
|
}
|
|
107
127
|
/**
|
|
@@ -118,7 +138,9 @@ export class PaneWorkerManager {
|
|
|
118
138
|
workerInfo.worker.postMessage(fullMessage);
|
|
119
139
|
}
|
|
120
140
|
catch (error) {
|
|
121
|
-
|
|
141
|
+
const msg = `Failed to broadcast to worker ${paneId}`;
|
|
142
|
+
console.error(msg, error);
|
|
143
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', paneId, error instanceof Error ? error : undefined);
|
|
122
144
|
}
|
|
123
145
|
});
|
|
124
146
|
}
|
|
@@ -141,7 +163,9 @@ export class PaneWorkerManager {
|
|
|
141
163
|
await workerInfo.worker.terminate();
|
|
142
164
|
}
|
|
143
165
|
catch (error) {
|
|
144
|
-
|
|
166
|
+
const msg = `Error destroying worker ${paneId}`;
|
|
167
|
+
console.error(msg, error);
|
|
168
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', paneId, error instanceof Error ? error : undefined);
|
|
145
169
|
}
|
|
146
170
|
finally {
|
|
147
171
|
this.workers.delete(paneId);
|
|
@@ -195,7 +219,9 @@ export class PaneWorkerManager {
|
|
|
195
219
|
this.restartWorker(paneId);
|
|
196
220
|
}
|
|
197
221
|
else {
|
|
198
|
-
|
|
222
|
+
const msg = `Worker ${paneId} failed too many times, not restarting`;
|
|
223
|
+
console.error(msg);
|
|
224
|
+
LogService.getInstance().error(msg, 'PaneWorkerManager', paneId);
|
|
199
225
|
this.workers.delete(paneId);
|
|
200
226
|
}
|
|
201
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneWorkerManager.js","sourceRoot":"","sources":["../../src/services/PaneWorkerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"PaneWorkerManager.js","sourceRoot":"","sources":["../../src/services/PaneWorkerManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelService.d.ts","sourceRoot":"","sources":["../../src/services/TunnelService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TunnelService.d.ts","sourceRoot":"","sources":["../../src/services/TunnelService.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAkB;IAE9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwFpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,MAAM,IAAI,MAAM,GAAG,IAAI;CAGxB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1,10 +1,50 @@
|
|
|
1
1
|
import { startTunnel } from 'untun';
|
|
2
|
+
import { LogService } from './LogService.js';
|
|
2
3
|
export class TunnelService {
|
|
3
4
|
tunnel = null;
|
|
4
5
|
tunnelUrl = null;
|
|
6
|
+
isCreating = false;
|
|
5
7
|
async start(port) {
|
|
8
|
+
// If we already have a URL, return it
|
|
9
|
+
if (this.tunnelUrl) {
|
|
10
|
+
LogService.getInstance().info('Returning existing tunnel URL', 'TunnelService');
|
|
11
|
+
return this.tunnelUrl;
|
|
12
|
+
}
|
|
13
|
+
// If tunnel is being created, wait a bit and check again
|
|
14
|
+
if (this.isCreating) {
|
|
15
|
+
LogService.getInstance().info('Tunnel creation already in progress, waiting...', 'TunnelService');
|
|
16
|
+
// Wait up to 45 seconds for existing creation to finish
|
|
17
|
+
for (let i = 0; i < 45; i++) {
|
|
18
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
19
|
+
if (this.tunnelUrl) {
|
|
20
|
+
return this.tunnelUrl;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
throw new Error('Tunnel creation timed out while waiting for existing process');
|
|
24
|
+
}
|
|
25
|
+
// If we have a tunnel but no URL yet, try to get the URL
|
|
26
|
+
if (this.tunnel && !this.tunnelUrl) {
|
|
27
|
+
try {
|
|
28
|
+
LogService.getInstance().info('Found existing tunnel, attempting to get URL...', 'TunnelService');
|
|
29
|
+
const urlPromise = this.tunnel.getURL();
|
|
30
|
+
const urlTimeoutPromise = new Promise((_, reject) => {
|
|
31
|
+
setTimeout(() => reject(new Error('Getting tunnel URL timed out after 30 seconds')), 30000);
|
|
32
|
+
});
|
|
33
|
+
this.tunnelUrl = await Promise.race([urlPromise, urlTimeoutPromise]);
|
|
34
|
+
if (this.tunnelUrl) {
|
|
35
|
+
LogService.getInstance().info(`Tunnel URL: ${this.tunnelUrl}`, 'TunnelService');
|
|
36
|
+
return this.tunnelUrl;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
LogService.getInstance().error('Failed to get URL from existing tunnel', 'TunnelService', undefined, error);
|
|
41
|
+
// Continue to create new tunnel
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.isCreating = true;
|
|
6
45
|
try {
|
|
7
|
-
|
|
46
|
+
const msg = `Starting tunnel for port ${port}`;
|
|
47
|
+
LogService.getInstance().info(msg, 'TunnelService');
|
|
8
48
|
// Start tunnel with timeout and better error handling
|
|
9
49
|
const tunnelPromise = startTunnel({
|
|
10
50
|
port,
|
|
@@ -12,34 +52,35 @@ export class TunnelService {
|
|
|
12
52
|
});
|
|
13
53
|
// Add timeout to prevent hanging
|
|
14
54
|
const timeoutPromise = new Promise((_, reject) => {
|
|
15
|
-
setTimeout(() => reject(new Error('Tunnel creation timed out after
|
|
55
|
+
setTimeout(() => reject(new Error('Tunnel creation timed out after 45 seconds')), 45000);
|
|
16
56
|
});
|
|
17
57
|
this.tunnel = await Promise.race([tunnelPromise, timeoutPromise]);
|
|
18
|
-
|
|
19
|
-
|
|
58
|
+
const msg1 = 'Tunnel created, getting URL...';
|
|
59
|
+
LogService.getInstance().info(msg1, 'TunnelService');
|
|
60
|
+
// Get URL with longer timeout (cloudflare can be slow)
|
|
20
61
|
const urlPromise = this.tunnel.getURL();
|
|
21
62
|
const urlTimeoutPromise = new Promise((_, reject) => {
|
|
22
|
-
setTimeout(() => reject(new Error('Getting tunnel URL timed out after
|
|
63
|
+
setTimeout(() => reject(new Error('Getting tunnel URL timed out after 30 seconds')), 30000);
|
|
23
64
|
});
|
|
24
65
|
this.tunnelUrl = await Promise.race([urlPromise, urlTimeoutPromise]);
|
|
25
66
|
if (!this.tunnelUrl) {
|
|
26
67
|
throw new Error('Tunnel URL is null');
|
|
27
68
|
}
|
|
28
|
-
|
|
69
|
+
const msg2 = `Tunnel URL: ${this.tunnelUrl}`;
|
|
70
|
+
LogService.getInstance().info(msg2, 'TunnelService');
|
|
29
71
|
return this.tunnelUrl;
|
|
30
72
|
}
|
|
31
73
|
catch (error) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
catch { }
|
|
39
|
-
this.tunnel = null;
|
|
40
|
-
}
|
|
74
|
+
const msg = 'Failed to start tunnel';
|
|
75
|
+
LogService.getInstance().error(msg, 'TunnelService', undefined, error instanceof Error ? error : undefined);
|
|
76
|
+
// Don't clean up the tunnel on failure - it might be in progress
|
|
77
|
+
// Just clean up the URL
|
|
78
|
+
this.tunnelUrl = null;
|
|
41
79
|
throw error;
|
|
42
80
|
}
|
|
81
|
+
finally {
|
|
82
|
+
this.isCreating = false;
|
|
83
|
+
}
|
|
43
84
|
}
|
|
44
85
|
async stop() {
|
|
45
86
|
if (this.tunnel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelService.js","sourceRoot":"","sources":["../../src/services/TunnelService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TunnelService.js","sourceRoot":"","sources":["../../src/services/TunnelService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import type { DmuxPane, ProjectSettings } from '../types.js';
|
|
2
|
+
import type { DmuxPane, ProjectSettings, LogEntry } from '../types.js';
|
|
3
3
|
export interface DmuxState {
|
|
4
4
|
panes: DmuxPane[];
|
|
5
5
|
projectName: string;
|
|
@@ -9,6 +9,9 @@ export interface DmuxState {
|
|
|
9
9
|
serverPort?: number;
|
|
10
10
|
serverUrl?: string;
|
|
11
11
|
panesFile?: string;
|
|
12
|
+
logs: LogEntry[];
|
|
13
|
+
unreadErrorCount: number;
|
|
14
|
+
unreadWarningCount: number;
|
|
12
15
|
}
|
|
13
16
|
export declare class StateManager extends EventEmitter {
|
|
14
17
|
private static instance;
|
|
@@ -16,6 +19,7 @@ export declare class StateManager extends EventEmitter {
|
|
|
16
19
|
private updateCallbacks;
|
|
17
20
|
private configWatcher;
|
|
18
21
|
private debugMessageCallback;
|
|
22
|
+
private logService;
|
|
19
23
|
private constructor();
|
|
20
24
|
static getInstance(): StateManager;
|
|
21
25
|
getState(): DmuxState;
|
|
@@ -38,6 +42,50 @@ export declare class StateManager extends EventEmitter {
|
|
|
38
42
|
* Resume config watcher after atomic operations
|
|
39
43
|
*/
|
|
40
44
|
resumeConfigWatcher(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Sync logs from LogService to state
|
|
47
|
+
*/
|
|
48
|
+
private syncLogsFromService;
|
|
49
|
+
/**
|
|
50
|
+
* Get logs from service with optional filtering
|
|
51
|
+
*/
|
|
52
|
+
getLogs(filter?: Parameters<typeof this.logService.getLogs>[0]): LogEntry[];
|
|
53
|
+
/**
|
|
54
|
+
* Get unread error count
|
|
55
|
+
*/
|
|
56
|
+
getUnreadErrorCount(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get unread warning count
|
|
59
|
+
*/
|
|
60
|
+
getUnreadWarningCount(): number;
|
|
61
|
+
/**
|
|
62
|
+
* Mark specific logs as read
|
|
63
|
+
*/
|
|
64
|
+
markLogsAsRead(logIds: string[]): void;
|
|
65
|
+
/**
|
|
66
|
+
* Mark all logs as read
|
|
67
|
+
*/
|
|
68
|
+
markAllLogsAsRead(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Mark all logs of a specific level as read
|
|
71
|
+
*/
|
|
72
|
+
markLogLevelAsRead(level: 'debug' | 'info' | 'warn' | 'error'): void;
|
|
73
|
+
/**
|
|
74
|
+
* Clear all logs
|
|
75
|
+
*/
|
|
76
|
+
clearAllLogs(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clear logs for a specific pane
|
|
79
|
+
*/
|
|
80
|
+
clearLogsForPane(paneId: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* Generate test logs for development
|
|
83
|
+
*/
|
|
84
|
+
generateTestLogs(count?: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* Get log statistics
|
|
87
|
+
*/
|
|
88
|
+
getLogStats(): ReturnType<typeof this.logService.getStats>;
|
|
41
89
|
reset(): void;
|
|
42
90
|
}
|
|
43
91
|
declare const _default: StateManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateManager.d.ts","sourceRoot":"","sources":["../../src/shared/StateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"StateManager.d.ts","sourceRoot":"","sources":["../../src/shared/StateManager.ts"],"names":[],"mappings":"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"}
|