← Public packages
@kody/codex
Create and manage OpenAI Agents API (Codex harness) cloud agent sessions.
src/sessions/list.ts
73 lines · 1.9 KB · TypeScriptimport { boolean, number, object, optional, parse, string } from 'remix/data-schema'
import { agentsFetch, pickAuth } from '../client.ts'
const listInput = object(
{
limit: optional(number()),
after: optional(string()),
order: optional(string()),
apiKeySecret: optional(string()),
dryRun: optional(boolean()),
},
{ unknownKeys: 'error' },
)
/**
* List Agents API sessions (`GET /v1/agents/sessions`).
* Prefer this for smoke tests and browsing prior work. Paginate with `after`.
*
* @param raw.limit - Page size (e.g. 20)
* @param raw.after - Cursor from previous page `last_id`
* @param raw.order - `asc` or `desc` when supported
* @param raw.dryRun - Preview without calling OpenAI
* @param raw.apiKeySecret - Optional alternate secret name
* @returns List page (`data`, `has_more`, `last_id`, …)
*
* @example
* import listSessions from 'kody:@kody/codex/sessions/list'
* const page = await listSessions({ limit: 20 })
*/
export default async function listSessions(raw: unknown = {}) {
const input = parse(listInput, raw ?? {})
const auth = pickAuth(input)
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.dryRun === true) {
return {
dryRun: true as const,
method: 'GET' as const,
path: '/v1/agents/sessions',
query,
note: 'Would list Agents API sessions in the project.',
}
}
const response = await agentsFetch('/agents/sessions', {
...auth,
method: 'GET',
query,
})
const body = response.body as {
data?: unknown[]
has_more?: boolean
last_id?: string
} | null
const data = Array.isArray(body?.data)
? body.data
: Array.isArray(response.body)
? (response.body as unknown[])
: []
return {
ok: true,
count: data.length,
data,
has_more: body?.has_more ?? false,
last_id: body?.last_id ?? null,
page: response.body,
status: response.status,
}
}