← Public packages
@kody/codex
Create and manage OpenAI Agents API (Codex harness) cloud agent sessions.
src/sessions/items.ts
76 lines · 2.2 KB · TypeScriptimport { boolean, number, object, optional, parse, string } from 'remix/data-schema'
import { agentsFetch, pickAuth, requireSessionId } from '../client.ts'
const itemsInput = object(
{
sessionId: string(),
limit: optional(number()),
after: optional(string()),
order: optional(string()),
turnId: optional(string()),
apiKeySecret: optional(string()),
dryRun: optional(boolean()),
},
{ unknownKeys: 'error' },
)
/**
* List saved session items (`GET /v1/agents/sessions/{session_id}/items`).
* Use after a turn completes or a stream disconnects — streams do not replay.
*
* @param raw.sessionId - Session id
* @param raw.limit - Page size (e.g. 100)
* @param raw.after - Pagination cursor
* @param raw.order - Prefer `asc` oldest→newest
* @param raw.turnId - Optional filter when supported by the API
* @param raw.dryRun - Preview without calling OpenAI
* @param raw.apiKeySecret - Optional alternate secret name
* @returns Items page
*
* @example
* import listItems from 'kody:@kody/codex/sessions/items'
* const items = await listItems({ sessionId: 'sess_123', order: 'asc', limit: 100 })
*/
export default async function listItems(raw: unknown = {}) {
const input = parse(itemsInput, raw ?? {})
const auth = pickAuth(input)
const sessionId = requireSessionId(input.sessionId)
const path = `/agents/sessions/${encodeURIComponent(sessionId)}/items`
const query: Record<string, string | number> = {}
if (input.limit != null) query.limit = input.limit
if (input.after) query.after = input.after
if (input.order) query.order = input.order
if (input.turnId) query.turn_id = input.turnId
if (input.dryRun === true) {
return {
dryRun: true as const,
method: 'GET' as const,
path: `/v1${path}`,
sessionId,
query,
note: 'Would list saved messages and tool calls for the session.',
}
}
const response = await agentsFetch(path, {
...auth,
method: 'GET',
query,
})
const body = response.body as { data?: unknown[] } | null
const data = Array.isArray(body?.data)
? body.data
: Array.isArray(response.body)
? (response.body as unknown[])
: []
return {
ok: true,
sessionId,
count: data.length,
data,
page: response.body,
status: response.status,
}
}