import type { TrackedAgentName } from "./protocol.js"; export type WorkItemState = "open" | "awaiting_implementer" | "awaiting_spec_review" | "awaiting_code_review" | "needs_context" | "blocked" | "ready_to_close" | "closed"; export type WorkItemRecord = { sessionId: string; workItemId: string; key: string; title: string; state: WorkItemState; specReviewCount: number; codeReviewCount: number; createdAt: string; updatedAt: string; closedAt?: string; }; export type OpenWorkItemResult = { ok: true; reused: boolean; record: WorkItemRecord; header: string; } | { ok: false; errorCode: "WORK_ITEM_KEY_CONFLICT"; message: string; existingWorkItemId: string; }; export type CloseWorkItemResult = { ok: true; record: WorkItemRecord; header: string; } | { ok: false; errorCode: "WORK_ITEM_NOT_FOUND" | "WORK_ITEM_ALREADY_CLOSED"; message: string; }; export type TransitionWorkItemStateResult = { ok: true; record: WorkItemRecord; } | { ok: false; errorCode: "WORK_ITEM_NOT_FOUND" | "WORK_ITEM_ALREADY_CLOSED" | "INVALID_STATE_TRANSITION" | "MISSING_TRANSITION_ACTOR"; message: string; }; export type WorkItemStoreData = { nextId: number; records: Map; keyIndexBySession: Map>; }; export type WorkItemStore = { openWorkItem: (input: { sessionId: string; key: string; title: string; }) => OpenWorkItemResult; getWorkItem: (sessionId: string, workItemId: string) => WorkItemRecord | undefined; listWorkItems: (sessionId: string, options?: { includeClosed?: boolean; }) => WorkItemRecord[]; closeWorkItem: (sessionId: string, workItemId: string) => CloseWorkItemResult; transitionWorkItemState: (input: { sessionId: string; workItemId: string; state: WorkItemState; actor?: TrackedAgentName; }) => TransitionWorkItemStateResult; getReviewRound: (record: Pick) => number; /** Expose internal store data for persistence snapshotting. */ getStoreData: () => WorkItemStoreData; }; export declare function getReviewRound(record: Pick): number; export declare function createWorkItemStore(hydrateData?: WorkItemStoreData | null): WorkItemStore; export declare function openWorkItem(store: WorkItemStore, input: { sessionId: string; key: string; title: string; }): OpenWorkItemResult; export declare function getWorkItem(store: WorkItemStore, sessionId: string, workItemId: string): WorkItemRecord | undefined; export declare function listWorkItems(store: WorkItemStore, sessionId: string, options?: { includeClosed?: boolean; }): WorkItemRecord[]; export declare function closeWorkItem(store: WorkItemStore, sessionId: string, workItemId: string): CloseWorkItemResult; export declare function transitionWorkItemState(store: WorkItemStore, input: { sessionId: string; workItemId: string; state: WorkItemState; actor?: TrackedAgentName; }): TransitionWorkItemStateResult;