Skip to content
← Public packages

@kody/codex

Create and manage OpenAI Agents API (Codex harness) cloud agent sessions.

src/sessions/get.ts

50 lines · 1.5 KB · TypeScript
import { boolean, object, optional, parse, string } from 'remix/data-schema'
import { agentsFetch, pickAuth, requireSessionId } from '../client.ts'

const getInput = object(
	{
		sessionId: string(),
		apiKeySecret: optional(string()),
		dryRun: optional(boolean()),
	},
	{ unknownKeys: 'error' },
)

/**
 * Retrieve one Agents API session (`GET /v1/agents/sessions/{session_id}`).
 * Use after disconnects or on `requires_action` to inspect status and
 * `required_actions`.
 *
 * @param raw.sessionId - Session id (`sess_…`)
 * @param raw.dryRun - Preview without calling OpenAI
 * @param raw.apiKeySecret - Optional alternate secret name
 * @returns Session object (status, agent, environment, required_actions, …)
 *
 * @example
 * import getSession from 'kody:@kody/codex/sessions/get'
 * const session = await getSession({ sessionId: 'sess_123' })
 */
export default async function getSession(raw: unknown = {}) {
	const input = parse(getInput, raw ?? {})
	const auth = pickAuth(input)
	const sessionId = requireSessionId(input.sessionId)
	const path = `/agents/sessions/${encodeURIComponent(sessionId)}`

	if (input.dryRun === true) {
		return {
			dryRun: true as const,
			method: 'GET' as const,
			path: `/v1${path}`,
			sessionId,
			note: 'Would retrieve session status, agent, environment, and required_actions.',
		}
	}

	const response = await agentsFetch(path, { ...auth, method: 'GET' })
	return {
		ok: true,
		sessionId,
		session: response.body,
		status: response.status,
	}
}