Curiosity

Curiosity Components

The workspace ships pre-built Tesserae components that wrap search, graph traversal, and visualization against the live data — so you compose UI without re-implementing query shapes.

SearchArea

A full search experience: input box, facets, paginated results, ranking-aware. Configure with the same SearchRequest you'd use in an endpoint.

var search = SearchArea()
    .OnSearch(req => req.BeforeTypesFacet = new HashSet<string> { N.SupportCase.Type })
    .WithFacets();

OnSearch runs before each query and lets you mutate the SearchRequest (add TargetUIDs, switch on HybridSearch, narrow facets). For ACL-aware front-end search, the component already calls CreateSearchAsUserAsync under the hood — the caller's session is implicit.

Neighbors

Lists nodes reachable via a specific edge from a starting node. Useful in entity-centric views (parts of a device, messages of a case).

var parts = Neighbors(deviceNode.UID, N.Part.Type, E.HasPart)
                .WithFacets()
                .WithLimit(50);

GraphExplorerView

An interactive force-graph visualization. Give it a set of UIDs (or a query); the workspace expands neighbors on click.

var explorer = GraphExplorerView.ComponentFor(
    enableInteraction: true,
    uids:              myUIDs);

For a one-shot snapshot without panning/zooming, pass enableInteraction: false.

NodeViewer

Render a node using its registered INodeRenderer. Pass the UID; the workspace looks up the renderer for that node type.

var preview = NodeViewer.PreviewFor(caseNode.UID);
var full    = NodeViewer.ViewFor   (caseNode.UID);

This is how the default sidebar shows "preview on hover" and the search results render. Custom views can mix and match.

ChatPanel

A pre-built chat surface that wraps a custom endpoint. Designed for RAG endpoints that return { answer, citations[] }.

var chat = ChatPanel.For(
    endpointPath:    "kb-chat",
    citationRenderer: c => Link(c.SourceUrl).Children(TextBlock($"[{c.ArticleId}] {c.Title}")));

The component handles message history, RelayStatusAsync streaming, and rendering each citation through your callback.

Plotly

Wrapper around Plotly.js. Use for dashboards or simple data plots — anything more elaborate is usually better as a standalone view.

var chart = Plotly.NewBar()
    .Data(xs, ys)
    .Title("Cases by manufacturer");
© 2026 Curiosity. All rights reserved.