isol8 0.8.1 → 0.8.3

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 CHANGED
@@ -15,6 +15,7 @@ Secure code execution engine for AI agents. Run untrusted Python, Node.js, Bun,
15
15
  - **Fast** — warm container pool for sub-100ms execution latency
16
16
  - **Security first** — read-only rootfs, `no-new-privileges`, PID/memory/CPU limits
17
17
  - **Network control** — `none` (default), `host`, or `filtered` (HTTP/HTTPS proxy with regex whitelist/blacklist)
18
+ - **Secure File I/O** — streaming file content avoids process argument leaks
18
19
  - **File I/O** — upload files into and download files from sandboxes
19
20
  - **Runtime packages** — install pip/npm/bun packages on-the-fly (`--install`)
20
21
  - **Modern Node.js** — defaults to ESM (`.mjs`), supports CommonJS (`.cjs`)
package/dist/cli.js CHANGED
@@ -6316,12 +6316,23 @@ var require_bcrypt_pbkdf = __commonJS((exports, module) => {
6316
6316
  };
6317
6317
  });
6318
6318
 
6319
+ // node_modules/cpu-features/build/Release/cpufeatures.node
6320
+ var require_cpufeatures = __commonJS((exports, module) => {
6321
+ module.exports = __require("./cpufeatures-tjjrgpt7.node");
6322
+ });
6323
+
6324
+ // node_modules/cpu-features/lib/index.js
6325
+ var require_lib2 = __commonJS((exports, module) => {
6326
+ var binding = require_cpufeatures();
6327
+ module.exports = binding.getCPUInfo;
6328
+ });
6329
+
6319
6330
  // node_modules/ssh2/lib/protocol/constants.js
