import type { ExecutionWorkspace, ExecutionWorkspaceSummary, ExecutionWorkspaceCloseReadiness, WorkspaceOperation, WorkspaceRuntimeControlTarget, } from "@penclipai/shared"; import { api } from "./client"; import { sanitizeWorkspaceRuntimeControlTarget } from "./workspace-runtime-control"; export const executionWorkspacesApi = { listSummaries: ( companyId: string, filters?: { projectId?: string; projectWorkspaceId?: string; issueId?: string; status?: string; reuseEligible?: boolean; }, ) => { const params = new URLSearchParams(); if (filters?.projectId) params.set("projectId", filters.projectId); if (filters?.projectWorkspaceId) params.set("projectWorkspaceId", filters.projectWorkspaceId); if (filters?.issueId) params.set("issueId", filters.issueId); if (filters?.status) params.set("status", filters.status); if (filters?.reuseEligible) params.set("reuseEligible", "true"); params.set("summary", "true"); const qs = params.toString(); return api.get( `/companies/${companyId}/execution-workspaces${qs ? `?${qs}` : ""}`, ); }, list: ( companyId: string, filters?: { projectId?: string; projectWorkspaceId?: string; issueId?: string; status?: string; reuseEligible?: boolean; }, ) => { const params = new URLSearchParams(); if (filters?.projectId) params.set("projectId", filters.projectId); if (filters?.projectWorkspaceId) params.set("projectWorkspaceId", filters.projectWorkspaceId); if (filters?.issueId) params.set("issueId", filters.issueId); if (filters?.status) params.set("status", filters.status); if (filters?.reuseEligible) params.set("reuseEligible", "true"); const qs = params.toString(); return api.get(`/companies/${companyId}/execution-workspaces${qs ? `?${qs}` : ""}`); }, get: (id: string) => api.get(`/execution-workspaces/${id}`), getCloseReadiness: (id: string) => api.get(`/execution-workspaces/${id}/close-readiness`), listWorkspaceOperations: (id: string) => api.get(`/execution-workspaces/${id}/workspace-operations`), controlRuntimeServices: ( id: string, action: "start" | "stop" | "restart", target: WorkspaceRuntimeControlTarget = {}, ) => api.post<{ workspace: ExecutionWorkspace; operation: WorkspaceOperation }>( `/execution-workspaces/${id}/runtime-services/${action}`, sanitizeWorkspaceRuntimeControlTarget(target), ), controlRuntimeCommands: ( id: string, action: "start" | "stop" | "restart" | "run", target: WorkspaceRuntimeControlTarget = {}, ) => api.post<{ workspace: ExecutionWorkspace; operation: WorkspaceOperation }>( `/execution-workspaces/${id}/runtime-commands/${action}`, sanitizeWorkspaceRuntimeControlTarget(target), ), update: (id: string, data: Record) => api.patch(`/execution-workspaces/${id}`, data), };