codai-sdk 0.7.0 → 0.13.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/README.md +14 -2
- package/dist/index.d.ts +1848 -236
- package/dist/index.js +388 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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":["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"]}
|
|
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/images.ts","../src/resources/messages.ts","../src/resources/models.ts","../src/resources/orgs.ts","../src/resources/projects.ts","../src/resources/realtime.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/prompts.ts","../src/resources/tokens.ts","../src/resources/tools.ts","../src/resources/verify.ts","../src/operations.ts","../src/index.ts"],"names":["enc","base64ToBytes"],"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' | 'wear' | 'vscode';\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`, `POST /v1/audio/speech` and `POST /v1/audio/speech/stream`. */\nimport { type CodaiRequestExtensions, type HttpClient, frameJson } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type TranscriptionResponse = Reply<'createTranscription'>;\nexport type SpeechRequest = Mutable<Body<'createSpeech'>>;\nexport type SpeechStreamRequest = Mutable<Body<'createSpeechStream'>>;\n\n/** One event of `audio.speechStream()` (Azure neural TTS with lip-sync timing). */\nexport type SpeechStreamEvent =\n | {\n type: 'start';\n model: string;\n voice: string;\n format: 'pcm' | 'mp3';\n content_type: string;\n sample_rate: number;\n }\n /** `delta` is base64; `audio` is the decoded bytes (PCM16 LE mono 24 kHz for `pcm`). */\n | { type: 'audio'; delta: string; audio: Uint8Array }\n /** Azure viseme id (0-21) at `offsetMs` on the audio timeline. */\n | { type: 'viseme'; id: number; offsetMs: number }\n | { type: 'word'; text: string; offsetMs: number; durationMs: number }\n | {\n type: 'done';\n audio_ms: number | null;\n audioBytes: number;\n visemes: number;\n words: number;\n }\n | { type: 'error'; error: { code: string; message: string } };\n/** Raw generated event schema (all fields optional). */\nexport type SpeechStreamEventSchema = Schema<'SpeechStreamEvent'>;\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\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 /**\n * Streaming neural TTS with visemes + word boundaries (`codai-tts-ro`, Azure AI Speech).\n * Yields `start`, then `audio` / `viseme` / `word` in synthesis order, then `done` (or `error`).\n * Voices: `alina` (default), `emil`, or any Azure neural voice name. Default format `pcm`\n * (PCM16 mono 24 kHz). Works with an ephemeral token of scope `audio` or `live`.\n */\n async *speechStream(\n body: SpeechStreamRequest,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): AsyncGenerator<SpeechStreamEvent, void, undefined> {\n const frames = this.http.sse('/v1/audio/speech/stream', {\n body: { ...body, model: body.model ?? 'codai-tts-ro' },\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 || typeof data.type !== 'string') continue;\n if (data.type === 'audio' && typeof data.delta === 'string') {\n yield { type: 'audio', delta: data.delta, audio: base64ToBytes(data.delta) };\n continue;\n }\n yield data as SpeechStreamEvent;\n if (data.type === 'done' || data.type === 'error') return;\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 * `POST /v1/keys/self/revoke` — the API key this client uses revokes ITSELF (sign out).\n * Every later call with it fails with 401.\n */\n revokeSelfKey(opts: CallOpts = {}): Promise<Reply<'revokeSelfKey'>> {\n return this.http.json<Reply<'revokeSelfKey'>>('/v1/keys/self/revoke', {\n method: 'POST',\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","/**\n * `POST /v1/images/generations` and `POST /v1/images/edits` — Gemini image models on Vertex AI.\n * `codai-image` (default, gemini-3.1-flash-image, EU), `codai-image-fast`, `codai-image-pro`.\n * Output from the EU endpoint carries C2PA credentials + SynthID: keep the bytes as returned.\n */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type ImagesRequest = Mutable<Body<'createImage'>>;\nexport type ImagesResponse = Reply<'createImage'>;\nexport type ImageEditRequest = Mutable<Body<'editImage'>>;\n\nexport interface ImagesResult {\n /** Decoded image bytes, one per generated image (see `mimeTypes`). */\n images: Uint8Array[];\n /** MIME type of each entry in `images` (usually `image/png`). */\n mimeTypes: string[];\n raw: ImagesResponse;\n /** Upstream model that produced the images (`x-codai-routed-to`). */\n routedTo: string | null;\n /** Vertex location that processed the request, `eu` or `global` (`x-codai-data-region`). */\n dataRegion: string | null;\n /** Usage-based charge for this request in micro-USD (`x-codai-cost-micro-usd`). */\n costMicroUsd: number | null;\n headers: Headers;\n}\n\n/** Image generation typically takes 5–30 s; the gateway allows 120 s upstream. */\nconst MIN_IMAGE_TIMEOUT_MS = 150_000;\n\nfunction decodeBase64(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\nexport class Images {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Generate images. Needs a real API key (ephemeral tokens are rejected).\n * Pass `reference_images` to keep a logo/palette/product consistent.\n */\n async generate(\n body: Omit<ImagesRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<ImagesResult> {\n return this.post(\n '/v1/images/generations',\n { ...body, model: body.model ?? 'codai-image' },\n opts,\n );\n }\n\n /**\n * Edit one or more input images (`image`: one `{ b64_json, mime_type }` or an array of up to 14)\n * from a text instruction. JSON body; `mask` is not supported — describe the region in `prompt`.\n */\n async edit(\n body: Omit<ImageEditRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<ImagesResult> {\n return this.post('/v1/images/edits', { ...body, model: body.model ?? 'codai-image' }, opts);\n }\n\n private async post(\n path: string,\n body: unknown,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal },\n ): Promise<ImagesResult> {\n const res = await this.http.request(path, {\n body,\n ext: opts.ext,\n signal: opts.signal,\n // 0 = timeout disabled on the client; otherwise never cap below the image floor.\n timeoutMs:\n this.http.timeoutMs === 0 ? 0 : Math.max(this.http.timeoutMs, MIN_IMAGE_TIMEOUT_MS),\n });\n const raw = (await res.json()) as ImagesResponse;\n const cost = res.headers.get('x-codai-cost-micro-usd');\n const data = raw.data ?? [];\n return {\n images: data.map((d) => decodeBase64(d.b64_json)),\n mimeTypes: data.map((d) => d.mime_type ?? 'image/png'),\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n dataRegion: res.headers.get('x-codai-data-region'),\n costMicroUsd: cost === null ? null : Number(cost),\n headers: res.headers,\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 * `wss://…/v1/realtime` — dependency-free realtime client (live transcription and the OpenAI\n * Realtime protocol lanes). Not an OpenAPI operation (OpenAPI cannot describe WebSockets), so it is\n * outside the `OPERATION_METHODS` parity table.\n *\n * const live = codai.realtime.connect({ model: 'codai-transcribe-live', language: 'ro', token });\n * live.appendAudio(pcm16At24kHz); // Int16Array | ArrayBuffer | Uint8Array\n * for await (const ev of live) {\n * if (ev.type === 'conversation.item.input_audio_transcription.delta') draw(ev.delta);\n * }\n *\n * Uses the global `WebSocket` (browsers, Node ≥ 22, Deno, Bun) or an injected constructor.\n * - Browser path: pass an ephemeral `token` (scope `realtime` or `live`); it travels as `?key=`.\n * Raw `codai_` keys in the query string are refused by the gateway (close 4401).\n * - Server path: pass `apiKey` (or a token) with a WebSocket constructor that accepts headers\n * (e.g. `ws`); it is sent as `Authorization: Bearer` on the upgrade.\n */\n\n/** Minimal WebSocket surface (browser `WebSocket`, Node 22 global, or the `ws` package). */\nexport interface RealtimeSocket {\n readonly readyState: number;\n binaryType?: string;\n send(data: string | ArrayBuffer | ArrayBufferView): void;\n close(code?: number, reason?: string): void;\n onopen: ((ev: unknown) => void) | null;\n onmessage: ((ev: { data: unknown }) => void) | null;\n onclose: ((ev: { code: number; reason: string }) => void) | null;\n onerror: ((ev: unknown) => void) | null;\n}\n\n/** `new (url, protocols?, options?)` — the third argument is used for headers by `ws`. */\nexport type RealtimeSocketCtor = new (\n url: string,\n protocols?: string | string[],\n options?: { headers?: Record<string, string> },\n) => RealtimeSocket;\n\nexport type RealtimeModel =\n 'codai-transcribe-live' | 'codai-realtime' | 'codai-voice' | (string & Record<never, never>);\n\nexport interface RealtimeConnectOptions {\n /** Default `codai-transcribe-live`. */\n model?: RealtimeModel;\n /** Language hint (`ro`, `en`, …). `ro` uses the Deepgram Nova-3 lane when the gateway has it. */\n language?: string;\n /** Ephemeral token (scope `realtime` or `live`) — sent as `?key=`. Required in browsers. */\n token?: string;\n /** Raw API key — sent as `Authorization: Bearer` (needs a ctor that supports headers). */\n apiKey?: string;\n /** Conversation id recorded on the usage row (`?session_id=`). */\n sessionId?: string;\n /**\n * First frame sent on open. Default for `codai-transcribe-live`: a transcription\n * `session.update` (PCM 24 kHz, `language` when set). Pass `null` to send nothing.\n */\n sessionUpdate?: Record<string, unknown> | null;\n /** Injectable WebSocket constructor (tests, `ws` on older Node). Defaults to `globalThis.WebSocket`. */\n WebSocket?: RealtimeSocketCtor;\n /** Override the gateway base URL (default: the client's `baseUrl`). */\n baseUrl?: string;\n}\n\n/** Typed subset of server events; anything else arrives as `RealtimeUnknownEvent`. */\nexport type RealtimeEvent =\n | {\n type: 'session.created' | 'session.updated';\n session?: Record<string, unknown>;\n event_id?: string;\n }\n | {\n type: 'conversation.item.input_audio_transcription.delta';\n item_id: string;\n content_index?: number;\n delta: string;\n event_id?: string;\n }\n | {\n type: 'conversation.item.input_audio_transcription.completed';\n item_id: string;\n content_index?: number;\n transcript: string;\n event_id?: string;\n }\n | { type: 'input_audio_buffer.committed'; item_id?: string; previous_item_id?: string | null }\n | { type: 'input_audio_buffer.cleared' }\n | { type: 'error'; error: { type?: string; code?: string; message?: string } }\n /** Emitted by the client itself when the socket closes (always the last event). */\n | { type: 'close'; code: number; reason: string };\nexport type RealtimeUnknownEvent = { type: string; [k: string]: unknown };\nexport type RealtimeAnyEvent = RealtimeEvent | RealtimeUnknownEvent;\n\ntype Listener = (ev: RealtimeAnyEvent) => void;\n\nconst OPEN = 1;\n\nfunction toBytes(audio: Int16Array | ArrayBuffer | Uint8Array): Uint8Array {\n if (audio instanceof ArrayBuffer) return new Uint8Array(audio);\n return new Uint8Array(audio.buffer, audio.byteOffset, audio.byteLength);\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let bin = '';\n const CHUNK = 0x8000;\n for (let i = 0; i < bytes.length; i += CHUNK) {\n bin += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n return btoa(bin);\n}\n\n/** A live realtime session: async-iterable of events + `on()` listeners. */\nexport class RealtimeSession implements AsyncIterable<RealtimeAnyEvent> {\n private readonly listeners = new Map<string, Set<Listener>>();\n private readonly queue: RealtimeAnyEvent[] = [];\n private readonly waiters: Array<(r: IteratorResult<RealtimeAnyEvent>) => void> = [];\n private readonly outbox: string[] = [];\n private closed = false;\n /** Resolves when the socket is open (rejects if it closes first). */\n readonly ready: Promise<void>;\n\n constructor(\n readonly socket: RealtimeSocket,\n firstFrame: Record<string, unknown> | null,\n ) {\n let resolveReady!: () => void;\n let rejectReady!: (e: Error) => void;\n this.ready = new Promise<void>((res, rej) => {\n resolveReady = res;\n rejectReady = rej;\n });\n // Unhandled-rejection safety: callers that never await `ready` still get the `close` event.\n this.ready.catch(() => undefined);\n socket.onopen = () => {\n if (firstFrame) socket.send(JSON.stringify(firstFrame));\n for (const f of this.outbox.splice(0)) socket.send(f);\n resolveReady();\n };\n socket.onmessage = (ev) => {\n if (typeof ev.data !== 'string') return;\n let parsed: unknown;\n try {\n parsed = JSON.parse(ev.data);\n } catch {\n return;\n }\n if (\n parsed &&\n typeof parsed === 'object' &&\n typeof (parsed as { type?: unknown }).type === 'string'\n ) {\n this.emit(parsed as RealtimeAnyEvent);\n }\n };\n socket.onerror = () => {\n /* the close event carries the code */\n };\n socket.onclose = (ev) => {\n rejectReady(\n new Error(`realtime socket closed before open (${String(ev.code)} ${ev.reason})`),\n );\n this.emit({ type: 'close', code: ev.code, reason: ev.reason });\n this.closed = true;\n for (const w of this.waiters.splice(0)) w({ value: undefined, done: true });\n };\n }\n\n /** Listen for one event type (`'*'` = every event). Returns an unsubscribe function. */\n on(type: string, fn: Listener): () => void {\n let set = this.listeners.get(type);\n if (!set) this.listeners.set(type, (set = new Set()));\n set.add(fn);\n return () => set.delete(fn);\n }\n\n /** Send any client event (JSON). Queued until the socket opens. */\n send(event: Record<string, unknown>): void {\n if (this.closed) throw new Error('realtime session is closed');\n const frame = JSON.stringify(event);\n if (this.socket.readyState === OPEN) this.socket.send(frame);\n else this.outbox.push(frame);\n }\n\n /** Append PCM16 little-endian mono audio (24 kHz for `codai-transcribe-live`). */\n appendAudio(audio: Int16Array | ArrayBuffer | Uint8Array): void {\n const bytes = toBytes(audio);\n if (bytes.byteLength === 0) return;\n this.send({ type: 'input_audio_buffer.append', audio: bytesToBase64(bytes) });\n }\n\n /** Close the current utterance: the server answers with one `...transcription.completed`. */\n commit(): void {\n this.send({ type: 'input_audio_buffer.commit' });\n }\n\n /** Drop audio the server holds for the current utterance. */\n clear(): void {\n this.send({ type: 'input_audio_buffer.clear' });\n }\n\n close(code = 1000, reason = 'client closed'): void {\n if (this.closed) return;\n this.socket.close(code, reason);\n }\n\n [Symbol.asyncIterator](): AsyncIterator<RealtimeAnyEvent> {\n return {\n next: () => {\n const ev = this.queue.shift();\n if (ev) return Promise.resolve({ value: ev, done: false });\n if (this.closed) return Promise.resolve({ value: undefined, done: true });\n return new Promise((resolve) => this.waiters.push(resolve));\n },\n return: () => {\n this.close();\n return Promise.resolve({ value: undefined, done: true });\n },\n };\n }\n\n private emit(ev: RealtimeAnyEvent): void {\n for (const fn of this.listeners.get(ev.type) ?? []) fn(ev);\n for (const fn of this.listeners.get('*') ?? []) fn(ev);\n const w = this.waiters.shift();\n if (w) w({ value: ev, done: false });\n else this.queue.push(ev);\n }\n}\n\n/** Build the `wss://…/v1/realtime?…` URL (exported for tests and custom transports). */\nexport function realtimeUrl(baseUrl: string, opts: RealtimeConnectOptions): string {\n const url = new URL(`${baseUrl.replace(/\\/$/, '').replace(/^http/, 'ws')}/v1/realtime`);\n url.searchParams.set('model', opts.model ?? 'codai-transcribe-live');\n if (opts.language) url.searchParams.set('language', opts.language);\n if (opts.sessionId) url.searchParams.set('session_id', opts.sessionId);\n if (opts.token) url.searchParams.set('key', opts.token);\n return url.toString();\n}\n\nexport class Realtime {\n constructor(private readonly defaults: { baseUrl: string; apiKey?: string }) {}\n\n /** Open a realtime session. Returns immediately; `await session.ready` to wait for the socket. */\n connect(opts: RealtimeConnectOptions = {}): RealtimeSession {\n const Ctor = opts.WebSocket ?? (globalThis as { WebSocket?: RealtimeSocketCtor }).WebSocket;\n if (!Ctor) throw new Error('codai.realtime: no WebSocket available — pass options.WebSocket');\n const model = opts.model ?? 'codai-transcribe-live';\n let token = opts.token;\n let apiKey = token ? undefined : (opts.apiKey ?? this.defaults.apiKey);\n // A client constructed with an ephemeral token uses it the browser way (`?key=`).\n if (apiKey?.startsWith('codai_eph_v1.')) {\n token = apiKey;\n apiKey = undefined;\n }\n if (!token && !apiKey) throw new Error('codai.realtime: pass `token` (browser) or `apiKey`');\n const url = realtimeUrl(opts.baseUrl ?? this.defaults.baseUrl, { ...opts, model, token });\n const socket = apiKey\n ? new Ctor(url, undefined, { headers: { Authorization: `Bearer ${apiKey}` } })\n : new Ctor(url);\n if ('binaryType' in socket) socket.binaryType = 'arraybuffer';\n const first =\n opts.sessionUpdate !== undefined\n ? opts.sessionUpdate\n : model === 'codai-transcribe-live'\n ? {\n type: 'session.update',\n session: {\n type: 'transcription',\n audio: {\n input: {\n format: { type: 'audio/pcm', rate: 24000 },\n transcription: {\n model,\n ...(opts.language ? { language: opts.language } : {}),\n },\n },\n },\n },\n }\n : null;\n return new RealtimeSession(socket, first);\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'];\n/** How an accepted job is paid: `free` > `intro` (€1) > `credit` (t7 fix credit) > `wallet`. */\nexport type ResolvePaidWith = ResolveSchemas['ResolvePaidWith'];\n/** `GET /v1/resolve/balance` — fix credits, intro availability, wallet (EUR micros). */\nexport type ResolveBalance = ResolveSchemas['ResolveBalance'];\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 /** Present only for a `t7` job: fix-bundle checkout (10 t7 fix credits for €49). */\n readonly bundleUrl?: 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 if (typeof body.bundle_url === 'string') this.bundleUrl = body.bundle_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 * The result's `paid_with` says how it was paid (`intro` €1 hold, `credit`\n * t7 fix credit, or `wallet`). Throws `ResolveInsufficientFundsError` (402,\n * carries `topupUrl`, plus `bundleUrl` for t7) when the wallet is short,\n * `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/balance` — fix credits (t7 only), intro availability and wallet balance. */\n balance(opts: CallOpts = {}): Promise<ResolveBalance> {\n return this.call<ResolveBalance>('/v1/resolve/balance', { 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}${b.bundle_url ? ` or buy 10 t7 fixes for €49 at ${b.bundle_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>;\ntype SessionDispatchBase = Omit<Mutable<Body<'dispatchToDevice'>>, 'mode' | 'text' | 'turn_id'>;\n/**\n * `POST …/dispatch` body. `send` (the default) needs `text` and runs it as a new turn on the\n * target; `open` is a handoff — the target only opens the session, so it takes no text/turn.\n */\nexport type SessionDispatchRequest =\n | (SessionDispatchBase & { mode?: 'send'; text: string; turn_id?: string })\n | (SessionDispatchBase & { mode: 'open'; text?: never; turn_id?: never });\nexport type SessionDispatchMode = NonNullable<Body<'dispatchToDevice'>['mode']>;\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 /**\n * `POST /v1/sessions/{id}/dispatch` — queue a `send` for one device and wake it over FCM.\n * `{ mode: 'open' }` hands the session off instead: the target just opens it (no user turn).\n */\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'>;\ntype SystemOneState = NonNullable<SystemOneRequest['state']>;\nexport type SystemOneAnswers = NonNullable<SystemOneResponse['answers']>;\n\n/** Single-state call: `answers` is always present. */\nexport type SystemOneSingleRequest = Omit<SystemOneRequest, 'items'> & { state: SystemOneState };\nexport type SystemOneSingleResponse = SystemOneResponse & { answers: SystemOneAnswers };\n\n/** Batch call (1-16 items, same questions, run concurrently). */\nexport type SystemOneBatchRequest = Omit<SystemOneRequest, 'state' | 'items'> & {\n items: Array<{ id: string; state: SystemOneState }>;\n};\nexport type SystemOneBatchResponse = SystemOneResponse & {\n items: Array<{ id: string; answers: SystemOneAnswers }>;\n};\n\nexport class SystemOne {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Ask one or more typed questions about `state` (or about each of `items`). Throws on 503\n * `s1_unavailable` like any other error — keep a local fallback and catch it. The gateway\n * substitutes a generative model ONLY when you pass `fallback: 'codai-fast'`, and then the\n * response says `fallback_used: true`. `timeout_ms` (100-5000) bounds the s1 call.\n */\n async create(\n body: SystemOneSingleRequest,\n opts?: { ext?: CodaiRequestExtensions; signal?: AbortSignal },\n ): Promise<SystemOneSingleResponse>;\n async create(\n body: SystemOneBatchRequest,\n opts?: { ext?: CodaiRequestExtensions; signal?: AbortSignal },\n ): Promise<SystemOneBatchResponse>;\n async create(\n body: SystemOneRequest,\n opts?: { ext?: CodaiRequestExtensions; signal?: AbortSignal },\n ): Promise<SystemOneResponse>;\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 /** Same questions about up to 16 states in one call; results come back in `items` order. */\n batch(\n body: SystemOneBatchRequest,\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SystemOneBatchResponse> {\n return this.create(body, opts);\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","/** `/v1/prompts/*` — pending prompts: ready-to-paste prompts left for a future chat (handoffs, follow-ups). */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Prompt = Schema<'Prompt'>;\nexport type PromptStatus = Schema<'PromptStatus'>;\nexport type PromptSource = Schema<'PromptSource'>;\nexport type PromptList = Reply<'listPrompts'>;\nexport type PromptListQuery = Mutable<QueryOf<'listPrompts'>>;\nexport type PromptCreateRequest = Mutable<Body<'createPrompt'>>;\nexport type PromptCreated = Reply<'createPrompt'>;\nexport type PromptPatch = Mutable<Body<'updatePrompt'>>;\nexport type PromptLaunched = Reply<'launchPrompt'>;\nexport type PromptDeleted = Reply<'deletePrompt'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nconst one = (id: string, suffix = '') => `/v1/prompts/${encodeURIComponent(id)}${suffix}`;\n\nexport class Prompts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/prompts?status=&limit=` — default `open`; `due` = open and `not_before` empty or passed. */\n list(query: PromptListQuery = {}, opts: CallOpts = {}): Promise<PromptList> {\n return this.http.json<PromptList>('/v1/prompts', {\n query: { status: query.status, limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/prompts` — idempotent on the text (`created: false` for a duplicate); `goal_key` supersedes older open ones. */\n create(body: PromptCreateRequest, opts: CallOpts = {}): Promise<PromptCreated> {\n return this.http.json<PromptCreated>('/v1/prompts', {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/prompts/{id}`. */\n get(id: string, opts: CallOpts = {}): Promise<Prompt> {\n return this.http.json<Prompt>(one(id), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/prompts/{id}` — edit, snooze (`not_before`), close (`status: 'done' | 'dismissed'`). */\n update(id: string, body: PromptPatch, opts: CallOpts = {}): Promise<Prompt> {\n return this.http.json<Prompt>(one(id), {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/prompts/{id}` — `{ deleted: 0 }` when the id is missing or not yours. */\n delete(id: string, opts: CallOpts = {}): Promise<PromptDeleted> {\n return this.http.json<PromptDeleted>(one(id), {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/prompts/{id}/launch` — new shared session + `send` control on a device; the prompt becomes `launched`. */\n launch(id: string, deviceId?: string, opts: CallOpts = {}): Promise<PromptLaunched> {\n return this.http.json<PromptLaunched>(one(id, '/launch'), {\n method: 'POST',\n body: deviceId ? { device_id: deviceId } : {},\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\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\n/** `live` = realtime + audio in one token (a live co-host's speech-to-text and text-to-speech). */\nexport type EphemeralScope = 'realtime' | 'audio' | 'embeddings' | 'live';\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 * `/v1/verify/agent-output*` — EXPERIMENTAL, unaudited (HIDE protocol) verification of\n * signed agent outputs. Provenance only, never authentication. Unauthenticated endpoints.\n */\nimport { type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type EnvironmentTaskOutputSignature = Schema<'EnvironmentTaskOutputSignature'>;\nexport type AgentOutputKey = Reply<'getAgentOutputKey'>;\nexport type AgentOutputVerifyBody = Mutable<Body<'verifyAgentOutput'>>;\nexport type AgentOutputVerifyResult = Reply<'verifyAgentOutput'>;\n\ntype CallOpts = { signal?: AbortSignal };\n\nexport class Verify {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/verify/agent-output/key` — `{ enabled: false }` when signing is off. */\n agentOutputKey(opts: CallOpts = {}): Promise<AgentOutputKey> {\n return this.http.json<AgentOutputKey>('/v1/verify/agent-output/key', { signal: opts.signal });\n }\n\n /** `POST /v1/verify/agent-output` — 503 `signing_disabled` when signing is off. */\n agentOutput(body: AgentOutputVerifyBody, opts: CallOpts = {}): Promise<AgentOutputVerifyResult> {\n return this.http.json<AgentOutputVerifyResult>('/v1/verify/agent-output', {\n method: 'POST',\n body,\n signal: opts.signal,\n // 503 here means `signing_disabled`, not a transient outage.\n noRetry: true,\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 createImage: 'images.generate',\n editImage: 'images.edit',\n createSystemOne: 'systemOne.create',\n createTranscription: 'audio.transcribe',\n createSpeech: 'audio.speech',\n createSpeechStream: 'audio.speechStream',\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 // Pending prompts\n listPrompts: 'prompts.list',\n createPrompt: 'prompts.create',\n getPrompt: 'prompts.get',\n updatePrompt: 'prompts.update',\n deletePrompt: 'prompts.delete',\n launchPrompt: 'prompts.launch',\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 revokeSelfKey: 'devices.revokeSelfKey',\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 // Agent-output signatures (EXPERIMENTAL, HIDE)\n getAgentOutputKey: 'verify.agentOutputKey',\n verifyAgentOutput: 'verify.agentOutput',\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 'createSpeechStream',\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 getResolveBalance: 'resolve.balance',\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.images / client.audio / client.tokens / client.models / client.health\n * client.systemOne.create / .batch (typed decisions, codai-s1)\n * client.realtime.connect (WebSocket live STT / voice; not an OpenAPI operation)\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.verify.agentOutputKey / .agentOutput (EXPERIMENTAL HIDE-signed agent outputs)\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 { Images } from './resources/images';\nimport { Messages } from './resources/messages';\nimport { Models } from './resources/models';\nimport { Orgs } from './resources/orgs';\nimport { Projects } from './resources/projects';\nimport { Realtime } from './resources/realtime';\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 { Prompts } from './resources/prompts';\nimport { type EphemeralScope, type EphemeralToken, Tokens } from './resources/tokens';\nimport { Tools } from './resources/tools';\nimport { Verify } from './resources/verify';\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 /** Image generation and editing (`images.generate({ prompt })`, `images.edit({ prompt, image })`; codai-image = gemini-3.1-flash-image, EU). */\n readonly images: Images;\n readonly audio: Audio;\n /** Typed decisions from codai-s1 (`systemOne.create({ state, questions })`). */\n readonly systemOne: SystemOne;\n readonly tokens: Tokens;\n /** WebSocket realtime sessions (`realtime.connect({ model, language, token })`) — live STT and voice. */\n readonly realtime: Realtime;\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 /** Pending prompts — ready-to-paste prompts left for a future chat (handoffs, dated follow-ups). */\n readonly prompts: Prompts;\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 /** EXPERIMENTAL (HIDE, unaudited): verify signed agent outputs. Provenance only. */\n readonly verify: Verify;\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.images = new Images(http);\n this.audio = new Audio(http);\n this.systemOne = new SystemOne(http);\n this.tokens = new Tokens(http);\n this.realtime = new Realtime({ baseUrl: http.baseUrl, apiKey: opts.apiKey });\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.prompts = new Prompts(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.verify = new Verify(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/images';\nexport * from './resources/audio';\nexport * from './resources/tokens';\nexport * from './resources/realtime';\nexport * from './resources/system-one';\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/prompts';\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/verify';\nexport * from './resources/account';\nexport * from './resources/resolve';\n"]}
|