Changelog
Public release notes for SAALT packages. Versions follow semver. Entries use the Keep a Changelog format.
SAALT Core
Release notes for the core SAALT platform — the web app, REST API, App runtime, and built-in features. These are the developer-facing technical notes; the in-app What's New covers the same releases at a higher, user-facing level.
v1.2.0 — 2026-07-03
Added
- Memory — durable per-Agent, per-user facts carried across conversations, so answers stay relevant without re-explaining context each time. Personal (per-user) and shared (agent-wide) memories are stored separately and capped per bucket, gated by the Agent's
memoryEnabled/sharedMemoryEnabledsettings; a background pass consolidates and safety-screens entries before they are stored. See Memory. - Standalone Apps — Apps can run agent-less and full-page as their own destination, rather than always attached to an Agent's chat. Declared with
standalone: trueplus a stableidin the App's/meta, served under/app/{id}, and given a standalone-scoped Bridge (noagentId— agent-targeted Bridge calls are rejected). See Standalone apps. - OpenAI-compatible API — a gateway at
/api/openai/v1that speaks the OpenAI format, so existing OpenAI SDKs and tools work against SAALT with minimal changes. Implementschat/completions(streaming, tool calls, and token usage),models, andembeddings, plus a SAALT-specificrerankextension. Authenticate with an API key viaAuthorization: Bearerorx-api-key. See OpenAI-compatible API. - Personal agents — user-owned Agents (
isPersonal) scoped to a single user, alongside shared team Spaces; each user gets a personal chat Agent scaffolded automatically. - Conversation API — REST endpoints to list and continue conversations and read their messages:
GET/POST /llm/{agentId}/conversationandGET /llm/{agentId}/conversation/{conversationId}/messages. Conversation search is backed by Postgres trigram and full-text indexes. See the API reference.
Changed
- Rewritten Chat experience — an in-chat Agent switcher, drag-and-drop / paste file uploads, conversation search, per-Agent model preference, and deep-research progress indicators. Chat routing moved to
/space/{spaceId}/agent/{agentId}; the legacy/chat/{agentId}path redirects. See Chat.
This is the first published SAALT Core release entry. Full historical core release notes will follow. For the current API contract, see the API reference.
Bridge — @open-agent-kit/bridge
Release notes for the TypeScript SDK that Apps use to talk to SAALT Core. See Bridge SDK reference for the current method surface.
v1.2.0 — 2026-08-03
First stable 1.2.0 release — the standalone-bridge rework: bind-once scope, transcription, agent-less LLM generation, and conversation listing. Install with npm i @open-agent-kit/bridge. Changes below are relative to the previous stable release, v1.0.8.
Breaking
createBridgenow binds scope once at construction —createBridge({ token, serverUrl, agentId? }). Per-callagentIdarguments were removed fromconfig,pluginData,knowledge,conversation,agent, andllm.getAvailableModels; the scope is taken from the bridge instance instead.- Agent-only namespaces (
knowledge,conversation,agent,llm.getAvailableModels) throw on a standalone (agent-less) bridge.
Added
- Standalone (agent-less) bridge support — omit
agentIdwhen constructing to talk to SAALT Core without an Agent scope. - Exported
BridgeScopetype:{ type: "agent"; agentId } | { type: "standalone" }. llm.transcribe(params)— speech-to-text over an audio/video clip via Gemini. Params:model,audioBase64,mimeType, optionalprompt; returns{ text }. Works on both standalone and agent-scoped bridges.llm.generateText,generateObject, andgenerateImagenow run on a standalone bridge (no agent required); the model resolves to the instance-wide default.conversation.findMany(filter)— list an agent's conversations with an optional Prisma-style filter (where/select/orderBy/skip/take/cursor), returning a bareConversation[]. Message bodies are not included (usefindFirstper conversation, as they can be large); incognito and private conversations are never returned, and archived ones are excluded by default. Requires an agent-scoped bridge. See thebridge.conversationreference.llm.getAvailableModelsnow also returnsmodels: ModelInfo[]alongsidedefaultModelandavailableModels— the full metadata (key,modelId,displayName,provider,region,tags,pricing, …) for each allowed model, so a picker can show names and badges instead of raw keys.
Changed
- Forwarded proxy headers renamed:
oak_session_token/oak_server_url→saalt_session_token/saalt_server_url(plus a newsaalt_base_path). - The SDK's admin API base path moved to
/api/v1/bridge. The legacy/api/v1/adminbase path 307-redirects for backwards compatibility.
v1.0.8 — 2026-06-26
Added
bridge.llm.generateSpeech(params)— text-to-speech via Gemini TTS. Returns{ base64, mimeType }for the synthesized audio. Supports a single prebuiltvoiceNameor a multi-speakerspeakersarray (up to 2 speakers, each mapping a speaker label to a voice).
Breaking
- None.
v1.0.7 — 2026-06-25
Added
bridge.llm.getAvailableModels(agentId)— returns{ defaultModel, availableModels }for the Agent so plugins can gate model selection to what the Agent actually allows.
Changed
bridge.llm.generateImagenow accepts an optionalimageConfig(aspectRatio— one of1:1,4:3,3:4,16:9,9:16;resolution—1K,2K, or4K) and an optional inpaintingmask(a data URL). Existing calls without these fields are unchanged.
Breaking
- None.
v1.0.6 — 2026-05-26
Added
bridge.agent.getAgent(agentId)— returns{ id, name, model }for the given Agent so plugins can render the configured LLM model or display name. Token-scoped: the call returns403if the plugin's bearer token does not include the requestedagentId.
Breaking
- None.
v1.0.5 — 2026-05-26
Changed
- Raised the undici dispatcher
headersTimeoutfrom 30 minutes to 60 minutes so long-running LLM and file-parse calls don't time out at the SDK transport layer.
Breaking
- None.
v1.0.4 — 2026-05-08
Added
bridge.knowledge.attachTagToDocument(agentId, documentId, tagId)— attach an existing knowledge tag to a document.bridge.knowledge.removeTagFromDocument(agentId, documentId, tagId)— detach a knowledge tag from a document.
Breaking
- None.
v1.0.3 — 2026-05-08
Added
bridge.knowledge.createTag(agentId, tag)— create a knowledge tag for an agent.bridge.knowledge.listTags(agentId)— list knowledge tags for an agent.bridge.knowledge.updateTag(agentId, tagId, updates)— update a knowledge tag's name or color.bridge.knowledge.deleteTag(agentId, tagId)— delete a knowledge tag.- Types:
KnowledgeTag,KnowledgeTagInput,KnowledgeTagUpdate.
Breaking
- None.
v1.0.2 — 2026-04-01
Changed
- HTTP requests now use a custom
undiciAgentdispatcher with a 30-minute headers timeout, so long-running LLM calls aren't cut off by Node's default fetch timeout.
Added
undici ^7.24.6runtime dependency. Node 18+ ships with undici, but plugins must allow it as a transitive dep.
Breaking
- None.
v1.0.1 — 2026-03-25
Added
- Package
README.mdwith installation snippet and a namespace reference table.
No code or API changes in this release.
Breaking
- None.
v1.0.0 — 2026-02-09
Initial public release of @open-agent-kit/bridge.
Added
createBridge({ token, serverUrl })factory andOAKBridgereturn type.decodeToken(token)helper for inspecting the forwarded session token.Toolsclass for registering plugin tools, with exportedToolandToolExecuteParamstypes.- Bridge namespaces:
bridge.data.config,bridge.data.pluginData,bridge.llm,bridge.files,bridge.knowledge,bridge.conversation,bridge.user. PluginMetatype and re-exportedFilePart/ImagePart/TextPartfrom@ai-sdk/provider-utils.- Runtime dependencies:
zod,zod-from-json-schema,zodex.
Breaking
- None (initial release).