@theokit/sdk 5.13.0 → 5.15.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.
- package/CHANGELOG.md +57 -0
- package/dist/{agent-DSMuwADp.d.ts → agent-B6C9i_qu.d.ts} +31 -213
- package/dist/{agent-iW5kPpfT.d.cts → agent-B6FQad6P.d.cts} +31 -213
- package/dist/{agent-5DSDDH7K.js → agent-DRDGUU6T.js} +21 -20
- package/dist/{agent-5DSDDH7K.js.map → agent-DRDGUU6T.js.map} +1 -1
- package/dist/{agent-WOMRT3KX.cjs → agent-VI2HITPT.cjs} +22 -21
- package/dist/{agent-WOMRT3KX.cjs.map → agent-VI2HITPT.cjs.map} +1 -1
- package/dist/agent.d.ts +2 -3
- package/dist/auth/index.cjs +17 -16
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +5 -4
- package/dist/auth/index.js.map +1 -1
- package/dist/{batch-EP3FCL6D.js → batch-N2XDYZED.js} +4 -4
- package/dist/{batch-EP3FCL6D.js.map → batch-N2XDYZED.js.map} +1 -1
- package/dist/{batch-IZ5EDKJ5.cjs → batch-VFR2MAUE.cjs} +7 -7
- package/dist/{batch-IZ5EDKJ5.cjs.map → batch-VFR2MAUE.cjs.map} +1 -1
- package/dist/{chunk-XOYNB3YN.js → chunk-23SS4ID4.js} +3 -3
- package/dist/{chunk-XOYNB3YN.js.map → chunk-23SS4ID4.js.map} +1 -1
- package/dist/{chunk-NHOEXFZT.js → chunk-2HXTNVLM.js} +5 -2
- package/dist/chunk-2HXTNVLM.js.map +1 -0
- package/dist/{chunk-2C24NSNV.js → chunk-3BBTHFGJ.js} +3 -3
- package/dist/{chunk-2C24NSNV.js.map → chunk-3BBTHFGJ.js.map} +1 -1
- package/dist/{chunk-NP362THY.cjs → chunk-3F53FLQ7.cjs} +5 -7
- package/dist/chunk-3F53FLQ7.cjs.map +1 -0
- package/dist/{chunk-3FSBE4PS.js → chunk-3GTN4HOO.js} +10 -6
- package/dist/chunk-3GTN4HOO.js.map +1 -0
- package/dist/{chunk-7WARNHWW.cjs → chunk-3UMPP553.cjs} +5 -2
- package/dist/chunk-3UMPP553.cjs.map +1 -0
- package/dist/{chunk-SXH37C7X.cjs → chunk-55LLQFHW.cjs} +6 -6
- package/dist/{chunk-SXH37C7X.cjs.map → chunk-55LLQFHW.cjs.map} +1 -1
- package/dist/{chunk-QISSETTG.cjs → chunk-5645PMVU.cjs} +6 -4
- package/dist/chunk-5645PMVU.cjs.map +1 -0
- package/dist/{chunk-JX4LB6XO.js → chunk-5M5GQYBM.js} +617 -250
- package/dist/chunk-5M5GQYBM.js.map +1 -0
- package/dist/{chunk-KL7ZUMK3.cjs → chunk-64ECM3XM.cjs} +704 -337
- package/dist/chunk-64ECM3XM.cjs.map +1 -0
- package/dist/{chunk-ZJAYFSVI.js → chunk-7ACS6P5Z.js} +5 -7
- package/dist/chunk-7ACS6P5Z.js.map +1 -0
- package/dist/{chunk-5A4UFBHW.cjs → chunk-A77UMVMD.cjs} +15 -11
- package/dist/chunk-A77UMVMD.cjs.map +1 -0
- package/dist/{chunk-ZTP6ZACR.js → chunk-ARC2V7NY.js} +3 -3
- package/dist/{chunk-ZTP6ZACR.js.map → chunk-ARC2V7NY.js.map} +1 -1
- package/dist/{chunk-WDVG5R2Q.cjs → chunk-AUH2EVWY.cjs} +4 -3
- package/dist/chunk-AUH2EVWY.cjs.map +1 -0
- package/dist/chunk-BNEUB52I.cjs +55 -0
- package/dist/chunk-BNEUB52I.cjs.map +1 -0
- package/dist/chunk-BPL5CVZ5.js +53 -0
- package/dist/chunk-BPL5CVZ5.js.map +1 -0
- package/dist/{chunk-2SFLLOMN.js → chunk-CBBT42VX.js} +3 -3
- package/dist/{chunk-2SFLLOMN.js.map → chunk-CBBT42VX.js.map} +1 -1
- package/dist/chunk-CHKV2L2Y.cjs +416 -0
- package/dist/chunk-CHKV2L2Y.cjs.map +1 -0
- package/dist/{chunk-4UYHP6NF.cjs → chunk-DJKGDLYZ.cjs} +93 -63
- package/dist/chunk-DJKGDLYZ.cjs.map +1 -0
- package/dist/{chunk-354F3OF5.js → chunk-FGGVSHDW.js} +3 -3
- package/dist/{chunk-354F3OF5.js.map → chunk-FGGVSHDW.js.map} +1 -1
- package/dist/{chunk-6OCJWGVD.cjs → chunk-FTXY4D44.cjs} +4 -4
- package/dist/{chunk-6OCJWGVD.cjs.map → chunk-FTXY4D44.cjs.map} +1 -1
- package/dist/chunk-INVEGVGO.js +405 -0
- package/dist/chunk-INVEGVGO.js.map +1 -0
- package/dist/{chunk-2PRGRYEQ.js → chunk-IOBHFP2E.js} +50 -20
- package/dist/chunk-IOBHFP2E.js.map +1 -0
- package/dist/{chunk-47EACDOC.cjs → chunk-KMFBNKCT.cjs} +4 -4
- package/dist/{chunk-47EACDOC.cjs.map → chunk-KMFBNKCT.cjs.map} +1 -1
- package/dist/{chunk-DF77RBF4.js → chunk-LCCT5ZXJ.js} +6 -6
- package/dist/{chunk-DF77RBF4.js.map → chunk-LCCT5ZXJ.js.map} +1 -1
- package/dist/{chunk-G7XBVM3T.cjs → chunk-MHUOVS5I.cjs} +5 -5
- package/dist/{chunk-G7XBVM3T.cjs.map → chunk-MHUOVS5I.cjs.map} +1 -1
- package/dist/{chunk-CWQPQTUZ.cjs → chunk-NEH3BPFD.cjs} +15 -15
- package/dist/{chunk-CWQPQTUZ.cjs.map → chunk-NEH3BPFD.cjs.map} +1 -1
- package/dist/{chunk-5AR6O7GW.js → chunk-NK5EOTDY.js} +3 -3
- package/dist/{chunk-5AR6O7GW.js.map → chunk-NK5EOTDY.js.map} +1 -1
- package/dist/{chunk-S46WJTDL.cjs → chunk-P7QYG4RZ.cjs} +27 -19
- package/dist/chunk-P7QYG4RZ.cjs.map +1 -0
- package/dist/chunk-PPU2D4FZ.js +19 -0
- package/dist/chunk-PPU2D4FZ.js.map +1 -0
- package/dist/{chunk-MS3TQSXU.js → chunk-QD6B6W6I.js} +6 -4
- package/dist/chunk-QD6B6W6I.js.map +1 -0
- package/dist/{chunk-AB4OPJLD.js → chunk-RGVMJU57.js} +3 -3
- package/dist/{chunk-AB4OPJLD.js.map → chunk-RGVMJU57.js.map} +1 -1
- package/dist/{chunk-NWWTYBD3.cjs → chunk-RTDVSHJR.cjs} +5 -5
- package/dist/{chunk-NWWTYBD3.cjs.map → chunk-RTDVSHJR.cjs.map} +1 -1
- package/dist/{chunk-5HSMH2ZZ.js → chunk-RZL2W4C3.js} +25 -17
- package/dist/chunk-RZL2W4C3.js.map +1 -0
- package/dist/chunk-SPEN7RJU.cjs +18 -0
- package/dist/{chunk-LO6LIUZ6.cjs.map → chunk-SPEN7RJU.cjs.map} +1 -1
- package/dist/{chunk-ZF2LDKQQ.cjs → chunk-U3DW3WDE.cjs} +9 -8
- package/dist/chunk-U3DW3WDE.cjs.map +1 -0
- package/dist/{chunk-DVP3YMDA.cjs → chunk-U7PRI3XM.cjs} +3 -3
- package/dist/{chunk-DVP3YMDA.cjs.map → chunk-U7PRI3XM.cjs.map} +1 -1
- package/dist/{chunk-H7G65PNI.js → chunk-VCQ37TC5.js} +3 -3
- package/dist/{chunk-H7G65PNI.js.map → chunk-VCQ37TC5.js.map} +1 -1
- package/dist/{chunk-SDZ4XDWS.cjs → chunk-VWYFGE27.cjs} +9 -9
- package/dist/{chunk-SDZ4XDWS.cjs.map → chunk-VWYFGE27.cjs.map} +1 -1
- package/dist/{chunk-RN3XDZGS.js → chunk-WM646HEN.js} +4 -3
- package/dist/chunk-WM646HEN.js.map +1 -0
- package/dist/chunk-X7CE7Y5W.js +305 -0
- package/dist/chunk-X7CE7Y5W.js.map +1 -0
- package/dist/{chunk-CGH4BCIY.cjs → chunk-XE3CAY6Z.cjs} +5 -5
- package/dist/{chunk-CGH4BCIY.cjs.map → chunk-XE3CAY6Z.cjs.map} +1 -1
- package/dist/chunk-XOU3CL7S.cjs +312 -0
- package/dist/chunk-XOU3CL7S.cjs.map +1 -0
- package/dist/{chunk-NKQVLWDF.js → chunk-YKNBTHMD.js} +3 -3
- package/dist/{chunk-NKQVLWDF.js.map → chunk-YKNBTHMD.js.map} +1 -1
- package/dist/{compact-session-B7P6EU3Z.cjs → compact-session-NX7HUNTB.cjs} +18 -18
- package/dist/{compact-session-B7P6EU3Z.cjs.map → compact-session-NX7HUNTB.cjs.map} +1 -1
- package/dist/{compact-session-5HMX6KYT.js → compact-session-Q5IGNFPW.js} +9 -9
- package/dist/{compact-session-5HMX6KYT.js.map → compact-session-Q5IGNFPW.js.map} +1 -1
- package/dist/{cron-BvxrLW5J.d.cts → cron-Bh3aWgQ2.d.cts} +2 -2
- package/dist/{cron-DdKzwJqK.d.ts → cron-CCDxeeFZ.d.ts} +2 -2
- package/dist/cron.cjs +21 -20
- package/dist/cron.d.cts +4 -3
- package/dist/cron.d.ts +4 -3
- package/dist/cron.js +20 -19
- package/dist/eval.cjs +20 -19
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +19 -18
- package/dist/eval.js.map +1 -1
- package/dist/fs-session-store-CYNTEPJZ.cjs +20 -0
- package/dist/{fs-session-store-S2AXVJIX.cjs.map → fs-session-store-CYNTEPJZ.cjs.map} +1 -1
- package/dist/fs-session-store-MYQEVUFL.js +11 -0
- package/dist/{fs-session-store-6ZCCJX3K.js.map → fs-session-store-MYQEVUFL.js.map} +1 -1
- package/dist/{index-manager-HO456AVW.cjs → index-manager-2KH75BRW.cjs} +7 -7
- package/dist/{index-manager-HO456AVW.cjs.map → index-manager-2KH75BRW.cjs.map} +1 -1
- package/dist/{index-manager-QDH56FER.js → index-manager-NF2WRLOU.js} +6 -6
- package/dist/{index-manager-QDH56FER.js.map → index-manager-NF2WRLOU.js.map} +1 -1
- package/dist/index.cjs +93 -273
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -46
- package/dist/index.d.ts +13 -46
- package/dist/index.js +52 -236
- package/dist/index.js.map +1 -1
- package/dist/{inject-session-75L3NCNL.js → inject-session-4ROYLZHY.js} +3 -3
- package/dist/{inject-session-75L3NCNL.js.map → inject-session-4ROYLZHY.js.map} +1 -1
- package/dist/{inject-session-WOH7TPDX.cjs → inject-session-AWKDCGHV.cjs} +4 -4
- package/dist/{inject-session-WOH7TPDX.cjs.map → inject-session-AWKDCGHV.cjs.map} +1 -1
- package/dist/internal/agent-loop/doom-loop-tracker.d.ts +3 -0
- package/dist/internal/agent-loop/prune-tool-results.d.ts +37 -0
- package/dist/internal/agent-loop/types.d.ts +6 -0
- package/dist/internal/auth/credential-store.d.ts +1 -1
- package/dist/internal/auth/types.d.ts +4 -0
- package/dist/internal/error-mappers/anthropic.d.ts +3 -0
- package/dist/internal/error-mappers/openai-compatible.d.ts +2 -3
- package/dist/internal/local-agent/local-agent-dispatch.d.ts +3 -1
- package/dist/internal/local-agent/send-queue.d.ts +31 -0
- package/dist/internal/mcp/client.d.ts +2 -0
- package/dist/internal/mcp/oauth-bearer.d.ts +2 -0
- package/dist/internal/memory/adapters/index.cjs +3 -3
- package/dist/internal/memory/adapters/index.js +2 -2
- package/dist/internal/memory/dreaming/phases.d.ts +15 -0
- package/dist/internal/memory/dreaming/run.d.ts +29 -0
- package/dist/internal/memory/sdk-memory-peer-loader.d.ts +2 -0
- package/dist/internal/memory/storage/index.cjs +51 -35
- package/dist/internal/memory/storage/index.d.cts +2 -0
- package/dist/internal/memory/storage/index.d.ts +2 -0
- package/dist/internal/memory/storage/index.js +4 -4
- package/dist/internal/persistence/cwd-mutex.d.cts +4 -2
- package/dist/internal/persistence/cwd-mutex.d.ts +4 -2
- package/dist/internal/persistence/index.cjs +4 -4
- package/dist/internal/persistence/index.js +2 -2
- package/dist/internal/persistence/sqlite-session-store.d.cts +25 -0
- package/dist/internal/persistence/sqlite-session-store.d.ts +25 -0
- package/dist/internal/providers/registry.d.ts +5 -1
- package/dist/internal/runtime/skills/binary-on-path.d.ts +1 -0
- package/dist/internal/runtime/skills/discover-skills.d.ts +2 -0
- package/dist/mcp-auth.cjs +25 -307
- package/dist/mcp-auth.cjs.map +1 -1
- package/dist/mcp-auth.js +5 -305
- package/dist/mcp-auth.js.map +1 -1
- package/dist/models.cjs +11 -11
- package/dist/models.js +4 -4
- package/dist/persistence.cjs +9 -4
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.d.cts +744 -40
- package/dist/persistence.d.ts +744 -40
- package/dist/persistence.js +3 -2
- package/dist/persistence.js.map +1 -1
- package/dist/providers.cjs +6 -6
- package/dist/providers.js +4 -4
- package/dist/sandbox/docker-sandbox.d.cts +58 -0
- package/dist/sandbox/docker-sandbox.d.ts +58 -0
- package/dist/sandbox/index.cjs +129 -1
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +1 -0
- package/dist/sandbox/index.d.ts +1 -0
- package/dist/sandbox/index.js +132 -5
- package/dist/sandbox/index.js.map +1 -1
- package/dist/{sdk-agent-4-dXI2GS.d.cts → sdk-agent-BA_6_wtc.d.cts} +57 -4
- package/dist/{sdk-agent-CTOJlWA_.d.ts → sdk-agent-CnwPODYH.d.ts} +57 -4
- package/dist/session-store-Dh07jr9N.d.cts +209 -0
- package/dist/session-store-Dh07jr9N.d.ts +209 -0
- package/dist/skills.cjs +4 -4
- package/dist/skills.js +1 -1
- package/dist/sqlite-session-store-BbcpKY1L.d.ts +64 -0
- package/dist/sqlite-session-store-TKXtT4ON.d.cts +64 -0
- package/dist/subagents-loader-KLWF4QPD.cjs +16 -0
- package/dist/{subagents-loader-TXOA5EJJ.cjs.map → subagents-loader-KLWF4QPD.cjs.map} +1 -1
- package/dist/subagents-loader-SXETS2F2.js +7 -0
- package/dist/{subagents-loader-Z744TAKD.js.map → subagents-loader-SXETS2F2.js.map} +1 -1
- package/dist/subagents-loader.cjs +2 -2
- package/dist/subagents-loader.d.cts +3 -2
- package/dist/subagents-loader.d.ts +3 -2
- package/dist/subagents-loader.js +1 -1
- package/dist/types/agent.d.ts +20 -1
- package/dist/types/budget-tracker.d.ts +6 -2
- package/dist/types/mcp.d.ts +14 -0
- package/dist/types/run.d.ts +42 -3
- package/dist/workflow.d.cts +1 -1
- package/dist/workflow.d.ts +1 -1
- package/docs/adr/mutation-testing-scope.md +66 -0
- package/docs/error-codes.md +48 -45
- package/docs/harness-capability-map.md +60 -6
- package/package.json +1 -1
- package/dist/chunk-2PRGRYEQ.js.map +0 -1
- package/dist/chunk-3FSBE4PS.js.map +0 -1
- package/dist/chunk-4UYHP6NF.cjs.map +0 -1
- package/dist/chunk-5A4UFBHW.cjs.map +0 -1
- package/dist/chunk-5HSMH2ZZ.js.map +0 -1
- package/dist/chunk-6CXRYPG7.cjs +0 -211
- package/dist/chunk-6CXRYPG7.cjs.map +0 -1
- package/dist/chunk-7WARNHWW.cjs.map +0 -1
- package/dist/chunk-JX4LB6XO.js.map +0 -1
- package/dist/chunk-KL7ZUMK3.cjs.map +0 -1
- package/dist/chunk-LO6LIUZ6.cjs +0 -18
- package/dist/chunk-MS3TQSXU.js.map +0 -1
- package/dist/chunk-MSEL5E5P.js +0 -204
- package/dist/chunk-MSEL5E5P.js.map +0 -1
- package/dist/chunk-NHOEXFZT.js.map +0 -1
- package/dist/chunk-NP362THY.cjs.map +0 -1
- package/dist/chunk-Q5EWJPRY.js +0 -18
- package/dist/chunk-Q5EWJPRY.js.map +0 -1
- package/dist/chunk-QISSETTG.cjs.map +0 -1
- package/dist/chunk-RN3XDZGS.js.map +0 -1
- package/dist/chunk-S46WJTDL.cjs.map +0 -1
- package/dist/chunk-WDVG5R2Q.cjs.map +0 -1
- package/dist/chunk-ZF2LDKQQ.cjs.map +0 -1
- package/dist/chunk-ZJAYFSVI.js.map +0 -1
- package/dist/fs-session-store-6ZCCJX3K.js +0 -11
- package/dist/fs-session-store-S2AXVJIX.cjs +0 -20
- package/dist/subagents-loader-TXOA5EJJ.cjs +0 -16
- package/dist/subagents-loader-Z744TAKD.js +0 -7
package/dist/sandbox/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { shellEscapePosix, LocalSandbox
|
|
1
|
+
import { SandboxBackend, SandboxNotAvailableError, SandboxSecurityError, shellEscapePosix, LocalSandbox } from '../chunk-QGDPMM3C.js';
|
|
2
2
|
export { LocalSandbox, SandboxBackend, SandboxNotAvailableError, SandboxSecurityError, resolveSandbox, shellEscapePosix } from '../chunk-QGDPMM3C.js';
|
|
3
3
|
import '../chunk-HKCKOAIO.js';
|
|
4
4
|
import { TheokitAgentError } from '../chunk-TNFOU6SB.js';
|
|
5
5
|
import { redactSecrets } from '../chunk-3OY6H3I7.js';
|
|
6
|
-
import { execFileSync } from 'child_process';
|
|
6
|
+
import { execFileSync, spawn } from 'child_process';
|
|
7
7
|
import { existsSync, mkdtempSync, writeFileSync, statSync, realpathSync, rmSync } from 'fs';
|
|
8
|
-
import path, {
|
|
8
|
+
import path, { join, resolve, posix, dirname } from 'path';
|
|
9
|
+
import { randomBytes } from 'crypto';
|
|
9
10
|
import { tmpdir } from 'os';
|
|
10
11
|
|
|
11
12
|
var KEPT_ROOTS_ALWAYS = ["/tmp"];
|
|
@@ -182,6 +183,132 @@ function detectBwrapMemoized(probes = realProbes) {
|
|
|
182
183
|
function resetBwrapMemo() {
|
|
183
184
|
memo = void 0;
|
|
184
185
|
}
|
|
186
|
+
var CONTAINER_WORKDIR = "/workspace";
|
|
187
|
+
function defaultRunner(bin) {
|
|
188
|
+
return (args, { input, timeoutMs, maxOutputBytes }) => new Promise((resolve2, reject) => {
|
|
189
|
+
const child = spawn(bin, [...args], { stdio: ["pipe", "pipe", "pipe"] });
|
|
190
|
+
let stdout = "";
|
|
191
|
+
let stderr = "";
|
|
192
|
+
let timedOut = false;
|
|
193
|
+
const cap = (s, chunk) => s.length >= maxOutputBytes ? s : s + chunk.toString("utf-8");
|
|
194
|
+
child.stdout.on("data", (c) => {
|
|
195
|
+
stdout = cap(stdout, c);
|
|
196
|
+
});
|
|
197
|
+
child.stderr.on("data", (c) => {
|
|
198
|
+
stderr = cap(stderr, c);
|
|
199
|
+
});
|
|
200
|
+
const timer = setTimeout(() => {
|
|
201
|
+
timedOut = true;
|
|
202
|
+
child.kill("SIGKILL");
|
|
203
|
+
}, timeoutMs);
|
|
204
|
+
child.on("error", (e) => {
|
|
205
|
+
clearTimeout(timer);
|
|
206
|
+
reject(e);
|
|
207
|
+
});
|
|
208
|
+
child.on("close", (code) => {
|
|
209
|
+
clearTimeout(timer);
|
|
210
|
+
resolve2({ stdout, stderr, code, timedOut });
|
|
211
|
+
});
|
|
212
|
+
child.stdin.on("error", () => {
|
|
213
|
+
});
|
|
214
|
+
child.stdin.end(input);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
var DockerSandbox = class extends SandboxBackend {
|
|
218
|
+
networkPolicy;
|
|
219
|
+
image;
|
|
220
|
+
network;
|
|
221
|
+
runner;
|
|
222
|
+
hostDir;
|
|
223
|
+
user;
|
|
224
|
+
constructor(config = {}) {
|
|
225
|
+
super({
|
|
226
|
+
...config,
|
|
227
|
+
workDir: config.workDir ?? mkdtempSync(join(tmpdir(), "theokit-docker-ws-"))
|
|
228
|
+
});
|
|
229
|
+
this.image = config.image ?? "alpine:3";
|
|
230
|
+
this.network = config.network ?? false;
|
|
231
|
+
this.networkPolicy = { mode: this.network ? "unrestricted" : "none" };
|
|
232
|
+
this.runner = config.runner ?? defaultRunner(config.dockerBin ?? "docker");
|
|
233
|
+
this.hostDir = resolve(this.config.workDir ?? "/tmp");
|
|
234
|
+
this.user = config.user ?? (typeof process.getuid === "function" && typeof process.getgid === "function" ? `${process.getuid()}:${process.getgid()}` : void 0);
|
|
235
|
+
}
|
|
236
|
+
/** The `docker run` argv for one command; exposed shape is covered by tests. */
|
|
237
|
+
runArgs(name, interactive, argv) {
|
|
238
|
+
return [
|
|
239
|
+
"run",
|
|
240
|
+
"--rm",
|
|
241
|
+
...interactive ? ["-i"] : [],
|
|
242
|
+
"--name",
|
|
243
|
+
name,
|
|
244
|
+
"--read-only",
|
|
245
|
+
"--tmpfs",
|
|
246
|
+
"/tmp",
|
|
247
|
+
"--cap-drop",
|
|
248
|
+
"ALL",
|
|
249
|
+
"--security-opt",
|
|
250
|
+
"no-new-privileges",
|
|
251
|
+
"--pids-limit",
|
|
252
|
+
"512",
|
|
253
|
+
"--network",
|
|
254
|
+
this.network ? "bridge" : "none",
|
|
255
|
+
...this.user ? ["--user", this.user] : [],
|
|
256
|
+
"-v",
|
|
257
|
+
`${this.hostDir}:${CONTAINER_WORKDIR}:rw`,
|
|
258
|
+
"-w",
|
|
259
|
+
CONTAINER_WORKDIR,
|
|
260
|
+
"-e",
|
|
261
|
+
"HOME=/tmp",
|
|
262
|
+
this.image,
|
|
263
|
+
...argv
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
async run(interactive, argv, timeoutMs, input) {
|
|
267
|
+
const name = `theokit-sbx-${randomBytes(6).toString("hex")}`;
|
|
268
|
+
const max = this.config.maxOutputBytes ?? 5 * 1024 * 1024;
|
|
269
|
+
let r;
|
|
270
|
+
try {
|
|
271
|
+
r = await this.runner(this.runArgs(name, interactive, argv), {
|
|
272
|
+
input,
|
|
273
|
+
timeoutMs,
|
|
274
|
+
maxOutputBytes: max
|
|
275
|
+
});
|
|
276
|
+
} catch (e) {
|
|
277
|
+
throw new SandboxNotAvailableError(
|
|
278
|
+
`docker could not be started: ${e instanceof Error ? e.message : String(e)}`
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
if (r.timedOut) {
|
|
282
|
+
await this.runner(["rm", "-f", name], { timeoutMs: 1e4, maxOutputBytes: 4096 }).catch(
|
|
283
|
+
() => void 0
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
return r;
|
|
287
|
+
}
|
|
288
|
+
async execute(command, opts) {
|
|
289
|
+
const timeoutMs = opts?.timeoutMs ?? this.config.timeoutMs ?? 3e4;
|
|
290
|
+
const r = await this.run(false, ["sh", "-c", command], timeoutMs);
|
|
291
|
+
return {
|
|
292
|
+
stdout: this.truncateOutput(r.stdout),
|
|
293
|
+
stderr: this.truncateOutput(r.stderr),
|
|
294
|
+
exitCode: r.timedOut ? 124 : r.code === 0 ? 0 : 1,
|
|
295
|
+
timedOut: r.timedOut
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
async uploadFile(path3, content) {
|
|
299
|
+
const target = path3.startsWith("/") ? posix.normalize(path3) : posix.normalize(`${CONTAINER_WORKDIR}/${path3}`);
|
|
300
|
+
if (target !== CONTAINER_WORKDIR && !target.startsWith(`${CONTAINER_WORKDIR}/`)) {
|
|
301
|
+
throw new SandboxSecurityError(`uploadFile path escapes the workspace: ${path3}`);
|
|
302
|
+
}
|
|
303
|
+
const r = await this.run(
|
|
304
|
+
true,
|
|
305
|
+
["sh", "-c", 'mkdir -p "$(dirname "$1")" && cat > "$1"', "sh", target],
|
|
306
|
+
this.config.timeoutMs ?? 3e4,
|
|
307
|
+
content
|
|
308
|
+
);
|
|
309
|
+
if (r.code !== 0) throw new Error(`uploadFile failed: ${r.stderr.trim() || "docker error"}`);
|
|
310
|
+
}
|
|
311
|
+
};
|
|
185
312
|
|
|
186
313
|
// src/sandbox/seccomp.ts
|
|
187
314
|
var BPF_LD = 0;
|
|
@@ -294,7 +421,7 @@ function assertSeccompProgramShape(program) {
|
|
|
294
421
|
);
|
|
295
422
|
}
|
|
296
423
|
}
|
|
297
|
-
var PIPE_SCRIPT = '{ p=$1; shift; printf "$p" | exec "$@" 3<&0 0<&4 4<&-; } 4<&0';
|
|
424
|
+
var PIPE_SCRIPT = 'r() { p=$1; shift; printf "$p" | exec "$@" 3<&0 0<&4 4<&-; }; if { true 5<&0; } 2>/dev/null; then r "$@" 4<&0; else r "$@" 4</dev/null; fi';
|
|
298
425
|
function wrapWithSeccompProgram(bwrapArgv, command, program) {
|
|
299
426
|
assertSeccompProgramShape(program);
|
|
300
427
|
const words = [octalPrintfArg(program), ...bwrapArgv, "--seccomp", "3", "--", "/bin/sh", "-c"];
|
|
@@ -594,6 +721,6 @@ async function provisionRepo(sandboxOrOpts, maybeOpts) {
|
|
|
594
721
|
return { repoDir };
|
|
595
722
|
}
|
|
596
723
|
|
|
597
|
-
export { LinuxSandbox, RepoProvisionError, allowlistedEnv, buildBwrapArgv, buildSeccompFilter, createSandboxBackend, detectBwrap, detectBwrapMemoized, interactiveWrapCommand, provisionRepo, realProbeCount, realProbes, resetBwrapMemo, __resetInteractiveWarnLatchForTests as resetInteractiveWarnLatch, __resetSandboxWarnLatchForTests as resetSandboxWarnLatch, resolveSandboxPosture, restrictedSeccompPath, seccompPathForArch, wrapCommandForSandbox, writableRootsFor };
|
|
724
|
+
export { DockerSandbox, LinuxSandbox, RepoProvisionError, allowlistedEnv, buildBwrapArgv, buildSeccompFilter, createSandboxBackend, detectBwrap, detectBwrapMemoized, interactiveWrapCommand, provisionRepo, realProbeCount, realProbes, resetBwrapMemo, __resetInteractiveWarnLatchForTests as resetInteractiveWarnLatch, __resetSandboxWarnLatchForTests as resetSandboxWarnLatch, resolveSandboxPosture, restrictedSeccompPath, seccompPathForArch, wrapCommandForSandbox, writableRootsFor };
|
|
598
725
|
//# sourceMappingURL=index.js.map
|
|
599
726
|
//# sourceMappingURL=index.js.map
|