Files
rea/experiments/atomic-codemode/reference.test.mjs
T
14bc2bca21 fix(experiment): align named reference lookup with input contracts
Share displayed method names with direct registration, support explicit multi-name selection and unmatched terms, and cache immutable schema conversions by schema identity. Export input-side schemas so defaulted fields stay optional; verify both actual MCP catalogs and named contracts before repeating the unchanged model task.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
2026-10-16 11:41:48 +00:00

72 lines
2.5 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import Ajv2020 from "ajv/dist/2020.js";
import { methods, reference } from "./api.mjs";
test("named reference lists preserve caller order and exact schemas across presentations", () => {
const names = Object.fromEntries(
Object.keys(methods).map((name) => [name, `facts_${name}`]),
);
const result = reference(
"facts_values, facts_snapshot facts_values unknown",
{ names, includeExamples: false },
);
assert.deepEqual(
result.methods.map((m) => m.method),
["values", "snapshot"],
);
assert.deepEqual(
result.methods.map((m) => m.name),
["facts_values", "facts_snapshot"],
);
assert.deepEqual(result.unmatched_queries, ["unknown"]);
assert.equal(result.coverage.declared_methods, 14);
assert.equal(result.coverage.matched_methods, 2);
assert.equal(result.coverage.selection, "named");
const javascript = reference("rea.values snapshot");
assert.deepEqual(
javascript.methods.map((m) => m.method),
["values", "snapshot"],
);
assert.deepEqual(
result.methods.map((m) => m.input_schema),
javascript.methods.map((m) => m.input_schema),
);
const validate = new Ajv2020({ strict: false }).compile(
result.methods[1].input_schema,
);
assert.equal(validate({ entry: "0xea6d0" }), true);
assert.equal(validate({ snapshot: "wrong contract" }), false);
const validateValues = new Ajv2020({ strict: false }).compile(
result.methods[0].input_schema,
);
assert.equal(validateValues({ snapshot: "snap_example", ids: ["v1"] }), true);
assert.equal(
methods.values.input.parse({ snapshot: "snap_example" }).limit,
20,
);
assert.equal(Object.hasOwn(result.methods[0], "example"), false);
});
test("topic/all reference selection and shared schema ownership remain explicit", () => {
assert.equal(reference().methods.length, 14);
assert.equal(reference("no-such-topic").coverage.matched_methods, 0);
assert.ok(
reference("memory aliases").methods.some((m) => m.method === "slice"),
);
const before = reference("snapshot").methods[0];
assert.throws(() => {
before.input_schema.properties.entry.type = "number";
}, TypeError);
const after = reference("snapshot").methods[0];
assert.equal(after.input_schema.properties.entry.type, "string");
assert.throws(
() => reference("values", { names: { snapshot: "values" } }),
/Ambiguous/,
);
assert.throws(
() => reference("values", { names: { unknown: "facts_values" } }),
/Unknown/,
);
});