@pentoshi/clai 3.11.7 → 3.11.9

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 (115) hide show
  1. package/README.md +15 -0
  2. package/dist/agent/confirm-port.d.ts +4 -0
  3. package/dist/agent/confirm-port.js +9 -1
  4. package/dist/agent/confirm-port.js.map +1 -1
  5. package/dist/agent/finalize-gate.d.ts +57 -0
  6. package/dist/agent/finalize-gate.js +146 -0
  7. package/dist/agent/finalize-gate.js.map +1 -0
  8. package/dist/agent/runner.js +71 -179
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/agent/tool-call-parser.js +3 -0
  11. package/dist/agent/tool-call-parser.js.map +1 -1
  12. package/dist/app/adapters/current-interactive-sessions-adapter.d.ts +4 -0
  13. package/dist/app/adapters/current-interactive-sessions-adapter.js +12 -0
  14. package/dist/app/adapters/current-interactive-sessions-adapter.js.map +1 -0
  15. package/dist/app/controllers/cancel-all-result.d.ts +8 -0
  16. package/dist/app/controllers/cancel-all-result.js +32 -0
  17. package/dist/app/controllers/cancel-all-result.js.map +1 -0
  18. package/dist/app/controllers/session-controller.d.ts +3 -0
  19. package/dist/app/controllers/session-controller.js +22 -6
  20. package/dist/app/controllers/session-controller.js.map +1 -1
  21. package/dist/app/ports/interactive-sessions-port.d.ts +22 -0
  22. package/dist/app/ports/interactive-sessions-port.js +9 -0
  23. package/dist/app/ports/interactive-sessions-port.js.map +1 -0
  24. package/dist/index.js +24 -13
  25. package/dist/index.js.map +1 -1
  26. package/dist/interactive-session/artifact-writer.d.ts +54 -0
  27. package/dist/interactive-session/artifact-writer.js +161 -0
  28. package/dist/interactive-session/artifact-writer.js.map +1 -0
  29. package/dist/interactive-session/cleanup.d.ts +37 -0
  30. package/dist/interactive-session/cleanup.js +191 -0
  31. package/dist/interactive-session/cleanup.js.map +1 -0
  32. package/dist/interactive-session/config.d.ts +118 -0
  33. package/dist/interactive-session/config.js +141 -0
  34. package/dist/interactive-session/config.js.map +1 -0
  35. package/dist/interactive-session/input-policy.d.ts +26 -0
  36. package/dist/interactive-session/input-policy.js +70 -0
  37. package/dist/interactive-session/input-policy.js.map +1 -0
  38. package/dist/interactive-session/manager.d.ts +118 -0
  39. package/dist/interactive-session/manager.js +1214 -0
  40. package/dist/interactive-session/manager.js.map +1 -0
  41. package/dist/interactive-session/output-store.d.ts +81 -0
  42. package/dist/interactive-session/output-store.js +239 -0
  43. package/dist/interactive-session/output-store.js.map +1 -0
  44. package/dist/interactive-session/output-view.d.ts +20 -0
  45. package/dist/interactive-session/output-view.js +142 -0
  46. package/dist/interactive-session/output-view.js.map +1 -0
  47. package/dist/interactive-session/recovery-journal.d.ts +53 -0
  48. package/dist/interactive-session/recovery-journal.js +167 -0
  49. package/dist/interactive-session/recovery-journal.js.map +1 -0
  50. package/dist/interactive-session/registry.d.ts +59 -0
  51. package/dist/interactive-session/registry.js +170 -0
  52. package/dist/interactive-session/registry.js.map +1 -0
  53. package/dist/interactive-session/runtime.d.ts +107 -0
  54. package/dist/interactive-session/runtime.js +191 -0
  55. package/dist/interactive-session/runtime.js.map +1 -0
  56. package/dist/interactive-session/session-runtime.d.ts +53 -0
  57. package/dist/interactive-session/session-runtime.js +65 -0
  58. package/dist/interactive-session/session-runtime.js.map +1 -0
  59. package/dist/interactive-session/streaming-redactor.d.ts +53 -0
  60. package/dist/interactive-session/streaming-redactor.js +271 -0
  61. package/dist/interactive-session/streaming-redactor.js.map +1 -0
  62. package/dist/interactive-session/telemetry.d.ts +30 -0
  63. package/dist/interactive-session/telemetry.js +47 -0
  64. package/dist/interactive-session/telemetry.js.map +1 -0
  65. package/dist/interactive-session/transport-factory.d.ts +8 -0
  66. package/dist/interactive-session/transport-factory.js +16 -0
  67. package/dist/interactive-session/transport-factory.js.map +1 -0
  68. package/dist/interactive-session/transport-node-pty.d.ts +38 -0
  69. package/dist/interactive-session/transport-node-pty.js +390 -0
  70. package/dist/interactive-session/transport-node-pty.js.map +1 -0
  71. package/dist/interactive-session/transport-pipe.d.ts +9 -0
  72. package/dist/interactive-session/transport-pipe.js +267 -0
  73. package/dist/interactive-session/transport-pipe.js.map +1 -0
  74. package/dist/interactive-session/transport.d.ts +110 -0
  75. package/dist/interactive-session/transport.js +89 -0
  76. package/dist/interactive-session/transport.js.map +1 -0
  77. package/dist/interactive-session/types.d.ts +258 -0
  78. package/dist/interactive-session/types.js +191 -0
  79. package/dist/interactive-session/types.js.map +1 -0
  80. package/dist/os/process-identity.d.ts +46 -0
  81. package/dist/os/process-identity.js +147 -0
  82. package/dist/os/process-identity.js.map +1 -0
  83. package/dist/os/process-tree.d.ts +1 -0
  84. package/dist/os/process-tree.js +11 -0
  85. package/dist/os/process-tree.js.map +1 -1
  86. package/dist/prompts/embedded.js +1 -1
  87. package/dist/prompts/embedded.js.map +1 -1
  88. package/dist/prompts/index.d.ts +7 -0
  89. package/dist/prompts/index.js +23 -0
  90. package/dist/prompts/index.js.map +1 -1
  91. package/dist/prompts/system.agent.md +3 -0
  92. package/dist/repl.js +16 -1
  93. package/dist/repl.js.map +1 -1
  94. package/dist/safety/classifier.d.ts +9 -0
  95. package/dist/safety/classifier.js +119 -18
  96. package/dist/safety/classifier.js.map +1 -1
  97. package/dist/safety/engagement-policy.d.ts +13 -0
  98. package/dist/safety/engagement-policy.js +129 -34
  99. package/dist/safety/engagement-policy.js.map +1 -1
  100. package/dist/tools/definitions.js +94 -0
  101. package/dist/tools/definitions.js.map +1 -1
  102. package/dist/tools/interactive-session-tools.d.ts +11 -0
  103. package/dist/tools/interactive-session-tools.js +276 -0
  104. package/dist/tools/interactive-session-tools.js.map +1 -0
  105. package/dist/tools/registry.js +3 -0
  106. package/dist/tools/registry.js.map +1 -1
  107. package/dist/tui-v2/bootstrap/composition-root.d.ts +3 -0
  108. package/dist/tui-v2/bootstrap/composition-root.js +3 -0
  109. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  110. package/dist/tui-v2/bootstrap/start-tui-v2.js +8 -0
  111. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  112. package/dist/types.d.ts +1 -0
  113. package/dist/version.generated.d.ts +2 -2
  114. package/dist/version.generated.js +2 -2
  115. package/package.json +7 -6
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Bounded, metadata-only diagnostics.
3
+ *
4
+ * Every field is an explicit scalar. Raw session ids, commands, cwd, environment
5
+ * values, input, output, native error text, confirmation previews, and artifact
6
+ * content are structurally excluded — they are never accepted as arguments.
7
+ */
8
+ import { auditLog } from "../store/logs.js";
9
+ import type { SessionOperation, SessionState, SessionTransportKind, StableErrorCode, TerminationReason } from "./types.js";
10
+ export declare function redactSessionId(sessionId: string | undefined): string | undefined;
11
+ export interface TelemetryEvent {
12
+ readonly operation: SessionOperation;
13
+ readonly sessionId?: string | undefined;
14
+ readonly durationMs: number;
15
+ readonly result: "ok" | StableErrorCode;
16
+ readonly state?: SessionState | undefined;
17
+ readonly transport?: SessionTransportKind | undefined;
18
+ readonly inputBytes?: number | undefined;
19
+ readonly outputBytes?: number | undefined;
20
+ readonly queueDepth?: number | undefined;
21
+ readonly retryCount?: number | undefined;
22
+ readonly terminationReason?: TerminationReason | undefined;
23
+ /** Recorded when Start failed after allocating a process or terminal. */
24
+ readonly cleanupVerified?: boolean | undefined;
25
+ }
26
+ export declare class SessionTelemetry {
27
+ private readonly sink;
28
+ constructor(sink?: typeof auditLog);
29
+ record(event: TelemetryEvent): void;
30
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Bounded, metadata-only diagnostics.
3
+ *
4
+ * Every field is an explicit scalar. Raw session ids, commands, cwd, environment
5
+ * values, input, output, native error text, confirmation previews, and artifact
6
+ * content are structurally excluded — they are never accepted as arguments.
7
+ */
8
+ import { createHmac, randomBytes } from "node:crypto";
9
+ import { auditLog } from "../store/logs.js";
10
+ const AUDIT_EVENT = "tool.terminal_session";
11
+ /** Per-process key so a redacted id cannot be correlated across runs. */
12
+ const idKey = randomBytes(32);
13
+ export function redactSessionId(sessionId) {
14
+ if (!sessionId)
15
+ return undefined;
16
+ return createHmac("sha256", idKey).update(sessionId).digest("hex").slice(0, 12);
17
+ }
18
+ export class SessionTelemetry {
19
+ sink;
20
+ constructor(sink = auditLog) {
21
+ this.sink = sink;
22
+ }
23
+ record(event) {
24
+ const payload = {
25
+ operation: event.operation,
26
+ ...(event.sessionId !== undefined
27
+ ? { session: redactSessionId(event.sessionId) }
28
+ : {}),
29
+ durationMs: Math.max(0, Math.round(event.durationMs)),
30
+ result: event.result,
31
+ ...(event.state !== undefined ? { state: event.state } : {}),
32
+ ...(event.transport !== undefined ? { transport: event.transport } : {}),
33
+ ...(event.inputBytes !== undefined ? { inputBytes: event.inputBytes } : {}),
34
+ ...(event.outputBytes !== undefined ? { outputBytes: event.outputBytes } : {}),
35
+ ...(event.queueDepth !== undefined ? { queueDepth: event.queueDepth } : {}),
36
+ ...(event.retryCount !== undefined ? { retryCount: event.retryCount } : {}),
37
+ ...(event.terminationReason !== undefined
38
+ ? { terminationReason: event.terminationReason }
39
+ : {}),
40
+ ...(event.cleanupVerified !== undefined
41
+ ? { cleanupVerified: event.cleanupVerified }
42
+ : {}),
43
+ };
44
+ void this.sink(AUDIT_EVENT, payload);
45
+ }
46
+ }
47
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/interactive-session/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAS5C,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,yEAAyE;AACzE,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AAE9B,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAkBD,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAwB,QAAQ;QAAhC,SAAI,GAAJ,IAAI,CAA4B;IAAG,CAAC;IAEjE,MAAM,CAAC,KAAqB;QAC1B,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;gBAChD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;gBACrC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE;gBAC5C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Default transport factory. PTY support stays behind a lazy capability probe so
3
+ * pipe sessions and every legacy shell/job path remain reachable on targets
4
+ * without a verified native artifact.
5
+ */
6
+ import type { SessionTransportFactory } from "./transport.js";
7
+ export declare function createSessionTransportFactory(): SessionTransportFactory;
8
+ export declare const defaultTransportFactory: SessionTransportFactory;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Default transport factory. PTY support stays behind a lazy capability probe so
3
+ * pipe sessions and every legacy shell/job path remain reachable on targets
4
+ * without a verified native artifact.
5
+ */
6
+ import { startPipeTransport } from "./transport-pipe.js";
7
+ import { probePtyCapability, startPtyTransport } from "./transport-node-pty.js";
8
+ export function createSessionTransportFactory() {
9
+ return {
10
+ capability: (platform) => probePtyCapability(platform),
11
+ startPipe: (request) => startPipeTransport(request),
12
+ startPty: (request) => startPtyTransport(request),
13
+ };
14
+ }
15
+ export const defaultTransportFactory = createSessionTransportFactory();
16
+ //# sourceMappingURL=transport-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-factory.js","sourceRoot":"","sources":["../../src/interactive-session/transport-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGhF,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACtD,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACnD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type LaunchRequest, type LaunchResult, type PtyCapability } from "./transport.js";
2
+ import type { TerminalDimensions } from "./types.js";
3
+ export interface PtyProcessLike {
4
+ readonly pid: number;
5
+ onData(listener: (data: string | Buffer) => void): {
6
+ dispose(): void;
7
+ };
8
+ onExit(listener: (event: {
9
+ exitCode: number;
10
+ signal?: number | undefined;
11
+ }) => void): {
12
+ dispose(): void;
13
+ };
14
+ write(data: string): void;
15
+ resize(columns: number, rows: number): void;
16
+ pause(): void;
17
+ resume(): void;
18
+ kill(signal?: string): void;
19
+ }
20
+ export interface NodePtyModuleLike {
21
+ spawn(file: string, args: string[] | string, options: {
22
+ cwd: string;
23
+ env: Record<string, string>;
24
+ cols: number;
25
+ rows: number;
26
+ name?: string;
27
+ useConpty?: boolean;
28
+ }): PtyProcessLike;
29
+ }
30
+ export declare function probePtyCapability(platform?: NodeJS.Platform): Promise<PtyCapability>;
31
+ export declare function resetPtyCapabilityCache(): void;
32
+ export interface PtyStartOverrides {
33
+ readonly module?: NodePtyModuleLike | undefined;
34
+ readonly shell?: string | null | undefined;
35
+ }
36
+ export declare function startPtyTransport(request: LaunchRequest & {
37
+ dimensions: TerminalDimensions;
38
+ }, overrides?: PtyStartOverrides): Promise<LaunchResult>;
@@ -0,0 +1,390 @@
1
+ import { processIdentityTracker } from "../os/process-identity.js";
2
+ import { supportsProcessGroups, terminateProcessTree, } from "../os/process-tree.js";
3
+ import { resolveShell } from "../tools/shell.js";
4
+ import { LaunchFailure, ptyControlBytes, } from "./transport.js";
5
+ const MODULE_SPECIFIER = "node-pty";
6
+ let loadPromise;
7
+ let loadFailureReason;
8
+ function bunRuntime(platform = process.platform) {
9
+ if (platform === "win32")
10
+ return undefined;
11
+ const candidate = globalThis.Bun;
12
+ if (!candidate || typeof candidate !== "object")
13
+ return undefined;
14
+ const runtime = candidate;
15
+ return typeof runtime.Terminal === "function" && typeof runtime.spawn === "function"
16
+ ? runtime
17
+ : undefined;
18
+ }
19
+ async function loadNodePty() {
20
+ loadPromise ??= (async () => {
21
+ try {
22
+ const loaded = (await import(MODULE_SPECIFIER));
23
+ const module = "spawn" in loaded ? loaded : loaded.default;
24
+ if (typeof module?.spawn !== "function") {
25
+ loadFailureReason = "node-pty loaded without a usable spawn export";
26
+ return undefined;
27
+ }
28
+ return module;
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : "";
32
+ loadFailureReason = /cannot find|module not found|could not locate/i.test(message)
33
+ ? "node-pty is not installed for this target"
34
+ : "node-pty native module failed to load for this target";
35
+ return undefined;
36
+ }
37
+ })();
38
+ return await loadPromise;
39
+ }
40
+ export async function probePtyCapability(platform = process.platform) {
41
+ if (bunRuntime(platform))
42
+ return { available: true, platform };
43
+ const module = await loadNodePty();
44
+ if (module)
45
+ return { available: true, platform };
46
+ return {
47
+ available: false,
48
+ platform,
49
+ reason: loadFailureReason ??
50
+ (platform === "win32"
51
+ ? "No compatible ConPTY transport is available on this target"
52
+ : "No compatible PTY transport is available on this target"),
53
+ };
54
+ }
55
+ export function resetPtyCapabilityCache() {
56
+ loadPromise = undefined;
57
+ loadFailureReason = undefined;
58
+ }
59
+ class BasePtyTransport {
60
+ kind = "pty";
61
+ outputListeners = new Set();
62
+ exitListeners = new Set();
63
+ pendingOutput = [];
64
+ outcome;
65
+ inputClosed = false;
66
+ disposed = false;
67
+ outputGeneration = 0;
68
+ drainWaiters = new Set();
69
+ async control(action) {
70
+ const bytes = ptyControlBytes(action);
71
+ return bytes
72
+ ? await this.write(bytes)
73
+ : { status: "not-delivered", deliveredBytes: 0 };
74
+ }
75
+ async closeInput() {
76
+ if (this.inputClosed)
77
+ return { status: "delivered", deliveredBytes: 0 };
78
+ const bytes = ptyControlBytes("eof");
79
+ const result = bytes
80
+ ? await this.write(bytes)
81
+ : { status: "delivered", deliveredBytes: 0 };
82
+ this.inputClosed = true;
83
+ return result;
84
+ }
85
+ waitForOutputDrain() {
86
+ if (this.disposed)
87
+ return Promise.resolve();
88
+ return new Promise((resolve) => {
89
+ const waiter = {
90
+ generation: this.outputGeneration,
91
+ timer: setTimeout(() => undefined, 0),
92
+ resolve,
93
+ };
94
+ clearTimeout(waiter.timer);
95
+ this.drainWaiters.add(waiter);
96
+ this.armDrain(waiter);
97
+ });
98
+ }
99
+ armDrain(waiter) {
100
+ waiter.generation = this.outputGeneration;
101
+ waiter.timer = setTimeout(() => {
102
+ if (!this.drainWaiters.has(waiter))
103
+ return;
104
+ if (waiter.generation !== this.outputGeneration) {
105
+ this.armDrain(waiter);
106
+ return;
107
+ }
108
+ this.drainWaiters.delete(waiter);
109
+ waiter.resolve();
110
+ }, 25);
111
+ }
112
+ settleOutputDrain() {
113
+ for (const waiter of this.drainWaiters) {
114
+ clearTimeout(waiter.timer);
115
+ waiter.resolve();
116
+ }
117
+ this.drainWaiters.clear();
118
+ }
119
+ onOutput(listener) {
120
+ this.outputListeners.add(listener);
121
+ if (this.pendingOutput.length > 0) {
122
+ for (const event of this.pendingOutput.splice(0))
123
+ listener(event);
124
+ }
125
+ return () => this.outputListeners.delete(listener);
126
+ }
127
+ onExit(listener) {
128
+ this.exitListeners.add(listener);
129
+ if (this.outcome)
130
+ queueMicrotask(() => listener(this.outcome));
131
+ return () => this.exitListeners.delete(listener);
132
+ }
133
+ emitOutput(event) {
134
+ this.outputGeneration += 1;
135
+ if (this.outputListeners.size === 0) {
136
+ this.pendingOutput.push(event);
137
+ return;
138
+ }
139
+ for (const listener of [...this.outputListeners])
140
+ listener(event);
141
+ }
142
+ emitExit(outcome) {
143
+ if (this.outcome)
144
+ return;
145
+ this.outcome = outcome;
146
+ for (const listener of [...this.exitListeners])
147
+ listener(outcome);
148
+ }
149
+ }
150
+ class NodePtyTransport extends BasePtyTransport {
151
+ pty;
152
+ pid;
153
+ processGroupId;
154
+ identity;
155
+ subscriptions = [];
156
+ constructor(pty) {
157
+ super();
158
+ this.pty = pty;
159
+ this.pid = pty.pid;
160
+ this.processGroupId = supportsProcessGroups() ? pty.pid : undefined;
161
+ this.identity = processIdentityTracker.capture(pty.pid, { refresh: true });
162
+ this.subscriptions.push(pty.onData((data) => {
163
+ const bytes = typeof data === "string"
164
+ ? new Uint8Array(Buffer.from(data, "utf8"))
165
+ : new Uint8Array(data);
166
+ this.emitOutput({ stream: "terminal", bytes, observedAt: Date.now() });
167
+ }), pty.onExit(({ exitCode, signal }) => {
168
+ this.emitExit({
169
+ endedAt: Date.now(),
170
+ exitCode,
171
+ ...(signal !== undefined ? { signal: String(signal) } : {}),
172
+ });
173
+ }));
174
+ }
175
+ async write(bytes) {
176
+ if (this.inputClosed || this.outcome) {
177
+ return { status: "not-delivered", deliveredBytes: 0 };
178
+ }
179
+ try {
180
+ this.pty.write(Buffer.from(bytes).toString("binary"));
181
+ return { status: "delivered", deliveredBytes: bytes.length };
182
+ }
183
+ catch (cause) {
184
+ return { status: "unknown", deliveredBytes: 0, cause };
185
+ }
186
+ }
187
+ async resize(dimensions) {
188
+ this.pty.resize(dimensions.columns, dimensions.rows);
189
+ }
190
+ pauseOutput() {
191
+ this.pty.pause();
192
+ }
193
+ resumeOutput() {
194
+ this.pty.resume();
195
+ }
196
+ async requestTreeTermination(kind) {
197
+ return terminateProcessTree(this.pid, {
198
+ signal: kind === "graceful" ? "SIGTERM" : "SIGKILL",
199
+ ...(this.processGroupId !== undefined ? { processGroupId: this.processGroupId } : {}),
200
+ });
201
+ }
202
+ async dispose() {
203
+ if (this.disposed)
204
+ return;
205
+ this.disposed = true;
206
+ this.settleOutputDrain();
207
+ this.outputListeners.clear();
208
+ this.exitListeners.clear();
209
+ for (const subscription of this.subscriptions.splice(0)) {
210
+ try {
211
+ subscription.dispose();
212
+ }
213
+ catch { }
214
+ }
215
+ processIdentityTracker.forget(this.pid);
216
+ }
217
+ }
218
+ class BunPtyTransport extends BasePtyTransport {
219
+ terminal;
220
+ subprocess;
221
+ pid;
222
+ processGroupId;
223
+ identity;
224
+ constructor(terminal, subprocess) {
225
+ super();
226
+ this.terminal = terminal;
227
+ this.subprocess = subprocess;
228
+ this.pid = subprocess.pid;
229
+ this.processGroupId = supportsProcessGroups() ? subprocess.pid : undefined;
230
+ this.identity = processIdentityTracker.capture(subprocess.pid, { refresh: true });
231
+ }
232
+ receive(data) {
233
+ this.emitOutput({
234
+ stream: "terminal",
235
+ bytes: new Uint8Array(data),
236
+ observedAt: Date.now(),
237
+ });
238
+ }
239
+ exited(exitCode, signalCode) {
240
+ this.emitExit({
241
+ endedAt: Date.now(),
242
+ exitCode,
243
+ ...(signalCode !== null ? { signal: String(signalCode) } : {}),
244
+ });
245
+ }
246
+ async write(bytes) {
247
+ if (this.inputClosed || this.outcome || this.terminal.closed) {
248
+ return { status: "not-delivered", deliveredBytes: 0 };
249
+ }
250
+ try {
251
+ const deliveredBytes = this.terminal.write(bytes);
252
+ return deliveredBytes === bytes.length
253
+ ? { status: "delivered", deliveredBytes }
254
+ : { status: "unknown", deliveredBytes };
255
+ }
256
+ catch (cause) {
257
+ return { status: "unknown", deliveredBytes: 0, cause };
258
+ }
259
+ }
260
+ async resize(dimensions) {
261
+ this.terminal.resize(dimensions.columns, dimensions.rows);
262
+ }
263
+ pauseOutput() { }
264
+ resumeOutput() { }
265
+ async requestTreeTermination(kind) {
266
+ return terminateProcessTree(this.pid, {
267
+ signal: kind === "graceful" ? "SIGTERM" : "SIGKILL",
268
+ ...(this.processGroupId !== undefined ? { processGroupId: this.processGroupId } : {}),
269
+ });
270
+ }
271
+ async dispose() {
272
+ if (this.disposed)
273
+ return;
274
+ this.disposed = true;
275
+ this.settleOutputDrain();
276
+ this.outputListeners.clear();
277
+ this.exitListeners.clear();
278
+ if (!this.terminal.closed)
279
+ this.terminal.close();
280
+ this.subprocess.unref?.();
281
+ processIdentityTracker.forget(this.pid);
282
+ }
283
+ }
284
+ function stringEnv(env) {
285
+ const result = {};
286
+ for (const [key, value] of Object.entries(env)) {
287
+ if (typeof value === "string")
288
+ result[key] = value;
289
+ }
290
+ return result;
291
+ }
292
+ async function startNodePtyTransport(request, module, shell) {
293
+ let pty;
294
+ let transport;
295
+ try {
296
+ pty = module.spawn(shell, process.platform === "win32" ? ["/c", request.command] : ["-c", request.command], {
297
+ cwd: request.cwd,
298
+ env: stringEnv({ ...(request.env ?? process.env), TERM: "xterm-256color" }),
299
+ cols: request.dimensions.columns,
300
+ rows: request.dimensions.rows,
301
+ name: "xterm-256color",
302
+ ...(process.platform === "win32" ? { useConpty: true } : {}),
303
+ });
304
+ if (!pty.pid)
305
+ throw new Error("node-pty returned no pid");
306
+ transport = new NodePtyTransport(pty);
307
+ request.onLaunchIdentity?.({
308
+ pid: transport.pid,
309
+ processGroupId: transport.processGroupId,
310
+ identity: transport.identity,
311
+ });
312
+ return { transport };
313
+ }
314
+ catch (error) {
315
+ if (pty) {
316
+ try {
317
+ pty.kill();
318
+ }
319
+ catch { }
320
+ }
321
+ await transport?.dispose().catch(() => undefined);
322
+ throw new LaunchFailure("PTY_SPAWN_FAILED", `PTY allocation failed before launch confirmation: ${error instanceof Error ? error.name : "unknown"}.`, Boolean(pty?.pid), false);
323
+ }
324
+ }
325
+ async function startBunPtyTransport(request, runtime, shell) {
326
+ let transport;
327
+ const pendingData = [];
328
+ let terminal;
329
+ let subprocess;
330
+ try {
331
+ terminal = new runtime.Terminal({
332
+ cols: request.dimensions.columns,
333
+ rows: request.dimensions.rows,
334
+ data: (_terminal, data) => {
335
+ if (transport)
336
+ transport.receive(data);
337
+ else
338
+ pendingData.push(new Uint8Array(data));
339
+ },
340
+ });
341
+ subprocess = runtime.spawn([shell, "-c", request.command], {
342
+ cwd: request.cwd,
343
+ env: stringEnv({ ...(request.env ?? process.env), TERM: "xterm-256color" }),
344
+ terminal,
345
+ detached: true,
346
+ });
347
+ if (!subprocess.pid)
348
+ throw new Error("Bun.spawn returned no pid");
349
+ transport = new BunPtyTransport(terminal, subprocess);
350
+ request.onLaunchIdentity?.({
351
+ pid: transport.pid,
352
+ processGroupId: transport.processGroupId,
353
+ identity: transport.identity,
354
+ });
355
+ for (const data of pendingData)
356
+ transport.receive(data);
357
+ void subprocess.exited.then((exitCode) => transport?.exited(exitCode, null), () => transport?.exited(1, null));
358
+ return { transport };
359
+ }
360
+ catch (error) {
361
+ try {
362
+ subprocess?.kill("SIGKILL");
363
+ }
364
+ catch { }
365
+ await transport?.dispose().catch(() => undefined);
366
+ try {
367
+ if (terminal && !terminal.closed)
368
+ terminal.close();
369
+ }
370
+ catch { }
371
+ throw new LaunchFailure("PTY_SPAWN_FAILED", `Bun PTY allocation failed before launch confirmation: ${error instanceof Error ? error.name : "unknown"}.`, Boolean(subprocess?.pid), false);
372
+ }
373
+ }
374
+ export async function startPtyTransport(request, overrides = {}) {
375
+ const shell = overrides.shell === undefined ? resolveShell() : overrides.shell;
376
+ if (!shell) {
377
+ throw new LaunchFailure("SHELL_NOT_FOUND", "No usable command shell was found for an interactive session.", false, false);
378
+ }
379
+ if (overrides.module) {
380
+ return await startNodePtyTransport(request, overrides.module, shell);
381
+ }
382
+ const runtime = bunRuntime();
383
+ if (runtime)
384
+ return await startBunPtyTransport(request, runtime, shell);
385
+ const module = await loadNodePty();
386
+ if (module)
387
+ return await startNodePtyTransport(request, module, shell);
388
+ throw new LaunchFailure("PTY_UNAVAILABLE", loadFailureReason ?? "PTY capability is unavailable on this target.", false, false);
389
+ }
390
+ //# sourceMappingURL=transport-node-pty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-node-pty.js","sourceRoot":"","sources":["../../src/interactive-session/transport-node-pty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EACL,aAAa,EACb,eAAe,GAOhB,MAAM,gBAAgB,CAAC;AAoExB,MAAM,gBAAgB,GAAG,UAAU,CAAC;AACpC,IAAI,WAA+D,CAAC;AACpE,IAAI,iBAAqC,CAAC;AAE1C,SAAS,UAAU,CAAC,WAA4B,OAAO,CAAC,QAAQ;IAC9D,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,SAAS,GAAI,UAAoD,CAAC,GAAG,CAAC;IAC5E,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,OAAO,GAAG,SAAoC,CAAC;IACrD,OAAO,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;QAClF,CAAC,CAAE,OAA0B;QAC7B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,WAAW,KAAK,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAEZ,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3D,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;gBACxC,iBAAiB,GAAG,+CAA+C,CAAC;gBACpE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,iBAAiB,GAAG,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChF,CAAC,CAAC,2CAA2C;gBAC7C,CAAC,CAAC,uDAAuD,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,MAAM,WAAW,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAA4B,OAAO,CAAC,QAAQ;IAE5C,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,IAAI,MAAM;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,QAAQ;QACR,MAAM,EACJ,iBAAiB;YACjB,CAAC,QAAQ,KAAK,OAAO;gBACnB,CAAC,CAAC,4DAA4D;gBAC9D,CAAC,CAAC,yDAAyD,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,WAAW,GAAG,SAAS,CAAC;IACxB,iBAAiB,GAAG,SAAS,CAAC;AAChC,CAAC;AAED,MAAe,gBAAgB;IACpB,IAAI,GAAG,KAAc,CAAC;IAIZ,eAAe,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC9D,aAAa,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC7D,aAAa,GAAsB,EAAE,CAAC;IAC/C,OAAO,CAA6B;IACpC,WAAW,GAAG,KAAK,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;IACnB,gBAAgB,GAAG,CAAC,CAAC;IACZ,YAAY,GAAG,IAAI,GAAG,EAInC,CAAC;IASL,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,KAAK;YACV,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,CAAC,CAAE,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,EAAY,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG;gBACb,UAAU,EAAE,IAAI,CAAC,gBAAgB;gBACjC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;gBACrC,OAAO;aACR,CAAC;YACF,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,MAIhB;QACC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC1C,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC3C,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAES,iBAAiB;QACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,QAA0C;QACjD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,QAA2C;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO;YAAE,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC,CAAC;QAChE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAES,UAAU,CAAC,KAAsB;QACzC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IAES,QAAQ,CAAC,OAAuB;QACxC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;CACF;AAED,MAAM,gBAAiB,SAAQ,gBAAgB;IAMhB;IALpB,GAAG,CAAS;IACZ,cAAc,CAAqB;IACnC,QAAQ,CAAqB;IACrB,aAAa,GAA+B,EAAE,CAAC;IAEhE,YAA6B,GAAmB;QAC9C,KAAK,EAAE,CAAC;QADmB,QAAG,GAAH,GAAG,CAAgB;QAE9C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,qBAAqB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ;gBACtB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC3C,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC;gBACZ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,QAAQ;gBACR,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAiB;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA8B;QACzC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,WAAW;QACT,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAA6B;QACxD,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnD,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,eAAgB,SAAQ,gBAAgB;IAMzB;IACA;IANV,GAAG,CAAS;IACZ,cAAc,CAAqB;IACnC,QAAQ,CAAqB;IAEtC,YACmB,QAAyB,EACzB,UAA6B;QAE9C,KAAK,EAAE,CAAC;QAHS,aAAQ,GAAR,QAAQ,CAAiB;QACzB,eAAU,GAAV,UAAU,CAAmB;QAG9C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,qBAAqB,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,CAAC,IAAgB;QACtB,IAAI,CAAC,UAAU,CAAC;YACd,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,QAAgB,EAAE,UAAyB;QAChD,IAAI,CAAC,QAAQ,CAAC;YACZ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,QAAQ;YACR,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAiB;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,cAAc,KAAK,KAAK,CAAC,MAAM;gBACpC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE;gBACzC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA8B;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,KAAU,CAAC;IAEtB,YAAY,KAAU,CAAC;IAEvB,KAAK,CAAC,sBAAsB,CAAC,IAA6B;QACxD,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnD,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1B,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,SAAS,SAAS,CAAC,GAAsB;IACvC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,KAAK,UAAU,qBAAqB,CAClC,OAA2D,EAC3D,MAAyB,EACzB,KAAa;IAEb,IAAI,GAA+B,CAAC;IACpC,IAAI,SAAuC,CAAC;IAC5C,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,CAAC,KAAK,CAChB,KAAK,EACL,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAChF;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;YAC3E,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;YAChC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;YAC7B,IAAI,EAAE,gBAAgB;YACtB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CACF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1D,SAAS,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACzB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC7B,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,IAAI,aAAa,CACrB,kBAAkB,EAClB,qDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SACxC,GAAG,EACH,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EACjB,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAA2D,EAC3D,OAAuB,EACvB,KAAa;IAEb,IAAI,SAAsC,CAAC;IAC3C,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,IAAI,QAAqC,CAAC;IAC1C,IAAI,UAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;YAChC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;YAC7B,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;gBACxB,IAAI,SAAS;oBAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;oBAClC,WAAW,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;QACH,UAAU,GAAG,OAAO,CAAC,KAAK,CACxB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAC9B;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;YAC3E,QAAQ;YACR,QAAQ,EAAE,IAAI;SACf,CACF,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAClE,SAAS,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACzB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC7B,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,WAAW;YAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,CACzB,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC/C,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CACjC,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,IAAI,aAAa,CACrB,kBAAkB,EAClB,yDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SACxC,GAAG,EACH,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EACxB,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA2D,EAC3D,YAA+B,EAAE;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,+DAA+D,EAC/D,KAAK,EACL,KAAK,CACN,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,MAAM,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,OAAO;QAAE,OAAO,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,IAAI,MAAM;QAAE,OAAO,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,iBAAiB,IAAI,+CAA+C,EACpE,KAAK,EACL,KAAK,CACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Managed-pipe transport. Used directly for `terminalMode: "pipe"` and as the
3
+ * single fallback for `"preferred"` when PTY capability is unavailable.
4
+ *
5
+ * This module never imports or probes PTY code, and it does not touch the spawn
6
+ * options used by `shell.ts` or `jobs.ts`.
7
+ */
8
+ import { type LaunchRequest, type LaunchResult } from "./transport.js";
9
+ export declare function startPipeTransport(request: LaunchRequest): Promise<LaunchResult>;