From 5ac1be9cb643bdd477b521adeceeb876d6d7eeeb Mon Sep 17 00:00:00 2001 From: Patrick Shao Date: Sun, 8 Feb 2026 18:35:47 -0800 Subject: [PATCH] fix: all bundled hooks broken since 2026.2.2 (tsdown migration) (#9295) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: compile bundled hook handlers in tsdown build The migration from tsc to tsdown in 2026.2.2 dropped bundled hook handlers from the build output. The copy-hook-metadata.ts script only copies HOOK.md metadata files, not the handler.ts source files. Without corresponding tsdown entry points, the handlers were never compiled to JS, causing `openclaw hooks list` to show 0 hooks on npm installs. This adds each bundled hook handler and the llm-slug-generator (dynamically imported by session-memory) as tsdown entry points: - src/hooks/bundled/session-memory/handler.ts - src/hooks/bundled/command-logger/handler.ts - src/hooks/bundled/boot-md/handler.ts - src/hooks/bundled/soul-evil/handler.ts - src/hooks/llm-slug-generator.ts Regression introduced in 2026.2.2; versions 2026.1.29–2026.2.1 worked correctly under the previous tsc build. * refactor: use glob for bundled hook entries, fix dist output paths - Replace hardcoded entry list with glob pattern in tsdown.config.ts so new hooks are auto-discovered (matching scripts/copy-hook-metadata.ts) - Remove inconsistent comment block from tsdown.config.ts - Fix copy-hook-metadata.ts to copy HOOK.md to dist/bundled/ (matching the runtime resolution in bundled-dir.ts which resolves path.join(moduleDir, 'bundled') relative to the chunk in dist/) - Update stale path comment in session-memory handler --- scripts/copy-hook-metadata.ts | 4 ++-- tsdown.config.ts | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/copy-hook-metadata.ts b/scripts/copy-hook-metadata.ts index be44f69327..737ed4a9d7 100644 --- a/scripts/copy-hook-metadata.ts +++ b/scripts/copy-hook-metadata.ts @@ -1,6 +1,6 @@ #!/usr/bin/env tsx /** - * Copy HOOK.md files from src/hooks/bundled to dist/hooks/bundled + * Copy HOOK.md files from src/hooks/bundled to dist/bundled */ import fs from "node:fs"; @@ -11,7 +11,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const projectRoot = path.resolve(__dirname, ".."); const srcBundled = path.join(projectRoot, "src", "hooks", "bundled"); -const distBundled = path.join(projectRoot, "dist", "hooks", "bundled"); +const distBundled = path.join(projectRoot, "dist", "bundled"); function copyHookMetadata() { if (!fs.existsSync(srcBundled)) { diff --git a/tsdown.config.ts b/tsdown.config.ts index 232ab79592..f4078fa564 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -36,4 +36,10 @@ export default defineConfig([ fixedExtension: false, platform: "node", }, + { + entry: ["src/hooks/bundled/*/handler.ts", "src/hooks/llm-slug-generator.ts"], + env, + fixedExtension: false, + platform: "node", + }, ]);