From de2de851c889c06cc116be220fd34baf1a54eb91 Mon Sep 17 00:00:00 2001 From: Aliou Diallo Date: Thu, 18 Dec 2025 13:07:30 +0100 Subject: [PATCH] fix(coding-agent): support symlinked tools and hooks in discovery (#219) --- packages/coding-agent/src/core/custom-tools/loader.ts | 6 ++++-- packages/coding-agent/src/core/hooks/loader.ts | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/coding-agent/src/core/custom-tools/loader.ts b/packages/coding-agent/src/core/custom-tools/loader.ts index ccd5f814..17bd48c8 100644 --- a/packages/coding-agent/src/core/custom-tools/loader.ts +++ b/packages/coding-agent/src/core/custom-tools/loader.ts @@ -224,7 +224,7 @@ export async function loadCustomTools( /** * Discover tool files from a directory. - * Returns all .ts files in the directory (non-recursive). + * Returns all .ts files (and symlinks to .ts files) in the directory (non-recursive). */ function discoverToolsInDir(dir: string): string[] { if (!fs.existsSync(dir)) { @@ -233,7 +233,9 @@ function discoverToolsInDir(dir: string): string[] { try { const entries = fs.readdirSync(dir, { withFileTypes: true }); - return entries.filter((e) => e.isFile() && e.name.endsWith(".ts")).map((e) => path.join(dir, e.name)); + return entries + .filter((e) => (e.isFile() || e.isSymbolicLink()) && e.name.endsWith(".ts")) + .map((e) => path.join(dir, e.name)); } catch { return []; } diff --git a/packages/coding-agent/src/core/hooks/loader.ts b/packages/coding-agent/src/core/hooks/loader.ts index f4af4988..50cef601 100644 --- a/packages/coding-agent/src/core/hooks/loader.ts +++ b/packages/coding-agent/src/core/hooks/loader.ts @@ -198,7 +198,7 @@ export async function loadHooks(paths: string[], cwd: string): Promise e.isFile() && e.name.endsWith(".ts")).map((e) => path.join(dir, e.name)); + return entries + .filter((e) => (e.isFile() || e.isSymbolicLink()) && e.name.endsWith(".ts")) + .map((e) => path.join(dir, e.name)); } catch { return []; }