cvm-server 0.5.0 → 0.7.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 (2) hide show
  1. package/main.cjs +379 -190
  2. package/package.json +1 -1
package/main.cjs CHANGED
@@ -2,10 +2,11 @@
2
2
  const mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
3
3
  const stdio_js = require("@modelcontextprotocol/sdk/server/stdio.js");
4
4
  const zod = require("zod");
5
- const s$1 = require("typescript");
6
- const fs = require("fs");
7
- const c$1 = require("path");
5
+ const s$2 = require("typescript");
6
+ const M = require("fs");
7
+ const c$2 = require("path");
8
8
  const mongodb = require("mongodb");
9
+ const promises = require("fs/promises");
9
10
  const dotenv = require("dotenv");
10
11
  const url = require("url");
11
12
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
@@ -25,16 +26,17 @@ function _interopNamespaceDefault(e2) {
25
26
  n2.default = e2;
26
27
  return Object.freeze(n2);
27
28
  }
28
- const s__namespace = /* @__PURE__ */ _interopNamespaceDefault(s$1);
29
- const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$1);
29
+ const s__namespace = /* @__PURE__ */ _interopNamespaceDefault(s$2);
30
+ const M__namespace = /* @__PURE__ */ _interopNamespaceDefault(M);
31
+ const c__namespace = /* @__PURE__ */ _interopNamespaceDefault(c$2);
30
32
  const dotenv__namespace = /* @__PURE__ */ _interopNamespaceDefault(dotenv);
