Install
fetch required). Works in Node.js, Deno, Bun, and edge runtimes.
Initialize
Configuration
| Option | Type | Default | Description |
|---|---|---|---|
apiKey | string | required | Your theo_sk_... API key |
baseUrl | string | "https://www.hitheo.ai" | API base URL (www host — see note below) |
timeoutMs | number | 30000 | Unary request timeout (ms); also the stream connect/first-byte budget. See Timeouts & Retries. |
streamIdleTimeoutMs | number | 120000 | Stream idle (between-chunks) timeout (ms). Not a total cap. |
maxRetries | number | 2 | Retries on 429/5xx (exponential backoff). Timeouts are not retried on POSTs. |
What’s Included
The SDK exports:| Export | Type | Description |
|---|---|---|
Theo | class | Main client with all API methods |
TheoStream | class | Returned by theo.stream() — async-iterable with cancel() and final metadata |
EviInstance | class | E.V.I. wrapper (created via theo.evi()) |
TheoApiError | class | Base typed error with status, body, url, kind, and parsed details |
TheoTimeoutError / TheoCancelledError | class | TheoApiError subclasses for timeouts (carries timeoutMs) and caller cancellation |
TheoUsageError | class | Thrown synchronously for SDK misuse (e.g. an async mode sent to complete()/stream()) |
defineSkill | function | Type-safe skill manifest builder |
defineConfig | function | Type-safe project config builder |
| All types | interfaces | CompletionRequest, CompletionResponse, StreamEvent, TheoStream, VerifyResult, ConversationSummary, SkillSummary, SdkToolDefinition, WorkflowRecord, WebhookRecord, HookRecord, UsageReport, etc. See Types for the full list. |
Upgrading to 0.2.0
If you’re upgrading from0.1.x:
- No code changes required for typical
theo.complete()/theo.stream()usage. - If you pinned
baseUrl: "https://hitheo.ai"explicitly, drop it (or switch to"https://www.hitheo.ai") to pick up the new default and avoid header-stripping redirects. theo.stream()now returns aTheoStream.for awaitstill works; you additionally gain.cancel()and post-completion metadata (conversationId,usage,requestId).CompletionResponse.usagenow includesprompt_tokens,completion_tokens,total_tokens, and an optionalcachedboolean. Existingres.usage.cost_centsusage keeps working.- List methods that used to return
Promise<unknown[]>(conversations,skills,tools,workflows,submissions, etc.) now return typed records — remove anyas anycasts. Full release notes: Changelog.
