From b12f48abc71825906febc13344184842e366c7d3 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 24 Apr 2026 03:39:00 +0700 Subject: [PATCH] chore(lint): parallelize Codex skills directory scan --- .../agent/providers/codex-app-server-agent.ts | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/packages/server/src/server/agent/providers/codex-app-server-agent.ts b/packages/server/src/server/agent/providers/codex-app-server-agent.ts index fa9c85c69..c81fd18ae 100644 --- a/packages/server/src/server/agent/providers/codex-app-server-agent.ts +++ b/packages/server/src/server/agent/providers/codex-app-server-agent.ts @@ -419,30 +419,33 @@ async function listCodexSkills( candidates.push(path.join(resolveCodexHomeDir(), "skills")); + const candidateReads = await Promise.all( + candidates.map(async (dir) => { + let entries: Dirent[]; + try { + entries = await fs.readdir(dir, { withFileTypes: true }); + } catch { + return [] as string[]; + } + const dirEntries = entries.filter((entry) => entry.isDirectory() || entry.isSymbolicLink()); + const skillContents = await Promise.all( + dirEntries.map(async (entry) => { + const skillDir = path.join(dir, entry.name); + const skillPath = path.join(skillDir, "SKILL.md"); + try { + return await fs.readFile(skillPath, "utf8"); + } catch { + return null; + } + }), + ); + return skillContents.filter((content): content is string => content !== null); + }), + ); + const commandsByName = new Map(); - - for (const dir of candidates) { - let entries: Dirent[]; - try { - entries = await fs.readdir(dir, { withFileTypes: true }); - } catch { - continue; - } - - const dirEntries = entries.filter((entry) => entry.isDirectory() || entry.isSymbolicLink()); - const skillContents = await Promise.all( - dirEntries.map(async (entry) => { - const skillDir = path.join(dir, entry.name); - const skillPath = path.join(skillDir, "SKILL.md"); - try { - return await fs.readFile(skillPath, "utf8"); - } catch { - return null; - } - }), - ); + for (const skillContents of candidateReads) { for (const content of skillContents) { - if (!content) continue; const { frontMatter } = parseFrontMatter(content); const name = frontMatter["name"]; const description = frontMatter["description"];