57 lines
3.0 KiB
TypeScript
57 lines
3.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { augmentProjectBrainInitialize, handleProjectBrainSkillMethod } from "../src/mcp/skills.js";
|
|
|
|
type SkillList = { skills: Array<{ uri: string }> };
|
|
type SkillResource = { contents: Array<{ text: string }> };
|
|
|
|
describe("ProjectBrain MCP skills", () => {
|
|
it("publishes canonical public workflows for repository bootstrap and delivery", () => {
|
|
const listed = handleProjectBrainSkillMethod("skills/list", {}) as SkillList;
|
|
const uris = listed.skills.map((skill) => skill.uri);
|
|
|
|
expect(uris).toContain("skill://projectbrain/repository-bootstrap/SKILL.md");
|
|
expect(uris).toContain("skill://projectbrain/feature-delivery/SKILL.md");
|
|
|
|
const bootstrap = handleProjectBrainSkillMethod("resources/read", { uri: "skill://projectbrain/repository-bootstrap/SKILL.md" }) as SkillResource;
|
|
expect(bootstrap.contents[0]?.text).toContain("gitea.repository.create");
|
|
expect(bootstrap.contents[0]?.text).toContain("projectbrain.portfolio.repository.reconcile");
|
|
|
|
const delivery = handleProjectBrainSkillMethod("resources/read", { uri: "skill://projectbrain/feature-delivery/SKILL.md" }) as SkillResource;
|
|
expect(delivery.contents[0]?.text).toContain("projectbrain.delivery.changeset.apply");
|
|
expect(delivery.contents[0]?.text).toContain("projectbrain.delivery.merge");
|
|
expect(delivery.contents[0]?.text).toContain("gitea.workspace.run");
|
|
expect(delivery.contents[0]?.text).not.toContain("apply_feature_changeset");
|
|
expect(delivery.contents[0]?.text).not.toContain("merge_feature_delivery");
|
|
});
|
|
|
|
it("publishes the Gitea-first Auto execution contract", () => {
|
|
const operator = handleProjectBrainSkillMethod("resources/read", { uri: "skill://projectbrain/projectbrain-operator/SKILL.md" }) as SkillResource;
|
|
const text = operator.contents[0]?.text ?? "";
|
|
|
|
expect(text).toContain("Gitea is the only primary repository execution surface");
|
|
expect(text).toContain("projectbrain/auto/<normalized-work-id>");
|
|
expect(text).toContain("atomic execution claim");
|
|
expect(text).toContain("exact-head validation evidence");
|
|
expect(text).toContain("missing or interrupted report_auto_work callback");
|
|
expect(text).toContain("No OpenAI API key is required");
|
|
});
|
|
|
|
it("advertises Gitea as the primary Auto execution surface during MCP initialization", () => {
|
|
const initialized = augmentProjectBrainInitialize({ result: { capabilities: {} } }) as {
|
|
result: { instructions: string };
|
|
};
|
|
|
|
expect(initialized.result.instructions).toContain(
|
|
"Gitea as its only primary repository execution surface",
|
|
);
|
|
expect(initialized.result.instructions).toContain("projectbrain/auto/<normalized-work-id>");
|
|
expect(initialized.result.instructions).toContain("Branch existence is the atomic claim");
|
|
expect(initialized.result.instructions).toContain(
|
|
"report_auto_work are backward-compatible coordination/bookkeeping surfaces only",
|
|
);
|
|
expect(initialized.result.instructions).toContain(
|
|
"Never write directly to the default branch",
|
|
);
|
|
});
|
|
});
|