cvm-server 0.3.2 → 0.4.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 (3) hide show
  1. package/main.cjs +1368 -0
  2. package/package.json +4 -4
  3. package/main.js +0 -725
package/main.cjs ADDED
@@ -0,0 +1,1368 @@
1
+ "use strict";
2
+ const mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
3
+ const stdio_js = require("@modelcontextprotocol/sdk/server/stdio.js");
4
+ const zod = require("zod");
5
+ const s$1 = require("typescript");
6
+ const fs = require("fs");
7
+ const c$1 = require("path");
8
+ const mongodb = require("mongodb");
9
+ const dotenv = require("dotenv");
10
+ const url = require("url");
11
+ var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
12
+ function _interopNamespaceDefault(e) {
13
+ const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
14
+ if (e) {
15
+ for (const k2 in e) {
16
+ if (k2 !== "default") {
17
+ const d = Object.getOwnPropertyDescriptor(e, k2);
18
+ Object.defineProperty(n2, k2, d.get ? d : {
19
+ enumerable: true,
20
+ get: () => e[k2]
21
+ });
22
+ }
23
+ }
24
+ }
25
+ n2.default = e;
26
+ return Object.freeze(n2);
27
+ }
28
+ const s__namespace = /* @__PURE__ */ _interopNamespaceDefault(s$1);
29
+ const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$1);
30
+ const dotenv__namespace = /* @__PURE__ */ _interopNamespaceDefault(dotenv);
31
+ var S = Object.defineProperty;
32
+ var p$1 = (i2, a2, e) => a2 in i2 ? S(i2, a2, { enumerable: true, configurable: true, writable: true, value: e }) : i2[a2] = e;
33
+ var E$1 = (i2, a2, e) => p$1(i2, typeof a2 != "symbol" ? a2 + "" : a2, e);
34
+ var n$1 = /* @__PURE__ */ ((i2) => (i2.PUSH = "PUSH", i2.POP = "POP", i2.LOAD = "LOAD", i2.STORE = "STORE", i2.CONCAT = "CONCAT", i2.ARRAY_NEW = "ARRAY_NEW", i2.ARRAY_PUSH = "ARRAY_PUSH", i2.ARRAY_GET = "ARRAY_GET", i2.ARRAY_SET = "ARRAY_SET", i2.ARRAY_LEN = "ARRAY_LEN", i2.STRING_LEN = "STRING_LEN", i2.LENGTH = "LENGTH", i2.JSON_PARSE = "JSON_PARSE", i2.TYPEOF = "TYPEOF", i2.ADD = "ADD", i2.SUB = "SUB", i2.MUL = "MUL", i2.DIV = "DIV", i2.MOD = "MOD", i2.EQ = "EQ", i2.NEQ = "NEQ", i2.LT = "LT", i2.GT = "GT", i2.LTE = "LTE", i2.GTE = "GTE", i2.EQ_STRICT = "EQ_STRICT", i2.NEQ_STRICT = "NEQ_STRICT", i2.JUMP = "JUMP", i2.JUMP_IF = "JUMP_IF", i2.JUMP_IF_FALSE = "JUMP_IF_FALSE", i2.JUMP_IF_TRUE = "JUMP_IF_TRUE", i2.CALL = "CALL", i2.RETURN = "RETURN", i2.AND = "AND", i2.OR = "OR", i2.NOT = "NOT", i2.BREAK = "BREAK", i2.CONTINUE = "CONTINUE", i2.ITER_START = "ITER_START", i2.ITER_NEXT = "ITER_NEXT", i2.ITER_END = "ITER_END", i2.FS_LIST_FILES = "FS_LIST_FILES", i2.CC = "CC", i2.PRINT = "PRINT", i2.HALT = "HALT", i2))(n$1 || {});
35
+ function A(i2) {
36
+ const a2 = [], e = [];
37
+ let x = false, m2 = false;
38
+ const c2 = s__namespace.createSourceFile(
39
+ "program.ts",
40
+ i2,
41
+ s__namespace.ScriptTarget.Latest,
42
+ true
43
+ );
44
+ function t2(r2) {
45
+ if (s__namespace.isFunctionDeclaration(r2) && r2.name && r2.name.text === "main" && (x = true, r2.parameters.length > 0 && a2.push("main() must not have parameters")), s__namespace.isExpressionStatement(r2) && r2.parent === c2) {
46
+ const l2 = r2.expression;
47
+ s__namespace.isCallExpression(l2) && s__namespace.isIdentifier(l2.expression) && l2.expression.text === "main" && (m2 = true);
48
+ }
49
+ if (s__namespace.isCallExpression(r2) && s__namespace.isIdentifier(r2.expression)) {
50
+ const l2 = r2.expression.text;
51
+ ["setTimeout", "fetch", "require", "import"].includes(l2) && a2.push(`Unsupported function: ${l2}`);
52
+ }
53
+ s__namespace.forEachChild(r2, t2);
54
+ }
55
+ return t2(c2), x || a2.push("Program must have a main() function"), x && !m2 && a2.push("main() must be called at the top level"), a2.length === 0 && e.push({ op: n$1.HALT }), {
56
+ bytecode: e,
57
+ errors: a2,
58
+ hasMain: x
59
+ };
60
+ }
61
+ let h$1 = class h {
62
+ constructor() {
63
+ E$1(this, "bytecode", []);
64
+ E$1(this, "contextStack", []);
65
+ }
66
+ /**
67
+ * Emit an instruction and return its index
68
+ */
69
+ emit(a2, e) {
70
+ const x = this.bytecode.length;
71
+ return this.bytecode.push({ op: a2, arg: e }), x;
72
+ }
73
+ /**
74
+ * Get the current address (next instruction index)
75
+ */
76
+ currentAddress() {
77
+ return this.bytecode.length;
78
+ }
79
+ /**
80
+ * Patch a jump instruction with the target address
81
+ */
82
+ patchJump(a2, e) {
83
+ a2 >= 0 && a2 < this.bytecode.length && (this.bytecode[a2].arg = e);
84
+ }
85
+ /**
86
+ * Patch multiple jump instructions with the same target
87
+ */
88
+ patchJumps(a2, e) {
89
+ a2.forEach((x) => this.patchJump(x, e));
90
+ }
91
+ /**
92
+ * Push a new jump context onto the stack
93
+ */
94
+ pushContext(a2) {
95
+ this.contextStack.push(a2);
96
+ }
97
+ /**
98
+ * Pop the current jump context from the stack
99
+ */
100
+ popContext() {
101
+ return this.contextStack.pop() || null;
102
+ }
103
+ /**
104
+ * Get the current context without removing it
105
+ */
106
+ getCurrentContext() {
107
+ return this.contextStack.length > 0 ? this.contextStack[this.contextStack.length - 1] : null;
108
+ }
109
+ /**
110
+ * Find the nearest loop context (for break/continue)
111
+ */
112
+ findLoopContext() {
113
+ for (let a2 = this.contextStack.length - 1; a2 >= 0; a2--)
114
+ if (this.contextStack[a2].type === "loop")
115
+ return this.contextStack[a2];
116
+ return null;
117
+ }
118
+ /**
119
+ * Get the final bytecode array
120
+ */
121
+ getBytecode() {
122
+ return this.bytecode;
123
+ }
124
+ /**
125
+ * Check if compilation is in a valid state
126
+ */
127
+ isValid() {
128
+ return this.contextStack.length === 0;
129
+ }
130
+ /**
131
+ * Get any unclosed contexts (for error reporting)
132
+ */
133
+ getUnclosedContexts() {
134
+ return [...this.contextStack];
135
+ }
136
+ };
137
+ function k(i2) {
138
+ const a2 = A(i2);
139
+ if (a2.errors.length > 0)
140
+ return {
141
+ success: false,
142
+ bytecode: [],
143
+ errors: a2.errors
144
+ };
145
+ const e = new h$1(), x = s__namespace.createSourceFile("program.ts", i2, s__namespace.ScriptTarget.Latest, true);
146
+ function m2(t2) {
147
+ if (s__namespace.isIfStatement(t2)) {
148
+ c2(t2.expression);
149
+ const r2 = e.emit(n$1.JUMP_IF_FALSE, -1), l2 = {
150
+ type: "if",
151
+ endTargets: []
152
+ };
153
+ if (t2.elseStatement ? l2.elseTarget = r2 : l2.endTargets.push(r2), e.pushContext(l2), m2(t2.thenStatement), t2.elseStatement) {
154
+ const o2 = e.emit(n$1.JUMP, -1);
155
+ l2.endTargets.push(o2);
156
+ const u2 = e.currentAddress();
157
+ e.patchJump(r2, u2), m2(t2.elseStatement);
158
+ }
159
+ const T2 = e.popContext();
160
+ if (T2) {
161
+ const o2 = e.currentAddress();
162
+ e.patchJumps(T2.endTargets, o2);
163
+ }
164
+ } else if (s__namespace.isWhileStatement(t2)) {
165
+ const r2 = e.currentAddress();
166
+ c2(t2.expression);
167
+ const T2 = {
168
+ type: "loop",
169
+ breakTargets: [e.emit(n$1.JUMP_IF_FALSE, -1)],
170
+ continueTargets: [],
171
+ endTargets: [],
172
+ startAddress: r2
173
+ };
174
+ e.pushContext(T2), m2(t2.statement), e.emit(n$1.JUMP, r2);
175
+ const o2 = e.popContext();
176
+ if (o2) {
177
+ const u2 = e.currentAddress();
178
+ e.patchJumps(o2.breakTargets || [], u2);
179
+ }
180
+ } else if (s__namespace.isBlock(t2))
181
+ t2.statements.forEach((r2) => {
182
+ m2(r2);
183
+ });
184
+ else if (s__namespace.isExpressionStatement(t2)) {
185
+ const r2 = t2.expression;
186
+ if (s__namespace.isCallExpression(r2) && s__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.expression.getText() === "console" && r2.expression.name.getText() === "log")
187
+ r2.arguments.forEach((l2) => {
188
+ c2(l2);
189
+ }), e.emit(n$1.PRINT);
190
+ else if (s__namespace.isCallExpression(r2) && s__namespace.isIdentifier(r2.expression) && r2.expression.text === "CC")
191
+ r2.arguments.length > 0 && c2(r2.arguments[0]), e.emit(n$1.CC), e.emit(n$1.POP);
192
+ else if (s__namespace.isCallExpression(r2) && s__namespace.isPropertyAccessExpression(r2.expression) && r2.expression.name.getText() === "push")
193
+ c2(r2.expression.expression), r2.arguments.length > 0 && c2(r2.arguments[0]), e.emit(n$1.ARRAY_PUSH);
194
+ else if (s__namespace.isBinaryExpression(r2) && r2.operatorToken.kind === s__namespace.SyntaxKind.EqualsToken) {
195
+ if (c2(r2.right), s__namespace.isIdentifier(r2.left))
196
+ e.emit(n$1.STORE, r2.left.text);
197
+ else if (s__namespace.isElementAccessExpression(r2.left)) {
198
+ const l2 = `__temp_${e.getBytecode().length}`;
199
+ e.emit(n$1.STORE, l2), c2(r2.left.expression), c2(r2.left.argumentExpression), e.emit(n$1.LOAD, l2), e.emit(n$1.ARRAY_SET);
200
+ }
201
+ }
202
+ } else if (s__namespace.isVariableStatement(t2)) {
203
+ const r2 = t2.declarationList.declarations[0];
204
+ r2.initializer && (c2(r2.initializer), e.emit(n$1.STORE, r2.name.getText()));
205
+ } else s__namespace.isReturnStatement(t2) && (t2.expression ? c2(t2.expression) : e.emit(n$1.PUSH, null), e.emit(n$1.RETURN));
206
+ }
207
+ function c2(t2) {
208
+ if (s__namespace.isStringLiteral(t2))
209
+ e.emit(n$1.PUSH, t2.text);
210
+ else if (s__namespace.isNumericLiteral(t2))
211
+ e.emit(n$1.PUSH, Number(t2.text));
212
+ else if (t2.kind === s__namespace.SyntaxKind.TrueKeyword)
213
+ e.emit(n$1.PUSH, true);
214
+ else if (t2.kind === s__namespace.SyntaxKind.FalseKeyword)
215
+ e.emit(n$1.PUSH, false);
216
+ else if (t2.kind === s__namespace.SyntaxKind.NullKeyword)
217
+ e.emit(n$1.PUSH, null);
218
+ else if (s__namespace.isArrayLiteralExpression(t2))
219
+ e.emit(n$1.ARRAY_NEW), t2.elements.forEach((r2) => {
220
+ c2(r2), e.emit(n$1.ARRAY_PUSH);
221
+ });
222
+ else if (s__namespace.isElementAccessExpression(t2))
223
+ c2(t2.expression), t2.argumentExpression && c2(t2.argumentExpression), e.emit(n$1.ARRAY_GET);
224
+ else if (s__namespace.isPropertyAccessExpression(t2) && t2.name.text === "length")
225
+ c2(t2.expression), e.emit(n$1.LENGTH);
226
+ else if (s__namespace.isIdentifier(t2))
227
+ e.emit(n$1.LOAD, t2.text);
228
+ else if (s__namespace.isCallExpression(t2))
229
+ s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse" ? (t2.arguments.length > 0 && c2(t2.arguments[0]), e.emit(n$1.JSON_PARSE)) : s__namespace.isIdentifier(t2.expression) && t2.expression.text === "CC" && (t2.arguments.length > 0 && c2(t2.arguments[0]), e.emit(n$1.CC));
230
+ else if (s__namespace.isParenthesizedExpression(t2))
231
+ c2(t2.expression);
232
+ else if (s__namespace.isBinaryExpression(t2)) {
233
+ const r2 = t2.operatorToken.kind;
234
+ switch (c2(t2.left), c2(t2.right), r2) {
235
+ case s__namespace.SyntaxKind.PlusToken:
236
+ f$1(t2.left, t2.right) ? e.emit(n$1.CONCAT) : e.emit(n$1.ADD);
237
+ break;
238
+ case s__namespace.SyntaxKind.MinusToken:
239
+ e.emit(n$1.SUB);
240
+ break;
241
+ case s__namespace.SyntaxKind.AsteriskToken:
242
+ e.emit(n$1.MUL);
243
+ break;
244
+ case s__namespace.SyntaxKind.SlashToken:
245
+ e.emit(n$1.DIV);
246
+ break;
247
+ case s__namespace.SyntaxKind.PercentToken:
248
+ e.emit(n$1.MOD);
249
+ break;
250
+ case s__namespace.SyntaxKind.EqualsEqualsToken:
251
+ e.emit(n$1.EQ);
252
+ break;
253
+ case s__namespace.SyntaxKind.ExclamationEqualsToken:
254
+ e.emit(n$1.NEQ);
255
+ break;
256
+ case s__namespace.SyntaxKind.LessThanToken:
257
+ e.emit(n$1.LT);
258
+ break;
259
+ case s__namespace.SyntaxKind.GreaterThanToken:
260
+ e.emit(n$1.GT);
261
+ break;
262
+ case s__namespace.SyntaxKind.LessThanEqualsToken:
263
+ e.emit(n$1.LTE);
264
+ break;
265
+ case s__namespace.SyntaxKind.GreaterThanEqualsToken:
266
+ e.emit(n$1.GTE);
267
+ break;
268
+ case s__namespace.SyntaxKind.EqualsEqualsEqualsToken:
269
+ e.emit(n$1.EQ_STRICT);
270
+ break;
271
+ case s__namespace.SyntaxKind.ExclamationEqualsEqualsToken:
272
+ e.emit(n$1.NEQ_STRICT);
273
+ break;
274
+ case s__namespace.SyntaxKind.AmpersandAmpersandToken:
275
+ e.emit(n$1.AND);
276
+ break;
277
+ case s__namespace.SyntaxKind.BarBarToken:
278
+ e.emit(n$1.OR);
279
+ break;
280
+ }
281
+ } else if (s__namespace.isPrefixUnaryExpression(t2))
282
+ switch (t2.operator) {
283
+ case s__namespace.SyntaxKind.ExclamationToken:
284
+ c2(t2.operand), e.emit(n$1.NOT);
285
+ break;
286
+ }
287
+ else s__namespace.isTypeOfExpression(t2) && (c2(t2.expression), e.emit(n$1.TYPEOF));
288
+ }
289
+ return x.forEachChild((t2) => {
290
+ var r2;
291
+ s__namespace.isFunctionDeclaration(t2) && ((r2 = t2.name) == null ? void 0 : r2.text) === "main" && t2.body && t2.body.statements.forEach((l2) => {
292
+ m2(l2);
293
+ });
294
+ }), e.emit(n$1.HALT), {
295
+ success: true,
296
+ bytecode: e.getBytecode(),
297
+ errors: []
298
+ };
299
+ }
300
+ function f$1(i2, a2) {
301
+ return !!(s__namespace.isStringLiteral(i2) || s__namespace.isStringLiteral(a2) || s__namespace.isBinaryExpression(i2) && i2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && f$1(i2.left, i2.right) || s__namespace.isBinaryExpression(a2) && a2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && f$1(a2.left, a2.right));
302
+ }
303
+ function n(r2) {
304
+ return typeof r2 == "string";
305
+ }
306
+ function t(r2) {
307
+ return typeof r2 == "number";
308
+ }
309
+ function i$1(r2) {
310
+ return typeof r2 == "boolean";
311
+ }
312
+ function f(r2) {
313
+ return r2 === null;
314
+ }
315
+ function o$1(r2) {
316
+ return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "array";
317
+ }
318
+ function u$1(r2) {
319
+ return n(r2) ? r2 : t(r2) || i$1(r2) ? r2.toString() : f(r2) ? "null" : o$1(r2) ? `[array:${r2.elements.length}]` : String(r2);
320
+ }
321
+ function c(r2) {
322
+ return i$1(r2) ? r2 : f(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : o$1(r2) ? true : !!r2;
323
+ }
324
+ function m(r2) {
325
+ return n(r2) ? "string" : t(r2) ? "number" : i$1(r2) ? "boolean" : f(r2) ? "null" : o$1(r2) ? "array" : "unknown";
326
+ }
327
+ function y(r2) {
328
+ if (t(r2)) return r2;
329
+ if (i$1(r2)) return r2 ? 1 : 0;
330
+ if (f(r2)) return 0;
331
+ if (n(r2)) {
332
+ const e = r2.trim();
333
+ return e === "" ? NaN : Number(e);
334
+ }
335
+ return o$1(r2) ? NaN : Number(r2);
336
+ }
337
+ function s(r2 = []) {
338
+ return { type: "array", elements: r2 };
339
+ }
340
+ var l = Object.defineProperty;
341
+ var u = (s2, t2, n2) => t2 in s2 ? l(s2, t2, { enumerable: true, configurable: true, writable: true, value: n2 }) : s2[t2] = n2;
342
+ var r = (s2, t2, n2) => u(s2, typeof t2 != "symbol" ? t2 + "" : t2, n2);
343
+ class h2 {
344
+ constructor(t2) {
345
+ r(this, "connected", false);
346
+ r(this, "programsDir");
347
+ r(this, "executionsDir");
348
+ r(this, "outputsDir");
349
+ this.dataDir = t2, this.programsDir = c__namespace.join(t2, "programs"), this.executionsDir = c__namespace.join(t2, "executions"), this.outputsDir = c__namespace.join(t2, "outputs");
350
+ }
351
+ async connect() {
352
+ await fs.promises.mkdir(this.dataDir, { recursive: true }), await fs.promises.mkdir(this.programsDir, { recursive: true }), await fs.promises.mkdir(this.executionsDir, { recursive: true }), await fs.promises.mkdir(this.outputsDir, { recursive: true }), this.connected = true;
353
+ }
354
+ async disconnect() {
355
+ this.connected = false;
356
+ }
357
+ isConnected() {
358
+ return this.connected;
359
+ }
360
+ async saveProgram(t2) {
361
+ if (!this.connected) throw new Error("Not connected");
362
+ const n2 = c__namespace.join(this.programsDir, `${t2.id}.json`), e = JSON.stringify(t2, null, 2);
363
+ await fs.promises.writeFile(n2, e, "utf-8");
364
+ }
365
+ async getProgram(t2) {
366
+ if (!this.connected) throw new Error("Not connected");
367
+ const n2 = c__namespace.join(this.programsDir, `${t2}.json`);
368
+ try {
369
+ const e = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e);
370
+ return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
371
+ } catch (e) {
372
+ if (e.code === "ENOENT")
373
+ return null;
374
+ throw e;
375
+ }
376
+ }
377
+ async saveExecution(t2) {
378
+ if (!this.connected) throw new Error("Not connected");
379
+ const n2 = c__namespace.join(this.executionsDir, `${t2.id}.json`), e = JSON.stringify(t2, null, 2);
380
+ await fs.promises.writeFile(n2, e, "utf-8");
381
+ }
382
+ async getExecution(t2) {
383
+ if (!this.connected) throw new Error("Not connected");
384
+ const n2 = c__namespace.join(this.executionsDir, `${t2}.json`);
385
+ try {
386
+ const e = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e);
387
+ return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
388
+ } catch (e) {
389
+ if (e.code === "ENOENT")
390
+ return null;
391
+ throw e;
392
+ }
393
+ }
394
+ async appendOutput(t2, n2) {
395
+ if (!this.connected) throw new Error("Not connected");
396
+ const e = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
397
+ `) + `
398
+ `;
399
+ await fs.promises.appendFile(e, o2, "utf-8");
400
+ }
401
+ async getOutput(t2) {
402
+ if (!this.connected) throw new Error("Not connected");
403
+ const n2 = c__namespace.join(this.outputsDir, `${t2}.output`);
404
+ try {
405
+ return (await fs.promises.readFile(n2, "utf-8")).split(`
406
+ `).filter((o2) => o2.length > 0);
407
+ } catch (e) {
408
+ if (e.code === "ENOENT")
409
+ return [];
410
+ throw e;
411
+ }
412
+ }
413
+ }
414
+ class p {
415
+ constructor(t2) {
416
+ r(this, "client");
417
+ r(this, "db", null);
418
+ r(this, "connected", false);
419
+ this.connectionString = t2, this.client = new mongodb.MongoClient(t2);
420
+ }
421
+ async connect() {
422
+ var o2;
423
+ await this.client.connect();
424
+ const t2 = ((o2 = this.connectionString.split("/").pop()) == null ? void 0 : o2.split("?")[0]) || "cvm";
425
+ this.db = this.client.db(t2), this.connected = true;
426
+ const e = (await this.db.listCollections().toArray()).map((a2) => a2.name);
427
+ e.includes("programs") || await this.db.createCollection("programs"), e.includes("executions") || await this.db.createCollection("executions"), e.includes("outputs") || await this.db.createCollection("outputs");
428
+ }
429
+ async disconnect() {
430
+ await this.client.close(), this.connected = false, this.db = null;
431
+ }
432
+ isConnected() {
433
+ return this.connected;
434
+ }
435
+ async getCollections() {
436
+ if (!this.db) throw new Error("Not connected to database");
437
+ return (await this.db.listCollections().toArray()).map((n2) => n2.name);
438
+ }
439
+ getCollection(t2) {
440
+ if (!this.db) throw new Error("Not connected to database");
441
+ return this.db.collection(t2);
442
+ }
443
+ async saveProgram(t2) {
444
+ await this.getCollection("programs").replaceOne(
445
+ { id: t2.id },
446
+ t2,
447
+ { upsert: true }
448
+ );
449
+ }
450
+ async getProgram(t2) {
451
+ return await this.getCollection("programs").findOne({ id: t2 });
452
+ }
453
+ async saveExecution(t2) {
454
+ await this.getCollection("executions").replaceOne(
455
+ { id: t2.id },
456
+ t2,
457
+ { upsert: true }
458
+ );
459
+ }
460
+ async getExecution(t2) {
461
+ return await this.getCollection("executions").findOne({ id: t2 });
462
+ }
463
+ async appendOutput(t2, n2) {
464
+ const e = this.getCollection("outputs");
465
+ await e.findOne({ executionId: t2 }) ? await e.updateOne(
466
+ { executionId: t2 },
467
+ { $push: { lines: { $each: n2 } } }
468
+ ) : await e.insertOne({ executionId: t2, lines: n2 });
469
+ }
470
+ async getOutput(t2) {
471
+ const e = await this.getCollection("outputs").findOne({ executionId: t2 });
472
+ return (e == null ? void 0 : e.lines) || [];
473
+ }
474
+ }
475
+ class g {
476
+ static create(t2) {
477
+ const n2 = (t2 == null ? void 0 : t2.type) || process.env.CVM_STORAGE_TYPE || "file";
478
+ switch (n2) {
479
+ case "file": {
480
+ const e = (t2 == null ? void 0 : t2.dataDir) || process.env.CVM_DATA_DIR || ".cvm";
481
+ return new h2(e);
482
+ }
483
+ case "mongodb": {
484
+ const e = (t2 == null ? void 0 : t2.mongoUri) || process.env.MONGODB_URI || "mongodb://localhost:27017/cvm";
485
+ return new p(e);
486
+ }
487
+ default:
488
+ throw new Error(`Unsupported storage type: ${n2}`);
489
+ }
490
+ }
491
+ }
492
+ var R = Object.defineProperty;
493
+ var T = (d, a2, s2) => a2 in d ? R(d, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : d[a2] = s2;
494
+ var v$1 = (d, a2, s2) => T(d, typeof a2 != "symbol" ? a2 + "" : a2, s2);
495
+ class E {
496
+ execute(a2, s$12) {
497
+ const r2 = {
498
+ pc: (s$12 == null ? void 0 : s$12.pc) ?? 0,
499
+ stack: (s$12 == null ? void 0 : s$12.stack) ?? [],
500
+ variables: (s$12 == null ? void 0 : s$12.variables) ?? /* @__PURE__ */ new Map(),
501
+ status: "running",
502
+ output: (s$12 == null ? void 0 : s$12.output) ?? [],
503
+ iterators: (s$12 == null ? void 0 : s$12.iterators) ?? [],
504
+ ...s$12
505
+ };
506
+ for (; r2.status === "running" && r2.pc < a2.length; ) {
507
+ const i2 = a2[r2.pc];
508
+ switch (i2.op) {
509
+ case n$1.HALT:
510
+ r2.status = "complete";
511
+ break;
512
+ case n$1.PUSH:
513
+ r2.stack.push(i2.arg), r2.pc++;
514
+ break;
515
+ case n$1.POP:
516
+ r2.stack.pop(), r2.pc++;
517
+ break;
518
+ case n$1.LOAD: {
519
+ const t2 = i2.arg;
520
+ if (!r2.variables.has(t2)) {
521
+ r2.status = "error", r2.error = `LOAD: Variable '${t2}' is not defined`;
522
+ break;
523
+ }
524
+ r2.stack.push(r2.variables.get(t2)), r2.pc++;
525
+ break;
526
+ }
527
+ case n$1.STORE:
528
+ const f2 = r2.stack.pop();
529
+ if (f2 === void 0) {
530
+ r2.status = "error", r2.error = "STORE: Stack underflow";
531
+ break;
532
+ }
533
+ r2.variables.set(i2.arg, f2), r2.pc++;
534
+ break;
535
+ case n$1.CONCAT:
536
+ const u2 = r2.stack.pop(), k2 = r2.stack.pop();
537
+ if (k2 === void 0 || u2 === void 0) {
538
+ r2.status = "error", r2.error = "CONCAT: Stack underflow";
539
+ break;
540
+ }
541
+ r2.stack.push(u$1(k2) + u$1(u2)), r2.pc++;
542
+ break;
543
+ case n$1.PRINT:
544
+ const w = r2.stack.pop();
545
+ w !== void 0 && r2.output.push(u$1(w)), r2.pc++;
546
+ break;
547
+ case n$1.CC: {
548
+ const t2 = r2.stack.pop();
549
+ if (t2 === void 0) {
550
+ r2.status = "error", r2.error = "CC: Stack underflow";
551
+ break;
552
+ }
553
+ r2.ccPrompt = u$1(t2), r2.status = "waiting_cc";
554
+ break;
555
+ }
556
+ // Array operations
557
+ case n$1.ARRAY_NEW:
558
+ r2.stack.push(s()), r2.pc++;
559
+ break;
560
+ case n$1.ARRAY_PUSH: {
561
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
562
+ if (t2 === void 0 || e === void 0) {
563
+ r2.status = "error", r2.error = "ARRAY_PUSH: Stack underflow";
564
+ break;
565
+ }
566
+ if (!o$1(e)) {
567
+ r2.status = "error", r2.error = "ARRAY_PUSH requires an array";
568
+ break;
569
+ }
570
+ e.elements.push(t2), r2.stack.push(e), r2.pc++;
571
+ break;
572
+ }
573
+ case n$1.ARRAY_GET: {
574
+ const t$1 = r2.stack.pop(), e = r2.stack.pop();
575
+ if (t$1 === void 0 || e === void 0) {
576
+ r2.status = "error", r2.error = "ARRAY_GET: Stack underflow";
577
+ break;
578
+ }
579
+ if (!o$1(e)) {
580
+ r2.status = "error", r2.error = "ARRAY_GET requires an array";
581
+ break;
582
+ }
583
+ if (!t(t$1)) {
584
+ r2.status = "error", r2.error = "ARRAY_GET requires numeric index";
585
+ break;
586
+ }
587
+ const c2 = e.elements[t$1] ?? null;
588
+ r2.stack.push(c2), r2.pc++;
589
+ break;
590
+ }
591
+ case n$1.ARRAY_SET: {
592
+ const t$1 = r2.stack.pop(), e = r2.stack.pop(), c2 = r2.stack.pop();
593
+ if (t$1 === void 0 || e === void 0 || c2 === void 0) {
594
+ r2.status = "error", r2.error = "ARRAY_SET: Stack underflow";
595
+ break;
596
+ }
597
+ if (!o$1(c2)) {
598
+ r2.status = "error", r2.error = "ARRAY_SET requires an array";
599
+ break;
600
+ }
601
+ if (!t(e)) {
602
+ r2.status = "error", r2.error = "ARRAY_SET requires numeric index";
603
+ break;
604
+ }
605
+ const n2 = Math.floor(e);
606
+ if (n2 < 0) {
607
+ r2.status = "error", r2.error = "ARRAY_SET: Negative index not allowed";
608
+ break;
609
+ }
610
+ c2.elements[n2] = t$1, r2.pc++;
611
+ break;
612
+ }
613
+ case n$1.ARRAY_LEN: {
614
+ const t2 = r2.stack.pop();
615
+ if (t2 === void 0) {
616
+ r2.status = "error", r2.error = "ARRAY_LEN: Stack underflow";
617
+ break;
618
+ }
619
+ if (!o$1(t2)) {
620
+ r2.status = "error", r2.error = "ARRAY_LEN requires an array";
621
+ break;
622
+ }
623
+ r2.stack.push(t2.elements.length), r2.pc++;
624
+ break;
625
+ }
626
+ case n$1.STRING_LEN: {
627
+ const t2 = r2.stack.pop();
628
+ if (t2 === void 0) {
629
+ r2.status = "error", r2.error = "STRING_LEN: Stack underflow";
630
+ break;
631
+ }
632
+ if (!n(t2)) {
633
+ r2.status = "error", r2.error = "STRING_LEN requires a string";
634
+ break;
635
+ }
636
+ r2.stack.push(t2.length), r2.pc++;
637
+ break;
638
+ }
639
+ case n$1.LENGTH: {
640
+ const t2 = r2.stack.pop();
641
+ if (t2 === void 0) {
642
+ r2.status = "error", r2.error = "LENGTH: Stack underflow";
643
+ break;
644
+ }
645
+ if (n(t2))
646
+ r2.stack.push(t2.length);
647
+ else if (o$1(t2))
648
+ r2.stack.push(t2.elements.length);
649
+ else {
650
+ r2.status = "error", r2.error = "LENGTH requires a string or array";
651
+ break;
652
+ }
653
+ r2.pc++;
654
+ break;
655
+ }
656
+ case n$1.JSON_PARSE: {
657
+ const t2 = r2.stack.pop();
658
+ if (t2 === void 0) {
659
+ r2.status = "error", r2.error = "JSON_PARSE: Stack underflow";
660
+ break;
661
+ }
662
+ if (!n(t2)) {
663
+ r2.status = "error", r2.error = "JSON_PARSE requires a string";
664
+ break;
665
+ }
666
+ try {
667
+ const e = JSON.parse(t2);
668
+ Array.isArray(e) ? r2.stack.push(s(e)) : r2.stack.push(s());
669
+ } catch {
670
+ r2.stack.push(s());
671
+ }
672
+ r2.pc++;
673
+ break;
674
+ }
675
+ case n$1.TYPEOF: {
676
+ const t2 = r2.stack.pop();
677
+ if (t2 === void 0) {
678
+ r2.status = "error", r2.error = "TYPEOF: Stack underflow";
679
+ break;
680
+ }
681
+ r2.stack.push(m(t2)), r2.pc++;
682
+ break;
683
+ }
684
+ // Arithmetic operations
685
+ case n$1.ADD: {
686
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
687
+ if (e === void 0 || t2 === void 0) {
688
+ r2.status = "error", r2.error = "ADD: Stack underflow";
689
+ break;
690
+ }
691
+ const c2 = y(e), n2 = y(t2);
692
+ r2.stack.push(c2 + n2), r2.pc++;
693
+ break;
694
+ }
695
+ case n$1.SUB: {
696
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
697
+ if (e === void 0 || t2 === void 0) {
698
+ r2.status = "error", r2.error = "SUB: Stack underflow";
699
+ break;
700
+ }
701
+ const c2 = y(e), n2 = y(t2);
702
+ r2.stack.push(c2 - n2), r2.pc++;
703
+ break;
704
+ }
705
+ case n$1.MUL: {
706
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
707
+ if (e === void 0 || t2 === void 0) {
708
+ r2.status = "error", r2.error = "MUL: Stack underflow";
709
+ break;
710
+ }
711
+ const c2 = y(e), n2 = y(t2);
712
+ r2.stack.push(c2 * n2), r2.pc++;
713
+ break;
714
+ }
715
+ case n$1.DIV: {
716
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
717
+ if (e === void 0 || t2 === void 0) {
718
+ r2.status = "error", r2.error = "DIV: Stack underflow";
719
+ break;
720
+ }
721
+ const c2 = y(e), n2 = y(t2);
722
+ if (n2 === 0) {
723
+ r2.status = "error", r2.error = "Division by zero";
724
+ break;
725
+ }
726
+ r2.stack.push(c2 / n2), r2.pc++;
727
+ break;
728
+ }
729
+ case n$1.MOD: {
730
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
731
+ if (e === void 0 || t2 === void 0) {
732
+ r2.status = "error", r2.error = "MOD: Stack underflow";
733
+ break;
734
+ }
735
+ const c2 = y(e), n2 = y(t2);
736
+ r2.stack.push(c2 % n2), r2.pc++;
737
+ break;
738
+ }
739
+ // Comparison operations
740
+ case n$1.EQ: {
741
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
742
+ if (e === void 0 || t2 === void 0) {
743
+ r2.status = "error", r2.error = "EQ: Stack underflow";
744
+ break;
745
+ }
746
+ const c2 = y(e), n2 = y(t2);
747
+ !isNaN(c2) && !isNaN(n2) ? r2.stack.push(c2 === n2) : r2.stack.push(u$1(e) === u$1(t2)), r2.pc++;
748
+ break;
749
+ }
750
+ case n$1.NEQ: {
751
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
752
+ if (e === void 0 || t2 === void 0) {
753
+ r2.status = "error", r2.error = "NEQ: Stack underflow";
754
+ break;
755
+ }
756
+ const c2 = y(e), n2 = y(t2);
757
+ !isNaN(c2) && !isNaN(n2) ? r2.stack.push(c2 !== n2) : r2.stack.push(u$1(e) !== u$1(t2)), r2.pc++;
758
+ break;
759
+ }
760
+ case n$1.LT: {
761
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
762
+ if (e === void 0 || t2 === void 0) {
763
+ r2.status = "error", r2.error = "LT: Stack underflow";
764
+ break;
765
+ }
766
+ const c2 = y(e), n2 = y(t2);
767
+ r2.stack.push(c2 < n2), r2.pc++;
768
+ break;
769
+ }
770
+ case n$1.GT: {
771
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
772
+ if (e === void 0 || t2 === void 0) {
773
+ r2.status = "error", r2.error = "GT: Stack underflow";
774
+ break;
775
+ }
776
+ const c2 = y(e), n2 = y(t2);
777
+ r2.stack.push(c2 > n2), r2.pc++;
778
+ break;
779
+ }
780
+ case n$1.LTE: {
781
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
782
+ if (e === void 0 || t2 === void 0) {
783
+ r2.status = "error", r2.error = "LTE: Stack underflow";
784
+ break;
785
+ }
786
+ const c2 = y(e), n2 = y(t2);
787
+ r2.stack.push(c2 <= n2), r2.pc++;
788
+ break;
789
+ }
790
+ case n$1.GTE: {
791
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
792
+ if (e === void 0 || t2 === void 0) {
793
+ r2.status = "error", r2.error = "GTE: Stack underflow";
794
+ break;
795
+ }
796
+ const c2 = y(e), n2 = y(t2);
797
+ r2.stack.push(c2 >= n2), r2.pc++;
798
+ break;
799
+ }
800
+ case n$1.EQ_STRICT: {
801
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
802
+ if (e === void 0 || t2 === void 0) {
803
+ r2.status = "error", r2.error = "EQ_STRICT: Stack underflow";
804
+ break;
805
+ }
806
+ r2.stack.push(e === t2), r2.pc++;
807
+ break;
808
+ }
809
+ case n$1.NEQ_STRICT: {
810
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
811
+ if (e === void 0 || t2 === void 0) {
812
+ r2.status = "error", r2.error = "NEQ_STRICT: Stack underflow";
813
+ break;
814
+ }
815
+ r2.stack.push(e !== t2), r2.pc++;
816
+ break;
817
+ }
818
+ // Jump operations
819
+ case n$1.JUMP: {
820
+ if (i2.arg === void 0) {
821
+ r2.status = "error", r2.error = "JUMP requires a target address";
822
+ break;
823
+ }
824
+ const t2 = i2.arg;
825
+ if (t2 < 0 || t2 >= a2.length) {
826
+ r2.status = "error", r2.error = `Invalid jump target: ${t2}`;
827
+ break;
828
+ }
829
+ r2.pc = t2;
830
+ break;
831
+ }
832
+ case n$1.JUMP_IF_FALSE: {
833
+ const t2 = r2.stack.pop();
834
+ if (t2 === void 0) {
835
+ r2.status = "error", r2.error = "JUMP_IF_FALSE: Stack underflow";
836
+ break;
837
+ }
838
+ if (i2.arg === void 0) {
839
+ r2.status = "error", r2.error = "JUMP_IF_FALSE requires a target address";
840
+ break;
841
+ }
842
+ const e = i2.arg;
843
+ if (e < 0 || e >= a2.length) {
844
+ r2.status = "error", r2.error = `Invalid jump target: ${e}`;
845
+ break;
846
+ }
847
+ c(t2) ? r2.pc++ : r2.pc = e;
848
+ break;
849
+ }
850
+ case n$1.ITER_START: {
851
+ if (r2.stack.length === 0) {
852
+ r2.status = "error", r2.error = "ITER_START: Stack underflow";
853
+ break;
854
+ }
855
+ const t2 = r2.stack.pop();
856
+ if (t2 == null) {
857
+ r2.status = "error", r2.error = "TypeError: Cannot iterate over null or undefined";
858
+ break;
859
+ }
860
+ if (!o$1(t2)) {
861
+ r2.status = "error", r2.error = "TypeError: Cannot iterate over non-array value";
862
+ break;
863
+ }
864
+ if (r2.iterators.length >= 10) {
865
+ r2.status = "error", r2.error = "RuntimeError: Maximum iterator depth exceeded";
866
+ break;
867
+ }
868
+ const e = s([...t2.elements]);
869
+ r2.iterators.push({
870
+ array: e,
871
+ index: 0
872
+ }), r2.pc++;
873
+ break;
874
+ }
875
+ case n$1.ITER_NEXT: {
876
+ if (r2.iterators.length === 0) {
877
+ r2.status = "error", r2.error = "ITER_NEXT: No active iterator";
878
+ break;
879
+ }
880
+ const t2 = r2.iterators[r2.iterators.length - 1];
881
+ t2.index < t2.array.elements.length ? (r2.stack.push(t2.array.elements[t2.index]), r2.stack.push(true), t2.index++) : (r2.stack.push(null), r2.stack.push(false)), r2.pc++;
882
+ break;
883
+ }
884
+ case n$1.ITER_END: {
885
+ if (r2.iterators.length === 0) {
886
+ r2.status = "error", r2.error = "ITER_END: No active iterator";
887
+ break;
888
+ }
889
+ r2.iterators.pop(), r2.pc++;
890
+ break;
891
+ }
892
+ // Logical operators
893
+ case n$1.AND: {
894
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
895
+ if (e === void 0 || t2 === void 0) {
896
+ r2.status = "error", r2.error = "AND: Stack underflow";
897
+ break;
898
+ }
899
+ c(e) ? r2.stack.push(t2) : r2.stack.push(e), r2.pc++;
900
+ break;
901
+ }
902
+ case n$1.OR: {
903
+ const t2 = r2.stack.pop(), e = r2.stack.pop();
904
+ if (e === void 0 || t2 === void 0) {
905
+ r2.status = "error", r2.error = "OR: Stack underflow";
906
+ break;
907
+ }
908
+ c(e) ? r2.stack.push(e) : r2.stack.push(t2), r2.pc++;
909
+ break;
910
+ }
911
+ case n$1.NOT: {
912
+ const t2 = r2.stack.pop();
913
+ if (t2 === void 0) {
914
+ r2.status = "error", r2.error = "NOT: Stack underflow";
915
+ break;
916
+ }
917
+ r2.stack.push(!c(t2)), r2.pc++;
918
+ break;
919
+ }
920
+ case n$1.RETURN: {
921
+ const t2 = r2.stack.pop() ?? null;
922
+ r2.returnValue = t2, r2.status = "complete";
923
+ break;
924
+ }
925
+ default:
926
+ r2.status = "error", r2.error = `Unknown opcode: ${i2.op} (type: ${typeof i2.op})`;
927
+ }
928
+ }
929
+ return r2;
930
+ }
931
+ resume(a2, s2, r2) {
932
+ if (a2.status !== "waiting_cc")
933
+ throw new Error("Cannot resume: VM not waiting for CC");
934
+ const i2 = {
935
+ ...a2,
936
+ stack: [...a2.stack, s2],
937
+ status: "running",
938
+ ccPrompt: void 0,
939
+ pc: a2.pc + 1
940
+ };
941
+ return this.execute(r2, i2);
942
+ }
943
+ }
944
+ class L {
945
+ constructor(a2) {
946
+ v$1(this, "vms", /* @__PURE__ */ new Map());
947
+ v$1(this, "storage");
948
+ a2 ? this.storage = a2 : this.storage = g.create();
949
+ }
950
+ /**
951
+ * Initialize the VMManager (connect to database)
952
+ */
953
+ async initialize() {
954
+ await this.storage.connect();
955
+ }
956
+ /**
957
+ * Cleanup resources
958
+ */
959
+ async dispose() {
960
+ await this.storage.disconnect(), this.vms.clear();
961
+ }
962
+ /**
963
+ * Load and compile a program from source code
964
+ */
965
+ async loadProgram(a2, s2) {
966
+ const r2 = k(s2);
967
+ if (!r2.success)
968
+ throw new Error(`Compilation failed: ${r2.errors.join(", ")}`);
969
+ const i2 = {
970
+ id: a2,
971
+ name: a2,
972
+ source: s2,
973
+ bytecode: r2.bytecode,
974
+ // VM decides internal format
975
+ created: /* @__PURE__ */ new Date()
976
+ };
977
+ await this.storage.saveProgram(i2);
978
+ }
979
+ /**
980
+ * Start execution of a loaded program
981
+ */
982
+ async startExecution(a2, s2) {
983
+ if (!await this.storage.getProgram(a2))
984
+ throw new Error(`Program not found: ${a2}`);
985
+ const i2 = {
986
+ id: s2,
987
+ programId: a2,
988
+ state: "READY",
989
+ pc: 0,
990
+ stack: [],
991
+ variables: {},
992
+ created: /* @__PURE__ */ new Date()
993
+ };
994
+ await this.storage.saveExecution(i2);
995
+ const f2 = new E();
996
+ this.vms.set(s2, f2);
997
+ }
998
+ /**
999
+ * Get next action from execution (Claude polls this)
1000
+ * This is READ-ONLY - just returns current state
1001
+ */
1002
+ async getNext(a2) {
1003
+ const s2 = await this.storage.getExecution(a2);
1004
+ if (!s2)
1005
+ throw new Error(`Execution not found: ${a2}`);
1006
+ if (s2.state === "READY") {
1007
+ const r2 = await this.storage.getProgram(s2.programId);
1008
+ if (!r2)
1009
+ throw new Error(`Program not found: ${s2.programId}`);
1010
+ let i2 = this.vms.get(a2);
1011
+ i2 || (i2 = new E(), this.vms.set(a2, i2));
1012
+ const f2 = {
1013
+ pc: 0,
1014
+ stack: [],
1015
+ variables: /* @__PURE__ */ new Map(),
1016
+ output: []
1017
+ }, u2 = i2.execute(r2.bytecode, f2);
1018
+ if (u2.output.length > 0 && await this.storage.appendOutput(a2, u2.output), s2.pc = u2.pc, s2.stack = u2.stack, s2.variables = Object.fromEntries(u2.variables), u2.status === "complete")
1019
+ return s2.state = "COMPLETED", u2.returnValue !== void 0 && (s2.returnValue = u2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1020
+ type: "completed",
1021
+ message: "Execution completed",
1022
+ result: u2.returnValue
1023
+ };
1024
+ if (u2.status === "waiting_cc")
1025
+ return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = u2.ccPrompt, await this.storage.saveExecution(s2), {
1026
+ type: "waiting",
1027
+ message: u2.ccPrompt || "Waiting for input"
1028
+ };
1029
+ if (u2.status === "error")
1030
+ return s2.state = "ERROR", s2.error = u2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1031
+ type: "error",
1032
+ error: u2.error
1033
+ };
1034
+ }
1035
+ if (s2.state === "COMPLETED")
1036
+ return {
1037
+ type: "completed",
1038
+ message: "Execution completed"
1039
+ };
1040
+ if (s2.state === "ERROR")
1041
+ return {
1042
+ type: "error",
1043
+ error: s2.error || "Unknown error"
1044
+ };
1045
+ if (s2.state === "AWAITING_COGNITIVE_RESULT")
1046
+ return {
1047
+ type: "waiting",
1048
+ message: s2.ccPrompt || "Waiting for input"
1049
+ };
1050
+ throw new Error(`Unexpected execution state: ${s2.state}`);
1051
+ }
1052
+ /**
1053
+ * Report result from cognitive operation and continue execution
1054
+ */
1055
+ async reportCCResult(a2, s2) {
1056
+ const r2 = await this.storage.getExecution(a2);
1057
+ if (!r2)
1058
+ throw new Error(`Execution not found: ${a2}`);
1059
+ const i2 = await this.storage.getProgram(r2.programId);
1060
+ if (!i2)
1061
+ throw new Error(`Program not found: ${r2.programId}`);
1062
+ let f2 = this.vms.get(a2);
1063
+ f2 || (f2 = new E(), this.vms.set(a2, f2));
1064
+ const u2 = {
1065
+ pc: r2.pc,
1066
+ stack: r2.stack,
1067
+ variables: new Map(Object.entries(r2.variables)),
1068
+ status: "waiting_cc",
1069
+ output: [],
1070
+ // Start with empty output for resumed execution
1071
+ ccPrompt: void 0,
1072
+ iterators: []
1073
+ // TODO: persist iterators in future
1074
+ }, k2 = f2.resume(u2, s2, i2.bytecode);
1075
+ k2.output.length > 0 && await this.storage.appendOutput(a2, k2.output), r2.pc = k2.pc, r2.stack = k2.stack, r2.variables = Object.fromEntries(k2.variables), k2.status === "complete" ? (r2.state = "COMPLETED", k2.returnValue !== void 0 && (r2.returnValue = k2.returnValue), this.vms.delete(a2)) : k2.status === "error" ? (r2.state = "ERROR", r2.error = k2.error, this.vms.delete(a2)) : k2.status === "waiting_cc" ? (r2.state = "AWAITING_COGNITIVE_RESULT", r2.ccPrompt = k2.ccPrompt) : r2.state = "RUNNING", await this.storage.saveExecution(r2);
1076
+ }
1077
+ /**
1078
+ * Get current execution status
1079
+ */
1080
+ async getExecutionStatus(a2) {
1081
+ const s2 = await this.storage.getExecution(a2);
1082
+ if (!s2)
1083
+ throw new Error(`Execution not found: ${a2}`);
1084
+ return {
1085
+ id: s2.id,
1086
+ state: s2.state,
1087
+ pc: s2.pc,
1088
+ stack: s2.stack,
1089
+ variables: s2.variables
1090
+ };
1091
+ }
1092
+ /**
1093
+ * Get output for an execution
1094
+ */
1095
+ async getExecutionOutput(a2) {
1096
+ return await this.storage.getOutput(a2);
1097
+ }
1098
+ }
1099
+ var i = Object.defineProperty;
1100
+ var a = (s2, r2, t2) => r2 in s2 ? i(s2, r2, { enumerable: true, configurable: true, writable: true, value: t2 }) : s2[r2] = t2;
1101
+ var o = (s2, r2, t2) => a(s2, typeof r2 != "symbol" ? r2 + "" : r2, t2);
1102
+ class v {
1103
+ constructor(r2 = "0.0.1") {
1104
+ o(this, "server");
1105
+ o(this, "transport", null);
1106
+ o(this, "vmManager");
1107
+ o(this, "version");
1108
+ this.version = r2, this.vmManager = new L(), this.server = new mcp_js.McpServer({
1109
+ name: "cvm-server",
1110
+ version: this.version
1111
+ }), this.setupTools();
1112
+ }
1113
+ getName() {
1114
+ return "cvm-server";
1115
+ }
1116
+ getVersion() {
1117
+ return this.version;
1118
+ }
1119
+ setupTools() {
1120
+ this.server.tool(
1121
+ "load",
1122
+ {
1123
+ programId: zod.z.string(),
1124
+ source: zod.z.string()
1125
+ },
1126
+ async ({ programId: r2, source: t2 }) => {
1127
+ try {
1128
+ return await this.vmManager.loadProgram(r2, t2), {
1129
+ content: [{ type: "text", text: `Program loaded successfully: ${r2}` }]
1130
+ };
1131
+ } catch (e) {
1132
+ return {
1133
+ content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown error"}` }],
1134
+ isError: true
1135
+ };
1136
+ }
1137
+ }
1138
+ ), this.server.tool(
1139
+ "start",
1140
+ {
1141
+ programId: zod.z.string(),
1142
+ executionId: zod.z.string()
1143
+ },
1144
+ async ({ programId: r2, executionId: t2 }) => {
1145
+ try {
1146
+ return await this.vmManager.startExecution(r2, t2), {
1147
+ content: [{ type: "text", text: `Execution started: ${t2}` }]
1148
+ };
1149
+ } catch (e) {
1150
+ return {
1151
+ content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown error"}` }],
1152
+ isError: true
1153
+ };
1154
+ }
1155
+ }
1156
+ ), this.server.tool(
1157
+ "getTask",
1158
+ {
1159
+ executionId: zod.z.string()
1160
+ },
1161
+ async ({ executionId: r2 }) => {
1162
+ try {
1163
+ const t2 = await this.vmManager.getNext(r2);
1164
+ return t2.type === "completed" ? {
1165
+ content: [{ type: "text", text: t2.result !== void 0 ? `Execution completed with result: ${JSON.stringify(t2.result)}` : "Execution completed" }]
1166
+ } : t2.type === "waiting" ? {
1167
+ content: [{ type: "text", text: t2.message || "Waiting for input" }]
1168
+ } : t2.type === "error" ? {
1169
+ content: [{ type: "text", text: `Error: ${t2.error}` }],
1170
+ isError: true
1171
+ } : {
1172
+ content: [{ type: "text", text: "Unexpected state" }],
1173
+ isError: true
1174
+ };
1175
+ } catch (t2) {
1176
+ return {
1177
+ content: [{ type: "text", text: `Error: ${t2 instanceof Error ? t2.message : "Unknown error"}` }],
1178
+ isError: true
1179
+ };
1180
+ }
1181
+ }
1182
+ ), this.server.tool(
1183
+ "submitTask",
1184
+ {
1185
+ executionId: zod.z.string(),
1186
+ result: zod.z.string()
1187
+ },
1188
+ async ({ executionId: r2, result: t2 }) => {
1189
+ try {
1190
+ return await this.vmManager.reportCCResult(r2, t2), {
1191
+ content: [{ type: "text", text: "Execution resumed" }]
1192
+ };
1193
+ } catch (e) {
1194
+ return {
1195
+ content: [{ type: "text", text: `Error: ${e instanceof Error ? e.message : "Unknown error"}` }],
1196
+ isError: true
1197
+ };
1198
+ }
1199
+ }
1200
+ ), this.server.tool(
1201
+ "status",
1202
+ {
1203
+ executionId: zod.z.string()
1204
+ },
1205
+ async ({ executionId: r2 }) => {
1206
+ try {
1207
+ const t2 = await this.vmManager.getExecutionStatus(r2);
1208
+ return {
1209
+ content: [{ type: "text", text: JSON.stringify(t2, null, 2) }]
1210
+ };
1211
+ } catch (t2) {
1212
+ return {
1213
+ content: [{ type: "text", text: `Error: ${t2 instanceof Error ? t2.message : "Unknown error"}` }],
1214
+ isError: true
1215
+ };
1216
+ }
1217
+ }
1218
+ );
1219
+ }
1220
+ async start(r2) {
1221
+ await this.vmManager.initialize(), this.transport = r2 || new stdio_js.StdioServerTransport(), await this.server.connect(this.transport);
1222
+ }
1223
+ async stop() {
1224
+ this.transport && (await this.transport.close(), this.transport = null), await this.vmManager.dispose();
1225
+ }
1226
+ // For testing - expose VMManager for direct testing
1227
+ getVMManager() {
1228
+ return this.vmManager;
1229
+ }
1230
+ }
1231
+ dotenv__namespace.config({ path: c$1.resolve(__dirname, "../../../.env") });
1232
+ function loadConfig() {
1233
+ const env = process.env.NODE_ENV || "development";
1234
+ const storageType = process.env.CVM_STORAGE_TYPE || "file";
1235
+ const mongoUri = process.env.MONGODB_URI;
1236
+ const dataDir = process.env.CVM_DATA_DIR;
1237
+ if (storageType === "mongodb" && !mongoUri) {
1238
+ throw new Error("MONGODB_URI environment variable is required when CVM_STORAGE_TYPE is mongodb");
1239
+ }
1240
+ const logLevel = process.env.CVM_LOG_LEVEL || "info";
1241
+ const validLogLevels = ["debug", "info", "warn", "error"];
1242
+ if (!validLogLevels.includes(logLevel)) {
1243
+ throw new Error(`Invalid CVM_LOG_LEVEL: ${logLevel}. Must be one of: ${validLogLevels.join(", ")}`);
1244
+ }
1245
+ const maxExecutionTime = parseInt(process.env.CVM_MAX_EXECUTION_TIME || "300000", 10);
1246
+ const maxStackSize = parseInt(process.env.CVM_MAX_STACK_SIZE || "1000", 10);
1247
+ const maxOutputSize = parseInt(process.env.CVM_MAX_OUTPUT_SIZE || "1048576", 10);
1248
+ return {
1249
+ storage: {
1250
+ type: storageType,
1251
+ mongoUri,
1252
+ dataDir
1253
+ },
1254
+ logging: {
1255
+ level: logLevel
1256
+ },
1257
+ execution: {
1258
+ maxExecutionTime,
1259
+ maxStackSize,
1260
+ maxOutputSize
1261
+ },
1262
+ env
1263
+ };
1264
+ }
1265
+ const LOG_LEVELS = {
1266
+ debug: 0,
1267
+ info: 1,
1268
+ warn: 2,
1269
+ error: 3
1270
+ };
1271
+ class Logger {
1272
+ levelValue;
1273
+ constructor(level) {
1274
+ this.levelValue = LOG_LEVELS[level];
1275
+ }
1276
+ log(level, message, ...args) {
1277
+ if (LOG_LEVELS[level] >= this.levelValue) {
1278
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
1279
+ const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
1280
+ if (args.length > 0) {
1281
+ console.error(prefix, message, ...args);
1282
+ } else {
1283
+ console.error(prefix, message);
1284
+ }
1285
+ }
1286
+ }
1287
+ debug(message, ...args) {
1288
+ this.log("debug", message, ...args);
1289
+ }
1290
+ info(message, ...args) {
1291
+ this.log("info", message, ...args);
1292
+ }
1293
+ warn(message, ...args) {
1294
+ this.log("warn", message, ...args);
1295
+ }
1296
+ error(message, ...args) {
1297
+ this.log("error", message, ...args);
1298
+ }
1299
+ }
1300
+ let logger;
1301
+ function initLogger(level) {
1302
+ logger = new Logger(level);
1303
+ return logger;
1304
+ }
1305
+ function getLogger() {
1306
+ if (!logger) {
1307
+ throw new Error("Logger not initialized. Call initLogger() first.");
1308
+ }
1309
+ return logger;
1310
+ }
1311
+ const __filename$1 = url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("main.cjs", document.baseURI).href);
1312
+ const __dirname$1 = c$1.dirname(__filename$1);
1313
+ async function main() {
1314
+ let cvmServer;
1315
+ try {
1316
+ const config = loadConfig();
1317
+ initLogger(config.logging.level);
1318
+ const logger2 = getLogger();
1319
+ const packageJsonPath = c$1.join(__dirname$1, "..", "package.json");
1320
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
1321
+ const version = packageJson.version || "0.0.1";
1322
+ logger2.info("Starting CVM Server...", {
1323
+ env: config.env,
1324
+ logLevel: config.logging.level,
1325
+ version
1326
+ });
1327
+ if (config.storage.type === "file") {
1328
+ const dataDir = config.storage.dataDir || ".cvm";
1329
+ const fullPath = c$1.resolve(process.cwd(), dataDir);
1330
+ logger2.info(`[CVM] Initializing file storage in: ${fullPath}`);
1331
+ logger2.warn(`[CVM] ⚠️ Remember to add '${dataDir}/' to your .gitignore file!`);
1332
+ } else {
1333
+ logger2.info("[CVM] Using MongoDB storage");
1334
+ }
1335
+ cvmServer = new v(version);
1336
+ await cvmServer.start();
1337
+ logger2.info("CVM Server is running and ready to accept MCP connections");
1338
+ process.on("SIGINT", async () => {
1339
+ logger2.info("Received SIGINT, shutting down gracefully...");
1340
+ await shutdown();
1341
+ });
1342
+ process.on("SIGTERM", async () => {
1343
+ logger2.info("Received SIGTERM, shutting down gracefully...");
1344
+ await shutdown();
1345
+ });
1346
+ } catch (error) {
1347
+ console.error("Fatal error starting CVM Server:", error);
1348
+ process.exit(1);
1349
+ }
1350
+ async function shutdown() {
1351
+ const logger2 = getLogger();
1352
+ try {
1353
+ logger2.info("Closing connections...");
1354
+ if (cvmServer) {
1355
+ await cvmServer.stop();
1356
+ }
1357
+ logger2.info("Shutdown complete");
1358
+ process.exit(0);
1359
+ } catch (error) {
1360
+ logger2.error("Error during shutdown:", error);
1361
+ process.exit(1);
1362
+ }
1363
+ }
1364
+ }
1365
+ main().catch((error) => {
1366
+ console.error("Unhandled error:", error);
1367
+ process.exit(1);
1368
+ });