# SDK changelog

Every release of the Python and TypeScript SDKs, newest first.

What changed in each release of the SDKs. Install and quickstart are on [SDKs](/docs/reference/sdks).

## Python: `liyagent` on PyPI

### 0.2.1 — 2026-11-05

- `AsyncClient`: every call of `Client` for asyncio (`await`, and
  `async for` over `agents.list()`), over `httpx.AsyncClient`.
- Retries with exponential backoff and jitter: a 429 or 503 (any method)
  and an unreachable server are sent again, and a 500, 502, 504 or read
  timeout for GET, PUT and DELETE; `Retry-After` is respected.
  `max_retries=` (default 2, `0` turns them off).
- An exception class per kind, all subclasses of `LiyagentError`:
  `AuthenticationError`, `PermissionDeniedError`, `NotFoundError`,
  `BadRequestError`, `ConflictError`, `RateLimitError`,
  `InternalServerError`, `APIConnectionError`. Each carries `request_id`
  (the server's X-Request-Id, also in the message), `method` and `path`.
  429 is now kind `rate_limited` and 5xx kind `server` (both were `error`).
- A refused sign-in or service-account exchange says the server's reason;
  a sign-in that asks for an authenticator code says to use a service
  account. `knowledge.answer` without an API key says to pass `api_key=`.
- README rewritten for a first-time user: a quickstart that runs, where the
  token comes from, core concepts, errors, retries, asyncio. Package links
  to the docs, the changelog and support.

### 0.2.0 — 2026-11-05

- Release-ready package metadata (classifiers, URLs, `py.typed`), the
  version read from `liyagent.__version__`, and a GitHub Actions release to
  PyPI by trusted publishing.
- Typed request bodies (`liyagent.models`: a `TypedDict` per body and
  `REQUEST_BODIES`) generated from the server's OpenAPI document.
- `templates.install(..., params=)` sends template parameters.
- Authoring the tenant's own templates: `templates.authored`,
  `authored_versions`, `validate`, `draft_from_agent`, `save_draft`,
  `publish`, `delete_draft`, `withdraw`.

### 0.1.0

- First version: agents, runs, evals, knowledge, approvals and solution
  templates over httpx; `check_server()`.

## TypeScript: `@liyagent/sdk` on npm

### 0.2.1 — 2026-11-05

- CommonJS as well as ES modules: `require("@liyagent/sdk")` works (0.2.0
  was ESM only), each with its own type declarations.
- Works in browsers and edge runtimes: the global `fetch` is no longer
  called as a method of the client (which threw "Illegal invocation").
- Retries with exponential backoff and jitter: a 429 or 503 (any method)
  and an unreachable server are sent again, and a 500, 502 or 504 for GET,
  PUT and DELETE; `Retry-After` is respected. `maxRetries` (default 2) and
  `timeoutMs` (default 60000) options.
- An error class per kind, all subclasses of `LiyagentError`:
  `AuthenticationError`, `PermissionDeniedError`, `NotFoundError`,
  `BadRequestError`, `ConflictError`, `RateLimitError`,
  `InternalServerError`, `APIConnectionError` (a network failure, which
  0.2.0 let through as a bare `TypeError`). Each carries `requestId`. A
  non-JSON error body (a proxy's HTML page) no longer throws a
  `SyntaxError`.
- The Python SDK's calls: `agents.list` (an async iterator over every
  page), `delete`, `start`, `stop`, `workflows`, `workflowRun`; `runs`;
  `evals.dataset`, `createDataset`, `runs`, `compare`, `wait`;
  `knowledge.collections`, `articles`, `approveArticle`, `rejectArticle`;
  `approvals.get`; `templates.get`, `installs`; `checkServer()` and
  `missingOperations()`.
- `username`/`password` sign-in, and `LIYA_URL`, `LIYA_TOKEN` and
  `LIYA_API_KEY` read where there is a `process.env`.
- `send<T>()` takes the response type.
- README rewritten for a first-time user; package links to the docs and
  support.

### 0.2.0 — 2026-11-05

- First release-ready package: `dist/` built with declarations, `exports`
  map, `engines`, `npm pack` builds first (`prepack`), published with npm
  provenance from GitHub Actions.
- Typed request bodies (`models.ts`) generated from the server's OpenAPI
  document; `templates.install`/`preview`, `agents.apply` and
  `templates.draftFromAgent` take them.
- `templates.install` sends template parameters (`params`).
- Authoring the tenant's own templates: `authored`, `authoredVersions`,
  `validate`, `draftFromAgent`, `saveDraft`, `publish`, `deleteDraft`,
  `withdraw`.
- `VERSION` export.

### 0.1.0

- Skeleton: agents, evals, knowledge, approvals and templates over fetch.

