dmux 2.2.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +433 -179
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/MergePane.d.ts.map +1 -1
  5. package/dist/MergePane.js +4 -6
  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 +3 -1
  87. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  88. package/dist/hooks/usePaneCreation.js +49 -99
  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 +6 -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 +2 -1
  97. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  98. package/dist/hooks/useWorktreeActions.js +9 -1
  99. package/dist/hooks/useWorktreeActions.js.map +1 -1
  100. package/dist/index.js +48 -3
  101. package/dist/index.js.map +1 -1
  102. package/dist/server/actionsApi.d.ts +37 -0
  103. package/dist/server/actionsApi.d.ts.map +1 -0
  104. package/dist/server/actionsApi.js +256 -0
  105. package/dist/server/actionsApi.js.map +1 -0
  106. package/dist/server/embedded-assets.d.ts +13 -0
  107. package/dist/server/embedded-assets.d.ts.map +1 -0
  108. package/dist/server/embedded-assets.js +5038 -0
  109. package/dist/server/embedded-assets.js.map +1 -0
  110. package/dist/server/index.d.ts +21 -0
  111. package/dist/server/index.d.ts.map +1 -0
  112. package/dist/server/index.js +99 -0
  113. package/dist/server/index.js.map +1 -0
  114. package/dist/server/routes.d.ts +3 -0
  115. package/dist/server/routes.d.ts.map +1 -0
  116. package/dist/server/routes.js +672 -0
  117. package/dist/server/routes.js.map +1 -0
  118. package/dist/server/static.d.ts +6 -0
  119. package/dist/server/static.d.ts.map +1 -0
  120. package/dist/server/static.js +3040 -0
  121. package/dist/server/static.js.map +1 -0
  122. package/dist/services/ConfigWatcher.d.ts +20 -0
  123. package/dist/services/ConfigWatcher.d.ts.map +1 -0
  124. package/dist/services/ConfigWatcher.js +75 -0
  125. package/dist/services/ConfigWatcher.js.map +1 -0
  126. package/dist/services/PaneWorkerManager.d.ts +69 -0
  127. package/dist/services/PaneWorkerManager.d.ts.map +1 -0
  128. package/dist/services/PaneWorkerManager.js +272 -0
  129. package/dist/services/PaneWorkerManager.js.map +1 -0
  130. package/dist/services/StatusDetector.d.ts +87 -0
  131. package/dist/services/StatusDetector.d.ts.map +1 -0
  132. package/dist/services/StatusDetector.js +387 -0
  133. package/dist/services/StatusDetector.js.map +1 -0
  134. package/dist/services/TerminalDiffer.d.ts +85 -0
  135. package/dist/services/TerminalDiffer.d.ts.map +1 -0
  136. package/dist/services/TerminalDiffer.js +499 -0
  137. package/dist/services/TerminalDiffer.js.map +1 -0
  138. package/dist/services/TerminalStreamer.d.ts +80 -0
  139. package/dist/services/TerminalStreamer.d.ts.map +1 -0
  140. package/dist/services/TerminalStreamer.js +490 -0
  141. package/dist/services/TerminalStreamer.js.map +1 -0
  142. package/dist/services/TunnelService.d.ts +9 -0
  143. package/dist/services/TunnelService.d.ts.map +1 -0
  144. package/dist/services/TunnelService.js +34 -0
  145. package/dist/services/TunnelService.js.map +1 -0
  146. package/dist/services/WorkerMessageBus.d.ts +48 -0
  147. package/dist/services/WorkerMessageBus.d.ts.map +1 -0
  148. package/dist/services/WorkerMessageBus.js +120 -0
  149. package/dist/services/WorkerMessageBus.js.map +1 -0
  150. package/dist/shared/StateManager.d.ts +34 -0
  151. package/dist/shared/StateManager.d.ts.map +1 -0
  152. package/dist/shared/StateManager.js +108 -0
  153. package/dist/shared/StateManager.js.map +1 -0
  154. package/dist/shared/StreamProtocol.d.ts +75 -0
  155. package/dist/shared/StreamProtocol.d.ts.map +1 -0
  156. package/dist/shared/StreamProtocol.js +37 -0
  157. package/dist/shared/StreamProtocol.js.map +1 -0
  158. package/dist/terminal.html +17 -0
  159. package/dist/terminal.js +3 -0
  160. package/dist/types.d.ts +21 -1
  161. package/dist/types.d.ts.map +1 -1
  162. package/dist/utils/agentDetection.d.ts +18 -0
  163. package/dist/utils/agentDetection.d.ts.map +1 -0
  164. package/dist/utils/agentDetection.js +73 -0
  165. package/dist/utils/agentDetection.js.map +1 -0
  166. package/dist/utils/aiMerge.d.ts +35 -0
  167. package/dist/utils/aiMerge.d.ts.map +1 -0
  168. package/dist/utils/aiMerge.js +302 -0
  169. package/dist/utils/aiMerge.js.map +1 -0
  170. package/dist/utils/conflictResolutionPane.d.ts +19 -0
  171. package/dist/utils/conflictResolutionPane.d.ts.map +1 -0
  172. package/dist/utils/conflictResolutionPane.js +214 -0
  173. package/dist/utils/conflictResolutionPane.js.map +1 -0
  174. package/dist/utils/mergeExecution.d.ts +52 -0
  175. package/dist/utils/mergeExecution.d.ts.map +1 -0
  176. package/dist/utils/mergeExecution.js +192 -0
  177. package/dist/utils/mergeExecution.js.map +1 -0
  178. package/dist/utils/mergeValidation.d.ts +67 -0
  179. package/dist/utils/mergeValidation.d.ts.map +1 -0
  180. package/dist/utils/mergeValidation.js +213 -0
  181. package/dist/utils/mergeValidation.js.map +1 -0
  182. package/dist/utils/paneCreation.d.ts +17 -0
  183. package/dist/utils/paneCreation.d.ts.map +1 -0
  184. package/dist/utils/paneCreation.js +274 -0
  185. package/dist/utils/paneCreation.js.map +1 -0
  186. package/dist/utils/port.d.ts +5 -0
  187. package/dist/utils/port.d.ts.map +1 -0
  188. package/dist/utils/port.js +54 -0
  189. package/dist/utils/port.js.map +1 -0
  190. package/dist/utils/slug.d.ts.map +1 -1
  191. package/dist/utils/slug.js +32 -25
  192. package/dist/utils/slug.js.map +1 -1
  193. package/dist/workers/PaneWorker.d.ts +2 -0
  194. package/dist/workers/PaneWorker.d.ts.map +1 -0
  195. package/dist/workers/PaneWorker.js +362 -0
  196. package/dist/workers/PaneWorker.js.map +1 -0
  197. package/dist/workers/WorkerMessages.d.ts +36 -0
  198. package/dist/workers/WorkerMessages.d.ts.map +1 -0
  199. package/dist/workers/WorkerMessages.js +9 -0
  200. package/dist/workers/WorkerMessages.js.map +1 -0
  201. package/package.json +19 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAu6BP,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { DmuxPane } from '../types.js';
