mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-16 07:09:29 +00:00
* 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
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
#!/usr/bin/env tsx
|
|
/**
|
|
* Copy HOOK.md files from src/hooks/bundled to dist/bundled
|
|
*/
|
|
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
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", "bundled");
|
|
|
|
function copyHookMetadata() {
|
|
if (!fs.existsSync(srcBundled)) {
|
|
console.warn("[copy-hook-metadata] Source directory not found:", srcBundled);
|
|
return;
|
|
}
|
|
|
|
if (!fs.existsSync(distBundled)) {
|
|
fs.mkdirSync(distBundled, { recursive: true });
|
|
}
|
|
|
|
const entries = fs.readdirSync(srcBundled, { withFileTypes: true });
|
|
|
|
for (const entry of entries) {
|
|
if (!entry.isDirectory()) {
|
|
continue;
|
|
}
|
|
|
|
const hookName = entry.name;
|
|
const srcHookDir = path.join(srcBundled, hookName);
|
|
const distHookDir = path.join(distBundled, hookName);
|
|
const srcHookMd = path.join(srcHookDir, "HOOK.md");
|
|
const distHookMd = path.join(distHookDir, "HOOK.md");
|
|
|
|
if (!fs.existsSync(srcHookMd)) {
|
|
console.warn(`[copy-hook-metadata] No HOOK.md found for ${hookName}`);
|
|
continue;
|
|
}
|
|
|
|
if (!fs.existsSync(distHookDir)) {
|
|
fs.mkdirSync(distHookDir, { recursive: true });
|
|
}
|
|
|
|
fs.copyFileSync(srcHookMd, distHookMd);
|
|
console.log(`[copy-hook-metadata] Copied ${hookName}/HOOK.md`);
|
|
}
|
|
|
|
console.log("[copy-hook-metadata] Done");
|
|
}
|
|
|
|
copyHookMetadata();
|