@sentropic/h2a-runtime 0.91.0 → 0.92.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.
Files changed (94) hide show
  1. package/dist/config.d.ts +2 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +16 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +4 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +79 -58
  8. package/dist/index.js.map +1 -1
  9. package/dist/llm-gateway-runtime/index.d.ts +6 -0
  10. package/dist/llm-gateway-runtime/index.d.ts.map +1 -1
  11. package/dist/llm-gateway-runtime/index.js +134 -60
  12. package/dist/llm-gateway-runtime/index.js.map +1 -1
  13. package/dist/llm-gateway-runtime/session-ledger.d.ts +38 -55
  14. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -1
  15. package/dist/llm-gateway-runtime/session-ledger.js +102 -250
  16. package/dist/llm-gateway-runtime/session-ledger.js.map +1 -1
  17. package/dist/llm-gateway-runtime/sticky.d.ts +25 -52
  18. package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -1
  19. package/dist/llm-gateway-runtime/sticky.js +36 -605
  20. package/dist/llm-gateway-runtime/sticky.js.map +1 -1
  21. package/dist/llm-mesh.d.ts +19 -72
  22. package/dist/llm-mesh.d.ts.map +1 -1
  23. package/dist/llm-mesh.js +42 -399
  24. package/dist/llm-mesh.js.map +1 -1
  25. package/dist/llm-routing-config.d.ts +28 -0
  26. package/dist/llm-routing-config.d.ts.map +1 -0
  27. package/dist/llm-routing-config.js +100 -0
  28. package/dist/llm-routing-config.js.map +1 -0
  29. package/dist/native-terminal/client.d.ts +23 -0
  30. package/dist/native-terminal/client.d.ts.map +1 -0
  31. package/dist/native-terminal/client.js +203 -0
  32. package/dist/native-terminal/client.js.map +1 -0
  33. package/dist/native-terminal/host.d.ts +78 -0
  34. package/dist/native-terminal/host.d.ts.map +1 -0
  35. package/dist/native-terminal/host.js +275 -0
  36. package/dist/native-terminal/host.js.map +1 -0
  37. package/dist/native-terminal/process.d.ts +11 -0
  38. package/dist/native-terminal/process.d.ts.map +1 -0
  39. package/dist/native-terminal/process.js +137 -0
  40. package/dist/native-terminal/process.js.map +1 -0
  41. package/dist/native-terminal/protocol.d.ts +57 -0
  42. package/dist/native-terminal/protocol.d.ts.map +1 -0
  43. package/dist/native-terminal/protocol.js +102 -0
  44. package/dist/native-terminal/protocol.js.map +1 -0
  45. package/dist/native-terminal/replay-buffer.d.ts +26 -0
  46. package/dist/native-terminal/replay-buffer.d.ts.map +1 -0
  47. package/dist/native-terminal/replay-buffer.js +84 -0
  48. package/dist/native-terminal/replay-buffer.js.map +1 -0
  49. package/dist/native-terminal/server.d.ts +13 -0
  50. package/dist/native-terminal/server.d.ts.map +1 -0
  51. package/dist/native-terminal/server.js +555 -0
  52. package/dist/native-terminal/server.js.map +1 -0
  53. package/dist/native-terminal/socket-path.d.ts +8 -0
  54. package/dist/native-terminal/socket-path.d.ts.map +1 -0
  55. package/dist/native-terminal/socket-path.js +41 -0
  56. package/dist/native-terminal/socket-path.js.map +1 -0
  57. package/dist/native-terminal/supervisor.d.ts +26 -0
  58. package/dist/native-terminal/supervisor.d.ts.map +1 -0
  59. package/dist/native-terminal/supervisor.js +273 -0
  60. package/dist/native-terminal/supervisor.js.map +1 -0
  61. package/dist/pty.d.ts +1 -0
  62. package/dist/pty.d.ts.map +1 -1
  63. package/dist/pty.js +78 -2
  64. package/dist/pty.js.map +1 -1
  65. package/dist/registry.d.ts +7 -0
  66. package/dist/registry.d.ts.map +1 -1
  67. package/dist/registry.js +37 -1
  68. package/dist/registry.js.map +1 -1
  69. package/dist/status-projection.d.ts.map +1 -1
  70. package/dist/tmux.d.ts +7 -5
  71. package/dist/tmux.d.ts.map +1 -1
  72. package/dist/tmux.js +33 -7
  73. package/dist/tmux.js.map +1 -1
  74. package/package.json +3 -3
  75. package/dist/llm-gateway-runtime/accounts.d.ts +0 -62
  76. package/dist/llm-gateway-runtime/accounts.d.ts.map +0 -1
  77. package/dist/llm-gateway-runtime/accounts.js +0 -323
  78. package/dist/llm-gateway-runtime/accounts.js.map +0 -1
  79. package/dist/llm-gateway-runtime/model-catalog.d.ts +0 -44
  80. package/dist/llm-gateway-runtime/model-catalog.d.ts.map +0 -1
  81. package/dist/llm-gateway-runtime/model-catalog.js +0 -191
  82. package/dist/llm-gateway-runtime/model-catalog.js.map +0 -1
  83. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +0 -3
  84. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +0 -1
  85. package/dist/llm-gateway-runtime/proxy-anthropic.js +0 -318
  86. package/dist/llm-gateway-runtime/proxy-anthropic.js.map +0 -1
  87. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts +0 -11
  88. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts.map +0 -1
  89. package/dist/llm-gateway-runtime/proxy-cloud-code.js +0 -215
  90. package/dist/llm-gateway-runtime/proxy-cloud-code.js.map +0 -1
  91. package/dist/llm-gateway-runtime/proxy-openai.d.ts +0 -118
  92. package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +0 -1
  93. package/dist/llm-gateway-runtime/proxy-openai.js +0 -1305
  94. package/dist/llm-gateway-runtime/proxy-openai.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ import { InMemoryRoutePolicyProfiles, type ModelEquivalenceCouncil, type RoutePolicy, type RoutePolicyProfile, type RouteSelector } from "@sentropic/llm-mesh";
