Add graph explorer components, API handlers, and dependency updates

Adds code inspector, file tree components, graph visualization JS,
graph API handlers, sidebar navigation updates, and misc improvements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sharang Parnerkar
2026-03-04 21:52:49 +01:00
parent cea8f59e10
commit b18824db25
16 changed files with 838 additions and 35 deletions

View File

@@ -31,7 +31,7 @@ petgraph = "0.7"
tantivy = "0.22"
# Serialization
bson = "2"
bson = { version = "2", features = ["chrono-0_4"] }
# Async streams
futures-util = "0.3"

View File

@@ -102,13 +102,22 @@ impl GraphEngine {
node_map.insert(node.qualified_name.clone(), idx);
}
// Resolve and add edges
// Resolve and add edges — rewrite target to the resolved qualified name
// so the persisted edge references match node qualified_names.
let mut resolved_edges = Vec::new();
for edge in parse_output.edges {
for mut edge in parse_output.edges {
let source_idx = node_map.get(&edge.source);
let target_idx = self.resolve_edge_target(&edge.target, &node_map);
let resolved = self.resolve_edge_target(&edge.target, &node_map);
if let (Some(&src), Some(tgt)) = (source_idx, target_idx) {
if let (Some(&src), Some(tgt)) = (source_idx, resolved) {
// Update target to the resolved qualified name
let resolved_name = node_map
.iter()
.find(|(_, &idx)| idx == tgt)
.map(|(name, _)| name.clone());
if let Some(name) = resolved_name {
edge.target = name;
}
graph.add_edge(src, tgt, edge.kind.clone());
resolved_edges.push(edge);
}