a2854ba768
Migrate 203 test files (356 call sites) from fs.rm/fs.rmSync to
removeWithRetries/removeSyncWithRetries to reduce EBUSY test failures
on Windows. removeWithRetries is now exported from @oh-my-pi/pi-utils.
The migration uses a regex-based approach that:
- Replaces fs.rm(path, { recursive, force }) → removeWithRetries(path)
- Replaces fs.rmSync(path, { recursive, force }) → removeSyncWithRetries(path)
- Replaces fs.rm(path) → removeWithRetries(path) (no options)
- Skips fs.rm/fs.rmSync inside template literals (bun --eval scripts)
- Adds imports to existing @oh-my-pi/pi-utils import or creates new one
- Removes unused fs imports where fs.rm was the only fs usage (4 files)
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import * as fs from "node:fs/promises";
|
|
import * as os from "node:os";
|
|
import * as path from "node:path";
|
|
import { tryRunRpcSkillCommand } from "@oh-my-pi/pi-coding-agent/modes/rpc/rpc-mode";
|
|
import { type CustomMessage, SKILL_PROMPT_MESSAGE_TYPE } from "@oh-my-pi/pi-coding-agent/session/messages";
|
|
import { removeWithRetries, Snowflake } from "@oh-my-pi/pi-utils";
|
|
|
|
describe("tryRunRpcSkillCommand", () => {
|
|
test("dispatches registered /skill commands as skill prompt messages", async () => {
|
|
const dir = await fs.mkdtemp(path.join(os.tmpdir(), `omp-rpc-skill-${Snowflake.next()}-`));
|
|
const skillPath = path.join(dir, "SKILL.md");
|
|
await Bun.write(
|
|
skillPath,
|
|
"---\nname: reviewer\ndescription: Review code\n---\n\nReview the supplied code carefully.\n",
|
|
);
|
|
|
|
let message: Pick<CustomMessage, "attribution" | "content" | "customType" | "details" | "display"> | undefined;
|
|
|
|
const handled = await tryRunRpcSkillCommand(
|
|
{
|
|
skillsSettings: { enableSkillCommands: true },
|
|
skills: [
|
|
{ name: "reviewer", description: "Review code", filePath: skillPath, baseDir: dir, source: "project" },
|
|
],
|
|
async promptCustomMessage(nextMessage: typeof message) {
|
|
message = nextMessage;
|
|
},
|
|
},
|
|
"/skill:reviewer focus on risks",
|
|
);
|
|
|
|
expect(handled).toEqual({ agentInvoked: true });
|
|
expect(message?.customType).toBe(SKILL_PROMPT_MESSAGE_TYPE);
|
|
expect(message?.content).toContain("Review the supplied code carefully.");
|
|
expect(message?.content).toContain("User: focus on risks");
|
|
expect(message?.display).toBe(true);
|
|
expect(message?.attribution).toBe("user");
|
|
|
|
await removeWithRetries(dir);
|
|
});
|
|
|
|
test("ignores unknown skill commands so normal prompt handling can continue", async () => {
|
|
const handled = await tryRunRpcSkillCommand(
|
|
{
|
|
skillsSettings: { enableSkillCommands: true },
|
|
skills: [],
|
|
async promptCustomMessage() {
|
|
throw new Error("should not dispatch unknown skills");
|
|
},
|
|
},
|
|
"/skill:missing",
|
|
);
|
|
|
|
expect(handled).toBe(false);
|
|
});
|
|
});
|