diff --git a/src/__tests__/CodexACPAgent/e2e/acp-e2e.test.ts b/src/__tests__/CodexACPAgent/e2e/acp-e2e.test.ts index f625f0d..8a76004 100644 --- a/src/__tests__/CodexACPAgent/e2e/acp-e2e.test.ts +++ b/src/__tests__/CodexACPAgent/e2e/acp-e2e.test.ts @@ -1,3 +1,4 @@ +import path from "node:path"; import {afterEach, expect, it} from "vitest"; import {AgentMode} from "../../../AgentMode"; import { @@ -90,17 +91,33 @@ describeE2E("E2E tests", () => { }); }); - it("lists a user skill from the wrapped CODEX_HOME", async () => { + it("lists skills", async () => { fixture = await createAuthenticatedFixture(); fixture.writeSkill({ - name: "integration-skill", - description: "Integration skill", + name: "codex-home-skill", + description: "Codex home skill", body: "This skill exists only for integration testing.", }); - const session = await fixture.createSession(); + const additionalSkillsRoot = path.join(fixture.workspaceDir, "custom-skills"); + fixture.writeSkill({ + name: "session-root-skill", + description: "Session root skill", + body: "This skill exists only in an additional root passed at session creation.", + }, additionalSkillsRoot); + + const session = await fixture.connection.newSession({ + cwd: fixture.workspaceDir, + mcpServers: [], + _meta: { + additionalRoots: [additionalSkillsRoot], + }, + }); + + // Expecting skills from CODEX_HOME, workspace, and additional root await fixture.expectPromptText(session.sessionId, "/skills", (text) => { expect(text).toContain("Available skills:"); - expect(text).toContain("- integration-skill: Integration skill"); + expect(text).toContain("- codex-home-skill: Codex home skill"); + expect(text).toContain("- session-root-skill: Session root skill"); }); }); }); diff --git a/src/__tests__/CodexACPAgent/e2e/spawned-agent-fixture.ts b/src/__tests__/CodexACPAgent/e2e/spawned-agent-fixture.ts index 17935e4..eddefcf 100644 --- a/src/__tests__/CodexACPAgent/e2e/spawned-agent-fixture.ts +++ b/src/__tests__/CodexACPAgent/e2e/spawned-agent-fixture.ts @@ -23,7 +23,7 @@ export interface SpawnedAgentFixture { readonly workspaceDir: string; createSession(mcpServers?: acp.McpServer[]): Promise; restart(): Promise; - writeSkill(skill: TestSkill): void; + writeSkill(skill: TestSkill, rootDir?: string): void; setPermissionResponder(responder: PermissionResponder): void; expectPromptText( sessionId: string, @@ -171,8 +171,9 @@ class SpawnedAgentFixtureImpl implements SpawnedAgentFixture { return await createSpawnedAgentFixture(this.initializeConnection, this.extraEnv, this.paths); } - writeSkill(skill: TestSkill): void { - const skillDirectory = path.join(this.paths.codexHome, "skills", skill.name); + writeSkill(skill: TestSkill, rootDir?: string): void { + const skillsRoot = rootDir ?? path.join(this.paths.codexHome, "skills"); + const skillDirectory = path.join(skillsRoot, skill.name); fs.mkdirSync(skillDirectory, {recursive: true}); fs.writeFileSync( path.join(skillDirectory, "SKILL.md"),