2
+ export interface LlmMeshRoutingConfig {
3
+ /** Host-level public policy override. Canonical routing knowledge remains in llm-mesh. */
4
+ policy?: RoutePolicy;
5
+ /** Optional named policies, validated and activated by llm-mesh. */
6
+ profiles?: RoutePolicyProfile[];
7
+ activeProfile?: string;
8
+ /** Optional request constraint; account selectors use only redacted refs. */
9
+ explicit?: RouteSelector;
10
+ /** Optional reviewed council replacement. Never synthesize one in h2a. */
11
+ council?: ModelEquivalenceCouncil;
12
+ }
13
+ export declare const ROUTING_TRANSPORT_ALIASES: {
14
+ readonly codex: "codex";
15
+ readonly "cloud-code": "cloud-code";
16
+ readonly agy: "cloud-code";
17
+ };
18
+ export type RoutingTransportAlias = keyof typeof ROUTING_TRANSPORT_ALIASES;
19
+ export declare function routeSelectorForTransport(value: string): RouteSelector;
20
+ export declare function validateLlmMeshRoutingConfig(config: LlmMeshRoutingConfig): LlmMeshRoutingConfig;
21
+ export declare function routingProfiles(config: LlmMeshRoutingConfig | undefined): InMemoryRoutePolicyProfiles | undefined;
22
+ export declare function preferredRoutingConfig(current: LlmMeshRoutingConfig | undefined, transports: readonly string[]): LlmMeshRoutingConfig;
23
+ export declare function strategyRoutingConfig(current: LlmMeshRoutingConfig | undefined, strategy: "last-enrolled" | "round-robin"): LlmMeshRoutingConfig;
24
+ export declare function effectiveRoutingPolicy(config: LlmMeshRoutingConfig | undefined): RoutePolicy;
25
+ export declare function effectiveRoutingCouncil(config: LlmMeshRoutingConfig | undefined): ModelEquivalenceCouncil;
26
+ export declare function parseLlmMeshRoutingConfig(value: string): LlmMeshRoutingConfig;
27
+ export declare function describeLlmMeshRoutingConfig(config: LlmMeshRoutingConfig | undefined): Record<string, unknown>;
28
+ //# sourceMappingURL=llm-routing-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-routing-config.d.ts","sourceRoot":"","sources":["../src/llm-routing-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,2BAA2B,EAI3B,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAED,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE3E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQtE;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CAiBtB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,2BAA2B,GAAG,SAAS,CAKzC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,oBAAoB,CAYtB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,QAAQ,EAAE,eAAe,GAAG,aAAa,GACxC,oBAAoB,CAQtB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,WAAW,CAEb;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,uBAAuB,CAEzB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAW7E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
@@ -0,0 +1,100 @@
1
+ import { DEFAULT_MODEL_EQUIVALENCE_COUNCIL, DEFAULT_ROUTE_POLICY, InMemoryRoutePolicyProfiles, modelProfiles, validateEquivalenceCouncil, validateRoutePolicy, } from "@sentropic/llm-mesh";
2
+ export const ROUTING_TRANSPORT_ALIASES = {
3
+ codex: "codex",
4
+ "cloud-code": "cloud-code",
5
+ agy: "cloud-code",
6
+ };
7
+ export function routeSelectorForTransport(value) {
8
+ const transport = ROUTING_TRANSPORT_ALIASES[value];
9
+ if (!transport) {
10
+ throw new Error(`unsupported routing transport "${value}"; expected codex, cloud-code, or agy`);
11
+ }
12
+ return { transportProviderId: transport };
13
+ }
14
+ export function validateLlmMeshRoutingConfig(config) {
15
+ if (config.policy)
16
+ validateRoutePolicy(config.policy);
17
+ const names = new Set();
18
+ for (const profile of config.profiles ?? []) {
19
+ if (names.has(profile.name)) {
20
+ throw new Error(`duplicate llm-mesh route profile: ${profile.name}`);
21
+ }
22
+ names.add(profile.name);
23
+ validateRoutePolicy(profile.policy);
24
+ }
25
+ if (config.activeProfile && !names.has(config.activeProfile)) {
26
+ throw new Error(`unknown llm-mesh route profile: ${config.activeProfile}`);
27
+ }
28
+ if (config.council) {
29
+ validateEquivalenceCouncil(config.council, modelProfiles);
30
+ }
31
+ return config;
32
+ }
33
+ export function routingProfiles(config) {
34
+ if (!config?.profiles?.length)
35
+ return undefined;
36
+ const profiles = new InMemoryRoutePolicyProfiles(config.profiles);
37
+ if (config.activeProfile)
38
+ profiles.activate(config.activeProfile);
39
+ return profiles;
40
+ }
41
+ export function preferredRoutingConfig(current, transports) {
42
+ if (transports.length === 0) {
43
+ throw new Error("at least one routing transport is required");
44
+ }
45
+ const policy = {
46
+ ...(current?.policy ?? DEFAULT_ROUTE_POLICY),
47
+ strategy: {
48
+ kind: "ordered",
49
+ preferences: transports.map(routeSelectorForTransport),
50
+ },
51
+ };
52
+ return validateLlmMeshRoutingConfig({ ...current, policy });
53
+ }
54
+ export function strategyRoutingConfig(current, strategy) {
55
+ const policy = {
56
+ ...(current?.policy ?? DEFAULT_ROUTE_POLICY),
57
+ strategy: strategy === "last-enrolled"
58
+ ? { kind: "last-enrolled" }
59
+ : { kind: "round-robin", scope: "new-affinity" },
60
+ };
61
+ return validateLlmMeshRoutingConfig({ ...current, policy });
62
+ }
63
+ export function effectiveRoutingPolicy(config) {
64
+ return config?.policy ?? DEFAULT_ROUTE_POLICY;
65
+ }
66
+ export function effectiveRoutingCouncil(config) {
67
+ return config?.council ?? DEFAULT_MODEL_EQUIVALENCE_COUNCIL;
68
+ }
69
+ export function parseLlmMeshRoutingConfig(value) {
70
+ let parsed;
71
+ try {
72
+ parsed = JSON.parse(value);
73
+ }
74
+ catch (error) {
75
+ throw new Error(`invalid routing JSON: ${error instanceof Error ? error.message : String(error)}`);
76
+ }
77
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
78
+ throw new Error("routing JSON must be an object");
79
+ }
80
+ return validateLlmMeshRoutingConfig(parsed);
81
+ }
82
+ export function describeLlmMeshRoutingConfig(config) {
83
+ const policy = effectiveRoutingPolicy(config);
84
+ return {
85
+ strategy: policy.strategy,
86
+ fallbackMode: policy.fallbackMode,
87
+ negativeCacheTtlMs: policy.negativeCacheTtlMs,
88
+ maxAttempts: policy.maxAttempts,
89
+ preferSameTransport: policy.preferSameTransport,
90
+ stickyAccount: policy.stickyAccount,
91
+ allowEquivalentModels: policy.allowEquivalentModels,
92
+ rotateEquivalentAccounts: policy.rotateEquivalentAccounts,
93
+ rules: policy.rules,
94
+ activeProfile: config?.activeProfile ?? null,
95
+ profiles: (config?.profiles ?? []).map(({ name, revision }) => ({ name, revision })),
96
+ explicit: config?.explicit ?? null,
97
+ councilRevision: effectiveRoutingCouncil(config).revision,
98
+ };
99
+ }
100
+ //# sourceMappingURL=llm-routing-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-routing-config.js","sourceRoot":"","sources":["../src/llm-routing-config.ts"],"names":[],"mappings":"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"}
@@ -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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"}