Changelog
For the full changelog, please refer to the individual release notes on https://github.com/justyns/silverbullet-ai/releases or the commits themselves.
This page is a brief overview of each version.
0.7.2 (2026-05-24)
- Fix an issue with post processors where they'd run for each streamed chunk instead of the final text, causing replacements like
FOO Mochi BARochi BAR. Now they only run once, after the full response has finished streaming.
0.7.1 (2026-05-19)
- Fix post processors and enrichment functions not working when defined as lua functions instead of space-script/plugs
0.7.0 (2026-05-17)
- BREAKING: Build system migrated from Deno to Node.js/npm (
npm run build,npm test) - Rename CI workflow from
deno-build.ymltobuild.yml; update all workflows to latest action versions - Update development docs to reflect Node.js/npm build and test commands
- Add release workflow to publish to GitHub Releases automatically on version tags
- Replace hardcoded
justyns/silverbullet-airepo references with dynamic repo detection - Bump minimum SilverBullet to v2.8.0
- Add Mistral provider with
tool_choice: "any"for reliable tool calls; lives in its ownsrc/providers/mistral.ts - Add Mistral embedding support by routing through
OpenAIEmbeddingProviderwith Mistral's base URL (mistral-embedis OpenAI-compatible) - Inject the available tool list into the chat system prompt so models see what's callable
- Fix Mistral tool calls looping indefinitely —
tool_choicenow switches from"any"to"auto"once tool results exist, so Mistral returns a text response - Fix
useProxydefaulting totruefor Mistral, which caused 411 Content-Length Required errors; now consults provider defaults - Fix model metadata lookup picking wrong provider for Mistral models
- Fix Mistral model metadata lookup returning incorrect context window size
- Fix Gemini API key being sent as a URL query parameter; it is now sent via the
x-goog-api-keyheader only - Fix Gemini streaming never completing (promise hang) — detect
finishReasoninstead of relying on[DONE]sentinel - Fix Gemini tool calling: pass tools to API, parse
functionCallparts in responses, handlethoughtSignature - Fix Gemini
additionalPropertieserror in JSON schema mode — strip unsupported schema fields - Fix support for models that don't support tool calling — tools are no longer sent for those models
- Remove API key from the init check since Ollama doesn't require one
- Fix image model initialization crashing plugin init for unsupported providers; now logs a warning and clears stale cache
- Fix
promptAndGenerateImageto checkcurrentImageProviderbefore proceeding, with a clear actionable error message - Fix agent panel not updating when switching agents
- Fix RAG status not refreshing when switching agents
- Poll for agent changes to handle command palette selection
- Fix promise hang bugs and missing permissions in streaming agentic chat
- Fix unsafe type casts that could cause runtime errors
- Fix config re-initialization loop caused by embedding/image model setup overwriting the global API key
- Fix double-unescape in
unescapeHtmlby replacing&last - Fix security issues and improve type safety
0.6.5 (2026-03-13)
- Correctly infer provider type in more cases, e.g. ollamaLocal -> ollama
- Add configurable
timeoutoption per provider for slow models - Add model name to assistant chat header, click to change the model for the session
- Click RAG icon to enable/disable embeddings search temporarily
- Display agent name and click it to change to a different agent
- Persist agent selection in chat panel
- Remember the state of the assistant chat panel and re-open it on page reload
- Add support for displaying thinking/reasoning blocks with Ollama
- Show tool call status in input placeholder text
- Add overflow menu for small screen sizes on mobile
- Fix Gemini model name extraction
- Fix connectivity tester to surface keys from newer
apiKeyconfig format - Discard embeddings results with similarity score below 15
- Fix null similarity score handling
- Add missing JSON schema definitions and validate additional config options
- Remove invalid config examples from docs
0.6.4 (2025-01-13)
- Image generation supports gpt-image models now
- Support provider-based config for image and embedding models, now you can define a single provider and use it for text, images, and embeddings
- Add new
defaultEmbeddingModelanddefaultImageModelconfig options - Support batch embedding generation for openai and ollama
- Show pricing info for remote apis in the model picker
- Add new
AI: Reset Selected Modelscommand
0.6.3 (2025-01-10)
- Embeddings now include page title and section headers. Requires re-indexing to take effect.
- Benchmark command now shows progress
- Reuse SB's theming where possible so that the UI is more consistent
- Add path-based permissions for agents (
allowedReadPaths,allowedWritePaths) to restrict tool access, wiki-link context, and current page context to specific folders - Add an explicit "AI: Refresh Config" command
- Improve potential performance issue where we still do unncessary inits and datastore reads
0.6.2 (2025-01-05)
- Improvements to default system prompt to use less tokens
- Generate /llms.txt and /llms-full.txt
- Agents now inherit the base system prompt by default, but can be toggled off with
inheritBasePrompt - Fix potential performance issue where
page:indexevents caused unnecessary async work when embeddings are disabled - Fix potential performance issue where the config was re-read even when there were no changes
- Parallelize model discovery and cache Ollama model info to avoid redundant API calls
- Add new
Reindex All Embeddingscommand - Fix Embeddings Search virtualpage
- Fix error on chat panel when no text model selected
- Add RAG status indicator in chat panel header, show embeddings context like tool calls, move them to their own messages
0.6.1 (2026-01-02)
- Fix error caused by tool messages being enriched
- ctrl+a+shift actually toggles the assistant panel now instead of only opening it
- Add JSON schema definitions for
ai.providersandai.defaultTextModelconfig - Clicking wiki-links in the assistant panel now navigates without page refresh
- Auto-complete of page links should filter properly now
0.6.0 (2026-01-02)
- Added a side-panel for AI chat (
AI: Open Assistantcommand)- Tool calls rendered as expandable blocks
- Strip tool calls from chat history to reduce context size (but they are stored in local storage temporarily)
- Default context including current page name and content
- Customizable chat context via Space Lua (e.g. current date or other dynamic values)
- Track token usage against model's token limit (caches LiteLLM's public json)
- Add a modal version of the same assistant chat
- New agent system for customizable personas with specific context and tools (e.g. "silverbullet lua expert")
- Create custom agents via Space Lua (
ai.agents.myagent = {...}) - Create page-based agents with
meta/template/aiAgenttag - Tool filtering with whitelist (
tools) or blacklist (toolsExclude) AI: Select AgentandAI: Clear Agentcommands
- Create custom agents via Space Lua (
- New tool system allowing interactions with your space
- Tools defined via Space Lua in
ai.toolstable - Approval system for tools that modify data (shows diff preview)
- Built-in tools:
-
read_note- Read page content or specific sections -list_pages- List pages with filtering options -get_page_info- Get page metadata -create_note- Create new pages -update_note- Update page content (replace, append, prepend) -search_replace- Find and replace text -update_frontmatter- Update YAML frontmatter keys -rename_note- Rename pages with backlink updates -navigate- Navigate to pages or positions -eval_lua- Execute Lua expressions -ask_user- Get immediate feedback from the user - Updated default system prompt to include instructions for tools when enabled
- Tools defined via Space Lua in
- Update system prompt to include basic SB formatting hints and docs links
- Add support for structured output
- Connectivity test now includes structured output and tool usage tests
- Migrated commands to Space Lua - AI: Suggest Page Name - AI: Generate tags for note - AI: Generate Note FrontMatter - AI: Enhance Note
- Created an initial version of a benchmark system to verify if specific models can correctly use tools for sbai
- Add a new provider-based configuration to configure a provider like Ollama once and load models dynamically, instead of configuring each model separately
- Added a
defaultTextModeloption
0.5.0 (2025-12-15)
SilverBullet v2 Support
- BREAKING: Now requires SilverBullet v2.3.0 or later
- Migrated from SETTINGS/SECRETS pages to Space Lua configuration (
config.set {}) - API keys now configured via
ai.keysin config (e.g.,ai.keys.OPENAI_API_KEY) - Uses
system.getConfig()instead of deprecatedsystem.getSpaceConfig() - Removed all server vs client logic - everything runs in the browser now
- Moved embedding search and connectivity test pages to new virtual page API
- See SilverBullet v2 Migration Guide for upgrade instructions
Proxy Configuration
- Added
useProxyoption to all provider types (text, embedding, image) - When
useProxy: false, requests bypass SilverBullet's server proxy and go directly from the browser - Useful for local services like Ollama running on the same machine as the browser
- SSE streaming now properly transforms URLs and headers for the proxy
- Note:
useProxy: truerequires Silverbullet >= 2.3.1 or Edge as of 2025-12-11 for PR #1721
Removed deprecated stuff
- Removed deprecated commands (use Templated Prompts instead):
AI: Summarize Note and open summaryAI: Insert SummaryAI: Call OpenAI with Note as contextAI: Stream response with selection or note as prompt
- Removed deprecated config settings:
ai.openAIBaseUrl- usebaseUrlin model config insteadai.dallEBaseUrl- usebaseUrlin model config insteadai.requireAuth- userequireAuthin model config insteadai.secretName- useai.keys.*insteadai.provider- useproviderin model config instead
Library Changes
- BREAKING: The AICore Library is now merged into the main plug - no separate install needed
- Converted library scripts from Space Script to Space Lua
- Convert AIPrompts to examples and add support for defining them using Lua
Other Changes
- Better logging when SSE events have errors
- Add support for retrieving list of models from OpenAI and Ollama providers
- Add a Connectivity Test command and page to test whether an API is working
- Docs site now uses mkdocs only (removed deprecated silverbullet-pub :( )
- Plug now distributed via GitHub Releases (
ghr:prefix in Library Manager) only, the compiled .js file will no longer be in git and neither will the compiled lua library.
0.4.1 (2024-11-15)
- Upgrade to deno 2
- Upgrade to Silverbullet 0.10.1
- Upgrade to deno std@0.224.0
0.4.0 (2024-09-16)
- Use a separate queue for indexing embeddings and summaries, to prevent blocking the main SB indexing thread
- Refactor to use JSR for most Silverbullet imports, and lots of related changes
- Reduced bundle size
- Add support for space-config
- Add support for Post Processor functions in Templated Prompts.
- AICore Library: Updated all library files to have the meta tag.
- AICore Library: Add space-script functions to be used as post processors:
- indentOneLevel - Indent entire response one level deeper than the previous line.
- removeDuplicateStart - Remove the first line from the response if it matches the line before the response started.
- convertToBulletList - Convert response to a markdown list.
- convertToTaskList - Convert response to a markdown list of tasks.
- Add new insertAt options for Templated Prompts:
- replace-selection: Replaces the currently selected text with the generated content. If no text is selected, it behaves like the 'cursor' option.
- replace-paragraph: Replaces the entire paragraph (or item) where the cursor is located with the generated content.
- start-of-line: Inserts at the start of the current line.
- end-of-line: Inserts at the end of the current line.
- start-of-item: Inserts at the start of the current item (list item or task).
- end-of-item: Inserts at the end of the current item.
- new-line-above: Inserts on a new line above the current line.
- new-line-below: Inserts on a new line below the current line.
- replace-line: Replaces the current line with the generated content.
- replace-smart: Intelligently replaces content based on context (selected text, current item, or current paragraph).
- AICore Library: Add
aiSplitTodoslash command andAI Split Tasktemplated prompt to split a task into smaller subtasks. - AICore Library: Add template prompts for rewriting text, mostly as a demo for the
replace-smartinsertAt option. - Remove need for duplicate
descriptionfrontmatter field for templated prompts. - Revamp docs website to use mkdocs and mkdocs-material.
0.3.2
- Expose searchCombinedEmbeddings function to AICore library for templates to use
- Add Ollama text/llm provider as a wrapper around openai provider
0.3.1
- Set searchEmbeddings to false by default
- Fix templated prompts not rendering as a template when not using chat-style prompts
- Add new searchEmbeddings function to AICore library for templates to use
0.3.0
- Don't index and generate embeddings for pages in Library/
- Add new AI: Enhance Note command to call existing
AI: Tag NoteandAI: Suggest Page Namecommands on a note, and the new frontmatter command - Add new AI: Generate Note FrontMatter command to extract useful facts from a note and add them to the frontmatter
- Always include the note’s current name in AI: Suggest Page Name as an option
- Log how long it takes to index each page when generating embeddings
- Improve the layout and UX of the AI: Search page
- Fix the
AI: Searchpage so it works in sync/online mode, requires Silverbullet >= 0.8.3 - Fix bug preventing changing models in sync mode
- Add Chat-style prompts support in Templated Prompts
- Fix bug when embeddingModels is undefined
0.2.0
- Vector search and embeddings generation by @justyns in #37
- Enrich chat messages with RAG by searching our local embeddings by @justyns in #38
- Refactor: Re-organize providers, interfaces, and types by @justyns in #39
- Add try/catch to tests by @justyns in #40
- Fix bug causing silverbullet to break when aiSettings isn't configured at all by @justyns in #42
- Add option to generate summaries of each note and index them. by @justyns in #43
- Disable indexing on clients, index only on server by @justyns in #44
- Set index and search events to server only by @justyns in #45
0.1.0
- BREAKING: Removed deprecated parameters: summarizePrompt, tagPrompt, imagePrompt, temperature, maxTokens, defaultTextModel, backwardsCompat. Except for defaultTextModel, these were no longer used.
- New AI: Suggest Page Name command
- Bake queries and templates in chat by @justyns in #30
- Allow completely overriding page rename system prompt, improve ux by @justyns in #31
- Always select a model if it's the only one in the list by @justyns in #33
- Pass all existing tags to generate tag command, allow user to add their own instructions too
0.0.11
- Support for custom chat message enrichment functions, see Custom Enrichment Functions
0.0.10
- Add WIP docs and docs workflow by @justyns in #20
- Enable slash completion for ai prompts
- Don't die if clientStore.get doesn't work, like in cli mode
0.0.9
- Add github action for deno build-release by @justyns in #18
- Add ability to configure multiple text and image models, and switch between them by @justyns in #17
- Fix error when imageModels is undefined in SETTINGS by @justyns in #22
- Re-add summarizeNote and insertSummary commands, fixes #19. Also add non-streaming support to gemini by @justyns in #24
0.0.8
- Add wikilink enrichment to chat messages for #9 by @justyns in #12
- Add a newline when the first message from the LLM is either a code fence or markdown block by @justyns in #13
0.0.7
- Added Perplexity AI API info by @zefhemel in #6
- Add Custom Instructions for chat by @justyns in #8
- Interfaces refactor by @justyns in #10
- Add experimental Google Gemini support for #3 by @justyns in #11
0.0.6
- Add a new command to prompt for a template to execute and render as a prompt
- Add insertAt option for prompt templates (page-start, page-end, cursor)
- Make the cursor behave nicer in interactive chats, fixes #1
- Remove 'Contacting LLM' notification and replace it with a loading placeholder for now #1
- Move some of the flashNotifications to console.log instead
- Dall-e: Use finalFileName instead of the prompt to prevent long prompts form breaking the markdown
- Add queryOpenAI function to use in templates later
- Update Readme for templated prompts, build potential release version
0.0.5
- Rename test stream command
- Add better error handling and notifications
- Misc refactoring to make the codebase easier to work on
- Automatically reload config from SETTINGS and SECRETS page
- Update readme for ollama/mistral.ai examples
- Use editor.insertAtPos instead of insertAtCursor to make streaming text more sane
- Add requireAuth variable to fix cors issue on chrome w/ ollama
- Remove redundant commands, use streaming for others
- Let chat on page work on any page. Add keyboard shortcut for it
- Move cursor to follow streaming response
0.0.4
- Add command for 'Chat on current page' to have an interactive chat on a note page
- Use relative image path name for dall-e generated images
- First attempt at supporting streaming responses from openai directly into the editor
0.0.3
- Add a new command to call openai using a user note or selection as the prompt, ignoring built-in prompts
- Add support for changing the openai-compatible api url and using a local LLM like Ollama
- Update jsdoc descriptions for each command and add to readme
- Save dall-e generated image locally
- Add script to update readme automatically
- Save and display the revised prompt from dall-e-3