Reject oversized error delivery with explicit omission metadata, account for JSON escaping, and retain source observations and their lookup after failure. Reproduce and verify the real MCP path without claiming model-token savings from byte counts. Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com> Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
121 lines
4.2 KiB
JavaScript
121 lines
4.2 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { executeJavaScript } from "./executor.mjs";
|
|
|
|
const fake = {
|
|
context: { lease: "test" },
|
|
call: async (name, input) => ({ ok: true, data: { name, input } }),
|
|
};
|
|
test("real QuickJS composes async API calls and does not expose host globals", async () => {
|
|
const result = await executeJavaScript(
|
|
fake,
|
|
'const a=await rea.strings({query:"x"}); const b=await rea.operations({ids:[a.data.name]}); return {a,b,host:[typeof process,typeof require,typeof fetch]};',
|
|
);
|
|
assert.equal(result.ok, true, JSON.stringify(result));
|
|
assert.deepEqual(result.value.host, ["undefined", "undefined", "undefined"]);
|
|
assert.equal(result.calls.length, 2);
|
|
assert.equal(result.value.b.data.input.ids[0], "strings");
|
|
});
|
|
test("infinite guest execution and never-resolving promises terminate", async () => {
|
|
const loop = await executeJavaScript(fake, "while(true){}", {
|
|
timeoutMs: 30,
|
|
});
|
|
assert.equal(loop.ok, false);
|
|
const stalled = await executeJavaScript(
|
|
fake,
|
|
"await new Promise(()=>{});return 1",
|
|
{ timeoutMs: 30 },
|
|
);
|
|
assert.equal(stalled.ok, false);
|
|
});
|
|
test("output budgets and failures survive without silently clipping evidence", async () => {
|
|
const result = await executeJavaScript(fake, 'return "x".repeat(40000)');
|
|
assert.equal(result.error.code, "output_budget");
|
|
const failure = await executeJavaScript(
|
|
fake,
|
|
'throw new Error("explicit failure")',
|
|
);
|
|
assert.equal(failure.ok, false);
|
|
});
|
|
|
|
test("guest CPU budget is independent from the native-analysis wall deadline", async () => {
|
|
const before = performance.now();
|
|
const result = await executeJavaScript(fake, "while(true){}", {
|
|
timeoutMs: 5000,
|
|
cpuBudgetMs: 25,
|
|
});
|
|
assert.equal(result.error.code, "cpu_budget");
|
|
assert.ok(performance.now() - before < 2000);
|
|
});
|
|
|
|
test("cancelled reads keep partial-observation Evidence in the execution receipt", async () => {
|
|
const result = await executeJavaScript(
|
|
{
|
|
context: { lease: "partial" },
|
|
call: async () => ({
|
|
ok: false,
|
|
error: {
|
|
code: "cancelled",
|
|
details: {
|
|
partial_observation: { source: { evidence_id: "ev_partial" } },
|
|
},
|
|
},
|
|
}),
|
|
},
|
|
"return await rea.strings({query:'x'})",
|
|
);
|
|
assert.deepEqual(result.evidence_ids, ["ev_partial"]);
|
|
assert.equal(result.value.error.code, "cancelled");
|
|
});
|
|
|
|
test("failed compositions keep completed facts and their provenance after draining", async () => {
|
|
const owner = {
|
|
context: { lease: "retained" },
|
|
call: async () => ({ ok: true, data: { evidence_id: "ev_retained" } }),
|
|
};
|
|
for (const ending of [
|
|
'throw new Error("after analysis")',
|
|
'return "x".repeat(40000)',
|
|
]) {
|
|
const result = await executeJavaScript(
|
|
owner,
|
|
`await rea.strings({}); ${ending}`,
|
|
);
|
|
assert.equal(result.ok, false);
|
|
assert.deepEqual(result.evidence_ids, ["ev_retained"]);
|
|
assert.deepEqual(result.context, owner.context);
|
|
assert.equal(result.calls[0].status, "ok");
|
|
}
|
|
});
|
|
|
|
test("guest exceptions obey output capacity, including JSON expansion, and preserve observations", async () => {
|
|
for (const code of [
|
|
'throw new Error("x".repeat(40000))',
|
|
'throw new Error("\\0".repeat(6000))',
|
|
]) {
|
|
const result = await executeJavaScript(
|
|
{
|
|
context: { lease: "error-output" },
|
|
call: async () => ({
|
|
ok: true,
|
|
data: { evidence_id: "ev_before_error" },
|
|
}),
|
|
},
|
|
`await rea.strings({}); ${code}`,
|
|
);
|
|
assert.equal(result.ok, false);
|
|
assert.equal(result.error.code, "output_budget");
|
|
assert.equal(result.error.details.original_error_code, "javascript_error");
|
|
assert.equal(result.error.details.original_message_omitted, true);
|
|
assert.ok(Buffer.byteLength(JSON.stringify(result.error)) <= 32768);
|
|
assert.deepEqual(result.evidence_ids, ["ev_before_error"]);
|
|
assert.equal(result.context.lease, "error-output");
|
|
}
|
|
const ordinary = await executeJavaScript(
|
|
fake,
|
|
'throw new Error("x".repeat(10000))',
|
|
);
|
|
assert.equal(ordinary.error.code, "javascript_error");
|
|
assert.ok(ordinary.error.message.includes("x".repeat(10000)));
|
|
});
|