nterminal 1.2.79 → 1.2.80

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 (98) hide show
  1. package/SECURITY.md +6 -0
  2. package/dist/client/assets/MarkdownPreview-D2UZ6wJU.js +1 -0
  3. package/dist/client/assets/{TranscriptMarkdownBody-9-cPRj-d.js → TranscriptMarkdownBody-BFu2FzgT.js} +1 -1
  4. package/dist/client/assets/index-4MeJRcb6.js +57 -0
  5. package/dist/client/assets/{index-bffyLU7T.js → index-BFs4imuQ.js} +1 -1
  6. package/dist/client/assets/index-rROkcwjD.css +1 -0
  7. package/dist/client/index.html +2 -2
  8. package/dist/scripts/onboarding.js +10 -1
  9. package/dist/scripts/onboarding.js.map +1 -1
  10. package/dist/server/agent/agentProxy.d.ts +7 -2
  11. package/dist/server/agent/agentProxy.js +75 -9
  12. package/dist/server/agent/agentProxy.js.map +1 -1
  13. package/dist/server/agent/agentRoutes.js +159 -33
  14. package/dist/server/agent/agentRoutes.js.map +1 -1
  15. package/dist/server/agent/agentWebSocketProxy.d.ts +10 -1
  16. package/dist/server/agent/agentWebSocketProxy.js +24 -4
  17. package/dist/server/agent/agentWebSocketProxy.js.map +1 -1
  18. package/dist/server/auth/authService.d.ts +18 -4
  19. package/dist/server/auth/authService.js +57 -6
  20. package/dist/server/auth/authService.js.map +1 -1
  21. package/dist/server/eventLoopDelayMonitor.d.ts +11 -0
  22. package/dist/server/eventLoopDelayMonitor.js +37 -0
  23. package/dist/server/eventLoopDelayMonitor.js.map +1 -0
  24. package/dist/server/http.js +11 -4
  25. package/dist/server/http.js.map +1 -1
  26. package/dist/server/index.js +18 -2
  27. package/dist/server/index.js.map +1 -1
  28. package/dist/server/routes/agentManagementRoutes.d.ts +2 -1
  29. package/dist/server/routes/agentManagementRoutes.js +91 -37
  30. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  31. package/dist/server/routes/authRoutes.js +4 -1
  32. package/dist/server/routes/authRoutes.js.map +1 -1
  33. package/dist/server/routes/authenticatedSocketRegistry.d.ts +25 -0
  34. package/dist/server/routes/authenticatedSocketRegistry.js +171 -0
  35. package/dist/server/routes/authenticatedSocketRegistry.js.map +1 -0
  36. package/dist/server/routes/codeServerRoutes.d.ts +3 -1
  37. package/dist/server/routes/codeServerRoutes.js +139 -26
  38. package/dist/server/routes/codeServerRoutes.js.map +1 -1
  39. package/dist/server/routes/fileRoutes.js +1 -1
  40. package/dist/server/routes/fileRoutes.js.map +1 -1
  41. package/dist/server/routes/httpProxyBody.d.ts +2 -1
  42. package/dist/server/routes/httpProxyBody.js +8 -1
  43. package/dist/server/routes/httpProxyBody.js.map +1 -1
  44. package/dist/server/routes/socketBackpressure.d.ts +2 -0
  45. package/dist/server/routes/socketBackpressure.js +21 -10
  46. package/dist/server/routes/socketBackpressure.js.map +1 -1
  47. package/dist/server/routes/terminalRoutes.d.ts +4 -3
  48. package/dist/server/routes/terminalRoutes.js +62 -14
  49. package/dist/server/routes/terminalRoutes.js.map +1 -1
  50. package/dist/server/routes/terminalSocketMessage.d.ts +34 -0
  51. package/dist/server/routes/terminalSocketMessage.js +188 -0
  52. package/dist/server/routes/terminalSocketMessage.js.map +1 -0
  53. package/dist/server/routes/terminalWebSocket.d.ts +3 -1
  54. package/dist/server/routes/terminalWebSocket.js +191 -116
  55. package/dist/server/routes/terminalWebSocket.js.map +1 -1
  56. package/dist/server/routes/webSocketRelay.d.ts +14 -0
  57. package/dist/server/routes/webSocketRelay.js +188 -18
  58. package/dist/server/routes/webSocketRelay.js.map +1 -1
  59. package/dist/server/routes/webSocketUpgradeAuth.d.ts +5 -0
  60. package/dist/server/routes/webSocketUpgradeAuth.js +21 -0
  61. package/dist/server/routes/webSocketUpgradeAuth.js.map +1 -0
  62. package/dist/server/system/stats.d.ts +1 -1
  63. package/dist/server/system/stats.js +11 -7
  64. package/dist/server/system/stats.js.map +1 -1
  65. package/dist/server/terminal/PtyAdapter.d.ts +25 -8
  66. package/dist/server/terminal/PtyAdapter.js +12 -1
  67. package/dist/server/terminal/PtyAdapter.js.map +1 -1
  68. package/dist/server/terminal/TerminalManager.d.ts +71 -13
  69. package/dist/server/terminal/TerminalManager.js +955 -163
  70. package/dist/server/terminal/TerminalManager.js.map +1 -1
  71. package/dist/server/terminal/TmuxPtyAdapter.d.ts +85 -15
  72. package/dist/server/terminal/TmuxPtyAdapter.js +1364 -403
  73. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  74. package/dist/server/terminal/asyncCommand.d.ts +17 -0
  75. package/dist/server/terminal/asyncCommand.js +60 -0
  76. package/dist/server/terminal/asyncCommand.js.map +1 -0
  77. package/dist/server/terminal/codexTranscriptSource.d.ts +3 -3
  78. package/dist/server/terminal/codexTranscriptSource.js +90 -104
  79. package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
  80. package/dist/server/terminal/outputBuffer.d.ts +5 -1
  81. package/dist/server/terminal/outputBuffer.js +29 -3
  82. package/dist/server/terminal/outputBuffer.js.map +1 -1
  83. package/dist/server/terminal/procfs.d.ts +7 -8
  84. package/dist/server/terminal/procfs.js +56 -47
  85. package/dist/server/terminal/procfs.js.map +1 -1
  86. package/dist/server/terminal/transcriptHistory.d.ts +1 -1
  87. package/dist/server/terminal/transcriptHistory.js +187 -38
  88. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  89. package/dist/server/terminal/ttlCache.d.ts +1 -0
  90. package/dist/server/terminal/ttlCache.js +3 -0
  91. package/dist/server/terminal/ttlCache.js.map +1 -1
  92. package/dist/shared/protocol.d.ts +24 -0
  93. package/dist/shared/protocol.js +25 -2
  94. package/dist/shared/protocol.js.map +1 -1
  95. package/package.json +1 -1
  96. package/dist/client/assets/MarkdownPreview-BBppqaO6.js +0 -1
  97. package/dist/client/assets/index-B3_mYQzf.css +0 -1
  98. package/dist/client/assets/index-DAjEhbeV.js +0 -57
