Skip to content
CAI
Software that uses CAICheck a score

ItzCrazyKns/Vane

34.6

Weak · 28 September 2026

15.6k

lines of production code

TypeScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Vane is a self-contained, Next.js-based AI research assistant that integrates a SearXNG metasearch engine to provide comprehensive information retrieval. It supports multi-modal queries including web, academic, social, image, and video search, while also offering specialized widgets for weather, stock, and calculation data. The system features a modular architecture for managing diverse AI model providers, enabling users to configure local or cloud-based LLMs and embedding models for chat, file analysis, and structured reasoning tasks.

Features

Add Gemini provider support

Users can now connect to Google's Gemini API by providing a Gemini API key in the server configuration. This change introduces a new provider implementation that automatically discovers available chat and embedding models from the Gemini API and exposes them for use, reusing the existing OpenAI-compatible client structure for model loading.

src/lib/models/providers/gemini · high confidence

Add LM Studio provider support

Users can now connect to local LM Studio servers for both chat and embedding models. This change introduces a new provider configuration requiring a Base URL (defaulting to localhost:1234), which automatically discovers available models via the LM Studio API and routes requests through OpenAI-compatible implementations.

src/lib/models/providers/lmstudio · high confidence

Add Transformers provider for local embedding models

Users can now use the Transformers provider to generate embeddings using local Hugging Face models. This new provider supports default embedding models such as all-MiniLM-L6-v2, mxbai-embed-large-v1, and nomic-embed-text-v1. It utilizes the @huggingface/transformers library to perform feature extraction with fp32 precision, enabling local inference for text embedding tasks without requiring external API calls.

src/lib/models/providers/transformers · high confidence

Add chat API endpoints and theme switching UI

This change introduces backend API routes for managing chats, including listing all chats and retrieving or deleting a specific chat by ID via the database. It also adds a theme provider and switcher component, enabling users to toggle between light and dark modes with system preference detection.

src/app/api/chats, src/components/theme · high confidence

Add citation rendering and code block support with syntax highlighting

The MessageRenderer component now supports displaying citations as styled links and rendering code blocks with syntax highlighting. A new Citation component renders references as small, themed links, while the CodeBlock component uses react-syntax-highlighter to display code with language-specific coloring. The code blocks automatically adapt to the user's system theme (light or dark) and include a copy-to-clipboard button for easy code extraction.

src/components/MessageRenderer · high confidence

Add support for Anthropic and Lemonade model providers

Users can now configure and use models from Anthropic and Lemonade. The Anthropic provider requires an API key and supports chat models, while the Lemonade provider requires a base URL (with an optional API key) and supports both chat and embedding models. These providers are added to the existing model provider system, allowing selection of their respective models in the application.

src/lib/models/providers/lemonade · high confidence

Add support for Groq as an LLM provider

Users can now select Groq as a model provider. The system fetches available chat models from the Groq API using a configured API key (via the GROQ\_API\_KEY environment variable) and allows loading chat models through the standard OpenAI-compatible endpoint. Embedding models are not supported by this provider.

src/lib/models/providers/groq · high confidence

Added image and video search agent capabilities

New agent modules for image and video search have been introduced in the media agents directory. The image search agent extracts search queries from conversation context and retrieves results from Bing and Google Images, while the video search agent performs similar extraction to fetch results specifically from YouTube. Both agents utilize structured LLM generation to parse user intent and return up to ten relevant media items with titles, URLs, and thumbnails.

src/lib/agents/media · high confidence

Added server-side session reconnection endpoint

A new API route at /api/reconnect/\[id\] allows clients to resume an existing session via a Server-Sent Events (SSE) stream. This endpoint retrieves the session by ID and forwards real-time updates—including block data, block patches, research completion, and errors—back to the client, enabling seamless reconnection without restarting the session.

src/app/api/reconnect · high confidence

Centralized provider registry and UI configuration generation

The application now exposes a unified registry of supported model providers (OpenAI, Ollama, Gemini, Transformers, Groq, Lemonade, Anthropic, and LM Studio) via a central index. This registry not only maps provider identifiers to their implementation classes but also dynamically generates the UI configuration sections required to display provider-specific settings in the interface, ensuring that the frontend configuration forms are automatically synchronized with the available backend providers.

src/lib/models/providers · high confidence

Initial database schema and migration setup for chats and messages

