@tokenfactory/acc-runner 0.44.7 → 0.44.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 (187) hide show
  1. package/README.md +38 -0
  2. package/dist/attachments/codex-stage.d.ts +11 -0
  3. package/dist/attachments/codex-stage.d.ts.map +1 -0
  4. package/dist/attachments/codex-stage.js +82 -0
  5. package/dist/attachments/codex-stage.js.map +1 -0
  6. package/dist/attachments/fetch-attachment.d.ts +17 -0
  7. package/dist/attachments/fetch-attachment.d.ts.map +1 -1
  8. package/dist/attachments/fetch-attachment.js +134 -6
  9. package/dist/attachments/fetch-attachment.js.map +1 -1
  10. package/dist/attachments/index.d.ts +2 -1
  11. package/dist/attachments/index.d.ts.map +1 -1
  12. package/dist/attachments/index.js +2 -1
  13. package/dist/attachments/index.js.map +1 -1
  14. package/dist/build-info.generated.d.ts +1 -1
  15. package/dist/build-info.generated.js +2 -2
  16. package/dist/commit-sha.d.ts +31 -0
  17. package/dist/commit-sha.d.ts.map +1 -0
  18. package/dist/commit-sha.js +31 -0
  19. package/dist/commit-sha.js.map +1 -0
  20. package/dist/companion-run.d.ts.map +1 -1
  21. package/dist/companion-run.js +14 -1
  22. package/dist/companion-run.js.map +1 -1
  23. package/dist/doctor.d.ts +16 -0
  24. package/dist/doctor.d.ts.map +1 -1
  25. package/dist/doctor.js +107 -0
  26. package/dist/doctor.js.map +1 -1
  27. package/dist/engines/codex-chat.d.ts +24 -4
  28. package/dist/engines/codex-chat.d.ts.map +1 -1
  29. package/dist/engines/codex-chat.js +102 -20
  30. package/dist/engines/codex-chat.js.map +1 -1
  31. package/dist/login.d.ts.map +1 -1
  32. package/dist/login.js +7 -1
  33. package/dist/login.js.map +1 -1
  34. package/dist/machine-console/index.d.ts +37 -0
  35. package/dist/machine-console/index.d.ts.map +1 -0
  36. package/dist/machine-console/index.js +263 -0
  37. package/dist/machine-console/index.js.map +1 -0
  38. package/dist/machine-console/policy.d.ts +16 -0
  39. package/dist/machine-console/policy.d.ts.map +1 -0
  40. package/dist/machine-console/policy.js +83 -0
  41. package/dist/machine-console/policy.js.map +1 -0
  42. package/dist/machine-console/redact.d.ts +12 -0
  43. package/dist/machine-console/redact.d.ts.map +1 -0
  44. package/dist/machine-console/redact.js +48 -0
  45. package/dist/machine-console/redact.js.map +1 -0
  46. package/dist/machine-console/transport.d.ts +57 -0
  47. package/dist/machine-console/transport.d.ts.map +1 -0
  48. package/dist/machine-console/transport.js +170 -0
  49. package/dist/machine-console/transport.js.map +1 -0
  50. package/dist/mcp-spawn.d.ts +2 -1
  51. package/dist/mcp-spawn.d.ts.map +1 -1
  52. package/dist/mcp-spawn.js +2 -2
  53. package/dist/mcp-spawn.js.map +1 -1
  54. package/dist/preview-environments/control-plane.d.ts +11 -0
  55. package/dist/preview-environments/control-plane.d.ts.map +1 -0
  56. package/dist/preview-environments/control-plane.js +49 -0
  57. package/dist/preview-environments/control-plane.js.map +1 -0
  58. package/dist/preview-environments/http-provider.d.ts +13 -0
  59. package/dist/preview-environments/http-provider.d.ts.map +1 -0
  60. package/dist/preview-environments/http-provider.js +64 -0
  61. package/dist/preview-environments/http-provider.js.map +1 -0
  62. package/dist/preview-environments/profiles.d.ts +6 -0
  63. package/dist/preview-environments/profiles.d.ts.map +1 -0
  64. package/dist/preview-environments/profiles.js +34 -0
  65. package/dist/preview-environments/profiles.js.map +1 -0
  66. package/dist/preview-environments/safety.d.ts +7 -0
  67. package/dist/preview-environments/safety.d.ts.map +1 -0
  68. package/dist/preview-environments/safety.js +47 -0
  69. package/dist/preview-environments/safety.js.map +1 -0
  70. package/dist/preview-environments/service.d.ts +36 -0
  71. package/dist/preview-environments/service.d.ts.map +1 -0
  72. package/dist/preview-environments/service.js +149 -0
  73. package/dist/preview-environments/service.js.map +1 -0
  74. package/dist/preview-environments/types.d.ts +60 -0
  75. package/dist/preview-environments/types.d.ts.map +1 -0
  76. package/dist/preview-environments/types.js +2 -0
  77. package/dist/preview-environments/types.js.map +1 -0
  78. package/dist/production-migrations/command.d.ts +3 -0
  79. package/dist/production-migrations/command.d.ts.map +1 -0
  80. package/dist/production-migrations/command.js +21 -0
  81. package/dist/production-migrations/command.js.map +1 -0
  82. package/dist/production-migrations/executor.d.ts +59 -0
  83. package/dist/production-migrations/executor.d.ts.map +1 -0
  84. package/dist/production-migrations/executor.js +161 -0
  85. package/dist/production-migrations/executor.js.map +1 -0
  86. package/dist/production-migrations/pg-target.d.ts +22 -0
  87. package/dist/production-migrations/pg-target.d.ts.map +1 -0
  88. package/dist/production-migrations/pg-target.js +87 -0
  89. package/dist/production-migrations/pg-target.js.map +1 -0
  90. package/dist/production-migrations/profiles.d.ts +5 -0
  91. package/dist/production-migrations/profiles.d.ts.map +1 -0
  92. package/dist/production-migrations/profiles.js +39 -0
  93. package/dist/production-migrations/profiles.js.map +1 -0
  94. package/dist/production-migrations/service.d.ts +39 -0
  95. package/dist/production-migrations/service.d.ts.map +1 -0
  96. package/dist/production-migrations/service.js +166 -0
  97. package/dist/production-migrations/service.js.map +1 -0
  98. package/dist/program.d.ts.map +1 -1
  99. package/dist/program.js +17 -0
  100. package/dist/program.js.map +1 -1
  101. package/dist/runtime/worktree.d.ts.map +1 -1
  102. package/dist/runtime/worktree.js +23 -1
  103. package/dist/runtime/worktree.js.map +1 -1
  104. package/dist/secure-execution/auto-lease.d.ts +57 -0
  105. package/dist/secure-execution/auto-lease.d.ts.map +1 -0
  106. package/dist/secure-execution/auto-lease.js +116 -0
  107. package/dist/secure-execution/auto-lease.js.map +1 -0
  108. package/dist/secure-execution/command-policy.d.ts +5 -0
  109. package/dist/secure-execution/command-policy.d.ts.map +1 -0
  110. package/dist/secure-execution/command-policy.js +95 -0
  111. package/dist/secure-execution/command-policy.js.map +1 -0
  112. package/dist/secure-execution/confinement.d.ts +3 -0
  113. package/dist/secure-execution/confinement.d.ts.map +1 -0
  114. package/dist/secure-execution/confinement.js +18 -0
  115. package/dist/secure-execution/confinement.js.map +1 -0
  116. package/dist/secure-execution/engine.d.ts +24 -0
  117. package/dist/secure-execution/engine.d.ts.map +1 -0
  118. package/dist/secure-execution/engine.js +272 -0
  119. package/dist/secure-execution/engine.js.map +1 -0
  120. package/dist/secure-execution/index.d.ts +7 -0
  121. package/dist/secure-execution/index.d.ts.map +1 -0
  122. package/dist/secure-execution/index.js +6 -0
  123. package/dist/secure-execution/index.js.map +1 -0
  124. package/dist/secure-execution/node-pty.d.ts +11 -0
  125. package/dist/secure-execution/node-pty.d.ts.map +1 -0
  126. package/dist/secure-execution/node-pty.js +27 -0
  127. package/dist/secure-execution/node-pty.js.map +1 -0
  128. package/dist/secure-execution/types.d.ts +176 -0
  129. package/dist/secure-execution/types.d.ts.map +1 -0
  130. package/dist/secure-execution/types.js +2 -0
  131. package/dist/secure-execution/types.js.map +1 -0
  132. package/dist/staging-migrations/command.d.ts +2 -0
  133. package/dist/staging-migrations/command.d.ts.map +1 -0
  134. package/dist/staging-migrations/command.js +58 -0
  135. package/dist/staging-migrations/command.js.map +1 -0
  136. package/dist/staging-migrations/executor.d.ts +49 -0
  137. package/dist/staging-migrations/executor.d.ts.map +1 -0
  138. package/dist/staging-migrations/executor.js +125 -0
  139. package/dist/staging-migrations/executor.js.map +1 -0
  140. package/dist/staging-migrations/pg-target.d.ts +20 -0
  141. package/dist/staging-migrations/pg-target.d.ts.map +1 -0
  142. package/dist/staging-migrations/pg-target.js +63 -0
  143. package/dist/staging-migrations/pg-target.js.map +1 -0
  144. package/dist/staging-migrations/profiles.d.ts +5 -0
  145. package/dist/staging-migrations/profiles.d.ts.map +1 -0
  146. package/dist/staging-migrations/profiles.js +31 -0
  147. package/dist/staging-migrations/profiles.js.map +1 -0
  148. package/dist/staging-migrations/service.d.ts +40 -0
  149. package/dist/staging-migrations/service.d.ts.map +1 -0
  150. package/dist/staging-migrations/service.js +157 -0
  151. package/dist/staging-migrations/service.js.map +1 -0
  152. package/dist/supervisor.d.ts +15 -0
  153. package/dist/supervisor.d.ts.map +1 -0
  154. package/dist/supervisor.js +54 -0
  155. package/dist/supervisor.js.map +1 -0
  156. package/dist/terminal/http-carrier.d.ts +17 -0
  157. package/dist/terminal/http-carrier.d.ts.map +1 -0
  158. package/dist/terminal/http-carrier.js +39 -0
  159. package/dist/terminal/http-carrier.js.map +1 -0
  160. package/dist/terminal/pty-adapter.d.ts +88 -0
  161. package/dist/terminal/pty-adapter.d.ts.map +1 -0
  162. package/dist/terminal/pty-adapter.js +252 -0
  163. package/dist/terminal/pty-adapter.js.map +1 -0
  164. package/dist/terminal/transport-contract.d.ts +115 -0
  165. package/dist/terminal/transport-contract.d.ts.map +1 -0
  166. package/dist/terminal/transport-contract.js +2 -0
  167. package/dist/terminal/transport-contract.js.map +1 -0
  168. package/dist/terminal/transport.d.ts +32 -0
  169. package/dist/terminal/transport.d.ts.map +1 -0
  170. package/dist/terminal/transport.js +208 -0
  171. package/dist/terminal/transport.js.map +1 -0
  172. package/dist/watch-chat/wire.d.ts.map +1 -1
  173. package/dist/watch-chat/wire.js +14 -1
  174. package/dist/watch-chat/wire.js.map +1 -1
  175. package/dist/watch.d.ts +3 -0
  176. package/dist/watch.d.ts.map +1 -1
  177. package/dist/watch.js +57 -0
  178. package/dist/watch.js.map +1 -1
  179. package/package.json +6 -1
  180. package/scripts/com.tokenfactory.acc-runner-dedicated.plist +64 -0
  181. package/scripts/com.tokenfactory.acc-runner.plist +90 -0
  182. package/scripts/gen-build-info.d.mts +3 -0
  183. package/scripts/gen-build-info.mjs +72 -0
  184. package/scripts/install-launchd.sh +235 -0
  185. package/scripts/setup-dedicated-runner-darwin.sh +75 -0
  186. package/scripts/setup-dedicated-runner-linux.sh +173 -0
  187. package/scripts/uninstall-launchd.sh +67 -0
