import { ProviderDriverKind, ProviderInstanceId, type ServerProvider } from "@t3tools/contracts";import { describe, expect, it } from "vite-plus/test"; import { dedupeProviderSkillsByName, formatProviderSkillDisplayName, getProviderSlashCommandsForSlashMenu, getProviderSkillsForSlashMenu, resolveProviderSkillsForCwd, resolveProviderSlashCommandsForCwd, resolveProviderSkillSourceKind,} from "./providerSkills.ts"; const provider = { instanceId: ProviderInstanceId.make("codex"), driver: ProviderDriverKind.make("codex"), enabled: true, installed: true, version: "1.0.0", status: "ready", auth: { status: "authenticated" }, checkedAt: "2026-01-01T00:00:00.000Z", models: [], slashCommands: [{ name: "global" }], skills: [{ name: "global", path: "/global/SKILL.md", enabled: true }], workspaceSnapshots: [ { cwd: "/workspace/project-a", checkedAt: "2026-01-01T00:01:00.000Z", slashCommands: [{ name: "project" }], skills: [{ name: "project", path: "/workspace/project-a/SKILL.md", enabled: true }], }, ],} satisfies ServerProvider; 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("dedupeProviderSkillsByName", () => { it("keeps the first resolved skill and preserves unrelated skill order", () => { const firstSkill = { name: "branch-audit", path: "/Users/matt/.codex/skills/branch-audit/SKILL.md", enabled: true, }; const otherSkill = { name: "browser", path: "/Users/matt/.agents/skills/browser/SKILL.md", enabled: true, }; const duplicateSkill = { name: "Branch-Audit", path: "/Users/matt/.agents/skills/branch-audit/SKILL.md", enabled: true, }; expect(dedupeProviderSkillsByName([firstSkill, otherSkill, duplicateSkill])).toEqual([ firstSkill, otherSkill, ]); });}); 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", ]); }); it("shows one row when enabled skills share a name", () => { const skills = [ { name: "babysit-pr", path: "/Users/matt/.codex/skills/babysit-pr/SKILL.md", enabled: true, }, { name: "browser", path: "/Users/matt/.agents/skills/browser/SKILL.md", enabled: true, }, { name: "babysit-pr", path: "/Users/matt/.agents/skills/babysit-pr/SKILL.md", enabled: true, }, ]; expect(getProviderSkillsForSlashMenu(skills, true).map((skill) => skill.name)).toEqual([ "babysit-pr", "browser", ]); }); it("keeps an enabled skill when a disabled duplicate appears first", () => { const enabledSkill = { name: "babysit-pr", path: "/Users/matt/.agents/skills/babysit-pr/SKILL.md", enabled: true, }; const skills = [ { name: "babysit-pr", path: "/Users/matt/.codex/skills/babysit-pr/SKILL.md", enabled: false, }, enabledSkill, ]; expect(getProviderSkillsForSlashMenu(skills, true)).toEqual([enabledSkill]); });}); describe("getProviderSkillsForSlashMenu", () => { it("drops a skill the provider reserves for the agent", () => { const skills = [ { name: "legacy-system-context", path: "/Users/matt/.claude/skills/legacy-system-context/SKILL.md", enabled: true, userInvocable: false, }, { name: "deploy", path: "/Users/matt/.claude/skills/deploy/SKILL.md", enabled: true, // Reserved for the user, not the agent: still a valid pick. userInvocationOnly: true, }, ]; expect(getProviderSkillsForSlashMenu(skills, true).map((skill) => skill.name)).toEqual([ "deploy", ]); });}); 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"); });}); describe("workspace provider snapshots", () => { it("uses the cwd snapshot after a provider session has populated it", () => { expect(resolveProviderSkillsForCwd(provider, "/workspace/project-a")).toEqual([ { name: "project", path: "/workspace/project-a/SKILL.md", enabled: true }, ]); expect(resolveProviderSlashCommandsForCwd(provider, "/workspace/project-a")).toEqual([ { name: "project" }, ]); }); it("keeps the machine snapshot before this cwd has a provider snapshot", () => { expect(resolveProviderSkillsForCwd(provider, "/workspace/project-b")).toEqual(provider.skills); expect(resolveProviderSlashCommandsForCwd(provider, null)).toEqual(provider.slashCommands); });});
import { ProviderDriverKind, ProviderInstanceId, type ServerProvider } from "@t3tools/contracts";
import { describe, expect, it } from "vite-plus/test";
import {
dedupeProviderSkillsByName,
formatProviderSkillDisplayName,
getProviderSlashCommandsForSlashMenu,
getProviderSkillsForSlashMenu,
resolveProviderSkillsForCwd,
resolveProviderSlashCommandsForCwd,
resolveProviderSkillSourceKind,
} from "./providerSkills.ts";
const provider = {
instanceId: ProviderInstanceId.make("codex"),
driver: ProviderDriverKind.make("codex"),
enabled: true,
installed: true,
version: "1.0.0",
status: "ready",
auth: { status: "authenticated" },
checkedAt: "2026-01-01T00:00:00.000Z",
models: [],
slashCommands: [{ name: "global" }],
skills: [{ name: "global", path: "/global/SKILL.md", enabled: true }],
workspaceSnapshots: [
{
cwd: "/workspace/project-a",
checkedAt: "2026-01-01T00:01:00.000Z",
slashCommands: [{ name: "project" }],
skills: [{ name: "project", path: "/workspace/project-a/SKILL.md", enabled: true }],
},
],
} satisfies ServerProvider;
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("dedupeProviderSkillsByName", () => {
it("keeps the first resolved skill and preserves unrelated skill order", () => {
const firstSkill = {
name: "branch-audit",
path: "/Users/matt/.codex/skills/branch-audit/SKILL.md",
enabled: true,
};
const otherSkill = {
name: "browser",
path: "/Users/matt/.agents/skills/browser/SKILL.md",
enabled: true,
};
const duplicateSkill = {
name: "Branch-Audit",
path: "/Users/matt/.agents/skills/branch-audit/SKILL.md",
enabled: true,
};
expect(dedupeProviderSkillsByName([firstSkill, otherSkill, duplicateSkill])).toEqual([
firstSkill,
otherSkill,
]);
});
});
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",
]);
});
it("shows one row when enabled skills share a name", () => {
const skills = [
{
name: "babysit-pr",
path: "/Users/matt/.codex/skills/babysit-pr/SKILL.md",
enabled: true,
},
{
name: "browser",
path: "/Users/matt/.agents/skills/browser/SKILL.md",
enabled: true,
},
{
name: "babysit-pr",
path: "/Users/matt/.agents/skills/babysit-pr/SKILL.md",
enabled: true,
},
];
expect(getProviderSkillsForSlashMenu(skills, true).map((skill) => skill.name)).toEqual([
"babysit-pr",
"browser",
]);
});
it("keeps an enabled skill when a disabled duplicate appears first", () => {
const enabledSkill = {
name: "babysit-pr",
path: "/Users/matt/.agents/skills/babysit-pr/SKILL.md",
enabled: true,
};
const skills = [
{
name: "babysit-pr",
path: "/Users/matt/.codex/skills/babysit-pr/SKILL.md",
enabled: false,
},
enabledSkill,
];
expect(getProviderSkillsForSlashMenu(skills, true)).toEqual([enabledSkill]);
});
});
describe("getProviderSkillsForSlashMenu", () => {
it("drops a skill the provider reserves for the agent", () => {
const skills = [
{
name: "legacy-system-context",
path: "/Users/matt/.claude/skills/legacy-system-context/SKILL.md",
enabled: true,
userInvocable: false,
},
{
name: "deploy",
path: "/Users/matt/.claude/skills/deploy/SKILL.md",
enabled: true,
// Reserved for the user, not the agent: still a valid pick.
userInvocationOnly: true,
},
];
expect(getProviderSkillsForSlashMenu(skills, true).map((skill) => skill.name)).toEqual([
"deploy",
]);
});
});
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");
});
});
describe("workspace provider snapshots", () => {
it("uses the cwd snapshot after a provider session has populated it", () => {
expect(resolveProviderSkillsForCwd(provider, "/workspace/project-a")).toEqual([
{ name: "project", path: "/workspace/project-a/SKILL.md", enabled: true },
]);
expect(resolveProviderSlashCommandsForCwd(provider, "/workspace/project-a")).toEqual([
{ name: "project" },
]);
});
it("keeps the machine snapshot before this cwd has a provider snapshot", () => {
expect(resolveProviderSkillsForCwd(provider, "/workspace/project-b")).toEqual(provider.skills);
expect(resolveProviderSlashCommandsForCwd(provider, null)).toEqual(provider.slashCommands);
});
});