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.
Files changed (197) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +412 -179
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/MergePane.d.ts.map +1 -1
  5. package/dist/MergePane.js +4 -15
  6. package/dist/MergePane.js.map +1 -1
  7. package/dist/PaneAnalyzer.d.ts +45 -0
  8. package/dist/PaneAnalyzer.d.ts.map +1 -0
  9. package/dist/PaneAnalyzer.js +278 -0
  10. package/dist/PaneAnalyzer.js.map +1 -0
  11. package/dist/_plugin-vue_export-helper.css +1 -0
  12. package/dist/actions/index.d.ts +19 -0
  13. package/dist/actions/index.d.ts.map +1 -0
  14. package/dist/actions/index.js +54 -0
  15. package/dist/actions/index.js.map +1 -0
  16. package/dist/actions/paneActions.d.ts +45 -0
  17. package/dist/actions/paneActions.d.ts.map +1 -0
  18. package/dist/actions/paneActions.js +932 -0
  19. package/dist/actions/paneActions.js.map +1 -0
  20. package/dist/actions/types.d.ts +101 -0
  21. package/dist/actions/types.d.ts.map +1 -0
  22. package/dist/actions/types.js +129 -0
  23. package/dist/actions/types.js.map +1 -0
  24. package/dist/adapters/apiActionHandler.d.ts +64 -0
  25. package/dist/adapters/apiActionHandler.d.ts.map +1 -0
  26. package/dist/adapters/apiActionHandler.js +170 -0
  27. package/dist/adapters/apiActionHandler.js.map +1 -0
  28. package/dist/adapters/tuiActionHandler.d.ts +57 -0
  29. package/dist/adapters/tuiActionHandler.d.ts.map +1 -0
  30. package/dist/adapters/tuiActionHandler.js +152 -0
  31. package/dist/adapters/tuiActionHandler.js.map +1 -0
  32. package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +28 -0
  33. package/dist/components/ActionChoiceDialog.d.ts +16 -0
  34. package/dist/components/ActionChoiceDialog.d.ts.map +1 -0
  35. package/dist/components/ActionChoiceDialog.js +29 -0
  36. package/dist/components/ActionChoiceDialog.js.map +1 -0
  37. package/dist/components/ActionConfirmDialog.d.ts +16 -0
  38. package/dist/components/ActionConfirmDialog.d.ts.map +1 -0
  39. package/dist/components/ActionConfirmDialog.js +31 -0
  40. package/dist/components/ActionConfirmDialog.js.map +1 -0
  41. package/dist/components/ActionInputDialog.d.ts +16 -0
  42. package/dist/components/ActionInputDialog.d.ts.map +1 -0
  43. package/dist/components/ActionInputDialog.js +49 -0
  44. package/dist/components/ActionInputDialog.js.map +1 -0
  45. package/dist/components/ActionProgressDialog.d.ts +13 -0
  46. package/dist/components/ActionProgressDialog.d.ts.map +1 -0
  47. package/dist/components/ActionProgressDialog.js +20 -0
  48. package/dist/components/ActionProgressDialog.js.map +1 -0
  49. package/dist/components/FooterHelp.d.ts +2 -0
  50. package/dist/components/FooterHelp.d.ts.map +1 -1
  51. package/dist/components/FooterHelp.js +9 -2
  52. package/dist/components/FooterHelp.js.map +1 -1
  53. package/dist/components/KebabMenu.d.ts +10 -0
  54. package/dist/components/KebabMenu.d.ts.map +1 -0
  55. package/dist/components/KebabMenu.js +18 -0
  56. package/dist/components/KebabMenu.js.map +1 -0
  57. package/dist/components/LoadingIndicator.d.ts.map +1 -1
  58. package/dist/components/LoadingIndicator.js +5 -5
  59. package/dist/components/LoadingIndicator.js.map +1 -1
  60. package/dist/components/PaneCard.d.ts +1 -0
  61. package/dist/components/PaneCard.d.ts.map +1 -1
  62. package/dist/components/PaneCard.js +21 -20
  63. package/dist/components/PaneCard.js.map +1 -1
  64. package/dist/components/PanesGrid.d.ts +1 -0
  65. package/dist/components/PanesGrid.d.ts.map +1 -1
  66. package/dist/components/PanesGrid.js +5 -4
  67. package/dist/components/PanesGrid.js.map +1 -1
  68. package/dist/components/QRCode.d.ts +7 -0
  69. package/dist/components/QRCode.d.ts.map +1 -0
  70. package/dist/components/QRCode.js +19 -0
  71. package/dist/components/QRCode.js.map +1 -0
  72. package/dist/components/Spinner.d.ts +10 -0
  73. package/dist/components/Spinner.d.ts.map +1 -0
  74. package/dist/components/Spinner.js +15 -0
  75. package/dist/components/Spinner.js.map +1 -0
  76. package/dist/dashboard.html +14 -0
  77. package/dist/dashboard.js +2 -0
  78. package/dist/hooks/useActionSystem.d.ts +31 -0
  79. package/dist/hooks/useActionSystem.d.ts.map +1 -0
  80. package/dist/hooks/useActionSystem.js +95 -0
  81. package/dist/hooks/useActionSystem.js.map +1 -0
  82. package/dist/hooks/useAgentStatus.d.ts +4 -3
  83. package/dist/hooks/useAgentStatus.d.ts.map +1 -1
  84. package/dist/hooks/useAgentStatus.js +45 -194
  85. package/dist/hooks/useAgentStatus.js.map +1 -1
  86. package/dist/hooks/usePaneCreation.d.ts +2 -1
  87. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  88. package/dist/hooks/usePaneCreation.js +46 -100
  89. package/dist/hooks/usePaneCreation.js.map +1 -1
  90. package/dist/hooks/usePanes.d.ts.map +1 -1
  91. package/dist/hooks/usePanes.js +5 -3
  92. package/dist/hooks/usePanes.js.map +1 -1
  93. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  94. package/dist/hooks/useTerminalWidth.js +18 -1
  95. package/dist/hooks/useTerminalWidth.js.map +1 -1
  96. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  97. package/dist/hooks/useWorktreeActions.js +4 -0
  98. package/dist/hooks/useWorktreeActions.js.map +1 -1
  99. package/dist/index.js +43 -6
  100. package/dist/index.js.map +1 -1
  101. package/dist/server/actionsApi.d.ts +37 -0
  102. package/dist/server/actionsApi.d.ts.map +1 -0
  103. package/dist/server/actionsApi.js +256 -0
  104. package/dist/server/actionsApi.js.map +1 -0
  105. package/dist/server/embedded-assets.d.ts +13 -0
  106. package/dist/server/embedded-assets.d.ts.map +1 -0
  107. package/dist/server/embedded-assets.js +5012 -0
  108. package/dist/server/embedded-assets.js.map +1 -0
  109. package/dist/server/index.d.ts +21 -0
  110. package/dist/server/index.d.ts.map +1 -0
  111. package/dist/server/index.js +99 -0
  112. package/dist/server/index.js.map +1 -0
  113. package/dist/server/routes.d.ts +3 -0
  114. package/dist/server/routes.d.ts.map +1 -0
  115. package/dist/server/routes.js +672 -0
  116. package/dist/server/routes.js.map +1 -0
  117. package/dist/server/static.d.ts +6 -0
  118. package/dist/server/static.d.ts.map +1 -0
  119. package/dist/server/static.js +3040 -0
  120. package/dist/server/static.js.map +1 -0
  121. package/dist/services/ConfigWatcher.d.ts +20 -0
  122. package/dist/services/ConfigWatcher.d.ts.map +1 -0
  123. package/dist/services/ConfigWatcher.js +75 -0
  124. package/dist/services/ConfigWatcher.js.map +1 -0
  125. package/dist/services/PaneWorkerManager.d.ts +69 -0
  126. package/dist/services/PaneWorkerManager.d.ts.map +1 -0
  127. package/dist/services/PaneWorkerManager.js +272 -0
  128. package/dist/services/PaneWorkerManager.js.map +1 -0
  129. package/dist/services/StatusDetector.d.ts +87 -0
  130. package/dist/services/StatusDetector.d.ts.map +1 -0
  131. package/dist/services/StatusDetector.js +387 -0
  132. package/dist/services/StatusDetector.js.map +1 -0
  133. package/dist/services/TerminalDiffer.d.ts +85 -0
  134. package/dist/services/TerminalDiffer.d.ts.map +1 -0
  135. package/dist/services/TerminalDiffer.js +499 -0
  136. package/dist/services/TerminalDiffer.js.map +1 -0
  137. package/dist/services/TerminalStreamer.d.ts +80 -0
  138. package/dist/services/TerminalStreamer.d.ts.map +1 -0
  139. package/dist/services/TerminalStreamer.js +490 -0
  140. package/dist/services/TerminalStreamer.js.map +1 -0
  141. package/dist/services/TunnelService.d.ts +9 -0
  142. package/dist/services/TunnelService.d.ts.map +1 -0
  143. package/dist/services/TunnelService.js +34 -0
  144. package/dist/services/TunnelService.js.map +1 -0
  145. package/dist/services/WorkerMessageBus.d.ts +48 -0
  146. package/dist/services/WorkerMessageBus.d.ts.map +1 -0
  147. package/dist/services/WorkerMessageBus.js +120 -0
  148. package/dist/services/WorkerMessageBus.js.map +1 -0
  149. package/dist/shared/StateManager.d.ts +34 -0
  150. package/dist/shared/StateManager.d.ts.map +1 -0
  151. package/dist/shared/StateManager.js +108 -0
  152. package/dist/shared/StateManager.js.map +1 -0
  153. package/dist/shared/StreamProtocol.d.ts +75 -0
  154. package/dist/shared/StreamProtocol.d.ts.map +1 -0
  155. package/dist/shared/StreamProtocol.js +37 -0
  156. package/dist/shared/StreamProtocol.js.map +1 -0
  157. package/dist/terminal.html +17 -0
  158. package/dist/terminal.js +3 -0
  159. package/dist/types.d.ts +21 -1
  160. package/dist/types.d.ts.map +1 -1
  161. package/dist/utils/agentDetection.d.ts +18 -0
  162. package/dist/utils/agentDetection.d.ts.map +1 -0
  163. package/dist/utils/agentDetection.js +73 -0
  164. package/dist/utils/agentDetection.js.map +1 -0
  165. package/dist/utils/aiMerge.d.ts +35 -0
  166. package/dist/utils/aiMerge.d.ts.map +1 -0
  167. package/dist/utils/aiMerge.js +298 -0
  168. package/dist/utils/aiMerge.js.map +1 -0
  169. package/dist/utils/conflictResolutionPane.d.ts +19 -0
  170. package/dist/utils/conflictResolutionPane.d.ts.map +1 -0
  171. package/dist/utils/conflictResolutionPane.js +214 -0
  172. package/dist/utils/conflictResolutionPane.js.map +1 -0
  173. package/dist/utils/mergeExecution.d.ts +52 -0
  174. package/dist/utils/mergeExecution.d.ts.map +1 -0
  175. package/dist/utils/mergeExecution.js +192 -0
  176. package/dist/utils/mergeExecution.js.map +1 -0
  177. package/dist/utils/mergeValidation.d.ts +67 -0
  178. package/dist/utils/mergeValidation.d.ts.map +1 -0
  179. package/dist/utils/mergeValidation.js +213 -0
  180. package/dist/utils/mergeValidation.js.map +1 -0
  181. package/dist/utils/paneCreation.d.ts +17 -0
  182. package/dist/utils/paneCreation.d.ts.map +1 -0
  183. package/dist/utils/paneCreation.js +274 -0
  184. package/dist/utils/paneCreation.js.map +1 -0
  185. package/dist/utils/port.d.ts +5 -0
  186. package/dist/utils/port.d.ts.map +1 -0
  187. package/dist/utils/port.js +54 -0
  188. package/dist/utils/port.js.map +1 -0
  189. package/dist/workers/PaneWorker.d.ts +2 -0
  190. package/dist/workers/PaneWorker.d.ts.map +1 -0
  191. package/dist/workers/PaneWorker.js +362 -0
  192. package/dist/workers/PaneWorker.js.map +1 -0
  193. package/dist/workers/WorkerMessages.d.ts +36 -0
  194. package/dist/workers/WorkerMessages.d.ts.map +1 -0
  195. package/dist/workers/WorkerMessages.js +9 -0
  196. package/dist/workers/WorkerMessages.js.map +1 -0
  197. package/package.json +19 -5
