v1.5 — устойчивые сессии, возобновление с чекпоинтов и подписанные одобрения

Один канонический протокол для каждого ИИ-провайдера

Чистый · web-first · мультипровайдерный TypeScript AI SDK

Anthropic, OpenAI, xAI Grok, Google Gemini и Vertex AI за одним каноническим протоколом стриминга. Ноль runtime-зависимостей, детерминизм по дизайну — работает везде, где работает fetch.

npm install @deuz-sdk/core

Единая поверхность API для

  • Anthropic
  • OpenAI
  • xAI Grok
  • Google Gemini
  • Vertex AI
  • Yunwu

Канонический дельта-поток

Каждый ответ провайдера нормализуется в типизированный поток StreamPart до того, как его увидит ваш код. Сырой SSE никогда не просачивается.

Агентный цикл инструментов

Параллельное, самовосстанавливающееся выполнение инструментов с защитой от зацикливания, бюджетными стопами, воротами одобрения и вложенными суб-агентами.

Edge-безопасное ядро

Только Web API — без node:*, без Buffer, без внешнего состояния. Node, Deno, Bun, Vercel Edge и Cloudflare Workers.

Детерминированный и тестируемый

Часы, случайность, fetch и ключи внедряются через единый шов Dependencies. Golden-replay-тесты без реальной сети.

Память, RAG и skills

Пайплайн памяти в стиле mem0, гибридный поиск BM25 + векторы и прогрессивное раскрытие SKILL.md — всё edge-safe.

Структурированный вывод и UI-протокол

Схемно-типизированные generateObject / streamObject, React-хуки и версионируемый SSE-протокол, которым вы владеете целиком.

Стриминг в три строки

streamChat возвращается синхронно и никогда не бросает исключений — запрос лениво стартует при первом чтении. Поменяйте фабрику, чтобы сменить провайдера; больше ничего не меняется.

Quickstart
// swap the factory to swap providers
import { streamChat } from '@deuz-sdk/core';
import { createAnthropic } from '@deuz-sdk/core/anthropic';

const anthropic = createAnthropic({ apiKey });
const res = streamChat({
  model: anthropic('claude-opus-4-8'),
  messages: [{ role: 'user', content: 'Hello!' }],
});

for await (const chunk of res.textStream) {
  process.stdout.write(chunk);
}