api.ts 2.9 KB

1234567891011121314151617181920212223242526
  1. import type { ArtifactDetailProjection, BuildSummary, CardBusinessData, ExecutionViewV8, InspectorDetailProjection, InspectorWorkbenchProjection, PromptProjection } from "@/lib/types";
  2. const API_BASE = (process.env.NEXT_PUBLIC_API_BASE || process.env.NEXT_PUBLIC_VISUALIZATION_API || "http://127.0.0.1:8788").replace(/\/$/, "");
  3. export const moduleAuditUrl = (buildId: string) => `${API_BASE}/audit/${encodeURIComponent(buildId)}`;
  4. async function request<T>(path: string, signal?: AbortSignal): Promise<T> {
  5. const response = await fetch(`${API_BASE}${path}`, { signal, cache: "no-store", headers: { Accept: "application/json" } });
  6. if (!response.ok) throw new Error(`API ${response.status}: ${response.statusText}`);
  7. return response.json() as Promise<T>;
  8. }
  9. export async function listScriptBuilds(signal?: AbortSignal): Promise<BuildSummary[]> {
  10. const payload = await request<BuildSummary[] | { items?: Array<BuildSummary & { script_build_id?: string | number; buildId?: string | number }> }>("/api/script-builds?limit=30", signal);
  11. const items = Array.isArray(payload) ? payload : payload.items || [];
  12. return items.map((item) => { const raw = item as typeof item & { script_build_id?: string | number; buildId?: string | number }; return { ...item, id: String(item.id ?? raw.script_build_id ?? raw.buildId ?? "") }; });
  13. }
  14. export const getExecutionView = (id: string, signal?: AbortSignal) => request<ExecutionViewV8>(`/api/script-builds/${encodeURIComponent(id)}/execution-view`, signal);
  15. export const getRoundDetail = (buildId: string, roundIndex: number, signal?: AbortSignal) => request<InspectorDetailProjection>(`/api/script-builds/${encodeURIComponent(buildId)}/rounds/${roundIndex}`, signal);
  16. export const getActivityDetail = (buildId: string, detailRef: string, signal?: AbortSignal) => request<InspectorDetailProjection>(`/api/script-builds/${encodeURIComponent(buildId)}/activities/${encodeURIComponent(detailRef)}`, signal);
  17. export const getArtifactDetail = (buildId: string, snapshotRef: string, signal?: AbortSignal) => request<ArtifactDetailProjection>(`/api/script-builds/${encodeURIComponent(buildId)}/artifacts/${encodeURIComponent(snapshotRef)}`, signal);
  18. export const getDecisionPrompt = (buildId: string, promptRef: string, signal?: AbortSignal) => request<PromptProjection>(`/api/script-builds/${encodeURIComponent(buildId)}/decision-prompts/${encodeURIComponent(promptRef)}`, signal);
  19. export const getCardData = (buildId: string, detailRef: string, signal?: AbortSignal) => request<CardBusinessData>(`/api/script-builds/${encodeURIComponent(buildId)}/card-data/${encodeURIComponent(detailRef)}`, signal);
  20. export const getInspectorView = (buildId: string, detailRef: string, signal?: AbortSignal) => request<InspectorWorkbenchProjection>(`/api/script-builds/${encodeURIComponent(buildId)}/inspector-view/${encodeURIComponent(detailRef)}`, signal);
  21. export const errorMessage = (error: unknown) => error instanceof Error ? error.message : String(error);