@getpaseo/server 0.1.71 → 0.1.72

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 (79) hide show
  1. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  2. package/dist/server/server/agent/agent-response-loop.js +2 -1
  3. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  4. package/dist/server/server/agent/create-agent-title.d.ts +8 -0
  5. package/dist/server/server/agent/create-agent-title.d.ts.map +1 -0
  6. package/dist/server/server/agent/create-agent-title.js +29 -0
  7. package/dist/server/server/agent/create-agent-title.js.map +1 -0
  8. package/dist/server/server/agent/import-sessions.d.ts +20 -1
  9. package/dist/server/server/agent/import-sessions.d.ts.map +1 -1
  10. package/dist/server/server/agent/import-sessions.js +101 -0
  11. package/dist/server/server/agent/import-sessions.js.map +1 -1
  12. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  13. package/dist/server/server/agent/provider-registry.js +2 -1
  14. package/dist/server/server/agent/provider-registry.js.map +1 -1
  15. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +25 -0
  16. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -0
  17. package/dist/server/server/agent/providers/codex/app-server-transport.js +183 -0
  18. package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -0
  19. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +1 -21
  20. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  21. package/dist/server/server/agent/providers/codex-app-server-agent.js +1 -170
  22. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  23. package/dist/server/server/agent/providers/opencode/runtime.d.ts +27 -0
  24. package/dist/server/server/agent/providers/opencode/runtime.d.ts.map +1 -0
  25. package/dist/server/server/agent/providers/opencode/runtime.js +5 -0
  26. package/dist/server/server/agent/providers/opencode/runtime.js.map +1 -0
  27. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +55 -0
  28. package/dist/server/server/agent/providers/opencode/server-manager.d.ts.map +1 -0
  29. package/dist/server/server/agent/providers/opencode/server-manager.js +255 -0
  30. package/dist/server/server/agent/providers/opencode/server-manager.js.map +1 -0
  31. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +22 -0
  32. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts.map +1 -0
  33. package/dist/server/server/agent/providers/opencode/test-server-manager.js +28 -0
  34. package/dist/server/server/agent/providers/opencode/test-server-manager.js.map +1 -0
  35. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +75 -0
  36. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts.map +1 -0
  37. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +169 -0
  38. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js.map +1 -0
  39. package/dist/server/server/agent/providers/opencode-agent.d.ts +5 -35
  40. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  41. package/dist/server/server/agent/providers/opencode-agent.js +28 -258
  42. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  43. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +8 -3
  44. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  45. package/dist/server/server/agent/providers/pi-direct-agent.js +44 -34
  46. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  47. package/dist/server/server/checkout/status-projection.d.ts +19 -0
  48. package/dist/server/server/checkout/status-projection.d.ts.map +1 -0
  49. package/dist/server/server/checkout/status-projection.js +98 -0
  50. package/dist/server/server/checkout/status-projection.js.map +1 -0
  51. package/dist/server/server/paseo-worktree-service.d.ts +2 -1
  52. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
  53. package/dist/server/server/paseo-worktree-service.js +30 -3
  54. package/dist/server/server/paseo-worktree-service.js.map +1 -1
  55. package/dist/server/server/session.d.ts +1 -17
  56. package/dist/server/server/session.d.ts.map +1 -1
  57. package/dist/server/server/session.js +24 -233
  58. package/dist/server/server/session.js.map +1 -1
  59. package/dist/server/server/workspace-directory.d.ts +0 -2
  60. package/dist/server/server/workspace-directory.d.ts.map +1 -1
  61. package/dist/server/server/workspace-directory.js +9 -26
  62. package/dist/server/server/workspace-directory.js.map +1 -1
  63. package/dist/server/shared/agent-state-bucket.d.ts +13 -0
  64. package/dist/server/shared/agent-state-bucket.d.ts.map +1 -0
  65. package/dist/server/shared/agent-state-bucket.js +41 -0
  66. package/dist/server/shared/agent-state-bucket.js.map +1 -0
  67. package/dist/server/shared/git-remote.d.ts +16 -0
  68. package/dist/server/shared/git-remote.d.ts.map +1 -0
  69. package/dist/server/shared/git-remote.js +72 -0
  70. package/dist/server/shared/git-remote.js.map +1 -0
  71. package/dist/server/utils/checkout-git.d.ts +1 -0
  72. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  73. package/dist/server/utils/checkout-git.js +3 -0
  74. package/dist/server/utils/checkout-git.js.map +1 -1
  75. package/dist/server/utils/github-remote.d.ts +3 -7
  76. package/dist/server/utils/github-remote.d.ts.map +1 -1
  77. package/dist/server/utils/github-remote.js +4 -70
  78. package/dist/server/utils/github-remote.js.map +1 -1
  79. package/package.json +4 -4
