@xandreed/sdk-adapters
v0.4.2
Published
efferent SDK — Layer implementations of the sdk-core ports: multi-provider LLM router, auth, conversation/context stores (SQLite + Postgres), settings, fs/shell/http. Side effects live here.
Downloads
918
Maintainers
Readme
@xandreed/sdk-adapters
Concrete
Layerimplementations of the@xandreed/sdk-coreports. Every side effect lives here and nowhere else.
The middle ring of the architecture: adapters depends on core + the external SDK each adapter wraps, and never on the CLI. Each adapter is a Layer named <Thing>Live providing exactly one port (or a bundle like ModelLive that merges a tier).
Layout — one subfolder per concern
llm/— the multi-provider model tier.router.ts(RouterLanguageModelLive— resolves provider + key per request),providers.ts(Google / OpenAI / Anthropic incl. OAuth + cache breakpoints),openAiCodex.ts·openCode.ts·ollama.tsvariants,modelRegistry.ts(live catalogue),utilityLlm.ts(the fast helper tier),webSearch.ts(provider server-side grounding),retry.ts(retryableLlm— exponential backoff on transient 429 / 5xx / transport / timeout failures, honoringRetry-After; wired around the router'sgenerateText/generateObject,utilityLlm, andwebSearch, so it covers every provider).auth/—local.ts(LocalAuthStoreLive:~/.efferent/auth.json, atomic0600writes, OAuth refresh),env.ts(EnvAuthStoreLive— evals/CI only; the only place provider key env vars are read),oauth/anthropic.ts(PKCE).database/—migrator.ts(store selection: SQLite default, Postgres viaEFFERENT_DB_URL),conversationStore/+contextTreeStore/(SQLite + Postgres impls),migrations/.settings/,fs/,shell/,http/—config.jsonsettings + the local FileSystem / Shell / Http port impls.
Rules
- External promises go through
Effect.tryPromise, mapped into the port's tagged error — never let an untyped error escape. - Keys are never captured at layer build — resolve from
AuthStoreper call, so:login/:modelapply on the next request without a rebuild. - Depend on
@xandreed/sdk-core+ external SDKs only. Never import from the CLI or another adapter's internals. - Migrations register in
migrator.tsviaMigrator.fromRecord(bundle-safe) — one record per store flavor.
Part of efferent — an agent runtime on Effect.ts + Bun.
