diff --git a/README.md b/README.md
index c366a3d9..432fbb29 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
-[](https://pypi.org/project/trustgraph/) [](LICENSE) 
+[](https://pypi.org/project/trustgraph/)  
[](https://discord.gg/sQMwkRz5GX) [](https://deepwiki.com/trustgraph-ai/trustgraph)
@@ -11,11 +11,11 @@
-# The agent runtime platform
+# The semantic deployment platform
-TrustGraph is an agent runtime platform built around context graphs — structured, queryable representations of your domain knowledge that ground every agent query in verified, explainable facts in private deployments with sovereign control. The platform is the full stack for agentic systems: context graphs, memory, retrieval, orchestration, and inference for precision-critical agent workloads.
+TrustGraph is a comprehensive semantic infrastructure for agents built around context graphs — structured, queryable representations of your domain knowledge that ground every agent query in verified, explainable facts in private deployments with sovereign control. The platform is the full stack for agentic systems: context graphs, memory, retrieval, orchestration, and inference for deterministic agent workloads.
The platform:
- [x] Multi-model and multimodal database system
@@ -99,23 +99,21 @@ For a browser based configuration, try the [Configuration Terminal](https://conf
- [**Developer APIs and CLI**](https://docs.trustgraph.ai/reference)
- [**Deployment Guides**](https://docs.trustgraph.ai/deployment)
-## Workbench
+## Context Graph UI
-The **Workbench** provides tools for all major features of TrustGraph. The **Workbench** is on port `8888` by default.
+
-- **Vector Search**: Search the installed knowledge bases
-- **Agentic, GraphRAG and LLM Chat**: Chat interface for agents, GraphRAG queries, or direct to LLMs
-- **Relationships**: Analyze deep relationships in the installed knowledge bases
-- **Graph Visualizer**: 3D GraphViz of the installed knowledge bases
-- **Library**: Staging area for installing knowledge bases
-- **Flow Classes**: Workflow preset configurations
-- **Flows**: Create custom workflows and adjust LLM parameters during runtime
-- **Knowledge Cores**: Manage resuable knowledge bases
-- **Prompts**: Manage and adjust prompts during runtime
-- **Schemas**: Define custom schemas for structured data knowledge bases
-- **Ontologies**: Define custom ontologies for unstructured data knowledge bases
-- **Agent Tools**: Define tools with collections, knowledge cores, MCP connections, and tool groups
-- **MCP Tools**: Connect to MCP servers
+The UI provides tools for all major features of TrustGraph. The UI deploys on port `8888` by default.
+
+- **Agent Console** — Query your agents directly with streaming responses and live explainability event tracking, so you can watch reasoning unfold in real time
+- **GraphRAG View** — Interactive graph RAG queries with a visual explainability DAG and inline provenance display, making it easy to see exactly where answers came from
+- **Context Explorer** — An interactive 3D context graph explorer with dynamic graph loading, BFS neighborhood extraction, edge pulse animation, and multiple navigation views
+- **Document Ingestion** — A complete upload and submission workflow with page and chunk inspection and document structure browsing
+- **Ontology Workbench** — A full ontology editor with class and property trees, OWL/XML and Turtle import/export with round-trip fidelity, circular dependency detection, and safe-delete confirmation dialogs
+- **Schema Workbench** — Interactive schema management with list, create, edit, and delete operations including field and index management
+- **Flow Management** — Flow creation and detail views with configurable parameters, temperature controls, and grouped storage layout
+- **Workspace UX** — Workspace selection and management surfaced directly in the interface
+- **Prompt Editor** — A dedicated prompt editing workflow
## TypeScript Library for UIs
diff --git a/containers/Containerfile.hf b/containers/Containerfile.hf
index 93768b54..9cc6c2c8 100644
--- a/containers/Containerfile.hf
+++ b/containers/Containerfile.hf
@@ -23,7 +23,7 @@ RUN pip3 install --no-cache-dir \
langchain==1.2.16 langchain-core==1.3.2 langchain-huggingface==1.2.2 \
langchain-community==0.4.1 \
sentence-transformers==5.4.1 transformers==5.7.0 \
- huggingface-hub==1.13.0 \
+ huggingface-hub==1.13.0 click \
pulsar-client==3.11.0
# Most commonly used embeddings model, just build it into the container
diff --git a/containers/Containerfile.unstructured b/containers/Containerfile.unstructured
index 6de8a800..2b9a18f7 100644
--- a/containers/Containerfile.unstructured
+++ b/containers/Containerfile.unstructured
@@ -7,7 +7,7 @@ FROM docker.io/fedora:42 AS base
ENV PIP_BREAK_SYSTEM_PACKAGES=1
-RUN dnf install -y python3.13 libxcb mesa-libGL && \
+RUN dnf install -y python3.13 libxcb mesa-libGL poppler-utils && \
alternatives --install /usr/bin/python python /usr/bin/python3.13 1 && \
python -m ensurepip --upgrade && \
pip3 install --no-cache-dir --upgrade 'pip>=26.0' 'setuptools>=78.1.1' && \
diff --git a/dev-tools/library_client.py b/dev-tools/library_client.py
index ae9d6857..30e0c344 100644
--- a/dev-tools/library_client.py
+++ b/dev-tools/library_client.py
@@ -25,7 +25,7 @@ BUCKET_URL = "https://storage.googleapis.com/trustgraph-library"
INDEX_URL = f"{BUCKET_URL}/index.json"
default_url = os.getenv("TRUSTGRAPH_URL", "http://localhost:8088/")
-default_user = "trustgraph"
+default_workspace = os.getenv("TRUSTGRAPH_WORKSPACE", "default")
default_token = os.getenv("TRUSTGRAPH_TOKEN", None)
@@ -113,7 +113,7 @@ def convert_metadata(metadata_json):
return triples
-def load_document(api, user, doc_entry):
+def load_document(api, doc_entry):
"""Fetch metadata and content for a document, then load into TrustGraph."""
doc_id = doc_entry["id"]
title = doc_entry["title"]
@@ -133,7 +133,6 @@ def load_document(api, user, doc_entry):
api.add_document(
id=doc["id"],
metadata=metadata,
- user=user,
kind=doc["kind"],
title=doc["title"],
comments=doc["comments"],
@@ -144,12 +143,12 @@ def load_document(api, user, doc_entry):
print(f" done.")
-def load_documents(api, user, docs):
+def load_documents(api, docs):
"""Load a list of documents."""
print(f"Loading {len(docs)} document(s)...\n")
for doc in docs:
try:
- load_document(api, user, doc)
+ load_document(api, doc)
except Exception as e:
print(f" FAILED: {e}", file=sys.stderr)
print()
@@ -166,8 +165,8 @@ def main():
help=f"TrustGraph API URL (default: {default_url})",
)
parser.add_argument(
- "-U", "--user", default=default_user,
- help=f"User ID (default: {default_user})",
+ "-w", "--workspace", default=default_workspace,
+ help=f"Workspace (default: {default_workspace})",
)
parser.add_argument(
"-t", "--token", default=default_token,
@@ -212,22 +211,22 @@ def main():
return
# Load commands need the API
- api = Api(args.url, token=args.token).library()
+ api = Api(args.url, token=args.token, workspace=args.workspace).library()
if args.command == "load-all":
- load_documents(api, args.user, index)
+ load_documents(api, index)
elif args.command == "load-doc":
matches = [d for d in index if str(d.get("id")) == args.id]
if not matches:
print(f"No document with ID '{args.id}' found.", file=sys.stderr)
sys.exit(1)
- load_documents(api, args.user, matches)
+ load_documents(api, matches)
elif args.command == "load-match":
results = search_index(index, args.query)
if results:
- load_documents(api, args.user, results)
+ load_documents(api, results)
else:
print("No matches found.", file=sys.stderr)
sys.exit(1)
diff --git a/docs/api.html b/docs/api.html
index 2a03a38b..a98b3675 100644
--- a/docs/api.html
+++ b/docs/api.html
@@ -12,417 +12,417 @@
margin: 0;
}
-