This change introduces the foundational database structure for the application, adding Drizzle ORM migration files and metadata snapshots for a SQLite database. The schema defines a \chats\ table (with fields for id, title, creation date, focus mode, and files) and a \messages\ table (with fields for id, content, chat association, message ID, type, and metadata). Subsequent migration snapshots indicate planned evolutions, such as adding source tracking to chats and expanding message details with backend IDs, queries, response blocks, and status fields, establishing the baseline data model for chat history and AI interactions.

drizzle · high confidence

Initial release of in-chat widgets for weather, calculations, and stocks

Users can now view rich, interactive widgets directly within the chat interface. This change introduces a new \Renderer\ component that dynamically displays three widget types: a Calculation widget showing expressions and results, a Weather widget displaying current conditions and forecasts with support for user unit preferences, and a Stock widget featuring real-time market data, key financial metrics, and interactive price charts across multiple timeframes.

src/components/Widgets · high confidence

Introduce calculation, stock, and weather widgets

The application now supports three new interactive widgets that appear based on user intent: a calculation widget for evaluating mathematical expressions, a stock widget for retrieving real-time quotes and historical charts via Yahoo Finance, and a weather widget for fetching current and forecasted conditions via Open-Meteo and OpenStreetMap. These widgets are registered in a central executor that runs them in parallel when the agent's classification indicates they are relevant, enriching the chat response with structured data and context.

src/lib/agents/search/widgets · high confidence

Introduce centralized client and server configuration management

A new configuration system has been added to manage application settings, separating client-side preferences (such as theme, measurement units, auto media search, and widget visibility) from server-side options (like the SearXNG search URL). The \clientRegistry\ reads these preferences from \localStorage\, while the \serverRegistry\ and \ConfigManager\ handle server-side configuration and model provider settings, providing a unified way to access and manage app preferences.

src/lib/config · high confidence

Introduce file upload and retrieval system with reciprocal reranking

Added an upload manager and store in src/lib/uploads that support processing PDF, DOCX, and plain text files. The manager extracts text, chunks it, generates embeddings, and persists the data, while the store implements a reciprocal rerank fusion algorithm to combine and rank search results from multiple uploaded files for improved relevance.

src/lib/uploads · high confidence

Introduce model registry and provider management infrastructure

This change establishes the core infrastructure for managing AI model providers. The new \ModelRegistry\ class handles the initialization, loading, and lifecycle management of provider instances, allowing users to dynamically add, remove, and update providers while automatically fetching available chat and embedding models. Supporting this are new TypeScript types in \types.ts\ that define the structure for providers, model lists, generation inputs/outputs (including tool support), and streaming responses, providing a standardized interface for interacting with different LLM backends.

src/lib/models · high confidence

Introduce new chat interface components and research step visualization

The chat interface has been restructured with new components: ChatWindow manages the main layout and loading states, Chat renders message sections with auto-scrolling, and AssistantSteps visualizes research sub-steps (reasoning, searching, reading) with expandable details. MessageBox now supports custom markdown overrides for citations and code blocks, ThinkBox handles thinking process display, and widgets like Weather and News are integrated into EmptyChat. MessageInput and EmptyChatMessageInput now use the useChat hook, support slash-keyboard shortcuts, and include model selector and source actions.

src/components · high confidence

Introduce useChat hook for centralized chat state and model management

Added the \useChat\ hook in \src/lib/hooks/useChat.tsx\ to centralize chat session logic, including message handling, file management, and model provider configuration. The hook manages state for messages, sections, and sources, and handles fetching available chat and embedding model providers from the \/api/providers\ endpoint to ensure valid model selection. It also implements logic to load existing chat history by ID and persist model preferences to local storage, providing a unified interface for chat-related operations across the application.

src/lib/hooks · high confidence

New AI suggestion generator prompt for search conversations

A new prompt template has been introduced to generate 4-5 relevant, medium-length follow-up suggestions based on the current conversation context. This feature is designed to help users discover more information by providing actionable queries tailored to the ongoing discussion, such as specific questions about topics like Elon Musk or Tesla.

src/lib/prompts/suggestions · high confidence

New API endpoint for generating chat suggestions

A new POST endpoint at /api/suggestions has been added to allow clients to request suggested follow-up messages. The endpoint accepts a chat history and a model configuration (provider ID and key), loads the specified chat model via the ModelRegistry, and returns generated suggestions. It handles the conversion of internal chat roles ('human'/'assistant') to the format expected by the suggestion generator.