31
- var A = Object.defineProperty;
32
- var k = (n2, l2, e2) => l2 in n2 ? A(n2, l2, { enumerable: true, configurable: true, writable: true, value: e2 }) : n2[l2] = e2;
33
- var S = (n2, l2, e2) => k(n2, typeof l2 != "symbol" ? l2 + "" : l2, e2);
34
- var r$1 = /* @__PURE__ */ ((n2) => (n2.PUSH = "PUSH", n2.PUSH_UNDEFINED = "PUSH_UNDEFINED", n2.POP = "POP", n2.LOAD = "LOAD", n2.STORE = "STORE", n2.CONCAT = "CONCAT", n2.ARRAY_NEW = "ARRAY_NEW", n2.ARRAY_PUSH = "ARRAY_PUSH", n2.ARRAY_GET = "ARRAY_GET", n2.ARRAY_SET = "ARRAY_SET", n2.ARRAY_LEN = "ARRAY_LEN", n2.STRING_LEN = "STRING_LEN", n2.STRING_SUBSTRING = "STRING_SUBSTRING", n2.STRING_INDEXOF = "STRING_INDEXOF", n2.STRING_SPLIT = "STRING_SPLIT", n2.LENGTH = "LENGTH", n2.JSON_PARSE = "JSON_PARSE", n2.TYPEOF = "TYPEOF", n2.ADD = "ADD", n2.SUB = "SUB", n2.MUL = "MUL", n2.DIV = "DIV", n2.MOD = "MOD", n2.UNARY_MINUS = "UNARY_MINUS", n2.UNARY_PLUS = "UNARY_PLUS", n2.INC = "INC", n2.DEC = "DEC", n2.EQ = "EQ", n2.NEQ = "NEQ", n2.LT = "LT", n2.GT = "GT", n2.LTE = "LTE", n2.GTE = "GTE", n2.EQ_STRICT = "EQ_STRICT", n2.NEQ_STRICT = "NEQ_STRICT", n2.JUMP = "JUMP", n2.JUMP_IF = "JUMP_IF", n2.JUMP_IF_FALSE = "JUMP_IF_FALSE", n2.JUMP_IF_TRUE = "JUMP_IF_TRUE", n2.CALL = "CALL", n2.RETURN = "RETURN", n2.AND = "AND", n2.OR = "OR", n2.NOT = "NOT", n2.BREAK = "BREAK", n2.CONTINUE = "CONTINUE", n2.ITER_START = "ITER_START", n2.ITER_NEXT = "ITER_NEXT", n2.ITER_END = "ITER_END", n2.FS_LIST_FILES = "FS_LIST_FILES", n2.CC = "CC", n2.PRINT = "PRINT", n2.HALT = "HALT", n2))(r$1 || {});
35
- function R(n2) {
33
+ var R = Object.defineProperty;
34
+ var h$1 = (n2, l2, e2) => l2 in n2 ? R(n2, l2, { enumerable: true, configurable: true, writable: true, value: e2 }) : n2[l2] = e2;
35
+ var u$1 = (n2, l2, e2) => h$1(n2, typeof l2 != "symbol" ? l2 + "" : l2, e2);
36
+ var r$1 = /* @__PURE__ */ ((n2) => (n2.PUSH = "PUSH", n2.PUSH_UNDEFINED = "PUSH_UNDEFINED", n2.POP = "POP", n2.LOAD = "LOAD", n2.STORE = "STORE", n2.CONCAT = "CONCAT", n2.ARRAY_NEW = "ARRAY_NEW", n2.ARRAY_PUSH = "ARRAY_PUSH", n2.ARRAY_GET = "ARRAY_GET", n2.ARRAY_SET = "ARRAY_SET", n2.ARRAY_LEN = "ARRAY_LEN", n2.STRING_LEN = "STRING_LEN", n2.STRING_SUBSTRING = "STRING_SUBSTRING", n2.STRING_INDEXOF = "STRING_INDEXOF", n2.STRING_SPLIT = "STRING_SPLIT", n2.STRING_SLICE = "STRING_SLICE", n2.STRING_CHARAT = "STRING_CHARAT", n2.STRING_TOUPPERCASE = "STRING_TOUPPERCASE", n2.STRING_TOLOWERCASE = "STRING_TOLOWERCASE", n2.LENGTH = "LENGTH", n2.JSON_PARSE = "JSON_PARSE", n2.TYPEOF = "TYPEOF", n2.ADD = "ADD", n2.SUB = "SUB", n2.MUL = "MUL", n2.DIV = "DIV", n2.MOD = "MOD", n2.UNARY_MINUS = "UNARY_MINUS", n2.UNARY_PLUS = "UNARY_PLUS", n2.INC = "INC", n2.DEC = "DEC", n2.EQ = "EQ", n2.NEQ = "NEQ", n2.LT = "LT", n2.GT = "GT", n2.LTE = "LTE", n2.GTE = "GTE", n2.EQ_STRICT = "EQ_STRICT", n2.NEQ_STRICT = "NEQ_STRICT", n2.JUMP = "JUMP", n2.JUMP_IF = "JUMP_IF", n2.JUMP_IF_FALSE = "JUMP_IF_FALSE", n2.JUMP_IF_TRUE = "JUMP_IF_TRUE", n2.CALL = "CALL", n2.RETURN = "RETURN", n2.AND = "AND", n2.OR = "OR", n2.NOT = "NOT", n2.BREAK = "BREAK", n2.CONTINUE = "CONTINUE", n2.ITER_START = "ITER_START", n2.ITER_NEXT = "ITER_NEXT", n2.ITER_END = "ITER_END", n2.FS_LIST_FILES = "FS_LIST_FILES", n2.CC = "CC", n2.PRINT = "PRINT", n2.HALT = "HALT", n2))(r$1 || {});
37
+ function I(n2) {
36
38
  const l2 = [], e2 = [];
37
- let x = false, u2 = false;
39
+ let o2 = false, T = false;
38
40
  const a2 = s__namespace.createSourceFile(
39
41
  "program.ts",
40
42
  n2,
@@ -42,9 +44,9 @@ function R(n2) {
42
44
  true
43
45
  );
44
46
  function t2(i2) {
45
- if (s__namespace.isFunctionDeclaration(i2) && i2.name && i2.name.text === "main" && (x = true, i2.parameters.length > 0 && l2.push("main() must not have parameters")), s__namespace.isExpressionStatement(i2) && i2.parent === a2) {
47
+ if (s__namespace.isFunctionDeclaration(i2) && i2.name && i2.name.text === "main" && (o2 = true, i2.parameters.length > 0 && l2.push("main() must not have parameters")), s__namespace.isExpressionStatement(i2) && i2.parent === a2) {
46
48
  const c2 = i2.expression;
47
- s__namespace.isCallExpression(c2) && s__namespace.isIdentifier(c2.expression) && c2.expression.text === "main" && (u2 = true);
49
+ s__namespace.isCallExpression(c2) && s__namespace.isIdentifier(c2.expression) && c2.expression.text === "main" && (T = true);
48
50
  }
49
51
  if (s__namespace.isCallExpression(i2) && s__namespace.isIdentifier(i2.expression)) {
50
52
  const c2 = i2.expression.text;
@@ -52,23 +54,23 @@ function R(n2) {
52
54
  }
53
55
  s__namespace.forEachChild(i2, t2);
54
56
  }
55
- return t2(a2), x || l2.push("Program must have a main() function"), x && !u2 && l2.push("main() must be called at the top level"), l2.length === 0 && e2.push({ op: r$1.HALT }), {
57
+ return t2(a2), o2 || l2.push("Program must have a main() function"), o2 && !T && l2.push("main() must be called at the top level"), l2.length === 0 && e2.push({ op: r$1.HALT }), {
56
58
  bytecode: e2,
57
59
  errors: l2,
58
- hasMain: x
60
+ hasMain: o2
59
61
  };
60
62
  }
61
- class I {
63
+ let N$1 = class N {
62
64
  constructor() {
63
- S(this, "bytecode", []);
64
- S(this, "contextStack", []);
65
+ u$1(this, "bytecode", []);
66
+ u$1(this, "contextStack", []);
65
67
  }
66
68
  /**
67
69
  * Emit an instruction and return its index
68
70
  */
69
71
  emit(l2, e2) {
70
- const x = this.bytecode.length;
71
- return this.bytecode.push({ op: l2, arg: e2 }), x;
72
+ const o2 = this.bytecode.length;
73
+ return this.bytecode.push({ op: l2, arg: e2 }), o2;
72
74
  }
73
75
  /**
74
76
  * Get the current address (next instruction index)
@@ -86,7 +88,7 @@ class I {
86
88
  * Patch multiple jump instructions with the same target
87
89
  */
88
90
  patchJumps(l2, e2) {
89
- l2.forEach((x) => this.patchJump(x, e2));
91
+ l2.forEach((o2) => this.patchJump(o2, e2));
90
92
  }
91
93
  /**
92
94
  * Push a new jump context onto the stack
@@ -133,73 +135,73 @@ class I {
133
135
  getUnclosedContexts() {
134
136
  return [...this.contextStack];
135
137
  }
136
- }
137
- function g$1(n2) {
138
- const l2 = R(n2);
138
+ };
139
+ function k(n2) {
140
+ const l2 = I(n2);
139
141
  if (l2.errors.length > 0)
140
142
  return {
141
143
  success: false,
142
144
  bytecode: [],
143
145
  errors: l2.errors
144
146
  };
145
- const e2 = new I(), x = s__namespace.createSourceFile("program.ts", n2, s__namespace.ScriptTarget.Latest, true);
146
- function u2(t2) {
147
+ const e2 = new N$1(), o2 = s__namespace.createSourceFile("program.ts", n2, s__namespace.ScriptTarget.Latest, true);
148
+ function T(t2) {
147
149
  if (s__namespace.isIfStatement(t2)) {
148
150
  a2(t2.expression);
149
151
  const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1), c2 = {
150
152
  type: "if",
151
153
  endTargets: []
152
154
  };
153
- if (t2.elseStatement ? c2.elseTarget = i2 : c2.endTargets.push(i2), e2.pushContext(c2), u2(t2.thenStatement), t2.elseStatement) {
154
- const m2 = e2.emit(r$1.JUMP, -1);
155
- c2.endTargets.push(m2);
156
- const T = e2.currentAddress();
157
- e2.patchJump(i2, T), u2(t2.elseStatement);
155
+ if (t2.elseStatement ? c2.elseTarget = i2 : c2.endTargets.push(i2), e2.pushContext(c2), T(t2.thenStatement), t2.elseStatement) {
156
+ const x = e2.emit(r$1.JUMP, -1);
157
+ c2.endTargets.push(x);
158
+ const S = e2.currentAddress();
159
+ e2.patchJump(i2, S), T(t2.elseStatement);
158
160
  }
159
- const o2 = e2.popContext();
160
- if (o2) {
161
- const m2 = e2.currentAddress();
162
- e2.patchJumps(o2.endTargets, m2);
161
+ const m2 = e2.popContext();
162
+ if (m2) {
163
+ const x = e2.currentAddress();
164
+ e2.patchJumps(m2.endTargets, x);
163
165
  }
164
166
  } else if (s__namespace.isWhileStatement(t2)) {
165
167
  const i2 = e2.currentAddress();
166
168
  a2(t2.expression);
167
- const o2 = {
169
+ const m2 = {
168
170
  type: "loop",
169
171
  breakTargets: [e2.emit(r$1.JUMP_IF_FALSE, -1)],
170
172
  continueTargets: [],
171
173
  endTargets: [],
172
174
  startAddress: i2
173
175
  };
174
- e2.pushContext(o2), u2(t2.statement), e2.emit(r$1.JUMP, i2);
175
- const m2 = e2.popContext();
176
- if (m2) {
177
- const T = e2.currentAddress();
178
- e2.patchJumps(m2.breakTargets || [], T);
176
+ e2.pushContext(m2), T(t2.statement), e2.emit(r$1.JUMP, i2);
177
+ const x = e2.popContext();
178
+ if (x) {
179
+ const S = e2.currentAddress();
180
+ e2.patchJumps(x.breakTargets || [], S);
179
181
  }
180
182
  } else if (s__namespace.isForOfStatement(t2)) {
181
183
  const i2 = t2.initializer, c2 = t2.expression;
182
- let o2;
184
+ let m2;
183
185
  if (s__namespace.isVariableDeclarationList(i2))
184
- o2 = i2.declarations[0].name.getText();
186
+ m2 = i2.declarations[0].name.getText();
185
187
  else if (s__namespace.isIdentifier(i2))
186
- o2 = i2.text;
188
+ m2 = i2.text;
187
189
  else
188
190
  throw new Error("Unsupported for-of variable declaration");
189
191
  a2(c2), e2.emit(r$1.ITER_START);
190
- const m2 = e2.currentAddress();
192
+ const x = e2.currentAddress();
191
193
  e2.emit(r$1.ITER_NEXT);
192
- const T = e2.emit(r$1.JUMP_IF_FALSE, -1);
193
- e2.emit(r$1.STORE, o2);
194
- const h2 = {
194
+ const S = e2.emit(r$1.JUMP_IF_FALSE, -1);
195
+ e2.emit(r$1.STORE, m2);
196
+ const A2 = {
195
197
  type: "foreach",
196
- breakTargets: [T],
198
+ breakTargets: [S],
197
199
  continueTargets: [],
198
200
  endTargets: [],
199
- startAddress: m2,
200
- iterVariable: o2
201
+ startAddress: x,
202
+ iterVariable: m2
201
203
  };
202
- e2.pushContext(h2), u2(t2.statement), e2.emit(r$1.JUMP, m2);
204
+ e2.pushContext(A2), T(t2.statement), e2.emit(r$1.JUMP, x);
203
205
  const f2 = e2.popContext();
204
206
  if (f2) {
205
207
  e2.emit(r$1.ITER_END);
@@ -208,7 +210,7 @@ function g$1(n2) {
208
210
  }
209
211
  } else if (s__namespace.isBlock(t2))
210
212
  t2.statements.forEach((i2) => {
211
- u2(i2);
213
+ T(i2);
212
214
  });
213
215
  else if (s__namespace.isExpressionStatement(t2)) {
214
216
  const i2 = t2.expression;
@@ -241,8 +243,8 @@ function g$1(n2) {
241
243
  if (a2(i2.right), s__namespace.isIdentifier(i2.left))
242
244
  e2.emit(r$1.STORE, i2.left.text);
243
245
  else if (s__namespace.isElementAccessExpression(i2.left)) {
244
- const o2 = `__temp_${e2.getBytecode().length}`;
245
- e2.emit(r$1.STORE, o2), a2(i2.left.expression), a2(i2.left.argumentExpression), e2.emit(r$1.LOAD, o2), e2.emit(r$1.ARRAY_SET);
246
+ const m2 = `__temp_${e2.getBytecode().length}`;
247
+ e2.emit(r$1.STORE, m2), a2(i2.left.expression), a2(i2.left.argumentExpression), e2.emit(r$1.LOAD, m2), e2.emit(r$1.ARRAY_SET);
246
248
  }
247
249
  return;
248
250
  }
@@ -294,13 +296,15 @@ function g$1(n2) {
294
296
  else if (s__namespace.isIdentifier(t2))
295
297
  t2.text === "undefined" ? e2.emit(r$1.PUSH_UNDEFINED) : e2.emit(r$1.LOAD, t2.text);
296
298
  else if (s__namespace.isCallExpression(t2)) {
297
- if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse")
299
+ if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "fs" && t2.expression.name.text === "listFiles")
300
+ t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, "."), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.FS_LIST_FILES);
301
+ else if (s__namespace.isPropertyAccessExpression(t2.expression) && s__namespace.isIdentifier(t2.expression.expression) && t2.expression.expression.text === "JSON" && t2.expression.name.text === "parse")
298
302
  t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.JSON_PARSE);
299
303
  else if (s__namespace.isIdentifier(t2.expression) && t2.expression.text === "CC")
300
304
  t2.arguments.length > 0 && a2(t2.arguments[0]), e2.emit(r$1.CC);
301
305
  else if (s__namespace.isPropertyAccessExpression(t2.expression)) {
302
306
  const i2 = t2.expression.name.text;
303
- i2 === "substring" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SUBSTRING)) : i2 === "indexOf" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_INDEXOF)) : i2 === "split" && (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_SPLIT));
307
+ i2 === "substring" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SUBSTRING)) : i2 === "indexOf" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_INDEXOF)) : i2 === "split" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, ""), e2.emit(r$1.STRING_SPLIT)) : i2 === "slice" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), t2.arguments.length > 1 && a2(t2.arguments[1]), e2.emit(r$1.STRING_SLICE)) : i2 === "charAt" ? (a2(t2.expression.expression), t2.arguments.length > 0 ? a2(t2.arguments[0]) : e2.emit(r$1.PUSH, 0), e2.emit(r$1.STRING_CHARAT)) : i2 === "toUpperCase" ? (a2(t2.expression.expression), e2.emit(r$1.STRING_TOUPPERCASE)) : i2 === "toLowerCase" && (a2(t2.expression.expression), e2.emit(r$1.STRING_TOLOWERCASE));
304
308
  }
305
309
  } else if (s__namespace.isParenthesizedExpression(t2))
306
310
  a2(t2.expression);
@@ -308,7 +312,7 @@ function g$1(n2) {
308
312
  const i2 = t2.operatorToken.kind;
309
313
  switch (a2(t2.left), a2(t2.right), i2) {
310
314
  case s__namespace.SyntaxKind.PlusToken:
311
- E$1(t2.left, t2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
315
+ E(t2.left, t2.right) ? e2.emit(r$1.CONCAT) : e2.emit(r$1.ADD);
312
316
  break;
313
317
  case s__namespace.SyntaxKind.MinusToken:
314
318
  e2.emit(r$1.SUB);
@@ -386,16 +390,16 @@ function g$1(n2) {
386
390
  a2(t2.condition);
387
391
  const i2 = e2.emit(r$1.JUMP_IF_FALSE, -1);
388
392
  a2(t2.whenTrue);
389
- const c2 = e2.emit(r$1.JUMP, -1), o2 = e2.currentAddress();
390
- e2.patchJump(i2, o2), a2(t2.whenFalse);
391
- const m2 = e2.currentAddress();
392
- e2.patchJump(c2, m2);
393
+ const c2 = e2.emit(r$1.JUMP, -1), m2 = e2.currentAddress();
394
+ e2.patchJump(i2, m2), a2(t2.whenFalse);
395
+ const x = e2.currentAddress();
396
+ e2.patchJump(c2, x);
393
397
  }
394
398
  }
395
- return x.forEachChild((t2) => {
399
+ return o2.forEachChild((t2) => {
396
400
  var i2;
397
401
  s__namespace.isFunctionDeclaration(t2) && ((i2 = t2.name) == null ? void 0 : i2.text) === "main" && t2.body && t2.body.statements.forEach((c2) => {
398
- u2(c2);
402
+ T(c2);
399
403
  });
400
404
  }), e2.emit(r$1.HALT), {
401
405
  success: true,
@@ -403,8 +407,8 @@ function g$1(n2) {
403
407
  errors: []
404
408
  };
405
409
  }
406
- function E$1(n2, l2) {
407
- return !!(s__namespace.isStringLiteral(n2) || s__namespace.isStringLiteral(l2) || s__namespace.isBinaryExpression(n2) && n2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E$1(n2.left, n2.right) || s__namespace.isBinaryExpression(l2) && l2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E$1(l2.left, l2.right));
410
+ function E(n2, l2) {
411
+ return !!(s__namespace.isStringLiteral(n2) || s__namespace.isStringLiteral(l2) || s__namespace.isBinaryExpression(n2) && n2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E(n2.left, n2.right) || s__namespace.isBinaryExpression(l2) && l2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E(l2.left, l2.right));
408
412
  }
409
413
  function n(r2) {
410
414
  return typeof r2 == "string";
@@ -412,7 +416,7 @@ function n(r2) {
412
416
  function t(r2) {
413
417
  return typeof r2 == "number";
414
418
  }
415
- function i$1(r2) {
419
+ function i(r2) {
416
420
  return typeof r2 == "boolean";
417
421
  }
418
422
  function f(r2) {
@@ -421,23 +425,23 @@ function f(r2) {
421
425
  function e(r2) {
422
426
  return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "array";
423
427
  }
424
- function o$1(r2) {
428
+ function o(r2) {
425
429
  return r2 !== null && typeof r2 == "object" && "type" in r2 && r2.type === "undefined";
426
430
  }
427
- function c(r2) {
428
- return n(r2) ? r2 : t(r2) || i$1(r2) ? r2.toString() : f(r2) ? "null" : o$1(r2) ? "undefined" : e(r2) ? `[array:${r2.elements.length}]` : String(r2);
431
+ function c$1(r2) {
432
+ return n(r2) ? r2 : t(r2) || i(r2) ? r2.toString() : f(r2) ? "null" : o(r2) ? "undefined" : e(r2) ? `[array:${r2.elements.length}]` : String(r2);
429
433
  }
430
434
  function y(r2) {
431
- return i$1(r2) ? r2 : f(r2) || o$1(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : e(r2) ? true : !!r2;
435
+ return i(r2) ? r2 : f(r2) || o(r2) ? false : t(r2) ? r2 !== 0 : n(r2) ? r2 !== "" : e(r2) ? true : !!r2;
432
436
  }
433
437
  function m(r2) {
434
- return n(r2) ? "string" : t(r2) ? "number" : i$1(r2) ? "boolean" : f(r2) ? "null" : o$1(r2) ? "undefined" : e(r2) ? "array" : "unknown";
438
+ return n(r2) ? "string" : t(r2) ? "number" : i(r2) ? "boolean" : f(r2) ? "null" : o(r2) ? "undefined" : e(r2) ? "array" : "unknown";
435
439
  }
436
440
  function d(r2) {
437
441
  if (t(r2)) return r2;
438
- if (i$1(r2)) return r2 ? 1 : 0;
442
+ if (i(r2)) return r2 ? 1 : 0;
439
443
  if (f(r2)) return 0;
440
- if (o$1(r2)) return NaN;
444
+ if (o(r2)) return NaN;
441
445
  if (n(r2)) {
442
446
  const u2 = r2.trim();
443
447
  return u2 === "" ? 0 : Number(u2);
@@ -447,7 +451,7 @@ function d(r2) {
447
451
  function p$1(r2 = []) {
448
452
  return { type: "array", elements: r2 };
449
453
  }
450
- function s() {
454
+ function s$1() {
451
455
  return { type: "undefined" };
452
456
  }
453
457
  var l = Object.defineProperty;
@@ -462,7 +466,7 @@ class h {
462
466
  this.dataDir = t2, this.programsDir = c__namespace.join(t2, "programs"), this.executionsDir = c__namespace.join(t2, "executions"), this.outputsDir = c__namespace.join(t2, "outputs");
463
467
  }
464
468
  async connect() {
465
- 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;
469
+ await M.promises.mkdir(this.dataDir, { recursive: true }), await M.promises.mkdir(this.programsDir, { recursive: true }), await M.promises.mkdir(this.executionsDir, { recursive: true }), await M.promises.mkdir(this.outputsDir, { recursive: true }), this.connected = true;
466
470
  }
467
471
  async disconnect() {
468
472
  this.connected = false;
@@ -473,13 +477,13 @@ class h {
473
477
  async saveProgram(t2) {
474
478
  if (!this.connected) throw new Error("Not connected");
475
479
  const n2 = c__namespace.join(this.programsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
476
- await fs.promises.writeFile(n2, e2, "utf-8");
480
+ await M.promises.writeFile(n2, e2, "utf-8");
477
481
  }
478
482
  async getProgram(t2) {
479
483
  if (!this.connected) throw new Error("Not connected");
480
484
  const n2 = c__namespace.join(this.programsDir, `${t2}.json`);
481
485
  try {
482
- const e2 = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
486
+ const e2 = await M.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
483
487
  return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
484
488
  } catch (e2) {
485
489
  if (e2.code === "ENOENT")
@@ -490,13 +494,13 @@ class h {
490
494
  async saveExecution(t2) {
491
495
  if (!this.connected) throw new Error("Not connected");
492
496
  const n2 = c__namespace.join(this.executionsDir, `${t2.id}.json`), e2 = JSON.stringify(t2, null, 2);
493
- await fs.promises.writeFile(n2, e2, "utf-8");
497
+ await M.promises.writeFile(n2, e2, "utf-8");
494
498
  }
495
499
  async getExecution(t2) {
496
500
  if (!this.connected) throw new Error("Not connected");
497
501
  const n2 = c__namespace.join(this.executionsDir, `${t2}.json`);
498
502
  try {
499
- const e2 = await fs.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
503
+ const e2 = await M.promises.readFile(n2, "utf-8"), o2 = JSON.parse(e2);
500
504
  return o2.created = new Date(o2.created), o2.updated && (o2.updated = new Date(o2.updated)), o2;
501
505
  } catch (e2) {
502
506
  if (e2.code === "ENOENT")
@@ -509,13 +513,13 @@ class h {
509
513
  const e2 = c__namespace.join(this.outputsDir, `${t2}.output`), o2 = n2.join(`
510
514
  `) + `
511
515
  `;
512
- await fs.promises.appendFile(e2, o2, "utf-8");
516
+ await M.promises.appendFile(e2, o2, "utf-8");
513
517
  }
514
518
  async getOutput(t2) {
515
519
  if (!this.connected) throw new Error("Not connected");
516
520
  const n2 = c__namespace.join(this.outputsDir, `${t2}.output`);
517
521
  try {
518
- return (await fs.promises.readFile(n2, "utf-8")).split(`
522
+ return (await M.promises.readFile(n2, "utf-8")).split(`
519
523
  `).filter((o2) => o2.length > 0);
520
524
  } catch (e2) {
521
525
  if (e2.code === "ENOENT")
@@ -602,19 +606,19 @@ class g {
602
606
  }
603
607
  }
604
608
  }
605
- var P = Object.defineProperty;
606
- var O = (h2, a2, s2) => a2 in h2 ? P(h2, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : h2[a2] = s2;
607
- var E = (h2, a2, s2) => O(h2, typeof a2 != "symbol" ? a2 + "" : a2, s2);
608
- class w {
609
- execute(a2, s$12) {
609
+ var C = Object.defineProperty;
610
+ var G = (g2, a2, s2) => a2 in g2 ? C(g2, a2, { enumerable: true, configurable: true, writable: true, value: s2 }) : g2[a2] = s2;
611
+ var N2 = (g2, a2, s2) => G(g2, typeof a2 != "symbol" ? a2 + "" : a2, s2);
612
+ class A {
613
+ execute(a2, s2) {
610
614
  const r2 = {
611
- pc: (s$12 == null ? void 0 : s$12.pc) ?? 0,
612
- stack: (s$12 == null ? void 0 : s$12.stack) ?? [],
613
- variables: (s$12 == null ? void 0 : s$12.variables) ?? /* @__PURE__ */ new Map(),
615
+ pc: (s2 == null ? void 0 : s2.pc) ?? 0,
616
+ stack: (s2 == null ? void 0 : s2.stack) ?? [],
617
+ variables: (s2 == null ? void 0 : s2.variables) ?? /* @__PURE__ */ new Map(),
614
618
  status: "running",
615
- output: (s$12 == null ? void 0 : s$12.output) ?? [],
616
- iterators: (s$12 == null ? void 0 : s$12.iterators) ?? [],
617
- ...s$12
619
+ output: (s2 == null ? void 0 : s2.output) ?? [],
620
+ iterators: (s2 == null ? void 0 : s2.iterators) ?? [],
621
+ ...s2
618
622
  };
619
623
  for (; r2.status === "running" && r2.pc < a2.length; ) {
620
624
  const n$1 = a2[r2.pc];
@@ -626,14 +630,14 @@ class w {
626
630
  r2.stack.push(n$1.arg), r2.pc++;
627
631
  break;
628
632
  case r$1.PUSH_UNDEFINED:
629
- r2.stack.push(s()), r2.pc++;
633
+ r2.stack.push(s$1()), r2.pc++;
630
634
  break;
631
635
  case r$1.POP:
632
636
  r2.stack.pop(), r2.pc++;
633
637
  break;
634
638
  case r$1.LOAD: {
635
639
  const t2 = n$1.arg;
636
- r2.variables.has(t2) ? r2.stack.push(r2.variables.get(t2)) : r2.stack.push(s()), r2.pc++;
640
+ r2.variables.has(t2) ? r2.stack.push(r2.variables.get(t2)) : r2.stack.push(s$1()), r2.pc++;
637
641
  break;
638
642
  }
639
643
  case r$1.STORE:
@@ -645,16 +649,16 @@ class w {
645
649
  r2.variables.set(n$1.arg, f$1), r2.pc++;
646
650
  break;
647
651
  case r$1.CONCAT:
648
- const p2 = r2.stack.pop(), k2 = r2.stack.pop();
649
- if (k2 === void 0 || p2 === void 0) {
652
+ const u2 = r2.stack.pop(), l2 = r2.stack.pop();
653
+ if (l2 === void 0 || u2 === void 0) {
650
654
  r2.status = "error", r2.error = "CONCAT: Stack underflow";
651
655
  break;
652
656
  }
653
- r2.stack.push(c(k2) + c(p2)), r2.pc++;
657
+ r2.stack.push(c$1(l2) + c$1(u2)), r2.pc++;
654
658
  break;
655
659
  case r$1.PRINT:
656
- const R2 = r2.stack.pop();
657
- R2 !== void 0 && r2.output.push(c(R2)), r2.pc++;
660
+ const k2 = r2.stack.pop();
661
+ k2 !== void 0 && r2.output.push(c$1(k2)), r2.pc++;
658
662
  break;
659
663
  case r$1.CC: {
660
664
  const t2 = r2.stack.pop();
@@ -662,7 +666,7 @@ class w {
662
666
  r2.status = "error", r2.error = "CC: Stack underflow";
663
667
  break;
664
668
  }
665
- r2.ccPrompt = c(t2), r2.status = "waiting_cc";
669
+ r2.ccPrompt = c$1(t2), r2.status = "waiting_cc";
666
670
  break;
667
671
  }
668
672
  // Array operations
@@ -696,17 +700,17 @@ class w {
696
700
  r2.status = "error", r2.error = "ARRAY_GET requires numeric index";
697
701
  break;
698
702
  }
699
- const c2 = e$1.elements[t$1] ?? null;
700
- r2.stack.push(c2), r2.pc++;
703
+ const o2 = e$1.elements[t$1] ?? null;
704
+ r2.stack.push(o2), r2.pc++;
701
705
  break;
702
706
  }
703
707
  case r$1.ARRAY_SET: {
704
- const t$1 = r2.stack.pop(), e$1 = r2.stack.pop(), c2 = r2.stack.pop();
705
- if (t$1 === void 0 || e$1 === void 0 || c2 === void 0) {
708
+ const t$1 = r2.stack.pop(), e$1 = r2.stack.pop(), o2 = r2.stack.pop();
709
+ if (t$1 === void 0 || e$1 === void 0 || o2 === void 0) {
706
710
  r2.status = "error", r2.error = "ARRAY_SET: Stack underflow";
707
711
  break;
708
712
  }
709
- if (!e(c2)) {
713
+ if (!e(o2)) {
710
714
  r2.status = "error", r2.error = "ARRAY_SET requires an array";
711
715
  break;
712
716
  }
@@ -719,7 +723,7 @@ class w {
719
723
  r2.status = "error", r2.error = "ARRAY_SET: Negative index not allowed";
720
724
  break;
721
725
  }
722
- c2.elements[i2] = t$1, r2.pc++;
726
+ o2.elements[i2] = t$1, r2.pc++;
723
727
  break;
724
728
  }
725
729
  case r$1.ARRAY_LEN: {
@@ -800,8 +804,8 @@ class w {
800
804
  r2.status = "error", r2.error = "ADD: Stack underflow";
801
805
  break;
802
806
  }
803
- const c2 = d(e2), i2 = d(t2);
804
- r2.stack.push(c2 + i2), r2.pc++;
807
+ const o2 = d(e2), i2 = d(t2);
808
+ r2.stack.push(o2 + i2), r2.pc++;
805
809
  break;
806
810
  }
807
811
  case r$1.SUB: {
@@ -810,8 +814,8 @@ class w {
810
814
  r2.status = "error", r2.error = "SUB: Stack underflow";
811
815
  break;
812
816
  }
813
- const c2 = d(e2), i2 = d(t2);
814
- r2.stack.push(c2 - i2), r2.pc++;
817
+ const o2 = d(e2), i2 = d(t2);
818
+ r2.stack.push(o2 - i2), r2.pc++;
815
819
  break;
816
820
  }
817
821
  case r$1.MUL: {
@@ -820,8 +824,8 @@ class w {
820
824
  r2.status = "error", r2.error = "MUL: Stack underflow";
821
825
  break;
822
826
  }
823
- const c2 = d(e2), i2 = d(t2);
824
- r2.stack.push(c2 * i2), r2.pc++;
827
+ const o2 = d(e2), i2 = d(t2);
828
+ r2.stack.push(o2 * i2), r2.pc++;
825
829
  break;
826
830
  }
827
831
  case r$1.DIV: {
@@ -830,12 +834,12 @@ class w {
830
834
  r2.status = "error", r2.error = "DIV: Stack underflow";
831
835
  break;
832
836
  }
833
- const c2 = d(e2), i2 = d(t2);
837
+ const o2 = d(e2), i2 = d(t2);
834
838
  if (i2 === 0) {
835
839
  r2.status = "error", r2.error = "Division by zero";
836
840
  break;
837
841
  }
838
- r2.stack.push(c2 / i2), r2.pc++;
842
+ r2.stack.push(o2 / i2), r2.pc++;
839
843
  break;
840
844
  }
841
845
  case r$1.MOD: {
@@ -844,8 +848,8 @@ class w {
844
848
  r2.status = "error", r2.error = "MOD: Stack underflow";
845
849
  break;
846
850
  }
847
- const c2 = d(e2), i2 = d(t2);
848
- r2.stack.push(c2 % i2), r2.pc++;
851
+ const o2 = d(e2), i2 = d(t2);
852
+ r2.stack.push(o2 % i2), r2.pc++;
849
853
  break;
850
854
  }
851
855
  // Unary operations
@@ -875,10 +879,10 @@ class w {
875
879
  r2.status = "error", r2.error = "INC: Invalid variable name";
876
880
  break;
877
881
  }
878
- const e2 = r2.variables.get(t2) ?? 0, c2 = d(e2) + 1;
879
- r2.variables.set(t2, c2);
882
+ const e2 = r2.variables.get(t2) ?? 0, o2 = d(e2) + 1;
883
+ r2.variables.set(t2, o2);
880
884
  const i2 = n$1.arg === true;
881
- r2.stack.push(i2 ? d(e2) : c2), r2.pc++;
885
+ r2.stack.push(i2 ? d(e2) : o2), r2.pc++;
882
886
  break;
883
887
  }
884
888
  case r$1.DEC: {
@@ -887,10 +891,10 @@ class w {
887
891
  r2.status = "error", r2.error = "DEC: Invalid variable name";
888
892
  break;
889
893
  }
890
- const e2 = r2.variables.get(t2) ?? 0, c2 = d(e2) - 1;
891
- r2.variables.set(t2, c2);
894
+ const e2 = r2.variables.get(t2) ?? 0, o2 = d(e2) - 1;
895
+ r2.variables.set(t2, o2);
892
896
  const i2 = n$1.arg === true;
893
- r2.stack.push(i2 ? d(e2) : c2), r2.pc++;
897
+ r2.stack.push(i2 ? d(e2) : o2), r2.pc++;
894
898
  break;
895
899
  }
896
900
  // Comparison operations
@@ -900,13 +904,13 @@ class w {
900
904
  r2.status = "error", r2.error = "EQ: Stack underflow";
901
905
  break;
902
906
  }
903
- if (f(e2) && o$1(t2) || o$1(e2) && f(t2))
907
+ if (f(e2) && o(t2) || o(e2) && f(t2))
904
908
  r2.stack.push(true);
905
- else if (o$1(e2) && o$1(t2))
909
+ else if (o(e2) && o(t2))
906
910
  r2.stack.push(true);
907
911
  else {
908
- const c$12 = d(e2), i2 = d(t2);
909
- !isNaN(c$12) && !isNaN(i2) ? r2.stack.push(c$12 === i2) : r2.stack.push(c(e2) === c(t2));
912
+ const o2 = d(e2), i2 = d(t2);
913
+ !isNaN(o2) && !isNaN(i2) ? r2.stack.push(o2 === i2) : r2.stack.push(c$1(e2) === c$1(t2));
910
914
  }
911
915
  r2.pc++;
912
916
  break;
@@ -917,13 +921,13 @@ class w {
917
921
  r2.status = "error", r2.error = "NEQ: Stack underflow";
918
922
  break;
919
923
  }
920
- if (f(e2) && o$1(t2) || o$1(e2) && f(t2))
924
+ if (f(e2) && o(t2) || o(e2) && f(t2))
921
925
  r2.stack.push(false);
922
- else if (o$1(e2) && o$1(t2))
926
+ else if (o(e2) && o(t2))
923
927
  r2.stack.push(false);
924
928
  else {
925
- const c$12 = d(e2), i2 = d(t2);
926
- !isNaN(c$12) && !isNaN(i2) ? r2.stack.push(c$12 !== i2) : r2.stack.push(c(e2) !== c(t2));
929
+ const o2 = d(e2), i2 = d(t2);
930
+ !isNaN(o2) && !isNaN(i2) ? r2.stack.push(o2 !== i2) : r2.stack.push(c$1(e2) !== c$1(t2));
927
931
  }
928
932
  r2.pc++;
929
933
  break;
@@ -934,8 +938,8 @@ class w {
934
938
  r2.status = "error", r2.error = "LT: Stack underflow";
935
939
  break;
936
940
  }
937
- const c2 = d(e2), i2 = d(t2);
938
- r2.stack.push(c2 < i2), r2.pc++;
941
+ const o2 = d(e2), i2 = d(t2);
942
+ r2.stack.push(o2 < i2), r2.pc++;
939
943
  break;
940
944
  }
941
945
  case r$1.GT: {
@@ -944,8 +948,8 @@ class w {
944
948
  r2.status = "error", r2.error = "GT: Stack underflow";
945
949
  break;
946
950
  }
947
- const c2 = d(e2), i2 = d(t2);
948
- r2.stack.push(c2 > i2), r2.pc++;
951
+ const o2 = d(e2), i2 = d(t2);
952
+ r2.stack.push(o2 > i2), r2.pc++;
949
953
  break;
950
954
  }
951
955
  case r$1.LTE: {
@@ -954,8 +958,8 @@ class w {
954
958
  r2.status = "error", r2.error = "LTE: Stack underflow";
955
959
  break;
956
960
  }
957
- const c2 = d(e2), i2 = d(t2);
958
- r2.stack.push(c2 <= i2), r2.pc++;
961
+ const o2 = d(e2), i2 = d(t2);
962
+ r2.stack.push(o2 <= i2), r2.pc++;
959
963
  break;
960
964
  }
961
965
  case r$1.GTE: {
@@ -964,8 +968,8 @@ class w {
964
968
  r2.status = "error", r2.error = "GTE: Stack underflow";
965
969
  break;
966
970
  }
967
- const c2 = d(e2), i2 = d(t2);
968
- r2.stack.push(c2 >= i2), r2.pc++;
971
+ const o2 = d(e2), i2 = d(t2);
972
+ r2.stack.push(o2 >= i2), r2.pc++;
969
973
  break;
970
974
  }
971
975
  case r$1.EQ_STRICT: {
@@ -1100,20 +1104,20 @@ class w {
1100
1104
  break;
1101
1105
  }
1102
1106
  const t2 = r2.stack.length;
1103
- let e2, c2, i2;
1104
- const _ = r2.stack[t2 - 1], I2 = r2.stack[t2 - 2];
1105
- if (t2 >= 3 && typeof _ == "number" && typeof I2 == "number" ? (i2 = r2.stack.pop(), c2 = r2.stack.pop(), e2 = r2.stack.pop()) : (c2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
1107
+ let e2, o2, i2;
1108
+ const w2 = r2.stack[t2 - 1], _ = r2.stack[t2 - 2];
1109
+ if (t2 >= 3 && typeof w2 == "number" && typeof _ == "number" ? (i2 = r2.stack.pop(), o2 = r2.stack.pop(), e2 = r2.stack.pop()) : (o2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
1106
1110
  r2.status = "error", r2.error = "STRING_SUBSTRING requires a string";
1107
1111
  break;
1108
1112
  }
1109
- if (typeof c2 != "number") {
1113
+ if (typeof o2 != "number") {
1110
1114
  r2.status = "error", r2.error = "STRING_SUBSTRING requires numeric start index";
1111
1115
  break;
1112
1116
  }
1113
- const T = e2.length;
1114
- c2 < 0 && (c2 = Math.max(0, T + c2)), i2 !== void 0 && i2 < 0 && (i2 = Math.max(0, T + i2));
1115
- const y2 = i2 !== void 0 ? e2.substring(c2, i2) : e2.substring(c2);
1116
- r2.stack.push(y2), r2.pc++;
1117
+ const S = e2.length;
1118
+ o2 < 0 && (o2 = Math.max(0, S + o2)), i2 !== void 0 && i2 < 0 && (i2 = Math.max(0, S + i2));
1119
+ const O = i2 !== void 0 ? e2.substring(o2, i2) : e2.substring(o2);
1120
+ r2.stack.push(O), r2.pc++;
1117
1121
  break;
1118
1122
  }
1119
1123
  case r$1.STRING_INDEXOF: {
@@ -1139,8 +1143,72 @@ class w {
1139
1143
  r2.status = "error", r2.error = "STRING_SPLIT requires string arguments";
1140
1144
  break;
1141
1145
  }
1142
- let c2;
1143
- t2 === "" ? c2 = e2.split("") : c2 = e2.split(t2), r2.stack.push(p$1(c2)), r2.pc++;
1146
+ let o2;
1147
+ t2 === "" ? o2 = e2.split("") : o2 = e2.split(t2), r2.stack.push(p$1(o2)), r2.pc++;
1148
+ break;
1149
+ }
1150
+ case r$1.STRING_SLICE: {
1151
+ if (r2.stack.length < 2) {
1152
+ r2.status = "error", r2.error = "STRING_SLICE: Stack underflow";
1153
+ break;
1154
+ }
1155
+ const t2 = r2.stack.length;
1156
+ let e2, o2, i2;
1157
+ const w2 = r2.stack[t2 - 1], _ = r2.stack[t2 - 2];
1158
+ if (t2 >= 3 && typeof w2 == "number" && typeof _ == "number" ? (i2 = r2.stack.pop(), o2 = r2.stack.pop(), e2 = r2.stack.pop()) : (o2 = r2.stack.pop(), e2 = r2.stack.pop(), i2 = void 0), !n(e2)) {
1159
+ r2.status = "error", r2.error = "STRING_SLICE requires a string";
1160
+ break;
1161
+ }
1162
+ if (typeof o2 != "number") {
1163
+ r2.status = "error", r2.error = "STRING_SLICE requires numeric start index";
1164
+ break;
1165
+ }
1166
+ const S = i2 !== void 0 ? e2.slice(o2, i2) : e2.slice(o2);
1167
+ r2.stack.push(S), r2.pc++;
1168
+ break;
1169
+ }
1170
+ case r$1.STRING_CHARAT: {
1171
+ const t2 = r2.stack.pop(), e2 = r2.stack.pop();
1172
+ if (t2 === void 0 || e2 === void 0) {
1173
+ r2.status = "error", r2.error = "STRING_CHARAT: Stack underflow";
1174
+ break;
1175
+ }
1176
+ if (!n(e2)) {
1177
+ r2.status = "error", r2.error = "STRING_CHARAT requires a string";
1178
+ break;
1179
+ }
1180
+ if (typeof t2 != "number") {
1181
+ r2.status = "error", r2.error = "STRING_CHARAT requires numeric index";
1182
+ break;
1183
+ }
1184
+ const o2 = e2.charAt(t2);
1185
+ r2.stack.push(o2), r2.pc++;
1186
+ break;
1187
+ }
1188
+ case r$1.STRING_TOUPPERCASE: {
1189
+ const t2 = r2.stack.pop();
1190
+ if (t2 === void 0) {
1191
+ r2.status = "error", r2.error = "STRING_TOUPPERCASE: Stack underflow";
1192
+ break;
1193
+ }
1194
+ if (!n(t2)) {
1195
+ r2.status = "error", r2.error = "STRING_TOUPPERCASE requires a string";
1196
+ break;
1197
+ }
1198
+ r2.stack.push(t2.toUpperCase()), r2.pc++;
1199
+ break;
1200
+ }
1201
+ case r$1.STRING_TOLOWERCASE: {
1202
+ const t2 = r2.stack.pop();
1203
+ if (t2 === void 0) {
1204
+ r2.status = "error", r2.error = "STRING_TOLOWERCASE: Stack underflow";
1205
+ break;
1206
+ }
1207
+ if (!n(t2)) {
1208
+ r2.status = "error", r2.error = "STRING_TOLOWERCASE requires a string";
1209
+ break;
1210
+ }
1211
+ r2.stack.push(t2.toLowerCase()), r2.pc++;
1144
1212
  break;
1145
1213
  }
1146
1214
  case r$1.BREAK: {
@@ -1169,6 +1237,24 @@ class w {
1169
1237
  r2.pc = t2;
1170
1238
  break;
1171
1239
  }
1240
+ case r$1.FS_LIST_FILES: {
1241
+ if (r2.stack.length < 1) {
1242
+ r2.status = "error", r2.error = "FS_LIST_FILES: Stack underflow";
1243
+ break;
1244
+ }
1245
+ let t2, e$1 = {};
1246
+ const o2 = r2.stack[r2.stack.length - 1];
1247
+ if (r2.stack.length >= 2 && typeof o2 == "object" && o2 !== null && !e(o2) && (e$1 = r2.stack.pop()), t2 = r2.stack.pop(), !n(t2)) {
1248
+ r2.status = "error", r2.error = "FS_LIST_FILES requires a string path";
1249
+ break;
1250
+ }
1251
+ r2.fsOperation = {
1252
+ type: "listFiles",
1253
+ path: t2,
1254
+ options: e$1
1255
+ }, r2.status = "waiting_fs";
1256
+ break;
1257
+ }
1172
1258
  default:
1173
1259
  r2.status = "error", r2.error = `Unknown opcode: ${n$1.op} (type: ${typeof n$1.op})`;
1174
1260
  }
@@ -1187,12 +1273,69 @@ class w {
1187
1273
  };
1188
1274
  return this.execute(r2, n2);
1189
1275
  }
1276
+ resumeWithFsResult(a2, s2, r2) {
1277
+ if (a2.status !== "waiting_fs")
1278
+ throw new Error("Cannot resume: VM not waiting for FS operation");
1279
+ const n2 = {
1280
+ ...a2,
1281
+ stack: [...a2.stack, s2],
1282
+ status: "running",
1283
+ fsOperation: void 0,
1284
+ pc: a2.pc + 1
1285
+ };
1286
+ return this.execute(r2, n2);
1287
+ }
1190
1288
  }
1191
- class D {
1192
- constructor(a2) {
1193
- E(this, "vms", /* @__PURE__ */ new Map());
1194
- E(this, "storage");
1195
- a2 ? this.storage = a2 : this.storage = g.create();
1289
+ class P {
1290
+ constructor() {
1291
+ N2(this, "sandboxPaths", []);
1292
+ const a2 = process.env.CVM_SANDBOX_PATHS, s2 = process.env.CVM_SANDBOX_ROOT;
1293
+ a2 ? this.sandboxPaths = a2.split(",").map((r2) => c__namespace.resolve(r2.trim())) : s2 && (this.sandboxPaths = [c__namespace.resolve(s2)]);
1294
+ }
1295
+ isPathAllowed(a2) {
1296
+ const s2 = c__namespace.resolve(a2);
1297
+ return s2.includes("..") || this.sandboxPaths.length === 0 ? false : this.sandboxPaths.some(
1298
+ (r2) => s2.startsWith(r2)
1299
+ );
1300
+ }
1301
+ listFiles(a2, s2 = {}) {
1302
+ const r2 = p$1();
1303
+ if (!this.isPathAllowed(a2))
1304
+ return r2;
1305
+ try {
1306
+ const n2 = c__namespace.resolve(a2);
1307
+ this.listFilesRecursive(n2, n2, r2.elements, s2);
1308
+ } catch {
1309
+ }
1310
+ return r2;
1311
+ }
1312
+ matchesPattern(a2, s2) {
1313
+ let r2 = s2.replace(/\./g, "\\.").replace(/\*\*/g, "__DOUBLESTAR__").replace(/\*/g, "[^/]*").replace(/__DOUBLESTAR__/g, ".*").replace(/\?/g, ".");
1314
+ r2 = "^" + r2 + "$";
1315
+ try {
1316
+ return new RegExp(r2).test(a2);
1317
+ } catch {
1318
+ return true;
1319
+ }
1320
+ }
1321
+ listFilesRecursive(a2, s2, r2, n2, f2 = 0) {
1322
+ try {
1323
+ const u2 = M__namespace.readdirSync(s2, { withFileTypes: true });
1324
+ for (const l2 of u2) {
1325
+ const k2 = c__namespace.join(s2, l2.name), t2 = c__namespace.relative(a2, k2);
1326
+ l2.isSymbolicLink() || n2.filter && !this.matchesPattern(t2, n2.filter) || (r2.push(k2), l2.isDirectory() && n2.recursive && this.listFilesRecursive(a2, k2, r2, n2, f2 + 1));
1327
+ }
1328
+ } catch {
1329
+ }
1330
+ }
1331
+ }
1332
+ new P();
1333
+ class $ {
1334
+ constructor(a2, s2) {
1335
+ N2(this, "vms", /* @__PURE__ */ new Map());
1336
+ N2(this, "storage");
1337
+ N2(this, "fileSystem");
1338
+ a2 ? this.storage = a2 : this.storage = g.create(), this.fileSystem = s2 || new P();
1196
1339
  }
1197
1340
  /**
1198
1341
  * Initialize the VMManager (connect to database)
@@ -1210,7 +1353,7 @@ class D {
1210
1353
  * Load and compile a program from source code
1211
1354
  */
1212
1355
  async loadProgram(a2, s2) {
1213
- const r2 = g$1(s2);
1356
+ const r2 = k(s2);
1214
1357
  if (!r2.success)
1215
1358
  throw new Error(`Compilation failed: ${r2.errors.join(", ")}`);
1216
1359
  const n2 = {
@@ -1239,7 +1382,7 @@ class D {
1239
1382
  created: /* @__PURE__ */ new Date()
1240
1383
  };
1241
1384
  await this.storage.saveExecution(n2);
1242
- const f2 = new w();
1385
+ const f2 = new A();
1243
1386
  this.vms.set(s2, f2);
1244
1387
  }
1245
1388
  /**
@@ -1255,28 +1398,43 @@ class D {
1255
1398
  if (!r2)
1256
1399
  throw new Error(`Program not found: ${s2.programId}`);
1257
1400
  let n2 = this.vms.get(a2);
1258
- n2 || (n2 = new w(), this.vms.set(a2, n2));
1401
+ n2 || (n2 = new A(), this.vms.set(a2, n2));
1259
1402
  const f2 = {
1260
1403
  pc: 0,
1261
1404
  stack: [],
1262
1405
  variables: /* @__PURE__ */ new Map(),
1263
1406
  output: []
1264
- }, p2 = n2.execute(r2.bytecode, f2);
1265
- if (p2.output.length > 0 && await this.storage.appendOutput(a2, p2.output), s2.pc = p2.pc, s2.stack = p2.stack, s2.variables = Object.fromEntries(p2.variables), p2.status === "complete")
1266
- return s2.state = "COMPLETED", p2.returnValue !== void 0 && (s2.returnValue = p2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1407
+ }, u2 = n2.execute(r2.bytecode, f2);
1408
+ 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), s2.iterators = u2.iterators, u2.status === "complete")
1409
+ return s2.state = "COMPLETED", u2.returnValue !== void 0 && (s2.returnValue = u2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1267
1410
  type: "completed",
1268
1411
  message: "Execution completed",
1269
- result: p2.returnValue
1412
+ result: u2.returnValue
1270
1413
  };
1271
- if (p2.status === "waiting_cc")
1272
- return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = p2.ccPrompt, await this.storage.saveExecution(s2), {
1414
+ if (u2.status === "waiting_cc")
1415
+ return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = u2.ccPrompt, await this.storage.saveExecution(s2), {
1273
1416
  type: "waiting",
1274
- message: p2.ccPrompt || "Waiting for input"
1417
+ message: u2.ccPrompt || "Waiting for input"
1275
1418
  };
1276
- if (p2.status === "error")
1277
- return s2.state = "ERROR", s2.error = p2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1419
+ if (u2.status === "waiting_fs") {
1420
+ if (u2.fsOperation) {
1421
+ const l2 = this.fileSystem.listFiles(u2.fsOperation.path, u2.fsOperation.options), k2 = n2.resumeWithFsResult(u2, l2, r2.bytecode);
1422
+ return k2.output.length > 0 && await this.storage.appendOutput(a2, k2.output), s2.pc = k2.pc, s2.stack = k2.stack, s2.variables = Object.fromEntries(k2.variables), s2.iterators = k2.iterators, k2.status === "complete" ? (s2.state = "COMPLETED", k2.returnValue !== void 0 && (s2.returnValue = k2.returnValue), await this.storage.saveExecution(s2), this.vms.delete(a2), {
1423
+ type: "completed",
1424
+ message: "Execution completed",
1425
+ result: k2.returnValue
1426
+ }) : k2.status === "error" ? (s2.state = "ERROR", s2.error = k2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1427
+ type: "error",
1428
+ error: k2.error
1429
+ }) : k2.status === "waiting_cc" ? (s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt = k2.ccPrompt, await this.storage.saveExecution(s2), {
1430
+ type: "waiting",
1431
+ message: k2.ccPrompt || "Waiting for input"
1432
+ }) : (s2.state = "RUNNING", await this.storage.saveExecution(s2), this.getNext(a2));
1433
+ }
1434
+ } else if (u2.status === "error")
1435
+ return s2.state = "ERROR", s2.error = u2.error, await this.storage.saveExecution(s2), this.vms.delete(a2), {
1278
1436
  type: "error",
1279
- error: p2.error
1437
+ error: u2.error
1280
1438
  };
1281
1439
  }
1282
1440
  if (s2.state === "COMPLETED")
@@ -1307,8 +1465,8 @@ class D {
1307
1465
  if (!n2)
1308
1466
  throw new Error(`Program not found: ${r2.programId}`);
1309
1467
  let f2 = this.vms.get(a2);
1310
- f2 || (f2 = new w(), this.vms.set(a2, f2));
1311
- const p2 = {
1468
+ f2 || (f2 = new A(), this.vms.set(a2, f2));
1469
+ const u2 = {
1312
1470
  pc: r2.pc,
1313
1471
  stack: r2.stack,
1314
1472
  variables: new Map(Object.entries(r2.variables)),
@@ -1316,10 +1474,9 @@ class D {
1316
1474
  output: [],
1317
1475
  // Start with empty output for resumed execution
1318
1476
  ccPrompt: void 0,
1319
- iterators: []
1320
- // TODO: persist iterators in future
1321
- }, k2 = f2.resume(p2, s2, n2.bytecode);
1322
- 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);
1477
+ iterators: r2.iterators || []
1478
+ }, l2 = f2.resume(u2, s2, n2.bytecode);
1479
+ l2.output.length > 0 && await this.storage.appendOutput(a2, l2.output), r2.pc = l2.pc, r2.stack = l2.stack, r2.variables = Object.fromEntries(l2.variables), r2.iterators = l2.iterators, l2.status === "complete" ? (r2.state = "COMPLETED", l2.returnValue !== void 0 && (r2.returnValue = l2.returnValue), this.vms.delete(a2)) : l2.status === "error" ? (r2.state = "ERROR", r2.error = l2.error, this.vms.delete(a2)) : l2.status === "waiting_cc" ? (r2.state = "AWAITING_COGNITIVE_RESULT", r2.ccPrompt = l2.ccPrompt) : r2.state = "RUNNING", await this.storage.saveExecution(r2);
1323
1480
  }
1324
1481
  /**
1325
1482
  * Get current execution status
@@ -1343,16 +1500,16 @@ class D {
1343
1500
  return await this.storage.getOutput(a2);
1344
1501
  }
1345
1502
  }
1346
- var i = Object.defineProperty;
1347
- var a = (s2, r2, t2) => r2 in s2 ? i(s2, r2, { enumerable: true, configurable: true, writable: true, value: t2 }) : s2[r2] = t2;
1348
- var o = (s2, r2, t2) => a(s2, typeof r2 != "symbol" ? r2 + "" : r2, t2);
1349
- class v {
1503
+ var a = Object.defineProperty;
1504
+ var c = (o2, r2, t2) => r2 in o2 ? a(o2, r2, { enumerable: true, configurable: true, writable: true, value: t2 }) : o2[r2] = t2;
1505
+ var s = (o2, r2, t2) => c(o2, typeof r2 != "symbol" ? r2 + "" : r2, t2);
1506
+ class w {
1350
1507
  constructor(r2 = "0.0.1") {
1351
- o(this, "server");
1352
- o(this, "transport", null);
1353
- o(this, "vmManager");
1354
- o(this, "version");
1355
- this.version = r2, this.vmManager = new D(), this.server = new mcp_js.McpServer({
1508
+ s(this, "server");
1509
+ s(this, "transport", null);
1510
+ s(this, "vmManager");
1511
+ s(this, "version");
1512
+ this.version = r2, this.vmManager = new $(), this.server = new mcp_js.McpServer({
1356
1513
  name: "cvm-server",
1357
1514
  version: this.version
1358
1515
  }), this.setupTools();
@@ -1382,6 +1539,38 @@ class v {
1382
1539
  };
1383
1540
  }
1384
1541
  }
1542
+ ), this.server.tool(
1543
+ "loadFile",
1544
+ {
1545
+ programId: zod.z.string(),
1546
+ filePath: zod.z.string()
1547
+ },
1548
+ async ({ programId: r2, filePath: t2 }) => {
1549
+ try {
1550
+ const e2 = c$2.resolve(t2), i2 = await promises.readFile(e2, "utf-8");
1551
+ return await this.vmManager.loadProgram(r2, i2), {
1552
+ content: [{ type: "text", text: `Program loaded successfully from ${t2}: ${r2}` }]
1553
+ };
1554
+ } catch (e2) {
1555
+ if (e2 instanceof Error) {
1556
+ const i2 = e2;
1557
+ if (i2.code === "ENOENT")
1558
+ return {
1559
+ content: [{ type: "text", text: `Error: File not found: ${t2}` }],
1560
+ isError: true
1561
+ };
1562
+ if (i2.code === "EACCES")
1563
+ return {
1564
+ content: [{ type: "text", text: `Error: Permission denied: ${t2}` }],
1565
+ isError: true
1566
+ };
1567
+ }
1568
+ return {
1569
+ content: [{ type: "text", text: `Error: ${e2 instanceof Error ? e2.message : "Unknown error"}` }],
1570
+ isError: true
1571
+ };
1572
+ }
1573
+ }
1385
1574
  ), this.server.tool(
1386
1575
  "start",
1387
1576
  {
@@ -1475,7 +1664,7 @@ class v {
1475
1664
  return this.vmManager;
1476
1665
  }
1477
1666
  }
1478
- dotenv__namespace.config({ path: c$1.resolve(__dirname, "../../../.env") });
1667
+ dotenv__namespace.config({ path: c$2.resolve(__dirname, "../../../.env") });
1479
1668
  function loadConfig() {
1480
1669
  const env = process.env.NODE_ENV || "development";
1481
1670
  const storageType = process.env.CVM_STORAGE_TYPE || "file";
@@ -1556,7 +1745,7 @@ function getLogger() {
1556
1745
  return logger;
1557
1746
  }
1558
1747
  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);
1559
- const __dirname$1 = c$1.dirname(__filename$1);
1748
+ const __dirname$1 = c$2.dirname(__filename$1);
1560
1749
  async function main() {
1561
1750
  let cvmServer;
1562
1751
  try {
@@ -1565,16 +1754,16 @@ async function main() {
1565
1754
  const logger2 = getLogger();
1566
1755
  let version = "0.4.3";
1567
1756
  const possiblePaths = [
1568
- c$1.join(__dirname$1, "..", "package.json"),
1757
+ c$2.join(__dirname$1, "..", "package.json"),
1569
1758
  // Development
1570
- c$1.join(__dirname$1, "package.json"),
1759
+ c$2.join(__dirname$1, "package.json"),
1571
1760
  // Bundled dist
1572
- c$1.join(process.cwd(), "package.json")
1761
+ c$2.join(process.cwd(), "package.json")
1573
1762
  // Current directory
1574
1763
  ];
1575
1764
  for (const packageJsonPath of possiblePaths) {
1576
1765
  try {
1577
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
1766
+ const packageJson = JSON.parse(M.readFileSync(packageJsonPath, "utf-8"));
1578
1767
  if (packageJson.name === "cvm-server" && packageJson.version) {
1579
1768
  version = packageJson.version;
1580
1769
  break;
@@ -1589,13 +1778,13 @@ async function main() {
1589
1778
  });
1590
1779
  if (config.storage.type === "file") {
1591
1780
  const dataDir = config.storage.dataDir || ".cvm";
1592
- const fullPath = c$1.resolve(process.cwd(), dataDir);
1781
+ const fullPath = c$2.resolve(process.cwd(), dataDir);
1593
1782
  logger2.info(`[CVM] Initializing file storage in: ${fullPath}`);
1594
1783
  logger2.warn(`[CVM] ⚠️ Remember to add '${dataDir}/' to your .gitignore file!`);
1595
1784
  } else {
1596
1785
  logger2.info("[CVM] Using MongoDB storage");
1597
1786
  }
1598
- cvmServer = new v(version);
1787
+ cvmServer = new w(version);
1599
1788
  await cvmServer.start();
1600
1789
  logger2.info("CVM Server is running and ready to accept MCP connections");
1601
1790
  process.on("SIGINT", async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cvm-server",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Cognitive Virtual Machine (CVM) - A deterministic bytecode VM with AI cognitive operations",
5
5
  "keywords": [
6
6
  "mcp",