aicodeman 0.5.3 → 0.5.4

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 (122) hide show
  1. package/dist/ai-checker-base.d.ts.map +1 -1
  2. package/dist/ai-checker-base.js +3 -2
  3. package/dist/ai-checker-base.js.map +1 -1
  4. package/dist/bash-tool-parser.d.ts +6 -0
  5. package/dist/bash-tool-parser.d.ts.map +1 -1
  6. package/dist/bash-tool-parser.js +87 -101
  7. package/dist/bash-tool-parser.js.map +1 -1
  8. package/dist/file-stream-manager.d.ts.map +1 -1
  9. package/dist/file-stream-manager.js +2 -1
  10. package/dist/file-stream-manager.js.map +1 -1
  11. package/dist/orchestrator-loop.d.ts +2 -0
  12. package/dist/orchestrator-loop.d.ts.map +1 -1
  13. package/dist/orchestrator-loop.js +27 -22
  14. package/dist/orchestrator-loop.js.map +1 -1
  15. package/dist/orchestrator-verifier.d.ts +1 -1
  16. package/dist/orchestrator-verifier.d.ts.map +1 -1
  17. package/dist/orchestrator-verifier.js +3 -2
  18. package/dist/orchestrator-verifier.js.map +1 -1
  19. package/dist/plan-orchestrator.d.ts +4 -1
  20. package/dist/plan-orchestrator.d.ts.map +1 -1
  21. package/dist/plan-orchestrator.js +66 -88
  22. package/dist/plan-orchestrator.js.map +1 -1
  23. package/dist/ralph-status-parser.d.ts +2 -0
  24. package/dist/ralph-status-parser.d.ts.map +1 -1
  25. package/dist/ralph-status-parser.js +98 -102
  26. package/dist/ralph-status-parser.js.map +1 -1
  27. package/dist/respawn-controller.d.ts +4 -1
  28. package/dist/respawn-controller.d.ts.map +1 -1
  29. package/dist/respawn-controller.js +143 -131
  30. package/dist/respawn-controller.js.map +1 -1
  31. package/dist/session.d.ts +2 -0
  32. package/dist/session.d.ts.map +1 -1
  33. package/dist/session.js +84 -117
  34. package/dist/session.js.map +1 -1
  35. package/dist/state-store.d.ts +2 -0
  36. package/dist/state-store.d.ts.map +1 -1
  37. package/dist/state-store.js +22 -28
  38. package/dist/state-store.js.map +1 -1
  39. package/dist/subagent-watcher.d.ts +6 -0
  40. package/dist/subagent-watcher.d.ts.map +1 -1
  41. package/dist/subagent-watcher.js +145 -139
  42. package/dist/subagent-watcher.js.map +1 -1
  43. package/dist/tunnel-manager.d.ts.map +1 -1
  44. package/dist/tunnel-manager.js +2 -1
  45. package/dist/tunnel-manager.js.map +1 -1
  46. package/dist/web/public/api-client.3adebdc2.js.gz +0 -0
  47. package/dist/web/public/{app.3b7ff137.js → app.16290ae3.js} +2 -2
  48. package/dist/web/public/app.16290ae3.js.br +0 -0
  49. package/dist/web/public/app.16290ae3.js.gz +0 -0
  50. package/dist/web/public/constants.64161167.js.gz +0 -0
  51. package/dist/web/public/index.html +6 -6
  52. package/dist/web/public/index.html.br +0 -0
  53. package/dist/web/public/index.html.gz +0 -0
  54. package/dist/web/public/input-cjk.88082175.js.gz +0 -0
  55. package/dist/web/public/keyboard-accessory.9fb81db6.js.gz +0 -0
  56. package/dist/web/public/mobile-handlers.1e2a8ef8.js.gz +0 -0
  57. package/dist/web/public/mobile.0b213796.css.gz +0 -0
  58. package/dist/web/public/notification-manager.2d5ea8ec.js.gz +0 -0
  59. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  60. package/dist/web/public/{panels-ui.8204db1e.js → panels-ui.2d5b9703.js} +1 -1
  61. package/dist/web/public/panels-ui.2d5b9703.js.br +0 -0
  62. package/dist/web/public/panels-ui.2d5b9703.js.gz +0 -0
  63. package/dist/web/public/{ralph-panel.a2733fd5.js → ralph-panel.61076370.js} +1 -1
  64. package/dist/web/public/ralph-panel.61076370.js.br +0 -0
  65. package/dist/web/public/ralph-panel.61076370.js.gz +0 -0
  66. package/dist/web/public/ralph-wizard.f31ab90e.js.gz +0 -0
  67. package/dist/web/public/{respawn-ui.372c6ea7.js → respawn-ui.60be6ef5.js} +1 -1
  68. package/dist/web/public/respawn-ui.60be6ef5.js.br +0 -0
  69. package/dist/web/public/respawn-ui.60be6ef5.js.gz +0 -0
  70. package/dist/web/public/session-ui.554092ae.js.gz +0 -0
  71. package/dist/web/public/{settings-ui.bd3eaadb.js → settings-ui.c58b0b9b.js} +7 -7
  72. package/dist/web/public/settings-ui.c58b0b9b.js.br +0 -0
  73. package/dist/web/public/settings-ui.c58b0b9b.js.gz +0 -0
  74. package/dist/web/public/styles.111ff326.css.gz +0 -0
  75. package/dist/web/public/subagent-windows.a366a4ad.js.gz +0 -0
  76. package/dist/web/public/sw.js.gz +0 -0
  77. package/dist/web/public/terminal-ui.474f79df.js.gz +0 -0
  78. package/dist/web/public/upload.html.gz +0 -0
  79. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  80. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  81. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  82. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  83. package/dist/web/public/vendor/xterm.css.gz +0 -0
  84. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  85. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  86. package/dist/web/respawn-event-wiring.d.ts +51 -0
  87. package/dist/web/respawn-event-wiring.d.ts.map +1 -0
  88. package/dist/web/respawn-event-wiring.js +280 -0
  89. package/dist/web/respawn-event-wiring.js.map +1 -0
  90. package/dist/web/route-helpers.d.ts +9 -0
  91. package/dist/web/route-helpers.d.ts.map +1 -1
  92. package/dist/web/route-helpers.js +15 -0
  93. package/dist/web/route-helpers.js.map +1 -1
  94. package/dist/web/routes/orchestrator-routes.d.ts.map +1 -1
  95. package/dist/web/routes/orchestrator-routes.js +23 -30
  96. package/dist/web/routes/orchestrator-routes.js.map +1 -1
  97. package/dist/web/routes/system-routes.d.ts.map +1 -1
  98. package/dist/web/routes/system-routes.js +12 -30
  99. package/dist/web/routes/system-routes.js.map +1 -1
  100. package/dist/web/server.d.ts +4 -51
  101. package/dist/web/server.d.ts.map +1 -1
  102. package/dist/web/server.js +98 -941
  103. package/dist/web/server.js.map +1 -1
  104. package/dist/web/session-listener-wiring.d.ts +89 -0
  105. package/dist/web/session-listener-wiring.d.ts.map +1 -0
  106. package/dist/web/session-listener-wiring.js +290 -0
  107. package/dist/web/session-listener-wiring.js.map +1 -0
  108. package/dist/web/sse-stream-manager.d.ts +91 -0
  109. package/dist/web/sse-stream-manager.d.ts.map +1 -0
  110. package/dist/web/sse-stream-manager.js +426 -0
  111. package/dist/web/sse-stream-manager.js.map +1 -0
  112. package/package.json +1 -1
  113. package/dist/web/public/app.3b7ff137.js.br +0 -0
  114. package/dist/web/public/app.3b7ff137.js.gz +0 -0
  115. package/dist/web/public/panels-ui.8204db1e.js.br +0 -0
  116. package/dist/web/public/panels-ui.8204db1e.js.gz +0 -0
  117. package/dist/web/public/ralph-panel.a2733fd5.js.br +0 -0
  118. package/dist/web/public/ralph-panel.a2733fd5.js.gz +0 -0
  119. package/dist/web/public/respawn-ui.372c6ea7.js.br +0 -0
  120. package/dist/web/public/respawn-ui.372c6ea7.js.gz +0 -0
  121. package/dist/web/public/settings-ui.bd3eaadb.js.br +0 -0
  122. package/dist/web/public/settings-ui.bd3eaadb.js.gz +0 -0
