import { mkdirSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { createAgentSession } from "../src/core/sdk.js"; import { SessionManager } from "../src/core/session-manager.js"; describe("createAgentSession skills option", () => { let tempDir: string; let skillsDir: string; beforeEach(() => { tempDir = join(tmpdir(), `pi-sdk-test-${Date.now()}-${Math.random().toString(36).slice(2)}`); skillsDir = join(tempDir, "skills", "test-skill"); mkdirSync(skillsDir, { recursive: true }); // Create a test skill writeFileSync( join(skillsDir, "SKILL.md"), `--- name: test-skill description: A test skill for SDK tests. --- # Test Skill This is a test skill. `, ); }); afterEach(() => { if (tempDir) { rmSync(tempDir, { recursive: true, force: true }); } }); it("should discover skills by default", async () => { const { session } = await createAgentSession({ cwd: tempDir, agentDir: tempDir, sessionManager: SessionManager.inMemory(), }); // skillsSettings.enabled should be true (from default settings) expect(session.skillsSettings?.enabled).toBe(true); }); it("should disable skills in skillsSettings when options.skills is empty array", async () => { const { session } = await createAgentSession({ cwd: tempDir, agentDir: tempDir, sessionManager: SessionManager.inMemory(), skills: [], // Explicitly empty - like --no-skills }); // skillsSettings.enabled should be false so UI doesn't re-discover expect(session.skillsSettings?.enabled).toBe(false); }); it("should disable skills in skillsSettings when options.skills is provided with skills", async () => { const { session } = await createAgentSession({ cwd: tempDir, agentDir: tempDir, sessionManager: SessionManager.inMemory(), skills: [ { name: "custom-skill", description: "A custom skill", filePath: "/fake/path/SKILL.md", baseDir: "/fake/path", source: "custom", }, ], }); // skillsSettings.enabled should be false because skills were explicitly provided expect(session.skillsSettings?.enabled).toBe(false); }); });