50 lines · 1.8 KB · TypeScript
RawDownload
// Cross-target: the MCP surface — connect with fully headless OAuth (DCR →// consent → code → token) and run code in the sandbox, exactly as an MCP// client (Claude, Cursor, …) would.import { expect } from "@effect/vitest";import { Effect } from "effect"; import { scenario } from "../src/scenario";import { Mcp, Target } from "../src/services"; scenario(  "MCP · OAuth connect, then execute code in the sandbox",  {},  Effect.gen(function* () {    const target = yield* Target;    const mcp = yield* Mcp;    const identity = yield* target.newIdentity();    const session = mcp.session(identity);     const tools = yield* session.listTools();    expect(tools, "the execute tool is advertised").toContain("execute");     const result = yield* session.call("execute", { code: "return 6 * 7;" });    expect(result.text, "the sandbox returns the value").toBe("42");  }),); scenario(  "MCP · a syntax error returns a descriptive message, not an opaque internal error",  {},  Effect.gen(function* () {    const target = yield* Target;    const mcp = yield* Mcp;    const identity = yield* target.newIdentity();    const session = mcp.session(identity);     // A genuine parse error (a `const` with no binding) is the user's own    // mistake, surfaced before the code ever runs. The model needs the real    // reason to self-correct, so the sandbox must report it descriptively    // instead of collapsing it to "Internal tool error [id]".    const result = yield* session.call("execute", {      code: "const = 5; return 1;",    });     expect(result.ok, "a syntax error is reported as an error result").toBe(false);    expect(result.text, "the parser's reason reaches the model").toContain("Unexpected");    expect(result.text, "the opaque mask is not used for syntax errors").not.toContain(      "Internal tool error",    );  }),);