import type { Agent, AdapterEnvironmentTestResult, AgentKeyCreated, AgentRuntimeState, AgentTaskSession, HeartbeatRun, Approval, AgentConfigRevision, } from "@paperclip/shared"; import { api } from "./client"; export interface AgentKey { id: string; name: string; createdAt: Date; revokedAt: Date | null; } export interface AdapterModel { id: string; label: string; } export interface ClaudeLoginResult { exitCode: number | null; signal: string | null; timedOut: boolean; loginUrl: string | null; stdout: string; stderr: string; } export interface OrgNode { id: string; name: string; role: string; status: string; reports: OrgNode[]; } export interface AgentHireResponse { agent: Agent; approval: Approval | null; } export const agentsApi = { list: (companyId: string) => api.get(`/companies/${companyId}/agents`), org: (companyId: string) => api.get(`/companies/${companyId}/org`), listConfigurations: (companyId: string) => api.get[]>(`/companies/${companyId}/agent-configurations`), get: (id: string) => api.get(`/agents/${id}`), getConfiguration: (id: string) => api.get>(`/agents/${id}/configuration`), listConfigRevisions: (id: string) => api.get(`/agents/${id}/config-revisions`), getConfigRevision: (id: string, revisionId: string) => api.get(`/agents/${id}/config-revisions/${revisionId}`), rollbackConfigRevision: (id: string, revisionId: string) => api.post(`/agents/${id}/config-revisions/${revisionId}/rollback`, {}), create: (companyId: string, data: Record) => api.post(`/companies/${companyId}/agents`, data), hire: (companyId: string, data: Record) => api.post(`/companies/${companyId}/agent-hires`, data), update: (id: string, data: Record) => api.patch(`/agents/${id}`, data), updatePermissions: (id: string, data: { canCreateAgents: boolean }) => api.patch(`/agents/${id}/permissions`, data), pause: (id: string) => api.post(`/agents/${id}/pause`, {}), resume: (id: string) => api.post(`/agents/${id}/resume`, {}), terminate: (id: string) => api.post(`/agents/${id}/terminate`, {}), remove: (id: string) => api.delete<{ ok: true }>(`/agents/${id}`), listKeys: (id: string) => api.get(`/agents/${id}/keys`), createKey: (id: string, name: string) => api.post(`/agents/${id}/keys`, { name }), revokeKey: (agentId: string, keyId: string) => api.delete<{ ok: true }>(`/agents/${agentId}/keys/${keyId}`), runtimeState: (id: string) => api.get(`/agents/${id}/runtime-state`), taskSessions: (id: string) => api.get(`/agents/${id}/task-sessions`), resetSession: (id: string, taskKey?: string | null) => api.post(`/agents/${id}/runtime-state/reset-session`, { taskKey: taskKey ?? null }), adapterModels: (type: string) => api.get(`/adapters/${type}/models`), testEnvironment: ( companyId: string, type: string, data: { adapterConfig: Record }, ) => api.post( `/companies/${companyId}/adapters/${type}/test-environment`, data, ), invoke: (id: string) => api.post(`/agents/${id}/heartbeat/invoke`, {}), wakeup: ( id: string, data: { source?: "timer" | "assignment" | "on_demand" | "automation"; triggerDetail?: "manual" | "ping" | "callback" | "system"; reason?: string | null; payload?: Record | null; idempotencyKey?: string | null; }, ) => api.post(`/agents/${id}/wakeup`, data), loginWithClaude: (id: string) => api.post(`/agents/${id}/claude-login`, {}), };