import { type Anchor, type CommentThread, type FoldedComments } from "../runDirectory/comments.js"; import type { StoryRow } from "./story.js"; /** The comment threads on one row. */ export type RowMarkSet = { threads: CommentThread[]; }; /** Row id → its marks, for one trace. */ export type TraceMarks = Record; /** Trace id → its rows' marks. Row ids are only unique inside a trace. */ export type RowMarks = Record; export type MarkOptions = { /** Show an agent's own notes. A reply to a person's comment is always * shown under it; the toggle hides only the notes nobody asked for. */ showAgentNotes: boolean; }; export declare const HUMAN_MARK = "\u270E"; export declare const AGENT_MARK = "\u2691"; /** Ids come from logs and comment files, so the dictionaries have no * prototype: a trace named `__proto__` or a row named `constructor` is * just a key. */ export declare function emptyMarks(): RowMarks; export declare function marksFrom(folded: FoldedComments, options: MarkOptions): RowMarks; export declare function marksForRow(marks: RowMarks, traceId: string, rowId: string): RowMarkSet; /** The gutter text for a row: `✎` when a person commented, `⚑` when an agent * left a note of its own, both when both, empty when neither. */ export declare function markGlyphs(set: RowMarkSet): string; /** Comments on a trace, for the picker's `N comments`. Counts every thread * the marks hold, so it follows the agent-notes toggle. */ export declare function commentCount(marks: RowMarks, traceId: string): number; /** The facts about a row a comment keeps beside its id, so a reader can say * what it was about if the id stops resolving. */ export declare function anchorFor(row: StoryRow): Anchor;