6320
6331
  var require_constants = __commonJS((exports, module) => {
6321
6332
  var crypto = __require("crypto");
6322
6333
  var cpuInfo;
6323
6334
  try {
6324
- cpuInfo = (()=>{throw new Error("Cannot require module "+"cpu-features");})()();
6335
+ cpuInfo = require_lib2()();
6325
6336
  } catch {}
6326
6337
  var { bindingAvailable, CIPHER_INFO, MAC_INFO } = require_crypto();
6327
6338
  var eddsaSupported = (() => {
@@ -20964,7 +20975,7 @@ var require_keygen = __commonJS((exports, module) => {
20964
20975
  });
20965
20976
 
20966
20977
  // node_modules/ssh2/lib/index.js
20967
- var require_lib2 = __commonJS((exports, module) => {
20978
+ var require_lib3 = __commonJS((exports, module) => {
20968
20979
  var {
20969
20980
  AgentProtocol,
20970
20981
  BaseAgent,
@@ -21010,7 +21021,7 @@ var require_lib2 = __commonJS((exports, module) => {
21010
21021
 
21011
21022
  // node_modules/docker-modem/lib/ssh.js
21012
21023
  var require_ssh = __commonJS((exports, module) => {
21013
- var Client = require_lib2().Client;
21024
+ var Client = require_lib3().Client;
21014
21025
  var http = __require("http");
21015
21026
  module.exports = function(opt) {
21016
21027
  var conn = new Client;
@@ -55172,6 +55183,7 @@ var init_pool = __esm(() => {
55172
55183
  // src/engine/utils.ts
55173
55184
  var exports_utils = {};
55174
55185
  __export(exports_utils, {
55186
+ validatePackageName: () => validatePackageName,
55175
55187
  truncateOutput: () => truncateOutput,
55176
55188
  parseMemoryLimit: () => parseMemoryLimit,
55177
55189
  maskSecrets: () => maskSecrets,
@@ -55266,31 +55278,43 @@ function extractFromTar(tarBuffer, targetPath) {
55266
55278
  }
55267
55279
  throw new Error(`File "${targetPath}" not found in tar archive`);
55268
55280
  }
55281
+ function validatePackageName(name) {
55282
+ if (!/^[@a-zA-Z0-9_./\-=]+$/.test(name)) {
55283
+ throw new Error(`Invalid package name: "${name}". Only alphanumeric, -, _, ., /, @, and = are allowed.`);
55284
+ }
55285
+ return name;
55286
+ }
55269
55287
 
55270
55288
  // src/engine/docker.ts
55271
55289
  var exports_docker = {};
55272
55290
  __export(exports_docker, {
55273
55291
  DockerIsol8: () => DockerIsol8
55274
55292
  });
55293
+ import { spawn } from "node:child_process";
55275
55294
  import { randomUUID } from "node:crypto";
55276
55295
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
55277
55296
  import { PassThrough } from "node:stream";
55278
55297
  async function writeFileViaExec(container, filePath, content) {
55279
55298
  const data = typeof content === "string" ? Buffer.from(content, "utf-8") : content;
55280
- const b64 = data.toString("base64");
55281
- const exec = await container.exec({
55282
- Cmd: ["sh", "-c", `printf '%s' '${b64}' | base64 -d > ${filePath}`],
55283
- User: "sandbox"
55299
+ return new Promise((resolve2, reject) => {
55300
+ const child = spawn("docker", ["exec", "-i", "-u", "sandbox", container.id, "sh", "-c", `cat > ${filePath}`], {
55301
+ stdio: ["pipe", "ignore", "pipe"]
55302
+ });
55303
+ child.on("error", (err) => {
55304
+ reject(new Error(`Failed to spawn docker exec: ${err.message}`));
55305
+ });
55306
+ let stderr = "";
55307
+ child.stderr.on("data", (chunk) => stderr += chunk.toString());
55308
+ child.stdin.write(data);
55309
+ child.stdin.end();
55310
+ child.on("close", (code) => {
55311
+ if (code !== 0) {
55312
+ reject(new Error(`Failed to write file ${filePath}: ${stderr} (exit code ${code})`));
55313
+ } else {
55314
+ resolve2();
55315
+ }
55316
+ });
55284
55317
  });
55285
- await exec.start({ Detach: true });
55286
- let info2 = await exec.inspect();
55287
- while (info2.Running) {
55288
- await new Promise((r) => setTimeout(r, 50));
55289
- info2 = await exec.inspect();
55290
- }
55291
- if (info2.ExitCode !== 0) {
55292
- throw new Error(`Failed to write file ${filePath} in container (exit code ${info2.ExitCode})`);
55293
- }
55294
55318
  }
55295
55319
  async function readFileViaExec(container, filePath) {
55296
55320
  const exec = await container.exec({
@@ -55958,11 +55982,16 @@ class DockerIsol8 {
55958
55982
  let stderr = "";
55959
55983
  let truncated = false;
55960
55984
  let settled = false;
55985
+ let stdoutEnded = false;
55986
+ let stderrEnded = false;
55961
55987
  const timer = setTimeout(() => {
55962
55988
  if (settled) {
55963
55989
  return;
55964
55990
  }
55965
55991
  settled = true;
55992
+ if (stream.destroy) {
55993
+ stream.destroy();
55994
+ }
55966
55995
  resolve2({ stdout, stderr: `${stderr}
55967
55996
  --- EXECUTION TIMED OUT ---`, truncated });
55968
55997
  }, timeoutMs);
@@ -55985,13 +56014,23 @@ class DockerIsol8 {
55985
56014
  truncated = true;
55986
56015
  }
55987
56016
  });
55988
- stream.on("end", () => {
56017
+ const checkDone = () => {
55989
56018
  if (settled) {
55990
56019
  return;
55991
56020
  }
55992
- settled = true;
55993
- clearTimeout(timer);
55994
- resolve2({ stdout, stderr, truncated });
56021
+ if (stdoutEnded && stderrEnded) {
56022
+ settled = true;
56023
+ clearTimeout(timer);
56024
+ resolve2({ stdout, stderr, truncated });
56025
+ }
56026
+ };
56027
+ stdoutStream.on("end", () => {
56028
+ stdoutEnded = true;
56029
+ checkDone();
56030
+ });
56031
+ stderrStream.on("end", () => {
56032
+ stderrEnded = true;
56033
+ checkDone();
55995
56034
  });
55996
56035
  stream.on("error", (err) => {
55997
56036
  if (settled) {
@@ -56001,6 +56040,18 @@ class DockerIsol8 {
56001
56040
  clearTimeout(timer);
56002
56041
  reject(err);
56003
56042
  });
56043
+ stream.on("end", () => {
56044
+ if (settled) {
56045
+ return;
56046
+ }
56047
+ setTimeout(() => {
56048
+ if (!settled) {
56049
+ stdoutEnded = true;
56050
+ stderrEnded = true;
56051
+ checkDone();
56052
+ }
56053
+ }, 100);
56054
+ });
56004
56055
  });
56005
56056
  }
56006
56057
  postProcessOutput(output, _truncated) {
@@ -56045,7 +56096,7 @@ var package_default;
56045
56096
  var init_package = __esm(() => {
56046
56097
  package_default = {
56047
56098
  name: "isol8",
56048
- version: "0.8.0",
56099
+ version: "0.8.2",
56049
56100
  description: "Secure code execution engine for AI agents",
56050
56101
  author: "Illusion47586",
56051
56102
  license: "MIT",
@@ -61458,8 +61509,9 @@ async function buildCustomImage(docker, runtime, packages, onProgress) {
61458
61509
  const dockerfileContent = `FROM isol8:${runtime}
61459
61510
  ${installCmd}
61460
61511
  `;
61461
- const { createTarBuffer: createTarBuffer2 } = await Promise.resolve().then(() => exports_utils);
61512
+ const { createTarBuffer: createTarBuffer2, validatePackageName: validatePackageName2 } = await Promise.resolve().then(() => exports_utils);
61462
61513
  const { Readable } = await import("node:stream");
61514
+ packages.forEach(validatePackageName2);
61463
61515
  const tarBuffer = createTarBuffer2("Dockerfile", dockerfileContent);
61464
61516
  const stream = await docker.buildImage(Readable.from(tarBuffer), {
61465
61517
  t: tag,
@@ -62052,4 +62104,4 @@ if (!process.argv.slice(2).length) {
62052
62104
  }
62053
62105
  program2.parse();
62054
62106
 
62055
- //# debugId=F5B0FBC3FF234CB364756E2164756E21
62107
+ //# debugId=6B900589B43971DE64756E2164756E21
package/dist/index.js CHANGED
@@ -451,26 +451,32 @@ var exports_docker = {};
451
451
  __export(exports_docker, {
452
452
  DockerIsol8: () => DockerIsol8
453
453
  });
454
+ import { spawn } from "node:child_process";
454
455
  import { randomUUID } from "node:crypto";
455
456
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
456
457
  import { PassThrough } from "node:stream";
457
458
  import Docker from "dockerode";
458
459
  async function writeFileViaExec(container, filePath, content) {
459
460
  const data = typeof content === "string" ? Buffer.from(content, "utf-8") : content;
460
- const b64 = data.toString("base64");
461
- const exec = await container.exec({
462
- Cmd: ["sh", "-c", `printf '%s' '${b64}' | base64 -d > ${filePath}`],
463
- User: "sandbox"
461
+ return new Promise((resolve2, reject) => {
462
+ const child = spawn("docker", ["exec", "-i", "-u", "sandbox", container.id, "sh", "-c", `cat > ${filePath}`], {
463
+ stdio: ["pipe", "ignore", "pipe"]
464
+ });
465
+ child.on("error", (err) => {
466
+ reject(new Error(`Failed to spawn docker exec: ${err.message}`));
467
+ });
468
+ let stderr = "";
469
+ child.stderr.on("data", (chunk) => stderr += chunk.toString());
470
+ child.stdin.write(data);
471
+ child.stdin.end();
472
+ child.on("close", (code) => {
473
+ if (code !== 0) {
474
+ reject(new Error(`Failed to write file ${filePath}: ${stderr} (exit code ${code})`));
475
+ } else {
476
+ resolve2();
477
+ }
478
+ });
464
479
  });
465
- await exec.start({ Detach: true });
466
- let info = await exec.inspect();
467
- while (info.Running) {
468
- await new Promise((r) => setTimeout(r, 50));
469
- info = await exec.inspect();
470
- }
471
- if (info.ExitCode !== 0) {
472
- throw new Error(`Failed to write file ${filePath} in container (exit code ${info.ExitCode})`);
473
- }
474
480
  }
475
481
  async function readFileViaExec(container, filePath) {
476
482
  const exec = await container.exec({
@@ -1138,11 +1144,16 @@ class DockerIsol8 {
1138
1144
  let stderr = "";
1139
1145
  let truncated = false;
1140
1146
  let settled = false;
1147
+ let stdoutEnded = false;
1148
+ let stderrEnded = false;
1141
1149
  const timer = setTimeout(() => {
1142
1150
  if (settled) {
1143
1151
  return;
1144
1152
  }
1145
1153
  settled = true;
1154
+ if (stream.destroy) {
1155
+ stream.destroy();
1156
+ }
1146
1157
  resolve2({ stdout, stderr: `${stderr}
1147
1158
  --- EXECUTION TIMED OUT ---`, truncated });
1148
1159
  }, timeoutMs);
@@ -1165,13 +1176,23 @@ class DockerIsol8 {
1165
1176
  truncated = true;
1166
1177
  }
1167
1178
  });
1168
- stream.on("end", () => {
1179
+ const checkDone = () => {
1169
1180
  if (settled) {
1170
1181
  return;
1171
1182
  }
1172
- settled = true;
1173
- clearTimeout(timer);
1174
- resolve2({ stdout, stderr, truncated });
1183
+ if (stdoutEnded && stderrEnded) {
1184
+ settled = true;
1185
+ clearTimeout(timer);
1186
+ resolve2({ stdout, stderr, truncated });
1187
+ }
1188
+ };
1189
+ stdoutStream.on("end", () => {
1190
+ stdoutEnded = true;
1191
+ checkDone();
1192
+ });
1193
+ stderrStream.on("end", () => {
1194
+ stderrEnded = true;
1195
+ checkDone();
1175
1196
  });
1176
1197
  stream.on("error", (err) => {
1177
1198
  if (settled) {
@@ -1181,6 +1202,18 @@ class DockerIsol8 {
1181
1202
  clearTimeout(timer);
1182
1203
  reject(err);
1183
1204
  });
1205
+ stream.on("end", () => {
1206
+ if (settled) {
1207
+ return;
1208
+ }
1209
+ setTimeout(() => {
1210
+ if (!settled) {
1211
+ stdoutEnded = true;
1212
+ stderrEnded = true;
1213
+ checkDone();
1214
+ }
1215
+ }, 100);
1216
+ });
1184
1217
  });
1185
1218
  }
1186
1219
  postProcessOutput(output, _truncated) {
@@ -1424,7 +1457,7 @@ init_logger();
1424
1457
  // package.json
1425
1458
  var package_default = {
1426
1459
  name: "isol8",
1427
- version: "0.8.0",
1460
+ version: "0.8.2",
1428
1461
  description: "Secure code execution engine for AI agents",
1429
1462
  author: "Illusion47586",
1430
1463
  license: "MIT",
@@ -1759,4 +1792,4 @@ export {
1759
1792
  BunAdapter
1760
1793
  };
1761
1794
 
1762
- //# debugId=90624257FBE4C46A64756E2164756E21
1795
+ //# debugId=D81C2764EAFDC14264756E2164756E21
@@ -1 +1 @@
1
- {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEX,YAAY,EAIZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAqSlB,2HAA2H;AAC3H,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,IAAI,CAA8B;IAE1C;;;OAGG;gBACS,OAAO,GAAE,kBAAuB,EAAE,aAAa,SAAK;IAwBhE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kFAAkF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,6GAA6G;IAC7G,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;YAsFzD,YAAY;YAcZ,gBAAgB;YA0GhB,iBAAiB;YA8FjB,aAAa;YAkBb,oBAAoB;YASpB,wBAAwB;IA4BtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,QAAQ;YAwCD,gBAAgB;YA8EjB,iBAAiB;IA8D/B,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;;;;;;;;;;;;OAoBG;WACU,OAAO,CAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA2BlE"}
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEX,YAAY,EAIZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAiTlB,2HAA2H;AAC3H,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,IAAI,CAA8B;IAE1C;;;OAGG;gBACS,OAAO,GAAE,kBAAuB,EAAE,aAAa,SAAK;IAwBhE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kFAAkF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,6GAA6G;IAC7G,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;YAsFzD,YAAY;YAcZ,gBAAgB;YA0GhB,iBAAiB;YA8FjB,aAAa;YAkBb,oBAAoB;YASpB,wBAAwB;IA4BtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,QAAQ;YAwCD,gBAAgB;YA8EjB,iBAAiB;IAiG/B,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;;;;;;;;;;;;OAoBG;WACU,OAAO,CAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA2BlE"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-builder.d.ts","sourceRoot":"","sources":["../../../src/engine/image-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmB5C,mDAAmD;AACnD,UAAU,aAAa;IACrB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AA4DD;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F"}
1
+ {"version":3,"file":"image-builder.d.ts","sourceRoot":"","sources":["../../../src/engine/image-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmB5C,mDAAmD;AACnD,UAAU,aAAa;IACrB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAgED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F"}
@@ -59,4 +59,13 @@ export declare function createTarBuffer(filePath: string, content: Buffer | stri
59
59
  * @throws {Error} If the file is not found in the archive.
60
60
  */
61
61
  export declare function extractFromTar(tarBuffer: Buffer, targetPath: string): Buffer;
62
+ /**
63
+ * Validates a package name to prevent command injection.
64
+ * allow alphanumeric, dash, underscore, dot, @, / (for scoped packages), and = (for versions)
65
+ *
66
+ * @param name - The package name to validate.
67
+ * @returns The name if valid.
68
+ * @throws {Error} If the name contains invalid characters.
69
+ */
70
+ export declare function validatePackageName(name: string): string;
62
71
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/engine/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAetC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA8ClF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoC5E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/engine/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAetC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA8ClF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoC5E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQxD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "isol8",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "description": "Secure code execution engine for AI agents",
5
5
  "author": "Illusion47586",
6
6
  "license": "MIT",