@pentoshi/clai 4.9.0 → 4.10.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 (68) hide show
  1. package/README.md +22 -1
  2. package/dist/agent/compaction-executor.d.ts +3 -5
  3. package/dist/agent/compaction-executor.js +165 -28
  4. package/dist/agent/compaction-executor.js.map +1 -1
  5. package/dist/app/commands/catalog.js +5 -0
  6. package/dist/app/commands/catalog.js.map +1 -1
  7. package/dist/app/commands/registry.js +1 -0
  8. package/dist/app/commands/registry.js.map +1 -1
  9. package/dist/classic/bootstrap/start-classic.d.ts +1 -0
  10. package/dist/classic/bootstrap/start-classic.js +13 -0
  11. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  12. package/dist/index.js +60 -7
  13. package/dist/index.js.map +1 -1
  14. package/dist/interactive-session/transport-node-pty.d.ts +10 -1
  15. package/dist/interactive-session/transport-node-pty.js +36 -12
  16. package/dist/interactive-session/transport-node-pty.js.map +1 -1
  17. package/dist/llm/operation-ledger.js +6 -2
  18. package/dist/llm/operation-ledger.js.map +1 -1
  19. package/dist/session-runtime/binding.d.ts +5 -0
  20. package/dist/session-runtime/binding.js +28 -0
  21. package/dist/session-runtime/binding.js.map +1 -0
  22. package/dist/session-runtime/child-bridge.d.ts +31 -0
  23. package/dist/session-runtime/child-bridge.js +169 -0
  24. package/dist/session-runtime/child-bridge.js.map +1 -0
  25. package/dist/session-runtime/client.d.ts +8 -0
  26. package/dist/session-runtime/client.js +448 -0
  27. package/dist/session-runtime/client.js.map +1 -0
  28. package/dist/session-runtime/discovery.d.ts +6 -0
  29. package/dist/session-runtime/discovery.js +100 -0
  30. package/dist/session-runtime/discovery.js.map +1 -0
  31. package/dist/session-runtime/host.d.ts +77 -0
  32. package/dist/session-runtime/host.js +758 -0
  33. package/dist/session-runtime/host.js.map +1 -0
  34. package/dist/session-runtime/launch.d.ts +11 -0
  35. package/dist/session-runtime/launch.js +68 -0
  36. package/dist/session-runtime/launch.js.map +1 -0
  37. package/dist/session-runtime/paths.d.ts +8 -0
  38. package/dist/session-runtime/paths.js +92 -0
  39. package/dist/session-runtime/paths.js.map +1 -0
  40. package/dist/session-runtime/protocol.d.ts +22 -0
  41. package/dist/session-runtime/protocol.js +149 -0
  42. package/dist/session-runtime/protocol.js.map +1 -0
  43. package/dist/session-runtime/replay-buffer.d.ts +12 -0
  44. package/dist/session-runtime/replay-buffer.js +50 -0
  45. package/dist/session-runtime/replay-buffer.js.map +1 -0
  46. package/dist/session-runtime/store.d.ts +14 -0
  47. package/dist/session-runtime/store.js +143 -0
  48. package/dist/session-runtime/store.js.map +1 -0
  49. package/dist/session-runtime/types.d.ts +102 -0
  50. package/dist/session-runtime/types.js +2 -0
  51. package/dist/session-runtime/types.js.map +1 -0
  52. package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +1 -0
  53. package/dist/tui-v2/bootstrap/start-tui-v2.js +13 -0
  54. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  55. package/dist/ui-core/bootstrap/composition-root.d.ts +4 -0
  56. package/dist/ui-core/bootstrap/composition-root.js +2 -0
  57. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  58. package/dist/ui-core/commands/command-handlers.js +3 -2
  59. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  60. package/dist/ui-core/commands/config-commands.d.ts +1 -0
  61. package/dist/ui-core/commands/config-commands.js +6 -0
  62. package/dist/ui-core/commands/config-commands.js.map +1 -1
  63. package/dist/ui-core/commands/picker-commands.js +68 -25
  64. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  65. package/dist/version.generated.d.ts +2 -2
  66. package/dist/version.generated.js +2 -2
  67. package/dist/version.generated.js.map +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,169 @@
