import { describe, expect, it } from "vite-plus/test"; import { formatProviderSkillDisplayName, getProviderSlashCommandsForSlashMenu, getProviderSkillsForSlashMenu, resolveProviderSkillSourceKind,} from "./providerSkills.ts"; describe("formatProviderSkillDisplayName", () => { it("prefers the provider display name", () => { expect( formatProviderSkillDisplayName({ name: "review-follow-up", displayName: "Review Follow-up", }), ).toBe("Review Follow-up"); }); it("falls back to a title-cased skill name", () => { expect( formatProviderSkillDisplayName({ name: "review-follow-up", }), ).toBe("Review Follow Up"); });}); describe("getProviderSkillsForSlashMenu", () => { it("keeps the skill alias when the provider also exposes it as a slash command", () => { const askMatt = { name: "ask-matt", path: "/Users/matt/.agents/skills/ask-matt/SKILL.md", enabled: true, }; expect(getProviderSkillsForSlashMenu([askMatt], true).map((skill) => skill.name)).toEqual([ "ask-matt", ]); });}); describe("getProviderSlashCommandsForSlashMenu", () => { const commands = [ { name: "ask-matt", description: "Ask which skill fits your situation." }, { name: "compact", description: "Compact the conversation." }, ]; const skills = [ { name: "ask-matt", path: "/Users/matt/.agents/skills/ask-matt/SKILL.md", enabled: true, }, ]; it("lets the skill alias win when a provider command has the same name", () => { expect( getProviderSlashCommandsForSlashMenu(commands, skills).map((command) => command.name), ).toEqual(["compact"]); }); it("keeps the provider command when the matching skill alias is hidden", () => { const visibleSkills = getProviderSkillsForSlashMenu(skills, false); expect( getProviderSlashCommandsForSlashMenu(commands, visibleSkills).map((command) => command.name), ).toEqual(["ask-matt", "compact"]); });}); describe("resolveProviderSkillSourceKind", () => { it("marks plugin-backed skills as app installs", () => { expect( resolveProviderSkillSourceKind({ path: "/Users/julius/.codex/plugins/cache/openai-curated/github/skills/gh-fix-ci/SKILL.md", scope: "user", }), ).toBe("app"); }); it("maps standard scopes to source kinds", () => { expect( resolveProviderSkillSourceKind({ path: "/workspace/.codex/skills/review-follow-up/SKILL.md", scope: "repo", }), ).toBe("repo"); expect( resolveProviderSkillSourceKind({ path: "/workspace/.codex/skills/review-follow-up/SKILL.md", scope: "project", }), ).toBe("project"); expect( resolveProviderSkillSourceKind({ path: "/Users/julius/.agents/skills/agent-browser/SKILL.md", scope: "user", }), ).toBe("personal"); expect( resolveProviderSkillSourceKind({ path: "/usr/local/share/codex/skills/imagegen/SKILL.md", scope: "system", }), ).toBe("system"); }); it("keeps unknown and missing scopes usable", () => { expect( resolveProviderSkillSourceKind({ path: "/opt/skills/team-review/SKILL.md", scope: "team_shared", }), ).toBe("other"); expect( resolveProviderSkillSourceKind({ path: "/opt/skills/team-review/SKILL.md", }), ).toBe("other"); });});
import { describe, expect, it } from "vite-plus/test";
import {
formatProviderSkillDisplayName,
getProviderSlashCommandsForSlashMenu,
getProviderSkillsForSlashMenu,
resolveProviderSkillSourceKind,
} from "./providerSkills.ts";
describe("formatProviderSkillDisplayName", () => {
it("prefers the provider display name", () => {
expect(
formatProviderSkillDisplayName({
name: "review-follow-up",
displayName: "Review Follow-up",
}),
).toBe("Review Follow-up");
});
it("falls back to a title-cased skill name", () => {
expect(
formatProviderSkillDisplayName({
name: "review-follow-up",
}),
).toBe("Review Follow Up");
});
});
describe("getProviderSkillsForSlashMenu", () => {
it("keeps the skill alias when the provider also exposes it as a slash command", () => {
const askMatt = {
name: "ask-matt",
path: "/Users/matt/.agents/skills/ask-matt/SKILL.md",
enabled: true,
};
expect(getProviderSkillsForSlashMenu([askMatt], true).map((skill) => skill.name)).toEqual([
"ask-matt",
]);
});
});
describe("getProviderSlashCommandsForSlashMenu", () => {
const commands = [
{ name: "ask-matt", description: "Ask which skill fits your situation." },
{ name: "compact", description: "Compact the conversation." },
];
const skills = [
{
name: "ask-matt",
path: "/Users/matt/.agents/skills/ask-matt/SKILL.md",
enabled: true,
},
];
it("lets the skill alias win when a provider command has the same name", () => {
expect(
getProviderSlashCommandsForSlashMenu(commands, skills).map((command) => command.name),
).toEqual(["compact"]);
});
it("keeps the provider command when the matching skill alias is hidden", () => {
const visibleSkills = getProviderSkillsForSlashMenu(skills, false);
expect(
getProviderSlashCommandsForSlashMenu(commands, visibleSkills).map((command) => command.name),
).toEqual(["ask-matt", "compact"]);
});
});
describe("resolveProviderSkillSourceKind", () => {
it("marks plugin-backed skills as app installs", () => {
expect(
resolveProviderSkillSourceKind({
path: "/Users/julius/.codex/plugins/cache/openai-curated/github/skills/gh-fix-ci/SKILL.md",
scope: "user",
}),
).toBe("app");
});
it("maps standard scopes to source kinds", () => {
expect(
resolveProviderSkillSourceKind({
path: "/workspace/.codex/skills/review-follow-up/SKILL.md",
scope: "repo",
}),
).toBe("repo");
expect(
resolveProviderSkillSourceKind({
path: "/workspace/.codex/skills/review-follow-up/SKILL.md",
scope: "project",
}),
).toBe("project");
expect(
resolveProviderSkillSourceKind({
path: "/Users/julius/.agents/skills/agent-browser/SKILL.md",
scope: "user",
}),
).toBe("personal");
expect(
resolveProviderSkillSourceKind({
path: "/usr/local/share/codex/skills/imagegen/SKILL.md",
scope: "system",
}),
).toBe("system");
});
it("keeps unknown and missing scopes usable", () => {
expect(
resolveProviderSkillSourceKind({
path: "/opt/skills/team-review/SKILL.md",
scope: "team_shared",
}),
).toBe("other");
expect(
resolveProviderSkillSourceKind({
path: "/opt/skills/team-review/SKILL.md",
}),
).toBe("other");
});
});