nterminal 1.3.4 → 1.3.5

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 (113) hide show
  1. package/bin/nterminal.js +8 -3
  2. package/dist/client/assets/MarkdownPreview-BIrwUAaa.js +1 -0
  3. package/dist/client/assets/{TranscriptMarkdownBody-H8ZsISc6.js → TranscriptMarkdownBody-CI0ztvMX.js} +1 -1
  4. package/dist/client/assets/{index-DxfBq-4P.js → index-EN8ngMgv.js} +1 -1
  5. package/dist/client/assets/index-JQJ1Eet1.js +58 -0
  6. package/dist/client/assets/index-xkL4h3qt.css +1 -0
  7. package/dist/client/index.html +2 -2
  8. package/dist/scripts/hooks.js +83 -0
  9. package/dist/scripts/hooks.js.map +1 -0
  10. package/dist/server/accounts/accountService.d.ts +23 -1
  11. package/dist/server/accounts/accountService.js +235 -103
  12. package/dist/server/accounts/accountService.js.map +1 -1
  13. package/dist/server/accounts/providerRequests.d.ts +12 -0
  14. package/dist/server/accounts/providerRequests.js +159 -0
  15. package/dist/server/accounts/providerRequests.js.map +1 -0
  16. package/dist/server/agent/agentRoutes.js +11 -0
  17. package/dist/server/agent/agentRoutes.js.map +1 -1
  18. package/dist/server/hooks/helperJournal.d.ts +16 -0
  19. package/dist/server/hooks/helperJournal.js +74 -0
  20. package/dist/server/hooks/helperJournal.js.map +1 -0
  21. package/dist/server/hooks/hookBinding.d.ts +39 -0
  22. package/dist/server/hooks/hookBinding.js +91 -0
  23. package/dist/server/hooks/hookBinding.js.map +1 -0
  24. package/dist/server/hooks/hookFiles.d.ts +24 -0
  25. package/dist/server/hooks/hookFiles.js +160 -0
  26. package/dist/server/hooks/hookFiles.js.map +1 -0
  27. package/dist/server/hooks/hookInstallation.d.ts +79 -0
  28. package/dist/server/hooks/hookInstallation.js +978 -0
  29. package/dist/server/hooks/hookInstallation.js.map +1 -0
  30. package/dist/server/hooks/hookProcess.d.ts +5 -0
  31. package/dist/server/hooks/hookProcess.js +85 -0
  32. package/dist/server/hooks/hookProcess.js.map +1 -0
  33. package/dist/server/hooks/hookReceiver.d.ts +66 -0
  34. package/dist/server/hooks/hookReceiver.js +549 -0
  35. package/dist/server/hooks/hookReceiver.js.map +1 -0
  36. package/dist/server/hooks/lifecycle.d.ts +40 -0
  37. package/dist/server/hooks/lifecycle.js +200 -0
  38. package/dist/server/hooks/lifecycle.js.map +1 -0
  39. package/dist/server/hooks/publicationLock.d.ts +3 -0
  40. package/dist/server/hooks/publicationLock.js +137 -0
  41. package/dist/server/hooks/publicationLock.js.map +1 -0
  42. package/dist/server/hooks/verifiedLock.d.ts +24 -0
  43. package/dist/server/hooks/verifiedLock.js +207 -0
  44. package/dist/server/hooks/verifiedLock.js.map +1 -0
  45. package/dist/server/http.d.ts +4 -0
  46. package/dist/server/http.js +6 -0
  47. package/dist/server/http.js.map +1 -1
  48. package/dist/server/index.js +69 -2
  49. package/dist/server/index.js.map +1 -1
  50. package/dist/server/notifications/agentCompletionMonitor.d.ts +16 -1
  51. package/dist/server/notifications/agentCompletionMonitor.js +261 -47
  52. package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
  53. package/dist/server/notifications/completionNotificationRouter.d.ts +2 -0
  54. package/dist/server/notifications/completionNotificationRouter.js +9 -0
  55. package/dist/server/notifications/completionNotificationRouter.js.map +1 -1
  56. package/dist/server/routes/accountRoutes.js +11 -0
  57. package/dist/server/routes/accountRoutes.js.map +1 -1
  58. package/dist/server/routes/activityRoutes.d.ts +13 -0
  59. package/dist/server/routes/activityRoutes.js +165 -0
  60. package/dist/server/routes/activityRoutes.js.map +1 -0
  61. package/dist/server/routes/agentManagementRoutes.js +8 -1
  62. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  63. package/dist/server/routes/hookRoutes.d.ts +16 -0
  64. package/dist/server/routes/hookRoutes.js +77 -0
  65. package/dist/server/routes/hookRoutes.js.map +1 -0
  66. package/dist/server/routes/terminalRoutes.js +4 -0
  67. package/dist/server/routes/terminalRoutes.js.map +1 -1
  68. package/dist/server/routes/transcriptQuery.d.ts +2 -1
  69. package/dist/server/routes/transcriptQuery.js +3 -1
  70. package/dist/server/routes/transcriptQuery.js.map +1 -1
  71. package/dist/server/terminal/PtyAdapter.d.ts +18 -0
  72. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  73. package/dist/server/terminal/TerminalManager.d.ts +61 -0
  74. package/dist/server/terminal/TerminalManager.js +665 -12
  75. package/dist/server/terminal/TerminalManager.js.map +1 -1
  76. package/dist/server/terminal/TmuxPtyAdapter.d.ts +14 -2
  77. package/dist/server/terminal/TmuxPtyAdapter.js +99 -15
  78. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  79. package/dist/server/terminal/activityChannel.d.ts +57 -0
  80. package/dist/server/terminal/activityChannel.js +166 -0
  81. package/dist/server/terminal/activityChannel.js.map +1 -0
  82. package/dist/server/terminal/agentTranscriptStatus.d.ts +12 -0
  83. package/dist/server/terminal/agentTranscriptStatus.js +78 -7
  84. package/dist/server/terminal/agentTranscriptStatus.js.map +1 -1
  85. package/dist/server/terminal/codexTranscriptSource.d.ts +2 -0
  86. package/dist/server/terminal/codexTranscriptSource.js +41 -37
  87. package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
  88. package/dist/server/terminal/subagentSources.js +2 -1
  89. package/dist/server/terminal/subagentSources.js.map +1 -1
  90. package/dist/server/terminal/transcriptHeader.d.ts +85 -0
  91. package/dist/server/terminal/transcriptHeader.js +376 -0
  92. package/dist/server/terminal/transcriptHeader.js.map +1 -0
  93. package/dist/server/terminal/transcriptHistory.d.ts +16 -2
  94. package/dist/server/terminal/transcriptHistory.js +120 -21
  95. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  96. package/dist/server/terminal/transcriptStore.d.ts +6 -0
  97. package/dist/server/terminal/transcriptStore.js +222 -26
  98. package/dist/server/terminal/transcriptStore.js.map +1 -1
  99. package/dist/shared/activityProbe.d.ts +10 -0
  100. package/dist/shared/activityProbe.js +24 -0
  101. package/dist/shared/activityProbe.js.map +1 -0
  102. package/dist/shared/protocol.d.ts +45 -0
  103. package/dist/shared/protocol.js.map +1 -1
  104. package/dist/shared/types.d.ts +9 -1
  105. package/docs/features.md +10 -0
  106. package/docs/provider-hooks.md +287 -0
  107. package/docs/terminal-history.md +10 -0
  108. package/package.json +2 -1
  109. package/scripts/nterminal-hook.cjs +171 -0
  110. package/scripts/nterminalctl +26 -2
  111. package/dist/client/assets/MarkdownPreview-DjDO4lEl.js +0 -1
  112. package/dist/client/assets/index-CIYazAGv.css +0 -1
  113. package/dist/client/assets/index-DwvLN_WJ.js +0 -56
