refactor(knowledge-graph): minor UI and handler adjustments

This commit is contained in:
viettranx committed 2026-04-02 14:58:03 +07:00
1 parent 3da84fcded
commit 19d8faf28f
4 files changed
+20 -5

No files matched your search

+7 -1
View File
@@ -49,5 +49,11 @@ func (h *KnowledgeGraphHandler) RegisterRoutes(mux *http.ServeMux) {
}
func (h *KnowledgeGraphHandler) auth(next http.HandlerFunc) http.HandlerFunc {
return requireAuth("", next)
return requireAuth("", func(w http.ResponseWriter, r *http.Request) {
// KG management endpoints serve the admin UI — use shared KG context
// so queries don't require exact user_id match. Tenant isolation is
// still enforced via scopeClause (tenant_id filter).
ctx := store.WithSharedKG(r.Context())
next(w, r.WithContext(ctx))
})
}
@@ -67,6 +67,7 @@ func (h *KnowledgeGraphHandler) handleGetEntity(w http.ResponseWriter, r *http.R
relations, err := h.store.ListRelations(r.Context(), agentID, userID, entityID)
if err != nil {
slog.Warn("kg.list_relations failed", "agent_id", agentID, "entity_id", entityID, "user_id", userID, "error", err)
relations = []store.Relation{}
}
if relations == nil {
@@ -268,5 +268,7 @@ export function useKGTraversal(agentId: string) {
[http, agentId],
);
return { results, traversing, traverse };
const reset = useCallback(() => setResults([]), []);
return { results, traversing, traverse, reset };
}
@@ -26,7 +26,13 @@ export function KGEntityDetailDialog({ open, onOpenChange, agentId, entity, getE
const { t } = useTranslation("memory");
const [relations, setRelations] = useState<KGRelation[]>([]);
const [loadingRels, setLoadingRels] = useState(false);
const { results: traversalResults, traversing, traverse } = useKGTraversal(agentId);
const { results: traversalResults, traversing, traverse, reset: resetTraversal } = useKGTraversal(agentId);
// Reset state when entity changes to prevent stale data from previous entity
useEffect(() => {
setRelations([]);
resetTraversal();
}, [entity?.id, resetTraversal]);
const loadRelations = useCallback(async () => {
if (!entity) return;
@@ -52,9 +58,9 @@ export function KGEntityDetailDialog({ open, onOpenChange, agentId, entity, getE
traverse(entity.id, entity.user_id, 3);
}, [entity, traverse]);
// Auto-traverse on open
// Auto-traverse on open — always traverse since state is reset on entity change
useEffect(() => {
if (open && entity && traversalResults.length === 0 && !traversing) {
if (open && entity && !traversing) {
traverse(entity.id, entity.user_id, 3);
}
}, [open, entity]); // eslint-disable-line react-hooks/exhaustive-deps