import { taskGoalFromInput } from "./anchor"; import { buildExecutionJournal } from "./execution"; import { buildProjectCapabilities } from "./project"; import type { CardFinding, ContextMessage, EvidenceLease, RepositoryIdentity, RuntimeCard, } from "./types"; type ContinuityState = Pick; export function buildRuntimeCard( cwd: string, goal: string, messages: ContextMessage[], continuity: ContinuityState = {}, extras: { pending?: string[]; findings?: CardFinding[]; filesRead?: EvidenceLease[]; repo?: RepositoryIdentity; } = {}, ): RuntimeCard { const latestRequest = messages .filter((message) => message.role === "user") .map((message) => taskGoalFromInput(message.text)) .filter(Boolean) .at(-1); return { goal, latestRequest, capabilities: buildProjectCapabilities(cwd), execution: buildExecutionJournal(messages), pending: extras.pending, findings: extras.findings, filesRead: extras.filesRead, repo: extras.repo, ...continuity, }; }