@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.
- package/dist/compilers/index.d.ts +24 -0
- package/dist/compilers/index.d.ts.map +1 -0
- package/dist/compilers/index.js +42 -0
- package/dist/compilers/index.js.map +1 -0
- package/dist/compilers/javascript.d.ts +117 -0
- package/dist/compilers/javascript.d.ts.map +1 -0
- package/dist/compilers/javascript.js +462 -0
- package/dist/compilers/javascript.js.map +1 -0
- package/dist/compilers/python.d.ts +140 -0
- package/dist/compilers/python.d.ts.map +1 -0
- package/dist/compilers/python.js +650 -0
- package/dist/compilers/python.js.map +1 -0
- package/dist/compilers/typescript.d.ts +99 -0
- package/dist/compilers/typescript.d.ts.map +1 -0
- package/dist/compilers/typescript.js +323 -0
- package/dist/compilers/typescript.js.map +1 -0
- package/dist/core/cell.d.ts +160 -0
- package/dist/core/cell.d.ts.map +1 -0
- package/dist/core/cell.js +319 -0
- package/dist/core/cell.js.map +1 -0
- package/dist/core/compiler.d.ts +126 -0
- package/dist/core/compiler.d.ts.map +1 -0
- package/dist/core/compiler.js +123 -0
- package/dist/core/compiler.js.map +1 -0
- package/dist/core/index.d.ts +19 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/limits.d.ts +173 -0
- package/dist/core/limits.d.ts.map +1 -0
- package/dist/core/limits.js +440 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/permissions.d.ts +103 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +341 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/runtime.d.ts +127 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +325 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/types.d.ts +380 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +67 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +279 -0
- package/dist/index.js.map +1 -0
- package/dist/multi/index.d.ts +9 -0
- package/dist/multi/index.d.ts.map +1 -0
- package/dist/multi/index.js +7 -0
- package/dist/multi/index.js.map +1 -0
- package/dist/multi/polyglot.d.ts +179 -0
- package/dist/multi/polyglot.d.ts.map +1 -0
- package/dist/multi/polyglot.js +319 -0
- package/dist/multi/polyglot.js.map +1 -0
- package/dist/runtimes/docker.d.ts +97 -0
- package/dist/runtimes/docker.d.ts.map +1 -0
- package/dist/runtimes/docker.js +368 -0
- package/dist/runtimes/docker.js.map +1 -0
- package/dist/runtimes/index.d.ts +11 -0
- package/dist/runtimes/index.d.ts.map +1 -0
- package/dist/runtimes/index.js +9 -0
- package/dist/runtimes/index.js.map +1 -0
- package/dist/runtimes/process.d.ts +47 -0
- package/dist/runtimes/process.d.ts.map +1 -0
- package/dist/runtimes/process.js +230 -0
- package/dist/runtimes/process.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/kernel.d.ts +199 -0
- package/dist/session/kernel.d.ts.map +1 -0
- package/dist/session/kernel.js +400 -0
- package/dist/session/kernel.js.map +1 -0
- package/dist/session/notebook.d.ts +168 -0
- package/dist/session/notebook.d.ts.map +1 -0
- package/dist/session/notebook.js +499 -0
- package/dist/session/notebook.js.map +1 -0
- package/dist/session/repl.d.ts +159 -0
- package/dist/session/repl.d.ts.map +1 -0
- package/dist/session/repl.js +409 -0
- package/dist/session/repl.js.map +1 -0
- package/package.json +142 -0
- package/src/compilers/index.ts +80 -0
- package/src/compilers/javascript.ts +571 -0
- package/src/compilers/python.ts +785 -0
- package/src/compilers/typescript.ts +442 -0
- package/src/core/cell.ts +439 -0
- package/src/core/compiler.ts +250 -0
- package/src/core/index.ts +123 -0
- package/src/core/limits.ts +508 -0
- package/src/core/permissions.ts +409 -0
- package/src/core/runtime.ts +499 -0
- package/src/core/types.ts +528 -0
- package/src/global.d.ts +59 -0
- package/src/index.ts +515 -0
- package/src/multi/index.ts +22 -0
- package/src/multi/polyglot.ts +461 -0
- package/src/runtimes/docker.ts +501 -0
- package/src/runtimes/index.ts +21 -0
- package/src/runtimes/process.ts +316 -0
- package/src/session/index.ts +41 -0
- package/src/session/kernel.ts +553 -0
- package/src/session/notebook.ts +635 -0
- package/src/session/repl.ts +521 -0
- package/src/wasm2wasm.d.ts +35 -0
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notebook Primitive
|
|
3
|
+
*
|
|
4
|
+
* Multi-cell, multi-language document with sequential execution.
|
|
5
|
+
* Jupyter-style notebook with cell dependencies and state sharing.
|
|
6
|
+
*/
|
|
7
|
+
import { CellRegistry, CellBuilder } from "../core/cell.js";
|
|
8
|
+
import { BaseKernel, KernelManager } from "./kernel.js";
|
|
9
|
+
import { createPermissions } from "../core/permissions.js";
|
|
10
|
+
import { v4 as uuid } from "uuid";
|
|
11
|
+
/**
|
|
12
|
+
* Base Notebook Implementation
|
|
13
|
+
*/
|
|
14
|
+
export class BaseNotebook {
|
|
15
|
+
id;
|
|
16
|
+
metadata;
|
|
17
|
+
registry;
|
|
18
|
+
kernelManager;
|
|
19
|
+
kernelFactory;
|
|
20
|
+
kernels = new Map();
|
|
21
|
+
permissions;
|
|
22
|
+
limits;
|
|
23
|
+
state = "idle";
|
|
24
|
+
executionCount = 0;
|
|
25
|
+
events = {};
|
|
26
|
+
abortController;
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this.id = options.id ?? uuid();
|
|
29
|
+
this.registry = new CellRegistry();
|
|
30
|
+
this.kernelManager = options.kernelManager ?? new KernelManager();
|
|
31
|
+
this.kernelFactory = options.kernelFactory;
|
|
32
|
+
this.permissions = options.permissions ?? {};
|
|
33
|
+
this.limits = options.limits ?? {};
|
|
34
|
+
this.metadata = {
|
|
35
|
+
name: options.name ?? "Untitled",
|
|
36
|
+
language: options.defaultLanguage ?? "javascript",
|
|
37
|
+
created: new Date(),
|
|
38
|
+
modified: new Date(),
|
|
39
|
+
};
|
|
40
|
+
// Add initial cells
|
|
41
|
+
if (options.cells) {
|
|
42
|
+
for (const cell of options.cells) {
|
|
43
|
+
this.addCell(cell);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get current state
|
|
49
|
+
*/
|
|
50
|
+
getState() {
|
|
51
|
+
return this.state;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set event handlers
|
|
55
|
+
*/
|
|
56
|
+
setEvents(events) {
|
|
57
|
+
this.events = { ...this.events, ...events };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get all cells
|
|
61
|
+
*/
|
|
62
|
+
get cells() {
|
|
63
|
+
return this.registry.getAll();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Add cell
|
|
67
|
+
*/
|
|
68
|
+
addCell(cell) {
|
|
69
|
+
const executableCell = {
|
|
70
|
+
...cell,
|
|
71
|
+
id: uuid(),
|
|
72
|
+
state: "idle",
|
|
73
|
+
metadata: {
|
|
74
|
+
...cell.metadata,
|
|
75
|
+
index: this.registry.count,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
this.registry.add(executableCell);
|
|
79
|
+
this.metadata.modified = new Date();
|
|
80
|
+
return executableCell;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove cell
|
|
84
|
+
*/
|
|
85
|
+
removeCell(cellId) {
|
|
86
|
+
this.registry.remove(cellId);
|
|
87
|
+
this.metadata.modified = new Date();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Move cell
|
|
91
|
+
*/
|
|
92
|
+
moveCell(cellId, newIndex) {
|
|
93
|
+
const cell = this.registry.get(cellId);
|
|
94
|
+
if (!cell)
|
|
95
|
+
return;
|
|
96
|
+
cell.metadata = { ...cell.metadata, index: newIndex };
|
|
97
|
+
this.metadata.modified = new Date();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get cell by ID
|
|
101
|
+
*/
|
|
102
|
+
getCell(cellId) {
|
|
103
|
+
return this.registry.get(cellId);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Update cell source
|
|
107
|
+
*/
|
|
108
|
+
updateCell(cellId, source) {
|
|
109
|
+
const cell = this.registry.get(cellId);
|
|
110
|
+
if (!cell)
|
|
111
|
+
return;
|
|
112
|
+
cell.source = source;
|
|
113
|
+
cell.state = "idle"; // Reset state on edit
|
|
114
|
+
cell.result = undefined;
|
|
115
|
+
this.metadata.modified = new Date();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get or create kernel for language
|
|
119
|
+
*/
|
|
120
|
+
async getKernel(language) {
|
|
121
|
+
let kernel = this.kernels.get(language);
|
|
122
|
+
if (!kernel) {
|
|
123
|
+
if (this.kernelFactory) {
|
|
124
|
+
kernel = await this.kernelFactory(language);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// Create a basic kernel - would need proper compiler/runtime
|
|
128
|
+
throw new Error(`No kernel available for language: ${language}`);
|
|
129
|
+
}
|
|
130
|
+
this.kernels.set(language, kernel);
|
|
131
|
+
}
|
|
132
|
+
return kernel;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Execute all cells
|
|
136
|
+
*/
|
|
137
|
+
async runAll(options) {
|
|
138
|
+
if (this.state === "running") {
|
|
139
|
+
throw new Error("Notebook is already running");
|
|
140
|
+
}
|
|
141
|
+
this.state = "running";
|
|
142
|
+
this.abortController = new AbortController();
|
|
143
|
+
const results = [];
|
|
144
|
+
const executionOrder = this.registry.getExecutionOrder();
|
|
145
|
+
const total = executionOrder.length;
|
|
146
|
+
let completed = 0;
|
|
147
|
+
// Find start index
|
|
148
|
+
let startIndex = 0;
|
|
149
|
+
if (options?.continueFrom) {
|
|
150
|
+
startIndex = executionOrder.indexOf(options.continueFrom);
|
|
151
|
+
if (startIndex === -1)
|
|
152
|
+
startIndex = 0;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
for (let i = startIndex; i < executionOrder.length; i++) {
|
|
156
|
+
// Check for abort
|
|
157
|
+
if (this.abortController.signal.aborted) {
|
|
158
|
+
this.state = "cancelled";
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
const cellId = executionOrder[i];
|
|
162
|
+
const result = await this.runCell(cellId, {
|
|
163
|
+
signal: this.abortController.signal,
|
|
164
|
+
});
|
|
165
|
+
results.push(result);
|
|
166
|
+
completed++;
|
|
167
|
+
this.events.onProgress?.(completed, total);
|
|
168
|
+
// Stop on error
|
|
169
|
+
if (!result.result.success && options?.stopOnError !== false) {
|
|
170
|
+
this.state = "error";
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (this.state === "running") {
|
|
175
|
+
this.state = "idle";
|
|
176
|
+
}
|
|
177
|
+
this.events.onNotebookComplete?.(results);
|
|
178
|
+
return results;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
this.state = "error";
|
|
182
|
+
this.events.onNotebookError?.(error instanceof Error ? error : new Error(String(error)));
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Execute single cell
|
|
188
|
+
*/
|
|
189
|
+
async runCell(cellId, options) {
|
|
190
|
+
const cell = this.registry.get(cellId);
|
|
191
|
+
if (!cell) {
|
|
192
|
+
throw new Error(`Cell not found: ${cellId}`);
|
|
193
|
+
}
|
|
194
|
+
cell.state = "queued";
|
|
195
|
+
this.events.onCellStart?.(cellId, cell);
|
|
196
|
+
try {
|
|
197
|
+
// Get kernel for language
|
|
198
|
+
const kernel = await this.getKernel(cell.language);
|
|
199
|
+
// Execute
|
|
200
|
+
cell.state = "running";
|
|
201
|
+
const result = await kernel.execute(cell.source, options);
|
|
202
|
+
// Update cell
|
|
203
|
+
cell.result = result;
|
|
204
|
+
cell.state = result.success ? "success" : "error";
|
|
205
|
+
cell.executionCount = ++this.executionCount;
|
|
206
|
+
cell.lastRun = new Date();
|
|
207
|
+
this.events.onCellComplete?.(cellId, result);
|
|
208
|
+
return {
|
|
209
|
+
cellId,
|
|
210
|
+
executionCount: cell.executionCount,
|
|
211
|
+
result,
|
|
212
|
+
timestamp: new Date(),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
cell.state = "error";
|
|
217
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
218
|
+
this.events.onCellError?.(cellId, err);
|
|
219
|
+
const result = {
|
|
220
|
+
success: false,
|
|
221
|
+
error: {
|
|
222
|
+
message: err.message,
|
|
223
|
+
type: "runtime",
|
|
224
|
+
},
|
|
225
|
+
metrics: { duration: 0, memoryUsed: 0 },
|
|
226
|
+
output: { stdout: [], stderr: [], displays: [] },
|
|
227
|
+
};
|
|
228
|
+
cell.result = result;
|
|
229
|
+
return {
|
|
230
|
+
cellId,
|
|
231
|
+
executionCount: ++this.executionCount,
|
|
232
|
+
result,
|
|
233
|
+
timestamp: new Date(),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Execute cells from index
|
|
239
|
+
*/
|
|
240
|
+
async runFrom(startIndex) {
|
|
241
|
+
const cells = this.registry
|
|
242
|
+
.getAll()
|
|
243
|
+
.sort((a, b) => (a.metadata?.index ?? 0) - (b.metadata?.index ?? 0));
|
|
244
|
+
if (startIndex >= cells.length) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
const startCell = cells[startIndex];
|
|
248
|
+
return this.runAll({ continueFrom: startCell.id });
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Run cells that depend on a changed cell
|
|
252
|
+
*/
|
|
253
|
+
async runDependents(cellId) {
|
|
254
|
+
const toReexecute = this.registry.getCellsToReexecute(cellId);
|
|
255
|
+
const results = [];
|
|
256
|
+
for (const depId of toReexecute) {
|
|
257
|
+
const result = await this.runCell(depId);
|
|
258
|
+
results.push(result);
|
|
259
|
+
if (!result.result.success) {
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return results;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Cancel execution
|
|
267
|
+
*/
|
|
268
|
+
cancel() {
|
|
269
|
+
if (this.abortController) {
|
|
270
|
+
this.abortController.abort();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Clear all cell outputs
|
|
275
|
+
*/
|
|
276
|
+
clearOutputs() {
|
|
277
|
+
for (const cell of this.registry.getAll()) {
|
|
278
|
+
cell.result = undefined;
|
|
279
|
+
cell.state = "idle";
|
|
280
|
+
}
|
|
281
|
+
this.executionCount = 0;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Restart all kernels
|
|
285
|
+
*/
|
|
286
|
+
async restart() {
|
|
287
|
+
for (const kernel of this.kernels.values()) {
|
|
288
|
+
await kernel.restart();
|
|
289
|
+
}
|
|
290
|
+
this.clearOutputs();
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Export notebook
|
|
294
|
+
*/
|
|
295
|
+
export(format) {
|
|
296
|
+
switch (format) {
|
|
297
|
+
case "ipynb":
|
|
298
|
+
return this.toIpynb();
|
|
299
|
+
case "json":
|
|
300
|
+
return this.toJson();
|
|
301
|
+
case "markdown":
|
|
302
|
+
return this.toMarkdown();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Import notebook
|
|
307
|
+
*/
|
|
308
|
+
static import(data, format) {
|
|
309
|
+
switch (format) {
|
|
310
|
+
case "ipynb":
|
|
311
|
+
return BaseNotebook.fromIpynb(data);
|
|
312
|
+
case "json":
|
|
313
|
+
return BaseNotebook.fromJson(data);
|
|
314
|
+
case "markdown":
|
|
315
|
+
return BaseNotebook.fromMarkdown(data);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Export to Jupyter format
|
|
320
|
+
*/
|
|
321
|
+
toIpynb() {
|
|
322
|
+
const cells = this.registry.getAll().sort((a, b) => (a.metadata?.index ?? 0) - (b.metadata?.index ?? 0));
|
|
323
|
+
const ipynb = {
|
|
324
|
+
nbformat: 4,
|
|
325
|
+
nbformat_minor: 5,
|
|
326
|
+
metadata: {
|
|
327
|
+
kernelspec: {
|
|
328
|
+
display_name: this.metadata.name,
|
|
329
|
+
language: this.metadata.language,
|
|
330
|
+
name: this.metadata.language,
|
|
331
|
+
},
|
|
332
|
+
language_info: {
|
|
333
|
+
name: this.metadata.language,
|
|
334
|
+
},
|
|
335
|
+
},
|
|
336
|
+
cells: cells.map(cell => ({
|
|
337
|
+
id: cell.id,
|
|
338
|
+
cell_type: "code",
|
|
339
|
+
metadata: cell.metadata ?? {},
|
|
340
|
+
source: cell.source.split("\n"),
|
|
341
|
+
execution_count: cell.executionCount ?? null,
|
|
342
|
+
outputs: this.cellToOutputs(cell),
|
|
343
|
+
})),
|
|
344
|
+
};
|
|
345
|
+
return JSON.stringify(ipynb, null, 2);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Export to JSON
|
|
349
|
+
*/
|
|
350
|
+
toJson() {
|
|
351
|
+
return JSON.stringify({
|
|
352
|
+
id: this.id,
|
|
353
|
+
metadata: this.metadata,
|
|
354
|
+
cells: this.registry.getAll(),
|
|
355
|
+
}, null, 2);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Export to Markdown
|
|
359
|
+
*/
|
|
360
|
+
toMarkdown() {
|
|
361
|
+
const cells = this.registry.getAll().sort((a, b) => (a.metadata?.index ?? 0) - (b.metadata?.index ?? 0));
|
|
362
|
+
const lines = [
|
|
363
|
+
`# ${this.metadata.name}`,
|
|
364
|
+
"",
|
|
365
|
+
`> Language: ${this.metadata.language}`,
|
|
366
|
+
`> Created: ${this.metadata.created.toISOString()}`,
|
|
367
|
+
"",
|
|
368
|
+
];
|
|
369
|
+
for (const cell of cells) {
|
|
370
|
+
const lang = cell.language === "javascript" ? "js" : cell.language;
|
|
371
|
+
lines.push(`\`\`\`${lang}`);
|
|
372
|
+
lines.push(cell.source);
|
|
373
|
+
lines.push("```");
|
|
374
|
+
lines.push("");
|
|
375
|
+
if (cell.result) {
|
|
376
|
+
if (cell.result.output.stdout.length > 0) {
|
|
377
|
+
lines.push("**Output:**");
|
|
378
|
+
lines.push("```");
|
|
379
|
+
lines.push(...cell.result.output.stdout);
|
|
380
|
+
lines.push("```");
|
|
381
|
+
lines.push("");
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return lines.join("\n");
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Import from Jupyter format
|
|
389
|
+
*/
|
|
390
|
+
static fromIpynb(data) {
|
|
391
|
+
const ipynb = JSON.parse(data);
|
|
392
|
+
const cells = [];
|
|
393
|
+
for (const cell of ipynb.cells ?? []) {
|
|
394
|
+
if (cell.cell_type === "code") {
|
|
395
|
+
cells.push({
|
|
396
|
+
id: cell.id ?? uuid(),
|
|
397
|
+
language: ipynb.metadata?.language_info?.name ?? "python",
|
|
398
|
+
source: Array.isArray(cell.source)
|
|
399
|
+
? cell.source.join("\n")
|
|
400
|
+
: cell.source,
|
|
401
|
+
metadata: cell.metadata,
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return new BaseNotebook({
|
|
406
|
+
name: ipynb.metadata?.kernelspec?.display_name ?? "Imported Notebook",
|
|
407
|
+
defaultLanguage: ipynb.metadata?.language_info?.name,
|
|
408
|
+
cells,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Import from JSON
|
|
413
|
+
*/
|
|
414
|
+
static fromJson(data) {
|
|
415
|
+
const obj = JSON.parse(data);
|
|
416
|
+
return new BaseNotebook({
|
|
417
|
+
id: obj.id,
|
|
418
|
+
name: obj.metadata?.name,
|
|
419
|
+
defaultLanguage: obj.metadata?.language,
|
|
420
|
+
cells: obj.cells,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Import from Markdown
|
|
425
|
+
*/
|
|
426
|
+
static fromMarkdown(data) {
|
|
427
|
+
const cells = [];
|
|
428
|
+
const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
|
|
429
|
+
let match;
|
|
430
|
+
let index = 0;
|
|
431
|
+
// Extract title
|
|
432
|
+
const titleMatch = data.match(/^#\s+(.+)$/m);
|
|
433
|
+
const name = titleMatch ? titleMatch[1] : "Imported Notebook";
|
|
434
|
+
while ((match = codeBlockRegex.exec(data)) !== null) {
|
|
435
|
+
const lang = match[1] ?? "javascript";
|
|
436
|
+
const source = match[2].trim();
|
|
437
|
+
cells.push({
|
|
438
|
+
id: uuid(),
|
|
439
|
+
language: lang,
|
|
440
|
+
source,
|
|
441
|
+
state: "idle",
|
|
442
|
+
metadata: { index: index++ },
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
const notebook = new BaseNotebook({ name, cells });
|
|
446
|
+
return notebook;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Convert cell outputs to Jupyter format
|
|
450
|
+
*/
|
|
451
|
+
cellToOutputs(cell) {
|
|
452
|
+
const outputs = [];
|
|
453
|
+
if (!cell.result)
|
|
454
|
+
return outputs;
|
|
455
|
+
// stdout
|
|
456
|
+
if (cell.result.output.stdout.length > 0) {
|
|
457
|
+
outputs.push({
|
|
458
|
+
output_type: "stream",
|
|
459
|
+
name: "stdout",
|
|
460
|
+
text: cell.result.output.stdout,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
// stderr
|
|
464
|
+
if (cell.result.output.stderr.length > 0) {
|
|
465
|
+
outputs.push({
|
|
466
|
+
output_type: "stream",
|
|
467
|
+
name: "stderr",
|
|
468
|
+
text: cell.result.output.stderr,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
// displays
|
|
472
|
+
for (const display of cell.result.output.displays) {
|
|
473
|
+
outputs.push({
|
|
474
|
+
output_type: "execute_result",
|
|
475
|
+
data: {
|
|
476
|
+
[`text/${display.type}`]: display.data,
|
|
477
|
+
},
|
|
478
|
+
execution_count: cell.executionCount,
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
// error
|
|
482
|
+
if (cell.result.error) {
|
|
483
|
+
outputs.push({
|
|
484
|
+
output_type: "error",
|
|
485
|
+
ename: cell.result.error.type,
|
|
486
|
+
evalue: cell.result.error.message,
|
|
487
|
+
traceback: [cell.result.error.stack ?? ""],
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
return outputs;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Create a notebook
|
|
495
|
+
*/
|
|
496
|
+
export function createNotebook(options) {
|
|
497
|
+
return new BaseNotebook(options);
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=notebook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/session/notebook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Primitive
|
|
3
|
+
*
|
|
4
|
+
* Interactive Read-Eval-Print-Loop for multi-language execution.
|
|
5
|
+
* Provides terminal-style interactive coding experience.
|
|
6
|
+
*/
|
|
7
|
+
import type { Language, ExecutionResult, Permissions, Limits } from "../core/types.js";
|
|
8
|
+
import { BaseKernel, KernelManager } from "./kernel.js";
|
|
9
|
+
/**
|
|
10
|
+
* REPL options
|
|
11
|
+
*/
|
|
12
|
+
export interface REPLOptions {
|
|
13
|
+
/** Default language */
|
|
14
|
+
language?: Language;
|
|
15
|
+
/** Available languages */
|
|
16
|
+
languages?: Language[];
|
|
17
|
+
/** Permissions */
|
|
18
|
+
permissions?: Permissions;
|
|
19
|
+
/** Resource limits */
|
|
20
|
+
limits?: Limits;
|
|
21
|
+
/** Prompt string */
|
|
22
|
+
prompt?: string;
|
|
23
|
+
/** Continuation prompt */
|
|
24
|
+
continuationPrompt?: string;
|
|
25
|
+
/** Welcome message */
|
|
26
|
+
welcomeMessage?: string;
|
|
27
|
+
/** Kernel manager */
|
|
28
|
+
kernelManager?: KernelManager;
|
|
29
|
+
/** Kernel factory */
|
|
30
|
+
kernelFactory?: (language: Language) => Promise<BaseKernel>;
|
|
31
|
+
/** Output stream */
|
|
32
|
+
output?: NodeJS.WritableStream;
|
|
33
|
+
/** Input stream */
|
|
34
|
+
input?: NodeJS.ReadableStream;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* REPL history entry
|
|
38
|
+
*/
|
|
39
|
+
export interface REPLHistoryEntry {
|
|
40
|
+
/** Input code */
|
|
41
|
+
input: string;
|
|
42
|
+
/** Language */
|
|
43
|
+
language: Language;
|
|
44
|
+
/** Execution result */
|
|
45
|
+
result: ExecutionResult;
|
|
46
|
+
/** Timestamp */
|
|
47
|
+
timestamp: Date;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* REPL state
|
|
51
|
+
*/
|
|
52
|
+
export interface REPLState {
|
|
53
|
+
/** Current language */
|
|
54
|
+
language: Language;
|
|
55
|
+
/** Is reading multiline input */
|
|
56
|
+
inMultiline: boolean;
|
|
57
|
+
/** Current multiline buffer */
|
|
58
|
+
multilineBuffer: string[];
|
|
59
|
+
/** History */
|
|
60
|
+
history: REPLHistoryEntry[];
|
|
61
|
+
/** Variables */
|
|
62
|
+
variables: Map<string, unknown>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Base REPL Implementation
|
|
66
|
+
*/
|
|
67
|
+
export declare class BaseREPL {
|
|
68
|
+
private kernelManager;
|
|
69
|
+
private kernelFactory?;
|
|
70
|
+
private kernels;
|
|
71
|
+
private permissions;
|
|
72
|
+
private limits;
|
|
73
|
+
private prompt;
|
|
74
|
+
private continuationPrompt;
|
|
75
|
+
private welcomeMessage;
|
|
76
|
+
private languages;
|
|
77
|
+
private output;
|
|
78
|
+
private input;
|
|
79
|
+
private rl?;
|
|
80
|
+
state: REPLState;
|
|
81
|
+
constructor(options?: REPLOptions);
|
|
82
|
+
/**
|
|
83
|
+
* Start REPL
|
|
84
|
+
*/
|
|
85
|
+
start(): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* Handle a line of input
|
|
88
|
+
*/
|
|
89
|
+
handleLine(line: string): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Execute code
|
|
92
|
+
*/
|
|
93
|
+
execute(code: string): Promise<ExecutionResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Handle REPL command
|
|
96
|
+
*/
|
|
97
|
+
private handleCommand;
|
|
98
|
+
/**
|
|
99
|
+
* Get or create kernel for language
|
|
100
|
+
*/
|
|
101
|
+
private getKernel;
|
|
102
|
+
/**
|
|
103
|
+
* Check if input should continue to next line
|
|
104
|
+
*/
|
|
105
|
+
private shouldContinue;
|
|
106
|
+
/**
|
|
107
|
+
* Display execution result
|
|
108
|
+
*/
|
|
109
|
+
private displayResult;
|
|
110
|
+
/**
|
|
111
|
+
* Format value for display
|
|
112
|
+
*/
|
|
113
|
+
private formatValue;
|
|
114
|
+
/**
|
|
115
|
+
* Get prompt string
|
|
116
|
+
*/
|
|
117
|
+
private getPrompt;
|
|
118
|
+
/**
|
|
119
|
+
* Get history as strings
|
|
120
|
+
*/
|
|
121
|
+
private getHistoryStrings;
|
|
122
|
+
/**
|
|
123
|
+
* Show help
|
|
124
|
+
*/
|
|
125
|
+
private showHelp;
|
|
126
|
+
/**
|
|
127
|
+
* Show history
|
|
128
|
+
*/
|
|
129
|
+
private showHistory;
|
|
130
|
+
/**
|
|
131
|
+
* Show variables
|
|
132
|
+
*/
|
|
133
|
+
private showVariables;
|
|
134
|
+
/**
|
|
135
|
+
* Reset session
|
|
136
|
+
*/
|
|
137
|
+
private reset;
|
|
138
|
+
/**
|
|
139
|
+
* Save session
|
|
140
|
+
*/
|
|
141
|
+
private save;
|
|
142
|
+
/**
|
|
143
|
+
* Load session
|
|
144
|
+
*/
|
|
145
|
+
private load;
|
|
146
|
+
/**
|
|
147
|
+
* Print to output
|
|
148
|
+
*/
|
|
149
|
+
private print;
|
|
150
|
+
/**
|
|
151
|
+
* Get default welcome message
|
|
152
|
+
*/
|
|
153
|
+
private getDefaultWelcome;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a REPL
|
|
157
|
+
*/
|
|
158
|
+
export declare function createREPL(options?: REPLOptions): BaseREPL;
|
|
159
|
+
//# sourceMappingURL=repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/session/repl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,MAAM,EACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMxD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,kBAAkB;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qBAAqB;IACrB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,uBAAuB;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uBAAuB;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,gBAAgB;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAC,CAA8C;IACpE,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,EAAE,CAAC,CAAqB;IAEhC,KAAK,EAAE,SAAS,CAAC;gBAEL,OAAO,GAAE,WAAgB;IAqBrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgD7C;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyBrD;;OAEG;YACW,aAAa;IA4D3B;;OAEG;YACW,SAAS;IAgBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;YACW,KAAK;IAanB;;OAEG;YACW,IAAI;IAYlB;;OAEG;YACW,IAAI;IAWlB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAU1B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,QAAQ,CAE1D"}
|