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.
- package/main.cjs +379 -190
- 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$
|
|
6
|
-
const
|
|
7
|
-
const c$
|
|
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$
|
|
29
|
-
const
|
|
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
|
|
32
|
-
var
|
|
33
|
-
var
|
|
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
|
|
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
|
|
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" && (
|
|
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" && (
|
|
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),
|
|
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:
|
|
60
|
+
hasMain: o2
|
|
59
61
|
};
|
|
60
62
|
}
|
|
61
|
-
class
|
|
63
|
+
let N$1 = class N {
|
|
62
64
|
constructor() {
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
71
|
-
return this.bytecode.push({ op: l2, arg: e2 }),
|
|
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((
|
|
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
|
|
138
|
-
const l2 =
|
|
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
|
|
146
|
-
function
|
|
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),
|
|
154
|
-
const
|
|
155
|
-
c2.endTargets.push(
|
|
156
|
-
const
|
|
157
|
-
e2.patchJump(i2,
|
|
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
|
|
160
|
-
if (
|
|
161
|
-
const
|
|
162
|
-
e2.patchJumps(
|
|
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
|
|
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(
|
|
175
|
-
const
|
|
176
|
-
if (
|
|
177
|
-
const
|
|
178
|
-
e2.patchJumps(
|
|
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
|
|
184
|
+
let m2;
|
|
183
185
|
if (s__namespace.isVariableDeclarationList(i2))
|
|
184
|
-
|
|
186
|
+
m2 = i2.declarations[0].name.getText();
|
|
185
187
|
else if (s__namespace.isIdentifier(i2))
|
|
186
|
-
|
|
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
|
|
192
|
+
const x = e2.currentAddress();
|
|
191
193
|
e2.emit(r$1.ITER_NEXT);
|
|
192
|
-
const
|
|
193
|
-
e2.emit(r$1.STORE,
|
|
194
|
-
const
|
|
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: [
|
|
198
|
+
breakTargets: [S],
|
|
197
199
|
continueTargets: [],
|
|
198
200
|
endTargets: [],
|
|
199
|
-
startAddress:
|
|
200
|
-
iterVariable:
|
|
201
|
+
startAddress: x,
|
|
202
|
+
iterVariable: m2
|
|
201
203
|
};
|
|
202
|
-
e2.pushContext(
|
|
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
|
-
|
|
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
|
|
245
|
-
e2.emit(r$1.STORE,
|
|
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 === "
|
|
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"
|
|
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
|
|
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),
|
|
390
|
-
e2.patchJump(i2,
|
|
391
|
-
const
|
|
392
|
-
e2.patchJump(c2,
|
|
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
|
|
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
|
-
|
|
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
|
|
407
|
-
return !!(s__namespace.isStringLiteral(n2) || s__namespace.isStringLiteral(l2) || s__namespace.isBinaryExpression(n2) && n2.operatorToken.kind === s__namespace.SyntaxKind.PlusToken && E
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
442
|
+
if (i(r2)) return r2 ? 1 : 0;
|
|
439
443
|
if (f(r2)) return 0;
|
|
440
|
-
if (o
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
606
|
-
var
|
|
607
|
-
var
|
|
608
|
-
class
|
|
609
|
-
execute(a2,
|
|
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: (
|
|
612
|
-
stack: (
|
|
613
|
-
variables: (
|
|
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: (
|
|
616
|
-
iterators: (
|
|
617
|
-
...
|
|
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
|
|
649
|
-
if (
|
|
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(
|
|
657
|
+
r2.stack.push(c$1(l2) + c$1(u2)), r2.pc++;
|
|
654
658
|
break;
|
|
655
659
|
case r$1.PRINT:
|
|
656
|
-
const
|
|
657
|
-
|
|
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
|
|
700
|
-
r2.stack.push(
|
|
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(),
|
|
705
|
-
if (t$1 === void 0 || e$1 === 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(
|
|
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
|
-
|
|
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
|
|
804
|
-
r2.stack.push(
|
|
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
|
|
814
|
-
r2.stack.push(
|
|
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
|
|
824
|
-
r2.stack.push(
|
|
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
|
|
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(
|
|
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
|
|
848
|
-
r2.stack.push(
|
|
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,
|
|
879
|
-
r2.variables.set(t2,
|
|
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) :
|
|
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,
|
|
891
|
-
r2.variables.set(t2,
|
|
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) :
|
|
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
|
|
907
|
+
if (f(e2) && o(t2) || o(e2) && f(t2))
|
|
904
908
|
r2.stack.push(true);
|
|
905
|
-
else if (o
|
|
909
|
+
else if (o(e2) && o(t2))
|
|
906
910
|
r2.stack.push(true);
|
|
907
911
|
else {
|
|
908
|
-
const
|
|
909
|
-
!isNaN(
|
|
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
|
|
924
|
+
if (f(e2) && o(t2) || o(e2) && f(t2))
|
|
921
925
|
r2.stack.push(false);
|
|
922
|
-
else if (o
|
|
926
|
+
else if (o(e2) && o(t2))
|
|
923
927
|
r2.stack.push(false);
|
|
924
928
|
else {
|
|
925
|
-
const
|
|
926
|
-
!isNaN(
|
|
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
|
|
938
|
-
r2.stack.push(
|
|
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
|
|
948
|
-
r2.stack.push(
|
|
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
|
|
958
|
-
r2.stack.push(
|
|
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
|
|
968
|
-
r2.stack.push(
|
|
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,
|
|
1104
|
-
const
|
|
1105
|
-
if (t2 >= 3 && typeof
|
|
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
|
|
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
|
|
1114
|
-
|
|
1115
|
-
const
|
|
1116
|
-
r2.stack.push(
|
|
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
|
|
1143
|
-
t2 === "" ?
|
|
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
|
|
1192
|
-
constructor(
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
a2 ? this.
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
},
|
|
1265
|
-
if (
|
|
1266
|
-
return s2.state = "COMPLETED",
|
|
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:
|
|
1412
|
+
result: u2.returnValue
|
|
1270
1413
|
};
|
|
1271
|
-
if (
|
|
1272
|
-
return s2.state = "AWAITING_COGNITIVE_RESULT", s2.ccPrompt =
|
|
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:
|
|
1417
|
+
message: u2.ccPrompt || "Waiting for input"
|
|
1275
1418
|
};
|
|
1276
|
-
if (
|
|
1277
|
-
|
|
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:
|
|
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
|
|
1311
|
-
const
|
|
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
|
-
|
|
1321
|
-
|
|
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
|
|
1347
|
-
var
|
|
1348
|
-
var
|
|
1349
|
-
class
|
|
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
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
this.version = r2, this.vmManager = new
|
|
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$
|
|
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$
|
|
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$
|
|
1757
|
+
c$2.join(__dirname$1, "..", "package.json"),
|
|
1569
1758
|
// Development
|
|
1570
|
-
c$
|
|
1759
|
+
c$2.join(__dirname$1, "package.json"),
|
|
1571
1760
|
// Bundled dist
|
|
1572
|
-
c$
|
|
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(
|
|
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$
|
|
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
|
|
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 () => {
|