codai-sdk 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/http.ts","../src/resources/account.ts","../src/resources/agents.ts","../src/resources/audio.ts","../src/resources/chat.ts","../src/resources/devices.ts","../src/resources/embeddings.ts","../src/resources/environments.ts","../src/resources/health.ts","../src/resources/hosts.ts","../src/resources/messages.ts","../src/resources/models.ts","../src/resources/orgs.ts","../src/resources/projects.ts","../src/resources/resolve.ts","../src/resources/responses.ts","../src/resources/sessions.ts","../src/resources/system-one.ts","../src/resources/tasks.ts","../src/resources/triggers.ts","../src/resources/tokens.ts","../src/resources/tools.ts","../src/operations.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Shared HTTP layer for every resource: base URL, bearer auth, `X-Codai-*`\n * extension headers, retries, timeouts, JSON + SSE helpers and the\n * `CodaiError` mapping of the gateway error envelope.\n */\n\nimport type { components } from './generated/gateway';\n\nexport type ErrorEnvelope = components['schemas']['Error'];\nexport type ErrorCode = ErrorEnvelope['error']['code'];\n\nexport class CodaiError extends Error {\n /** Stable gateway error code (`invalid_api_key`, `rate_limit_exceeded`, …) when the body was an error envelope. */\n readonly code: ErrorCode | null;\n /** `x-codai-trace-id` (or `x-request-id`) of the failed response, when present. */\n readonly requestId: string | null;\n /** Seconds to wait before retrying, from `Retry-After` on 429s. */\n readonly retryAfter: number | null;\n\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: unknown,\n meta: { code?: ErrorCode | null; requestId?: string | null; retryAfter?: number | null } = {},\n ) {\n super(message);\n this.name = 'CodaiError';\n this.code = meta.code ?? extractCode(body);\n this.requestId = meta.requestId ?? null;\n this.retryAfter = meta.retryAfter ?? null;\n }\n}\n\nfunction extractCode(body: unknown): ErrorCode | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { code?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.code === 'string')\n return err.code as ErrorCode;\n }\n return null;\n}\n\nfunction extractMessage(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { message?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.message === 'string') return err.message;\n }\n return null;\n}\n\nconst RETRYABLE = new Set([429, 500, 502, 503, 504]);\n\n/**\n * Per-request `X-Codai-*` extension headers. Every field maps 1:1 to the\n * request header of the same name (`effort` → `x-codai-effort`). Values are\n * sent verbatim; booleans become `1` / `0`.\n */\nexport interface CodaiRequestExtensions {\n /** `x-codai-session-id` — groups requests of one conversation. */\n sessionId?: string;\n /** `x-request-id` — echoed as `x-codai-trace-id`. */\n requestId?: string;\n /** `x-codai-effort` */\n effort?: 'minimal' | 'low' | 'medium' | 'high' | 'max';\n /** `x-codai-thinking` */\n thinking?: boolean;\n /** `x-codai-thinking-budget` */\n thinkingBudget?: number;\n /** `x-codai-thinking-pin` */\n thinkingPin?: boolean;\n /** `x-codai-cache` (`false` disables caching on direct model ids). */\n cache?: boolean;\n /** `x-codai-no-task` */\n noTask?: boolean;\n /** `x-codai-task-id` */\n taskId?: string;\n /** `x-codai-task-outcome` */\n taskOutcome?: 'pass' | 'fail';\n /** `x-codai-task-evidence` */\n taskEvidence?: 'exec_verdict' | 'reexec';\n /** `x-codai-client` */\n client?: string;\n /** `x-codai-incognito` */\n incognito?: boolean;\n /** `x-codai-no-recall` */\n noRecall?: boolean;\n /** `x-codai-proven-only` */\n provenOnly?: boolean;\n /** `x-codai-new-session` */\n newSession?: boolean;\n /** `x-codai-repo` */\n repo?: string;\n /** `x-codai-agent-id` */\n agentId?: string;\n /** `x-codai-disable-subagents` */\n disableSubagents?: boolean;\n /** `x-codai-mode: agent` */\n mode?: 'agent';\n /** `x-codai-server-tools` */\n serverTools?: boolean;\n /** `x-codai-orchestrate` */\n orchestrate?: boolean;\n /** `x-codai-cascade` */\n cascade?: 'verify';\n /** `x-codai-best-of` (number or `off`). */\n bestOf?: number | 'off';\n /** `x-codai-best-of-depth` */\n bestOfDepth?: number;\n /** `x-codai-reflect` */\n reflect?: boolean;\n /** `x-codai-step-verify` */\n stepVerify?: boolean;\n /** `x-codai-plan` */\n plan?: boolean;\n /** `x-codai-consensus` */\n consensus?: boolean;\n /** `x-codai-compact` (`'auto'` and `true` both send `1`). */\n compact?: boolean | 'auto';\n /** `x-codai-retrieval` */\n retrieval?: boolean;\n /** `x-codai-heuristics` */\n heuristics?: boolean;\n /** `x-codai-identity` */\n identity?: 'on' | 'off' | 'shadow';\n /** `x-codai-playbook` */\n playbook?: string;\n /** `x-codai-no-playbook` */\n noPlaybook?: boolean;\n /** `x-codai-debug` */\n debug?: boolean;\n /** `x-codai-device` — shared-sessions / hosts device UUID. */\n device?: string;\n /** `x-codai-device-name` */\n deviceName?: string;\n /** `x-codai-device-platform` */\n devicePlatform?: 'android' | 'ios' | 'web' | 'desktop' | 'cli' | 'agent';\n /** `x-codai-push-token` */\n pushToken?: string;\n /** `x-codai-share-token` */\n shareToken?: string;\n /** Escape hatch: any additional raw headers. */\n headers?: Record<string, string>;\n}\n\nconst EXTENSION_HEADERS: Record<Exclude<keyof CodaiRequestExtensions, 'headers'>, string> = {\n sessionId: 'x-codai-session-id',\n requestId: 'x-request-id',\n effort: 'x-codai-effort',\n thinking: 'x-codai-thinking',\n thinkingBudget: 'x-codai-thinking-budget',\n thinkingPin: 'x-codai-thinking-pin',\n cache: 'x-codai-cache',\n noTask: 'x-codai-no-task',\n taskId: 'x-codai-task-id',\n taskOutcome: 'x-codai-task-outcome',\n taskEvidence: 'x-codai-task-evidence',\n client: 'x-codai-client',\n incognito: 'x-codai-incognito',\n noRecall: 'x-codai-no-recall',\n provenOnly: 'x-codai-proven-only',\n newSession: 'x-codai-new-session',\n repo: 'x-codai-repo',\n agentId: 'x-codai-agent-id',\n disableSubagents: 'x-codai-disable-subagents',\n mode: 'x-codai-mode',\n serverTools: 'x-codai-server-tools',\n orchestrate: 'x-codai-orchestrate',\n cascade: 'x-codai-cascade',\n bestOf: 'x-codai-best-of',\n bestOfDepth: 'x-codai-best-of-depth',\n reflect: 'x-codai-reflect',\n stepVerify: 'x-codai-step-verify',\n plan: 'x-codai-plan',\n consensus: 'x-codai-consensus',\n compact: 'x-codai-compact',\n retrieval: 'x-codai-retrieval',\n heuristics: 'x-codai-heuristics',\n identity: 'x-codai-identity',\n playbook: 'x-codai-playbook',\n noPlaybook: 'x-codai-no-playbook',\n debug: 'x-codai-debug',\n device: 'x-codai-device',\n deviceName: 'x-codai-device-name',\n devicePlatform: 'x-codai-device-platform',\n pushToken: 'x-codai-push-token',\n shareToken: 'x-codai-share-token',\n};\n\n/** Translate an extensions bag into raw `X-Codai-*` headers. Exported for tests. */\nexport function extensionHeaders(ext: CodaiRequestExtensions | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (!ext) return out;\n for (const [key, header] of Object.entries(EXTENSION_HEADERS) as Array<\n [Exclude<keyof CodaiRequestExtensions, 'headers'>, string]\n >) {\n const value = ext[key];\n if (value === undefined || value === null) continue;\n if (typeof value === 'boolean') out[header] = value ? '1' : '0';\n else if (key === 'compact' && value === 'auto') out[header] = '1';\n else out[header] = String(value);\n }\n if (ext.headers) Object.assign(out, ext.headers);\n return out;\n}\n\nexport interface HttpClientOptions {\n apiKey: string;\n baseUrl: string;\n timeoutMs: number;\n maxRetries: number;\n /** Extensions applied to every request (per-call bags override per key). */\n defaults?: CodaiRequestExtensions;\n /** Injectable fetch (defaults to the global one). */\n fetch?: typeof fetch;\n}\n\nexport type Query = Record<string, string | number | boolean | undefined | null>;\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** JSON body (serialised) — pass `undefined` for no body. */\n body?: unknown;\n /** A pre-built body (FormData / Blob) sent as-is; disables retries. */\n rawBody?: BodyInit;\n query?: Query;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n /** Override the client timeout for this call (ms). `0` disables it (streams). */\n timeoutMs?: number;\n /** Never retry this call (multipart uploads, streams). */\n noRetry?: boolean;\n /** Statuses treated as success besides 2xx (e.g. 503 on `/health/ready`). */\n acceptStatus?: number[];\n}\n\nexport class HttpClient {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n readonly defaults: CodaiRequestExtensions;\n private readonly fetchImpl: typeof fetch;\n\n constructor(opts: HttpClientOptions) {\n this.apiKey = opts.apiKey;\n this.baseUrl = opts.baseUrl.replace(/\\/$/, '');\n this.timeoutMs = opts.timeoutMs;\n this.maxRetries = opts.maxRetries;\n this.defaults = opts.defaults ?? {};\n this.fetchImpl = opts.fetch ?? ((input, init) => fetch(input, init));\n }\n\n url(path: string, query?: Query): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n url.searchParams.set(k, typeof v === 'boolean' ? (v ? '1' : '0') : String(v));\n }\n }\n return url.toString();\n }\n\n headers(ext?: CodaiRequestExtensions, json = true): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...(json ? { 'Content-Type': 'application/json' } : {}),\n ...extensionHeaders(this.defaults),\n ...extensionHeaders(ext),\n };\n }\n\n /** Perform a request; throws `CodaiError` on non-2xx (after retries on 429/5xx). */\n async request(path: string, init: RequestOptions = {}): Promise<Response> {\n const url = this.url(path, init.query);\n const hasJson = init.body !== undefined;\n const headers = this.headers(init.ext, hasJson);\n const method = init.method ?? (hasJson || init.rawBody !== undefined ? 'POST' : 'GET');\n const retries = init.noRetry || init.rawBody !== undefined ? 0 : this.maxRetries;\n const timeout = init.timeoutMs ?? this.timeoutMs;\n const accept = new Set(init.acceptStatus ?? []);\n let lastErr: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n const signal = init.signal ?? (timeout > 0 ? AbortSignal.timeout(timeout) : undefined);\n try {\n const res = await this.fetchImpl(url, {\n method,\n headers,\n ...(hasJson ? { body: JSON.stringify(init.body) } : {}),\n ...(init.rawBody !== undefined ? { body: init.rawBody } : {}),\n ...(signal ? { signal } : {}),\n });\n if (res.ok || accept.has(res.status)) return res;\n if (RETRYABLE.has(res.status) && attempt < retries) {\n await sleep(500 * 2 ** attempt + Math.random() * 250);\n continue;\n }\n throw await this.toError(path, res);\n } catch (err) {\n if (err instanceof CodaiError) throw err;\n lastErr = err;\n // Caller aborts are never retried.\n if (init.signal?.aborted) throw err;\n if (attempt < retries) {\n await sleep(500 * 2 ** attempt);\n continue;\n }\n }\n }\n throw new CodaiError(`codai ${path} failed after retries: ${String(lastErr)}`, 0, null);\n }\n\n async json<T>(path: string, init: RequestOptions = {}): Promise<T> {\n const res = await this.request(path, init);\n return (await res.json()) as T;\n }\n\n /**\n * Open a `text/event-stream` and iterate parsed frames. Frames are\n * `\\n\\n`-separated blocks; each yields `{ event, data }` where `event`\n * defaults to `message` and `data` is the joined `data:` payload (raw\n * string — the caller decides whether it is JSON or `[DONE]`). Comment\n * lines (`: ping`) are skipped. The stream is retried like any request\n * up to the first byte; after that errors propagate.\n */\n async *sse(\n path: string,\n init: RequestOptions = {},\n ): AsyncGenerator<SseFrame, Response, undefined> {\n const res = await this.request(path, {\n ...init,\n timeoutMs: init.timeoutMs ?? 0,\n noRetry: true,\n });\n yield* readSse(res, init.signal);\n return res;\n }\n\n private async toError(path: string, res: Response): Promise<CodaiError> {\n let body: unknown = null;\n try {\n body = await res.json();\n } catch {\n /* non-JSON error body */\n }\n const retryAfterRaw = res.headers.get('retry-after');\n const retryAfter = retryAfterRaw && /^\\d+$/.test(retryAfterRaw) ? Number(retryAfterRaw) : null;\n const message = extractMessage(body);\n return new CodaiError(\n message ? `codai ${path} → ${res.status}: ${message}` : `codai ${path} → ${res.status}`,\n res.status,\n body,\n {\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n retryAfter,\n },\n );\n }\n}\n\nexport interface SseFrame {\n /** `event:` name; `message` when the frame has none (OpenAI-style streams). */\n event: string;\n /** Joined `data:` lines (a multi-line data block is joined with `\\n`). */\n data: string;\n}\n\n/** Parse an SSE body into frames. Exported for the resources and for tests. */\nexport async function* readSse(res: Response, signal?: AbortSignal): AsyncGenerator<SseFrame> {\n const reader = res.body?.getReader();\n if (!reader) throw new CodaiError('no response body', res.status, null);\n const decoder = new TextDecoder();\n let buffer = '';\n const onAbort = () => void reader.cancel().catch(() => {});\n signal?.addEventListener('abort', onAbort, { once: true });\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // Normalise CRLF so both `\\n\\n` and `\\r\\n\\r\\n` delimit frames.\n buffer = buffer.replace(/\\r\\n/g, '\\n');\n const blocks = buffer.split('\\n\\n');\n buffer = blocks.pop() ?? '';\n for (const block of blocks) {\n const frame = parseSseBlock(block);\n if (frame) yield frame;\n }\n }\n const tail = buffer.trim() ? parseSseBlock(buffer) : null;\n if (tail) yield tail;\n } finally {\n signal?.removeEventListener('abort', onAbort);\n reader.releaseLock?.();\n }\n}\n\nfunction parseSseBlock(block: string): SseFrame | null {\n let event = 'message';\n const data: string[] = [];\n for (const line of block.split('\\n')) {\n if (!line || line.startsWith(':')) continue;\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n // `id:` / `retry:` are never emitted by the gateway; ignore anything else.\n }\n if (data.length === 0) return null;\n return { event, data: data.join('\\n') };\n}\n\n/** Parse a frame's data as JSON, returning `null` for `[DONE]` / non-JSON. */\nexport function frameJson<T = unknown>(frame: SseFrame): T | null {\n if (frame.data === '[DONE]') return null;\n try {\n return JSON.parse(frame.data) as T;\n } catch {\n return null;\n }\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n","/** `/v1/account`, `/v1/receipt`, `/v1/feedback`, `/v1/phone/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AccountView = Reply<'getAccount'>;\nexport type AccountPatchRequest = Mutable<Body<'patchAccount'>>;\nexport type AccountPatchResponse = Reply<'patchAccount'>;\nexport type Receipt = Reply<'getReceipt'>;\nexport type FeedbackRequest = Mutable<Body<'submitFeedback'>>;\nexport type FeedbackResponse = Reply<'submitFeedback'>;\nexport type PhoneModel = Schema<'AccountPhoneModel'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Account {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/account` — the full account card. */\n get(opts: CallOpts = {}): Promise<AccountView> {\n return this.http.json<AccountView>('/v1/account', { ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/account` — consents, username, referral (at least one field). */\n update(body: AccountPatchRequest, opts: CallOpts = {}): Promise<AccountPatchResponse> {\n return this.http.json<AccountPatchResponse>('/v1/account', {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Receipts {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `GET /v1/receipt` — spend receipt. `sessionId` wins over `since`; with\n * neither, the last 24 hours.\n */\n get(\n query: { sessionId?: string; since?: string | Date } = {},\n opts: CallOpts = {},\n ): Promise<Receipt> {\n return this.http.json<Receipt>('/v1/receipt', {\n query: {\n session_id: query.sessionId,\n since: query.since instanceof Date ? query.since.toISOString() : query.since,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Feedback {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `POST /v1/feedback` — rate one turn. Exactly one of `event_id`,\n * `session_id`, `client_request_id` must be present.\n */\n submit(body: FeedbackRequest, opts: CallOpts = {}): Promise<FeedbackResponse> {\n return this.http.json<FeedbackResponse>('/v1/feedback', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class PhoneModels {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/phone/models` — on-device model catalog with signed URLs. */\n async list(opts: CallOpts = {}): Promise<PhoneModel[]> {\n const raw = await this.http.json<Reply<'listPhoneModels'>>('/v1/phone/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.models ?? [])];\n }\n}\n","/** `/v1/agents/*` — synchronous runs and the persisted async run lifecycle. */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AgentRunRequest = Mutable<Body<'runAgentSync'>>;\nexport type AgentRunCreateRequest = Mutable<Body<'createAgentRun'>>;\nexport type AgentSyncResult = Reply<'runAgentSync'>;\nexport type AgentRunAccepted = Reply<'createAgentRun', 202>;\nexport type AgentRun = Reply<'getAgentRun'>;\nexport type AgentRunStep = Schema<'AgentRunStep'>;\nexport type AgentRunStats = Reply<'getAgentRunStats'>;\nexport type AgentRunStatus = Schema<'AgentRunStatus'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport interface AgentRunResult {\n result: string;\n model: string;\n /** Usage-event id — exact target for `feedback.submit`. */\n eventId: string | null;\n usage: AgentSyncResult['usage'] | null;\n raw: AgentSyncResult;\n headers: Headers;\n}\n\n/** SSE frames of `GET /v1/agents/runs/{id}/stream`. */\nexport type AgentRunStreamEvent =\n | {\n event: 'step';\n data: {\n seq: number;\n kind: 'plan' | 'tool_call' | 'observation' | 'answer';\n summary: string | null;\n };\n }\n | {\n event: 'done';\n data: {\n status: 'completed' | 'failed' | 'cancelled';\n result: string | null;\n error: string | null;\n step_count: number;\n };\n }\n | { event: 'timeout'; data: Record<string, never> };\n\nexport class AgentRuns {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/agents/runs` — returns 202 with the run id. */\n create(body: AgentRunCreateRequest, opts: CallOpts = {}): Promise<AgentRunAccepted> {\n return this.http.json<AgentRunAccepted>('/v1/agents/runs', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}` */\n get(id: string, opts: CallOpts = {}): Promise<AgentRun> {\n return this.http.json<AgentRun>(`/v1/agents/runs/${encodeURIComponent(id)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}/steps` — newest first. */\n async steps(id: string, opts: CallOpts = {}): Promise<AgentRunStep[]> {\n const raw = await this.http.json<Reply<'listAgentRunSteps'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/steps`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.steps ?? [])];\n }\n\n /** `GET /v1/agents/runs/stats?days=` */\n stats(days?: number, opts: CallOpts = {}): Promise<AgentRunStats> {\n return this.http.json<AgentRunStats>('/v1/agents/runs/stats', {\n query: { days },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/agents/runs/{id}/cancel` */\n cancel(id: string, opts: CallOpts = {}): Promise<Reply<'cancelAgentRun'>> {\n return this.http.json<Reply<'cancelAgentRun'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/cancel`,\n { method: 'POST', body: {}, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/agents/runs/{id}/stream` — async iterator over `step` / `done` /\n * `timeout` events. The iterator ends after `done`; on `timeout` (30 min)\n * it also ends and you may reconnect (full replay from seq 0).\n */\n async *stream(\n id: string,\n opts: CallOpts = {},\n ): AsyncGenerator<AgentRunStreamEvent, void, undefined> {\n const frames = this.http.sse(`/v1/agents/runs/${encodeURIComponent(id)}/stream`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n const ev = { event: frame.event, data } as AgentRunStreamEvent;\n yield ev;\n if (ev.event === 'done' || ev.event === 'timeout') return;\n }\n }\n}\n\nexport class Agents {\n readonly runs: AgentRuns;\n constructor(private readonly http: HttpClient) {\n this.runs = new AgentRuns(http);\n }\n\n /** `POST /v1/agents/run` — blocks until the agent loop finishes. */\n async run(body: AgentRunRequest, opts: CallOpts = {}): Promise<AgentRunResult> {\n const res = await this.http.request('/v1/agents/run', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as AgentSyncResult;\n return {\n result: String(raw.result ?? ''),\n model: String(raw.model ?? ''),\n eventId: raw.event_id ?? res.headers.get('x-codai-event-id'),\n usage: raw.usage ?? null,\n raw,\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/audio/transcriptions` and `POST /v1/audio/speech`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type TranscriptionResponse = Reply<'createTranscription'>;\nexport type SpeechRequest = Mutable<Body<'createSpeech'>>;\n\nexport interface TranscriptionOptions {\n /** Audio file contents (max 25 MB). */\n file: Blob | Uint8Array | ArrayBuffer;\n /** Filename hint (extension drives format detection). Default `audio.webm`. */\n filename?: string;\n /** Default `codai-transcribe`. */\n model?: string;\n /** ISO-639-1 language hint. */\n language?: string;\n /** Text to guide style or spelling. */\n prompt?: string;\n /** `json` (default) or `verbose_json`. */\n responseFormat?: 'json' | 'verbose_json';\n /** Sampling temperature 0–1. */\n temperature?: number;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface TranscriptionResult {\n text: string;\n raw: TranscriptionResponse;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport interface SpeechResult {\n /** Raw audio bytes in the requested format (mp3 by default). */\n audio: ArrayBuffer;\n /** Upstream `content-type` (`audio/mpeg` when the upstream sent none). */\n contentType: string;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport class Audio {\n constructor(private readonly http: HttpClient) {}\n\n /** Speech-to-text (multipart upload; never retried). Returns the transcript (0.2.x shape). */\n async transcribe(opts: TranscriptionOptions): Promise<string> {\n return (await this.transcribeDetailed(opts)).text;\n }\n\n /** Speech-to-text with the raw upstream JSON and routing headers. */\n async transcribeDetailed(opts: TranscriptionOptions): Promise<TranscriptionResult> {\n const form = new FormData();\n const blob = opts.file instanceof Blob ? opts.file : new Blob([opts.file as BlobPart]);\n form.append('file', blob, opts.filename ?? 'audio.webm');\n form.append('model', opts.model ?? 'codai-transcribe');\n if (opts.language) form.append('language', opts.language);\n if (opts.prompt) form.append('prompt', opts.prompt);\n if (opts.responseFormat) form.append('response_format', opts.responseFormat);\n if (opts.temperature !== undefined) form.append('temperature', String(opts.temperature));\n const res = await this.http.request('/v1/audio/transcriptions', {\n method: 'POST',\n rawBody: form,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as TranscriptionResponse;\n return {\n text: typeof raw.text === 'string' ? raw.text : '',\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n /** Text-to-speech. Returns the raw audio bytes (0.2.x shape); see `speechDetailed()` for headers. */\n async speech(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<ArrayBuffer> {\n return (await this.speechDetailed(body, opts)).audio;\n }\n\n /** Text-to-speech with the upstream `content-type` and routing headers. */\n async speechDetailed(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SpeechResult> {\n const res = await this.http.request('/v1/audio/speech', {\n body: { ...body, model: body.model ?? 'codai-tts', voice: body.voice ?? 'alloy' },\n ext: opts.ext,\n signal: opts.signal,\n });\n return {\n audio: await res.arrayBuffer(),\n contentType: res.headers.get('content-type') ?? 'audio/mpeg',\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/chat/completions` — OpenAI-compatible completions (JSON + SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type ChatCompletionRequest = Mutable<Body<'createChatCompletion'>>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type ChatCompletionInput = Omit<ChatCompletionRequest, 'stream' | 'model'> & {\n model?: string;\n};\nexport type ChatCompletionResponse = Reply<'createChatCompletion'>;\nexport type ChatMessage = Mutable<Schema<'ChatMessage'>>;\nexport type ChatTool = Mutable<Schema<'ChatTool'>>;\nexport type ChatToolCall = Mutable<Schema<'ChatToolCall'>>;\nexport type ChatUsage = Schema<'ChatUsage'>;\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n /** Prompt tokens served from the provider cache, when reported. */\n cachedTokens?: number;\n}\n\n/** Per-call options accepted by every chat method. */\nexport interface ChatCallOptions {\n /** `X-Codai-*` extension headers for this call. */\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface ChatResult {\n /** Assistant message content (first choice). */\n content: string;\n /** Tool calls on the first choice (empty if none). */\n toolCalls: ChatToolCall[];\n /** Raw OpenAI-shaped response. */\n raw: ChatCompletionResponse;\n /** Request id (`x-codai-trace-id` / `x-request-id`) — pass to `feedback`. */\n requestId: string | null;\n /** Usage-event id (`x-codai-event-id`) — exact target for `feedback.submit`. */\n eventId: string | null;\n /** Which upstream model actually served (`x-codai-routed-to`). */\n routedTo: string | null;\n /** Verification status for verified-execution responses, if present. */\n execVerify: string | null;\n usage: TokenUsage | null;\n /** Response headers, for the long tail of `x-codai-*` metadata. */\n headers: Headers;\n}\n\n/** Final metadata for a completed stream — resolved via `stream.final`. */\nexport interface ChatStreamResult {\n content: string;\n toolCalls: ChatToolCall[];\n requestId: string | null;\n routedTo: string | null;\n execVerify: string | null;\n usage: TokenUsage | null;\n /** `finish_reason` of the last content chunk, when sent. */\n finishReason: string | null;\n headers: Headers | null;\n}\n\n/**\n * A live chat stream. Async-iterate it for text deltas, then await `.final`\n * for metadata. `.chunks()` yields the raw `chat.completion.chunk` objects.\n */\nexport interface ChatStream extends AsyncIterable<string> {\n readonly final: Promise<ChatStreamResult>;\n chunks(): AsyncIterable<ChatCompletionChunk>;\n}\n\nexport interface ChatCompletionChunk {\n id?: string;\n object?: 'chat.completion.chunk';\n model?: string;\n choices?: Array<{\n index?: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{ index?: number } & Record<string, unknown>>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n };\n [key: string]: unknown;\n}\n\nfunction toUsage(u: ChatCompletionChunk['usage'] | undefined): TokenUsage | null {\n if (!u) return null;\n const cached = u.prompt_tokens_details?.cached_tokens;\n return {\n promptTokens: u.prompt_tokens ?? 0,\n completionTokens: u.completion_tokens ?? 0,\n ...(cached !== undefined ? { cachedTokens: cached } : {}),\n };\n}\n\n/**\n * Merge a streamed tool-call fragment into the accumulator at `index`.\n * OpenAI streams tool calls piecewise: id/name arrive first, then the\n * `arguments` string is appended across many deltas.\n */\nexport function mergeToolCall(\n acc: Map<number, Record<string, unknown>>,\n index: number,\n fragment: Record<string, unknown>,\n): void {\n const existing = acc.get(index) ?? { index };\n for (const [key, val] of Object.entries(fragment)) {\n if (key === 'index') continue;\n if (key === 'function' && val && typeof val === 'object') {\n const fn = (existing.function as Record<string, unknown>) ?? {};\n for (const [fk, fv] of Object.entries(val as Record<string, unknown>)) {\n if (fk === 'arguments') fn.arguments = String(fn.arguments ?? '') + String(fv ?? '');\n else fn[fk] = fv;\n }\n existing.function = fn;\n } else {\n existing[key] = val;\n }\n }\n acc.set(index, existing);\n}\n\nexport class ChatCompletions {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Non-streaming completion. `stream` is forced to `false`; use\n * `stream()` for SSE.\n */\n async create(body: ChatCompletionInput, opts: ChatCallOptions = {}): Promise<ChatResult> {\n const res = await this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as ChatCompletionResponse;\n const first = raw.choices?.[0];\n const usage = raw.usage as ChatCompletionChunk['usage'] | undefined;\n return {\n content: typeof first?.message?.content === 'string' ? first.message.content : '',\n toolCalls: [...((first?.message?.tool_calls ?? []) as ChatToolCall[])],\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n eventId: res.headers.get('x-codai-event-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n execVerify: res.headers.get('x-codai-exec-verify'),\n usage: toUsage(usage),\n headers: res.headers,\n };\n }\n\n /** Streaming completion (`stream: true`). */\n stream(body: ChatCompletionInput, opts: ChatCallOptions = {}): ChatStream {\n const requestPromise = this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: ChatStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<ChatStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {}); // no unhandled-rejection noise when `final` is never awaited\n\n const toolCallsByIndex = new Map<number, Record<string, unknown>>();\n let content = '';\n let usage: TokenUsage | null = null;\n let finishReason: string | null = null;\n let res: Response | null = null;\n\n const buildResult = (): ChatStreamResult => ({\n content,\n toolCalls: [...toolCallsByIndex.values()] as ChatToolCall[],\n requestId: res?.headers.get('x-codai-trace-id') ?? res?.headers.get('x-request-id') ?? null,\n routedTo: res?.headers.get('x-codai-routed-to') ?? null,\n execVerify: res?.headers.get('x-codai-exec-verify') ?? null,\n usage,\n finishReason,\n headers: res?.headers ?? null,\n });\n\n async function* chunks(): AsyncGenerator<ChatCompletionChunk, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n if (frame.data === '[DONE]') break;\n const chunk = frameJson<ChatCompletionChunk>(frame);\n if (!chunk) continue;\n if (chunk.usage) usage = toUsage(chunk.usage);\n const choice = chunk.choices?.[0];\n if (choice?.finish_reason) finishReason = choice.finish_reason;\n const delta = choice?.delta;\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n mergeToolCall(toolCallsByIndex, typeof tc.index === 'number' ? tc.index : 0, tc);\n }\n }\n if (delta?.content) content += delta.content;\n yield chunk;\n }\n resolveFinal(buildResult());\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* text(): AsyncGenerator<string, void, undefined> {\n for await (const chunk of chunks()) {\n const delta = chunk.choices?.[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => text(),\n chunks: () => ({ [Symbol.asyncIterator]: () => chunks() }),\n final,\n };\n }\n}\n\nexport class Chat {\n readonly completions: ChatCompletions;\n constructor(http: HttpClient) {\n this.completions = new ChatCompletions(http);\n }\n}\n","/** `/v1/devices/*` — devices bound to your account + the aggregated dispatch inbox. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Device = Schema<'DeviceListItem'>;\nexport type DevicePatch = Mutable<Body<'updateDevice'>>;\nexport type DevicePatched = Reply<'updateDevice'>;\nexport type DispatchInbox = Reply<'getMyDispatchInbox'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Devices {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/devices` — most recently seen first. */\n async list(opts: CallOpts = {}): Promise<Device[]> {\n const raw = await this.http.json<Reply<'listDevices'>>('/v1/devices', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.devices ?? [])];\n }\n\n /** `PATCH /v1/devices/{id}` — push token and/or capabilities. */\n update(id: string, body: DevicePatch, opts: CallOpts = {}): Promise<DevicePatched> {\n return this.http.json<DevicePatched>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/devices/{id}` */\n delete(id: string, opts: CallOpts = {}): Promise<Reply<'deleteDevice'>> {\n return this.http.json<Reply<'deleteDevice'>>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/devices/me/dispatch?limit=` — pending controls dispatched at the\n * calling device (`x-codai-device` required) across all owned sessions.\n */\n dispatchInbox(query: { limit?: number } = {}, opts: CallOpts = {}): Promise<DispatchInbox> {\n return this.http.json<DispatchInbox>('/v1/devices/me/dispatch', {\n query: { limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `POST /v1/embeddings`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type EmbeddingsRequest = Mutable<Body<'createEmbeddings'>>;\nexport type EmbeddingsResponse = Reply<'createEmbeddings'>;\n\nexport interface EmbeddingsResult {\n /** One vector per input, in order. */\n embeddings: number[][];\n raw: EmbeddingsResponse;\n /** Upstream embedding model that produced the vectors (`x-codai-routed-to`). */\n routedTo: string | null;\n /** `<requested>-><served>` when a different model was substituted; vectors live in another space. */\n fallback: string | null;\n headers: Headers;\n}\n\nexport class Embeddings {\n constructor(private readonly http: HttpClient) {}\n\n async create(\n body: Omit<EmbeddingsRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<EmbeddingsResult> {\n const res = await this.http.request('/v1/embeddings', {\n body: { ...body, model: body.model ?? 'codai-embed' },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as EmbeddingsResponse;\n return {\n embeddings: (raw.data ?? []).map((d) => [...(d.embedding as readonly number[])]),\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n fallback: res.headers.get('x-codai-embed-fallback'),\n headers: res.headers,\n };\n }\n}\n","/** `/v1/environments/*` — cloud / BYO dev environments, their members, ports and secrets. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Environment = Schema<'Environment'>;\nexport type EnvironmentDetail = Schema<'EnvironmentDetail'>;\nexport type EnvironmentState = Schema<'EnvironmentState'>;\nexport type EnvironmentProvider = Schema<'EnvironmentProvider'>;\nexport type EnvironmentRole = Schema<'EnvironmentRole'>;\nexport type EnvironmentTransition = Schema<'EnvironmentTransition'>;\nexport type EnvironmentEnrollToken = Schema<'EnvironmentEnrollToken'>;\nexport type EnvironmentEnrolled = Schema<'EnvironmentEnrolled'>;\nexport type EnvironmentMember = Schema<'EnvironmentMember'>;\nexport type EnvironmentMemberCreated = Schema<'EnvironmentMemberCreated'>;\nexport type EnvironmentPort = Schema<'EnvironmentPort'>;\nexport type EnvironmentSecret = Schema<'EnvironmentSecret'>;\nexport type EnvironmentSecretSet = Schema<'EnvironmentSecretSet'>;\nexport type EnvironmentCreateBody = Mutable<Body<'createEnvironment'>>;\nexport type EnvironmentPatchBody = Mutable<Body<'updateEnvironment'>>;\nexport type EnvironmentEnrollBody = Mutable<Body<'enrollEnvironment'>>;\nexport type EnvironmentAddMemberBody = Mutable<Body<'addEnvironmentMember'>>;\nexport type EnvironmentPortBody = Mutable<Body<'setEnvironmentPort'>>;\nexport type ListEnvironmentsQuery = Mutable<QueryOf<'listEnvironments'>>;\nexport type EnvironmentSshCert = Reply<'issueMyEnvironmentSshCert'>;\nexport type EnvironmentSshCertBody = Mutable<Body<'issueMyEnvironmentSshCert'>>;\nexport type EnvironmentSshCa = Reply<'getEnvironmentSshCa'>;\nexport type EnvironmentTaskList = Reply<'listEnvironmentTasks'>;\nexport type EnvironmentTaskCreateBody = Mutable<Body<'createEnvironmentTask'>>;\nexport type EnvironmentTaskCreated = Reply<'createEnvironmentTask'>;\nexport type EnvironmentTaskDetail = Reply<'getEnvironmentTask'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nconst envPath = (id: string, suffix = ''): string =>\n `/v1/environments/${encodeURIComponent(id)}${suffix}`;\n\nexport class EnvironmentMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/members` — any role. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentMember[]> {\n const raw = await this.http.json<Reply<'listEnvironmentMembers'>>(envPath(envId, '/members'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/environments/{id}/members` — exactly one of `user_id` / `email`. */\n async add(\n envId: string,\n body: EnvironmentAddMemberBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentMemberCreated> {\n const raw = await this.http.json<Reply<'addEnvironmentMember', 201>>(\n envPath(envId, '/members'),\n { body, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `PUT /v1/environments/{id}/members/me/ssh-key` — one `authorized_keys` line. */\n setSshKey(\n envId: string,\n publicKey: string,\n opts: CallOpts = {},\n ): Promise<Reply<'setMyEnvironmentSshKey'>> {\n const body: Mutable<Body<'setMyEnvironmentSshKey'>> = { public_key: publicKey };\n return this.http.json<Reply<'setMyEnvironmentSshKey'>>(envPath(envId, '/members/me/ssh-key'), {\n method: 'PUT',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}/members/{userId}` — 409 `last_owner` on demoting the last owner. */\n async setRole(\n envId: string,\n userId: string,\n role: EnvironmentRole,\n opts: CallOpts = {},\n ): Promise<Reply<'setEnvironmentMemberRole'>['member']> {\n const raw = await this.http.json<Reply<'setEnvironmentMemberRole'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'PATCH', body: { role }, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `DELETE /v1/environments/{id}/members/{userId}` — pass your own id to leave. */\n remove(\n envId: string,\n userId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentMember'>> {\n return this.http.json<Reply<'removeEnvironmentMember'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `POST /v1/environments/{id}/members/me/ssh-cert` — 12 h OpenSSH user certificate for your key. */\n sshCert(envId: string, body: EnvironmentSshCertBody, opts: CallOpts = {}): Promise<EnvironmentSshCert> {\n return this.http.json<EnvironmentSshCert>(envPath(envId, '/members/me/ssh-cert'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n}\n\n/** `/v1/environments/{id}/tasks` — fire-and-forget agent tasks run in the environment. */\nexport class EnvironmentTasks {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/tasks` */\n list(envId: string, opts: CallOpts = {}): Promise<EnvironmentTaskList> {\n return this.http.json<EnvironmentTaskList>(envPath(envId, '/tasks'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/environments/{id}/tasks` — queued; you get a notification when it finishes. */\n create(envId: string, body: EnvironmentTaskCreateBody, opts: CallOpts = {}): Promise<EnvironmentTaskCreated> {\n return this.http.json<EnvironmentTaskCreated>(envPath(envId, '/tasks'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}/tasks/{taskId}` */\n get(envId: string, taskId: string, opts: CallOpts = {}): Promise<EnvironmentTaskDetail> {\n return this.http.json<EnvironmentTaskDetail>(envPath(envId, `/tasks/${encodeURIComponent(taskId)}`), { ext: opts.ext, signal: opts.signal });\n }\n}\n\nexport class EnvironmentPorts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/ports` — published (forwarded) ports. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentPort[]> {\n const raw = await this.http.json<Reply<'listEnvironmentPorts'>>(envPath(envId, '/ports'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.ports ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/ports/{port}` — publish or change visibility (upsert). */\n async set(\n envId: string,\n port: number,\n body: EnvironmentPortBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentPort> {\n const raw = await this.http.json<Reply<'setEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.port;\n }\n\n /** `DELETE /v1/environments/{id}/ports/{port}` — unpublish. */\n remove(\n envId: string,\n port: number,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentPort'>> {\n return this.http.json<Reply<'removeEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class EnvironmentSecrets {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/secrets` — names and timestamps only, never values. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentSecret[]> {\n const raw = await this.http.json<Reply<'listEnvironmentSecrets'>>(envPath(envId, '/secrets'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.secrets ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/secrets/{name}` — upsert; `name` is `ENV_STYLE`. */\n set(\n envId: string,\n name: string,\n value: string,\n opts: CallOpts = {},\n ): Promise<EnvironmentSecretSet> {\n const body: Mutable<Body<'setEnvironmentSecret'>> = { value };\n return this.http.json<EnvironmentSecretSet>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/environments/{id}/secrets/{name}` */\n remove(\n envId: string,\n name: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentSecret'>> {\n return this.http.json<Reply<'removeEnvironmentSecret'>>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Environments {\n readonly members: EnvironmentMembers;\n readonly ports: EnvironmentPorts;\n readonly secrets: EnvironmentSecrets;\n readonly tasks: EnvironmentTasks;\n\n constructor(private readonly http: HttpClient) {\n this.members = new EnvironmentMembers(http);\n this.ports = new EnvironmentPorts(http);\n this.secrets = new EnvironmentSecrets(http);\n this.tasks = new EnvironmentTasks(http);\n }\n\n /** `GET /v1/environments/{id}/ssh-ca` — CA public keys to trust (`@cert-authority` lines). */\n sshCa(envId: string, opts: CallOpts = {}): Promise<EnvironmentSshCa> {\n return this.http.json<EnvironmentSshCa>(envPath(envId, '/ssh-ca'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/environments?project_id=&for_user_id=me` — newest first, every state. */\n async list(query: ListEnvironmentsQuery = {}, opts: CallOpts = {}): Promise<Environment[]> {\n const raw = await this.http.json<Reply<'listEnvironments'>>('/v1/environments', {\n query: { project_id: query.project_id, for_user_id: query.for_user_id },\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.environments ?? [])];\n }\n\n /**\n * `POST /v1/environments` — `byo` starts `pending`; managed providers start\n * `creating`. 409 `already_has_env` in a `vm_per_dev` project (the error\n * body carries the `environment_id` to reuse).\n */\n async create(body: EnvironmentCreateBody, opts: CallOpts = {}): Promise<Environment> {\n const raw = await this.http.json<Reply<'createEnvironment', 201>>('/v1/environments', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n return raw.environment;\n }\n\n /**\n * `POST /v1/environments/enroll` — daemon side. The one-time `codai_env_…`\n * token in the body is the only credential; the client's API key header is\n * ignored by this route. Managed environments additionally receive a\n * freshly minted `api_key`, returned exactly once.\n */\n enroll(body: EnvironmentEnrollBody, opts: CallOpts = {}): Promise<EnvironmentEnrolled> {\n return this.http.json<EnvironmentEnrolled>('/v1/environments/enroll', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n // The token is consumed on success; a retried POST would 401.\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}` — environment, your role, members, ports, recent events. */\n get(envId: string, opts: CallOpts = {}): Promise<EnvironmentDetail> {\n return this.http.json<EnvironmentDetail>(envPath(envId), {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}` — `name` and/or `idle_timeout_minutes` (5..1440). */\n async update(\n envId: string,\n body: EnvironmentPatchBody,\n opts: CallOpts = {},\n ): Promise<Environment> {\n const raw = await this.http.json<Reply<'updateEnvironment'>>(envPath(envId), {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.environment;\n }\n\n /** `POST /v1/environments/{id}/start` — managed providers only (`stopped` → `starting`). */\n start(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'start', opts);\n }\n\n /** `POST /v1/environments/{id}/stop` — managed providers only (`running` → `stopping`). */\n stop(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'stop', opts);\n }\n\n /** `POST /v1/environments/{id}/archive` — keeps history, releases the machine. */\n archive(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'archive', opts);\n }\n\n /** `POST /v1/environments/{id}/destroy` — owner only; terminal. */\n destroy(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'destroy', opts);\n }\n\n /**\n * `POST /v1/environments/{id}/enroll-token` — `byo` only; a 30-minute\n * one-time token for `enroll()`. Minting again replaces the previous one.\n */\n enrollToken(envId: string, opts: CallOpts = {}): Promise<EnvironmentEnrollToken> {\n return this.http.json<EnvironmentEnrollToken>(envPath(envId, '/enroll-token'), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n private transition(\n envId: string,\n action: 'start' | 'stop' | 'archive' | 'destroy',\n opts: CallOpts,\n ): Promise<EnvironmentTransition> {\n return this.http.json<EnvironmentTransition>(envPath(envId, `/${action}`), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** Unauthenticated probes at the root: `/health`, `/health/ready`, `/status`. */\nimport { type HttpClient } from '../http';\nimport { type Reply } from './_shared';\n\nexport type HealthResponse = Reply<'getHealth'>;\nexport type HealthReadyResponse = Reply<'getHealthReady'>;\nexport type StatusResponse = Reply<'getStatus'>;\n\nexport class Health {\n constructor(private readonly http: HttpClient) {}\n\n /** Liveness probe. */\n get(opts: { signal?: AbortSignal } = {}): Promise<HealthResponse> {\n return this.http.json<HealthResponse>('/health', { signal: opts.signal, noRetry: true });\n }\n\n /**\n * Deep readiness probe. A 503 is returned as `{ ok: false, ... }` rather\n * than thrown, so callers can read the failing check.\n */\n async ready(\n opts: { signal?: AbortSignal } = {},\n ): Promise<HealthReadyResponse & { httpStatus: number }> {\n const res = await this.http.request('/health/ready', {\n signal: opts.signal,\n noRetry: true,\n acceptStatus: [503],\n });\n const body = (await res.json()) as HealthReadyResponse;\n return { ...body, httpStatus: res.status };\n }\n\n /** Registry snapshot (aliases + provider health). */\n status(opts: { signal?: AbortSignal } = {}): Promise<StatusResponse> {\n return this.http.json<StatusResponse>('/status', { signal: opts.signal, noRetry: true });\n }\n}\n","/** `/v1/hosts/*` — host relay (desktop announces itself; clients exec ops on it). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type HostPresence = Schema<'HostPresence'>;\nexport type HostOp = Schema<'HostOp'>;\nexport type HostExecBody = Mutable<Body<'execOnHost'>>;\nexport type HostExecResponse = Reply<'execOnHost'>;\nexport type HostExecRequest = Schema<'HostExecRequest'>;\nexport type HostExecResultBody = Mutable<Body<'postHostExecResult'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\n/** Frames of `GET /v1/hosts/stream`. */\nexport type HostStreamEvent =\n | { event: 'hello'; data: { device_id: string; heartbeat_ms: number } }\n | { event: 'ping'; data: { t: number } }\n | { event: 'exec'; data: HostExecRequest }\n | { event: string; data: Record<string, unknown> };\n\nexport class Hosts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/hosts` — your devices currently connected as hosts. */\n async list(opts: CallOpts = {}): Promise<HostPresence[]> {\n const raw = await this.http.json<Reply<'listHosts'>>('/v1/hosts', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.hosts ?? [])];\n }\n\n /**\n * `POST /v1/hosts/{deviceId}/exec` — run one op on a connected host and\n * block until it answers (or `timeout_ms`, default 60 s).\n */\n exec(\n deviceId: string,\n op: HostOp,\n args: Record<string, unknown> = {},\n extra: { timeoutMs?: number; label?: string } & CallOpts = {},\n ): Promise<HostExecResponse> {\n const body: HostExecBody = {\n op,\n args,\n ...(extra.timeoutMs !== undefined ? { timeout_ms: extra.timeoutMs } : {}),\n ...(extra.label !== undefined ? { label: extra.label } : {}),\n };\n return this.http.json<HostExecResponse>(`/v1/hosts/${encodeURIComponent(deviceId)}/exec`, {\n body,\n ext: extra.ext,\n signal: extra.signal,\n // The gateway itself waits up to timeout_ms + 2 s; give the HTTP layer headroom.\n timeoutMs: (extra.timeoutMs ?? 60_000) + 10_000,\n noRetry: true,\n });\n }\n\n /** `POST /v1/hosts/exec/{reqId}/result` — host side: deliver an exec result. */\n postResult(\n reqId: string,\n body: HostExecResultBody,\n opts: CallOpts = {},\n ): Promise<Reply<'postHostExecResult'>> {\n return this.http.json<Reply<'postHostExecResult'>>(\n `/v1/hosts/exec/${encodeURIComponent(reqId)}/result`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/hosts/stream?os=&hostname=&roots=` — host side: announce this\n * device and receive `hello` / `ping` / `exec` events. Closed by the server\n * after 6 h; reconnect to re-announce presence.\n */\n async *stream(\n query: { os?: string; hostname?: string; roots?: string[] } = {},\n opts: CallOpts = {},\n ): AsyncGenerator<HostStreamEvent, void, undefined> {\n const frames = this.http.sse('/v1/hosts/stream', {\n query: {\n os: query.os,\n hostname: query.hostname,\n roots: query.roots?.length ? query.roots.join(',') : undefined,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n yield { event: frame.event, data } as HostStreamEvent;\n }\n }\n}\n","/** `POST /v1/messages` — Anthropic Messages wire (JSON + named-event SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type MessageRequest = Mutable<Body<'createMessage'>>;\nexport type MessageResponse = Reply<'createMessage'>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type MessageInput = Omit<MessageRequest, 'stream' | 'model'> & { model?: string };\n\nexport interface MessageCallOptions {\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface MessageResult {\n /** Concatenated `text` blocks of the reply. */\n text: string;\n raw: MessageResponse;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers;\n}\n\n/** One Anthropic streaming event: `event.type` mirrors the SSE `event:` name. */\nexport interface MessageStreamEvent {\n type:\n | 'message_start'\n | 'content_block_start'\n | 'content_block_delta'\n | 'content_block_stop'\n | 'message_delta'\n | 'message_stop'\n | 'ping'\n | 'error'\n | (string & {});\n [key: string]: unknown;\n}\n\nexport interface MessageStreamResult {\n /** Concatenated `text_delta` payloads. */\n text: string;\n /** Final `stop_reason` from `message_delta`, when sent. */\n stopReason: string | null;\n /** Cumulative usage: `input_tokens` from `message_start`, `output_tokens` from `message_delta`. */\n usage: { inputTokens: number; outputTokens: number } | null;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers | null;\n}\n\nexport interface MessageStream extends AsyncIterable<MessageStreamEvent> {\n readonly final: Promise<MessageStreamResult>;\n /** Text deltas only. */\n text(): AsyncIterable<string>;\n}\n\nexport class Messages {\n constructor(private readonly http: HttpClient) {}\n\n async create(body: MessageInput, opts: MessageCallOptions = {}): Promise<MessageResult> {\n const res = await this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as MessageResponse;\n const text = (raw.content ?? [])\n .map((b) => (b.type === 'text' && typeof b.text === 'string' ? b.text : ''))\n .join('');\n return {\n text,\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n stream(body: MessageInput, opts: MessageCallOptions = {}): MessageStream {\n const requestPromise = this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: MessageStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<MessageStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {});\n\n let text = '';\n let stopReason: string | null = null;\n let inputTokens: number | null = null;\n let outputTokens: number | null = null;\n let res: Response | null = null;\n\n async function* events(): AsyncGenerator<MessageStreamEvent, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n const ev = frameJson<MessageStreamEvent>(frame);\n if (!ev) continue;\n if (typeof ev.type !== 'string') ev.type = frame.event;\n if (ev.type === 'message_start') {\n const usage = (ev.message as { usage?: { input_tokens?: number } } | undefined)?.usage;\n if (usage?.input_tokens !== undefined) inputTokens = usage.input_tokens;\n } else if (ev.type === 'content_block_delta') {\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && typeof delta.text === 'string') text += delta.text;\n } else if (ev.type === 'message_delta') {\n const delta = ev.delta as { stop_reason?: string | null } | undefined;\n if (delta?.stop_reason) stopReason = delta.stop_reason;\n const usage = ev.usage as { output_tokens?: number } | undefined;\n if (usage?.output_tokens !== undefined) outputTokens = usage.output_tokens;\n }\n yield ev;\n if (ev.type === 'message_stop') break;\n }\n resolveFinal({\n text,\n stopReason,\n usage:\n inputTokens !== null || outputTokens !== null\n ? { inputTokens: inputTokens ?? 0, outputTokens: outputTokens ?? 0 }\n : null,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id') ?? null,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n });\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* textOnly(): AsyncGenerator<string, void, undefined> {\n for await (const ev of events()) {\n if (ev.type !== 'content_block_delta') continue;\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && delta.text) yield delta.text;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => events(),\n text: () => ({ [Symbol.asyncIterator]: () => textOnly() }),\n final,\n };\n }\n}\n","/** `GET /v1/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Reply, type Schema } from './_shared';\n\nexport type Model = Schema<'CoreModel'>;\nexport type ModelList = Reply<'listModels'>;\n\nexport class Models {\n constructor(private readonly http: HttpClient) {}\n\n /** Every model the calling key may address (OpenAI list shape, `data[]`). */\n async list(opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {}): Promise<Model[]> {\n const raw = await this.http.json<ModelList>('/v1/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.data ?? [])];\n }\n}\n","/** `/v1/orgs/*` — the orgs (teams) you belong to and their members. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Org = Schema<'OrgWithRole'>;\nexport type OrgMember = Schema<'OrgMember'>;\nexport type OrgRole = Schema<'OrgRole'>;\nexport type OrgAddMemberBody = Mutable<Body<'addOrgMember'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class OrgMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/orgs/{id}/members` */\n async list(orgId: string, opts: CallOpts = {}): Promise<OrgMember[]> {\n const raw = await this.http.json<Reply<'listOrgMembers'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/orgs/{id}/members` — add or re-role (owner/admin). */\n add(\n orgId: string,\n body: OrgAddMemberBody,\n opts: CallOpts = {},\n ): Promise<Reply<'addOrgMember', 201>> {\n return this.http.json<Reply<'addOrgMember', 201>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/orgs/{id}/members/{userId}` */\n remove(orgId: string, userId: string, opts: CallOpts = {}): Promise<Reply<'removeOrgMember'>> {\n return this.http.json<Reply<'removeOrgMember'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members/${encodeURIComponent(userId)}`,\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Orgs {\n readonly members: OrgMembers;\n constructor(private readonly http: HttpClient) {\n this.members = new OrgMembers(http);\n }\n\n /** `POST /v1/orgs` */\n create(name: string, opts: CallOpts = {}): Promise<Org> {\n return this.http.json<Org>('/v1/orgs', { body: { name }, ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/orgs` */\n async list(opts: CallOpts = {}): Promise<Org[]> {\n const raw = await this.http.json<Reply<'listOrgs'>>('/v1/orgs', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.orgs ?? [])];\n }\n}\n","/** `/v1/projects/*` — projects (a repo + isolation policy) that group environments. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Project = Schema<'Project'>;\nexport type ProjectIsolation = Schema<'ProjectIsolation'>;\nexport type ProjectCreateBody = Mutable<Body<'createProject'>>;\nexport type ProjectPatchBody = Mutable<Body<'updateProject'>>;\nexport type ProjectDetail = Reply<'getProject'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Projects {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/projects` — projects you own plus those of your orgs, newest first. */\n async list(opts: CallOpts = {}): Promise<Project[]> {\n const raw = await this.http.json<Reply<'listProjects'>>('/v1/projects', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.projects ?? [])];\n }\n\n /** `POST /v1/projects` — 409 `slug_taken` when the slug is already yours. */\n async create(body: ProjectCreateBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'createProject', 201>>('/v1/projects', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.project;\n }\n\n /** `GET /v1/projects/{id}` — the project plus every environment in it. */\n get(projectId: string, opts: CallOpts = {}): Promise<ProjectDetail> {\n return this.http.json<ProjectDetail>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/projects/{id}` — owner or org owner/admin; the slug cannot change. */\n async update(projectId: string, body: ProjectPatchBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'updateProject'>>(\n `/v1/projects/${encodeURIComponent(projectId)}`,\n { method: 'PATCH', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.project;\n }\n\n /** `DELETE /v1/projects/{id}` — 409 `project_has_environments` until all are destroyed. */\n delete(projectId: string, opts: CallOpts = {}): Promise<Reply<'deleteProject'>> {\n return this.http.json<Reply<'deleteProject'>>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/**\n * codai Resolve — execution-verified bug fixes, no fix no fee\n * (`https://resolve.codai.ro`, spec `apps/docs/openapi/en/resolve.yaml`).\n *\n * Resolve is a separate service from the gateway: it has its own host and a\n * flat `{ error: string }` error shape, so it gets its own `HttpClient` and\n * maps failures to `ResolveError` / `ResolveInsufficientFundsError`.\n */\nimport type { components } from '../generated/resolve';\nimport { CodaiError, type HttpClient, type RequestOptions } from '../http';\nimport { type Mutable } from './_shared';\n\ntype ResolveSchemas = components['schemas'];\n\nexport type ResolveIntake = Mutable<ResolveSchemas['ResolveIntake']>;\nexport type ResolveQuote = ResolveSchemas['ResolveQuote'];\nexport type ResolveDeclined = ResolveSchemas['ResolveDeclined'];\n/** `submit()` result: `201` quote / free-tier auto-accept, or `200` decline. */\nexport type ResolveSubmitResult = ResolveQuote | ResolveDeclined;\nexport type ResolveAccepted = ResolveSchemas['ResolveAccepted'];\nexport type ResolveJob = ResolveSchemas['ResolveJob'];\nexport type ResolveJobStatus = ResolveSchemas['ResolveJobStatus'];\nexport type ResolveTier = ResolveSchemas['ResolveTier'];\nexport type ResolveAttestation = ResolveSchemas['ResolveAttestation'];\nexport type ResolveReproTest = ResolveSchemas['ResolveReproTest'];\nexport type ResolveHealth = ResolveSchemas['ResolveHealth'];\nexport type ResolveValidationDetails = ResolveSchemas['ResolveValidationDetails'];\nexport type ResolveInsufficientFunds = ResolveSchemas['ResolveInsufficientFunds'];\n\n/** Statuses after which a job never changes again. */\nexport const RESOLVE_TERMINAL_STATUSES: ReadonlySet<ResolveJobStatus> = new Set<ResolveJobStatus>([\n 'resolved',\n 'failed',\n 'declined',\n 'error',\n]);\n\n/** Any non-2xx answer from the Resolve service (flat `{ error }` body). */\nexport class ResolveError extends CodaiError {\n /** The `error` field of the body: a message, or Zod `flatten()` details on a 400. */\n readonly detail: string | ResolveValidationDetails | null;\n\n constructor(\n message: string,\n status: number,\n body: unknown,\n meta: { requestId?: string | null; retryAfter?: number | null } = {},\n ) {\n super(message, status, body, meta);\n this.name = 'ResolveError';\n this.detail = extractDetail(body);\n }\n}\n\n/** `402` on `accept()` — the wallet cannot hold the quote; the job stays `quoted`. */\nexport class ResolveInsufficientFundsError extends ResolveError {\n /** Wallet balance, in `currency` units (EUR micros). */\n readonly balance: number;\n /** Amount the hold needs, in `currency` units (EUR micros). */\n readonly required: number;\n readonly currency: 'micro_eur';\n /** pay.codai.ro checkout link for the shortfall — open it, then retry `accept()`. */\n readonly topupUrl: string;\n\n constructor(\n message: string,\n body: ResolveInsufficientFunds,\n meta: { requestId?: string | null } = {},\n ) {\n super(message, 402, body, meta);\n this.name = 'ResolveInsufficientFundsError';\n this.balance = body.balance;\n this.required = body.required;\n this.currency = body.currency;\n this.topupUrl = body.topup_url;\n }\n}\n\nexport interface ResolveWaitOptions {\n /** Poll interval (ms). Default 5_000. */\n intervalMs?: number;\n /** Give up after this long (ms); throws `ResolveError` (status 0, body = last job). Default 1_800_000. */\n timeoutMs?: number;\n /** Stop when the job reaches one of these. Default `RESOLVE_TERMINAL_STATUSES`. */\n until?: Iterable<ResolveJobStatus>;\n signal?: AbortSignal;\n /** Called with every polled job (progress UIs). */\n onPoll?: (job: ResolveJob) => void;\n}\n\ntype CallOpts = { signal?: AbortSignal };\n\nexport class Resolve {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `POST /v1/resolve/jobs` — submit a public GitHub repo + issue for triage.\n * Returns a quote (`status: 'quoted'`), a free-tier auto-accept\n * (`status: 'accepted'`) or a decline (`status: 'declined'`). Never retried:\n * a retry could create a second job.\n */\n submit(body: ResolveIntake, opts: CallOpts = {}): Promise<ResolveSubmitResult> {\n if (!body.issue_url && !body.issue_text)\n throw new TypeError('resolve.submit: one of issue_url or issue_text is required');\n return this.call<ResolveSubmitResult>('/v1/resolve/jobs', {\n method: 'POST',\n body,\n noRetry: true,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/resolve/jobs/{id}` — status, quote, reasons, cost and attestation pointer. */\n get(id: string, opts: CallOpts = {}): Promise<ResolveJob> {\n return this.call<ResolveJob>(`/v1/resolve/jobs/${encodeURIComponent(id)}`, {\n signal: opts.signal,\n });\n }\n\n /**\n * `POST /v1/resolve/jobs/{id}/accept` — accept a paid quote and start the job.\n * Throws `ResolveInsufficientFundsError` (402, carries `topupUrl`) when the\n * wallet is short, `ResolveError` 409 when the job is not `quoted`.\n */\n accept(id: string, opts: CallOpts = {}): Promise<ResolveAccepted> {\n return this.call<ResolveAccepted>(`/v1/resolve/jobs/${encodeURIComponent(id)}/accept`, {\n method: 'POST',\n rawBody: '', // no body — sent with content-length: 0\n noRetry: true,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/resolve/attestations/{id}` — public execution proof (no auth needed\n * server-side). Accepts the attestation id or the job's `attestation_url`.\n */\n attestation(idOrUrl: string, opts: CallOpts = {}): Promise<ResolveAttestation> {\n const id = idOrUrl.replace(/^.*\\/v1\\/resolve\\/attestations\\//, '');\n return this.call<ResolveAttestation>(`/v1/resolve/attestations/${encodeURIComponent(id)}`, {\n signal: opts.signal,\n });\n }\n\n /** `GET /health` — liveness of the Resolve service. */\n health(opts: CallOpts = {}): Promise<ResolveHealth> {\n return this.call<ResolveHealth>('/health', { signal: opts.signal });\n }\n\n /**\n * Poll `get(id)` until the job reaches a terminal status (`resolved`,\n * `failed`, `declined`, `error`) or one of `opts.until`. A `quoted` job\n * does not move until you `accept()` it.\n */\n async waitFor(id: string, opts: ResolveWaitOptions = {}): Promise<ResolveJob> {\n const intervalMs = opts.intervalMs ?? 5_000;\n const timeoutMs = opts.timeoutMs ?? 1_800_000;\n const until = new Set(opts.until ?? RESOLVE_TERMINAL_STATUSES);\n const deadline = Date.now() + timeoutMs;\n for (;;) {\n const job = await this.get(id, { signal: opts.signal });\n opts.onPoll?.(job);\n if (until.has(job.status)) return job;\n const left = deadline - Date.now();\n if (left <= 0)\n throw new ResolveError(\n `codai-resolve job ${id} still ${job.status} after ${timeoutMs} ms`,\n 0,\n job,\n );\n await abortableSleep(Math.min(intervalMs, left), opts.signal);\n }\n }\n\n private async call<T>(path: string, init: RequestOptions): Promise<T> {\n try {\n return await this.http.json<T>(path, init);\n } catch (err) {\n throw toResolveError(path, err);\n }\n }\n}\n\nfunction extractDetail(body: unknown): string | ResolveValidationDetails | null {\n if (body && typeof body === 'object' && 'error' in body) {\n const e = (body as { error: unknown }).error;\n if (typeof e === 'string') return e;\n if (e && typeof e === 'object') return e as ResolveValidationDetails;\n }\n return null;\n}\n\nfunction isInsufficientFunds(body: unknown): body is ResolveInsufficientFunds {\n return (\n !!body &&\n typeof body === 'object' &&\n (body as { error?: unknown }).error === 'insufficient_funds' &&\n typeof (body as { topup_url?: unknown }).topup_url === 'string'\n );\n}\n\n/** Re-type a `CodaiError` from the shared HTTP layer into the Resolve hierarchy. */\nfunction toResolveError(path: string, err: unknown): unknown {\n if (!(err instanceof CodaiError) || err instanceof ResolveError) return err;\n if (err.status === 0) return err; // network/timeout — nothing Resolve-specific\n const meta = { requestId: err.requestId, retryAfter: err.retryAfter };\n if (err.status === 402 && isInsufficientFunds(err.body)) {\n const b = err.body;\n return new ResolveInsufficientFundsError(\n `codai-resolve ${path} → 402: insufficient funds (balance ${b.balance}, required ${b.required} ${b.currency}); top up at ${b.topup_url}`,\n b,\n meta,\n );\n }\n const detail = extractDetail(err.body);\n const text =\n detail === null ? '' : `: ${typeof detail === 'string' ? detail : JSON.stringify(detail)}`;\n return new ResolveError(\n `codai-resolve ${path} → ${err.status}${text}`,\n err.status,\n err.body,\n meta,\n );\n}\n\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason);\n const onAbort = () => {\n clearTimeout(t);\n reject(signal?.reason);\n };\n const t = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/** `POST /v1/responses` — OpenAI Responses API compatibility (JSON + named-event SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type ResponsesRequest = Mutable<Body<'createResponse'>>;\nexport type ResponsesResponse = Reply<'createResponse'>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type ResponsesInput = Omit<ResponsesRequest, 'stream' | 'model'> & { model?: string };\n\nexport interface ResponsesCallOptions {\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface ResponsesResult {\n /** `output_text` of the response. */\n outputText: string;\n raw: ResponsesResponse;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers;\n}\n\n/** One Responses streaming event; `type` mirrors the SSE `event:` name. */\nexport interface ResponsesStreamEvent {\n type:\n | 'response.created'\n | 'response.output_text.delta'\n | 'response.output_item.done'\n | 'response.output_text.done'\n | 'response.completed'\n | (string & {});\n sequence_number?: number;\n [key: string]: unknown;\n}\n\nexport interface ResponsesStreamResult {\n outputText: string;\n /** The full `response` object from `response.completed`, when received. */\n response: ResponsesResponse | null;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers | null;\n}\n\nexport interface ResponsesStream extends AsyncIterable<ResponsesStreamEvent> {\n readonly final: Promise<ResponsesStreamResult>;\n /** Text deltas only. */\n text(): AsyncIterable<string>;\n}\n\nexport class Responses {\n constructor(private readonly http: HttpClient) {}\n\n async create(body: ResponsesInput, opts: ResponsesCallOptions = {}): Promise<ResponsesResult> {\n const res = await this.http.request('/v1/responses', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as ResponsesResponse;\n return {\n outputText: typeof raw.output_text === 'string' ? raw.output_text : '',\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n stream(body: ResponsesInput, opts: ResponsesCallOptions = {}): ResponsesStream {\n const requestPromise = this.http.request('/v1/responses', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: ResponsesStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<ResponsesStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {});\n\n let outputText = '';\n let response: ResponsesResponse | null = null;\n let res: Response | null = null;\n\n async function* events(): AsyncGenerator<ResponsesStreamEvent, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n const ev = frameJson<ResponsesStreamEvent>(frame);\n if (!ev) continue;\n if (typeof ev.type !== 'string') ev.type = frame.event;\n if (ev.type === 'response.output_text.delta' && typeof ev.delta === 'string') {\n outputText += ev.delta;\n } else if (ev.type === 'response.completed' && ev.response) {\n response = ev.response as ResponsesResponse;\n }\n yield ev;\n if (ev.type === 'response.completed') break;\n }\n resolveFinal({\n outputText,\n response,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id') ?? null,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n });\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* textOnly(): AsyncGenerator<string, void, undefined> {\n for await (const ev of events()) {\n if (ev.type === 'response.output_text.delta' && typeof ev.delta === 'string')\n yield ev.delta;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => events(),\n text: () => ({ [Symbol.asyncIterator]: () => textOnly() }),\n final,\n };\n }\n}\n","/**\n * `/v1/sessions/*` — shared-sessions protocol v2 (events, controls, lease,\n * dispatch, SSE stream) plus the per-session shares under `/shares`.\n *\n * Every call needs the `x-codai-device` header: set it once via\n * `new Codai({ device: '<uuid>' })` or per call through `ext.device`.\n */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Session = Schema<'Session'>;\nexport type SessionListItem = Schema<'SessionListItem'>;\nexport type SessionDetail = Reply<'getSession'>;\nexport type SessionCreateRequest = Mutable<Body<'createSession'>>;\nexport type SessionPatchRequest = Mutable<Body<'updateSession'>>;\nexport type SessionEvent = Schema<'SessionEvent'>;\nexport type SessionIncomingEvent = Mutable<Schema<'SessionIncomingEvent'>>;\nexport type SessionEventsAppendRequest = Mutable<Body<'appendSessionEvents'>>;\nexport type SessionEventsAppendResponse = Reply<'appendSessionEvents'>;\nexport type SessionEventsPage = Reply<'listSessionEvents'>;\nexport type SessionControl = Schema<'SessionControl'>;\nexport type SessionControlRequest = Mutable<Body<'submitSessionControl'>>;\nexport type SessionControlAccepted = Reply<'submitSessionControl', 202>;\nexport type SessionDispatchRequest = Mutable<Body<'dispatchToDevice'>>;\nexport type SessionDispatchResponse = Reply<'dispatchToDevice', 202>;\nexport type SessionLeaseClaimRequest = Mutable<Body<'claimSessionLease'>>;\nexport type SessionLeaseResponse = Reply<'claimSessionLease'>;\nexport type SessionShare = Schema<'OrgSessionShare'>;\nexport type SessionShareCreateRequest = Mutable<Body<'createSessionShare'>>;\nexport type SessionShareCreated = Reply<'createSessionShare', 201>;\nexport type SharedSession = Schema<'OrgSharedSession'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\n/** Frames of `GET /v1/sessions/{id}/stream`; every payload carries `v: 1`. */\nexport type SessionStreamEvent =\n | { event: 'event'; data: { v: 1; seq: number } & Record<string, unknown> }\n | {\n event: 'control';\n data: { v: 1; id: string; kind: string; seq: number | null; applied: boolean } & Record<\n string,\n unknown\n >;\n }\n | { event: 'lease'; data: { v: 1; holder_device_id: string | null; expires_at: string | null } }\n | {\n event: 'presence';\n data: {\n v: 1;\n device_id: string;\n user_id: string;\n role: string;\n executor: boolean;\n last_seen: string;\n driving: boolean;\n online: boolean;\n };\n }\n | { event: string; data: Record<string, unknown> };\n\nconst enc = encodeURIComponent;\n\nexport class SessionLease {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/sessions/{id}/lease` — CAS claim; `force: true` takes over a live lease. */\n acquire(\n sessionId: string,\n body: SessionLeaseClaimRequest = {},\n opts: CallOpts = {},\n ): Promise<SessionLeaseResponse> {\n return this.http.json<SessionLeaseResponse>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PUT /v1/sessions/{id}/lease` — heartbeat every 10 s (TTL 30 s). */\n renew(sessionId: string, opts: CallOpts = {}): Promise<SessionLeaseResponse> {\n return this.http.json<SessionLeaseResponse>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'PUT',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}/lease` */\n release(sessionId: string, opts: CallOpts = {}): Promise<Reply<'releaseSessionLease'>> {\n return this.http.json<Reply<'releaseSessionLease'>>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class SessionEvents {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/events?after=&limit=` */\n list(\n sessionId: string,\n query: Mutable<QueryOf<'listSessionEvents'>> = {},\n opts: CallOpts = {},\n ): Promise<SessionEventsPage> {\n return this.http.json<SessionEventsPage>(`/v1/sessions/${enc(sessionId)}/events`, {\n query: { after: query.after, limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/events` — executor only (needs the live lease). */\n append(\n sessionId: string,\n body: SessionEventsAppendRequest,\n opts: CallOpts = {},\n ): Promise<SessionEventsAppendResponse> {\n return this.http.json<SessionEventsAppendResponse>(`/v1/sessions/${enc(sessionId)}/events`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class SessionControls {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/controls?applied=&target=` — drain the control queue. */\n async list(\n sessionId: string,\n query: { applied?: boolean; target?: 'me' | string } = {},\n opts: CallOpts = {},\n ): Promise<SessionControl[]> {\n const raw = await this.http.json<Reply<'listSessionControls'>>(\n `/v1/sessions/${enc(sessionId)}/controls`,\n {\n query: { applied: query.applied, target: query.target },\n ext: opts.ext,\n signal: opts.signal,\n },\n );\n return [...(raw.controls ?? [])];\n }\n\n /** `POST /v1/sessions/{id}/control` — send a control to the executor (editor+). */\n submit(\n sessionId: string,\n body: SessionControlRequest,\n opts: CallOpts = {},\n ): Promise<SessionControlAccepted> {\n return this.http.json<SessionControlAccepted>(`/v1/sessions/${enc(sessionId)}/control`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/control/{cid}/applied` — executor only. */\n markApplied(\n sessionId: string,\n controlId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'markSessionControlApplied'>> {\n return this.http.json<Reply<'markSessionControlApplied'>>(\n `/v1/sessions/${enc(sessionId)}/control/${enc(controlId)}/applied`,\n { method: 'POST', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class SessionShares {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/shares` — owner only. */\n async list(sessionId: string, opts: CallOpts = {}): Promise<SessionShare[]> {\n const raw = await this.http.json<Reply<'listSessionShares'>>(\n `/v1/sessions/${enc(sessionId)}/shares`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.shares ?? [])];\n }\n\n /** `POST /v1/sessions/{id}/shares` — `token` is returned once for link shares. */\n create(\n sessionId: string,\n body: SessionShareCreateRequest,\n opts: CallOpts = {},\n ): Promise<SessionShareCreated> {\n return this.http.json<SessionShareCreated>(`/v1/sessions/${enc(sessionId)}/shares`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}/shares/{shareId}` */\n delete(\n sessionId: string,\n shareId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'deleteSessionShare'>> {\n return this.http.json<Reply<'deleteSessionShare'>>(\n `/v1/sessions/${enc(sessionId)}/shares/${enc(shareId)}`,\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `GET /v1/sessions/shared-with-me` */\n async sharedWithMe(\n query: { archived?: boolean } = {},\n opts: CallOpts = {},\n ): Promise<SharedSession[]> {\n const raw = await this.http.json<Reply<'listSessionsSharedWithMe'>>(\n '/v1/sessions/shared-with-me',\n {\n query: { archived: query.archived ? '1' : undefined },\n ext: opts.ext,\n signal: opts.signal,\n },\n );\n return [...(raw.sessions ?? [])];\n }\n}\n\nexport class Sessions {\n readonly events: SessionEvents;\n readonly controls: SessionControls;\n readonly lease: SessionLease;\n readonly shares: SessionShares;\n\n constructor(private readonly http: HttpClient) {\n this.events = new SessionEvents(http);\n this.controls = new SessionControls(http);\n this.lease = new SessionLease(http);\n this.shares = new SessionShares(http);\n }\n\n /** `POST /v1/sessions` — idempotent on `session_key` (200 existing / 201 created). */\n async create(\n body: SessionCreateRequest = {},\n opts: CallOpts = {},\n ): Promise<Session & { created: boolean }> {\n const res = await this.http.request('/v1/sessions', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n const session = (await res.json()) as Session;\n return { ...session, created: res.status === 201 };\n }\n\n /** `GET /v1/sessions?limit=&archived=` — own sessions first, then shared. */\n async list(\n query: { limit?: number; archived?: boolean } = {},\n opts: CallOpts = {},\n ): Promise<SessionListItem[]> {\n const raw = await this.http.json<Reply<'listSessions'>>('/v1/sessions', {\n query: { limit: query.limit, archived: query.archived ? '1' : undefined, v: '2' },\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.sessions ?? [])];\n }\n\n /** `GET /v1/sessions/{id}` — detail with members, lease and presence. */\n get(\n sessionId: string,\n query: { share?: string } = {},\n opts: CallOpts = {},\n ): Promise<SessionDetail> {\n return this.http.json<SessionDetail>(`/v1/sessions/${enc(sessionId)}`, {\n query: { share: query.share, v: '2' },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/sessions/{id}` — rename / archive (owner). */\n update(sessionId: string, body: SessionPatchRequest, opts: CallOpts = {}): Promise<Session> {\n return this.http.json<Session>(`/v1/sessions/${enc(sessionId)}`, {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}` — irreversible (owner). */\n delete(sessionId: string, opts: CallOpts = {}): Promise<Reply<'deleteSession'>> {\n return this.http.json<Reply<'deleteSession'>>(`/v1/sessions/${enc(sessionId)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/dispatch` — queue a `send` for one device and wake it over FCM. */\n dispatch(\n sessionId: string,\n body: SessionDispatchRequest,\n opts: CallOpts = {},\n ): Promise<SessionDispatchResponse> {\n return this.http.json<SessionDispatchResponse>(`/v1/sessions/${enc(sessionId)}/dispatch`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/sessions/{id}/stream?after=` — live SSE of `event` / `control` /\n * `lease` / `presence` frames. `: ping` heartbeats are skipped. The server\n * closes after 30 min; reconnect with `after` = highest `seq` seen.\n */\n async *stream(\n sessionId: string,\n query: { after?: number; share?: string } = {},\n opts: CallOpts = {},\n ): AsyncGenerator<SessionStreamEvent, void, undefined> {\n const frames = this.http.sse(`/v1/sessions/${enc(sessionId)}/stream`, {\n query: { after: query.after, share: query.share },\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n yield { event: frame.event, data } as SessionStreamEvent;\n }\n }\n}\n","/** `POST /v1/systemone` — typed decisions from codai-s1 (Choice / Score / Noul). */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type SystemOneRequest = Mutable<Body<'createSystemOne'>>;\nexport type SystemOneResponse = Reply<'createSystemOne'>;\n\nexport class SystemOne {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Ask one or more typed questions about `state`. Throws on 503 `s1_unavailable` like any other\n * error — keep a local fallback and catch it: the gateway never substitutes a generative model.\n */\n async create(\n body: SystemOneRequest,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SystemOneResponse> {\n const res = await this.http.request('/v1/systemone', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return (await res.json()) as SystemOneResponse;\n }\n}\n","/** `/v1/tasks/*` — outcome-billing task lifecycle. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Task = Schema<'Task'>;\nexport type TaskOutcome = Schema<'TaskOutcome'>;\nexport type TaskStats = Reply<'getTaskStats'>;\nexport type TaskListPage = Reply<'listTasks'>;\nexport type TaskConfirmRequest = Mutable<Body<'confirmTask'>>;\nexport type TaskConfirmResponse = Reply<'confirmTask'>;\nexport type TaskListQuery = Mutable<QueryOf<'listTasks'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/tasks` — newest first; page with `cursor` = previous `next_cursor`. */\n list(query: TaskListQuery = {}, opts: CallOpts = {}): Promise<TaskListPage> {\n return this.http.json<TaskListPage>('/v1/tasks', {\n query: { outcome: query.outcome, limit: query.limit, cursor: query.cursor },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/tasks/pending` — tasks awaiting your confirmation (max 100). */\n async pending(opts: CallOpts = {}): Promise<Task[]> {\n const raw = await this.http.json<Reply<'listPendingTasks'>>('/v1/tasks/pending', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.tasks ?? [])];\n }\n\n /** `GET /v1/tasks/stats?since=` */\n stats(since?: string | Date, opts: CallOpts = {}): Promise<TaskStats> {\n return this.http.json<TaskStats>('/v1/tasks/stats', {\n query: { since: since instanceof Date ? since.toISOString() : since },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/tasks/{id}` */\n get(id: string, opts: CallOpts = {}): Promise<Task> {\n return this.http.json<Task>(`/v1/tasks/${encodeURIComponent(id)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/tasks/{id}/confirm` — answer \"Did codai solve it?\". */\n confirm(id: string, body: TaskConfirmRequest, opts: CallOpts = {}): Promise<TaskConfirmResponse> {\n return this.http.json<TaskConfirmResponse>(`/v1/tasks/${encodeURIComponent(id)}/confirm`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `/v1/triggers/*` + `/v1/notifications/*` — event triggers (webhooks → agent sessions) and the inbox. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type TriggerList = Reply<'listTriggers'>;\nexport type TriggerCreateRequest = Mutable<Body<'createTrigger'>>;\nexport type TriggerCreated = Reply<'createTrigger'>;\nexport type TriggerPatch = Mutable<Body<'updateTrigger'>>;\nexport type TriggerUpdated = Reply<'updateTrigger'>;\nexport type TriggerTestRequest = Mutable<Body<'testTrigger'>>;\nexport type TriggerTestResult = Reply<'testTrigger'>;\nexport type TriggerEvents = Reply<'listTriggerEvents'>;\nexport type NotificationList = Reply<'listNotifications'>;\nexport type NotificationsRead = Reply<'markNotificationsRead'>;\n/** Reply of `DELETE /v1/notifications/:id` and `POST /v1/notifications/delete`. */\nexport type NotificationsDeleted = { readonly deleted: number };\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Triggers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/triggers` — never includes the signing secret. */\n list(opts: CallOpts = {}): Promise<TriggerList> {\n return this.http.json<TriggerList>('/v1/triggers', { ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers` — the response carries the signing `secret` ONCE. */\n create(body: TriggerCreateRequest, opts: CallOpts = {}): Promise<TriggerCreated> {\n return this.http.json<TriggerCreated>('/v1/triggers', { method: 'POST', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/triggers/{id}` — name / enabled / policy. */\n update(id: string, body: TriggerPatch, opts: CallOpts = {}): Promise<TriggerUpdated> {\n return this.http.json<TriggerUpdated>(`/v1/triggers/${encodeURIComponent(id)}`, { method: 'PATCH', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `DELETE /v1/triggers/{id}` — its hook URL stops working immediately. */\n delete(id: string, opts: CallOpts = {}): Promise<Reply<'deleteTrigger'>> {\n return this.http.json<Reply<'deleteTrigger'>>(`/v1/triggers/${encodeURIComponent(id)}`, { method: 'DELETE', ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers/{id}/rotate-secret` — new secret, shown once. */\n rotateSecret(id: string, opts: CallOpts = {}): Promise<Reply<'rotateTriggerSecret'>> {\n return this.http.json<Reply<'rotateTriggerSecret'>>(`/v1/triggers/${encodeURIComponent(id)}/rotate-secret`, { method: 'POST', body: {}, ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers/{id}/test` — manual fire through the full pipeline; returns the decision + reason. */\n /** `PUT /v1/triggers/{id}/secret` — store a secret issued by the source (e.g. a Sentry integration's client secret). */\n setSecret(id: string, secret: string, opts: CallOpts = {}): Promise<Reply<'setTriggerSecret'>> {\n return this.http.json<Reply<'setTriggerSecret'>>(`/v1/triggers/${encodeURIComponent(id)}/secret`, { method: 'PUT', body: { secret }, ext: opts.ext, signal: opts.signal, noRetry: true });\n }\n\n /** `POST /v1/triggers/{id}/test` — manual fire through the full pipeline; returns the decision + reason. */\n test(id: string, body: TriggerTestRequest = {}, opts: CallOpts = {}): Promise<TriggerTestResult> {\n return this.http.json<TriggerTestResult>(`/v1/triggers/${encodeURIComponent(id)}/test`, { method: 'POST', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/triggers/{id}/events?limit=` — recent deliveries with decisions. */\n events(id: string, limit?: number, opts: CallOpts = {}): Promise<TriggerEvents> {\n return this.http.json<TriggerEvents>(`/v1/triggers/${encodeURIComponent(id)}/events`, { query: { limit }, ext: opts.ext, signal: opts.signal });\n }\n\n /**\n * `POST /v1/hooks/{id}` — send an event to a `generic` / `form` trigger from your own code. Signs the body\n * (`X-Codai-Signature: t=<unix>,v1=HMAC_SHA256(secret, \"<t>.<body>\")`, WebCrypto — Node 20+, browsers, Deno,\n * Workers). `deliveryId` makes retries idempotent. The hook needs no API key (the signature is the auth).\n */\n async fireHook(\n id: string,\n secret: string,\n event: { title: string; message?: string; severity?: 'info' | 'low' | 'medium' | 'high' | 'critical'; url?: string; subject?: string; labels?: string[]; dedupe_key?: string; resolved?: boolean },\n opts: CallOpts & { deliveryId?: string } = {},\n ): Promise<Reply<'receiveTriggerHook'>> {\n const raw = JSON.stringify(event);\n const t = Math.floor(Date.now() / 1000);\n const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n const mac = new Uint8Array(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(`${t}.${raw}`)));\n const v1 = Array.from(mac, (b) => b.toString(16).padStart(2, '0')).join('');\n return this.http.json<Reply<'receiveTriggerHook'>>(`/v1/hooks/${encodeURIComponent(id)}`, {\n method: 'POST',\n rawBody: raw,\n ext: {\n ...opts.ext,\n headers: {\n ...opts.ext?.headers,\n 'Content-Type': 'application/json',\n 'x-codai-signature': `t=${t},v1=${v1}`,\n ...(opts.deliveryId ? { 'x-codai-delivery': opts.deliveryId } : {}),\n },\n },\n signal: opts.signal,\n });\n }\n}\n\nexport class Notifications {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/notifications?unread=1&limit=` — newest first. */\n list(query: { unread?: boolean; limit?: number } = {}, opts: CallOpts = {}): Promise<NotificationList> {\n return this.http.json<NotificationList>('/v1/notifications', {\n query: { unread: query.unread ? '1' : undefined, limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/notifications/read` — `ids` omitted = every unread one. */\n markRead(ids?: number[], opts: CallOpts = {}): Promise<NotificationsRead> {\n return this.http.json<NotificationsRead>('/v1/notifications/read', { method: 'POST', body: ids ? { ids } : {}, ext: opts.ext, signal: opts.signal });\n }\n\n /** `DELETE /v1/notifications/:id` — `{ deleted: 0 }` when the id is missing or not yours. */\n delete(id: number, opts: CallOpts = {}): Promise<NotificationsDeleted> {\n return this.http.json<NotificationsDeleted>(`/v1/notifications/${encodeURIComponent(String(id))}`, { method: 'DELETE', ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/notifications/delete` — 1..200 ids; ids of other users are skipped. */\n deleteMany(ids: number[], opts: CallOpts = {}): Promise<NotificationsDeleted> {\n return this.http.json<NotificationsDeleted>('/v1/notifications/delete', { method: 'POST', body: { ids }, ext: opts.ext, signal: opts.signal });\n }\n}\n","/** `POST /v1/tokens` — ephemeral scoped tokens for browsers / webviews. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Reply } from './_shared';\n\nexport type EphemeralScope = 'realtime' | 'audio' | 'embeddings';\nexport type EphemeralTokenResponse = Reply<'createEphemeralToken'>;\n\nexport interface EphemeralToken {\n token: string;\n expiresAt: string;\n scope: EphemeralScope;\n raw: EphemeralTokenResponse;\n}\n\nexport class Tokens {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Mint a short-lived token (60–3600 s, default 600) bound to one surface.\n * Only a real `codai_` key may mint.\n */\n async create(\n scope: EphemeralScope,\n ttlSeconds?: number,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<EphemeralToken> {\n const raw = await this.http.json<EphemeralTokenResponse>('/v1/tokens', {\n body: { scope, ...(ttlSeconds !== undefined ? { ttl_seconds: ttlSeconds } : {}) },\n ext: opts.ext,\n signal: opts.signal,\n });\n return { token: raw.token, expiresAt: raw.expires_at, scope: raw.scope, raw };\n }\n}\n","/** `/v1/tools/*` — verified web search and server-side page fetch. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type ToolSearchRequest = Mutable<Body<'toolsSearch'>>;\nexport type ToolSearchResponse = Reply<'toolsSearch'>;\nexport type ToolFetchRequest = Mutable<Body<'toolsFetch'>>;\nexport type ToolFetchResponse = Reply<'toolsFetch'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Tools {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/tools/search` — verified web search (never falls back to an unverified provider). */\n search(body: ToolSearchRequest, opts: CallOpts = {}): Promise<ToolSearchResponse> {\n return this.http.json<ToolSearchResponse>('/v1/tools/search', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/tools/fetch` — fetch + extract a public page (SSRF-guarded). */\n fetch(body: ToolFetchRequest, opts: CallOpts = {}): Promise<ToolFetchResponse> {\n return this.http.json<ToolFetchResponse>('/v1/tools/fetch', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/**\n * Single source of truth for OpenAPI parity: every `operationId` in\n * `apps/docs/openapi/en/gateway.yaml` maps to exactly one dotted method path\n * on the `Codai` client. `operations.test.ts` parses the YAML and fails when\n * an operation is missing, mapped to a non-function, or when this table\n * carries a key the YAML does not have.\n */\nexport const OPERATION_METHODS: Record<string, string> = {\n // Chat & Completions\n createChatCompletion: 'chat.completions.create',\n createResponse: 'responses.create',\n createMessage: 'messages.create',\n // Embeddings & Audio\n createEmbeddings: 'embeddings.create',\n createSystemOne: 'systemOne.create',\n createTranscription: 'audio.transcribe',\n createSpeech: 'audio.speech',\n createEphemeralToken: 'tokens.create',\n // Models\n listModels: 'models.list',\n // Health\n getHealth: 'health.get',\n getHealthReady: 'health.ready',\n getStatus: 'health.status',\n // Agents\n runAgentSync: 'agents.run',\n createAgentRun: 'agents.runs.create',\n getAgentRunStats: 'agents.runs.stats',\n getAgentRun: 'agents.runs.get',\n listAgentRunSteps: 'agents.runs.steps',\n streamAgentRun: 'agents.runs.stream',\n cancelAgentRun: 'agents.runs.cancel',\n // Tools\n toolsSearch: 'tools.search',\n toolsFetch: 'tools.fetch',\n // Tasks\n listTasks: 'tasks.list',\n listPendingTasks: 'tasks.pending',\n getTaskStats: 'tasks.stats',\n getTask: 'tasks.get',\n confirmTask: 'tasks.confirm',\n // Event triggers + inbox\n listTriggers: 'triggers.list',\n createTrigger: 'triggers.create',\n updateTrigger: 'triggers.update',\n deleteTrigger: 'triggers.delete',\n rotateTriggerSecret: 'triggers.rotateSecret',\n setTriggerSecret: 'triggers.setSecret',\n testTrigger: 'triggers.test',\n listTriggerEvents: 'triggers.events',\n receiveTriggerHook: 'triggers.fireHook',\n listNotifications: 'notifications.list',\n markNotificationsRead: 'notifications.markRead',\n deleteNotification: 'notifications.delete',\n deleteNotifications: 'notifications.deleteMany',\n // Sessions\n createSession: 'sessions.create',\n listSessions: 'sessions.list',\n getSession: 'sessions.get',\n updateSession: 'sessions.update',\n deleteSession: 'sessions.delete',\n listSessionEvents: 'sessions.events.list',\n appendSessionEvents: 'sessions.events.append',\n listSessionControls: 'sessions.controls.list',\n submitSessionControl: 'sessions.controls.submit',\n markSessionControlApplied: 'sessions.controls.markApplied',\n dispatchToDevice: 'sessions.dispatch',\n claimSessionLease: 'sessions.lease.acquire',\n heartbeatSessionLease: 'sessions.lease.renew',\n releaseSessionLease: 'sessions.lease.release',\n streamSession: 'sessions.stream',\n // Devices\n getMyDispatchInbox: 'devices.dispatchInbox',\n listDevices: 'devices.list',\n updateDevice: 'devices.update',\n deleteDevice: 'devices.delete',\n // Hosts\n listHosts: 'hosts.list',\n streamHost: 'hosts.stream',\n execOnHost: 'hosts.exec',\n postHostExecResult: 'hosts.postResult',\n // Orgs & Sharing\n listSessionsSharedWithMe: 'sessions.shares.sharedWithMe',\n listSessionShares: 'sessions.shares.list',\n createSessionShare: 'sessions.shares.create',\n deleteSessionShare: 'sessions.shares.delete',\n createOrg: 'orgs.create',\n listOrgs: 'orgs.list',\n listOrgMembers: 'orgs.members.list',\n addOrgMember: 'orgs.members.add',\n removeOrgMember: 'orgs.members.remove',\n // Projects\n listProjects: 'projects.list',\n createProject: 'projects.create',\n getProject: 'projects.get',\n updateProject: 'projects.update',\n deleteProject: 'projects.delete',\n // Environments\n listEnvironments: 'environments.list',\n createEnvironment: 'environments.create',\n enrollEnvironment: 'environments.enroll',\n getEnvironment: 'environments.get',\n updateEnvironment: 'environments.update',\n startEnvironment: 'environments.start',\n stopEnvironment: 'environments.stop',\n archiveEnvironment: 'environments.archive',\n destroyEnvironment: 'environments.destroy',\n createEnvironmentEnrollToken: 'environments.enrollToken',\n listEnvironmentMembers: 'environments.members.list',\n addEnvironmentMember: 'environments.members.add',\n setMyEnvironmentSshKey: 'environments.members.setSshKey',\n setEnvironmentMemberRole: 'environments.members.setRole',\n removeEnvironmentMember: 'environments.members.remove',\n issueMyEnvironmentSshCert: 'environments.members.sshCert',\n getEnvironmentSshCa: 'environments.sshCa',\n listEnvironmentTasks: 'environments.tasks.list',\n createEnvironmentTask: 'environments.tasks.create',\n getEnvironmentTask: 'environments.tasks.get',\n listEnvironmentPorts: 'environments.ports.list',\n setEnvironmentPort: 'environments.ports.set',\n removeEnvironmentPort: 'environments.ports.remove',\n listEnvironmentSecrets: 'environments.secrets.list',\n setEnvironmentSecret: 'environments.secrets.set',\n removeEnvironmentSecret: 'environments.secrets.remove',\n // Account\n getAccount: 'account.get',\n patchAccount: 'account.update',\n getReceipt: 'receipt.get',\n submitFeedback: 'feedback.submit',\n listPhoneModels: 'phoneModels.list',\n};\n\n/** Operations whose SDK method is an async iterator (SSE-only endpoints). */\nexport const STREAMING_OPERATIONS: ReadonlySet<string> = new Set([\n 'streamAgentRun',\n 'streamSession',\n 'streamHost',\n]);\n\n/**\n * Same parity contract for the separate Resolve service\n * (`apps/docs/openapi/en/resolve.yaml`, host `resolveBaseUrl`) —\n * checked by `operations.resolve.test.ts`.\n */\nexport const RESOLVE_OPERATION_METHODS: Record<string, string> = {\n resolveHealth: 'resolve.health',\n createResolveJob: 'resolve.submit',\n getResolveJob: 'resolve.get',\n acceptResolveJob: 'resolve.accept',\n getResolveAttestation: 'resolve.attestation',\n};\n","/**\n * codai-sdk — official TypeScript client for the codai AI gateway.\n *\n * Full parity with the public gateway OpenAPI (every `operationId` has one\n * method — see `OPERATION_METHODS`). Resources hang off the `Codai` client:\n *\n * client.chat.completions.create / .stream client.messages / client.responses\n * client.embeddings / client.audio / client.tokens / client.models / client.health\n * client.systemOne.create (typed decisions, codai-s1)\n * client.agents.run + client.agents.runs.* client.tools.search / .fetch\n * client.tasks.* client.sessions.* (events, controls, lease, shares, stream)\n * client.devices.* / client.hosts.* client.orgs.* / client.account / client.receipt\n * client.projects.* client.environments.* (members, ports, secrets)\n * client.feedback / client.phoneModels\n * client.resolve.* (verified bug fixes on https://resolve.codai.ro — resolve.yaml)\n *\n * Top-level `chat()`, `chatStream()`, `embeddings()`, `models()`, `feedback()`,\n * `mintToken()` from 0.2.x are kept as thin aliases.\n *\n * Zero runtime dependencies; Node 18+ (global fetch) and modern edge runtimes.\n */\n\nimport { type CodaiRequestExtensions, HttpClient } from './http';\nimport { Account, Feedback, PhoneModels, Receipts } from './resources/account';\nimport { Agents } from './resources/agents';\nimport { Audio } from './resources/audio';\nimport {\n Chat,\n type ChatCompletionInput,\n type ChatCompletionRequest,\n type ChatMessage,\n type ChatResult,\n type ChatStream,\n} from './resources/chat';\nimport { Devices } from './resources/devices';\nimport { Embeddings } from './resources/embeddings';\nimport { Environments } from './resources/environments';\nimport { Health } from './resources/health';\nimport { Hosts } from './resources/hosts';\nimport { Messages } from './resources/messages';\nimport { Models } from './resources/models';\nimport { Orgs } from './resources/orgs';\nimport { Projects } from './resources/projects';\nimport { Resolve } from './resources/resolve';\nimport { Responses } from './resources/responses';\nimport { Sessions } from './resources/sessions';\nimport { SystemOne } from './resources/system-one';\nimport { Tasks } from './resources/tasks';\nimport { Notifications, Triggers } from './resources/triggers';\nimport { type EphemeralScope, type EphemeralToken, Tokens } from './resources/tokens';\nimport { Tools } from './resources/tools';\n\nexport interface CodaiClientOptions {\n apiKey: string;\n /** Defaults to https://ai.codai.ro */\n baseUrl?: string;\n /** codai Resolve service host (`client.resolve`). Defaults to https://resolve.codai.ro */\n resolveBaseUrl?: string;\n /** Stable conversation/session id — sent as `x-codai-session-id` on every request. */\n sessionId?: string;\n /** Device UUID for shared-sessions / hosts — sent as `x-codai-device` on every request. */\n device?: string;\n /** Device name / platform recorded on first registration. */\n deviceName?: string;\n devicePlatform?: CodaiRequestExtensions['devicePlatform'];\n /** Client surface tag (`x-codai-client`). */\n client?: string;\n /** Any other default `X-Codai-*` extensions (per-call bags override). */\n defaults?: CodaiRequestExtensions;\n /** Default request timeout (ms). Default 120_000. Streams are not time-capped. */\n timeoutMs?: number;\n /** Retries on 429/5xx with exponential backoff. Default 2. */\n maxRetries?: number;\n /** Injectable fetch (tests / custom agents). */\n fetch?: typeof fetch;\n}\n\n/** 0.2.x-compatible chat options (thin alias over `chat.completions`). */\nexport interface ChatOptions {\n model?: string;\n messages: ChatMessage[];\n temperature?: number;\n maxTokens?: number;\n tools?: ChatCompletionRequest['tools'];\n /** codai extension: plan-and-execute agent mode (Pro+). */\n agentMode?: boolean;\n /** codai extension: server-side context compaction ('auto'). */\n compact?: 'auto';\n /** codai extension: best-of-N override (0 disables, 3 forces). */\n bestOf?: 0 | 3;\n /** Attribution id recorded on tool calls (agent fleets). */\n agentId?: string;\n /** Per-call session override. */\n sessionId?: string;\n /** Any other `X-Codai-*` extension. */\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface EmbeddingsOptions {\n input: string | string[];\n model?: string;\n dimensions?: number;\n signal?: AbortSignal;\n}\n\nexport class Codai {\n readonly http: HttpClient;\n\n /** Resource group (`chat.completions.create/stream`) that is also callable with the 0.2.x `chat({ messages })` shape. */\n readonly chat: Chat & ((opts: ChatOptions) => Promise<ChatResult>);\n readonly messages: Messages;\n readonly responses: Responses;\n readonly embeddings: Embeddings &\n ((opts: EmbeddingsOptions) => Promise<{ embeddings: number[][]; raw: unknown }>);\n readonly audio: Audio;\n /** Typed decisions from codai-s1 (`systemOne.create({ state, questions })`). */\n readonly systemOne: SystemOne;\n readonly tokens: Tokens;\n readonly models: Models & (() => Promise<Array<{ id: string }>>);\n readonly health: Health;\n readonly agents: Agents;\n readonly tools: Tools;\n readonly tasks: Tasks;\n /** Event triggers — webhooks that notify you or start agent sessions. */\n readonly triggers: Triggers;\n /** Inbox of trigger / cloud-task notifications. */\n readonly notifications: Notifications;\n readonly sessions: Sessions;\n readonly devices: Devices;\n readonly hosts: Hosts;\n readonly orgs: Orgs;\n readonly projects: Projects;\n readonly environments: Environments;\n readonly account: Account;\n readonly receipt: Receipts;\n readonly feedback: Feedback &\n ((requestId: string, rating: 1 | -1, comment?: string) => Promise<void>);\n readonly phoneModels: PhoneModels;\n /** codai Resolve — execution-verified bug fixes (separate host, `resolveBaseUrl`). */\n readonly resolve: Resolve;\n\n constructor(opts: CodaiClientOptions) {\n if (!opts.apiKey) throw new Error('Codai: apiKey is required');\n this.http = new HttpClient({\n apiKey: opts.apiKey,\n baseUrl: opts.baseUrl ?? 'https://ai.codai.ro',\n timeoutMs: opts.timeoutMs ?? 120_000,\n maxRetries: opts.maxRetries ?? 2,\n fetch: opts.fetch,\n defaults: {\n ...opts.defaults,\n ...(opts.sessionId ? { sessionId: opts.sessionId } : {}),\n ...(opts.device ? { device: opts.device } : {}),\n ...(opts.deviceName ? { deviceName: opts.deviceName } : {}),\n ...(opts.devicePlatform ? { devicePlatform: opts.devicePlatform } : {}),\n ...(opts.client ? { client: opts.client } : {}),\n },\n });\n const http = this.http;\n\n this.messages = new Messages(http);\n this.responses = new Responses(http);\n this.audio = new Audio(http);\n this.systemOne = new SystemOne(http);\n this.tokens = new Tokens(http);\n this.health = new Health(http);\n this.agents = new Agents(http);\n this.tools = new Tools(http);\n this.tasks = new Tasks(http);\n this.triggers = new Triggers(http);\n this.notifications = new Notifications(http);\n this.sessions = new Sessions(http);\n this.devices = new Devices(http);\n this.hosts = new Hosts(http);\n this.orgs = new Orgs(http);\n this.projects = new Projects(http);\n this.environments = new Environments(http);\n this.account = new Account(http);\n this.receipt = new Receipts(http);\n this.phoneModels = new PhoneModels(http);\n this.resolve = new Resolve(\n new HttpClient({\n apiKey: opts.apiKey,\n baseUrl: opts.resolveBaseUrl ?? 'https://resolve.codai.ro',\n timeoutMs: opts.timeoutMs ?? 120_000,\n maxRetries: opts.maxRetries ?? 2,\n fetch: opts.fetch,\n defaults: opts.client ? { client: opts.client } : {},\n }),\n );\n\n // Callable resources keep the 0.2.x top-level signatures working\n // (`client.embeddings({...})`, `client.models()`, `client.feedback(id, 1)`)\n // while also exposing `.create()` / `.list()` / `.submit()`.\n this.chat = callable(new Chat(http), (o: ChatOptions) =>\n this.chat.completions.create(this.legacyBody(o), {\n ext: this.legacyExt(o),\n signal: o.signal,\n }),\n );\n this.embeddings = callable(new Embeddings(http), async (o: EmbeddingsOptions) => {\n const r = await this.embeddings.create(\n { input: o.input, model: o.model, dimensions: o.dimensions },\n { signal: o.signal },\n );\n return { embeddings: r.embeddings, raw: r.raw };\n });\n this.models = callable(new Models(http), async () =>\n (await this.models.list()).map((m) => ({ id: m.id })),\n );\n this.feedback = callable(\n new Feedback(http),\n async (requestId: string, rating: 1 | -1, comment?: string) => {\n await this.feedback.submit({\n event_id: requestId,\n rating,\n ...(comment ? { comment } : {}),\n });\n },\n );\n }\n\n // ------------------------------------------------- 0.2.x compatibility aliases\n\n /** Alias of `chat.completions.stream()` with the 0.2.x option names. */\n chatStream(opts: ChatOptions): ChatStream {\n return this.chat.completions.stream(this.legacyBody(opts), {\n ext: this.legacyExt(opts),\n signal: opts.signal,\n });\n }\n\n /** Alias of `tokens.create()`. */\n mintToken(scope: EphemeralScope, ttlSeconds?: number): Promise<EphemeralToken> {\n return this.tokens.create(scope, ttlSeconds);\n }\n\n private legacyBody(opts: ChatOptions): ChatCompletionInput {\n return {\n model: opts.model ?? 'codai',\n messages: opts.messages,\n ...(opts.temperature !== undefined ? { temperature: opts.temperature } : {}),\n ...(opts.maxTokens !== undefined ? { max_tokens: opts.maxTokens } : {}),\n ...(opts.tools ? { tools: opts.tools } : {}),\n };\n }\n\n private legacyExt(opts: ChatOptions): CodaiRequestExtensions {\n return {\n ...opts.ext,\n ...(opts.sessionId ? { sessionId: opts.sessionId } : {}),\n ...(opts.agentMode ? { mode: 'agent' as const } : {}),\n ...(opts.compact ? { compact: opts.compact } : {}),\n ...(opts.bestOf !== undefined ? { bestOf: opts.bestOf } : {}),\n ...(opts.agentId ? { agentId: opts.agentId } : {}),\n };\n }\n}\n\n/**\n * Make an object callable: returns a function that forwards calls to `fn`\n * and carries every own/prototype member of `target` (methods bound).\n */\nfunction callable<T extends object, F extends (...args: never[]) => unknown>(\n target: T,\n fn: F,\n): T & F {\n const f = ((...args: Parameters<F>) => fn(...args)) as T & F;\n for (const key of allKeys(target)) {\n const value = (target as Record<string, unknown>)[key];\n Object.defineProperty(f, key, {\n value:\n typeof value === 'function' ? (value as (...a: unknown[]) => unknown).bind(target) : value,\n enumerable: true,\n writable: false,\n });\n }\n return f;\n}\n\nfunction allKeys(obj: object): string[] {\n const keys = new Set<string>();\n let cur: object | null = obj;\n while (cur && cur !== Object.prototype) {\n for (const k of Object.getOwnPropertyNames(cur)) if (k !== 'constructor') keys.add(k);\n cur = Object.getPrototypeOf(cur);\n }\n return [...keys];\n}\n\nexport default Codai;\n\n// ------------------------------------------------------------------ exports\nexport { CodaiError, HttpClient, extensionHeaders, readSse, frameJson } from './http';\nexport type { CodaiRequestExtensions, ErrorCode, SseFrame, RequestOptions } from './http';\nexport { OPERATION_METHODS, STREAMING_OPERATIONS, RESOLVE_OPERATION_METHODS } from './operations';\nexport type { paths, components, operations } from './generated/gateway';\nexport type {\n paths as ResolvePaths,\n components as ResolveComponents,\n operations as ResolveOperations,\n} from './generated/resolve';\n\nexport * from './resources/chat';\nexport * from './resources/messages';\nexport * from './resources/responses';\nexport * from './resources/embeddings';\nexport * from './resources/audio';\nexport * from './resources/tokens';\nexport * from './resources/models';\nexport * from './resources/health';\nexport * from './resources/agents';\nexport * from './resources/tools';\nexport * from './resources/tasks';\nexport * from './resources/triggers';\nexport * from './resources/sessions';\nexport * from './resources/devices';\nexport * from './resources/hosts';\nexport * from './resources/orgs';\nexport * from './resources/projects';\nexport * from './resources/environments';\nexport * from './resources/account';\nexport * from './resources/resolve';\n"]}
1
+ {"version":3,"sources":["../src/http.ts","../src/resources/account.ts","../src/resources/agents.ts","../src/resources/audio.ts","../src/resources/chat.ts","../src/resources/devices.ts","../src/resources/embeddings.ts","../src/resources/environments.ts","../src/resources/health.ts","../src/resources/hosts.ts","../src/resources/messages.ts","../src/resources/models.ts","../src/resources/orgs.ts","../src/resources/projects.ts","../src/resources/resolve.ts","../src/resources/responses.ts","../src/resources/sessions.ts","../src/resources/system-one.ts","../src/resources/tasks.ts","../src/resources/triggers.ts","../src/resources/tokens.ts","../src/resources/tools.ts","../src/operations.ts","../src/index.ts"],"names":["enc"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Shared HTTP layer for every resource: base URL, bearer auth, `X-Codai-*`\n * extension headers, retries, timeouts, JSON + SSE helpers and the\n * `CodaiError` mapping of the gateway error envelope.\n */\n\nimport type { components } from './generated/gateway';\n\nexport type ErrorEnvelope = components['schemas']['Error'];\nexport type ErrorCode = ErrorEnvelope['error']['code'];\n\nexport class CodaiError extends Error {\n /** Stable gateway error code (`invalid_api_key`, `rate_limit_exceeded`, …) when the body was an error envelope. */\n readonly code: ErrorCode | null;\n /** `x-codai-trace-id` (or `x-request-id`) of the failed response, when present. */\n readonly requestId: string | null;\n /** Seconds to wait before retrying, from `Retry-After` on 429s. */\n readonly retryAfter: number | null;\n\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: unknown,\n meta: { code?: ErrorCode | null; requestId?: string | null; retryAfter?: number | null } = {},\n ) {\n super(message);\n this.name = 'CodaiError';\n this.code = meta.code ?? extractCode(body);\n this.requestId = meta.requestId ?? null;\n this.retryAfter = meta.retryAfter ?? null;\n }\n}\n\nfunction extractCode(body: unknown): ErrorCode | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { code?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.code === 'string')\n return err.code as ErrorCode;\n }\n return null;\n}\n\nfunction extractMessage(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { message?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.message === 'string') return err.message;\n }\n return null;\n}\n\nconst RETRYABLE = new Set([429, 500, 502, 503, 504]);\n\n/**\n * Per-request `X-Codai-*` extension headers. Every field maps 1:1 to the\n * request header of the same name (`effort` → `x-codai-effort`). Values are\n * sent verbatim; booleans become `1` / `0`.\n */\nexport interface CodaiRequestExtensions {\n /** `x-codai-session-id` — groups requests of one conversation. */\n sessionId?: string;\n /** `x-request-id` — echoed as `x-codai-trace-id`. */\n requestId?: string;\n /** `x-codai-effort` */\n effort?: 'minimal' | 'low' | 'medium' | 'high' | 'max';\n /** `x-codai-thinking` */\n thinking?: boolean;\n /** `x-codai-thinking-budget` */\n thinkingBudget?: number;\n /** `x-codai-thinking-pin` */\n thinkingPin?: boolean;\n /** `x-codai-cache` (`false` disables caching on direct model ids). */\n cache?: boolean;\n /** `x-codai-no-task` */\n noTask?: boolean;\n /** `x-codai-task-id` */\n taskId?: string;\n /** `x-codai-task-outcome` */\n taskOutcome?: 'pass' | 'fail';\n /** `x-codai-task-evidence` */\n taskEvidence?: 'exec_verdict' | 'reexec';\n /** `x-codai-client` */\n client?: string;\n /** `x-codai-incognito` */\n incognito?: boolean;\n /** `x-codai-no-recall` */\n noRecall?: boolean;\n /** `x-codai-proven-only` */\n provenOnly?: boolean;\n /** `x-codai-new-session` */\n newSession?: boolean;\n /** `x-codai-repo` */\n repo?: string;\n /** `x-codai-agent-id` */\n agentId?: string;\n /** `x-codai-disable-subagents` */\n disableSubagents?: boolean;\n /** `x-codai-mode: agent` */\n mode?: 'agent';\n /** `x-codai-server-tools` */\n serverTools?: boolean;\n /** `x-codai-orchestrate` */\n orchestrate?: boolean;\n /** `x-codai-cascade` */\n cascade?: 'verify';\n /** `x-codai-best-of` (number or `off`). */\n bestOf?: number | 'off';\n /** `x-codai-best-of-depth` */\n bestOfDepth?: number;\n /** `x-codai-reflect` */\n reflect?: boolean;\n /** `x-codai-step-verify` */\n stepVerify?: boolean;\n /** `x-codai-plan` */\n plan?: boolean;\n /** `x-codai-consensus` */\n consensus?: boolean;\n /** `x-codai-compact` (`'auto'` and `true` both send `1`). */\n compact?: boolean | 'auto';\n /** `x-codai-retrieval` */\n retrieval?: boolean;\n /** `x-codai-heuristics` */\n heuristics?: boolean;\n /** `x-codai-identity` */\n identity?: 'on' | 'off' | 'shadow';\n /** `x-codai-playbook` */\n playbook?: string;\n /** `x-codai-no-playbook` */\n noPlaybook?: boolean;\n /** `x-codai-debug` */\n debug?: boolean;\n /** `x-codai-device` — shared-sessions / hosts device UUID. */\n device?: string;\n /** `x-codai-device-name` */\n deviceName?: string;\n /** `x-codai-device-platform` */\n devicePlatform?: 'android' | 'ios' | 'web' | 'desktop' | 'cli' | 'agent';\n /** `x-codai-push-token` */\n pushToken?: string;\n /** `x-codai-share-token` */\n shareToken?: string;\n /** Escape hatch: any additional raw headers. */\n headers?: Record<string, string>;\n}\n\nconst EXTENSION_HEADERS: Record<Exclude<keyof CodaiRequestExtensions, 'headers'>, string> = {\n sessionId: 'x-codai-session-id',\n requestId: 'x-request-id',\n effort: 'x-codai-effort',\n thinking: 'x-codai-thinking',\n thinkingBudget: 'x-codai-thinking-budget',\n thinkingPin: 'x-codai-thinking-pin',\n cache: 'x-codai-cache',\n noTask: 'x-codai-no-task',\n taskId: 'x-codai-task-id',\n taskOutcome: 'x-codai-task-outcome',\n taskEvidence: 'x-codai-task-evidence',\n client: 'x-codai-client',\n incognito: 'x-codai-incognito',\n noRecall: 'x-codai-no-recall',\n provenOnly: 'x-codai-proven-only',\n newSession: 'x-codai-new-session',\n repo: 'x-codai-repo',\n agentId: 'x-codai-agent-id',\n disableSubagents: 'x-codai-disable-subagents',\n mode: 'x-codai-mode',\n serverTools: 'x-codai-server-tools',\n orchestrate: 'x-codai-orchestrate',\n cascade: 'x-codai-cascade',\n bestOf: 'x-codai-best-of',\n bestOfDepth: 'x-codai-best-of-depth',\n reflect: 'x-codai-reflect',\n stepVerify: 'x-codai-step-verify',\n plan: 'x-codai-plan',\n consensus: 'x-codai-consensus',\n compact: 'x-codai-compact',\n retrieval: 'x-codai-retrieval',\n heuristics: 'x-codai-heuristics',\n identity: 'x-codai-identity',\n playbook: 'x-codai-playbook',\n noPlaybook: 'x-codai-no-playbook',\n debug: 'x-codai-debug',\n device: 'x-codai-device',\n deviceName: 'x-codai-device-name',\n devicePlatform: 'x-codai-device-platform',\n pushToken: 'x-codai-push-token',\n shareToken: 'x-codai-share-token',\n};\n\n/** Translate an extensions bag into raw `X-Codai-*` headers. Exported for tests. */\nexport function extensionHeaders(ext: CodaiRequestExtensions | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (!ext) return out;\n for (const [key, header] of Object.entries(EXTENSION_HEADERS) as Array<\n [Exclude<keyof CodaiRequestExtensions, 'headers'>, string]\n >) {\n const value = ext[key];\n if (value === undefined || value === null) continue;\n if (typeof value === 'boolean') out[header] = value ? '1' : '0';\n else if (key === 'compact' && value === 'auto') out[header] = '1';\n else out[header] = String(value);\n }\n if (ext.headers) Object.assign(out, ext.headers);\n return out;\n}\n\nexport interface HttpClientOptions {\n apiKey: string;\n baseUrl: string;\n timeoutMs: number;\n maxRetries: number;\n /** Extensions applied to every request (per-call bags override per key). */\n defaults?: CodaiRequestExtensions;\n /** Injectable fetch (defaults to the global one). */\n fetch?: typeof fetch;\n}\n\nexport type Query = Record<string, string | number | boolean | undefined | null>;\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** JSON body (serialised) — pass `undefined` for no body. */\n body?: unknown;\n /** A pre-built body (FormData / Blob) sent as-is; disables retries. */\n rawBody?: BodyInit;\n query?: Query;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n /** Override the client timeout for this call (ms). `0` disables it (streams). */\n timeoutMs?: number;\n /** Never retry this call (multipart uploads, streams). */\n noRetry?: boolean;\n /** Statuses treated as success besides 2xx (e.g. 503 on `/health/ready`). */\n acceptStatus?: number[];\n}\n\nexport class HttpClient {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n readonly defaults: CodaiRequestExtensions;\n private readonly fetchImpl: typeof fetch;\n\n constructor(opts: HttpClientOptions) {\n this.apiKey = opts.apiKey;\n this.baseUrl = opts.baseUrl.replace(/\\/$/, '');\n this.timeoutMs = opts.timeoutMs;\n this.maxRetries = opts.maxRetries;\n this.defaults = opts.defaults ?? {};\n this.fetchImpl = opts.fetch ?? ((input, init) => fetch(input, init));\n }\n\n url(path: string, query?: Query): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n url.searchParams.set(k, typeof v === 'boolean' ? (v ? '1' : '0') : String(v));\n }\n }\n return url.toString();\n }\n\n headers(ext?: CodaiRequestExtensions, json = true): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...(json ? { 'Content-Type': 'application/json' } : {}),\n ...extensionHeaders(this.defaults),\n ...extensionHeaders(ext),\n };\n }\n\n /** Perform a request; throws `CodaiError` on non-2xx (after retries on 429/5xx). */\n async request(path: string, init: RequestOptions = {}): Promise<Response> {\n const url = this.url(path, init.query);\n const hasJson = init.body !== undefined;\n const headers = this.headers(init.ext, hasJson);\n const method = init.method ?? (hasJson || init.rawBody !== undefined ? 'POST' : 'GET');\n const retries = init.noRetry || init.rawBody !== undefined ? 0 : this.maxRetries;\n const timeout = init.timeoutMs ?? this.timeoutMs;\n const accept = new Set(init.acceptStatus ?? []);\n let lastErr: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n const signal = init.signal ?? (timeout > 0 ? AbortSignal.timeout(timeout) : undefined);\n try {\n const res = await this.fetchImpl(url, {\n method,\n headers,\n ...(hasJson ? { body: JSON.stringify(init.body) } : {}),\n ...(init.rawBody !== undefined ? { body: init.rawBody } : {}),\n ...(signal ? { signal } : {}),\n });\n if (res.ok || accept.has(res.status)) return res;\n if (RETRYABLE.has(res.status) && attempt < retries) {\n await sleep(500 * 2 ** attempt + Math.random() * 250);\n continue;\n }\n throw await this.toError(path, res);\n } catch (err) {\n if (err instanceof CodaiError) throw err;\n lastErr = err;\n // Caller aborts are never retried.\n if (init.signal?.aborted) throw err;\n if (attempt < retries) {\n await sleep(500 * 2 ** attempt);\n continue;\n }\n }\n }\n throw new CodaiError(`codai ${path} failed after retries: ${String(lastErr)}`, 0, null);\n }\n\n async json<T>(path: string, init: RequestOptions = {}): Promise<T> {\n const res = await this.request(path, init);\n return (await res.json()) as T;\n }\n\n /**\n * Open a `text/event-stream` and iterate parsed frames. Frames are\n * `\\n\\n`-separated blocks; each yields `{ event, data }` where `event`\n * defaults to `message` and `data` is the joined `data:` payload (raw\n * string — the caller decides whether it is JSON or `[DONE]`). Comment\n * lines (`: ping`) are skipped. The stream is retried like any request\n * up to the first byte; after that errors propagate.\n */\n async *sse(\n path: string,\n init: RequestOptions = {},\n ): AsyncGenerator<SseFrame, Response, undefined> {\n const res = await this.request(path, {\n ...init,\n timeoutMs: init.timeoutMs ?? 0,\n noRetry: true,\n });\n yield* readSse(res, init.signal);\n return res;\n }\n\n private async toError(path: string, res: Response): Promise<CodaiError> {\n let body: unknown = null;\n try {\n body = await res.json();\n } catch {\n /* non-JSON error body */\n }\n const retryAfterRaw = res.headers.get('retry-after');\n const retryAfter = retryAfterRaw && /^\\d+$/.test(retryAfterRaw) ? Number(retryAfterRaw) : null;\n const message = extractMessage(body);\n return new CodaiError(\n message ? `codai ${path} → ${res.status}: ${message}` : `codai ${path} → ${res.status}`,\n res.status,\n body,\n {\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n retryAfter,\n },\n );\n }\n}\n\nexport interface SseFrame {\n /** `event:` name; `message` when the frame has none (OpenAI-style streams). */\n event: string;\n /** Joined `data:` lines (a multi-line data block is joined with `\\n`). */\n data: string;\n}\n\n/** Parse an SSE body into frames. Exported for the resources and for tests. */\nexport async function* readSse(res: Response, signal?: AbortSignal): AsyncGenerator<SseFrame> {\n const reader = res.body?.getReader();\n if (!reader) throw new CodaiError('no response body', res.status, null);\n const decoder = new TextDecoder();\n let buffer = '';\n const onAbort = () => void reader.cancel().catch(() => {});\n signal?.addEventListener('abort', onAbort, { once: true });\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // Normalise CRLF so both `\\n\\n` and `\\r\\n\\r\\n` delimit frames.\n buffer = buffer.replace(/\\r\\n/g, '\\n');\n const blocks = buffer.split('\\n\\n');\n buffer = blocks.pop() ?? '';\n for (const block of blocks) {\n const frame = parseSseBlock(block);\n if (frame) yield frame;\n }\n }\n const tail = buffer.trim() ? parseSseBlock(buffer) : null;\n if (tail) yield tail;\n } finally {\n signal?.removeEventListener('abort', onAbort);\n reader.releaseLock?.();\n }\n}\n\nfunction parseSseBlock(block: string): SseFrame | null {\n let event = 'message';\n const data: string[] = [];\n for (const line of block.split('\\n')) {\n if (!line || line.startsWith(':')) continue;\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n // `id:` / `retry:` are never emitted by the gateway; ignore anything else.\n }\n if (data.length === 0) return null;\n return { event, data: data.join('\\n') };\n}\n\n/** Parse a frame's data as JSON, returning `null` for `[DONE]` / non-JSON. */\nexport function frameJson<T = unknown>(frame: SseFrame): T | null {\n if (frame.data === '[DONE]') return null;\n try {\n return JSON.parse(frame.data) as T;\n } catch {\n return null;\n }\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n","/** `/v1/account`, `/v1/receipt`, `/v1/feedback`, `/v1/phone/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AccountView = Reply<'getAccount'>;\nexport type AccountPatchRequest = Mutable<Body<'patchAccount'>>;\nexport type AccountPatchResponse = Reply<'patchAccount'>;\nexport type Receipt = Reply<'getReceipt'>;\nexport type FeedbackRequest = Mutable<Body<'submitFeedback'>>;\nexport type FeedbackResponse = Reply<'submitFeedback'>;\nexport type PhoneModel = Schema<'AccountPhoneModel'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Account {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/account` — the full account card. */\n get(opts: CallOpts = {}): Promise<AccountView> {\n return this.http.json<AccountView>('/v1/account', { ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/account` — consents, username, referral (at least one field). */\n update(body: AccountPatchRequest, opts: CallOpts = {}): Promise<AccountPatchResponse> {\n return this.http.json<AccountPatchResponse>('/v1/account', {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Receipts {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `GET /v1/receipt` — spend receipt. `sessionId` wins over `since`; with\n * neither, the last 24 hours.\n */\n get(\n query: { sessionId?: string; since?: string | Date } = {},\n opts: CallOpts = {},\n ): Promise<Receipt> {\n return this.http.json<Receipt>('/v1/receipt', {\n query: {\n session_id: query.sessionId,\n since: query.since instanceof Date ? query.since.toISOString() : query.since,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Feedback {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `POST /v1/feedback` — rate one turn. Exactly one of `event_id`,\n * `session_id`, `client_request_id` must be present.\n */\n submit(body: FeedbackRequest, opts: CallOpts = {}): Promise<FeedbackResponse> {\n return this.http.json<FeedbackResponse>('/v1/feedback', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class PhoneModels {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/phone/models` — on-device model catalog with signed URLs. */\n async list(opts: CallOpts = {}): Promise<PhoneModel[]> {\n const raw = await this.http.json<Reply<'listPhoneModels'>>('/v1/phone/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.models ?? [])];\n }\n}\n","/** `/v1/agents/*` — synchronous runs and the persisted async run lifecycle. */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AgentRunRequest = Mutable<Body<'runAgentSync'>>;\nexport type AgentRunCreateRequest = Mutable<Body<'createAgentRun'>>;\nexport type AgentSyncResult = Reply<'runAgentSync'>;\nexport type AgentRunAccepted = Reply<'createAgentRun', 202>;\nexport type AgentRun = Reply<'getAgentRun'>;\nexport type AgentRunStep = Schema<'AgentRunStep'>;\nexport type AgentRunStats = Reply<'getAgentRunStats'>;\nexport type AgentRunStatus = Schema<'AgentRunStatus'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport interface AgentRunResult {\n result: string;\n model: string;\n /** Usage-event id — exact target for `feedback.submit`. */\n eventId: string | null;\n usage: AgentSyncResult['usage'] | null;\n raw: AgentSyncResult;\n headers: Headers;\n}\n\n/** SSE frames of `GET /v1/agents/runs/{id}/stream`. */\nexport type AgentRunStreamEvent =\n | {\n event: 'step';\n data: {\n seq: number;\n kind: 'plan' | 'tool_call' | 'observation' | 'answer';\n summary: string | null;\n };\n }\n | {\n event: 'done';\n data: {\n status: 'completed' | 'failed' | 'cancelled';\n result: string | null;\n error: string | null;\n step_count: number;\n };\n }\n | { event: 'timeout'; data: Record<string, never> };\n\nexport class AgentRuns {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/agents/runs` — returns 202 with the run id. */\n create(body: AgentRunCreateRequest, opts: CallOpts = {}): Promise<AgentRunAccepted> {\n return this.http.json<AgentRunAccepted>('/v1/agents/runs', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}` */\n get(id: string, opts: CallOpts = {}): Promise<AgentRun> {\n return this.http.json<AgentRun>(`/v1/agents/runs/${encodeURIComponent(id)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}/steps` — newest first. */\n async steps(id: string, opts: CallOpts = {}): Promise<AgentRunStep[]> {\n const raw = await this.http.json<Reply<'listAgentRunSteps'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/steps`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.steps ?? [])];\n }\n\n /** `GET /v1/agents/runs/stats?days=` */\n stats(days?: number, opts: CallOpts = {}): Promise<AgentRunStats> {\n return this.http.json<AgentRunStats>('/v1/agents/runs/stats', {\n query: { days },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/agents/runs/{id}/cancel` */\n cancel(id: string, opts: CallOpts = {}): Promise<Reply<'cancelAgentRun'>> {\n return this.http.json<Reply<'cancelAgentRun'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/cancel`,\n { method: 'POST', body: {}, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/agents/runs/{id}/stream` — async iterator over `step` / `done` /\n * `timeout` events. The iterator ends after `done`; on `timeout` (30 min)\n * it also ends and you may reconnect (full replay from seq 0).\n */\n async *stream(\n id: string,\n opts: CallOpts = {},\n ): AsyncGenerator<AgentRunStreamEvent, void, undefined> {\n const frames = this.http.sse(`/v1/agents/runs/${encodeURIComponent(id)}/stream`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n const ev = { event: frame.event, data } as AgentRunStreamEvent;\n yield ev;\n if (ev.event === 'done' || ev.event === 'timeout') return;\n }\n }\n}\n\nexport class Agents {\n readonly runs: AgentRuns;\n constructor(private readonly http: HttpClient) {\n this.runs = new AgentRuns(http);\n }\n\n /** `POST /v1/agents/run` — blocks until the agent loop finishes. */\n async run(body: AgentRunRequest, opts: CallOpts = {}): Promise<AgentRunResult> {\n const res = await this.http.request('/v1/agents/run', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as AgentSyncResult;\n return {\n result: String(raw.result ?? ''),\n model: String(raw.model ?? ''),\n eventId: raw.event_id ?? res.headers.get('x-codai-event-id'),\n usage: raw.usage ?? null,\n raw,\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/audio/transcriptions` and `POST /v1/audio/speech`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type TranscriptionResponse = Reply<'createTranscription'>;\nexport type SpeechRequest = Mutable<Body<'createSpeech'>>;\n\nexport interface TranscriptionOptions {\n /** Audio file contents (max 25 MB). */\n file: Blob | Uint8Array | ArrayBuffer;\n /** Filename hint (extension drives format detection). Default `audio.webm`. */\n filename?: string;\n /** Default `codai-transcribe`. */\n model?: string;\n /** ISO-639-1 language hint. */\n language?: string;\n /** Text to guide style or spelling. */\n prompt?: string;\n /** `json` (default) or `verbose_json`. */\n responseFormat?: 'json' | 'verbose_json';\n /** Sampling temperature 0–1. */\n temperature?: number;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface TranscriptionResult {\n text: string;\n raw: TranscriptionResponse;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport interface SpeechResult {\n /** Raw audio bytes in the requested format (mp3 by default). */\n audio: ArrayBuffer;\n /** Upstream `content-type` (`audio/mpeg` when the upstream sent none). */\n contentType: string;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport class Audio {\n constructor(private readonly http: HttpClient) {}\n\n /** Speech-to-text (multipart upload; never retried). Returns the transcript (0.2.x shape). */\n async transcribe(opts: TranscriptionOptions): Promise<string> {\n return (await this.transcribeDetailed(opts)).text;\n }\n\n /** Speech-to-text with the raw upstream JSON and routing headers. */\n async transcribeDetailed(opts: TranscriptionOptions): Promise<TranscriptionResult> {\n const form = new FormData();\n const blob = opts.file instanceof Blob ? opts.file : new Blob([opts.file as BlobPart]);\n form.append('file', blob, opts.filename ?? 'audio.webm');\n form.append('model', opts.model ?? 'codai-transcribe');\n if (opts.language) form.append('language', opts.language);\n if (opts.prompt) form.append('prompt', opts.prompt);\n if (opts.responseFormat) form.append('response_format', opts.responseFormat);\n if (opts.temperature !== undefined) form.append('temperature', String(opts.temperature));\n const res = await this.http.request('/v1/audio/transcriptions', {\n method: 'POST',\n rawBody: form,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as TranscriptionResponse;\n return {\n text: typeof raw.text === 'string' ? raw.text : '',\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n /** Text-to-speech. Returns the raw audio bytes (0.2.x shape); see `speechDetailed()` for headers. */\n async speech(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<ArrayBuffer> {\n return (await this.speechDetailed(body, opts)).audio;\n }\n\n /** Text-to-speech with the upstream `content-type` and routing headers. */\n async speechDetailed(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SpeechResult> {\n const res = await this.http.request('/v1/audio/speech', {\n body: { ...body, model: body.model ?? 'codai-tts', voice: body.voice ?? 'alloy' },\n ext: opts.ext,\n signal: opts.signal,\n });\n return {\n audio: await res.arrayBuffer(),\n contentType: res.headers.get('content-type') ?? 'audio/mpeg',\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/chat/completions` — OpenAI-compatible completions (JSON + SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type ChatCompletionRequest = Mutable<Body<'createChatCompletion'>>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type ChatCompletionInput = Omit<ChatCompletionRequest, 'stream' | 'model'> & {\n model?: string;\n};\nexport type ChatCompletionResponse = Reply<'createChatCompletion'>;\nexport type ChatMessage = Mutable<Schema<'ChatMessage'>>;\nexport type ChatTool = Mutable<Schema<'ChatTool'>>;\nexport type ChatToolCall = Mutable<Schema<'ChatToolCall'>>;\nexport type ChatUsage = Schema<'ChatUsage'>;\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n /** Prompt tokens served from the provider cache, when reported. */\n cachedTokens?: number;\n}\n\n/** Per-call options accepted by every chat method. */\nexport interface ChatCallOptions {\n /** `X-Codai-*` extension headers for this call. */\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface ChatResult {\n /** Assistant message content (first choice). */\n content: string;\n /** Tool calls on the first choice (empty if none). */\n toolCalls: ChatToolCall[];\n /** Raw OpenAI-shaped response. */\n raw: ChatCompletionResponse;\n /** Request id (`x-codai-trace-id` / `x-request-id`) — pass to `feedback`. */\n requestId: string | null;\n /** Usage-event id (`x-codai-event-id`) — exact target for `feedback.submit`. */\n eventId: string | null;\n /** Which upstream model actually served (`x-codai-routed-to`). */\n routedTo: string | null;\n /** Verification status for verified-execution responses, if present. */\n execVerify: string | null;\n usage: TokenUsage | null;\n /** Response headers, for the long tail of `x-codai-*` metadata. */\n headers: Headers;\n}\n\n/** Final metadata for a completed stream — resolved via `stream.final`. */\nexport interface ChatStreamResult {\n content: string;\n toolCalls: ChatToolCall[];\n requestId: string | null;\n routedTo: string | null;\n execVerify: string | null;\n usage: TokenUsage | null;\n /** `finish_reason` of the last content chunk, when sent. */\n finishReason: string | null;\n headers: Headers | null;\n}\n\n/**\n * A live chat stream. Async-iterate it for text deltas, then await `.final`\n * for metadata. `.chunks()` yields the raw `chat.completion.chunk` objects.\n */\nexport interface ChatStream extends AsyncIterable<string> {\n readonly final: Promise<ChatStreamResult>;\n chunks(): AsyncIterable<ChatCompletionChunk>;\n}\n\nexport interface ChatCompletionChunk {\n id?: string;\n object?: 'chat.completion.chunk';\n model?: string;\n choices?: Array<{\n index?: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{ index?: number } & Record<string, unknown>>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n };\n [key: string]: unknown;\n}\n\nfunction toUsage(u: ChatCompletionChunk['usage'] | undefined): TokenUsage | null {\n if (!u) return null;\n const cached = u.prompt_tokens_details?.cached_tokens;\n return {\n promptTokens: u.prompt_tokens ?? 0,\n completionTokens: u.completion_tokens ?? 0,\n ...(cached !== undefined ? { cachedTokens: cached } : {}),\n };\n}\n\n/**\n * Merge a streamed tool-call fragment into the accumulator at `index`.\n * OpenAI streams tool calls piecewise: id/name arrive first, then the\n * `arguments` string is appended across many deltas.\n */\nexport function mergeToolCall(\n acc: Map<number, Record<string, unknown>>,\n index: number,\n fragment: Record<string, unknown>,\n): void {\n const existing = acc.get(index) ?? { index };\n for (const [key, val] of Object.entries(fragment)) {\n if (key === 'index') continue;\n if (key === 'function' && val && typeof val === 'object') {\n const fn = (existing.function as Record<string, unknown>) ?? {};\n for (const [fk, fv] of Object.entries(val as Record<string, unknown>)) {\n if (fk === 'arguments') fn.arguments = String(fn.arguments ?? '') + String(fv ?? '');\n else fn[fk] = fv;\n }\n existing.function = fn;\n } else {\n existing[key] = val;\n }\n }\n acc.set(index, existing);\n}\n\nexport class ChatCompletions {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Non-streaming completion. `stream` is forced to `false`; use\n * `stream()` for SSE.\n */\n async create(body: ChatCompletionInput, opts: ChatCallOptions = {}): Promise<ChatResult> {\n const res = await this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as ChatCompletionResponse;\n const first = raw.choices?.[0];\n const usage = raw.usage as ChatCompletionChunk['usage'] | undefined;\n return {\n content: typeof first?.message?.content === 'string' ? first.message.content : '',\n toolCalls: [...((first?.message?.tool_calls ?? []) as ChatToolCall[])],\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n eventId: res.headers.get('x-codai-event-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n execVerify: res.headers.get('x-codai-exec-verify'),\n usage: toUsage(usage),\n headers: res.headers,\n };\n }\n\n /** Streaming completion (`stream: true`). */\n stream(body: ChatCompletionInput, opts: ChatCallOptions = {}): ChatStream {\n const requestPromise = this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: ChatStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<ChatStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {}); // no unhandled-rejection noise when `final` is never awaited\n\n const toolCallsByIndex = new Map<number, Record<string, unknown>>();\n let content = '';\n let usage: TokenUsage | null = null;\n let finishReason: string | null = null;\n let res: Response | null = null;\n\n const buildResult = (): ChatStreamResult => ({\n content,\n toolCalls: [...toolCallsByIndex.values()] as ChatToolCall[],\n requestId: res?.headers.get('x-codai-trace-id') ?? res?.headers.get('x-request-id') ?? null,\n routedTo: res?.headers.get('x-codai-routed-to') ?? null,\n execVerify: res?.headers.get('x-codai-exec-verify') ?? null,\n usage,\n finishReason,\n headers: res?.headers ?? null,\n });\n\n async function* chunks(): AsyncGenerator<ChatCompletionChunk, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n if (frame.data === '[DONE]') break;\n const chunk = frameJson<ChatCompletionChunk>(frame);\n if (!chunk) continue;\n if (chunk.usage) usage = toUsage(chunk.usage);\n const choice = chunk.choices?.[0];\n if (choice?.finish_reason) finishReason = choice.finish_reason;\n const delta = choice?.delta;\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n mergeToolCall(toolCallsByIndex, typeof tc.index === 'number' ? tc.index : 0, tc);\n }\n }\n if (delta?.content) content += delta.content;\n yield chunk;\n }\n resolveFinal(buildResult());\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* text(): AsyncGenerator<string, void, undefined> {\n for await (const chunk of chunks()) {\n const delta = chunk.choices?.[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => text(),\n chunks: () => ({ [Symbol.asyncIterator]: () => chunks() }),\n final,\n };\n }\n}\n\nexport class Chat {\n readonly completions: ChatCompletions;\n constructor(http: HttpClient) {\n this.completions = new ChatCompletions(http);\n }\n}\n","/** `/v1/devices/*` — devices bound to your account + the aggregated dispatch inbox. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Device = Schema<'DeviceListItem'>;\nexport type DevicePatch = Mutable<Body<'updateDevice'>>;\nexport type DevicePatched = Reply<'updateDevice'>;\nexport type DispatchInbox = Reply<'getMyDispatchInbox'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Devices {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/devices` — most recently seen first. */\n async list(opts: CallOpts = {}): Promise<Device[]> {\n const raw = await this.http.json<Reply<'listDevices'>>('/v1/devices', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.devices ?? [])];\n }\n\n /** `PATCH /v1/devices/{id}` — push token and/or capabilities. */\n update(id: string, body: DevicePatch, opts: CallOpts = {}): Promise<DevicePatched> {\n return this.http.json<DevicePatched>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/devices/{id}` */\n delete(id: string, opts: CallOpts = {}): Promise<Reply<'deleteDevice'>> {\n return this.http.json<Reply<'deleteDevice'>>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/devices/me/dispatch?limit=` — pending controls dispatched at the\n * calling device (`x-codai-device` required) across all owned sessions.\n */\n dispatchInbox(query: { limit?: number } = {}, opts: CallOpts = {}): Promise<DispatchInbox> {\n return this.http.json<DispatchInbox>('/v1/devices/me/dispatch', {\n query: { limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `POST /v1/embeddings`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type EmbeddingsRequest = Mutable<Body<'createEmbeddings'>>;\nexport type EmbeddingsResponse = Reply<'createEmbeddings'>;\n\nexport interface EmbeddingsResult {\n /** One vector per input, in order. */\n embeddings: number[][];\n raw: EmbeddingsResponse;\n /** Upstream embedding model that produced the vectors (`x-codai-routed-to`). */\n routedTo: string | null;\n /** `<requested>-><served>` when a different model was substituted; vectors live in another space. */\n fallback: string | null;\n headers: Headers;\n}\n\nexport class Embeddings {\n constructor(private readonly http: HttpClient) {}\n\n async create(\n body: Omit<EmbeddingsRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<EmbeddingsResult> {\n const res = await this.http.request('/v1/embeddings', {\n body: { ...body, model: body.model ?? 'codai-embed' },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as EmbeddingsResponse;\n return {\n embeddings: (raw.data ?? []).map((d) => [...(d.embedding as readonly number[])]),\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n fallback: res.headers.get('x-codai-embed-fallback'),\n headers: res.headers,\n };\n }\n}\n","/** `/v1/environments/*` — cloud / BYO dev environments, their members, ports and secrets. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Environment = Schema<'Environment'>;\nexport type EnvironmentDetail = Schema<'EnvironmentDetail'>;\nexport type EnvironmentState = Schema<'EnvironmentState'>;\nexport type EnvironmentProvider = Schema<'EnvironmentProvider'>;\nexport type EnvironmentRole = Schema<'EnvironmentRole'>;\nexport type EnvironmentTransition = Schema<'EnvironmentTransition'>;\nexport type EnvironmentEnrollToken = Schema<'EnvironmentEnrollToken'>;\nexport type EnvironmentEnrolled = Schema<'EnvironmentEnrolled'>;\nexport type EnvironmentMember = Schema<'EnvironmentMember'>;\nexport type EnvironmentMemberCreated = Schema<'EnvironmentMemberCreated'>;\nexport type EnvironmentPort = Schema<'EnvironmentPort'>;\nexport type EnvironmentSecret = Schema<'EnvironmentSecret'>;\nexport type EnvironmentSecretSet = Schema<'EnvironmentSecretSet'>;\nexport type EnvironmentCreateBody = Mutable<Body<'createEnvironment'>>;\nexport type EnvironmentPatchBody = Mutable<Body<'updateEnvironment'>>;\nexport type EnvironmentEnrollBody = Mutable<Body<'enrollEnvironment'>>;\nexport type EnvironmentAddMemberBody = Mutable<Body<'addEnvironmentMember'>>;\nexport type EnvironmentPortBody = Mutable<Body<'setEnvironmentPort'>>;\nexport type ListEnvironmentsQuery = Mutable<QueryOf<'listEnvironments'>>;\nexport type EnvironmentSshCert = Reply<'issueMyEnvironmentSshCert'>;\nexport type EnvironmentSshCertBody = Mutable<Body<'issueMyEnvironmentSshCert'>>;\nexport type EnvironmentSshCa = Reply<'getEnvironmentSshCa'>;\nexport type EnvironmentTaskList = Reply<'listEnvironmentTasks'>;\nexport type EnvironmentTaskCreateBody = Mutable<Body<'createEnvironmentTask'>>;\nexport type EnvironmentTaskCreated = Reply<'createEnvironmentTask'>;\nexport type EnvironmentTaskDetail = Reply<'getEnvironmentTask'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nconst envPath = (id: string, suffix = ''): string =>\n `/v1/environments/${encodeURIComponent(id)}${suffix}`;\n\nexport class EnvironmentMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/members` — any role. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentMember[]> {\n const raw = await this.http.json<Reply<'listEnvironmentMembers'>>(envPath(envId, '/members'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/environments/{id}/members` — exactly one of `user_id` / `email`. */\n async add(\n envId: string,\n body: EnvironmentAddMemberBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentMemberCreated> {\n const raw = await this.http.json<Reply<'addEnvironmentMember', 201>>(\n envPath(envId, '/members'),\n { body, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `PUT /v1/environments/{id}/members/me/ssh-key` — one `authorized_keys` line. */\n setSshKey(\n envId: string,\n publicKey: string,\n opts: CallOpts = {},\n ): Promise<Reply<'setMyEnvironmentSshKey'>> {\n const body: Mutable<Body<'setMyEnvironmentSshKey'>> = { public_key: publicKey };\n return this.http.json<Reply<'setMyEnvironmentSshKey'>>(envPath(envId, '/members/me/ssh-key'), {\n method: 'PUT',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}/members/{userId}` — 409 `last_owner` on demoting the last owner. */\n async setRole(\n envId: string,\n userId: string,\n role: EnvironmentRole,\n opts: CallOpts = {},\n ): Promise<Reply<'setEnvironmentMemberRole'>['member']> {\n const raw = await this.http.json<Reply<'setEnvironmentMemberRole'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'PATCH', body: { role }, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `DELETE /v1/environments/{id}/members/{userId}` — pass your own id to leave. */\n remove(\n envId: string,\n userId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentMember'>> {\n return this.http.json<Reply<'removeEnvironmentMember'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `POST /v1/environments/{id}/members/me/ssh-cert` — 12 h OpenSSH user certificate for your key. */\n sshCert(envId: string, body: EnvironmentSshCertBody, opts: CallOpts = {}): Promise<EnvironmentSshCert> {\n return this.http.json<EnvironmentSshCert>(envPath(envId, '/members/me/ssh-cert'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n}\n\n/** `/v1/environments/{id}/tasks` — fire-and-forget agent tasks run in the environment. */\nexport class EnvironmentTasks {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/tasks` */\n list(envId: string, opts: CallOpts = {}): Promise<EnvironmentTaskList> {\n return this.http.json<EnvironmentTaskList>(envPath(envId, '/tasks'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/environments/{id}/tasks` — queued; you get a notification when it finishes. */\n create(envId: string, body: EnvironmentTaskCreateBody, opts: CallOpts = {}): Promise<EnvironmentTaskCreated> {\n return this.http.json<EnvironmentTaskCreated>(envPath(envId, '/tasks'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}/tasks/{taskId}` */\n get(envId: string, taskId: string, opts: CallOpts = {}): Promise<EnvironmentTaskDetail> {\n return this.http.json<EnvironmentTaskDetail>(envPath(envId, `/tasks/${encodeURIComponent(taskId)}`), { ext: opts.ext, signal: opts.signal });\n }\n}\n\nexport class EnvironmentPorts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/ports` — published (forwarded) ports. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentPort[]> {\n const raw = await this.http.json<Reply<'listEnvironmentPorts'>>(envPath(envId, '/ports'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.ports ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/ports/{port}` — publish or change visibility (upsert). */\n async set(\n envId: string,\n port: number,\n body: EnvironmentPortBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentPort> {\n const raw = await this.http.json<Reply<'setEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.port;\n }\n\n /** `DELETE /v1/environments/{id}/ports/{port}` — unpublish. */\n remove(\n envId: string,\n port: number,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentPort'>> {\n return this.http.json<Reply<'removeEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class EnvironmentSecrets {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/secrets` — names and timestamps only, never values. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentSecret[]> {\n const raw = await this.http.json<Reply<'listEnvironmentSecrets'>>(envPath(envId, '/secrets'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.secrets ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/secrets/{name}` — upsert; `name` is `ENV_STYLE`. */\n set(\n envId: string,\n name: string,\n value: string,\n opts: CallOpts = {},\n ): Promise<EnvironmentSecretSet> {\n const body: Mutable<Body<'setEnvironmentSecret'>> = { value };\n return this.http.json<EnvironmentSecretSet>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/environments/{id}/secrets/{name}` */\n remove(\n envId: string,\n name: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentSecret'>> {\n return this.http.json<Reply<'removeEnvironmentSecret'>>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Environments {\n readonly members: EnvironmentMembers;\n readonly ports: EnvironmentPorts;\n readonly secrets: EnvironmentSecrets;\n readonly tasks: EnvironmentTasks;\n\n constructor(private readonly http: HttpClient) {\n this.members = new EnvironmentMembers(http);\n this.ports = new EnvironmentPorts(http);\n this.secrets = new EnvironmentSecrets(http);\n this.tasks = new EnvironmentTasks(http);\n }\n\n /** `GET /v1/environments/{id}/ssh-ca` — CA public keys to trust (`@cert-authority` lines). */\n sshCa(envId: string, opts: CallOpts = {}): Promise<EnvironmentSshCa> {\n return this.http.json<EnvironmentSshCa>(envPath(envId, '/ssh-ca'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/environments?project_id=&for_user_id=me` — newest first, every state. */\n async list(query: ListEnvironmentsQuery = {}, opts: CallOpts = {}): Promise<Environment[]> {\n const raw = await this.http.json<Reply<'listEnvironments'>>('/v1/environments', {\n query: { project_id: query.project_id, for_user_id: query.for_user_id },\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.environments ?? [])];\n }\n\n /**\n * `POST /v1/environments` — `byo` starts `pending`; managed providers start\n * `creating`. 409 `already_has_env` in a `vm_per_dev` project (the error\n * body carries the `environment_id` to reuse).\n */\n async create(body: EnvironmentCreateBody, opts: CallOpts = {}): Promise<Environment> {\n const raw = await this.http.json<Reply<'createEnvironment', 201>>('/v1/environments', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n return raw.environment;\n }\n\n /**\n * `POST /v1/environments/enroll` — daemon side. The one-time `codai_env_…`\n * token in the body is the only credential; the client's API key header is\n * ignored by this route. Managed environments additionally receive a\n * freshly minted `api_key`, returned exactly once.\n */\n enroll(body: EnvironmentEnrollBody, opts: CallOpts = {}): Promise<EnvironmentEnrolled> {\n return this.http.json<EnvironmentEnrolled>('/v1/environments/enroll', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n // The token is consumed on success; a retried POST would 401.\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}` — environment, your role, members, ports, recent events. */\n get(envId: string, opts: CallOpts = {}): Promise<EnvironmentDetail> {\n return this.http.json<EnvironmentDetail>(envPath(envId), {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}` — `name` and/or `idle_timeout_minutes` (5..1440). */\n async update(\n envId: string,\n body: EnvironmentPatchBody,\n opts: CallOpts = {},\n ): Promise<Environment> {\n const raw = await this.http.json<Reply<'updateEnvironment'>>(envPath(envId), {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.environment;\n }\n\n /** `POST /v1/environments/{id}/start` — managed providers only (`stopped` → `starting`). */\n start(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'start', opts);\n }\n\n /** `POST /v1/environments/{id}/stop` — managed providers only (`running` → `stopping`). */\n stop(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'stop', opts);\n }\n\n /** `POST /v1/environments/{id}/archive` — keeps history, releases the machine. */\n archive(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'archive', opts);\n }\n\n /** `POST /v1/environments/{id}/destroy` — owner only; terminal. */\n destroy(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'destroy', opts);\n }\n\n /**\n * `POST /v1/environments/{id}/enroll-token` — `byo` only; a 30-minute\n * one-time token for `enroll()`. Minting again replaces the previous one.\n */\n enrollToken(envId: string, opts: CallOpts = {}): Promise<EnvironmentEnrollToken> {\n return this.http.json<EnvironmentEnrollToken>(envPath(envId, '/enroll-token'), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n private transition(\n envId: string,\n action: 'start' | 'stop' | 'archive' | 'destroy',\n opts: CallOpts,\n ): Promise<EnvironmentTransition> {\n return this.http.json<EnvironmentTransition>(envPath(envId, `/${action}`), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** Unauthenticated probes at the root: `/health`, `/health/ready`, `/status`. */\nimport { type HttpClient } from '../http';\nimport { type Reply } from './_shared';\n\nexport type HealthResponse = Reply<'getHealth'>;\nexport type HealthReadyResponse = Reply<'getHealthReady'>;\nexport type StatusResponse = Reply<'getStatus'>;\n\nexport class Health {\n constructor(private readonly http: HttpClient) {}\n\n /** Liveness probe. */\n get(opts: { signal?: AbortSignal } = {}): Promise<HealthResponse> {\n return this.http.json<HealthResponse>('/health', { signal: opts.signal, noRetry: true });\n }\n\n /**\n * Deep readiness probe. A 503 is returned as `{ ok: false, ... }` rather\n * than thrown, so callers can read the failing check.\n */\n async ready(\n opts: { signal?: AbortSignal } = {},\n ): Promise<HealthReadyResponse & { httpStatus: number }> {\n const res = await this.http.request('/health/ready', {\n signal: opts.signal,\n noRetry: true,\n acceptStatus: [503],\n });\n const body = (await res.json()) as HealthReadyResponse;\n return { ...body, httpStatus: res.status };\n }\n\n /** Registry snapshot (aliases + provider health). */\n status(opts: { signal?: AbortSignal } = {}): Promise<StatusResponse> {\n return this.http.json<StatusResponse>('/status', { signal: opts.signal, noRetry: true });\n }\n}\n","/** `/v1/hosts/*` — host relay (desktop announces itself; clients exec ops on it). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type HostPresence = Schema<'HostPresence'>;\nexport type HostOp = Schema<'HostOp'>;\nexport type HostExecBody = Mutable<Body<'execOnHost'>>;\nexport type HostExecResponse = Reply<'execOnHost'>;\nexport type HostExecRequest = Schema<'HostExecRequest'>;\nexport type HostExecResultBody = Mutable<Body<'postHostExecResult'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\n/** Frames of `GET /v1/hosts/stream`. */\nexport type HostStreamEvent =\n | { event: 'hello'; data: { device_id: string; heartbeat_ms: number } }\n | { event: 'ping'; data: { t: number } }\n | { event: 'exec'; data: HostExecRequest }\n | { event: string; data: Record<string, unknown> };\n\nexport class Hosts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/hosts` — your devices currently connected as hosts. */\n async list(opts: CallOpts = {}): Promise<HostPresence[]> {\n const raw = await this.http.json<Reply<'listHosts'>>('/v1/hosts', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.hosts ?? [])];\n }\n\n /**\n * `POST /v1/hosts/{deviceId}/exec` — run one op on a connected host and\n * block until it answers (or `timeout_ms`, default 60 s).\n */\n exec(\n deviceId: string,\n op: HostOp,\n args: Record<string, unknown> = {},\n extra: { timeoutMs?: number; label?: string } & CallOpts = {},\n ): Promise<HostExecResponse> {\n const body: HostExecBody = {\n op,\n args,\n ...(extra.timeoutMs !== undefined ? { timeout_ms: extra.timeoutMs } : {}),\n ...(extra.label !== undefined ? { label: extra.label } : {}),\n };\n return this.http.json<HostExecResponse>(`/v1/hosts/${encodeURIComponent(deviceId)}/exec`, {\n body,\n ext: extra.ext,\n signal: extra.signal,\n // The gateway itself waits up to timeout_ms + 2 s; give the HTTP layer headroom.\n timeoutMs: (extra.timeoutMs ?? 60_000) + 10_000,\n noRetry: true,\n });\n }\n\n /** `POST /v1/hosts/exec/{reqId}/result` — host side: deliver an exec result. */\n postResult(\n reqId: string,\n body: HostExecResultBody,\n opts: CallOpts = {},\n ): Promise<Reply<'postHostExecResult'>> {\n return this.http.json<Reply<'postHostExecResult'>>(\n `/v1/hosts/exec/${encodeURIComponent(reqId)}/result`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/hosts/stream?os=&hostname=&roots=` — host side: announce this\n * device and receive `hello` / `ping` / `exec` events. Closed by the server\n * after 6 h; reconnect to re-announce presence.\n */\n async *stream(\n query: { os?: string; hostname?: string; roots?: string[] } = {},\n opts: CallOpts = {},\n ): AsyncGenerator<HostStreamEvent, void, undefined> {\n const frames = this.http.sse('/v1/hosts/stream', {\n query: {\n os: query.os,\n hostname: query.hostname,\n roots: query.roots?.length ? query.roots.join(',') : undefined,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n yield { event: frame.event, data } as HostStreamEvent;\n }\n }\n}\n","/** `POST /v1/messages` — Anthropic Messages wire (JSON + named-event SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type MessageRequest = Mutable<Body<'createMessage'>>;\nexport type MessageResponse = Reply<'createMessage'>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type MessageInput = Omit<MessageRequest, 'stream' | 'model'> & { model?: string };\n\nexport interface MessageCallOptions {\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface MessageResult {\n /** Concatenated `text` blocks of the reply. */\n text: string;\n raw: MessageResponse;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers;\n}\n\n/** One Anthropic streaming event: `event.type` mirrors the SSE `event:` name. */\nexport interface MessageStreamEvent {\n type:\n | 'message_start'\n | 'content_block_start'\n | 'content_block_delta'\n | 'content_block_stop'\n | 'message_delta'\n | 'message_stop'\n | 'ping'\n | 'error'\n | (string & {});\n [key: string]: unknown;\n}\n\nexport interface MessageStreamResult {\n /** Concatenated `text_delta` payloads. */\n text: string;\n /** Final `stop_reason` from `message_delta`, when sent. */\n stopReason: string | null;\n /** Cumulative usage: `input_tokens` from `message_start`, `output_tokens` from `message_delta`. */\n usage: { inputTokens: number; outputTokens: number } | null;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers | null;\n}\n\nexport interface MessageStream extends AsyncIterable<MessageStreamEvent> {\n readonly final: Promise<MessageStreamResult>;\n /** Text deltas only. */\n text(): AsyncIterable<string>;\n}\n\nexport class Messages {\n constructor(private readonly http: HttpClient) {}\n\n async create(body: MessageInput, opts: MessageCallOptions = {}): Promise<MessageResult> {\n const res = await this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as MessageResponse;\n const text = (raw.content ?? [])\n .map((b) => (b.type === 'text' && typeof b.text === 'string' ? b.text : ''))\n .join('');\n return {\n text,\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n stream(body: MessageInput, opts: MessageCallOptions = {}): MessageStream {\n const requestPromise = this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: MessageStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<MessageStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {});\n\n let text = '';\n let stopReason: string | null = null;\n let inputTokens: number | null = null;\n let outputTokens: number | null = null;\n let res: Response | null = null;\n\n async function* events(): AsyncGenerator<MessageStreamEvent, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n const ev = frameJson<MessageStreamEvent>(frame);\n if (!ev) continue;\n if (typeof ev.type !== 'string') ev.type = frame.event;\n if (ev.type === 'message_start') {\n const usage = (ev.message as { usage?: { input_tokens?: number } } | undefined)?.usage;\n if (usage?.input_tokens !== undefined) inputTokens = usage.input_tokens;\n } else if (ev.type === 'content_block_delta') {\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && typeof delta.text === 'string') text += delta.text;\n } else if (ev.type === 'message_delta') {\n const delta = ev.delta as { stop_reason?: string | null } | undefined;\n if (delta?.stop_reason) stopReason = delta.stop_reason;\n const usage = ev.usage as { output_tokens?: number } | undefined;\n if (usage?.output_tokens !== undefined) outputTokens = usage.output_tokens;\n }\n yield ev;\n if (ev.type === 'message_stop') break;\n }\n resolveFinal({\n text,\n stopReason,\n usage:\n inputTokens !== null || outputTokens !== null\n ? { inputTokens: inputTokens ?? 0, outputTokens: outputTokens ?? 0 }\n : null,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id') ?? null,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n });\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* textOnly(): AsyncGenerator<string, void, undefined> {\n for await (const ev of events()) {\n if (ev.type !== 'content_block_delta') continue;\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && delta.text) yield delta.text;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => events(),\n text: () => ({ [Symbol.asyncIterator]: () => textOnly() }),\n final,\n };\n }\n}\n","/** `GET /v1/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Reply, type Schema } from './_shared';\n\nexport type Model = Schema<'CoreModel'>;\nexport type ModelList = Reply<'listModels'>;\n\nexport class Models {\n constructor(private readonly http: HttpClient) {}\n\n /** Every model the calling key may address (OpenAI list shape, `data[]`). */\n async list(opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {}): Promise<Model[]> {\n const raw = await this.http.json<ModelList>('/v1/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.data ?? [])];\n }\n}\n","/** `/v1/orgs/*` — the orgs (teams) you belong to and their members. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Org = Schema<'OrgWithRole'>;\nexport type OrgMember = Schema<'OrgMember'>;\nexport type OrgRole = Schema<'OrgRole'>;\nexport type OrgAddMemberBody = Mutable<Body<'addOrgMember'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class OrgMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/orgs/{id}/members` */\n async list(orgId: string, opts: CallOpts = {}): Promise<OrgMember[]> {\n const raw = await this.http.json<Reply<'listOrgMembers'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/orgs/{id}/members` — add or re-role (owner/admin). */\n add(\n orgId: string,\n body: OrgAddMemberBody,\n opts: CallOpts = {},\n ): Promise<Reply<'addOrgMember', 201>> {\n return this.http.json<Reply<'addOrgMember', 201>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/orgs/{id}/members/{userId}` */\n remove(orgId: string, userId: string, opts: CallOpts = {}): Promise<Reply<'removeOrgMember'>> {\n return this.http.json<Reply<'removeOrgMember'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members/${encodeURIComponent(userId)}`,\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Orgs {\n readonly members: OrgMembers;\n constructor(private readonly http: HttpClient) {\n this.members = new OrgMembers(http);\n }\n\n /** `POST /v1/orgs` */\n create(name: string, opts: CallOpts = {}): Promise<Org> {\n return this.http.json<Org>('/v1/orgs', { body: { name }, ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/orgs` */\n async list(opts: CallOpts = {}): Promise<Org[]> {\n const raw = await this.http.json<Reply<'listOrgs'>>('/v1/orgs', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.orgs ?? [])];\n }\n}\n","/** `/v1/projects/*` — projects (a repo + isolation policy) that group environments. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Project = Schema<'Project'>;\nexport type ProjectIsolation = Schema<'ProjectIsolation'>;\nexport type ProjectCreateBody = Mutable<Body<'createProject'>>;\nexport type ProjectPatchBody = Mutable<Body<'updateProject'>>;\nexport type ProjectDetail = Reply<'getProject'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Projects {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/projects` — projects you own plus those of your orgs, newest first. */\n async list(opts: CallOpts = {}): Promise<Project[]> {\n const raw = await this.http.json<Reply<'listProjects'>>('/v1/projects', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.projects ?? [])];\n }\n\n /** `POST /v1/projects` — 409 `slug_taken` when the slug is already yours. */\n async create(body: ProjectCreateBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'createProject', 201>>('/v1/projects', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.project;\n }\n\n /** `GET /v1/projects/{id}` — the project plus every environment in it. */\n get(projectId: string, opts: CallOpts = {}): Promise<ProjectDetail> {\n return this.http.json<ProjectDetail>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/projects/{id}` — owner or org owner/admin; the slug cannot change. */\n async update(projectId: string, body: ProjectPatchBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'updateProject'>>(\n `/v1/projects/${encodeURIComponent(projectId)}`,\n { method: 'PATCH', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.project;\n }\n\n /** `DELETE /v1/projects/{id}` — 409 `project_has_environments` until all are destroyed. */\n delete(projectId: string, opts: CallOpts = {}): Promise<Reply<'deleteProject'>> {\n return this.http.json<Reply<'deleteProject'>>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/**\n * codai Resolve — execution-verified bug fixes, no fix no fee\n * (`https://resolve.codai.ro`, spec `apps/docs/openapi/en/resolve.yaml`).\n *\n * Resolve is a separate service from the gateway: it has its own host and a\n * flat `{ error: string }` error shape, so it gets its own `HttpClient` and\n * maps failures to `ResolveError` / `ResolveInsufficientFundsError`.\n */\nimport type { components } from '../generated/resolve';\nimport { CodaiError, type HttpClient, type RequestOptions } from '../http';\nimport { type Mutable } from './_shared';\n\ntype ResolveSchemas = components['schemas'];\n\nexport type ResolveIntake = Mutable<ResolveSchemas['ResolveIntake']>;\nexport type ResolveQuote = ResolveSchemas['ResolveQuote'];\nexport type ResolveDeclined = ResolveSchemas['ResolveDeclined'];\n/** `submit()` result: `201` quote / free-tier auto-accept, or `200` decline. */\nexport type ResolveSubmitResult = ResolveQuote | ResolveDeclined;\nexport type ResolveAccepted = ResolveSchemas['ResolveAccepted'];\nexport type ResolveJob = ResolveSchemas['ResolveJob'];\nexport type ResolveJobStatus = ResolveSchemas['ResolveJobStatus'];\nexport type ResolveTier = ResolveSchemas['ResolveTier'];\nexport type ResolveAttestation = ResolveSchemas['ResolveAttestation'];\n/** DSSE v1 envelope in `ResolveAttestation.signature` (`null` = unsigned, pre-2026-09-27). */\nexport type ResolveAttestationEnvelope = ResolveSchemas['ResolveAttestationEnvelope'];\nexport type ResolveKeys = ResolveSchemas['ResolveKeys'];\nexport type ResolveKey = ResolveSchemas['ResolveKey'];\nexport type ResolveReproTest = ResolveSchemas['ResolveReproTest'];\nexport type ResolveHealth = ResolveSchemas['ResolveHealth'];\nexport type ResolveValidationDetails = ResolveSchemas['ResolveValidationDetails'];\nexport type ResolveInsufficientFunds = ResolveSchemas['ResolveInsufficientFunds'];\n/** Body POSTed to `callback_url` (verify with `verifyResolveWebhook` first). */\nexport type ResolveWebhookEvent = ResolveSchemas['ResolveWebhookEvent'];\nexport type ResolveWebhookEventName = ResolveSchemas['ResolveWebhookEventName'];\nexport type ResolveWebhookJob = ResolveSchemas['ResolveWebhookJob'];\n\nexport interface VerifyResolveWebhookOptions {\n /** Maximum age (and future skew) of `t`, in seconds. Default 300. */\n toleranceSeconds?: number;\n /** Current unix time in seconds (tests). Default `Date.now() / 1000`. */\n nowSeconds?: number;\n}\n\n/**\n * Verify a Resolve webhook delivery: `x-codai-signature: t=<unix>,v1=<hex>`\n * with `v1 = HMAC-SHA256(callback_secret, \"<t>.<rawBody>\")`. Pass the RAW\n * request body (before JSON parsing). Constant-time compare; rejects a\n * timestamp outside `toleranceSeconds`. Returns `false` for any bad input.\n *\n * Server-side only: uses `node:crypto` (Node 20.16+/22.3+, Bun, Deno), loaded\n * lazily so the rest of the SDK still bundles for browsers and edge runtimes.\n * Throws only when `node:crypto` is unavailable in the current runtime.\n */\nexport function verifyResolveWebhook(\n secret: string,\n rawBody: string | Uint8Array,\n signatureHeader: string | null | undefined,\n opts: VerifyResolveWebhookOptions = {},\n): boolean {\n if (!secret || !signatureHeader) return false;\n let t: string | undefined;\n const v1s: string[] = [];\n for (const part of signatureHeader.split(',')) {\n const eq = part.indexOf('=');\n if (eq === -1) continue;\n const k = part.slice(0, eq).trim();\n const v = part.slice(eq + 1).trim();\n if (k === 't') t = v;\n else if (k === 'v1') v1s.push(v.toLowerCase());\n }\n if (!t || !/^\\d+$/.test(t) || v1s.length === 0) return false;\n const tolerance = opts.toleranceSeconds ?? 300;\n const now = opts.nowSeconds ?? Math.floor(Date.now() / 1000);\n if (Math.abs(now - Number(t)) > tolerance) return false;\n const { createHmac, timingSafeEqual } = nodeCrypto();\n const enc = new TextEncoder();\n const body = typeof rawBody === 'string' ? enc.encode(rawBody) : rawBody;\n const expected = createHmac('sha256', secret)\n .update(enc.encode(`${t}.`))\n .update(body)\n .digest();\n return v1s.some((v1) => {\n if (!/^[0-9a-f]{64}$/.test(v1)) return false;\n return timingSafeEqual(hexToBytes(v1), expected);\n });\n}\n\ntype NodeCrypto = {\n createHmac(\n alg: string,\n key: string,\n ): { update(d: Uint8Array): { update(d: Uint8Array): { digest(): Uint8Array } } };\n timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean;\n};\n\nfunction nodeCrypto(): NodeCrypto {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n const mod = proc?.getBuiltinModule?.('node:crypto') as NodeCrypto | undefined;\n if (!mod) {\n throw new Error(\n 'verifyResolveWebhook needs node:crypto (Node 20.16+/22.3+, Bun or Deno); run it server-side',\n );\n }\n return mod;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const out = new Uint8Array(hex.length / 2);\n for (let i = 0; i < out.length; i++) out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n return out;\n}\n\n/** `payloadType` of Resolve attestation envelopes. */\nexport const RESOLVE_ATTESTATION_PAYLOAD_TYPE =\n 'application/vnd.codai.resolve.attestation+json;v=1';\n\nexport type ResolveAttestationVerifyResult =\n | { ok: true; keyid: string }\n | { ok: false; reason: 'UNSIGNED' | 'BAD_SIGNATURE' | 'STATEMENT_MISMATCH' | 'BAD_PAYLOAD_TYPE' };\n\ntype VerifyCrypto = {\n createHash(alg: string): { update(d: Uint8Array): { digest(enc: 'hex'): string } };\n createVerify(alg: string): {\n update(d: Uint8Array): void;\n verify(key: { key: string; dsaEncoding: 'der' }, sig: Uint8Array): boolean;\n };\n};\n\nfunction verifyCrypto(): VerifyCrypto {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n const mod = proc?.getBuiltinModule?.('node:crypto') as VerifyCrypto | undefined;\n if (!mod) {\n throw new Error(\n 'verifyAttestation needs node:crypto (Node 20.16+/22.3+, Bun or Deno); run it server-side',\n );\n }\n return mod;\n}\n\n/** RFC 8785 (JCS) for the JSON subset a statement uses: sorted keys, no whitespace. */\nfunction canonicalJson(v: unknown): string {\n if (v === null || typeof v !== 'object') return JSON.stringify(v);\n if (Array.isArray(v)) return `[${v.map(canonicalJson).join(',')}]`;\n const o = v as Record<string, unknown>;\n return `{${Object.keys(o)\n .filter((k) => o[k] !== undefined)\n .sort()\n .map((k) => `${JSON.stringify(k)}:${canonicalJson(o[k])}`)\n .join(',')}}`;\n}\n\nfunction base64ToBytes(b64: string): Uint8Array {\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n/** DSSE v1 PAE: `\"DSSEv1\" SP len(type) SP type SP len(body) SP body` (byte lengths). */\nfunction pae(payloadType: string, body: Uint8Array): Uint8Array {\n const enc = new TextEncoder();\n const typeBytes = enc.encode(payloadType);\n const head = enc.encode(`DSSEv1 ${typeBytes.length} ${payloadType} ${body.length} `);\n const out = new Uint8Array(head.length + body.length);\n out.set(head, 0);\n out.set(body, head.length);\n return out;\n}\n\n/** The statement the Resolve service signs, recomputed from the attestation JSON. */\nexport function resolveAttestationStatement(att: ResolveAttestation): Record<string, unknown> {\n const { createHash } = verifyCrypto();\n const enc = new TextEncoder();\n const sha = (s: string | null | undefined) =>\n s == null ? null : createHash('sha256').update(enc.encode(s)).digest('hex');\n return {\n kind: 'codai.resolve.attestation.v1',\n attestation_id: att.id,\n repo_url: att.repo_url,\n base_commit: att.base_commit,\n patch_sha256: sha(att.patch),\n repro_test: att.repro_test?.path\n ? { path: att.repro_test.path, sha256: sha(att.repro_test.content) }\n : null,\n test_command: att.test_command,\n regression_command: att.regression_command,\n test_output_before_sha256: sha(att.test_output_before),\n test_output_after_sha256: sha(att.test_output_after),\n regression_output_sha256: sha(att.regression_output),\n runner_image_digest: att.runner_image_digest,\n started_at: att.started_at,\n verified_at: att.verified_at,\n };\n}\n\n/**\n * Verify a Resolve attestation offline against published keys: the DSSE\n * signature (ECDSA P-256/SHA-256, DER) over `PAE(payloadType, payload)` must\n * match one key, AND the signed statement must equal the one recomputed from\n * the attestation's own fields (so a valid signature over other content fails).\n * Server-side only (`node:crypto`, loaded lazily).\n */\nexport function verifyAttestationWithKeys(\n att: ResolveAttestation,\n keys: ResolveKeys,\n): ResolveAttestationVerifyResult {\n const env = att.signature;\n if (!env || !Array.isArray(env.signatures) || env.signatures.length === 0)\n return { ok: false, reason: 'UNSIGNED' };\n if (env.payloadType !== RESOLVE_ATTESTATION_PAYLOAD_TYPE)\n return { ok: false, reason: 'BAD_PAYLOAD_TYPE' };\n const { createVerify } = verifyCrypto();\n let body: Uint8Array;\n try {\n body = base64ToBytes(env.payload);\n } catch {\n return { ok: false, reason: 'BAD_SIGNATURE' };\n }\n const msg = pae(env.payloadType, body);\n let keyid: string | null = null;\n outer: for (const s of env.signatures) {\n let sig: Uint8Array;\n try {\n sig = base64ToBytes(s.sig);\n } catch {\n continue;\n }\n for (const k of keys.keys) {\n if (k.payload_type && k.payload_type !== env.payloadType) continue;\n try {\n const v = createVerify('SHA256');\n v.update(msg);\n if (v.verify({ key: k.public_key_pem, dsaEncoding: 'der' }, sig)) {\n keyid = k.keyid;\n break outer;\n }\n } catch {\n /* malformed key/signature — try the next */\n }\n }\n }\n if (keyid === null) return { ok: false, reason: 'BAD_SIGNATURE' };\n let signed: unknown;\n try {\n signed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(body));\n } catch {\n return { ok: false, reason: 'STATEMENT_MISMATCH' };\n }\n if (canonicalJson(signed) !== canonicalJson(resolveAttestationStatement(att)))\n return { ok: false, reason: 'STATEMENT_MISMATCH' };\n return { ok: true, keyid };\n}\n\n/** Statuses after which a job never changes again. */\nexport const RESOLVE_TERMINAL_STATUSES: ReadonlySet<ResolveJobStatus> = new Set<ResolveJobStatus>([\n 'resolved',\n 'failed',\n 'declined',\n 'error',\n]);\n\n/** Any non-2xx answer from the Resolve service (flat `{ error }` body). */\nexport class ResolveError extends CodaiError {\n /** The `error` field of the body: a message, or Zod `flatten()` details on a 400. */\n readonly detail: string | ResolveValidationDetails | null;\n\n constructor(\n message: string,\n status: number,\n body: unknown,\n meta: { requestId?: string | null; retryAfter?: number | null } = {},\n ) {\n super(message, status, body, meta);\n this.name = 'ResolveError';\n this.detail = extractDetail(body);\n }\n}\n\n/** `402` on `accept()` — the wallet cannot hold the quote; the job stays `quoted`. */\nexport class ResolveInsufficientFundsError extends ResolveError {\n /** Wallet balance, in `currency` units (EUR micros). */\n readonly balance: number;\n /** Amount the hold needs, in `currency` units (EUR micros). */\n readonly required: number;\n readonly currency: 'micro_eur';\n /** pay.codai.ro checkout link for the shortfall — open it, then retry `accept()`. */\n readonly topupUrl: string;\n\n constructor(\n message: string,\n body: ResolveInsufficientFunds,\n meta: { requestId?: string | null } = {},\n ) {\n super(message, 402, body, meta);\n this.name = 'ResolveInsufficientFundsError';\n this.balance = body.balance;\n this.required = body.required;\n this.currency = body.currency;\n this.topupUrl = body.topup_url;\n }\n}\n\nexport interface ResolveWaitOptions {\n /** Poll interval (ms). Default 5_000. */\n intervalMs?: number;\n /** Give up after this long (ms); throws `ResolveError` (status 0, body = last job). Default 1_800_000. */\n timeoutMs?: number;\n /** Stop when the job reaches one of these. Default `RESOLVE_TERMINAL_STATUSES`. */\n until?: Iterable<ResolveJobStatus>;\n signal?: AbortSignal;\n /** Called with every polled job (progress UIs). */\n onPoll?: (job: ResolveJob) => void;\n}\n\ntype CallOpts = { signal?: AbortSignal };\n\nexport class Resolve {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `POST /v1/resolve/jobs` — submit a public GitHub repo + issue for triage.\n * Returns a quote (`status: 'quoted'`), a free-tier auto-accept\n * (`status: 'accepted'`) or a decline (`status: 'declined'`). Never retried:\n * a retry could create a second job.\n */\n submit(body: ResolveIntake, opts: CallOpts = {}): Promise<ResolveSubmitResult> {\n if (!body.issue_url && !body.issue_text)\n throw new TypeError('resolve.submit: one of issue_url or issue_text is required');\n return this.call<ResolveSubmitResult>('/v1/resolve/jobs', {\n method: 'POST',\n body,\n noRetry: true,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/resolve/jobs/{id}` — status, quote, reasons, cost and attestation pointer. */\n get(id: string, opts: CallOpts = {}): Promise<ResolveJob> {\n return this.call<ResolveJob>(`/v1/resolve/jobs/${encodeURIComponent(id)}`, {\n signal: opts.signal,\n });\n }\n\n /**\n * `POST /v1/resolve/jobs/{id}/accept` — accept a paid quote and start the job.\n * Throws `ResolveInsufficientFundsError` (402, carries `topupUrl`) when the\n * wallet is short, `ResolveError` 409 when the job is not `quoted`.\n */\n accept(id: string, opts: CallOpts = {}): Promise<ResolveAccepted> {\n return this.call<ResolveAccepted>(`/v1/resolve/jobs/${encodeURIComponent(id)}/accept`, {\n method: 'POST',\n rawBody: '', // no body — sent with content-length: 0\n noRetry: true,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/resolve/attestations/{id}` — public execution proof (no auth needed\n * server-side). Accepts the attestation id or the job's `attestation_url`.\n */\n attestation(idOrUrl: string, opts: CallOpts = {}): Promise<ResolveAttestation> {\n const id = idOrUrl.replace(/^.*\\/v1\\/resolve\\/attestations\\//, '');\n return this.call<ResolveAttestation>(`/v1/resolve/attestations/${encodeURIComponent(id)}`, {\n signal: opts.signal,\n });\n }\n\n /** `GET /health` — liveness of the Resolve service. */\n health(opts: CallOpts = {}): Promise<ResolveHealth> {\n return this.call<ResolveHealth>('/health', { signal: opts.signal });\n }\n\n /** `GET /v1/resolve/keys` — public keys that sign attestations (no auth needed server-side). */\n keys(opts: CallOpts = {}): Promise<ResolveKeys> {\n return this.call<ResolveKeys>('/v1/resolve/keys', { signal: opts.signal });\n }\n\n /**\n * Verify an attestation's signature and that the signed statement matches\n * its fields. Fetches `keys()` unless `opts.keys` is given (pin them to\n * avoid trusting the network). `{ ok: false, reason: 'UNSIGNED' }` for\n * attestations created before signing (2026-09-27). Server-side only.\n */\n async verifyAttestation(\n att: ResolveAttestation,\n opts: { keys?: ResolveKeys; signal?: AbortSignal } = {},\n ): Promise<ResolveAttestationVerifyResult> {\n if (!att.signature) return { ok: false, reason: 'UNSIGNED' };\n const keys = opts.keys ?? (await this.keys({ signal: opts.signal }));\n return verifyAttestationWithKeys(att, keys);\n }\n\n /**\n * Poll `get(id)` until the job reaches a terminal status (`resolved`,\n * `failed`, `declined`, `error`) or one of `opts.until`. A `quoted` job\n * does not move until you `accept()` it.\n */\n async waitFor(id: string, opts: ResolveWaitOptions = {}): Promise<ResolveJob> {\n const intervalMs = opts.intervalMs ?? 5_000;\n const timeoutMs = opts.timeoutMs ?? 1_800_000;\n const until = new Set(opts.until ?? RESOLVE_TERMINAL_STATUSES);\n const deadline = Date.now() + timeoutMs;\n for (;;) {\n const job = await this.get(id, { signal: opts.signal });\n opts.onPoll?.(job);\n if (until.has(job.status)) return job;\n const left = deadline - Date.now();\n if (left <= 0)\n throw new ResolveError(\n `codai-resolve job ${id} still ${job.status} after ${timeoutMs} ms`,\n 0,\n job,\n );\n await abortableSleep(Math.min(intervalMs, left), opts.signal);\n }\n }\n\n private async call<T>(path: string, init: RequestOptions): Promise<T> {\n try {\n return await this.http.json<T>(path, init);\n } catch (err) {\n throw toResolveError(path, err);\n }\n }\n}\n\nfunction extractDetail(body: unknown): string | ResolveValidationDetails | null {\n if (body && typeof body === 'object' && 'error' in body) {\n const e = (body as { error: unknown }).error;\n if (typeof e === 'string') return e;\n if (e && typeof e === 'object') return e as ResolveValidationDetails;\n }\n return null;\n}\n\nfunction isInsufficientFunds(body: unknown): body is ResolveInsufficientFunds {\n return (\n !!body &&\n typeof body === 'object' &&\n (body as { error?: unknown }).error === 'insufficient_funds' &&\n typeof (body as { topup_url?: unknown }).topup_url === 'string'\n );\n}\n\n/** Re-type a `CodaiError` from the shared HTTP layer into the Resolve hierarchy. */\nfunction toResolveError(path: string, err: unknown): unknown {\n if (!(err instanceof CodaiError) || err instanceof ResolveError) return err;\n if (err.status === 0) return err; // network/timeout — nothing Resolve-specific\n const meta = { requestId: err.requestId, retryAfter: err.retryAfter };\n if (err.status === 402 && isInsufficientFunds(err.body)) {\n const b = err.body;\n return new ResolveInsufficientFundsError(\n `codai-resolve ${path} → 402: insufficient funds (balance ${b.balance}, required ${b.required} ${b.currency}); top up at ${b.topup_url}`,\n b,\n meta,\n );\n }\n const detail = extractDetail(err.body);\n const text =\n detail === null ? '' : `: ${typeof detail === 'string' ? detail : JSON.stringify(detail)}`;\n return new ResolveError(\n `codai-resolve ${path} → ${err.status}${text}`,\n err.status,\n err.body,\n meta,\n );\n}\n\nfunction abortableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason);\n const onAbort = () => {\n clearTimeout(t);\n reject(signal?.reason);\n };\n const t = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/** `POST /v1/responses` — OpenAI Responses API compatibility (JSON + named-event SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type ResponsesRequest = Mutable<Body<'createResponse'>>;\nexport type ResponsesResponse = Reply<'createResponse'>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type ResponsesInput = Omit<ResponsesRequest, 'stream' | 'model'> & { model?: string };\n\nexport interface ResponsesCallOptions {\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface ResponsesResult {\n /** `output_text` of the response. */\n outputText: string;\n raw: ResponsesResponse;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers;\n}\n\n/** One Responses streaming event; `type` mirrors the SSE `event:` name. */\nexport interface ResponsesStreamEvent {\n type:\n | 'response.created'\n | 'response.output_text.delta'\n | 'response.output_item.done'\n | 'response.output_text.done'\n | 'response.completed'\n | (string & {});\n sequence_number?: number;\n [key: string]: unknown;\n}\n\nexport interface ResponsesStreamResult {\n outputText: string;\n /** The full `response` object from `response.completed`, when received. */\n response: ResponsesResponse | null;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers | null;\n}\n\nexport interface ResponsesStream extends AsyncIterable<ResponsesStreamEvent> {\n readonly final: Promise<ResponsesStreamResult>;\n /** Text deltas only. */\n text(): AsyncIterable<string>;\n}\n\nexport class Responses {\n constructor(private readonly http: HttpClient) {}\n\n async create(body: ResponsesInput, opts: ResponsesCallOptions = {}): Promise<ResponsesResult> {\n const res = await this.http.request('/v1/responses', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as ResponsesResponse;\n return {\n outputText: typeof raw.output_text === 'string' ? raw.output_text : '',\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n stream(body: ResponsesInput, opts: ResponsesCallOptions = {}): ResponsesStream {\n const requestPromise = this.http.request('/v1/responses', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: ResponsesStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<ResponsesStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {});\n\n let outputText = '';\n let response: ResponsesResponse | null = null;\n let res: Response | null = null;\n\n async function* events(): AsyncGenerator<ResponsesStreamEvent, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n const ev = frameJson<ResponsesStreamEvent>(frame);\n if (!ev) continue;\n if (typeof ev.type !== 'string') ev.type = frame.event;\n if (ev.type === 'response.output_text.delta' && typeof ev.delta === 'string') {\n outputText += ev.delta;\n } else if (ev.type === 'response.completed' && ev.response) {\n response = ev.response as ResponsesResponse;\n }\n yield ev;\n if (ev.type === 'response.completed') break;\n }\n resolveFinal({\n outputText,\n response,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id') ?? null,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n });\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* textOnly(): AsyncGenerator<string, void, undefined> {\n for await (const ev of events()) {\n if (ev.type === 'response.output_text.delta' && typeof ev.delta === 'string')\n yield ev.delta;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => events(),\n text: () => ({ [Symbol.asyncIterator]: () => textOnly() }),\n final,\n };\n }\n}\n","/**\n * `/v1/sessions/*` — shared-sessions protocol v2 (events, controls, lease,\n * dispatch, SSE stream) plus the per-session shares under `/shares`.\n *\n * Every call needs the `x-codai-device` header: set it once via\n * `new Codai({ device: '<uuid>' })` or per call through `ext.device`.\n */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Session = Schema<'Session'>;\nexport type SessionListItem = Schema<'SessionListItem'>;\nexport type SessionDetail = Reply<'getSession'>;\nexport type SessionCreateRequest = Mutable<Body<'createSession'>>;\nexport type SessionPatchRequest = Mutable<Body<'updateSession'>>;\nexport type SessionEvent = Schema<'SessionEvent'>;\nexport type SessionIncomingEvent = Mutable<Schema<'SessionIncomingEvent'>>;\nexport type SessionEventsAppendRequest = Mutable<Body<'appendSessionEvents'>>;\nexport type SessionEventsAppendResponse = Reply<'appendSessionEvents'>;\nexport type SessionEventsPage = Reply<'listSessionEvents'>;\nexport type SessionControl = Schema<'SessionControl'>;\nexport type SessionControlRequest = Mutable<Body<'submitSessionControl'>>;\nexport type SessionControlAccepted = Reply<'submitSessionControl', 202>;\nexport type SessionDispatchRequest = Mutable<Body<'dispatchToDevice'>>;\nexport type SessionDispatchResponse = Reply<'dispatchToDevice', 202>;\nexport type SessionLeaseClaimRequest = Mutable<Body<'claimSessionLease'>>;\nexport type SessionLeaseResponse = Reply<'claimSessionLease'>;\nexport type SessionShare = Schema<'OrgSessionShare'>;\nexport type SessionShareCreateRequest = Mutable<Body<'createSessionShare'>>;\nexport type SessionShareCreated = Reply<'createSessionShare', 201>;\nexport type SharedSession = Schema<'OrgSharedSession'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\n/** Frames of `GET /v1/sessions/{id}/stream`; every payload carries `v: 1`. */\nexport type SessionStreamEvent =\n | { event: 'event'; data: { v: 1; seq: number } & Record<string, unknown> }\n | {\n event: 'control';\n data: { v: 1; id: string; kind: string; seq: number | null; applied: boolean } & Record<\n string,\n unknown\n >;\n }\n | { event: 'lease'; data: { v: 1; holder_device_id: string | null; expires_at: string | null } }\n | {\n event: 'presence';\n data: {\n v: 1;\n device_id: string;\n user_id: string;\n role: string;\n executor: boolean;\n last_seen: string;\n driving: boolean;\n online: boolean;\n };\n }\n | { event: string; data: Record<string, unknown> };\n\nconst enc = encodeURIComponent;\n\nexport class SessionLease {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/sessions/{id}/lease` — CAS claim; `force: true` takes over a live lease. */\n acquire(\n sessionId: string,\n body: SessionLeaseClaimRequest = {},\n opts: CallOpts = {},\n ): Promise<SessionLeaseResponse> {\n return this.http.json<SessionLeaseResponse>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PUT /v1/sessions/{id}/lease` — heartbeat every 10 s (TTL 30 s). */\n renew(sessionId: string, opts: CallOpts = {}): Promise<SessionLeaseResponse> {\n return this.http.json<SessionLeaseResponse>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'PUT',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}/lease` */\n release(sessionId: string, opts: CallOpts = {}): Promise<Reply<'releaseSessionLease'>> {\n return this.http.json<Reply<'releaseSessionLease'>>(`/v1/sessions/${enc(sessionId)}/lease`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class SessionEvents {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/events?after=&limit=` */\n list(\n sessionId: string,\n query: Mutable<QueryOf<'listSessionEvents'>> = {},\n opts: CallOpts = {},\n ): Promise<SessionEventsPage> {\n return this.http.json<SessionEventsPage>(`/v1/sessions/${enc(sessionId)}/events`, {\n query: { after: query.after, limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/events` — executor only (needs the live lease). */\n append(\n sessionId: string,\n body: SessionEventsAppendRequest,\n opts: CallOpts = {},\n ): Promise<SessionEventsAppendResponse> {\n return this.http.json<SessionEventsAppendResponse>(`/v1/sessions/${enc(sessionId)}/events`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class SessionControls {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/controls?applied=&target=` — drain the control queue. */\n async list(\n sessionId: string,\n query: { applied?: boolean; target?: 'me' | string } = {},\n opts: CallOpts = {},\n ): Promise<SessionControl[]> {\n const raw = await this.http.json<Reply<'listSessionControls'>>(\n `/v1/sessions/${enc(sessionId)}/controls`,\n {\n query: { applied: query.applied, target: query.target },\n ext: opts.ext,\n signal: opts.signal,\n },\n );\n return [...(raw.controls ?? [])];\n }\n\n /** `POST /v1/sessions/{id}/control` — send a control to the executor (editor+). */\n submit(\n sessionId: string,\n body: SessionControlRequest,\n opts: CallOpts = {},\n ): Promise<SessionControlAccepted> {\n return this.http.json<SessionControlAccepted>(`/v1/sessions/${enc(sessionId)}/control`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/control/{cid}/applied` — executor only. */\n markApplied(\n sessionId: string,\n controlId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'markSessionControlApplied'>> {\n return this.http.json<Reply<'markSessionControlApplied'>>(\n `/v1/sessions/${enc(sessionId)}/control/${enc(controlId)}/applied`,\n { method: 'POST', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class SessionShares {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/sessions/{id}/shares` — owner only. */\n async list(sessionId: string, opts: CallOpts = {}): Promise<SessionShare[]> {\n const raw = await this.http.json<Reply<'listSessionShares'>>(\n `/v1/sessions/${enc(sessionId)}/shares`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.shares ?? [])];\n }\n\n /** `POST /v1/sessions/{id}/shares` — `token` is returned once for link shares. */\n create(\n sessionId: string,\n body: SessionShareCreateRequest,\n opts: CallOpts = {},\n ): Promise<SessionShareCreated> {\n return this.http.json<SessionShareCreated>(`/v1/sessions/${enc(sessionId)}/shares`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}/shares/{shareId}` */\n delete(\n sessionId: string,\n shareId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'deleteSessionShare'>> {\n return this.http.json<Reply<'deleteSessionShare'>>(\n `/v1/sessions/${enc(sessionId)}/shares/${enc(shareId)}`,\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `GET /v1/sessions/shared-with-me` */\n async sharedWithMe(\n query: { archived?: boolean } = {},\n opts: CallOpts = {},\n ): Promise<SharedSession[]> {\n const raw = await this.http.json<Reply<'listSessionsSharedWithMe'>>(\n '/v1/sessions/shared-with-me',\n {\n query: { archived: query.archived ? '1' : undefined },\n ext: opts.ext,\n signal: opts.signal,\n },\n );\n return [...(raw.sessions ?? [])];\n }\n}\n\nexport class Sessions {\n readonly events: SessionEvents;\n readonly controls: SessionControls;\n readonly lease: SessionLease;\n readonly shares: SessionShares;\n\n constructor(private readonly http: HttpClient) {\n this.events = new SessionEvents(http);\n this.controls = new SessionControls(http);\n this.lease = new SessionLease(http);\n this.shares = new SessionShares(http);\n }\n\n /** `POST /v1/sessions` — idempotent on `session_key` (200 existing / 201 created). */\n async create(\n body: SessionCreateRequest = {},\n opts: CallOpts = {},\n ): Promise<Session & { created: boolean }> {\n const res = await this.http.request('/v1/sessions', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n const session = (await res.json()) as Session;\n return { ...session, created: res.status === 201 };\n }\n\n /** `GET /v1/sessions?limit=&archived=` — own sessions first, then shared. */\n async list(\n query: { limit?: number; archived?: boolean } = {},\n opts: CallOpts = {},\n ): Promise<SessionListItem[]> {\n const raw = await this.http.json<Reply<'listSessions'>>('/v1/sessions', {\n query: { limit: query.limit, archived: query.archived ? '1' : undefined, v: '2' },\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.sessions ?? [])];\n }\n\n /** `GET /v1/sessions/{id}` — detail with members, lease and presence. */\n get(\n sessionId: string,\n query: { share?: string } = {},\n opts: CallOpts = {},\n ): Promise<SessionDetail> {\n return this.http.json<SessionDetail>(`/v1/sessions/${enc(sessionId)}`, {\n query: { share: query.share, v: '2' },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/sessions/{id}` — rename / archive (owner). */\n update(sessionId: string, body: SessionPatchRequest, opts: CallOpts = {}): Promise<Session> {\n return this.http.json<Session>(`/v1/sessions/${enc(sessionId)}`, {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/sessions/{id}` — irreversible (owner). */\n delete(sessionId: string, opts: CallOpts = {}): Promise<Reply<'deleteSession'>> {\n return this.http.json<Reply<'deleteSession'>>(`/v1/sessions/${enc(sessionId)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/sessions/{id}/dispatch` — queue a `send` for one device and wake it over FCM. */\n dispatch(\n sessionId: string,\n body: SessionDispatchRequest,\n opts: CallOpts = {},\n ): Promise<SessionDispatchResponse> {\n return this.http.json<SessionDispatchResponse>(`/v1/sessions/${enc(sessionId)}/dispatch`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/sessions/{id}/stream?after=` — live SSE of `event` / `control` /\n * `lease` / `presence` frames. `: ping` heartbeats are skipped. The server\n * closes after 30 min; reconnect with `after` = highest `seq` seen.\n */\n async *stream(\n sessionId: string,\n query: { after?: number; share?: string } = {},\n opts: CallOpts = {},\n ): AsyncGenerator<SessionStreamEvent, void, undefined> {\n const frames = this.http.sse(`/v1/sessions/${enc(sessionId)}/stream`, {\n query: { after: query.after, share: query.share },\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n yield { event: frame.event, data } as SessionStreamEvent;\n }\n }\n}\n","/** `POST /v1/systemone` — typed decisions from codai-s1 (Choice / Score / Noul). */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type SystemOneRequest = Mutable<Body<'createSystemOne'>>;\nexport type SystemOneResponse = Reply<'createSystemOne'>;\n\nexport class SystemOne {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Ask one or more typed questions about `state`. Throws on 503 `s1_unavailable` like any other\n * error — keep a local fallback and catch it: the gateway never substitutes a generative model.\n */\n async create(\n body: SystemOneRequest,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SystemOneResponse> {\n const res = await this.http.request('/v1/systemone', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return (await res.json()) as SystemOneResponse;\n }\n}\n","/** `/v1/tasks/*` — outcome-billing task lifecycle. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Task = Schema<'Task'>;\nexport type TaskOutcome = Schema<'TaskOutcome'>;\nexport type TaskStats = Reply<'getTaskStats'>;\nexport type TaskListPage = Reply<'listTasks'>;\nexport type TaskConfirmRequest = Mutable<Body<'confirmTask'>>;\nexport type TaskConfirmResponse = Reply<'confirmTask'>;\nexport type TaskListQuery = Mutable<QueryOf<'listTasks'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Tasks {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/tasks` — newest first; page with `cursor` = previous `next_cursor`. */\n list(query: TaskListQuery = {}, opts: CallOpts = {}): Promise<TaskListPage> {\n return this.http.json<TaskListPage>('/v1/tasks', {\n query: { outcome: query.outcome, limit: query.limit, cursor: query.cursor },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/tasks/pending` — tasks awaiting your confirmation (max 100). */\n async pending(opts: CallOpts = {}): Promise<Task[]> {\n const raw = await this.http.json<Reply<'listPendingTasks'>>('/v1/tasks/pending', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.tasks ?? [])];\n }\n\n /** `GET /v1/tasks/stats?since=` */\n stats(since?: string | Date, opts: CallOpts = {}): Promise<TaskStats> {\n return this.http.json<TaskStats>('/v1/tasks/stats', {\n query: { since: since instanceof Date ? since.toISOString() : since },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/tasks/{id}` */\n get(id: string, opts: CallOpts = {}): Promise<Task> {\n return this.http.json<Task>(`/v1/tasks/${encodeURIComponent(id)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/tasks/{id}/confirm` — answer \"Did codai solve it?\". */\n confirm(id: string, body: TaskConfirmRequest, opts: CallOpts = {}): Promise<TaskConfirmResponse> {\n return this.http.json<TaskConfirmResponse>(`/v1/tasks/${encodeURIComponent(id)}/confirm`, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `/v1/triggers/*` + `/v1/notifications/*` — event triggers (webhooks → agent sessions) and the inbox. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type TriggerList = Reply<'listTriggers'>;\nexport type TriggerCreateRequest = Mutable<Body<'createTrigger'>>;\nexport type TriggerCreated = Reply<'createTrigger'>;\nexport type TriggerPatch = Mutable<Body<'updateTrigger'>>;\nexport type TriggerUpdated = Reply<'updateTrigger'>;\nexport type TriggerTestRequest = Mutable<Body<'testTrigger'>>;\nexport type TriggerTestResult = Reply<'testTrigger'>;\nexport type TriggerEvents = Reply<'listTriggerEvents'>;\nexport type NotificationList = Reply<'listNotifications'>;\nexport type NotificationsRead = Reply<'markNotificationsRead'>;\n/** Reply of `DELETE /v1/notifications/:id` and `POST /v1/notifications/delete`. */\nexport type NotificationsDeleted = { readonly deleted: number };\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Triggers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/triggers` — never includes the signing secret. */\n list(opts: CallOpts = {}): Promise<TriggerList> {\n return this.http.json<TriggerList>('/v1/triggers', { ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers` — the response carries the signing `secret` ONCE. */\n create(body: TriggerCreateRequest, opts: CallOpts = {}): Promise<TriggerCreated> {\n return this.http.json<TriggerCreated>('/v1/triggers', { method: 'POST', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/triggers/{id}` — name / enabled / policy. */\n update(id: string, body: TriggerPatch, opts: CallOpts = {}): Promise<TriggerUpdated> {\n return this.http.json<TriggerUpdated>(`/v1/triggers/${encodeURIComponent(id)}`, { method: 'PATCH', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `DELETE /v1/triggers/{id}` — its hook URL stops working immediately. */\n delete(id: string, opts: CallOpts = {}): Promise<Reply<'deleteTrigger'>> {\n return this.http.json<Reply<'deleteTrigger'>>(`/v1/triggers/${encodeURIComponent(id)}`, { method: 'DELETE', ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers/{id}/rotate-secret` — new secret, shown once. */\n rotateSecret(id: string, opts: CallOpts = {}): Promise<Reply<'rotateTriggerSecret'>> {\n return this.http.json<Reply<'rotateTriggerSecret'>>(`/v1/triggers/${encodeURIComponent(id)}/rotate-secret`, { method: 'POST', body: {}, ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/triggers/{id}/test` — manual fire through the full pipeline; returns the decision + reason. */\n /** `PUT /v1/triggers/{id}/secret` — store a secret issued by the source (e.g. a Sentry integration's client secret). */\n setSecret(id: string, secret: string, opts: CallOpts = {}): Promise<Reply<'setTriggerSecret'>> {\n return this.http.json<Reply<'setTriggerSecret'>>(`/v1/triggers/${encodeURIComponent(id)}/secret`, { method: 'PUT', body: { secret }, ext: opts.ext, signal: opts.signal, noRetry: true });\n }\n\n /** `POST /v1/triggers/{id}/test` — manual fire through the full pipeline; returns the decision + reason. */\n test(id: string, body: TriggerTestRequest = {}, opts: CallOpts = {}): Promise<TriggerTestResult> {\n return this.http.json<TriggerTestResult>(`/v1/triggers/${encodeURIComponent(id)}/test`, { method: 'POST', body, ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/triggers/{id}/events?limit=` — recent deliveries with decisions. */\n events(id: string, limit?: number, opts: CallOpts = {}): Promise<TriggerEvents> {\n return this.http.json<TriggerEvents>(`/v1/triggers/${encodeURIComponent(id)}/events`, { query: { limit }, ext: opts.ext, signal: opts.signal });\n }\n\n /**\n * `POST /v1/hooks/{id}` — send an event to a `generic` / `form` trigger from your own code. Signs the body\n * (`X-Codai-Signature: t=<unix>,v1=HMAC_SHA256(secret, \"<t>.<body>\")`, WebCrypto — Node 20+, browsers, Deno,\n * Workers). `deliveryId` makes retries idempotent. The hook needs no API key (the signature is the auth).\n */\n async fireHook(\n id: string,\n secret: string,\n event: { title: string; message?: string; severity?: 'info' | 'low' | 'medium' | 'high' | 'critical'; url?: string; subject?: string; labels?: string[]; dedupe_key?: string; resolved?: boolean },\n opts: CallOpts & { deliveryId?: string } = {},\n ): Promise<Reply<'receiveTriggerHook'>> {\n const raw = JSON.stringify(event);\n const t = Math.floor(Date.now() / 1000);\n const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n const mac = new Uint8Array(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(`${t}.${raw}`)));\n const v1 = Array.from(mac, (b) => b.toString(16).padStart(2, '0')).join('');\n return this.http.json<Reply<'receiveTriggerHook'>>(`/v1/hooks/${encodeURIComponent(id)}`, {\n method: 'POST',\n rawBody: raw,\n ext: {\n ...opts.ext,\n headers: {\n ...opts.ext?.headers,\n 'Content-Type': 'application/json',\n 'x-codai-signature': `t=${t},v1=${v1}`,\n ...(opts.deliveryId ? { 'x-codai-delivery': opts.deliveryId } : {}),\n },\n },\n signal: opts.signal,\n });\n }\n}\n\nexport class Notifications {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/notifications?unread=1&limit=` — newest first. */\n list(query: { unread?: boolean; limit?: number } = {}, opts: CallOpts = {}): Promise<NotificationList> {\n return this.http.json<NotificationList>('/v1/notifications', {\n query: { unread: query.unread ? '1' : undefined, limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/notifications/read` — `ids` omitted = every unread one. */\n markRead(ids?: number[], opts: CallOpts = {}): Promise<NotificationsRead> {\n return this.http.json<NotificationsRead>('/v1/notifications/read', { method: 'POST', body: ids ? { ids } : {}, ext: opts.ext, signal: opts.signal });\n }\n\n /** `DELETE /v1/notifications/:id` — `{ deleted: 0 }` when the id is missing or not yours. */\n delete(id: number, opts: CallOpts = {}): Promise<NotificationsDeleted> {\n return this.http.json<NotificationsDeleted>(`/v1/notifications/${encodeURIComponent(String(id))}`, { method: 'DELETE', ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/notifications/delete` — 1..200 ids; ids of other users are skipped. */\n deleteMany(ids: number[], opts: CallOpts = {}): Promise<NotificationsDeleted> {\n return this.http.json<NotificationsDeleted>('/v1/notifications/delete', { method: 'POST', body: { ids }, ext: opts.ext, signal: opts.signal });\n }\n}\n","/** `POST /v1/tokens` — ephemeral scoped tokens for browsers / webviews. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Reply } from './_shared';\n\nexport type EphemeralScope = 'realtime' | 'audio' | 'embeddings';\nexport type EphemeralTokenResponse = Reply<'createEphemeralToken'>;\n\nexport interface EphemeralToken {\n token: string;\n expiresAt: string;\n scope: EphemeralScope;\n raw: EphemeralTokenResponse;\n}\n\nexport class Tokens {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Mint a short-lived token (60–3600 s, default 600) bound to one surface.\n * Only a real `codai_` key may mint.\n */\n async create(\n scope: EphemeralScope,\n ttlSeconds?: number,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<EphemeralToken> {\n const raw = await this.http.json<EphemeralTokenResponse>('/v1/tokens', {\n body: { scope, ...(ttlSeconds !== undefined ? { ttl_seconds: ttlSeconds } : {}) },\n ext: opts.ext,\n signal: opts.signal,\n });\n return { token: raw.token, expiresAt: raw.expires_at, scope: raw.scope, raw };\n }\n}\n","/** `/v1/tools/*` — verified web search and server-side page fetch. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type ToolSearchRequest = Mutable<Body<'toolsSearch'>>;\nexport type ToolSearchResponse = Reply<'toolsSearch'>;\nexport type ToolFetchRequest = Mutable<Body<'toolsFetch'>>;\nexport type ToolFetchResponse = Reply<'toolsFetch'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Tools {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/tools/search` — verified web search (never falls back to an unverified provider). */\n search(body: ToolSearchRequest, opts: CallOpts = {}): Promise<ToolSearchResponse> {\n return this.http.json<ToolSearchResponse>('/v1/tools/search', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/tools/fetch` — fetch + extract a public page (SSRF-guarded). */\n fetch(body: ToolFetchRequest, opts: CallOpts = {}): Promise<ToolFetchResponse> {\n return this.http.json<ToolFetchResponse>('/v1/tools/fetch', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/**\n * Single source of truth for OpenAPI parity: every `operationId` in\n * `apps/docs/openapi/en/gateway.yaml` maps to exactly one dotted method path\n * on the `Codai` client. `operations.test.ts` parses the YAML and fails when\n * an operation is missing, mapped to a non-function, or when this table\n * carries a key the YAML does not have.\n */\nexport const OPERATION_METHODS: Record<string, string> = {\n // Chat & Completions\n createChatCompletion: 'chat.completions.create',\n createResponse: 'responses.create',\n createMessage: 'messages.create',\n // Embeddings & Audio\n createEmbeddings: 'embeddings.create',\n createSystemOne: 'systemOne.create',\n createTranscription: 'audio.transcribe',\n createSpeech: 'audio.speech',\n createEphemeralToken: 'tokens.create',\n // Models\n listModels: 'models.list',\n // Health\n getHealth: 'health.get',\n getHealthReady: 'health.ready',\n getStatus: 'health.status',\n // Agents\n runAgentSync: 'agents.run',\n createAgentRun: 'agents.runs.create',\n getAgentRunStats: 'agents.runs.stats',\n getAgentRun: 'agents.runs.get',\n listAgentRunSteps: 'agents.runs.steps',\n streamAgentRun: 'agents.runs.stream',\n cancelAgentRun: 'agents.runs.cancel',\n // Tools\n toolsSearch: 'tools.search',\n toolsFetch: 'tools.fetch',\n // Tasks\n listTasks: 'tasks.list',\n listPendingTasks: 'tasks.pending',\n getTaskStats: 'tasks.stats',\n getTask: 'tasks.get',\n confirmTask: 'tasks.confirm',\n // Event triggers + inbox\n listTriggers: 'triggers.list',\n createTrigger: 'triggers.create',\n updateTrigger: 'triggers.update',\n deleteTrigger: 'triggers.delete',\n rotateTriggerSecret: 'triggers.rotateSecret',\n setTriggerSecret: 'triggers.setSecret',\n testTrigger: 'triggers.test',\n listTriggerEvents: 'triggers.events',\n receiveTriggerHook: 'triggers.fireHook',\n listNotifications: 'notifications.list',\n markNotificationsRead: 'notifications.markRead',\n deleteNotification: 'notifications.delete',\n deleteNotifications: 'notifications.deleteMany',\n // Sessions\n createSession: 'sessions.create',\n listSessions: 'sessions.list',\n getSession: 'sessions.get',\n updateSession: 'sessions.update',\n deleteSession: 'sessions.delete',\n listSessionEvents: 'sessions.events.list',\n appendSessionEvents: 'sessions.events.append',\n listSessionControls: 'sessions.controls.list',\n submitSessionControl: 'sessions.controls.submit',\n markSessionControlApplied: 'sessions.controls.markApplied',\n dispatchToDevice: 'sessions.dispatch',\n claimSessionLease: 'sessions.lease.acquire',\n heartbeatSessionLease: 'sessions.lease.renew',\n releaseSessionLease: 'sessions.lease.release',\n streamSession: 'sessions.stream',\n // Devices\n getMyDispatchInbox: 'devices.dispatchInbox',\n listDevices: 'devices.list',\n updateDevice: 'devices.update',\n deleteDevice: 'devices.delete',\n // Hosts\n listHosts: 'hosts.list',\n streamHost: 'hosts.stream',\n execOnHost: 'hosts.exec',\n postHostExecResult: 'hosts.postResult',\n // Orgs & Sharing\n listSessionsSharedWithMe: 'sessions.shares.sharedWithMe',\n listSessionShares: 'sessions.shares.list',\n createSessionShare: 'sessions.shares.create',\n deleteSessionShare: 'sessions.shares.delete',\n createOrg: 'orgs.create',\n listOrgs: 'orgs.list',\n listOrgMembers: 'orgs.members.list',\n addOrgMember: 'orgs.members.add',\n removeOrgMember: 'orgs.members.remove',\n // Projects\n listProjects: 'projects.list',\n createProject: 'projects.create',\n getProject: 'projects.get',\n updateProject: 'projects.update',\n deleteProject: 'projects.delete',\n // Environments\n listEnvironments: 'environments.list',\n createEnvironment: 'environments.create',\n enrollEnvironment: 'environments.enroll',\n getEnvironment: 'environments.get',\n updateEnvironment: 'environments.update',\n startEnvironment: 'environments.start',\n stopEnvironment: 'environments.stop',\n archiveEnvironment: 'environments.archive',\n destroyEnvironment: 'environments.destroy',\n createEnvironmentEnrollToken: 'environments.enrollToken',\n listEnvironmentMembers: 'environments.members.list',\n addEnvironmentMember: 'environments.members.add',\n setMyEnvironmentSshKey: 'environments.members.setSshKey',\n setEnvironmentMemberRole: 'environments.members.setRole',\n removeEnvironmentMember: 'environments.members.remove',\n issueMyEnvironmentSshCert: 'environments.members.sshCert',\n getEnvironmentSshCa: 'environments.sshCa',\n listEnvironmentTasks: 'environments.tasks.list',\n createEnvironmentTask: 'environments.tasks.create',\n getEnvironmentTask: 'environments.tasks.get',\n listEnvironmentPorts: 'environments.ports.list',\n setEnvironmentPort: 'environments.ports.set',\n removeEnvironmentPort: 'environments.ports.remove',\n listEnvironmentSecrets: 'environments.secrets.list',\n setEnvironmentSecret: 'environments.secrets.set',\n removeEnvironmentSecret: 'environments.secrets.remove',\n // Account\n getAccount: 'account.get',\n patchAccount: 'account.update',\n getReceipt: 'receipt.get',\n submitFeedback: 'feedback.submit',\n listPhoneModels: 'phoneModels.list',\n};\n\n/** Operations whose SDK method is an async iterator (SSE-only endpoints). */\nexport const STREAMING_OPERATIONS: ReadonlySet<string> = new Set([\n 'streamAgentRun',\n 'streamSession',\n 'streamHost',\n]);\n\n/**\n * Same parity contract for the separate Resolve service\n * (`apps/docs/openapi/en/resolve.yaml`, host `resolveBaseUrl`) —\n * checked by `operations.resolve.test.ts`.\n */\nexport const RESOLVE_OPERATION_METHODS: Record<string, string> = {\n resolveHealth: 'resolve.health',\n createResolveJob: 'resolve.submit',\n getResolveJob: 'resolve.get',\n acceptResolveJob: 'resolve.accept',\n getResolveAttestation: 'resolve.attestation',\n getResolveKeys: 'resolve.keys',\n};\n","/**\n * codai-sdk — official TypeScript client for the codai AI gateway.\n *\n * Full parity with the public gateway OpenAPI (every `operationId` has one\n * method — see `OPERATION_METHODS`). Resources hang off the `Codai` client:\n *\n * client.chat.completions.create / .stream client.messages / client.responses\n * client.embeddings / client.audio / client.tokens / client.models / client.health\n * client.systemOne.create (typed decisions, codai-s1)\n * client.agents.run + client.agents.runs.* client.tools.search / .fetch\n * client.tasks.* client.sessions.* (events, controls, lease, shares, stream)\n * client.devices.* / client.hosts.* client.orgs.* / client.account / client.receipt\n * client.projects.* client.environments.* (members, ports, secrets)\n * client.feedback / client.phoneModels\n * client.resolve.* (verified bug fixes on https://resolve.codai.ro — resolve.yaml)\n *\n * Top-level `chat()`, `chatStream()`, `embeddings()`, `models()`, `feedback()`,\n * `mintToken()` from 0.2.x are kept as thin aliases.\n *\n * Zero runtime dependencies; Node 18+ (global fetch) and modern edge runtimes.\n */\n\nimport { type CodaiRequestExtensions, HttpClient } from './http';\nimport { Account, Feedback, PhoneModels, Receipts } from './resources/account';\nimport { Agents } from './resources/agents';\nimport { Audio } from './resources/audio';\nimport {\n Chat,\n type ChatCompletionInput,\n type ChatCompletionRequest,\n type ChatMessage,\n type ChatResult,\n type ChatStream,\n} from './resources/chat';\nimport { Devices } from './resources/devices';\nimport { Embeddings } from './resources/embeddings';\nimport { Environments } from './resources/environments';\nimport { Health } from './resources/health';\nimport { Hosts } from './resources/hosts';\nimport { Messages } from './resources/messages';\nimport { Models } from './resources/models';\nimport { Orgs } from './resources/orgs';\nimport { Projects } from './resources/projects';\nimport { Resolve } from './resources/resolve';\nimport { Responses } from './resources/responses';\nimport { Sessions } from './resources/sessions';\nimport { SystemOne } from './resources/system-one';\nimport { Tasks } from './resources/tasks';\nimport { Notifications, Triggers } from './resources/triggers';\nimport { type EphemeralScope, type EphemeralToken, Tokens } from './resources/tokens';\nimport { Tools } from './resources/tools';\n\nexport interface CodaiClientOptions {\n apiKey: string;\n /** Defaults to https://ai.codai.ro */\n baseUrl?: string;\n /** codai Resolve service host (`client.resolve`). Defaults to https://resolve.codai.ro */\n resolveBaseUrl?: string;\n /** Stable conversation/session id — sent as `x-codai-session-id` on every request. */\n sessionId?: string;\n /** Device UUID for shared-sessions / hosts — sent as `x-codai-device` on every request. */\n device?: string;\n /** Device name / platform recorded on first registration. */\n deviceName?: string;\n devicePlatform?: CodaiRequestExtensions['devicePlatform'];\n /** Client surface tag (`x-codai-client`). */\n client?: string;\n /** Any other default `X-Codai-*` extensions (per-call bags override). */\n defaults?: CodaiRequestExtensions;\n /** Default request timeout (ms). Default 120_000. Streams are not time-capped. */\n timeoutMs?: number;\n /** Retries on 429/5xx with exponential backoff. Default 2. */\n maxRetries?: number;\n /** Injectable fetch (tests / custom agents). */\n fetch?: typeof fetch;\n}\n\n/** 0.2.x-compatible chat options (thin alias over `chat.completions`). */\nexport interface ChatOptions {\n model?: string;\n messages: ChatMessage[];\n temperature?: number;\n maxTokens?: number;\n tools?: ChatCompletionRequest['tools'];\n /** codai extension: plan-and-execute agent mode (Pro+). */\n agentMode?: boolean;\n /** codai extension: server-side context compaction ('auto'). */\n compact?: 'auto';\n /** codai extension: best-of-N override (0 disables, 3 forces). */\n bestOf?: 0 | 3;\n /** Attribution id recorded on tool calls (agent fleets). */\n agentId?: string;\n /** Per-call session override. */\n sessionId?: string;\n /** Any other `X-Codai-*` extension. */\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface EmbeddingsOptions {\n input: string | string[];\n model?: string;\n dimensions?: number;\n signal?: AbortSignal;\n}\n\nexport class Codai {\n readonly http: HttpClient;\n\n /** Resource group (`chat.completions.create/stream`) that is also callable with the 0.2.x `chat({ messages })` shape. */\n readonly chat: Chat & ((opts: ChatOptions) => Promise<ChatResult>);\n readonly messages: Messages;\n readonly responses: Responses;\n readonly embeddings: Embeddings &\n ((opts: EmbeddingsOptions) => Promise<{ embeddings: number[][]; raw: unknown }>);\n readonly audio: Audio;\n /** Typed decisions from codai-s1 (`systemOne.create({ state, questions })`). */\n readonly systemOne: SystemOne;\n readonly tokens: Tokens;\n readonly models: Models & (() => Promise<Array<{ id: string }>>);\n readonly health: Health;\n readonly agents: Agents;\n readonly tools: Tools;\n readonly tasks: Tasks;\n /** Event triggers — webhooks that notify you or start agent sessions. */\n readonly triggers: Triggers;\n /** Inbox of trigger / cloud-task notifications. */\n readonly notifications: Notifications;\n readonly sessions: Sessions;\n readonly devices: Devices;\n readonly hosts: Hosts;\n readonly orgs: Orgs;\n readonly projects: Projects;\n readonly environments: Environments;\n readonly account: Account;\n readonly receipt: Receipts;\n readonly feedback: Feedback &\n ((requestId: string, rating: 1 | -1, comment?: string) => Promise<void>);\n readonly phoneModels: PhoneModels;\n /** codai Resolve — execution-verified bug fixes (separate host, `resolveBaseUrl`). */\n readonly resolve: Resolve;\n\n constructor(opts: CodaiClientOptions) {\n if (!opts.apiKey) throw new Error('Codai: apiKey is required');\n this.http = new HttpClient({\n apiKey: opts.apiKey,\n baseUrl: opts.baseUrl ?? 'https://ai.codai.ro',\n timeoutMs: opts.timeoutMs ?? 120_000,\n maxRetries: opts.maxRetries ?? 2,\n fetch: opts.fetch,\n defaults: {\n ...opts.defaults,\n ...(opts.sessionId ? { sessionId: opts.sessionId } : {}),\n ...(opts.device ? { device: opts.device } : {}),\n ...(opts.deviceName ? { deviceName: opts.deviceName } : {}),\n ...(opts.devicePlatform ? { devicePlatform: opts.devicePlatform } : {}),\n ...(opts.client ? { client: opts.client } : {}),\n },\n });\n const http = this.http;\n\n this.messages = new Messages(http);\n this.responses = new Responses(http);\n this.audio = new Audio(http);\n this.systemOne = new SystemOne(http);\n this.tokens = new Tokens(http);\n this.health = new Health(http);\n this.agents = new Agents(http);\n this.tools = new Tools(http);\n this.tasks = new Tasks(http);\n this.triggers = new Triggers(http);\n this.notifications = new Notifications(http);\n this.sessions = new Sessions(http);\n this.devices = new Devices(http);\n this.hosts = new Hosts(http);\n this.orgs = new Orgs(http);\n this.projects = new Projects(http);\n this.environments = new Environments(http);\n this.account = new Account(http);\n this.receipt = new Receipts(http);\n this.phoneModels = new PhoneModels(http);\n this.resolve = new Resolve(\n new HttpClient({\n apiKey: opts.apiKey,\n baseUrl: opts.resolveBaseUrl ?? 'https://resolve.codai.ro',\n timeoutMs: opts.timeoutMs ?? 120_000,\n maxRetries: opts.maxRetries ?? 2,\n fetch: opts.fetch,\n defaults: opts.client ? { client: opts.client } : {},\n }),\n );\n\n // Callable resources keep the 0.2.x top-level signatures working\n // (`client.embeddings({...})`, `client.models()`, `client.feedback(id, 1)`)\n // while also exposing `.create()` / `.list()` / `.submit()`.\n this.chat = callable(new Chat(http), (o: ChatOptions) =>\n this.chat.completions.create(this.legacyBody(o), {\n ext: this.legacyExt(o),\n signal: o.signal,\n }),\n );\n this.embeddings = callable(new Embeddings(http), async (o: EmbeddingsOptions) => {\n const r = await this.embeddings.create(\n { input: o.input, model: o.model, dimensions: o.dimensions },\n { signal: o.signal },\n );\n return { embeddings: r.embeddings, raw: r.raw };\n });\n this.models = callable(new Models(http), async () =>\n (await this.models.list()).map((m) => ({ id: m.id })),\n );\n this.feedback = callable(\n new Feedback(http),\n async (requestId: string, rating: 1 | -1, comment?: string) => {\n await this.feedback.submit({\n event_id: requestId,\n rating,\n ...(comment ? { comment } : {}),\n });\n },\n );\n }\n\n // ------------------------------------------------- 0.2.x compatibility aliases\n\n /** Alias of `chat.completions.stream()` with the 0.2.x option names. */\n chatStream(opts: ChatOptions): ChatStream {\n return this.chat.completions.stream(this.legacyBody(opts), {\n ext: this.legacyExt(opts),\n signal: opts.signal,\n });\n }\n\n /** Alias of `tokens.create()`. */\n mintToken(scope: EphemeralScope, ttlSeconds?: number): Promise<EphemeralToken> {\n return this.tokens.create(scope, ttlSeconds);\n }\n\n private legacyBody(opts: ChatOptions): ChatCompletionInput {\n return {\n model: opts.model ?? 'codai',\n messages: opts.messages,\n ...(opts.temperature !== undefined ? { temperature: opts.temperature } : {}),\n ...(opts.maxTokens !== undefined ? { max_tokens: opts.maxTokens } : {}),\n ...(opts.tools ? { tools: opts.tools } : {}),\n };\n }\n\n private legacyExt(opts: ChatOptions): CodaiRequestExtensions {\n return {\n ...opts.ext,\n ...(opts.sessionId ? { sessionId: opts.sessionId } : {}),\n ...(opts.agentMode ? { mode: 'agent' as const } : {}),\n ...(opts.compact ? { compact: opts.compact } : {}),\n ...(opts.bestOf !== undefined ? { bestOf: opts.bestOf } : {}),\n ...(opts.agentId ? { agentId: opts.agentId } : {}),\n };\n }\n}\n\n/**\n * Make an object callable: returns a function that forwards calls to `fn`\n * and carries every own/prototype member of `target` (methods bound).\n */\nfunction callable<T extends object, F extends (...args: never[]) => unknown>(\n target: T,\n fn: F,\n): T & F {\n const f = ((...args: Parameters<F>) => fn(...args)) as T & F;\n for (const key of allKeys(target)) {\n const value = (target as Record<string, unknown>)[key];\n Object.defineProperty(f, key, {\n value:\n typeof value === 'function' ? (value as (...a: unknown[]) => unknown).bind(target) : value,\n enumerable: true,\n writable: false,\n });\n }\n return f;\n}\n\nfunction allKeys(obj: object): string[] {\n const keys = new Set<string>();\n let cur: object | null = obj;\n while (cur && cur !== Object.prototype) {\n for (const k of Object.getOwnPropertyNames(cur)) if (k !== 'constructor') keys.add(k);\n cur = Object.getPrototypeOf(cur);\n }\n return [...keys];\n}\n\nexport default Codai;\n\n// ------------------------------------------------------------------ exports\nexport { CodaiError, HttpClient, extensionHeaders, readSse, frameJson } from './http';\nexport type { CodaiRequestExtensions, ErrorCode, SseFrame, RequestOptions } from './http';\nexport { OPERATION_METHODS, STREAMING_OPERATIONS, RESOLVE_OPERATION_METHODS } from './operations';\nexport type { paths, components, operations } from './generated/gateway';\nexport type {\n paths as ResolvePaths,\n components as ResolveComponents,\n operations as ResolveOperations,\n} from './generated/resolve';\n\nexport * from './resources/chat';\nexport * from './resources/messages';\nexport * from './resources/responses';\nexport * from './resources/embeddings';\nexport * from './resources/audio';\nexport * from './resources/tokens';\nexport * from './resources/models';\nexport * from './resources/health';\nexport * from './resources/agents';\nexport * from './resources/tools';\nexport * from './resources/tasks';\nexport * from './resources/triggers';\nexport * from './resources/sessions';\nexport * from './resources/devices';\nexport * from './resources/hosts';\nexport * from './resources/orgs';\nexport * from './resources/projects';\nexport * from './resources/environments';\nexport * from './resources/account';\nexport * from './resources/resolve';\n"]}