@shardflux/sdk 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +85 -23
  2. package/README.md +226 -7
  3. package/dist/account.d.ts +2 -0
  4. package/dist/account.js +6 -0
  5. package/dist/cell.d.ts +27 -0
  6. package/dist/cell.js +71 -0
  7. package/dist/client.d.ts +54 -5
  8. package/dist/client.js +100 -7
  9. package/dist/computer.d.ts +153 -0
  10. package/dist/computer.js +229 -0
  11. package/dist/errors.d.ts +5 -1
  12. package/dist/errors.js +9 -0
  13. package/dist/executions.d.ts +2 -6
  14. package/dist/executions.js +9 -0
  15. package/dist/exit-code.d.ts +7 -0
  16. package/dist/exit-code.js +12 -0
  17. package/dist/generated/app-api.d.ts +1055 -119
  18. package/dist/generated/cell-api.d.ts +334 -0
  19. package/dist/http.d.ts +7 -1
  20. package/dist/http.js +34 -13
  21. package/dist/index.d.ts +13 -6
  22. package/dist/index.js +7 -2
  23. package/dist/ports.d.ts +7 -0
  24. package/dist/ports.js +1 -1
  25. package/dist/progress.d.ts +2 -2
  26. package/dist/progress.js +1 -1
  27. package/dist/templates.d.ts +12 -0
  28. package/dist/templates.js +9 -0
  29. package/dist/testing/index.d.ts +62 -0
  30. package/dist/testing/index.js +585 -0
  31. package/dist/testing/seed.d.ts +433 -0
  32. package/dist/testing/seed.js +449 -0
  33. package/dist/tools.d.ts +21 -3
  34. package/dist/tools.js +113 -22
  35. package/dist/tunnel-assets/linux-amd64.gz +0 -0
  36. package/dist/tunnel-assets/linux-arm64.gz +0 -0
  37. package/dist/tunnel-assets.d.ts +10 -0
  38. package/dist/tunnel-assets.js +11 -0
  39. package/dist/tunnel-packet.d.ts +3 -0
  40. package/dist/tunnel-packet.js +43 -0
  41. package/dist/tunnel-pty.d.ts +86 -0
  42. package/dist/tunnel-pty.js +243 -0
  43. package/dist/tunnels.d.ts +47 -0
  44. package/dist/tunnels.js +454 -0
  45. package/dist/workspace-ref.d.ts +87 -0
  46. package/dist/workspace-ref.js +173 -0
  47. package/dist/workspace.d.ts +40 -1
  48. package/dist/workspace.js +111 -2
  49. package/package.json +7 -2
