feat(opencode-skill-loader): adapt skill resolution and discovery for team-mode

This commit is contained in:
YeonGyu-Kim
2026-04-28 10:48:15 +09:00
parent 7fbefa4cfe
commit 855c848b99
3 changed files with 11 additions and 8 deletions
@@ -10,7 +10,9 @@ export function clearSkillCache(): void {
} }
export async function getAllSkills(options?: SkillResolutionOptions): Promise<LoadedSkill[]> { export async function getAllSkills(options?: SkillResolutionOptions): Promise<LoadedSkill[]> {
const cacheKey = options?.browserProvider ?? "playwright" const browserProvider = options?.browserProvider ?? "playwright"
const teamModeEnabled = options?.teamModeEnabled ?? false
const cacheKey = `${browserProvider}:${teamModeEnabled ? "team-on" : "team-off"}`
const hasDisabledSkills = options?.disabledSkills && options.disabledSkills.size > 0 const hasDisabledSkills = options?.disabledSkills && options.disabledSkills.size > 0
// Skip cache if disabledSkills is provided (varies between calls) // Skip cache if disabledSkills is provided (varies between calls)
@@ -21,12 +23,11 @@ export async function getAllSkills(options?: SkillResolutionOptions): Promise<Lo
const [discoveredSkills, builtinSkillDefinitions] = await Promise.all([ const [discoveredSkills, builtinSkillDefinitions] = await Promise.all([
discoverSkills({ includeClaudeCodePaths: true, directory: options?.directory }), discoverSkills({ includeClaudeCodePaths: true, directory: options?.directory }),
Promise.resolve( createBuiltinSkills({
createBuiltinSkills({ browserProvider,
browserProvider: options?.browserProvider, disabledSkills: options?.disabledSkills,
disabledSkills: options?.disabledSkills, teamModeEnabled,
}) }),
),
]) ])
const builtinSkillsAsLoaded: LoadedSkill[] = builtinSkillDefinitions.map((skill) => ({ const builtinSkillsAsLoaded: LoadedSkill[] = builtinSkillDefinitions.map((skill) => ({
@@ -49,7 +50,6 @@ export async function getAllSkills(options?: SkillResolutionOptions): Promise<Lo
// Provider-gated skill names that should be filtered based on browserProvider // Provider-gated skill names that should be filtered based on browserProvider
const providerGatedSkillNames = new Set(["agent-browser", "playwright"]) const providerGatedSkillNames = new Set(["agent-browser", "playwright"])
const browserProvider = options?.browserProvider ?? "playwright"
// Filter discovered skills to exclude provider-gated names that don't match the selected provider // Filter discovered skills to exclude provider-gated names that don't match the selected provider
const filteredDiscoveredSkills = discoveredSkills.filter((skill) => { const filteredDiscoveredSkills = discoveredSkills.filter((skill) => {
@@ -4,6 +4,7 @@ export interface SkillResolutionOptions {
gitMasterConfig?: GitMasterConfig gitMasterConfig?: GitMasterConfig
browserProvider?: BrowserAutomationProvider browserProvider?: BrowserAutomationProvider
disabledSkills?: Set<string> disabledSkills?: Set<string>
teamModeEnabled?: boolean
/** Project directory to discover project-level skills from. Falls back to process.cwd() if not provided. */ /** Project directory to discover project-level skills from. Falls back to process.cwd() if not provided. */
directory?: string directory?: string
} }
@@ -9,6 +9,7 @@ export function resolveSkillContent(skillName: string, options?: SkillResolution
const skills = createBuiltinSkills({ const skills = createBuiltinSkills({
browserProvider: options?.browserProvider, browserProvider: options?.browserProvider,
disabledSkills: options?.disabledSkills, disabledSkills: options?.disabledSkills,
teamModeEnabled: options?.teamModeEnabled,
}) })
const skill = skills.find((builtinSkill) => builtinSkill.name === skillName) const skill = skills.find((builtinSkill) => builtinSkill.name === skillName)
if (!skill) return null if (!skill) return null
@@ -27,6 +28,7 @@ export function resolveMultipleSkills(
const skills = createBuiltinSkills({ const skills = createBuiltinSkills({
browserProvider: options?.browserProvider, browserProvider: options?.browserProvider,
disabledSkills: options?.disabledSkills, disabledSkills: options?.disabledSkills,
teamModeEnabled: options?.teamModeEnabled,
}) })
const skillMap = new Map(skills.map((skill) => [skill.name, skill.template])) const skillMap = new Map(skills.map((skill) => [skill.name, skill.template]))