From 38b532e8bacf5ce93b9895f68c3eed31562fde5f Mon Sep 17 00:00:00 2001 From: Devansh Jain <31609257+devanshrj@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:34:00 -0800 Subject: [PATCH] fix: Make `--tools` work (#167) --- src/headless.ts | 6 ++++++ src/tools/filter.ts | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/headless.ts b/src/headless.ts index 59026a2..1ad9d1a 100644 --- a/src/headless.ts +++ b/src/headless.ts @@ -65,6 +65,12 @@ export async function handleHeadlessCommand( allowPositionals: true, }); + // Set tool filter if provided (controls which tools are loaded) + if (values.tools !== undefined) { + const { toolFilter } = await import("./tools/filter"); + toolFilter.setEnabledTools(values.tools as string); + } + // Get prompt from either positional args or stdin let prompt = positionals.slice(2).join(" "); diff --git a/src/tools/filter.ts b/src/tools/filter.ts index b8b3daf..4d6c9f4 100644 --- a/src/tools/filter.ts +++ b/src/tools/filter.ts @@ -62,5 +62,20 @@ class ToolFilterManager { } } -// Singleton instance -export const toolFilter = new ToolFilterManager(); +// Use globalThis to ensure singleton across bundle +// This prevents Bun's bundler from creating duplicate instances +const FILTER_KEY = Symbol.for("@letta/toolFilter"); + +type GlobalWithFilter = typeof globalThis & { + [key: symbol]: ToolFilterManager; +}; + +function getFilter(): ToolFilterManager { + const global = globalThis as GlobalWithFilter; + if (!global[FILTER_KEY]) { + global[FILTER_KEY] = new ToolFilterManager(); + } + return global[FILTER_KEY]; +} + +export const toolFilter = getFilter();