@@ -0,0 +1,499 @@
1
+ /**
2
+ * Terminal state diffing and patch generation
3
+ * Tracks virtual terminal state and generates minimal change sets
4
+ */
5
+ /**
6
+ * ANSI escape sequence parser state
7
+ */
8
+ var ParserState;
9
+ (function (ParserState) {
10
+ ParserState[ParserState["Normal"] = 0] = "Normal";
11
+ ParserState[ParserState["Escape"] = 1] = "Escape";
12
+ ParserState[ParserState["CSI"] = 2] = "CSI";
13
+ ParserState[ParserState["OSC"] = 3] = "OSC";
14
+ ParserState[ParserState["DCS"] = 4] = "DCS";
15
+ })(ParserState || (ParserState = {}));
16
+ /**
17
+ * Virtual terminal buffer that tracks state
18
+ */
19
+ export class TerminalBuffer {
20
+ width;
21
+ height;
22
+ buffer;
23
+ cursor;
24
+ savedCursor;
25
+ scrollTop = 0;
26
+ scrollBottom;
27
+ // Current text attributes
28
+ currentAttrs = {};
29
+ constructor(width, height) {
30
+ this.width = width;
31
+ this.height = height;
32
+ this.buffer = this.createEmptyBuffer();
33
+ this.cursor = { row: 0, col: 0 };
34
+ this.scrollBottom = height - 1;
35
+ }
36
+ createEmptyBuffer() {
37
+ const buffer = [];
38
+ for (let row = 0; row < this.height; row++) {
39
+ buffer[row] = [];
40
+ for (let col = 0; col < this.width; col++) {
41
+ buffer[row][col] = { char: ' ' };
42
+ }
43
+ }
44
+ return buffer;
45
+ }
46
+ /**
47
+ * Apply raw terminal output to buffer
48
+ */
49
+ applyOutput(output) {
50
+ let state = ParserState.Normal;
51
+ let escapeBuffer = '';
52
+ for (let i = 0; i < output.length; i++) {
53
+ const char = output[i];
54
+ switch (state) {
55
+ case ParserState.Normal:
56
+ if (char === '\x1b') {
57
+ state = ParserState.Escape;
58
+ }
59
+ else if (char === '\n') {
60
+ this.newLine();
61
+ }
62
+ else if (char === '\r') {
63
+ this.carriageReturn();
64
+ }
65
+ else if (char === '\b') {
66
+ this.backspace();
67
+ }
68
+ else if (char === '\t') {
69
+ this.tab();
70
+ }
71
+ else if (char >= ' ') {
72
+ this.writeChar(char);
73
+ }
74
+ break;
75
+ case ParserState.Escape:
76
+ if (char === '[') {
77
+ state = ParserState.CSI;
78
+ escapeBuffer = '';
79
+ }
80
+ else if (char === ']') {
81
+ state = ParserState.OSC;
82
+ escapeBuffer = '';
83
+ }
84
+ else if (char === 'P') {
85
+ state = ParserState.DCS;
86
+ escapeBuffer = '';
87
+ }
88
+ else {
89
+ // Single character escape sequence
90
+ this.handleEscapeChar(char);
91
+ state = ParserState.Normal;
92
+ }
93
+ break;
94
+ case ParserState.CSI:
95
+ if (char >= '@' && char <= '~') {
96
+ // End of CSI sequence
97
+ this.handleCSI(escapeBuffer, char);
98
+ state = ParserState.Normal;
99
+ }
100
+ else {
101
+ escapeBuffer += char;
102
+ }
103
+ break;
104
+ case ParserState.OSC:
105
+ if (char === '\x07' || (char === '\\' && escapeBuffer.endsWith('\x1b'))) {
106
+ // End of OSC sequence
107
+ this.handleOSC(escapeBuffer);
108
+ state = ParserState.Normal;
109
+ }
110
+ else {
111
+ escapeBuffer += char;
112
+ }
113
+ break;
114
+ case ParserState.DCS:
115
+ if (char === '\\' && escapeBuffer.endsWith('\x1b')) {
116
+ // End of DCS sequence
117
+ state = ParserState.Normal;
118
+ }
119
+ else {
120
+ escapeBuffer += char;
121
+ }
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ writeChar(char) {
127
+ if (this.cursor.col >= this.width) {
128
+ this.cursor.col = 0;
129
+ this.newLine();
130
+ }
131
+ this.buffer[this.cursor.row][this.cursor.col] = {
132
+ char,
133
+ ...this.currentAttrs
134
+ };
135
+ this.cursor.col++;
136
+ }
137
+ newLine() {
138
+ this.cursor.row++;
139
+ if (this.cursor.row >= this.height) {
140
+ // Scroll up
141
+ this.buffer.shift();
142
+ this.buffer.push(this.createEmptyRow());
143
+ this.cursor.row = this.height - 1;
144
+ }
145
+ }
146
+ carriageReturn() {
147
+ this.cursor.col = 0;
148
+ }
149
+ backspace() {
150
+ if (this.cursor.col > 0) {
151
+ this.cursor.col--;
152
+ }
153
+ }
154
+ tab() {
155
+ // Move to next tab stop (every 8 columns)
156
+ const nextTab = Math.floor((this.cursor.col + 8) / 8) * 8;
157
+ this.cursor.col = Math.min(nextTab, this.width - 1);
158
+ }
159
+ createEmptyRow() {
160
+ const row = [];
161
+ for (let col = 0; col < this.width; col++) {
162
+ row[col] = { char: ' ' };
163
+ }
164
+ return row;
165
+ }
166
+ handleEscapeChar(char) {
167
+ switch (char) {
168
+ case '7': // Save cursor
169
+ this.savedCursor = { ...this.cursor };
170
+ break;
171
+ case '8': // Restore cursor
172
+ if (this.savedCursor) {
173
+ this.cursor = { ...this.savedCursor };
174
+ }
175
+ break;
176
+ case 'D': // Index (move down)
177
+ this.newLine();
178
+ break;
179
+ case 'M': // Reverse index (move up)
180
+ if (this.cursor.row > 0) {
181
+ this.cursor.row--;
182
+ }
183
+ break;
184
+ }
185
+ }
186
+ handleCSI(params, command) {
187
+ const args = params.split(';').map(p => parseInt(p) || 0);
188
+ switch (command) {
189
+ case 'H': // Cursor position
190
+ case 'f':
191
+ this.cursor.row = Math.min(Math.max((args[0] || 1) - 1, 0), this.height - 1);
192
+ this.cursor.col = Math.min(Math.max((args[1] || 1) - 1, 0), this.width - 1);
193
+ break;
194
+ case 'A': // Cursor up
195
+ this.cursor.row = Math.max(this.cursor.row - (args[0] || 1), 0);
196
+ break;
197
+ case 'B': // Cursor down
198
+ this.cursor.row = Math.min(this.cursor.row + (args[0] || 1), this.height - 1);
199
+ break;
200
+ case 'C': // Cursor forward
201
+ this.cursor.col = Math.min(this.cursor.col + (args[0] || 1), this.width - 1);
202
+ break;
203
+ case 'D': // Cursor back
204
+ this.cursor.col = Math.max(this.cursor.col - (args[0] || 1), 0);
205
+ break;
206
+ case 'J': // Erase display
207
+ this.handleEraseDisplay(args[0] || 0);
208
+ break;
209
+ case 'K': // Erase line
210
+ this.handleEraseLine(args[0] || 0);
211
+ break;
212
+ case 'm': // SGR (Select Graphic Rendition)
213
+ this.handleSGR(args);
214
+ break;
215
+ }
216
+ }
217
+ handleOSC(params) {
218
+ // OSC sequences are typically used for setting window title
219
+ // We can ignore these for terminal display
220
+ }
221
+ handleEraseDisplay(mode) {
222
+ switch (mode) {
223
+ case 0: // Erase from cursor to end
224
+ // Erase rest of current line
225
+ for (let col = this.cursor.col; col < this.width; col++) {
226
+ this.buffer[this.cursor.row][col] = { char: ' ' };
227
+ }
228
+ // Erase lines below
229
+ for (let row = this.cursor.row + 1; row < this.height; row++) {
230
+ for (let col = 0; col < this.width; col++) {
231
+ this.buffer[row][col] = { char: ' ' };
232
+ }
233
+ }
234
+ break;
235
+ case 1: // Erase from beginning to cursor
236
+ // Erase beginning of current line
237
+ for (let col = 0; col <= this.cursor.col; col++) {
238
+ this.buffer[this.cursor.row][col] = { char: ' ' };
239
+ }
240
+ // Erase lines above
241
+ for (let row = 0; row < this.cursor.row; row++) {
242
+ for (let col = 0; col < this.width; col++) {
243
+ this.buffer[row][col] = { char: ' ' };
244
+ }
245
+ }
246
+ break;
247
+ case 2: // Erase entire display
248
+ case 3: // Erase entire display including scrollback
249
+ this.buffer = this.createEmptyBuffer();
250
+ break;
251
+ }
252
+ }
253
+ handleEraseLine(mode) {
254
+ switch (mode) {
255
+ case 0: // Erase from cursor to end of line
256
+ for (let col = this.cursor.col; col < this.width; col++) {
257
+ this.buffer[this.cursor.row][col] = { char: ' ' };
258
+ }
259
+ break;
260
+ case 1: // Erase from beginning to cursor
261
+ for (let col = 0; col <= this.cursor.col; col++) {
262
+ this.buffer[this.cursor.row][col] = { char: ' ' };
263
+ }
264
+ break;
265
+ case 2: // Erase entire line
266
+ for (let col = 0; col < this.width; col++) {
267
+ this.buffer[this.cursor.row][col] = { char: ' ' };
268
+ }
269
+ break;
270
+ }
271
+ }
272
+ handleSGR(args) {
273
+ if (args.length === 0 || args[0] === 0) {
274
+ // Reset all attributes
275
+ this.currentAttrs = {};
276
+ return;
277
+ }
278
+ for (const arg of args) {
279
+ switch (arg) {
280
+ case 0: // Reset
281
+ this.currentAttrs = {};
282
+ break;
283
+ case 1: // Bold
284
+ this.currentAttrs.bold = true;
285
+ break;
286
+ case 2: // Dim
287
+ this.currentAttrs.dim = true;
288
+ break;
289
+ case 3: // Italic
290
+ this.currentAttrs.italic = true;
291
+ break;
292
+ case 4: // Underline
293
+ this.currentAttrs.underline = true;
294
+ break;
295
+ case 21: // Bold off
296
+ delete this.currentAttrs.bold;
297
+ break;
298
+ case 22: // Normal intensity
299
+ delete this.currentAttrs.bold;
300
+ delete this.currentAttrs.dim;
301
+ break;
302
+ case 23: // Italic off
303
+ delete this.currentAttrs.italic;
304
+ break;
305
+ case 24: // Underline off
306
+ delete this.currentAttrs.underline;
307
+ break;
308
+ // Foreground colors
309
+ case 30:
310
+ case 31:
311
+ case 32:
312
+ case 33:
313
+ case 34:
314
+ case 35:
315
+ case 36:
316
+ case 37:
317
+ this.currentAttrs.fg = this.getColorName(arg - 30);
318
+ break;
319
+ case 39: // Default foreground
320
+ delete this.currentAttrs.fg;
321
+ break;
322
+ // Background colors
323
+ case 40:
324
+ case 41:
325
+ case 42:
326
+ case 43:
327
+ case 44:
328
+ case 45:
329
+ case 46:
330
+ case 47:
331
+ this.currentAttrs.bg = this.getColorName(arg - 40);
332
+ break;
333
+ case 49: // Default background
334
+ delete this.currentAttrs.bg;
335
+ break;
336
+ // Bright foreground colors
337
+ case 90:
338
+ case 91:
339
+ case 92:
340
+ case 93:
341
+ case 94:
342
+ case 95:
343
+ case 96:
344
+ case 97:
345
+ this.currentAttrs.fg = this.getColorName(arg - 90, true);
346
+ break;
347
+ // Bright background colors
348
+ case 100:
349
+ case 101:
350
+ case 102:
351
+ case 103:
352
+ case 104:
353
+ case 105:
354
+ case 106:
355
+ case 107:
356
+ this.currentAttrs.bg = this.getColorName(arg - 100, true);
357
+ break;
358
+ }
359
+ }
360
+ }
361
+ getColorName(index, bright = false) {
362
+ const colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];
363
+ const color = colors[index] || 'black';
364
+ return bright ? `bright-${color}` : color;
365
+ }
366
+ /**
367
+ * Get current buffer as text
368
+ */
369
+ getText() {
370
+ return this.buffer.map(row => row.map(cell => cell.char).join('')).join('\n');
371
+ }
372
+ /**
373
+ * Get buffer for comparison
374
+ */
375
+ getBuffer() {
376
+ return this.buffer;
377
+ }
378
+ /**
379
+ * Resize buffer
380
+ */
381
+ resize(width, height) {
382
+ const newBuffer = [];
383
+ for (let row = 0; row < height; row++) {
384
+ newBuffer[row] = [];
385
+ for (let col = 0; col < width; col++) {
386
+ if (row < this.height && col < this.width && this.buffer[row] && this.buffer[row][col]) {
387
+ newBuffer[row][col] = this.buffer[row][col];
388
+ }
389
+ else {
390
+ newBuffer[row][col] = { char: ' ' };
391
+ }
392
+ }
393
+ }
394
+ this.width = width;
395
+ this.height = height;
396
+ this.buffer = newBuffer;
397
+ this.scrollBottom = height - 1;
398
+ // Adjust cursor if needed
399
+ this.cursor.row = Math.min(this.cursor.row, height - 1);
400
+ this.cursor.col = Math.min(this.cursor.col, width - 1);
401
+ }
402
+ }
403
+ /**
404
+ * Generates diffs between terminal states
405
+ */
406
+ export class TerminalDiffer {
407
+ buffer;
408
+ lastSentBuffer = null;
409
+ constructor(width, height) {
410
+ this.buffer = new TerminalBuffer(width, height);
411
+ }
412
+ /**
413
+ * Apply output and generate patches
414
+ */
415
+ applyAndDiff(output) {
416
+ // Apply output to virtual buffer
417
+ this.buffer.applyOutput(output);
418
+ // Get current buffer state
419
+ const currentBuffer = this.buffer.getBuffer();
420
+ // Generate patches if we have a previous state
421
+ const changes = [];
422
+ if (this.lastSentBuffer) {
423
+ // Compare buffers and find differences
424
+ for (let row = 0; row < currentBuffer.length; row++) {
425
+ for (let col = 0; col < currentBuffer[row].length; col++) {
426
+ const oldCell = this.lastSentBuffer[row]?.[col];
427
+ const newCell = currentBuffer[row][col];
428
+ if (!oldCell || !this.cellsEqual(oldCell, newCell)) {
429
+ // Find consecutive changed cells in this row
430
+ let length = 1;
431
+ let text = newCell.char;
432
+ while (col + length < currentBuffer[row].length) {
433
+ const nextOld = this.lastSentBuffer[row]?.[col + length];
434
+ const nextNew = currentBuffer[row][col + length];
435
+ if (!nextOld || !this.cellsEqual(nextOld, nextNew)) {
436
+ text += nextNew.char;
437
+ length++;
438
+ }
439
+ else {
440
+ break;
441
+ }
442
+ }
443
+ changes.push({
444
+ row,
445
+ col,
446
+ text,
447
+ length
448
+ });
449
+ // Skip the cells we just processed
450
+ col += length - 1;
451
+ }
452
+ }
453
+ }
454
+ }
455
+ else {
456
+ // First update - send everything as one big change
457
+ const text = currentBuffer.map(row => row.map(cell => cell.char).join('')).join('\n');
458
+ if (text.trim()) {
459
+ changes.push({
460
+ row: 0,
461
+ col: 0,
462
+ text
463
+ });
464
+ }
465
+ }
466
+ // Save current buffer for next diff
467
+ this.lastSentBuffer = currentBuffer.map(row => [...row]);
468
+ return changes;
469
+ }
470
+ cellsEqual(a, b) {
471
+ return a.char === b.char &&
472
+ a.fg === b.fg &&
473
+ a.bg === b.bg &&
474
+ a.bold === b.bold &&
475
+ a.dim === b.dim &&
476
+ a.italic === b.italic &&
477
+ a.underline === b.underline;
478
+ }
479
+ /**
480
+ * Get full buffer state
481
+ */
482
+ getFullState() {
483
+ return this.buffer.getText();
484
+ }
485
+ /**
486
+ * Reset differ state
487
+ */
488
+ reset() {
489
+ this.lastSentBuffer = null;
490
+ }
491
+ /**
492
+ * Handle terminal resize
493
+ */
494
+ resize(width, height) {
495
+ this.buffer.resize(width, height);
496
+ this.lastSentBuffer = null; // Force full update after resize
497
+ }
498
+ }
499
+ //# sourceMappingURL=TerminalDiffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalDiffer.js","sourceRoot":"","sources":["../../src/services/TerminalDiffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { EventEmitter } from 'events';
2
+ import { Readable } from 'stream';
3
+ type StreamClient = Readable;
4
+ /**
5
+ * Manages real-time streaming of tmux panes to browser clients
6
+ * Uses Server-Sent Events for efficient one-way data flow
7
+ */
8
+ export declare class TerminalStreamer extends EventEmitter {
9
+ private streams;
10
+ private isShuttingDown;
11
+ /**
12
+ * Start streaming a pane to a client
13
+ */
14
+ startStream(paneId: string, tmuxPaneId: string, client: StreamClient): Promise<void>;
15
+ /**
16
+ * Stop streaming to a specific client
17
+ */
18
+ stopStream(paneId: string, client: StreamClient): void;
19
+ /**
20
+ * Initialize stream info for a pane
21
+ */
22
+ private initializeStream;
23
+ /**
24
+ * Send initial state to a new client
25
+ */
26
+ private sendInitialState;
27
+ /**
28
+ * Get cursor position from tmux
29
+ */
30
+ private getCursorPosition;
31
+ /**
32
+ * Activate streaming for a pane (start piping and monitoring)
33
+ */
34
+ private activateStream;
35
+ /**
36
+ * Deactivate streaming for a pane
37
+ */
38
+ private deactivateStream;
39
+ /**
40
+ * Process output and send updates to clients
41
+ */
42
+ private processAndSendUpdates;
43
+ /**
44
+ * Check if pane has been resized
45
+ */
46
+ private checkForResize;
47
+ /**
48
+ * Restart piping after a resize
49
+ */
50
+ private restartPiping;
51
+ /**
52
+ * Get pane dimensions from tmux
53
+ */
54
+ private getPaneDimensions;
55
+ /**
56
+ * Capture current pane content with ANSI codes
57
+ * Only captures the visible area (no scrollback) so cursor position matches
58
+ */
59
+ private capturePaneContent;
60
+ /**
61
+ * Get statistics about active streams
62
+ */
63
+ getStats(): {
64
+ activeStreams: number;
65
+ totalClients: number;
66
+ streams: Array<{
67
+ paneId: string;
68
+ clients: number;
69
+ dimensions: string;
70
+ }>;
71
+ };
72
+ /**
73
+ * Shutdown all streams
74
+ */
75
+ shutdown(): Promise<void>;
76
+ }
77
+ export declare function getTerminalStreamer(): TerminalStreamer;
78
+ export declare function resetTerminalStreamer(): void;
79
+ export {};
80
+ //# sourceMappingURL=TerminalStreamer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalStreamer.d.ts","sourceRoot":"","sources":["../../src/services/TerminalStreamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAMlC,KAAK,YAAY,GAAG,QAAQ,CAAC;AAqB7B;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,cAAc,CAAS;IAE/B;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC;IAwBhB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IActD;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;YACW,cAAc;IA0L5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,KAAK,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC,CAAC;KACJ;IAgBD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C"}