mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-14 16:17:25 +00:00
refactor(knowledge-graph): minor UI and handler adjustments
This commit is contained in:
1 parent
3da84fcded
commit
19d8faf28f
4 files changed
+20
-5
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user