@sentropic/h2a-runtime 0.90.3 → 0.91.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-help-groups.d.ts +1 -1
- package/dist/cli-help-groups.d.ts.map +1 -1
- package/dist/cli-help-groups.js +5 -0
- package/dist/cli-help-groups.js.map +1 -1
- package/dist/convsync.d.ts +1 -1
- package/dist/convsync.d.ts.map +1 -1
- package/dist/convsync.js +14 -2
- package/dist/convsync.js.map +1 -1
- package/dist/identity-cull/cull.d.ts +167 -0
- package/dist/identity-cull/cull.d.ts.map +1 -0
- package/dist/identity-cull/cull.js +924 -0
- package/dist/identity-cull/cull.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -109
- package/dist/index.js.map +1 -1
- package/dist/llm-gateway-runtime/accounts.d.ts +1 -1
- package/dist/llm-gateway-runtime/accounts.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/accounts.js +12 -4
- package/dist/llm-gateway-runtime/accounts.js.map +1 -1
- package/dist/llm-gateway-runtime/model-catalog.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/model-catalog.js +33 -3
- package/dist/llm-gateway-runtime/model-catalog.js.map +1 -1
- package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/proxy-anthropic.js +27 -9
- package/dist/llm-gateway-runtime/proxy-anthropic.js.map +1 -1
- package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts +11 -0
- package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts.map +1 -0
- package/dist/llm-gateway-runtime/proxy-cloud-code.js +215 -0
- package/dist/llm-gateway-runtime/proxy-cloud-code.js.map +1 -0
- package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/proxy-openai.js +0 -3
- package/dist/llm-gateway-runtime/proxy-openai.js.map +1 -1
- package/dist/llm-gateway-runtime/sticky.d.ts +15 -6
- package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/sticky.js +104 -29
- package/dist/llm-gateway-runtime/sticky.js.map +1 -1
- package/dist/llm-mesh.d.ts +31 -7
- package/dist/llm-mesh.d.ts.map +1 -1
- package/dist/llm-mesh.js +104 -73
- package/dist/llm-mesh.js.map +1 -1
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +4 -3
- package/dist/migrate.js.map +1 -1
- package/dist/native-terminal/client.d.ts +23 -0
- package/dist/native-terminal/client.d.ts.map +1 -0
- package/dist/native-terminal/client.js +203 -0
- package/dist/native-terminal/client.js.map +1 -0
- package/dist/native-terminal/host.d.ts +78 -0
- package/dist/native-terminal/host.d.ts.map +1 -0
- package/dist/native-terminal/host.js +275 -0
- package/dist/native-terminal/host.js.map +1 -0
- package/dist/native-terminal/process.d.ts +11 -0
- package/dist/native-terminal/process.d.ts.map +1 -0
- package/dist/native-terminal/process.js +137 -0
- package/dist/native-terminal/process.js.map +1 -0
- package/dist/native-terminal/protocol.d.ts +57 -0
- package/dist/native-terminal/protocol.d.ts.map +1 -0
- package/dist/native-terminal/protocol.js +102 -0
- package/dist/native-terminal/protocol.js.map +1 -0
- package/dist/native-terminal/replay-buffer.d.ts +26 -0
- package/dist/native-terminal/replay-buffer.d.ts.map +1 -0
- package/dist/native-terminal/replay-buffer.js +84 -0
- package/dist/native-terminal/replay-buffer.js.map +1 -0
- package/dist/native-terminal/server.d.ts +13 -0
- package/dist/native-terminal/server.d.ts.map +1 -0
- package/dist/native-terminal/server.js +555 -0
- package/dist/native-terminal/server.js.map +1 -0
- package/dist/native-terminal/socket-path.d.ts +8 -0
- package/dist/native-terminal/socket-path.d.ts.map +1 -0
- package/dist/native-terminal/socket-path.js +41 -0
- package/dist/native-terminal/socket-path.js.map +1 -0
- package/dist/native-terminal/supervisor.d.ts +26 -0
- package/dist/native-terminal/supervisor.d.ts.map +1 -0
- package/dist/native-terminal/supervisor.js +273 -0
- package/dist/native-terminal/supervisor.js.map +1 -0
- package/dist/pty.d.ts +1 -0
- package/dist/pty.d.ts.map +1 -1
- package/dist/pty.js +78 -2
- package/dist/pty.js.map +1 -1
- package/dist/restore.d.ts +15 -14
- package/dist/restore.d.ts.map +1 -1
- package/dist/restore.js +63 -44
- package/dist/restore.js.map +1 -1
- package/dist/tmux.js +1 -1
- package/dist/tmux.js.map +1 -1
- package/package.json +2 -1
- package/dist/llm-gateway-runtime/proxy-gemini.d.ts +0 -82
- package/dist/llm-gateway-runtime/proxy-gemini.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/proxy-gemini.js +0 -523
- package/dist/llm-gateway-runtime/proxy-gemini.js.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { NativeTerminalControllerLease, NativeTerminalControllerState, NativeTerminalCreateOptions, NativeTerminalObserverAttachment, NativeTerminalReplay, NativeTerminalSessionState } from "./host.js";
|
|
2
|
+
import { type NativeTerminalPing, type NativeTerminalStopSignal } from "./protocol.js";
|
|
3
|
+
export declare class NativeTerminalClient {
|
|
4
|
+
#private;
|
|
5
|
+
private constructor();
|
|
6
|
+
static connect(socketPath: string, options?: {
|
|
7
|
+
connectTimeoutMs?: number;
|
|
8
|
+
requestTimeoutMs?: number;
|
|
9
|
+
}): Promise<NativeTerminalClient>;
|
|
10
|
+
ping(timeoutMs?: number): Promise<NativeTerminalPing>;
|
|
11
|
+
create(options: NativeTerminalCreateOptions): Promise<NativeTerminalSessionState>;
|
|
12
|
+
list(): Promise<ReadonlyArray<NativeTerminalSessionState>>;
|
|
13
|
+
state(id: string): Promise<NativeTerminalSessionState>;
|
|
14
|
+
readOutput(id: string, afterSeq: number): Promise<NativeTerminalReplay>;
|
|
15
|
+
attachObserver(id: string): Promise<NativeTerminalObserverAttachment>;
|
|
16
|
+
acquireController(id: string, controllerId: string): Promise<NativeTerminalControllerLease>;
|
|
17
|
+
releaseController(lease: NativeTerminalControllerLease): Promise<NativeTerminalControllerState>;
|
|
18
|
+
write(lease: NativeTerminalControllerLease, data: string): Promise<void>;
|
|
19
|
+
resize(lease: NativeTerminalControllerLease, cols: number, rows: number): Promise<void>;
|
|
20
|
+
stop(lease: NativeTerminalControllerLease, signal?: NativeTerminalStopSignal): Promise<NativeTerminalSessionState>;
|
|
21
|
+
close(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/native-terminal/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAML,KAAK,kBAAkB,EAEvB,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAYvB,qBAAa,oBAAoB;;IAO/B,OAAO;WAUM,OAAO,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACtB,GACL,OAAO,CAAC,oBAAoB,CAAC;IAyDhC,IAAI,CAAC,SAAS,SAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIrE,MAAM,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAIjF,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;IAI1D,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAItD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIvE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAIrE,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI3F,iBAAiB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAIzF,KAAK,CAAC,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE,MAAM,CAAC,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,IAAI,CACF,KAAK,EAAE,6BAA6B,EACpC,MAAM,CAAC,EAAE,wBAAwB,GAChC,OAAO,CAAC,0BAA0B,CAAC;IAOtC,KAAK,IAAI,IAAI;CAkGd"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createConnection } from "node:net";
|
|
3
|
+
import { NATIVE_TERMINAL_DEFAULT_REQUEST_TIMEOUT_MS, NATIVE_TERMINAL_MAX_FRAME_BYTES, NATIVE_TERMINAL_PROTOCOL_VERSION, NativeTerminalRemoteError, parseNativeTerminalResponse, } from "./protocol.js";
|
|
4
|
+
import { inspectPrivateNativeTerminalSocket, sameNativeTerminalSocket, } from "./socket-path.js";
|
|
5
|
+
export class NativeTerminalClient {
|
|
6
|
+
#socket;
|
|
7
|
+
#requestTimeoutMs;
|
|
8
|
+
#pending = new Map();
|
|
9
|
+
#buffer = "";
|
|
10
|
+
#closed = false;
|
|
11
|
+
constructor(socket, requestTimeoutMs) {
|
|
12
|
+
this.#socket = socket;
|
|
13
|
+
this.#requestTimeoutMs = requestTimeoutMs;
|
|
14
|
+
socket.setNoDelay(true);
|
|
15
|
+
socket.setEncoding("utf8");
|
|
16
|
+
socket.on("data", (chunk) => this.#onData(chunk));
|
|
17
|
+
socket.on("error", (error) => this.#fail(error));
|
|
18
|
+
socket.on("close", () => this.#fail(new Error("terminal host connection closed")));
|
|
19
|
+
}
|
|
20
|
+
static async connect(socketPath, options = {}) {
|
|
21
|
+
const expected = await inspectPrivateNativeTerminalSocket(socketPath);
|
|
22
|
+
const connectTimeoutMs = options.connectTimeoutMs ?? 1_000;
|
|
23
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? NATIVE_TERMINAL_DEFAULT_REQUEST_TIMEOUT_MS;
|
|
24
|
+
for (const [label, value] of [
|
|
25
|
+
["connectTimeoutMs", connectTimeoutMs],
|
|
26
|
+
["requestTimeoutMs", requestTimeoutMs],
|
|
27
|
+
]) {
|
|
28
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
29
|
+
throw new RangeError(`${label} must be a positive safe integer`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
const socket = createConnection(socketPath);
|
|
34
|
+
let settled = false;
|
|
35
|
+
const timeout = setTimeout(() => {
|
|
36
|
+
if (settled)
|
|
37
|
+
return;
|
|
38
|
+
settled = true;
|
|
39
|
+
socket.destroy();
|
|
40
|
+
reject(new Error("terminal host connection timed out"));
|
|
41
|
+
}, connectTimeoutMs);
|
|
42
|
+
timeout.unref();
|
|
43
|
+
const onError = (error) => {
|
|
44
|
+
if (settled)
|
|
45
|
+
return;
|
|
46
|
+
settled = true;
|
|
47
|
+
clearTimeout(timeout);
|
|
48
|
+
socket.removeListener("connect", onConnect);
|
|
49
|
+
socket.destroy();
|
|
50
|
+
reject(error);
|
|
51
|
+
};
|
|
52
|
+
const onConnect = () => {
|
|
53
|
+
void inspectPrivateNativeTerminalSocket(socketPath).then((connected) => {
|
|
54
|
+
if (settled)
|
|
55
|
+
return;
|
|
56
|
+
if (!sameNativeTerminalSocket(expected, connected)) {
|
|
57
|
+
settled = true;
|
|
58
|
+
clearTimeout(timeout);
|
|
59
|
+
socket.destroy();
|
|
60
|
+
reject(new Error("terminal host socket changed while connecting"));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
settled = true;
|
|
64
|
+
clearTimeout(timeout);
|
|
65
|
+
socket.removeListener("error", onError);
|
|
66
|
+
resolve(new NativeTerminalClient(socket, requestTimeoutMs));
|
|
67
|
+
}, onError);
|
|
68
|
+
};
|
|
69
|
+
socket.once("error", onError);
|
|
70
|
+
socket.once("connect", onConnect);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
ping(timeoutMs = this.#requestTimeoutMs) {
|
|
74
|
+
return this.#request("ping", undefined, timeoutMs);
|
|
75
|
+
}
|
|
76
|
+
create(options) {
|
|
77
|
+
return this.#request("create", options);
|
|
78
|
+
}
|
|
79
|
+
list() {
|
|
80
|
+
return this.#request("list");
|
|
81
|
+
}
|
|
82
|
+
state(id) {
|
|
83
|
+
return this.#request("state", { id });
|
|
84
|
+
}
|
|
85
|
+
readOutput(id, afterSeq) {
|
|
86
|
+
return this.#request("read-output", { id, afterSeq });
|
|
87
|
+
}
|
|
88
|
+
attachObserver(id) {
|
|
89
|
+
return this.#request("attach-observer", { id });
|
|
90
|
+
}
|
|
91
|
+
acquireController(id, controllerId) {
|
|
92
|
+
return this.#request("acquire-controller", { id, controllerId });
|
|
93
|
+
}
|
|
94
|
+
releaseController(lease) {
|
|
95
|
+
return this.#request("release-controller", { lease });
|
|
96
|
+
}
|
|
97
|
+
async write(lease, data) {
|
|
98
|
+
await this.#request("write", { lease, data });
|
|
99
|
+
}
|
|
100
|
+
async resize(lease, cols, rows) {
|
|
101
|
+
await this.#request("resize", { lease, cols, rows });
|
|
102
|
+
}
|
|
103
|
+
stop(lease, signal) {
|
|
104
|
+
return this.#request("stop", signal === undefined ? { lease } : { lease, signal });
|
|
105
|
+
}
|
|
106
|
+
close() {
|
|
107
|
+
if (this.#closed)
|
|
108
|
+
return;
|
|
109
|
+
this.#closed = true;
|
|
110
|
+
this.#socket.destroy();
|
|
111
|
+
this.#fail(new Error("terminal host client closed"));
|
|
112
|
+
}
|
|
113
|
+
#request(operation, params, timeoutMs = this.#requestTimeoutMs) {
|
|
114
|
+
if (this.#closed)
|
|
115
|
+
return Promise.reject(new Error("terminal host client is closed"));
|
|
116
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {
|
|
117
|
+
return Promise.reject(new RangeError("terminal host request timeout must be a positive safe integer"));
|
|
118
|
+
}
|
|
119
|
+
const id = randomUUID();
|
|
120
|
+
const request = params === undefined
|
|
121
|
+
? { version: NATIVE_TERMINAL_PROTOCOL_VERSION, id, operation }
|
|
122
|
+
: { version: NATIVE_TERMINAL_PROTOCOL_VERSION, id, operation, params };
|
|
123
|
+
const frame = `${JSON.stringify(request)}\n`;
|
|
124
|
+
if (Buffer.byteLength(frame) > NATIVE_TERMINAL_MAX_FRAME_BYTES) {
|
|
125
|
+
return Promise.reject(new RangeError("terminal host request exceeds the frame limit"));
|
|
126
|
+
}
|
|
127
|
+
return new Promise((resolve, reject) => {
|
|
128
|
+
const timeout = setTimeout(() => {
|
|
129
|
+
if (!this.#pending.delete(id))
|
|
130
|
+
return;
|
|
131
|
+
reject(new Error(`terminal host ${operation} request timed out after ${timeoutMs}ms`));
|
|
132
|
+
}, timeoutMs);
|
|
133
|
+
timeout.unref();
|
|
134
|
+
this.#pending.set(id, { resolve, reject, timeout });
|
|
135
|
+
this.#socket.write(frame, (error) => {
|
|
136
|
+
if (!error)
|
|
137
|
+
return;
|
|
138
|
+
const pending = this.#pending.get(id);
|
|
139
|
+
if (!pending)
|
|
140
|
+
return;
|
|
141
|
+
this.#pending.delete(id);
|
|
142
|
+
clearTimeout(pending.timeout);
|
|
143
|
+
reject(error);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
#onData(chunk) {
|
|
148
|
+
this.#buffer += chunk;
|
|
149
|
+
for (;;) {
|
|
150
|
+
const newline = this.#buffer.indexOf("\n");
|
|
151
|
+
if (newline < 0)
|
|
152
|
+
break;
|
|
153
|
+
const line = this.#buffer.slice(0, newline);
|
|
154
|
+
this.#buffer = this.#buffer.slice(newline + 1);
|
|
155
|
+
if (line.length === 0)
|
|
156
|
+
continue;
|
|
157
|
+
if (Buffer.byteLength(line) > NATIVE_TERMINAL_MAX_FRAME_BYTES) {
|
|
158
|
+
this.#socket.destroy(new Error("terminal host response exceeds the frame limit"));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
let parsed;
|
|
162
|
+
try {
|
|
163
|
+
parsed = JSON.parse(line);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
this.#socket.destroy(new Error("terminal host returned invalid JSON"));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
let response;
|
|
170
|
+
try {
|
|
171
|
+
response = parseNativeTerminalResponse(parsed);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
175
|
+
this.#fail(new Error(`terminal host returned an invalid response: ${detail}`));
|
|
176
|
+
this.#socket.destroy();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const pending = this.#pending.get(response.id);
|
|
180
|
+
if (!pending)
|
|
181
|
+
continue;
|
|
182
|
+
this.#pending.delete(response.id);
|
|
183
|
+
clearTimeout(pending.timeout);
|
|
184
|
+
if (response.ok)
|
|
185
|
+
pending.resolve(response.result);
|
|
186
|
+
else
|
|
187
|
+
pending.reject(new NativeTerminalRemoteError(response.error));
|
|
188
|
+
}
|
|
189
|
+
if (Buffer.byteLength(this.#buffer) > NATIVE_TERMINAL_MAX_FRAME_BYTES) {
|
|
190
|
+
this.#socket.destroy(new Error("terminal host response exceeds the frame limit"));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
#fail(error) {
|
|
194
|
+
if (!this.#closed)
|
|
195
|
+
this.#closed = true;
|
|
196
|
+
for (const pending of this.#pending.values()) {
|
|
197
|
+
clearTimeout(pending.timeout);
|
|
198
|
+
pending.reject(error);
|
|
199
|
+
}
|
|
200
|
+
this.#pending.clear();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/native-terminal/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { PtySpawner } from "../pty.js";
|
|
2
|
+
import { type TerminalOutputChunk, type TerminalReplayGap } from "./replay-buffer.js";
|
|
3
|
+
import { type NativeTerminalStopSignal } from "./protocol.js";
|
|
4
|
+
export type NativeTerminalExit = Readonly<{
|
|
5
|
+
exitCode: number;
|
|
6
|
+
signal?: number;
|
|
7
|
+
}>;
|
|
8
|
+
export type NativeTerminalSessionStatus = "running" | "stopping" | "exited";
|
|
9
|
+
export type NativeTerminalSessionState = Readonly<{
|
|
10
|
+
id: string;
|
|
11
|
+
generation: string;
|
|
12
|
+
incarnation: string;
|
|
13
|
+
pid: number;
|
|
14
|
+
status: NativeTerminalSessionStatus;
|
|
15
|
+
latestSeq: number;
|
|
16
|
+
exit: NativeTerminalExit | null;
|
|
17
|
+
stopSignal: string | null;
|
|
18
|
+
}>;
|
|
19
|
+
export type NativeTerminalReplay = Readonly<{
|
|
20
|
+
generation: string;
|
|
21
|
+
incarnation: string;
|
|
22
|
+
chunks: ReadonlyArray<TerminalOutputChunk>;
|
|
23
|
+
gap: TerminalReplayGap | null;
|
|
24
|
+
latestSeq: number;
|
|
25
|
+
}>;
|
|
26
|
+
export type NativeTerminalObserverAttachment = Readonly<{
|
|
27
|
+
role: "observer";
|
|
28
|
+
id: string;
|
|
29
|
+
generation: string;
|
|
30
|
+
incarnation: string;
|
|
31
|
+
controllerEpoch: number;
|
|
32
|
+
}>;
|
|
33
|
+
export type NativeTerminalControllerLease = Readonly<{
|
|
34
|
+
role: "controller";
|
|
35
|
+
id: string;
|
|
36
|
+
generation: string;
|
|
37
|
+
incarnation: string;
|
|
38
|
+
controllerId: string;
|
|
39
|
+
epoch: number;
|
|
40
|
+
}>;
|
|
41
|
+
export type NativeTerminalControllerState = Readonly<{
|
|
42
|
+
id: string;
|
|
43
|
+
generation: string;
|
|
44
|
+
incarnation: string;
|
|
45
|
+
controllerEpoch: number;
|
|
46
|
+
}>;
|
|
47
|
+
export type NativeTerminalCreateOptions = Readonly<{
|
|
48
|
+
id: string;
|
|
49
|
+
command: string;
|
|
50
|
+
args: ReadonlyArray<string>;
|
|
51
|
+
cwd: string;
|
|
52
|
+
env: Readonly<Record<string, string>>;
|
|
53
|
+
cols: number;
|
|
54
|
+
rows: number;
|
|
55
|
+
}>;
|
|
56
|
+
export declare class NativeTerminalHost {
|
|
57
|
+
#private;
|
|
58
|
+
constructor(options: {
|
|
59
|
+
generation: string;
|
|
60
|
+
replayBytesPerSession: number;
|
|
61
|
+
maxSessions?: number;
|
|
62
|
+
spawner: PtySpawner;
|
|
63
|
+
});
|
|
64
|
+
get generation(): string;
|
|
65
|
+
create(options: NativeTerminalCreateOptions): NativeTerminalSessionState;
|
|
66
|
+
list(): ReadonlyArray<NativeTerminalSessionState>;
|
|
67
|
+
state(id: string): NativeTerminalSessionState;
|
|
68
|
+
readOutput(id: string, afterSeq: number): NativeTerminalReplay;
|
|
69
|
+
attachObserver(id: string): NativeTerminalObserverAttachment;
|
|
70
|
+
acquireController(id: string, controllerId: string): NativeTerminalControllerLease;
|
|
71
|
+
releaseController(lease: NativeTerminalControllerLease): NativeTerminalControllerState;
|
|
72
|
+
write(lease: NativeTerminalControllerLease, data: string): void;
|
|
73
|
+
resize(lease: NativeTerminalControllerLease, cols: number, rows: number): void;
|
|
74
|
+
stop(lease: NativeTerminalControllerLease, signal?: NativeTerminalStopSignal): NativeTerminalSessionState;
|
|
75
|
+
stopAll(signal?: NativeTerminalStopSignal): ReadonlyArray<NativeTerminalSessionState>;
|
|
76
|
+
forceStopAll(signal?: NativeTerminalStopSignal): ReadonlyArray<NativeTerminalSessionState>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/native-terminal/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { TerminalReplayBuffer, } from "./replay-buffer.js";
|
|
3
|
+
import { NATIVE_TERMINAL_DEFAULT_MAX_SESSIONS, NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS, NATIVE_TERMINAL_MAX_SESSIONS, } from "./protocol.js";
|
|
4
|
+
export class NativeTerminalHost {
|
|
5
|
+
#generation;
|
|
6
|
+
#replayBytesPerSession;
|
|
7
|
+
#maxSessions;
|
|
8
|
+
#spawner;
|
|
9
|
+
#sessions = new Map();
|
|
10
|
+
constructor(options) {
|
|
11
|
+
if (options.generation.trim().length === 0 ||
|
|
12
|
+
options.generation.length > NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS) {
|
|
13
|
+
throw new RangeError(`terminal host generation must contain 1-${NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS} characters`);
|
|
14
|
+
}
|
|
15
|
+
// Validate the budget once, before the first process is spawned.
|
|
16
|
+
new TerminalReplayBuffer(options.replayBytesPerSession);
|
|
17
|
+
const maxSessions = options.maxSessions ?? NATIVE_TERMINAL_DEFAULT_MAX_SESSIONS;
|
|
18
|
+
if (!Number.isSafeInteger(maxSessions) ||
|
|
19
|
+
maxSessions <= 0 ||
|
|
20
|
+
maxSessions > NATIVE_TERMINAL_MAX_SESSIONS) {
|
|
21
|
+
throw new RangeError(`maxSessions must be between 1 and ${NATIVE_TERMINAL_MAX_SESSIONS}`);
|
|
22
|
+
}
|
|
23
|
+
this.#generation = options.generation;
|
|
24
|
+
this.#replayBytesPerSession = options.replayBytesPerSession;
|
|
25
|
+
this.#maxSessions = maxSessions;
|
|
26
|
+
this.#spawner = options.spawner;
|
|
27
|
+
}
|
|
28
|
+
get generation() {
|
|
29
|
+
return this.#generation;
|
|
30
|
+
}
|
|
31
|
+
create(options) {
|
|
32
|
+
if (options.id.trim().length === 0 ||
|
|
33
|
+
options.id.length > NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS) {
|
|
34
|
+
throw new RangeError(`terminal session id must contain 1-${NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS} characters`);
|
|
35
|
+
}
|
|
36
|
+
const existing = this.#sessions.get(options.id);
|
|
37
|
+
if (existing?.status === "exited") {
|
|
38
|
+
this.#forget(existing);
|
|
39
|
+
}
|
|
40
|
+
else if (existing) {
|
|
41
|
+
throw new Error(`terminal session already exists: ${options.id}`);
|
|
42
|
+
}
|
|
43
|
+
this.#reapExitedUntilBelowLimit();
|
|
44
|
+
if (this.#sessions.size >= this.#maxSessions) {
|
|
45
|
+
throw new Error(`terminal host session limit reached: ${this.#maxSessions}`);
|
|
46
|
+
}
|
|
47
|
+
const record = {
|
|
48
|
+
id: options.id,
|
|
49
|
+
incarnation: randomUUID(),
|
|
50
|
+
pty: this.#spawner(options),
|
|
51
|
+
replay: new TerminalReplayBuffer(this.#replayBytesPerSession),
|
|
52
|
+
status: "running",
|
|
53
|
+
exit: null,
|
|
54
|
+
stopSignal: null,
|
|
55
|
+
controllerId: null,
|
|
56
|
+
controllerEpoch: 0,
|
|
57
|
+
};
|
|
58
|
+
this.#sessions.set(record.id, record);
|
|
59
|
+
record.dataSubscription = record.pty.onData((data) => {
|
|
60
|
+
if (record.exit !== null || data.length === 0)
|
|
61
|
+
return;
|
|
62
|
+
record.replay.append(data);
|
|
63
|
+
});
|
|
64
|
+
record.exitSubscription = record.pty.onExit((event) => {
|
|
65
|
+
if (record.exit !== null)
|
|
66
|
+
return;
|
|
67
|
+
const exit = {
|
|
68
|
+
exitCode: event.exitCode,
|
|
69
|
+
};
|
|
70
|
+
if (event.signal !== undefined)
|
|
71
|
+
exit.signal = event.signal;
|
|
72
|
+
record.exit = Object.freeze(exit);
|
|
73
|
+
record.status = "exited";
|
|
74
|
+
this.#invalidateController(record);
|
|
75
|
+
record.dataSubscription?.dispose();
|
|
76
|
+
record.exitSubscription?.dispose();
|
|
77
|
+
});
|
|
78
|
+
return this.#snapshot(record);
|
|
79
|
+
}
|
|
80
|
+
list() {
|
|
81
|
+
return Object.freeze([...this.#sessions.values()].map((record) => this.#snapshot(record)));
|
|
82
|
+
}
|
|
83
|
+
state(id) {
|
|
84
|
+
return this.#snapshot(this.#requireSession(id));
|
|
85
|
+
}
|
|
86
|
+
readOutput(id, afterSeq) {
|
|
87
|
+
const record = this.#requireSession(id);
|
|
88
|
+
const replay = record.replay.readAfter(afterSeq);
|
|
89
|
+
return Object.freeze({
|
|
90
|
+
generation: this.#generation,
|
|
91
|
+
incarnation: record.incarnation,
|
|
92
|
+
...replay,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
attachObserver(id) {
|
|
96
|
+
const record = this.#requireSession(id);
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
role: "observer",
|
|
99
|
+
id,
|
|
100
|
+
generation: this.#generation,
|
|
101
|
+
incarnation: record.incarnation,
|
|
102
|
+
controllerEpoch: record.controllerEpoch,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
acquireController(id, controllerId) {
|
|
106
|
+
const record = this.#requireControllableSession(id);
|
|
107
|
+
if (controllerId.trim().length === 0 ||
|
|
108
|
+
controllerId.length > NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS) {
|
|
109
|
+
throw new RangeError(`terminal controller id must contain 1-${NATIVE_TERMINAL_MAX_IDENTIFIER_CHARS} characters`);
|
|
110
|
+
}
|
|
111
|
+
if (record.controllerId !== null) {
|
|
112
|
+
throw new Error(`terminal session already has a controller: ${id}`);
|
|
113
|
+
}
|
|
114
|
+
record.controllerEpoch += 1;
|
|
115
|
+
record.controllerId = controllerId;
|
|
116
|
+
return Object.freeze({
|
|
117
|
+
role: "controller",
|
|
118
|
+
id,
|
|
119
|
+
generation: this.#generation,
|
|
120
|
+
incarnation: record.incarnation,
|
|
121
|
+
controllerId,
|
|
122
|
+
epoch: record.controllerEpoch,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
releaseController(lease) {
|
|
126
|
+
const record = this.#requireMatchingController(lease);
|
|
127
|
+
this.#invalidateController(record);
|
|
128
|
+
return Object.freeze({
|
|
129
|
+
id: record.id,
|
|
130
|
+
generation: this.#generation,
|
|
131
|
+
incarnation: record.incarnation,
|
|
132
|
+
controllerEpoch: record.controllerEpoch,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
write(lease, data) {
|
|
136
|
+
if (data.length === 0) {
|
|
137
|
+
throw new RangeError("terminal input must not be empty");
|
|
138
|
+
}
|
|
139
|
+
this.#requireController(lease).pty.write(data);
|
|
140
|
+
}
|
|
141
|
+
resize(lease, cols, rows) {
|
|
142
|
+
if (!Number.isSafeInteger(cols) ||
|
|
143
|
+
cols <= 0 ||
|
|
144
|
+
!Number.isSafeInteger(rows) ||
|
|
145
|
+
rows <= 0) {
|
|
146
|
+
throw new RangeError("terminal dimensions must be positive safe integers");
|
|
147
|
+
}
|
|
148
|
+
this.#requireController(lease).pty.resize(cols, rows);
|
|
149
|
+
}
|
|
150
|
+
stop(lease, signal = "SIGTERM") {
|
|
151
|
+
const record = this.#requireMatchingController(lease);
|
|
152
|
+
const previousStatus = record.status;
|
|
153
|
+
const previousSignal = record.stopSignal;
|
|
154
|
+
record.status = "stopping";
|
|
155
|
+
record.stopSignal = signal;
|
|
156
|
+
try {
|
|
157
|
+
record.pty.kill(signal);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
record.status = previousStatus;
|
|
161
|
+
record.stopSignal = previousSignal;
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
return this.#snapshot(record);
|
|
165
|
+
}
|
|
166
|
+
stopAll(signal = "SIGTERM") {
|
|
167
|
+
for (const record of this.#sessions.values()) {
|
|
168
|
+
if (record.status !== "running")
|
|
169
|
+
continue;
|
|
170
|
+
record.status = "stopping";
|
|
171
|
+
record.stopSignal = signal;
|
|
172
|
+
this.#invalidateController(record);
|
|
173
|
+
try {
|
|
174
|
+
record.pty.kill(signal);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
record.status = "running";
|
|
178
|
+
record.stopSignal = null;
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return this.list();
|
|
183
|
+
}
|
|
184
|
+
forceStopAll(signal = "SIGKILL") {
|
|
185
|
+
const errors = [];
|
|
186
|
+
for (const record of this.#sessions.values()) {
|
|
187
|
+
if (record.status === "exited")
|
|
188
|
+
continue;
|
|
189
|
+
if (record.status === "running") {
|
|
190
|
+
record.status = "stopping";
|
|
191
|
+
this.#invalidateController(record);
|
|
192
|
+
}
|
|
193
|
+
record.stopSignal = signal;
|
|
194
|
+
try {
|
|
195
|
+
record.pty.kill(signal);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
errors.push(error);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (errors.length > 0) {
|
|
202
|
+
throw new AggregateError(errors, "failed to force-stop one or more terminal sessions");
|
|
203
|
+
}
|
|
204
|
+
return this.list();
|
|
205
|
+
}
|
|
206
|
+
#requireSession(id) {
|
|
207
|
+
const record = this.#sessions.get(id);
|
|
208
|
+
if (!record)
|
|
209
|
+
throw new Error(`unknown terminal session: ${id}`);
|
|
210
|
+
return record;
|
|
211
|
+
}
|
|
212
|
+
#requireControllableSession(id) {
|
|
213
|
+
const record = this.#requireSession(id);
|
|
214
|
+
if (record.status === "exited") {
|
|
215
|
+
throw new Error(`terminal session is already exited: ${id}`);
|
|
216
|
+
}
|
|
217
|
+
return record;
|
|
218
|
+
}
|
|
219
|
+
#requireController(lease) {
|
|
220
|
+
const record = this.#requireMatchingController(lease);
|
|
221
|
+
if (record.status !== "running") {
|
|
222
|
+
throw new Error("stale terminal controller lease");
|
|
223
|
+
}
|
|
224
|
+
return record;
|
|
225
|
+
}
|
|
226
|
+
#requireMatchingController(lease) {
|
|
227
|
+
const record = this.#sessions.get(lease.id);
|
|
228
|
+
if (lease.generation !== this.#generation ||
|
|
229
|
+
!record ||
|
|
230
|
+
lease.incarnation !== record.incarnation ||
|
|
231
|
+
record.status === "exited" ||
|
|
232
|
+
record.controllerId !== lease.controllerId ||
|
|
233
|
+
record.controllerEpoch !== lease.epoch) {
|
|
234
|
+
throw new Error("stale terminal controller lease");
|
|
235
|
+
}
|
|
236
|
+
return record;
|
|
237
|
+
}
|
|
238
|
+
#reapExitedUntilBelowLimit() {
|
|
239
|
+
if (this.#sessions.size < this.#maxSessions)
|
|
240
|
+
return;
|
|
241
|
+
for (const record of this.#sessions.values()) {
|
|
242
|
+
if (record.status !== "exited")
|
|
243
|
+
continue;
|
|
244
|
+
this.#forget(record);
|
|
245
|
+
if (this.#sessions.size < this.#maxSessions)
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
#forget(record) {
|
|
250
|
+
record.dataSubscription?.dispose();
|
|
251
|
+
record.exitSubscription?.dispose();
|
|
252
|
+
delete record.dataSubscription;
|
|
253
|
+
delete record.exitSubscription;
|
|
254
|
+
this.#sessions.delete(record.id);
|
|
255
|
+
}
|
|
256
|
+
#invalidateController(record) {
|
|
257
|
+
if (record.controllerId === null)
|
|
258
|
+
return;
|
|
259
|
+
record.controllerId = null;
|
|
260
|
+
record.controllerEpoch += 1;
|
|
261
|
+
}
|
|
262
|
+
#snapshot(record) {
|
|
263
|
+
return Object.freeze({
|
|
264
|
+
id: record.id,
|
|
265
|
+
generation: this.#generation,
|
|
266
|
+
incarnation: record.incarnation,
|
|
267
|
+
pid: record.pty.pid,
|
|
268
|
+
status: record.status,
|
|
269
|
+
latestSeq: record.replay.latestSeq,
|
|
270
|
+
exit: record.exit,
|
|
271
|
+
stopSignal: record.stopSignal,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/native-terminal/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type ProcessOptions = {
|
|
3
|
+
socketPath: string;
|
|
4
|
+
generation: string;
|
|
5
|
+
replayBytesPerSession: number;
|
|
6
|
+
maxSessions: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function parseNativeTerminalHostArgs(argv: ReadonlyArray<string>): ProcessOptions;
|
|
9
|
+
export declare function runNativeTerminalHostProcess(argv: ReadonlyArray<string>): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/native-terminal/process.ts"],"names":[],"mappings":";AAYA,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA2CF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,cAAc,CAiCvF;AAED,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD7F"}
|