{ "compilerOptions": { "target": "ES2022", // NodeNext (not ESNext/bundler) so the emitted .js works under // plain Node.js ESM at runtime — jiti + the openclaw gateway // both run on Node, not under a bundler. "module": "NodeNext", "moduleResolution": "NodeNext", // Emit compiled JS into a separate dist/ tree so build artifacts // never collide with .ts sources. With outDir === rootDir, // tsc produces src/foo.js next to src/foo.ts, and jiti picks // .js (its default extension-resolve order) — which silently // shipped stale code several times during sim e2e. Isolating // dist/ removes the entire race. "outDir": "dist/dialectic", "rootDir": "plugin", "declaration": false, "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "allowJs": false }, "include": ["plugin/**/*.ts"], "exclude": ["plugin/**/*.js", "dist/**/*"] }