src/app/api/suggestions · high confidence

New API endpoint for retrieving and updating application configuration

A new API route at /api/config has been introduced to allow clients to fetch and modify application settings. The GET handler retrieves the current configuration values and UI field definitions, enriching the model provider data with active model information from the registry. The POST handler accepts a key-value pair to update specific configuration entries, enabling dynamic configuration changes without restarting the service.

src/app/api/config · high confidence

New API endpoints for managing AI providers and their models

This change introduces a new set of API routes under \/api/providers\ to manage AI provider configurations and their associated models. Users can now create new providers, update existing ones, and delete providers via the \/api/providers\ and \/api/providers/\[id\]\ endpoints. Additionally, a new endpoint at \/api/providers/\[id\]/models\ allows for adding and removing specific models (chat or embedding) linked to a provider. These endpoints interact with the \ModelRegistry\ to handle the underlying data operations.

src/app/api/providers · high confidence

New Discover API endpoint with topic filtering and preview mode

A new API route at /api/discover has been added to fetch curated news articles based on specific topics (tech, finance, art, sports, entertainment). The endpoint supports a 'normal' mode that aggregates results from predefined sources, deduplicates them, and returns them in a random order, as well as a 'preview' mode that fetches a single random result from the selected topic. All searches are performed via Searxng using Bing News with English language filtering.

src/app/api/discover · high confidence

New Discover page with topic-based news filtering

A new Discover page has been added, allowing users to browse news articles filtered by specific topics such as Tech & Science, Finance, Art & Culture, Sports, and Entertainment. The interface features a topic selection bar that dynamically updates the displayed content, rendering major news items and grouped smaller cards on desktop, while showing a simple grid on mobile. The page also includes a custom font for the header and handles loading states with a spinner.

src/app/discover · high confidence

New Ollama provider implementation with function calling and reasoning model support

This change introduces the Ollama provider implementation, enabling users to connect to local or remote Ollama instances via a configurable base URL. The new provider supports function calling (tool use) for both text generation and streaming, automatically mapping tool definitions to Ollama's format. It also includes specific handling for reasoning models (such as deepseek-r1, qwen3, and nemotron variants) by explicitly disabling the 'think' parameter to ensure compatibility. Additionally, the implementation handles embedding generation and includes logic to repair JSON before parsing when generating structured objects.

src/lib/models/providers/ollama · high confidence

New Researcher agent with iterative tool use and streaming reasoning

A new Researcher class has been introduced in the search agent library to handle complex, multi-step research tasks. It operates in an iterative loop, calling available tools (such as web search) based on a dynamic prompt and the current conversation history. The agent supports different operational modes ('speed', 'balanced', 'default') that limit the maximum number of iterations. A key feature is the streaming of internal reasoning steps via a \\_\_reasoning\_preamble\ tool call, which updates a user-visible research block in real-time. The process concludes when a 'done' tool is called or no further tool calls are generated, finally returning filtered search results.

src/lib/agents/search/researcher · high confidence

New UI components for loading states and select inputs

Added a new Loader component that renders a spinning SVG icon for visual feedback during asynchronous operations, and a new Select component that wraps native select elements with custom styling and supports a loading state that displays a spinner and disables interaction while data is being fetched.

src/components/ui · high confidence

New chat API endpoint with structured request validation and streaming responses

A new POST endpoint at /api/chat has been introduced to handle chat interactions, replacing previous backend logic. The endpoint enforces strict input validation using Zod schemas for messages, chat/embedding models, optimization modes, and optional sources or files. It supports streaming responses via Server-Sent Events, emitting specific event types such as 'block', 'updateBlock', and 'researchComplete' to allow clients to render incremental content updates. The service also manages chat history persistence and integrates with a model registry to load the appropriate LLM and embedding models based on the request payload.

src/app/api/chat · high confidence

New chat page route using ChatWindow component

A new dynamic route at /c/\[chatId\] has been added to the application. This page acts as a client-side wrapper that renders the existing ChatWindow component, enabling users to access specific chat conversations via the new URL structure.

src/app/c · high confidence

New file upload API endpoint with model registry integration

A new POST endpoint at /api/uploads has been introduced to handle file uploads. This endpoint accepts file data along with specific embedding model and provider identifiers, validates their presence, and utilizes a new ModelRegistry to load the appropriate embedding model. The files are then processed by an UploadManager, returning the processed file details to the user. This change shifts the upload logic to rely on the new model registry and manager components.

