@kontextmind/kxm
Version:
KXM local-first multi-agent orchestration and operator dashboard
73 lines (65 loc) • 2.48 kB
JavaScript
import { readFileSync, writeFileSync } from "node:fs";
import { build } from "esbuild";
await build({
entryPoints: [
"plugins/kxm/src/cli.ts",
"plugins/kxm/src/server.ts",
"plugins/kxm/src/runtime-supervisor.ts",
"plugins/kxm/src/claude-hook.ts",
],
bundle: true,
platform: "node",
format: "esm",
target: "node22",
outdir: "plugins/kxm/dist",
entryNames: "[name]",
banner: { js: "#!/usr/bin/env node" },
});
await build({
entryPoints: [
"plugins/kxm/src/core.ts",
"plugins/kxm/src/runtime.ts",
"plugins/kxm/src/client.ts",
"plugins/kxm/src/extension.ts",
],
bundle: true,
platform: "node",
format: "esm",
target: "node22",
outdir: "plugins/kxm/dist",
entryNames: "[name]",
external: [
"@earendil-works/pi-coding-agent",
"typebox",
"@anthropic-ai/claude-agent-sdk",
],
});
const shebang = "#!/usr/bin/env node\n";
const createRequire = "import { createRequire as __kxmCreateRequire } from 'node:module'; const require = __kxmCreateRequire(import.meta.url);\n";
// The bundled YAML CommonJS internals use dynamic require, which is
// unsupported in ESM output; provide createRequire for every runtime bundle.
for (const bundlePath of [
"plugins/kxm/dist/cli.js",
"plugins/kxm/dist/server.js",
"plugins/kxm/dist/runtime-supervisor.js",
"plugins/kxm/dist/claude-hook.js",
// The MCP bundle is produced by build:mcp, then this script runs. It now
// imports the project-id resolver, which pulls in the YAML package. That
// package's dynamic require needs the same createRequire shim.
"plugins/kxm/dist/mcp-server.js",
]) {
const bundled = readFileSync(bundlePath, "utf8");
if (!bundled.startsWith(shebang)) throw new Error(`runtime bundle is missing its executable shebang: ${bundlePath}`);
if (bundled.includes("__kxmCreateRequire")) continue;
writeFileSync(bundlePath, `${shebang}${createRequire}${bundled.slice(shebang.length)}`);
}
const runtimeLibrary = "plugins/kxm/dist/runtime.js";
const runtimeLibraryText = readFileSync(runtimeLibrary, "utf8");
if (runtimeLibraryText.startsWith(shebang)) {
throw new Error(`library bundle must not have an executable shebang: ${runtimeLibrary}`);
}
writeFileSync(runtimeLibrary, `${createRequire}${runtimeLibraryText}`);
const { emitCodexArtifacts } = await import("./emit-codex-artifacts.mjs");
emitCodexArtifacts();
const { syncHarnessMemory } = await import("../plugins/kxm/src/memory.ts");
syncHarnessMemory(process.cwd());