~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/atlibs-code-mode

0
0
main
39 lines · 2.8 KB Raw History
// The example composition, offline: the stub agent speaks MCP to code mode in Node (runCompose, a
// stand-in for the host's call), and on the Rust atlibs CLI with js/cli.mjs as its exec handler.
import assert from "node:assert/strict";
import { execFile } from "node:child_process";
import { mkdtemp, readFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { test } from "node:test";
import { fileURLToPath } from "node:url";
import { promisify } from "node:util";

import { createNodeContext } from "@publicdomainrelay/atlibs/server/index.js";
import { EXAMPLE, build, runAgent } from "./agent.mjs";

const ctx = createNodeContext({ id: "code-mode-example-test", stateDir: await mkdtemp(join(tmpdir(), "code-mode-example-")) });
const text = (value) => JSON.parse(value.result.content[0].text);

test("Node: the agent lists the tools and runs its program, whose call goes through the host's call", async () => {
	const call = async (nsid, request) => (assert.equal(request.service, "did:plc:alice"), { handle: "alice.test", collections: ["a", "b"] });
	const ran = await runAgent(ctx, { code: EXAMPLE, input: { did: "did:plc:alice" } }, { call });
	assert.equal(ran.error, undefined);
	assert.equal(ran.result.stdout, "server: atlibs-code-mode 2025-11-25\ntool: run_assemblyscript\n");
	assert.deepEqual(text(ran.result.value), { stdout: "describing did:plc:alice\n", result: { handle: "alice.test", collections: 2 } });
	assert.deepEqual(ran.graph.map((g) => [g.handler, g.ok]), Array(4).fill(["mcp", true]));
});

test("compose.ts writes composition.json", async () => {
	const { stdout } = await promisify(execFile)(process.execPath, [fileURLToPath(new URL("compose.ts", import.meta.url))]);
	assert.equal(stdout, await readFile(new URL("composition.json", import.meta.url), "utf8"));
});

const atlibs = await promisify(execFile)("atlibs", ["--help"]).then(() => "atlibs", () => undefined);
test("Rust: atlibs run with js/cli.mjs as the mcp exec handler", { skip: !atlibs && "no atlibs CLI on PATH (cargo host in ../atlibs)" }, async () => {
	await build(); // modules/stub-agent.wasm, beside the composition's modules/stub-agent.json
	const handler = `mcp=exec:${process.execPath} ${fileURLToPath(new URL("../js/cli.mjs", import.meta.url))}`;
	const input = { input: { code: 'export function main(run: Run): void { print("on wasmtime\'s host"); run.finish(Json.number(7)); }' } };
	const { stdout } = await promisify(execFile)("atlibs", ["run", fileURLToPath(new URL("composition.json", import.meta.url)), "agent", "run", JSON.stringify(input), "--handler", handler, "--allow-exec"], { env: { PATH: process.env.PATH, HOME: process.env.HOME } });
	assert.deepEqual(text(JSON.parse(stdout).result.value), { stdout: "on wasmtime's host\n", result: 7 });
});