Skip to content

Latest commit

 

History

History
112 lines (96 loc) · 9.63 KB

File metadata and controls

112 lines (96 loc) · 9.63 KB

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.

[0.8.1] - 2026-09-25 (93.99%)

Added

  • ExtraBody on provider.Config and provider.Request merges vendor-specific top-level fields into the request body on both /chat/completions and /responses, e.g. OpenRouter's provider routing object; request keys override config keys, a nil value removes one, and model / messages / input / stream are rejected as reserved
  • agent.WithExtraBody, Agent.SetExtraBody and Agent.ExtraBody send those fields from the agent, so OpenRouter upstream providers can be chosen per model alongside SetModel

[0.8.0] - 2026-09-25 (93.97%)

Added

  • OpenRouter is now a supported provider: log in with an sk-or-… API key via profile.Manager, the login example, or the web POST /providers/openrouter/login route, and pick from its models in any picker
  • OpenRouter models are discovered live from its /models endpoint with vendor-namespaced IDs (e.g. openrouter/openai/gpt-4o) and each model's context_length propagated to ModelInfo
  • provider.OpenRouterConfig() helper and provider.OpenRouterBaseURL constant for embedders wiring OpenRouter directly

[0.7.0] - 2026-09-25 (93.95%)

Added

  • Groq cloud is now a supported provider: log in with a gsk_… API key via profile.Manager, the login example, or the web POST /providers/groq/login route, and pick from its models in any picker
  • Groq models are discovered live from its /models endpoint; retired entries (active: false) and audio-only families (Whisper, PlayAI TTS) are hidden and each model's context_window is propagated to ModelInfo
  • provider.GroqConfig() helper and ModelMeta.Active field for embedders wiring Groq directly
  • /effort TUI command picks the reasoning effort (default, or none through max) mid-session; the current level shows in the status bar and a 400 while an effort is set suggests trying another level
  • Reasoning effort persists across TUI restarts via tui.WithEffortStore, backed by profile.Manager.ReasoningEffort / SetReasoningEffort and a reasoning_effort field in config.json
  • agent.SetReasoningEffort / ReasoningEffort change and read an agent's effort at runtime, and provider.ReasoningEffortLevels() lists every level

[0.6.0] - 2026-09-21 (93.83%)

Added

  • Reasoning effort control: provider.Config.ReasoningEffort (default for every call), provider.Request.ReasoningEffort (per-call override) and agent.WithReasoningEffort(level), with the provider.ReasoningEffortNone|Minimal|Low|Medium|High constants. Sent as reasoning.effort on /responses and reasoning_effort on /chat/completions; omitted when unset, so the model keeps its own default

[0.5.2] - 2026-08-20 (93.81%)

Fixed

  • OpenAI/Azure chat completions now send max_completion_tokens (with automatic max_tokens fallback for older models), fixing 400 unsupported_parameter errors on newer models

[0.5.1] - 2026-08-20 (93.81%)

Changed

  • Improved test coverage from 71.56% to 93.81%
  • Formatted all source files with gofmt

Fixed

  • sqlitestore.ImportJSONL of an export with no messages now stores a NULL leaf pointer instead of an empty string, so the imported session loads instead of failing with "current_leaf_id not found"
  • OAuth web-flow logins (OpenAI and Codex) now drain the local callback server gracefully on completion, so the browser reliably receives the result page instead of an occasional connection reset

[0.5.0] - 2026-08-20 (71.32%)

Changed

  • BREAKING: moved the SQLite-backed session store out of session into the new session/sqlitestore subpackage — session.OpenSQLiteStore/session.NewSQLiteStore/session.SQLiteStore/session.SQLiteConfig are now sqlitestore.Open/sqlitestore.New/sqlitestore.Store/sqlitestore.Config. Importing session for the SessionStore interface no longer links modernc.org/sqlite into the embedder's binary; the session package is now guaranteed driver-free

Fixed

  • agent.Run no longer mutates the shared Agent's hooks per step, making concurrent Run calls on one Agent safe — each run now snapshots the options and emits to its own event channel without cross-wiring. The concurrency contract is documented on Agent, Run, SetProvider, and SetModel

[0.4.2] - 2026-08-20 (71.32%)

Added

  • Added in new OpenAI models

[0.4.1] - 2026-04-19

Added

  • Added pagination for sessions

[0.4.0] - 2026-04-19

Added

  • Added endpoint for logging in with all providers
  • Added a web example of how to log in to a provider, choose a model and start a chat

Fixed

  • Fixed model communication issues with OpenAI models

