sylas-opencode-runner 0.2.21

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,251 @@
1
+ /**
2
+ * OpenCode Message Formatter
3
+ *
4
+ * Implements message formatting for OpenCode tool messages.
5
+ * Converts tool use/result messages into human-readable content for Linear.
6
+ *
7
+ * OpenCode tool names follow a pattern similar to Claude's tools:
8
+ * - read: Read file contents
9
+ * - write: Write content to a file
10
+ * - edit: Edit file contents
11
+ * - bash: Execute shell commands
12
+ * - glob: Find files matching patterns
13
+ * - grep: Search file contents
14
+ * - todowrite: Update task list
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ function getString(input, key) {
19
+ const value = input[key];
20
+ return typeof value === "string" ? value : undefined;
21
+ }
22
+ function getNumber(input, key) {
23
+ const value = input[key];
24
+ return typeof value === "number" ? value : undefined;
25
+ }
26
+ export class OpenCodeMessageFormatter {
27
+ formatTaskParameter(toolName, toolInput) {
28
+ if (typeof toolInput === "string")
29
+ return toolInput;
30
+ try {
31
+ switch (toolName) {
32
+ case "TaskCreate": {
33
+ const subject = getString(toolInput, "subject") || "";
34
+ const description = getString(toolInput, "description") || "";
35
+ let formatted = subject;
36
+ if (description && description !== subject) {
37
+ formatted += `\n${description}`;
38
+ }
39
+ return formatted;
40
+ }
41
+ case "TaskUpdate": {
42
+ const taskId = getString(toolInput, "taskId") || "";
43
+ const status = getString(toolInput, "status");
44
+ const subject = getString(toolInput, "subject");
45
+ let emoji = "";
46
+ if (status === "completed")
47
+ emoji = "✅";
48
+ else if (status === "in_progress")
49
+ emoji = "🔄";
50
+ else if (status === "pending")
51
+ emoji = "⏳";
52
+ else if (status === "deleted")
53
+ emoji = "🗑️";
54
+ if (subject)
55
+ return `${emoji} Task #${taskId} — ${subject}`;
56
+ return `${emoji} Task #${taskId}`;
57
+ }
58
+ case "TaskGet": {
59
+ const taskId = getString(toolInput, "taskId");
60
+ return taskId ? `Task #${taskId}` : JSON.stringify(toolInput);
61
+ }
62
+ case "TaskList":
63
+ return "List all tasks";
64
+ default:
65
+ return JSON.stringify(toolInput);
66
+ }
67
+ }
68
+ catch {
69
+ return JSON.stringify(toolInput);
70
+ }
71
+ }
72
+ formatTodoWriteParameter(jsonContent) {
73
+ try {
74
+ const data = JSON.parse(jsonContent);
75
+ if (!data.todos || !Array.isArray(data.todos)) {
76
+ return jsonContent;
77
+ }
78
+ const todos = data.todos;
79
+ let formatted = "\n";
80
+ todos.forEach((todo, index) => {
81
+ let statusEmoji = "";
82
+ if (todo.status === "completed")
83
+ statusEmoji = "✅ ";
84
+ else if (todo.status === "in_progress")
85
+ statusEmoji = "🔄 ";
86
+ else if (todo.status === "pending")
87
+ statusEmoji = "⏳ ";
88
+ const text = todo.content || todo.description || "";
89
+ formatted += `${statusEmoji}${text}`;
90
+ if (index < todos.length - 1)
91
+ formatted += "\n";
92
+ });
93
+ return formatted;
94
+ }
95
+ catch {
96
+ return jsonContent;
97
+ }
98
+ }
99
+ formatToolParameter(toolName, toolInput) {
100
+ if (typeof toolInput === "string")
101
+ return toolInput;
102
+ try {
103
+ switch (toolName) {
104
+ case "bash": {
105
+ const command = getString(toolInput, "command");
106
+ return command || JSON.stringify(toolInput);
107
+ }
108
+ case "read": {
109
+ const filePath = getString(toolInput, "file_path") || getString(toolInput, "path");
110
+ if (filePath) {
111
+ let param = filePath;
112
+ const offset = getNumber(toolInput, "offset");
113
+ const limit = getNumber(toolInput, "limit");
114
+ if (offset !== undefined || limit !== undefined) {
115
+ const start = offset || 0;
116
+ const end = limit ? start + limit : "end";
117
+ param += ` (lines ${start + 1}-${end})`;
118
+ }
119
+ return param;
120
+ }
121
+ break;
122
+ }
123
+ case "write": {
124
+ const filePath = getString(toolInput, "file_path") || getString(toolInput, "path");
125
+ if (filePath)
126
+ return filePath;
127
+ break;
128
+ }
129
+ case "edit": {
130
+ const filePath = getString(toolInput, "file_path") || getString(toolInput, "path");
131
+ if (filePath)
132
+ return filePath;
133
+ break;
134
+ }
135
+ case "glob": {
136
+ const pattern = getString(toolInput, "pattern");
137
+ if (pattern)
138
+ return `Pattern: \`${pattern}\``;
139
+ break;
140
+ }
141
+ case "grep": {
142
+ const pattern = getString(toolInput, "pattern");
143
+ if (pattern) {
144
+ let param = `Pattern: \`${pattern}\``;
145
+ const path = getString(toolInput, "path");
146
+ if (path)
147
+ param += ` in ${path}`;
148
+ return param;
149
+ }
150
+ break;
151
+ }
152
+ case "todowrite":
153
+ if (toolInput.todos && Array.isArray(toolInput.todos)) {
154
+ return this.formatTodoWriteParameter(JSON.stringify(toolInput));
155
+ }
156
+ break;
157
+ default:
158
+ if (toolName.startsWith("mcp__")) {
159
+ const fields = ["query", "id", "issueId", "title", "name", "path"];
160
+ for (const field of fields) {
161
+ const value = getString(toolInput, field);
162
+ if (value)
163
+ return `${field}: ${value}`;
164
+ }
165
+ }
166
+ break;
167
+ }
168
+ return JSON.stringify(toolInput);
169
+ }
170
+ catch {
171
+ return JSON.stringify(toolInput);
172
+ }
173
+ }
174
+ formatToolActionName(toolName, toolInput, isError) {
175
+ if (toolName === "bash") {
176
+ const description = getString(toolInput, "description");
177
+ if (description) {
178
+ const baseName = isError ? `${toolName} (Error)` : toolName;
179
+ return `${baseName} (${description})`;
180
+ }
181
+ }
182
+ return isError ? `${toolName} (Error)` : toolName;
183
+ }
184
+ formatToolResult(toolName, toolInput, result, isError) {
185
+ if (isError)
186
+ return `\`\`\`\n${result}\n\`\`\``;
187
+ try {
188
+ switch (toolName) {
189
+ case "bash": {
190
+ let formatted = "";
191
+ const command = getString(toolInput, "command");
192
+ if (command)
193
+ formatted += `\`\`\`bash\n${command}\n\`\`\`\n\n`;
194
+ if (result?.trim()) {
195
+ formatted += `\`\`\`\n${result}\n\`\`\``;
196
+ }
197
+ else {
198
+ formatted += "*No output*";
199
+ }
200
+ return formatted;
201
+ }
202
+ case "read": {
203
+ if (result?.trim()) {
204
+ let lang = "";
205
+ const filePath = getString(toolInput, "file_path") || getString(toolInput, "path");
206
+ if (filePath) {
207
+ const ext = filePath.split(".").pop()?.toLowerCase();
208
+ const langMap = {
209
+ ts: "typescript",
210
+ tsx: "typescript",
211
+ js: "javascript",
212
+ jsx: "javascript",
213
+ py: "python",
214
+ go: "go",
215
+ rs: "rust",
216
+ json: "json",
217
+ yaml: "yaml",
218
+ yml: "yaml",
219
+ md: "markdown",
220
+ sh: "bash",
221
+ };
222
+ lang = langMap[ext || ""] || "";
223
+ }
224
+ return `\`\`\`${lang}\n${result}\n\`\`\``;
225
+ }
226
+ return "*File read successfully*";
227
+ }
228
+ case "write":
229
+ return result?.trim() ? result : "*File written successfully*";
230
+ case "edit":
231
+ return result?.trim() ? result : "*Edit completed*";
232
+ case "grep":
233
+ case "glob":
234
+ if (result?.trim())
235
+ return `\`\`\`\n${result}\n\`\`\``;
236
+ return "*No matches found*";
237
+ default:
238
+ if (result?.trim()) {
239
+ if (result.includes("\n") && result.length > 100)
240
+ return `\`\`\`\n${result}\n\`\`\``;
241
+ return result;
242
+ }
243
+ return "*Completed*";
244
+ }
245
+ }
246
+ catch {
247
+ return result || "";
248
+ }
249
+ }
250
+ }
251
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * OpenCode Runner Package
3
+ *
4
+ * SDK integration for the OpenCode AI coding agent with Sylas.
5
+ *
6
+ * This package provides:
7
+ * - Type definitions for OpenCode configuration and sessions
8
+ * - Port allocation utilities for the OpenCode server
9
+ * - Message and event type definitions
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import {
14
+ * type OpenCodeRunnerConfig,
15
+ * type OpenCodeSessionInfo,
16
+ * allocateOpenCodePort,
17
+ * } from "sylas-opencode-runner";
18
+ *
19
+ * // Allocate a port for the OpenCode server
20
+ * const { port } = await allocateOpenCodePort();
21
+ *
22
+ * // Configure the runner
23
+ * const config: OpenCodeRunnerConfig = {
24
+ * sylasHome: "~/.sylas",
25
+ * workingDirectory: "/path/to/project",
26
+ * serverConfig: {
27
+ * port,
28
+ * timeout: 60000,
29
+ * },
30
+ * };
31
+ * ```
32
+ *
33
+ * @packageDocumentation
34
+ */
35
+ export type { OpenCodeAssistantMessage, OpenCodeChatRequest, OpenCodeClientOptions, OpenCodeError, OpenCodeErrorType, OpenCodeEvent, OpenCodeEventBase, OpenCodeEventType, OpenCodeFilePart, OpenCodeMessage, OpenCodeMessageError, OpenCodeMessagePart, OpenCodeMessagePartBase, OpenCodeMessagePartType, OpenCodeMessageUpdateEvent, OpenCodePatchPart, OpenCodeRunnerConfig, OpenCodeRunnerEvents, OpenCodeServerConfig, OpenCodeSession, OpenCodeSessionErrorEvent, OpenCodeSessionInfo, OpenCodeSessionUpdateEvent, OpenCodeSnapshotPart, OpenCodeTextPart, OpenCodeToolPart, OpenCodeToolState, OpenCodeUserMessage, } from "./types.js";
36
+ export { isOpenCodeAssistantMessage, isOpenCodeTextPart, isOpenCodeToolPart, isOpenCodeUserMessage, isToolCompleted, isToolErrored, } from "./types.js";
37
+ export { allocateOpenCodePort, buildServerUrl, DEFAULT_PORT_RANGE, findAvailablePort, getRandomAvailablePort, isPortAvailable, OPENCODE_DEFAULT_PORT, PortAllocationError, type PortAllocationOptions, type PortAllocationResult, } from "./portAllocator.js";
38
+ export type { AccumulatedMessage, CLIEvent, CLIStepFinishEvent, CLIStepStartEvent, CLITextEvent, CLIToolUseEvent, ProcessableEvent, } from "./adapters.js";
39
+ export { createUserMessage, errorEventToSDKMessage, extractSessionId, isCLIEvent, isCLIStepFinish, isCLIStepStart, isCLIText, isCLIToolUse, isMessagePartUpdated, isMessageUpdated, isSessionError, isSessionIdle, isSessionStatus, isTextPart, isToolPart, isToolStateCompleted, isToolStateError, messageEventToSDKMessage, openCodeEventToSDKMessage, partEventToSDKMessage, synthesizeResultMessage, textPartToContentBlock, toolPartToToolResultBlock, toolPartToToolUseBlock, } from "./adapters.js";
40
+ export { OpenCodeRunner } from "./OpenCodeRunner.js";
41
+ export { OpenCodeMessageFormatter } from "./formatter.js";
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAYH,YAAY,EACX,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AAMpB,OAAO,EACN,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACb,MAAM,YAAY,CAAC;AAMpB,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GACzB,MAAM,oBAAoB,CAAC;AAO5B,YAAY,EACX,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,gBAAgB,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,52 @@
1
+ /**
2
+ * OpenCode Runner Package
3
+ *
4
+ * SDK integration for the OpenCode AI coding agent with Sylas.
5
+ *
6
+ * This package provides:
7
+ * - Type definitions for OpenCode configuration and sessions
8
+ * - Port allocation utilities for the OpenCode server
9
+ * - Message and event type definitions
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import {
14
+ * type OpenCodeRunnerConfig,
15
+ * type OpenCodeSessionInfo,
16
+ * allocateOpenCodePort,
17
+ * } from "sylas-opencode-runner";
18
+ *
19
+ * // Allocate a port for the OpenCode server
20
+ * const { port } = await allocateOpenCodePort();
21
+ *
22
+ * // Configure the runner
23
+ * const config: OpenCodeRunnerConfig = {
24
+ * sylasHome: "~/.sylas",
25
+ * workingDirectory: "/path/to/project",
26
+ * serverConfig: {
27
+ * port,
28
+ * timeout: 60000,
29
+ * },
30
+ * };
31
+ * ```
32
+ *
33
+ * @packageDocumentation
34
+ */
35
+ // ============================================================================
36
+ // Type Guards
37
+ // ============================================================================
38
+ export { isOpenCodeAssistantMessage, isOpenCodeTextPart, isOpenCodeToolPart, isOpenCodeUserMessage, isToolCompleted, isToolErrored, } from "./types.js";
39
+ // ============================================================================
40
+ // Port Allocation
41
+ // ============================================================================
42
+ export { allocateOpenCodePort, buildServerUrl, DEFAULT_PORT_RANGE, findAvailablePort, getRandomAvailablePort, isPortAvailable, OPENCODE_DEFAULT_PORT, PortAllocationError, } from "./portAllocator.js";
43
+ export { createUserMessage, errorEventToSDKMessage, extractSessionId, isCLIEvent, isCLIStepFinish, isCLIStepStart, isCLIText, isCLIToolUse, isMessagePartUpdated, isMessageUpdated, isSessionError, isSessionIdle, isSessionStatus, isTextPart, isToolPart, isToolStateCompleted, isToolStateError, messageEventToSDKMessage, openCodeEventToSDKMessage, partEventToSDKMessage, synthesizeResultMessage, textPartToContentBlock, toolPartToToolResultBlock, toolPartToToolUseBlock, } from "./adapters.js";
44
+ // ============================================================================
45
+ // Runner Implementation
46
+ // ============================================================================
47
+ export { OpenCodeRunner } from "./OpenCodeRunner.js";
48
+ // ============================================================================
49
+ // Formatter
50
+ // ============================================================================
51
+ export { OpenCodeMessageFormatter } from "./formatter.js";
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AA2CH,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,OAAO,EACN,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACb,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GAGnB,MAAM,oBAAoB,CAAC;AAgB5B,OAAO,EACN,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,eAAe,CAAC;AAEvB,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Port Allocator for OpenCode SDK Server
3
+ *
4
+ * Provides utilities for allocating available ports for the OpenCode server.
5
+ * The OpenCode SDK requires a port to run its local server, and this utility
6
+ * helps find available ports and manage port allocation.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ /**
11
+ * Default port range for OpenCode servers.
12
+ */
13
+ export declare const DEFAULT_PORT_RANGE: {
14
+ readonly min: 54321;
15
+ readonly max: 54399;
16
+ };
17
+ /**
18
+ * OpenCode's default server port.
19
+ */
20
+ export declare const OPENCODE_DEFAULT_PORT = 54321;
21
+ /**
22
+ * Options for port allocation.
23
+ */
24
+ export interface PortAllocationOptions {
25
+ /**
26
+ * Minimum port number to try.
27
+ * @default 54321
28
+ */
29
+ minPort?: number;
30
+ /**
31
+ * Maximum port number to try.
32
+ * @default 54399
33
+ */
34
+ maxPort?: number;
35
+ /**
36
+ * Preferred port to try first.
37
+ * If available, this port will be used.
38
+ */
39
+ preferredPort?: number;
40
+ /**
41
+ * Host to bind to when checking port availability.
42
+ * @default "127.0.0.1"
43
+ */
44
+ host?: string;
45
+ }
46
+ /**
47
+ * Result of port allocation.
48
+ */
49
+ export interface PortAllocationResult {
50
+ /**
51
+ * The allocated port number.
52
+ */
53
+ port: number;
54
+ /**
55
+ * Whether this was the preferred port.
56
+ */
57
+ isPreferred: boolean;
58
+ /**
59
+ * The host the port is bound to.
60
+ */
61
+ host: string;
62
+ }
63
+ /**
64
+ * Error thrown when no available port is found.
65
+ */
66
+ export declare class PortAllocationError extends Error {
67
+ readonly minPort: number;
68
+ readonly maxPort: number;
69
+ constructor(message: string, minPort: number, maxPort: number);
70
+ }
71
+ /**
72
+ * Check if a specific port is available.
73
+ *
74
+ * @param port - The port number to check
75
+ * @param host - The host to bind to (default: "127.0.0.1")
76
+ * @returns Promise resolving to true if available, false otherwise
77
+ */
78
+ export declare function isPortAvailable(port: number, host?: string): Promise<boolean>;
79
+ /**
80
+ * Find an available port within a specified range.
81
+ *
82
+ * @param options - Port allocation options
83
+ * @returns Promise resolving to an available port number
84
+ * @throws PortAllocationError if no port is available in the range
85
+ */
86
+ export declare function findAvailablePort(options?: PortAllocationOptions): Promise<PortAllocationResult>;
87
+ /**
88
+ * Get a random available port from the OS.
89
+ * This binds to port 0 and lets the OS assign an available port.
90
+ *
91
+ * @param host - The host to bind to (default: "127.0.0.1")
92
+ * @returns Promise resolving to the allocated port number
93
+ */
94
+ export declare function getRandomAvailablePort(host?: string): Promise<number>;
95
+ /**
96
+ * Allocate a port for the OpenCode server.
97
+ * This is the main entry point for port allocation.
98
+ *
99
+ * Strategy:
100
+ * 1. If a preferred port is specified and available, use it
101
+ * 2. Otherwise, try the OpenCode default port (54321)
102
+ * 3. If that's not available, find any available port in the range
103
+ *
104
+ * @param options - Port allocation options
105
+ * @returns Promise resolving to the allocation result
106
+ */
107
+ export declare function allocateOpenCodePort(options?: PortAllocationOptions): Promise<PortAllocationResult>;
108
+ /**
109
+ * Build the base URL for an OpenCode server.
110
+ *
111
+ * @param port - The port number
112
+ * @param host - The host (default: "localhost")
113
+ * @param protocol - The protocol (default: "http")
114
+ * @returns The base URL string
115
+ */
116
+ export declare function buildServerUrl(port: number, host?: string, protocol?: string): string;
117
+ //# sourceMappingURL=portAllocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portAllocator.d.ts","sourceRoot":"","sources":["../src/portAllocator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG5B,OAAO,EAAE,MAAM;aACf,OAAO,EAAE,MAAM;gBAF/B,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM;CAKhC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,SAAc,GAChB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACtC,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAmC/B;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC3C,IAAI,SAAc,GAChB,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACzC,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAa/B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,SAAc,EAClB,QAAQ,SAAS,GACf,MAAM,CAER"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Port Allocator for OpenCode SDK Server
3
+ *
4
+ * Provides utilities for allocating available ports for the OpenCode server.
5
+ * The OpenCode SDK requires a port to run its local server, and this utility
6
+ * helps find available ports and manage port allocation.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import { createServer } from "node:net";
11
+ /**
12
+ * Default port range for OpenCode servers.
13
+ */
14
+ export const DEFAULT_PORT_RANGE = {
15
+ min: 54321,
16
+ max: 54399,
17
+ };
18
+ /**
19
+ * OpenCode's default server port.
20
+ */
21
+ export const OPENCODE_DEFAULT_PORT = 54321;
22
+ /**
23
+ * Error thrown when no available port is found.
24
+ */
25
+ export class PortAllocationError extends Error {
26
+ minPort;
27
+ maxPort;
28
+ constructor(message, minPort, maxPort) {
29
+ super(message);
30
+ this.minPort = minPort;
31
+ this.maxPort = maxPort;
32
+ this.name = "PortAllocationError";
33
+ }
34
+ }
35
+ /**
36
+ * Check if a specific port is available.
37
+ *
38
+ * @param port - The port number to check
39
+ * @param host - The host to bind to (default: "127.0.0.1")
40
+ * @returns Promise resolving to true if available, false otherwise
41
+ */
42
+ export async function isPortAvailable(port, host = "127.0.0.1") {
43
+ return new Promise((resolve) => {
44
+ const server = createServer();
45
+ server.once("error", () => {
46
+ resolve(false);
47
+ });
48
+ server.once("listening", () => {
49
+ server.close(() => {
50
+ resolve(true);
51
+ });
52
+ });
53
+ server.listen(port, host);
54
+ });
55
+ }
56
+ /**
57
+ * Find an available port within a specified range.
58
+ *
59
+ * @param options - Port allocation options
60
+ * @returns Promise resolving to an available port number
61
+ * @throws PortAllocationError if no port is available in the range
62
+ */
63
+ export async function findAvailablePort(options = {}) {
64
+ const { minPort = DEFAULT_PORT_RANGE.min, maxPort = DEFAULT_PORT_RANGE.max, preferredPort, host = "127.0.0.1", } = options;
65
+ // Try preferred port first if specified
66
+ if (preferredPort !== undefined) {
67
+ if (await isPortAvailable(preferredPort, host)) {
68
+ return {
69
+ port: preferredPort,
70
+ isPreferred: true,
71
+ host,
72
+ };
73
+ }
74
+ }
75
+ // Try ports in range
76
+ for (let port = minPort; port <= maxPort; port++) {
77
+ if (await isPortAvailable(port, host)) {
78
+ return {
79
+ port,
80
+ isPreferred: preferredPort === port,
81
+ host,
82
+ };
83
+ }
84
+ }
85
+ throw new PortAllocationError(`No available port found in range ${minPort}-${maxPort}`, minPort, maxPort);
86
+ }
87
+ /**
88
+ * Get a random available port from the OS.
89
+ * This binds to port 0 and lets the OS assign an available port.
90
+ *
91
+ * @param host - The host to bind to (default: "127.0.0.1")
92
+ * @returns Promise resolving to the allocated port number
93
+ */
94
+ export async function getRandomAvailablePort(host = "127.0.0.1") {
95
+ return new Promise((resolve, reject) => {
96
+ const server = createServer();
97
+ server.once("error", (err) => {
98
+ reject(err);
99
+ });
100
+ server.once("listening", () => {
101
+ const address = server.address();
102
+ const port = address.port;
103
+ server.close(() => {
104
+ resolve(port);
105
+ });
106
+ });
107
+ // Port 0 tells the OS to assign any available port
108
+ server.listen(0, host);
109
+ });
110
+ }
111
+ /**
112
+ * Allocate a port for the OpenCode server.
113
+ * This is the main entry point for port allocation.
114
+ *
115
+ * Strategy:
116
+ * 1. If a preferred port is specified and available, use it
117
+ * 2. Otherwise, try the OpenCode default port (54321)
118
+ * 3. If that's not available, find any available port in the range
119
+ *
120
+ * @param options - Port allocation options
121
+ * @returns Promise resolving to the allocation result
122
+ */
123
+ export async function allocateOpenCodePort(options = {}) {
124
+ const { preferredPort, ...rest } = options;
125
+ // If preferred port specified, use standard findAvailablePort
126
+ if (preferredPort !== undefined) {
127
+ return findAvailablePort(options);
128
+ }
129
+ // Try OpenCode default port first
130
+ return findAvailablePort({
131
+ ...rest,
132
+ preferredPort: OPENCODE_DEFAULT_PORT,
133
+ });
134
+ }
135
+ /**
136
+ * Build the base URL for an OpenCode server.
137
+ *
138
+ * @param port - The port number
139
+ * @param host - The host (default: "localhost")
140
+ * @param protocol - The protocol (default: "http")
141
+ * @returns The base URL string
142
+ */
143
+ export function buildServerUrl(port, host = "localhost", protocol = "http") {
144
+ return `${protocol}://${host}:${port}`;
145
+ }
146
+ //# sourceMappingURL=portAllocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portAllocator.js","sourceRoot":"","sources":["../src/portAllocator.ts"],"names":[],"mappings":"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"}