Files
kandev/apps/web/lib/api/domains/walkthrough-api.ts
T
José Almeida 3e237e177a feat: add agent-authored code walkthroughs (#1647)
* 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
2026-07-10 08:34:57 +01:00

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);
}