feat: add Relations tab with force-directed resource dependency graph (#96)

Add a new "Relations" tab after "Images" that visualizes resource
dependencies within a Helm release as an interactive force-directed graph.
Detects relationships via ownerReferences, *Ref fields, volumes, env refs,
service selectors, ingress backends, and RBAC bindings. External resources
appear as dashed oval ghost nodes. Color-coded by resource category.

Closes #96

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Andrei Pohilko
2026-03-17 17:58:00 +00:00
parent 443207191d
commit cfc28cf3a0
10 changed files with 7717 additions and 0 deletions

View File

@@ -182,6 +182,16 @@ func (h *HelmHandler) Images(c *gin.Context) {
c.IndentedJSON(http.StatusOK, images)
}
func (h *HelmHandler) Relations(c *gin.Context) {
rel := h.getRelease(c)
if rel == nil {
return
}
graph := objects.ExtractRelations(rel.Orig.Manifest)
c.IndentedJSON(http.StatusOK, graph)
}
func (h *HelmHandler) RepoVersions(c *gin.Context) {
qp, err := utils.GetQueryProps(c)
if err != nil {