diff --git a/src/features/opencode-skill-loader/loader.ts b/src/features/opencode-skill-loader/loader.ts index 2eebc0077..81591dfa1 100644 --- a/src/features/opencode-skill-loader/loader.ts +++ b/src/features/opencode-skill-loader/loader.ts @@ -13,8 +13,8 @@ export async function loadUserSkills(): Promise> { - const projectSkillsDir = join(process.cwd(), ".claude", "skills") +export async function loadProjectSkills(directory?: string): Promise> { + const projectSkillsDir = join(directory ?? process.cwd(), ".claude", "skills") const skills = await loadSkillsFromDir({ skillsDir: projectSkillsDir, scope: "project" }) return skillsToCommandDefinitionRecord(skills) } @@ -26,21 +26,22 @@ export async function loadOpencodeGlobalSkills(): Promise> { - const opencodeProjectDir = join(process.cwd(), ".opencode", "skills") +export async function loadOpencodeProjectSkills(directory?: string): Promise> { + const opencodeProjectDir = join(directory ?? process.cwd(), ".opencode", "skills") const skills = await loadSkillsFromDir({ skillsDir: opencodeProjectDir, scope: "opencode-project" }) return skillsToCommandDefinitionRecord(skills) } export interface DiscoverSkillsOptions { includeClaudeCodePaths?: boolean + directory?: string } -export async function discoverAllSkills(): Promise { +export async function discoverAllSkills(directory?: string): Promise { const [opencodeProjectSkills, opencodeGlobalSkills, projectSkills, userSkills] = await Promise.all([ - discoverOpencodeProjectSkills(), + discoverOpencodeProjectSkills(directory), discoverOpencodeGlobalSkills(), - discoverProjectClaudeSkills(), + discoverProjectClaudeSkills(directory), discoverUserClaudeSkills(), ]) @@ -49,10 +50,10 @@ export async function discoverAllSkills(): Promise { } export async function discoverSkills(options: DiscoverSkillsOptions = {}): Promise { - const { includeClaudeCodePaths = true } = options + const { includeClaudeCodePaths = true, directory } = options const [opencodeProjectSkills, opencodeGlobalSkills] = await Promise.all([ - discoverOpencodeProjectSkills(), + discoverOpencodeProjectSkills(directory), discoverOpencodeGlobalSkills(), ]) @@ -62,7 +63,7 @@ export async function discoverSkills(options: DiscoverSkillsOptions = {}): Promi } const [projectSkills, userSkills] = await Promise.all([ - discoverProjectClaudeSkills(), + discoverProjectClaudeSkills(directory), discoverUserClaudeSkills(), ]) @@ -80,8 +81,8 @@ export async function discoverUserClaudeSkills(): Promise { return loadSkillsFromDir({ skillsDir: userSkillsDir, scope: "user" }) } -export async function discoverProjectClaudeSkills(): Promise { - const projectSkillsDir = join(process.cwd(), ".claude", "skills") +export async function discoverProjectClaudeSkills(directory?: string): Promise { + const projectSkillsDir = join(directory ?? process.cwd(), ".claude", "skills") return loadSkillsFromDir({ skillsDir: projectSkillsDir, scope: "project" }) } @@ -91,7 +92,7 @@ export async function discoverOpencodeGlobalSkills(): Promise { return loadSkillsFromDir({ skillsDir: opencodeSkillsDir, scope: "opencode" }) } -export async function discoverOpencodeProjectSkills(): Promise { - const opencodeProjectDir = join(process.cwd(), ".opencode", "skills") +export async function discoverOpencodeProjectSkills(directory?: string): Promise { + const opencodeProjectDir = join(directory ?? process.cwd(), ".opencode", "skills") return loadSkillsFromDir({ skillsDir: opencodeProjectDir, scope: "opencode-project" }) } diff --git a/src/features/opencode-skill-loader/skill-discovery.ts b/src/features/opencode-skill-loader/skill-discovery.ts index 2154b06ea..fb991e44a 100644 --- a/src/features/opencode-skill-loader/skill-discovery.ts +++ b/src/features/opencode-skill-loader/skill-discovery.ts @@ -20,7 +20,7 @@ export async function getAllSkills(options?: SkillResolutionOptions): Promise + /** Project directory to discover project-level skills from. Falls back to process.cwd() if not provided. */ + directory?: string } diff --git a/src/plugin-handlers/agent-config-handler.ts b/src/plugin-handlers/agent-config-handler.ts index d08094551..3525f48af 100644 --- a/src/plugin-handlers/agent-config-handler.ts +++ b/src/plugin-handlers/agent-config-handler.ts @@ -47,10 +47,10 @@ export async function applyAgentConfig(params: { }), includeClaudeSkillsForAwareness ? discoverUserClaudeSkills() : Promise.resolve([]), includeClaudeSkillsForAwareness - ? discoverProjectClaudeSkills() - : Promise.resolve([]), + ? discoverProjectClaudeSkills(params.ctx.directory) + : Promise.resolve([]), discoverOpencodeGlobalSkills(), - discoverOpencodeProjectSkills(), + discoverOpencodeProjectSkills(params.ctx.directory), ]); const allDiscoveredSkills = [ diff --git a/src/plugin/skill-context.ts b/src/plugin/skill-context.ts index 630cc2085..a1b89f84b 100644 --- a/src/plugin/skill-context.ts +++ b/src/plugin/skill-context.ts @@ -63,8 +63,8 @@ export async function createSkillContext(args: { }), includeClaudeSkills ? discoverUserClaudeSkills() : Promise.resolve([]), discoverOpencodeGlobalSkills(), - includeClaudeSkills ? discoverProjectClaudeSkills() : Promise.resolve([]), - discoverOpencodeProjectSkills(), + includeClaudeSkills ? discoverProjectClaudeSkills(directory) : Promise.resolve([]), + discoverOpencodeProjectSkills(directory), ]) const mergedSkills = mergeSkills(