import { AGENT_RUNTIME_COMMANDS } from "./commandManifest.generated"; import { normalizeThreadReadModel } from "./normalizers"; import { invokeAgentRuntimeCommand, type AgentRuntimeCommandInvoke, } from "./transport"; import type { AgentRuntimeCompactSessionRequest, AgentRuntimeDiffFileCheckpointRequest, AgentRuntimeFileCheckpointDetail, AgentRuntimeFileCheckpointDiffResult, AgentRuntimeFileCheckpointListResult, AgentRuntimeGetFileCheckpointRequest, AgentRuntimeInterruptTurnRequest, AgentRuntimeListFileCheckpointsRequest, AgentRuntimePromoteQueuedTurnRequest, AgentRuntimeRemoveQueuedTurnRequest, AgentRuntimeReplayRequestRequest, AgentRuntimeReplayedActionRequiredView, AgentRuntimeRespondActionRequest, AgentRuntimeResumeThreadRequest, AgentRuntimeSubmitTurnRequest, AgentRuntimeThreadReadModel, } from "./types"; export interface AgentRuntimeThreadClientDeps { invokeCommand?: AgentRuntimeCommandInvoke; } export function createThreadClient({ invokeCommand = invokeAgentRuntimeCommand, }: AgentRuntimeThreadClientDeps = {}) { async function submitAgentRuntimeTurn( request: AgentRuntimeSubmitTurnRequest, ): Promise { return await invokeCommand(AGENT_RUNTIME_COMMANDS.submitTurn, { request, }); } async function interruptAgentRuntimeTurn( request: AgentRuntimeInterruptTurnRequest, ): Promise { return await invokeCommand(AGENT_RUNTIME_COMMANDS.interruptTurn, { request, }); } async function compactAgentRuntimeSession( request: AgentRuntimeCompactSessionRequest, ): Promise { return await invokeCommand(AGENT_RUNTIME_COMMANDS.compactSession, { request, }); } async function resumeAgentRuntimeThread( request: AgentRuntimeResumeThreadRequest, ): Promise { return await invokeCommand(AGENT_RUNTIME_COMMANDS.resumeThread, { request, }); } async function replayAgentRuntimeRequest( request: AgentRuntimeReplayRequestRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.replayRequest, { request, }, ); } async function removeAgentRuntimeQueuedTurn( request: AgentRuntimeRemoveQueuedTurnRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.removeQueuedTurn, { request, }, ); } async function promoteAgentRuntimeQueuedTurn( request: AgentRuntimePromoteQueuedTurnRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.promoteQueuedTurn, { request }, ); } async function respondAgentRuntimeAction( request: AgentRuntimeRespondActionRequest, ): Promise { return await invokeCommand(AGENT_RUNTIME_COMMANDS.respondAction, { request, }); } async function getAgentRuntimeThreadRead( sessionId: string, ): Promise { const threadRead = await invokeCommand( AGENT_RUNTIME_COMMANDS.getThreadRead, { sessionId }, ); return normalizeThreadReadModel( threadRead as AgentRuntimeThreadReadModel | null | undefined, ) as AgentRuntimeThreadReadModel; } async function listAgentRuntimeFileCheckpoints( request: AgentRuntimeListFileCheckpointsRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.listFileCheckpoints, { request }, ); } async function getAgentRuntimeFileCheckpoint( request: AgentRuntimeGetFileCheckpointRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.getFileCheckpoint, { request }, ); } async function diffAgentRuntimeFileCheckpoint( request: AgentRuntimeDiffFileCheckpointRequest, ): Promise { return await invokeCommand( AGENT_RUNTIME_COMMANDS.diffFileCheckpoint, { request }, ); } return { compactAgentRuntimeSession, diffAgentRuntimeFileCheckpoint, getAgentRuntimeFileCheckpoint, getAgentRuntimeThreadRead, interruptAgentRuntimeTurn, listAgentRuntimeFileCheckpoints, promoteAgentRuntimeQueuedTurn, removeAgentRuntimeQueuedTurn, replayAgentRuntimeRequest, respondAgentRuntimeAction, resumeAgentRuntimeThread, submitAgentRuntimeTurn, }; } export const { compactAgentRuntimeSession, diffAgentRuntimeFileCheckpoint, getAgentRuntimeFileCheckpoint, getAgentRuntimeThreadRead, interruptAgentRuntimeTurn, listAgentRuntimeFileCheckpoints, promoteAgentRuntimeQueuedTurn, removeAgentRuntimeQueuedTurn, replayAgentRuntimeRequest, respondAgentRuntimeAction, resumeAgentRuntimeThread, submitAgentRuntimeTurn, } = createThreadClient();