@@ -8,6 +8,31 @@ const defaultMaxPendingBytes = 4 * 1024 * 1024;
8
8
  const backpressureHighWaterBytes = 4 * 1024 * 1024;
9
9
  const backpressureLowWaterBytes = 1 * 1024 * 1024;
10
10
  const backpressurePollMs = 50;
11
+ const backpressureDeadlineMs = 30_000;
12
+ const upstreamOpenDeadlineMs = 30_000;
13
+ const closeGraceMs = 5_000;
14
+ export const outboundWebSocketMaxPayloadBytes = 32 * 1024 * 1024;
15
+ export function pauseWebSocketDuringSetup(socket) {
16
+ let paused = false;
17
+ let resumed = false;
18
+ try {
19
+ socket.pause();
20
+ paused = true;
21
+ }
22
+ catch {
23
+ // A socket can disappear between the upgrade callback and setup. The
24
+ // caller's readyState/authentication checks still reject it.
25
+ }
26
+ return () => {
27
+ if (resumed) {
28
+ return;
29
+ }
30
+ resumed = true;
31
+ if (paused) {
32
+ resumeSocketQuietly(socket);
33
+ }
34
+ };
35
+ }
11
36
  export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
12
37
  const maxPendingMessages = options.maxPendingMessages ?? defaultMaxPendingMessages;
