38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { createHash } from "node:crypto";
|
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
|
|
import { generateAgentOpenApi } from "../src/contracts/openapi.js";
|
|
|
|
const canonicalJson = (value: unknown) => `${JSON.stringify(value, null, 2)}\n`;
|
|
const document = generateAgentOpenApi();
|
|
const payload = canonicalJson(document);
|
|
const sha256 = createHash("sha256").update(payload).digest("hex");
|
|
const manifestPayload = canonicalJson({
|
|
contract_version: "1.0.0",
|
|
contracts: {
|
|
agent: {
|
|
file: "agent-v1.openapi.json",
|
|
sha256,
|
|
},
|
|
},
|
|
});
|
|
|
|
if (process.argv.includes("--check")) {
|
|
const currentContract = await readFile(
|
|
"contracts/agent-v1.openapi.json",
|
|
"utf8",
|
|
);
|
|
const currentManifest = await readFile("contracts/manifest.json", "utf8");
|
|
if (currentContract !== payload || currentManifest !== manifestPayload) {
|
|
throw new Error(
|
|
"Agent OpenAPI contract is stale: run `bun run contract:generate`",
|
|
);
|
|
}
|
|
console.log(`validated Agent OpenAPI contract (${sha256})`);
|
|
} else {
|
|
await mkdir("contracts", { recursive: true });
|
|
await writeFile("contracts/agent-v1.openapi.json", payload, "utf8");
|
|
await writeFile("contracts/manifest.json", manifestPayload, "utf8");
|
|
console.log(`generated Agent OpenAPI contract (${sha256})`);
|
|
}
|