1
+ import { RUNTIME_CHILD_ENV, RUNTIME_SOCKET_ENV, RUNTIME_TOKEN_ENV, } from "./launch.js";
2
+ import { JsonFrameChannel, connectRuntimeSocket, readFirstFrame, sendFrame, } from "./protocol.js";
3
+ import { RUNTIME_PROTOCOL_VERSION, } from "./types.js";
4
+ function isAck(value) {
5
+ if (!value || typeof value !== "object")
6
+ return false;
7
+ const frame = value;
8
+ return (frame.version === RUNTIME_PROTOCOL_VERSION &&
9
+ frame.type === "ack" &&
10
+ typeof frame.sessionId === "string");
11
+ }
12
+ function hostFrame(value) {
13
+ if (!value || typeof value !== "object")
14
+ return undefined;
15
+ const frame = value;
16
+ if (frame.type === "shutdown" || frame.type === "pong") {
17
+ return frame;
18
+ }
19
+ return undefined;
20
+ }
21
+ export class RuntimeChildBridge {
22
+ socketPath;
23
+ token;
24
+ socket;
25
+ channel;
26
+ reconnectTimer;
27
+ latestStatus;
28
+ lastSentStatusKey;
29
+ shutdown;
30
+ disposed = false;
31
+ connecting;
32
+ constructor(socketPath, token) {
33
+ this.socketPath = socketPath;
34
+ this.token = token;
35
+ }
36
+ async connect() {
37
+ if (this.disposed)
38
+ return false;
39
+ if (this.channel && this.socket && !this.socket.destroyed)
40
+ return true;
41
+ this.connecting ??= this.open().finally(() => {
42
+ this.connecting = undefined;
43
+ });
44
+ return await this.connecting;
45
+ }
46
+ setShutdownHandler(handler) {
47
+ this.shutdown = handler;
48
+ }
49
+ report(status) {
50
+ const title = status.title?.trim().slice(0, 256) || undefined;
51
+ const normalized = {
52
+ sessionId: status.sessionId.trim().slice(0, 256),
53
+ cwd: status.cwd.slice(0, 4096),
54
+ busy: status.busy,
55
+ ...(title ? { title } : {}),
56
+ };
57
+ const key = JSON.stringify([
58
+ normalized.sessionId,
59
+ normalized.cwd,
60
+ normalized.busy,
61
+ normalized.title ?? null,
62
+ ]);
63
+ this.latestStatus = normalized;
64
+ if (key === this.lastSentStatusKey &&
65
+ this.channel &&
66
+ this.socket &&
67
+ !this.socket.destroyed) {
68
+ return;
69
+ }
70
+ if (this.send({
71
+ type: "status",
72
+ sessionId: normalized.sessionId,
73
+ cwd: normalized.cwd,
74
+ busy: normalized.busy,
75
+ ...(normalized.title ? { title: normalized.title } : {}),
76
+ })) {
77
+ this.lastSentStatusKey = key;
78
+ return;
79
+ }
80
+ this.scheduleReconnect();
81
+ }
82
+ minimise() {
83
+ return this.send({ type: "minimise" });
84
+ }
85
+ switchSession(sessionId, closeCurrent) {
86
+ return this.send({ type: "switch", sessionId, closeCurrent });
87
+ }
88
+ dispose(exitCode = 0) {
89
+ if (this.disposed)
90
+ return;
91
+ this.send({ type: "exiting", exitCode });
92
+ this.disposed = true;
93
+ if (this.reconnectTimer)
94
+ clearTimeout(this.reconnectTimer);
95
+ this.channel?.dispose();
96
+ this.socket?.destroy();
97
+ this.channel = undefined;
98
+ this.socket = undefined;
99
+ this.lastSentStatusKey = undefined;
100
+ }
101
+ async open() {
102
+ let socket;
103
+ try {
104
+ socket = await connectRuntimeSocket(this.socketPath);
105
+ sendFrame(socket, {
106
+ version: RUNTIME_PROTOCOL_VERSION,
107
+ type: "auth",
108
+ role: "child",
109
+ token: this.token,
110
+ });
111
+ const first = await readFirstFrame(socket);
112
+ if (!isAck(first.value))
113
+ throw new Error("runtime host rejected child channel");
114
+ if (this.disposed) {
115
+ socket.destroy();
116
+ return false;
117
+ }
118
+ const connected = socket;
119
+ this.socket = connected;
120
+ this.channel = new JsonFrameChannel(connected, (value) => this.receive(value), () => connected.destroy(), first.rest);
121
+ connected.once("close", () => this.closed(connected));
122
+ this.lastSentStatusKey = undefined;
123
+ if (this.latestStatus)
124
+ this.report(this.latestStatus);
125
+ return true;
126
+ }
127
+ catch {
128
+ socket?.destroy();
129
+ this.scheduleReconnect();
130
+ return false;
131
+ }
132
+ }
133
+ receive(value) {
134
+ const frame = hostFrame(value);
135
+ if (frame?.type === "shutdown")
136
+ this.shutdown?.();
137
+ }
138
+ send(frame) {
139
+ return this.channel?.send(frame) ?? false;
140
+ }
141
+ closed(socket) {
142
+ if (this.socket !== socket)
143
+ return;
144
+ this.channel?.dispose();
145
+ this.channel = undefined;
146
+ this.socket = undefined;
147
+ this.lastSentStatusKey = undefined;
148
+ this.scheduleReconnect();
149
+ }
150
+ scheduleReconnect() {
151
+ if (this.disposed || this.reconnectTimer)
152
+ return;
153
+ this.reconnectTimer = setTimeout(() => {
154
+ this.reconnectTimer = undefined;
155
+ void this.connect();
156
+ }, 500);
157
+ this.reconnectTimer.unref?.();
158
+ }
159
+ }
160
+ export function createRuntimeChildBridge() {
161
+ if (process.env[RUNTIME_CHILD_ENV] !== "1")
162
+ return undefined;
163
+ const socketPath = process.env[RUNTIME_SOCKET_ENV]?.trim();
164
+ const token = process.env[RUNTIME_TOKEN_ENV]?.trim();
165
+ if (!socketPath || !token || !/^[a-f0-9]{64}$/i.test(token))
166
+ return undefined;
167
+ return new RuntimeChildBridge(socketPath, token);
168
+ }
169
+ //# sourceMappingURL=child-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-bridge.js","sourceRoot":"","sources":["../../src/session-runtime/child-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ResumeTarget } from "../ui-core/bootstrap/session-resume.js";
2
+ export interface DurableInteractiveOptions {
3
+ readonly entryPath: string;
4
+ readonly childArgs: readonly string[];
5
+ readonly resume?: ResumeTarget | undefined;
6
+ readonly noHistory?: boolean | undefined;
7
+ }
8
+ export declare function tryRunDurableInteractive(options: DurableInteractiveOptions): Promise<boolean>;
@@ -0,0 +1,448 @@
1
+ import { spawn } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { resolveResumeTarget } from "../ui-core/bootstrap/session-resume.js";
4
+ import { mintSessionId } from "../app/controllers/session-persistence.js";
5
+ import { probePtyCapability } from "../interactive-session/transport-node-pty.js";
6
+ import { safeCwd } from "../os/cwd.js";
7
+ import { findBunExecutable, isBunRuntime } from "../os/bun-runtime.js";
8
+ import { getConfig } from "../store/config.js";
9
+ import { findLiveRuntime, latestLiveRuntime, probeRuntime, } from "./discovery.js";
10
+ import { RUNTIME_CHILD_ENV, RUNTIME_DISABLE_ENV, RUNTIME_HOST_ENV, RUNTIME_SESSION_ENV, RUNTIME_SOCKET_ENV, RUNTIME_TOKEN_ENV, encodeRuntimeHostPayload, selfLaunchSpec, } from "./launch.js";
11
+ import { JsonFrameChannel, connectRuntimeSocket, readFirstFrame, sendFrame, } from "./protocol.js";
12
+ import { readRuntimeMetadata } from "./store.js";
13
+ import { RUNTIME_PROTOCOL_VERSION, } from "./types.js";
14
+ const START_TIMEOUT_MS = 10_000;
15
+ const DEFAULT_IDLE_TIMEOUT_MS = 30 * 60 * 1_000;
16
+ const MIN_IDLE_TIMEOUT_MS = 60_000;
17
+ const MAX_IDLE_TIMEOUT_MS = 24 * 60 * 60 * 1_000;
18
+ const TERMINAL_RESTORE = "\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l\u001b[?1015l\u001b[?2004l\u001b[?25h\u001b[0m\u001b[?1049l";
19
+ function delay(ms) {
20
+ return new Promise((resolve) => setTimeout(resolve, ms));
21
+ }
22
+ function terminalColumns() {
23
+ return Math.max(20, Math.min(1_000, process.stdout.columns ?? 100));
24
+ }
25
+ function terminalRows() {
26
+ return Math.max(5, Math.min(500, process.stdout.rows ?? 30));
27
+ }
28
+ function idleTimeoutMs() {
29
+ const configured = Number(process.env.CLAI_SESSION_RUNTIME_IDLE_MS);
30
+ if (!Number.isFinite(configured))
31
+ return DEFAULT_IDLE_TIMEOUT_MS;
32
+ return Math.max(MIN_IDLE_TIMEOUT_MS, Math.min(MAX_IDLE_TIMEOUT_MS, Math.floor(configured)));
33
+ }
34
+ function hostFrame(value) {
35
+ if (!value || typeof value !== "object")
36
+ return undefined;
37
+ const frame = value;
38
+ if (frame.type === "switch" && typeof frame.sessionId === "string") {
39
+ return frame;
40
+ }
41
+ if (frame.type === "detached" &&
42
+ typeof frame.sessionId === "string" &&
43
+ ["minimise", "requested", "taken-over", "connection-lost"].includes(String(frame.reason))) {
44
+ return frame;
45
+ }
46
+ if (frame.type === "exit" && typeof frame.exitCode === "number") {
47
+ return frame;
48
+ }
49
+ if (frame.type === "pong")
50
+ return frame;
51
+ return undefined;
52
+ }
53
+ function isAck(value) {
54
+ if (!value || typeof value !== "object")
55
+ return false;
56
+ const frame = value;
57
+ return (frame.version === RUNTIME_PROTOCOL_VERSION &&
58
+ frame.type === "ack" &&
59
+ typeof frame.sessionId === "string");
60
+ }
61
+ async function openChannel(metadata, role, clientId) {
62
+ const socket = await connectRuntimeSocket(metadata.socketPath);
63
+ sendFrame(socket, {
64
+ version: RUNTIME_PROTOCOL_VERSION,
65
+ type: "auth",
66
+ role,
67
+ token: metadata.token,
68
+ clientId,
69
+ });
70
+ const first = await readFirstFrame(socket);
71
+ if (!isAck(first.value)) {
72
+ socket.destroy();
73
+ throw new Error("session runtime rejected the client connection");
74
+ }
75
+ return { socket, first };
76
+ }
77
+ function childEnvironment(payload) {
78
+ const env = { ...process.env };
79
+ delete env[RUNTIME_CHILD_ENV];
80
+ delete env[RUNTIME_SOCKET_ENV];
81
+ delete env[RUNTIME_TOKEN_ENV];
82
+ delete env[RUNTIME_SESSION_ENV];
83
+ env[RUNTIME_HOST_ENV] = payload;
84
+ return env;
85
+ }
86
+ function brokerLaunch(entryPath) {
87
+ if (!isBunRuntime() && process.platform !== "win32") {
88
+ const bun = findBunExecutable();
89
+ if (bun)
90
+ return { file: bun, args: [entryPath] };
91
+ }
92
+ return selfLaunchSpec(entryPath, []);
93
+ }
94
+ async function startRuntimeHost(options, target) {
95
+ const childArgs = [
96
+ ...options.childArgs,
97
+ ...(target.resumeId ? ["--resume", target.resumeId] : []),
98
+ ...(target.resumeLatest ? ["--continue"] : []),
99
+ ];
100
+ const childLaunch = selfLaunchSpec(options.entryPath, childArgs);
101
+ const payload = {
102
+ version: RUNTIME_PROTOCOL_VERSION,
103
+ sessionId: target.sessionId,
104
+ cwd: safeCwd(),
105
+ launch: childLaunch,
106
+ columns: terminalColumns(),
107
+ rows: terminalRows(),
108
+ idleTimeoutMs: idleTimeoutMs(),
109
+ };
110
+ const hostLaunch = brokerLaunch(options.entryPath);
111
+ const child = spawn(hostLaunch.file, [...hostLaunch.args], {
112
+ cwd: payload.cwd,
113
+ env: childEnvironment(encodeRuntimeHostPayload(payload)),
114
+ detached: true,
115
+ stdio: "ignore",
116
+ windowsHide: true,
117
+ });
118
+ let launchError;
119
+ child.once("error", (error) => {
120
+ launchError = error;
121
+ });
122
+ child.unref();
123
+ let ready = false;
124
+ try {
125
+ const deadline = Date.now() + START_TIMEOUT_MS;
126
+ while (Date.now() < deadline) {
127
+ if (launchError)
128
+ throw launchError;
129
+ const metadata = await readRuntimeMetadata(target.sessionId);
130
+ if (metadata?.phase === "failed") {
131
+ throw new Error(metadata.error ?? "session runtime failed to start");
132
+ }
133
+ if (metadata?.phase === "running" &&
134
+ (await probeRuntime(metadata))) {
135
+ ready = true;
136
+ return metadata;
137
+ }
138
+ const winner = await findLiveRuntime(target.sessionId).catch(() => undefined);
139
+ if (winner?.phase === "running") {
140
+ ready = true;
141
+ return winner;
142
+ }
143
+ await delay(50);
144
+ }
145
+ throw new Error("session runtime did not become ready within 10 seconds");
146
+ }
147
+ finally {
148
+ if (!ready && child.pid && child.exitCode === null && !child.killed) {
149
+ child.kill("SIGTERM");
150
+ }
151
+ }
152
+ }
153
+ async function ensureRuntime(options, target) {
154
+ const existing = await findLiveRuntime(target.sessionId);
155
+ if (existing?.phase === "failed") {
156
+ throw new Error(existing.error ?? "session runtime failed");
157
+ }
158
+ return existing ?? (await startRuntimeHost(options, target));
159
+ }
160
+ async function initialTarget(resume) {
161
+ if (!resume)
162
+ return { sessionId: mintSessionId() };
163
+ if (resume.kind === "latest") {
164
+ const live = await latestLiveRuntime(safeCwd());
165
+ if (live)
166
+ return { sessionId: live.sessionId };
167
+ const resolved = await resolveResumeTarget(resume);
168
+ if (resolved.record) {
169
+ return { sessionId: resolved.record.id, resumeId: resolved.record.id };
170
+ }
171
+ return { sessionId: mintSessionId(), resumeLatest: true };
172
+ }
173
+ const live = await findLiveRuntime(resume.id);
174
+ if (live)
175
+ return { sessionId: live.sessionId };
176
+ const resolved = await resolveResumeTarget(resume);
177
+ if (resolved.record) {
178
+ return { sessionId: resolved.record.id, resumeId: resolved.record.id };
179
+ }
180
+ return { sessionId: mintSessionId(), resumeId: resume.id };
181
+ }
182
+ async function switchTarget(sessionId) {
183
+ const live = await findLiveRuntime(sessionId);
184
+ if (live)
185
+ return { sessionId: live.sessionId };
186
+ const resolved = await resolveResumeTarget({ kind: "id", id: sessionId });
187
+ if (!resolved.record) {
188
+ throw new Error(resolved.error ?? `session ${sessionId} is unavailable`);
189
+ }
190
+ return { sessionId: resolved.record.id, resumeId: resolved.record.id };
191
+ }
192
+ function writeOutput(bytes) {
193
+ process.stdout.write(bytes);
194
+ }
195
+ function waitForTerminalEnd(socket, timeoutMs = 3_000) {
196
+ if (socket.destroyed || socket.readableEnded)
197
+ return Promise.resolve();
198
+ return new Promise((resolve) => {
199
+ let settled = false;
200
+ const finish = () => {
201
+ if (settled)
202
+ return;
203
+ settled = true;
204
+ clearTimeout(timer);
205
+ socket.off("end", finish);
206
+ socket.off("close", finish);
207
+ resolve();
208
+ };
209
+ const timer = setTimeout(finish, timeoutMs);
210
+ timer.unref?.();
211
+ socket.once("end", finish);
212
+ socket.once("close", finish);
213
+ });
214
+ }
215
+ function waitForStdoutDrain(timeoutMs = 1_000) {
216
+ if (!process.stdout.writableNeedDrain)
217
+ return Promise.resolve();
218
+ return new Promise((resolve) => {
219
+ let settled = false;
220
+ const finish = () => {
221
+ if (settled)
222
+ return;
223
+ settled = true;
224
+ clearTimeout(timer);
225
+ process.stdout.off("drain", finish);
226
+ resolve();
227
+ };
228
+ const timer = setTimeout(finish, timeoutMs);
229
+ timer.unref?.();
230
+ process.stdout.once("drain", finish);
231
+ });
232
+ }
233
+ function restoreTerminal(previousRaw) {
234
+ const stdin = process.stdin;
235
+ stdin.setRawMode?.(previousRaw ?? false);
236
+ process.stdout.write(TERMINAL_RESTORE);
237
+ }
238
+ async function attachRuntime(metadata) {
239
+ const clientId = `${process.pid}-${randomUUID()}`;
240
+ const controlConnection = await openChannel(metadata, "client-control", clientId);
241
+ let terminalConnection;
242
+ try {
243
+ terminalConnection = await openChannel(metadata, "client-terminal", clientId);
244
+ }
245
+ catch (error) {
246
+ controlConnection.socket.destroy();
247
+ throw error;
248
+ }
249
+ const control = controlConnection.socket;
250
+ const terminal = terminalConnection.socket;
251
+ let settled = false;
252
+ let exitPending = false;
253
+ let previousRaw;
254
+ let channel;
255
+ let resolveOutcome;
256
+ const outcome = new Promise((resolve) => {
257
+ resolveOutcome = resolve;
258
+ });
259
+ const settle = (value) => {
260
+ if (settled)
261
+ return;
262
+ settled = true;
263
+ resolveOutcome?.(value);
264
+ };
265
+ const receive = (value) => {
266
+ const frame = hostFrame(value);
267
+ if (!frame || frame.type === "pong")
268
+ return;
269
+ if (frame.type === "switch") {
270
+ settle({ kind: "switch", sessionId: frame.sessionId });
271
+ return;
272
+ }
273
+ if (frame.type === "detached") {
274
+ settle({
275
+ kind: "detach",
276
+ reason: frame.reason,
277
+ sessionId: frame.sessionId,
278
+ });
279
+ return;
280
+ }
281
+ if (frame.type === "exit" && !exitPending) {
282
+ exitPending = true;
283
+ void (async () => {
284
+ await waitForTerminalEnd(terminal);
285
+ await waitForStdoutDrain();
286
+ settle({ kind: "exit", exitCode: frame.exitCode });
287
+ })();
288
+ }
289
+ };
290
+ channel = new JsonFrameChannel(control, receive, () => {
291
+ if (exitPending)
292
+ return;
293
+ settle({
294
+ kind: "detach",
295
+ reason: "connection-lost",
296
+ sessionId: metadata.sessionId,
297
+ });
298
+ }, controlConnection.first.rest);
299
+ control.once("close", () => {
300
+ setTimeout(() => {
301
+ if (!settled && !exitPending) {
302
+ settle({
303
+ kind: "detach",
304
+ reason: "connection-lost",
305
+ sessionId: metadata.sessionId,
306
+ });
307
+ }
308
+ }, 30).unref?.();
309
+ });
310
+ const stdin = process.stdin;
311
+ previousRaw = stdin.isRaw;
312
+ stdin.setRawMode?.(true);
313
+ stdin.resume();
314
+ const onInput = (bytes) => {
315
+ if (!terminal.write(bytes))
316
+ stdin.pause();
317
+ };
318
+ const onTerminalDrain = () => {
319
+ stdin.resume();
320
+ };
321
+ const onTerminalError = () => {
322
+ if (exitPending)
323
+ return;
324
+ settle({
325
+ kind: "detach",
326
+ reason: "connection-lost",
327
+ sessionId: metadata.sessionId,
328
+ });
329
+ };
330
+ const onOutput = (bytes) => {
331
+ if (!process.stdout.write(bytes))
332
+ terminal.pause();
333
+ };
334
+ const onStdoutDrain = () => {
335
+ terminal.resume();
336
+ };
337
+ const onInputEnd = () => {
338
+ settle({
339
+ kind: "detach",
340
+ reason: "connection-lost",
341
+ sessionId: metadata.sessionId,
342
+ });
343
+ };
344
+ const sendResize = () => {
345
+ channel?.send({
346
+ type: "resize",
347
+ columns: terminalColumns(),
348
+ rows: terminalRows(),
349
+ });
350
+ };
351
+ const onTerminate = () => onInputEnd();
352
+ stdin.on("data", onInput);
353
+ stdin.once("end", onInputEnd);
354
+ terminal.on("drain", onTerminalDrain);
355
+ terminal.on("error", onTerminalError);
356
+ terminal.on("data", onOutput);
357
+ process.stdout.on("drain", onStdoutDrain);
358
+ process.on("SIGWINCH", sendResize);
359
+ process.on("SIGHUP", onTerminate);
360
+ process.on("SIGTERM", onTerminate);
361
+ if (terminalConnection.first.rest.length > 0) {
362
+ writeOutput(terminalConnection.first.rest);
363
+ }
364
+ terminal.resume();
365
+ sendResize();
366
+ try {
367
+ return await outcome;
368
+ }
369
+ finally {
370
+ channel.dispose();
371
+ stdin.off("data", onInput);
372
+ stdin.off("end", onInputEnd);
373
+ terminal.off("drain", onTerminalDrain);
374
+ terminal.off("error", onTerminalError);
375
+ terminal.off("data", onOutput);
376
+ process.stdout.off("drain", onStdoutDrain);
377
+ process.off("SIGWINCH", sendResize);
378
+ process.off("SIGHUP", onTerminate);
379
+ process.off("SIGTERM", onTerminate);
380
+ control.destroy();
381
+ terminal.destroy();
382
+ stdin.pause();
383
+ restoreTerminal(previousRaw);
384
+ }
385
+ }
386
+ function reportDetach(outcome) {
387
+ const resume = `clai --resume ${outcome.sessionId}`;
388
+ if (outcome.reason === "minimise" || outcome.reason === "requested") {
389
+ process.stdout.write(`\nSession ${outcome.sessionId} is running in the background.\nReattach with: ${resume}\n`);
390
+ return;
391
+ }
392
+ if (outcome.reason === "taken-over") {
393
+ process.stdout.write(`\nSession ${outcome.sessionId} was attached from another terminal.\n`);
394
+ return;
395
+ }
396
+ process.stdout.write(`\nConnection to session ${outcome.sessionId} closed. Reattach with: ${resume}\n`);
397
+ }
398
+ function runtimeEligible(options) {
399
+ return (process.env[RUNTIME_CHILD_ENV] !== "1" &&
400
+ process.env[RUNTIME_HOST_ENV] === undefined &&
401
+ process.env[RUNTIME_DISABLE_ENV] !== "1" &&
402
+ options.noHistory !== true &&
403
+ !getConfig().privateMode &&
404
+ Boolean(process.stdin.isTTY && process.stdout.isTTY));
405
+ }
406
+ function runtimeFallbackMessage(error) {
407
+ const detail = error instanceof Error ? error.message : String(error);
408
+ const compact = detail.replace(/\s+/g, " ").trim().slice(0, 300);
409
+ return compact || "unknown runtime error";
410
+ }
411
+ export async function tryRunDurableInteractive(options) {
412
+ if (!runtimeEligible(options))
413
+ return false;
414
+ try {
415
+ const capability = await probePtyCapability();
416
+ if (!capability.available)
417
+ return false;
418
+ let target = await initialTarget(options.resume);
419
+ for (;;) {
420
+ const metadata = await ensureRuntime(options, target);
421
+ const outcome = await attachRuntime(metadata);
422
+ if (outcome.kind === "switch") {
423
+ try {
424
+ target = await switchTarget(outcome.sessionId);
425
+ }
426
+ catch (error) {
427
+ const current = await findLiveRuntime(metadata.sessionId).catch(() => undefined);
428
+ if (!current)
429
+ throw error;
430
+ process.stderr.write(`Unable to switch sessions (${runtimeFallbackMessage(error)}); reattaching the current session.\n`);
431
+ target = { sessionId: current.sessionId };
432
+ }
433
+ continue;
434
+ }
435
+ if (outcome.kind === "exit") {
436
+ process.exitCode = outcome.exitCode;
437
+ return true;
438
+ }
439
+ reportDetach(outcome);
440
+ return true;
441
+ }
442
+ }
443
+ catch (error) {
444
+ process.stderr.write(`Durable session runtime unavailable (${runtimeFallbackMessage(error)}); using foreground mode.\n`);
445
+ return false;
446
+ }
447
+ }
448
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/session-runtime/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type RuntimeMetadata, type RuntimeView } from "./types.js";
2
+ export declare function probeRuntime(metadata: RuntimeMetadata, timeoutMs?: number): Promise<boolean>;
3
+ export declare function listLiveRuntimeMetadata(): Promise<RuntimeMetadata[]>;
4
+ export declare function findLiveRuntime(sessionIdOrPrefix: string): Promise<RuntimeMetadata | undefined>;
5
+ export declare function latestLiveRuntime(cwd: string): Promise<RuntimeMetadata | undefined>;
6
+ export declare function listLiveSessionRuntimes(): Promise<RuntimeView[]>;