src/app/api/uploads · high confidence

New image and video search prompt templates

Added new prompt definitions for image and video search capabilities. The system now includes specific instructions and few-shot examples to rephrase follow-up questions into standalone queries optimized for searching the web for images and YouTube for videos, respectively.

src/lib/prompts/media · high confidence

New image search API endpoint

A new POST endpoint at /api/images has been added to support image search functionality. This endpoint accepts a query, chat history, and LLM model configuration, utilizing the new ModelRegistry to load the specified chat model and invoking the image search agent to return relevant images.

src/app/api/images · high confidence

New message input action controls for model selection, optimization, and sources

The MessageInputActions component now includes dedicated UI controls for configuring chat behavior before sending a message. Users can select a specific chat model provider and model via a searchable popover, choose an optimization mode (Speed, Balanced, or Quality) to influence response characteristics, and toggle data sources (Web, Academic, Social) to filter where the model retrieves information. Additionally, the file attachment interface has been updated to support uploading PDF, DOCX, and TXT files, displaying attached files in a popover with options to add or clear them, and providing immediate feedback on upload success or failure.

src/components/MessageInputActions · high confidence

New model and connection management in Settings

The Models settings section has been rebuilt to allow users to manage AI provider connections and select specific models. Users can now add, update, and delete provider connections (e.g., OpenAI, Anthropic) via new dialogs, and configure individual chat and embedding models for each provider. A dedicated selector allows choosing the active chat or embedding model, with the selection persisted to localStorage and applied to the chat context.

src/components/Settings/Sections/Models · high confidence

New modular settings dialog with dedicated sections

The application now features a new settings interface, accessible via a dedicated button, which organizes configuration into distinct sections: Preferences, Personalization, Models, and Search. This change introduces new components for rendering specific setting types (such as switches and textareas) and handles saving configurations to both local storage and the server API, replacing the previous unified settings view.

src/components/Settings · high confidence

New search API endpoint with streaming support

A new search API route has been added at src/app/api/search that accepts a query, chat history, and configuration options (such as optimization mode, sources, and system instructions) to perform a search operation. The endpoint supports both standard JSON responses and newline-delimited JSON streaming, allowing clients to receive real-time updates for search results and LLM responses while maintaining the ability to abort the stream.

src/app/api/search · high confidence

New search agent with LLM-based classification and widget execution

The search module now uses a new agent architecture that classifies user queries via an LLM to determine whether to perform a web, academic, or discussion search, or to trigger specific widgets (weather, stock, calculation). The main SearchAgent persists message history to the database and emits structured blocks, while the APISearchAgent provides a streamlined version without database persistence. Both agents combine search results and widget outputs into a unified context for the final response generation.

src/lib/agents/search · high confidence

New session management, web scraping, and search capabilities

This update introduces a new session management system in \src/lib/session.ts\ that tracks conversation blocks and supports real-time subscriptions via RFC6902 JSON patches, ensuring state persists across reloads. A new web scraper (\src/lib/scraper.ts\) is added, utilizing Playwright and Readability to extract clean text content from URLs. Search functionality (\src/lib/searxng.ts\) has been refactored to use native \fetch\ instead of Axios, includes a 10-second timeout, and retrieves its base URL from a new server registry. Additionally, new type definitions (\src/lib/types.ts\) define structured message roles (User, Assistant, System, Tool) and various content blocks (Text, Source, Research, Suggestion, Widget) to support these features.

src/lib · high confidence

New setup wizard with connection and model selection steps

The application now features a new setup wizard that guides users through configuring their AI environment. Upon launch, users see a welcome screen before being presented with a multi-step configuration process. The first step allows users to manage and add AI model connections (providers) via an 'Add Connection' dialog, fetching available providers from the backend. The second step enables users to select specific chat and embedding models from the configured providers. The wizard ensures that users can only proceed to model selection if at least one provider with available models is configured, and finalization requires a chat model to be selected.

src/components/Setup · high confidence

New specialized search actions for academic, social, and web sources

