docs.test.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import assert from "node:assert/strict";
  2. import test from "node:test";
  3. import { readFile } from "node:fs/promises";
  4. import { TOOL_DEFINITIONS } from "../src/mcp-server.js";
  5. test("README commands match package scripts and the executable MCP schemas", async () => {
  6. const [readme, packageText] = await Promise.all([
  7. readFile(new URL("../../README.md", import.meta.url), "utf8"),
  8. readFile(new URL("../../package.json", import.meta.url), "utf8"),
  9. ]);
  10. const packageJson = JSON.parse(packageText) as {
  11. bin: Record<string, string>;
  12. files: string[];
  13. scripts: Record<string, string>;
  14. };
  15. for (const script of ["typecheck", "build", "test", "start", "smoke", "verify:package"]) {
  16. assert.equal(typeof packageJson.scripts[script], "string");
  17. assert.equal(
  18. readme.includes(`npm run ${script}`)
  19. || (script === "start" && readme.includes("npm start"))
  20. || (script === "test" && readme.includes("npm test")),
  21. true,
  22. );
  23. }
  24. assert.equal(packageJson.bin["codex-chief-of-staff"], "dist/src/index.js");
  25. assert.deepEqual(packageJson.files, ["dist/src", "README.md"]);
  26. for (const tool of TOOL_DEFINITIONS) {
  27. assert.equal(readme.includes(`\`${tool.name}(`), true, `README is missing ${tool.name}`);
  28. }
  29. assert.match(readme, /codex mcp add codex-chief-of-staff/);
  30. assert.match(readme, /codex mcp remove codex-chief-of-staff/);
  31. assert.match(readme, /npm install --global/);
  32. assert.match(readme, /command -v codex-chief-of-staff/);
  33. assert.match(readme, /-- codex-chief-of-staff/);
  34. });