@@ -1,3 +1,5 @@
1
+ import WebSocket from 'ws';
2
+ import { activityMaxMessageBytes, activityMaxTerminals, parseActivityFrame, validActivityTerminal } from '../terminal/activityChannel.js';
1
3
  const defaultIntervalMs = 5_000;
2
4
  const defaultTimeoutMs = 2_500;
3
5
  const defaultMaxBackoffMs = 60_000;
@@ -11,9 +13,14 @@ export class AgentCompletionMonitor {
11
13
  maxConcurrentAgents;
12
14
  now;
13
15
  resolveAgent;
16
+ onActivity;
17
+ onRemoveAgent;
18
+ createWebSocket;
14
19
  states = new Map();
15
20
  timer = null;
16
21
  inflight = false;
22
+ disposed = false;
23
+ notifications = 0;
17
24
  constructor(store, router, options = {}) {
18
25
  this.store = store;
19
26
  this.router = router;
@@ -23,92 +30,272 @@ export class AgentCompletionMonitor {
23
30
  this.maxConcurrentAgents = Math.max(1, Math.floor(options.maxConcurrentAgents ?? defaultMaxConcurrentAgents));
24
31
  this.now = options.now ?? Date.now;
25
32
  this.resolveAgent = options.resolveAgent ?? ((agent) => agent.url ? { ...agent, url: agent.url } : null);
33
+ this.onActivity = options.onActivity ?? (() => { });
34
+ this.onRemoveAgent = options.onRemoveAgent ?? (() => { });
35
+ this.createWebSocket = options.createWebSocket ?? ((url, settings) => new WebSocket(url, settings));
26
36
  }
27
37
  start() {
28
- if (this.timer)
38
+ if (this.timer || this.disposed)
29
39
  return;
30
- this.timer = setInterval(() => {
40
+ const tick = () => {
31
41
  if (this.inflight)
32
42
  return;
33
43
  this.inflight = true;
34
- void this.pollOnce().finally(() => {
44
+ void this.pollOnce().catch(() => { }).finally(() => {
35
45
  this.inflight = false;
36
46
  });
37
- }, this.intervalMs);
47
+ };
48
+ this.timer = setInterval(tick, Math.min(1000, this.intervalMs));
38
49
  this.timer.unref?.();
50
+ tick();
39
51
  }
40
52
  dispose() {
53
+ this.disposed = true;
41
54
  if (this.timer) {
42
55
  clearInterval(this.timer);
43
56
  this.timer = null;
44
57
  }
58
+ for (const state of this.states.values())
59
+ this.disconnect(state);
60
+ this.states.clear();
45
61
  }
46
62
  async pollOnce() {
63
+ if (this.disposed)
64
+ return;
47
65
  const state = await this.store.read();
66
+ if (this.disposed)
67
+ return;
48
68
  const knownAgentIds = new Set(state.agents.map((agent) => agent.id));
49
69
  for (const agentId of [...this.states.keys()]) {
50
70
  if (!knownAgentIds.has(agentId)) {
71
+ this.disconnect(this.states.get(agentId));
51
72
  this.states.delete(agentId);
73
+ this.onRemoveAgent(agentId);
52
74
  }
53
75
  }
54
- const now = this.now();
55
- const agents = state.agents.filter((agent) => (this.states.get(agent.id)?.nextAttemptAt ?? 0) <= now);
76
+ const agents = state.agents;
56
77
  for (let index = 0; index < agents.length; index += this.maxConcurrentAgents) {
57
- await Promise.allSettled(agents.slice(index, index + this.maxConcurrentAgents).map((agent) => this.pollAgent(agent)));
78
+ if (this.disposed)
79
+ return;
80
+ await Promise.allSettled(agents.slice(index, index + this.maxConcurrentAgents).map((agent) => this.visitAgent(agent)));
58
81
  }
59
82
  }
60
- async pollAgent(agent) {
83
+ async visitAgent(agent) {
61
84
  const monitorState = this.stateFor(agent.id);
62
- let terminals;
85
+ const resolved = this.resolveAgent(agent);
86
+ const endpoint = resolved ? JSON.stringify([resolved.url, resolved.token]) : null;
87
+ if (endpoint !== monitorState.endpoint) {
88
+ this.disconnect(monitorState);
89
+ monitorState.endpoint = endpoint;
90
+ monitorState.mode = 'websocket';
91
+ monitorState.nextAttemptAt = 0;
92
+ monitorState.failures = 0;
93
+ }
94
+ if (monitorState.socket) {
95
+ if (this.now() - monitorState.lastSeenAt > 75_000) {
96
+ this.disconnect(monitorState);
97
+ this.failed(monitorState);
98
+ }
99
+ return;
100
+ }
101
+ if (monitorState.nextAttemptAt > this.now())
102
+ return;
103
+ if (!resolved) {
104
+ this.failed(monitorState);
105
+ return;
106
+ }
107
+ if (monitorState.mode === 'poll' && this.now() >= monitorState.probeAt)
108
+ monitorState.mode = 'websocket';
109
+ if (monitorState.mode === 'websocket')
110
+ await this.connectAgent(resolved, monitorState);
111
+ if (this.disposed || monitorState.mode !== 'poll' || monitorState.nextAttemptAt > this.now())
112
+ return;
63
113
  try {
64
- const resolvedAgent = this.resolveAgent(agent);
65
- if (!resolvedAgent)
66
- throw new Error('agent_unreachable');
67
- terminals = await fetchAgentTerminals(resolvedAgent, this.timeoutMs);
114
+ const terminals = await fetchAgentTerminals(resolved, this.timeoutMs);
115
+ if (this.disposed || this.states.get(agent.id) !== monitorState || monitorState.endpoint !== endpoint)
116
+ return;
117
+ const present = new Set(terminals.map(terminal => terminal.id));
118
+ for (const [id, previous] of monitorState.terminals) {
119
+ if (!present.has(id))
120
+ terminals.push({ ...previous.summary, status: 'exited' });
121
+ }
122
+ await this.applyActivity(agent.id, monitorState, terminals, !monitorState.seeded);
68
123
  monitorState.failures = 0;
69
- monitorState.nextAttemptAt = 0;
124
+ monitorState.nextAttemptAt = this.now() + this.intervalMs;
70
125
  }
71
126
  catch {
72
- monitorState.failures += 1;
73
- monitorState.nextAttemptAt = this.now() + Math.min(this.maxBackoffMs, this.intervalMs * 2 ** Math.min(5, monitorState.failures));
74
- return;
127
+ this.failed(monitorState);
128
+ }
129
+ }
130
+ connectAgent(agent, state) {
131
+ return new Promise(resolve => {
132
+ let socket;
133
+ const requestedCursor = state.cursor;
134
+ try {
135
+ const url = new URL(`${agent.url.replace(/\/$/, '')}/api/agent/activity/ws`);
136
+ url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
137
+ if (requestedCursor)
138
+ url.searchParams.set('cursor', requestedCursor);
139
+ socket = this.createWebSocket(url.toString(), {
140
+ headers: { Authorization: `Bearer ${agent.token}` }, handshakeTimeout: this.timeoutMs,
141
+ maxPayload: activityMaxMessageBytes, followRedirects: false
142
+ });
143
+ }
144
+ catch {
145
+ this.failed(state);
146
+ resolve();
147
+ return;
148
+ }
149
+ state.socket = socket;
150
+ state.seeded = requestedCursor !== undefined;
151
+ state.lastSeenAt = this.now();
152
+ let ready = false;
153
+ let sawSnapshot = false;
154
+ const current = () => !this.disposed && this.states.get(agent.id) === state && state.socket === socket;
155
+ const deadline = setTimeout(() => { if (current())
156
+ socket.terminate(); }, this.timeoutMs);
157
+ deadline.unref();
158
+ const finish = () => { clearTimeout(deadline); resolve(); };
159
+ socket.on('message', (data, binary) => {
160
+ if (!current())
161
+ return;
162
+ try {
163
+ const text = data.toString();
164
+ if (binary || Buffer.byteLength(text) > activityMaxMessageBytes)
165
+ throw new Error('invalid activity frame');
166
+ const message = parseActivityFrame(JSON.parse(text));
167
+ if (message?.type === 'activity.ready') {
168
+ if (ready || (message.mode === 'resume' ? !requestedCursor : !sawSnapshot))
169
+ throw new Error('invalid activity acknowledgement');
170
+ ready = true;
171
+ state.cursor = message.cursor;
172
+ state.seeded = true;
173
+ state.lastSeenAt = this.now();
174
+ state.failures = 0;
175
+ state.nextAttemptAt = 0;
176
+ finish();
177
+ return;
178
+ }
179
+ if (!message || message.agentId !== null || (!state.seeded && !message.initial))
180
+ throw new Error('invalid activity snapshot');
181
+ if (message.initial)
182
+ sawSnapshot = true;
183
+ else if (!message.cursor)
184
+ throw new Error('activity cursor required');
185
+ state.lastSeenAt = this.now();
186
+ state.failures = 0;
187
+ state.nextAttemptAt = 0;
188
+ void this.applyActivity(agent.id, state, message.terminals, message.initial).catch(() => {
189
+ if (current())
190
+ socket.terminate();
191
+ });
192
+ if (ready || (!sawSnapshot && requestedCursor))
193
+ state.cursor = message.cursor;
194
+ }
195
+ catch {
196
+ socket.terminate();
197
+ }
198
+ });
199
+ socket.on('ping', () => { if (current())
200
+ state.lastSeenAt = this.now(); });
201
+ socket.on('pong', () => { if (current())
202
+ state.lastSeenAt = this.now(); });
203
+ socket.on('unexpected-response', (_request, response) => {
204
+ if (current() && [404, 405, 501].includes(response.statusCode ?? 0)) {
205
+ state.mode = 'poll';
206
+ state.probeAt = this.now() + 5 * 60_000;
207
+ state.nextAttemptAt = 0;
208
+ }
209
+ response.destroy();
210
+ socket.terminate();
211
+ });
212
+ socket.on('error', () => { if (current())
213
+ socket.terminate(); });
214
+ socket.once('close', () => {
215
+ if (current()) {
216
+ state.socket = null;
217
+ state.seeded = false;
218
+ if (state.mode !== 'poll')
219
+ this.failed(state);
220
+ }
221
+ finish();
222
+ });
223
+ });
224
+ }
225
+ applyActivity(agentId, state, terminals, initial) {
226
+ if (initial) {
227
+ state.terminals.clear();
228
+ state.summaryBytes = 0;
75
229
  }
76
- const seenTerminalIds = new Set();
230
+ state.seeded = true;
231
+ const accepted = [];
232
+ const notifications = [];
77
233
  for (const terminal of terminals) {
78
- seenTerminalIds.add(terminal.id);
79
- if (terminal.status !== 'running') {
80
- monitorState.terminals.delete(terminal.id);
234
+ const previous = state.terminals.get(terminal.id);
235
+ const revision = terminal.agentStatus?.revision;
236
+ if (!initial && previous?.revision !== undefined && revision !== undefined && revision < previous.revision
237
+ && previous.epoch === terminal.agentStatus?.epoch
238
+ && previous.provider === terminal.agentStatus?.provider
239
+ && !agentSessionChanged(previous.agentSessionId, terminal.agentStatus?.sessionId ?? null))
81
240
  continue;
82
- }
83
- const previous = monitorState.terminals.get(terminal.id);
241
+ accepted.push(terminal);
242
+ if (!previous && terminal.status === 'running' && state.terminals.size >= activityMaxTerminals)
243
+ throw new Error('activity terminal limit');
84
244
  const next = nextTerminalActivityState(terminal, previous);
85
- monitorState.terminals.set(terminal.id, next);
86
- if (!previous) {
87
- continue;
245
+ const summaryBytes = state.summaryBytes - (previous?.bytes ?? 0) + (terminal.status === 'running' ? next.bytes : 0);
246
+ if (summaryBytes > activityMaxMessageBytes)
247
+ throw new Error('activity state too large');
248
+ state.summaryBytes = summaryBytes;
249
+ state.terminals.set(terminal.id, next);
250
+ const fromHook = terminal.agentStatus?.source === 'hook';
251
+ const completion = fromHook ? terminal.agentStatus?.completion : undefined;
252
+ const completionKey = completion ? JSON.stringify([terminal.id, completion.id]) : null;
253
+ const duplicate = completionKey !== null && state.completionIds.has(completionKey);
254
+ const completed = !initial && (fromHook ? completion && !duplicate : previous && shouldNotifyAgentCompletion(previous, terminal));
255
+ if (completed && this.notifications >= 128)
256
+ throw new Error('activity notification backlog');
257
+ if (completionKey !== null) {
258
+ state.completionIds.add(completionKey);
259
+ if (state.completionIds.size > 4096)
260
+ state.completionIds.delete(state.completionIds.values().next().value);
88
261
  }
89
- if (shouldNotifyAgentCompletion(previous, terminal)) {
90
- const outcome = terminal.agentStatus?.state === 'stopped' ? 'stopped' : 'finished';
91
- await this.router.notifyCompletion({
92
- agentId: agent.id,
93
- terminalId: terminal.id,
94
- terminalTitle: terminal.title,
95
- ...(terminal.agentStatus?.provider ? { provider: terminal.agentStatus.provider } : {}),
96
- outcome,
97
- commandName: previous.currentCommand
98
- });
99
- monitorState.terminals.set(terminal.id, { ...next, sawAgentWorking: false, sawBusy: false });
100
- }
101
- }
102
- for (const terminalId of [...monitorState.terminals.keys()]) {
103
- if (!seenTerminalIds.has(terminalId)) {
104
- monitorState.terminals.delete(terminalId);
262
+ if (completed) {
263
+ this.notifications++;
264
+ notifications.push(Promise.resolve().then(() => {
265
+ if (this.disposed || this.states.get(agentId) !== state)
266
+ return;
267
+ return this.router.notifyCompletion({
268
+ agentId, terminalId: terminal.id, terminalTitle: terminal.title,
269
+ ...(terminal.agentStatus?.provider ? { provider: terminal.agentStatus.provider } : {}),
270
+ outcome: completion?.outcome ?? (terminal.agentStatus?.state === 'stopped' ? 'stopped' : 'finished'),
271
+ ...(completion ? { completionId: completion.id, occurredAt: completion.occurredAt } : {}),
272
+ commandName: previous?.currentCommand ?? terminal.currentCommand ?? null
273
+ });
274
+ }).catch(() => { }).finally(() => { this.notifications--; }));
275
+ state.terminals.set(terminal.id, { ...next, sawAgentWorking: false, sawBusy: false });
105
276
  }
277
+ if (terminal.status !== 'running')
278
+ state.terminals.delete(terminal.id);
106
279
  }
280
+ if (initial || accepted.length)
281
+ this.onActivity(agentId, accepted, initial);
282
+ return Promise.allSettled(notifications).then(() => { });
283
+ }
284
+ failed(state) {
285
+ state.failures++;
286
+ state.nextAttemptAt = this.now() + Math.min(this.maxBackoffMs, this.intervalMs * 2 ** Math.min(5, state.failures - 1));
287
+ }
288
+ disconnect(state) {
289
+ const socket = state.socket;
290
+ state.socket = null;
291
+ state.seeded = false;
292
+ socket?.terminate();
107
293
  }
108
294
  stateFor(agentId) {
109
295
  let state = this.states.get(agentId);
110
296
  if (!state) {
111
- state = { terminals: new Map(), failures: 0, nextAttemptAt: 0 };
297
+ state = { terminals: new Map(), failures: 0, nextAttemptAt: 0, socket: null, endpoint: null,
298
+ mode: 'websocket', probeAt: 0, seeded: false, lastSeenAt: 0, completionIds: new Set(), cursor: undefined, summaryBytes: 0 };
112
299
  this.states.set(agentId, state);
113
300
  }
114
301
  return state;
@@ -121,14 +308,35 @@ async function fetchAgentTerminals(agent, timeoutMs) {
121
308
  signal: AbortSignal.timeout(timeoutMs)
122
309
  });
123
310
  if (!response.ok) {
311
+ await response.body?.cancel();
124
312
  throw new Error('agent_unreachable');
125
313
  }
126
314
  const contentType = response.headers.get('content-type') ?? '';
127
315
  if (!contentType.includes('application/json')) {
316
+ await response.body?.cancel();
128
317
  throw new Error('agent_unexpected_response');
129
318
  }
130
- const body = (await response.json());
131
- if (!Array.isArray(body.terminals)) {
319
+ const reader = response.body?.getReader();
320
+ if (!reader)
321
+ throw new Error('agent_invalid_response');
322
+ let bytes = 0;
323
+ const chunks = [];
324
+ try {
325
+ while (true) {
326
+ const chunk = await reader.read();
327
+ if (chunk.done)
328
+ break;
329
+ bytes += chunk.value.byteLength;
330
+ if (bytes > activityMaxMessageBytes)
331
+ throw new Error('agent_response_too_large');
332
+ chunks.push(chunk.value);
333
+ }
334
+ }
335
+ finally {
336
+ await reader.cancel().catch(() => { });
337
+ }
338
+ const body = JSON.parse(Buffer.concat(chunks).toString());
339
+ if (!Array.isArray(body.terminals) || body.terminals.length > activityMaxTerminals || !body.terminals.every(validActivityTerminal)) {
132
340
  throw new Error('agent_invalid_response');
133
341
  }
134
342
  return body.terminals;
@@ -139,7 +347,8 @@ function nextTerminalActivityState(terminal, previous) {
139
347
  const commandChanged = previous && previous.currentCommand !== (terminal.currentCommand ?? null);
140
348
  const providerChanged = previous && previous.provider !== provider;
141
349
  const sessionChanged = previous && agentSessionChanged(previous.agentSessionId, agentSessionId);
142
- const reset = commandChanged || providerChanged || sessionChanged;
350
+ const epochChanged = previous && previous.epoch !== terminal.agentStatus?.epoch;
351
+ const reset = commandChanged || providerChanged || sessionChanged || epochChanged;
143
352
  const trackedAgentSessionId = agentSessionId ?? (commandChanged || providerChanged ? null : (previous?.agentSessionId ?? null));
144
353
  return {
145
354
  terminalId: terminal.id,
@@ -148,7 +357,11 @@ function nextTerminalActivityState(terminal, previous) {
148
357
  currentCommand: terminal.currentCommand ?? null,
149
358
  provider,
150
359
  agentSessionId: trackedAgentSessionId,
151
- agentState: terminal.agentStatus?.state ?? null
360
+ agentState: terminal.agentStatus?.state ?? null,
361
+ revision: terminal.agentStatus?.revision,
362
+ epoch: terminal.agentStatus?.epoch,
363
+ summary: terminal,
364
+ bytes: Buffer.byteLength(JSON.stringify(terminal))
152
365
  };
153
366
  }
154
367
  function shouldNotifyAgentCompletion(previous, terminal) {
@@ -156,6 +369,7 @@ function shouldNotifyAgentCompletion(previous, terminal) {
156
369
  const completed = terminal.agentStatus.state === 'done' || terminal.agentStatus.state === 'stopped';
157
370
  const sameAgent = previous.currentCommand === (terminal.currentCommand ?? null) &&
158
371
  previous.provider === terminal.agentStatus.provider &&
372
+ previous.epoch === terminal.agentStatus.epoch &&
159
373
  !agentSessionChanged(previous.agentSessionId, terminal.agentStatus.sessionId ?? null);
160
374
  return sameAgent && completed && (previous.sawAgentWorking || (previous.agentState === 'unknown' && previous.sawBusy));
161
375
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agentCompletionMonitor.js","sourceRoot":"","sources":["../../../src/server/notifications/agentCompletionMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentCompletionMonitor.js","sourceRoot":"","sources":["../../../src/server/notifications/agentCompletionMonitor.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface TerminalCompletionEvent {
10
10
  outcome: TerminalCompletionOutcome;
11
11
  commandName?: string | null;
12
12
  occurredAt?: string;
13
+ completionId?: string;
13
14
  }
14
15
  export interface CompletionNotificationRouterOptions {
15
16
  now?: () => number;
@@ -22,6 +23,7 @@ export declare class CompletionNotificationRouter {
22
23
  private readonly now;
23
24
  private readonly coalesceWindowMs;
24
25
  private readonly recentTags;
26
+ private readonly completionIds;
25
27
  constructor(store: FileStore, pushService: PushNotificationService, presence: ClientPresenceTracker, options?: CompletionNotificationRouterOptions);
26
28
  notifyCompletion(event: TerminalCompletionEvent): Promise<void>;
27
29
  private reserveCoalesceTag;
@@ -8,6 +8,7 @@ export class CompletionNotificationRouter {
8
8
  now;
9
9
  coalesceWindowMs;
10
10
  recentTags = new Map();
11
+ completionIds = new Set();
11
12
  constructor(store, pushService, presence, options = {}) {
12
13
  this.store = store;
13
14
  this.pushService = pushService;
@@ -16,6 +17,14 @@ export class CompletionNotificationRouter {
16
17
  this.coalesceWindowMs = options.coalesceWindowMs ?? defaultCoalesceWindowMs;
17
18
  }
18
19
  async notifyCompletion(event) {
20
+ if (event.completionId) {
21
+ const identity = `${event.agentId ?? MAIN_SERVER_ID}:${event.completionId}`;
22
+ if (this.completionIds.has(identity))
23
+ return;
24
+ this.completionIds.add(identity);
25
+ while (this.completionIds.size > 4096)
26
+ this.completionIds.delete(this.completionIds.values().next().value);
27
+ }
19
28
  const tag = completionTag(event);
20
29
  const state = await this.store.read();
21
30
  const targets = selectPushTargets(state.pushSubscriptions, this.presence);
@@ -1 +1 @@
1
- {"version":3,"file":"completionNotificationRouter.js","sourceRoot":"","sources":["../../../src/server/notifications/completionNotificationRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAgC,MAAM,mCAAmC,CAAC;AAoB7G,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,MAAM,OAAO,4BAA4B;IAMpB;IACA;IACA;IAPF,GAAG,CAAe;IAClB,gBAAgB,CAAS;IACzB,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExD,YACmB,KAAgB,EAChB,WAAoC,EACpC,QAA+B,EAChD,UAA+C,EAAE;QAHhC,UAAK,GAAL,KAAK,CAAW;QAChB,gBAAW,GAAX,WAAW,CAAyB;QACpC,aAAQ,GAAR,QAAQ,CAAuB;QAGhD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,uBAAuB,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAA8B;QACnD,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO;YAC9B,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,eAAe,CAAC;YACrF,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE;YAClD,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,OAAO,UAAU,EAAE;YACnE,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,KAAK,CAAC;YACtC,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAC/B,aAAgD,EAChD,QAA+B;IAE/B,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9H,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAChD,SAAS;SACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,2BAA2B,CAAC;SACxF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChC,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,GAAG,CAAC,IAAI,kCAAkC,CAAC,IAAI,GAAG,CAAC,CAAC;IACrG,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE1D,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,gCAAgC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,YAAY;YAAE,SAAS;QACzC,IAAI,YAAY,CAAC,WAAW,KAAK,YAAY;YAAE,SAAS;QACxD,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ;YAAE,SAAS;QAC3F,IAAI,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gCAAgC,CACvC,aAAgD,EAChD,aAAkC;IAElC,OAAO,aAAa;SACjB,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CACvB,YAAY,CAAC,WAAW,KAAK,YAAY;QACzC,CAAC,YAAY,CAAC,UAAU,KAAK,QAAQ,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,CAAC;QAC9E,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC1C;SACA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/I,CAAC;AAED,SAAS,aAAa,CAAC,KAA8B;IACnD,OAAO,aAAa,KAAK,CAAC,OAAO,IAAI,cAAc,IAAI,KAAK,CAAC,UAAU,aAAa,CAAC;AACvF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA8B;IAC3D,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC;IACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"completionNotificationRouter.js","sourceRoot":"","sources":["../../../src/server/notifications/completionNotificationRouter.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,17 @@ export async function registerAccountRoutes(app, config, services) {
7
7
  return reply;
8
8
  return services.accountService.status();
9
9
  });
10
+ app.post('/api/accounts/:provider/usage', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
11
+ if (!await authenticateTerminalRequest(services.authService, request, reply))
12
+ return reply;
13
+ if (config.previewMode)
14
+ return reply.code(403).send({ error: 'preview_mode' });
15
+ const provider = parseProvider(request.params.provider, reply);
16
+ if (!provider)
17
+ return reply;
18
+ reply.header('Cache-Control', 'no-store');
19
+ return handle(reply, () => services.accountService.usage(provider));
20
+ });
10
21
  app.post('/api/accounts/:provider/select', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
11
22
  if (!await authenticateTerminalRequest(services.authService, request, reply))
12
23
  return reply;
@@ -1 +1 @@
1
- {"version":3,"file":"accountRoutes.js","sourceRoot":"","sources":["../../../src/server/routes/accountRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAkB,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAKpF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAoB,EAAE,MAAiB,EAAE,QAA8B;IACjH,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAkE,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrN,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;QAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACjG,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAsD,oCAAoC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/M,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAmC,+BAA+B,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrL,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAA8D,wCAAwC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACzN,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjJ,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAmC,sCAAsC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC5L,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAkE,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACtN,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1J,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAmC,mCAAmC,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACzL,IAAI,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3F,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5F,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAiE,IAA4B,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ;IAAE,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AACjQ,KAAK,UAAU,MAAM,CAAC,KAAiE,EAAE,SAAiC,IAAsB,IAAI,CAAC;IAAC,OAAO,MAAM,SAAS,EAAE,CAAC;AAAC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IAAC,IAAI,KAAK,YAAY,mBAAmB;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,MAAM,KAAK,CAAC;AAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"accountRoutes.js","sourceRoot":"","sources":["../../../src/server/routes/accountRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import WebSocket from 'ws';
3
+ import type { AppConfig } from '../config.js';
4
+ import type { AuthService } from '../auth/authService.js';
5
+ import type { AuthenticatedSocketRegistration, AuthenticatedSocketRegistry } from './authenticatedSocketRegistry.js';
6
+ import { type TerminalActivityChannel } from '../terminal/activityChannel.js';
7
+ export interface ActivityRouteServices {
8
+ authService: AuthService;
9
+ activityChannel: TerminalActivityChannel;
10
+ }
11
+ export declare function registerActivityRoutes(app: FastifyInstance, config: AppConfig, services: ActivityRouteServices, authenticatedSockets: AuthenticatedSocketRegistry): Promise<void>;
12
+ /** Read-only transport: no PTY attachment, input, layout, or focus operations. */
13
+ export declare function serveActivitySocket(socket: WebSocket, channel: TerminalActivityChannel, localOnly?: boolean, registration?: AuthenticatedSocketRegistration, cursor?: string): () => void;