Prune removed bundled skills during bootstrap sync

This commit is contained in:
Advait Paliwal
2026-03-25 01:37:08 -07:00
parent 75b0467761
commit 151956ea24
2 changed files with 91 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
import test from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
@@ -49,3 +49,34 @@ test("syncBundledAssets preserves user-modified files and updates managed files"
assert.equal(readFileSync(join(agentDir, "themes", "feynman.json"), "utf8"), '{"theme":"v2"}\n');
assert.equal(readFileSync(join(agentDir, "agents", "researcher.md"), "utf8"), "# user-custom\n");
});
test("syncBundledAssets removes deleted managed files but preserves user-modified stale files", () => {
const appRoot = createAppRoot();
const home = mkdtempSync(join(tmpdir(), "feynman-home-"));
process.env.FEYNMAN_HOME = home;
const agentDir = join(home, "agent");
mkdirSync(agentDir, { recursive: true });
mkdirSync(join(appRoot, "skills", "paper-eli5"), { recursive: true });
writeFileSync(join(appRoot, "skills", "paper-eli5", "SKILL.md"), "# old skill\n", "utf8");
syncBundledAssets(appRoot, agentDir);
rmSync(join(appRoot, "skills", "paper-eli5"), { recursive: true, force: true });
mkdirSync(join(appRoot, "skills", "eli5"), { recursive: true });
writeFileSync(join(appRoot, "skills", "eli5", "SKILL.md"), "# new skill\n", "utf8");
const firstResult = syncBundledAssets(appRoot, agentDir);
assert.deepEqual(firstResult.copied, ["eli5/SKILL.md"]);
assert.equal(existsSync(join(agentDir, "skills", "paper-eli5", "SKILL.md")), false);
assert.equal(readFileSync(join(agentDir, "skills", "eli5", "SKILL.md"), "utf8"), "# new skill\n");
mkdirSync(join(appRoot, "skills", "legacy"), { recursive: true });
writeFileSync(join(appRoot, "skills", "legacy", "SKILL.md"), "# managed legacy\n", "utf8");
syncBundledAssets(appRoot, agentDir);
writeFileSync(join(agentDir, "skills", "legacy", "SKILL.md"), "# user legacy override\n", "utf8");
rmSync(join(appRoot, "skills", "legacy"), { recursive: true, force: true });
const secondResult = syncBundledAssets(appRoot, agentDir);
assert.deepEqual(secondResult.skipped, ["legacy/SKILL.md"]);
assert.equal(readFileSync(join(agentDir, "skills", "legacy", "SKILL.md"), "utf8"), "# user legacy override\n");
});