@evermore.work/adapter-utils 2026.509.0-canary.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 (93) hide show
  1. package/dist/billing.d.ts +2 -0
  2. package/dist/billing.d.ts.map +1 -0
  3. package/dist/billing.js +16 -0
  4. package/dist/billing.js.map +1 -0
  5. package/dist/billing.test.d.ts +2 -0
  6. package/dist/billing.test.d.ts.map +1 -0
  7. package/dist/billing.test.js +14 -0
  8. package/dist/billing.test.js.map +1 -0
  9. package/dist/command-managed-runtime.d.ts +45 -0
  10. package/dist/command-managed-runtime.d.ts.map +1 -0
  11. package/dist/command-managed-runtime.js +164 -0
  12. package/dist/command-managed-runtime.js.map +1 -0
  13. package/dist/command-managed-runtime.test.d.ts +2 -0
  14. package/dist/command-managed-runtime.test.d.ts.map +1 -0
  15. package/dist/command-managed-runtime.test.js +102 -0
  16. package/dist/command-managed-runtime.test.js.map +1 -0
  17. package/dist/command-redaction.d.ts +3 -0
  18. package/dist/command-redaction.d.ts.map +1 -0
  19. package/dist/command-redaction.js +17 -0
  20. package/dist/command-redaction.js.map +1 -0
  21. package/dist/execution-target-sandbox.test.d.ts +2 -0
  22. package/dist/execution-target-sandbox.test.d.ts.map +1 -0
  23. package/dist/execution-target-sandbox.test.js +392 -0
  24. package/dist/execution-target-sandbox.test.js.map +1 -0
  25. package/dist/execution-target.d.ts +150 -0
  26. package/dist/execution-target.d.ts.map +1 -0
  27. package/dist/execution-target.js +791 -0
  28. package/dist/execution-target.js.map +1 -0
  29. package/dist/execution-target.test.d.ts +2 -0
  30. package/dist/execution-target.test.d.ts.map +1 -0
  31. package/dist/execution-target.test.js +314 -0
  32. package/dist/execution-target.test.js.map +1 -0
  33. package/dist/index.d.ts +8 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +5 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/log-redaction.d.ts +9 -0
  38. package/dist/log-redaction.d.ts.map +1 -0
  39. package/dist/log-redaction.js +88 -0
  40. package/dist/log-redaction.js.map +1 -0
  41. package/dist/remote-execution-env.d.ts +2 -0
  42. package/dist/remote-execution-env.d.ts.map +1 -0
  43. package/dist/remote-execution-env.js +46 -0
  44. package/dist/remote-execution-env.js.map +1 -0
  45. package/dist/remote-managed-runtime.d.ts +31 -0
  46. package/dist/remote-managed-runtime.d.ts.map +1 -0
  47. package/dist/remote-managed-runtime.js +81 -0
  48. package/dist/remote-managed-runtime.js.map +1 -0
  49. package/dist/sandbox-callback-bridge.d.ts +132 -0
  50. package/dist/sandbox-callback-bridge.d.ts.map +1 -0
  51. package/dist/sandbox-callback-bridge.js +925 -0
  52. package/dist/sandbox-callback-bridge.js.map +1 -0
  53. package/dist/sandbox-callback-bridge.test.d.ts +2 -0
  54. package/dist/sandbox-callback-bridge.test.d.ts.map +1 -0
  55. package/dist/sandbox-callback-bridge.test.js +719 -0
  56. package/dist/sandbox-callback-bridge.test.js.map +1 -0
  57. package/dist/sandbox-managed-runtime.d.ts +54 -0
  58. package/dist/sandbox-managed-runtime.d.ts.map +1 -0
  59. package/dist/sandbox-managed-runtime.js +234 -0
  60. package/dist/sandbox-managed-runtime.js.map +1 -0
  61. package/dist/sandbox-managed-runtime.test.d.ts +2 -0
  62. package/dist/sandbox-managed-runtime.test.d.ts.map +1 -0
  63. package/dist/sandbox-managed-runtime.test.js +118 -0
  64. package/dist/sandbox-managed-runtime.test.js.map +1 -0
  65. package/dist/sandbox-shell.d.ts +2 -0
  66. package/dist/sandbox-shell.d.ts.map +1 -0
  67. package/dist/sandbox-shell.js +4 -0
  68. package/dist/sandbox-shell.js.map +1 -0
  69. package/dist/server-utils.d.ts +253 -0
  70. package/dist/server-utils.d.ts.map +1 -0
  71. package/dist/server-utils.js +1522 -0
  72. package/dist/server-utils.js.map +1 -0
  73. package/dist/server-utils.test.d.ts +2 -0
  74. package/dist/server-utils.test.d.ts.map +1 -0
  75. package/dist/server-utils.test.js +685 -0
  76. package/dist/server-utils.test.js.map +1 -0
  77. package/dist/session-compaction.d.ts +25 -0
  78. package/dist/session-compaction.d.ts.map +1 -0
  79. package/dist/session-compaction.js +154 -0
  80. package/dist/session-compaction.js.map +1 -0
  81. package/dist/ssh-fixture.test.d.ts +2 -0
  82. package/dist/ssh-fixture.test.d.ts.map +1 -0
  83. package/dist/ssh-fixture.test.js +214 -0
  84. package/dist/ssh-fixture.test.js.map +1 -0
  85. package/dist/ssh.d.ts +111 -0
  86. package/dist/ssh.d.ts.map +1 -0
  87. package/dist/ssh.js +1098 -0
  88. package/dist/ssh.js.map +1 -0
  89. package/dist/types.d.ts +465 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +5 -0
  92. package/dist/types.js.map +1 -0
  93. package/package.json +41 -0
