codai-sdk 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * codai-sdk — official TypeScript client for the codai AI gateway.\n *\n * Full-surface client:\n * - chat(): OpenAI-compatible completions with codai extensions\n * (session, agent mode, compaction, best-of)\n * - chatStream(): SSE streaming — async-iterate text deltas, then await\n * `.final` for requestId / usage / routedTo / tool calls\n * - agents.run(): server-side agent loop (POST /v1/agents/run)\n * - feedback(): thumbs rating on a completed request\n * - models(): list models available to the key\n *\n * Zero dependencies; works in Node 18+ (global fetch) and modern edge\n * runtimes. Memory tools (memory_recall / memory_remember) and skills\n * (use_skill) are GATEWAY-NATIVE — the model invokes them server-side;\n * nothing to call from the SDK beyond enabling a session.\n */\n\nexport interface CodaiClientOptions {\n apiKey: string;\n /** Defaults to https://ai.codai.ro */\n baseUrl?: string;\n /** Stable conversation/session id — enables session memory + stickiness. */\n sessionId?: string;\n /** Default request timeout (ms). Default 120_000. */\n timeoutMs?: number;\n /** Retries on 429/5xx with exponential backoff. Default 2. */\n maxRetries?: number;\n}\n\nexport interface ChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | Array<Record<string, unknown>>;\n tool_call_id?: string;\n name?: string;\n}\n\nexport interface ChatOptions {\n model?: string;\n messages: ChatMessage[];\n temperature?: number;\n maxTokens?: number;\n tools?: Array<Record<string, unknown>>;\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 signal?: AbortSignal;\n}\n\nexport interface ChatResult {\n /** Assistant message content (first choice). */\n content: string;\n /** Raw OpenAI-shaped response. */\n raw: Record<string, unknown>;\n /** Request id — pass to feedback(). */\n requestId: string | null;\n /** Which upstream model actually served (x-codai-routed-to). */\n routedTo: string | null;\n /** Verification status for verified-execution responses ('passed'|'refined'|…), if present. */\n execVerify: string | null;\n usage: { promptTokens: number; completionTokens: number } | null;\n}\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n}\n\n/** Final metadata for a completed stream — resolved via `chatStream(...).final`. */\nexport interface ChatStreamResult {\n /** Full concatenated assistant text. */\n content: string;\n /** Tool calls assembled from streamed deltas (empty if none). */\n toolCalls: Array<Record<string, unknown>>;\n /** Request id — pass to feedback(). */\n requestId: 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 /** Token usage if the gateway sent a final usage frame. */\n usage: TokenUsage | null;\n}\n\n/**\n * A live chat stream. Async-iterate it to get text deltas, and await `.final`\n * afterwards for metadata (requestId, usage, routedTo, tool calls).\n *\n * const stream = codai.chatStream({ messages });\n * for await (const delta of stream) process.stdout.write(delta);\n * const { requestId, usage } = await stream.final;\n */\nexport interface ChatStream extends AsyncIterable<string> {\n /** Resolves once the stream completes (or rejects if it errors). */\n readonly final: Promise<ChatStreamResult>;\n}\n\nexport interface AgentRunOptions {\n task: string;\n context?: string;\n system?: string;\n model?: string;\n signal?: AbortSignal;\n}\n\nexport interface AgentRunResult {\n result: string;\n model: string;\n eventId: string | null;\n usage: Record<string, unknown> | null;\n}\n\nexport type EphemeralScope = 'realtime' | 'audio' | 'embeddings';\n\nexport interface EphemeralToken {\n token: string;\n expiresAt: string;\n scope: EphemeralScope;\n}\n\nexport interface TranscriptionOptions {\n /** Audio file contents. */\n file: Blob | Uint8Array | ArrayBuffer;\n /** Filename hint (extension drives format detection). Default audio.webm */\n filename?: string;\n model?: string;\n signal?: AbortSignal;\n}\n\nexport interface SpeechOptions {\n input: string;\n model?: string;\n voice?: string;\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 CodaiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: unknown,\n ) {\n super(message);\n this.name = 'CodaiError';\n }\n}\n\nconst RETRYABLE = new Set([429, 500, 502, 503, 504]);\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 */\nfunction 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') {\n fn.arguments = String(fn.arguments ?? '') + String(fv ?? '');\n } else {\n fn[fk] = fv;\n }\n }\n existing.function = fn;\n } else {\n existing[key] = val;\n }\n }\n acc.set(index, existing);\n}\n\nexport class Codai {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly sessionId?: string;\n private readonly timeoutMs: number;\n private readonly maxRetries: number;\n\n constructor(opts: CodaiClientOptions) {\n if (!opts.apiKey) throw new Error('Codai: apiKey is required');\n this.apiKey = opts.apiKey;\n this.baseUrl = (opts.baseUrl ?? 'https://ai.codai.ro').replace(/\\/$/, '');\n this.sessionId = opts.sessionId;\n this.timeoutMs = opts.timeoutMs ?? 120_000;\n this.maxRetries = opts.maxRetries ?? 2;\n }\n\n // ---------------------------------------------------------------- chat\n async chat(opts: ChatOptions): Promise<ChatResult> {\n const res = await this.request('/v1/chat/completions', this.chatBody(opts, false), {\n signal: opts.signal,\n headers: this.chatHeaders(opts),\n });\n const raw = (await res.json()) as Record<string, unknown>;\n const choices = raw.choices as Array<{ message?: { content?: string } }> | undefined;\n const usage = raw.usage as { prompt_tokens?: number; completion_tokens?: number } | undefined;\n return {\n content: String(choices?.[0]?.message?.content ?? ''),\n raw,\n requestId: res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n execVerify: res.headers.get('x-codai-exec-verify'),\n usage: usage\n ? {\n promptTokens: usage.prompt_tokens ?? 0,\n completionTokens: usage.completion_tokens ?? 0,\n }\n : null,\n };\n }\n\n /**\n * Streaming chat. Async-iterate the returned object for text deltas, then\n * `await stream.final` for metadata (requestId, usage, routedTo, toolCalls).\n */\n chatStream(opts: ChatOptions): ChatStream {\n const requestPromise = this.request('/v1/chat/completions', this.chatBody(opts, true), {\n signal: opts.signal,\n headers: this.chatHeaders(opts),\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 // Avoid unhandled-rejection noise if the caller never awaits `final`.\n final.catch(() => {});\n\n // Accumulate tool-call fragments by index (OpenAI streams them piecewise).\n const toolCallsByIndex = new Map<number, Record<string, unknown>>();\n\n async function* iterate(this: Codai): AsyncGenerator<string, void, undefined> {\n let content = '';\n let usage: TokenUsage | null = null;\n let res: Response;\n try {\n res = await requestPromise;\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n\n const reader = res.body?.getReader();\n if (!reader) {\n const e = new CodaiError('no response body', res.status, null);\n rejectFinal(e);\n throw e;\n }\n const decoder = new TextDecoder();\n let buffer = '';\n let finished = false;\n\n const buildResult = (): ChatStreamResult => ({\n content,\n toolCalls: [...toolCallsByIndex.values()],\n requestId: res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n execVerify: res.headers.get('x-codai-exec-verify'),\n usage,\n });\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // SSE frames are \\n\\n separated; keep the trailing partial in buffer.\n const frames = buffer.split('\\n\\n');\n buffer = frames.pop() ?? '';\n for (const frame of frames) {\n for (const line of frame.split('\\n')) {\n if (!line.startsWith('data:')) continue;\n const data = line.slice(5).trim();\n if (data === '[DONE]') {\n finished = true;\n break;\n }\n let chunk: {\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n choices?: Array<{\n delta?: {\n content?: string;\n tool_calls?: Array<{ index?: number } & Record<string, unknown>>;\n };\n }>;\n };\n try {\n chunk = JSON.parse(data);\n } catch {\n continue; // keep-alives / comments\n }\n if (chunk.usage) {\n usage = {\n promptTokens: chunk.usage.prompt_tokens ?? 0,\n completionTokens: chunk.usage.completion_tokens ?? 0,\n };\n }\n const delta = chunk.choices?.[0]?.delta;\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n const idx = typeof tc.index === 'number' ? tc.index : 0;\n mergeToolCall(toolCallsByIndex, idx, tc);\n }\n }\n if (delta?.content) {\n content += delta.content;\n yield delta.content;\n }\n }\n if (finished) break;\n }\n if (finished) break;\n }\n resolveFinal(buildResult());\n } catch (err) {\n rejectFinal(err);\n throw err;\n } finally {\n reader.releaseLock?.();\n }\n }\n\n const gen = iterate.call(this);\n return {\n [Symbol.asyncIterator]: () => gen,\n final,\n };\n }\n\n // -------------------------------------------------------------- agents\n readonly agents = {\n run: async (opts: AgentRunOptions): Promise<AgentRunResult> => {\n const res = await this.request(\n '/v1/agents/run',\n {\n task: opts.task,\n ...(opts.context ? { context: opts.context } : {}),\n ...(opts.system ? { system: opts.system } : {}),\n ...(opts.model ? { model: opts.model } : {}),\n },\n { signal: opts.signal },\n );\n const body = (await res.json()) as Record<string, unknown>;\n return {\n result: String(body.result ?? ''),\n model: String(body.model ?? ''),\n eventId: (body.event_id as string) ?? null,\n usage: (body.usage as Record<string, unknown>) ?? null,\n };\n },\n };\n\n // ------------------------------------------------------------ feedback\n /** Rate a completed request: +1 (helpful) or -1 (not helpful). */\n async feedback(requestId: string, rating: 1 | -1, comment?: string): Promise<void> {\n await this.request('/v1/feedback', {\n event_id: requestId,\n rating,\n ...(comment ? { comment } : {}),\n });\n }\n\n // -------------------------------------------------------------- models\n async models(): Promise<Array<{ id: string }>> {\n const res = await this.request('/v1/models', null, { method: 'GET' });\n const body = (await res.json()) as { data?: Array<{ id: string }> };\n return body.data ?? [];\n }\n\n // -------------------------------------------------------------- tokens\n /**\n * Mint a short-lived scoped token (60–3600s) for browser/webview clients.\n * The token authenticates only its scope's surface; chat is not mintable.\n */\n async mintToken(scope: EphemeralScope, ttlSeconds?: number): Promise<EphemeralToken> {\n const res = await this.request('/v1/tokens', {\n scope,\n ...(ttlSeconds !== undefined ? { ttl_seconds: ttlSeconds } : {}),\n });\n const body = (await res.json()) as {\n token: string;\n expires_at: string;\n scope: EphemeralScope;\n };\n return { token: body.token, expiresAt: body.expires_at, scope: body.scope };\n }\n\n // ---------------------------------------------------------- embeddings\n async embeddings(opts: EmbeddingsOptions): Promise<{ embeddings: number[][]; raw: unknown }> {\n const res = await this.request(\n '/v1/embeddings',\n {\n model: opts.model ?? 'codai-embed',\n input: opts.input,\n ...(opts.dimensions !== undefined ? { dimensions: opts.dimensions } : {}),\n },\n { signal: opts.signal },\n );\n const body = (await res.json()) as { data?: Array<{ embedding: number[] }> };\n return { embeddings: (body.data ?? []).map((d) => d.embedding), raw: body };\n }\n\n // --------------------------------------------------------------- audio\n readonly audio = {\n /** Speech-to-text (multipart upload, max 25 MB). Returns the transcript. */\n transcribe: async (opts: TranscriptionOptions): Promise<string> => {\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 const res = await fetch(`${this.baseUrl}/v1/audio/transcriptions`, {\n method: 'POST',\n headers: { Authorization: `Bearer ${this.apiKey}` },\n body: form,\n signal: opts.signal ?? AbortSignal.timeout(this.timeoutMs),\n });\n if (!res.ok) {\n let errBody: unknown = null;\n try {\n errBody = await res.json();\n } catch {\n /* non-JSON */\n }\n throw new CodaiError(`codai /v1/audio/transcriptions → ${res.status}`, res.status, errBody);\n }\n const body = (await res.json()) as { text?: string };\n return body.text ?? '';\n },\n\n /** Text-to-speech. Returns the audio bytes (default mp3). */\n speech: async (opts: SpeechOptions): Promise<ArrayBuffer> => {\n const res = await this.request(\n '/v1/audio/speech',\n {\n model: opts.model ?? 'codai-tts',\n input: opts.input,\n voice: opts.voice ?? 'alloy',\n },\n { signal: opts.signal },\n );\n return res.arrayBuffer();\n },\n };\n\n // ------------------------------------------------------------ internal\n private chatBody(opts: ChatOptions, stream: boolean): Record<string, unknown> {\n return {\n model: opts.model ?? 'codai',\n messages: opts.messages,\n stream,\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 chatHeaders(opts: ChatOptions): Record<string, string> {\n const h: Record<string, string> = {};\n const session = opts.sessionId ?? this.sessionId;\n if (session) h['x-codai-session-id'] = session;\n if (opts.agentMode) h['x-codai-mode'] = 'agent';\n if (opts.compact) h['x-codai-compact'] = opts.compact;\n if (opts.bestOf !== undefined) h['x-codai-best-of'] = String(opts.bestOf);\n if (opts.agentId) h['x-codai-agent-id'] = opts.agentId;\n return h;\n }\n\n private async request(\n path: string,\n body: unknown,\n init: { signal?: AbortSignal; headers?: Record<string, string>; method?: string } = {},\n ): Promise<Response> {\n const url = `${this.baseUrl}${path}`;\n let lastErr: unknown;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n const res = await fetch(url, {\n method: init.method ?? 'POST',\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n ...(body !== null ? { 'Content-Type': 'application/json' } : {}),\n ...init.headers,\n },\n ...(body !== null ? { body: JSON.stringify(body) } : {}),\n signal: init.signal ?? AbortSignal.timeout(this.timeoutMs),\n });\n if (res.ok) return res;\n if (RETRYABLE.has(res.status) && attempt < this.maxRetries) {\n await sleep(500 * 2 ** attempt + Math.random() * 250);\n continue;\n }\n let errBody: unknown = null;\n try {\n errBody = await res.json();\n } catch {\n /* non-JSON error */\n }\n throw new CodaiError(`codai ${path} → ${res.status}`, res.status, errBody);\n } catch (err) {\n if (err instanceof CodaiError) throw err;\n lastErr = err;\n if (attempt < this.maxRetries) {\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\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nexport default Codai;\n"]}
1
+ {"version":3,"sources":["../src/http.ts","../src/resources/account.ts","../src/resources/agents.ts","../src/resources/audio.ts","../src/resources/chat.ts","../src/resources/devices.ts","../src/resources/embeddings.ts","../src/resources/environments.ts","../src/resources/health.ts","../src/resources/hosts.ts","../src/resources/messages.ts","../src/resources/models.ts","../src/resources/orgs.ts","../src/resources/projects.ts","../src/resources/responses.ts","../src/resources/sessions.ts","../src/resources/system-one.ts","../src/resources/tasks.ts","../src/resources/triggers.ts","../src/resources/tokens.ts","../src/resources/tools.ts","../src/operations.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Shared HTTP layer for every resource: base URL, bearer auth, `X-Codai-*`\n * extension headers, retries, timeouts, JSON + SSE helpers and the\n * `CodaiError` mapping of the gateway error envelope.\n */\n\nimport type { components } from './generated/gateway';\n\nexport type ErrorEnvelope = components['schemas']['Error'];\nexport type ErrorCode = ErrorEnvelope['error']['code'];\n\nexport class CodaiError extends Error {\n /** Stable gateway error code (`invalid_api_key`, `rate_limit_exceeded`, …) when the body was an error envelope. */\n readonly code: ErrorCode | null;\n /** `x-codai-trace-id` (or `x-request-id`) of the failed response, when present. */\n readonly requestId: string | null;\n /** Seconds to wait before retrying, from `Retry-After` on 429s. */\n readonly retryAfter: number | null;\n\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: unknown,\n meta: { code?: ErrorCode | null; requestId?: string | null; retryAfter?: number | null } = {},\n ) {\n super(message);\n this.name = 'CodaiError';\n this.code = meta.code ?? extractCode(body);\n this.requestId = meta.requestId ?? null;\n this.retryAfter = meta.retryAfter ?? null;\n }\n}\n\nfunction extractCode(body: unknown): ErrorCode | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { code?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.code === 'string')\n return err.code as ErrorCode;\n }\n return null;\n}\n\nfunction extractMessage(body: unknown): string | null {\n if (body && typeof body === 'object') {\n const err = (body as { error?: { message?: unknown } }).error;\n if (err && typeof err === 'object' && typeof err.message === 'string') return err.message;\n }\n return null;\n}\n\nconst RETRYABLE = new Set([429, 500, 502, 503, 504]);\n\n/**\n * Per-request `X-Codai-*` extension headers. Every field maps 1:1 to the\n * request header of the same name (`effort` → `x-codai-effort`). Values are\n * sent verbatim; booleans become `1` / `0`.\n */\nexport interface CodaiRequestExtensions {\n /** `x-codai-session-id` — groups requests of one conversation. */\n sessionId?: string;\n /** `x-request-id` — echoed as `x-codai-trace-id`. */\n requestId?: string;\n /** `x-codai-effort` */\n effort?: 'minimal' | 'low' | 'medium' | 'high' | 'max';\n /** `x-codai-thinking` */\n thinking?: boolean;\n /** `x-codai-thinking-budget` */\n thinkingBudget?: number;\n /** `x-codai-thinking-pin` */\n thinkingPin?: boolean;\n /** `x-codai-cache` (`false` disables caching on direct model ids). */\n cache?: boolean;\n /** `x-codai-no-task` */\n noTask?: boolean;\n /** `x-codai-task-id` */\n taskId?: string;\n /** `x-codai-task-outcome` */\n taskOutcome?: 'pass' | 'fail';\n /** `x-codai-task-evidence` */\n taskEvidence?: 'exec_verdict' | 'reexec';\n /** `x-codai-client` */\n client?: string;\n /** `x-codai-incognito` */\n incognito?: boolean;\n /** `x-codai-no-recall` */\n noRecall?: boolean;\n /** `x-codai-proven-only` */\n provenOnly?: boolean;\n /** `x-codai-new-session` */\n newSession?: boolean;\n /** `x-codai-repo` */\n repo?: string;\n /** `x-codai-agent-id` */\n agentId?: string;\n /** `x-codai-disable-subagents` */\n disableSubagents?: boolean;\n /** `x-codai-mode: agent` */\n mode?: 'agent';\n /** `x-codai-server-tools` */\n serverTools?: boolean;\n /** `x-codai-orchestrate` */\n orchestrate?: boolean;\n /** `x-codai-cascade` */\n cascade?: 'verify';\n /** `x-codai-best-of` (number or `off`). */\n bestOf?: number | 'off';\n /** `x-codai-best-of-depth` */\n bestOfDepth?: number;\n /** `x-codai-reflect` */\n reflect?: boolean;\n /** `x-codai-step-verify` */\n stepVerify?: boolean;\n /** `x-codai-plan` */\n plan?: boolean;\n /** `x-codai-consensus` */\n consensus?: boolean;\n /** `x-codai-compact` (`'auto'` and `true` both send `1`). */\n compact?: boolean | 'auto';\n /** `x-codai-retrieval` */\n retrieval?: boolean;\n /** `x-codai-heuristics` */\n heuristics?: boolean;\n /** `x-codai-identity` */\n identity?: 'on' | 'off' | 'shadow';\n /** `x-codai-playbook` */\n playbook?: string;\n /** `x-codai-no-playbook` */\n noPlaybook?: boolean;\n /** `x-codai-debug` */\n debug?: boolean;\n /** `x-codai-device` — shared-sessions / hosts device UUID. */\n device?: string;\n /** `x-codai-device-name` */\n deviceName?: string;\n /** `x-codai-device-platform` */\n devicePlatform?: 'android' | 'ios' | 'web' | 'desktop' | 'cli' | 'agent';\n /** `x-codai-push-token` */\n pushToken?: string;\n /** `x-codai-share-token` */\n shareToken?: string;\n /** Escape hatch: any additional raw headers. */\n headers?: Record<string, string>;\n}\n\nconst EXTENSION_HEADERS: Record<Exclude<keyof CodaiRequestExtensions, 'headers'>, string> = {\n sessionId: 'x-codai-session-id',\n requestId: 'x-request-id',\n effort: 'x-codai-effort',\n thinking: 'x-codai-thinking',\n thinkingBudget: 'x-codai-thinking-budget',\n thinkingPin: 'x-codai-thinking-pin',\n cache: 'x-codai-cache',\n noTask: 'x-codai-no-task',\n taskId: 'x-codai-task-id',\n taskOutcome: 'x-codai-task-outcome',\n taskEvidence: 'x-codai-task-evidence',\n client: 'x-codai-client',\n incognito: 'x-codai-incognito',\n noRecall: 'x-codai-no-recall',\n provenOnly: 'x-codai-proven-only',\n newSession: 'x-codai-new-session',\n repo: 'x-codai-repo',\n agentId: 'x-codai-agent-id',\n disableSubagents: 'x-codai-disable-subagents',\n mode: 'x-codai-mode',\n serverTools: 'x-codai-server-tools',\n orchestrate: 'x-codai-orchestrate',\n cascade: 'x-codai-cascade',\n bestOf: 'x-codai-best-of',\n bestOfDepth: 'x-codai-best-of-depth',\n reflect: 'x-codai-reflect',\n stepVerify: 'x-codai-step-verify',\n plan: 'x-codai-plan',\n consensus: 'x-codai-consensus',\n compact: 'x-codai-compact',\n retrieval: 'x-codai-retrieval',\n heuristics: 'x-codai-heuristics',\n identity: 'x-codai-identity',\n playbook: 'x-codai-playbook',\n noPlaybook: 'x-codai-no-playbook',\n debug: 'x-codai-debug',\n device: 'x-codai-device',\n deviceName: 'x-codai-device-name',\n devicePlatform: 'x-codai-device-platform',\n pushToken: 'x-codai-push-token',\n shareToken: 'x-codai-share-token',\n};\n\n/** Translate an extensions bag into raw `X-Codai-*` headers. Exported for tests. */\nexport function extensionHeaders(ext: CodaiRequestExtensions | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n if (!ext) return out;\n for (const [key, header] of Object.entries(EXTENSION_HEADERS) as Array<\n [Exclude<keyof CodaiRequestExtensions, 'headers'>, string]\n >) {\n const value = ext[key];\n if (value === undefined || value === null) continue;\n if (typeof value === 'boolean') out[header] = value ? '1' : '0';\n else if (key === 'compact' && value === 'auto') out[header] = '1';\n else out[header] = String(value);\n }\n if (ext.headers) Object.assign(out, ext.headers);\n return out;\n}\n\nexport interface HttpClientOptions {\n apiKey: string;\n baseUrl: string;\n timeoutMs: number;\n maxRetries: number;\n /** Extensions applied to every request (per-call bags override per key). */\n defaults?: CodaiRequestExtensions;\n /** Injectable fetch (defaults to the global one). */\n fetch?: typeof fetch;\n}\n\nexport type Query = Record<string, string | number | boolean | undefined | null>;\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n /** JSON body (serialised) — pass `undefined` for no body. */\n body?: unknown;\n /** A pre-built body (FormData / Blob) sent as-is; disables retries. */\n rawBody?: BodyInit;\n query?: Query;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n /** Override the client timeout for this call (ms). `0` disables it (streams). */\n timeoutMs?: number;\n /** Never retry this call (multipart uploads, streams). */\n noRetry?: boolean;\n /** Statuses treated as success besides 2xx (e.g. 503 on `/health/ready`). */\n acceptStatus?: number[];\n}\n\nexport class HttpClient {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n readonly defaults: CodaiRequestExtensions;\n private readonly fetchImpl: typeof fetch;\n\n constructor(opts: HttpClientOptions) {\n this.apiKey = opts.apiKey;\n this.baseUrl = opts.baseUrl.replace(/\\/$/, '');\n this.timeoutMs = opts.timeoutMs;\n this.maxRetries = opts.maxRetries;\n this.defaults = opts.defaults ?? {};\n this.fetchImpl = opts.fetch ?? ((input, init) => fetch(input, init));\n }\n\n url(path: string, query?: Query): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null) continue;\n url.searchParams.set(k, typeof v === 'boolean' ? (v ? '1' : '0') : String(v));\n }\n }\n return url.toString();\n }\n\n headers(ext?: CodaiRequestExtensions, json = true): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...(json ? { 'Content-Type': 'application/json' } : {}),\n ...extensionHeaders(this.defaults),\n ...extensionHeaders(ext),\n };\n }\n\n /** Perform a request; throws `CodaiError` on non-2xx (after retries on 429/5xx). */\n async request(path: string, init: RequestOptions = {}): Promise<Response> {\n const url = this.url(path, init.query);\n const hasJson = init.body !== undefined;\n const headers = this.headers(init.ext, hasJson);\n const method = init.method ?? (hasJson || init.rawBody !== undefined ? 'POST' : 'GET');\n const retries = init.noRetry || init.rawBody !== undefined ? 0 : this.maxRetries;\n const timeout = init.timeoutMs ?? this.timeoutMs;\n const accept = new Set(init.acceptStatus ?? []);\n let lastErr: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n const signal = init.signal ?? (timeout > 0 ? AbortSignal.timeout(timeout) : undefined);\n try {\n const res = await this.fetchImpl(url, {\n method,\n headers,\n ...(hasJson ? { body: JSON.stringify(init.body) } : {}),\n ...(init.rawBody !== undefined ? { body: init.rawBody } : {}),\n ...(signal ? { signal } : {}),\n });\n if (res.ok || accept.has(res.status)) return res;\n if (RETRYABLE.has(res.status) && attempt < retries) {\n await sleep(500 * 2 ** attempt + Math.random() * 250);\n continue;\n }\n throw await this.toError(path, res);\n } catch (err) {\n if (err instanceof CodaiError) throw err;\n lastErr = err;\n // Caller aborts are never retried.\n if (init.signal?.aborted) throw err;\n if (attempt < retries) {\n await sleep(500 * 2 ** attempt);\n continue;\n }\n }\n }\n throw new CodaiError(`codai ${path} failed after retries: ${String(lastErr)}`, 0, null);\n }\n\n async json<T>(path: string, init: RequestOptions = {}): Promise<T> {\n const res = await this.request(path, init);\n return (await res.json()) as T;\n }\n\n /**\n * Open a `text/event-stream` and iterate parsed frames. Frames are\n * `\\n\\n`-separated blocks; each yields `{ event, data }` where `event`\n * defaults to `message` and `data` is the joined `data:` payload (raw\n * string — the caller decides whether it is JSON or `[DONE]`). Comment\n * lines (`: ping`) are skipped. The stream is retried like any request\n * up to the first byte; after that errors propagate.\n */\n async *sse(\n path: string,\n init: RequestOptions = {},\n ): AsyncGenerator<SseFrame, Response, undefined> {\n const res = await this.request(path, {\n ...init,\n timeoutMs: init.timeoutMs ?? 0,\n noRetry: true,\n });\n yield* readSse(res, init.signal);\n return res;\n }\n\n private async toError(path: string, res: Response): Promise<CodaiError> {\n let body: unknown = null;\n try {\n body = await res.json();\n } catch {\n /* non-JSON error body */\n }\n const retryAfterRaw = res.headers.get('retry-after');\n const retryAfter = retryAfterRaw && /^\\d+$/.test(retryAfterRaw) ? Number(retryAfterRaw) : null;\n const message = extractMessage(body);\n return new CodaiError(\n message ? `codai ${path} → ${res.status}: ${message}` : `codai ${path} → ${res.status}`,\n res.status,\n body,\n {\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n retryAfter,\n },\n );\n }\n}\n\nexport interface SseFrame {\n /** `event:` name; `message` when the frame has none (OpenAI-style streams). */\n event: string;\n /** Joined `data:` lines (a multi-line data block is joined with `\\n`). */\n data: string;\n}\n\n/** Parse an SSE body into frames. Exported for the resources and for tests. */\nexport async function* readSse(res: Response, signal?: AbortSignal): AsyncGenerator<SseFrame> {\n const reader = res.body?.getReader();\n if (!reader) throw new CodaiError('no response body', res.status, null);\n const decoder = new TextDecoder();\n let buffer = '';\n const onAbort = () => void reader.cancel().catch(() => {});\n signal?.addEventListener('abort', onAbort, { once: true });\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n // Normalise CRLF so both `\\n\\n` and `\\r\\n\\r\\n` delimit frames.\n buffer = buffer.replace(/\\r\\n/g, '\\n');\n const blocks = buffer.split('\\n\\n');\n buffer = blocks.pop() ?? '';\n for (const block of blocks) {\n const frame = parseSseBlock(block);\n if (frame) yield frame;\n }\n }\n const tail = buffer.trim() ? parseSseBlock(buffer) : null;\n if (tail) yield tail;\n } finally {\n signal?.removeEventListener('abort', onAbort);\n reader.releaseLock?.();\n }\n}\n\nfunction parseSseBlock(block: string): SseFrame | null {\n let event = 'message';\n const data: string[] = [];\n for (const line of block.split('\\n')) {\n if (!line || line.startsWith(':')) continue;\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n // `id:` / `retry:` are never emitted by the gateway; ignore anything else.\n }\n if (data.length === 0) return null;\n return { event, data: data.join('\\n') };\n}\n\n/** Parse a frame's data as JSON, returning `null` for `[DONE]` / non-JSON. */\nexport function frameJson<T = unknown>(frame: SseFrame): T | null {\n if (frame.data === '[DONE]') return null;\n try {\n return JSON.parse(frame.data) as T;\n } catch {\n return null;\n }\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n","/** `/v1/account`, `/v1/receipt`, `/v1/feedback`, `/v1/phone/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AccountView = Reply<'getAccount'>;\nexport type AccountPatchRequest = Mutable<Body<'patchAccount'>>;\nexport type AccountPatchResponse = Reply<'patchAccount'>;\nexport type Receipt = Reply<'getReceipt'>;\nexport type FeedbackRequest = Mutable<Body<'submitFeedback'>>;\nexport type FeedbackResponse = Reply<'submitFeedback'>;\nexport type PhoneModel = Schema<'AccountPhoneModel'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Account {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/account` — the full account card. */\n get(opts: CallOpts = {}): Promise<AccountView> {\n return this.http.json<AccountView>('/v1/account', { ext: opts.ext, signal: opts.signal });\n }\n\n /** `PATCH /v1/account` — consents, username, referral (at least one field). */\n update(body: AccountPatchRequest, opts: CallOpts = {}): Promise<AccountPatchResponse> {\n return this.http.json<AccountPatchResponse>('/v1/account', {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Receipts {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `GET /v1/receipt` — spend receipt. `sessionId` wins over `since`; with\n * neither, the last 24 hours.\n */\n get(\n query: { sessionId?: string; since?: string | Date } = {},\n opts: CallOpts = {},\n ): Promise<Receipt> {\n return this.http.json<Receipt>('/v1/receipt', {\n query: {\n session_id: query.sessionId,\n since: query.since instanceof Date ? query.since.toISOString() : query.since,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class Feedback {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * `POST /v1/feedback` — rate one turn. Exactly one of `event_id`,\n * `session_id`, `client_request_id` must be present.\n */\n submit(body: FeedbackRequest, opts: CallOpts = {}): Promise<FeedbackResponse> {\n return this.http.json<FeedbackResponse>('/v1/feedback', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n\nexport class PhoneModels {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/phone/models` — on-device model catalog with signed URLs. */\n async list(opts: CallOpts = {}): Promise<PhoneModel[]> {\n const raw = await this.http.json<Reply<'listPhoneModels'>>('/v1/phone/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.models ?? [])];\n }\n}\n","/** `/v1/agents/*` — synchronous runs and the persisted async run lifecycle. */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type AgentRunRequest = Mutable<Body<'runAgentSync'>>;\nexport type AgentRunCreateRequest = Mutable<Body<'createAgentRun'>>;\nexport type AgentSyncResult = Reply<'runAgentSync'>;\nexport type AgentRunAccepted = Reply<'createAgentRun', 202>;\nexport type AgentRun = Reply<'getAgentRun'>;\nexport type AgentRunStep = Schema<'AgentRunStep'>;\nexport type AgentRunStats = Reply<'getAgentRunStats'>;\nexport type AgentRunStatus = Schema<'AgentRunStatus'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport interface AgentRunResult {\n result: string;\n model: string;\n /** Usage-event id — exact target for `feedback.submit`. */\n eventId: string | null;\n usage: AgentSyncResult['usage'] | null;\n raw: AgentSyncResult;\n headers: Headers;\n}\n\n/** SSE frames of `GET /v1/agents/runs/{id}/stream`. */\nexport type AgentRunStreamEvent =\n | {\n event: 'step';\n data: {\n seq: number;\n kind: 'plan' | 'tool_call' | 'observation' | 'answer';\n summary: string | null;\n };\n }\n | {\n event: 'done';\n data: {\n status: 'completed' | 'failed' | 'cancelled';\n result: string | null;\n error: string | null;\n step_count: number;\n };\n }\n | { event: 'timeout'; data: Record<string, never> };\n\nexport class AgentRuns {\n constructor(private readonly http: HttpClient) {}\n\n /** `POST /v1/agents/runs` — returns 202 with the run id. */\n create(body: AgentRunCreateRequest, opts: CallOpts = {}): Promise<AgentRunAccepted> {\n return this.http.json<AgentRunAccepted>('/v1/agents/runs', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}` */\n get(id: string, opts: CallOpts = {}): Promise<AgentRun> {\n return this.http.json<AgentRun>(`/v1/agents/runs/${encodeURIComponent(id)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `GET /v1/agents/runs/{id}/steps` — newest first. */\n async steps(id: string, opts: CallOpts = {}): Promise<AgentRunStep[]> {\n const raw = await this.http.json<Reply<'listAgentRunSteps'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/steps`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.steps ?? [])];\n }\n\n /** `GET /v1/agents/runs/stats?days=` */\n stats(days?: number, opts: CallOpts = {}): Promise<AgentRunStats> {\n return this.http.json<AgentRunStats>('/v1/agents/runs/stats', {\n query: { days },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `POST /v1/agents/runs/{id}/cancel` */\n cancel(id: string, opts: CallOpts = {}): Promise<Reply<'cancelAgentRun'>> {\n return this.http.json<Reply<'cancelAgentRun'>>(\n `/v1/agents/runs/${encodeURIComponent(id)}/cancel`,\n { method: 'POST', body: {}, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/agents/runs/{id}/stream` — async iterator over `step` / `done` /\n * `timeout` events. The iterator ends after `done`; on `timeout` (30 min)\n * it also ends and you may reconnect (full replay from seq 0).\n */\n async *stream(\n id: string,\n opts: CallOpts = {},\n ): AsyncGenerator<AgentRunStreamEvent, void, undefined> {\n const frames = this.http.sse(`/v1/agents/runs/${encodeURIComponent(id)}/stream`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n const ev = { event: frame.event, data } as AgentRunStreamEvent;\n yield ev;\n if (ev.event === 'done' || ev.event === 'timeout') return;\n }\n }\n}\n\nexport class Agents {\n readonly runs: AgentRuns;\n constructor(private readonly http: HttpClient) {\n this.runs = new AgentRuns(http);\n }\n\n /** `POST /v1/agents/run` — blocks until the agent loop finishes. */\n async run(body: AgentRunRequest, opts: CallOpts = {}): Promise<AgentRunResult> {\n const res = await this.http.request('/v1/agents/run', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as AgentSyncResult;\n return {\n result: String(raw.result ?? ''),\n model: String(raw.model ?? ''),\n eventId: raw.event_id ?? res.headers.get('x-codai-event-id'),\n usage: raw.usage ?? null,\n raw,\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/audio/transcriptions` and `POST /v1/audio/speech`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type TranscriptionResponse = Reply<'createTranscription'>;\nexport type SpeechRequest = Mutable<Body<'createSpeech'>>;\n\nexport interface TranscriptionOptions {\n /** Audio file contents (max 25 MB). */\n file: Blob | Uint8Array | ArrayBuffer;\n /** Filename hint (extension drives format detection). Default `audio.webm`. */\n filename?: string;\n /** Default `codai-transcribe`. */\n model?: string;\n /** ISO-639-1 language hint. */\n language?: string;\n /** Text to guide style or spelling. */\n prompt?: string;\n /** `json` (default) or `verbose_json`. */\n responseFormat?: 'json' | 'verbose_json';\n /** Sampling temperature 0–1. */\n temperature?: number;\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface TranscriptionResult {\n text: string;\n raw: TranscriptionResponse;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport interface SpeechResult {\n /** Raw audio bytes in the requested format (mp3 by default). */\n audio: ArrayBuffer;\n /** Upstream `content-type` (`audio/mpeg` when the upstream sent none). */\n contentType: string;\n routedTo: string | null;\n headers: Headers;\n}\n\nexport class Audio {\n constructor(private readonly http: HttpClient) {}\n\n /** Speech-to-text (multipart upload; never retried). Returns the transcript (0.2.x shape). */\n async transcribe(opts: TranscriptionOptions): Promise<string> {\n return (await this.transcribeDetailed(opts)).text;\n }\n\n /** Speech-to-text with the raw upstream JSON and routing headers. */\n async transcribeDetailed(opts: TranscriptionOptions): Promise<TranscriptionResult> {\n const form = new FormData();\n const blob = opts.file instanceof Blob ? opts.file : new Blob([opts.file as BlobPart]);\n form.append('file', blob, opts.filename ?? 'audio.webm');\n form.append('model', opts.model ?? 'codai-transcribe');\n if (opts.language) form.append('language', opts.language);\n if (opts.prompt) form.append('prompt', opts.prompt);\n if (opts.responseFormat) form.append('response_format', opts.responseFormat);\n if (opts.temperature !== undefined) form.append('temperature', String(opts.temperature));\n const res = await this.http.request('/v1/audio/transcriptions', {\n method: 'POST',\n rawBody: form,\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as TranscriptionResponse;\n return {\n text: typeof raw.text === 'string' ? raw.text : '',\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n /** Text-to-speech. Returns the raw audio bytes (0.2.x shape); see `speechDetailed()` for headers. */\n async speech(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<ArrayBuffer> {\n return (await this.speechDetailed(body, opts)).audio;\n }\n\n /** Text-to-speech with the upstream `content-type` and routing headers. */\n async speechDetailed(\n body: Omit<SpeechRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<SpeechResult> {\n const res = await this.http.request('/v1/audio/speech', {\n body: { ...body, model: body.model ?? 'codai-tts', voice: body.voice ?? 'alloy' },\n ext: opts.ext,\n signal: opts.signal,\n });\n return {\n audio: await res.arrayBuffer(),\n contentType: res.headers.get('content-type') ?? 'audio/mpeg',\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n}\n","/** `POST /v1/chat/completions` — OpenAI-compatible completions (JSON + SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type ChatCompletionRequest = Mutable<Body<'createChatCompletion'>>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type ChatCompletionInput = Omit<ChatCompletionRequest, 'stream' | 'model'> & {\n model?: string;\n};\nexport type ChatCompletionResponse = Reply<'createChatCompletion'>;\nexport type ChatMessage = Mutable<Schema<'ChatMessage'>>;\nexport type ChatTool = Mutable<Schema<'ChatTool'>>;\nexport type ChatToolCall = Mutable<Schema<'ChatToolCall'>>;\nexport type ChatUsage = Schema<'ChatUsage'>;\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n /** Prompt tokens served from the provider cache, when reported. */\n cachedTokens?: number;\n}\n\n/** Per-call options accepted by every chat method. */\nexport interface ChatCallOptions {\n /** `X-Codai-*` extension headers for this call. */\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface ChatResult {\n /** Assistant message content (first choice). */\n content: string;\n /** Tool calls on the first choice (empty if none). */\n toolCalls: ChatToolCall[];\n /** Raw OpenAI-shaped response. */\n raw: ChatCompletionResponse;\n /** Request id (`x-codai-trace-id` / `x-request-id`) — pass to `feedback`. */\n requestId: string | null;\n /** Usage-event id (`x-codai-event-id`) — exact target for `feedback.submit`. */\n eventId: string | null;\n /** Which upstream model actually served (`x-codai-routed-to`). */\n routedTo: string | null;\n /** Verification status for verified-execution responses, if present. */\n execVerify: string | null;\n usage: TokenUsage | null;\n /** Response headers, for the long tail of `x-codai-*` metadata. */\n headers: Headers;\n}\n\n/** Final metadata for a completed stream — resolved via `stream.final`. */\nexport interface ChatStreamResult {\n content: string;\n toolCalls: ChatToolCall[];\n requestId: string | null;\n routedTo: string | null;\n execVerify: string | null;\n usage: TokenUsage | null;\n /** `finish_reason` of the last content chunk, when sent. */\n finishReason: string | null;\n headers: Headers | null;\n}\n\n/**\n * A live chat stream. Async-iterate it for text deltas, then await `.final`\n * for metadata. `.chunks()` yields the raw `chat.completion.chunk` objects.\n */\nexport interface ChatStream extends AsyncIterable<string> {\n readonly final: Promise<ChatStreamResult>;\n chunks(): AsyncIterable<ChatCompletionChunk>;\n}\n\nexport interface ChatCompletionChunk {\n id?: string;\n object?: 'chat.completion.chunk';\n model?: string;\n choices?: Array<{\n index?: number;\n delta?: {\n role?: string;\n content?: string | null;\n tool_calls?: Array<{ index?: number } & Record<string, unknown>>;\n };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: { cached_tokens?: number };\n };\n [key: string]: unknown;\n}\n\nfunction toUsage(u: ChatCompletionChunk['usage'] | undefined): TokenUsage | null {\n if (!u) return null;\n const cached = u.prompt_tokens_details?.cached_tokens;\n return {\n promptTokens: u.prompt_tokens ?? 0,\n completionTokens: u.completion_tokens ?? 0,\n ...(cached !== undefined ? { cachedTokens: cached } : {}),\n };\n}\n\n/**\n * Merge a streamed tool-call fragment into the accumulator at `index`.\n * OpenAI streams tool calls piecewise: id/name arrive first, then the\n * `arguments` string is appended across many deltas.\n */\nexport function mergeToolCall(\n acc: Map<number, Record<string, unknown>>,\n index: number,\n fragment: Record<string, unknown>,\n): void {\n const existing = acc.get(index) ?? { index };\n for (const [key, val] of Object.entries(fragment)) {\n if (key === 'index') continue;\n if (key === 'function' && val && typeof val === 'object') {\n const fn = (existing.function as Record<string, unknown>) ?? {};\n for (const [fk, fv] of Object.entries(val as Record<string, unknown>)) {\n if (fk === 'arguments') fn.arguments = String(fn.arguments ?? '') + String(fv ?? '');\n else fn[fk] = fv;\n }\n existing.function = fn;\n } else {\n existing[key] = val;\n }\n }\n acc.set(index, existing);\n}\n\nexport class ChatCompletions {\n constructor(private readonly http: HttpClient) {}\n\n /**\n * Non-streaming completion. `stream` is forced to `false`; use\n * `stream()` for SSE.\n */\n async create(body: ChatCompletionInput, opts: ChatCallOptions = {}): Promise<ChatResult> {\n const res = await this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as ChatCompletionResponse;\n const first = raw.choices?.[0];\n const usage = raw.usage as ChatCompletionChunk['usage'] | undefined;\n return {\n content: typeof first?.message?.content === 'string' ? first.message.content : '',\n toolCalls: [...((first?.message?.tool_calls ?? []) as ChatToolCall[])],\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n eventId: res.headers.get('x-codai-event-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n execVerify: res.headers.get('x-codai-exec-verify'),\n usage: toUsage(usage),\n headers: res.headers,\n };\n }\n\n /** Streaming completion (`stream: true`). */\n stream(body: ChatCompletionInput, opts: ChatCallOptions = {}): ChatStream {\n const requestPromise = this.http.request('/v1/chat/completions', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: ChatStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<ChatStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {}); // no unhandled-rejection noise when `final` is never awaited\n\n const toolCallsByIndex = new Map<number, Record<string, unknown>>();\n let content = '';\n let usage: TokenUsage | null = null;\n let finishReason: string | null = null;\n let res: Response | null = null;\n\n const buildResult = (): ChatStreamResult => ({\n content,\n toolCalls: [...toolCallsByIndex.values()] as ChatToolCall[],\n requestId: res?.headers.get('x-codai-trace-id') ?? res?.headers.get('x-request-id') ?? null,\n routedTo: res?.headers.get('x-codai-routed-to') ?? null,\n execVerify: res?.headers.get('x-codai-exec-verify') ?? null,\n usage,\n finishReason,\n headers: res?.headers ?? null,\n });\n\n async function* chunks(): AsyncGenerator<ChatCompletionChunk, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n if (frame.data === '[DONE]') break;\n const chunk = frameJson<ChatCompletionChunk>(frame);\n if (!chunk) continue;\n if (chunk.usage) usage = toUsage(chunk.usage);\n const choice = chunk.choices?.[0];\n if (choice?.finish_reason) finishReason = choice.finish_reason;\n const delta = choice?.delta;\n if (delta?.tool_calls) {\n for (const tc of delta.tool_calls) {\n mergeToolCall(toolCallsByIndex, typeof tc.index === 'number' ? tc.index : 0, tc);\n }\n }\n if (delta?.content) content += delta.content;\n yield chunk;\n }\n resolveFinal(buildResult());\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* text(): AsyncGenerator<string, void, undefined> {\n for await (const chunk of chunks()) {\n const delta = chunk.choices?.[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => text(),\n chunks: () => ({ [Symbol.asyncIterator]: () => chunks() }),\n final,\n };\n }\n}\n\nexport class Chat {\n readonly completions: ChatCompletions;\n constructor(http: HttpClient) {\n this.completions = new ChatCompletions(http);\n }\n}\n","/** `/v1/devices/*` — devices bound to your account + the aggregated dispatch inbox. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Device = Schema<'DeviceListItem'>;\nexport type DevicePatch = Mutable<Body<'updateDevice'>>;\nexport type DevicePatched = Reply<'updateDevice'>;\nexport type DispatchInbox = Reply<'getMyDispatchInbox'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Devices {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/devices` — most recently seen first. */\n async list(opts: CallOpts = {}): Promise<Device[]> {\n const raw = await this.http.json<Reply<'listDevices'>>('/v1/devices', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.devices ?? [])];\n }\n\n /** `PATCH /v1/devices/{id}` — push token and/or capabilities. */\n update(id: string, body: DevicePatch, opts: CallOpts = {}): Promise<DevicePatched> {\n return this.http.json<DevicePatched>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `DELETE /v1/devices/{id}` */\n delete(id: string, opts: CallOpts = {}): Promise<Reply<'deleteDevice'>> {\n return this.http.json<Reply<'deleteDevice'>>(`/v1/devices/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /**\n * `GET /v1/devices/me/dispatch?limit=` — pending controls dispatched at the\n * calling device (`x-codai-device` required) across all owned sessions.\n */\n dispatchInbox(query: { limit?: number } = {}, opts: CallOpts = {}): Promise<DispatchInbox> {\n return this.http.json<DispatchInbox>('/v1/devices/me/dispatch', {\n query: { limit: query.limit },\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `POST /v1/embeddings`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type EmbeddingsRequest = Mutable<Body<'createEmbeddings'>>;\nexport type EmbeddingsResponse = Reply<'createEmbeddings'>;\n\nexport interface EmbeddingsResult {\n /** One vector per input, in order. */\n embeddings: number[][];\n raw: EmbeddingsResponse;\n /** Upstream embedding model that produced the vectors (`x-codai-routed-to`). */\n routedTo: string | null;\n /** `<requested>-><served>` when a different model was substituted; vectors live in another space. */\n fallback: string | null;\n headers: Headers;\n}\n\nexport class Embeddings {\n constructor(private readonly http: HttpClient) {}\n\n async create(\n body: Omit<EmbeddingsRequest, 'model'> & { model?: string },\n opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {},\n ): Promise<EmbeddingsResult> {\n const res = await this.http.request('/v1/embeddings', {\n body: { ...body, model: body.model ?? 'codai-embed' },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as EmbeddingsResponse;\n return {\n embeddings: (raw.data ?? []).map((d) => [...(d.embedding as readonly number[])]),\n raw,\n routedTo: res.headers.get('x-codai-routed-to'),\n fallback: res.headers.get('x-codai-embed-fallback'),\n headers: res.headers,\n };\n }\n}\n","/** `/v1/environments/*` — cloud / BYO dev environments, their members, ports and secrets. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type QueryOf, type Reply, type Schema } from './_shared';\n\nexport type Environment = Schema<'Environment'>;\nexport type EnvironmentDetail = Schema<'EnvironmentDetail'>;\nexport type EnvironmentState = Schema<'EnvironmentState'>;\nexport type EnvironmentProvider = Schema<'EnvironmentProvider'>;\nexport type EnvironmentRole = Schema<'EnvironmentRole'>;\nexport type EnvironmentTransition = Schema<'EnvironmentTransition'>;\nexport type EnvironmentEnrollToken = Schema<'EnvironmentEnrollToken'>;\nexport type EnvironmentEnrolled = Schema<'EnvironmentEnrolled'>;\nexport type EnvironmentMember = Schema<'EnvironmentMember'>;\nexport type EnvironmentMemberCreated = Schema<'EnvironmentMemberCreated'>;\nexport type EnvironmentPort = Schema<'EnvironmentPort'>;\nexport type EnvironmentSecret = Schema<'EnvironmentSecret'>;\nexport type EnvironmentSecretSet = Schema<'EnvironmentSecretSet'>;\nexport type EnvironmentCreateBody = Mutable<Body<'createEnvironment'>>;\nexport type EnvironmentPatchBody = Mutable<Body<'updateEnvironment'>>;\nexport type EnvironmentEnrollBody = Mutable<Body<'enrollEnvironment'>>;\nexport type EnvironmentAddMemberBody = Mutable<Body<'addEnvironmentMember'>>;\nexport type EnvironmentPortBody = Mutable<Body<'setEnvironmentPort'>>;\nexport type ListEnvironmentsQuery = Mutable<QueryOf<'listEnvironments'>>;\nexport type EnvironmentSshCert = Reply<'issueMyEnvironmentSshCert'>;\nexport type EnvironmentSshCertBody = Mutable<Body<'issueMyEnvironmentSshCert'>>;\nexport type EnvironmentSshCa = Reply<'getEnvironmentSshCa'>;\nexport type EnvironmentTaskList = Reply<'listEnvironmentTasks'>;\nexport type EnvironmentTaskCreateBody = Mutable<Body<'createEnvironmentTask'>>;\nexport type EnvironmentTaskCreated = Reply<'createEnvironmentTask'>;\nexport type EnvironmentTaskDetail = Reply<'getEnvironmentTask'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nconst envPath = (id: string, suffix = ''): string =>\n `/v1/environments/${encodeURIComponent(id)}${suffix}`;\n\nexport class EnvironmentMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/members` — any role. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentMember[]> {\n const raw = await this.http.json<Reply<'listEnvironmentMembers'>>(envPath(envId, '/members'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/environments/{id}/members` — exactly one of `user_id` / `email`. */\n async add(\n envId: string,\n body: EnvironmentAddMemberBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentMemberCreated> {\n const raw = await this.http.json<Reply<'addEnvironmentMember', 201>>(\n envPath(envId, '/members'),\n { body, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `PUT /v1/environments/{id}/members/me/ssh-key` — one `authorized_keys` line. */\n setSshKey(\n envId: string,\n publicKey: string,\n opts: CallOpts = {},\n ): Promise<Reply<'setMyEnvironmentSshKey'>> {\n const body: Mutable<Body<'setMyEnvironmentSshKey'>> = { public_key: publicKey };\n return this.http.json<Reply<'setMyEnvironmentSshKey'>>(envPath(envId, '/members/me/ssh-key'), {\n method: 'PUT',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}/members/{userId}` — 409 `last_owner` on demoting the last owner. */\n async setRole(\n envId: string,\n userId: string,\n role: EnvironmentRole,\n opts: CallOpts = {},\n ): Promise<Reply<'setEnvironmentMemberRole'>['member']> {\n const raw = await this.http.json<Reply<'setEnvironmentMemberRole'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'PATCH', body: { role }, ext: opts.ext, signal: opts.signal },\n );\n return raw.member;\n }\n\n /** `DELETE /v1/environments/{id}/members/{userId}` — pass your own id to leave. */\n remove(\n envId: string,\n userId: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentMember'>> {\n return this.http.json<Reply<'removeEnvironmentMember'>>(\n envPath(envId, `/members/${encodeURIComponent(userId)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `POST /v1/environments/{id}/members/me/ssh-cert` — 12 h OpenSSH user certificate for your key. */\n sshCert(envId: string, body: EnvironmentSshCertBody, opts: CallOpts = {}): Promise<EnvironmentSshCert> {\n return this.http.json<EnvironmentSshCert>(envPath(envId, '/members/me/ssh-cert'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n}\n\n/** `/v1/environments/{id}/tasks` — fire-and-forget agent tasks run in the environment. */\nexport class EnvironmentTasks {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/tasks` */\n list(envId: string, opts: CallOpts = {}): Promise<EnvironmentTaskList> {\n return this.http.json<EnvironmentTaskList>(envPath(envId, '/tasks'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `POST /v1/environments/{id}/tasks` — queued; you get a notification when it finishes. */\n create(envId: string, body: EnvironmentTaskCreateBody, opts: CallOpts = {}): Promise<EnvironmentTaskCreated> {\n return this.http.json<EnvironmentTaskCreated>(envPath(envId, '/tasks'), {\n method: 'POST',\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}/tasks/{taskId}` */\n get(envId: string, taskId: string, opts: CallOpts = {}): Promise<EnvironmentTaskDetail> {\n return this.http.json<EnvironmentTaskDetail>(envPath(envId, `/tasks/${encodeURIComponent(taskId)}`), { ext: opts.ext, signal: opts.signal });\n }\n}\n\nexport class EnvironmentPorts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/ports` — published (forwarded) ports. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentPort[]> {\n const raw = await this.http.json<Reply<'listEnvironmentPorts'>>(envPath(envId, '/ports'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.ports ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/ports/{port}` — publish or change visibility (upsert). */\n async set(\n envId: string,\n port: number,\n body: EnvironmentPortBody,\n opts: CallOpts = {},\n ): Promise<EnvironmentPort> {\n const raw = await this.http.json<Reply<'setEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.port;\n }\n\n /** `DELETE /v1/environments/{id}/ports/{port}` — unpublish. */\n remove(\n envId: string,\n port: number,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentPort'>> {\n return this.http.json<Reply<'removeEnvironmentPort'>>(\n envPath(envId, `/ports/${encodeURIComponent(String(port))}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class EnvironmentSecrets {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/environments/{id}/secrets` — names and timestamps only, never values. */\n async list(envId: string, opts: CallOpts = {}): Promise<EnvironmentSecret[]> {\n const raw = await this.http.json<Reply<'listEnvironmentSecrets'>>(envPath(envId, '/secrets'), {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.secrets ?? [])];\n }\n\n /** `PUT /v1/environments/{id}/secrets/{name}` — upsert; `name` is `ENV_STYLE`. */\n set(\n envId: string,\n name: string,\n value: string,\n opts: CallOpts = {},\n ): Promise<EnvironmentSecretSet> {\n const body: Mutable<Body<'setEnvironmentSecret'>> = { value };\n return this.http.json<EnvironmentSecretSet>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'PUT', body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/environments/{id}/secrets/{name}` */\n remove(\n envId: string,\n name: string,\n opts: CallOpts = {},\n ): Promise<Reply<'removeEnvironmentSecret'>> {\n return this.http.json<Reply<'removeEnvironmentSecret'>>(\n envPath(envId, `/secrets/${encodeURIComponent(name)}`),\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Environments {\n readonly members: EnvironmentMembers;\n readonly ports: EnvironmentPorts;\n readonly secrets: EnvironmentSecrets;\n readonly tasks: EnvironmentTasks;\n\n constructor(private readonly http: HttpClient) {\n this.members = new EnvironmentMembers(http);\n this.ports = new EnvironmentPorts(http);\n this.secrets = new EnvironmentSecrets(http);\n this.tasks = new EnvironmentTasks(http);\n }\n\n /** `GET /v1/environments/{id}/ssh-ca` — CA public keys to trust (`@cert-authority` lines). */\n sshCa(envId: string, opts: CallOpts = {}): Promise<EnvironmentSshCa> {\n return this.http.json<EnvironmentSshCa>(envPath(envId, '/ssh-ca'), { ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/environments?project_id=&for_user_id=me` — newest first, every state. */\n async list(query: ListEnvironmentsQuery = {}, opts: CallOpts = {}): Promise<Environment[]> {\n const raw = await this.http.json<Reply<'listEnvironments'>>('/v1/environments', {\n query: { project_id: query.project_id, for_user_id: query.for_user_id },\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.environments ?? [])];\n }\n\n /**\n * `POST /v1/environments` — `byo` starts `pending`; managed providers start\n * `creating`. 409 `already_has_env` in a `vm_per_dev` project (the error\n * body carries the `environment_id` to reuse).\n */\n async create(body: EnvironmentCreateBody, opts: CallOpts = {}): Promise<Environment> {\n const raw = await this.http.json<Reply<'createEnvironment', 201>>('/v1/environments', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n return raw.environment;\n }\n\n /**\n * `POST /v1/environments/enroll` — daemon side. The one-time `codai_env_…`\n * token in the body is the only credential; the client's API key header is\n * ignored by this route. Managed environments additionally receive a\n * freshly minted `api_key`, returned exactly once.\n */\n enroll(body: EnvironmentEnrollBody, opts: CallOpts = {}): Promise<EnvironmentEnrolled> {\n return this.http.json<EnvironmentEnrolled>('/v1/environments/enroll', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n // The token is consumed on success; a retried POST would 401.\n noRetry: true,\n });\n }\n\n /** `GET /v1/environments/{id}` — environment, your role, members, ports, recent events. */\n get(envId: string, opts: CallOpts = {}): Promise<EnvironmentDetail> {\n return this.http.json<EnvironmentDetail>(envPath(envId), {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/environments/{id}` — `name` and/or `idle_timeout_minutes` (5..1440). */\n async update(\n envId: string,\n body: EnvironmentPatchBody,\n opts: CallOpts = {},\n ): Promise<Environment> {\n const raw = await this.http.json<Reply<'updateEnvironment'>>(envPath(envId), {\n method: 'PATCH',\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.environment;\n }\n\n /** `POST /v1/environments/{id}/start` — managed providers only (`stopped` → `starting`). */\n start(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'start', opts);\n }\n\n /** `POST /v1/environments/{id}/stop` — managed providers only (`running` → `stopping`). */\n stop(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'stop', opts);\n }\n\n /** `POST /v1/environments/{id}/archive` — keeps history, releases the machine. */\n archive(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'archive', opts);\n }\n\n /** `POST /v1/environments/{id}/destroy` — owner only; terminal. */\n destroy(envId: string, opts: CallOpts = {}): Promise<EnvironmentTransition> {\n return this.transition(envId, 'destroy', opts);\n }\n\n /**\n * `POST /v1/environments/{id}/enroll-token` — `byo` only; a 30-minute\n * one-time token for `enroll()`. Minting again replaces the previous one.\n */\n enrollToken(envId: string, opts: CallOpts = {}): Promise<EnvironmentEnrollToken> {\n return this.http.json<EnvironmentEnrollToken>(envPath(envId, '/enroll-token'), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n noRetry: true,\n });\n }\n\n private transition(\n envId: string,\n action: 'start' | 'stop' | 'archive' | 'destroy',\n opts: CallOpts,\n ): Promise<EnvironmentTransition> {\n return this.http.json<EnvironmentTransition>(envPath(envId, `/${action}`), {\n method: 'POST',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** Unauthenticated probes at the root: `/health`, `/health/ready`, `/status`. */\nimport { type HttpClient } from '../http';\nimport { type Reply } from './_shared';\n\nexport type HealthResponse = Reply<'getHealth'>;\nexport type HealthReadyResponse = Reply<'getHealthReady'>;\nexport type StatusResponse = Reply<'getStatus'>;\n\nexport class Health {\n constructor(private readonly http: HttpClient) {}\n\n /** Liveness probe. */\n get(opts: { signal?: AbortSignal } = {}): Promise<HealthResponse> {\n return this.http.json<HealthResponse>('/health', { signal: opts.signal, noRetry: true });\n }\n\n /**\n * Deep readiness probe. A 503 is returned as `{ ok: false, ... }` rather\n * than thrown, so callers can read the failing check.\n */\n async ready(\n opts: { signal?: AbortSignal } = {},\n ): Promise<HealthReadyResponse & { httpStatus: number }> {\n const res = await this.http.request('/health/ready', {\n signal: opts.signal,\n noRetry: true,\n acceptStatus: [503],\n });\n const body = (await res.json()) as HealthReadyResponse;\n return { ...body, httpStatus: res.status };\n }\n\n /** Registry snapshot (aliases + provider health). */\n status(opts: { signal?: AbortSignal } = {}): Promise<StatusResponse> {\n return this.http.json<StatusResponse>('/status', { signal: opts.signal, noRetry: true });\n }\n}\n","/** `/v1/hosts/*` — host relay (desktop announces itself; clients exec ops on it). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type HostPresence = Schema<'HostPresence'>;\nexport type HostOp = Schema<'HostOp'>;\nexport type HostExecBody = Mutable<Body<'execOnHost'>>;\nexport type HostExecResponse = Reply<'execOnHost'>;\nexport type HostExecRequest = Schema<'HostExecRequest'>;\nexport type HostExecResultBody = Mutable<Body<'postHostExecResult'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\n/** Frames of `GET /v1/hosts/stream`. */\nexport type HostStreamEvent =\n | { event: 'hello'; data: { device_id: string; heartbeat_ms: number } }\n | { event: 'ping'; data: { t: number } }\n | { event: 'exec'; data: HostExecRequest }\n | { event: string; data: Record<string, unknown> };\n\nexport class Hosts {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/hosts` — your devices currently connected as hosts. */\n async list(opts: CallOpts = {}): Promise<HostPresence[]> {\n const raw = await this.http.json<Reply<'listHosts'>>('/v1/hosts', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.hosts ?? [])];\n }\n\n /**\n * `POST /v1/hosts/{deviceId}/exec` — run one op on a connected host and\n * block until it answers (or `timeout_ms`, default 60 s).\n */\n exec(\n deviceId: string,\n op: HostOp,\n args: Record<string, unknown> = {},\n extra: { timeoutMs?: number; label?: string } & CallOpts = {},\n ): Promise<HostExecResponse> {\n const body: HostExecBody = {\n op,\n args,\n ...(extra.timeoutMs !== undefined ? { timeout_ms: extra.timeoutMs } : {}),\n ...(extra.label !== undefined ? { label: extra.label } : {}),\n };\n return this.http.json<HostExecResponse>(`/v1/hosts/${encodeURIComponent(deviceId)}/exec`, {\n body,\n ext: extra.ext,\n signal: extra.signal,\n // The gateway itself waits up to timeout_ms + 2 s; give the HTTP layer headroom.\n timeoutMs: (extra.timeoutMs ?? 60_000) + 10_000,\n noRetry: true,\n });\n }\n\n /** `POST /v1/hosts/exec/{reqId}/result` — host side: deliver an exec result. */\n postResult(\n reqId: string,\n body: HostExecResultBody,\n opts: CallOpts = {},\n ): Promise<Reply<'postHostExecResult'>> {\n return this.http.json<Reply<'postHostExecResult'>>(\n `/v1/hosts/exec/${encodeURIComponent(reqId)}/result`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /**\n * `GET /v1/hosts/stream?os=&hostname=&roots=` — host side: announce this\n * device and receive `hello` / `ping` / `exec` events. Closed by the server\n * after 6 h; reconnect to re-announce presence.\n */\n async *stream(\n query: { os?: string; hostname?: string; roots?: string[] } = {},\n opts: CallOpts = {},\n ): AsyncGenerator<HostStreamEvent, void, undefined> {\n const frames = this.http.sse('/v1/hosts/stream', {\n query: {\n os: query.os,\n hostname: query.hostname,\n roots: query.roots?.length ? query.roots.join(',') : undefined,\n },\n ext: opts.ext,\n signal: opts.signal,\n });\n for await (const frame of frames) {\n const data = frameJson<Record<string, unknown>>(frame);\n if (!data) continue;\n yield { event: frame.event, data } as HostStreamEvent;\n }\n }\n}\n","/** `POST /v1/messages` — Anthropic Messages wire (JSON + named-event SSE). */\nimport { type CodaiRequestExtensions, frameJson, type HttpClient, readSse } from '../http';\nimport { type Body, type Mutable, type Reply } from './_shared';\n\nexport type MessageRequest = Mutable<Body<'createMessage'>>;\nexport type MessageResponse = Reply<'createMessage'>;\n/** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */\nexport type MessageInput = Omit<MessageRequest, 'stream' | 'model'> & { model?: string };\n\nexport interface MessageCallOptions {\n ext?: CodaiRequestExtensions;\n signal?: AbortSignal;\n}\n\nexport interface MessageResult {\n /** Concatenated `text` blocks of the reply. */\n text: string;\n raw: MessageResponse;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers;\n}\n\n/** One Anthropic streaming event: `event.type` mirrors the SSE `event:` name. */\nexport interface MessageStreamEvent {\n type:\n | 'message_start'\n | 'content_block_start'\n | 'content_block_delta'\n | 'content_block_stop'\n | 'message_delta'\n | 'message_stop'\n | 'ping'\n | 'error'\n | (string & {});\n [key: string]: unknown;\n}\n\nexport interface MessageStreamResult {\n /** Concatenated `text_delta` payloads. */\n text: string;\n /** Final `stop_reason` from `message_delta`, when sent. */\n stopReason: string | null;\n /** Cumulative usage: `input_tokens` from `message_start`, `output_tokens` from `message_delta`. */\n usage: { inputTokens: number; outputTokens: number } | null;\n requestId: string | null;\n routedTo: string | null;\n headers: Headers | null;\n}\n\nexport interface MessageStream extends AsyncIterable<MessageStreamEvent> {\n readonly final: Promise<MessageStreamResult>;\n /** Text deltas only. */\n text(): AsyncIterable<string>;\n}\n\nexport class Messages {\n constructor(private readonly http: HttpClient) {}\n\n async create(body: MessageInput, opts: MessageCallOptions = {}): Promise<MessageResult> {\n const res = await this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: false },\n ext: opts.ext,\n signal: opts.signal,\n });\n const raw = (await res.json()) as MessageResponse;\n const text = (raw.content ?? [])\n .map((b) => (b.type === 'text' && typeof b.text === 'string' ? b.text : ''))\n .join('');\n return {\n text,\n raw,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id'),\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n };\n }\n\n stream(body: MessageInput, opts: MessageCallOptions = {}): MessageStream {\n const requestPromise = this.http.request('/v1/messages', {\n body: { ...body, model: body.model ?? 'codai', stream: true },\n ext: opts.ext,\n signal: opts.signal,\n timeoutMs: 0,\n noRetry: true,\n });\n\n let resolveFinal!: (r: MessageStreamResult) => void;\n let rejectFinal!: (e: unknown) => void;\n const final = new Promise<MessageStreamResult>((resolve, reject) => {\n resolveFinal = resolve;\n rejectFinal = reject;\n });\n final.catch(() => {});\n\n let text = '';\n let stopReason: string | null = null;\n let inputTokens: number | null = null;\n let outputTokens: number | null = null;\n let res: Response | null = null;\n\n async function* events(): AsyncGenerator<MessageStreamEvent, void, undefined> {\n try {\n res = await requestPromise;\n for await (const frame of readSse(res, opts.signal)) {\n const ev = frameJson<MessageStreamEvent>(frame);\n if (!ev) continue;\n if (typeof ev.type !== 'string') ev.type = frame.event;\n if (ev.type === 'message_start') {\n const usage = (ev.message as { usage?: { input_tokens?: number } } | undefined)?.usage;\n if (usage?.input_tokens !== undefined) inputTokens = usage.input_tokens;\n } else if (ev.type === 'content_block_delta') {\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && typeof delta.text === 'string') text += delta.text;\n } else if (ev.type === 'message_delta') {\n const delta = ev.delta as { stop_reason?: string | null } | undefined;\n if (delta?.stop_reason) stopReason = delta.stop_reason;\n const usage = ev.usage as { output_tokens?: number } | undefined;\n if (usage?.output_tokens !== undefined) outputTokens = usage.output_tokens;\n }\n yield ev;\n if (ev.type === 'message_stop') break;\n }\n resolveFinal({\n text,\n stopReason,\n usage:\n inputTokens !== null || outputTokens !== null\n ? { inputTokens: inputTokens ?? 0, outputTokens: outputTokens ?? 0 }\n : null,\n requestId: res.headers.get('x-codai-trace-id') ?? res.headers.get('x-request-id') ?? null,\n routedTo: res.headers.get('x-codai-routed-to'),\n headers: res.headers,\n });\n } catch (err) {\n rejectFinal(err);\n throw err;\n }\n }\n\n async function* textOnly(): AsyncGenerator<string, void, undefined> {\n for await (const ev of events()) {\n if (ev.type !== 'content_block_delta') continue;\n const delta = ev.delta as { type?: string; text?: string } | undefined;\n if (delta?.type === 'text_delta' && delta.text) yield delta.text;\n }\n }\n\n return {\n [Symbol.asyncIterator]: () => events(),\n text: () => ({ [Symbol.asyncIterator]: () => textOnly() }),\n final,\n };\n }\n}\n","/** `GET /v1/models`. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Reply, type Schema } from './_shared';\n\nexport type Model = Schema<'CoreModel'>;\nexport type ModelList = Reply<'listModels'>;\n\nexport class Models {\n constructor(private readonly http: HttpClient) {}\n\n /** Every model the calling key may address (OpenAI list shape, `data[]`). */\n async list(opts: { ext?: CodaiRequestExtensions; signal?: AbortSignal } = {}): Promise<Model[]> {\n const raw = await this.http.json<ModelList>('/v1/models', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.data ?? [])];\n }\n}\n","/** `/v1/orgs/*` — the orgs (teams) you belong to and their members. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Org = Schema<'OrgWithRole'>;\nexport type OrgMember = Schema<'OrgMember'>;\nexport type OrgRole = Schema<'OrgRole'>;\nexport type OrgAddMemberBody = Mutable<Body<'addOrgMember'>>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class OrgMembers {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/orgs/{id}/members` */\n async list(orgId: string, opts: CallOpts = {}): Promise<OrgMember[]> {\n const raw = await this.http.json<Reply<'listOrgMembers'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { ext: opts.ext, signal: opts.signal },\n );\n return [...(raw.members ?? [])];\n }\n\n /** `POST /v1/orgs/{id}/members` — add or re-role (owner/admin). */\n add(\n orgId: string,\n body: OrgAddMemberBody,\n opts: CallOpts = {},\n ): Promise<Reply<'addOrgMember', 201>> {\n return this.http.json<Reply<'addOrgMember', 201>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members`,\n { body, ext: opts.ext, signal: opts.signal },\n );\n }\n\n /** `DELETE /v1/orgs/{id}/members/{userId}` */\n remove(orgId: string, userId: string, opts: CallOpts = {}): Promise<Reply<'removeOrgMember'>> {\n return this.http.json<Reply<'removeOrgMember'>>(\n `/v1/orgs/${encodeURIComponent(orgId)}/members/${encodeURIComponent(userId)}`,\n { method: 'DELETE', ext: opts.ext, signal: opts.signal },\n );\n }\n}\n\nexport class Orgs {\n readonly members: OrgMembers;\n constructor(private readonly http: HttpClient) {\n this.members = new OrgMembers(http);\n }\n\n /** `POST /v1/orgs` */\n create(name: string, opts: CallOpts = {}): Promise<Org> {\n return this.http.json<Org>('/v1/orgs', { body: { name }, ext: opts.ext, signal: opts.signal });\n }\n\n /** `GET /v1/orgs` */\n async list(opts: CallOpts = {}): Promise<Org[]> {\n const raw = await this.http.json<Reply<'listOrgs'>>('/v1/orgs', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.orgs ?? [])];\n }\n}\n","/** `/v1/projects/*` — projects (a repo + isolation policy) that group environments. */\nimport { type CodaiRequestExtensions, type HttpClient } from '../http';\nimport { type Body, type Mutable, type Reply, type Schema } from './_shared';\n\nexport type Project = Schema<'Project'>;\nexport type ProjectIsolation = Schema<'ProjectIsolation'>;\nexport type ProjectCreateBody = Mutable<Body<'createProject'>>;\nexport type ProjectPatchBody = Mutable<Body<'updateProject'>>;\nexport type ProjectDetail = Reply<'getProject'>;\n\ntype CallOpts = { ext?: CodaiRequestExtensions; signal?: AbortSignal };\n\nexport class Projects {\n constructor(private readonly http: HttpClient) {}\n\n /** `GET /v1/projects` — projects you own plus those of your orgs, newest first. */\n async list(opts: CallOpts = {}): Promise<Project[]> {\n const raw = await this.http.json<Reply<'listProjects'>>('/v1/projects', {\n ext: opts.ext,\n signal: opts.signal,\n });\n return [...(raw.projects ?? [])];\n }\n\n /** `POST /v1/projects` — 409 `slug_taken` when the slug is already yours. */\n async create(body: ProjectCreateBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'createProject', 201>>('/v1/projects', {\n body,\n ext: opts.ext,\n signal: opts.signal,\n });\n return raw.project;\n }\n\n /** `GET /v1/projects/{id}` — the project plus every environment in it. */\n get(projectId: string, opts: CallOpts = {}): Promise<ProjectDetail> {\n return this.http.json<ProjectDetail>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n\n /** `PATCH /v1/projects/{id}` — owner or org owner/admin; the slug cannot change. */\n async update(projectId: string, body: ProjectPatchBody, opts: CallOpts = {}): Promise<Project> {\n const raw = await this.http.json<Reply<'updateProject'>>(\n `/v1/projects/${encodeURIComponent(projectId)}`,\n { method: 'PATCH', body, ext: opts.ext, signal: opts.signal },\n );\n return raw.project;\n }\n\n /** `DELETE /v1/projects/{id}` — 409 `project_has_environments` until all are destroyed. */\n delete(projectId: string, opts: CallOpts = {}): Promise<Reply<'deleteProject'>> {\n return this.http.json<Reply<'deleteProject'>>(`/v1/projects/${encodeURIComponent(projectId)}`, {\n method: 'DELETE',\n ext: opts.ext,\n signal: opts.signal,\n });\n }\n}\n","/** `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\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","/** `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 // 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 * 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 *\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 { 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 /** 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\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\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 } from './operations';\nexport type { paths, components, operations } from './generated/gateway';\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';\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "codai-sdk",
3
- "version": "0.2.0",
4
- "description": "Official TypeScript SDK for the codai AI gateway - chat, streaming, agents, feedback, models.",
3
+ "version": "0.4.0",
4
+ "description": "Official TypeScript SDK for the codai AI gateway - chat, messages, responses, streaming, agents, tasks, sessions, devices, hosts, orgs, account.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "main": "./dist/index.js",
@@ -34,21 +34,26 @@
34
34
  "agents"
35
35
  ],
36
36
  "homepage": "https://codai.ro",
37
- "bugs": "https://github.com/dragoscv/codai-sdk/issues",
37
+ "bugs": "https://github.com/codai-ro/codai-sdk/issues",
38
38
  "repository": {
39
39
  "type": "git",
40
- "url": "git+https://github.com/dragoscv/codai-sdk.git"
40
+ "url": "git+https://github.com/codai-ro/codai-sdk.git"
41
41
  },
42
42
  "scripts": {
43
43
  "lint": "echo 'lint runs in the codai monorepo'",
44
44
  "typecheck": "tsc --noEmit",
45
45
  "build": "tsup",
46
46
  "test": "vitest run",
47
- "clean": "rm -rf .turbo dist"
47
+ "clean": "rm -rf .turbo dist",
48
+ "test:coverage": "vitest run --coverage",
49
+ "smoke:local": "tsx scripts/smoke-local.ts"
48
50
  },
49
51
  "devDependencies": {
52
+ "@vitest/coverage-v8": "^5.0.1",
50
53
  "tsup": "^8.5.1",
51
- "typescript": "^5.9.3",
52
- "vitest": "^4.1.7"
54
+ "tsx": "^4.23.13",
55
+ "typescript": "^6.0.3",
56
+ "vitest": "^5.0.1",
57
+ "@types/node": "^22.19.19"
53
58
  }
54
59
  }