@@ -0,0 +1,290 @@
1
+ /**
2
+ * @fileoverview Session event listener wiring — creates, attaches, and detaches session listeners.
3
+ *
4
+ * Extracted from server.ts for modularity. Provides:
5
+ * - `SessionListenerRefs` interface (named listener references for leak-free cleanup)
6
+ * - `createSessionListeners()` — builds all 25 listener handlers via dependency injection
7
+ * - `attachSessionListeners()` / `detachSessionListeners()` — symmetric attach/detach
8
+ *
9
+ * The detach function deduplicates a pattern that was previously copy-pasted 3 times
10
+ * in server.ts (_doCleanupSession, exit handler, stop()).
11
+ *
12
+ * @dependencies session.ts (Session, event types), sse-events.ts, types.ts
13
+ * @consumedby web/server.ts (WebServer delegates listener lifecycle here)
14
+ *
15
+ * @module web/session-listener-wiring
16
+ */
17
+ import { SseEvent } from './sse-events.js';
18
+ import { getLifecycleLog } from '../session-lifecycle-log.js';
19
+ import { fileStreamManager } from '../file-stream-manager.js';
20
+ /**
21
+ * Creates all 25 session listener handlers, capturing dependencies via closure.
22
+ * Call `attachSessionListeners()` after to wire them to the session.
23
+ */
24
+ export function createSessionListeners(session, deps) {
25
+ return {
26
+ // ─── Terminal Output ─────────────────────────────────────
27
+ /** Batches PTY output → broadcasts `session:terminal` at 16-50ms intervals */
28
+ terminal: (data) => {
29
+ deps.batchTerminalData(session.id, data);
30
+ },
31
+ /** Broadcasts `session:clearTerminal` — tells clients to wipe their xterm buffer (after mux attach) */
32
+ clearTerminal: () => {
33
+ deps.broadcast(SseEvent.SessionClearTerminal, { id: session.id });
34
+ },
35
+ /** Broadcasts `session:needsRefresh` — tells clients to reload buffer */
36
+ needsRefresh: () => {
37
+ deps.broadcast(SseEvent.SessionNeedsRefresh, { id: session.id });
38
+ },
39
+ // ─── Session Messages & Errors ──────────────────────────
40
+ /** Broadcasts `session:message` — structured Claude JSON messages (assistant, tool_use, etc.) */
41
+ message: (msg) => {
42
+ deps.broadcast(SseEvent.SessionMessage, { id: session.id, message: msg });
43
+ },
44
+ /** Broadcasts `session:error` + sends push notification */
45
+ error: (error) => {
46
+ deps.broadcast(SseEvent.SessionError, { id: session.id, error });
47
+ deps.sendPushNotifications(SseEvent.SessionError, {
48
+ sessionId: session.id,
49
+ sessionName: session.name,
50
+ error: String(error),
51
+ });
52
+ const tracker = deps.getRunSummaryTracker(session.id);
53
+ if (tracker)
54
+ tracker.recordError('Session error', String(error));
55
+ },
56
+ /** Broadcasts `session:completion` + `session:updated` — prompt finished, persists state */
57
+ completion: (result, cost) => {
58
+ deps.broadcast(SseEvent.SessionCompletion, { id: session.id, result, cost });
59
+ deps.broadcast(SseEvent.SessionUpdated, deps.getSessionStateWithRespawn(session));
60
+ deps.persistSessionState(session);
61
+ const tracker = deps.getRunSummaryTracker(session.id);
62
+ if (tracker)
63
+ tracker.recordTokens(session.inputTokens, session.outputTokens);
64
+ },
65
+ // ─── Session Lifecycle ──────────────────────────────────
66
+ /** Broadcasts `session:exit` + `session:updated` — PTY process exited; cleans up respawn, timers, listeners */
67
+ exit: (code) => {
68
+ getLifecycleLog().log({
69
+ event: 'exit',
70
+ sessionId: session.id,
71
+ name: session.name,
72
+ exitCode: code,
73
+ });
74
+ // Wrap in try/catch to ensure cleanup always happens
75
+ try {
76
+ deps.broadcast(SseEvent.SessionExit, { id: session.id, code });
77
+ deps.broadcast(SseEvent.SessionUpdated, deps.getSessionStateWithRespawn(session));
78
+ deps.persistSessionState(session);
79
+ }
80
+ catch (err) {
81
+ console.error(`[Server] Error broadcasting session exit for ${session.id}:`, err);
82
+ }
83
+ // Always clean up respawn controller, even if broadcast failed
84
+ try {
85
+ deps.cleanupRespawnOnExit(session.id);
86
+ }
87
+ catch (err) {
88
+ console.error(`[Server] Error cleaning up respawn controller for ${session.id}:`, err);
89
+ }
90
+ // Clean up per-session resources that are stale after PTY exit.
91
+ try {
92
+ // Transcript watcher is tied to the specific PTY run
93
+ deps.stopTranscriptWatcher(session.id);
94
+ // Finalize run summary tracker
95
+ deps.removeRunSummaryTracker(session.id);
96
+ // Flush/clear terminal batching state (no more output coming)
97
+ deps.cleanupSessionBatches(session.id);
98
+ // Clear pending persist-debounce timer
99
+ deps.cancelPersistDebounce(session.id);
100
+ // Close any active file streams
101
+ fileStreamManager.closeSessionStreams(session.id);
102
+ // Remove stored listener refs to break closure references (prevents memory leak).
103
+ deps.removeSessionListenerRefs(session.id);
104
+ }
105
+ catch (err) {
106
+ console.error(`[Server] Error cleaning up session resources on exit for ${session.id}:`, err);
107
+ }
108
+ },
109
+ // ─── Activity State ─────────────────────────────────────
110
+ /** Broadcasts `session:working` — Claude started processing */
111
+ working: () => {
112
+ deps.broadcast(SseEvent.SessionWorking, { id: session.id });
113
+ const tracker = deps.getRunSummaryTracker(session.id);
114
+ if (tracker) {
115
+ tracker.recordWorking();
116
+ tracker.recordTokens(session.inputTokens, session.outputTokens);
117
+ }
118
+ },
119
+ /** Broadcasts `session:idle` — Claude finished processing, waiting for input */
120
+ idle: () => {
121
+ deps.broadcast(SseEvent.SessionIdle, { id: session.id });
122
+ deps.broadcastSessionStateDebounced(session.id);
123
+ const tracker = deps.getRunSummaryTracker(session.id);
124
+ if (tracker) {
125
+ tracker.recordIdle();
126
+ tracker.recordTokens(session.inputTokens, session.outputTokens);
127
+ }
128
+ },
129
+ // ─── Background Task Events ──────────────────────────────
130
+ /** Broadcasts `task:created` — new background task discovered */
131
+ taskCreated: (task) => {
132
+ deps.broadcast(SseEvent.TaskCreated, { sessionId: session.id, task });
133
+ deps.broadcastSessionStateDebounced(session.id);
134
+ },
135
+ /** Batched broadcast of `task:updated` — high-frequency progress updates */
136
+ taskUpdated: (task) => {
137
+ deps.batchTaskUpdate(session.id, task);
138
+ },
139
+ /** Broadcasts `task:completed` — background task finished successfully */
140
+ taskCompleted: (task) => {
141
+ deps.broadcast(SseEvent.TaskCompleted, { sessionId: session.id, task });
142
+ deps.broadcastSessionStateDebounced(session.id);
143
+ },
144
+ /** Broadcasts `task:failed` — background task errored */
145
+ taskFailed: (task, error) => {
146
+ deps.broadcast(SseEvent.TaskFailed, { sessionId: session.id, task, error });
147
+ deps.broadcastSessionStateDebounced(session.id);
148
+ },
149
+ // ─── Auto-Operations ────────────────────────────────────
150
+ /** Broadcasts `session:autoClear` — context window auto-cleared at token threshold */
151
+ autoClear: (data) => {
152
+ deps.broadcast(SseEvent.SessionAutoClear, { sessionId: session.id, ...data });
153
+ deps.broadcastSessionStateDebounced(session.id);
154
+ const tracker = deps.getRunSummaryTracker(session.id);
155
+ if (tracker)
156
+ tracker.recordAutoClear(data.tokens, data.threshold);
157
+ },
158
+ /** Broadcasts `session:autoCompact` — context window auto-compacted at token threshold */
159
+ autoCompact: (data) => {
160
+ deps.broadcast(SseEvent.SessionAutoCompact, { sessionId: session.id, ...data });
161
+ deps.broadcastSessionStateDebounced(session.id);
162
+ const tracker = deps.getRunSummaryTracker(session.id);
163
+ if (tracker)
164
+ tracker.recordAutoCompact(data.tokens, data.threshold);
165
+ },
166
+ // ─── CLI Info ────────────────────────────────────────────
167
+ /** Broadcasts `session:cliInfo` — Claude Code version, model, account type parsed from terminal */
168
+ cliInfoUpdated: (data) => {
169
+ deps.broadcast(SseEvent.SessionCliInfo, { sessionId: session.id, ...data });
170
+ deps.broadcastSessionStateDebounced(session.id);
171
+ },
172
+ // ─── Ralph Tracking Events ──────────────────────────────
173
+ /** Broadcasts `session:ralphLoopUpdate` — Ralph tracker loop state changed (iteration, phase) */
174
+ ralphLoopUpdate: (state) => {
175
+ deps.broadcast(SseEvent.SessionRalphLoopUpdate, { sessionId: session.id, state });
176
+ deps.getStore().updateRalphState(session.id, { loop: state });
177
+ },
178
+ /** Broadcasts `session:ralphTodoUpdate` — todo items added, completed, or modified */
179
+ ralphTodoUpdate: (todos) => {
180
+ deps.broadcast(SseEvent.SessionRalphTodoUpdate, { sessionId: session.id, todos });
181
+ deps.getStore().updateRalphState(session.id, { todos });
182
+ },
183
+ /** Broadcasts `session:ralphCompletionDetected` + push notification — completion phrase matched */
184
+ ralphCompletionDetected: (phrase) => {
185
+ deps.broadcast(SseEvent.SessionRalphCompletionDetected, { sessionId: session.id, phrase });
186
+ deps.sendPushNotifications(SseEvent.SessionRalphCompletionDetected, {
187
+ sessionId: session.id,
188
+ sessionName: session.name,
189
+ phrase,
190
+ });
191
+ const tracker = deps.getRunSummaryTracker(session.id);
192
+ if (tracker)
193
+ tracker.recordRalphCompletion(phrase);
194
+ },
195
+ /** Broadcasts `session:ralphStatusUpdate` — RALPH_STATUS block parsed from output */
196
+ ralphStatusBlockDetected: (block) => {
197
+ deps.broadcast(SseEvent.SessionRalphStatusUpdate, { sessionId: session.id, block });
198
+ const tracker = deps.getRunSummaryTracker(session.id);
199
+ if (tracker) {
200
+ tracker.addEvent(block.status === 'BLOCKED' ? 'warning' : 'idle_detected', block.status === 'BLOCKED' ? 'warning' : 'info', `Ralph Status: ${block.status}`, `Tasks: ${block.tasksCompletedThisLoop}, Files: ${block.filesModified}, Tests: ${block.testsStatus}`);
201
+ }
202
+ },
203
+ /** Broadcasts `session:circuitBreakerUpdate` — circuit breaker state changed (CLOSED/HALF_OPEN/OPEN) */
204
+ ralphCircuitBreakerUpdate: (status) => {
205
+ deps.broadcast(SseEvent.SessionCircuitBreakerUpdate, { sessionId: session.id, status });
206
+ const tracker = deps.getRunSummaryTracker(session.id);
207
+ if (tracker && status.state === 'OPEN') {
208
+ tracker.addEvent('warning', 'warning', 'Circuit Breaker Opened', status.reason);
209
+ }
210
+ },
211
+ /** Broadcasts `session:exitGateMet` — all completion indicators met, ready to exit */
212
+ ralphExitGateMet: (data) => {
213
+ deps.broadcast(SseEvent.SessionExitGateMet, { sessionId: session.id, ...data });
214
+ const tracker = deps.getRunSummaryTracker(session.id);
215
+ if (tracker) {
216
+ tracker.addEvent('ralph_completion', 'success', 'Exit Gate Met', `Indicators: ${data.completionIndicators}, EXIT_SIGNAL: ${data.exitSignal}`);
217
+ }
218
+ },
219
+ // ─── Bash Tool Tracking ────────────────────────────────
220
+ /** Broadcasts `session:bashToolStart` — bash tool invocation started */
221
+ bashToolStart: (tool) => {
222
+ deps.broadcast(SseEvent.SessionBashToolStart, { sessionId: session.id, tool });
223
+ },
224
+ /** Broadcasts `session:bashToolEnd` — bash tool invocation completed */
225
+ bashToolEnd: (tool) => {
226
+ deps.broadcast(SseEvent.SessionBashToolEnd, { sessionId: session.id, tool });
227
+ },
228
+ /** Broadcasts `session:bashToolsUpdate` — full active bash tools list refreshed */
229
+ bashToolsUpdate: (tools) => {
230
+ deps.broadcast(SseEvent.SessionBashToolsUpdate, { sessionId: session.id, tools });
231
+ },
232
+ };
233
+ }
234
+ /** Attach all listeners to a session. */
235
+ export function attachSessionListeners(session, refs) {
236
+ session.on('terminal', refs.terminal);
237
+ session.on('clearTerminal', refs.clearTerminal);
238
+ session.on('needsRefresh', refs.needsRefresh);
239
+ session.on('message', refs.message);
240
+ session.on('error', refs.error);
241
+ session.on('completion', refs.completion);
242
+ session.on('exit', refs.exit);
243
+ session.on('working', refs.working);
244
+ session.on('idle', refs.idle);
245
+ session.on('taskCreated', refs.taskCreated);
246
+ session.on('taskUpdated', refs.taskUpdated);
247
+ session.on('taskCompleted', refs.taskCompleted);
248
+ session.on('taskFailed', refs.taskFailed);
249
+ session.on('autoClear', refs.autoClear);
250
+ session.on('autoCompact', refs.autoCompact);
251
+ session.on('cliInfoUpdated', refs.cliInfoUpdated);
252
+ session.on('ralphLoopUpdate', refs.ralphLoopUpdate);
253
+ session.on('ralphTodoUpdate', refs.ralphTodoUpdate);
254
+ session.on('ralphCompletionDetected', refs.ralphCompletionDetected);
255
+ session.on('ralphStatusBlockDetected', refs.ralphStatusBlockDetected);
256
+ session.on('ralphCircuitBreakerUpdate', refs.ralphCircuitBreakerUpdate);
257
+ session.on('ralphExitGateMet', refs.ralphExitGateMet);
258
+ session.on('bashToolStart', refs.bashToolStart);
259
+ session.on('bashToolEnd', refs.bashToolEnd);
260
+ session.on('bashToolsUpdate', refs.bashToolsUpdate);
261
+ }
262
+ /** Detach all listeners from a session (prevents memory leaks from closure references). */
263
+ export function detachSessionListeners(session, refs) {
264
+ session.off('terminal', refs.terminal);
265
+ session.off('clearTerminal', refs.clearTerminal);
266
+ session.off('needsRefresh', refs.needsRefresh);
267
+ session.off('message', refs.message);
268
+ session.off('error', refs.error);
269
+ session.off('completion', refs.completion);
270
+ session.off('exit', refs.exit);
271
+ session.off('working', refs.working);
272
+ session.off('idle', refs.idle);
273
+ session.off('taskCreated', refs.taskCreated);
274
+ session.off('taskUpdated', refs.taskUpdated);
275
+ session.off('taskCompleted', refs.taskCompleted);
276
+ session.off('taskFailed', refs.taskFailed);
277
+ session.off('autoClear', refs.autoClear);
278
+ session.off('autoCompact', refs.autoCompact);
279
+ session.off('cliInfoUpdated', refs.cliInfoUpdated);
280
+ session.off('ralphLoopUpdate', refs.ralphLoopUpdate);
281
+ session.off('ralphTodoUpdate', refs.ralphTodoUpdate);
282
+ session.off('ralphCompletionDetected', refs.ralphCompletionDetected);
283
+ session.off('ralphStatusBlockDetected', refs.ralphStatusBlockDetected);
284
+ session.off('ralphCircuitBreakerUpdate', refs.ralphCircuitBreakerUpdate);
285
+ session.off('ralphExitGateMet', refs.ralphExitGateMet);
286
+ session.off('bashToolStart', refs.bashToolStart);
287
+ session.off('bashToolEnd', refs.bashToolEnd);
288
+ session.off('bashToolsUpdate', refs.bashToolsUpdate);
289
+ }
290
+ //# sourceMappingURL=session-listener-wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-listener-wiring.js","sourceRoot":"","sources":["../../src/web/session-listener-wiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @fileoverview SSE stream manager — owns all SSE client state, broadcasting, and event batching.
3
+ *
4
+ * Extracted from server.ts for modularity. Handles:
5
+ * - SSE client connection tracking with subscription filtering
6
+ * - Backpressure-aware message delivery
7
+ * - Terminal data batching with adaptive intervals (16-50ms for 60fps)
8
+ * - Task update and session state batching
9
+ * - Dead client cleanup and keepalive
10
+ * - Cloudflare tunnel padding for proxy buffer flushing
11
+ *
12
+ * @dependencies CleanupManager (managed timers), config/server-timing (constants)
13
+ * @consumedby web/server.ts (WebServer delegates all SSE operations here)
14
+ *
15
+ * @module web/sse-stream-manager
16
+ */
17
+ import type { FastifyReply } from 'fastify';
18
+ import type { BackgroundTask } from '../session.js';
19
+ import { CleanupManager } from '../utils/index.js';
20
+ /** Dependencies injected by WebServer — keeps SseStreamManager decoupled from session/respawn state. */
21
+ export interface SseStreamManagerDeps {
22
+ /** Get session state with respawn info for session:updated broadcasts */
23
+ getSessionStateWithRespawn(sessionId: string): unknown;
24
+ }
25
+ export declare class SseStreamManager {
26
+ private deps;
27
+ private cleanup;
28
+ /**
29
+ * SSE clients mapped to their session subscription filter.
30
+ * Value is a Set of session IDs the client wants events for,
31
+ * or `null` meaning "receive all events" (backwards-compatible default).
32
+ */
33
+ private sseClients;
34
+ /** SSE clients connecting from non-localhost (i.e. through tunnel) */
35
+ private remoteSseClients;
36
+ /** Clients with backpressure — skip writes until 'drain' fires */
37
+ private backpressuredClients;
38
+ /** Cached tunnel active state — updated on TunnelStarted/TunnelStopped to avoid getUrl() on every broadcast */
39
+ private _isTunnelActive;
40
+ private terminalBatches;
41
+ private terminalBatchSizes;
42
+ private terminalBatchTimers;
43
+ private lastTerminalEventTime;
44
+ private taskUpdateBatches;
45
+ private taskUpdateBatchTimerId;
46
+ private stateUpdatePending;
47
+ private stateUpdateTimerId;
48
+ private _isStopping;
49
+ constructor(deps: SseStreamManagerDeps, cleanup: CleanupManager);
50
+ get clientCount(): number;
51
+ get remoteClientCount(): number;
52
+ get isTunnelActive(): boolean;
53
+ setTunnelActive(active: boolean): void;
54
+ addClient(reply: FastifyReply, sessionFilter: Set<string> | null, isRemote: boolean): void;
55
+ removeClient(reply: FastifyReply): void;
56
+ /** Send a single SSE event to a specific client. */
57
+ sendSSE(reply: FastifyReply, event: string, data: unknown): void;
58
+ /** Send pre-formatted tunnel padding to a specific client. */
59
+ sendPadding(reply: FastifyReply): void;
60
+ private sendSSEPreformatted;
61
+ broadcast(event: string, data: unknown): void;
62
+ /**
63
+ * Extract the session ID from an event's data payload for subscription filtering.
64
+ * Returns the sessionId string if the event is session-scoped, or null for global events.
65
+ */
66
+ private extractSessionId;
67
+ batchTerminalData(sessionId: string, data: string): void;
68
+ /** Flush a single session's batched terminal data */
69
+ private flushSessionTerminalBatch;
70
+ batchTaskUpdate(sessionId: string, task: BackgroundTask): void;
71
+ private flushTaskUpdateBatches;
72
+ /**
73
+ * Debounce expensive session:updated broadcasts.
74
+ * Instead of calling toDetailedState() on every event, batch requests
75
+ * and only serialize once per STATE_UPDATE_DEBOUNCE_INTERVAL.
76
+ */
77
+ broadcastSessionStateDebounced(sessionId: string): void;
78
+ private flushStateUpdates;
79
+ /**
80
+ * Clean up dead SSE clients and send keep-alive comments.
81
+ * Keep-alive prevents proxy/load-balancer timeouts on idle connections.
82
+ * Dead client cleanup prevents memory leaks from abruptly terminated connections.
83
+ */
84
+ cleanupDeadClients(): void;
85
+ /** Clean up all batching state for a session (call on session exit or deletion). */
86
+ cleanupSessionBatches(sessionId: string): void;
87
+ setStopping(): void;
88
+ /** Graceful shutdown: notify clients, close connections, clear all state. */
89
+ stop(): void;
90
+ }
91
+ //# sourceMappingURL=sse-stream-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-stream-manager.d.ts","sourceRoot":"","sources":["../../src/web/sse-stream-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AAiBvE,wGAAwG;AACxG,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACxD;AAED,qBAAa,gBAAgB;IAoCzB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IAnCjB;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAoD;IACtE,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAAgC;IACxD,kEAAkE;IAClE,OAAO,CAAC,oBAAoB,CAAgC;IAG5D,+GAA+G;IAC/G,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,mBAAmB,CAA0C;IAGrE,OAAO,CAAC,qBAAqB,CAAqC;IAGlE,OAAO,CAAC,iBAAiB,CAAuE;IAChG,OAAO,CAAC,sBAAsB,CAAuB;IAErD,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,kBAAkB,CAAuB;IAGjD,OAAO,CAAC,WAAW,CAAkB;gBAG3B,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,cAAc;IAUjC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAItC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAO1F,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAMvC,oDAAoD;IACpD,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAShE,8DAA8D;IAC9D,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAWtC,OAAO,CAAC,mBAAmB;IA+B3B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IA8B7C;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAwDxD,qDAAqD;IACrD,OAAO,CAAC,yBAAyB;IAsCjC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAoB9D,OAAO,CAAC,sBAAsB;IAc9B;;;;OAIG;IACH,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAkBvD,OAAO,CAAC,iBAAiB;IAkBzB;;;;OAIG;IACH,kBAAkB,IAAI,IAAI;IAoC1B,oFAAoF;IACpF,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAe9C,WAAW,IAAI,IAAI;IAInB,6EAA6E;IAC7E,IAAI,IAAI,IAAI;CA+Bb"}