import type { AgentHarness } from "openclaw/plugin-sdk/agent-harness"; import { listCodexAppServerModels } from "./app-server/client.js"; import type { CodexAppServerListModelsOptions, CodexAppServerModel, CodexAppServerModelListResult, } from "./app-server/client.js"; import { maybeCompactCodexAppServerSession } from "./app-server/compact.js"; import { runCodexAppServerAttempt } from "./app-server/run-attempt.js"; import { clearCodexAppServerBinding } from "./app-server/session-binding.js"; const DEFAULT_CODEX_HARNESS_PROVIDER_IDS = new Set(["codex", "openai-codex"]); export type { CodexAppServerListModelsOptions, CodexAppServerModel, CodexAppServerModelListResult }; export { listCodexAppServerModels }; export function createCodexAppServerAgentHarness(options?: { id?: string; label?: string; providerIds?: Iterable; }): AgentHarness { const providerIds = new Set( [...(options?.providerIds ?? DEFAULT_CODEX_HARNESS_PROVIDER_IDS)].map((id) => id.trim().toLowerCase(), ), ); return { id: options?.id ?? "codex", label: options?.label ?? "Codex agent harness", supports: (ctx) => { const provider = ctx.provider.trim().toLowerCase(); if (providerIds.has(provider)) { return { supported: true, priority: 100 }; } return { supported: false, reason: `provider is not one of: ${[...providerIds].toSorted().join(", ")}`, }; }, runAttempt: runCodexAppServerAttempt, compact: maybeCompactCodexAppServerSession, reset: async (params) => { if (params.sessionFile) { await clearCodexAppServerBinding(params.sessionFile); } }, }; }