### Major Changes - ecd905d: # DocSearch v5-beta DocSearch v5 is a major release that introduces AI-powered answers via Agent Studio, a refreshed search UI, and a modernized package architecture. ## Ask AI & Agent Studio - Agent Studio integration with core tools and dynamic tool calls - Conversation memory support - Compatibility with the Algolia MCP search tool, with aggregated MCP search tool calls - Dynamic index selection for Agent Studio - Feedback integration, including feedback notes and tags - Prompt suggestions in keyword search and follow-up prompt suggestions - Ask AI modal split into its own component and Ask AI transport layer removed ## Search UI - Refreshed v5 UI with improved dark theme, sources panel, and accessibility - Faceted search with filter chips - Hit breadcrumbs and result badges ## Packaging & architecture - New `@docsearch/cli` package for MCP setup and search - MCP plugin support - Split JS bundles for search-only usage and JS-based hybrid mode - Migrated the build system to tsdown - Migrated CSS building to LightningCSS ## Breaking changes - Ask AI related props are now nested under a single root `askai` option - The Ask AI transport layer has been removed ### Patch Changes - ecd905d: feat(v5): General UI styling updates and fixes - New `--docsearch-font-family` variable, used by the search button, keyboard keys, modal, and sidepanel. It replaces the system font stacks that were duplicated across `sidepanel.css` and `button.css`, so overriding one variable now themes every DocSearch surface - The search input and modal heading are `1rem` at every breakpoint (previously `0.875rem` with a mobile-only override) - `.DocSearch-Title` uses `line-height: 1.5em` instead of `0.5em` and adds `overflow-wrap: anywhere`, so long titles wrap instead of overlapping (#2908) - Hit icon `svg` sizing moved into `.DocSearch-Hit-icon`. The `.DocSearch-Hit-icon--small` modifier is replaced by `.DocSearch-Hit-icon--start`, which top-aligns the icon; recent conversations use it - The Ask AI button icon centers with `display: inline-flex` instead of `margin-block-start`/`align-self` overrides - Removed the 2px offset on the Ask AI sources action text - `SourcesPanel` accepts `pluralTitleText`. `titleText` is now the singular label, and the trigger renders `{count} {label}` - `AskAiScreenTranslations` and `ConversationScreenTranslations` expose `relatedSourcesTextPlural` - Docusaurus adapter: `theme.SearchModal.askAiScreen.relatedSourcesText` is now the singular "Source", and the new `theme.SearchModal.askAiScreen.relatedSourcesTextPlural` provides "Sources" - ecd905d: feat(v5): UI and DX updates - Rename the Ask AI assistantId option to agentId (adapter theme.SearchModal.askAi.assistantId → agentId) - appId and apiKey moved up into @docsearch/core, so they're configured once and shared - Removed the indexName prop from the Sidepanel - Facet defaults can now be read from the index searchParameters - Restored nested grouping of search results - ecd905d: Surface Agent Studio cost-control errors and block prompts until the user can recover. [#2878](https://github.com/algolia/docsearch/pull/2878) - ecd905d: Prevent the slash search shortcut from intercepting key events on focused buttons. - ecd905d: Recognize current Agent Studio conversation-depth error messages. - ecd905d: Align Ask AI dynamic indices with Agent Studio completions: `askAi.indices` is now `string[]` (index names only). Use `askAi.searchParameters` for per-index runtime overrides. - ecd905d: Stop over-truncating mobile snippets and allow long search hits to wrap. - ecd905d: fix(askai): Ask AI fixes for v5 - `getMessageContent` now joins every assistant text part instead of stopping at the first one, so copying an answer that interleaves text with tool calls returns the complete response (#2782) - Key Ask AI conversation storage by `appId` instead of `indexName`, fixes triggering a new conversation in hybrid mode - Negative feedback panel is labelled with `aria-labelledby` and reason chips expose selection via `aria-pressed` (styling moved off the `--selected` modifier) - `Popover.Trigger` forwards refs, fixes sources panel not showing in some cases - Add `--docsearch-error-soft-color`, `--docsearch-error-text-color`, and `--docsearch-code-block-background` variables; restyle the Ask AI error panel and markdown code blocks to use them ``` ``` - ecd905d: Sanitize Ask AI Markdown HTML and URLs before rendering to prevent XSS. - ecd905d: fix(askai): support Agent Studio's batched MCP search tool The Algolia MCP search tool can now issue multiple queries in a single tool call (`queries[]`), which previously rendered as an empty query and broke consecutive tool-call aggregation. - `AlgoliaMCPSearchTool["input"]` accepts both the legacy single-query shape and the new batched `queries[]` shape, and tolerates a missing `output` - New `getSearchToolQueries()` helper normalizes query extraction across `searchIndex`, batched MCP, and legacy MCP tool parts - `ToolCall` renders one tool state per query for both `input-available` and `output-available` states - `groupConsecutiveToolResults` reuses the shared helper so batched calls aggregate correctly - Fix `AggregatedSearchBlock` keyboard handler comparing `e.key === 'enter'`, which never matched and made query chips unusable via keyboard - ecd905d: feat(v5): add customizable footer action - New `footerAction` prop renders a custom action in the modal footer, before the Algolia logo, inside `.DocSearch-Footer-Action` - `@docsearch/js` supports `footerAction` via template patterns (html helper, JSX, or function-based) - Fixes typing differences between `@docsearch/react` and `@docsearch/js` - Restyle the footer with a `.DocSearch-Footer-Actions` wrapper - ecd905d: Align CSS class and animation names with the `DocSearch-` naming convention. - The `shimmer` utility class is now `DocSearch-shimmer` - Fixed a typo in `DocSearck-AskAiScreen-MessageContent-Stopped`, now `DocSearch-AskAiScreen-MessageContent-Stopped` - Keyframes renamed to kebab-case: `shimmerText` → `shimmer-text`, `slideDown` → `slide-down`, `fadeIn` → `fade-in` - Dark theme selectors use `:root[data-theme='dark']` instead of `html[data-theme='dark']` - Dropped redundant type qualifiers from `.DocSearch-Hits-padded` and `.DocSearch-Hit-Select-Icon` selectors, slightly lowering their specificity If you override these classes or keyframes in custom styles, update your selectors accordingly. - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - Updated dependencies [ecd905d] - @docsearch/css@5.0.0 - @docsearch/core@5.0.0