@solarisdk/runloop-compat 0.0.0-stage → 0.1.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.
Files changed (58) hide show
  1. package/COMPAT.md +112 -0
  2. package/LICENSE +17 -0
  3. package/LICENSE-RUNLOOP +7 -0
  4. package/NOTICE +14 -0
  5. package/README.md +46 -2
  6. package/dist/blueprint-types.d.ts +522 -0
  7. package/dist/blueprint-types.d.ts.map +1 -0
  8. package/dist/blueprint-types.js +4 -0
  9. package/dist/blueprint-types.js.map +1 -0
  10. package/dist/blueprints.d.ts +71 -0
  11. package/dist/blueprints.d.ts.map +1 -0
  12. package/dist/blueprints.js +233 -0
  13. package/dist/blueprints.js.map +1 -0
  14. package/dist/client.d.ts +290 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +924 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/context.d.ts +42 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +198 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/dockerfile.d.ts +36 -0
  23. package/dist/dockerfile.d.ts.map +1 -0
  24. package/dist/dockerfile.js +338 -0
  25. package/dist/dockerfile.js.map +1 -0
  26. package/dist/errors.d.ts +67 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +171 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/image-ref.d.ts +35 -0
  31. package/dist/image-ref.d.ts.map +1 -0
  32. package/dist/image-ref.js +97 -0
  33. package/dist/image-ref.js.map +1 -0
  34. package/dist/index.d.ts +16 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +20 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mapping.d.ts +49 -0
  39. package/dist/mapping.d.ts.map +1 -0
  40. package/dist/mapping.js +206 -0
  41. package/dist/mapping.js.map +1 -0
  42. package/dist/sdk.d.ts +182 -0
  43. package/dist/sdk.d.ts.map +1 -0
  44. package/dist/sdk.js +356 -0
  45. package/dist/sdk.js.map +1 -0
  46. package/dist/secrets.d.ts +41 -0
  47. package/dist/secrets.d.ts.map +1 -0
  48. package/dist/secrets.js +58 -0
  49. package/dist/secrets.js.map +1 -0
  50. package/dist/shared-types.d.ts +440 -0
  51. package/dist/shared-types.d.ts.map +1 -0
  52. package/dist/shared-types.js +4 -0
  53. package/dist/shared-types.js.map +1 -0
  54. package/dist/types.d.ts +920 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +4 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +48 -4
