fix(experiment): exhaust native baseline catalog pages

Derive missing-tool coverage only after all catalog pages are examined, reject cursor loops and omit unused result schemas in name-only generation while honoring explicit caller settings.

The final actual MCP generator preserves the measured 16-tool selection and verifies owned cleanup under the resource bounds.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
This commit is contained in:
N0zoM1z0
2026-10-16 17:45:41 +00:00
parent 3e08a6aeaf
commit 1aaa21296f
@@ -29,16 +29,32 @@ const client = new Client({
const transport = new StdioClientTransport({
command: process.execPath,
args: [resolve("scripts/rea.mjs"), "mcp"],
env: { ...process.env },
env: {
...process.env,
// This pass needs tool identities, not large result schemas. Keep any
// explicit caller profile; the measured runner already selects off.
REA_MCP_OUTPUT_SCHEMA_PROFILE:
process.env.REA_MCP_OUTPUT_SCHEMA_PROFILE ?? "off",
},
stderr: "pipe",
});
let names;
try {
await client.connect(transport);
const { tools } = await client.listTools();
names = tools
.filter((tool) => desired.has(tool.name))
.map((tool) => tool.name);
names = [];
const cursors = new Set();
let cursor;
do {
assert.ok(!cursors.has(cursor), "Catalog pagination did not advance");
cursors.add(cursor);
const page = await client.listTools(cursor === undefined ? {} : { cursor });
names.push(
...page.tools
.filter((tool) => desired.has(tool.name))
.map((tool) => tool.name),
);
cursor = page.nextCursor;
} while (cursor !== undefined);
assert.equal(
new Set(names).size,
names.length,