@@ -0,0 +1,449 @@
1
+ // Captured response shapes; regenerate with node packages/sdk/scripts/generate-testing-fixtures.mjs.
2
+ export const seed = {
3
+ "_captured": "Production session workspaces, 2026-10-04T22:06:24.279Z; credentials omitted, IDs and cell hostname replaced. Canonical capture: packages/sdk/test/fixtures/testing-api-capture.json. Supplemental captures carry their original provenance.",
4
+ "defaultWorkspace": {
5
+ "id": "00000000-0000-7000-8000-00000000001e",
6
+ "organization_id": "00000000-0000-7000-8000-000000000018",
7
+ "project_id": "00000000-0000-7000-8000-000000000019",
8
+ "workspace_key": "qmfx/testing/default-1791151583295",
9
+ "labels": {},
10
+ "template_version_id": "00000000-0000-7000-8000-00000000001a",
11
+ "template": {
12
+ "version_id": "00000000-0000-7000-8000-00000000001a",
13
+ "template_id": "00000000-0000-7000-8000-00000000001b",
14
+ "slug": "python-node-browser",
15
+ "version": 15,
16
+ "immutable_version": null
17
+ },
18
+ "desired_state": "running",
19
+ "observed_state": "running",
20
+ "cell_id": "c1",
21
+ "cell_endpoint": "https://cell.fake.invalid",
22
+ "ownership_epoch": 1,
23
+ "caps": {
24
+ "cpu_millis": null,
25
+ "memory_mib": null,
26
+ "disk_gib": null,
27
+ "allocation_mode": "elastic",
28
+ "memory_mib_held": 1024
29
+ },
30
+ "memory": {
31
+ "allocation_mode": "elastic",
32
+ "promised_mib": 8192,
33
+ "held_mib": 1024,
34
+ "plugged_mib": 0
35
+ },
36
+ "ceilings": {
37
+ "cpu_millis": 4000,
38
+ "memory_mib": 8192,
39
+ "disk_gib": 20,
40
+ "sources": {
41
+ "cpu_millis": "plan",
42
+ "memory_mib": "plan",
43
+ "disk_gib": "plan"
44
+ },
45
+ "resolved_at": "2026-10-04T22:06:23.533Z"
46
+ },
47
+ "grants": {
48
+ "disk_gib": 20,
49
+ "cpu_millis": 4000,
50
+ "memory_mib": 1024,
51
+ "memory_layout": 2,
52
+ "memory_mib_max": 8192,
53
+ "allocation_mode": "elastic",
54
+ "memory_mib_base": 1024,
55
+ "memory_mib_held": 1024,
56
+ "memory_mib_ceiling": 32768
57
+ },
58
+ "active_operation": null,
59
+ "pending_reason": null,
60
+ "forked_from_workspace_id": null,
61
+ "disk_layout": "layered",
62
+ "lifetime": "session",
63
+ "purpose": "standard",
64
+ "idle_timeout_seconds": 600,
65
+ "idle": null,
66
+ "origin": null,
67
+ "ended_reason": null,
68
+ "dev_template_id": null,
69
+ "startup": null,
70
+ "mode": "processful",
71
+ "tree_revision": 0,
72
+ "computer_use": {
73
+ "enabled": false,
74
+ "workspace": null,
75
+ "template": false,
76
+ "available": true
77
+ },
78
+ "created_at": "2026-10-04T22:06:23.533Z",
79
+ "updated_at": "2026-10-04T22:06:23.706Z",
80
+ "deleted_at": null
81
+ },
82
+ "workspace": {
83
+ "id": "00000000-0000-7000-8000-000000000001",
84
+ "organization_id": "00000000-0000-7000-8000-000000000002",
85
+ "project_id": "00000000-0000-7000-8000-000000000003",
86
+ "workspace_key": "qmfx/testing/seed",
87
+ "labels": {},
88
+ "template_version_id": "00000000-0000-7000-8000-000000000004",
89
+ "template": {
90
+ "version_id": "00000000-0000-7000-8000-000000000004",
91
+ "template_id": "00000000-0000-7000-8000-000000000005",
92
+ "slug": "python-node-browser",
93
+ "version": 15,
94
+ "immutable_version": null
95
+ },
96
+ "desired_state": "running",
97
+ "observed_state": "running",
98
+ "cell_id": "c1",
99
+ "cell_endpoint": "https://cell.fake.invalid",
100
+ "ownership_epoch": 1,
101
+ "caps": {
102
+ "cpu_millis": null,
103
+ "memory_mib": 2048,
104
+ "disk_gib": null,
105
+ "allocation_mode": "fixed"
106
+ },
107
+ "memory": {
108
+ "allocation_mode": "fixed",
109
+ "promised_mib": 2048,
110
+ "held_mib": 2048,
111
+ "plugged_mib": null
112
+ },
113
+ "ceilings": {
114
+ "cpu_millis": 4000,
115
+ "memory_mib": 2048,
116
+ "disk_gib": 20,
117
+ "sources": {
118
+ "cpu_millis": "plan",
119
+ "memory_mib": "user",
120
+ "disk_gib": "plan"
121
+ },
122
+ "resolved_at": "2026-10-04T21:43:52.608Z"
123
+ },
124
+ "grants": {
125
+ "disk_gib": 20,
126
+ "cpu_millis": 4000,
127
+ "memory_mib": 2048,
128
+ "memory_layout": 2,
129
+ "allocation_mode": "fixed",
130
+ "memory_mib_base": 1024,
131
+ "memory_mib_ceiling": 32768
132
+ },
133
+ "active_operation": null,
134
+ "pending_reason": null,
135
+ "forked_from_workspace_id": null,
136
+ "disk_layout": "layered",
137
+ "lifetime": "session",
138
+ "purpose": "standard",
139
+ "idle_timeout_seconds": 600,
140
+ "idle": null,
141
+ "origin": null,
142
+ "ended_reason": null,
143
+ "dev_template_id": null,
144
+ "startup": null,
145
+ "mode": "processful",
146
+ "tree_revision": 0,
147
+ "computer_use": {
148
+ "enabled": false,
149
+ "workspace": null,
150
+ "template": false,
151
+ "available": true
152
+ },
153
+ "created_at": "2026-10-04T21:43:52.608Z",
154
+ "updated_at": "2026-10-04T21:43:52.731Z",
155
+ "deleted_at": null
156
+ },
157
+ "idle": {
158
+ "auto_suspend": {
159
+ "backoff_until": null,
160
+ "disabled_reason": null,
161
+ "enabled": true,
162
+ "failures": 0,
163
+ "last_error": null,
164
+ "last_operation_id": null
165
+ },
166
+ "idle_since": "2026-10-04T21:43:52.731942Z",
167
+ "keepalive_until": null,
168
+ "last_attach_at": null,
169
+ "last_tool_at": null,
170
+ "observed_state": "running",
171
+ "policy": {
172
+ "idle_minutes": null,
173
+ "mode": "adaptive",
174
+ "source": "default"
175
+ },
176
+ "running_since": "2026-10-04T21:43:52.731942Z",
177
+ "suspend_at": null,
178
+ "suspend_request": null
179
+ },
180
+ "busyIdle": {
181
+ "auto_suspend": {
182
+ "backoff_until": null,
183
+ "disabled_reason": null,
184
+ "enabled": true,
185
+ "failures": 0,
186
+ "last_error": null,
187
+ "last_operation_id": null
188
+ },
189
+ "idle_since": "2026-10-04T21:45:01.862826Z",
190
+ "keepalive_until": null,
191
+ "last_attach_at": null,
192
+ "last_tool_at": "2026-10-04T21:44:21.839643Z",
193
+ "observed_state": "running",
194
+ "policy": {
195
+ "idle_minutes": null,
196
+ "mode": "adaptive",
197
+ "source": "default"
198
+ },
199
+ "running_since": "2026-10-04T21:44:21.620863Z",
200
+ "suspend_at": null,
201
+ "suspend_request": null
202
+ },
203
+ "resize": {
204
+ "workspace_id": "00000000-0000-7000-8000-000000000001",
205
+ "operation_id": "00000000-0000-7000-8000-000000000009",
206
+ "state": "running",
207
+ "caps": {
208
+ "cpu_millis": null,
209
+ "memory_mib": 3072,
210
+ "disk_gib": null,
211
+ "allocation_mode": "fixed"
212
+ },
213
+ "memory": {
214
+ "applies_at": "now",
215
+ "allocation_mode": "fixed",
216
+ "requested_mib": 3072,
217
+ "target_mib": 3072,
218
+ "previous_mib": 2048,
219
+ "applied_mib": 3072,
220
+ "held_mib": null,
221
+ "converged": true,
222
+ "limit_reason": null,
223
+ "reason": null
224
+ }
225
+ },
226
+ "missing": {
227
+ "error": {
228
+ "code": "not_found",
229
+ "message": "open /home/user/qmfx-missing: no such file or directory",
230
+ "request_id": "00000000-0000-7000-8000-000000000008",
231
+ "retryable": false,
232
+ "details": {
233
+ "reason": "path_not_found"
234
+ }
235
+ }
236
+ },
237
+ "sessionLifetime": {
238
+ "error": {
239
+ "code": "conflict",
240
+ "message": "A session workspace cannot be suspended; close it, or fork it to keep its state.",
241
+ "request_id": "req-d294f3f70dde403a8423a3f2",
242
+ "retryable": false,
243
+ "details": {
244
+ "reason": "session_lifetime"
245
+ }
246
+ }
247
+ },
248
+ "gone": {
249
+ "error": {
250
+ "code": "conflict",
251
+ "message": "The workspace was deleted.",
252
+ "request_id": "req-f98733e54db546848e558390",
253
+ "retryable": false,
254
+ "details": {
255
+ "reason": "workspace_deleted"
256
+ }
257
+ }
258
+ },
259
+ "computerUnavailable": {
260
+ "error": {
261
+ "code": "conflict",
262
+ "message": "This workspace’s template version cannot run a desktop; open a workspace of a version whose guest agent has desktop.v1.",
263
+ "request_id": "req-ea53380457d24c63ac8313f8",
264
+ "retryable": false,
265
+ "details": {
266
+ "reason": "computer_use_unavailable"
267
+ }
268
+ }
269
+ },
270
+ "templateViews": {
271
+ "python-node-browser": {
272
+ "version_id": "00000000-0000-7000-8000-00000000001a",
273
+ "template_id": "00000000-0000-7000-8000-00000000001b",
274
+ "slug": "python-node-browser",
275
+ "version": 15,
276
+ "immutable_version": null
277
+ },
278
+ "ubuntu-24.04": {
279
+ "version_id": "00000000-0000-7000-8000-00000000000e",
280
+ "template_id": "00000000-0000-7000-8000-00000000000f",
281
+ "slug": "ubuntu-24.04",
282
+ "version": 5,
283
+ "immutable_version": null
284
+ }
285
+ },
286
+ "_supplemental": {
287
+ "token": "Captured 2026-09-26 from the Shardflux API (local build, same code as the service); hostnames replaced.",
288
+ "computerStopped": "Captured 2026-10-04 from the Shardflux cell gateway (local build, same code as the service) by services/cell/internal/gateway/computer_test.go.",
289
+ "me": "Captured 2026-10-04 from the Shardflux API (local build, same code as the service) by apps/api/test/clients-workspace-by-key.test.ts."
290
+ },
291
+ "token": {
292
+ "token": "fake-tool-token",
293
+ "token_type": "Bearer",
294
+ "expires_at": "9999-12-31T00:00:00.000Z",
295
+ "issued_at": "2026-09-26T19:36:04.000Z",
296
+ "kid": "local-dev.z4kHk7UK",
297
+ "audience": "cell-1.example",
298
+ "workspace_id": "01a0df37-b3a1-7303-aba8-8953543f16f2",
299
+ "agent_session_id": "01a0df37-b41e-7f39-a9f6-d38b2963083d",
300
+ "ownership_epoch": 1,
301
+ "tools": [
302
+ "exec",
303
+ "files"
304
+ ],
305
+ "cell_endpoint": "https://cell.example.test"
306
+ },
307
+ "computerStopped": {
308
+ "running": false,
309
+ "streams": {
310
+ "interactive": false,
311
+ "view": false
312
+ }
313
+ },
314
+ "me": {
315
+ "type": "api_key",
316
+ "user": null,
317
+ "memberships": [],
318
+ "api_key": {
319
+ "id": "01a10572-208c-7593-9cf6-6c8053d7db7a",
320
+ "key_id": "tbxqkfu5dn7wpycd",
321
+ "organization_id": "01a10572-2083-7c10-bdc7-fab17b3fe4c0",
322
+ "project_id": "01a10572-2088-7d5c-acf5-6a1d9fe016b7",
323
+ "tool_permissions": [
324
+ "exec",
325
+ "files",
326
+ "processes",
327
+ "computer"
328
+ ]
329
+ }
330
+ },
331
+ "fileInfo": {
332
+ "gid": 1000,
333
+ "mode": "0644",
334
+ "modified_at": "2026-10-04T21:56:05.210721792Z",
335
+ "name": "a.txt",
336
+ "path": "/home/user/qmfx/a.txt",
337
+ "revision": "fe9c2dadb34bee2ae03fc8fe25e26c64ce2f572a53a127db5d6e73899b64fc11",
338
+ "size": 12,
339
+ "type": "file",
340
+ "uid": 1000
341
+ },
342
+ "fileWrite": {
343
+ "bytes_written": 12,
344
+ "durable": true,
345
+ "file": {
346
+ "gid": 1000,
347
+ "mode": "0644",
348
+ "modified_at": "2026-10-04T21:56:05.210721792Z",
349
+ "name": "a.txt",
350
+ "path": "/home/user/qmfx/a.txt",
351
+ "revision": "fe9c2dadb34bee2ae03fc8fe25e26c64ce2f572a53a127db5d6e73899b64fc11",
352
+ "size": 12,
353
+ "type": "file",
354
+ "uid": 1000
355
+ },
356
+ "path": "/home/user/qmfx/a.txt",
357
+ "revision": "fe9c2dadb34bee2ae03fc8fe25e26c64ce2f572a53a127db5d6e73899b64fc11",
358
+ "sha256": "fe9c2dadb34bee2ae03fc8fe25e26c64ce2f572a53a127db5d6e73899b64fc11"
359
+ },
360
+ "fileList": {
361
+ "entries": [
362
+ {
363
+ "gid": 1000,
364
+ "mode": "0644",
365
+ "modified_at": "2026-10-04T21:56:05.210721792Z",
366
+ "name": "a.txt",
367
+ "path": "/home/user/qmfx/a.txt",
368
+ "size": 12,
369
+ "type": "file",
370
+ "uid": 1000
371
+ }
372
+ ],
373
+ "truncated": false
374
+ },
375
+ "filePatch": {
376
+ "bytes_written": 13,
377
+ "durable": true,
378
+ "file": {
379
+ "gid": 1000,
380
+ "mode": "0644",
381
+ "modified_at": "2026-10-04T21:56:05.3747218Z",
382
+ "name": "a.txt",
383
+ "path": "/home/user/qmfx/a.txt",
384
+ "revision": "0d7a3fcb331d2c4ef08fb4f733f5f1435b31cd77d73c4cc0fb64a7364ad50e51",
385
+ "size": 13,
386
+ "type": "file",
387
+ "uid": 1000
388
+ },
389
+ "path": "/home/user/qmfx/a.txt",
390
+ "previous_revision": "fe9c2dadb34bee2ae03fc8fe25e26c64ce2f572a53a127db5d6e73899b64fc11",
391
+ "replacements": 1,
392
+ "revision": "0d7a3fcb331d2c4ef08fb4f733f5f1435b31cd77d73c4cc0fb64a7364ad50e51"
393
+ },
394
+ "fileSearch": {
395
+ "files_scanned": 1,
396
+ "matches": [
397
+ {
398
+ "column": 1,
399
+ "line": 1,
400
+ "path": "/home/user/qmfx/a.txt",
401
+ "text": "a = 10"
402
+ }
403
+ ],
404
+ "truncated": false
405
+ },
406
+ "computerStatus": {
407
+ "display": ":1",
408
+ "height": 800,
409
+ "running": true,
410
+ "session": "/etc/shardflux/desktop/session",
411
+ "started_at": "2026-10-04T21:56:05.601Z",
412
+ "streams": {
413
+ "interactive": false,
414
+ "view": false
415
+ },
416
+ "width": 1280
417
+ },
418
+ "computerActions": {
419
+ "results": [],
420
+ "screenshot": {
421
+ "format": "png",
422
+ "width": 1280,
423
+ "height": 800,
424
+ "data": "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"
425
+ },
426
+ "cursor": [
427
+ 640,
428
+ 400
429
+ ],
430
+ "display": {
431
+ "width": 1280,
432
+ "height": 800
433
+ }
434
+ },
435
+ "execSession": {
436
+ "canceled": false,
437
+ "created": false,
438
+ "created_at": "2026-10-04T21:43:53.15828654Z",
439
+ "ended_at": "2026-10-04T21:43:53.192347995Z",
440
+ "exit_code": 7,
441
+ "pid": 699,
442
+ "session_id": "run-943621b9fdd74017a300920c",
443
+ "started_at": "2026-10-04T21:43:53.182710241Z",
444
+ "state": "exited",
445
+ "stderr_size": 0,
446
+ "stdout_size": 7,
447
+ "timed_out": false
448
+ }
449
+ };
package/dist/tools.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { CellClientOptions } from './cell.js';
1
+ import type { BeforeComputerAction } from './computer.js';
2
+ import type { CellClient, CellClientOptions } from './cell.js';
2
3
  import type { WorkspaceMode } from './errors.js';
