/** * Client helpers of the worktree (S2) view: the mirror of the server's * close-reason cap (the same discipline `brief-view.ts` applies to the * journal cap) and the lane-kind probe the view's actions branch on. * @module dsh-client-ui-mimir/client/worktree-view */ import type { ResearchWorktreeView } from 'dsh-mimir/types'; /** Mirror of the server's `IDEA_CLOSE_REASON_MAX_CHARS` (the documented-No cap). */ export declare const WORKTREE_REASON_MAX_CHARS = 48; /** Draft state of one close reason (the documented-No input box). */ export type CloseReasonState = 'empty' | 'ok' | 'too-long'; /** Validate one close-reason draft client-side; the server re-validates. */ export declare function closeReasonState(reason: string): CloseReasonState; /** * Whether one lane is an idea line (closeable, parent-declarable). Project * lanes (`project:`) can carry the mainline ref but never a parent or a * close in v1. */ export declare function isIdeaLane(lineId: string): boolean; /** One memorable beat of the trajectory (the highlight strip's row). */ export interface WorktreeHighlight { readonly kind: 'mainline' | 'busiest' | 'eureka' | 'adopted' | 'failed'; /** The headline figure or name. */ readonly value: string; /** The human framing around it (locale copy wraps this). */ readonly detail: string; } /** * Distil a worktree into its memorable beats — the trajectory's highlights, * not its raw counters. Deliberately descriptive: "the主线 moved 3 times" * is a fact about attention spent, never advice about where to spend more. * * Pure and order-independent; an empty worktree yields no highlights rather * than invented ones. * @param view - the derived worktree. * @returns the highlights, most structurally significant first. */ export declare function worktreeHighlights(view: ResearchWorktreeView): readonly WorktreeHighlight[]; //# sourceMappingURL=worktree-view.d.ts.map