ExuluContext your backend registers is converted into a table definition at boot and run through the same schema generator as the core tables — producing a full type family plus knowledge-specific operations.
From context to type name
The generated table (and type) name is the sanitized context ID — lowercased, spaces replaced with underscores — with an_items suffix:
Because the name always ends in
s, the singular and plural forms used by the naming conventions are identical — every operation for a context shares the single prefix {context_id}_items.
The generated type family
Take theproduct_docs context used throughout the developer docs:
chunks field exposes the item’s embedded chunks; its element type is part of the core SDL (verbatim):
Field type mapping
Operations every context gets
The full CRUD convention set applies —product_docs_itemsById, product_docs_itemsPagination, product_docs_itemsCreateOne, and so on:
job is the embedding job’s ID when the context is configured to calculate vectors on insert.
On top of CRUD, every context type adds retrieval and pipeline operations. Queries:
Vector search and chunks
VectorSearch is the retrieval workhorse — semantic, hybrid, or full-text search over the context’s chunks, with cutoffs, context expansion, and entity filters. It gets its own page: Vector search.
GenerateChunks (re-)chunks and embeds items matching a filter, returning { message, items, jobs }; DeleteChunks removes chunks while keeping the items. ChunkById fetches a single chunk joined with its parent item.
Sources and processors
ExecuteSource triggers one of the context’s registered data sources with runtime inputs, returning { message, jobs, items }:
{ message, results, jobs } — direct results when the processor runs inline, job IDs when it runs on a queue.
Entity operations
Contexts with the entity layer enabled maintain a graph of named entities extracted from chunks.EntitiesForItem lists an item’s entities with mention counts, StaleEntityCount reports items needing re-extraction, BackfillEntities re-extracts in bulk, ExtractEntities/DetachEntities operate on a single item, PurgeEntityType drops an entity type, and EntityModel/SetEntityModel read and override the extraction model.
License-gated tables
Some core tables only exist on deployments with an enterprise license (EXULU_ENTERPRISE_LICENSE). On a community-edition deployment their types and operations are absent from the schema entirely:
The generated reference SDL includes all of them. The internal
rbac sharing table itself is never exposed via GraphQL, even on licensed deployments — you interact with sharing through the RBAC field and RBACInput described in Conventions.
Runtime enums
Two enums are populated from the running deployment rather than from table definitions:QueueEnum— one value per queue registered withExuluQueuesat boot. It parameterizes thejobsandqueuequeries and the queue-management mutations (pauseQueue,resumeQueue,drainQueue,deleteJob,retryJob). In a deployment with no queues (or in the generated reference SDL) it contains the single placeholder valueNO_QUEUES.JobStateEnum— fixed job lifecycle states (verbatim):
Next steps
Vector search
The retrieval query in depth — methods, cutoffs, expansion, entity filters.
Defining contexts
Create the contexts that generate these types.