/** * Locate harnery's own bundled coordination binaries (`agent-coord`, * `agent-hook`, `harn`). * * Every coord-helper spawn used to build its path as * `/harnery/bin/`, which only exists in one host layout: a * superproject carrying harnery as a submodule at `harnery/`. That assumption * was load-bearing in the worst way — because the path missed whenever the * resolved root was anything else, root resolution itself was bent toward the * git superproject to keep the spawns working, which is what split the CLI's * root from the hook's and blocked end-of-turn rule 1/3. The same missing path * also surfaced as a crash rather than an error: `spawnSync` on a nonexistent * binary reports `status: null` and `stderr: null`, so a caller checking * `status !== 0` then reading `stderr.trim()` threw "null is not an object". * * The binaries ship inside the harnery package, so the package is what knows * where they are. Resolution walks up from this module to the package root, * which covers every install shape: `src/` under Bun, `dist/` on Node, and * `node_modules/harnery/`. The layout-specific paths remain as fallbacks so a * host whose harnery copy is not the one executing (a vendored tree, a shim) * still resolves. */ export type CoordBinName = "agent-coord" | "agent-hook" | "harn"; /** * Absolute path to one of harnery's bundled binaries, or null when no candidate * exists on disk. Callers must handle null — a missing helper is a real state * (a partially installed package) and silently spawning a nonexistent path is * what produced the null-deref crash above. */ export declare function coordBinPath(name: CoordBinName, coordRoot?: string | null): string | null; /** Candidate paths for `name`, in resolution order. Exported for tests. */ export declare function coordBinCandidates(name: CoordBinName, coordRoot?: string | null): string[]; //# sourceMappingURL=coord-bin.d.ts.map