@ebowwa/sandbox 0.1.1

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 (108) hide show
  1. package/dist/compilers/index.d.ts +24 -0
  2. package/dist/compilers/index.d.ts.map +1 -0
  3. package/dist/compilers/index.js +42 -0
  4. package/dist/compilers/index.js.map +1 -0
  5. package/dist/compilers/javascript.d.ts +117 -0
  6. package/dist/compilers/javascript.d.ts.map +1 -0
  7. package/dist/compilers/javascript.js +462 -0
  8. package/dist/compilers/javascript.js.map +1 -0
  9. package/dist/compilers/python.d.ts +140 -0
  10. package/dist/compilers/python.d.ts.map +1 -0
  11. package/dist/compilers/python.js +650 -0
  12. package/dist/compilers/python.js.map +1 -0
  13. package/dist/compilers/typescript.d.ts +99 -0
  14. package/dist/compilers/typescript.d.ts.map +1 -0
  15. package/dist/compilers/typescript.js +323 -0
  16. package/dist/compilers/typescript.js.map +1 -0
  17. package/dist/core/cell.d.ts +160 -0
  18. package/dist/core/cell.d.ts.map +1 -0
  19. package/dist/core/cell.js +319 -0
  20. package/dist/core/cell.js.map +1 -0
  21. package/dist/core/compiler.d.ts +126 -0
  22. package/dist/core/compiler.d.ts.map +1 -0
  23. package/dist/core/compiler.js +123 -0
  24. package/dist/core/compiler.js.map +1 -0
  25. package/dist/core/index.d.ts +19 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/core/index.js +14 -0
  28. package/dist/core/index.js.map +1 -0
  29. package/dist/core/limits.d.ts +173 -0
  30. package/dist/core/limits.d.ts.map +1 -0
  31. package/dist/core/limits.js +440 -0
  32. package/dist/core/limits.js.map +1 -0
  33. package/dist/core/permissions.d.ts +103 -0
  34. package/dist/core/permissions.d.ts.map +1 -0
  35. package/dist/core/permissions.js +341 -0
  36. package/dist/core/permissions.js.map +1 -0
  37. package/dist/core/runtime.d.ts +127 -0
  38. package/dist/core/runtime.d.ts.map +1 -0
  39. package/dist/core/runtime.js +325 -0
  40. package/dist/core/runtime.js.map +1 -0
  41. package/dist/core/types.d.ts +380 -0
  42. package/dist/core/types.d.ts.map +1 -0
  43. package/dist/core/types.js +67 -0
  44. package/dist/core/types.js.map +1 -0
  45. package/dist/index.d.ts +145 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +279 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/multi/index.d.ts +9 -0
  50. package/dist/multi/index.d.ts.map +1 -0
  51. package/dist/multi/index.js +7 -0
  52. package/dist/multi/index.js.map +1 -0
  53. package/dist/multi/polyglot.d.ts +179 -0
  54. package/dist/multi/polyglot.d.ts.map +1 -0
  55. package/dist/multi/polyglot.js +319 -0
  56. package/dist/multi/polyglot.js.map +1 -0
  57. package/dist/runtimes/docker.d.ts +97 -0
  58. package/dist/runtimes/docker.d.ts.map +1 -0
  59. package/dist/runtimes/docker.js +368 -0
  60. package/dist/runtimes/docker.js.map +1 -0
  61. package/dist/runtimes/index.d.ts +11 -0
  62. package/dist/runtimes/index.d.ts.map +1 -0
  63. package/dist/runtimes/index.js +9 -0
  64. package/dist/runtimes/index.js.map +1 -0
  65. package/dist/runtimes/process.d.ts +47 -0
  66. package/dist/runtimes/process.d.ts.map +1 -0
  67. package/dist/runtimes/process.js +230 -0
  68. package/dist/runtimes/process.js.map +1 -0
  69. package/dist/session/index.d.ts +12 -0
  70. package/dist/session/index.d.ts.map +1 -0
  71. package/dist/session/index.js +9 -0
  72. package/dist/session/index.js.map +1 -0
  73. package/dist/session/kernel.d.ts +199 -0
  74. package/dist/session/kernel.d.ts.map +1 -0
  75. package/dist/session/kernel.js +400 -0
  76. package/dist/session/kernel.js.map +1 -0
  77. package/dist/session/notebook.d.ts +168 -0
  78. package/dist/session/notebook.d.ts.map +1 -0
  79. package/dist/session/notebook.js +499 -0
  80. package/dist/session/notebook.js.map +1 -0
  81. package/dist/session/repl.d.ts +159 -0
  82. package/dist/session/repl.d.ts.map +1 -0
  83. package/dist/session/repl.js +409 -0
  84. package/dist/session/repl.js.map +1 -0
  85. package/package.json +142 -0
  86. package/src/compilers/index.ts +80 -0
  87. package/src/compilers/javascript.ts +571 -0
  88. package/src/compilers/python.ts +785 -0
  89. package/src/compilers/typescript.ts +442 -0
  90. package/src/core/cell.ts +439 -0
  91. package/src/core/compiler.ts +250 -0
  92. package/src/core/index.ts +123 -0
  93. package/src/core/limits.ts +508 -0
  94. package/src/core/permissions.ts +409 -0
  95. package/src/core/runtime.ts +499 -0
  96. package/src/core/types.ts +528 -0
  97. package/src/global.d.ts +59 -0
  98. package/src/index.ts +515 -0
  99. package/src/multi/index.ts +22 -0
  100. package/src/multi/polyglot.ts +461 -0
  101. package/src/runtimes/docker.ts +501 -0
  102. package/src/runtimes/index.ts +21 -0
  103. package/src/runtimes/process.ts +316 -0
  104. package/src/session/index.ts +41 -0
  105. package/src/session/kernel.ts +553 -0
  106. package/src/session/notebook.ts +635 -0
  107. package/src/session/repl.ts +521 -0
  108. package/src/wasm2wasm.d.ts +35 -0
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Polyglot Primitive
3
+ *
4
+ * Execute code across multiple languages with shared state.
5
+ * Enables true multi-language programming with seamless data exchange.
6
+ */
7
+ import { BaseKernel, KernelManager } from "../session/kernel.js";
8
+ import { CellRegistry } from "../core/cell.js";
9
+ import { v4 as uuid } from "uuid";
10
+ /**
11
+ * Built-in language bridges
12
+ */
13
+ const BUILTIN_BRIDGES = {
14
+ // JSON is universal
15
+ "javascript:python": createJsonBridge("javascript", "python"),
16
+ "python:javascript": createJsonBridge("python", "javascript"),
17
+ "javascript:typescript": createJsonBridge("javascript", "typescript"),
18
+ "typescript:javascript": createJsonBridge("typescript", "javascript"),
19
+ "python:typescript": createJsonBridge("python", "typescript"),
20
+ "typescript:python": createJsonBridge("typescript", "python"),
21
+ };
22
+ /**
23
+ * Create JSON-based language bridge
24
+ */
25
+ function createJsonBridge(from, to) {
26
+ return {
27
+ from,
28
+ to,
29
+ serialize(value) {
30
+ return new TextEncoder().encode(JSON.stringify(value));
31
+ },
32
+ deserialize(bytes) {
33
+ return JSON.parse(new TextDecoder().decode(bytes));
34
+ },
35
+ canBridge(type) {
36
+ // JSON can bridge most primitive and composite types
37
+ return ["number", "string", "boolean", "object", "array"].includes(type);
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * Polyglot Session
43
+ *
44
+ * Manages multi-language execution with variable sharing.
45
+ */
46
+ export class PolyglotSession {
47
+ kernelManager;
48
+ kernelFactory;
49
+ kernels = new Map();
50
+ bridges;
51
+ sharedState = new Map();
52
+ variableBindings = new Map();
53
+ permissions;
54
+ limits;
55
+ constructor(options = {}) {
56
+ this.kernelManager = options.kernelManager ?? new KernelManager();
57
+ this.kernelFactory = options.kernelFactory;
58
+ this.permissions = options.permissions ?? {};
59
+ this.limits = options.limits ?? {};
60
+ this.bridges = new Map(Object.entries(BUILTIN_BRIDGES));
61
+ }
62
+ /**
63
+ * Execute code in a language
64
+ */
65
+ async execute(code, language, options) {
66
+ const kernel = await this.getKernel(language);
67
+ // Import variables from other languages
68
+ if (options?.imports) {
69
+ const importCode = await this.generateImportCode(language, options.imports);
70
+ code = importCode + "\n" + code;
71
+ }
72
+ const result = await kernel.execute(code);
73
+ // Capture exports to shared state
74
+ if (result.success && result.exports) {
75
+ for (const [name, value] of result.exports) {
76
+ this.sharedState.set(`${language}:${name}`, value);
77
+ }
78
+ }
79
+ return result;
80
+ }
81
+ /**
82
+ * Execute polyglot cell (multiple language variants)
83
+ */
84
+ async executePolyglot(cell, preferredLanguage) {
85
+ // Try preferred language first
86
+ const langOrder = preferredLanguage
87
+ ? [preferredLanguage, ...cell.variants.keys()].filter((v, i, a) => a.indexOf(v) === i)
88
+ : Array.from(cell.variants.keys());
89
+ for (const language of langOrder) {
90
+ const code = cell.variants.get(language);
91
+ if (!code)
92
+ continue;
93
+ try {
94
+ const kernel = await this.getKernel(language);
95
+ if (!kernel.isRunning()) {
96
+ await kernel.start();
97
+ }
98
+ const result = await kernel.execute(code);
99
+ return { language, result };
100
+ }
101
+ catch (error) {
102
+ // Try next language
103
+ continue;
104
+ }
105
+ }
106
+ throw new Error("No available language for polyglot cell");
107
+ }
108
+ /**
109
+ * Get or create kernel for language
110
+ */
111
+ async getKernel(language) {
112
+ let kernel = this.kernels.get(language);
113
+ if (!kernel) {
114
+ if (this.kernelFactory) {
115
+ kernel = await this.kernelFactory(language);
116
+ }
117
+ else {
118
+ throw new Error(`No kernel available for language: ${language}`);
119
+ }
120
+ this.kernels.set(language, kernel);
121
+ }
122
+ return kernel;
123
+ }
124
+ /**
125
+ * Generate import code for a language
126
+ */
127
+ async generateImportCode(targetLanguage, imports) {
128
+ const lines = [];
129
+ for (const [name, sourceLanguage] of imports) {
130
+ const value = this.sharedState.get(`${sourceLanguage}:${name}`);
131
+ if (value === undefined)
132
+ continue;
133
+ const bridge = this.getBridge(sourceLanguage, targetLanguage);
134
+ if (!bridge) {
135
+ throw new Error(`No bridge from ${sourceLanguage} to ${targetLanguage}`);
136
+ }
137
+ const serialized = bridge.serialize(value);
138
+ const deserialized = bridge.deserialize(serialized);
139
+ // Generate language-specific import
140
+ const importLine = this.generateVariableAssignment(targetLanguage, name, deserialized);
141
+ lines.push(importLine);
142
+ }
143
+ return lines.join("\n");
144
+ }
145
+ /**
146
+ * Generate variable assignment in target language
147
+ */
148
+ generateVariableAssignment(language, name, value) {
149
+ const json = JSON.stringify(value);
150
+ switch (language) {
151
+ case "javascript":
152
+ case "typescript":
153
+ return `const ${name} = ${json};`;
154
+ case "python":
155
+ return `${name} = ${json}`;
156
+ case "assemblyscript":
157
+ return `const ${name} = ${json};`;
158
+ case "json":
159
+ return json;
160
+ default:
161
+ return `// ${name} = ${json}`;
162
+ }
163
+ }
164
+ /**
165
+ * Get bridge between languages
166
+ */
167
+ getBridge(from, to) {
168
+ return this.bridges.get(`${from}:${to}`);
169
+ }
170
+ /**
171
+ * Register custom bridge
172
+ */
173
+ registerBridge(bridge) {
174
+ this.bridges.set(`${bridge.from}:${bridge.to}`, bridge);
175
+ }
176
+ /**
177
+ * Set shared variable
178
+ */
179
+ setVariable(language, name, value) {
180
+ this.sharedState.set(`${language}:${name}`, value);
181
+ }
182
+ /**
183
+ * Get shared variable
184
+ */
185
+ getVariable(language, name) {
186
+ return this.sharedState.get(`${language}:${name}`);
187
+ }
188
+ /**
189
+ * Transfer variable between languages
190
+ */
191
+ async transferVariable(fromLanguage, name, toLanguage) {
192
+ const value = this.sharedState.get(`${fromLanguage}:${name}`);
193
+ if (value === undefined) {
194
+ throw new Error(`Variable ${name} not found in ${fromLanguage}`);
195
+ }
196
+ const bridge = this.getBridge(fromLanguage, toLanguage);
197
+ if (!bridge) {
198
+ throw new Error(`No bridge from ${fromLanguage} to ${toLanguage}`);
199
+ }
200
+ const serialized = bridge.serialize(value);
201
+ const transferred = bridge.deserialize(serialized);
202
+ // Store in target language
203
+ this.sharedState.set(`${toLanguage}:${name}`, transferred);
204
+ return transferred;
205
+ }
206
+ /**
207
+ * Get all shared variables
208
+ */
209
+ getSharedVariables() {
210
+ return new Map(this.sharedState);
211
+ }
212
+ /**
213
+ * Clear shared state
214
+ */
215
+ clearState() {
216
+ this.sharedState.clear();
217
+ this.variableBindings.clear();
218
+ }
219
+ /**
220
+ * Shutdown all kernels
221
+ */
222
+ async shutdown() {
223
+ for (const kernel of this.kernels.values()) {
224
+ await kernel.shutdown();
225
+ }
226
+ this.kernels.clear();
227
+ }
228
+ }
229
+ /**
230
+ * Polyglot Notebook
231
+ *
232
+ * Notebook with multi-language cells and variable sharing.
233
+ */
234
+ export class PolyglotNotebook {
235
+ cells = new Map();
236
+ session;
237
+ executionOrder = [];
238
+ constructor(options) {
239
+ this.session = new PolyglotSession(options);
240
+ }
241
+ /**
242
+ * Add polyglot cell
243
+ */
244
+ addCell(variants, id) {
245
+ const cell = {
246
+ id: id ?? uuid(),
247
+ variants,
248
+ };
249
+ this.cells.set(cell.id, cell);
250
+ this.executionOrder.push(cell.id);
251
+ return cell;
252
+ }
253
+ /**
254
+ * Add single-language cell
255
+ */
256
+ addSingleCell(language, code, id) {
257
+ const variants = new Map();
258
+ variants.set(language, code);
259
+ return this.addCell(variants, id);
260
+ }
261
+ /**
262
+ * Execute all cells
263
+ */
264
+ async runAll() {
265
+ const results = [];
266
+ for (const cellId of this.executionOrder) {
267
+ const cell = this.cells.get(cellId);
268
+ if (!cell)
269
+ continue;
270
+ const { language, result } = await this.session.executePolyglot(cell);
271
+ results.push({ cellId, language, result });
272
+ if (!result.success) {
273
+ break;
274
+ }
275
+ }
276
+ return results;
277
+ }
278
+ /**
279
+ * Execute single cell
280
+ */
281
+ async runCell(cellId, preferredLanguage) {
282
+ const cell = this.cells.get(cellId);
283
+ if (!cell) {
284
+ throw new Error(`Cell not found: ${cellId}`);
285
+ }
286
+ return this.session.executePolyglot(cell, preferredLanguage);
287
+ }
288
+ /**
289
+ * Get cell
290
+ */
291
+ getCell(id) {
292
+ return this.cells.get(id);
293
+ }
294
+ /**
295
+ * Get all cells
296
+ */
297
+ getCells() {
298
+ return this.executionOrder.map(id => this.cells.get(id)).filter(Boolean);
299
+ }
300
+ /**
301
+ * Get session
302
+ */
303
+ getSession() {
304
+ return this.session;
305
+ }
306
+ }
307
+ /**
308
+ * Create polyglot session
309
+ */
310
+ export function createPolyglotSession(options) {
311
+ return new PolyglotSession(options);
312
+ }
313
+ /**
314
+ * Create polyglot notebook
315
+ */
316
+ export function createPolyglotNotebook(options) {
317
+ return new PolyglotNotebook(options);
318
+ }
319
+ //# sourceMappingURL=polyglot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyglot.js","sourceRoot":"","sources":["../../src/multi/polyglot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Docker Runtime
3
+ *
4
+ * Runs code in Docker containers for maximum isolation.
5
+ * Provides full filesystem and network control with container-level security.
6
+ *
7
+ * Isolation level: 'container'
8
+ */
9
+ import type { ExecutionResult } from "../core/types.js";
10
+ import type { IRuntime, RuntimeOptions, ExecutionRequest, RuntimeCapabilities } from "../core/runtime.js";
11
+ /** Docker runtime configuration */
12
+ export interface DockerRuntimeConfig {
13
+ /** Default Docker image to use */
14
+ defaultImage?: string;
15
+ /** Docker socket path */
16
+ dockerSocket?: string;
17
+ /** Network mode for containers */
18
+ networkMode?: "none" | "bridge" | "host";
19
+ /** Cleanup containers after execution */
20
+ autoCleanup?: boolean;
21
+ /** Memory limit for containers (bytes) */
22
+ defaultMemory?: number;
23
+ /** CPU limit (number of CPUs) */
24
+ cpuLimit?: number;
25
+ }
26
+ /** Container execution options */
27
+ export interface ContainerOptions {
28
+ /** Docker image to use */
29
+ image?: string;
30
+ /** Container name */
31
+ name?: string;
32
+ /** Environment variables */
33
+ env?: Record<string, string>;
34
+ /** Working directory in container */
35
+ workdir?: string;
36
+ /** Mount points */
37
+ mounts?: Array<{
38
+ source: string;
39
+ target: string;
40
+ readonly?: boolean;
41
+ }>;
42
+ /** Port mappings */
43
+ ports?: Array<{
44
+ hostPort: number;
45
+ containerPort: number;
46
+ protocol?: "tcp" | "udp";
47
+ }>;
48
+ /** Network mode */
49
+ network?: "none" | "bridge" | "host";
50
+ }
51
+ /**
52
+ * Docker Runtime
53
+ *
54
+ * Executes code in isolated Docker containers with full resource control.
55
+ * Maximum isolation with configurable filesystem and network access.
56
+ */
57
+ export declare class DockerRuntime implements IRuntime {
58
+ readonly name = "docker";
59
+ readonly capabilities: RuntimeCapabilities;
60
+ private executing;
61
+ private config;
62
+ private containers;
63
+ constructor(config?: DockerRuntimeConfig);
64
+ init(): Promise<void>;
65
+ isAvailable(): Promise<boolean>;
66
+ execute(request: ExecutionRequest, options: RuntimeOptions): Promise<ExecutionResult>;
67
+ terminate(): Promise<void>;
68
+ isExecuting(): boolean;
69
+ /**
70
+ * Check if Docker is available
71
+ */
72
+ private checkDockerAvailable;
73
+ /**
74
+ * Pull Docker image if not present
75
+ */
76
+ private pullImageIfNeeded;
77
+ /**
78
+ * Build container options from execution request
79
+ */
80
+ private buildContainerOptions;
81
+ /**
82
+ * Create Docker container
83
+ */
84
+ private createContainer;
85
+ /**
86
+ * Run code in container
87
+ */
88
+ private runInContainer;
89
+ /**
90
+ * Remove container
91
+ */
92
+ private removeContainer;
93
+ private createErrorResult;
94
+ private parseMemory;
95
+ private parseTimeout;
96
+ }
97
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/runtimes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACzC,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;KAC1B,CAAC,CAAC;IACH,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAQxC;IAEF,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAA6B;gBAEnC,MAAM,GAAE,mBAAwB;IAWtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC;IA4FrB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAShC,WAAW,IAAI,OAAO;IAItB;;OAEG;YACW,oBAAoB;IAQlC;;OAEG;YACW,iBAAiB;IAoB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;YACW,eAAe;IA8E7B;;OAEG;YACW,cAAc;IAqE5B;;OAEG;YACW,eAAe;IAa7B,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;CAWrB"}