[0.3.0] - 2026-04-15

Changed

  • Changed colour of the thinking blocks and made italic.

Fixed

  • Show Gemini thinking blocks as they come under a differnt name to other models

[0.2.0] - 2026-04-11

Added

  • TUI /help command listing all available slash commands with descriptions
  • TUI /sessions command to browse, switch, and delete persisted sessions from a keyboard-driven picker
  • TUI /rename command with a centered modal for renaming the current session
  • TUI /fork command with a message picker for branching the current session at any point in its history
  • TUI /delete command to remove the current session and start fresh
  • TUI /export command for saving the current session to a JSONL file
  • Session indicator in the TUI status bar showing the current session name and message count
  • TUI image paste: Ctrl+V reads the system clipboard via wl-paste / xclip / pngpaste / osascript / powershell.exe, inserts a [Image #N] placeholder into the textarea, and emits an interleaved BlockImage on send so all five OpenAI-compatible backends receive the bytes as a base64 data URI. Falls back transparently to the default text paste when the clipboard holds no image or the platform tools are unavailable.
  • TUI status line now shows the current model and context usage right-aligned (e.g. gpt-5.4 · 12,345 / 200,000 (6.2%)). Token counts come from actual provider usage fields (opts into stream_options.include_usage on chat completions; reads response.completed.usage on /responses), and the max context length is read from capabilities.limits.max_prompt_tokens where the provider exposes it (Copilot) with a hardcoded fallback table covering the GPT / Claude / Gemini / Llama / Mistral / Qwen / DeepSeek families. Per-session LastUsage is persisted via SQLite schema v2 so reopening a session restores the figures without a round-trip to the model.

Changed

  • TUI example now uses the SQLite-backed session store so sessions persist across runs

[0.1.0] - 2026-04-10

Added

  • Block-shaped messages: every Message now holds an ordered slice of typed blocks (text, thinking, redacted_thinking, image, tool_use, tool_result), so interleaved assistant output replays faithfully through every layer — providers, agent loop, TUI, web SSE, and the session store.
  • Reasoning capture across providers: chat completions parses delta.reasoning_content alongside delta.content, and the Responses API stream maps every output_item (reasoning / message / function_call) to its own block instead of dropping reasoning on the floor.
  • Durable SQLite session store: session.SQLiteStore persists full conversation history to a single pure-Go SQLite file (modernc.org/sqlite, no CGO) with OpenSQLiteStore for standalone embedders and NewSQLiteStore for parent apps that share a *sql.DB — all stackllm tables are prefixed stackllm_ so host-app schemas coexist.
  • Session branching: Fork, Rewind, and ListBranches let callers create sibling branches at any message boundary without deleting history, backed by a parent_id message tree and a current_leaf_id pointer.
  • Artifact offload with SHA-256 dedupe: large tool results, inline image bytes, and redacted thinking payloads move to a side table with a small inline preview kept on the block row; HydrateArtifact fetches the full payload lazily and identical blobs share a single artifact row across sessions.
  • FTS5 full-text search: session.Search runs full-text queries across text, thinking, and tool_result blocks with optional block-type and per-session scoping.
  • JSONL export and import: ExportJSONL / ImportJSONL round-trips every block type, inlining artifact bytes so exported sessions are fully self-contained.
  • examples/sqlite: runnable shared-DB demo that runs a parent-app migration alongside session.NewSQLiteStore on the same SQLite file.

Removed

  • conversation: Message.Content (string) and Message.ToolCalls ([]ToolCall) — superseded by Message.Blocks. Readers should switch to m.TextContent() or Blocks iteration; builders should switch to the block-oriented Builder methods.

[0.0.2] - 2026-04-08

Added

  • Configurable poll intervals and retry backoff (PollInterval on auth configs, BaseBackoff on provider Config, WithPollInterval on profile Manager) to allow fast test execution without hardcoded sleeps
  • Provider management layer: config/ package for user preferences, profile/ package composing auth+config+provider with Login/Logout/Status/ListModels/SetDefault/LoadDefault, examples/login interactive CLI, and updated examples to use profile-first resolution with interactive onboarding fallback

[0.0.1] - 2026-04-08

Added

  • Initial Build

Notes

[Deployment] Notes for deployment [Added] for new features. [Changed] for changes in existing functionality. [Deprecated] for once-stable features removed in upcoming releases. [Removed] for deprecated features removed in this release. [Fixed] for any bug fixes. [Security] to invite users to upgrade in case of vulnerabilities. [YANKED] Note the emphasis, used for Hotfixes