@sandboxrouter/sdk 0.0.0-stage → 0.2.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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -2
  3. package/dist/bench-store.d.ts +12 -0
  4. package/dist/bench-store.js +23 -0
  5. package/dist/bench.d.ts +24 -0
  6. package/dist/bench.js +65 -0
  7. package/dist/catalog.d.ts +105 -0
  8. package/dist/catalog.js +320 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.js +195 -0
  11. package/dist/computers.d.ts +124 -0
  12. package/dist/computers.js +66 -0
  13. package/dist/index.d.ts +23 -0
  14. package/dist/index.js +23 -0
  15. package/dist/leaderboard.d.ts +39 -0
  16. package/dist/leaderboard.js +184 -0
  17. package/dist/providers/blaxel.d.ts +21 -0
  18. package/dist/providers/blaxel.js +152 -0
  19. package/dist/providers/boat.d.ts +25 -0
  20. package/dist/providers/boat.js +258 -0
  21. package/dist/providers/cloudflare.d.ts +30 -0
  22. package/dist/providers/cloudflare.js +147 -0
  23. package/dist/providers/daytona.d.ts +13 -0
  24. package/dist/providers/daytona.js +121 -0
  25. package/dist/providers/docker.d.ts +17 -0
  26. package/dist/providers/docker.js +148 -0
  27. package/dist/providers/e2b.d.ts +10 -0
  28. package/dist/providers/e2b.js +69 -0
  29. package/dist/providers/exedev.d.ts +23 -0
  30. package/dist/providers/exedev.js +278 -0
  31. package/dist/providers/hopx.d.ts +15 -0
  32. package/dist/providers/hopx.js +168 -0
  33. package/dist/providers/maritime.d.ts +38 -0
  34. package/dist/providers/maritime.js +240 -0
  35. package/dist/providers/modal.d.ts +10 -0
  36. package/dist/providers/modal.js +82 -0
  37. package/dist/providers/morph.d.ts +19 -0
  38. package/dist/providers/morph.js +181 -0
  39. package/dist/providers/northflank.d.ts +21 -0
  40. package/dist/providers/northflank.js +261 -0
  41. package/dist/providers/runloop.d.ts +16 -0
  42. package/dist/providers/runloop.js +145 -0
  43. package/dist/providers/sprites.d.ts +15 -0
  44. package/dist/providers/sprites.js +135 -0
  45. package/dist/providers/tensorlake.d.ts +14 -0
  46. package/dist/providers/tensorlake.js +192 -0
  47. package/dist/providers/vercel.d.ts +12 -0
  48. package/dist/providers/vercel.js +87 -0
  49. package/dist/router.d.ts +65 -0
  50. package/dist/router.js +199 -0
  51. package/dist/server.d.ts +31 -0
  52. package/dist/server.js +257 -0
  53. package/dist/sse.d.ts +6 -0
  54. package/dist/sse.js +33 -0
  55. package/dist/types.d.ts +87 -0
  56. package/dist/types.js +19 -0
  57. package/dist/util.d.ts +11 -0
  58. package/dist/util.js +37 -0
  59. package/package.json +127 -4
