3e237e177a
* feat: add code-walkthrough backend (MCP tool, service, persistence, WS events) * feat: render agent code walkthroughs as line-anchored cards + editor window * test: add code-walkthrough re-emit mock-agent scenario * fix: rework code-walkthrough UX (floating card, line reveal, minimize, clickable file) * fix: improve code walkthrough editor UX * fix: backfill walkthrough launcher after websocket connect * fix: improve walkthrough requests and editor anchors * fix: clear walkthrough highlights on close * feat: add walkthrough discard and prompt customization * fix: send walkthrough requests through saved prompt * fix: support postgres built-in prompt seeding * fix: address walkthrough review feedback * fix: address walkthrough review follow-ups * fix: harden walkthrough lifecycle races * fix: reuse walkthrough notification cleanup * fix: guard stale walkthrough file opens * fix: abort stale file opens before paint * fix: stabilize github settings e2e readiness * fix: use stable github settings e2e selector
29 lines
746 B
TypeScript
29 lines
746 B
TypeScript
import {
|
|
walkthroughStepMatchesFile,
|
|
type WalkthroughTargetFile,
|
|
} from "@/lib/diff/walkthrough-match";
|
|
import type { WalkthroughStep } from "@/lib/types/http";
|
|
|
|
export type WalkthroughEditorRange = {
|
|
startLine: number;
|
|
endLine: number;
|
|
};
|
|
|
|
export type WalkthroughRangeBox = WalkthroughEditorRange & {
|
|
top: number;
|
|
left: number;
|
|
width: number;
|
|
height: number;
|
|
};
|
|
|
|
export function getWalkthroughEditorRange(
|
|
file: WalkthroughTargetFile,
|
|
step: WalkthroughStep | null | undefined,
|
|
): WalkthroughEditorRange | null {
|
|
if (!step || !walkthroughStepMatchesFile(file, step)) return null;
|
|
return {
|
|
startLine: Math.min(step.line, step.line_end ?? step.line),
|
|
endLine: Math.max(step.line, step.line_end ?? step.line),
|
|
};
|
|
}
|