@myagentroam/node 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/dist/capabilities.d.ts +5 -0
- package/dist/capabilities.js +23 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/claude-agent-sdk.d.ts +101 -0
- package/dist/claude-agent-sdk.js +341 -0
- package/dist/claude-agent-sdk.js.map +1 -0
- package/dist/claude-channel.d.ts +28 -0
- package/dist/claude-channel.js +45 -0
- package/dist/claude-channel.js.map +1 -0
- package/dist/codex-app-server.d.ts +96 -0
- package/dist/codex-app-server.js +361 -0
- package/dist/codex-app-server.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -0
- package/dist/connector.d.ts +343 -0
- package/dist/connector.js +5525 -0
- package/dist/connector.js.map +1 -0
- package/dist/database.d.ts +282 -0
- package/dist/database.js +1347 -0
- package/dist/database.js.map +1 -0
- package/dist/event-buffer.d.ts +12 -0
- package/dist/event-buffer.js +29 -0
- package/dist/event-buffer.js.map +1 -0
- package/dist/fake-runner.d.ts +42 -0
- package/dist/fake-runner.js +130 -0
- package/dist/fake-runner.js.map +1 -0
- package/dist/health.d.ts +4 -0
- package/dist/health.js +4 -0
- package/dist/health.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +47 -0
- package/dist/main.js.map +1 -0
- package/dist/native-session-history.d.ts +72 -0
- package/dist/native-session-history.js +647 -0
- package/dist/native-session-history.js.map +1 -0
- package/dist/operational.d.ts +30 -0
- package/dist/operational.js +82 -0
- package/dist/operational.js.map +1 -0
- package/dist/process-tree.d.ts +9 -0
- package/dist/process-tree.js +19 -0
- package/dist/process-tree.js.map +1 -0
- package/dist/runner-command-engine.d.ts +19 -0
- package/dist/runner-command-engine.js +47 -0
- package/dist/runner-command-engine.js.map +1 -0
- package/dist/runner-profiles.d.ts +11 -0
- package/dist/runner-profiles.js +138 -0
- package/dist/runner-profiles.js.map +1 -0
- package/dist/runner-usage.d.ts +33 -0
- package/dist/runner-usage.js +193 -0
- package/dist/runner-usage.js.map +1 -0
- package/dist/runtime-state.d.ts +174 -0
- package/dist/runtime-state.js +957 -0
- package/dist/runtime-state.js.map +1 -0
- package/dist/service.d.ts +4 -0
- package/dist/service.js +39 -0
- package/dist/service.js.map +1 -0
- package/dist/storage.d.ts +2 -0
- package/dist/storage.js +33 -0
- package/dist/storage.js.map +1 -0
- package/dist/terminal.d.ts +132 -0
- package/dist/terminal.js +417 -0
- package/dist/terminal.js.map +1 -0
- package/dist/workspace.d.ts +116 -0
- package/dist/workspace.js +732 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +36 -0
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { spawn } from 'node-pty';
|
|
4
|
+
import { terminalDataFrameSchema } from '@myagentroam/protocol';
|
|
5
|
+
import { terminateProcessTree } from './process-tree.js';
|
|
6
|
+
const MAX_FRAME_CHARACTERS = 65_536;
|
|
7
|
+
const DEFAULT_MAX_TERMINALS = 10;
|
|
8
|
+
const DEFAULT_MAX_TERMINALS_PER_WORKSPACE = 5;
|
|
9
|
+
const DEFAULT_MAX_REPLAY_BYTES = 512 * 1024;
|
|
10
|
+
const DEFAULT_IDLE_TIMEOUT_MS = 60 * 60_000;
|
|
11
|
+
/**
|
|
12
|
+
* Owns Node-local PTY/ConPTY processes and their bounded output replay.
|
|
13
|
+
* Browser relay transport intentionally lives outside this class: callers pass
|
|
14
|
+
* only schema-validated TerminalDataFrame values after Server authorization.
|
|
15
|
+
*/
|
|
16
|
+
export class TerminalManager {
|
|
17
|
+
platform;
|
|
18
|
+
cwd;
|
|
19
|
+
profiles;
|
|
20
|
+
maxTerminals;
|
|
21
|
+
maxTerminalsPerWorkspace;
|
|
22
|
+
maxReplayBytes;
|
|
23
|
+
idleTimeoutMs;
|
|
24
|
+
now;
|
|
25
|
+
ptyFactory;
|
|
26
|
+
terminate;
|
|
27
|
+
terminals = new Map();
|
|
28
|
+
attachments = new Map();
|
|
29
|
+
frameListeners = new Set();
|
|
30
|
+
summaryListeners = new Set();
|
|
31
|
+
idleTimer;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.platform = options.platform ?? (process.platform === 'win32' ? 'win32' : 'linux');
|
|
34
|
+
this.cwd = options.cwd ?? homedir();
|
|
35
|
+
this.profiles = options.profiles ?? defaultTerminalProfiles(this.platform);
|
|
36
|
+
if (this.profiles.length === 0 || !this.profiles.some((profile) => profile.isDefault)) {
|
|
37
|
+
throw new Error('TERMINAL_PROFILE_INVALID');
|
|
38
|
+
}
|
|
39
|
+
this.maxTerminals = options.maxTerminals ?? DEFAULT_MAX_TERMINALS;
|
|
40
|
+
this.maxTerminalsPerWorkspace =
|
|
41
|
+
options.maxTerminalsPerWorkspace ?? DEFAULT_MAX_TERMINALS_PER_WORKSPACE;
|
|
42
|
+
this.maxReplayBytes = options.maxReplayBytes ?? DEFAULT_MAX_REPLAY_BYTES;
|
|
43
|
+
this.idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
44
|
+
if (!Number.isSafeInteger(this.maxTerminals) ||
|
|
45
|
+
this.maxTerminals < 1 ||
|
|
46
|
+
this.maxTerminals > 64 ||
|
|
47
|
+
!Number.isSafeInteger(this.maxTerminalsPerWorkspace) ||
|
|
48
|
+
this.maxTerminalsPerWorkspace < 1 ||
|
|
49
|
+
this.maxTerminalsPerWorkspace > this.maxTerminals ||
|
|
50
|
+
!Number.isSafeInteger(this.maxReplayBytes) ||
|
|
51
|
+
this.maxReplayBytes < 1 ||
|
|
52
|
+
this.maxReplayBytes > 16 * 1024 * 1024 ||
|
|
53
|
+
!Number.isSafeInteger(this.idleTimeoutMs) ||
|
|
54
|
+
this.idleTimeoutMs < 1_000) {
|
|
55
|
+
throw new Error('TERMINAL_CONFIG_INVALID');
|
|
56
|
+
}
|
|
57
|
+
this.now = options.now ?? Date.now;
|
|
58
|
+
this.ptyFactory = options.ptyFactory ?? nodePtyFactory;
|
|
59
|
+
this.terminate =
|
|
60
|
+
options.terminate ?? ((child, platform) => terminateProcessTree(child, platform));
|
|
61
|
+
this.idleTimer = setInterval(() => void this.closeExpired(), Math.min(this.idleTimeoutMs, 60_000));
|
|
62
|
+
this.idleTimer.unref();
|
|
63
|
+
}
|
|
64
|
+
availableProfiles() {
|
|
65
|
+
return this.profiles.map(({ id, label, isDefault }) => ({ id, label, isDefault }));
|
|
66
|
+
}
|
|
67
|
+
limits() {
|
|
68
|
+
return {
|
|
69
|
+
maxTerminals: this.maxTerminals,
|
|
70
|
+
maxTerminalsPerWorkspace: this.maxTerminalsPerWorkspace,
|
|
71
|
+
maxReplayBytes: this.maxReplayBytes,
|
|
72
|
+
reconnectWindowMs: this.idleTimeoutMs
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
open(input = {}) {
|
|
76
|
+
const profileId = input.profileId ?? this.profiles.find((profile) => profile.isDefault)?.id;
|
|
77
|
+
if (typeof profileId !== 'string')
|
|
78
|
+
throw new Error('TERMINAL_PROFILE_INVALID');
|
|
79
|
+
const profile = this.profiles.find((candidate) => candidate.id === profileId);
|
|
80
|
+
if (profile === undefined)
|
|
81
|
+
throw new Error('TERMINAL_PROFILE_INVALID');
|
|
82
|
+
const rows = terminalDimension(input.rows, 24);
|
|
83
|
+
const cols = terminalDimension(input.cols, 80);
|
|
84
|
+
if (input.cwd !== undefined && typeof input.cwd !== 'string')
|
|
85
|
+
throw new Error('TERMINAL_OPEN_INVALID');
|
|
86
|
+
if (input.workspaceId !== undefined &&
|
|
87
|
+
input.workspaceId !== null &&
|
|
88
|
+
typeof input.workspaceId !== 'string')
|
|
89
|
+
throw new Error('TERMINAL_OPEN_INVALID');
|
|
90
|
+
this.evictForNewTerminal(input.workspaceId ?? null);
|
|
91
|
+
const pty = this.ptyFactory(profile.shell, profile.args, {
|
|
92
|
+
name: 'xterm-256color',
|
|
93
|
+
cols,
|
|
94
|
+
rows,
|
|
95
|
+
cwd: typeof input.cwd === 'string' ? input.cwd : this.cwd,
|
|
96
|
+
env: process.env
|
|
97
|
+
});
|
|
98
|
+
const createdAt = this.now();
|
|
99
|
+
const terminal = {
|
|
100
|
+
id: randomUUID(),
|
|
101
|
+
workspaceId: input.workspaceId ?? null,
|
|
102
|
+
profile,
|
|
103
|
+
pty,
|
|
104
|
+
createdAt,
|
|
105
|
+
state: 'RUNNING',
|
|
106
|
+
updatedAt: createdAt,
|
|
107
|
+
exitCode: null,
|
|
108
|
+
rows,
|
|
109
|
+
cols,
|
|
110
|
+
sequence: 0,
|
|
111
|
+
replayBytes: 0,
|
|
112
|
+
replay: [],
|
|
113
|
+
writerAttachmentId: undefined,
|
|
114
|
+
lastUsedAt: createdAt,
|
|
115
|
+
detachedAt: createdAt
|
|
116
|
+
};
|
|
117
|
+
this.terminals.set(terminal.id, terminal);
|
|
118
|
+
pty.onData((data) => this.recordOutput(terminal, data));
|
|
119
|
+
pty.onExit((event) => this.exited(terminal, event.exitCode));
|
|
120
|
+
return this.notifySummary(terminal);
|
|
121
|
+
}
|
|
122
|
+
list() {
|
|
123
|
+
return [...this.terminals.values()].map((terminal) => this.summary(terminal));
|
|
124
|
+
}
|
|
125
|
+
get(terminalId) {
|
|
126
|
+
return this.summary(this.requireTerminal(terminalId));
|
|
127
|
+
}
|
|
128
|
+
/** One attachment may write. A new writer must explicitly take over. */
|
|
129
|
+
authorizeAttach(input) {
|
|
130
|
+
if (typeof input.terminalId !== 'string')
|
|
131
|
+
throw new Error('TERMINAL_NOT_FOUND');
|
|
132
|
+
const terminal = this.requireTerminal(input.terminalId);
|
|
133
|
+
if (terminal.state !== 'RUNNING')
|
|
134
|
+
throw new Error('TERMINAL_CLOSED');
|
|
135
|
+
const afterSequence = terminalSequence(input.afterSequence);
|
|
136
|
+
const readonly = input.readonly === true;
|
|
137
|
+
if (input.readonly !== undefined && typeof input.readonly !== 'boolean')
|
|
138
|
+
throw new Error('TERMINAL_ATTACH_INVALID');
|
|
139
|
+
if (input.takeover !== undefined && typeof input.takeover !== 'boolean')
|
|
140
|
+
throw new Error('TERMINAL_ATTACH_INVALID');
|
|
141
|
+
if (!readonly && terminal.writerAttachmentId !== undefined && input.takeover !== true) {
|
|
142
|
+
throw new Error('TERMINAL_ATTACH_CONFLICT');
|
|
143
|
+
}
|
|
144
|
+
if (!readonly && terminal.writerAttachmentId !== undefined) {
|
|
145
|
+
this.attachments.delete(terminal.writerAttachmentId);
|
|
146
|
+
}
|
|
147
|
+
const attachmentId = randomUUID();
|
|
148
|
+
this.attachments.set(attachmentId, { terminalId: terminal.id, readonly });
|
|
149
|
+
if (!readonly)
|
|
150
|
+
terminal.writerAttachmentId = attachmentId;
|
|
151
|
+
terminal.updatedAt = this.now();
|
|
152
|
+
terminal.lastUsedAt = terminal.updatedAt;
|
|
153
|
+
terminal.detachedAt = undefined;
|
|
154
|
+
return {
|
|
155
|
+
attachmentId,
|
|
156
|
+
terminalId: terminal.id,
|
|
157
|
+
readonly,
|
|
158
|
+
frames: this.replayFrames(terminal, afterSequence)
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
detach(attachmentId) {
|
|
162
|
+
const attachment = this.attachments.get(attachmentId);
|
|
163
|
+
if (attachment === undefined)
|
|
164
|
+
return;
|
|
165
|
+
this.attachments.delete(attachmentId);
|
|
166
|
+
const terminal = this.terminals.get(attachment.terminalId);
|
|
167
|
+
if (terminal?.writerAttachmentId === attachmentId)
|
|
168
|
+
terminal.writerAttachmentId = undefined;
|
|
169
|
+
if (terminal !== undefined && !this.hasAttachment(terminal.id)) {
|
|
170
|
+
terminal.detachedAt = this.now();
|
|
171
|
+
terminal.lastUsedAt = terminal.detachedAt;
|
|
172
|
+
this.notifySummary(terminal);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Processes data frames from an already-authorized Server relay attachment. */
|
|
176
|
+
async acceptFrame(attachmentId, frame) {
|
|
177
|
+
const parsed = terminalDataFrameSchema.safeParse(frame);
|
|
178
|
+
if (!parsed.success)
|
|
179
|
+
throw new Error('TERMINAL_FRAME_INVALID');
|
|
180
|
+
const attachment = this.attachments.get(attachmentId);
|
|
181
|
+
if (attachment === undefined || attachment.terminalId !== parsed.data.terminalId)
|
|
182
|
+
throw new Error('TERMINAL_ATTACH_INVALID');
|
|
183
|
+
const terminal = this.requireTerminal(attachment.terminalId);
|
|
184
|
+
if (terminal.state !== 'RUNNING')
|
|
185
|
+
throw new Error('TERMINAL_CLOSED');
|
|
186
|
+
if (parsed.data.type === 'attach' ||
|
|
187
|
+
parsed.data.type === 'output' ||
|
|
188
|
+
parsed.data.type === 'exit' ||
|
|
189
|
+
parsed.data.type === 'error') {
|
|
190
|
+
throw new Error('TERMINAL_FRAME_INVALID');
|
|
191
|
+
}
|
|
192
|
+
if (attachment.readonly || terminal.writerAttachmentId !== attachmentId)
|
|
193
|
+
throw new Error('TERMINAL_WRITE_DENIED');
|
|
194
|
+
terminal.updatedAt = this.now();
|
|
195
|
+
terminal.lastUsedAt = terminal.updatedAt;
|
|
196
|
+
if (parsed.data.type === 'input') {
|
|
197
|
+
terminal.pty.write(parsed.data.data);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (parsed.data.type === 'resize') {
|
|
201
|
+
terminal.pty.resize(parsed.data.cols, parsed.data.rows);
|
|
202
|
+
terminal.cols = parsed.data.cols;
|
|
203
|
+
terminal.rows = parsed.data.rows;
|
|
204
|
+
this.notifySummary(terminal);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
await this.close(terminal.id);
|
|
208
|
+
}
|
|
209
|
+
async close(terminalId) {
|
|
210
|
+
const terminal = this.requireTerminal(terminalId);
|
|
211
|
+
if (terminal.state !== 'RUNNING')
|
|
212
|
+
return this.summary(terminal);
|
|
213
|
+
terminal.state = 'CLOSED';
|
|
214
|
+
terminal.updatedAt = this.now();
|
|
215
|
+
this.detachAll(terminal);
|
|
216
|
+
const summary = this.notifySummary(terminal);
|
|
217
|
+
try {
|
|
218
|
+
await this.terminate(terminal.pty, this.platform);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
this.emit({ type: 'exit', terminalId: terminal.id, exitCode: terminal.exitCode });
|
|
222
|
+
}
|
|
223
|
+
return summary;
|
|
224
|
+
}
|
|
225
|
+
async shutdown() {
|
|
226
|
+
if (this.idleTimer !== undefined)
|
|
227
|
+
clearInterval(this.idleTimer);
|
|
228
|
+
this.idleTimer = undefined;
|
|
229
|
+
await Promise.all([...this.terminals.values()]
|
|
230
|
+
.filter((terminal) => terminal.state === 'RUNNING')
|
|
231
|
+
.map((terminal) => this.close(terminal.id)));
|
|
232
|
+
}
|
|
233
|
+
onFrame(listener) {
|
|
234
|
+
this.frameListeners.add(listener);
|
|
235
|
+
return () => this.frameListeners.delete(listener);
|
|
236
|
+
}
|
|
237
|
+
onSummary(listener) {
|
|
238
|
+
this.summaryListeners.add(listener);
|
|
239
|
+
return () => this.summaryListeners.delete(listener);
|
|
240
|
+
}
|
|
241
|
+
async closeExpired() {
|
|
242
|
+
const expired = [...this.terminals.values()].filter((terminal) => terminal.state === 'RUNNING' &&
|
|
243
|
+
terminal.detachedAt !== undefined &&
|
|
244
|
+
this.now() - terminal.detachedAt >= this.idleTimeoutMs);
|
|
245
|
+
await Promise.all(expired.map((terminal) => this.close(terminal.id)));
|
|
246
|
+
}
|
|
247
|
+
recordOutput(terminal, data) {
|
|
248
|
+
if (terminal.state !== 'RUNNING' || data.length === 0)
|
|
249
|
+
return;
|
|
250
|
+
for (const part of splitFrameData(data)) {
|
|
251
|
+
const frame = {
|
|
252
|
+
sequence: ++terminal.sequence,
|
|
253
|
+
data: part,
|
|
254
|
+
bytes: Buffer.byteLength(part, 'utf8')
|
|
255
|
+
};
|
|
256
|
+
terminal.replay.push(frame);
|
|
257
|
+
terminal.replayBytes += frame.bytes;
|
|
258
|
+
while (terminal.replayBytes > this.maxReplayBytes && terminal.replay.length > 0) {
|
|
259
|
+
const removed = terminal.replay.shift();
|
|
260
|
+
if (removed !== undefined)
|
|
261
|
+
terminal.replayBytes -= removed.bytes;
|
|
262
|
+
}
|
|
263
|
+
this.emit({
|
|
264
|
+
type: 'output',
|
|
265
|
+
terminalId: terminal.id,
|
|
266
|
+
sequence: frame.sequence,
|
|
267
|
+
data: frame.data
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
exited(terminal, exitCode) {
|
|
272
|
+
if (terminal.state !== 'RUNNING')
|
|
273
|
+
return;
|
|
274
|
+
terminal.state = 'EXITED';
|
|
275
|
+
terminal.exitCode = exitCode;
|
|
276
|
+
terminal.updatedAt = this.now();
|
|
277
|
+
this.detachAll(terminal);
|
|
278
|
+
this.notifySummary(terminal);
|
|
279
|
+
this.emit({ type: 'exit', terminalId: terminal.id, exitCode });
|
|
280
|
+
}
|
|
281
|
+
replayFrames(terminal, afterSequence) {
|
|
282
|
+
const first = terminal.replay[0]?.sequence;
|
|
283
|
+
const frames = [];
|
|
284
|
+
if (first !== undefined && afterSequence < first - 1) {
|
|
285
|
+
frames.push({ type: 'error', terminalId: terminal.id, code: 'TERMINAL_REPLAY_GAP' });
|
|
286
|
+
}
|
|
287
|
+
for (const replay of terminal.replay) {
|
|
288
|
+
if (replay.sequence > afterSequence) {
|
|
289
|
+
frames.push({
|
|
290
|
+
type: 'output',
|
|
291
|
+
terminalId: terminal.id,
|
|
292
|
+
sequence: replay.sequence,
|
|
293
|
+
data: replay.data
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return frames;
|
|
298
|
+
}
|
|
299
|
+
summary(terminal) {
|
|
300
|
+
return {
|
|
301
|
+
id: terminal.id,
|
|
302
|
+
workspaceId: terminal.workspaceId,
|
|
303
|
+
profileId: terminal.profile.id,
|
|
304
|
+
state: terminal.state,
|
|
305
|
+
createdAt: terminal.createdAt,
|
|
306
|
+
updatedAt: terminal.updatedAt,
|
|
307
|
+
exitCode: terminal.exitCode,
|
|
308
|
+
rows: terminal.rows,
|
|
309
|
+
cols: terminal.cols,
|
|
310
|
+
latestSequence: terminal.sequence
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
notifySummary(terminal) {
|
|
314
|
+
const summary = this.summary(terminal);
|
|
315
|
+
for (const listener of this.summaryListeners)
|
|
316
|
+
listener(summary);
|
|
317
|
+
return summary;
|
|
318
|
+
}
|
|
319
|
+
requireTerminal(terminalId) {
|
|
320
|
+
const terminal = this.terminals.get(terminalId);
|
|
321
|
+
if (terminal === undefined)
|
|
322
|
+
throw new Error('TERMINAL_NOT_FOUND');
|
|
323
|
+
return terminal;
|
|
324
|
+
}
|
|
325
|
+
runningCount() {
|
|
326
|
+
return [...this.terminals.values()].filter((terminal) => terminal.state === 'RUNNING').length;
|
|
327
|
+
}
|
|
328
|
+
evictForNewTerminal(workspaceId) {
|
|
329
|
+
if (workspaceId !== null &&
|
|
330
|
+
this.runningCountForWorkspace(workspaceId) >= this.maxTerminalsPerWorkspace) {
|
|
331
|
+
this.evictLeastRecentlyUsed((terminal) => terminal.workspaceId === workspaceId);
|
|
332
|
+
}
|
|
333
|
+
if (this.runningCount() >= this.maxTerminals)
|
|
334
|
+
this.evictLeastRecentlyUsed(() => true);
|
|
335
|
+
}
|
|
336
|
+
evictLeastRecentlyUsed(predicate) {
|
|
337
|
+
const candidate = [...this.terminals.values()]
|
|
338
|
+
.filter((terminal) => terminal.state === 'RUNNING' && predicate(terminal))
|
|
339
|
+
.sort((left, right) => left.lastUsedAt - right.lastUsedAt || left.createdAt - right.createdAt)[0];
|
|
340
|
+
if (candidate !== undefined)
|
|
341
|
+
void this.close(candidate.id);
|
|
342
|
+
}
|
|
343
|
+
runningCountForWorkspace(workspaceId) {
|
|
344
|
+
return [...this.terminals.values()].filter((terminal) => terminal.state === 'RUNNING' && terminal.workspaceId === workspaceId).length;
|
|
345
|
+
}
|
|
346
|
+
hasAttachment(terminalId) {
|
|
347
|
+
return [...this.attachments.values()].some((attachment) => attachment.terminalId === terminalId);
|
|
348
|
+
}
|
|
349
|
+
detachAll(terminal) {
|
|
350
|
+
for (const [attachmentId, attachment] of this.attachments) {
|
|
351
|
+
if (attachment.terminalId === terminal.id)
|
|
352
|
+
this.attachments.delete(attachmentId);
|
|
353
|
+
}
|
|
354
|
+
terminal.writerAttachmentId = undefined;
|
|
355
|
+
terminal.detachedAt = undefined;
|
|
356
|
+
}
|
|
357
|
+
emit(frame) {
|
|
358
|
+
for (const listener of this.frameListeners)
|
|
359
|
+
listener(frame);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
function nodePtyFactory(shell, args, options) {
|
|
363
|
+
const pty = spawn(shell, [...args], {
|
|
364
|
+
name: options.name,
|
|
365
|
+
cols: options.cols,
|
|
366
|
+
rows: options.rows,
|
|
367
|
+
cwd: options.cwd,
|
|
368
|
+
env: options.env
|
|
369
|
+
});
|
|
370
|
+
return pty;
|
|
371
|
+
}
|
|
372
|
+
function defaultTerminalProfiles(platform) {
|
|
373
|
+
if (platform === 'win32') {
|
|
374
|
+
return [
|
|
375
|
+
{
|
|
376
|
+
id: 'default',
|
|
377
|
+
label: 'Windows Command Prompt',
|
|
378
|
+
shell: process.env['ComSpec'] ?? 'C:\\Windows\\System32\\cmd.exe',
|
|
379
|
+
args: [],
|
|
380
|
+
isDefault: true
|
|
381
|
+
}
|
|
382
|
+
];
|
|
383
|
+
}
|
|
384
|
+
return [
|
|
385
|
+
{
|
|
386
|
+
id: 'default',
|
|
387
|
+
label: '用户 Shell',
|
|
388
|
+
shell: process.env['SHELL']?.trim() || '/bin/bash',
|
|
389
|
+
args: ['-l', '-i'],
|
|
390
|
+
isDefault: true
|
|
391
|
+
}
|
|
392
|
+
];
|
|
393
|
+
}
|
|
394
|
+
function terminalDimension(value, fallback) {
|
|
395
|
+
if (value === undefined)
|
|
396
|
+
return fallback;
|
|
397
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 1 || value > 1000)
|
|
398
|
+
throw new Error('TERMINAL_DIMENSIONS_INVALID');
|
|
399
|
+
return value;
|
|
400
|
+
}
|
|
401
|
+
function terminalSequence(value) {
|
|
402
|
+
if (value === undefined)
|
|
403
|
+
return 0;
|
|
404
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 0)
|
|
405
|
+
throw new Error('TERMINAL_REPLAY_INVALID');
|
|
406
|
+
return value;
|
|
407
|
+
}
|
|
408
|
+
function splitFrameData(value) {
|
|
409
|
+
if (value.length <= MAX_FRAME_CHARACTERS)
|
|
410
|
+
return [value];
|
|
411
|
+
const chunks = [];
|
|
412
|
+
for (let start = 0; start < value.length; start += MAX_FRAME_CHARACTERS) {
|
|
413
|
+
chunks.push(value.slice(start, start + MAX_FRAME_CHARACTERS));
|
|
414
|
+
}
|
|
415
|
+
return chunks;
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { GitSummary, WorkspaceKind } from '@myagentroam/protocol';
|
|
2
|
+
export interface WorkspaceInspection {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly kind: WorkspaceKind;
|
|
5
|
+
readonly gitSummary?: GitSummary;
|
|
6
|
+
}
|
|
7
|
+
export interface WorkspaceFileEntry {
|
|
8
|
+
readonly path: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly kind: 'FILE' | 'DIRECTORY';
|
|
11
|
+
readonly size: number | null;
|
|
12
|
+
readonly modifiedAt: number | null;
|
|
13
|
+
}
|
|
14
|
+
export interface WorkspaceFilePage {
|
|
15
|
+
readonly entries: readonly WorkspaceFileEntry[];
|
|
16
|
+
readonly nextCursor: string | null;
|
|
17
|
+
readonly truncated: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface WorkspaceFileSearchPage {
|
|
20
|
+
readonly entries: readonly WorkspaceFileEntry[];
|
|
21
|
+
readonly nextCursor: string | null;
|
|
22
|
+
readonly truncated: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type WorkspaceUploadPreflightStatus = 'READY' | 'EXISTS_FILE' | 'EXISTS_DIRECTORY' | 'INVALID_NAME';
|
|
25
|
+
export interface WorkspaceUploadTarget {
|
|
26
|
+
readonly path: string;
|
|
27
|
+
readonly absolutePath: string;
|
|
28
|
+
readonly status: WorkspaceUploadPreflightStatus;
|
|
29
|
+
}
|
|
30
|
+
export interface WorkspaceDirectoryEntry {
|
|
31
|
+
readonly path: string;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
readonly selectable: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface WorkspaceDirectoryListing {
|
|
36
|
+
readonly homePath: string;
|
|
37
|
+
readonly currentPath: string;
|
|
38
|
+
readonly parentPath: string | null;
|
|
39
|
+
readonly browseRoots: readonly string[];
|
|
40
|
+
readonly selectable: boolean;
|
|
41
|
+
readonly entries: readonly WorkspaceDirectoryEntry[];
|
|
42
|
+
readonly truncated: boolean;
|
|
43
|
+
}
|
|
44
|
+
interface FileAccessOptions {
|
|
45
|
+
readonly privateRoots?: readonly string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Lists directory names only for the Workspace picker. Browsing begins at the
|
|
49
|
+
* first allowed root when configured, while the Node account home remains a
|
|
50
|
+
* browse boundary and terminal default.
|
|
51
|
+
*/
|
|
52
|
+
export declare function listWorkspaceDirectories(requestedPath: string | undefined, allowedRoots: readonly string[], homePath?: string): Promise<WorkspaceDirectoryListing>;
|
|
53
|
+
export declare function listWorkspaceFiles(workspaceRoot: string, requestedPath?: string, cursor?: string, limit?: number, options?: FileAccessOptions): Promise<WorkspaceFilePage>;
|
|
54
|
+
/** Validates an upload destination without following an existing target symlink. */
|
|
55
|
+
export declare function preflightWorkspaceUpload(workspaceRoot: string, requestedDirectory: string, name: string, options?: FileAccessOptions): Promise<WorkspaceUploadTarget>;
|
|
56
|
+
export declare function workspaceUploadTemporaryName(uploadId: string): string;
|
|
57
|
+
export declare function readWorkspaceTextFile(workspaceRoot: string, requestedPath: string, offset?: number, limit?: number, options?: FileAccessOptions): Promise<{
|
|
58
|
+
readonly path: string;
|
|
59
|
+
readonly encoding: 'utf-8' | 'base64';
|
|
60
|
+
readonly size: number;
|
|
61
|
+
readonly content: string;
|
|
62
|
+
readonly truncated: boolean;
|
|
63
|
+
readonly nextOffset: number | null;
|
|
64
|
+
}>;
|
|
65
|
+
/** Reads one absolute file only when the resolved target remains within a Node allowed root. */
|
|
66
|
+
export declare function readAllowedTextFile(requestedPath: string, allowedRoots: readonly string[], offset?: number, limit?: number, options?: FileAccessOptions): Promise<{
|
|
67
|
+
readonly path: string;
|
|
68
|
+
readonly encoding: 'utf-8' | 'base64';
|
|
69
|
+
readonly size: number;
|
|
70
|
+
readonly content: string;
|
|
71
|
+
readonly truncated: boolean;
|
|
72
|
+
readonly nextOffset: number | null;
|
|
73
|
+
}>;
|
|
74
|
+
/** Searches file names only, so an exploratory request cannot exfiltrate file contents. */
|
|
75
|
+
export declare function searchWorkspaceFiles(workspaceRoot: string, query: string, cursor?: string, limit?: number, options?: FileAccessOptions): Promise<WorkspaceFileSearchPage>;
|
|
76
|
+
export declare function normalizeWorkspacePath(input: string, platform?: NodeJS.Platform): string;
|
|
77
|
+
export declare function isWithinAllowedRoot(target: string, roots: readonly string[], platform?: NodeJS.Platform): boolean;
|
|
78
|
+
/** Resolving both candidate and roots rejects Linux symlinks which point outside a root. */
|
|
79
|
+
export declare function inspectWorkspace(requestedPath: string, allowedRoots: readonly string[]): Promise<WorkspaceInspection>;
|
|
80
|
+
export declare function readGitSummary(workspacePath: string): Promise<GitSummary>;
|
|
81
|
+
export declare function assertSafeGitRef(ref: string): void;
|
|
82
|
+
export declare function readRestrictedDiff(workspacePath: string, fromRef: string, toRef: string): Promise<{
|
|
83
|
+
readonly binary: boolean;
|
|
84
|
+
readonly text?: string;
|
|
85
|
+
readonly summary?: string;
|
|
86
|
+
readonly truncated: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
type CurrentChange = {
|
|
89
|
+
readonly path: string;
|
|
90
|
+
readonly state: 'STAGED' | 'UNSTAGED' | 'UNTRACKED';
|
|
91
|
+
readonly change: 'ADDED' | 'MODIFIED' | 'DELETED' | 'RENAMED' | 'COPIED' | 'TYPE_CHANGED';
|
|
92
|
+
};
|
|
93
|
+
export declare function readCurrentChangesSummary(workspacePath: string): Promise<{
|
|
94
|
+
readonly branch: string | null;
|
|
95
|
+
readonly changes: readonly CurrentChange[];
|
|
96
|
+
}>;
|
|
97
|
+
export declare function readCurrentChanges(workspacePath: string): Promise<readonly {
|
|
98
|
+
readonly path: string;
|
|
99
|
+
readonly state: 'STAGED' | 'UNSTAGED' | 'UNTRACKED';
|
|
100
|
+
readonly change: 'ADDED' | 'MODIFIED' | 'DELETED' | 'RENAMED' | 'COPIED' | 'TYPE_CHANGED';
|
|
101
|
+
}[]>;
|
|
102
|
+
export declare function readCurrentChangeDiff(workspacePath: string, requestedPath: string): Promise<{
|
|
103
|
+
readonly binary: boolean;
|
|
104
|
+
readonly text?: string;
|
|
105
|
+
readonly summary?: string;
|
|
106
|
+
readonly truncated: boolean;
|
|
107
|
+
readonly afterText?: string;
|
|
108
|
+
readonly afterTruncated?: boolean;
|
|
109
|
+
}>;
|
|
110
|
+
export declare function restoreCurrentChange(workspacePath: string, requestedPath: string, state: 'STAGED' | 'UNSTAGED' | 'UNTRACKED', options?: FileAccessOptions): Promise<void>;
|
|
111
|
+
export declare class GitCommandError extends Error {
|
|
112
|
+
readonly code: number;
|
|
113
|
+
readonly stderr: string;
|
|
114
|
+
constructor(code: number, stderr: string);
|
|
115
|
+
}
|
|
116
|
+
export {};
|