@@ -0,0 +1,2 @@
1
+ export declare function inferOpenAiCompatibleBiller(env: NodeJS.ProcessEnv, fallback?: string | null): string | null;
2
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAKA,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,GAAE,MAAM,GAAG,IAAe,GACjC,MAAM,GAAG,IAAI,CAWf"}
@@ -0,0 +1,16 @@
1
+ function readEnv(env, key) {
2
+ const value = env[key];
3
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
4
+ }
5
+ export function inferOpenAiCompatibleBiller(env, fallback = "openai") {
6
+ const explicitOpenRouterKey = readEnv(env, "OPENROUTER_API_KEY");
7
+ if (explicitOpenRouterKey)
8
+ return "openrouter";
9
+ const baseUrl = readEnv(env, "OPENAI_BASE_URL") ??
10
+ readEnv(env, "OPENAI_API_BASE") ??
11
+ readEnv(env, "OPENAI_API_BASE_URL");
12
+ if (baseUrl && /openrouter\.ai/i.test(baseUrl))
13
+ return "openrouter";
14
+ return fallback;
15
+ }
16
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA,SAAS,OAAO,CAAC,GAAsB,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAsB,EACtB,WAA0B,QAAQ;IAElC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,qBAAqB;QAAE,OAAO,YAAY,CAAC;IAE/C,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC/B,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC/B,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,YAAY,CAAC;IAEpE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=billing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.test.d.ts","sourceRoot":"","sources":["../src/billing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { inferOpenAiCompatibleBiller } from "./billing.js";
3
+ describe("inferOpenAiCompatibleBiller", () => {
4
+ it("returns openrouter when OPENROUTER_API_KEY is present", () => {
5
+ expect(inferOpenAiCompatibleBiller({ OPENROUTER_API_KEY: "sk-or-123" }, "openai")).toBe("openrouter");
6
+ });
7
+ it("returns openrouter when OPENAI_BASE_URL points at OpenRouter", () => {
8
+ expect(inferOpenAiCompatibleBiller({ OPENAI_BASE_URL: "https://openrouter.ai/api/v1" }, "openai")).toBe("openrouter");
9
+ });
10
+ it("returns fallback when no OpenRouter markers are present", () => {
11
+ expect(inferOpenAiCompatibleBiller({ OPENAI_BASE_URL: "https://api.openai.com/v1" }, "openai")).toBe("openai");
12
+ });
13
+ });
14
+ //# sourceMappingURL=billing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.test.js","sourceRoot":"","sources":["../src/billing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CACJ,2BAA2B,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAuB,EAAE,QAAQ,CAAC,CAChG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CACJ,2BAA2B,CACzB,EAAE,eAAe,EAAE,8BAA8B,EAAuB,EACxE,QAAQ,CACT,CACF,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CACJ,2BAA2B,CACzB,EAAE,eAAe,EAAE,2BAA2B,EAAuB,EACrE,QAAQ,CACT,CACF,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { type PreparedSandboxManagedRuntime, type SandboxManagedRuntimeAsset, type SandboxManagedRuntimeClient } from "./sandbox-managed-runtime.js";
2
+ import type { RunProcessResult } from "./server-utils.js";
3
+ export interface CommandManagedRuntimeRunner {
4
+ execute(input: {
5
+ command: string;
6
+ args?: string[];
7
+ cwd?: string;
8
+ env?: Record<string, string>;
9
+ stdin?: string;
10
+ timeoutMs?: number;
11
+ onLog?: (stream: "stdout" | "stderr", chunk: string) => Promise<void>;
12
+ onSpawn?: (meta: {
13
+ pid: number;
14
+ startedAt: string;
15
+ }) => Promise<void>;
16
+ }): Promise<RunProcessResult>;
17
+ }
18
+ export interface CommandManagedRuntimeSpec {
19
+ providerKey?: string | null;
20
+ shellCommand?: "bash" | "sh" | null;
21
+ leaseId?: string | null;
22
+ remoteCwd: string;
23
+ timeoutMs?: number | null;
24
+ }
25
+ export type CommandManagedRuntimeAsset = SandboxManagedRuntimeAsset;
26
+ export declare function createCommandManagedRuntimeClient(input: {
27
+ runner: CommandManagedRuntimeRunner;
28
+ remoteCwd: string;
29
+ timeoutMs: number;
30
+ shellCommand?: "bash" | "sh" | null;
31
+ }): SandboxManagedRuntimeClient;
32
+ export declare function prepareCommandManagedRuntime(input: {
33
+ runner: CommandManagedRuntimeRunner;
34
+ spec: CommandManagedRuntimeSpec;
35
+ adapterKey: string;
36
+ workspaceLocalDir: string;
37
+ workspaceRemoteDir?: string;
38
+ workspaceExclude?: string[];
39
+ preserveAbsentOnRestore?: string[];
40
+ assets?: CommandManagedRuntimeAsset[];
41
+ installCommand?: string | null;
42
+ /** When provided alongside `installCommand`, skip the install if `command -v <detectCommand>` succeeds. */
43
+ detectCommand?: string | null;
44
+ }): Promise<PreparedSandboxManagedRuntime>;
45
+ //# sourceMappingURL=command-managed-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-managed-runtime.d.ts","sourceRoot":"","sources":["../src/command-managed-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAEjC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,KAAK,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACvE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAyBpE,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,2BAA2B,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACrC,GAAG,2BAA2B,CAwE9B;AAED,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,MAAM,EAAE,2BAA2B,CAAC;IACpC,IAAI,EAAE,yBAAyB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2GAA2G;IAC3G,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA8EzC"}
@@ -0,0 +1,164 @@
1
+ import path from "node:path";
2
+ import { prepareSandboxManagedRuntime, } from "./sandbox-managed-runtime.js";
3
+ import { preferredShellForSandbox } from "./sandbox-shell.js";
4
+ function shellQuote(value) {
5
+ return `'${value.replace(/'/g, `'"'"'`)}'`;
6
+ }
7
+ function mergeRuntimeExcludes(entries) {
8
+ return [...new Set([".evermore-runtime", ...(entries ?? [])])];
9
+ }
10
+ const REMOTE_WRITE_BASE64_CHUNK_SIZE = 32 * 1024;
11
+ function toBuffer(bytes) {
12
+ if (Buffer.isBuffer(bytes))
13
+ return bytes;
14
+ if (bytes instanceof ArrayBuffer)
15
+ return Buffer.from(bytes);
16
+ return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
17
+ }
18
+ function requireSuccessfulResult(result, action) {
19
+ if (result.exitCode === 0 && !result.timedOut)
20
+ return;
21
+ const stderr = result.stderr.trim();
22
+ const detail = stderr.length > 0 ? `: ${stderr}` : "";
23
+ throw new Error(`${action} failed with exit code ${result.exitCode ?? "null"}${detail}`);
24
+ }
25
+ export function createCommandManagedRuntimeClient(input) {
26
+ const shellCommand = preferredShellForSandbox(input.shellCommand);
27
+ const runShell = async (script, opts = {}) => {
28
+ const result = await input.runner.execute({
29
+ command: shellCommand,
30
+ args: ["-lc", script],
31
+ cwd: input.remoteCwd,
32
+ stdin: opts.stdin,
33
+ timeoutMs: opts.timeoutMs ?? input.timeoutMs,
34
+ });
35
+ requireSuccessfulResult(result, script);
36
+ return result;
37
+ };
38
+ return {
39
+ makeDir: async (remotePath) => {
40
+ await runShell(`mkdir -p ${shellQuote(remotePath)}`);
41
+ },
42
+ writeFile: async (remotePath, bytes) => {
43
+ const body = toBuffer(bytes).toString("base64");
44
+ const remoteDir = path.posix.dirname(remotePath);
45
+ const remoteTempPath = `${remotePath}.evermore-upload.b64`;
46
+ await runShell(`mkdir -p ${shellQuote(remoteDir)} && rm -f ${shellQuote(remoteTempPath)} && : > ${shellQuote(remoteTempPath)}`);
47
+ for (let offset = 0; offset < body.length; offset += REMOTE_WRITE_BASE64_CHUNK_SIZE) {
48
+ const chunk = body.slice(offset, offset + REMOTE_WRITE_BASE64_CHUNK_SIZE);
49
+ await runShell(`printf '%s' ${shellQuote(chunk)} >> ${shellQuote(remoteTempPath)}`);
50
+ }
51
+ await runShell(`base64 -d < ${shellQuote(remoteTempPath)} > ${shellQuote(remotePath)} && rm -f ${shellQuote(remoteTempPath)}`);
52
+ },
53
+ readFile: async (remotePath) => {
54
+ const result = await runShell(`base64 < ${shellQuote(remotePath)}`);
55
+ return Buffer.from(result.stdout.replace(/\s+/g, ""), "base64");
56
+ },
57
+ listFiles: async (remotePath) => {
58
+ const result = await runShell(`if [ -d ${shellQuote(remotePath)} ]; then ` +
59
+ `for entry in ${shellQuote(remotePath)}/*; do ` +
60
+ `[ -f "$entry" ] || continue; ` +
61
+ `basename "$entry"; ` +
62
+ `done; ` +
63
+ `fi`);
64
+ return result.stdout
65
+ .split(/\r?\n/)
66
+ .map((entry) => entry.trim())
67
+ .filter((entry) => entry.length > 0)
68
+ .sort((left, right) => left.localeCompare(right));
69
+ },
70
+ remove: async (remotePath) => {
71
+ const result = await input.runner.execute({
72
+ command: shellCommand,
73
+ args: ["-lc", `rm -rf ${shellQuote(remotePath)}`],
74
+ cwd: input.remoteCwd,
75
+ timeoutMs: input.timeoutMs,
76
+ });
77
+ requireSuccessfulResult(result, `remove ${remotePath}`);
78
+ },
79
+ run: async (command, options) => {
80
+ const result = await input.runner.execute({
81
+ command: shellCommand,
82
+ args: ["-lc", command],
83
+ cwd: input.remoteCwd,
84
+ timeoutMs: options.timeoutMs,
85
+ });
86
+ requireSuccessfulResult(result, command);
87
+ },
88
+ };
89
+ }
90
+ export async function prepareCommandManagedRuntime(input) {
91
+ const timeoutMs = input.spec.timeoutMs && input.spec.timeoutMs > 0 ? input.spec.timeoutMs : 300_000;
92
+ const workspaceRemoteDir = input.workspaceRemoteDir ?? input.spec.remoteCwd;
93
+ const runtimeSpec = {
94
+ transport: "sandbox",
95
+ provider: input.spec.providerKey ?? "sandbox",
96
+ sandboxId: input.spec.leaseId ?? "managed",
97
+ remoteCwd: workspaceRemoteDir,
98
+ timeoutMs,
99
+ apiKey: null,
100
+ };
101
+ const client = createCommandManagedRuntimeClient({
102
+ runner: input.runner,
103
+ remoteCwd: workspaceRemoteDir,
104
+ timeoutMs,
105
+ shellCommand: input.spec.shellCommand,
106
+ });
107
+ const shellCommand = preferredShellForSandbox(input.spec.shellCommand);
108
+ if (input.installCommand?.trim()) {
109
+ const installCommand = input.installCommand.trim();
110
+ const detectCommand = input.detectCommand?.trim();
111
+ // Skip the install when the binary is already on PATH. Without this
112
+ // probe the install runs unconditionally on every execute() call (and
113
+ // also runs a second time after `ensureAdapterExecutionTargetCommandResolvable`
114
+ // has already installed it during the resolvability gate).
115
+ if (detectCommand) {
116
+ const probe = await input.runner.execute({
117
+ command: shellCommand,
118
+ args: ["-lc", `command -v ${shellQuote(detectCommand)} >/dev/null 2>&1`],
119
+ cwd: workspaceRemoteDir,
120
+ timeoutMs,
121
+ });
122
+ if (!probe.timedOut && (probe.exitCode ?? 1) === 0) {
123
+ return await prepareSandboxManagedRuntime({
124
+ spec: runtimeSpec,
125
+ client,
126
+ adapterKey: input.adapterKey,
127
+ workspaceLocalDir: input.workspaceLocalDir,
128
+ workspaceRemoteDir,
129
+ workspaceExclude: mergeRuntimeExcludes(input.workspaceExclude),
130
+ preserveAbsentOnRestore: input.preserveAbsentOnRestore,
131
+ assets: input.assets,
132
+ });
133
+ }
134
+ }
135
+ const result = await input.runner.execute({
136
+ command: shellCommand,
137
+ args: ["-lc", installCommand],
138
+ cwd: workspaceRemoteDir,
139
+ timeoutMs,
140
+ });
141
+ // A failed install is not always fatal: the CLI may already be on PATH
142
+ // from a previous lease, the template image, or another path entry. Log
143
+ // and continue rather than aborting the agent run; downstream code that
144
+ // exec's the CLI will surface a clear "command not found" if it is in
145
+ // fact missing. The test path's `maybeRunSandboxInstallCommand` already
146
+ // honors this contract — keep them consistent.
147
+ if (result.timedOut || (result.exitCode ?? 0) !== 0) {
148
+ const tail = (text) => text.split(/\r?\n/).filter((line) => line.trim().length > 0).slice(-3).join(" | ").slice(0, 480);
149
+ const reason = result.timedOut ? "timed out" : `exited ${result.exitCode ?? "?"}`;
150
+ console.warn(`[evermore] managed-runtime install command ${reason}: ${installCommand} :: ${tail(result.stderr || result.stdout)}`);
151
+ }
152
+ }
153
+ return await prepareSandboxManagedRuntime({
154
+ spec: runtimeSpec,
155
+ client,
156
+ adapterKey: input.adapterKey,
157
+ workspaceLocalDir: input.workspaceLocalDir,
158
+ workspaceRemoteDir,
159
+ workspaceExclude: mergeRuntimeExcludes(input.workspaceExclude),
160
+ preserveAbsentOnRestore: input.preserveAbsentOnRestore,
161
+ assets: input.assets,
162
+ });
163
+ }
164
+ //# sourceMappingURL=command-managed-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-managed-runtime.js","sourceRoot":"","sources":["../src/command-managed-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=command-managed-runtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-managed-runtime.test.d.ts","sourceRoot":"","sources":["../src/command-managed-runtime.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { execFile as execFileCallback } from "node:child_process";
5
+ import { promisify } from "node:util";
6
+ import { afterEach, describe, expect, it } from "vitest";
7
+ import { prepareCommandManagedRuntime } from "./command-managed-runtime.js";
8
+ const execFile = promisify(execFileCallback);
9
+ describe("command managed runtime", () => {
10
+ const cleanupDirs = [];
11
+ afterEach(async () => {
12
+ while (cleanupDirs.length > 0) {
13
+ const dir = cleanupDirs.pop();
14
+ if (!dir)
15
+ continue;
16
+ await rm(dir, { recursive: true, force: true }).catch(() => undefined);
17
+ }
18
+ });
19
+ it("keeps the runtime overlay out of sandbox workspace sync by default", async () => {
20
+ const rootDir = await mkdtemp(path.join(os.tmpdir(), "evermore-command-runtime-"));
21
+ cleanupDirs.push(rootDir);
22
+ const localWorkspaceDir = path.join(rootDir, "local-workspace");
23
+ const remoteWorkspaceDir = path.join(rootDir, "remote-workspace");
24
+ await mkdir(path.join(localWorkspaceDir, ".evermore-runtime"), { recursive: true });
25
+ await mkdir(remoteWorkspaceDir, { recursive: true });
26
+ await writeFile(path.join(localWorkspaceDir, "README.md"), "local workspace\n", "utf8");
27
+ await writeFile(path.join(localWorkspaceDir, ".evermore-runtime", "state.json"), "{\"keep\":true}\n", "utf8");
28
+ const calls = [];
29
+ const runner = {
30
+ execute: async (input) => {
31
+ calls.push({ ...input });
32
+ const startedAt = new Date().toISOString();
33
+ const env = {
34
+ ...process.env,
35
+ ...input.env,
36
+ };
37
+ const command = input.command === "sh" ? "/bin/sh" : input.command === "bash" ? "/bin/bash" : input.command;
38
+ const args = [...(input.args ?? [])];
39
+ if (input.stdin != null &&
40
+ (input.command === "sh" || input.command === "bash") &&
41
+ args[0] === "-lc" &&
42
+ typeof args[1] === "string") {
43
+ env.EVERMORE_TEST_STDIN = input.stdin;
44
+ args[1] = `printf '%s' \"$EVERMORE_TEST_STDIN\" | (${args[1]})`;
45
+ }
46
+ try {
47
+ const result = await execFile(command, args, {
48
+ cwd: input.cwd,
49
+ env,
50
+ maxBuffer: 32 * 1024 * 1024,
51
+ timeout: input.timeoutMs,
52
+ });
53
+ return {
54
+ exitCode: 0,
55
+ signal: null,
56
+ timedOut: false,
57
+ stdout: result.stdout,
58
+ stderr: result.stderr,
59
+ pid: null,
60
+ startedAt,
61
+ };
62
+ }
63
+ catch (error) {
64
+ const err = error;
65
+ return {
66
+ exitCode: typeof err.code === "number" ? err.code : null,
67
+ signal: err.signal ?? null,
68
+ timedOut: Boolean(err.killed && input.timeoutMs),
69
+ stdout: err.stdout ?? "",
70
+ stderr: err.stderr ?? "",
71
+ pid: null,
72
+ startedAt,
73
+ };
74
+ }
75
+ },
76
+ };
77
+ const prepared = await prepareCommandManagedRuntime({
78
+ runner,
79
+ spec: {
80
+ remoteCwd: remoteWorkspaceDir,
81
+ timeoutMs: 30_000,
82
+ },
83
+ adapterKey: "claude",
84
+ workspaceLocalDir: localWorkspaceDir,
85
+ });
86
+ await expect(readFile(path.join(remoteWorkspaceDir, "README.md"), "utf8")).resolves.toBe("local workspace\n");
87
+ await expect(readFile(path.join(remoteWorkspaceDir, ".evermore-runtime", "state.json"), "utf8")).rejects
88
+ .toMatchObject({ code: "ENOENT" });
89
+ expect(calls.every((call) => call.stdin == null)).toBe(true);
90
+ await mkdir(path.join(remoteWorkspaceDir, ".evermore-runtime"), { recursive: true });
91
+ await writeFile(path.join(remoteWorkspaceDir, "README.md"), "remote workspace\n", "utf8");
92
+ await writeFile(path.join(remoteWorkspaceDir, ".evermore-runtime", "remote-state.json"), "{\"remote\":true}\n", "utf8");
93
+ await prepared.restoreWorkspace();
94
+ await expect(readFile(path.join(localWorkspaceDir, "README.md"), "utf8")).resolves.toBe("remote workspace\n");
95
+ await expect(readFile(path.join(localWorkspaceDir, ".evermore-runtime", "state.json"), "utf8")).resolves
96
+ .toBe("{\"keep\":true}\n");
97
+ await expect(readFile(path.join(localWorkspaceDir, ".evermore-runtime", "remote-state.json"), "utf8")).rejects
98
+ .toMatchObject({ code: "ENOENT" });
99
+ expect(calls.every((call) => call.stdin == null)).toBe(true);
100
+ });
101
+ });
102
+ //# sourceMappingURL=command-managed-runtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-managed-runtime.test.js","sourceRoot":"","sources":["../src/command-managed-runtime.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const REDACTED_COMMAND_TEXT_VALUE = "***REDACTED***";
2
+ export declare function redactCommandText(command: string, redactedValue?: string): string;
3
+ //# sourceMappingURL=command-redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-redaction.d.ts","sourceRoot":"","sources":["../src/command-redaction.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,mBAAmB,CAAC;AAY5D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,SAA8B,GAAG,MAAM,CAQtG"}
@@ -0,0 +1,17 @@
1
+ export const REDACTED_COMMAND_TEXT_VALUE = "***REDACTED***";
2
+ const COMMAND_CLI_SECRET_OPTION_RE = /(\B-{1,2}(?:api[-_]?key|(?:access[-_]?|auth[-_]?)?token|token|authorization|bearer|secret|passwd|password|credential|jwt|private[-_]?key|cookie|connectionstring)(?:\s+|=)(["']?))[^\s"'`]+(\2)/gi;
3
+ const COMMAND_ENV_SECRET_ASSIGNMENT_RE = /(\b[A-Za-z0-9_]*(?:TOKEN|KEY|SECRET|PASSWORD|PASSWD|AUTHORIZATION|JWT)[A-Za-z0-9_]*\s*=\s*)[^\s"'`]+/gi;
4
+ const COMMAND_AUTHORIZATION_BEARER_RE = /(\bAuthorization\s*:\s*Bearer\s+)[^\s"'`]+/gi;
5
+ const COMMAND_OPENAI_KEY_RE = /\bsk-[A-Za-z0-9_-]{12,}\b/g;
6
+ const COMMAND_GITHUB_TOKEN_RE = /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g;
7
+ const COMMAND_JWT_RE = /\b[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}(?:\.[A-Za-z0-9_-]{8,})?\b/g;
8
+ export function redactCommandText(command, redactedValue = REDACTED_COMMAND_TEXT_VALUE) {
9
+ return command
10
+ .replace(COMMAND_AUTHORIZATION_BEARER_RE, `$1${redactedValue}`)
11
+ .replace(COMMAND_CLI_SECRET_OPTION_RE, `$1${redactedValue}$3`)
12
+ .replace(COMMAND_ENV_SECRET_ASSIGNMENT_RE, `$1${redactedValue}`)
13
+ .replace(COMMAND_OPENAI_KEY_RE, redactedValue)
14
+ .replace(COMMAND_GITHUB_TOKEN_RE, redactedValue)
15
+ .replace(COMMAND_JWT_RE, redactedValue);
16
+ }
17
+ //# sourceMappingURL=command-redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-redaction.js","sourceRoot":"","sources":["../src/command-redaction.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAE5D,MAAM,4BAA4B,GAChC,mMAAmM,CAAC;AACtM,MAAM,gCAAgC,GACpC,wGAAwG,CAAC;AAC3G,MAAM,+BAA+B,GAAG,8CAA8C,CAAC;AACvF,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAC3D,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AACnE,MAAM,cAAc,GAClB,sFAAsF,CAAC;AAEzF,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,aAAa,GAAG,2BAA2B;IAC5F,OAAO,OAAO;SACX,OAAO,CAAC,+BAA+B,EAAE,KAAK,aAAa,EAAE,CAAC;SAC9D,OAAO,CAAC,4BAA4B,EAAE,KAAK,aAAa,IAAI,CAAC;SAC7D,OAAO,CAAC,gCAAgC,EAAE,KAAK,aAAa,EAAE,CAAC;SAC/D,OAAO,CAAC,qBAAqB,EAAE,aAAa,CAAC;SAC7C,OAAO,CAAC,uBAAuB,EAAE,aAAa,CAAC;SAC/C,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=execution-target-sandbox.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-target-sandbox.test.d.ts","sourceRoot":"","sources":["../src/execution-target-sandbox.test.ts"],"names":[],"mappings":""}