oclaw/openclaw/scripts/check-madge-import-cycles.ts
oliver dbbe3add6a 重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。

Made-with: Cursor
2026-04-26 08:34:33 +08:00

37 lines
1.1 KiB
JavaScript

#!/usr/bin/env node
import path from "node:path";
import { fileURLToPath } from "node:url";
import madge from "madge";
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const scanRoots = ["src", "extensions", "ui"] as const;
function normalizeRepoPath(filePath: string): string {
return filePath.split(path.sep).join("/");
}
async function main(): Promise<number> {
const result = await madge([...scanRoots], {
baseDir: repoRoot,
fileExtensions: ["ts"],
tsConfig: path.join(repoRoot, "tsconfig.json"),
});
const cycles = result.circular().map((cycle) => cycle.map((file) => normalizeRepoPath(file)));
console.log(`Madge import cycle check: ${cycles.length} cycle(s).`);
if (cycles.length === 0) {
return 0;
}
console.error("\nMadge circular dependencies:");
for (const [index, cycle] of cycles.entries()) {
console.error(`\n# cycle ${index + 1}`);
console.error(` ${cycle.join("\n -> ")}`);
}
console.error(
"\nBreak the cycle or extract a leaf contract instead of routing through a barrel.",
);
return 1;
}
process.exitCode = await main();