The search module now includes dedicated action handlers for academic, social, and web searches, all unified under a new \executeSearch\ function in \baseSearch.ts\. This centralizes the search execution logic, handling query processing, SearXNG integration, embedding-based similarity filtering, and duplicate removal. The \academicSearch\ action targets scholarly sources (arXiv, Google Scholar, PubMed), \socialSearch\ focuses on Reddit discussions, and \webSearch\ provides general web search capabilities with mode-specific prompts (speed, balanced, quality). These changes enable more targeted and context-aware information retrieval for different types of user queries.

src/lib/agents/search/researcher/actions/search · high confidence

New suggestion generator agent for chat history analysis

A new suggestion generator agent has been added to the application, located at src/lib/agents/suggestions. This component analyzes the user's chat history and uses a large language model to generate a list of suggested follow-up questions or prompts. It utilizes a specific prompt template and a Zod schema to ensure the output is a structured array of strings, providing users with contextual next-step suggestions based on their previous interactions.

src/lib/agents/suggestions · high confidence

New text processing and similarity utility functions

Added several new utility functions to the library: cosine similarity calculation (computeSimilarity), Jaccard similarity for text comparison (jaccardSim), SHA-256 object hashing (hashObj), file detail retrieval (getFileDetails), chat history formatting (formatHistory), and token-based text splitting with overlap support (splitText) including a token counting function (getTokenCount). These utilities provide core text analysis and formatting capabilities for downstream features.

src/lib/utils · high confidence

New video search API endpoint

A new POST endpoint at /api/videos has been added to handle video search requests. This endpoint accepts a query, chat history, and a chat model configuration, loads the specified language model via the new ModelRegistry, and returns a list of relevant videos. It also normalizes chat history roles from 'human'/'assistant' to 'user'/'assistant' before processing.

src/app/api/videos · high confidence

New weather API endpoint with unit selection

A new API route at /api/weather has been added, allowing clients to request current weather data for specific coordinates while choosing between Imperial and Metric measurement units. The endpoint accepts latitude, longitude, and a measureUnit parameter, returning structured data including temperature, humidity, wind speed, and a descriptive condition string mapped from Open-Meteo weather codes.

src/app/api/weather · high confidence

OpenAI provider integration with function calling support

The OpenAI provider now supports function calling (tool use) for both standard and streaming text generation. The provider registers a comprehensive list of default chat models (including GPT-4o, o1, o3, and GPT-5 variants) and embedding models. The implementation handles tool definitions via Zod schemas, processes assistant messages containing tool calls, and manages the streaming of tool call arguments using partial JSON parsing.

src/lib/models/providers/openai · high confidence

Research agent introduces structured reasoning, multi-source search, and file upload capabilities

The search agent now enforces a structured research workflow by requiring a 'reasoning' step (renamed from 'plan') to outline the approach before executing any other actions. It supports searching across multiple sources—including web, academic, social, and user-uploaded files—via dedicated actions that are conditionally enabled based on configuration and available data. A new 'done' action allows the agent to explicitly signal completion, and a 'scrape URL' action extracts and summarizes content from specific pages. The action registry manages these tools, filtering them by mode (e.g., disabling reasoning in 'speed' mode) and source availability.

src/lib/agents/search/researcher/actions · high confidence

Vane now ships as a single Docker image bundling the Next.js app and SearXNG search engine

The application has been rebranded to Vane and its deployment architecture has shifted from a multi-container setup (separate frontend, backend, and SearXNG services) to a single, self-contained Docker image. This new image includes the Next.js application, the SearXNG metasearch engine, and the necessary entrypoint scripts to run both services together, significantly simplifying installation and configuration for users. The project also introduces a 'slim' Docker image variant for users who prefer to run SearXNG separately, and updates the Next.js configuration to support standalone output and local LLM integrations.

(repo-wide) · high confidence

Removals

Removal of CSS class merging utility

The \cn\ utility function, which previously combined \clsx\ and \tailwind-merge\ to merge CSS class names, has been removed from the codebase. This change eliminates the centralized helper for conditional class merging, meaning any components or modules that previously relied on this specific \cn\ export will no longer have access to it and may require alternative implementations or direct usage of the underlying libraries.

ui/lib · high confidence

Removal of UI project configuration and environment files

The UI directory has had its foundational configuration files removed, including the environment example file (\.env.example\), the TypeScript configuration (\tsconfig.json\), the Tailwind CSS configuration (\tailwind.config.ts\), global styles (\globals.css\), code formatting rules (\.prettierrc.js\), and the gitignore file (\.gitignore\). This effectively strips the UI location of its build, styling, and environment setup definitions.

