@paperclipai/adapter-opencode-local 2026.1012.0 → 2026.1012.1-beta.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.
@@ -0,0 +1,123 @@
1
+ import fs from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ const mocks = vi.hoisted(() => ({
6
+ process: vi.fn(), restore: vi.fn(), stop: vi.fn(),
7
+ }));
8
+ vi.mock("@paperclipai/adapter-utils/execution-target", async (importOriginal) => ({
9
+ ...await importOriginal(),
10
+ ensureAdapterExecutionTargetRuntimeCommandInstalled: vi.fn(),
11
+ ensureAdapterExecutionTargetCommandResolvable: vi.fn(),
12
+ prepareAdapterExecutionTargetRuntime: vi.fn(async () => ({
13
+ runtimeRootDir: "/workspace/runtime", workspaceRemoteDir: "/workspace",
14
+ assetDirs: {}, restoreWorkspace: mocks.restore,
15
+ })),
16
+ readAdapterExecutionTargetHomeDir: vi.fn(async () => "/home/fixture"),
17
+ startAdapterExecutionTargetPaperclipBridge: vi.fn(async () => ({ env: {}, stop: mocks.stop })),
18
+ runAdapterExecutionTargetProcess: mocks.process,
19
+ }));
20
+ import { execute } from "./execute.js";
21
+ const rawOutput = "private-output-canary";
22
+ const rawError = "<html>504 Gateway Time-out private-provider-token-canary</html>";
23
+ const failed = {
24
+ timedOut: true, exitCode: null, signal: null, stdout: rawOutput, stderr: rawError,
25
+ pid: null, startedAt: "2020-01-01T00:00:00.000Z", durationMs: 100,
26
+ };
27
+ describe("OpenCode timeout reporting", () => {
28
+ let dir;
29
+ beforeEach(async () => {
30
+ dir = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-opencode-timeout-"));
31
+ vi.stubEnv("XDG_CONFIG_HOME", dir);
32
+ mocks.process.mockReset().mockResolvedValue(failed);
33
+ mocks.restore.mockReset().mockResolvedValue(undefined);
34
+ mocks.stop.mockReset().mockResolvedValue(undefined);
35
+ });
36
+ afterEach(async () => {
37
+ vi.unstubAllEnvs();
38
+ await fs.rm(dir, { recursive: true, force: true });
39
+ });
40
+ const context = (timeoutSec, remote = true) => ({
41
+ runId: "run-fixture",
42
+ agent: { id: "agent-fixture", companyId: "company-fixture", name: "Fixture", adapterType: "opencode_local", adapterConfig: {} },
43
+ runtime: { sessionId: null, sessionParams: null, sessionDisplayId: null, taskKey: null },
44
+ config: { command: "opencode", model: "openai/fixture", cwd: dir, timeoutSec,
45
+ env: { OPENCODE_ALLOW_ALL_MODELS: "1" } },
46
+ context: {}, onLog: async () => { },
47
+ ...(remote ? { executionTarget: { kind: "remote", transport: "sandbox", providerKey: "daytona", remoteCwd: "/workspace" } } : {}),
48
+ });
49
+ it.each([
50
+ [0, true, 14400, "sandbox_default"], [12, true, 12, "configured"],
51
+ [-1, true, 0, "configured"], [0, false, 0, "unlimited"], [12, false, 12, "configured"],
52
+ ])("keeps policy separate from an opaque timeout (%s, remote=%s)", async (configured, remote, resolved, source) => {
53
+ const result = await execute(context(configured, remote));
54
+ expect(result).toMatchObject({ timedOut: true, exitCode: null, signal: null,
55
+ errorMessage: "OpenCode execution timed out",
56
+ resultJson: { adapterExecutionTimeout: { timeoutSec: resolved, source } } });
57
+ expect(JSON.stringify(result)).not.toContain("private-");
58
+ expect(result.errorMessage).not.toContain(String(resolved));
59
+ expect(mocks.process).toHaveBeenCalledTimes(1);
60
+ expect(mocks.process.mock.calls[0][4]).toMatchObject({ timeoutSec: resolved, graceSec: 20 });
61
+ expect(mocks.restore).toHaveBeenCalledTimes(remote ? 1 : 0);
62
+ expect(mocks.stop).toHaveBeenCalledTimes(remote ? 1 : 0);
63
+ });
64
+ it.each([0, 7])("retains output and completion semantics for a non-timeout exit %s", async (exitCode) => {
65
+ mocks.process.mockResolvedValue({ ...failed, timedOut: false, exitCode, stderr: "fixture failure" });
66
+ const result = await execute(context(0));
67
+ expect(result).toMatchObject({ timedOut: false, exitCode, signal: null,
68
+ errorMessage: exitCode === 0 ? null : "fixture failure",
69
+ resultJson: { stdout: rawOutput, stderr: "fixture failure",
70
+ adapterExecutionTimeout: { timeoutSec: 14400, source: "sandbox_default" } } });
71
+ expect(mocks.process).toHaveBeenCalledTimes(1);
72
+ expect(mocks.restore).toHaveBeenCalledTimes(1);
73
+ expect(mocks.stop).toHaveBeenCalledTimes(1);
74
+ });
75
+ it("runs the sandbox CLI through the actual process seam with session dispatch and incremental output", async () => {
76
+ const actual = await vi.importActual("@paperclipai/adapter-utils/execution-target");
77
+ mocks.process.mockImplementation(actual.runAdapterExecutionTargetProcess);
78
+ const logs = vi.fn(async () => { });
79
+ const runner = {
80
+ execute: vi.fn(async (input) => {
81
+ // A synchronous command can lose its HTTP response before the run's
82
+ // configured deadline. Session dispatch must keep that request off the
83
+ // main CLI path; it must not replay the agent to recover the response.
84
+ if (!input.useSession)
85
+ return failed;
86
+ await input.onLog?.("stdout", "streamed fixture output");
87
+ return { ...failed, timedOut: false, exitCode: 0, stdout: "streamed fixture output", stderr: "" };
88
+ }),
89
+ };
90
+ const ctx = context(0);
91
+ ctx.onLog = logs;
92
+ ctx.executionTarget = { kind: "remote", transport: "sandbox", providerKey: "daytona", remoteCwd: "/workspace", runner };
93
+ const result = await execute(ctx);
94
+ expect(result).toMatchObject({ timedOut: false, exitCode: 0, errorMessage: null,
95
+ resultJson: { stdout: "streamed fixture output", adapterExecutionTimeout: { timeoutSec: 14400, source: "sandbox_default" } } });
96
+ expect(runner.execute).toHaveBeenCalledTimes(1);
97
+ expect(runner.execute.mock.calls[0][0]).toMatchObject({ command: "opencode", useSession: true, timeoutMs: 14400000, commandTimeoutMs: 14400000 });
98
+ expect(logs).toHaveBeenCalledWith("stdout", "streamed fixture output");
99
+ expect(mocks.restore).toHaveBeenCalledTimes(1);
100
+ expect(mocks.stop).toHaveBeenCalledTimes(1);
101
+ });
102
+ it("keeps other sandbox providers on their existing command path", async () => {
103
+ const ctx = context(12);
104
+ ctx.executionTarget = { kind: "remote", transport: "sandbox", providerKey: "fixture-provider", remoteCwd: "/workspace" };
105
+ await execute(ctx);
106
+ expect(mocks.process.mock.calls[0][4]).not.toHaveProperty("useSession");
107
+ });
108
+ it("retains real local deadline and termination behavior without claiming provider origin", async () => {
109
+ const actual = await vi.importActual("@paperclipai/adapter-utils/execution-target");
110
+ mocks.process.mockImplementation(actual.runAdapterExecutionTargetProcess);
111
+ const command = path.join(dir, "fixture-opencode");
112
+ await fs.writeFile(command, "#!/usr/bin/env node\nsetInterval(() => {}, 1000);\n", { mode: 0o755 });
113
+ const ctx = context(0.1, false);
114
+ ctx.config.command = command;
115
+ ctx.config.graceSec = 0.1;
116
+ const result = await execute(ctx);
117
+ expect(result).toMatchObject({ timedOut: true, exitCode: null, signal: "SIGTERM",
118
+ errorMessage: "OpenCode execution timed out",
119
+ resultJson: { adapterExecutionTimeout: { timeoutSec: 0.1, source: "configured" } } });
120
+ expect(mocks.process).toHaveBeenCalledTimes(1);
121
+ });
122
+ });
123
+ //# sourceMappingURL=execute.timeout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.timeout.test.js","sourceRoot":"","sources":["../../src/server/execute.timeout.test.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,24 @@ export declare function parseOpenCodeJsonl(stdout: string): {
6
6
  cachedInputTokens: number;
