Releases: stack-bound/stackllm
Releases · stack-bound/stackllm
v0.4.1
v0.4.0
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
v0.3.0
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
v0.2.0
Added
- TUI
/helpcommand listing all available slash commands with descriptions - TUI
/sessionscommand to browse, switch, and delete persisted sessions from a keyboard-driven picker - TUI
/renamecommand with a centered modal for renaming the current session - TUI
/forkcommand with a message picker for branching the current session at any point in its history - TUI
/deletecommand to remove the current session and start fresh - TUI
/exportcommand 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 interleavedBlockImageon 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 providerusagefields (opts intostream_options.include_usageon chat completions; readsresponse.completed.usageon/responses), and the max context length is read fromcapabilities.limits.max_prompt_tokenswhere the provider exposes it (Copilot) with a hardcoded fallback table covering the GPT / Claude / Gemini / Llama / Mistral / Qwen / DeepSeek families. Per-sessionLastUsageis 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
v0.1.0
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.