3
4
  import type { ToolName } from './tokens.js';
4
- import type { Workspace } from './workspace.js';
5
+ import type { HintOptions, HintResult } from './workspace.js';
5
6
  /**
6
7
  * The JSON Schema subset of the tool definitions. A type alias rather than an interface (0.8.0+), so a schema is
7
8
  * assignable to the providers' open schema types (`{ [key: string]: unknown }`) without a cast, and an object literal
@@ -48,7 +49,24 @@ export declare class ToolArgumentError extends Error {
48
49
  }
49
50
  /** Validates the JSON-Schema subset used by the tool definitions. Returns problems (empty = valid). */
50
51
  export declare function validateArgs(schema: JsonSchema, value: unknown, path?: string): string[];
52
+ /**
53
+ * What workspace tools act on: an opened `Workspace`, or a `WorkspaceRef` (0.15.0+) whose first tool call opens the key.
54
+ * `cell()` may return a promise (a ref opens first); `mode` and `grantedTools` are read when the tools are built.
55
+ */
56
+ export interface ToolTarget {
57
+ readonly mode: WorkspaceMode;
58
+ readonly grantedTools: ToolName[] | null;
59
+ cell(opts?: {
60
+ agentLabel?: string;
61
+ tools?: ToolName[];
62
+ } & CellClientOptions): CellClient | Promise<CellClient>;
63
+ hint(opts?: HintOptions): Promise<HintResult>;
64
+ }
51
65
  export interface WorkspaceToolsOptions {
66
+ /** Per-action desktop policy; refusal stops the remaining actions. */
67
+ computer?: {
68
+ beforeAction?: BeforeComputerAction;
69
+ };
52
70
  /**
53
71
  * Tool permissions to expose (default: the tools of the workspace's last token, else all). A file-first workspace
54
72
  * (`workspace.mode`) gets only the `exec` and `files` tools: `exec` runs each command as an execution
@@ -102,7 +120,7 @@ export interface WorkspaceToolsOptions {
102
120
  burst?: boolean;
103
121
  }
104
122
  /** Builds the tool list for a workspace. Synchronous: tokens are fetched on first use. */
105
- export declare function workspaceTools(workspace: Workspace, opts?: WorkspaceToolsOptions): WorkspaceTool[];
123
+ export declare function workspaceTools(workspace: ToolTarget, opts?: WorkspaceToolsOptions): WorkspaceTool[];
106
124
  /** Anthropic Messages API tool definition; assignable to `Anthropic.Tool` (0.8.0+). */
107
125
  export type AnthropicToolDefinition = {
108
126
  name: string;