package/dist/util.js ADDED
@@ -0,0 +1,37 @@
1
+ /** Single-quote a string for POSIX sh. */
2
+ export function shq(s) {
3
+ return `'${s.replace(/'/g, `'\\''`)}'`;
4
+ }
5
+ /** Build `cd dir && VAR=x cmd` for providers whose exec API lacks cwd/env. */
6
+ export function wrapCommand(cmd, opts = {}) {
7
+ const parts = [];
8
+ if (opts.cwd)
9
+ parts.push(`cd ${shq(opts.cwd)} &&`);
10
+ for (const [k, v] of Object.entries(opts.env ?? {})) {
11
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(k))
12
+ throw new Error(`invalid env var name: ${k}`);
13
+ parts.push(`export ${k}=${shq(v)};`);
14
+ }
15
+ parts.push(cmd);
16
+ return parts.join(" ");
17
+ }
18
+ export function toBytes(content) {
19
+ return typeof content === "string" ? new TextEncoder().encode(content) : content;
20
+ }
21
+ export function dirname(path) {
22
+ const i = path.lastIndexOf("/");
23
+ return i <= 0 ? "/" : path.slice(0, i);
24
+ }
25
+ /** Load an optional peer dependency with a helpful error. */
26
+ export async function optionalImport(pkg, provider) {
27
+ try {
28
+ return (await import(pkg));
29
+ }
30
+ catch (err) {
31
+ const code = err.code;
32
+ if (code === "ERR_MODULE_NOT_FOUND" || code === "MODULE_NOT_FOUND") {
33
+ throw new Error(`${provider} needs the "${pkg}" package: npm i ${pkg}`);
34
+ }
35
+ throw err;
36
+ }
37
+ }
package/package.json CHANGED
@@ -1,6 +1,129 @@
1
1
  {
2
2
  "name": "@sandboxrouter/sdk",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "One API for every sandbox provider: route AI agents' code by price, speed or capability, with automatic fallback. Free and open source.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "sandboxrouter": "dist/cli.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "test": "vitest run",
25
+ "typecheck": "tsc --noEmit",
26
+ "dev": "tsx src/cli.ts",
27
+ "prepublishOnly": "npm run build && npm test",
28
+ "test:py": "python3 -m unittest discover -s python/tests -v",
29
+ "site:data": "node --import tsx scripts/site-data.ts"
30
+ },
31
+ "keywords": [
32
+ "ai-agents",
33
+ "blaxel",
34
+ "cloudflare",
35
+ "code-execution",
36
+ "daytona",
37
+ "docker",
38
+ "e2b",
39
+ "fly-sprites",
40
+ "hopx",
41
+ "maritime",
42
+ "modal",
43
+ "morph",
44
+ "northflank",
45
+ "openrouter",
46
+ "router",
47
+ "runloop",
48
+ "sandbox",
49
+ "tensorlake",
50
+ "vercel-sandbox"
51
+ ],
52
+ "license": "MIT",
53
+ "engines": {
54
+ "node": ">=20"
55
+ },
56
+ "peerDependencies": {
57
+ "@blaxel/core": ">=0.3",
58
+ "@daytonaio/sdk": ">=0.200",
59
+ "@fly/sprites": ">=0.2",
60
+ "@runloop/api-client": ">=3",
61
+ "@tensorlakeai/tensorlake": ">=0.5",
62
+ "@vercel/sandbox": ">=3",
63
+ "e2b": ">=2",
64
+ "modal": ">=0.11",
65
+ "morphcloud": ">=0.0.20",
66
+ "@hopx-ai/sdk": ">=0.5",
67
+ "@northflank/js-client": ">=0.12"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "e2b": {
71
+ "optional": true
72
+ },
73
+ "@daytonaio/sdk": {
74
+ "optional": true
75
+ },
76
+ "modal": {
77
+ "optional": true
78
+ },
79
+ "@vercel/sandbox": {
80
+ "optional": true
81
+ },
82
+ "morphcloud": {
83
+ "optional": true
84
+ },
85
+ "@fly/sprites": {
86
+ "optional": true
87
+ },
88
+ "@blaxel/core": {
89
+ "optional": true
90
+ },
91
+ "@tensorlakeai/tensorlake": {
92
+ "optional": true
93
+ },
94
+ "@runloop/api-client": {
95
+ "optional": true
96
+ },
97
+ "@hopx-ai/sdk": {
98
+ "optional": true
99
+ },
100
+ "@northflank/js-client": {
101
+ "optional": true
102
+ }
103
+ },
104
+ "devDependencies": {
105
+ "@blaxel/core": "^0.3.34",
106
+ "@daytonaio/sdk": "^0.227.3",
107
+ "@fly/sprites": "^0.2.4",
108
+ "@hopx-ai/sdk": "^0.5.1",
109
+ "@northflank/js-client": "^0.12.0",
110
+ "@runloop/api-client": "^3.0.0",
111
+ "@tensorlakeai/tensorlake": "^0.5.161",
112
+ "@types/node": "^26.6.6",
113
+ "@vercel/sandbox": "^3.9.1",
114
+ "e2b": "^2.63.0",
115
+ "modal": "^0.11.1",
116
+ "morphcloud": "^0.0.20",
117
+ "tsx": "^4.23.15",
118
+ "typescript": "^5.9.3",
119
+ "vitest": "^5.1.0"
120
+ },
121
+ "publishConfig": {
122
+ "access": "public"
123
+ },
124
+ "repository": {
125
+ "type": "git",
126
+ "url": "git+https://github.com/gigialc/sandboxrouter.git"
127
+ },
128
+ "homepage": "https://sandboxrouter.vercel.app"
129
+ }