7
7
  outputTokens: number;
8
8
  };
9
- costUsd: number;
9
+ usageReported: boolean;
10
+ usageComplete: boolean;
11
+ costUsd: number | null;
12
+ errorMessage: string | null;
13
+ toolErrors: string[];
14
+ };
15
+ /** Consume complete JSONL records once, retaining protocol accounting state. */
16
+ export declare function createOpenCodeJsonlParser(): (stdout: string) => {
17
+ sessionId: string | null;
18
+ summary: string;
19
+ usage: {
20
+ inputTokens: number;
21
+ cachedInputTokens: number;
22
+ outputTokens: number;
23
+ };
24
+ usageReported: boolean;
25
+ usageComplete: boolean;
26
+ costUsd: number | null;
10
27
  errorMessage: string | null;
11
28
  toolErrors: string[];
12
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAqBA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;EAmEhD;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUrF"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAqBA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;EAEhD;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,aAevB,MAAM;;;;;;;;;;;;;EAiEvB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUrF"}
@@ -1,4 +1,4 @@
1
- import { asNumber, asString, parseJson, parseObject } from "@paperclipai/adapter-utils/server-utils";
1
+ import { asString, parseJson, parseObject } from "@paperclipai/adapter-utils/server-utils";
2
2
  function errorText(value) {
3
3
  if (typeof value === "string")
4
4
  return value;
@@ -24,6 +24,10 @@ function errorText(value) {
24
24
  }
25
25
  }
