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
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { getWebSocketClient } from "@/lib/ws/connection";
|
|
import type { TaskWalkthrough } from "@/lib/types/http";
|
|
|
|
const WS_CLIENT_UNAVAILABLE = "WebSocket client not available";
|
|
|
|
/**
|
|
* Get the agent-authored code walkthrough for a task, or null if none exists.
|
|
* Used to backfill the store on mount — live `task.walkthrough.created` events
|
|
* can fire before the page's WS subscription is established.
|
|
*/
|
|
export async function getTaskWalkthrough(taskId: string): Promise<TaskWalkthrough | null> {
|
|
const client = getWebSocketClient();
|
|
if (!client) {
|
|
throw new Error(WS_CLIENT_UNAVAILABLE);
|
|
}
|
|
|
|
const response = await client.request("task.walkthrough.get", { task_id: taskId });
|
|
if (!response || typeof response !== "object" || !("id" in response)) {
|
|
return null;
|
|
}
|
|
return response as TaskWalkthrough;
|
|
}
|
|
|
|
/** Delete the current persisted walkthrough for a task. */
|
|
export async function deleteTaskWalkthrough(taskId: string): Promise<void> {
|
|
const client = getWebSocketClient();
|
|
if (!client) {
|
|
throw new Error(WS_CLIENT_UNAVAILABLE);
|
|
}
|
|
|
|
await client.request("task.walkthrough.delete", { task_id: taskId }, 10000);
|
|
}
|