← Files DevRecapARCHIVED FILE
apps/cli/src/source-runner.ts
1.67 KB · Oct 2, 2026 · 00:34 UTC
import type { CollectionRange, GitCollection, SessionCollection } from "@devrecap/collectors";
import {
collectClaudeSessions,
collectCodexSessions,
collectGitHistory,
discoverProjectDirectories,
} from "@devrecap/collectors";
import type { CliSourcePermissions } from "./config.ts";
export interface SourceCollectionResult {
codex: SessionCollection;
claude: SessionCollection;
git: GitCollection;
directories: string[];
}
export interface SourceCollectorDeps {
collectCodexSessions: typeof collectCodexSessions;
collectClaudeSessions: typeof collectClaudeSessions;
collectGitHistory: typeof collectGitHistory;
discoverProjectDirectories: typeof discoverProjectDirectories;
}
const defaultDeps: SourceCollectorDeps = {
collectCodexSessions,
collectClaudeSessions,
collectGitHistory,
discoverProjectDirectories,
};
export function collectAuthorizedSources(
range: CollectionRange,
enabled: CliSourcePermissions,
deps: SourceCollectorDeps = defaultDeps,
): SourceCollectionResult {
const codex = enabled.codex ? deps.collectCodexSessions(range) : emptySession("codex");
const claude = enabled.claude ? deps.collectClaudeSessions(range) : emptySession("claude");
const sessionEvents = [...codex.events, ...claude.events];
const directories = enabled.git ? deps.discoverProjectDirectories(sessionEvents, true) : [];
const git = enabled.git ? deps.collectGitHistory(directories, range) : { repositories: [], warnings: [] };
return { codex, claude, git, directories };
}
function emptySession(source: "codex" | "claude"): SessionCollection {
return { source, events: [], filesRead: 0, malformed: 0, warnings: [] };
}
SHA-256: 0cd861bac0c6eeee2673dcb36cd6f9709431e8e134631b3c9473318615cd1b1d