26
26
  export function parseOpenCodeJsonl(stdout) {
27
+ return createOpenCodeJsonlParser()(stdout);
28
+ }
29
+ /** Consume complete JSONL records once, retaining protocol accounting state. */
30
+ export function createOpenCodeJsonlParser() {
27
31
  let sessionId = null;
28
32
  const messages = [];
29
33
  const errors = [];
@@ -33,59 +37,80 @@ export function parseOpenCodeJsonl(stdout) {
33
37
  cachedInputTokens: 0,
34
38
  outputTokens: 0,
35
39
  };
36
- let costUsd = 0;
37
- for (const rawLine of stdout.split(/\r?\n/)) {
38
- const line = rawLine.trim();
39
- if (!line)
40
- continue;
41
- const event = parseJson(line);
42
- if (!event)
43
- continue;
44
- const currentSessionId = asString(event.sessionID, "").trim();
45
- if (currentSessionId)
46
- sessionId = currentSessionId;
47
- const type = asString(event.type, "");
48
- if (type === "text") {
49
- const part = parseObject(event.part);
50
- const text = asString(part.text, "").trim();
51
- if (text)
52
- messages.push(text);
53
- continue;
54
- }
55
- if (type === "step_finish") {
56
- const part = parseObject(event.part);
57
- const tokens = parseObject(part.tokens);
58
- const cache = parseObject(tokens.cache);
59
- usage.inputTokens += asNumber(tokens.input, 0);
60
- usage.cachedInputTokens += asNumber(cache.read, 0);
61
- usage.outputTokens += asNumber(tokens.output, 0) + asNumber(tokens.reasoning, 0);
62
- costUsd += asNumber(part.cost, 0);
63
- continue;
64
- }
65
- if (type === "tool_use") {
66
- const part = parseObject(event.part);
67
- const state = parseObject(part.state);
68
- if (asString(state.status, "") === "error") {
69
- const text = asString(state.error, "").trim();
40
+ let costUsd = null;
41
+ let missingCost = false;
42
+ let usageReported = false;
43
+ let missingUsage = false;
44
+ return (stdout) => {
45
+ for (const rawLine of stdout.split(/\r?\n/)) {
46
+ const line = rawLine.trim();
47
+ if (!line)
48
+ continue;
49
+ const event = parseJson(line);
50
+ if (!event)
51
+ continue;
52
+ const currentSessionId = asString(event.sessionID, "").trim();
53
+ if (currentSessionId)
54
+ sessionId = currentSessionId;
55
+ const type = asString(event.type, "");
56
+ if (type === "text") {
57
+ const part = parseObject(event.part);
58
+ const text = asString(part.text, "").trim();
70
59
  if (text)
71
- toolErrors.push(text);
60
+ messages.push(text);
61
+ continue;
62
+ }
63
+ if (type === "step_finish") {
64
+ const part = parseObject(event.part);
65
+ const tokens = parseObject(part.tokens);
66
+ const cache = parseObject(tokens.cache);
67
+ const counts = [tokens.input, tokens.output, cache.read === undefined ? 0 : cache.read, cache.write === undefined ? 0 : cache.write, tokens.reasoning === undefined ? 0 : tokens.reasoning];
68
+ if (counts.every(value => typeof value === "number" && Number.isSafeInteger(value) && value >= 0)) {
69
+ const [input, output, cached, written, reasoning] = counts;
70
+ const next = { inputTokens: usage.inputTokens + input + written,
71
+ outputTokens: usage.outputTokens + output + reasoning, cachedInputTokens: usage.cachedInputTokens + cached };
72
+ if (Object.values(next).every(Number.isSafeInteger)) {
73
+ Object.assign(usage, next);
74
+ usageReported = true;
75
+ }
76
+ else
77
+ missingUsage = true;
78
+ }
79
+ else
80
+ missingUsage = true;
81
+ if (typeof part.cost === "number" && Number.isFinite(part.cost) && part.cost >= 0)
82
+ costUsd = (costUsd ?? 0) + part.cost;
83
+ else
84
+ missingCost = true;
85
+ continue;
86
+ }
87
+ if (type === "tool_use") {
88
+ const part = parseObject(event.part);
89
+ const state = parseObject(part.state);
90
+ if (asString(state.status, "") === "error") {
91
+ const text = asString(state.error, "").trim();
92
+ if (text)
93
+ toolErrors.push(text);
94
+ }
95
+ continue;
96
+ }
97
+ if (type === "error") {
98
+ const text = errorText(event.error ?? event.message).trim();
99
+ if (text)
100
+ errors.push(text);
101
+ continue;
72
102
  }
73
- continue;
74
- }
75
- if (type === "error") {
76
- const text = errorText(event.error ?? event.message).trim();
77
- if (text)
78
- errors.push(text);
79
- continue;
80
103
  }
81
- }
82
- return {
83
- sessionId,
84
- summary: messages.join("\n\n").trim(),
85
- usage,
86
- costUsd,
87
- errorMessage: errors.length > 0 ? errors.join("\n") : null,
88
- toolErrors,
104
+ return {
105
+ sessionId,
106
+ summary: messages.join("\n\n").trim(),
107
+ usage: { ...usage },
108
+ usageReported,
109
+ usageComplete: usageReported && !missingUsage,
110
+ costUsd: missingCost ? null : costUsd,
111
+ errorMessage: errors.length > 0 ? errors.join("\n") : null,
112
+ toolErrors,
113
+ };
89
114
  };
90
115
  }
91
116
  export function isOpenCodeUnknownSessionError(stdout, stderr) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
@@ -70,4 +70,22 @@ describe("parseOpenCodeJsonl", () => {
70
70
  expect(isOpenCodeUnknownSessionError("all good", "")).toBe(false);
71
71
  });
72
72
  });
73
+ describe("OpenCode price availability", () => {
74
+ it("distinguishes missing cost from reported zero and counts cache writes", () => {
75
+ const event = { type: "step_finish", part: { tokens: { input: 10, output: 3, cache: { read: 100, write: 20 } } } };
76
+ expect(parseOpenCodeJsonl(JSON.stringify(event))).toMatchObject({ costUsd: null, usage: { inputTokens: 30, cachedInputTokens: 100, outputTokens: 3 } });
77
+ expect(parseOpenCodeJsonl(JSON.stringify({ ...event, part: { ...event.part, cost: 0 } })).costUsd).toBe(0);
78
+ expect(parseOpenCodeJsonl([event, { ...event, part: { ...event.part, cost: 1 } }].map((row) => JSON.stringify(row)).join("\n")).costUsd).toBeNull();
79
+ });
80
+ });
81
+ describe("OpenCode reported usage completeness", () => {
82
+ it.each([undefined, {}, { input: 1 }, { input: -1, output: 2 }, { input: 1, output: 0.5 }, { input: 1, output: 2, cache: { read: -1 } }, { input: 1, output: 2, cache: { read: null } }, { input: 1, output: 2, reasoning: null }])("preserves unknown usage for incomplete counters %j", tokens => {
83
+ expect(parseOpenCodeJsonl(JSON.stringify({ type: "step_finish", part: { tokens } }))).toMatchObject({ usageReported: false, usageComplete: false, costUsd: null });
84
+ });
85
+ it("accepts explicit zeros but keeps a later missing step incomplete", () => {
86
+ const line = JSON.stringify({ type: "step_finish", part: { tokens: { input: 0, output: 0 } } });
87
+ expect(parseOpenCodeJsonl(line)).toMatchObject({ usageReported: true, usageComplete: true, usage: { inputTokens: 0, outputTokens: 0 }, costUsd: null });
88
+ expect(parseOpenCodeJsonl(line + '\n' + JSON.stringify({ type: "step_finish" }))).toMatchObject({ usageReported: true, usageComplete: false });
89
+ });
90
+ });
73
91
  //# sourceMappingURL=parse.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.test.js","sourceRoot":"","sources":["../../src/server/parse.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.test.js","sourceRoot":"","sources":["../../src/server/parse.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AA4DpC,wBAAsB,eAAe,CACnC,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CA0XvC"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AA4DpC,wBAAsB,eAAe,CACnC,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CAwZvC"}
@@ -3,7 +3,7 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { asBoolean, asNumber, asString, asStringArray, parseObject, ensurePathInEnv, } from "@paperclipai/adapter-utils/server-utils";
5
5
  import { ensureAdapterExecutionTargetCommandResolvable, maybeRunSandboxInstallCommand, ensureAdapterExecutionTargetDirectory, runAdapterExecutionTargetProcess, describeAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, prepareAdapterExecutionTargetRuntime, overrideAdapterExecutionTargetRemoteCwd, } from "@paperclipai/adapter-utils/execution-target";
6
- import { discoverOpenCodeModels, ensureOpenCodeModelConfiguredAndAvailable } from "./models.js";
6
+ import { discoverOpenCodeModels, ensureOpenCodeModelConfiguredAndAvailable, requireOpenCodeModelId } from "./models.js";
7
7
  import { parseOpenCodeJsonl } from "./parse.js";
8
8
  import { SANDBOX_INSTALL_COMMAND } from "../index.js";
9
9
  import { prepareOpenCodeRuntimeConfig, prepareManagedOpenCodeRemoteHomes } from "./runtime-config.js";
@@ -109,9 +109,16 @@ export async function testEnvironment(ctx) {
109
109
  // still has the path available for cleanup in `finally` — otherwise the
110
110
  // `fs.mkdtemp` directory leaks on the early-throw path.
111
111
  let preparedRuntimeWorkspaceLocalDir = null;
112
+ let nativeProbeWorkspaceLocalDir = null;
112
113
  try {
113
114
  let runtimeTarget = target ?? null;
114
115
  let runtimeCwd = cwd;
116
+ // Native workspaces are assigned at execution time. A configuration probe
117
+ // without an explicit workspace must not run in the server's checkout.
118
+ if (!targetIsRemote && ctx.adapterType === "paperclip_runner" && !asString(config.cwd, "").trim()) {
119
+ nativeProbeWorkspaceLocalDir = await fs.mkdtemp(path.join(os.tmpdir(), "paperclip-opencode-native-probe-"));
120
+ runtimeCwd = nativeProbeWorkspaceLocalDir;
121
+ }
115
122
  if (targetIsRemote) {
116
123
  preparedRuntimeWorkspaceLocalDir = await fs.mkdtemp(path.join(os.tmpdir(), `paperclip-opencode-envtest-${runId}-`));
117
124
  const preparedExecutionTargetRuntime = await prepareAdapterExecutionTargetRuntime({
@@ -122,6 +129,8 @@ export async function testEnvironment(ctx) {
122
129
  workspaceRemoteDir: cwd,
123
130
  installCommand: SANDBOX_INSTALL_COMMAND,
124
131
  detectCommand: command,
132
+ // The probe workspace is a throwaway temp dir; never wait on copy-back retries.
133
+ workspaceRestoreRetryDelaysMs: [],
125
134
  assets: localRuntimeConfigHome
126
135
  ? [{
127
136
  key: "xdgConfig",
@@ -189,12 +198,31 @@ export async function testEnvironment(ctx) {
189
198
  const canRunProbe = checks.every((check) => check.code !== "opencode_cwd_invalid" && check.code !== "opencode_command_unresolvable");
190
199
  let modelValidationPassed = false;
191
200
  const configuredModel = asString(config.model, "").trim();
201
+ // The native runner already selects a concrete model. Its real hello probe
202
+ // verifies model access and credentials; a full catalog scan adds another
203
+ // cold CLI launch (and discovery retries) without verifying that request.
204
+ const nativeModelProbe = ctx.adapterType === "paperclip_runner" && Boolean(configuredModel);
192
205
  // Model discovery and validation use local child processes against
193
206
  // OpenCode's `models` subcommand and JSON config; these are not yet
194
207
  // wired through the execution target. When probing a remote env, skip
195
208
  // discovery/validation and rely on the remote hello probe to surface
196
209
  // model/auth issues directly.
197
- if (targetIsRemote && configuredModel) {
210
+ if (nativeModelProbe) {
211
+ try {
212
+ requireOpenCodeModelId(configuredModel);
213
+ modelValidationPassed = true;
214
+ checks.push({
215
+ code: "opencode_model_validation_via_probe",
216
+ level: "info",
217
+ message: "The configured native-runner model will be validated by the hello probe.",
218
+ });
219
+ }
220
+ catch (error) {
221
+ checks.push({ code: "opencode_model_invalid", level: "error",
222
+ message: error instanceof Error ? error.message : "Configured model is invalid." });
223
+ }
224
+ }
225
+ else if (targetIsRemote && configuredModel) {
198
226
  checks.push({
199
227
  code: "opencode_model_validation_skipped_remote",
200
228
  level: "info",
@@ -278,7 +306,7 @@ export async function testEnvironment(ctx) {
278
306
  if (!configuredModel && !modelUnavailable) {
279
307
  // No model configured – skip model requirement if no model-related checks exist
280
308
  }
281
- else if (!targetIsRemote && configuredModel && canRunProbe) {
309
+ else if (!nativeModelProbe && !targetIsRemote && configuredModel && canRunProbe) {
282
310
  try {
283
311
  await ensureOpenCodeModelConfiguredAndAvailable({
284
312
  model: configuredModel,
@@ -398,6 +426,9 @@ export async function testEnvironment(ctx) {
398
426
  }
399
427
  }
400
428
  finally {
429
+ if (nativeProbeWorkspaceLocalDir) {
430
+ await fs.rm(nativeProbeWorkspaceLocalDir, { recursive: true, force: true }).catch(() => { });
431
+ }
401
432
  await restoreWorkspace?.();
402
433
  if (!restoreWorkspace && preparedRuntimeWorkspaceLocalDir) {
403
434
  // Reached when `prepareAdapterExecutionTargetRuntime` threw before
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { mkdtemp, rm } from "node:fs/promises";
1
+ import { mkdtemp, rm, stat } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
@@ -59,6 +59,12 @@ vi.mock("@paperclipai/adapter-utils/execution-target", async () => {
59
59
  };
60
60
  });
61
61
  import { testEnvironment } from "./test.js";
62
+ import { discoverOpenCodeModels, ensureOpenCodeModelConfiguredAndAvailable } from "./models.js";
63
+ vi.mock("./models.js", async () => ({
64
+ ...await vi.importActual("./models.js"),
65
+ discoverOpenCodeModels: vi.fn().mockRejectedValue(new Error("catalog should not be needed")),
66
+ ensureOpenCodeModelConfiguredAndAvailable: vi.fn().mockRejectedValue(new Error("catalog should not be needed")),
67
+ }));
62
68
  describe("opencode remote environment diagnostics", () => {
63
69
  const configHomes = [];
64
70
  let configHome;
@@ -72,6 +78,47 @@ describe("opencode remote environment diagnostics", () => {
72
78
  await rm(configHome, { recursive: true, force: true });
73
79
  await Promise.all(configHomes.splice(0).map(dir => rm(dir, { recursive: true, force: true })));
74
80
  });
81
+ it.each(["passed", "auth_required", "model_unavailable", "timed_out"])("validates a native model with the real probe path and no catalog scan (%s)", async (outcome) => {
82
+ const successfulProbe = await runAdapterExecutionTargetProcess.getMockImplementation()();
83
+ runAdapterExecutionTargetProcess.mockResolvedValueOnce(outcome === "passed" ? successfulProbe : {
84
+ ...successfulProbe, exitCode: 1, stdout: "", timedOut: outcome === "timed_out",
85
+ stderr: outcome === "auth_required" ? "invalid API key" : "ProviderModelNotFoundError",
86
+ });
87
+ const result = await testEnvironment({ companyId: "company-1", adapterType: "paperclip_runner",
88
+ config: { model: "openrouter/deepseek/deepseek-v4-flash-0731", env: { XDG_CONFIG_HOME: configHome } } });
89
+ expect(discoverOpenCodeModels).not.toHaveBeenCalled();
90
+ expect(ensureOpenCodeModelConfiguredAndAvailable).not.toHaveBeenCalled();
91
+ expect(runAdapterExecutionTargetProcess).toHaveBeenCalledExactlyOnceWith(expect.any(String), null, "opencode", ["run", "--format", "json", "--model", "openrouter/deepseek/deepseek-v4-flash-0731"], expect.objectContaining({ stdin: "Respond with hello." }));
92
+ expect(result.status).toBe(outcome === "passed" ? "pass" : "warn");
93
+ expect(result.checks).toContainEqual(expect.objectContaining({ code: `opencode_hello_probe_${outcome}` }));
94
+ const call = runAdapterExecutionTargetProcess.mock.calls[0];
95
+ expect(path.basename(call[4].cwd)).toMatch(/^paperclip-opencode-native-probe-/);
96
+ await expect(stat(call[4].cwd)).rejects.toMatchObject({ code: "ENOENT" });
97
+ });
98
+ it("rejects a malformed native model before starting the probe", async () => {
99
+ const result = await testEnvironment({ companyId: "company-1", adapterType: "paperclip_runner",
100
+ config: { model: "missing-provider", env: { XDG_CONFIG_HOME: configHome } } });
101
+ expect(result.status).toBe("fail");
102
+ expect(runAdapterExecutionTargetProcess).not.toHaveBeenCalled();
103
+ expect(discoverOpenCodeModels).not.toHaveBeenCalled();
104
+ });
105
+ it("preserves an explicitly configured native probe directory", async () => {
106
+ await testEnvironment({ companyId: "company-1", adapterType: "paperclip_runner",
107
+ config: { model: "provider/model", cwd: configHome, env: { XDG_CONFIG_HOME: configHome } } });
108
+ const call = runAdapterExecutionTargetProcess.mock.calls[0];
109
+ expect(call[4].cwd).toBe(configHome);
110
+ expect((await stat(configHome)).isDirectory()).toBe(true);
111
+ });
112
+ it("keeps catalog validation for the legacy local adapter", async () => {
113
+ vi.mocked(discoverOpenCodeModels).mockResolvedValueOnce([{ id: "provider/model", label: "Model" }]);
114
+ vi.mocked(ensureOpenCodeModelConfiguredAndAvailable).mockResolvedValueOnce([{ id: "provider/model", label: "Model" }]);
115
+ const result = await testEnvironment({ companyId: "company-1", adapterType: "opencode_local",
116
+ config: { model: "provider/model", env: { XDG_CONFIG_HOME: configHome } } });
117
+ expect(result.status).toBe("pass");
118
+ expect(discoverOpenCodeModels).toHaveBeenCalledOnce();
119
+ expect(ensureOpenCodeModelConfiguredAndAvailable).toHaveBeenCalledOnce();
120
+ expect(runAdapterExecutionTargetProcess).toHaveBeenCalledOnce();
121
+ });
75
122
  it.each([false, true])("stages remote runtime config assets for sandbox hello probes (managed=%s)", async (managed) => {
76
123
  const configHome = await mkdtemp(path.join(os.tmpdir(), "opencode-remote-test-config-"));
77
124
  configHomes.push(configHome);