fix installed skills discovery and improve editor UX (#1296)
* fix skills discovery from opencode * Fix stale skill description after frontmatter removal * fix: align vscode skill discovery parity
This commit is contained in:
@@ -16,6 +16,7 @@ import {
|
||||
AGENT_SCOPE,
|
||||
COMMAND_SCOPE,
|
||||
discoverSkills,
|
||||
mergeDiscoveredSkills,
|
||||
getSkillSources,
|
||||
createSkill,
|
||||
updateSkill,
|
||||
@@ -93,6 +94,15 @@ const parseSkillsCatalogSources = (settings: Record<string, unknown>): SkillsCat
|
||||
.filter((value): value is SkillsCatalogSourceConfig => value !== null);
|
||||
};
|
||||
|
||||
const resolveDiscoveredSkills = async (
|
||||
deps: ConfigRuntimeDeps,
|
||||
ctx: BridgeContext | undefined,
|
||||
workingDirectory?: string,
|
||||
): Promise<DiscoveredSkill[]> => mergeDiscoveredSkills(
|
||||
(await deps.fetchOpenCodeSkillsFromApi(ctx, workingDirectory)) || [],
|
||||
discoverSkills(workingDirectory),
|
||||
);
|
||||
|
||||
export async function handleConfigBridgeMessage(
|
||||
message: BridgeMessageInput,
|
||||
ctx: BridgeContext | undefined,
|
||||
@@ -458,7 +468,7 @@ export async function handleConfigBridgeMessage(
|
||||
const normalizedMethod = typeof method === 'string' && method.trim() ? method.trim().toUpperCase() : 'GET';
|
||||
|
||||
if (!name && normalizedMethod === 'GET') {
|
||||
const skills = (await deps.fetchOpenCodeSkillsFromApi(ctx, workingDirectory)) || discoverSkills(workingDirectory);
|
||||
const skills = await resolveDiscoveredSkills(deps, ctx, workingDirectory);
|
||||
return { id, type, success: true, data: { skills } };
|
||||
}
|
||||
|
||||
@@ -468,7 +478,7 @@ export async function handleConfigBridgeMessage(
|
||||
}
|
||||
|
||||
if (normalizedMethod === 'GET') {
|
||||
const discoveredSkill = ((await deps.fetchOpenCodeSkillsFromApi(ctx, workingDirectory)) || [])
|
||||
const discoveredSkill = (await resolveDiscoveredSkills(deps, ctx, workingDirectory))
|
||||
.find((skill) => skill.name === skillName);
|
||||
const sources = getSkillSources(skillName, workingDirectory, discoveredSkill || null);
|
||||
return {
|
||||
@@ -539,7 +549,7 @@ export async function handleConfigBridgeMessage(
|
||||
const workingDirectory = ctx?.manager?.getWorkingDirectory() || vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
|
||||
const settings = deps.readSettings(ctx);
|
||||
const additionalSources = parseSkillsCatalogSources(settings);
|
||||
const installedSkills = (await deps.fetchOpenCodeSkillsFromApi(ctx, workingDirectory)) || undefined;
|
||||
const installedSkills = await resolveDiscoveredSkills(deps, ctx, workingDirectory);
|
||||
const data = await getSkillsCatalog(workingDirectory, refresh, additionalSources, installedSkills);
|
||||
return { id, type, success: true, data };
|
||||
}
|
||||
@@ -623,7 +633,7 @@ export async function handleConfigBridgeMessage(
|
||||
return { id, type, success: false, error: 'File path is required' };
|
||||
}
|
||||
|
||||
const discoveredSkill = ((await deps.fetchOpenCodeSkillsFromApi(ctx, workingDirectory)) || [])
|
||||
const discoveredSkill = (await resolveDiscoveredSkills(deps, ctx, workingDirectory))
|
||||
.find((skill) => skill.name === skillName);
|
||||
const sources = getSkillSources(skillName, workingDirectory, discoveredSkill || null);
|
||||
if (!sources.md.dir) {
|
||||
|
||||
Reference in New Issue
Block a user