Skip to main content
The Datasource Catalog is a global registry of all datasource definitions available in Findable. It lives in the datasources Cosmos DB container and serves as the single source of truth for what datasources exist and who can use them.

Three-Tier Architecture

Datasources operate across three distinct tiers — from global definitions down to per-chat runtime configuration:

Datasource Origin (DataSourceOrigin)

Every catalog entry has an origin field that determines who created it and what rules apply: This replaces the previous builtIn: boolean flag with a more expressive enum that supports future origin types.

Three Kinds of Datasources

The catalog contains three conceptually different kinds of datasources, all represented as IDataSource entities:

Datasource Lifecycle by Kind

Each kind follows a different lifecycle from catalog definition through to runtime: Kind 1 — Virtual (no infrastructure):
Kind 2 — File Storage (infrastructure created on demand):
For Personal/Workspace types, the index name is resolved at runtime from the user’s UPN — it is never stored on the chat. Kind 3 — Admin External (pre-existing infrastructure):

Retrieval Pipeline

The origin-based classification above describes who creates a datasource. The retrieval pipeline describes how data flows from a source into the RAG context at query time. Every datasource follows one of three paths:
Virtual — No retrieval infrastructure. llmknowledge uses the model’s training data; websearch injects live web results (Tavily, Brave, etc.). Physical (Index) — Documents live in storage (Azure Blob, OneDrive, or SharePoint) and are searchable via an Azure AI Search index. The index is auto-created per chat/user/library. Physical (Connection) — Documents are retrieved from an external system through a registered Data Connection (IDataConnection): Both connection-based paths are ACL-checked — the user must have access to the Data Connection in the registry before the query executes.

Security Model

The chat security guard (chatSecurityGuard.ts) validates datasource access differently per kind:

Built-In Datasource IDs

The following UUIDs are reserved for built-in datasource templates (prefix 0a):

Admin UI

The Datasources admin page (Admin → Datasource Catalog [#/admin/datasources]) presents all catalog entries in a data grid:
  • Built-in entries show a lock icon and cannot be deleted. Only name, description, tags, and permissions are editable.
  • Admin entries support full CRUD including connection details, type, and permissions.
  • Workspace Datasource Settings configure which catalog entries are activated by default for workspace and shared chats (IAppSettings.workspaceDataSources[] and defaultChatDataSources[]).

Chat Types & Data Sources

Chats in Findable use a multi-source RAG architecture. Each chat’s dataSources array (IDataSourceConfig[]) is the sole source of truth for where documents come from. A chat with an empty array operates in LLM-only mode (no retrieval).

Data Source Types (DATASOURCE_TYPE)

Each entry in the dataSources array has a type that determines storage, indexing, and retrieval behaviour:

IDataSourceConfig Fields

Every data source entry supports the following fields:

Multi-Source Result Merging

When a chat has multiple data sources, results are merged using the resultMergeStrategy field (RESULT_MERGE_STRATEGY enum) on IChatTabDBItem: The deduplicateResults boolean flag removes duplicate documents that appear across multiple sources.

Chat Classification (CHAT_KIND)

CHAT_KIND is a virtual, non-persisted runtime label derived at query time by getChatKind(chat). It is never stored in Cosmos DB and must not be used for ACL or storage decisions — those are governed by EntityScope. Use isSharedChat(), isWorkspaceChat(), isPersonalChat() from @eaai/shared rather than reading the enum value directly.

Key Files