@cloudflare/sandbox 0.13.0-next.651.1 → 0.13.0-next.709.1
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.
- package/Dockerfile +12 -17
- package/README.md +48 -2
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1365 -1054
- package/dist/bridge/index.js.map +1 -1
- package/dist/{contexts-BS0Bs6IU.d.ts → contexts-1EsLHByO.d.ts} +240 -15
- package/dist/contexts-1EsLHByO.d.ts.map +1 -0
- package/dist/{dist-DF8sudAg.js → dist-Duor5GbS.js} +38 -147
- package/dist/dist-Duor5GbS.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.js +4 -0
- package/dist/{errors-BG6NZiPD.js → errors-CXR0xBpw.js} +82 -13
- package/dist/errors-CXR0xBpw.js.map +1 -0
- package/dist/errors-QYlSkVGz.js +893 -0
- package/dist/errors-QYlSkVGz.js.map +1 -0
- package/dist/extensions/index.d.ts +4 -74
- package/dist/extensions/index.js +5 -152
- package/dist/extensions-CFB2xHqY.js +1023 -0
- package/dist/extensions-CFB2xHqY.js.map +1 -0
- package/dist/filesystem-BWAZCZER.d.ts +732 -0
- package/dist/filesystem-BWAZCZER.d.ts.map +1 -0
- package/dist/git/index.d.ts +63 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +338 -0
- package/dist/git/index.js.map +1 -0
- package/dist/index-Bs4bqXDR.d.ts +438 -0
- package/dist/index-Bs4bqXDR.d.ts.map +1 -0
- package/dist/index-HNYBk-az.d.ts +444 -0
- package/dist/index-HNYBk-az.d.ts.map +1 -0
- package/dist/index.d.ts +487 -181
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -43
- package/dist/index.js.map +1 -1
- package/dist/interpreter/index.d.ts +311 -0
- package/dist/interpreter/index.d.ts.map +1 -0
- package/dist/interpreter/index.js +292 -0
- package/dist/interpreter/index.js.map +1 -0
- package/dist/openai/index.d.ts +5 -4
- package/dist/openai/index.d.ts.map +1 -1
- package/dist/openai/index.js +11 -6
- package/dist/openai/index.js.map +1 -1
- package/dist/opencode/index.d.ts +133 -161
- package/dist/opencode/index.d.ts.map +1 -1
- package/dist/opencode/index.js +284 -203
- package/dist/opencode/index.js.map +1 -1
- package/dist/process-types-GStiZ8f8.d.ts +73 -0
- package/dist/process-types-GStiZ8f8.d.ts.map +1 -0
- package/dist/sandbox-Auuwfnur.js +10010 -0
- package/dist/sandbox-Auuwfnur.js.map +1 -0
- package/dist/sandbox-BbAabq93.d.ts +42 -0
- package/dist/sandbox-BbAabq93.d.ts.map +1 -0
- package/dist/xterm/index.d.ts +11 -7
- package/dist/xterm/index.d.ts.map +1 -1
- package/dist/xterm/index.js +61 -18
- package/dist/xterm/index.js.map +1 -1
- package/package.json +28 -4
- package/dist/contexts-BS0Bs6IU.d.ts.map +0 -1
- package/dist/dist-DF8sudAg.js.map +0 -1
- package/dist/errors-BG6NZiPD.js.map +0 -1
- package/dist/extensions/index.d.ts.map +0 -1
- package/dist/extensions/index.js.map +0 -1
- package/dist/rpc-types-PBUY-xXM.d.ts +0 -1679
- package/dist/rpc-types-PBUY-xXM.d.ts.map +0 -1
- package/dist/sandbox-BgwMBQ7S.js +0 -8273
- package/dist/sandbox-BgwMBQ7S.js.map +0 -1
- package/dist/sandbox-D_MMqExx.d.ts +0 -1077
- package/dist/sandbox-D_MMqExx.d.ts.map +0 -1
package/dist/opencode/index.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "../
|
|
3
|
-
import
|
|
1
|
+
import { D as OpenCodeStartupContext } from "../contexts-1EsLHByO.js";
|
|
2
|
+
import "../process-types-GStiZ8f8.js";
|
|
3
|
+
import "../filesystem-BWAZCZER.js";
|
|
4
|
+
import { c as SandboxExtension, l as SandboxLike } from "../index-Bs4bqXDR.js";
|
|
4
5
|
import { OpencodeClient } from "@opencode-ai/sdk/v2/client";
|
|
5
6
|
import { Config } from "@opencode-ai/sdk/v2";
|
|
6
7
|
|
|
7
|
-
//#region
|
|
8
|
+
//#region ../../extensions/opencode/src/types.d.ts
|
|
8
9
|
/**
|
|
9
10
|
* Configuration options for starting OpenCode server
|
|
10
11
|
*/
|
|
11
|
-
interface
|
|
12
|
+
interface OpenCodeOptions {
|
|
12
13
|
/** Port for OpenCode server (default: 4096) */
|
|
13
14
|
port?: number;
|
|
14
15
|
/** Working directory for OpenCode (default: container's cwd) */
|
|
@@ -21,7 +22,7 @@ interface OpencodeOptions {
|
|
|
21
22
|
/**
|
|
22
23
|
* Server lifecycle management
|
|
23
24
|
*/
|
|
24
|
-
interface
|
|
25
|
+
interface OpenCodeServer {
|
|
25
26
|
/** Port the server is running on */
|
|
26
27
|
port: number;
|
|
27
28
|
/** Base URL for SDK client (http://localhost:{port}) */
|
|
@@ -29,182 +30,153 @@ interface OpencodeServer {
|
|
|
29
30
|
/** Close the server gracefully */
|
|
30
31
|
close(): Promise<void>;
|
|
31
32
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Result from createOpencode()
|
|
34
|
-
* Client type comes from @opencode-ai/sdk (user's version)
|
|
35
|
-
*/
|
|
36
|
-
interface OpencodeResult<TClient = OpencodeClient> {
|
|
37
|
-
/** OpenCode SDK client with Sandbox transport */
|
|
38
|
-
client: TClient;
|
|
39
|
-
/** Server lifecycle management */
|
|
40
|
-
server: OpencodeServer;
|
|
41
|
-
}
|
|
42
33
|
/**
|
|
43
34
|
* Error thrown when OpenCode server fails to start
|
|
44
35
|
*/
|
|
45
|
-
declare class
|
|
36
|
+
declare class OpenCodeStartupError extends Error {
|
|
46
37
|
readonly code: "OPENCODE_STARTUP_FAILED";
|
|
47
|
-
readonly context:
|
|
48
|
-
constructor(message: string, context:
|
|
38
|
+
readonly context: OpenCodeStartupContext;
|
|
39
|
+
constructor(message: string, context: OpenCodeStartupContext, options?: ErrorOptions);
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region ../../extensions/opencode/src/opencode.d.ts
|
|
43
|
+
interface OpenCodeSandboxLike extends SandboxLike {
|
|
44
|
+
exec: NonNullable<SandboxLike['exec']>;
|
|
45
|
+
getProcess: NonNullable<SandboxLike['getProcess']>;
|
|
46
|
+
listProcesses: NonNullable<SandboxLike['listProcesses']>;
|
|
47
|
+
containerFetch(request: Request, port: number): Promise<Response>;
|
|
49
48
|
}
|
|
50
49
|
//#endregion
|
|
51
|
-
//#region
|
|
50
|
+
//#region ../../extensions/opencode/src/lifecycle.d.ts
|
|
51
|
+
/** Resolved server metadata that is safe to return across the RPC boundary. */
|
|
52
|
+
interface OpenCodeServerInfo {
|
|
53
|
+
port: number;
|
|
54
|
+
url: string;
|
|
55
|
+
}
|
|
56
|
+
/** Snapshot of the resolved lifecycle configuration. */
|
|
57
|
+
interface OpenCodeConfig {
|
|
58
|
+
port: number;
|
|
59
|
+
directory?: string;
|
|
60
|
+
}
|
|
61
|
+
/** Current server status as observed in the container. */
|
|
62
|
+
interface OpenCodeStatus extends OpenCodeServerInfo {
|
|
63
|
+
running: boolean;
|
|
64
|
+
}
|
|
52
65
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* also need a typed SDK client for programmatic access.
|
|
57
|
-
*
|
|
58
|
-
* If an OpenCode server is already running on the specified port, this function
|
|
59
|
-
* will reuse it instead of starting a new one.
|
|
60
|
-
*
|
|
61
|
-
* @param sandbox - The Sandbox instance to run OpenCode in
|
|
62
|
-
* @param options - Configuration options
|
|
63
|
-
* @returns Promise resolving to server handle { port, url, close() }
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* import { getSandbox } from '@cloudflare/sandbox'
|
|
68
|
-
* import { createOpencodeServer } from '@cloudflare/sandbox/opencode'
|
|
69
|
-
*
|
|
70
|
-
* const sandbox = getSandbox(env.Sandbox, 'my-agent')
|
|
71
|
-
* const server = await createOpencodeServer(sandbox, {
|
|
72
|
-
* directory: '/home/user/my-project',
|
|
73
|
-
* config: {
|
|
74
|
-
* provider: {
|
|
75
|
-
* anthropic: {
|
|
76
|
-
* options: { apiKey: env.ANTHROPIC_KEY }
|
|
77
|
-
* },
|
|
78
|
-
* // Or use Cloudflare AI Gateway (with unified billing, no provider keys needed).
|
|
79
|
-
* // 'cloudflare-ai-gateway': {
|
|
80
|
-
* // options: {
|
|
81
|
-
* // accountId: env.CF_ACCOUNT_ID,
|
|
82
|
-
* // gatewayId: env.CF_GATEWAY_ID,
|
|
83
|
-
* // apiToken: env.CF_API_TOKEN
|
|
84
|
-
* // },
|
|
85
|
-
* // models: { 'anthropic/claude-sonnet-4-5-20250929': {} }
|
|
86
|
-
* // }
|
|
87
|
-
* }
|
|
88
|
-
* }
|
|
89
|
-
* })
|
|
90
|
-
*
|
|
91
|
-
* // Proxy requests to the web UI
|
|
92
|
-
* return sandbox.containerFetch(request, server.port)
|
|
93
|
-
*
|
|
94
|
-
* // When done
|
|
95
|
-
* await server.close()
|
|
96
|
-
* ```
|
|
66
|
+
* The slice of `DurableObjectStorage` the handle uses to persist desired-state.
|
|
67
|
+
* Pass `this.ctx.storage` so the server config survives a Durable Object
|
|
68
|
+
* eviction (cold start) and is recovered lazily on the next `start()`.
|
|
97
69
|
*/
|
|
98
|
-
|
|
70
|
+
interface OpenCodeStateStorage {
|
|
71
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
72
|
+
put<T>(key: string, value: T): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/** Options for {@link withOpenCode}: server defaults plus optional storage. */
|
|
75
|
+
interface WithOpenCodeOptions extends OpenCodeOptions {
|
|
76
|
+
/** Persist desired-state here so it survives DO eviction. */
|
|
77
|
+
storage?: OpenCodeStateStorage;
|
|
78
|
+
}
|
|
99
79
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* This function is API-compatible with OpenCode's own createOpencode(), but uses
|
|
103
|
-
* Sandbox process management instead of Node.js spawn. The returned client uses
|
|
104
|
-
* a custom fetch adapter to route requests through the Sandbox container.
|
|
105
|
-
*
|
|
106
|
-
* If an OpenCode server is already running on the specified port, this function
|
|
107
|
-
* will reuse it instead of starting a new one.
|
|
80
|
+
* DO-resident lifecycle handle for an OpenCode server. Owns the durable
|
|
81
|
+
* `opencode serve` process: start/reuse, stop, status, and request proxying.
|
|
108
82
|
*
|
|
109
|
-
* @
|
|
110
|
-
*
|
|
111
|
-
*
|
|
83
|
+
* It extends {@link SandboxExtension}, so the DO stub exposes it as
|
|
84
|
+
* `sandbox.opencode` and method calls dispatch through `callExtension` — the
|
|
85
|
+
* same path the interpreter extension uses. `createOpenCodeClient` consumes the
|
|
86
|
+
* same handle from either the Worker stub or the in-DO object.
|
|
112
87
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* import { createOpencode } from '@cloudflare/sandbox/opencode'
|
|
117
|
-
*
|
|
118
|
-
* const sandbox = getSandbox(env.Sandbox, 'my-agent')
|
|
119
|
-
* const { client, server } = await createOpencode(sandbox, {
|
|
120
|
-
* directory: '/home/user/my-project',
|
|
121
|
-
* config: {
|
|
122
|
-
* provider: {
|
|
123
|
-
* anthropic: {
|
|
124
|
-
* options: { apiKey: env.ANTHROPIC_KEY }
|
|
125
|
-
* },
|
|
126
|
-
* // Or use Cloudflare AI Gateway (with unified billing, no provider keys needed).
|
|
127
|
-
* // 'cloudflare-ai-gateway': {
|
|
128
|
-
* // options: {
|
|
129
|
-
* // accountId: env.CF_ACCOUNT_ID,
|
|
130
|
-
* // gatewayId: env.CF_GATEWAY_ID,
|
|
131
|
-
* // apiToken: env.CF_API_TOKEN
|
|
132
|
-
* // },
|
|
133
|
-
* // models: { 'anthropic/claude-sonnet-4-5-20250929': {} }
|
|
134
|
-
* // }
|
|
135
|
-
* }
|
|
136
|
-
* },
|
|
137
|
-
* // Optional: Pass additional environment variables (e.g., for OTEL telemetry)
|
|
138
|
-
* env: {
|
|
139
|
-
* OTEL_EXPORTER_OTLP_ENDPOINT: 'http://127.0.0.1:4318',
|
|
140
|
-
* TRACEPARENT: '00-abc123-def456-01'
|
|
141
|
-
* }
|
|
142
|
-
* })
|
|
143
|
-
*
|
|
144
|
-
* // Use the SDK client for programmatic access
|
|
145
|
-
* const session = await client.session.create()
|
|
146
|
-
*
|
|
147
|
-
* // When done
|
|
148
|
-
* await server.close()
|
|
149
|
-
* ```
|
|
88
|
+
* The server starts lazily: nothing runs until `start()` (or `fetch()`, which
|
|
89
|
+
* calls it) is invoked. To start optimistically, call `opencode.start()` from
|
|
90
|
+
* your Sandbox subclass's `onStart`.
|
|
150
91
|
*/
|
|
151
|
-
declare
|
|
92
|
+
declare class OpenCodeHandle extends SandboxExtension {
|
|
93
|
+
#private;
|
|
94
|
+
constructor(sandbox: OpenCodeSandboxLike, defaults?: OpenCodeOptions, storage?: OpenCodeStateStorage, stateIndex?: number);
|
|
95
|
+
/**
|
|
96
|
+
* Start or reuse the OpenCode server, returning RPC-safe metadata. With no
|
|
97
|
+
* options it reuses the last-used config, recovering persisted desired-state
|
|
98
|
+
* after a cold start. Retries once on a transient `CONTAINER_UNAVAILABLE`
|
|
99
|
+
* (e.g. a rollout in flight).
|
|
100
|
+
*/
|
|
101
|
+
start(options?: OpenCodeOptions): Promise<OpenCodeServerInfo>;
|
|
102
|
+
/** Stop the running server, if one was started through this handle. */
|
|
103
|
+
stop(): Promise<void>;
|
|
104
|
+
/** Report whether the named OpenCode server is currently running. */
|
|
105
|
+
status(): Promise<OpenCodeStatus>;
|
|
106
|
+
/** Snapshot of the resolved configuration the client builder reads. */
|
|
107
|
+
config(): Promise<OpenCodeConfig>;
|
|
108
|
+
/**
|
|
109
|
+
* Start the server then route a request into the container. This is the
|
|
110
|
+
* transport the SDK client's `fetch` adapter and the Worker proxy use, so it
|
|
111
|
+
* works identically from the Worker stub (one RPC hop) or in-DO (local).
|
|
112
|
+
*/
|
|
113
|
+
fetch(request: Request): Promise<Response>;
|
|
114
|
+
}
|
|
152
115
|
/**
|
|
153
|
-
*
|
|
116
|
+
* Factory — attach as a field on a Sandbox subclass:
|
|
117
|
+
* `opencode = withOpenCode(this, { directory, config, storage: this.ctx.storage })`.
|
|
154
118
|
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* forwarding is preferred.
|
|
119
|
+
* Pass `storage` to persist desired-state so the server is recovered after a DO
|
|
120
|
+
* eviction (cold start). The server starts lazily on first use.
|
|
158
121
|
*/
|
|
159
|
-
declare function
|
|
122
|
+
declare function withOpenCode(sandbox: OpenCodeSandboxLike, options?: WithOpenCodeOptions): OpenCodeHandle;
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region ../../extensions/opencode/src/client.d.ts
|
|
160
125
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* This function handles the redirect and proxying only - you must start the
|
|
164
|
-
* server separately using `createOpencodeServer()`.
|
|
126
|
+
* Build a typed OpenCode SDK client from a lifecycle handle.
|
|
165
127
|
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
128
|
+
* Works against either the Worker stub (`sandbox.opencode`) or the in-DO object
|
|
129
|
+
* (`this.opencode`): it ensures the server through the handle, reads the stored
|
|
130
|
+
* config, and routes every request through `handle.fetch`. Because the handle
|
|
131
|
+
* owns `containerFetch`, this helper never touches sandbox transport directly.
|
|
170
132
|
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
133
|
+
* The SDK is imported lazily so the peer dependency is only required when an
|
|
134
|
+
* OpenCode client is actually built.
|
|
135
|
+
*/
|
|
136
|
+
declare function createOpenCodeClient<TClient = OpencodeClient>(handle: OpenCodeHandle, options?: OpenCodeOptions): Promise<TClient>;
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region ../../extensions/opencode/src/proxy.d.ts
|
|
139
|
+
/** Configuration for {@link createOpenCodeProxy}. */
|
|
140
|
+
interface OpenCodeProxyOptions {
|
|
141
|
+
/** Origin the OpenCode web UI should call back through. Defaults to the request origin. */
|
|
142
|
+
callbackOrigin?: string;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Proxy a request to the OpenCode web UI through a lifecycle handle.
|
|
180
146
|
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
147
|
+
* For an initial HTML page load that still lacks the `?url=` parameter, returns
|
|
148
|
+
* a redirect that adds it (so the OpenCode frontend calls back through the
|
|
149
|
+
* proxy instead of `127.0.0.1:4096`). Every other request is routed through
|
|
150
|
+
* `handle.fetch`, which ensures the server is running before forwarding into the
|
|
151
|
+
* container.
|
|
152
|
+
*/
|
|
153
|
+
declare function proxyToOpenCodeUI(request: Request, handle: OpenCodeHandle, options?: OpenCodeProxyOptions): Response | Promise<Response>;
|
|
154
|
+
/**
|
|
155
|
+
* Curried Worker fetch wrapper for OpenCode.
|
|
156
|
+
*
|
|
157
|
+
* `createOpenCodeProxy(resolve, options?)` captures a lazy per-request resolver
|
|
158
|
+
* for the OpenCode lifecycle handle (`sandbox.opencode`) and returns a function
|
|
159
|
+
* that wraps the user's worker entrypoint.
|
|
160
|
+
*
|
|
161
|
+
* The wrapped handler runs first. If it returns a 404 (or has no `fetch`), the
|
|
162
|
+
* request falls through to the OpenCode web-UI proxy — the redirect handshake
|
|
163
|
+
* for HTML loads and an ensure-then-forward into the container for everything
|
|
164
|
+
* else. A 404 from the user handler is the "not mine, proxy it" signal, so the
|
|
165
|
+
* handler only needs to own its own routes and `return new Response('Not
|
|
166
|
+
* found', { status: 404 })` for the rest.
|
|
167
|
+
*
|
|
168
|
+
* ```ts
|
|
169
|
+
* export default createOpenCodeProxy(
|
|
170
|
+
* (env) => getSandbox(env.Sandbox, 'my-sandbox').opencode
|
|
171
|
+
* )({
|
|
172
|
+
* async fetch(request, env) {
|
|
173
|
+
* // handle your own routes, else:
|
|
174
|
+
* return new Response('Not found', { status: 404 });
|
|
203
175
|
* }
|
|
204
|
-
* }
|
|
176
|
+
* });
|
|
205
177
|
* ```
|
|
206
178
|
*/
|
|
207
|
-
declare function
|
|
179
|
+
declare function createOpenCodeProxy<Env>(resolve: (env: Env) => OpenCodeHandle, options?: OpenCodeProxyOptions): (handler: ExportedHandler<Env>) => ExportedHandler<Env>;
|
|
208
180
|
//#endregion
|
|
209
|
-
export { type
|
|
181
|
+
export { type OpenCodeConfig, OpenCodeHandle, type OpenCodeOptions, type OpenCodeProxyOptions, type OpenCodeServer, type OpenCodeServerInfo, OpenCodeStartupError, type OpenCodeStateStorage, type OpenCodeStatus, type WithOpenCodeOptions, createOpenCodeClient, createOpenCodeProxy, proxyToOpenCodeUI, withOpenCode };
|
|
210
182
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../extensions/opencode/src/types.ts","../../../../extensions/opencode/src/opencode.ts","../../../../extensions/opencode/src/lifecycle.ts","../../../../extensions/opencode/src/client.ts","../../../../extensions/opencode/src/proxy.ts"],"sourcesContent":[],"mappings":"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"}
|