import { useMutation, useQueryClient } from '@tanstack/react-query' import type { AgentFlavor, PermissionMode } from '@hapi/protocol' import type { ApiClient } from '@/api/client' import type { SpawnResponse } from '@/types/api' import { queryKeys } from '@/lib/query-keys' type SpawnInput = { machineId: string directory: string agent?: AgentFlavor model?: string effort?: string modelReasoningEffort?: string yolo?: boolean permissionMode?: PermissionMode sessionType?: 'simple' | 'worktree' worktreeName?: string } export function useSpawnSession(api: ApiClient | null): { spawnSession: (input: SpawnInput) => Promise isPending: boolean error: string | null } { const queryClient = useQueryClient() const mutation = useMutation({ mutationFn: async (input: SpawnInput) => { if (!api) { throw new Error('API unavailable') } return await api.spawnSession( input.machineId, input.directory, input.agent, input.model, input.modelReasoningEffort, input.yolo, input.sessionType, input.worktreeName, input.effort, input.permissionMode ) }, onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.sessions }) }, }) return { spawnSession: mutation.mutateAsync, isPending: mutation.isPending, error: mutation.error instanceof Error ? mutation.error.message : mutation.error ? 'Failed to spawn session' : null, } }