import type { ResolvedTranscript, TranscriptSource } from './extract.js'; /** * Where this machine's agent transcripts live, most specific first. * * Deliberately a plain ordered list rather than a provider registry * (docs/plans/default-transcript-discovery-plan.md → "Root detection"): this * supports exactly one agent today, and a *directory* abstraction is the wrong * seam to generalize on anyway — roughly a third of the agents worth adding * store transcripts in SQLite, not JSONL trees. The interface that has to * generalize is "yield usage records for these sessions", one layer down. * * `AUDEN_TRANSCRIPTS_DIR` wins so a user can point discovery somewhere else * without touching the installed hooks, mirroring how Codex CLI honours * `$CODEX_HOME` over its default. */ export declare function transcriptRootCandidates(env?: NodeJS.ProcessEnv): string[]; /** * Resolves `sessionIds` to transcript paths, preferring a path the agent * itself reported and falling back to the `.jsonl` filename * convention under `roots` — the convention already load-bearing as the * session-id fallback in both extractors. * * The reported path wins because it is the only non-inferred answer: the * filename convention is Claude Code's current habit, not a contract, and it * misses outright when a session's transcript is not named for its id. Every * reported path is still verified (`isReadableTranscript`) before it is * preferred, so a stale one costs a directory walk rather than a session's * usage. * * A session with no transcript on this machine simply yields nothing — the * common case for a run synced from a different machine, and not an error. */ export declare function resolveSessionTranscripts(sessionIds: readonly string[], roots: readonly string[], reportedPaths?: Readonly>): Promise; /** * The single place that decides what a sync may read from transcripts. * * Everything downstream takes the result, so `uploadsActions: false` * (`--no-actions`) starves every transcript-derived payload at once rather than * each extractor remembering to check the flag. That flag means "keep the run * log local by design" (`hooks-settings.ts`'s `UPLOAD_DISABLING_FLAGS`), but * only pending actions were ever gated on it — `--no-actions --transcripts-dir` * has always uploaded token and skill usage from a project that opted out. The * hole stayed invisible only because nothing passed `--transcripts-dir`, which * is exactly the property automatic discovery removes. * * Naming a call site that could reintroduce it (Planning Principle 14): under a * per-extractor `if (args.actions)`, any future `extractX({ transcriptsDir })` * — which is how `extractConversationalFeedback` came to be ungated. Under this * shape, none: an opted-out sync has no directory and no files to hand out. */ export declare function resolveTranscriptSource(options: { /** `args.actions` — false under `--no-actions`. */ uploadsActions: boolean; /** `--transcripts-dir`, which selects full-scan backfill mode. */ explicitDir?: string; /** The sessions this sync is already uploading. */ sessionIds: readonly string[]; /** * Transcript paths the agent reported for those sessions, from the run log. * Preferred over the filename lookup; see `resolveSessionTranscripts`. */ reportedPaths?: Readonly>; /** Injectable for tests; defaults to this machine's detected roots. */ roots?: readonly string[]; }): Promise; //# sourceMappingURL=roots.d.ts.map