3
+ export interface ConfigData {
4
+ panes: DmuxPane[];
5
+ }
6
+ /**
7
+ * Watches the dmux.config.json file for changes and emits events
8
+ * when the file is modified. Only emits when actual changes occur.
9
+ */
10
+ export declare class ConfigWatcher extends EventEmitter {
11
+ private watcher;
12
+ private configPath;
13
+ private lastContent;
14
+ constructor(configPath: string);
15
+ start(): Promise<void>;
16
+ private handleFileChange;
17
+ stop(): void;
18
+ getConfigPath(): string;
19
+ }
20
+ //# sourceMappingURL=ConfigWatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigWatcher.d.ts","sourceRoot":"","sources":["../../src/services/ConfigWatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAc;gBAErB,UAAU,EAAE,MAAM;IAKxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCd,gBAAgB;IAoB9B,IAAI,IAAI,IAAI;IAQZ,aAAa,IAAI,MAAM;CAGxB"}
@@ -0,0 +1,75 @@
1
+ import { watch } from 'chokidar';
2
+ import { EventEmitter } from 'events';
3
+ import { readFile } from 'fs/promises';
4
+ /**
5
+ * Watches the dmux.config.json file for changes and emits events
6
+ * when the file is modified. Only emits when actual changes occur.
7
+ */
8
+ export class ConfigWatcher extends EventEmitter {
9
+ watcher = null;
10
+ configPath;
11
+ lastContent = '';
12
+ constructor(configPath) {
13
+ super();
14
+ this.configPath = configPath;
15
+ }
16
+ async start() {
17
+ // Read initial content
18
+ try {
19
+ this.lastContent = await readFile(this.configPath, 'utf-8');
20
+ }
21
+ catch (err) {
22
+ // File might not exist yet
23
+ this.lastContent = '';
24
+ }
25
+ // Watch for changes
26
+ this.watcher = watch(this.configPath, {
27
+ persistent: true,
28
+ ignoreInitial: true, // Don't emit on initial add
29
+ awaitWriteFinish: {
30
+ stabilityThreshold: 100, // Wait 100ms after last write
31
+ pollInterval: 50
32
+ }
33
+ });
34
+ this.watcher.on('change', async (path) => {
35
+ await this.handleFileChange(path);
36
+ });
37
+ this.watcher.on('add', async (path) => {
38
+ // File was created
39
+ await this.handleFileChange(path);
40
+ });
41
+ this.watcher.on('error', (error) => {
42
+ console.error('Config watcher error:', error);
43
+ });
44
+ }
45
+ async handleFileChange(path) {
46
+ try {
47
+ const newContent = await readFile(path, 'utf-8');
48
+ // Only emit if content actually changed
49
+ if (newContent !== this.lastContent) {
50
+ this.lastContent = newContent;
51
+ try {
52
+ const config = JSON.parse(newContent);
53
+ this.emit('change', config);
54
+ }
55
+ catch (parseErr) {
56
+ console.error('Failed to parse config file:', parseErr);
57
+ }
58
+ }
59
+ }
60
+ catch (err) {
61
+ console.error('Failed to read config file:', err);
62
+ }
63
+ }
64
+ stop() {
65
+ if (this.watcher) {
66
+ this.watcher.close();
67
+ this.watcher = null;
68
+ }
69
+ this.removeAllListeners();
70
+ }
71
+ getConfigPath() {
72
+ return this.configPath;
73
+ }
74
+ }
75
+ //# sourceMappingURL=ConfigWatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigWatcher.js","sourceRoot":"","sources":["../../src/services/ConfigWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACrC,OAAO,GAAqB,IAAI,CAAC;IACjC,UAAU,CAAS;IACnB,WAAW,GAAW,EAAE,CAAC;IAEjC,YAAY,UAAkB;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,uBAAuB;QACvB,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2BAA2B;YAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;YACpC,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI,EAAE,4BAA4B;YACjD,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG,EAAE,8BAA8B;gBACvD,YAAY,EAAE,EAAE;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpC,mBAAmB;YACnB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACzC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEjD,wCAAwC;YACxC,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAE9B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAe,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC9B,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,69 @@
1
+ import type { DmuxPane } from '../types.js';
2
+ import type { WorkerMessageBus } from './WorkerMessageBus.js';
3
+ import type { InboundMessage, OutboundMessage } from '../workers/WorkerMessages.js';
4
+ /**
5
+ * Manages lifecycle of pane worker threads
6
+ */
7
+ export declare class PaneWorkerManager {
8
+ private workers;
9
+ private messageBus;
10
+ private isShuttingDown;
11
+ private workerPath;
12
+ constructor(messageBus: WorkerMessageBus);
13
+ /**
14
+ * Create a new worker for a pane
15
+ */
16
+ createWorker(pane: DmuxPane): void;
17
+ /**
18
+ * Send message to a specific worker
19
+ */
20
+ sendToWorker(paneId: string, message: Omit<InboundMessage, 'id'>): Promise<OutboundMessage>;
21
+ /**
22
+ * Send notification to a worker without waiting for response
23
+ */
24
+ notifyWorker(paneId: string, message: Omit<InboundMessage, 'id'>): void;
25
+ /**
26
+ * Broadcast message to all workers
27
+ */
28
+ broadcastToWorkers(message: Omit<InboundMessage, 'id'>): void;
29
+ /**
30
+ * Destroy a specific worker
31
+ */
32
+ destroyWorker(paneId: string): Promise<void>;
33
+ /**
34
+ * Update workers based on current panes
35
+ */
36
+ updateWorkers(panes: DmuxPane[]): Promise<void>;
37
+ /**
38
+ * Handle message from worker
39
+ */
40
+ private handleWorkerMessage;
41
+ /**
42
+ * Handle worker error
43
+ */
44
+ private handleWorkerError;
45
+ /**
46
+ * Handle worker exit
47
+ */
48
+ private handleWorkerExit;
49
+ /**
50
+ * Restart a worker
51
+ */
52
+ private restartWorker;
53
+ /**
54
+ * Get worker statistics
55
+ */
56
+ getStats(): {
57
+ workerCount: number;
58
+ workers: Array<{
59
+ paneId: string;
60
+ uptime: number;
61
+ restartCount: number;
62
+ }>;
63
+ };
64
+ /**
65
+ * Shutdown all workers
66
+ */
67
+ shutdown(): Promise<void>;
68
+ }
69
+ //# sourceMappingURL=PaneWorkerManager.d.ts.map
@@ -0,0 +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;AAYtC;;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;IAMxC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAmDlC;;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;IAoBP;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,IAAI;IAe7D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlD;;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;IAazB;;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"}
@@ -0,0 +1,272 @@
1
+ import { Worker } from 'worker_threads';
2
+ import { randomUUID } from 'crypto';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
+ /**
7
+ * Manages lifecycle of pane worker threads
8
+ */
9
+ export class PaneWorkerManager {
10
+ workers = new Map();
11
+ messageBus;
12
+ isShuttingDown = false;
13
+ workerPath;
14
+ constructor(messageBus) {
15
+ this.messageBus = messageBus;
16
+ // Path to compiled worker file
17
+ this.workerPath = path.join(__dirname, '..', 'workers', 'PaneWorker.js');
18
+ }
19
+ /**
20
+ * Create a new worker for a pane
21
+ */
22
+ createWorker(pane) {
23
+ // Don't create if already exists or shutting down
24
+ if (this.workers.has(pane.id) || this.isShuttingDown) {
25
+ return;
26
+ }
27
+ try {
28
+ const config = {
29
+ paneId: pane.id,
30
+ tmuxPaneId: pane.paneId,
31
+ agent: pane.agent,
32
+ pollInterval: 1000 // 1 second polling
33
+ };
34
+ const worker = new Worker(this.workerPath, {
35
+ workerData: config
36
+ });
37
+ const workerInfo = {
38
+ worker,
39
+ paneId: pane.id,
40
+ tmuxPaneId: pane.paneId,
41
+ startTime: Date.now(),
42
+ restartCount: 0
43
+ };
44
+ // Handle messages from worker
45
+ worker.on('message', (message) => {
46
+ this.handleWorkerMessage(pane.id, message);
47
+ });
48
+ // Handle worker errors
49
+ worker.on('error', (error) => {
50
+ console.error(`Worker ${pane.id} error:`, error);
51
+ this.handleWorkerError(pane.id, error);
52
+ });
53
+ // Handle worker exit
54
+ worker.on('exit', (code) => {
55
+ if (code !== 0 && !this.isShuttingDown) {
56
+ console.error(`Worker ${pane.id} exited with code ${code}`);
57
+ this.handleWorkerExit(pane.id);
58
+ }
59
+ });
60
+ this.workers.set(pane.id, workerInfo);
61
+ }
62
+ catch (error) {
63
+ console.error(`Failed to create worker for pane ${pane.id}:`, error);
64
+ }
65
+ }
66
+ /**
67
+ * Send message to a specific worker
68
+ */
69
+ async sendToWorker(paneId, message) {
70
+ const workerInfo = this.workers.get(paneId);
71
+ if (!workerInfo) {
72
+ throw new Error(`No worker found for pane ${paneId}`);
73
+ }
74
+ const messageId = randomUUID();
75
+ const fullMessage = {
76
+ ...message,
77
+ id: messageId,
78
+ timestamp: Date.now()
79
+ };
80
+ // Set up response promise before sending
81
+ const responsePromise = this.messageBus.waitForResponse(messageId);
82
+ // Send message to worker
83
+ workerInfo.worker.postMessage(fullMessage);
84
+ return responsePromise;
85
+ }
86
+ /**
87
+ * Send notification to a worker without waiting for response
88
+ */
89
+ notifyWorker(paneId, message) {
90
+ const workerInfo = this.workers.get(paneId);
91
+ if (!workerInfo) {
92
+ console.error(`No worker found for pane ${paneId}`);
93
+ return;
94
+ }
95
+ const fullMessage = {
96
+ ...message,
97
+ id: randomUUID(),
98
+ timestamp: Date.now()
99
+ };
100
+ try {
101
+ workerInfo.worker.postMessage(fullMessage);
102
+ }
103
+ catch (error) {
104
+ console.error(`Failed to notify worker ${paneId}:`, error);
105
+ }
106
+ }
107
+ /**
108
+ * Broadcast message to all workers
109
+ */
110
+ broadcastToWorkers(message) {
111
+ this.workers.forEach((workerInfo, paneId) => {
112
+ try {
113
+ const fullMessage = {
114
+ ...message,
115
+ id: randomUUID(),
116
+ timestamp: Date.now()
117
+ };
118
+ workerInfo.worker.postMessage(fullMessage);
119
+ }
120
+ catch (error) {
121
+ console.error(`Failed to broadcast to worker ${paneId}:`, error);
122
+ }
123
+ });
124
+ }
125
+ /**
126
+ * Destroy a specific worker
127
+ */
128
+ async destroyWorker(paneId) {
129
+ const workerInfo = this.workers.get(paneId);
130
+ if (!workerInfo)
131
+ return;
132
+ try {
133
+ // Send shutdown message
134
+ await this.sendToWorker(paneId, {
135
+ type: 'shutdown',
136
+ timestamp: Date.now()
137
+ }).catch(() => { });
138
+ // Wait a bit for graceful shutdown
139
+ await new Promise(resolve => setTimeout(resolve, 500));
140
+ // Force terminate if still running
141
+ await workerInfo.worker.terminate();
142
+ }
143
+ catch (error) {
144
+ console.error(`Error destroying worker ${paneId}:`, error);
145
+ }
146
+ finally {
147
+ this.workers.delete(paneId);
148
+ }
149
+ }
150
+ /**
151
+ * Update workers based on current panes
152
+ */
153
+ async updateWorkers(panes) {
154
+ const currentPaneIds = new Set(panes.map(p => p.id));
155
+ // Create workers for new panes
156
+ for (const pane of panes) {
157
+ if (!this.workers.has(pane.id)) {
158
+ this.createWorker(pane);
159
+ }
160
+ else {
161
+ // Check if tmux pane ID changed
162
+ const workerInfo = this.workers.get(pane.id);
163
+ if (workerInfo.tmuxPaneId !== pane.paneId) {
164
+ // Pane ID changed, recreate worker
165
+ await this.destroyWorker(pane.id);
166
+ this.createWorker(pane);
167
+ }
168
+ }
169
+ }
170
+ // Destroy workers for removed panes
171
+ const workersToRemove = [];
172
+ for (const [paneId] of this.workers) {
173
+ if (!currentPaneIds.has(paneId)) {
174
+ workersToRemove.push(paneId);
175
+ }
176
+ }
177
+ await Promise.all(workersToRemove.map(id => this.destroyWorker(id)));
178
+ }
179
+ /**
180
+ * Handle message from worker
181
+ */
182
+ handleWorkerMessage(paneId, message) {
183
+ // Forward to message bus
184
+ this.messageBus.handleWorkerMessage(paneId, message);
185
+ }
186
+ /**
187
+ * Handle worker error
188
+ */
189
+ handleWorkerError(paneId, error) {
190
+ const workerInfo = this.workers.get(paneId);
191
+ if (!workerInfo)
192
+ return;
193
+ // Attempt restart if not too many attempts
194
+ if (workerInfo.restartCount < 3) {
195
+ this.restartWorker(paneId);
196
+ }
197
+ else {
198
+ console.error(`Worker ${paneId} failed too many times, not restarting`);
199
+ this.workers.delete(paneId);
200
+ }
201
+ }
202
+ /**
203
+ * Handle worker exit
204
+ */
205
+ handleWorkerExit(paneId) {
206
+ if (!this.isShuttingDown) {
207
+ const workerInfo = this.workers.get(paneId);
208
+ if (workerInfo && workerInfo.restartCount < 3) {
209
+ this.restartWorker(paneId);
210
+ }
211
+ else {
212
+ this.workers.delete(paneId);
213
+ }
214
+ }
215
+ }
216
+ /**
217
+ * Restart a worker
218
+ */
219
+ async restartWorker(paneId) {
220
+ const workerInfo = this.workers.get(paneId);
221
+ if (!workerInfo)
222
+ return;
223
+ const tmuxPaneId = workerInfo.tmuxPaneId;
224
+ const restartCount = workerInfo.restartCount + 1;
225
+ // Destroy old worker
226
+ this.workers.delete(paneId);
227
+ try {
228
+ await workerInfo.worker.terminate();
229
+ }
230
+ catch { }
231
+ // Wait before restart
232
+ await new Promise(resolve => setTimeout(resolve, 1000 * restartCount));
233
+ // Create new worker with updated restart count
234
+ if (!this.isShuttingDown) {
235
+ this.createWorker({
236
+ id: paneId,
237
+ paneId: tmuxPaneId,
238
+ slug: '',
239
+ prompt: ''
240
+ });
241
+ const newWorkerInfo = this.workers.get(paneId);
242
+ if (newWorkerInfo) {
243
+ newWorkerInfo.restartCount = restartCount;
244
+ }
245
+ }
246
+ }
247
+ /**
248
+ * Get worker statistics
249
+ */
250
+ getStats() {
251
+ const workers = Array.from(this.workers.entries()).map(([paneId, info]) => ({
252
+ paneId,
253
+ uptime: Date.now() - info.startTime,
254
+ restartCount: info.restartCount
255
+ }));
256
+ return {
257
+ workerCount: this.workers.size,
258
+ workers
259
+ };
260
+ }
261
+ /**
262
+ * Shutdown all workers
263
+ */
264
+ async shutdown() {
265
+ this.isShuttingDown = true;
266
+ // Send shutdown to all workers
267
+ const shutdownPromises = Array.from(this.workers.keys()).map(paneId => this.destroyWorker(paneId));
268
+ await Promise.all(shutdownPromises);
269
+ this.workers.clear();
270
+ }
271
+ }
272
+ //# sourceMappingURL=PaneWorkerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaneWorkerManager.js","sourceRoot":"","sources":["../../src/services/PaneWorkerManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { DmuxPane, AgentStatus, OptionChoice, PotentialHarm } from '../types.js';
3
+ import { WorkerMessageBus } from './WorkerMessageBus.js';
4
+ import { PaneWorkerManager } from './PaneWorkerManager.js';
5
+ export interface StatusUpdateEvent {
6
+ paneId: string;
7
+ status: AgentStatus;
8
+ previousStatus?: AgentStatus;
9
+ optionsQuestion?: string;
10
+ options?: OptionChoice[];
11
+ potentialHarm?: PotentialHarm;
12
+ summary?: string;
13
+ analyzerError?: string;
14
+ }
15
+ /**
16
+ * High-level service coordinating status detection via workers and LLM
17
+ */
18
+ export declare class StatusDetector extends EventEmitter {
19
+ private workerManager;
20
+ private messageBus;
21
+ private paneAnalyzer;
22
+ private paneStatuses;
23
+ private llmRequests;
24
+ private paneIdMap;
25
+ private isShuttingDown;
26
+ constructor();
27
+ /**
28
+ * Set up handlers for worker messages
29
+ */
30
+ private setupMessageHandlers;
31
+ /**
32
+ * Start monitoring a set of panes
33
+ */
34
+ monitorPanes(panes: DmuxPane[]): Promise<void>;
35
+ /**
36
+ * Handle status change from worker
37
+ */
38
+ private handleStatusChange;
39
+ /**
40
+ * Handle analysis request from worker
41
+ */
42
+ private handleAnalysisRequest;
43
+ /**
44
+ * Cancel LLM request for a pane
45
+ */
46
+ private cancelLLMRequest;
47
+ /**
48
+ * Handle autopilot: automatically accept options when enabled and no risk
49
+ */
50
+ private handleAutopilot;
51
+ /**
52
+ * Get tmux pane ID for a dmux pane
53
+ */
54
+ private getTmuxPaneId;
55
+ /**
56
+ * Get current status for a pane
57
+ */
58
+ getStatus(paneId: string): AgentStatus | undefined;
59
+ /**
60
+ * Get all statuses
61
+ */
62
+ getAllStatuses(): Map<string, AgentStatus>;
63
+ /**
64
+ * Send keys to a pane (future feature)
65
+ */
66
+ sendKeysToPane(paneId: string, keys: string): Promise<void>;
67
+ /**
68
+ * Resize a pane (future feature)
69
+ */
70
+ resizePane(paneId: string, width?: number, height?: number): Promise<void>;
71
+ /**
72
+ * Get statistics
73
+ */
74
+ getStats(): {
75
+ workerStats: ReturnType<PaneWorkerManager['getStats']>;
76
+ messageBusStats: ReturnType<WorkerMessageBus['getStats']>;
77
+ statusCounts: Record<AgentStatus, number>;
78
+ llmRequestsInFlight: number;
79
+ };
80
+ /**
81
+ * Shutdown the service
82
+ */
83
+ shutdown(): Promise<void>;
84
+ }
85
+ export declare function getStatusDetector(): StatusDetector;
86
+ export declare function resetStatusDetector(): void;
87
+ //# sourceMappingURL=StatusDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusDetector.d.ts","sourceRoot":"","sources":["../../src/services/StatusDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,cAAc,CAAS;;IAW/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;YACW,kBAAkB;IAkChC;;OAEG;YACW,qBAAqB;IAsKnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;YACW,eAAe;IA6C7B;;OAEG;YACW,aAAa;IAI3B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIlD;;OAEG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAI1C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACH,QAAQ,IAAI;QACV,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;QACvD,eAAe,EAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1C,mBAAmB,EAAE,MAAM,CAAC;KAC7B;IAoBD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAoBhC;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}