@tangle-network/sandbox 0.10.4 → 0.10.5-develop.20260715115519.fee3d86
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/README.md +109 -0
- package/dist/agent/index.d.ts +3 -3
- package/dist/{client-B8i6qrQr.d.ts → client-CSaBJ8wD.d.ts} +7 -3
- package/dist/{client-DTpHjPjc.js → client-_OBj4sNO.js} +479 -61
- package/dist/collaboration/index.js +1 -1
- package/dist/{collaboration-QZXrXdIb.js → collaboration-CcZE2xMl.js} +1 -1
- package/dist/core.d.ts +4 -4
- package/dist/core.js +3 -3
- package/dist/{errors--P_nbLzM.d.ts → errors-CNCz3Ms9.d.ts} +1 -1
- package/dist/{errors-DSz87Rkk.js → errors-wd266B9Q.js} +3 -3
- package/dist/{index-BFnMEze6.d.ts → index-CEZaPvfX.d.ts} +2 -2
- package/dist/index.d.ts +28 -7
- package/dist/index.js +7 -282
- package/dist/intelligence/index.js +1 -1
- package/dist/{runtime-api-CYA2DUQw.js → runtime-api-BWq4XSrb.js} +269 -3
- package/dist/runtime.d.ts +50 -6
- package/dist/runtime.js +6 -4
- package/dist/{sandbox-BtNWbfd3.d.ts → sandbox-B9P4tyt4.d.ts} +11 -10
- package/dist/{sandbox-Be9WAqSg.js → sandbox-KiKLRbR_.js} +97 -45
- package/dist/tangle/index.d.ts +1 -1
- package/dist/tangle/index.js +1 -1
- package/dist/{tangle-D6UfK_B0.js → tangle-Os9sH-ms.js} +2 -2
- package/dist/{types-BvSoEHz8.d.ts → types-LNLeU9Ub.d.ts} +142 -25
- package/package.json +3 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as normalizeSessionInfo, r as
|
|
2
|
-
import { c as SandboxError, d as TimeoutError, f as ValidationError, i as NetworkError, l as ServerError, n as CapabilityError, p as parseErrorResponse, s as QuotaError, t as AuthError, u as StateError } from "./errors-
|
|
1
|
+
import { i as normalizeRuntimeBackendConfig, n as normalizeSessionInfo, r as uploadChunked, t as SandboxRuntimeApi } from "./runtime-api-BWq4XSrb.js";
|
|
2
|
+
import { c as SandboxError, d as TimeoutError, f as ValidationError, i as NetworkError, l as ServerError, n as CapabilityError, p as parseErrorResponse, s as QuotaError, t as AuthError, u as StateError } from "./errors-wd266B9Q.js";
|
|
3
3
|
import { addTokenUsage, readTokenCostUsd, readTokenUsage } from "@tangle-network/agent-core";
|
|
4
4
|
//#region src/lib/sse-parser.ts
|
|
5
5
|
/**
|
|
@@ -920,6 +920,22 @@ const WRITE_MANY_DEFAULT_PACE_MS = 150;
|
|
|
920
920
|
const WRITE_MANY_DEFAULT_MAX_RETRIES = 4;
|
|
921
921
|
const WRITE_MANY_RETRY_BASE_MS = 250;
|
|
922
922
|
const WRITE_MANY_RETRY_MAX_MS = 2e3;
|
|
923
|
+
function parseTextFileReadResponse(body) {
|
|
924
|
+
let payload;
|
|
925
|
+
try {
|
|
926
|
+
payload = JSON.parse(body);
|
|
927
|
+
} catch {
|
|
928
|
+
throw new ServerError("Runtime returned invalid JSON for file read", 502, {
|
|
929
|
+
origin: "runtime",
|
|
930
|
+
endpoint: "/files/read"
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
if (typeof payload !== "object" || payload === null || !("success" in payload) || payload.success !== true || !("data" in payload) || typeof payload.data !== "object" || payload.data === null || !("content" in payload.data) || typeof payload.data.content !== "string" || !("encoding" in payload.data) || payload.data.encoding !== "utf8") throw new ServerError("Runtime returned a malformed text file response", 502, {
|
|
934
|
+
origin: "runtime",
|
|
935
|
+
endpoint: "/files/read"
|
|
936
|
+
});
|
|
937
|
+
return payload.data.content;
|
|
938
|
+
}
|
|
923
939
|
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
924
940
|
/** Transient file-write failures worth retrying: rate-limit (quota), 5xx,
|
|
925
941
|
* transport (network), and request timeouts. A non-transient error (bad path,
|
|
@@ -1331,18 +1347,20 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1331
1347
|
*/
|
|
1332
1348
|
async read(path, options) {
|
|
1333
1349
|
await this.ensureRunning();
|
|
1334
|
-
const headers = {};
|
|
1335
|
-
if (options?.sessionId) headers["X-Session-Id"] = options.sessionId;
|
|
1350
|
+
const headers = options?.sessionId ? { "X-Session-Id": options.sessionId } : void 0;
|
|
1336
1351
|
const response = await this.runtimeFetch("/files/read", {
|
|
1337
1352
|
method: "POST",
|
|
1338
1353
|
headers,
|
|
1339
|
-
body: JSON.stringify({
|
|
1354
|
+
body: JSON.stringify({
|
|
1355
|
+
path,
|
|
1356
|
+
encoding: "utf8"
|
|
1357
|
+
})
|
|
1340
1358
|
});
|
|
1341
1359
|
if (!response.ok) {
|
|
1342
1360
|
const body = await response.text();
|
|
1343
1361
|
throw parseErrorResponse(response.status, body, void 0, response.headers);
|
|
1344
1362
|
}
|
|
1345
|
-
return (await response.
|
|
1363
|
+
return parseTextFileReadResponse(await response.text());
|
|
1346
1364
|
}
|
|
1347
1365
|
/**
|
|
1348
1366
|
* Write content to a file in the sandbox.
|
|
@@ -1393,7 +1411,10 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1393
1411
|
if (started && paceMs > 0) await delay(paceMs);
|
|
1394
1412
|
started = true;
|
|
1395
1413
|
try {
|
|
1396
|
-
await this.write(file.path, file.content, {
|
|
1414
|
+
await this.write(file.path, file.content, {
|
|
1415
|
+
mode: file.mode,
|
|
1416
|
+
encoding: file.encoding
|
|
1417
|
+
});
|
|
1397
1418
|
break;
|
|
1398
1419
|
} catch (err) {
|
|
1399
1420
|
if (isTransientWriteError(err) && attempt < maxRetries) {
|
|
@@ -1544,8 +1565,8 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1544
1565
|
* `error` + `done` so callers never see a thrown generator.
|
|
1545
1566
|
*/
|
|
1546
1567
|
async *streamPromptInner(message, options) {
|
|
1568
|
+
if (options?.lastEventId && !options.executionId) throw new ValidationError("lastEventId requires executionId so the SDK can replay the correct execution", { executionId: "Required when lastEventId is set" });
|
|
1547
1569
|
await this.ensureRunning();
|
|
1548
|
-
const parts = encodePromptForWire(message);
|
|
1549
1570
|
const timeoutMs = typeof options?.timeoutMs === "number" && options.timeoutMs > 0 ? options.timeoutMs : void 0;
|
|
1550
1571
|
const timeoutSignal = timeoutMs ? AbortSignal.timeout(timeoutMs) : void 0;
|
|
1551
1572
|
const streamSignal = timeoutSignal ? options?.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal : options?.signal;
|
|
@@ -1563,26 +1584,47 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1563
1584
|
...data
|
|
1564
1585
|
});
|
|
1565
1586
|
};
|
|
1587
|
+
const explicitReplay = Boolean(options?.executionId && options.lastEventId);
|
|
1588
|
+
const requestEndpoint = explicitReplay ? `/agents/run/${encodeURIComponent(options?.executionId ?? "")}/events?lastEventId=${encodeURIComponent(options?.lastEventId ?? "")}&format=sse` : "/agents/run/stream";
|
|
1589
|
+
let lastEventId = options?.lastEventId;
|
|
1590
|
+
let executionId = options?.executionId;
|
|
1591
|
+
let sessionId = options?.sessionId;
|
|
1592
|
+
let receivedTerminal = false;
|
|
1593
|
+
const RECONNECT_BACKOFF_MS = [
|
|
1594
|
+
2e3,
|
|
1595
|
+
4e3,
|
|
1596
|
+
8e3,
|
|
1597
|
+
16e3,
|
|
1598
|
+
3e4,
|
|
1599
|
+
3e4
|
|
1600
|
+
];
|
|
1601
|
+
const MAX_RECONNECT_ATTEMPTS = RECONNECT_BACKOFF_MS.length;
|
|
1602
|
+
let lastReplayStatus;
|
|
1603
|
+
let lastExecutionStatus;
|
|
1604
|
+
let firstSseEventSeen = false;
|
|
1566
1605
|
let response;
|
|
1567
1606
|
try {
|
|
1568
1607
|
logStreamCheckpoint("runtime_post_start", {
|
|
1569
|
-
endpoint:
|
|
1608
|
+
endpoint: requestEndpoint,
|
|
1570
1609
|
sessionId: options?.sessionId,
|
|
1571
1610
|
executionId: options?.executionId,
|
|
1572
1611
|
hasLastEventId: Boolean(options?.lastEventId),
|
|
1573
|
-
detach: options?.detach === true
|
|
1612
|
+
detach: options?.detach === true,
|
|
1613
|
+
replayOnly: explicitReplay
|
|
1574
1614
|
});
|
|
1575
|
-
|
|
1615
|
+
const request = explicitReplay ? {
|
|
1616
|
+
method: "GET",
|
|
1617
|
+
signal: streamSignal
|
|
1618
|
+
} : {
|
|
1576
1619
|
method: "POST",
|
|
1577
1620
|
signal: streamSignal,
|
|
1578
1621
|
headers: {
|
|
1579
1622
|
...options?.executionId ? { "X-Execution-ID": options.executionId } : {},
|
|
1580
|
-
...options?.lastEventId ? { "Last-Event-ID": options.lastEventId } : {},
|
|
1581
1623
|
...options?.detach ? { "x-agent-detach": "true" } : {}
|
|
1582
1624
|
},
|
|
1583
1625
|
body: JSON.stringify({
|
|
1584
1626
|
identifier: "default",
|
|
1585
|
-
parts,
|
|
1627
|
+
parts: encodePromptForWire(message),
|
|
1586
1628
|
sessionId: options?.sessionId,
|
|
1587
1629
|
turnId: options?.turnId,
|
|
1588
1630
|
metadata: options?.context,
|
|
@@ -1591,7 +1633,8 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1591
1633
|
...options?.detach ? { detach: true } : {},
|
|
1592
1634
|
backend: normalizeRuntimeBackendConfig(options?.backend ?? this.defaultRuntimeBackend, { model: options?.model })
|
|
1593
1635
|
})
|
|
1594
|
-
}
|
|
1636
|
+
};
|
|
1637
|
+
response = await this.runtimeFetch(requestEndpoint, request);
|
|
1595
1638
|
logStreamCheckpoint("runtime_response_headers", {
|
|
1596
1639
|
status: response.status,
|
|
1597
1640
|
ok: response.ok
|
|
@@ -1601,27 +1644,20 @@ var SandboxInstance = class SandboxInstance {
|
|
|
1601
1644
|
throwIfTimedOut();
|
|
1602
1645
|
throw err;
|
|
1603
1646
|
}
|
|
1604
|
-
if (!response.ok) {
|
|
1647
|
+
if (!response.ok && !explicitReplay) {
|
|
1605
1648
|
const body = await response.text();
|
|
1606
1649
|
throw parseErrorResponse(response.status, body, void 0, response.headers);
|
|
1607
1650
|
}
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
3e4
|
|
1619
|
-
];
|
|
1620
|
-
const MAX_RECONNECT_ATTEMPTS = RECONNECT_BACKOFF_MS.length;
|
|
1621
|
-
let lastReplayStatus;
|
|
1622
|
-
let lastExecutionStatus;
|
|
1623
|
-
let firstSseEventSeen = false;
|
|
1624
|
-
for await (const event of this.parseSSEStream(response, streamSignal)) {
|
|
1651
|
+
if (!response.ok) {
|
|
1652
|
+
lastReplayStatus = response.status;
|
|
1653
|
+
await response.text();
|
|
1654
|
+
logStreamCheckpoint("replay_response_status", {
|
|
1655
|
+
attempt: 0,
|
|
1656
|
+
status: response.status,
|
|
1657
|
+
ok: false
|
|
1658
|
+
});
|
|
1659
|
+
} else for await (const event of this.parseSSEStream(response, streamSignal)) {
|
|
1660
|
+
if (event.type === "history.replay.start" || event.type === "history.replay.end") continue;
|
|
1625
1661
|
if (!firstSseEventSeen) {
|
|
1626
1662
|
firstSseEventSeen = true;
|
|
1627
1663
|
logStreamCheckpoint("first_sse_event", {
|
|
@@ -2099,11 +2135,19 @@ var SandboxInstance = class SandboxInstance {
|
|
|
2099
2135
|
async resourceUsage() {
|
|
2100
2136
|
await this.ensureRunning();
|
|
2101
2137
|
const response = await this.runtimeFetch("/health/detailed", { method: "GET" });
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2138
|
+
const body = await response.text();
|
|
2139
|
+
let data;
|
|
2140
|
+
try {
|
|
2141
|
+
data = JSON.parse(body);
|
|
2142
|
+
} catch (error) {
|
|
2143
|
+
if (response.ok) throw new NetworkError("Detailed health returned a non-JSON response", error instanceof Error ? error : void 0, {
|
|
2144
|
+
endpoint: "/health/detailed",
|
|
2145
|
+
origin: "runtime"
|
|
2146
|
+
});
|
|
2105
2147
|
}
|
|
2106
|
-
|
|
2148
|
+
if (data?.resources) return data.resources;
|
|
2149
|
+
if (!response.ok) throw parseErrorResponse(response.status, body, void 0, response.headers);
|
|
2150
|
+
return null;
|
|
2107
2151
|
}
|
|
2108
2152
|
/**
|
|
2109
2153
|
* Git capability object for repository operations.
|
|
@@ -2322,12 +2366,14 @@ var SandboxInstance = class SandboxInstance {
|
|
|
2322
2366
|
writeMany: (files, options) => this.writeMany(files, options),
|
|
2323
2367
|
search: (query, options) => this.search(query, options),
|
|
2324
2368
|
upload: (localPath, remotePath, options) => this.fsUpload(localPath, remotePath, options),
|
|
2369
|
+
uploadData: (remotePath, data, options) => this.fsUploadData(remotePath, data, options),
|
|
2325
2370
|
download: (remotePath, localPath, options) => this.fsDownload(remotePath, localPath, options),
|
|
2326
2371
|
uploadDir: (localDir, remoteDir) => this.fsUploadDir(localDir, remoteDir),
|
|
2327
2372
|
downloadDir: (remoteDir, localDir) => this.fsDownloadDir(remoteDir, localDir),
|
|
2328
2373
|
list: (path, options) => this.fsList(path, options),
|
|
2329
2374
|
stat: (path) => this.fsStat(path),
|
|
2330
2375
|
delete: (path, options) => this.fsDelete(path, options),
|
|
2376
|
+
rename: (sourcePath, destinationPath, options) => this.fsRename(sourcePath, destinationPath, options),
|
|
2331
2377
|
mkdir: (path, options) => this.fsMkdir(path, options),
|
|
2332
2378
|
exists: (path) => this.fsExists(path)
|
|
2333
2379
|
};
|
|
@@ -2368,6 +2414,14 @@ var SandboxInstance = class SandboxInstance {
|
|
|
2368
2414
|
percentage: 100
|
|
2369
2415
|
});
|
|
2370
2416
|
}
|
|
2417
|
+
/** See {@link FileSystem.uploadData}. Delegates to the shared, browser-safe
|
|
2418
|
+
* chunked-upload flow in `lib/chunked-upload.ts`, wired to this sandbox's
|
|
2419
|
+
* runtime endpoint (works over the gateway proxy or a direct connection —
|
|
2420
|
+
* both are transparent through `runtimeFetch`). */
|
|
2421
|
+
async fsUploadData(remotePath, data, options) {
|
|
2422
|
+
await this.ensureRunning();
|
|
2423
|
+
return uploadChunked({ fetch: (path, init) => this.runtimeFetch(path, init) }, remotePath, data, options);
|
|
2424
|
+
}
|
|
2371
2425
|
async fsDownload(remotePath, localPath, options) {
|
|
2372
2426
|
await this.ensureRunning();
|
|
2373
2427
|
const fs = await import("node:fs/promises");
|
|
@@ -2515,6 +2569,9 @@ var SandboxInstance = class SandboxInstance {
|
|
|
2515
2569
|
throw parseErrorResponse(response.status, body, void 0, response.headers);
|
|
2516
2570
|
}
|
|
2517
2571
|
}
|
|
2572
|
+
async fsRename(sourcePath, destinationPath, options) {
|
|
2573
|
+
return this.runtime.renameFile(sourcePath, destinationPath, options);
|
|
2574
|
+
}
|
|
2518
2575
|
async fsMkdir(path, options) {
|
|
2519
2576
|
await this.ensureRunning();
|
|
2520
2577
|
const params = new URLSearchParams();
|
|
@@ -4443,15 +4500,10 @@ var SandboxInstance = class SandboxInstance {
|
|
|
4443
4500
|
return { state: "running" };
|
|
4444
4501
|
}
|
|
4445
4502
|
/**
|
|
4446
|
-
* Mint a scoped, time-bounded JWT for
|
|
4447
|
-
*
|
|
4448
|
-
*
|
|
4449
|
-
*
|
|
4450
|
-
*
|
|
4451
|
-
* Use this to give a browser direct read access to the sandbox without
|
|
4452
|
-
* leaking the full bearer (`box.connection.authToken`). The returned
|
|
4453
|
-
* token verifies against the same sidecar middleware that already
|
|
4454
|
-
* gates ProductTokenIssuer-issued JWTs — no new sidecar surface.
|
|
4503
|
+
* Mint a scoped, time-bounded JWT for browser access (Issue #913 Gap 1).
|
|
4504
|
+
* Authority is the caller's `TANGLE_API_KEY` (sk-tan-*); signing secrets
|
|
4505
|
+
* stay server-side. Session/project scopes work with SessionGatewayClient,
|
|
4506
|
+
* while session-runtime/read-only scopes work with SandboxRuntimeClient.
|
|
4455
4507
|
*/
|
|
4456
4508
|
async mintScopedToken(opts) {
|
|
4457
4509
|
if ((opts.scope === "session" || opts.scope === "session-runtime") && !opts.sessionId) throw new ValidationError(`${opts.scope} scope requires a sessionId`);
|
package/dist/tangle/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TANGLE_JOBS_CONTRACT, c as AgentSandboxBlueprintAbi, d as SandboxCreateParamTypes, f as SandboxCreateResponseParamTypes, i as TANGLE_CHAIN_ID, l as ITangleJobsAbi, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, p as SandboxIdParamTypes, r as JOB_SANDBOX_DELETE, s as TangleSandboxClientConfig, t as TangleSandboxClient, u as JsonResponseParamTypes } from "../index-
|
|
1
|
+
import { a as TANGLE_JOBS_CONTRACT, c as AgentSandboxBlueprintAbi, d as SandboxCreateParamTypes, f as SandboxCreateResponseParamTypes, i as TANGLE_CHAIN_ID, l as ITangleJobsAbi, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, p as SandboxIdParamTypes, r as JOB_SANDBOX_DELETE, s as TangleSandboxClientConfig, t as TangleSandboxClient, u as JsonResponseParamTypes } from "../index-CEZaPvfX.js";
|
|
2
2
|
export { AgentSandboxBlueprintAbi, ITangleJobsAbi, JOB_SANDBOX_CREATE, JOB_SANDBOX_DELETE, JsonResponseParamTypes, SandboxCreateParamTypes, SandboxCreateResponseParamTypes, SandboxIdParamTypes, TANGLE_CHAIN_ID, TANGLE_JOBS_CONTRACT, TANGLE_MAINNET_RPC, TangleSandboxClient, TangleSandboxClientConfig };
|
package/dist/tangle/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-
|
|
1
|
+
import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-Os9sH-ms.js";
|
|
2
2
|
export { AgentSandboxBlueprintAbi, ITangleJobsAbi, JOB_SANDBOX_CREATE, JOB_SANDBOX_DELETE, JsonResponseParamTypes, SandboxCreateParamTypes, SandboxCreateResponseParamTypes, SandboxIdParamTypes, TANGLE_CHAIN_ID, TANGLE_JOBS_CONTRACT, TANGLE_MAINNET_RPC, TangleSandboxClient };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as parseErrorResponse } from "./errors-
|
|
2
|
-
import { t as SandboxInstance } from "./sandbox-
|
|
1
|
+
import { p as parseErrorResponse } from "./errors-wd266B9Q.js";
|
|
2
|
+
import { t as SandboxInstance } from "./sandbox-KiKLRbR_.js";
|
|
3
3
|
//#region src/tangle/abi.ts
|
|
4
4
|
/**
|
|
5
5
|
* Tangle Contract ABI Definitions
|
|
@@ -662,6 +662,25 @@ interface CreateSandboxOptions {
|
|
|
662
662
|
* timeout-driven retries.
|
|
663
663
|
*/
|
|
664
664
|
idempotencyKey?: string;
|
|
665
|
+
/**
|
|
666
|
+
* Auto-split inline file mounts out of an inline `backend.profile` object
|
|
667
|
+
* at create time, send the lean profile (mount refs stripped) in the
|
|
668
|
+
* create request, then write the deferred files back once the sandbox is
|
|
669
|
+
* running.
|
|
670
|
+
*
|
|
671
|
+
* When `true` (the default), a profile with sizeable inline mounts (e.g.
|
|
672
|
+
* skills, tool scripts) does not bloat the create POST; the SDK
|
|
673
|
+
* materializes those files via {@link FileSystem.writeMany} /
|
|
674
|
+
* {@link FileSystem.uploadData} after the sandbox reaches `running`. Only
|
|
675
|
+
* applies to an inline `AgentProfile` object on `backend.profile` — a
|
|
676
|
+
* named-profile string is never split, and the deprecated untyped
|
|
677
|
+
* `backend.inlineProfile` passthrough is not split either. Set `false`
|
|
678
|
+
* to send the full profile inline in the create request (no post-create
|
|
679
|
+
* materialization step).
|
|
680
|
+
*
|
|
681
|
+
* @default true
|
|
682
|
+
*/
|
|
683
|
+
autoMaterializeProfileFiles?: boolean;
|
|
665
684
|
}
|
|
666
685
|
/**
|
|
667
686
|
* Per-call overrides for {@link SandboxClient.create}.
|
|
@@ -1254,18 +1273,19 @@ interface PromptOptions {
|
|
|
1254
1273
|
/** AbortSignal for cancellation */
|
|
1255
1274
|
signal?: AbortSignal;
|
|
1256
1275
|
/**
|
|
1257
|
-
* Stable execution id for
|
|
1258
|
-
*
|
|
1259
|
-
*
|
|
1260
|
-
*
|
|
1261
|
-
*
|
|
1262
|
-
*
|
|
1276
|
+
* Stable execution id for tracing a first dispatch or selecting an existing
|
|
1277
|
+
* execution for replay. Forwarded as `X-Execution-ID` on a first dispatch.
|
|
1278
|
+
* When combined with `lastEventId`, the SDK replays the existing execution
|
|
1279
|
+
* without sending the prompt again. An execution ID alone does not make a
|
|
1280
|
+
* repeated POST idempotent; use `turnId` for application-level retries.
|
|
1281
|
+
* Omit to let the SDK read the id from `execution.started` for in-call
|
|
1282
|
+
* reconnects.
|
|
1263
1283
|
*/
|
|
1264
1284
|
executionId?: string;
|
|
1265
1285
|
/**
|
|
1266
|
-
* Last event id the caller has already acknowledged.
|
|
1267
|
-
* replays strictly after this id
|
|
1268
|
-
*
|
|
1286
|
+
* Last event id the caller has already acknowledged. Requires `executionId`;
|
|
1287
|
+
* the SDK replays strictly after this id without dispatching a new prompt.
|
|
1288
|
+
* Omit on the first attempt.
|
|
1269
1289
|
*/
|
|
1270
1290
|
lastEventId?: string;
|
|
1271
1291
|
/**
|
|
@@ -1724,6 +1744,10 @@ interface SessionListOptions {
|
|
|
1724
1744
|
}
|
|
1725
1745
|
/** Options for creating a runtime agent session. */
|
|
1726
1746
|
interface CreateSessionOptions {
|
|
1747
|
+
/** Stable caller-supplied idempotency key. Repeating create with the same
|
|
1748
|
+
* id returns the existing session without creating another workspace or
|
|
1749
|
+
* backend session. Omit to let the runtime mint a random id. */
|
|
1750
|
+
sessionId?: string;
|
|
1727
1751
|
title?: string;
|
|
1728
1752
|
parentId?: string;
|
|
1729
1753
|
backend: BackendConfig;
|
|
@@ -2018,18 +2042,18 @@ type TurnDriveResult = {
|
|
|
2018
2042
|
error: string;
|
|
2019
2043
|
};
|
|
2020
2044
|
/**
|
|
2021
|
-
* Scope of a `box.mintScopedToken()` request.
|
|
2022
|
-
*
|
|
2023
|
-
*
|
|
2045
|
+
* Scope of a `box.mintScopedToken()` request. `session` and `project` mint
|
|
2046
|
+
* SessionGateway read tokens. `session-runtime` and `read-only` mint sidecar
|
|
2047
|
+
* capability tokens for browser-safe runtime access.
|
|
2024
2048
|
*/
|
|
2025
2049
|
type ScopedTokenScope = "session" | "session-runtime" | "project" | "read-only";
|
|
2026
2050
|
/**
|
|
2027
2051
|
* Options for `box.mintScopedToken()`.
|
|
2028
2052
|
*/
|
|
2029
2053
|
interface MintScopedTokenOptions {
|
|
2030
|
-
/** Scope to mint. `session`
|
|
2031
|
-
*
|
|
2032
|
-
*
|
|
2054
|
+
/** Scope to mint. `session` and `project` are for SessionGateway streams;
|
|
2055
|
+
* `session-runtime` permits typed files, messages, and terminals for one
|
|
2056
|
+
* session; `read-only` permits read-only runtime requests. */
|
|
2033
2057
|
scope: ScopedTokenScope;
|
|
2034
2058
|
/** Required when `scope` is `session` or `session-runtime`. */
|
|
2035
2059
|
sessionId?: string;
|
|
@@ -2039,18 +2063,17 @@ interface MintScopedTokenOptions {
|
|
|
2039
2063
|
ttlMinutes?: number;
|
|
2040
2064
|
}
|
|
2041
2065
|
/**
|
|
2042
|
-
* Returned by `box.mintScopedToken()`.
|
|
2043
|
-
*
|
|
2044
|
-
*
|
|
2066
|
+
* Returned by `box.mintScopedToken()`. Use session/project tokens with
|
|
2067
|
+
* `SessionGatewayClient`; use session-runtime/read-only tokens with
|
|
2068
|
+
* `SandboxRuntimeClient`.
|
|
2045
2069
|
*/
|
|
2046
2070
|
interface ScopedToken {
|
|
2047
|
-
/** Bearer token (JWT)
|
|
2048
|
-
* via the `EventSource` URL with token query param. */
|
|
2071
|
+
/** Bearer token (JWT) for the consumer selected by `scope`. */
|
|
2049
2072
|
token: string;
|
|
2050
2073
|
/** When the token expires. */
|
|
2051
2074
|
expiresAt: Date;
|
|
2052
|
-
/** The runtime's direct edge URL.
|
|
2053
|
-
*
|
|
2075
|
+
/** The runtime's direct edge URL. Use with runtime scopes; session/project
|
|
2076
|
+
* tokens instead connect to the Sandbox API's `/session` WebSocket. */
|
|
2054
2077
|
runtimeUrl: string;
|
|
2055
2078
|
/** Browser-safe Sandbox API proxy base for terminal and runtime requests. */
|
|
2056
2079
|
sidecarProxyUrl: string;
|
|
@@ -2582,7 +2605,7 @@ interface SandboxFleetArtifactSpec {
|
|
|
2582
2605
|
*/
|
|
2583
2606
|
path: string;
|
|
2584
2607
|
label?: string;
|
|
2585
|
-
/** Maximum allowed artifact content size in bytes. Defaults to
|
|
2608
|
+
/** Maximum allowed artifact content size in bytes. Defaults to 10 MiB. */
|
|
2586
2609
|
maxBytes?: number;
|
|
2587
2610
|
}
|
|
2588
2611
|
interface SandboxFleetArtifact extends SandboxFleetArtifactSpec {
|
|
@@ -4419,6 +4442,13 @@ interface FileWriteResult {
|
|
|
4419
4442
|
/** Encoding echoed by runtimes that include it in write responses. */
|
|
4420
4443
|
encoding?: "utf8" | "base64";
|
|
4421
4444
|
}
|
|
4445
|
+
/** Metadata returned after a successful file or directory rename. */
|
|
4446
|
+
interface FileRenameResult {
|
|
4447
|
+
/** Previous path, relative to the workspace when applicable. */
|
|
4448
|
+
sourcePath: string;
|
|
4449
|
+
/** New path, relative to the workspace when applicable. */
|
|
4450
|
+
destinationPath: string;
|
|
4451
|
+
}
|
|
4422
4452
|
/**
|
|
4423
4453
|
* Options for uploading files.
|
|
4424
4454
|
*/
|
|
@@ -4441,6 +4471,36 @@ interface UploadProgress {
|
|
|
4441
4471
|
/** Percentage complete (0-100) */
|
|
4442
4472
|
percentage: number;
|
|
4443
4473
|
}
|
|
4474
|
+
/**
|
|
4475
|
+
* Options for {@link FileSystem.uploadData}.
|
|
4476
|
+
*/
|
|
4477
|
+
interface ChunkedUploadOptions {
|
|
4478
|
+
/** Unix mode bits applied to the file after upload, e.g. 0o644. */
|
|
4479
|
+
mode?: number;
|
|
4480
|
+
/** Progress callback fired after each part completes. On the rare
|
|
4481
|
+
* checksum-mismatch recovery (one automatic full re-upload),
|
|
4482
|
+
* `bytesUploaded` restarts from 0 for the second pass. */
|
|
4483
|
+
onProgress?: (progress: UploadProgress) => void;
|
|
4484
|
+
/** Cancel the upload. A pending upload session is best-effort deleted
|
|
4485
|
+
* server-side when the signal fires mid-flow. */
|
|
4486
|
+
signal?: AbortSignal;
|
|
4487
|
+
/** Delay between part PUTs (ms) to pace bursts. 0 disables pacing (default). */
|
|
4488
|
+
paceMs?: number;
|
|
4489
|
+
/** Max retries per part on a transient error before failing loud. Default 4. */
|
|
4490
|
+
maxRetries?: number;
|
|
4491
|
+
}
|
|
4492
|
+
/**
|
|
4493
|
+
* Result of a successful {@link FileSystem.uploadData} call — the
|
|
4494
|
+
* upload-session commit response.
|
|
4495
|
+
*/
|
|
4496
|
+
interface ChunkedUploadResult {
|
|
4497
|
+
/** The path the runtime wrote the assembled payload to. */
|
|
4498
|
+
path: string;
|
|
4499
|
+
/** Total assembled size in bytes. */
|
|
4500
|
+
size: number;
|
|
4501
|
+
/** Server-computed content hash of the assembled payload. */
|
|
4502
|
+
hash: string;
|
|
4503
|
+
}
|
|
4444
4504
|
/**
|
|
4445
4505
|
* Options for downloading files.
|
|
4446
4506
|
*/
|
|
@@ -4490,6 +4550,11 @@ interface DeleteOptions {
|
|
|
4490
4550
|
/** Agent session whose workspace and change history receive the deletion. */
|
|
4491
4551
|
sessionId?: string;
|
|
4492
4552
|
}
|
|
4553
|
+
/** Options for {@link FileSystem.rename}. */
|
|
4554
|
+
interface RenameOptions {
|
|
4555
|
+
/** Agent session whose workspace and change history receive the rename. */
|
|
4556
|
+
sessionId?: string;
|
|
4557
|
+
}
|
|
4493
4558
|
/**
|
|
4494
4559
|
* File system operations for sandboxes. Access via `sandbox.fs`.
|
|
4495
4560
|
*
|
|
@@ -4544,10 +4609,12 @@ interface DeleteOptions {
|
|
|
4544
4609
|
interface WriteManyFile {
|
|
4545
4610
|
/** Destination path. Relative paths resolve from the workspace root. */
|
|
4546
4611
|
path: string;
|
|
4547
|
-
/** File content
|
|
4612
|
+
/** File content: UTF-8 by default, or base64 when `encoding: "base64"` (for binary payloads). */
|
|
4548
4613
|
content: string;
|
|
4549
4614
|
/** Unix mode bits applied after write, e.g. 0o755. */
|
|
4550
4615
|
mode?: number;
|
|
4616
|
+
/** Encoding of `content` on the wire. */
|
|
4617
|
+
encoding?: "utf8" | "base64";
|
|
4551
4618
|
}
|
|
4552
4619
|
/** Options for {@link FileSystem.write}. */
|
|
4553
4620
|
interface WriteFileOptions {
|
|
@@ -4638,6 +4705,35 @@ interface FileSystem {
|
|
|
4638
4705
|
* ```
|
|
4639
4706
|
*/
|
|
4640
4707
|
upload(localPath: string, remotePath: string, options?: UploadOptions): Promise<void>;
|
|
4708
|
+
/**
|
|
4709
|
+
* Upload in-memory binary or text data to the sandbox over the chunked
|
|
4710
|
+
* upload-session protocol, without touching the local filesystem.
|
|
4711
|
+
*
|
|
4712
|
+
* Browser/Worker-safe (no `node:` APIs) — this is the sanctioned path for
|
|
4713
|
+
* delivering payloads over ~1 MiB from a browser tab, a Worker, or any
|
|
4714
|
+
* runtime without `node:fs`, where {@link FileSystem.upload}'s local-file
|
|
4715
|
+
* read isn't available. Binary-safe: accepts a `Blob`, `ArrayBuffer`,
|
|
4716
|
+
* `ArrayBufferView`, or UTF-8 `string`. The upload is chunked into
|
|
4717
|
+
* server-sized parts transparently — callers see one call and one
|
|
4718
|
+
* awaited result — and verified end-to-end with a whole-payload SHA-256
|
|
4719
|
+
* at commit. Works identically whether the sandbox is reached through
|
|
4720
|
+
* the gateway proxy or a direct sidecar connection.
|
|
4721
|
+
*
|
|
4722
|
+
* @param remotePath - Destination path in the sandbox.
|
|
4723
|
+
* @param data - Payload to upload. Strings encode as UTF-8.
|
|
4724
|
+
* @param options - Chunking, retry, progress, and cancellation options.
|
|
4725
|
+
* @throws {SandboxError} `PAYLOAD_TOO_LARGE` immediately, before any
|
|
4726
|
+
* request, if the payload exceeds the chunked-upload session cap.
|
|
4727
|
+
*
|
|
4728
|
+
* @example
|
|
4729
|
+
* ```typescript
|
|
4730
|
+
* const blob = await fetch("https://example.com/model.bin").then((r) => r.blob());
|
|
4731
|
+
* await box.fs.uploadData("/workspace/models/model.bin", blob, {
|
|
4732
|
+
* onProgress: (p) => console.log(`${p.percentage.toFixed(1)}%`),
|
|
4733
|
+
* });
|
|
4734
|
+
* ```
|
|
4735
|
+
*/
|
|
4736
|
+
uploadData(remotePath: string, data: Blob | ArrayBuffer | ArrayBufferView | string, options?: ChunkedUploadOptions): Promise<ChunkedUploadResult>;
|
|
4641
4737
|
/**
|
|
4642
4738
|
* Download a file from the sandbox.
|
|
4643
4739
|
* Handles binary files correctly.
|
|
@@ -4734,6 +4830,27 @@ interface FileSystem {
|
|
|
4734
4830
|
* ```
|
|
4735
4831
|
*/
|
|
4736
4832
|
delete(path: string, options?: DeleteOptions): Promise<void>;
|
|
4833
|
+
/**
|
|
4834
|
+
* Rename a file or directory inside the sandbox without transferring its contents.
|
|
4835
|
+
* An existing regular file or symbolic link at the destination is replaced atomically.
|
|
4836
|
+
* Replacing a non-empty directory fails, as does moving across filesystems.
|
|
4837
|
+
*
|
|
4838
|
+
* @param sourcePath - Current path
|
|
4839
|
+
* @param destinationPath - New path
|
|
4840
|
+
* @param options - Session workspace options
|
|
4841
|
+
* @returns The resolved source and destination paths
|
|
4842
|
+
* @throws NotFoundError if the source or destination parent does not exist
|
|
4843
|
+
* @throws Error if the destination is a non-empty directory or the paths span filesystems
|
|
4844
|
+
*
|
|
4845
|
+
* @example
|
|
4846
|
+
* ```typescript
|
|
4847
|
+
* await box.fs.rename(
|
|
4848
|
+
* "/workspace/assets/logo.tmp",
|
|
4849
|
+
* "/workspace/assets/logo.png",
|
|
4850
|
+
* );
|
|
4851
|
+
* ```
|
|
4852
|
+
*/
|
|
4853
|
+
rename(sourcePath: string, destinationPath: string, options?: RenameOptions): Promise<FileRenameResult>;
|
|
4737
4854
|
/**
|
|
4738
4855
|
* Create a directory.
|
|
4739
4856
|
*
|
|
@@ -4843,4 +4960,4 @@ interface CodeExecutionOptions {
|
|
|
4843
4960
|
idempotencyKey?: string;
|
|
4844
4961
|
}
|
|
4845
4962
|
//#endregion
|
|
4846
|
-
export {
|
|
4963
|
+
export { EgressManager as $, defineInlineResource as $i, SandboxFleetDriverCapability as $n, SessionForkOptions as $r, McpServerConfig as $t, CodeResult as A, UploadProgress as Ai, ReconcileSandboxFleetsResult as An, SandboxRuntimeProfile as Ar, GitStatus as At, CreateSandboxOptions as B, AgentProfileConnection as Bi, RolloutTurnPart as Bn, SandboxTraceOptions as Br, HostAgentDriverConfig as Bt, BatchTaskUsage as C, TeePublicKey as Ci, PublicTemplateInfo as Cn, SandboxPermissionsConfig as Cr, FleetPromptDispatchResult as Ct, CodeExecutionOptions as D, TurnDriveResult as Di, ReapExpiredSandboxFleetsOptions as Dn, SandboxResourceUsage as Dr, GitCommit as Dt, ChunkedUploadResult as E, ToolsConfig as Ei, PublishPublicTemplateVersionOptions as En, SandboxProfileSummary as Er, GitBranch as Et, CreateIntelligenceReportOptions as F, WriteManyFile as Fi, RolloutChildResult as Fn, SandboxTerminalManager as Fr, GpuLeaseExecResult as Ft, DispatchPromptOptions as G, AgentProfilePrompt as Gi, SandboxConnection as Gn, SearchOptions as Gr, IntelligenceReportCompareTo as Gt, CreateTaskSessionOptions as H, AgentProfileMcpServer as Hi, SSHCommandDescriptor as Hn, ScopedToken as Hr, InstalledTool as Ht, CreateRequestOptions as I, WriteManyOptions as Ii, RolloutOptions as In, SandboxTerminalRequestOptions as Ir, GpuLeaseManager as It, DownloadProgress as J, AgentProfileValidationIssue as Ji, SandboxFleetArtifact as Jn, SendSessionMessageOptions as Jr, JsonValue as Jt, DispatchedSession as K, AgentProfileResourceRef as Ki, SandboxEnvironment as Kn, SecretInfo as Kr, IntelligenceReportSubjectType as Kt, CreateSandboxFleetOptions as L, AgentProfile as Li, RolloutScorer as Ln, SandboxTraceBundle as Lr, GpuLeaseProviderName as Lt, CommitTaskSessionOptions as M, WaitForOptions as Mi, RestoreSnapshotOptions as Mn, SandboxStatus as Mr, GpuLeaseBilling as Mt, CompletedTurnResult as N, WaitForRolloutOptions as Ni, ResumeOptions as Nn, SandboxTerminalCreateOptions as Nr, GpuLeaseCommandResult as Nt, CodeExecutionResult as O, UpdateUserOptions as Oi, ReapExpiredSandboxFleetsResult as On, SandboxResources as Or, GitConfig as Ot, CreateGpuLeaseOptions as P, WriteFileOptions as Pi, Rollout as Pn, SandboxTerminalInfo as Pr, GpuLeaseExecOptions as Pt, DriverType as Q, defineGitHubResource as Qi, SandboxFleetDispatchResponse as Qn, SessionEventStreamOptions as Qr, ListSandboxOptions as Qt, CreateSandboxFleetTokenOptions as R, AgentProfileCapabilities as Ri, RolloutStartResult as Rn, SandboxTraceEvent as Rr, GpuLeaseStatus as Rt, BatchTaskResult as S, TeeAttestationResponse as Si, ProvisionStep as Sn, SandboxIntelligenceEnvelope as Sr, FleetPromptDispatchOptions as St, ChunkedUploadOptions as T, TokenRefreshHandler as Ti, PublishPublicTemplateOptions as Tn, SandboxPortPreviewLink as Tr, GitAuth as Tt, DeleteOptions as U, AgentProfileModelHints as Ui, SSHCredentials as Un, ScopedTokenScope as Ur, IntelligenceReport as Ut, CreateSessionOptions as V, AgentProfileFileMount as Vi, RunCodeOptions as Vn, SandboxUser as Vr, HostAgentRuntimeBackend as Vt, DirectoryPermission as W, AgentProfilePermissionValue as Wi, SandboxClientConfig as Wn, SearchMatch as Wr, IntelligenceReportBudget as Wt, DriverConfig as X, AgentSubagentProfile as Xi, SandboxFleetCostEstimate as Xn, SentSessionMessage as Xr, ListOptions as Xt, DriveTurnOptions as Y, AgentProfileValidationResult as Yi, SandboxFleetArtifactSpec as Yn, SendSessionMessageRequest as Yr, ListMessagesOptions as Yt, DriverInfo as Z, defineAgentProfile as Zi, SandboxFleetDispatchFailureClass as Zn, SessionBackendCredentials as Zr, ListSandboxFleetOptions as Zt, BatchResult as _, TaskSessionFileChange as _i, PromptOptions as _n, SandboxFleetWorkspace as _r, FleetDispatchResultBufferOptions as _t, AttachSandboxFleetMachineOptions as a, SnapshotInfo as ai, PermissionLevel as an, SandboxFleetMachineRecord as ar, FileReadBatchOptions as at, BatchSidecarGroup as b, TeeAttestationOptions as bi, ProvisionResult as bn, SandboxFleetWorkspaceSnapshotResult as br, FleetExecDispatchResult as bt, BackendInfo as c, SshKeysManager as ci, PreviewLinkManager as cn, SandboxFleetManifestMachine as cr, FileReadResult as ct, BackendType as d, StorageConfig as di, ProcessLogEntry as dn, SandboxFleetToken as dr, FileTreeFile as dt, mergeAgentProfiles as ea, SessionInfo as ei, MintScopedTokenOptions as en, SandboxFleetDriverTimings as er, EgressPolicy as et, BatchBackend as f, SubscriptionInfo as fi, ProcessManager as fn, SandboxFleetTraceBundle as fr, FileTreeOptions as ft, BatchOptions as g, TaskSessionCommitResult as gi, PromptInputPart as gn, SandboxFleetUsage as gr, FleetDispatchResultBuffer as gt, BatchEventDataMap as h, TaskSessionChanges as hi, ProcessStatus as hn, SandboxFleetTraceOptions as hr, FleetDispatchCancelResult as ht, AttachGpuLeaseOptions as i, SessionStatus as ii, NonHostAgentDriverConfig as in, SandboxFleetMachineMeteredUsage as ir, FileInfo as it, CodeResultPart as j, UsageInfo as ji, RenameOptions as jn, SandboxRuntimeProfileList as jr, GpuLease as jt, CodeLanguage as k, UploadOptions as ki, ReconcileSandboxFleetsOptions as kn, SandboxRuntimeHealth as kr, GitDiff as kt, BackendManager as l, StartupDiagnostics as li, Process as ln, SandboxFleetOperationsSummary as lr, FileRenameResult as lt, BatchEvent as m, TaskResult as mi, ProcessSpawnOptions as mn, SandboxFleetTraceExport as mr, FileWriteResult as mt, AccessPolicyRule as n, SessionMessage as ni, NetworkConfig as nn, SandboxFleetIntelligenceEnvelope as nr, ExecOptions as nt, BackendCapabilities as o, SnapshotOptions as oi, PermissionsManager as on, SandboxFleetMachineSpec as or, FileReadBatchResult as ot, BatchBackendStats as p, TaskOptions as pi, ProcessSignal as pn, SandboxFleetTraceEvent as pr, FileTreeResult as pt, DownloadOptions as q, AgentProfileResources as qi, SandboxEvent as qn, SecretsManager as qr, IntelligenceReportWindow as qt, AddUserOptions as r, SessionMessageInputPart as ri, NetworkManager as rn, SandboxFleetMachine as rr, ExecResult as rt, BackendConfig as s, SnapshotResult as si, PreviewLinkInfo as sn, SandboxFleetManifest as sr, FileReadError as st, AcceleratorKind as t, SessionListOptions as ti, MkdirOptions as tn, SandboxFleetInfo as tr, EventStreamOptions as tt, BackendStatus as u, StartupOperation as ui, ProcessInfo as un, SandboxFleetPolicy as ur, FileSystem as ut, BatchRunOptions as v, TaskSessionInfo as vi, PromptResult as vn, SandboxFleetWorkspaceReconcileResult as vr, FleetDispatchStreamOptions as vt, BranchOptions as w, TeePublicKeyResponse as wi, PublicTemplateVersionInfo as wn, SandboxPortBinding as wr, GPU_LEASE_PROVIDER_NAMES as wt, BatchTask as x, TeeAttestationReport as xi, ProvisionStatus as xn, SandboxInfo as xr, FleetMachineId as xt, BatchRunRequest as y, TaskSessionProfile as yi, ProvisionEvent as yn, SandboxFleetWorkspaceRestoreResult as yr, FleetExecDispatchOptions as yt, CreateSandboxFleetWithCoordinatorOptions as z, AgentProfileConfidential as zi, RolloutStatus as zn, SandboxTraceExport as zr, GpuType as zt };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/sandbox",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.5-develop.20260715115519.fee3d86",
|
|
4
4
|
"description": "Client SDK for the Tangle Sandbox platform - build AI agent applications with dev containers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -88,7 +88,8 @@
|
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@tangle-network/agent-core": "^0.4.0",
|
|
91
|
-
"@tangle-network/agent-interface": "^0.21.0"
|
|
91
|
+
"@tangle-network/agent-interface": "^0.21.0",
|
|
92
|
+
"@tangle-network/runtime-contracts": "0.1.0"
|
|
92
93
|
},
|
|
93
94
|
"peerDependencies": {
|
|
94
95
|
"@mastra/core": "^1.36.0",
|