/** * Read the running harness's app name out of `/package.json`. Exported (rather than folded * into {@link appName}) so the resolution itself is testable against a fixture directory — the real * `getPackageDir()` is a property of the process, not an argument. * * Every failure mode lands on the same fallback on purpose: a missing file, unreadable file, invalid * JSON or absent key all mean "we are not being told a name", and a workflow run must not fail over it. */ export declare function readAppName(packageDir: string): string; /** The running harness's app name (`pi`, `kimchi`, …), read once — the package.json cannot change under a live process. */ export declare function appName(): string; /** A project's harness directory: `.pi` under pi, `.kimchi` under kimchi (spec §6.8/§8.9's `/.`). */ export declare function projectDir(projectRoot: string, app?: string): string; /** The directory a project's authored workflows live in — and the one the run lock sits in (spec §7.2). */ export declare function workflowsDir(projectRoot: string, app?: string): string; /** * Where a run's artifacts — its event log (spec §8.9) and every step session file (spec §2.2) — are * written, given the harness's own session directory for this invocation. * * They live WITH the sessions rather than in the project directory because most of them ARE sessions: * a step session is written and resumed by the harness itself, and keeping it beside the user's own * sessions means one place holds everything a run produced, honouring `--session-dir` and the * `*_CODING_AGENT_SESSION_DIR` override for free. The `workflow/` subdir keeps them out of the * harness's enumerators (see {@link ARTIFACTS_SUBDIR}). * * `sessionDir` is `""` under `--no-session` (`SessionManager.inMemory` is constructed with an empty * session dir), which is a real mode a workflow can be launched in — and a run that could not record * its own log would not be resumable. So a falsy value falls back to the project's own * `/workflows/runs/`, and that branch takes NO `workflow/` subdir. The asymmetry is the * point rather than an oversight: the subdir exists solely to hide artifacts from enumerators that * scan the SESSION directory, and nothing enumerates the project's own — `runs/` already separates * them from the authoring sources, so a second level would name the same thing twice. */ export declare function runArtifactsDir(projectRoot: string, sessionDir: string | undefined): string; //# sourceMappingURL=project-dir.d.ts.map