ui · high confidence

Removal of WebSocket backend infrastructure

The WebSocket-based backend implementation has been removed from the application. This change deletes the core server setup, connection management, and message handling logic located in the \src/websocket\ directory, including \connectionManager.ts\, \index.ts\, \messageHandler.ts\, and \websocketServer.ts\. Users will no longer be able to interact with the application via the previous WebSocket protocol.

src/websocket · high confidence

Removal of image search route

The image search functionality has been removed from the application. The \src/routes/images.ts\ file, which previously handled POST requests to search for images using the \imageSearchChain\, has been deleted. Additionally, the \src/routes/index.ts\ file, which mounted the image router at the \/images\ path, has been removed, effectively disabling the image search endpoint for users.

src/routes · high confidence

Removal of legacy chat UI components

The \Chat\, \ChatWindow\, \EmptyChat\, \MessageBox\, \MessageBoxLoading\, \MessageInputActions\, and \Navbar\ components have been removed from the \ui/components\ directory. This deletion eliminates the previous implementation of the chat interface, including its WebSocket message handling, source rendering, and input actions, indicating a structural shift in how the chat feature is architected.

ui/components · high confidence

Removal of legacy image and web search agents

The \imageSearchAgent\, \webSearchAgent\, and \agentPicker\ modules have been removed from the codebase. This eliminates the previous implementation that relied on \OpenAI\ (GPT-3.5-turbo) for query rephrasing and agent selection, as well as the specific LangChain chains used for image and basic web search retrieval. Users will no longer have access to these specific agent implementations, which are being replaced by newer agent architectures (such as \MetaSearchAgent\) introduced in other parts of the update.

src/agents · high confidence

Removed backend server and utility modules

The application no longer includes the Express-based API server, WebSocket support, or specific utility functions for computing vector similarity and formatting chat history. These components have been removed from the source code, indicating a shift away from the previous backend architecture in this location.

src · high confidence

Behavioural changes

App rebranded to 'Vane' with setup wizard and chat provider integration

The application has been rebranded from 'Perplexica' to 'Vane' across the layout, page metadata, and web manifest (including icons and screenshots). The root layout now integrates a SetupWizard that is displayed if the application has not yet been configured, replacing the previous immediate rendering of the chat interface. Once setup is complete, the app wraps the chat interface in a ChatProvider and ThemeProvider, and includes a Toaster for notifications. Additionally, global styles have been updated to include custom scrollbar styling, a 'line-clamp-2' utility class, and iOS-specific font size adjustments to prevent input zoom.

src/app · high confidence

Database schema migration to support sources and response blocks

The application now uses a new database schema and migration system to handle chat data. The \messages\ table has been restructured to include \responseBlocks\ (JSON) and \status\ fields, replacing the previous structure that stored messages as separate entities with a \metadata\ field. The \chats\ table now includes \sources\ and \files\ fields, also stored as JSON. A migration script (\migrate.ts\) is included to automatically transform existing data from the old format to the new one, specifically handling the conversion of message metadata and chat files/sources into the new schema structure.

src/lib/db · high confidence

Introduction of base model provider architecture

The system now introduces a new foundational architecture for AI model providers, defined by new abstract base classes in the \src/lib/models/base\ directory. \BaseModelProvider\ serves as the core interface for managing model lists and instantiating specific models, while \BaseLLM\ and \BaseEmbedding\ define the standardized contracts for text generation, streaming, and embedding tasks. Notably, the LLM base class now utilizes Zod for return type inference, ensuring that generated objects and streamed partials are strictly typed according to the input schema. A helper utility, \createProviderInstance\, is also provided to handle the instantiation of provider classes using their static validation and configuration methods.

src/lib/models/base · high confidence

Library page displays past chats with sources and file counts

The Library section now presents a client-side view of previous conversations, fetching data from the /api/chats endpoint. Users can see a list of past chats including their titles, relative timestamps, associated sources, and uploaded file counts. Each entry links to the specific chat detail page and includes a delete option, while an empty state guides users to start a new chat.

src/app/library · high confidence

New Major and Small News Card components for the Discover page

The Discover page now uses dedicated MajorNewsCard and SmallNewsCard components to render news items. MajorNewsCard displays a large, horizontal layout with a prominent title using the 'PP Editorial, serif' font family, while SmallNewsCard presents a compact, vertical card with a thumbnail and summary. Both components feature hover effects that scale the images and highlight the title in cyan, and they link to a search result filtered by the item's URL.