13
38
  const maxPendingBytes = options.maxPendingBytes ?? defaultMaxPendingBytes;
@@ -15,13 +40,28 @@ export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
15
40
  const pendingFromClient = [];
16
41
  let pendingBytes = 0;
17
42
  let closed = false;
43
+ let unsubscribeInvalidation = () => undefined;
44
+ let upstreamOpenDeadline = null;
18
45
  const backpressureTimers = new Map();
46
+ const discardPendingClientMessages = () => {
47
+ pendingFromClient.length = 0;
48
+ pendingBytes = 0;
49
+ };
19
50
  const closeBoth = (code, reason) => {
20
51
  if (closed)
21
52
  return;
22
53
  closed = true;
23
- for (const timer of backpressureTimers.values()) {
24
- clearInterval(timer);
54
+ unsubscribeInvalidation();
55
+ unsubscribeInvalidation = () => undefined;
56
+ if (upstreamOpenDeadline) {
57
+ clearTimeout(upstreamOpenDeadline);
58
+ upstreamOpenDeadline = null;
59
+ }
60
+ discardPendingClientMessages();
61
+ for (const [source, timers] of backpressureTimers) {
62
+ clearInterval(timers.poll);
63
+ clearTimeout(timers.deadline);
64
+ resumeSocketQuietly(source);
25
65
  }
26
66
  backpressureTimers.clear();
27
67
  safeCloseWebSocket(clientSocket, code, reason);
@@ -34,22 +74,80 @@ export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
34
74
  if (!pauseSocketQuietly(source)) {
35
75
  return;
36
76
  }
37
- const timer = setInterval(() => {
77
+ const clearBackpressure = () => {
78
+ const timers = backpressureTimers.get(source);
79
+ if (!timers) {
80
+ return;
81
+ }
82
+ clearInterval(timers.poll);
83
+ clearTimeout(timers.deadline);
84
+ backpressureTimers.delete(source);
85
+ };
86
+ const releaseBackpressure = () => {
87
+ clearBackpressure();
88
+ resumeSocketQuietly(source);
89
+ };
90
+ const poll = setInterval(() => {
38
91
  if (closed) {
39
92
  return;
40
93
  }
41
94
  if (destination.bufferedAmount > backpressureLowWaterBytes && destination.readyState === WebSocket.OPEN) {
42
95
  return;
43
96
  }
44
- clearInterval(timer);
45
- backpressureTimers.delete(source);
46
- resumeSocketQuietly(source);
97
+ releaseBackpressure();
47
98
  }, backpressurePollMs);
48
- timer.unref?.();
49
- backpressureTimers.set(source, timer);
99
+ const deadline = setTimeout(() => {
100
+ if (closed || !backpressureTimers.has(source)) {
101
+ return;
102
+ }
103
+ if (destination.bufferedAmount <= backpressureLowWaterBytes || destination.readyState !== WebSocket.OPEN) {
104
+ releaseBackpressure();
105
+ return;
106
+ }
107
+ closeBoth(1013, 'websocket relay backpressure timeout');
108
+ }, backpressureDeadlineMs);
109
+ poll.unref?.();
110
+ deadline.unref?.();
111
+ backpressureTimers.set(source, { poll, deadline });
112
+ };
113
+ const ensureClientActive = () => {
114
+ if (closed) {
115
+ return false;
116
+ }
117
+ try {
118
+ if (options.isClientActive?.() !== false) {
119
+ return true;
120
+ }
121
+ }
122
+ catch {
123
+ // Authentication checks fail closed.
124
+ }
125
+ closeBoth(1008, 'authentication no longer valid');
126
+ return false;
50
127
  };
128
+ const removeInvalidationListener = options.onClientInvalidated?.((code, reason) => {
129
+ closeBoth(code, reason);
130
+ });
131
+ if (removeInvalidationListener) {
132
+ if (closed) {
133
+ removeInvalidationListener();
134
+ }
135
+ else {
136
+ unsubscribeInvalidation = removeInvalidationListener;
137
+ }
138
+ }
51
139
  upstreamSocket.on('open', () => {
140
+ if (upstreamOpenDeadline) {
141
+ clearTimeout(upstreamOpenDeadline);
142
+ upstreamOpenDeadline = null;
143
+ }
144
+ if (!ensureClientActive()) {
145
+ return;
146
+ }
52
147
  while (pendingFromClient.length > 0 && upstreamSocket.readyState === WebSocket.OPEN) {
148
+ if (!ensureClientActive()) {
149
+ return;
150
+ }
53
151
  const entry = pendingFromClient.shift();
54
152
  if (!entry) {
55
153
  continue;
@@ -60,6 +158,14 @@ export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
60
158
  applyBackpressure(clientSocket, upstreamSocket);
61
159
  });
62
160
  clientSocket.on('message', (data, isBinary) => {
161
+ if (!ensureClientActive()) {
162
+ return;
163
+ }
164
+ const bytes = rawDataByteLength(data);
165
+ if (options.maxClientMessageBytes !== undefined && bytes > options.maxClientMessageBytes) {
166
+ closeBoth(1009, 'websocket message too large');
167
+ return;
168
+ }
63
169
  options.onClientMessage?.();
64
170
  if (upstreamSocket.readyState === WebSocket.OPEN) {
65
171
  sendOrClose(upstreamSocket, data, isBinary, closeBoth);
@@ -69,7 +175,6 @@ export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
69
175
  if (upstreamSocket.readyState !== WebSocket.CONNECTING) {
70
176
  return;
71
177
  }
72
- const bytes = rawDataByteLength(data);
73
178
  if (pendingFromClient.length >= maxPendingMessages) {
74
179
  closeBoth(options.pendingMessageOverflowCode ?? 1013, pendingOverflowReason);
75
180
  return;
@@ -82,16 +187,48 @@ export function relayWebSocketPair(clientSocket, upstreamSocket, options = {}) {
82
187
  pendingBytes += bytes;
83
188
  });
84
189
  upstreamSocket.on('message', (data, isBinary) => {
190
+ if (!ensureClientActive()) {
191
+ return;
192
+ }
193
+ const bytes = rawDataByteLength(data);
194
+ if (options.maxUpstreamMessageBytes !== undefined && bytes > options.maxUpstreamMessageBytes) {
195
+ closeBoth(1009, 'upstream websocket message too large');
196
+ return;
197
+ }
85
198
  options.onUpstreamMessage?.();
86
199
  if (clientSocket.readyState === WebSocket.OPEN) {
87
200
  sendOrClose(clientSocket, data, isBinary, closeBoth);
88
201
  applyBackpressure(upstreamSocket, clientSocket);
89
202
  }
90
203
  });
91
- upstreamSocket.on('error', () => closeBoth(1011, 'upstream websocket error'));
204
+ upstreamSocket.on('unexpected-response', (_request, response) => {
205
+ response.resume();
206
+ const mapped = options.mapUpstreamUnexpectedResponse?.(response.statusCode ?? 0);
207
+ closeBoth(mapped?.code ?? 1011, mapped?.reason ?? 'upstream websocket rejected');
208
+ });
209
+ upstreamSocket.on('error', (error) => {
210
+ if (isWebSocketPayloadTooLargeError(error)) {
211
+ closeBoth(1009, 'upstream websocket message too large');
212
+ return;
213
+ }
214
+ closeBoth(1011, 'upstream websocket error');
215
+ });
92
216
  clientSocket.on('error', () => closeBoth(1011, 'client websocket error'));
93
- upstreamSocket.on('close', (code, reason) => closeBoth(code, reason));
217
+ upstreamSocket.on('close', (code, reason) => {
218
+ const reasonText = safeCloseReasonText(reason);
219
+ const mapped = options.mapUpstreamClose?.(code, reasonText);
220
+ closeBoth(mapped?.code ?? code, mapped?.reason ?? reason);
221
+ });
94
222
  clientSocket.on('close', (code, reason) => closeBoth(code, reason));
223
+ if (upstreamSocket.readyState === WebSocket.CONNECTING) {
224
+ upstreamOpenDeadline = setTimeout(() => {
225
+ upstreamOpenDeadline = null;
226
+ if (!closed && upstreamSocket.readyState === WebSocket.CONNECTING) {
227
+ closeBoth(1013, 'upstream websocket connection timeout');
228
+ }
229
+ }, upstreamOpenDeadlineMs);
230
+ upstreamOpenDeadline.unref?.();
231
+ }
95
232
  }
96
233
  function pauseSocketQuietly(socket) {
97
234
  try {
@@ -127,21 +264,42 @@ function rawDataByteLength(data) {
127
264
  }
128
265
  return data.byteLength;
129
266
  }
267
+ function isWebSocketPayloadTooLargeError(error) {
268
+ return error.code === 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';
269
+ }
130
270
  function safeCloseWebSocket(socket, code, reason) {
131
- if (socket.readyState !== WebSocket.OPEN && socket.readyState !== WebSocket.CONNECTING) {
271
+ if (socket.readyState === WebSocket.CLOSED) {
132
272
  return;
133
273
  }
134
- try {
135
- socket.close(safeCloseCode(code), safeCloseReason(reason));
136
- }
137
- catch {
274
+ if (socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING) {
138
275
  try {
139
- socket.terminate();
276
+ socket.close(safeCloseCode(code), safeCloseReason(reason));
140
277
  }
141
278
  catch {
142
- // Nothing useful remains to do if terminate itself fails.
279
+ try {
280
+ socket.terminate();
281
+ }
282
+ catch {
283
+ // Nothing useful remains to do if terminate itself fails.
284
+ }
285
+ return;
143
286
  }
144
287
  }
288
+ if (socket.readyState === WebSocket.CLOSED) {
289
+ return;
290
+ }
291
+ const forceClose = setTimeout(() => {
292
+ if (socket.readyState !== WebSocket.CLOSED) {
293
+ try {
294
+ socket.terminate();
295
+ }
296
+ catch {
297
+ // The peer completed shutdown between the readyState check and terminate.
298
+ }
299
+ }
300
+ }, closeGraceMs);
301
+ forceClose.unref?.();
302
+ socket.once('close', () => clearTimeout(forceClose));
145
303
  }
146
304
  function safeCloseCode(code) {
147
305
  if (code !== undefined &&
@@ -171,4 +329,16 @@ function safeCloseReason(reason) {
171
329
  }
172
330
  return undefined;
173
331
  }
332
+ function safeCloseReasonText(reason) {
333
+ if (typeof reason === 'string') {
334
+ return reason;
335
+ }
336
+ if (Buffer.isBuffer(reason)) {
337
+ return reason.toString('utf8');
338
+ }
339
+ if (Array.isArray(reason)) {
340
+ return Buffer.concat(reason).toString('utf8');
341
+ }
342
+ return Buffer.from(reason).toString('utf8');
343
+ }
174
344
  //# sourceMappingURL=webSocketRelay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSocketRelay.js","sourceRoot":"","sources":["../../../src/server/routes/webSocketRelay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webSocketRelay.js","sourceRoot":"","sources":["../../../src/server/routes/webSocketRelay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import type { AuthService } from '../auth/authService.js';
3
+ import { type AppConfig } from '../config.js';
4
+ export declare function isWebSocketUpgrade(request: FastifyRequest): boolean;
5
+ export declare function preValidateBrowserWebSocketUpgrade(config: AppConfig, authService: AuthService, request: FastifyRequest, reply: FastifyReply): Promise<void | FastifyReply>;
@@ -0,0 +1,21 @@
1
+ import { isAllowedOrigin } from '../config.js';
2
+ import { authenticateTerminalRequest } from './terminalRoutes.js';
3
+ export function isWebSocketUpgrade(request) {
4
+ return request.headers.upgrade?.toLowerCase() === 'websocket';
5
+ }
6
+ export async function preValidateBrowserWebSocketUpgrade(config, authService, request, reply) {
7
+ if (!isWebSocketUpgrade(request)) {
8
+ return;
9
+ }
10
+ if (!request.headers.origin) {
11
+ return reply.code(403).send({ error: 'origin_required' });
12
+ }
13
+ if (!isAllowedOrigin(config, request.headers.origin)) {
14
+ return reply.code(403).send({ error: 'origin_not_allowed' });
15
+ }
16
+ const auth = await authenticateTerminalRequest(authService, request, reply);
17
+ if (!auth) {
18
+ return reply;
19
+ }
20
+ }
21
+ //# sourceMappingURL=webSocketUpgradeAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webSocketUpgradeAuth.js","sourceRoot":"","sources":["../../../src/server/routes/webSocketUpgradeAuth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAkB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAiB,EACjB,WAAwB,EACxB,OAAuB,EACvB,KAAmB;IAEnB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,2 +1,2 @@
1
1
  import type { SystemStatsResponse } from '../../shared/protocol.js';
2
- export declare function collectSystemStats(diskPath?: string): SystemStatsResponse;
2
+ export declare function collectSystemStats(diskPath?: string): Promise<SystemStatsResponse>;
@@ -1,6 +1,8 @@
1
- import fs from 'node:fs';
1
+ import { readFile, statfs } from 'node:fs/promises';
2
2
  import os from 'node:os';
3
+ import { KeyedSingleFlight } from '../terminal/asyncCommand.js';
3
4
  let previousSample = null;
5
+ const statsInflight = new KeyedSingleFlight();
4
6
  function takeCpuSample() {
5
7
  let idle = 0;
6
8
  let total = 0;
@@ -12,6 +14,9 @@ function takeCpuSample() {
12
14
  return { idle, total };
13
15
  }
14
16
  export function collectSystemStats(diskPath = process.cwd()) {
17
+ return statsInflight.run(diskPath, () => collectSystemStatsUncached(diskPath));
18
+ }
19
+ async function collectSystemStatsUncached(diskPath) {
15
20
  const sample = takeCpuSample();
16
21
  let cpuPercent = null;
17
22
  if (previousSample !== null) {
@@ -27,8 +32,7 @@ export function collectSystemStats(diskPath = process.cwd()) {
27
32
  const freeBytes = os.freemem();
28
33
  const usedBytes = Math.max(0, totalBytes - freeBytes);
29
34
  const memoryPercent = totalBytes > 0 ? Math.round((usedBytes / totalBytes) * 1000) / 10 : 0;
30
- const disk = readDiskUsage(diskPath);
31
- const swap = readSwapUsage();
35
+ const [disk, swap] = await Promise.all([readDiskUsage(diskPath), readSwapUsage()]);
32
36
  return {
33
37
  cpuPercent,
34
38
  memoryPercent,
@@ -43,9 +47,9 @@ export function collectSystemStats(diskPath = process.cwd()) {
43
47
  cores: os.cpus().length
44
48
  };
45
49
  }
46
- function readDiskUsage(diskPath) {
50
+ async function readDiskUsage(diskPath) {
47
51
  try {
48
- const stats = fs.statfsSync(diskPath);
52
+ const stats = await statfs(diskPath);
49
53
  const totalBytes = stats.blocks * stats.bsize;
50
54
  const availableBytes = stats.bavail * stats.bsize;
51
55
  const usedBytes = Math.max(0, totalBytes - availableBytes);
@@ -55,10 +59,10 @@ function readDiskUsage(diskPath) {
55
59
  return null;
56
60
  }
57
61
  }
58
- function readSwapUsage() {
62
+ async function readSwapUsage() {
59
63
  let raw;
60
64
  try {
61
- raw = fs.readFileSync('/proc/meminfo', 'utf8');
65
+ raw = await readFile('/proc/meminfo', 'utf8');
62
66
  }
63
67
  catch {
64
68
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/server/system/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/server/system/stats.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,10 @@ export interface PtyProcess {
15
15
  export interface Disposable {
16
16
  dispose(): void;
17
17
  }
18
+ export type MaybePromise<T> = T | Promise<T>;
19
+ export declare class PtySessionUnavailableError extends Error {
20
+ constructor(sessionId: string);
21
+ }
18
22
  export interface PtySpawnOptions {
19
23
  sessionId: string;
20
24
  shell: string;
@@ -32,10 +36,19 @@ export interface PtyHistoryCapture {
32
36
  startLine: number;
33
37
  endLine: number;
34
38
  hasMore: boolean;
39
+ invalidated?: boolean;
40
+ snapshotHistorySize?: number;
41
+ snapshotHistoryLimit?: number;
42
+ snapshotHistoryToken?: string;
43
+ snapshotPaneWidth?: number;
35
44
  output: string[];
36
45
  }
37
46
  export interface PtyHistoryCaptureOptions {
38
47
  beforeLine?: number;
48
+ snapshotHistorySize?: number;
49
+ snapshotHistoryLimit?: number;
50
+ snapshotHistoryToken?: string;
51
+ snapshotPaneWidth?: number;
39
52
  limit: number;
40
53
  }
41
54
  export interface PtyTranscriptSource {
@@ -46,16 +59,20 @@ export interface PtyTranscriptSource {
46
59
  export interface PtyAdapter {
47
60
  spawn(options: PtySpawnOptions & {
48
61
  title?: string;
62
+ }): MaybePromise<PtyProcess>;
63
+ attachExisting?(options: PtySpawnOptions & {
64
+ title?: string;
49
65
  }): PtyProcess;
50
- listExisting?(): PersistedSession[];
51
- destroySession?(sessionId: string): boolean;
52
- setSessionTitle?(sessionId: string, title: string): void;
53
- pollSessions?(): Promise<Map<string, {
66
+ listExisting?(): MaybePromise<PersistedSession[]>;
67
+ destroySession?(sessionId: string): MaybePromise<boolean>;
68
+ setSessionTitle?(sessionId: string, title: string): MaybePromise<void>;
69
+ pollSessions?(): MaybePromise<Map<string, {
54
70
  currentCommand: string;
55
71
  busy: boolean;
56
72
  }>>;
57
- captureHistory?(sessionId: string, options: PtyHistoryCaptureOptions): PtyHistoryCapture | null;
58
- resolveTranscriptSource?(sessionId: string): PtyTranscriptSource | null;
59
- scrollbackScroll?(sessionId: string, lines: number): boolean;
60
- cancelScrollbackMode?(sessionId: string): boolean;
73
+ captureHistory?(sessionId: string, options: PtyHistoryCaptureOptions): MaybePromise<PtyHistoryCapture | null>;
74
+ resolveTranscriptSource?(sessionId: string): MaybePromise<PtyTranscriptSource | null>;
75
+ scrollbackScroll?(sessionId: string, lines: number): MaybePromise<boolean>;
76
+ cancelScrollbackMode?(sessionId: string): MaybePromise<boolean>;
61
77
  }
78
+ export declare function normalizeTerminalTitle(raw: string): string;
@@ -1,2 +1,13 @@
1
- export {};
1
+ export class PtySessionUnavailableError extends Error {
2
+ constructor(sessionId) {
3
+ super(`persistent terminal session ${sessionId} is unavailable`);
4
+ this.name = 'PtySessionUnavailableError';
5
+ }
6
+ }
7
+ // Keep the persisted tmux window name and the in-memory/UI title identical.
8
+ // Terminal titles are single-line labels, not terminal output.
9
+ export function normalizeTerminalTitle(raw) {
10
+ const collapsed = raw.replace(/[\u0000-\u001f\u007f]+/g, ' ').trim();
11
+ return collapsed.slice(0, 80) || 'Terminal';
12
+ }
2
13
  //# sourceMappingURL=PtyAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PtyAdapter.js","sourceRoot":"","sources":["../../../src/server/terminal/PtyAdapter.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"PtyAdapter.js","sourceRoot":"","sources":["../../../src/server/terminal/PtyAdapter.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,SAAiB;QAC3B,KAAK,CAAC,+BAA+B,SAAS,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAgHD,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;AAC9C,CAAC"}