refactor: unify agent session persistence
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { afterEach, beforeEach, describe, expect, it } from "bun:test";
|
||||
import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
|
||||
import { tmpdir } from "node:os";
|
||||
import { join } from "node:path";
|
||||
|
||||
import { SkillStore } from "../../src/skills/store.js";
|
||||
|
||||
describe("SkillStore", () => {
|
||||
let originalCwd: string;
|
||||
let tempDir: string;
|
||||
let alternateCwd: string;
|
||||
let skillsRoot: string;
|
||||
let backupRoot: string;
|
||||
let store: SkillStore;
|
||||
|
||||
beforeEach(async () => {
|
||||
originalCwd = process.cwd();
|
||||
tempDir = await mkdtemp(join(tmpdir(), "tjwater-skills-"));
|
||||
alternateCwd = join(tempDir, "runtime-cwd");
|
||||
skillsRoot = join(tempDir, "project", ".opencode", "skills");
|
||||
backupRoot = join(tempDir, "backup", "skills");
|
||||
store = new SkillStore(skillsRoot, backupRoot);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
process.chdir(originalCwd);
|
||||
await rm(tempDir, { force: true, recursive: true });
|
||||
});
|
||||
|
||||
it("writes scripts under the configured skills root regardless of process cwd", async () => {
|
||||
await mkdir(alternateCwd, { recursive: true });
|
||||
process.chdir(alternateCwd);
|
||||
|
||||
const result = await store.writeScript(
|
||||
"workflow/hydraulic-bottleneck-analysis",
|
||||
"scripts/analyze.py",
|
||||
"print('ok')\n",
|
||||
);
|
||||
|
||||
expect(result).toEqual({
|
||||
changed: true,
|
||||
detail: "script written",
|
||||
target: join(
|
||||
skillsRoot,
|
||||
"workflow",
|
||||
"hydraulic-bottleneck-analysis",
|
||||
"scripts",
|
||||
"analyze.py",
|
||||
),
|
||||
});
|
||||
await expect(readFile(result.target, "utf8")).resolves.toBe("print('ok')\n");
|
||||
});
|
||||
|
||||
it("rejects script paths outside scripts/*.py", async () => {
|
||||
const result = await store.writeScript(
|
||||
"workflow/hydraulic-bottleneck-analysis",
|
||||
"analyze.ts",
|
||||
"console.log('ok')\n",
|
||||
);
|
||||
|
||||
expect(result).toEqual({
|
||||
changed: false,
|
||||
detail: "invalid script file_path",
|
||||
target: "",
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user