src/components/Discover · high confidence

New modular prompt architecture for search, research, and writing agents

The search workflow now uses distinct, specialized prompt modules for classification, research orchestration, and final response generation. The classifier determines whether to skip search, use personal documents, or trigger specific widgets (weather, stock, calculation). The researcher agent orchestrates tool usage with configurable modes (speed, balanced, quality) and enforces a reasoning preamble before tool calls to improve traceability and compliance. The writer agent generates detailed, cited, blog-style responses with strict citation requirements and tone guidelines, supporting user-provided system instructions and quality-mode depth constraints.

src/lib/prompts/search · high confidence

Updated message action components with new data model and styling

The Copy and Rewrite buttons in the message actions bar have been refactored to align with a new section-based architecture. The Copy component now accepts a 'section' object instead of a 'message', extracting citation sources from response blocks and handling file-based URLs with fallback names. The Rewrite button has switched its icon from 'ArrowLeftRight' to 'Repeat' and updated its styling to use semantic color variables (light/dark mode support) and rounded-full shapes, matching the updated Copy button's visual style.

src/components/MessageActions · high confidence

Dependencies

Project rebranded to 'vane' with major dependency overhaul and Next.js migration

The application has been rebranded from 'perplexica' to 'vane' and migrated to a Next.js architecture, replacing the previous Express-based backend. This change introduces a significantly expanded dependency list, including new integrations for Google GenAI, Hugging Face Transformers, Ollama, and better-sqlite3, while removing older packages like langchain and compute-dot. The update also upgrades core libraries such as Next.js (to v16), React, and Tailwind UI components, and adds support for features like file uploads, PDF generation, and text-to-speech.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 33 → 35 (+1.8)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 61 → 76 (+14.8)
  • Architecture 74 (new)
  • Maturity 56 → 62 (+5.9)
  • Readiness 12 → 11 (-1.2)
  • Security 49 → 58 (+9.0)
  • Accessibility 47 (new)
  • Performance 60 (new)

Resolved (67)

  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • High CVE: [GHSA redacted] (yarn.lock)
  • …and 47 more

New (135)

  • AssistantSteps.AssistantSteps (cognitive 27) (src/components/AssistantSteps.tsx)
  • AssistantSteps.AssistantSteps (cyclomatic 38) (src/components/AssistantSteps.tsx)
  • AssistantSteps.getStepTitle (cognitive 19) (src/components/AssistantSteps.tsx)
  • Change coupling: EmptyChatMessageInput.tsx ↔ MessageInput.tsx (src/components/EmptyChatMessageInput.tsx)
  • Change coupling: SearchImages.tsx ↔ SearchVideos.tsx (src/components/SearchImages.tsx)
  • ChatModelSelector.ModelSelector (cyclomatic 17) (src/components/MessageInputActions/ChatModelSelector.tsx)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical vulnerability: [GHSA redacted] (yarn.lock)
  • FileTooLong: hooks/useChat.tsx (src/lib/hooks/useChat.tsx)
  • FunctionTooLong: Attach.Attach (src/components/MessageInputActions/Attach.tsx)
  • FunctionTooLong: AttachSmall.AttachSmall (src/components/MessageInputActions/AttachSmall.tsx)
  • FunctionTooLong: ChatModelSelector.ModelSelector (src/components/MessageInputActions/ChatModelSelector.tsx)
  • FunctionTooLong: MessageSources.MessageSources (src/components/MessageSources.tsx)
  • FunctionTooLong: Navbar.Navbar (src/components/Navbar.tsx)
  • FunctionTooLong: Stock.Stock (src/components/Widgets/Stock.tsx)
  • FunctionTooLong: Weather.getWeatherInfo (src/components/Widgets/Weather.tsx)
  • FunctionTooLong: WeatherWidget.WeatherWidget (src/components/WeatherWidget.tsx)
  • FunctionTooLong: migrate.fs.readdirSync().filter() (src/lib/db/migrate.ts)
  • FunctionTooLong: migrate.fs.readdirSync().filter().sort().forEach() (src/lib/db/migrate.ts)
  • …and 115 more

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • (root) — 1 commit

Notable commits

  • change: Update README.md

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

ItzCrazyKns/Vane was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 348feca3e378fb4157b217724ed508dc707f853f — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-24a00d372a4b.