@@ -0,0 +1,17 @@
1
+ import type { TerminalEphemeralCarrier, TerminalRunnerMessage } from "./transport-contract.js";
2
+ export interface TerminalHttpCarrierOptions {
3
+ baseUrl: string;
4
+ accessToken: () => string | Promise<string>;
5
+ leaseId: string;
6
+ fetchImpl?: typeof fetch;
7
+ }
8
+ /** One-shot private upload carrier. It retains no frame or credential. */
9
+ export declare class TerminalHttpCarrier implements TerminalEphemeralCarrier {
10
+ private readonly endpoint;
11
+ private readonly token;
12
+ private readonly leaseId;
13
+ private readonly fetchImpl;
14
+ constructor(options: TerminalHttpCarrierOptions);
15
+ publish(message: TerminalRunnerMessage): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=http-carrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-carrier.d.ts","sourceRoot":"","sources":["../../src/terminal/http-carrier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE/F,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,0EAA0E;AAC1E,qBAAa,mBAAoB,YAAW,wBAAwB;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,OAAO,EAAE,0BAA0B;IAYzC,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkB7D"}
@@ -0,0 +1,39 @@
1
+ /** One-shot private upload carrier. It retains no frame or credential. */
2
+ export class TerminalHttpCarrier {
3
+ endpoint;
4
+ token;
5
+ leaseId;
6
+ fetchImpl;
7
+ constructor(options) {
8
+ const baseUrl = options.baseUrl.trim().replace(/\/+$/, "");
9
+ if (!baseUrl.startsWith("https://") && !baseUrl.startsWith("http://localhost")) {
10
+ throw new Error("terminal carrier requires HTTPS");
11
+ }
12
+ if (!options.leaseId.trim())
13
+ throw new Error("terminal carrier requires a lease");
14
+ this.endpoint = `${baseUrl}/api/terminal/runner-ingest`;
15
+ this.token = options.accessToken;
16
+ this.leaseId = options.leaseId;
17
+ this.fetchImpl = options.fetchImpl ?? fetch;
18
+ }
19
+ async publish(message) {
20
+ const accessToken = (await this.token()).trim();
21
+ if (!accessToken)
22
+ throw new Error("terminal carrier requires runner authentication");
23
+ const response = await this.fetchImpl(this.endpoint, {
24
+ method: "POST",
25
+ headers: {
26
+ Authorization: `Bearer ${accessToken}`,
27
+ "Content-Type": "application/json",
28
+ "x-acc-terminal-lease": this.leaseId,
29
+ },
30
+ body: JSON.stringify(message),
31
+ signal: AbortSignal.timeout(15_000),
32
+ });
33
+ if (!response.ok) {
34
+ const body = await response.json().catch(() => ({}));
35
+ throw new Error(body.error ?? `terminal carrier rejected the frame (${response.status})`);
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=http-carrier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-carrier.js","sourceRoot":"","sources":["../../src/terminal/http-carrier.ts"],"names":[],"mappings":"AASA,0EAA0E;AAC1E,MAAM,OAAO,mBAAmB;IACb,QAAQ,CAAS;IACjB,KAAK,CAA4C;IACjD,OAAO,CAAS;IAChB,SAAS,CAAe;IAEzC,YAAY,OAAmC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAClF,IAAI,CAAC,QAAQ,GAAG,GAAG,OAAO,6BAA6B,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,sBAAsB,EAAE,IAAI,CAAC,OAAO;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,wCAAwC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,88 @@
1
+ import type { RunnerConfig } from "../config.js";
2
+ export declare const TERMINAL_RUNNER_ENABLED_ENV = "ACC_RUNNER_INTERACTIVE_TERMINAL";
3
+ export declare const TERMINAL_REDACTION_POLICY_VERSION = "machine-redaction.v1";
4
+ export declare const MAX_TERMINAL_INPUT_BYTES: number;
5
+ export declare const MAX_TERMINAL_OUTPUT_BYTES: number;
6
+ export interface TerminalPtyExit {
7
+ exitCode: number;
8
+ signal?: number;
9
+ }
10
+ export interface TerminalPtyProcess {
11
+ readonly pid: number;
12
+ onData(listener: (data: string) => void): {
13
+ dispose(): void;
14
+ };
15
+ onExit(listener: (event: TerminalPtyExit) => void): {
16
+ dispose(): void;
17
+ };
18
+ write(data: string): void;
19
+ resize(cols: number, rows: number): void;
20
+ kill(signal?: string): void;
21
+ }
22
+ export interface TerminalPtyFactory {
23
+ spawn(file: string, args: readonly string[], options: {
24
+ name: string;
25
+ cwd: string;
26
+ env: Record<string, string>;
27
+ cols: number;
28
+ rows: number;
29
+ }): TerminalPtyProcess;
30
+ }
31
+ export interface OpenTerminalPtyRequest {
32
+ terminalSessionId: string;
33
+ repo: string;
34
+ cols: number;
35
+ rows: number;
36
+ }
37
+ export interface TerminalOutputFrame {
38
+ terminalSessionId: string;
39
+ outputSeq: number;
40
+ stream: "stdout";
41
+ encoding: "base64";
42
+ data: string;
43
+ byteLength: number;
44
+ redactionPolicyVersion: typeof TERMINAL_REDACTION_POLICY_VERSION;
45
+ redactionApplied: true;
46
+ }
47
+ export interface TerminalInputReceipt {
48
+ inputId: string;
49
+ inputSeq: number;
50
+ runnerReceiptId: string;
51
+ inputAckCursor: number;
52
+ status: "accepted";
53
+ }
54
+ export interface TerminalExitOutcome {
55
+ terminalSessionId: string;
56
+ exitCode: number;
57
+ signal?: number;
58
+ reason: "completed" | "user_terminated" | "failed";
59
+ finalOutputSeq: number;
60
+ }
61
+ export interface TerminalRunnerSession {
62
+ readonly terminalSessionId: string;
63
+ readonly pid: number;
64
+ readonly closed: Promise<TerminalExitOutcome>;
65
+ writeInput(inputId: string, inputSeq: number, data: string): TerminalInputReceipt;
66
+ resize(resizeSeq: number, cols: number, rows: number): boolean;
67
+ terminate(): Promise<TerminalExitOutcome>;
68
+ }
69
+ export interface OpenTerminalPtyDeps {
70
+ cfg: RunnerConfig;
71
+ request: OpenTerminalPtyRequest;
72
+ onOutput: (frame: TerminalOutputFrame) => void | Promise<void>;
73
+ factory?: TerminalPtyFactory;
74
+ env?: NodeJS.ProcessEnv;
75
+ terminateGraceMs?: number;
76
+ }
77
+ export declare class TerminalRunnerError extends Error {
78
+ readonly code: string;
79
+ constructor(code: string, message: string);
80
+ }
81
+ export declare function terminalRunnerEnabled(env?: NodeJS.ProcessEnv): boolean;
82
+ /**
83
+ * Allocate one dark, runner-local PTY. This adapter has no polling, RPC, socket,
84
+ * browser, or product-surface wiring; the explicit environment kill switch must
85
+ * be on and a future authenticated gateway must supply every call.
86
+ */
87
+ export declare function openTerminalPty(deps: OpenTerminalPtyDeps): Promise<TerminalRunnerSession>;
88
+ //# sourceMappingURL=pty-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-adapter.d.ts","sourceRoot":"","sources":["../../src/terminal/pty-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { machineCommandEnv, redactMachineOutput, resolveMachineRepoPath, } from "../machine-console/index.js";
3
+ export const TERMINAL_RUNNER_ENABLED_ENV = "ACC_RUNNER_INTERACTIVE_TERMINAL";
4
+ export const TERMINAL_REDACTION_POLICY_VERSION = "machine-redaction.v1";
5
+ export const MAX_TERMINAL_INPUT_BYTES = 16 * 1024;
6
+ export const MAX_TERMINAL_OUTPUT_BYTES = 64 * 1024;
7
+ const OUTPUT_CHUNK_BYTES = 48 * 1024;
8
+ const TERMINATE_GRACE_MS = 5_000;
9
+ export class TerminalRunnerError extends Error {
10
+ code;
11
+ constructor(code, message) {
12
+ super(message);
13
+ this.code = code;
14
+ this.name = "TerminalRunnerError";
15
+ }
16
+ }
17
+ export function terminalRunnerEnabled(env = process.env) {
18
+ return (env[TERMINAL_RUNNER_ENABLED_ENV] ?? "").trim() === "1";
19
+ }
20
+ function assertDimensions(cols, rows) {
21
+ if (!Number.isInteger(cols) || cols < 1 || cols > 500) {
22
+ throw new TerminalRunnerError("invalid_dimensions", "cols must be an integer from 1 to 500");
23
+ }
24
+ if (!Number.isInteger(rows) || rows < 1 || rows > 200) {
25
+ throw new TerminalRunnerError("invalid_dimensions", "rows must be an integer from 1 to 200");
26
+ }
27
+ }
28
+ function closedEnvironment(env) {
29
+ const source = machineCommandEnv(env);
30
+ const out = {
31
+ ACC_INTERACTIVE_TERMINAL: "1",
32
+ TERM: source.TERM || "xterm-256color",
33
+ };
34
+ for (const [name, value] of Object.entries(source)) {
35
+ if (typeof value === "string")
36
+ out[name] = value;
37
+ }
38
+ return out;
39
+ }
40
+ function splitByBytes(value, maxBytes = OUTPUT_CHUNK_BYTES) {
41
+ const chunks = [];
42
+ let pending = value;
43
+ while (Buffer.byteLength(pending) > maxBytes) {
44
+ let end = Math.min(pending.length, maxBytes);
45
+ while (end > 1 && Buffer.byteLength(pending.slice(0, end)) > maxBytes)
46
+ end -= 1;
47
+ chunks.push(pending.slice(0, end));
48
+ pending = pending.slice(end);
49
+ }
50
+ if (pending)
51
+ chunks.push(pending);
52
+ return chunks;
53
+ }
54
+ /** Emit complete tokens promptly while retaining the last token across PTY chunks. */
55
+ class TerminalStreamingRedactor {
56
+ pending = "";
57
+ push(value) {
58
+ this.pending += value;
59
+ const cut = Math.max(this.pending.lastIndexOf(" "), this.pending.lastIndexOf("\n"), this.pending.lastIndexOf("\r"), this.pending.lastIndexOf("\t"));
60
+ if (cut < 0) {
61
+ if (Buffer.byteLength(this.pending) > MAX_TERMINAL_OUTPUT_BYTES) {
62
+ throw new TerminalRunnerError("redaction_buffer_exceeded", "Unbroken PTY output exceeded the redaction boundary");
63
+ }
64
+ return "";
65
+ }
66
+ const ready = this.pending.slice(0, cut + 1);
67
+ this.pending = this.pending.slice(cut + 1);
68
+ return redactMachineOutput(ready);
69
+ }
70
+ finish() {
71
+ const ready = redactMachineOutput(this.pending);
72
+ this.pending = "";
73
+ return ready;
74
+ }
75
+ }
76
+ async function defaultPtyFactory() {
77
+ const moduleName = "node-pty";
78
+ try {
79
+ return await import(moduleName);
80
+ }
81
+ catch (error) {
82
+ throw new TerminalRunnerError("pty_unavailable", `Interactive terminal support is installed incorrectly: ${error.message}`);
83
+ }
84
+ }
85
+ /**
86
+ * Allocate one dark, runner-local PTY. This adapter has no polling, RPC, socket,
87
+ * browser, or product-surface wiring; the explicit environment kill switch must
88
+ * be on and a future authenticated gateway must supply every call.
89
+ */
90
+ export async function openTerminalPty(deps) {
91
+ const env = deps.env ?? process.env;
92
+ if (!terminalRunnerEnabled(env)) {
93
+ throw new TerminalRunnerError("terminal_disabled", "Interactive terminal runner is disabled");
94
+ }
95
+ if (!deps.request.terminalSessionId.trim()) {
96
+ throw new TerminalRunnerError("invalid_session", "terminalSessionId is required");
97
+ }
98
+ assertDimensions(deps.request.cols, deps.request.rows);
99
+ const cwd = resolveMachineRepoPath(deps.cfg, deps.request.repo);
100
+ const factory = deps.factory ?? await defaultPtyFactory();
101
+ const shell = process.platform === "win32" ? (env.ComSpec || "cmd.exe") : "/bin/sh";
102
+ const args = process.platform === "win32" ? [] : ["-l"];
103
+ const pty = factory.spawn(shell, args, {
104
+ name: "xterm-256color",
105
+ cwd,
106
+ env: closedEnvironment(env),
107
+ cols: deps.request.cols,
108
+ rows: deps.request.rows,
109
+ });
110
+ const inputReceipts = new Map();
111
+ const redactor = new TerminalStreamingRedactor();
112
+ let inputCursor = 0;
113
+ let resizeCursor = 0;
114
+ let outputCursor = 0;
115
+ let terminating = false;
116
+ let settled = false;
117
+ let outputFailure = false;
118
+ let outputChain = Promise.resolve();
119
+ let hardKill;
120
+ let resolveClosed;
121
+ const closed = new Promise((resolve) => { resolveClosed = resolve; });
122
+ const emit = (value) => {
123
+ for (const chunk of splitByBytes(value)) {
124
+ const bytes = Buffer.from(chunk, "utf8");
125
+ outputCursor += 1;
126
+ const frame = {
127
+ terminalSessionId: deps.request.terminalSessionId,
128
+ outputSeq: outputCursor,
129
+ stream: "stdout",
130
+ encoding: "base64",
131
+ data: bytes.toString("base64"),
132
+ byteLength: bytes.byteLength,
133
+ redactionPolicyVersion: TERMINAL_REDACTION_POLICY_VERSION,
134
+ redactionApplied: true,
135
+ };
136
+ outputChain = outputChain.then(() => deps.onOutput(frame)).catch(() => {
137
+ outputFailure = true;
138
+ if (!terminating) {
139
+ terminating = true;
140
+ pty.kill("SIGTERM");
141
+ hardKill = setTimeout(() => {
142
+ if (!settled)
143
+ pty.kill("SIGKILL");
144
+ }, deps.terminateGraceMs ?? TERMINATE_GRACE_MS);
145
+ hardKill.unref?.();
146
+ }
147
+ });
148
+ }
149
+ };
150
+ const dataSubscription = pty.onData((data) => {
151
+ try {
152
+ emit(redactor.push(data));
153
+ }
154
+ catch {
155
+ outputFailure = true;
156
+ if (!terminating) {
157
+ terminating = true;
158
+ pty.kill("SIGTERM");
159
+ hardKill = setTimeout(() => {
160
+ if (!settled)
161
+ pty.kill("SIGKILL");
162
+ }, deps.terminateGraceMs ?? TERMINATE_GRACE_MS);
163
+ hardKill.unref?.();
164
+ }
165
+ }
166
+ });
167
+ const exitSubscription = pty.onExit((event) => {
168
+ if (settled)
169
+ return;
170
+ settled = true;
171
+ if (hardKill)
172
+ clearTimeout(hardKill);
173
+ emit(redactor.finish());
174
+ void outputChain.finally(() => {
175
+ dataSubscription.dispose();
176
+ exitSubscription.dispose();
177
+ resolveClosed({
178
+ terminalSessionId: deps.request.terminalSessionId,
179
+ exitCode: event.exitCode,
180
+ signal: event.signal,
181
+ reason: outputFailure ? "failed" : terminating ? "user_terminated" : event.exitCode === 0 ? "completed" : "failed",
182
+ finalOutputSeq: outputCursor,
183
+ });
184
+ });
185
+ });
186
+ return {
187
+ terminalSessionId: deps.request.terminalSessionId,
188
+ pid: pty.pid,
189
+ closed,
190
+ writeInput: (inputId, inputSeq, data) => {
191
+ if (settled || terminating)
192
+ throw new TerminalRunnerError("terminal_not_running", "Terminal is not accepting input");
193
+ if (!inputId.trim())
194
+ throw new TerminalRunnerError("invalid_input", "inputId is required");
195
+ if (!Number.isSafeInteger(inputSeq) || inputSeq <= 0) {
196
+ throw new TerminalRunnerError("invalid_input_sequence", "inputSeq must be positive");
197
+ }
198
+ const byteLength = Buffer.byteLength(data, "utf8");
199
+ if (byteLength > MAX_TERMINAL_INPUT_BYTES) {
200
+ throw new TerminalRunnerError("input_too_large", "PTY input exceeds the frame limit");
201
+ }
202
+ const digest = createHash("sha256").update(data).digest("hex");
203
+ const existing = inputReceipts.get(inputId);
204
+ if (existing) {
205
+ if (existing.digest !== digest || existing.receipt.inputSeq !== inputSeq) {
206
+ throw new TerminalRunnerError("input_id_conflict", "inputId was reused with different input");
207
+ }
208
+ return existing.receipt;
209
+ }
210
+ if (inputSeq !== inputCursor + 1) {
211
+ throw new TerminalRunnerError("input_sequence_gap", "inputSeq must advance by exactly one");
212
+ }
213
+ pty.write(data);
214
+ inputCursor = inputSeq;
215
+ const receipt = Object.freeze({
216
+ inputId,
217
+ inputSeq,
218
+ runnerReceiptId: randomUUID(),
219
+ inputAckCursor: inputCursor,
220
+ status: "accepted",
221
+ });
222
+ inputReceipts.set(inputId, { digest, receipt });
223
+ return receipt;
224
+ },
225
+ resize: (resizeSeq, cols, rows) => {
226
+ if (settled || terminating)
227
+ throw new TerminalRunnerError("terminal_not_running", "Terminal cannot be resized");
228
+ assertDimensions(cols, rows);
229
+ if (!Number.isSafeInteger(resizeSeq) || resizeSeq <= 0) {
230
+ throw new TerminalRunnerError("invalid_resize_sequence", "resizeSeq must be positive");
231
+ }
232
+ if (resizeSeq <= resizeCursor)
233
+ return false;
234
+ pty.resize(cols, rows);
235
+ resizeCursor = resizeSeq;
236
+ return true;
237
+ },
238
+ terminate: () => {
239
+ if (settled || terminating)
240
+ return closed;
241
+ terminating = true;
242
+ pty.kill("SIGTERM");
243
+ hardKill = setTimeout(() => {
244
+ if (!settled)
245
+ pty.kill("SIGKILL");
246
+ }, deps.terminateGraceMs ?? TERMINATE_GRACE_MS);
247
+ hardKill.unref?.();
248
+ return closed;
249
+ },
250
+ };
251
+ }
252
+ //# sourceMappingURL=pty-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-adapter.js","sourceRoot":"","sources":["../../src/terminal/pty-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import type { TerminalExitOutcome, TerminalInputReceipt, TerminalOutputFrame } from "./pty-adapter.js";
2
+ export declare const TERMINAL_TRANSPORT_PROTOCOL: "terminal.v1";
3
+ export interface TerminalRunnerLease {
4
+ terminalSessionId: string;
5
+ runnerId: string;
6
+ runnerEpoch: number;
7
+ /** Opaque gateway-issued value. Never persisted or logged by the runner. */
8
+ leaseId: string;
9
+ }
10
+ export interface TerminalRunnerEnvelope<TKind extends string, TPayload> {
11
+ protocol: typeof TERMINAL_TRANSPORT_PROTOCOL;
12
+ kind: TKind;
13
+ messageId: string;
14
+ terminalSessionId: string;
15
+ runnerId: string;
16
+ runnerEpoch: number;
17
+ connectionId: string;
18
+ occurredAt: string;
19
+ payload: TPayload;
20
+ }
21
+ export type TerminalRunnerMessage = TerminalRunnerEnvelope<"runner.hello", {
22
+ runnerId: string;
23
+ runnerEpoch: number;
24
+ pty: {
25
+ supported: true;
26
+ resize: true;
27
+ processGroupStop: true;
28
+ };
29
+ inputAckCursor: number;
30
+ outputSeq: number;
31
+ }> | TerminalRunnerEnvelope<"runner.heartbeat", {
32
+ runnerId: string;
33
+ runnerEpoch: number;
34
+ inputAckCursor: number;
35
+ outputSeq: number;
36
+ }> | TerminalRunnerEnvelope<"input.receipt", TerminalInputReceipt & {
37
+ inputDigest: string;
38
+ byteCount: number;
39
+ }> | TerminalRunnerEnvelope<"output.chunk", TerminalOutputFrame> | TerminalRunnerEnvelope<"runner.exited", TerminalExitOutcome> | TerminalRunnerEnvelope<"runner.reconcile.result", {
40
+ status: "running" | "terminated" | "unknown";
41
+ runnerEpoch: number;
42
+ inputAckCursor: number;
43
+ outputSeq: number;
44
+ exitCode?: number;
45
+ signal?: number;
46
+ }>;
47
+ /** Ephemeral carrier only. Implementations must not retain payload bodies. */
48
+ export interface TerminalEphemeralCarrier {
49
+ publish(message: TerminalRunnerMessage): Promise<void>;
50
+ }
51
+ export interface TerminalInputReceiptMetadata {
52
+ terminalSessionId: string;
53
+ runnerId: string;
54
+ runnerEpoch: number;
55
+ connectionId: string;
56
+ inputId: string;
57
+ inputSeq: number;
58
+ inputDigest: string;
59
+ byteCount: number;
60
+ runnerReceiptId: string;
61
+ inputAckCursor: number;
62
+ status: TerminalInputReceipt["status"];
63
+ }
64
+ export interface TerminalOutputReceiptMetadata {
65
+ terminalSessionId: string;
66
+ runnerId: string;
67
+ runnerEpoch: number;
68
+ outputSeq: number;
69
+ stream: TerminalOutputFrame["stream"];
70
+ byteCount: number;
71
+ outputDigest: string;
72
+ redactionPolicyVersion: string;
73
+ redactionApplied: true;
74
+ }
75
+ export interface TerminalHeartbeatMetadata {
76
+ terminalSessionId: string;
77
+ runnerId: string;
78
+ runnerEpoch: number;
79
+ inputAckCursor: number;
80
+ outputSeq: number;
81
+ occurredAt: string;
82
+ }
83
+ export interface TerminalExitMetadata {
84
+ terminalSessionId: string;
85
+ runnerId: string;
86
+ runnerEpoch: number;
87
+ exitCode: number;
88
+ signal?: number;
89
+ reason: TerminalExitOutcome["reason"];
90
+ finalOutputSeq: number;
91
+ }
92
+ /** Durable metadata boundary. Raw payload fields are impossible to pass. */
93
+ export interface TerminalMetadataSink {
94
+ recordHeartbeat(metadata: TerminalHeartbeatMetadata): Promise<void>;
95
+ recordInputReceipt(metadata: TerminalInputReceiptMetadata): Promise<void>;
96
+ recordOutputReceipt(metadata: TerminalOutputReceiptMetadata): Promise<void>;
97
+ recordExit(metadata: TerminalExitMetadata): Promise<void>;
98
+ }
99
+ export interface TerminalTransportInput {
100
+ inputId: string;
101
+ inputSeq: number;
102
+ encoding: "utf8";
103
+ data: string;
104
+ byteLength: number;
105
+ }
106
+ export interface DarkTerminalRunnerTransportOptions {
107
+ lease: TerminalRunnerLease;
108
+ connectionId: string;
109
+ carrier: TerminalEphemeralCarrier;
110
+ metadata: TerminalMetadataSink;
111
+ env?: NodeJS.ProcessEnv;
112
+ now?: () => number;
113
+ messageId?: () => string;
114
+ }
115
+ //# sourceMappingURL=transport-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-contract.d.ts","sourceRoot":"","sources":["../../src/terminal/transport-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export const TERMINAL_TRANSPORT_PROTOCOL = "terminal.v1";
2
+ //# sourceMappingURL=transport-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-contract.js","sourceRoot":"","sources":["../../src/terminal/transport-contract.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAsB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type TerminalExitOutcome, type TerminalInputReceipt, type TerminalOutputFrame, type TerminalRunnerSession } from "./pty-adapter.js";
2
+ import { type DarkTerminalRunnerTransportOptions, type TerminalRunnerLease, type TerminalTransportInput } from "./transport-contract.js";
3
+ export * from "./transport-contract.js";
4
+ export declare class DarkTerminalRunnerTransport {
5
+ private readonly lease;
6
+ private readonly connectionId;
7
+ private readonly carrier;
8
+ private readonly metadata;
9
+ private readonly now;
10
+ private readonly messageId;
11
+ private session?;
12
+ private inputAckCursor;
13
+ private outputSeq;
14
+ private exitOutcome?;
15
+ private exitPromise?;
16
+ constructor(options: DarkTerminalRunnerTransportOptions);
17
+ bindSession(session: TerminalRunnerSession): void;
18
+ hello(claim: TerminalRunnerLease): Promise<void>;
19
+ heartbeat(claim: TerminalRunnerLease): Promise<void>;
20
+ writeInput(claim: TerminalRunnerLease, input: TerminalTransportInput): Promise<TerminalInputReceipt>;
21
+ resize(claim: TerminalRunnerLease, resizeSeq: number, cols: number, rows: number): boolean;
22
+ acceptOutput(claim: TerminalRunnerLease, frame: TerminalOutputFrame): Promise<void>;
23
+ reconcile(claim: TerminalRunnerLease): Promise<void>;
24
+ terminate(claim: TerminalRunnerLease): Promise<TerminalExitOutcome>;
25
+ settled(): Promise<void>;
26
+ private assertLease;
27
+ private requireSession;
28
+ private envelope;
29
+ private publish;
30
+ private publishExit;
31
+ }
32
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/terminal/transport.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,kCAAkC,EAIvC,KAAK,mBAAmB,EAExB,KAAK,sBAAsB,EAC5B,MAAM,yBAAyB,CAAC;AAEjC,cAAc,yBAAyB,CAAC;AAYxC,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,OAAO,CAAC,CAAwB;IACxC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAC,CAAgB;gBAExB,OAAO,EAAE,kCAAkC;IAmBvD,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAS3C,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,UAAU,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8B1G,MAAM,CAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAKpF,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnF,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,OAAO;YAQD,WAAW;CAe1B"}