@@ -0,0 +1,27 @@
1
+ import { type OpencodeClient } from "@opencode-ai/sdk/v2/client";
2
+ export interface OpenCodeServerAcquisition {
3
+ server: {
4
+ port: number;
5
+ url: string;
6
+ };
7
+ release: () => void;
8
+ }
9
+ export interface OpenCodeRuntime {
10
+ acquireServer(options: {
11
+ force: boolean;
12
+ }): Promise<OpenCodeServerAcquisition>;
13
+ ensureServerRunning(): Promise<{
14
+ port: number;
15
+ url: string;
16
+ }>;
17
+ createClient(options: {
18
+ baseUrl: string;
19
+ directory: string;
20
+ }): OpencodeClient;
21
+ shutdown(): Promise<void>;
22
+ }
23
+ export declare function createSdkOpenCodeClient(options: {
24
+ baseUrl: string;
25
+ directory: string;
26
+ }): OpencodeClient;
27
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/E,mBAAmB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,YAAY,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC;IAC9E,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,CAEjB"}
@@ -0,0 +1,5 @@
1
+ import { createOpencodeClient, } from "@opencode-ai/sdk/v2/client";
2
+ export function createSdkOpenCodeClient(options) {
3
+ return createOpencodeClient(options);
4
+ }
5
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAGrB,MAAM,4BAA4B,CAAC;AAcpC,MAAM,UAAU,uBAAuB,CAAC,OAGvC;IACC,OAAO,oBAAoB,CAAC,OAA8D,CAAC,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ import type { Logger } from "pino";
3
+ import { type ProviderRuntimeSettings } from "../../provider-launch-config.js";
4
+ export interface OpenCodeServerAcquisition {
5
+ server: {
6
+ port: number;
7
+ url: string;
8
+ };
9
+ release: () => void;
10
+ }
11
+ export interface OpenCodeServerManagerLike {
12
+ ensureRunning(): Promise<{
13
+ port: number;
14
+ url: string;
15
+ }>;
16
+ acquire(options: {
17
+ force: boolean;
18
+ }): Promise<OpenCodeServerAcquisition>;
19
+ }
20
+ export interface OpenCodeServerGeneration {
21
+ process: ChildProcess;
22
+ port: number;
23
+ url: string;
24
+ refCount: number;
25
+ retired: boolean;
26
+ }
27
+ export declare class OpenCodeServerManager implements OpenCodeServerManagerLike {
28
+ private static instance;
29
+ private static exitHandlerRegistered;
30
+ private currentServer;
31
+ private retiredServers;
32
+ private startPromise;
33
+ private forcedRefreshPromise;
34
+ private readonly logger;
35
+ private readonly runtimeSettings?;
36
+ private readonly runtimeSettingsKey;
37
+ private constructor();
38
+ static getInstance(logger: Logger, runtimeSettings?: ProviderRuntimeSettings): OpenCodeServerManager;
39
+ private static registerExitHandler;
40
+ ensureRunning(): Promise<{
41
+ port: number;
42
+ url: string;
43
+ }>;
44
+ acquire(options: {
45
+ force: boolean;
46
+ }): Promise<OpenCodeServerAcquisition>;
47
+ private getForcedRefreshServer;
48
+ private getCurrentServer;
49
+ private rotateCurrentServer;
50
+ private startServer;
51
+ shutdown(): Promise<void>;
52
+ private cleanupRetiredServers;
53
+ private killServer;
54
+ }
55
+ //# sourceMappingURL=server-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/server-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AAKzC,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,OAAO,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,qBAAsB,YAAW,yBAAyB;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC;IAC7D,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAS;IAC7C,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,YAAY,CAAkD;IACtE,OAAO,CAAC,oBAAoB,CAAkD;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAA0B;IAC3D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAE5C,OAAO;IAMP,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,uBAAuB,GACxC,qBAAqB;IAiBxB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAgB5B,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAMvD,OAAO,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;YAmBhE,sBAAsB;YAgBtB,gBAAgB;YAqBhB,mBAAmB;YAiBnB,WAAW;IA6FnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B,OAAO,CAAC,qBAAqB;YASf,UAAU;CAqBzB"}
@@ -0,0 +1,255 @@
1
+ import net from "node:net";
2
+ import { findExecutable } from "../../../../utils/executable.js";
3
+ import { spawnProcess } from "../../../../utils/spawn.js";
4
+ import { terminateWithTreeKill } from "../../../../utils/tree-kill.js";
5
+ import { createProviderEnvSpec, resolveProviderCommandPrefix, } from "../../provider-launch-config.js";
6
+ const OPENCODE_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT_MS = 5000;
7
+ const OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS = 1000;
8
+ export class OpenCodeServerManager {
9
+ constructor(logger, runtimeSettings) {
10
+ this.currentServer = null;
11
+ this.retiredServers = new Set();
12
+ this.startPromise = null;
13
+ this.forcedRefreshPromise = null;
14
+ this.logger = logger;
15
+ this.runtimeSettings = runtimeSettings;
16
+ this.runtimeSettingsKey = JSON.stringify(runtimeSettings ?? {});
17
+ }
18
+ static getInstance(logger, runtimeSettings) {
19
+ const nextSettingsKey = JSON.stringify(runtimeSettings ?? {});
20
+ if (!OpenCodeServerManager.instance) {
21
+ OpenCodeServerManager.instance = new OpenCodeServerManager(logger, runtimeSettings);
22
+ OpenCodeServerManager.registerExitHandler();
23
+ }
24
+ else if (OpenCodeServerManager.instance.runtimeSettingsKey !== nextSettingsKey) {
25
+ logger.warn({
26
+ existingRuntimeSettings: OpenCodeServerManager.instance.runtimeSettingsKey,
27
+ requestedRuntimeSettings: nextSettingsKey,
28
+ }, "OpenCode server manager already initialized with different runtime settings");
29
+ }
30
+ return OpenCodeServerManager.instance;
31
+ }
32
+ static registerExitHandler() {
33
+ if (OpenCodeServerManager.exitHandlerRegistered) {
34
+ return;
35
+ }
36
+ OpenCodeServerManager.exitHandlerRegistered = true;
37
+ const cleanup = () => {
38
+ const instance = OpenCodeServerManager.instance;
39
+ void instance?.shutdown();
40
+ };
41
+ process.on("exit", cleanup);
42
+ process.on("SIGTERM", cleanup);
43
+ process.on("SIGINT", cleanup);
44
+ }
45
+ async ensureRunning() {
46
+ const acquisition = await this.acquire({ force: false });
47
+ acquisition.release();
48
+ return acquisition.server;
49
+ }
50
+ async acquire(options) {
51
+ const server = options.force
52
+ ? await this.getForcedRefreshServer()
53
+ : await this.getCurrentServer();
54
+ server.refCount += 1;
55
+ let released = false;
56
+ return {
57
+ server: { port: server.port, url: server.url },
58
+ release: () => {
59
+ if (released) {
60
+ return;
61
+ }
62
+ released = true;
63
+ server.refCount -= 1;
64
+ this.cleanupRetiredServers();
65
+ },
66
+ };
67
+ }
68
+ async getForcedRefreshServer() {
69
+ if (this.forcedRefreshPromise) {
70
+ return this.forcedRefreshPromise;
71
+ }
72
+ this.forcedRefreshPromise = Promise.resolve()
73
+ .then(async () => {
74
+ await this.rotateCurrentServer();
75
+ return this.getCurrentServer();
76
+ })
77
+ .finally(() => {
78
+ this.forcedRefreshPromise = null;
79
+ });
80
+ return this.forcedRefreshPromise;
81
+ }
82
+ async getCurrentServer() {
83
+ if (this.startPromise) {
84
+ return this.startPromise;
85
+ }
86
+ if (this.currentServer && !this.currentServer.process.killed) {
87
+ return this.currentServer;
88
+ }
89
+ this.startPromise = this.startServer();
90
+ try {
91
+ const result = await this.startPromise;
92
+ if (!result.retired) {
93
+ this.currentServer = result;
94
+ }
95
+ return result;
96
+ }
97
+ finally {
98
+ this.startPromise = null;
99
+ }
100
+ }
101
+ async rotateCurrentServer() {
102
+ const existing = this.currentServer;
103
+ if (existing) {
104
+ existing.retired = true;
105
+ this.retiredServers.add(existing);
106
+ this.currentServer = null;
107
+ this.cleanupRetiredServers();
108
+ }
109
+ if (this.startPromise) {
110
+ const pending = await this.startPromise;
111
+ pending.retired = true;
112
+ this.retiredServers.add(pending);
113
+ this.currentServer = null;
114
+ this.cleanupRetiredServers();
115
+ }
116
+ }
117
+ async startServer() {
118
+ const port = await findAvailablePort();
119
+ const url = `http://127.0.0.1:${port}`;
120
+ const launchPrefix = await resolveProviderCommandPrefix(this.runtimeSettings?.command, resolveOpenCodeBinary);
121
+ return new Promise((resolve, reject) => {
122
+ const serverProcess = spawnProcess(launchPrefix.command, [...launchPrefix.args, "serve", "--port", String(port)], {
123
+ detached: process.platform !== "win32",
124
+ stdio: ["ignore", "pipe", "pipe"],
125
+ ...createProviderEnvSpec({ runtimeSettings: this.runtimeSettings }),
126
+ });
127
+ let started = false;
128
+ let stderrBuffer = "";
129
+ let stdoutBuffer = "";
130
+ const STARTUP_BUFFER_CAP = 8192;
131
+ const appendCapped = (current, chunk) => {
132
+ if (current.length >= STARTUP_BUFFER_CAP) {
133
+ return current;
134
+ }
135
+ const remaining = STARTUP_BUFFER_CAP - current.length;
136
+ return current + chunk.slice(0, remaining);
137
+ };
138
+ const buildStartupErrorMessage = (headline) => {
139
+ const sections = [headline];
140
+ const stderrTrimmed = stderrBuffer.trim();
141
+ if (stderrTrimmed.length > 0) {
142
+ sections.push(`stderr: ${stderrTrimmed}`);
143
+ }
144
+ const stdoutTrimmed = stdoutBuffer.trim();
145
+ if (stdoutTrimmed.length > 0) {
146
+ sections.push(`stdout: ${stdoutTrimmed}`);
147
+ }
148
+ return sections.join("\n");
149
+ };
150
+ const timeout = setTimeout(() => {
151
+ if (!started) {
152
+ reject(new Error(buildStartupErrorMessage("OpenCode server startup timeout")));
153
+ }
154
+ }, 30000);
155
+ serverProcess.stdout?.on("data", (data) => {
156
+ const output = data.toString();
157
+ stdoutBuffer = appendCapped(stdoutBuffer, output);
158
+ if (output.includes("listening on") && !started) {
159
+ started = true;
160
+ clearTimeout(timeout);
161
+ resolve({
162
+ process: serverProcess,
163
+ port,
164
+ url,
165
+ refCount: 0,
166
+ retired: false,
167
+ });
168
+ }
169
+ });
170
+ serverProcess.stderr?.on("data", (data) => {
171
+ const output = data.toString();
172
+ stderrBuffer = appendCapped(stderrBuffer, output);
173
+ this.logger.error({ stderr: output.trim() }, "OpenCode server stderr");
174
+ });
175
+ serverProcess.on("error", (error) => {
176
+ clearTimeout(timeout);
177
+ const headline = error instanceof Error ? error.message : String(error);
178
+ reject(new Error(buildStartupErrorMessage(headline)));
179
+ });
180
+ serverProcess.on("exit", (code) => {
181
+ if (!started) {
182
+ clearTimeout(timeout);
183
+ reject(new Error(buildStartupErrorMessage(`OpenCode server exited with code ${code}`)));
184
+ }
185
+ if (this.currentServer?.process === serverProcess) {
186
+ this.currentServer = null;
187
+ }
188
+ for (const retired of Array.from(this.retiredServers)) {
189
+ if (retired.process === serverProcess) {
190
+ this.retiredServers.delete(retired);
191
+ }
192
+ }
193
+ });
194
+ });
195
+ }
196
+ async shutdown() {
197
+ const servers = [
198
+ ...(this.currentServer ? [this.currentServer] : []),
199
+ ...Array.from(this.retiredServers),
200
+ ];
201
+ await Promise.all(servers.map((server) => this.killServer(server)));
202
+ this.currentServer = null;
203
+ this.retiredServers.clear();
204
+ }
205
+ cleanupRetiredServers() {
206
+ for (const server of Array.from(this.retiredServers)) {
207
+ if (server.refCount === 0) {
208
+ this.retiredServers.delete(server);
209
+ void this.killServer(server);
210
+ }
211
+ }
212
+ }
213
+ async killServer(server) {
214
+ if (server.process.killed) {
215
+ return;
216
+ }
217
+ const result = await terminateWithTreeKill(server.process, {
218
+ gracefulTimeoutMs: OPENCODE_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT_MS,
219
+ forceTimeoutMs: OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS,
220
+ onForceSignal: () => {
221
+ this.logger.warn({ timeoutMs: OPENCODE_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT_MS }, "OpenCode server did not exit after SIGTERM; sending SIGKILL");
222
+ },
223
+ });
224
+ if (result === "kill-timeout") {
225
+ this.logger.warn({ timeoutMs: OPENCODE_SERVER_FORCE_SHUTDOWN_TIMEOUT_MS }, "OpenCode server did not report exit after SIGKILL");
226
+ }
227
+ }
228
+ }
229
+ OpenCodeServerManager.instance = null;
230
+ OpenCodeServerManager.exitHandlerRegistered = false;
231
+ async function resolveOpenCodeBinary() {
232
+ const found = await findExecutable("opencode");
233
+ if (found) {
234
+ return found;
235
+ }
236
+ throw new Error("OpenCode binary not found. Install OpenCode (https://github.com/opencode-ai/opencode) and ensure it is available in your shell PATH.");
237
+ }
238
+ function findAvailablePort() {
239
+ return new Promise((resolve, reject) => {
240
+ const server = net.createServer();
241
+ server.listen(0, "127.0.0.1", () => {
242
+ const address = server.address();
243
+ server.close(() => {
244
+ if (typeof address === "object" && address) {
245
+ resolve(address.port);
246
+ }
247
+ else {
248
+ reject(new Error("Failed to allocate port"));
249
+ }
250
+ });
251
+ });
252
+ server.on("error", reject);
253
+ });
254
+ }
255
+ //# sourceMappingURL=server-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/server-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { OpenCodeServerAcquisition, OpenCodeServerManagerLike } from "./server-manager.js";
2
+ export interface TestOpenCodeServerAcquisition {
3
+ force: boolean;
4
+ released: boolean;
5
+ }
6
+ export declare class TestOpenCodeServerManager implements OpenCodeServerManagerLike {
7
+ readonly acquisitions: TestOpenCodeServerAcquisition[];
8
+ readonly server: {
9
+ port: number;
10
+ url: string;
11
+ };
12
+ ensureRunningCount: number;
13
+ ensureRunning(): Promise<{
14
+ port: number;
15
+ url: string;
16
+ }>;
17
+ acquire(options: {
18
+ force: boolean;
19
+ }): Promise<OpenCodeServerAcquisition>;
20
+ }
21
+ export declare function createTestOpenCodeServerManager(): TestOpenCodeServerManager;
22
+ //# sourceMappingURL=test-server-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-server-manager.d.ts","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/test-server-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhG,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,yBAA0B,YAAW,yBAAyB;IACzE,QAAQ,CAAC,YAAY,EAAE,6BAA6B,EAAE,CAAM;IAC5D,QAAQ,CAAC,MAAM;;;MAAgD;IAC/D,kBAAkB,SAAK;IAEjB,aAAa,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAKvD,OAAO,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAa/E;AAED,wBAAgB,+BAA+B,IAAI,yBAAyB,CAE3E"}
@@ -0,0 +1,28 @@
1
+ export class TestOpenCodeServerManager {
2
+ constructor() {
3
+ this.acquisitions = [];
4
+ this.server = { port: 1234, url: "http://127.0.0.1:1234" };
5
+ this.ensureRunningCount = 0;
6
+ }
7
+ async ensureRunning() {
8
+ this.ensureRunningCount += 1;
9
+ return this.server;
10
+ }
11
+ async acquire(options) {
12
+ const acquisition = {
13
+ force: options.force,
14
+ released: false,
15
+ };
16
+ this.acquisitions.push(acquisition);
17
+ return {
18
+ server: this.server,
19
+ release: () => {
20
+ acquisition.released = true;
21
+ },
22
+ };
23
+ }
24
+ }
25
+ export function createTestOpenCodeServerManager() {
26
+ return new TestOpenCodeServerManager();
27
+ }
28
+ //# sourceMappingURL=test-server-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-server-manager.js","sourceRoot":"","sources":["../../../../../../src/server/agent/providers/opencode/test-server-manager.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,yBAAyB;IAAtC;QACW,iBAAY,GAAoC,EAAE,CAAC;QACnD,WAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,uBAAuB,EAAE,CAAC;QAC/D,uBAAkB,GAAG,CAAC,CAAC;IAoBzB,CAAC;IAlBC,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA2B;QACvC,MAAM,WAAW,GAAkC;YACjD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,GAAG,EAAE;gBACZ,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC9B,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO,IAAI,yBAAyB,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { OpencodeClient } from "@opencode-ai/sdk/v2/client";
2
+ import type { OpenCodeRuntime, OpenCodeServerAcquisition } from "../runtime.js";
3
+ interface OpenCodeResponse {
4
+ data?: unknown;
5
+ error?: unknown;
6
+ }
7
+ export declare class TestOpenCodeRuntime implements OpenCodeRuntime {
8
+ readonly acquisitions: Array<{
9
+ force: boolean;
10
+ releaseCount: number;
11
+ }>;
12
+ readonly clientCreations: Array<{
13
+ baseUrl: string;
14
+ directory: string;
15
+ }>;
16
+ private readonly clients;
17
+ server: {
18
+ port: number;
19
+ url: string;
20
+ };
21
+ enqueueClient(client: TestOpenCodeClient): void;
22
+ acquireServer(options: {
23
+ force: boolean;
24
+ }): Promise<OpenCodeServerAcquisition>;
25
+ ensureServerRunning(): Promise<{
26
+ port: number;
27
+ url: string;
28
+ }>;
29
+ createClient(options: {
30
+ baseUrl: string;
31
+ directory: string;
32
+ }): OpencodeClient;
33
+ shutdown(): Promise<void>;
34
+ }
35
+ export declare class TestOpenCodeClient {
36
+ readonly calls: {
37
+ appAgents: unknown[];
38
+ commandList: unknown[];
39
+ eventSubscribe: unknown[];
40
+ permissionReply: unknown[];
41
+ providerList: unknown[];
42
+ questionReject: unknown[];
43
+ questionReply: unknown[];
44
+ sessionAbort: unknown[];
45
+ sessionCommand: unknown[];
46
+ sessionCreate: unknown[];
47
+ sessionDelete: unknown[];
48
+ sessionMessages: unknown[];
49
+ sessionPromptAsync: unknown[];
50
+ sessionSummarize: unknown[];
51
+ sessionUpdate: unknown[];
52
+ };
53
+ appAgentsResponse: OpenCodeResponse;
54
+ commandListResponse: OpenCodeResponse;
55
+ eventStream: AsyncIterable<unknown>;
56
+ permissionReplyResponse: OpenCodeResponse;
57
+ providerListResponse: OpenCodeResponse;
58
+ providerListImplementation: (() => Promise<OpenCodeResponse>) | null;
59
+ questionRejectResponse: OpenCodeResponse;
60
+ questionReplyResponse: OpenCodeResponse;
61
+ sessionAbortResponse: OpenCodeResponse;
62
+ sessionCommandError: unknown;
63
+ sessionCommandResponse: OpenCodeResponse;
64
+ sessionCreateResponse: OpenCodeResponse;
65
+ sessionDeleteResponse: OpenCodeResponse;
66
+ sessionMessagesResponse: OpenCodeResponse;
67
+ sessionPromptAsyncResponse: OpenCodeResponse;
68
+ sessionSummarizeResponse: OpenCodeResponse;
69
+ sessionUpdateResponse: OpenCodeResponse;
70
+ asSdkClient(): OpencodeClient;
71
+ }
72
+ export declare function createEventStream(events: unknown[]): AsyncGenerator<unknown>;
73
+ export declare function idleEvent(): unknown;
74
+ export {};
75
+ //# sourceMappingURL=test-opencode-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-opencode-runtime.d.ts","sourceRoot":"","sources":["../../../../../../../src/server/agent/providers/opencode/test-utils/test-opencode-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEhF,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACzD,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAC5E,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAC7E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,MAAM;;;MAAgD;IAEtD,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAIzC,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAW9E,mBAAmB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAInE,YAAY,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc;IAMvE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,KAAK;mBACK,OAAO,EAAE;qBACP,OAAO,EAAE;wBACN,OAAO,EAAE;yBACR,OAAO,EAAE;sBACZ,OAAO,EAAE;wBACP,OAAO,EAAE;uBACV,OAAO,EAAE;sBACV,OAAO,EAAE;wBACP,OAAO,EAAE;uBACV,OAAO,EAAE;uBACT,OAAO,EAAE;yBACP,OAAO,EAAE;4BACN,OAAO,EAAE;0BACX,OAAO,EAAE;uBACZ,OAAO,EAAE;MAC9B;IAEF,iBAAiB,EAAE,gBAAgB,CAAgB;IACnD,mBAAmB,EAAE,gBAAgB,CAAgB;IACrD,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAoC;IACvE,uBAAuB,EAAE,gBAAgB,CAAM;IAC/C,oBAAoB,EAAE,gBAAgB,CAAwC;IAC9E,0BAA0B,EAAE,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC5E,sBAAsB,EAAE,gBAAgB,CAAM;IAC9C,qBAAqB,EAAE,gBAAgB,CAAM;IAC7C,oBAAoB,EAAE,gBAAgB,CAAM;IAC5C,mBAAmB,EAAE,OAAO,CAAQ;IACpC,sBAAsB,EAAE,gBAAgB,CAAM;IAC9C,qBAAqB,EAAE,gBAAgB,CAAiC;IACxE,qBAAqB,EAAE,gBAAgB,CAAM;IAC7C,uBAAuB,EAAE,gBAAgB,CAAgB;IACzD,0BAA0B,EAAE,gBAAgB,CAAM;IAClD,wBAAwB,EAAE,gBAAgB,CAAgB;IAC1D,qBAAqB,EAAE,gBAAgB,CAAM;IAE7C,WAAW,IAAI,cAAc;CAuF9B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAM5E;AAED,wBAAgB,SAAS,IAAI,OAAO,CAKnC"}