refactor: centralize skills prompt resolution

This commit is contained in:
Peter Steinberger
2026-01-09 21:27:11 +01:00
parent cf8d7139e1
commit 24605379b9
7 changed files with 78 additions and 62 deletions

View File

@@ -10,6 +10,8 @@ import {
buildWorkspaceSkillSnapshot,
buildWorkspaceSkillsPrompt,
loadWorkspaceSkillEntries,
resolveSkillsPromptForRun,
type SkillEntry,
syncSkillsToWorkspace,
} from "./skills.js";
import { buildWorkspaceSkillStatus } from "./skills-status.js";
@@ -404,6 +406,35 @@ describe("buildWorkspaceSkillsPrompt", () => {
});
});
describe("resolveSkillsPromptForRun", () => {
it("prefers snapshot prompt when available", () => {
const prompt = resolveSkillsPromptForRun({
skillsSnapshot: { prompt: "SNAPSHOT", skills: [] },
workspaceDir: "/tmp/clawd",
});
expect(prompt).toBe("SNAPSHOT");
});
it("builds prompt from entries when snapshot is missing", () => {
const entry: SkillEntry = {
skill: {
name: "demo-skill",
description: "Demo",
filePath: "/app/skills/demo-skill/SKILL.md",
baseDir: "/app/skills/demo-skill",
source: "clawdbot-bundled",
},
frontmatter: {},
};
const prompt = resolveSkillsPromptForRun({
entries: [entry],
workspaceDir: "/tmp/clawd",
});
expect(prompt).toContain("<available_skills>");
expect(prompt).toContain("/app/skills/demo-skill/SKILL.md");
});
});
describe("loadWorkspaceSkillEntries", () => {
it("handles an empty managed skills dir without throwing", async () => {
const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-"));