@@ -0,0 +1,233 @@
1
+ // Blueprints on Solari templates: `client.blueprints.*` (REST layer) and `sdk.blueprint.*` (object layer).
2
+ // A blueprint is a template built from a Dockerfile subset (see dockerfile.ts); the id is the template id (`tpl_…`).
3
+ import { compileDockerfile } from "./dockerfile.js";
4
+ import { APIConnectionTimeoutError, APIError, NotFoundError, SolariCompatUnsupported, translateError } from "./errors.js";
5
+ import { resolveSize } from "./mapping.js";
6
+ const BUILTIN_TEMPLATES = new Set(["base", "workstation", "office", "code"]);
7
+ const STATUS = { building: "building", ready: "build_complete", failed: "failed" };
8
+ function toBlueprintView(t, extra = {}) {
9
+ return {
10
+ id: t.templateId,
11
+ create_time_ms: Date.parse(t.createdAt ?? "") || Date.now(),
12
+ name: t.name,
13
+ parameters: { name: t.name, ...(extra.dockerfile ? { dockerfile: extra.dockerfile } : {}) },
14
+ state: "created",
15
+ status: STATUS[t.status] ?? "failed",
16
+ ...(t.status === "failed" ? { failure_reason: "build_failed" } : {}),
17
+ ...(t.status === "ready" ? { build_finish_time_ms: Date.now() } : {}),
18
+ metadata: t.fromImage ? { fromImage: t.fromImage } : {},
19
+ };
20
+ }
21
+ const UNSUPPORTED_BLUEPRINT = ["code_mounts", "services", "secrets", "network_policy_id"];
22
+ export class Blueprints {
23
+ client;
24
+ constructor(client) {
25
+ this.client = client;
26
+ }
27
+ /** A template name or id → the id/name `POST /sandboxes` takes: built-ins pass through, custom names resolve to the newest matching `tpl_` id. */
28
+ async resolveTemplate(nameOrId) {
29
+ if (nameOrId.startsWith("tpl_") || BUILTIN_TEMPLATES.has(nameOrId))
30
+ return nameOrId;
31
+ const all = await this.listTemplates();
32
+ const hit = all.filter((t) => t.name === nameOrId).sort((a, b) => (b.createdAt ?? "").localeCompare(a.createdAt ?? ""))[0];
33
+ if (!hit)
34
+ throw new NotFoundError(404, { message: `No blueprint named ${JSON.stringify(nameOrId)}` }, `No blueprint named ${JSON.stringify(nameOrId)}`, {});
35
+ return hit.templateId;
36
+ }
37
+ async listTemplates() {
38
+ try {
39
+ const r = await this.client.http.request("GET", "/templates");
40
+ return (r.templates ?? []).filter((t) => !t.builtin);
41
+ }
42
+ catch (e) {
43
+ throw translateError(e);
44
+ }
45
+ }
46
+ async create(params, _options) {
47
+ for (const k of UNSUPPORTED_BLUEPRINT) {
48
+ const v = params[k];
49
+ if (v && !(Array.isArray(v) && v.length === 0) && !(typeof v === "object" && Object.keys(v).length === 0)) {
50
+ throw new SolariCompatUnsupported(`blueprint parameter \`${k}\``);
51
+ }
52
+ }
53
+ let context = null;
54
+ if (params.build_context) {
55
+ const bc = params.build_context;
56
+ const objectId = "object_id" in bc ? bc.object_id : bc.id;
57
+ context = this.client.contexts.get(objectId) ?? null;
58
+ if (!context)
59
+ throw new SolariCompatUnsupported("a build context from another process", "upload it with sdk.storageObject.uploadFromDir in this process");
60
+ }
61
+ let baseTemplate = null;
62
+ if (params.base_blueprint_id)
63
+ baseTemplate = await this.resolveTemplate(params.base_blueprint_id);
64
+ else if (params.base_blueprint_name)
65
+ baseTemplate = await this.resolveTemplate(params.base_blueprint_name);
66
+ const compiled = compileDockerfile({
67
+ dockerfile: params.dockerfile ?? null,
68
+ system_setup_commands: params.system_setup_commands ?? null,
69
+ file_mounts: params.file_mounts ?? null,
70
+ base_template: baseTemplate,
71
+ build_args: params.build_args ?? null,
72
+ context,
73
+ });
74
+ const size = resolveSize(params.launch_parameters ?? null);
75
+ const body = {
76
+ name: params.name,
77
+ kind: "sandbox",
78
+ ...(size.cpu ? { cpu: size.cpu } : {}),
79
+ ...(size.memMb ? { memMb: size.memMb } : {}),
80
+ ...(size.diskGb ? { diskGb: size.diskGb } : {}),
81
+ compiled,
82
+ };
83
+ let t;
84
+ try {
85
+ t = await this.client.http.request("POST", "/templates", body);
86
+ }
87
+ catch (e) {
88
+ throw translateError(e);
89
+ }
90
+ if (compiled.fromImage && !t.fromImage) {
91
+ // A gateway that predates native image builds ignores `fromImage` and would build a plain base template.
92
+ void this.discardWhenDone(t.templateId);
93
+ throw new SolariCompatUnsupported("FROM <image>", "This gateway has no native image builds (compiled.fromImage) yet.");
94
+ }
95
+ return toBlueprintView(t, { dockerfile: params.dockerfile ?? null });
96
+ }
97
+ /** Delete a template once its (unwanted) build has finished; a building template cannot be deleted. Best effort. */
98
+ async discardWhenDone(id) {
99
+ for (let i = 0; i < 120; i++) {
100
+ await new Promise((r) => setTimeout(r, 2000));
101
+ try {
102
+ const t = await this.client.http.request("GET", `/templates/${encodeURIComponent(id)}`);
103
+ if (t.status === "building")
104
+ continue;
105
+ await this.client.http.request("DELETE", `/templates/${encodeURIComponent(id)}`);
106
+ return;
107
+ }
108
+ catch {
109
+ return;
110
+ }
111
+ }
112
+ }
113
+ async retrieve(id, _options) {
114
+ try {
115
+ const t = await this.client.http.request("GET", `/templates/${encodeURIComponent(id)}`);
116
+ if (t.builtin)
117
+ throw new NotFoundError(404, { message: "Not a blueprint" }, "Not a blueprint", {});
118
+ return toBlueprintView(t);
119
+ }
120
+ catch (e) {
121
+ throw translateError(e);
122
+ }
123
+ }
124
+ async list(_params = {}, _options) {
125
+ const all = await this.listTemplates();
126
+ const rows = (_params.name ? all.filter((t) => t.name.includes(_params.name)) : all).slice(0, _params.limit ?? 50).map((t) => toBlueprintView(t));
127
+ return { blueprints: rows, has_more: false, total_count: rows.length };
128
+ }
129
+ async delete(id, _options) {
130
+ try {
131
+ await this.client.http.request("DELETE", `/templates/${encodeURIComponent(id)}`);
132
+ return {};
133
+ }
134
+ catch (e) {
135
+ throw translateError(e);
136
+ }
137
+ }
138
+ async logs(id, _options) {
139
+ try {
140
+ const d = await this.client.http.request("GET", `/templates/${encodeURIComponent(id)}/logs`);
141
+ return {
142
+ blueprint_id: id,
143
+ logs: (d.logs ?? []).map((l) => ({
144
+ level: l.stream === "stderr" ? "ERROR" : "INFO",
145
+ message: String(l.text ?? ""),
146
+ timestamp_ms: Date.parse(l.ts ?? "") || Date.now(),
147
+ })),
148
+ };
149
+ }
150
+ catch (e) {
151
+ throw translateError(e);
152
+ }
153
+ }
154
+ async awaitBuildComplete(id, options) {
155
+ const interval = options?.polling?.pollingIntervalMs ?? 2000;
156
+ const maxAttempts = options?.polling?.maxAttempts ?? 600;
157
+ const deadline = Date.now() + (options?.longPoll?.timeoutMs ?? options?.polling?.timeoutMs ?? Infinity);
158
+ for (let i = 0; i < maxAttempts && Date.now() < deadline; i++) {
159
+ const v = await this.retrieve(id);
160
+ if (v.status === "build_complete")
161
+ return v;
162
+ if (v.status === "failed") {
163
+ let tail = "";
164
+ try {
165
+ tail = (await this.logs(id)).logs.slice(-6).map((l) => l.message).join("\n");
166
+ }
167
+ catch {
168
+ /* no logs */
169
+ }
170
+ throw new APIError(400, { message: `Blueprint build failed${tail ? `:\n${tail}` : ""}`, blueprint_id: id }, undefined, {});
171
+ }
172
+ await new Promise((r) => setTimeout(r, interval));
173
+ }
174
+ throw new APIConnectionTimeoutError({ message: `Timed out waiting for blueprint ${id} to build` });
175
+ }
176
+ async createAndAwaitBuildComplete(params, options) {
177
+ const v = await this.create(params, options);
178
+ try {
179
+ return await this.awaitBuildComplete(v.id, options);
180
+ }
181
+ catch (e) {
182
+ await this.delete(v.id).catch(() => undefined); // a failed build leaves nothing behind
183
+ throw e;
184
+ }
185
+ }
186
+ }
187
+ /** Object-layer handle for a blueprint. */
188
+ export class Blueprint {
189
+ client;
190
+ _id;
191
+ makeDevbox;
192
+ constructor(client, _id, makeDevbox) {
193
+ this.client = client;
194
+ this._id = _id;
195
+ this.makeDevbox = makeDevbox;
196
+ }
197
+ get id() {
198
+ return this._id;
199
+ }
200
+ getInfo(options) {
201
+ return this.client.blueprints.retrieve(this._id, options);
202
+ }
203
+ logs(options) {
204
+ return this.client.blueprints.logs(this._id, options);
205
+ }
206
+ delete(options) {
207
+ return this.client.blueprints.delete(this._id, options);
208
+ }
209
+ createDevbox(params = {}) {
210
+ return this.makeDevbox({ ...params, blueprint_name: this._id });
211
+ }
212
+ }
213
+ export class BlueprintOps {
214
+ client;
215
+ makeDevbox;
216
+ constructor(client, makeDevbox) {
217
+ this.client = client;
218
+ this.makeDevbox = makeDevbox;
219
+ }
220
+ /** Build a blueprint and wait for it (deleted again if the build fails). */
221
+ async create(params, options) {
222
+ const v = await this.client.blueprints.createAndAwaitBuildComplete(params, options);
223
+ return new Blueprint(this.client, v.id, this.makeDevbox);
224
+ }
225
+ fromId(id) {
226
+ return new Blueprint(this.client, id, this.makeDevbox);
227
+ }
228
+ async list(params = {}) {
229
+ const r = await this.client.blueprints.list(params);
230
+ return r.blueprints.map((b) => new Blueprint(this.client, b.id, this.makeDevbox));
231
+ }
232
+ }
233
+ //# sourceMappingURL=blueprints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blueprints.js","sourceRoot":"","sources":["../src/blueprints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,290 @@
1
+ import { HttpTransport, type CommandHandle, type Sandbox } from "@solarisdk/core";
2
+ import { SandboxClient } from "@solarisdk/sandbox";
3
+ import * as Errors from "./errors.js";
4
+ import { Blueprints } from "./blueprints.js";
5
+ import { Secrets } from "./secrets.js";
6
+ import type { DevboxLogsListView } from "./blueprint-types.js";
7
+ import type { DevboxAsyncExecutionDetailView, DevboxCreateParams, DevboxDownloadFileParams, DevboxExecuteAsyncParams, DevboxExecuteParams, DevboxExecuteSyncParams, DevboxExecutionDetailView, DevboxKeepAliveResponse, DevboxListParams, DevboxReadFileContentsParams, DevboxSnapshotDiskParams, DevboxSnapshotView, DevboxUploadFileParams, DevboxView, DevboxWriteFileContentsParams, TunnelView } from "./types.js";
8
+ export declare const DEFAULT_BASE_URL = "https://api.getsolari.com";
9
+ /** @internal Whether an inherited base URL may receive a Solari key: https on getsolari.com or a subdomain, or loopback over http(s). */
10
+ export declare function isSolariBaseUrl(raw: string): boolean;
11
+ export interface ClientOptions {
12
+ /** Runloop's name for the API key. */
13
+ bearerToken?: string | undefined;
14
+ /** Also accepted; same meaning as `bearerToken`. */
15
+ apiKey?: string | undefined;
16
+ baseURL?: string | null | undefined;
17
+ /** Accepted for compatibility; Solari's transport applies its own retry policy (5 retries). */
18
+ maxRetries?: number;
19
+ /** Per-call timeout (ms) for control-channel actions. */
20
+ timeout?: number;
21
+ fetch?: typeof fetch;
22
+ /** Not supported: throws {@link SolariCompatUnsupported} when non-empty. */
23
+ defaultHeaders?: Record<string, string | null | undefined>;
24
+ defaultQuery?: Record<string, string | undefined>;
25
+ }
26
+ export interface PollingOptions {
27
+ pollingIntervalMs: number;
28
+ maxAttempts: number;
29
+ timeoutMs?: number;
30
+ }
31
+ export interface RequestOptions {
32
+ polling?: Partial<PollingOptions>;
33
+ /** Runloop's long-poll option: only `timeoutMs` (the total wait) is honoured. */
34
+ longPoll?: {
35
+ timeoutMs?: number;
36
+ };
37
+ timeout?: number;
38
+ maxRetries?: number;
39
+ idempotencyKey?: string;
40
+ signal?: AbortSignal | null;
41
+ [k: string]: unknown;
42
+ }
43
+ /** One tracked command: the Solari handle plus accumulated output. */
44
+ export interface ExecRecord {
45
+ executionId: string;
46
+ devboxId: string;
47
+ status: "queued" | "running" | "completed";
48
+ exitStatus: number | null;
49
+ stdout: string;
50
+ stderr: string;
51
+ handle?: CommandHandle;
52
+ done: Promise<void>;
53
+ }
54
+ export declare class Runloop {
55
+ static RunloopError: typeof Errors.RunloopError;
56
+ static APIError: typeof Errors.APIError;
57
+ static APIConnectionError: typeof Errors.APIConnectionError;
58
+ static APIConnectionTimeoutError: typeof Errors.APIConnectionTimeoutError;
59
+ static APIUserAbortError: typeof Errors.APIUserAbortError;
60
+ static NotFoundError: typeof Errors.NotFoundError;
61
+ static ConflictError: typeof Errors.ConflictError;
62
+ static RateLimitError: typeof Errors.RateLimitError;
63
+ static BadRequestError: typeof Errors.BadRequestError;
64
+ static AuthenticationError: typeof Errors.AuthenticationError;
65
+ static PermissionDeniedError: typeof Errors.PermissionDeniedError;
66
+ static UnprocessableEntityError: typeof Errors.UnprocessableEntityError;
67
+ static InternalServerError: typeof Errors.InternalServerError;
68
+ static SolariCompatUnsupported: typeof Errors.SolariCompatUnsupported;
69
+ readonly blueprints: Blueprints;
70
+ /** @internal Build contexts for COPY / ADD, by storage-object id. */
71
+ readonly contexts: Map<string, Uint8Array<ArrayBufferLike>>;
72
+ readonly objects: Record<string, (...a: unknown[]) => never>;
73
+ readonly secrets: Secrets;
74
+ readonly agents: Record<string, (...a: unknown[]) => never>;
75
+ readonly axons: Record<string, (...a: unknown[]) => never>;
76
+ readonly networkPolicies: Record<string, (...a: unknown[]) => never>;
77
+ readonly gatewayConfigs: Record<string, (...a: unknown[]) => never>;
78
+ readonly mcpConfigs: Record<string, (...a: unknown[]) => never>;
79
+ readonly bearerToken: string;
80
+ readonly baseURL: string;
81
+ readonly devboxes: Devboxes;
82
+ /** @internal */
83
+ readonly solari: SandboxClient;
84
+ /** @internal Raw gateway requests for routes SandboxClient has no method for (PATCH, logs, templates, ...). */
85
+ readonly http: HttpTransport;
86
+ /** @internal Does GET /sandboxes honour `startingAfter`? Learned from the first list reply (`hasMore` present). */
87
+ startingAfterSupported: boolean | undefined;
88
+ /** @internal Output of commands run through this client, per devbox, for `devbox.logs()` on gateways without a logs route. */
89
+ readonly localLogs: Map<string, {
90
+ ts: number;
91
+ cmd: string;
92
+ execId: string;
93
+ stream: "stdout" | "stderr" | "exit";
94
+ message: string;
95
+ exitCode?: number;
96
+ }[]>;
97
+ private readonly handles;
98
+ /** @internal */
99
+ readonly executions: Map<string, ExecRecord>;
100
+ /** @internal */
101
+ readonly keepAliveMs: Map<string, number>;
102
+ /** @internal */
103
+ readonly createdAtMs: Map<string, number>;
104
+ /** @internal Devboxes this client opened an (open, per-port preview) tunnel for. */
105
+ readonly tunnels: Set<string>;
106
+ constructor(opts?: ClientOptions);
107
+ /** @internal Live control handle for a devbox, cached per id. */
108
+ handle(id: string): Promise<Sandbox>;
109
+ /**
110
+ * @internal Run `fn` on the devbox's live handle. If the control channel was closed under us
111
+ * (typically the first call after a resume), drop the handle, reconnect and retry once.
112
+ */
113
+ on<T>(id: string, fn: (sb: Sandbox) => Promise<T>): Promise<T>;
114
+ private readonly homes;
115
+ /** @internal The guest's $HOME, created if missing (Runloop runs commands from the user's home). */
116
+ home(id: string): Promise<string>;
117
+ /** @internal */
118
+ dropHandle(id: string): void;
119
+ /** @internal */
120
+ adopt(id: string, sb: Sandbox): void;
121
+ }
122
+ export declare class DevboxesCursorIDPage<Item extends {
123
+ id: string;
124
+ }> implements AsyncIterable<Item> {
125
+ private readonly nextCursor;
126
+ private readonly fetchNext;
127
+ devboxes: Item[];
128
+ has_more: boolean;
129
+ total_count: number;
130
+ /** @internal */
131
+ constructor(items: Item[], nextCursor: string | undefined, fetchNext: (cursor: string) => Promise<DevboxesCursorIDPage<Item>>);
132
+ getPaginatedItems(): Item[];
133
+ hasNextPage(): boolean;
134
+ getNextPage(): Promise<DevboxesCursorIDPage<Item>>;
135
+ iterPages(): AsyncGenerator<DevboxesCursorIDPage<Item>>;
136
+ [Symbol.asyncIterator](): AsyncGenerator<Item>;
137
+ }
138
+ export interface StreamCallbacks {
139
+ stdout?: (line: string) => void;
140
+ stderr?: (line: string) => void;
141
+ output?: (line: string) => void;
142
+ }
143
+ export declare class Devboxes {
144
+ private readonly client;
145
+ /** Disk snapshots (`client.devboxes.diskSnapshots`). */
146
+ readonly diskSnapshots: DiskSnapshots;
147
+ constructor(client: Runloop);
148
+ /** `POST /v1/devboxes` equivalent: create a sandbox. Returns once it is running. */
149
+ create(params?: DevboxCreateParams, _options?: RequestOptions): Promise<DevboxView>;
150
+ createAndAwaitRunning(params?: DevboxCreateParams, options?: RequestOptions): Promise<DevboxView>;
151
+ private createFrom;
152
+ /** GET right after create can 404 on another gateway replica; retry briefly (0.3 s * n). */
153
+ private retrieveFresh;
154
+ retrieve(id: string, _options?: RequestOptions): Promise<DevboxView>;
155
+ /** Does the gateway take `startingAfter=<sandboxId>` on GET /sandboxes? Probed once (it also adds `hasMore`). */
156
+ private supportsStartingAfter;
157
+ /**
158
+ * List devboxes (sandboxes only). `starting_after` is an item id: a gateway with `startingAfter` support takes
159
+ * it directly; on an older one the client scans from the start and skips past it.
160
+ */
161
+ list(params?: DevboxListParams, _options?: RequestOptions): Promise<DevboxesCursorIDPage<DevboxView>>;
162
+ /**
163
+ * Update name / metadata (`PATCH /sandboxes/{id}`, pinetree-desktop#566). A gateway without the route
164
+ * answers 404; since a real missing devbox is also a 404, the devbox is re-read to tell them apart.
165
+ */
166
+ update(id: string, params: {
167
+ name?: string | null;
168
+ metadata?: Record<string, string> | null;
169
+ }, _options?: RequestOptions): Promise<DevboxView>;
170
+ /**
171
+ * Devbox logs. Uses the gateway's `GET /sandboxes/{id}/logs` when it has one; otherwise returns the output of the
172
+ * commands run through THIS client instance (they are not durable across processes).
173
+ */
174
+ logs(id: string, params?: {
175
+ execution_id?: string;
176
+ shell_name?: string;
177
+ text?: string;
178
+ }, _options?: RequestOptions): Promise<DevboxLogsListView>;
179
+ shutdown(id: string, _params?: unknown, _options?: RequestOptions): Promise<DevboxView>;
180
+ suspend(id: string, _options?: RequestOptions): Promise<DevboxView>;
181
+ /** Resume a suspended devbox and wait until it is running. */
182
+ resume(id: string, options?: RequestOptions): Promise<DevboxView>;
183
+ resumeAsync(id: string, _options?: RequestOptions): Promise<DevboxView>;
184
+ /** Extend the idle window by re-arming the timeout. */
185
+ keepAlive(id: string, _options?: RequestOptions): Promise<DevboxKeepAliveResponse>;
186
+ awaitRunning(id: string, options?: RequestOptions): Promise<DevboxView>;
187
+ awaitSuspended(id: string, options?: RequestOptions): Promise<DevboxView>;
188
+ private poll;
189
+ /** Start a shell command and track it. `callbacks` receive complete lines. */
190
+ startExecution(id: string, command: string, callbacks?: StreamCallbacks): Promise<ExecRecord>;
191
+ view(rec: ExecRecord): DevboxAsyncExecutionDetailView;
192
+ /** Run to completion and return the final detail view (`execute_and_await_completion`). */
193
+ executeAndAwaitCompletion(id: string, params: DevboxExecuteParams, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
194
+ executeSync(id: string, params: DevboxExecuteSyncParams, options?: RequestOptions): Promise<DevboxExecutionDetailView>;
195
+ execute(id: string, params: DevboxExecuteParams, options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
196
+ executeAsync(id: string, params: DevboxExecuteAsyncParams, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
197
+ /** REST executions resource (`client.devboxes.executions.*`), in-process registry only. */
198
+ get executions(): Executions;
199
+ waitForCommand(id: string, executionId: string, params?: {
200
+ statuses?: string[];
201
+ timeout_seconds?: number | null;
202
+ }, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
203
+ listDiskSnapshots(params?: {
204
+ limit?: number;
205
+ starting_after?: string;
206
+ }): Promise<{
207
+ snapshots: DevboxSnapshotView[];
208
+ has_more: boolean;
209
+ total_count: number;
210
+ }>;
211
+ deleteDiskSnapshot(snapshotId: string): Promise<unknown>;
212
+ /** Executions are tracked per client instance only (Solari has no durable execution records yet). */
213
+ findExecution(id: string, executionId: string): ExecRecord;
214
+ readFileContents(id: string, params: DevboxReadFileContentsParams, _options?: RequestOptions): Promise<string>;
215
+ /** Write a file, creating its parent directories. */
216
+ private writeAbs;
217
+ writeFileContents(id: string, params: DevboxWriteFileContentsParams, _options?: RequestOptions): Promise<DevboxExecutionDetailView>;
218
+ downloadFile(id: string, params: DevboxDownloadFileParams, _options?: RequestOptions): Promise<Response>;
219
+ uploadFile(id: string, params: DevboxUploadFileParams, _options?: RequestOptions): Promise<unknown>;
220
+ snapshotDisk(id: string, params?: DevboxSnapshotDiskParams, _options?: RequestOptions): Promise<DevboxSnapshotView>;
221
+ /** Solari snapshots are synchronous, so the "async" call returns an already-complete snapshot. */
222
+ snapshotDiskAsync(id: string, params?: DevboxSnapshotDiskParams, options?: RequestOptions): Promise<DevboxSnapshotView>;
223
+ /**
224
+ * The devbox's tunnel (`GET /sandboxes/:id/tunnel`, re-mints `auth_token`). Rejects with `NotFoundError` when
225
+ * none is enabled. On a gateway without tunnel routes only an open tunnel enabled through this client can be shown.
226
+ */
227
+ tunnelView(id: string, port?: number): Promise<TunnelView>;
228
+ /** `getTunnel()`: the tunnel, or `null` when none is enabled. */
229
+ tunnelOrNull(id: string): Promise<TunnelView | null>;
230
+ /**
231
+ * `POST /sandboxes/:id/tunnel`: authenticated (default) or open, `wake_on_http`, `http_keep_alive`. Idempotent;
232
+ * the returned `auth_token` (authenticated only) is valid on every port for an hour and dies with `removeTunnel`.
233
+ */
234
+ enableTunnel(id: string, params?: TunnelParams, _options?: RequestOptions): Promise<TunnelView>;
235
+ previewUrl(id: string, port: number): Promise<string>;
236
+ /** `DELETE /sandboxes/:id/tunnel`: idempotent; revokes every `auth_token`. */
237
+ removeTunnel(id: string, _options?: RequestOptions): Promise<void>;
238
+ createSSHKey(): never;
239
+ watchEvictions(): never;
240
+ }
241
+ export interface TunnelParams {
242
+ auth_mode?: "open" | "authenticated" | string | null;
243
+ wake_on_http?: boolean | null;
244
+ http_keep_alive?: boolean | null;
245
+ }
246
+ export declare class Executions {
247
+ private readonly dev;
248
+ constructor(dev: Devboxes);
249
+ retrieve(devboxId: string, executionId: string, _params?: {
250
+ last_n?: string;
251
+ }, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
252
+ awaitCompleted(devboxId: string, executionId: string, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
253
+ executeAsync(devboxId: string, params: DevboxExecuteAsyncParams, options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
254
+ executeSync(devboxId: string, params: DevboxExecuteSyncParams, options?: RequestOptions): Promise<DevboxExecutionDetailView>;
255
+ kill(devboxId: string, executionId: string, _params?: unknown, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
256
+ sendStdIn(devboxId: string, executionId: string, params: {
257
+ text?: string | null;
258
+ }, _options?: RequestOptions): Promise<DevboxAsyncExecutionDetailView>;
259
+ }
260
+ export declare class DiskSnapshots {
261
+ private readonly client;
262
+ constructor(client: Runloop);
263
+ list(params?: {
264
+ limit?: number;
265
+ starting_after?: string;
266
+ }): Promise<{
267
+ snapshots: DevboxSnapshotView[];
268
+ has_more: boolean;
269
+ total_count: number;
270
+ }>;
271
+ retrieve(id: string): Promise<DevboxSnapshotView>;
272
+ /**
273
+ * `DELETE /snapshots/{id}`. Large snapshots are erased incrementally: the gateway answers `202 {ok:false,
274
+ * status:"deleting"}`, keeps the row and expects the same DELETE again. Runloop's delete is "done when it returns",
275
+ * so this repeats the call (backoff 1 s doubling to 5 s) until the gateway says ok, or a 404 after a 202 says the
276
+ * previous pass finished, for at most `maxWaitMs` (default 5 min). It then raises rather than claim success.
277
+ */
278
+ delete(id: string, opts?: {
279
+ maxWaitMs?: number;
280
+ sleep?: (ms: number) => Promise<void>;
281
+ now?: () => number;
282
+ }): Promise<unknown>;
283
+ /** `PATCH /snapshots/{id}` (pinetree-desktop#566); unsupported on a gateway without it. */
284
+ update(id: string, params?: {
285
+ name?: string | null;
286
+ commit_message?: string | null;
287
+ metadata?: Record<string, string> | null;
288
+ }): Promise<DevboxSnapshotView>;
289
+ }
290
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}